DeepMind բաց կոդ S6, գրադարաններ JIT կոմպիլյատորի ներդրմամբ CPython-ի համար

DeepMind-ը, որը հայտնի է արհեստական ​​ինտելեկտի ոլորտում իր զարգացումներով, բացել է S6 նախագծի սկզբնական կոդը, որը մշակել է Python լեզվի JIT կոմպիլյատորը։ Նախագիծը հետաքրքիր է, քանի որ այն նախագծված է որպես ընդլայնման գրադարան, որը ինտեգրվում է ստանդարտ CPython-ի հետ՝ ապահովելով լիարժեք համատեղելիություն CPython-ի հետ և չպահանջելով թարգմանչի կոդի փոփոխություն: Նախագիծը զարգանում է 2019 թվականից, սակայն, ցավոք, այն դադարեցվել է և այլևս չի զարգանում։ Քանի որ ստեղծված զարգացումները կարող են օգտակար լինել Python-ի բարելավման համար, որոշվեց բացել կոդը: JIT կոմպիլյատորի կոդը գրված է C++-ով և հիմնված է CPython 3.7-ի վրա: և բաց է Apache 2.0 լիցենզիայի ներքո:

Ինչ վերաբերում է խնդիրներին, որոնք կարող է լուծել, S6-ը Python-ի համար համեմատվում է JavaScript-ի V8 շարժիչի հետ: Գրադարանը փոխարինում է գոյություն ունեցող բայթկոդի թարգմանիչ ceval.c-ին իր սեփական ներդրմամբ, որն օգտագործում է JIT կոմպիլյացիան՝ կատարումն արագացնելու համար: S6-ը ստուգում է, թե արդյոք ընթացիկ ֆունկցիան արդեն կազմված է, և եթե այո, ապա կատարում է կազմված կոդը, իսկ եթե ոչ, ապա գործարկում է բայթկոդի մեկնաբանման ռեժիմում՝ CPython թարգմանիչի նման։ Մեկնաբանման ընթացքում հաշվվում է կատարված ցուցումների և զանգերի քանակը, որոնք կապված են մշակվող ֆունկցիայի հետ: Որոշակի նշաձողին հասնելուց հետո սկսվում է կոմպիլյացիայի գործընթաց՝ հաճախակի կատարվող կոդը արագացնելու համար: Կոմպիլյացիան իրականացվում է միջանկյալ strongjit ներկայացման մեջ, որը օպտիմալացումից հետո վերածվում է թիրախային համակարգի մեքենայական հրահանգների՝ օգտագործելով asmjit գրադարանը:

Կախված ծանրաբեռնվածության բնույթից, S6-ը օպտիմալ պայմաններում ցույց է տալիս թեստի կատարման արագության աճ մինչև 9.5 անգամ՝ սովորական CPython-ի համեմատ: Ռիչարդսի թեստային փաթեթի 100 կրկնություն գործարկելիս նկատվում է 7 անգամ արագություն, իսկ Raytrace թեստը, որը ներառում է մեծ քանակությամբ մաթեմատիկական հաշվարկներ, նկատվում է 3-4.5 անգամ արագացում։

Առաջադրանքների թվում, որոնք դժվար է օպտիմալացնել S6-ի միջոցով, կան նախագծեր, որոնք օգտագործում են C API-ն, ինչպիսին է NumPy-ը, ինչպես նաև մեծ թվով արժեքների տեսակները ստուգելու անհրաժեշտության հետ կապված գործողություններ: Ցածր կատարողականություն է նկատվում նաև ռեսուրսների ինտենսիվ գործառույթների առանձին կանչերի դեպքում՝ կապված S6-ի Python թարգմանչի սեփական չօպտիմիզացված իրականացման հետ (մշակումը չի հասել մեկնաբանման ռեժիմի օպտիմալացման փուլին): Օրինակ, Unpack Sequence թեստում, որը բացում է զանգվածների/տուփերի մեծ հավաքածուները, մեկ զանգի դեպքում դանդաղում է մինչև 5 անգամ, իսկ ցիկլային զանգի դեպքում կատարումը CPython-ից 0.97 է:

Source: opennet.ru

Добавить комментарий