DeepMind ашық коды S6, CPython үшін JIT компиляторын іске асыруы бар кітапханалар

Жасанды интеллект саласындағы әзірлемелерімен танымал DeepMind Python тіліне арналған JIT компиляторын әзірлеген S6 жобасының бастапқы кодын ашты. Жоба қызықты, себебі ол стандартты CPython-мен біріктірілген, CPython-мен толық үйлесімділікті қамтамасыз ететін және аудармашы кодын өзгертуді қажет етпейтін кеңейтім кітапханасы ретінде жасалған. Жоба 2019 жылдан бері дамып келеді, бірақ, өкінішке орай, ол тоқтатылды және енді дамымайды. Жасалған әзірлемелер Python-ды жақсарту үшін пайдалы болуы мүмкін болғандықтан, бастапқы кодты ашу туралы шешім қабылданды. JIT компилятор коды C++ тілінде жазылған және CPython 3.7 негізінде жасалған. және Apache 2.0 лицензиясы бойынша ашық көзі болып табылады.

Ол шеше алатын тапсырмалар тұрғысынан Python үшін S6 JavaScript үшін V8 қозғалтқышымен салыстырады. Кітапхана ceval.c бар байт-кодты интерпретатор өңдегішін орындауды жылдамдату үшін JIT компиляциясын пайдаланатын өзінің іске асыруымен ауыстырады. S6 ағымдағы функцияның әлдеқашан құрастырылғанын тексереді және егер солай болса, құрастырылған кодты орындайды, ал болмаса, функцияны CPython интерпретаторына ұқсас байт кодты интерпретациялау режимінде іске қосады. Түсіндіру кезінде өңделетін функциямен байланысты орындалған нұсқаулар мен шақырулар саны есептеледі. Белгілі бір кезеңге жеткеннен кейін жиі орындалатын кодты жылдамдату үшін компиляция процесі басталады. Компиляция аралық күштік репрезентацияға жүзеге асырылады, ол оңтайландырудан кейін asmjit кітапханасының көмегімен мақсатты жүйенің машиналық нұсқауларына түрлендіріледі.

Жұмыс жүктемесінің сипатына қарай, S6 оңтайлы жағдайларда қарапайым CPython-мен салыстырғанда сынақты орындау жылдамдығының 9.5 есеге дейін артқанын көрсетеді. Richards тест жинағының 100 итерациясын орындаған кезде 7 есе, ал математикалық есептеулердің үлкен көлемін қамтитын Raytrace тестін орындағанда 3-4.5 есе жылдамдату байқалады.

S6 көмегімен оңтайландыру қиын болатын тапсырмалардың ішінде NumPy сияқты C API қолданатын жобалар, сондай-ақ мәндердің үлкен санының түрлерін тексеру қажеттілігіне байланысты операциялар бар. Сондай-ақ, Python интерпретаторының S6-ның оңтайландырылмаған іске асырылуын (әзірлеу интерпретация режимін оңтайландыру кезеңіне жеткен жоқ) пайдалануына байланысты ресурсты қажет ететін функциялардың бір рет шақырулары үшін төмен өнімділік байқалады. Мысалы, массивтердің/кортеждердің үлкен жиынын ашатын Unpack Sequence сынағы бір қоңырауда 5 есеге дейін баяулайды, ал циклдік шақыру кезінде өнімділік CPython-дан 0.97 құрайды.

Ақпарат көзі: opennet.ru

пікір қалдыру