The isomorphicGraphGroup constraint is used 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
The stamp and repeat feature of the AI Engine compiler can be used 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 will 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 will be much closer than when stamping is not used.
- Smaller run time of AI Engine compiler
- Because the AI Engine compiler only solves a reference graph instead of the entire design, run time required will be significantly less than the default flow.
Capabilities and Limitations
If required, you are allowed to stamp multiple different graphs. For example, if a design contains four instances of a graph called tx_chain and four instances of rx_chain, then both sets of graphs can be independently stamped. 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. For 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 will be 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 array. In one row, the AI Engine is followed by a memory group and in the next row the memory
group is followed by an AI Engine within a
tile.