DeepMind je objavio izvorni kod za S6, JIT kompajler za Python

S6-duboki um

S6 je samostalna biblioteka JIT prevoditelja za CPython

duboki um, poznat po svom razvoju na području umjetne inteligencije, nedavno je to objavio je donio odluku o objavljivanju izvornog koda projekta S6, koji je razvio iz JIT kompilatora za jezik Python.

Projekt je zanimljiv jer dizajniran je kao knjižnica proširenja koji se može integrirati sa standardnim CPythonom, koji pruža potpunu CPython kompatibilnost i ne zahtijeva modifikacije koda tumača. Projekt je u razvoju od 2019., ali je nažalost smanjen i više nije u razvoju.

S6 je bio projekt koji je započeo unutar DeepMinda 2019. kako bi se ubrzao CPython kompilacijom točno na vrijeme ("JIT"). Ove bi se funkcije pružale kao normalna Python biblioteka i ne bi bile potrebne nikakve promjene u CPython tumaču. S6 je namjeravao učiniti za Python ono što je V8 učinio za Javascript (ime je omaž V8). Rad se temeljio na CPython verziji 3.7. Ovisno o radnom opterećenju, vidjeli smo ubrzanja do 9.5x u uobičajenim mjerilima.

Glavni razlog zašto je odlučeno objaviti izvorni kod, jedan od njih i kao što je već spomenuto bio je taj što je projekt prestao imati podršku, drugi od glavnih razloga je naveden da na temelju stvorenog razvoja, oni još uvijek mogu biti korisni za poboljšanje pythona .

Prestali smo interno raditi na S6. Kao takvo, ovo spremište je arhivirano i ne prihvaćamo zahtjeve za povlačenjem ili probleme. Otvorili smo izvor i pružili pregled dizajna u nastavku kako bismo potaknuli razgovore unutar Python zajednice i nadahnuli budući rad na poboljšanju Pythona.

Što se tiče rada S6, treba napomenuti da S6 za Python uspoređuje se s V8 motorom za JavaScript u pogledu zadataka koje rješava. Knjižnica zamjenjuje postojeći upravljački program interpretera bajt koda ceval.c svojom vlastitom implementacijom koja koristi JIT kompilaciju za ubrzanje izvršenja.

S6 provjerava je li trenutna funkcija već kompajlirana i, ako je tako, izvršava kompajlirani kod, a ako nije, izvršava funkciju u načinu interpretacije bajtkoda sličnom CPython interpreteru. Interpretacija broji broj izvršenih naredbi i poziva povezanih s funkcijom koja se obrađuje.

Nakon dostizanja određene prekretnice, pokreće se proces izgradnje kako bi se kod ubrzao koji se često izvodi. Kompilacija se izvodi na intermedijarnoj reprezentaciji strongjit, koja se nakon optimizacije pretvara u strojne instrukcije ciljnog sustava pomoću biblioteke asmjit.

Ovisno o prirodi opterećenja, pod optimalnim uvjetima, S6 pokazuje povećanje brzine izvođenja testa do 9,5 puta u usporedbi s običnim CPythonom.

Kada se izvrši 100 ponavljanja iz Richardsovog paketa testova, postoji ubrzanje od 7 puta, a kod pokretanja Raytrace testa, koji sadrži puno matematike, brži je 3 do 4,5 puta.

Zadaci koje je teško optimizirati sa S6 su projekti koji koriste C API, kao što je NumPy, kao i operacije vezane uz potrebu provjere tipova velikog broja vrijednosti.

Loša izvedba također se vidi za pojedinačne pozive funkcija koji troše puno resursa zbog korištenja neoptimizirane implementacije S6 Python interpretera (razvoj nije dosegao fazu optimizacije načina interpretiranja).

Na primjer, u testu Unpack Sequence, koji raspakira velike skupove nizova/torki, jedan poziv pokazuje usporavanje do 5 puta, a ciklički poziv daje 0,97 od CPythona.

Konačno za one koje zanima više o tome, trebali biste znati da je kod JIT kompajlera napisan u C++ i trenutno se temelji na CPython 3.7, uz činjenicu da je izvorni kod već otvoren pod licencom Apache 2.0 i može se konzultirati s donje poveznice.


Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.