Kompania DeepMind, e njohur për zhvillimet e saj në fushën e inteligjencës artificiale, ka hapur kodin burimor të projektit S6, i cili zhvillonte një JIT-kompilator për gjuhën Python. Projekti është interesant për mënyrën e strukturimit si një bibliotekë-zgjerimi, e integrueshme me CPython standard, që ofron përshtatshmëri të plotë me CPython dhe nuk kërkon modifikimin e kodit të interpretuestit. Projekti është zhvilluar që nga viti 2019, por fatkeqësisht është anuluar dhe nuk po zhvillohet më. Duke pasur parasysh se zhvillimet e krijuara mund të jenë të dobishme për përmirësimin e Python, është marrë vendimi për të hapur kodin burimor. Kodi i JIT-kompilatorit është shkruar në gjuhën C++, është bazuar në CPython 3.7 dhe është hapur nën licencën Apache 2.0.
Për problemet që zgjidh, S6 për Python krahasohet me motorin V8 për JavaScript. Biblioteka zëvendëson përpunuesin ekzistues të bytecode të interpretuestit ceval.c me një realizim të vetin, që përdor JIT-kompilimin për të përshpejtuar ekzekutimin. S6 kontrollon nëse funksioni aktual është kompiluara tashmë dhe, nëse është, ekzekuton kodin e kompiluar; nëse jo, nis funksionin në modin e interpretimit të bytecode-it, i ngjashëm me interpretuestin CPython. Gjatë interpretimit, numërohen instrukcionet e kryera dhe acceset që lidhen me funksionin e përpunuar. Pas arritjes së një shkalle të caktuar, për të përshpejtuar kodin që ekzekutohet shpesh, nisi procesi i kompilimit. Kompilimi bëhet në një përfaqësim të ndërmjetëm strongjit, i cili pas optimizimit konvertohet në instrukcione makinerie për sistemin përkatës me bibliotekën asmjit.
Në varësi të karakterit të ngarkesës, S6 nën kushtet optimale tregon një rritje të shpejtësisë së ekzekutimit të testeve deri në 9.5 herë në krahasim me CPython të zakonshëm. Gjatë ekzekutimit të 100 iteracioneve të grupit të testit Richards, vërehet një përshpejtim prej 7 herësh, ndërsa në testin Raytrace, ku ka një volum të madh llogaritjesh matematikore, përshpejtohet nga 3 deri në 4.5 herë.
Nga detyrat që e kanë të vështirë optimizimin përmes S6, përmenden projektet që përdorin C API, të tilla si NumPy, si dhe operacionet që lidhen me nevojën për të verifikuar llojet e një numri të madh vlerash. Performanca e ulët vërehet gjithashtu për thirrjet e njohura të funksioneve që kërkojnë shumë resurset për shkak të përdorimit në S6 të realizimit të vet të paoptimizuar të interpretuestit Python (zhvillimi nuk ka arritur në fazën e optimizimit të modit të interpretimit). Për shembull, në testin Unpack Sequence, që bën çpakësimin e grupeve të mëdha të array-eve/tuples, në një thirrje të vetme vërehet një ngadalësim deri në 5 herë, ndërsa në thirrje ciklike, performanca është 0.97 e CPython.
Burimi: opennet.ru
