DeepMind, tvrtka poznata po svom radu na području umjetne inteligencije, dala je otvoreni kod za projekt S6, koji je razvio JIT kompajler za Python. Projekt je značajan po svom dizajnu kao biblioteka za proširenje koja se integrira s izvornim CPythonom, osiguravajući potpunu kompatibilnost s CPythonom i ne zahtijevajući nikakve izmjene koda interpretatora. Projekt je bio u razvoju od 2019. godine, ali nažalost, obustavljen je i više se ne razvija. Budući da bi stvoreni rad mogao biti koristan za poboljšanje Pythona, donesena je odluka o njegovom otvorenom kodu. Kod JIT kompajlera napisan je u C++, temeljen na CPythonu 3.7, i licenciran je pod licencom Apache 2.0.
Što se tiče zadataka koje rješava, S6 za Python uspoređuje se s V8 engineom za JavaScript. Biblioteka zamjenjuje postojeći ceval.c bajtkodni interpretator vlastitom implementacijom koja koristi just-in-time (JIT) kompilaciju za ubrzanje izvršavanja. S6 provjerava je li trenutna funkcija već kompilirana i, ako jest, izvršava kompilirani kod. Ako nije, pokreće funkciju u načinu interpretacije bajtkoda, slično CPython interpreteru. Tijekom interpretacije broji se broj izvršenih instrukcija i poziva povezanih s funkcijom koja se obrađuje. Nakon što se dosegne određeni prag, pokreće se proces kompilacije kako bi se ubrzao često izvršavani kod. Kompilacija se odvija u strongjit međureprezentaciju, koja se nakon optimizacije pretvara u izvorne strojne instrukcije za ciljni sustav pomoću asmjit biblioteke.
Ovisno o opterećenju, S6, pod optimalnim uvjetima, pokazuje do 9.5x brže izvršavanje benchmarkova od standardnog CPythona. Pokretanje 100 iteracija Richardsovog benchmark paketa rezultira ubrzanjem od 7x, dok pokretanje Raytrace benchmarka, koji uključuje opsežne matematičke izračune, rezultira ubrzanjem od 3-4.5x.
Zadaci koje je teško optimizirati pomoću S6 uključuju projekte koji koriste C API, poput NumPy-a, i operacije koje zahtijevaju provjeru tipa velikog broja vrijednosti. Niske performanse također se primjećuju kod pojedinačnih poziva funkcija koje intenzivno koriste resurse zbog korištenja vlasničkog, neoptimiziranog Python interpretera u S6-u (razvoj još nije dosegao fazu optimizacije interpretiranog načina rada). Na primjer, u testu Unpack Sequence, koji raspakira velike skupove nizova/torki, pojedinačni poziv usporava se i do 5 puta, dok ciklički poziv rezultira performansama koje su 0.97 puta sporije od CPython-a.
Izvor: opennet.ru
