DeepMind S6 me burim të hapur, një bibliotekë me një implementim të përpiluesit JIT për CPython

DeepMind, e njohur për zhvillimet e saj në fushën e inteligjencës artificiale, ka hapur kodin burimor të projektit S6, i cili zhvilloi një përpilues JIT për gjuhën Python. Projekti është interesant sepse është projektuar si një bibliotekë shtesë që integrohet me standardin CPython, duke siguruar përputhshmëri të plotë me CPython dhe duke mos kërkuar modifikim të kodit të interpretuesit. Projekti ka nisur që nga viti 2019, por fatkeqësisht është ndërprerë dhe nuk po zhvillohet më. Meqenëse zhvillimet e krijuara mund të jenë të dobishme për përmirësimin e Python, u vendos që kodi të hapej me burim. Kodi i përpiluesit JIT është shkruar në C++ dhe bazohet në CPython 3.7. dhe është me burim të hapur nën licencën Apache 2.0.

Për sa i përket detyrave që mund të zgjidhë, S6 për Python krahasohet me motorin V8 për JavaScript. Biblioteka zëvendëson trajtuesin ekzistues të interpretuesit të bytekodit ceval.c me implementimin e vet që përdor përpilimin JIT për të shpejtuar ekzekutimin. S6 kontrollon nëse funksioni aktual është kompiluar tashmë dhe, nëse po, ekzekuton kodin e përpiluar, dhe nëse jo, e ekzekuton funksionin në modalitetin e interpretimit të bytecode, ngjashëm me interpretuesin CPython. Gjatë interpretimit, numërohet numri i instruksioneve dhe thirrjeve të ekzekutuara që lidhen me funksionin që përpunohet. Pasi të arrihet një moment historik i caktuar, fillon një proces përpilimi për të shpejtuar kodin e ekzekutuar shpesh. Përpilimi kryhet në një përfaqësim të ndërmjetëm të fortëjit, i cili, pas optimizimit, shndërrohet në udhëzime makinerie të sistemit të synuar duke përdorur bibliotekën asmjit.

Në varësi të natyrës së ngarkesës së punës, S6 në kushte optimale demonstron një rritje të shpejtësisë së ekzekutimit të testit deri në 9.5 herë në krahasim me CPython të rregullt. Gjatë ekzekutimit të 100 përsëritjeve të grupit të testeve Richards, vërehet një shpejtësi 7x dhe kur ekzekutohet testi Raytrace, i cili përfshin një sasi të madhe llogaritjesh matematikore, vërehet një shpejtësi 3-4.5x.

Ndër detyrat që janë të vështira për t'u optimizuar duke përdorur S6 janë projektet që përdorin C API, si NumPy, si dhe operacionet që lidhen me nevojën për të kontrolluar llojet e një numri të madh vlerash. Performanca e ulët vërehet gjithashtu për thirrjet e vetme të funksioneve me burime intensive për shkak të përdorimit të zbatimit të paoptimizuar të vetë S6 të interpretuesit Python (zhvillimi nuk ka arritur në fazën e optimizimit të mënyrës së interpretimit). Për shembull, në testin Unpack Sequence, i cili shpaketon grupe të mëdha vargjesh/tupash, me një thirrje të vetme ka një ngadalësim deri në 5 herë, dhe me një thirrje ciklike performanca është 0.97 nga CPython.

Burimi: opennet.ru

Shto një koment