Liste des Groupes | Revenir à c arch |
Robert Finch <robfi680@gmail.com> writes:I had little trouble teaching Brian how to put if-conversion into theHaving branches automatically convert into>
predicates when they branch forward a short distance <7 instructions.
If-conversion in hardware is a good idea, if done well, because it
involves issues that tend to be unknown to compilers:
* How predictable is the condition? If the condition is very wellRather than base the choice on the predictability of the condition,
predictable, if-conversion is not a good idea, because it turns the
control dependency (which does not cost latency when the prediction
is correct) into a data dependency. Moreover, in this case the
if-conversion increases the resource consumption. Compilers are not
good at predicting the predictability AFAIK.
* Is the condition available before or after the original dataGenerally, it only adds latency--if the execution window is not staled
dependencies? And if afterwards, by how many cycles? If it is
afterwards and the branch prediction would be correct, the
if-conversion means that the result of the instruction is available
later, which may reduce IPC.
OTOH, if the branch prediction wouldThere is no "recovery" from PREDication, just one clause getting
be incorrect, the recovery also depends on when the condition
becomes available,
and the total latency is higher in the case of noMy argument is that this is a SW decision (in the compiler) not a
if-conversion. The compiler may do an ok job at predicting whether
a condition is available before or after the original data
dependencies (I don't know a paper that evaluates that), but without
knowing about the prediction accuracy of a specific condition that
does not help much.
>
So the hardware should take predictability of a condition and the
availability of the condition into consideration for if-conversion.
What about reverse if-conversion in hardware, i.e., convertingThe compiler choose PRED because FETCH reaches the join-point prior
predicated instructions and the like (conditional moves, if-then-else
instructions and the instructions they control) into branch-predicted
phantom branches and eliminating the data dependency on the condition
from the instruction.
For performance, one might consider reverse if-conversion, because the
same considerations apply; however, there is also a security aspect:
programmers have used these instructions instead of branches to
produce constant-time code to avoid timing side channels of code that
deals with secrets; and the discovery of Spectre has shown additional
timing side channels of branches. Because you cannot be sure that the
predicated instruction is there for security reasons, you must not use
reverse if-conversion in hardware.
>
- anton
Les messages affichés proviennent d'usenet.