Anpassen der Zweigvorhersage mit GCC
Frage: Kann GCC angewiesen werden, Zweigvorhersageergebnisse in bestimmte Richtungen zu erzwingen? Intel-Architekturen?
Antwort:
Ja, GCC bietet die Funktion __builtin_expect an, um die Codegenerierung für die Verzweigungsvorhersage zu steuern. Diese Funktion benötigt zwei Argumente: exp (den Bedingungsausdruck) und c (das erwartete Ergebnis).
Um GCC anzuweisen, einen bestimmten Verzweigungspfad konsistent als wahr vorherzusagen, verwenden Sie die folgende Syntax:
<code class="c">if (__builtin_expect(exp, 1))</code>
Zum Beispiel können Sie im bereitgestellten Code-Snippet Folgendes hinzufügen:
<code class="c">if (__builtin_expect(normal, 1))</code>
Zusätzlich können Sie zur Vereinfachung der Syntax benutzerdefinierte Makros definieren:
<code class="c">#define likely(x) __builtin_expect (!!(x), 1) #define unlikely(x) __builtin_expect (!!(x), 0)</code>
Überlegungen:
Das obige ist der detaillierte Inhalt vonKann GCC Zweigvorhersageergebnisse für Intel-Architekturen erzwingen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!