DeepMind avatud kood S6, raamatukogud JIT-kompilaatori rakendamisega CPythonile

Tehisintellekti valdkonna arenduste poolest tuntud DeepMind on avatud lähtekoodiga S6 projekti, mis arendas Pythoni keele jaoks JIT-kompilaatori. Projekt on huvitav, kuna see on loodud laiendusteegina, mida saab integreerida standardse CPythoniga, mis tagab täieliku ühilduvuse CPythoniga ja ei nõua tõlgi koodi muutmist. Projekt on arenenud alates 2019. aastast, kuid kahjuks seda piirati ja enam ei arene. Kuna loodud arendustest võib kasu olla Pythoni täiustamisel, otsustati lähtetekstid avada. JIT-kompilaatori kood on kirjutatud C++ keeles, mis põhineb CPython 3.7-l. ja on avatud Apache 2.0 litsentsi all.

S6 for Python on lahendatavate ülesannete poolest võrreldav JavaScripti V8 mootoriga. Teek asendab olemasoleva ceval.c baitkoodi tõlgendaja käitleja oma teostusega, mis kasutab täitmise kiirendamiseks JIT-i kompileerimist. S6 kontrollib, kas praegune funktsioon on juba kompileeritud, ja kui jah, siis käivitab kompileeritud koodi ja kui ei, siis käivitab funktsiooni baitkoodi tõlgendamise režiimis, mis on sarnane CPythoni interpretaatoriga. Tõlgendus loendab töödeldava funktsiooniga seotud täidetavate käskude ja kõnede arvu. Pärast teatud verstaposti saavutamist käivitatakse kompileerimisprotsess, et kiirendada sageli täidetavat koodi. Kompileerimine viiakse läbi strongjiti vaheesitusse, mis pärast optimeerimist teisendatakse asmjiti teeki kasutades sihtsüsteemi masinkäskudeks.

Olenevalt koormuse iseloomust näitab S6 optimaalsetes tingimustes testi sooritamise kiiruse tõusu kuni 9.5 korda võrreldes tavalise CPythoniga. Richardsi testkomplekti 100 iteratsiooni käivitamisel on kiirendus 7 korda ja Raytrace testi, mis sisaldab suurt hulka matemaatilisi arvutusi, 3-4.5 korda kiirem.

Ülesanded, mida S6 abil on keeruline optimeerida, on projektid, mis kasutavad C API-d (nt NumPy), aga ka toimingud, mis on seotud vajadusega kontrollida suure hulga väärtuste tüüpe. Kehva jõudlust täheldatakse ka ressursimahukate funktsioonide üksikute väljakutsete puhul, mis on tingitud S6 enda optimeerimata Pythoni tõlgi realisatsiooni kasutamisest (arendus ei ole jõudnud tõlgendamisrežiimi optimeerimise faasi). Näiteks Unpack Sequence testis, mis pakib lahti suured massiivid / korteežid, täheldatakse ühe kõnega kuni 5-kordset aeglustumist ja tsüklilise kõne korral on jõudlus CPythonist 0.97.

Allikas: opennet.ru

Lisa kommentaar