Для Python ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ JIT-компилятор, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ copy-and-patch

Π‘Ρ€Π°Π½Π΄Ρ‚ Π‘ΡƒΠΊΠ΅Ρ€ (Brandt Bucher) ΠΈΠ· ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Microsoft, входящий Π² число core-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² CPython ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰Π΅ΠΉΡΡ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° CPython, ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ JIT-компилятора для Python, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΡƒΡŽ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ Copy-and-Patch. ΠŸΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡ JIT ΠΏΡ€ΠΈΡƒΡ€ΠΎΡ‡Π΅Π½Π° ΠΊ РоТдСству ΠΈ анонс написан Π² стихах.

ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ JIT ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»Π΅Π½ ΠΎΡ‡Π΅Π½ΡŒ высокой ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°, простотой сопровоТдСния ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠ΅ΠΉ с ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ позволяСт автоматичСски ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, написанный Π½Π° языкС Π‘ΠΈ, Π² JIT-компилятор, Π±Π΅Π· ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ формирования Π»ΠΎΠ³ΠΈΠΊΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΈ Π±Π΅Π· Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ создания ассСмблСрных прСдставлСний. ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ исправлСниС ошибки Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ автоматичСски ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΈ ΠΊ ΡƒΡΡ‚Ρ€Π°Π½Π΅Π½ΠΈΡŽ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² JIT, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ±Ρ‰ΠΈΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π°.

Π Π°Π±ΠΎΡ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Copy-and-Patch основываСтся Π½Π° Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ рСлокация ΠΊΠΎΠ΄Π° Π² памяти ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ подстановка ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… инструкций вмСсто Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° Π² JIT, ΡΠ²Π»ΡΡŽΡ‚ΡΡ сходными Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ. ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ JIT Π² процСссС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ осущСствляСтся ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ созданных ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ инструкций Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ инструкции Π·Π°Ρ€Π°Π½Π΅Π΅ скомпилированного машинного ΠΊΠΎΠ΄Π° Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти с исполняСмым ΠΊΠΎΠ΄ΠΎΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π° Π»Π΅Ρ‚Ρƒ инструкций для подстановки Π² Π½ΠΈΡ… ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (JIT ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΡƒΠΆΠ΅ скомпилированных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ подставляСт Π² Π½ΠΈΡ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ значСния, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ константы). ΠŸΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ‚Π°ΠΊΠΆΠ΅ осущСствляСтся ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ машинного ΠΊΠΎΠ΄Π° Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ подстановка Π²Π½Π΅ΡˆΠ½ΠΈΡ… символов.

Π’ Copy-and-Patch JIT ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ LLVM собираСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ELF, содСрТащий Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ± инструкциях Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ Π·Π°ΠΌΠ΅Π½Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. JIT замСняСт сгСнСрированныС Π² Ρ…ΠΎΠ΄Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ инструкции Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° Π½Π° прСдставлСния Π² машинном ΠΊΠΎΠ΄Π΅, ΠΏΠΎΠΏΡƒΡ‚Π½ΠΎ подставляя Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для вычислСний Π΄Π°Π½Π½Ρ‹Π΅. РСализация JIT Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π² качСствС зависимости LLVM Π½Π° этапС сборки, Π½ΠΎ runtime-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½Π΅ привязаны ΠΊ внСшним зависимостям ΠΈ сводятся ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΊ 300 Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ написанным строкам Π½Π° языкС Π‘ΠΈ ΠΈ 3000 сгСнСрированным строкам ΠΊΠΎΠ΄Π° Π½Π° Π‘ΠΈ.

По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ JIT-инструмСнтариСм (LLVM -O0) ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ JIT обСспСчиваСт Π² 100 Ρ€Π°Π· Π±ΠΎΠ»Π΅Π΅ Π±Ρ‹ΡΡ‚Ρ€ΡƒΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π° ΠΈ Π½Π° 15% Π±ΠΎΠ»Π΅Π΅ быстрый Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄. По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с компиляциСй Π² WebAssembly (Liftoff) Π½ΠΎΠ²Ρ‹ΠΉ JIT Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ Π² 5 Ρ€Π°Π· быстрСС, Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° 50% быстрСС. Если ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ JIT с ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ JIT (LuaJIT), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ написанный ΠΊΠΎΠ΄ Π½Π° ассСмблСрС, Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ оказался быстрСС Π² 13 ΠΈΠ· 44 тСстах, Π° Π² срСднСм отстал ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π° 35%, ΠΏΡ€ΠΈ сущСствСнном ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠΈ сопровоТдСния ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠΈ уровня слоТности Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.



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