Szerző: Gálffy Csaba

2013. október 2. 12:25

Új JIT-fordítót kap a .NET

Leváltja a szerveres korszakból maradt 64 bites JIT-fordítóját a Microsoft. Az új, RyuJIT névre keresztelt szoftver látványos előrelépés a fordítási sebességben, miközben a kód hatékonysága az ígéretek szerint nem romlik érezhetően.

HIRDETÉS

Egységes kódbázisra helyezi a .NET-hez készített JIT (just in time, futásidejű) fordítóit a Microsoft. A .NET Framework blogon a héten közzétett bejelentés szerint első körben a 64 bites fordító kap egy gyorsabb, optimalizált utódot, a friss kódbázis pedig a jövőben az összes .NET JIT fordító alapját képezi majd.

A .NET 32 bites és 64 bites JIT fordító kódbázisa alaposan eltér egymástól. Az előbbit kliensoldali futtatásra hegyezték ki, ami gyors kódgenerálást (és így gyorsabban induló alkalmazást), ám valamivel gyengébb minőségű kódot eredményezett. A 64 bites JIT alapjául nem ez, hanem a C++-os csapat optimalizáló fordítója szolgáltatta az alapot, megalkotásánál a szerveroldali feladatok kaptak fókuszt, vagyis a hatékonyabb kódot eredményező kódgenerálás került előtérbe, amely viszont lassabb is volt. A különválasztás a 2000-es évek közepén még valamennyire megállta a helyét, kliensoldalon jellemzően még 32 bites operációs rendszerek és alkalmazások futottak, a helyi memória szerény mérete nem is indokolta a 64 bitre váltást. Ezzel szemben a szerverekben már akkor sem volt kivételes a több mint 4 gigabájt memória, így ott a 64 bites rendszerek és alkalmazások használata sokkal elterjedtebb volt.

64 bit mindenhol

Ez a logika azonban ma már nem érvényes, a 64 bites rendszerek és alkalmazások már mind kliensoldalon, mind szerveroldalon elterjedtek, így a mesterséges különbségtétel nem ideális: a 32 bites fordító gyorsasága és a 64 bites fordító hatékony kódja között kellett ideális középutat találni. Ez az új RyuJIT, amely átlagosan mintegy kétszer olyan gyorsan állít elő kódot, mint a korábbi 64 bites fordító, ami a .NET alkalmazások indulásában mintegy 30 százalékos gyorsulást jelent majd. A blogbejegyzés szerint az ezzel készült gépi kód pedig elég hatékony, alkalmas szerveroldali folyamatos futásra is.

A legnagyobb gyorsulást a regexet is tartalmazó kódban éri el a RyuJIT, az reguláris kifejezést bőséggel használó kód fordítása a JIT64-nek alapos fejfájást okozott. Az új fordító az ilyen feladatokkal mintegy harmincszor gyorsabban végez, a fordítás memóriaigénye pedig töredékére esett. A Microsoft az RFC 822 email validáló fordításánál a memóriahasználat 1,4 gigabájtról 200 megabájtra csökkenését mérte, a fordítási idő pedig 60 másodpercről 1,8 másodpercre esett.

Különbség a fordítás sebességében - a futási sebesség is érdekes lenne.

A RyuJIT a Microsoft szerint már annyira gyorsan állít elő kódot, hogy egyes esetekben szükségtelenné teszi a natív kódgenerálást (NGen) és a háttér-JIT megközelítést, mivel futásidőben is igen gyorsan képes hatékony kódot előállítani.

Egységes alapokon

A Microsoft tervei szerint idővel a RyuJIT kódbázisára épül majd az összes támogatott architektúrán a fordító, így 32 és 64 bites x86 mellett az ARM, MDIL és a jövőben támogatást kapó architektúrák is ezt a motort használják majd. Az egységes kódbázis eredménye, hogy a fejlesztés a jövőben számottevően felgyorsulhat, a tervezett funkciók gyorsabban bekerülnek a végleges fordítóba. Nem mellékes az sem, hogy a JIT fordító viselkedése sokkal konzisztensebb lesz a jövőben, vagyis minden platformon hasonló teljesítményt nyújt (és hasonló hibákat tartalmaz).

A RyuJIT jelenleg CTP (community technology preview, vagyis gyakorlatilag nyílt béta) állapotban van. Ennek megfelelően szabadon letölthető, bár futtatásához Windows 8.1-re vagy Windows Server 2012 R2-re van szükség. Telepítés után az új fordító egyetlen vagy akár az összes .NET alkalmazás futtatásához használható, első esetben egy környezeti változót, utóbbi esetben a Registryt kell átírni. Jó hír, hogy a RyuJIT CTP telepítése semmit nem ír felül a rendszerben, így továbbra is használható a JIT64 is, így közvetlenül összehasonlítható például a két fordító működése.

a címlapról