DeepMind je izdal izvorno kodo za S6, prevajalnik JIT za Python

S6-globok um

S6 je samostojna knjižnica prevajalnika JIT za CPython

globok um, znan po svojem razvoju na področju umetne inteligence, je nedavno objavil, da je sprejel odločitev, da izda izvorno kodo projekta S6, ki ga je razvil iz prevajalnika JIT za jezik Python.

Projekt je zanimiv ker je zasnovan kot razširitvena knjižnica ki ga je mogoče integrirati s standardnim CPythonom, ki zagotavlja popolno združljivost s CPython in ne zahteva spreminjanja kode tolmača. Projekt je bil v razvoju od leta 2019, vendar je bil na žalost zmanjšan in ni več v razvoju.

S6 je bil projekt, ki se je leta 2019 začel v okviru DeepMinda za pospešitev CPythona s pravočasnim prevajanjem (»JIT«). Te funkcije bi bile na voljo kot običajna knjižnica Python in ne bi bile potrebne nobene spremembe tolmača CPython. S6 je nameraval storiti za Python, kar je V8 naredil za Javascript (ime je poklon V8). Delo je temeljilo na CPython različici 3.7. Odvisno od delovne obremenitve smo opazili do 9.5-kratno pospešitev običajnih meril uspešnosti.

Glavni razlog, zakaj je bilo odločeno izdati izvorno kodo, eden od njih in kot že omenjeno, je bil, da je projekt prenehal imeti podporo, drugi glavni razlog pa je bil naveden, da je na podlagi ustvarjenega razvoja še vedno lahko uporaben za izboljšanje pythona .

Interno smo prenehali delati na S6. Kot tako je bilo to skladišče arhivirano in ne sprejemamo zahtev za vlečenje ali težav. Odprli smo vir in spodaj zagotovili pregled zasnove, da bi spodbudili pogovore znotraj skupnosti Python in navdihnili prihodnje delo za izboljšanje Pythona.

Glede delovanja S6 naj omenimo še to S6 za Python se primerja z motorjem V8 za JavaScript glede na naloge, ki jih rešuje. Knjižnica nadomešča obstoječi gonilnik tolmača bajtne kode ceval.c z lastno izvedbo, ki uporablja prevajanje JIT za pospešitev izvajanja.

S6 preveri, ali je trenutna funkcija že prevedena in če je tako, izvede prevedeno kodo, in če ne, izvede funkcijo v načinu tolmačenja bajtne kode, podobnem tolmaču CPython. Interpretacija šteje število izvedenih stavkov in klicev, povezanih s funkcijo, ki se obdeluje.

Ko je dosežen določen mejnik, se začne postopek gradnje, da se koda pospeši ki teče pogosto. Prevajanje se izvaja na vmesni predstavitvi strongjit, ki se po optimizaciji pretvori v strojna navodila ciljnega sistema z uporabo knjižnice asmjit.

Odvisno od narave obremenitve, pod optimalnimi pogoji, S6 pokaže povečanje hitrosti izvajanja testa do 9,5-krat v primerjavi z običajnim CPythonom.

Ko je izvedenih 100 ponovitev iz Richardsove testne zbirke, obstaja 7-kratni pospešek, in pri izvajanju testa Raytrace, ki vsebuje veliko matematike, je 3- do 4,5-krat hitrejši.

Naloge, ki jih je težko optimizirati s S6 so projekti, ki uporabljajo C API, kot je NumPy, pa tudi operacije, povezane s potrebo po preverjanju vrst velikega števila vrednosti.

Slabo delovanje je opaziti tudi pri klicih posameznih funkcij ki porabijo veliko virov zaradi uporabe neoptimizirane implementacije tolmača S6 Python (razvoj še ni dosegel stopnje optimizacije interpretacijskega načina).

Na primer, v testu Unpack Sequence, ki razpakira velike nize nizov/tork, en klic pokaže upočasnitev do 5-krat, ciklični klic pa prinese 0,97 iz CPythona.

Končno za tiste, ki jih zanima več o tem, morate vedeti, da je koda prevajalnika JIT napisana v C++ in trenutno temelji na CPython 3.7, poleg tega, da je izvorna koda že odprta pod licenco Apache 2.0 in jo je mogoče pregledati s spodnje povezave.


Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.