Proyek untuk menambahkan dukungan paralelisasi proses kompilasi ke GCC

Sebagai bagian dari proyek penelitian GCC Paralel Pekerjaan telah dimulai untuk menambahkan fitur ke GCC yang memungkinkan proses kompilasi dibagi menjadi beberapa thread paralel. Saat ini, untuk meningkatkan kecepatan build pada sistem multi-core, utilitas make menggunakan peluncuran proses kompiler terpisah, yang masing-masing membuat file kode terpisah. Proyek baru ini bereksperimen dengan menyediakan paralelisasi pada tingkat kompiler, yang berpotensi meningkatkan kinerja pada sistem multi-inti.

Untuk pengujian siap cabang paralel GCC yang terpisah, yang menawarkan parameter baru β€œβ€”param=num-threads=N” untuk mengatur jumlah thread. Pada tahap awal, kami menerapkan transfer optimasi antarprosedural ke dalam thread terpisah, yang dipanggil secara siklis untuk setiap fungsi dan dapat dengan mudah diparalelkan. Operasi GIMPLE yang bertanggung jawab atas optimasi perangkat keras yang tidak bergantung pada perangkat keras yang mengevaluasi interaksi fungsi satu sama lain ditempatkan di thread terpisah.

Pada tahap selanjutnya, direncanakan juga untuk memindahkan optimasi RTL antarprosedural ke thread terpisah, dengan mempertimbangkan karakteristik platform perangkat keras. Setelah itu, kami berencana untuk mengimplementasikan paralelisasi optimasi intraprosedural (IPA) yang diterapkan pada kode di dalam fungsi, terlepas dari spesifikasi panggilannya. Tautan pembatas untuk saat ini adalah pengumpul sampah, yang telah menambahkan kunci global yang menonaktifkan operasi pengumpulan sampah saat berjalan dalam mode multi-thread (di masa depan, pengumpul sampah akan diadaptasi untuk eksekusi GCC multi-thread).

Untuk mengevaluasi perubahan kinerja, rangkaian pengujian telah disiapkan yang merakit file gimple-match.c, yang mencakup lebih dari 100 ribu baris kode dan 1700 fungsi. Pengujian pada sistem dengan CPU Intel Core i5-8250U dengan 4 core fisik dan 8 virtual (Hyperthreading) menunjukkan penurunan waktu eksekusi optimasi Intra Prosedural GIMPLE dari 7 menjadi 4 detik saat menjalankan 2 thread dan menjadi 3 detik saat menjalankan 4 benang, yaitu Peningkatan kecepatan tahap perakitan yang dipertimbangkan dicapai masing-masing sebesar 1.72 dan 2.52 kali. Pengujian juga menunjukkan bahwa penggunaan inti virtual dengan Hyperthreading tidak menghasilkan peningkatan kinerja.

Proyek untuk menambahkan dukungan paralelisasi proses kompilasi ke GCC

Waktu pembuatan keseluruhan berkurang sekitar 10%, namun menurut perkiraan, memparalelkan pengoptimalan RTL akan memungkinkan pencapaian hasil yang lebih nyata, karena tahap ini membutuhkan lebih banyak waktu selama kompilasi. Kira-kira setelah paralelisasi RTL, total waktu perakitan akan berkurang 1.61 kali lipat. Setelah ini, waktu pembuatan dapat dikurangi sebesar 5-10% lagi dengan memparalelkan pengoptimalan IPA.

Proyek untuk menambahkan dukungan paralelisasi proses kompilasi ke GCC

Sumber: opennet.ru

Tambah komentar