Open LebedevRI opened 3 years ago
This is unfortunately a known design limitation.
The good news is that it is possible to fix it. The bad news is that it won't be a simple fix, and it would definitely require a non trivial redesign of the dispatch stage.
To fix this issue, we need to introduce the concept of "hierarchy of schedulers resources". That hierarchy could be designed like a dag / a dominator-tree like structure where nodes are resource groups, and each node has an immediate dominator (i.e. an immediate super-group).
Scheduler resources will have to be fully pre-allocated at dispatch stage. Technically speaking, this is fine, and it potentially allows for a more accurate simulation of the dispatch logic in hardware. When a scheduler resource S is selected, sub-groups (if any) are also selected by doing a traversal of the dag. In the presence of multiple sub-groups, a round-robin selector is used to pick the underlying sub-group instance. The hierarchy of group resources is fixed, and can be pre-computed by the dispatch stage at construction time.
In conclusion, it is technically possible to fix this issue. However, it is a big feature, and it requires a significant redesign of the dispatch logic.
Extended Description
Currently, Znver3 models as-if the Int unit has a single scheduler encompassing all the 9 pipes. This isn't quite right.
I would like to model it as:
The last
Zn3Int
is needed to silence theBut as a result, the Zn3IntSch0/Zn3IntSch1/Zn3IntSch2/Zn3IntSch3 appear to not be used at all.
How would i approach this? The same problem exists for FP unit.