DeepMind åpen kildekode S6, et bibliotek med en JIT-kompilatorimplementering for CPython

DeepMind, kjent for sin utvikling innen kunstig intelligens, har åpnet kildekoden til S6-prosjektet, som utviklet en JIT-kompilator for Python-språket. Prosjektet er interessant fordi det er designet som et utvidelsesbibliotek som integreres med standard CPython, som sikrer full kompatibilitet med CPython og ikke krever modifikasjon av tolkekoden. Prosjektet har vært under utvikling siden 2019, men det ble dessverre avviklet og er ikke lenger i utvikling. Siden utviklingen som er opprettet kan være nyttig for å forbedre Python, ble det besluttet å åpne kildekoden. JIT-kompilatorkoden er skrevet i C++ og er basert på CPython 3.7. og er åpen kildekode under Apache 2.0-lisensen.

Når det gjelder oppgavene den kan løse, sammenligner S6 for Python med V8-motoren for JavaScript. Biblioteket erstatter den eksisterende bytekode-tolkerbehandleren ceval.c med sin egen implementering som bruker JIT-kompilering for å fremskynde utførelse. S6 sjekker om den gjeldende funksjonen allerede er kompilert, og i så fall kjører den kompilerte koden, og hvis ikke, kjører funksjonen i bytekodetolkningsmodus, lik CPython-tolken. Under tolkning telles antall utførte instruksjoner og anrop knyttet til funksjonen som behandles. Etter å ha nådd en viss milepæl, startes en kompileringsprosess for å øke hastigheten på ofte utført kode. Kompilering utføres til en mellomsterk representasjon, som etter optimalisering konverteres til maskininstruksjoner for målsystemet ved hjelp av asmjit-biblioteket.

Avhengig av arten av arbeidsbelastningen, viser S6 under optimale forhold en økning i testutførelseshastighet på opptil 9.5 ganger sammenlignet med vanlig CPython. Når du kjører 100 iterasjoner av Richards testsuite, observeres en 7x speedup, og når du kjører Raytrace-testen, som involverer en stor mengde matematiske beregninger, observeres en 3-4.5x speedup.

Blant oppgavene som er vanskelige å optimalisere ved bruk av S6 er prosjekter som bruker C API, som NumPy, samt operasjoner knyttet til behovet for å sjekke typene av et stort antall verdier. Lav ytelse er også observert for enkeltanrop av ressurskrevende funksjoner på grunn av bruken av S6s egen uoptimaliserte implementering av Python-tolken (utviklingen har ikke nådd stadiet med å optimalisere tolkningsmodusen). For eksempel, i Unpack Sequence-testen, som pakker ut store sett med arrays/tupler, med et enkelt kall er det en nedgang på opptil 5 ganger, og med en syklisk samtale er ytelsen 0.97 fra CPython.

Kilde: opennet.ru

Legg til en kommentar