public void AllocateInputMemory(ExclusiveConcatenation layer, OutputConnector input, AssignBufferContext context) { var totalAlloc = context.GetOrAllocateMainMemory(layer.Output); uint offset = 0; foreach (var node in layer.Inputs.Select(x => x.Connection.From)) { if (context.MainMemoryMap.ContainsKey(node)) { return; } uint size = (uint)node.Dimensions.GetSize() * 4; context.MainMemoryMap.Add(node, new MemoryAllocation(totalAlloc.Node, offset, size)); offset += size; } }
public override void Process(TransformContext context) { var concat = (Concatenation)context.MatchedLayers[0]; var output = concat.Output; var exConcat = new ExclusiveConcatenation(concat.Inputs.Select(x => new ReadOnlyMemory <int>(x.Dimensions.ToArray()))); for (int i = 0; i < exConcat.Inputs.Count; i++) { exConcat.Inputs[i].SetConnection(concat.Inputs[i].Connection.From); } var oldOuts = output.Connections.Select(o => o.To).ToList(); foreach (var oldOut in oldOuts) { oldOut.SetConnection(exConcat.Output); } }