DeepMind nyílt forráskódú S6, egy könyvtár JIT fordító implementációval a CPythonhoz

A mesterséges intelligencia területén végzett fejlesztéseiről ismert DeepMind megnyitotta az S6 projekt forráskódját, amely a Python nyelvhez JIT fordítót fejlesztett ki. A projekt azért érdekes, mert a szabványos CPythonnal integrálható kiterjesztési könyvtárnak készült, amely biztosítja a teljes kompatibilitást a CPythonnal, és nem igényli az értelmező kód módosítását. A projektet 2019 óta fejlesztik, de sajnos megszűnt, és már nem fejlesztik. Mivel a létrehozott fejlesztések hasznosak lehetnek a Python fejlesztésében, a kód nyílt forráskódú használata mellett döntöttek. A JIT fordítókód C++ nyelven íródott, és a CPython 3.7-en alapul. és nyílt forráskódú az Apache 2.0 licenc alatt.

A megoldható feladatok tekintetében az S6 for Python összehasonlítható a JavaScript V8-as motorjával. A könyvtár lecseréli a meglévő ceval.c bájtkód értelmező kezelőt saját megvalósítására, amely JIT fordítást használ a végrehajtás felgyorsítására. Az S6 ellenőrzi, hogy az aktuális függvény már le van-e fordítva, és ha igen, akkor végrehajtja a lefordított kódot, és ha nem, akkor a CPython interpreterhez hasonlóan bájtkód értelmezési módban futtatja a függvényt. Az értelmezés során a folyamatban lévő függvényhez tartozó végrehajtott utasítások és hívások száma számolódik. Egy bizonyos mérföldkő elérése után egy fordítási folyamat indul a gyakran végrehajtott kód felgyorsítása érdekében. A fordítás egy közbenső strongjit reprezentációvá történik, amelyet az optimalizálás után az asmjit könyvtár segítségével a célrendszer gépi utasításaivá alakítanak át.

A munkaterhelés jellegétől függően az S6 optimális körülmények között akár 9.5-szeresére növeli a tesztvégrehajtási sebességet a normál CPythonhoz képest. A Richards tesztkészlet 100 iterációjának futtatásakor 7-szeres gyorsulás figyelhető meg, a Raytrace teszt futtatásakor pedig, amely nagy mennyiségű matematikai számítást tartalmaz, 3-4.5-szeres gyorsulást figyelhetünk meg.

Az S6 használatával nehezen optimalizálható feladatok közé tartoznak a C API-t használó projektek, például a NumPy, valamint a nagyszámú érték típusának ellenőrzésével kapcsolatos műveletek. Alacsony teljesítmény figyelhető meg az erőforrás-igényes függvények egyszeri hívásainál is, mivel az S6 saját, a Python interpreter optimalizálatlan implementációját használja (a fejlesztés még nem érte el az értelmezési mód optimalizálásának szakaszát). Például a Unpack Sequence tesztben, amely nagy tömb-/tuple-készletet bont ki, egyetlen hívással akár 5-szörös lassulás is előfordulhat, ciklikus hívás esetén pedig 0.97 a teljesítmény a CPython-tól.

Forrás: opennet.ru

Vásároljon megbízható tárhelyet DDoS védelemmel, VPS VDS szerverekkel rendelkező webhelyekhez 🔥 Vásároljon megbízható weboldal tárhelyet DDoS védelemmel, VPS VDS szerverekkel | ProHoster