DeepMind avoimen lähdekoodin S6, kirjasto, jossa on JIT-kääntäjätoteutus CPythonille

Tekoälyn kehityksestään tunnettu DeepMind on avannut lähdekoodin S6-projektille, joka kehitti JIT-kääntäjän Python-kielelle. Projekti on mielenkiintoinen, koska se on suunniteltu laajennuskirjastoksi, joka integroituu standardin CPythonin kanssa varmistaen täyden yhteensopivuuden CPythonin kanssa eikä vaadi tulkin koodin muuttamista. Projektia on kehitetty vuodesta 2019, mutta valitettavasti se keskeytettiin eikä kehity enää. Koska kehitetyistä kehityksestä voi olla hyötyä Pythonin parantamisessa, koodi päätettiin avata avoimella lähdekoodilla. JIT-kääntäjäkoodi on kirjoitettu C++-kielellä ja perustuu CPython 3.7:ään. ja se on avoimen lähdekoodin Apache 2.0 -lisenssillä.

Ratkaisevien tehtävien suhteen Pythonin S6 vertaa JavaScriptin V8-moottoria. Kirjasto korvaa olemassa olevan tavukooditulkinkäsittelijän ceval.c omalla toteutuksellaan, joka käyttää JIT-käännöstä suoritusta nopeuttamaan. S6 tarkistaa, onko nykyinen funktio jo käännetty, ja jos on, suorittaa käännetyn koodin, ja jos ei, suorittaa toiminnon tavukoodin tulkintatilassa, samalla tavalla kuin CPython-tulkki. Tulkinnan aikana lasketaan prosessoitavaan toimintoon liittyvien suoritettujen käskyjen ja kutsujen määrä. Kun tietty virstanpylväs on saavutettu, käännösprosessi käynnistetään usein suoritettavan koodin nopeuttamiseksi. Kääntäminen suoritetaan välimuotoon strongjit-esitykseen, joka optimoinnin jälkeen muunnetaan kohdejärjestelmän konekäskyiksi asmjit-kirjaston avulla.

Työkuorman luonteesta riippuen S6 osoittaa optimaalisissa olosuhteissa jopa 9.5-kertaisen lisäyksen testin suoritusnopeudessa tavalliseen CPythoniin verrattuna. Kun Richards-testisarjaa suoritetaan 100 iteraatiota, havaitaan 7-kertainen nopeutuminen, ja suoritettaessa Raytrace-testiä, joka sisältää suuren määrän matemaattisia laskelmia, havaitaan 3-4.5-kertainen nopeutuminen.

S6:lla vaikeasti optimoitavia tehtäviä ovat C API:ta käyttävät projektit, kuten NumPy, sekä suuren joukon arvojen tyyppien tarkastamiseen liittyvät toiminnot. Alhaista suorituskykyä havaitaan myös resurssiintensiivisten toimintojen yksittäisissä kutsuissa S6:n oman optimoimattoman Python-tulkin toteutuksen käytön vuoksi (kehitys ei ole edennyt tulkintatilan optimoinnin vaiheeseen). Esimerkiksi Unpack Sequence -testissä, joka purkaa suuria taulukoita/tupleja, yhdellä kutsulla hidastuu jopa 5 kertaa ja syklisessä kutsussa suorituskyky on 0.97 CPythonista.

Lähde: opennet.ru

Lisää kommentti