Predlažu kompajler za Python koji koristi tehniku ​​Copy-and-Patch

python-logo

Python je programski jezik visokog nivoa.

Nedavno jedan od glavnih CPython programeri su predstavili novi JIT kompajler za Python koristeći tehniku ​​Copy-and-Patch, koji je novija i inovativna tehnika kompilacije to jest ističe se brzinom, lakoćom održavanja i njegovu potpunu integraciju sa postojećim prevodiocem.

Kopiraj i zakrpi zasniva se na upotrebi unapred definisane biblioteke fragmenata binarnog koda poznatih kao "šablone" za izlaz optimizovanog mašinskog koda. Ovi predlošci su unaprijed izgrađene implementacije AST (Apstraktno stablo sintakse) čvorova ili bajtnih opkodova koji sadrže nedostajuće vrijednosti, kao što su neposredni literali, pomaci varijabli steka i ciljevi grananja i poziva.

Omogućava vam da sistematski generišete varijante binarnih šablona u C++ na čist i čist način. Koristi Clang+LLVM infrastrukturu kompajlera da sakrijete specifične detalje platforme na niskom nivou.

U toku rada, optimizacija i generisanje koda postaju jednostavniji zadacil Pronađite tabelu podataka koja sadrži odgovarajući predložak, kreirajte njegovu instancu i postavite je na željenu poziciju koristeći proces Copy-and-Patch, prilagođavajući sve nedostajuće vrednosti koje će biti zakrpljene tokom izvođenja.

Gledajući iz jednostavnije perspektive, sastoji se od kompajliranja (kopiranja) postojećeg izvornog koda i prilagođavanja nedostajućih vrijednosti ili specifičnih modifikacija (patch).

Copy-and-Patch uvelike olakšava automatsku konverziju tumača napisanog u C jeziku u JIT kompajleru, eliminišući potrebu za odvojenim kreiranjem logike generisanja koda i reprezentacija kompilacije. Korištenjem uobičajenog generatora koda, ispravljanje grešaka u interpretatoru rezultira automatskim rješavanjem istih problema u JIT-u.

Pristup Copy-and-Patch oslanja se na sličnost između premeštanja koda u memoriju Kada linker učitava objektne datoteke i zamjena strojnih instrukcija umjesto bajtkoda u JIT-u su slični zadaci. Tokom izvršavanja programa, lNavedene su instrukcije bajtkoda koje je generirao interpreter, i prethodno kompajlirani mašinski kod se kopira za svaku instrukciju u područje izvršne memorije, zatim ovog uputstva Oni se dinamički modificiraju kako bi zamijenili obrađene podatke u realnom vremenu. U slučaju JIT-a, unaprijed definirani predlošci se kopiraju iz već kompajliranih funkcija i zamjenjuju potrebnim vrijednostima, kao što su argumenti i konstante).

Implementacija JIT-a sa tehnikom Copy-and-Patch uključuje kompajliranje objektne datoteke u ELF formatu ilikoristeći LLVM. Ova prigovorena datoteka sadrži informacije o uputama bajtkoda i detalje o potrebnoj zamjeni podataka. Tokom izvršavanja, JIT zamjenjuje bajtkod instrukcije koje generiše interpreter sa prikazima mašinskog koda, istovremeno prilagođavajući podatke potrebne za proračune. Iako implementacija JIT-a zahtijeva LLVM kao ovisnost tokom kompilacije, komponente vremena izvođenja nisu vezane za vanjske ovisnosti, smanjujući na približno 300 redova rukom pisanog C koda i 3000 redova generiranog C koda.

Što se tiče performansi, predloženi JIT sa tehnikom Copy-and-Patch predstavlja značajna poboljšanja u poređenju sa tradicionalnim pristupima. U poređenju sa konvencionalnim JIT-ovima (LLVM -O0), ističe se 100 puta bržim generiranjem koda i rezultirajućim kodom koji Efikasniji je za 15%. U području kompilacije WebAssembly-a (Liftoff), novi JIT demonstrira 5x brže generiranje koda, a rezultirajući kod radi 50% brže.

U poređenju sa optimizacijskim JIT-om kao što je LuaJIT, koji koristi ručno pisani asemblerski kod, predloženi JIT je bio bolji u 13 od 44 testa. Iako je u prosjeku zaostajao u performansama za 35%, bitno je naglasiti da je ova razlika nadoknađena značajnim pojednostavljenjem održavanja i smanjenjem složenosti implementacije. Ova ravnoteža između performansi i efikasnosti u upravljanju kodom pozicionira predloženi JIT kao atraktivnu alternativu u okruženju performansi.

Finalmeni ako ste zainteresovani da saznate više o tome, možete provjeriti detalje Na sledećem linku.


Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.