Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΡ€Π·ΠΈΠ½ΡƒΠŸΠΎΠ·Π²ΠΎΠ½ΠΈΡ‚ΡŒ
Найти Π² Π”Π·Π΅Π½Π΅

πŸš€ TPDE-LLVM: ΠΊΠΎΠ³Π΄Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ компиляции Π²Π°ΠΆΠ½Π΅Π΅ всСго

Π’ ΠΌΠΈΡ€Π΅ компиляторов Π½ΠΎΠ²ΠΎΡΡ‚ΡŒ ΠΎ появлСнии TPDE-LLVM выглядит ΠΊΠ°ΠΊ малСнькая Ρ€Π΅Π²ΠΎΠ»ΡŽΡ†ΠΈΡ. Новый бэкСнд для LLVM ΠΎΠ±Π΅Ρ‰Π°Π΅Ρ‚ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ процСсс Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ машинного ΠΊΠΎΠ΄Π° Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ -O0 Π² 10–20 Ρ€Π°Π·. Для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ дСнь Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с большими ΠΊΠΎΠ΄ΠΎΠ²Ρ‹ΠΌΠΈ Π±Π°Π·Π°ΠΌΠΈ ΠΈΠ»ΠΈ запускаСт CI-сборки дСсятки Ρ€Π°Π·, это Π·Π²ΡƒΡ‡ΠΈΡ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΊΠ°ΠΊ магия. πŸ’‘ Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±, Π²Π°ΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π΅ΠΆΠΈΠΌ -O0 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅ для Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Π° для быстрой ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. Он Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ максимально Β«ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒΒ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅Π±Π°Π³Π³Π΅Ρ€ ΠΌΠΎΠ³ Ρ‚ΠΎΡ‡Π½ΠΎ ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ строки исходника ΠΈ исполняСмый ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Однако Ρ†Π΅Π½Π° Ρ‚Π°ΠΊΠΎΠΉ прозрачности β€” мСдлСнная компиляция. И Π²ΠΎΡ‚ TPDE-LLVM ΠΎΠ±Π΅Ρ‰Π°Π΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту боль. πŸ› οΈ АрхитСктура Π½ΠΎΠ²ΠΎΠ³ΠΎ бэкСнда построСна Π½Π° Ρ‚Ρ€Ρ‘Ρ… простых ΡˆΠ°Π³Π°Ρ…: πŸ“Š На тСстах SPEC CPU 2017 для x86-64 ускорСниС составило Π² срСднСм 13,34Γ— ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с -O0-IR ΠΈ 17,58Γ—ΠΏΡ€ΠΈ -O1-IR. ΠŸΡ€ΠΈ этом Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° вырос всСго Π½Π° ~27 % для O0 ΠΈ Π΄Π°ΠΆΠ΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ»ΡΡ ΠΏΡ€ΠΈ O1. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π΅ΡΡ‚ΡŒ ΠΈ минусы: Авторы ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΡŽΡ‚ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΎΠ²ΡƒΡŽ Π°Π»Π»ΠΎΠΊΠ°Ρ†ΠΈΡŽ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ
ОглавлСниС
Новый бэкСнд TPDE-LLVM ускоряСт ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ Π½Π° 10–20 Ρ€Π°Π· ΠΏΡ€ΠΈ минимальном ростС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΊΠΎΠ΄Π°, сохраняя ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΠΌΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.
Новый бэкСнд TPDE-LLVM ускоряСт ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ Π½Π° 10–20 Ρ€Π°Π· ΠΏΡ€ΠΈ минимальном ростС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΊΠΎΠ΄Π°, сохраняя ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΠΌΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Π’ ΠΌΠΈΡ€Π΅ компиляторов Π½ΠΎΠ²ΠΎΡΡ‚ΡŒ ΠΎ появлСнии TPDE-LLVM выглядит ΠΊΠ°ΠΊ малСнькая Ρ€Π΅Π²ΠΎΠ»ΡŽΡ†ΠΈΡ. Новый бэкСнд для LLVM ΠΎΠ±Π΅Ρ‰Π°Π΅Ρ‚ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ процСсс Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ машинного ΠΊΠΎΠ΄Π° Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ -O0 Π² 10–20 Ρ€Π°Π·. Для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ дСнь Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с большими ΠΊΠΎΠ΄ΠΎΠ²Ρ‹ΠΌΠΈ Π±Π°Π·Π°ΠΌΠΈ ΠΈΠ»ΠΈ запускаСт CI-сборки дСсятки Ρ€Π°Π·, это Π·Π²ΡƒΡ‡ΠΈΡ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΊΠ°ΠΊ магия.

