Egyetlen sor módosítás a GCC-ben 12%-os gyorsulást hozott a modern Intel és AMD processzorokon

enlightened Ez az oldal a közösségért készül. heart Kövess minket máshol is:  Linux Mint Magyar Közösség a Mastodon-on  Telegram csatorna – csak hírek  Beszélgessünk a Telegram – Linux csevegő csoport  Hírek olvasása RSS segítségével  Linux Mint Hivatalos Magyar Közösség a Facebook-on      Linux Mint Baráti Kör a Facebook-on
wink Ha hasznosnak találod, és szeretnéd, hogy folytatódjon, támogasd a munkát Ko-fi vagy Paypal segítségével. laugh

kami911 képe
  • Ha 3-mal megemelik a GCC-ben a branch-misprediction skálát, a fordító óvatosabban bánik az elágazásbecsléssel.
  • A SPEC CPU 2017 NAB tesztben körülbelül 12%-os gyorsulást mértek modern AMD és Intel CPU-kon.
  • A módosítás a GCC 17-ben jelenik meg, amely 2027-ben várható.

Szokatlan hónap ez: egészen apró kódbeli módosítások hoznak látványos teljesítménynyereséget. Néhány napja még egyetlen sor változtatás adott 5%-os gyorsulást tárhelyműveleteknél. Most pedig valaki azt állítja, hogy egyetlen sor módosítás a GCC fordítóban 12%-os teljesítménynövekedést hozott modern AMD és Intel processzorokon egy SPEC CPU 2017 benchmarkban.

Hárommal nagyobb érték, látványos nyereség az új AMD és Intel processzorokon

Ha igazságosak akarunk lenni: ez a plusz 3 nagyon is sokat számít

Az Intel szoftvermérnöke, Lili Cui minimális módosítással is ki tudott préselni némi extra teljesítményt a GCC fordítóból. Az a folyamat, ahogyan Cui elérte ezt a többletet, elég összetett, ezért érdemes lépésről lépésre végigvenni.

Amikor a CPU kódot futtat, különféle trükkökkel próbál gyorsabb lenni. Ha a kódban döntési pontot talál (például egy if/else elágazást), elvileg meg kellene várnia a számítások eredményét, hogy kiderüljön, melyik ágon menjen tovább. A „speculative execution” nevű eljárással viszont a CPU megpróbálja megtippelni a program következő utasítását, és előre elkezdi végrehajtani a rákövetkező kódot.

Olyasmi ez, mintha írnál egy üzenetet a barátodnak, hogy hamburgert vagy pizzát kér-e, te pedig feltételezed, hogy hamburgert fog választani, és máris felteszed a húspogácsát a grillre. Ha igazad lesz, hamarabb kész a hamburger, és lenyűgözöd a gyorsaságoddal. Ha tévedsz, le kell állni, elpakolni mindent, és inkább pizzát sütni. Ugyanígy, ha a CPU rosszul tippel, vissza kell lépnie a döntési pontra, és a másik ágon kell továbbmennie.

Ezt hívják „branch misprediction”-nek, és Cui észrevette, hogy a modern CPU-kon ennek a költsége nagyobb, mint korábban gondolták:

A modern CPU-knak mélyebb pipeline-jaik vannak, ezért az elágazásbecslési hibák drágábbak. Ha ezt a költséget megemeljük, az jobban ösztönzi az if-konverziót, és elkerülhetők a pipeline-stallok a félrejósolt elágazások miatt.

Erre reagálva Cui módosította azt a kódsort, amely a branch misprediction skálát definiálja. A GCC belső kódgeneráló logikája ezt az értéket használja annak eldöntésére, megéri-e kockáztatni egy elágazást. Cui mindössze 3-mal emelte meg ezt a skálát, így a fordító sokkal óvatosabban generál hagyományos elágazó kódot. Így nagyobb eséllyel választ más optimalizálási stratégiát, például branch nélküli utasítássorozatot.

Ezután Cui lefuttatta a SPEC CPU 2017 csomag 544.nab_r Nucleic Acid Builder (NAB) benchmarkját, amely molekulák fizikai és kémiai viselkedését számolja. A mérések szerint 12%-kal nőtt a teljesítmény mind Intel, mind AMD processzorokon, mert kevesebb idő ment el a visszalépésekre, és több maradt a tényleges kódvégrehajtásra.

Mire ez a változtatás a felhasználókhoz eljut, még várni kell: a GCC 17-be került be, amelynek kiadása 2027-re várható. Jó példa arra, hogy egy apró módosítás is hatalmas különbséget hozhat.