Backend TPDE-LLVM Mencapai Kompilasi 10-20x Lebih Pantas Daripada LLVM -O0 Standard

Pasukan Komuniti BigGo
Backend TPDE-LLVM Mencapai Kompilasi 10-20x Lebih Pantas Daripada LLVM -O0 Standard

Sebuah backend pengkompil baharu yang dipanggil TPDE-LLVM telah dikeluarkan sebagai sumber terbuka, menjanjikan untuk meningkatkan masa kompilasi secara dramatik sambil mengekalkan prestasi runtime yang serupa dengan backend -O0 standard LLVM . Projek ini menangani salah satu aduan yang paling berterusan dalam pembangunan perisian moden: masa kompilasi yang perlahan yang menjejaskan produktiviti pembangun.

Peningkatan Kelajuan Kompilasi yang Revolusioner

TPDE-LLVM menyampaikan kelajuan kompilasi yang 10-20 kali lebih pantas daripada backend -O0 LLVM merentasi pelbagai penanda aras daripada suite SPEC CPU 2017 . Keputusan yang paling mengagumkan menunjukkan peningkatan kelajuan melebihi 26x untuk beban kerja tertentu seperti omnetpp dan xalanc . Ini mewakili satu kejayaan besar dalam teknologi kompilasi, kerana pendekatan tradisional untuk mempercepatkan LLVM telah menghasilkan peningkatan yang jauh lebih kecil.

Backend ini mencapai keputusan tersebut melalui pendekatan tiga-pass yang diperkemas: pembersihan dan penyediaan IR , analisis untuk gelung dan kepentingan pemboleh ubah, dan pass penjanaan kod gabungan yang mengendalikan penurunan, peruntukan daftar, dan pengekodan kod mesin secara serentak. Reka bentuk ini menghapuskan sebahagian besar overhed yang terdapat dalam seni bina pengkompil tradisional.

IR (Intermediate Representation): Bahasa pengaturcaraan peringkat rendah yang digunakan secara dalaman oleh pengkompil Peruntukan daftar: Proses menetapkan pemboleh ubah program kepada daftar pemproses

Keputusan Benchmark SPEC CPU 2017 (x86-64)

Benchmark Peningkatan Kelajuan Kompilasi (-O0 IR) Nisbah Saiz Kod (-O0 IR)
600.perl 11.39x 1.27x
602.gcc 12.54x 1.32x
605.mcf 9.72x 1.27x
620.omnetpp 21.46x 1.24x
623.xalanc 18.99x 1.24x
625.x264 10.52x 1.26x
631.deepsjeng 9.60x 1.25x
641.leela 21.44x 1.24x
657.xz 10.95x 1.30x
Min Geometri 13.34x 1.27x

Respons Komuniti dan Potensi Penggunaan

Komuniti pengkompil telah menunjukkan minat yang ketara terhadap pendekatan TPDE-LLVM , dengan sesetengah pembangun menyatakan kejutan terhadap kekurangan penggunaan meluas teknik-teknik ini. Teknologi ini nampaknya menawarkan kelebihan yang jelas berbanding penyelesaian sedia ada seperti Cranelift dan backend WebAssembly , membawa kepada persoalan mengapa projek pengkompil arus perdana tidak bergegas untuk memasukkan kaedah yang serupa.

Satu bidang yang menarik minat khusus ialah kompilasi WebAssembly , di mana pembangun sedang mempertimbangkan TPDE-LLVM sebagai pengganti berpotensi untuk penyelesaian kompilasi pantas sedia ada. Keupayaan backend untuk berfungsi sebagai perpustakaan menjadikannya sesuai untuk senario kompilasi just-in-time, membuka kemungkinan baharu untuk penjanaan kod runtime.

Batasan Semasa dan Pembangunan Masa Depan

TPDE-LLVM pada masa ini hanya menyokong seni bina x86-64 dan AArch64 serta melaksanakan subset ciri-ciri perwakilan perantaraan LLVM . Para pembangun mengakui bahawa walaupun backend berfungsi dengan baik dengan kod C dan C++ biasa yang dijana oleh Clang , ia mempunyai batasan dengan ciri bahasa yang lebih eksotik dan sesetengah kod Rust yang menggunakan jenis vektor bukan standard.

Peta jalan projek termasuk menambah sokongan penyahpepijatan melalui pelaksanaan format DWARF dan meningkatkan peruntukan daftar melebihi pendekatan spill everything semasa. Platform tambahan dan model kod mungkin ditambah jika terdapat permintaan komuniti yang mencukupi.

Had Semasa dan Ciri-ciri yang Tidak Disokong

  • Sokongan bahasa: Berfungsi dengan baik untuk kod Clang C/C++ biasa, sokongan separa untuk Flang , keserasian terhad untuk Rust
  • Ciri-ciri yang hilang: Banyak ciri LLVM-IR belum dilaksanakan lagi
  • Operasi vektor: Jenis vektor haram tidak disokong (menjejaskan beberapa crate Rust )
  • Peruntukan daftar: Pada masa ini menggunakan pendekatan "tumpahkan segala-galanya"
  • Penyahpepijatan: Sokongan DWARF dalam peringkat prototaip
  • Had platform: ELF sahaja, model kod small-PIC sahaja

Cabaran Teknikal dan Peningkatan LLVM

Proses pembangunan mendedahkan beberapa kesesakan prestasi dalam infrastruktur LLVM yang mempengaruhi kelajuan kompilasi. Isu seperti iterasi pengganti yang perlahan untuk penyata switch dan operasi masa kuadratik untuk blok dengan banyak pendahulu memerlukan penyelesaian kreatif. Menariknya, kira-kira 90% masa kompilasi dalam alat mereka dihabiskan untuk menghurai bitcode berbanding penjanaan kod sebenar.

Pasukan TPDE-LLVM juga telah menyumbang untuk menjadikan LLVM standard lebih pantas, mencapai peningkatan kelajuan 18% dalam versi terkini. Walau bagaimanapun, mereka percaya bahawa mencapai peningkatan kelajuan dramatik yang ditunjukkan oleh pendekatan mereka memerlukan perubahan asas kepada seni bina LLVM yang melampaui pengoptimuman bertahap.

Rujukan: TPDE-LLVM: 10-20x Faster LLVM -00 Back-End