<font size=2 face="sans-serif">Hi, </font><br><br><font size=2 face="sans-serif">I've been trying to determine how to
properly set the MicroOpBufferSize parameter. Based on the documentation
in the header file:<br>  // "> 1" means the processor is out-of-order. This
is a machine independent</font><br><font size=2 face="sans-serif">  // estimate of highly machine
specific characteristics such as the register</font><br><font size=2 face="sans-serif">  // renaming pool and reorder
buffer.</font><br><font size=2 face="sans-serif">Power 9 is out-of-order and so it makes
sense to use a value greater than 1. However we don't quite have a reorder
buffer in the theoretical sense where we can pick any instruction in the
buffer to dispatch next. As a result, I'm looking for a better understanding
of how this parameter is used in the scheduler.</font><br><br><font size=2 face="sans-serif">I've noticed that the only place where
it matters if the value of MicroOpBufferSize is 2 or 200 is in GenericScheduler::checkAcyclicLatency().
In other places in the code we only care if we have values that fall in
one of the three categories: 0, 1, or > 1. </font><br><font size=2 face="sans-serif">Here is my understanding of what that
function does (and I could be very wrong on this one) and please correct
me if I am wrong. </font><br><br><font size=2 face="sans-serif">We can have two critical paths through
a loop. One is cyclic (use-def cross loop iterations) and one is acyclic
(everything can be computed in one iteration). If the acyclic path is greater
than the cyclic path by more than the size of the instruction buffer then
we have to make sure that we don't run out of instructions to dispatch
in the instruction buffer. So, we set a flag Rem.IsAcyclicLatencyLimited
and then tryCandidate checks this flag when making decisions.  </font><br><font size=2 face="sans-serif">Is this correct? </font><br><font size=2 face="sans-serif">If that is what we are doing here then
I think the proper value for this parameter is the full size of the instruction
buffer on the P9 hardware. All we really care about is whether or not we
will run out of instructions to dispatch while waiting for an instruction.
We don't really care about HOW the out-of-order dispatch is done as long
as we don't run out of instructions. </font><br><font size=2 face="sans-serif">Does my logic make sense?</font><br><br><font size=2 face="sans-serif">I want to set the parameter but I want
to make sure I understand what is going on. </font><br><br><font size=2 face="sans-serif">Thank you, </font><br><font size=2 face="sans-serif">Stefan </font><br><BR>