πŸ’‘ Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±, Π²Π°ΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π΅ΠΆΠΈΠΌ -O0 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅ для Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Π° для быстрой ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. Он Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ максимально Β«ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒΒ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅Π±Π°Π³Π³Π΅Ρ€ ΠΌΠΎΠ³ Ρ‚ΠΎΡ‡Π½ΠΎ ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ строки исходника ΠΈ исполняСмый ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Однако Ρ†Π΅Π½Π° Ρ‚Π°ΠΊΠΎΠΉ прозрачности β€” мСдлСнная компиляция. И Π²ΠΎΡ‚ TPDE-LLVM ΠΎΠ±Π΅Ρ‰Π°Π΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту боль.

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

πŸ› οΈ АрхитСктура Π½ΠΎΠ²ΠΎΠ³ΠΎ бэкСнда построСна Π½Π° Ρ‚Ρ€Ρ‘Ρ… простых ΡˆΠ°Π³Π°Ρ…:

  • 🧹 ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° IR β€” ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ всСго лишнСго, Ρ‡Ρ‚ΠΎ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ быстрой трансляции.
  • πŸ” Анализ Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΈ Тивости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… β€” ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Π°Π½Π°Π»ΠΈΠ·Π°, достаточный для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ размСщСния рСгистров.
  • βš™οΈ ГСнСрация ΠΊΠΎΠ΄Π° β€” Π³Π΄Π΅ вмСсто слоТной Π°Π»Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈ рСгистров ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Β«Ρ€Π°Π·Π»ΠΈΠ²Π°ΠΉ всё Π² ΠΏΠ°ΠΌΡΡ‚ΡŒΒ» (spill everything). Π”Π°, это Π·Π²ΡƒΡ‡ΠΈΡ‚ Π³Ρ€ΡƒΠ±ΠΎΠ²Π°Ρ‚ΠΎ, Π½ΠΎ для -O0 этого достаточно.

πŸ“Š На тСстах SPEC CPU 2017 для x86-64 ускорСниС составило Π² срСднСм 13,34Γ— ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с -O0-IR ΠΈ 17,58Γ—ΠΏΡ€ΠΈ -O1-IR. ΠŸΡ€ΠΈ этом Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° вырос всСго Π½Π° ~27 % для O0 ΠΈ Π΄Π°ΠΆΠ΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ»ΡΡ ΠΏΡ€ΠΈ O1.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π΅ΡΡ‚ΡŒ ΠΈ минусы:

  • 🚫 ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ лишь подмноТСство LLVM-IR.
  • πŸ–₯️ АрхитСктуры ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ x86-64 ΠΈ AArch64.
  • 🧩 НСкоторыС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Π΅) ΠΏΠΎΠΊΠ° Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹.
  • πŸ•΅οΈ ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ полноцСнная DWARF-ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° (слоТнСС ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ).

Авторы ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΡŽΡ‚ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΎΠ²ΡƒΡŽ Π°Π»Π»ΠΎΠΊΠ°Ρ†ΠΈΡŽ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ список ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ.

ΠœΠΎΡ‘ Π²ΠΈΠ΄Π΅Π½ΠΈΠ΅

МнС каТСтся, TPDE-LLVM β€” это ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Β«ΠΏΡ€Π°Π³ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎΠΉ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΈΒ». ВмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ всС Π·Π°Π΄Π°Ρ‡ΠΈ Ρ€Π°Π·ΠΎΠΌ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ сдСлали ΡƒΠ·ΠΊΠΎ спСциализированный инструмСнт: ускорили ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎΡ‚ сцСнарий, Π³Π΄Π΅ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΡΡ‚Ρ€Π°Π΄Π°ΡŽΡ‚ ΠΎΡ‚ Π΄ΠΎΠ»Π³ΠΈΡ… Π±ΠΈΠ»Π΄ΠΎΠ².

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС большиС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ Chromium ΠΈΠ»ΠΈ ядра Linux. Если ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π±ΠΈΠ»Π΄ Π½Π° -O0 ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ хотя Π±Ρ‹ Π² Π΄Π΅ΡΡΡ‚ΡŒ Ρ€Π°Π· β€” это экономия тысяч Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎ-часов ΠΏΠΎ всСму ΠΌΠΈΡ€Ρƒ. Π”Π° ΠΈ для CI/CD-систСм, Π³Π΄Π΅ врСмя сборки Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ влияСт Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π΅Π»ΠΈΠ·ΠΎΠ², это ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΏΠΎΠ΄Π°Ρ€ΠΎΠΊ.

МнС Π»ΠΈΡ‡Π½ΠΎ это Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Ρ„ΠΈΠ»ΠΎΡΠΎΡ„ΠΈΡŽ «быстрых ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉΒ»: Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ, ΠΏΡƒΡΡ‚ΡŒ ΠΈ Π½Π΅ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ сСйчас, Ρ‡Π΅ΠΌ ΠΆΠ΄Π°Ρ‚ΡŒ ΠΈΠ΄Π΅Π°Π»Π° слишком Π΄ΠΎΠ»Π³ΠΎ. А для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹.

πŸ“Œ Бсылки: