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(); }
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); }
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; }