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

DeepMind, ки бо пешрафтҳои худ дар соҳаи зеҳни сунъӣ маъруф аст, рамзи сарчашмаи лоиҳаи S6-ро кушод, ки барои забони Python як компилятори JIT таҳия кардааст. Лоиҳа ҷолиб аст, зеро он ҳамчун китобхонаи васеъкунӣ тарҳрезӣ шудааст, ки бо стандарти CPython муттаҳид шуда, мутобиқати пурраро бо CPython таъмин мекунад ва тағир додани коди тарҷумонро талаб намекунад. Лоиҳа аз соли 2019 таҳия шуда истодааст, аммо мутаассифона, он қатъ карда шуд ва дигар рушд намекунад. Азбаски таҳияҳои таҳияшуда метавонанд барои такмил додани Python муфид бошанд, қарор дода шуд, ки коди сарчашма кушода шавад. Рамзи компилятори JIT дар C++ навишта шудааст ва ба CPython 3.7 асос ёфтааст. ва аз рӯи иҷозатномаи Apache 2.0 кушода аст.

Дар робита ба вазифаҳое, ки он метавонад ҳал кунад, S6 барои Python бо муҳаррики V8 барои JavaScript муқоиса мекунад. Китобхона коркардкунандаи мавҷудаи тарҷумони байткоди ceval.c-ро бо татбиқи худ иваз мекунад, ки барои суръат бахшидан ба иҷроиш тартиб додани JIT-ро истифода мебарад. S6 месанҷад, ки оё функсияи ҷорӣ аллакай тартиб дода шудааст ва агар ин тавр бошад, рамзи тартибдодашударо иҷро мекунад ва агар не, функсияро дар реҷаи тафсири байткод, ба монанди тарҷумони CPython иҷро мекунад. Ҳангоми тарҷума шумораи дастурҳои иҷрошуда ва зангҳои марбут ба функсияи коркардшуда ҳисоб карда мешавад. Пас аз расидан ба марҳалаи муайян, раванди тартибдиҳӣ барои суръат бахшидани коди зуд-зуд иҷрошаванда оғоз мешавад. Ҷамъоварӣ ба намояндагии мобайнии strongjit анҷом дода мешавад, ки пас аз оптимизатсия, бо истифода аз китобхонаи asmjit ба дастурҳои мошини системаи ҳадаф табдил дода мешавад.

Вобаста ба хусусияти сарбории кор, S6 дар шароити оптималӣ афзоиши суръати иҷрои санҷишро дар муқоиса бо CPython муқаррарӣ то 9.5 маротиба нишон медиҳад. Ҳангоми иҷро кардани 100 итератсияи маҷмӯи тестии Ричардс, суръатбахшии 7 маротиба ва ҳангоми иҷро кардани санҷиши Raytrace, ки миқдори зиёди ҳисобҳои математикиро дар бар мегирад, 3-4.5 маротиба суръат мушоҳида мешавад.

Дар байни вазифаҳое, ки бо истифода аз S6 оптимизатсия кардан душвор аст, лоиҳаҳое ҳастанд, ки API-и C-ро истифода мебаранд, ба монанди NumPy, инчунин амалиётҳои марбут ба зарурати тафтиши намудҳои шумораи зиёди арзишҳо. Инчунин барои зангҳои якхелаи функсияҳои захираҳои серталаб низ аз сабаби истифодаи амалисозии ғайримуқаррарии тарҷумони Python S6 (таҳия ба марҳилаи оптимизатсияи режими тафсир нарасидааст) мушоҳида мешавад. Масалан, дар санҷиши Unpack Sequence, ки маҷмӯи зиёди массивҳо/кортаҳоро мекушояд, бо як занг то 5 маротиба сустшавӣ мушоҳида мешавад ва бо занги даврӣ иҷроиш аз CPython 0.97 аст.

Манбаъ: opennet.ru

Илова Эзоҳ