DeepMind kode irekiko S6, CPython-erako JIT konpiladorearen inplementazioa duten liburutegiak

DeepMind-ek, adimen artifizialaren alorrean izandako garapenengatik ezaguna, S6 proiektuaren iturburu-kodea ireki du, Python hizkuntzarako JIT konpilatzailea garatu zuena. Proiektua interesgarria da, CPython estandarrekin integratzen den luzapen liburutegi gisa diseinatuta dagoelako, CPython-ekin guztiz bateragarritasuna bermatuz eta ez du interpretatzailearen kodea aldatu behar. Proiektua 2019az geroztik garatzen ari da, baina zoritxarrez bertan behera gelditu zen eta jada ez da garatzen. Sortutako garapenak Python hobetzeko baliagarriak izan daitezkeenez, kodea irekitzea erabaki zen. JIT konpiladorearen kodea C++-n idatzita dago eta CPython 3.7-n oinarritzen da. eta kode irekiko Apache 2.0 lizentziapean dago.

Ebatzi ditzakeen zereginei dagokienez, Python-erako S6 JavaScript-erako V8 motorrarekin alderatzen da. Liburutegiak lehendik dagoen bytecode interpretatzailearen kudeatzailea ceval.c ordezkatzen du bere inplementazioarekin, exekuzioa bizkortzeko JIT konpilazioa erabiltzen duena. S6-k uneko funtzioa dagoeneko konpilatuta dagoen egiaztatzen du eta, hala bada, konpilatutako kodea exekutatzen du, eta hala ez bada, funtzioa bytecode interpretazio moduan exekutatzen du, CPython interpretearen antzera. Interpretazioan, prozesatzen ari den funtzioarekin lotutako exekutatu diren instrukzioen eta deien kopurua zenbatzen da. Mugarri jakin batera iritsi ondoren, konpilazio prozesu bat hasten da maiz exekutatzen den kodea azkartzeko. Konpilazioa bitarteko strongjit irudikapen batean burutzen da, eta, optimizatu ondoren, asmjit liburutegia erabiliz xede-sistemaren makina-argibideetan bihurtzen da.

Lan-kargaren izaeraren arabera, baldintza optimoetan S6-k probaren exekuzio-abiadura 9.5 aldiz handitzen du CPython arruntarekin alderatuta. Richards test suitearen 100 iterazio exekutatzen direnean, 7x bizkortzea ikusten da, eta Raytrace proba exekutatzen denean, kalkulu matematiko ugari dakarrena, 3-4.5x bizkortzea ikusten da.

S6 erabiliz optimizatzen zailak diren zereginen artean C APIa erabiltzen duten proiektuak daude, NumPy adibidez, baita balio kopuru handi baten motak egiaztatu beharrarekin lotutako eragiketak ere. Errendimendu baxua ere ikusten da baliabide intentsiboko funtzioen dei bakarrean, S6-k Python interpretearen optimizatu gabeko inplementazioa erabiltzeagatik (garapena ez da interpretazio modua optimizatzeko fasera iritsi). Adibidez, Unpack Sequence proban, array/tupla multzo handiak desegitean, dei bakar batekin 5 aldiz moteltzen da gehienez, eta dei zikliko batekin errendimendua CPython-en 0.97koa da.

Iturria: opennet.ru

Gehitu iruzkin berria