Apa yang baru dalam teknik optimisasi kompiler selama beberapa tahun terakhir?

14

Saya tertarik pada optimalisasi aliran data dan grafik aliran kontrol dan khususnya yang lebih kompleks secara komputasional. Tetapi juga akan menarik untuk mengetahui tentang penemuan terbaru di bidang optimasi lubang intip.

Evgeny Gavrin
sumber
2
Dalam tesis saya ( slide ) saya telah membahas dan menerapkan grafik panggilan rata di LLVM; pada dasarnya ini adalah transformasi antar-prosedur yang menghilangkan gagasan "fungsi" karena menggabungkan semua kode bersama-sama, memungkinkan banyak kemungkinan menarik seperti gerakan kode antar-prosedur, konvensi panggilan yang dioptimalkan oleh situs, eksekusi stackless dan sebagainya.
CAFxX
@CAFxX: slide crash Open Office .. apakah Anda memiliki gambar daring?
Yttrill
@Yttrill: slideshare.net/CAFxX/…
CAFxX
Terima kasih, bisa melihat dengan itu, meskipun grafiknya baik-baik saja agar terlihat teksnya bagus.
Yttrill

Jawaban:

8

Saya tidak yakin bagaimana novel itu, atau jika terlalu banyak di sisi yang diterapkan untuk kepentingan Anda, tetapi Hoopl menunjukkan bagaimana pengoptimalan aliran kontrol / data dapat dimodulasi, dengan penyebaran fakta tentang simpul grafik kontrol yang independen dari pengoptimalan bahasa dan spesifik.

Mereka merujuk algoritma 2002 Lerner, Grove dan Chambers yang menyusun optimasi sederhana menjadi "superoptimisasi".

Maks
sumber
8

Saya kira teknik Saturasi Kesetaraan , sebagai pendekatan yang berbeda untuk masalah optimasi melalui pemesanan, akan relevan. Sepengetahuan saya, itu belum terbukti praktis dengan implementasi konkret dalam kompiler penuh. Pengoptimalan Pengumpul Kompilasi berikut dari Bukti juga mungkin menarik.

gasche
sumber
6

Ada sedikit kebangkitan dalam kompiler pengoptimal yang terverifikasi. Selain kertas Lerner (disebutkan dalam komentar sebelumnya), Anda mungkin melihat proyek CompCert yang dipimpin oleh Xavier Leroy. Mereka telah melakukan beberapa hal keren dengan menetapkan optimasi sebagai bukti yang dapat diperiksa oleh mesin (menggunakan Coq ). Saya belum membaca makalah, tetapi proyek The Verified Software Toolchain di Princeton juga tampaknya menghasilkan hasil yang menarik di bidang ini.

John Lasseter
sumber
1
Kami juga sedang mengerjakan proyek yang mirip dengan CompCert: CerCo ( cerco.cs.unibo.it ). Tidak seperti CompCert, kami bertujuan untuk menghasilkan kompiler pelestarian biaya beton yang terverifikasi untuk subset besar C (CompCert hanya menunjukkan bahwa sifat ekstensional dari program sumber dipelihara oleh kompilasi). Kami juga menerapkan beberapa optimisasi loop yang cukup kompleks di kompiler, serta optimisasi "ringan" seperti yang digunakan CompCert, yang tentu saja perlu diverifikasi sebagai penghematan biaya.
Dominic Mulligan
5

Menyadari bahwa baz [i] + = force (foo [i], foo [j]) dalam loop FOR ganda memiliki hasil independen untuk (i, j) dan menyusun ulang panggilan ke dalam kurva pengisian ruang pada (i, j) ke mengurangi kesalahan cache.

Tidak cukup "lubang intip" tetapi mendapatkan perilaku lupa cache untuk "gratis" itu bagus.

Chad Brewbaker
sumber