Skip to content
Snippets Groups Projects
Commit 0fe07278 authored by Yaman Umuroglu's avatar Yaman Umuroglu
Browse files

[FIFO] derive sizes for multiple consumers, DuplicateStreams bugfix

parent 2b5f93fe
No related branches found
No related tags found
No related merge requests found
...@@ -111,6 +111,9 @@ class DeriveCharacteristic(NodeLocalTransformation): ...@@ -111,6 +111,9 @@ class DeriveCharacteristic(NodeLocalTransformation):
del io_dict["outputs"]["out"] del io_dict["outputs"]["out"]
io_dict["outputs"]["out0"] = [] io_dict["outputs"]["out0"] = []
io_dict["outputs"]["out1"] = [] io_dict["outputs"]["out1"] = []
# n_outs is total of output streams
# so multiply expected by 2
n_outs *= 2
elif node.op_type == "AddStreams_Batch": elif node.op_type == "AddStreams_Batch":
io_dict["inputs"]["in1"] = [0 for i in range(n_inps)] io_dict["inputs"]["in1"] = [0 for i in range(n_inps)]
...@@ -280,10 +283,14 @@ class DeriveFIFOSizes(NodeLocalTransformation): ...@@ -280,10 +283,14 @@ class DeriveFIFOSizes(NodeLocalTransformation):
prod_chrc = np.asarray(prod_chrc).reshape(2, -1)[1] prod_chrc = np.asarray(prod_chrc).reshape(2, -1)[1]
# find consumers # find consumers
model = self.ref_input_model model = self.ref_input_model
consumers = model.find_consumers(node.output[0])
# compute FIFO depth for each consumer
out_fifo_depths = [] out_fifo_depths = []
for cons_node in consumers: for output_name in node.output:
cons_node = model.find_consumer(output_name)
if cons_node is None:
# could be final node, will be overridden if so
# need an entry in the list anyway
out_fifo_depths.append(2)
continue
cons = registry.getCustomOp(cons_node) cons = registry.getCustomOp(cons_node)
cons_chrc = cons.get_nodeattr("io_characteristic") cons_chrc = cons.get_nodeattr("io_characteristic")
cons_chrc = np.asarray(cons_chrc).reshape(2, -1)[0] cons_chrc = np.asarray(cons_chrc).reshape(2, -1)[0]
...@@ -302,8 +309,9 @@ class DeriveFIFOSizes(NodeLocalTransformation): ...@@ -302,8 +309,9 @@ class DeriveFIFOSizes(NodeLocalTransformation):
# set output FIFO depth for this (producing) node # set output FIFO depth for this (producing) node
# InsertFIFO looks at the max of (outFIFODepth, inFIFODepth) # InsertFIFO looks at the max of (outFIFODepth, inFIFODepth)
# for each tensor # for each tensor
prod.set_nodeattr("outFIFODepth", out_fifo_depths[0]) if len(out_fifo_depths) > 0:
# used only for multi-consumer. nodes prod.set_nodeattr("outFIFODepth", out_fifo_depths[0])
# used only for multi-producer nodes
prod.set_nodeattr("outFIFODepths", out_fifo_depths) prod.set_nodeattr("outFIFODepths", out_fifo_depths)
except KeyError: except KeyError:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment