You can use the isomorphicGraphGroup constraint to specify isomorphic graphs that are used in the stamp and repeat flow.
Syntax
"isomorphicGraphGroup": {
"name": string,
"referenceGraph": <reference graph name>,
"stampedGraphs": [<stamped graph name list>]
}
Example
"isomorphicGraphGroup": {
"name": "isoGroup",
"referenceGraph": "tx_chain0",
"stampedGraphs": ["tx_chain1", "tx_chain2", "tx_chain3"]
}
General Description
You can use the stamp and repeat feature of the AI Engine compiler when the same graph has multiple instances that can be constrained to the same geometry in AI Engines. There are two main advantages to using this feature when the same graph is instantiated multiple times:
- Small variation in performance
- All graphs have very similar throughput because buffers and kernels are mapped identically with respect to each other. Throughput might not be exactly identical due to differences in routing. However, it is significantly closer than without stamping.
- Smaller runtime of the AI Engine compiler
- The compiler only solves a reference graph instead of the entire design. This means required runtime is significantly less than the default flow.
Capabilities and Limitations
You can stamp multiple different graphs. For example, if a design contains four instances of a graph called tx_chain and four instances of rx_chain. In this case, you can stamp both sets of graphs independently. This feature is only supported for designs which have one or more sets of isomorphic graphs, with no interaction between the different isomorphic graph sets.
All reference and stamped graphs must have area group constraints. You must declare identical size area groups for each instance of the graph that needs to be stamped. All area groups must be non-overlapping. Refer to the following example:
"areaGroup": {
"name": "ant0_cores",
"nodeGroup": ["tx_chain0*"],
"tileGroup": ["(0,0):(3,3)"]
},
"areaGroup": {
"name": "ant1_cores",
"nodeGroup": ["tx_chain1*"],
"tileGroup": ["(0,4):(3,7)"]
},
You must declare an isomorphic graph group
in the constraints file that specifies the reference graph and the stamped graphs.
For example:
"isomorphicGraphGroup": {
"name": "isoGroup",
"referenceGraph": "tx_chain0",
"stampedGraphs": ["tx_chain1", "tx_chain2"]
}
,
In this case, the tx_chain0 graph is the
reference and its objects are placed first and stamped to graph tx_chain1 and tx_chain2. Area groups must follow these rules for number of rows: the
number of rows for all identical graphs (reference + stamp-able ones) must be the
same, and must begin and end at the same parity of row, meaning if the reference graph's tileGroup begins at an even row and ends
at an odd row, then all of the stamped graphs must follow the same convention. This
limitation occurs because of the mirrored tiles in AI Engine-ML array. In one row, the AI Engine-ML is followed by a memory group and in the next row the
memory group is followed by an AI Engine-ML
within a tile.