Ein Ingenieur von Intel hat eine einzeilige Ănderung im GCC-Compiler-Set vorgenommen, die das Gewicht der falschen Zweigvorhersage auf x86-Prozessoren erhöht. Diese Ănderung ermöglicht eine Steigerung der Leistung des generierten Codes beim Test 544.nab_r um 12,7 % bei Aktivierung der Optimierungen â-O2 -mtune=graniterapidsâ fĂŒr CPU Intel Granite Rapids/Xeon 6 und um 12,1 % bei Aktivierung der Optimierungen â-O2 -mtune=znver5â fĂŒr CPU AMD Zen5.
Die Ănderung des Gewichts von âCOSTS_N_INSNS (2)â auf âCOSTS_N_INSNS (2) + 3â erhöht die Bedeutung der Vorhersagefehler von 2 auf 5 bedingte Anweisungen, was die Besonderheiten der Befehlspipeline in modernen CPUs besser widerspiegelt, in denen Zweigvorhersagefehler kostenintensiver sind. Die Gewichtung fĂŒhrt dazu, dass der Compiler die âifâ-AusdrĂŒcke in bedingte Befehle ohne SprĂŒnge umwandelt, wie z. B. CMOV, die Unterbrechungen bei falschen Zweigvorhersagen, die durch das ZurĂŒcksetzen des Pipeline-Zustands verursacht werden, ausschlieĂen. Zuvor wurde das Gewicht âCOSTS_N_INSNS (2) + 3â im GCC nur fĂŒr Intel Ice Lake und Alder Lake Prozessoren angegeben, ist jetzt aber auch fĂŒr das allgemeine (generic) Profil von x86-Prozessoren festgelegt.
Bemerkenswert ist, dass nach der Annahme des Patches eine Regression aufgetreten ist, die dazu fĂŒhrte, dass der Test âHintâ bei einem der GCC-Entwickler 30 % langsamer ausgefĂŒhrt wurde, wenn er mit den Optionen â-march=generic -mtune=znver5â und â-march=generic -mtune=graniterapidsâ kompiliert wurde. Die Leistung bei den SPEC2017- und SPEC2026-Tests blieb nach der Ănderung auf dem bisherigen Niveau. Die Regression wurde von dem Autor des ursprĂŒnglichen Commits bestĂ€tigt; laut seinen Angaben betrĂ€gt die Verlangsamung des Hint-Tests 14 % bei der Kompilierung mit den Optionen â-O2 -mtune=generic -march=x86-64-v3â.
Die Verlangsamung wird dadurch erklĂ€rt, dass der Hint-Test nur eine bedingte Konstruktion enthĂ€lt, die GCC in eine CMOV-basierte Darstellung umwandelt. Diese Konstruktion wird relativ selten (in 3%) ausgefĂŒhrt, und ihre Optimierung hat keinen Einfluss auf die Leistung. Gleichzeitig fĂŒhrte die Ănderung des Codegenerierungsmodus zu einem Nebeneffekt, der die AusfĂŒhrung des hĂ€ufigeren Codes verlangsamte.
Quelle: opennet.ru
