__builtin_expect von GCC mit Wahrscheinlichkeit
-
11-10-2019 - |
Frage
__builtin_expect
von GCC kann durch Programmierer verwendet werden, um zu zeigen, welche Varianten zu erwarten sind sehr häufig sein, und die sind selten. Aber __builtin_expect
haben nur "wahr" und "falsch" (0% oder 100% Wahrscheinlichkeit)
Für einige großen Projekte ist es unterschiedlich hart Profil Feedback (-fprofile-arcs
) zu bekommen, und manchmal Programmierer weiß, welche Wahrscheinlichkeit Niederlassung er in einem gewissen Punkt des Programms hat.
Es ist möglich, einen Hinweis zu Compiler zu geben, dass ein Zweig hat Wahrscheinlichkeit> 0% und <100%?
Lösung
Wahre und falsche wirklich bedeutet, dass „die erste Variante ist wahrscheinlicher“ und „die zweite Variante wahrscheinlicher ist“. Es gibt keine praktische Notwendigkeit für andere Werte als diese. Der Compiler wird nicht möglich sein, diese Informationen zu verwenden.
Andere Tipps
hier :
lang __builtin_expect_with_probability
(long exp , lang c , Doppel Wahrscheinlichkeit ) Die Funktion gleiche Semantik wie
__builtin_expect
, aber Anrufer liefert die erwartete Wahrscheinlichkeit, dassexp == c
. Letztes Argument Wahrscheinlichkeit ist eine Fließwert im inklusiven Bereich 0.0f und 1.0f.
Nicht-Determinismus ist kein wünschenswertes Merkmal für Compiler-Ausgang, allein Sprachfunktionen lassen. Es gibt keinen wirklichen Nutzen für die nur teilweise Optimierung lieber einen Zweig, und kein Compiler ich kann dies bewusst bin, tun.