DeepMind avas S6 koodi, JIT-kompilaatori teostamise raamatukogu CPython jaoks

DeepMind, mis sai tuntuks tehisintellekti arendustega, avalikustas S6 projekti allikakoodid, mis töötas välja JIT-kompilaatori Python'i keele jaoks. Projekt on huvitav, kuna see on vormistatud laiendusteegina, mis integreerub ingu CPythoniga, tagades täieliku ühilduvuse CPythoniga ja ei nõua tõlgendi koodi modifitseerimist. Projekt arenes alates 2019. aastast, kuid kahjuks lõpetati see ja see ei arene enam. Kuna loodud arendused võivad osutuda kasulikeks Python'i parandamiseks, otsustati allikakoodid avalikustada. JIT-kompilaatori kood on kirjutatud C++ keeles, põhinedes CPython 3.7-l ja on avatud Apache 2.0 litsentsi all.

S6 Pythonis lahendatavate ülesannete osas võrreldakse V8 JavaScripti mootori kihiga. Raamatukogu asendab olemasoleva baytkoodi tõlgendaja ceval.c oma teostusega, mis kasutab JIT-kompileerimist täitmise kiirus suurendamiseks. S6 kontrollib, kas praegune funktsioon on juba kompileeritud; kui jah, siis käitab see kompileeritud koodi, ja kui ei, siis käivitab funktsiooni baytkoodi tõlgendamise režiimis, mis sarnaneb CPythoni tõlgendajaga. Tõlgendamise käigus loetakse täidetud käske ja seoseid, mis on seotud töödeldava funktsiooniga. Kui saavutatakse teatud vahemaa, algatatakse sageli käideldava koodi kiirendamiseks kompileerimisprotsess. Kompileerimine toimub vahepealsele esitajale strongjit, mis pärast optimeerimist muudetakse sihtrate süsteemi masiinakirjeteks raamatukogu asmjit abil.

S6 näitab optimaalseid tingimusi pidades koormuse iseloomust kuni 9,5 korda suuremat testide käivitamise kiirus, võrreldes tavapärase CPythoniga. Richardsi testkomplekti 100 iteratsiooni käivitamisel täheldatakse kiirusetõusu 7 korda, samas kui Raytrace'i testis, mis sisaldab suurt hulka matemaatilisi arvutusi, on kiirusetõus 3–4,5 korda.

S6 abil halvasti optimeeritavatesse ülesannetesse kuuluvad projektid, mis kasutavad C API-d, nagu NumPy, samuti operatsioonid, mis nõuavad suure hulga väärtuste tüüpide kontrollimist. Madalat jõudlust täheldatakse ka ressursimahukate funktsioonide üksikute kutsumiste puhul S6 enda mitteoptimeeritud Python tõlgendi kasutamise tõttu (arendus ei ole jõudnud optimeerimise etappi). Näiteks Unpack Sequence testis, mis teostab suurte massiivide/tuple’ite lahti pakkimist, täheldatakse üksikute kutsumiste korral kuni 5 korda aeglustumist, samas kui tsüklite korral on jõudlus 0,97 CPythonist.

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster