示例#1
0
        public void Infer(K210AddPadding layer, K210AddPaddingLayerArgument argument, InferenceContext context)
        {
            var inputAlloc  = context.MainMemoryMap[layer.Input.Connection.From];
            var outputAlloc = context.KPUMemoryMap[layer.Output];

            argument.Flags = K210LayerFlags.None;
            argument.MainMemoryInputAddress = inputAlloc.GetAddress();
            argument.KPUMemoryOutputAddress = outputAlloc.GetAddress();
        }
示例#2
0
        public K210AddPaddingLayerArgument DeserializeBin(int offset, K210BinDeserializeContext context)
        {
            var sr       = context.GetReaderAt(offset);
            var argument = new K210AddPaddingLayerArgument
            {
                Flags = sr.Read <K210LayerFlags>(),
                MainMemoryInputAddress = sr.Read <uint>(),
                KPUMemoryOutputAddress = sr.Read <uint>(),
                Channels = sr.Read <uint>()
            };

            return(argument);
        }
示例#3
0
        public void Forward(K210AddPaddingLayerArgument argument, ForwardContext context)
        {
            var src  = context.GetMainRamAt((int)argument.MainMemoryInputAddress);
            var dest = context.GetKpuRamAt((int)argument.KPUMemoryOutputAddress);

            var height = 4;

            (var groups, var rowLength, var rowPadding) = (4, 1, 16);
            int srcIdx = 0;

            for (int oc = 0; oc < argument.Channels; oc++)
            {
                var channel_origin = oc / groups * rowLength * height * 64 + oc % groups * rowPadding;
                for (int y = 0; y < 1; y++)
                {
                    var y_origin = channel_origin + y * rowLength * 64;
                    for (int x = 0; x < 1; x++)
                    {
                        dest[y_origin + x] = src[srcIdx++];
                    }
                }
            }
        }