Red Hat evoluigas MIR JIT-kompililon

Ĉe Ruĝa Ĉapelo evoluo daŭras nova malpeza JIT-kompililo MI, kiu certigas la plenumon de kodo, kiu antaŭe estis konvertita al meza reprezentado MIR (Medium Internal Representation, ne konfuzu kun alia meza reprezentado MI (meznivela IR), uzata en la Rust-kompililo). La projekto celas disponigi kadron por efektivigado de rapidaj kaj kompaktaj interpretistoj kaj JIT. La projektkodo estas skribita en C kaj distribuita de sub la MIT-licenco.

En la nuna stadio de evoluo, tradukistoj en la mezan reprezentadon de MIR estas pretaj por C lingvo kaj bitokodo LLVM (Bitkodo), sed estonte estas planite efektivigi la kapablon generi MIR por WebAssembly, Java-bajtkodo, CIL (Komuna Meza Lingvo), Rust kaj C++. La projekto estas evoluigita fare de unu el la JIT-motorprogramistoj MJIT, uzita en Ruby. Antaŭ ĉio, JIT bazita sur MIR estas planita esti efektivigita por CRuby и MRuby. En la estonteco, ankaŭ eblas porti GCC por uzi MIR.

Red Hat evoluigas MIR JIT-kompililon

La meza MIR-kodo povas esti prezentita en binara kaj teksta (legebla) formo. Ĉi tiu kodo povas esti efektivigita en interpretisto kaj maŝinkodo povas esti generita surbaze de ĝi (x86_64, en ARM64, PPC64 kaj MIPS64 planoj). Eblas ankaŭ plenumi la inversan konvertiĝon - de MIR al CIL, Java-bajtokodo, WebAssembly kaj C-kodo.

Inter la trajtoj de MIR elstaras strikta tajpado, subteno por moduloj kaj funkcioj, disponigo de aro da instrukcioj por tipkonvertiĝo, komparo, aritmetikaj kaj logikaj operacioj, disbranĉigo ktp. Moduloj, kiuj inkluzivas aron de funkcioj konvertitaj al la MIR-formato, povas esti ŝarĝitaj en la formo de bibliotekoj, kaj ankaŭ povas ŝarĝi eksteran C-kodon.

Red Hat evoluigas MIR JIT-kompililonRed Hat evoluigas MIR JIT-kompililon

La ŝlosila avantaĝo de ekzekuti mezan kodon en JIT anstataŭe de kompili en indiĝenajn ruleblajn dosierojn estas la kapablo generi kompaktajn dosierojn, kiuj povas esti efektivigitaj sen rekonstruado sur malsamaj hardvararkitekturoj (x86, ARM, PPC, MIPS). Por nesubtenataj arkitekturoj, interpreta reĝimo estas disponebla, kiu en la kazo de MIR estas 6-10 fojojn pli malrapida ol JIT.

Malavantaĝoj de ekzistantaj JIT-kompililoj
GCC kaj LLVM laŭdire estas tro ŝvelintaj, havas malaltan kompilrapidecon, kaj malfacilas efektivigi kombinitajn optimumigojn por malsamaj programlingvoj. MIR-programistoj provis solvi ĉi tiujn
problemoj kaj fiksu celojn:

  • Kompilo en MIR devus esti almenaŭ 100 fojojn pli rapida ol en GCC;
  • La JIT por MIR-ekzekuto devas esti tre kompakta kaj inkluzivi proksimume 15 mil liniojn de kodo;
  • Efektivigi MIR uzante JIT devus esti ne pli ol 30% pli malrapida ol la agado de plenumebla kompilita de la sama C-kodo en GCC (kun "-O2" optimumoj);
  • La komencaj etapoj antaŭ la efektiva ekzekuto komenciĝas devus preni 100 fojojn malpli da tempo;
  • La MIR-reprezentantaro por JIT devas esti 100 fojojn pli malgranda ol la rulebla kompilita en GCC.

En ĝia nuna formo, la MIR-efektivigo multrilate estas antaŭ la komence fiksitaj celoj: testoj montris, ke kompila rendimento en MIR estas 2 fojojn pli rapida ol "GCC -O178", ekzekutrendimento estas 6% malantaŭ denaska kodo, la koda grandeco. estas 144 fojojn pli malgranda, la MIR-efektivigo JIT estas 16 mil linioj de kodo.

Red Hat evoluigas MIR JIT-kompililon

fonto: opennet.ru

Aĉetu fidindan gastigadon por retejoj kun DDoS-protekto, VPS-VDS-serviloj 🔥 Aĉetu fidindan retejan gastigadon kun DDoS-protekto, VPS VDS-servilojn | ProHoster