Na de recente discussies over het-O3’en van de Linux-kernel en andere compiler-optimalisaties, kwam er een verzoek binnen om enkele nieuwe benchmarks voor GCC-compileroptimalisatie te zien met de onlangs uitgebrachte GCC 12 Dus hier is een frisse kijk op verschillende GCC-optimalisatieniveaus via-Ofast, evenals met linktime-optimalisaties (LTO) en”-march=native”-afstemming op de nieuwe GCC 12 met het volwassen AMD Ryzen Threadripper 3990X-platform.
Als enkele nieuwe referentiebenchmarks met verschillende GCC-compileroptimalisaties, werden verschillende workloads/benchmarks voor gebruikersruimtetoepassingen gebouwd met de volgende CFLAGS/CXXFLAGS:
-O0
-Og
-O1
-O2
-O3
-Ofast
-O2-march=native
-O3-march=native
-Ofast-march=native
-O2-march=native-flto
-O3-march=native-flto
-Ofast-march=native-flto
Alle van de tests maakte gebruik van GCC 12.1.1 zoals verzonden door Fedo ra Workstation 36 als een van de eerste Linux-distributies die GCC 12 stable gebruikt, samen met de rest van de ultramoderne open-source GNU-toolchain. Alle tests vonden plaats op een AMD Ryzen Threadripper 3990X-werkstation.
Er zijn geen andere wijzigingen aangebracht in de systeemstatus, behalve dat alle tests telkens opnieuw zijn opgebouwd met de verschillende CFLAGS/CXXFLAGS die worden getest.
Als eerste waren er enkele runs met de yquake2 open-source Quake 2 afgeleide game met behulp van de CPU-gebaseerde renderer. Er was niet al te veel schommeling in de framerates van-O1 tot-O3, maar met-Ofast of het gebruik van”-march=native”kwam er wel een paar extra FPS uit. Het gebruik van link-time optimalisaties (LTO) met-flto hielp wel om topprestaties te behalen.
Onder de crypto++ cryptografie benchmark was er niet veel sway na-O2 op dit AMD Ryzen Threadripper werkstation.
Ondertussen is het MrBayes-softwarepakket voor moleculaire biologie een van de workloads die aanzienlijk profiteert van het”-Ofast”-optimalisatieniveau, zij het met potentieel onveilige wiskunde.
De simdjson hoge snelheid JSON-parseerbibliotheek deed dat wel profiteren van”-march=native”tuning.
Er was niet veel verschil met de Zstd-prestaties, behalve de-O0-run die zonder enige compiler-optimalisatie is. Zstd kon niet worden gebouwd met de-Og-run.
De SciMark2-benchmarks zijn over het algemeen erg gevoelig voor wijzigingen in de compiler en hebben de neiging enorm te profiteren van verhoogde optimalisaties en LTO.
Voor de meeste gebruikers,”-O3-march=native-flto”is waarschijnlijk zo agressief als je maar wilt zonder het risico te lopen op potentieel onveilige wiskunde of de grotere kans op mogelijke problemen.
Deze resultaten zijn grotendeels de vergelijkbaar met wat we hebben gezien bij eerdere vergelijkingen van GCC-compileroptimalisatie, maar hier zijn de nieuwe resultaten voor geïnteresseerden.
Degenen die nog meer van deze GCC 12 Threadripper-benchmarks voor compileroptimalisatie willen zien, kunnen dit zien deze OpenBenchmarking.org-resultatenpagina voor de volledige reeks gegevens.
Bij het nemen het geometrische gemiddelde van alle resultaten, gaande van de gewone-O2 naar-O3, leverde in totaal een toename van 6% op. De”-march=native”tuning bovenop-O3 was ongeveer een extra 2% toename in het algemeen, maar komt grotendeels neer op de specifieke code-base/software voor het niveau van verbetering ten opzichte van native CPU-instructie tuning. De resultaten van-flto blijven indruk maken en van groot nut zijn. Met recente releases van GCC (en Clang) waren de optimalisaties van de link-time relatief stabiel en hadden ze minder problemen met bouwen en andere problemen in vergelijking met jaren eerder met compiler-releases van lang geleden die soms problemen hadden met LTO. Daarmee zijn meer Linux-distributies gelukkig begonnen met het bouwen van hun pakketten met waar relevant linktime-optimalisaties.