Example #1
0
        public void Infer(K210Conv2d layer, K210Conv2dLayerArgument argument, InferenceContext context)
        {
            var inputAlloc = context.KPUMemoryMap[layer.Input.Connection.From];
            MemoryAllocation outputAlloc;

            argument.Config.InputAddress = inputAlloc.GetAddress();

            if (context.MainMemoryMap.TryGetValue(layer.Output, out var mainAlloc))
            {
                argument.Flags = K210LayerFlags.MainMemoryOutput;
                argument.MainMemoryOutputAddress = mainAlloc.GetAddress();
                outputAlloc = context.GetOrAllocateKPUMemory(layer.Output);
            }
            else
            {
                argument.Flags = K210LayerFlags.None;
                outputAlloc    = context.KPUMemoryMap[layer.Output];
            }

            argument.Config.OutputAddress = outputAlloc.GetAddress();
        }
Example #2
0
        public K210Conv2dLayerArgument DeserializeBin(int offset, K210BinDeserializeContext context)
        {
            var sr       = context.GetReaderAt(offset);
            var argument = new K210Conv2dLayerArgument();

            argument.Flags = sr.Read <K210LayerFlags>();
            argument.MainMemoryOutputAddress = sr.Read <uint>();
            argument.ParamAddress            = new K210Conv2dParamAddress
            {
                Layer      = sr.Read <uint>(),
                Weights    = sr.Read <uint>(),
                Bn         = sr.Read <uint>(),
                Activation = sr.Read <uint>()
            };

            DeserializeBinLayer(argument, context);
            DeserializeBinWeights(argument, context);
            DeserializeBinBn(argument, context);
            DeserializeBinActivation(argument, context);

            return(argument);
        }
Example #3
0
        public void GenerateBin(BinaryWriter bw, K210Conv2dLayerArgument argument, K210BinGenerationContext context)
        {
            bw.Write((uint)argument.Flags);
            bw.Write(argument.MainMemoryOutputAddress);
            // Param addresses
            var fixPosition = bw.BaseStream.Position;

            bw.BaseStream.Position += 4 * 4;

            GenerateBinLayer(bw, argument.Config, argument.ParamAddress, context);
            GenerateBinWeights(bw, argument.Config, argument.ParamAddress, context);
            GenerateBinBn(bw, argument.Config, argument.ParamAddress, context);
            GenerateBinActivation(bw, argument.Config, argument.ParamAddress, context);

            var newPosition = bw.BaseStream.Position;

            bw.BaseStream.Position = fixPosition;
            bw.Write(argument.ParamAddress.Layer);
            bw.Write(argument.ParamAddress.Weights);
            bw.Write(argument.ParamAddress.Bn);
            bw.Write(argument.ParamAddress.Activation);
            bw.BaseStream.Position = newPosition;
        }