DeepMind open source S6, et bibliotek med en JIT compiler implementering til CPython

DeepMind, kendt for sin udvikling inden for kunstig intelligens, har åbnet kildekoden til S6-projektet, som udviklede en JIT-kompiler til Python-sproget. Projektet er interessant, fordi det er designet som et udvidelsesbibliotek, der integrerer med standard CPython, hvilket sikrer fuld kompatibilitet med CPython og ikke kræver modifikation af tolkekoden. Projektet har været under udvikling siden 2019, men det blev desværre afbrudt og er ikke længere under udvikling. Da de oprettede udviklinger kan være nyttige til at forbedre Python, blev det besluttet at åbne kildekoden. JIT-kompilerkoden er skrevet i C++ og er baseret på CPython 3.7. og er open source under Apache 2.0-licensen.

Med hensyn til de opgaver, den kan løse, sammenligner S6 for Python med V8-motoren til JavaScript. Biblioteket erstatter den eksisterende bytecode-fortolker-handler ceval.c med sin egen implementering, der bruger JIT-kompilering til at fremskynde eksekveringen. S6 kontrollerer, om den aktuelle funktion allerede er kompileret, og i så fald udfører den den kompilerede kode, og hvis ikke, kører funktionen i bytecode-fortolkningstilstand, svarende til CPython-fortolkeren. Under fortolkning tælles antallet af udførte instruktioner og opkald forbundet med den funktion, der behandles. Efter at have nået en bestemt milepæl, påbegyndes en kompileringsproces for at fremskynde hyppigt udført kode. Kompileringen udføres til en mellemliggende strongjit-repræsentation, som efter optimering konverteres til maskininstruktioner for målsystemet ved hjælp af asmjit-biblioteket.

Afhængigt af arten af ​​arbejdsbyrden viser S6 under optimale forhold en stigning i testudførelseshastighed på op til 9.5 gange sammenlignet med almindelig CPython. Når man kører 100 iterationer af Richards testsuite, observeres en 7x speedup, og når man kører Raytrace testen, som involverer en stor mængde matematiske beregninger, observeres en 3-4.5x speedup.

Blandt de opgaver, der er svære at optimere ved brug af S6, er projekter, der bruger C API, såsom NumPy, samt operationer relateret til behovet for at kontrollere typerne af et stort antal værdier. Lav ydeevne observeres også for enkeltkald af ressourcekrævende funktioner på grund af brugen af ​​S6s egen uoptimerede implementering af Python-fortolkeren (udviklingen er ikke nået til stadiet med at optimere fortolkningstilstanden). For eksempel i Unpack Sequence-testen, som udpakker store sæt af arrays/tupler, er der med et enkelt kald en opbremsning på op til 5 gange, og ved et cyklisk kald er ydelsen 0.97 fra CPython.

Kilde: opennet.ru

Tilføj en kommentar