Red Hat MIR JIT компиляторын жасайды

Red Hat-те әзірлеу жүргізілуде жаңа жеңіл JIT компиляторы MIR, ол бұрын MIR аралық өкілдігіне түрлендірілген кодтың орындалуын қамтамасыз етеді (Орташа ішкі өкілдік, басқа аралық өкілдікпен шатастырмау үшін MIR (орта деңгейлі IR), Rust компиляторында қолданылады). Жоба жылдам және ықшам аудармашылар мен JIT жүйесін енгізу үшін негізді қамтамасыз етуге бағытталған. Жоба коды C және тілінде жазылған таралады MIT лицензиясы бойынша.

Қазіргі даму кезеңінде MIR аралық өкілдігіне аудармашылар дайындалуда C тілі және бит коды LLVM (Биткод), бірақ болашақта WebAssembly, Java байт коды үшін MIR құру мүмкіндігін енгізу жоспарлануда. ҚСС (Common Intermediate Language), Rust және C++. Жобаны JIT қозғалтқышын жасаушылардың бірі әзірлеуде MJIT, Ruby тілінде қолданылады. Ең алдымен, MIR негізіндегі JIT-ті енгізу жоспарлануда CRuby и MRuby. Болашақта MIR пайдалану үшін GCC портын орнатуға болады.

Red Hat MIR JIT компиляторын жасайды

Аралық MIR коды екілік және мәтіндік (оқылатын) түрінде ұсынылуы мүмкін. Бұл кодты интерпретаторда орындауға және оның негізінде машина кодын жасауға болады (x86_64, ARM64, PPC64 және MIPS64 жоспарларында). Сондай-ақ кері түрлендіруді орындауға болады - MIR-ден CIL-ге, Java байт кодына, WebAssembly және C кодына.

MIR ерекшеліктерінің ішінде қатаң теру, модульдер мен функцияларды қолдау, типті түрлендіру, салыстыру, арифметикалық және логикалық операцияларды орындау, тармақтау үшін нұсқаулар жинағын қамтамасыз ету және т.б. MIR пішіміне түрлендірілген функциялар жиынтығын қамтитын модульдерді кітапханалар түрінде жүктеуге болады, сонымен қатар сыртқы C кодын жүктеуге болады.

Red Hat MIR JIT компиляторын жасайдыRed Hat MIR JIT компиляторын жасайды

JIT жүйесінде аралық кодты жергілікті орындалатын файлдарға құрастырудың орнына орындаудың басты артықшылығы әртүрлі аппараттық архитектураларда (x86, ARM, PPC, MIPS) қайта құрусыз орындалатын ықшам файлдарды жасау мүмкіндігі болып табылады. Қолдау көрсетілмейтін архитектуралар үшін MIR жағдайында JIT-тен 6-10 есе баяу болатын интерпретация режимі қол жетімді.

Қолданыстағы JIT компиляторларының кемшіліктері
GCC және LLVM шамадан тыс толтырылған, құрастыру жылдамдығы төмен және әртүрлі бағдарламалау тілдері үшін біріктірілген оңтайландыруды жүзеге асыру қиын деп айтылады. MIR әзірлеушілері оларды шешуге тырысты
мәселелер мен алға қойылған мақсаттар:

  • MIR-де құрастыру GCC-ге қарағанда кем дегенде 100 есе жылдам болуы керек;
  • MIR орындауға арналған JIT өте ықшам болуы және шамамен 15 мың код жолын қамтуы керек;
  • JIT көмегімен MIR орындау GCC-дегі бірдей C кодынан құрастырылған орындалатын файлдың өнімділігінен («-O30» оңтайландыруларымен) 2%-дан баяу болмауы керек;
  • Нақты орындау басталғанға дейінгі инициализация кезеңдері 100 есе аз уақыт алуы керек;
  • JIT үшін MIR көрінісі GCC-те құрастырылған орындалатын файлдан 100 есе аз болуы керек.

Қазіргі пішінде MIR енгізу көптеген жолдармен бастапқы қойылған мақсаттардан алда: сынақтар MIR-де компиляция өнімділігі «GCC -O2-ге қарағанда 178 есе жылдамырақ», орындау өнімділігі жергілікті кодтан 6% артта екенін көрсетті, код өлшемі 144 есе аз, MIR енгізу JIT 16 мың жол кодты құрайды.

Red Hat MIR JIT компиляторын жасайды

Ақпарат көзі: opennet.ru

пікір қалдыру