Een enkele regelwijziging in GCC resulteerde in een versnelling van 12% in ƩƩn test en een vertraging van 14% in een andere

Een ingenieur van Intel heeft een eenregelige wijziging aangebracht in de GCC-compilatorsuite, waardoor het gewicht van onjuiste takvoorspellingen op x86-processors toeneemt. Deze wijziging heeft de prestaties van de gegenereerde code tijdens de test 544.nab_r verhoogd met 12,7% bij gebruik van de optimalisaties "-O2 -mtune=graniterapids" voor de Intel Granite Rapids/Xeon 6 CPU en met 12,1% bij gebruik van de optimalisaties "-O2 -mtune=znver5" op de AMD Zen5 CPU.

De wijziging van het gewicht van "COSTS_N_INSNS (2)" naar "COSTS_N_INSNS (2) + 3" verhoogt de betekenis van de voorspellingsfout van 2 naar 5 voorwaardelijke instructies, wat beter aansluit bij de kenmerken van de opdrachtpipeline in moderne CPU's, waarin fouten in takvoorspellingen kostbaarder zijn. Deze wijziging in gewicht forceert de compiler om "if"-uitdrukkingen om te zetten in voorwaardelijke instructies zonder sprongen, zoals CMOV, die onderbrekingen bij onjuiste takvoorspellingen uitsluiten, veroorzaakt door de noodzaak om de pipeline-status te resetten. Voorheen werd het gewicht "COSTS_N_INSNS (2) + 3" alleen in GCC aangegeven voor Intel Ice Lake en Alder Lake processors, en is nu ingesteld voor het algemene (generic) profiel van x86-processors.

Opmerkelijk is dat na acceptatie van de patch een regressie naar voren kwam, waardoor de test "Hint" 30% langzamer werd uitgevoerd door een van de GCC-ontwikkelaars bij compilatie met de opties "-march=generic -mtune=znver5" en "-march=generic -mtune=graniterapids". De prestaties van de SPEC2017- en SPEC2026-testen bleven na de wijziging gelijk. De regressie is bevestigd door de auteur van de oorspronkelijke commit, die aangeeft dat de vertraging van de Hint-test 14% bedraagt bij compilatie met de opties "-O2 -mtune=generic -march=x86-64-v3".

De vertraging wordt verklaard doordat de Hint-testcode slechts ƩƩn voorwaardelijke constructie bevat, die GCC omzet in een CMOV-gebaseerde weergave. Deze constructie wordt vrij zelden uitgevoerd (in 3%) en de optimalisatie ervan heeft geen invloed op de prestaties. Tegelijkertijd leidde de wijziging in de codegeneratiemodus tot een neveneffect dat de uitvoering van de vaakst uitgevoerde code vertraagde.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster