Open Quuxplusone 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.
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.