Red Hat Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π° MIR JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€

Π’ Red Hat Π² процСс Π½Π° Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Π½ΠΎΠ² Π»Π΅ΠΊ JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ MIR, ΠΊΠΎΠ΅Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° Π΅ Π±ΠΈΠ» ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½ Π² ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ прСдставянС MIR (срСдно Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΎ прСдставянС, Π΄Π° Π½Π΅ сС Π±ΡŠΡ€ΠΊΠ° с Π΄Ρ€ΡƒΠ³ΠΎ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ прСдставянС MIR (IR ΠΎΡ‚ срСдно Π½ΠΈΠ²ΠΎ), ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° Rust). ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ ΠΈΠΌΠ° Π·Π° Ρ†Π΅Π» Π΄Π° прСдостави Ρ€Π°ΠΌΠΊΠ° Π·Π° внСдряванС Π½Π° Π±ΡŠΡ€Π·ΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΈ ΠΈ JIT. ΠšΠΎΠ΄ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΅ написан Π½Π° C ΠΈ разпространява сС ΠΎΡ‚ ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·Π° Π½Π° MIT.

На настоящия Π΅Ρ‚Π°ΠΏ Π½Π° Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ са ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ΠΈ ΠΏΡ€Π΅Π²ΠΎΠ΄Π°Ρ‡ΠΈ Π² ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎΡ‚ΠΎ прСдставянС Π½Π° MIR C Π΅Π·ΠΈΠΊ ΠΈ Π±ΠΈΡ‚ΠΊΠΎΠ΄ LLVM (Bitcode), Π½ΠΎ Π² Π±ΡŠΠ΄Π΅Ρ‰Π΅ сС ΠΏΠ»Π°Π½ΠΈΡ€Π° Π΄Π° сС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° MIR Π·Π° WebAssembly, Java Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄, CIL (ΠžΠ±Ρ‰ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ Π΅Π·ΠΈΠΊ), Rust ΠΈ C++. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ сС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π° ΠΎΡ‚ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° двигатСля JIT MJIT, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² Ruby. На ΠΏΡŠΡ€Π²ΠΎ място, JIT, Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° MIR, сС ΠΏΠ»Π°Π½ΠΈΡ€Π° Π΄Π° бъдС Π²Π½Π΅Π΄Ρ€Π΅Π½ Π·Π° CRuby ΠΈ MRuby. Π’ Π±ΡŠΠ΄Π΅Ρ‰Π΅ ΡΡŠΡ‰ΠΎ Π΅ възмоТно Π΄Π° прСнСсСтС GCC Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° MIR.

Red Hat Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π° MIR JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€

ΠœΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΈΡΡ‚ MIR ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС прСдставСн Π² Π΄Π²ΠΎΠΈΡ‡Π½Π° ΠΈ тСкстова (Ρ‡Π΅Ρ‚ΠΈΠΌΠ°) Ρ„ΠΎΡ€ΠΌΠ°. Π’ΠΎΠ·ΠΈ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° сС изпълни Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈ въз основа Π½Π° Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° машинСн ΠΊΠΎΠ΄ (x86_64, Π² ΠΏΠ»Π°Π½ΠΎΠ²Π΅ ARM64, PPC64 ΠΈ MIPS64). Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΡ‚ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ - ΠΎΡ‚ MIR към CIL, Java bytecode, WebAssembly ΠΈ C ΠΊΠΎΠ΄.

Π‘Ρ€Π΅Π΄ характСристикитС Π½Π° MIR сС открояват стриктно Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€Π°Π½Π΅, ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, прСдоставянС Π½Π° Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ инструкции Π·Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅, сравнСниС, Π°Ρ€ΠΈΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‡Π½ΠΈ ΠΈ логичСски ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, разклоняванС ΠΈ Π΄Ρ€. ΠœΠΎΠ΄ΡƒΠ»ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½ΠΈ във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ MIR, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π·Π°Ρ€Π΅Π΄Π΅Π½ΠΈ ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ ΠΌΠΎΠ³Π°Ρ‚ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π΄Π° Π·Π°Ρ€Π΅ΠΆΠ΄Π°Ρ‚ външСн C ΠΊΠΎΠ΄.

