Red Hat mengembangkan kompiler MIR JIT

Di Topi Merah pembangunan sedang berlangsung kompiler JIT ringan baru MIR, yang memastikan eksekusi kode yang sebelumnya telah diubah menjadi representasi perantara MIR (Medium Internal Representation, jangan bingung dengan representasi perantara lainnya MIR (IR tingkat menengah), digunakan dalam kompiler Rust). Proyek ini bertujuan untuk menyediakan kerangka kerja untuk mengimplementasikan interpreter dan JIT yang cepat dan ringkas. Kode proyek ditulis dalam C dan didistribusikan oleh di bawah lisensi MIT.

Pada tahap pengembangan saat ini, penerjemah ke dalam representasi perantara MIR dipersiapkan bahasa C dan kode bit LLVM (Bitcode), namun kedepannya direncanakan untuk mengimplementasikan kemampuan menghasilkan MIR untuk WebAssembly, bytecode Java, CIL (Bahasa Menengah Umum), Rust dan C++. Proyek ini sedang dikembangkan oleh salah satu pengembang mesin JIT MJIT, digunakan di Ruby. Pertama-tama, JIT berdasarkan MIR direncanakan akan diimplementasikan CRubi ΠΈ MRuby. Di masa depan, GCC juga dapat di-porting untuk menggunakan MIR.

Red Hat mengembangkan kompiler MIR JIT

Kode MIR perantara dapat disajikan dalam bentuk biner dan teks (dapat dibaca). Kode ini dapat dieksekusi dalam penerjemah dan kode mesin dapat dibuat berdasarkan itu (x86_64, dalam paket ARM64, PPC64, dan MIPS64). Dimungkinkan juga untuk melakukan konversi terbalik - dari MIR ke CIL, bytecode Java, WebAssembly dan kode C.

Di antara fitur-fitur MIR, pengetikan yang ketat, dukungan untuk modul dan fungsi, penyediaan serangkaian instruksi untuk konversi tipe, perbandingan, operasi aritmatika dan logika, percabangan, dll. Modul, yang mencakup sekumpulan fungsi yang dikonversi ke format MIR, dapat dimuat dalam bentuk perpustakaan, dan juga dapat memuat kode C eksternal.

Red Hat mengembangkan kompiler MIR JITRed Hat mengembangkan kompiler MIR JIT

Keuntungan utama mengeksekusi kode perantara di JIT dibandingkan mengkompilasi menjadi file asli yang dapat dieksekusi adalah kemampuan untuk menghasilkan file ringkas yang dapat dieksekusi tanpa membangun kembali arsitektur perangkat keras yang berbeda (x86, ARM, PPC, MIPS). Untuk arsitektur yang tidak didukung, mode interpretasi tersedia, yang dalam kasus MIR 6-10 kali lebih lambat dibandingkan JIT.

Kekurangan kompiler JIT yang ada
GCC dan LLVM dikatakan terlalu membengkak, memiliki kecepatan kompilasi yang rendah, dan sulit untuk mengimplementasikan optimasi gabungan untuk bahasa pemrograman yang berbeda. Pengembang MIR mencoba menyelesaikannya
masalah dan menetapkan tujuan:

  • Kompilasi di MIR setidaknya harus 100 kali lebih cepat dibandingkan di GCC;
  • JIT untuk eksekusi MIR harus sangat kompak dan mencakup sekitar 15 ribu baris kode;
  • Mengeksekusi MIR menggunakan JIT tidak boleh lebih dari 30% lebih lambat dibandingkan kinerja executable yang dikompilasi dari kode C yang sama di GCC (dengan optimasi "-O2");
  • Tahap inisialisasi sebelum eksekusi sebenarnya dimulai akan memakan waktu 100 kali lebih sedikit;
  • Representasi MIR untuk JIT harus 100 kali lebih kecil dari representasi MIR yang dikompilasi di GCC.

Dalam bentuknya saat ini, implementasi MIR dalam banyak hal lebih maju dari tujuan yang ditetapkan sebelumnya: pengujian menunjukkan bahwa kinerja kompilasi di MIR 2 kali lebih cepat daripada β€œGCC -O178”, kinerja eksekusi 6% di belakang kode asli, ukuran kode 144 kali lebih kecil, implementasi MIR JIT adalah 16 ribu baris kode.

Red Hat mengembangkan kompiler MIR JIT

Sumber: opennet.ru

Tambah komentar