Otevřený kód DeepMind S6, knihovny s implementací kompilátoru JIT pro CPython

DeepMind, známý svým vývojem v oblasti umělé inteligence, vytvořil open-source projekt S6, který vyvinul JIT kompilátor pro jazyk Python. Projekt je zajímavý tím, že je navržen jako rozšiřující knihovna, kterou lze integrovat se standardním CPythonem, který poskytuje plnou kompatibilitu s CPythonem a nevyžaduje úpravu kódu interpretu. Projekt se rozvíjí od roku 2019, ale bohužel byl zkrácen a již se nerozvíjí. Protože vytvořený vývoj může být užitečný pro vylepšení Pythonu, bylo rozhodnuto otevřít zdrojové texty. Kód kompilátoru JIT je napsán v C++ na základě CPythonu 3.7. a je otevřen pod licencí Apache 2.0.

S6 pro Python je srovnatelný s enginem V8 pro JavaScript, pokud jde o úkoly, které řeší. Knihovna nahrazuje stávající obslužnou rutinu interpretu bytecode ceval.c vlastní implementací, která využívá kompilaci JIT k urychlení provádění. S6 zkontroluje, zda již byla aktuální funkce zkompilována, a pokud ano, provede zkompilovaný kód, a pokud ne, spustí funkci v režimu interpretace bajtového kódu, který je podobný interpretru CPython. Interpretace počítá počet provedených instrukcí a volání spojených se zpracovávanou funkcí. Po dosažení určitého milníku je zahájen proces kompilace pro urychlení často prováděného kódu. Kompilace se provádí do střední reprezentace strongjit, která se po optimalizaci převede na strojové instrukce cílového systému pomocí knihovny asmjit.

V závislosti na charakteru zátěže za optimálních podmínek vykazuje S6 až 9.5násobné zvýšení rychlosti provádění testu oproti běžnému CPythonu. Při spuštění 100 iterací Richardsovy testovací sady dochází ke zrychlení 7x a při spuštění Raytrace testu, který obsahuje velké množství matematických výpočtů, je 3-4.5x rychlejší.

Úkoly, které se s S6 obtížně optimalizují, jsou projekty využívající C API, jako je NumPy, a také operace související s nutností kontrolovat typy velkého množství hodnot. Špatný výkon je také pozorován u jednotlivých volání funkcí náročných na zdroje kvůli použití vlastní neoptimalizované implementace interpretu Python S6 (vývoj nedosáhl fáze optimalizace režimu tlumočení). Například v testu Unpack Sequence, který rozbalí velké sady polí / n-tic, je při jediném volání pozorováno až 5násobné zpomalení a při cyklickém volání je výkon 0.97 z CPythonu.

Zdroj: opennet.ru

Přidat komentář