Red Hat Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π° MIR JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Red Hat Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π° MIR JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€

ΠšΠ»ΡŽΡ‡ΠΎΠ²ΠΎΡ‚ΠΎ прСдимство Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ ΠΊΠΎΠ΄ Π² JIT вмСсто ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π² собствСни изпълними Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ изпълнСни Π±Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€Π½ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΈ (x86, ARM, PPC, MIPS). Π—Π° Π½Π΅ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΈ Π΅ Π½Π°Π»ΠΈΡ‡Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ Π½Π° интСрпрСтация, ΠΊΠΎΠΉΡ‚ΠΎ Π² случая Π½Π° MIR Π΅ 6-10 ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-Π±Π°Π²Π΅Π½ ΠΎΡ‚ JIT.

ΠΠ΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈ Π½Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ‚Π΅ JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΠΈ
Π’Π²ΡŠΡ€Π΄ΠΈ сС, Ρ‡Π΅ GCC ΠΈ LLVM са ΠΏΡ€Π΅ΠΊΠ°Π»Π΅Π½ΠΎ Ρ€Π°Π·Π΄ΡƒΡ‚ΠΈ, ΠΈΠΌΠ°Ρ‚ ниска скорост Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ ΠΈ са Ρ‚Ρ€ΡƒΠ΄Π½ΠΈ Π·Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π΅Π·ΠΈΡ†ΠΈ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° MIR сС ΠΎΠΏΠΈΡ‚Π°Ρ…Π° Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ Ρ‚Π΅Π·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ
ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈ поставСни Ρ†Π΅Π»ΠΈ:

  • ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π² MIR трябва Π΄Π° бъдС ΠΏΠΎΠ½Π΅ 100 ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π² GCC;
  • JIT Π·Π° изпълнСниС Π½Π° MIR трябва Π΄Π° бъдС ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π΅Π½ ΠΈ Π΄Π° Π²ΠΊΠ»ΡŽΡ‡Π²Π° ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ 15 хиляди Ρ€Π΅Π΄Π° ΠΊΠΎΠ΄;
  • Π˜Π·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° MIR с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° JIT Π½Π΅ трябва Π΄Π° бъдС с ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 30% ΠΏΠΎ-Π±Π°Π²Π½ΠΎ ΠΎΡ‚ производитСлността Π½Π° изпълним Ρ„Π°ΠΉΠ», ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ ΠΎΡ‚ ΡΡŠΡ‰ΠΈΡ C ΠΊΠΎΠ΄ Π² GCC (с ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ "-O2");
  • Π•Ρ‚Π°ΠΏΠΈΡ‚Π΅ Π½Π° инициализация ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ Ρ€Π΅Π°Π»Π½ΠΎΡ‚ΠΎ изпълнСниС трябва Π΄Π° ΠΎΡ‚Π½Π΅ΠΌΠ°Ρ‚ 100 ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅;
  • MIR прСдставянСто Π·Π° JIT трябва Π΄Π° бъдС 100 ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ‚ изпълнимия Ρ„Π°ΠΉΠ», ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ Π² GCC.

Π’ настоящата си Ρ„ΠΎΡ€ΠΌΠ° внСдряванСто Π½Π° MIR Π² ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΈΠ·ΠΏΡ€Π΅Π²Π°Ρ€Π²Π° ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ поставСнитС Ρ†Π΅Π»ΠΈ: тСстовСтС ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‚, Ρ‡Π΅ производитСлността Π½Π° компилация Π² MIR Π΅ 2 ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-Π±ΡŠΡ€Π·Π° ΠΎΡ‚ β€žGCC -O178β€œ, производитСлността Π½Π° изпълнСниС Π΅ 6% Π·Π°Π΄ СстСствСния ΠΊΠΎΠ΄, Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° ΠΊΠΎΠ΄Π° Π΅ 144 ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-малък, ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° MIR JIT Π΅ 16 хиляди Ρ€Π΅Π΄Π° ΠΊΠΎΠ΄.

Red Hat Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π° MIR JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€