Saya akan mulai dengan pengalaman pribadi saya di lab kami. Kembali ke ifort 9 dan 10 hari, kami dulu cukup agresif dengan optimasi, mengkompilasi dengan -O3 dan flag spesifik prosesor (-xW -xSSE4.2 misalnya). Tetapi mulai dengan ifort 11, kami mulai memperhatikan:
1. beberapa inkonsistensi dalam hasil (karena semantik tidak dipertahankan)
2. keuntungan lebih kecil dibandingkan dengan -O2.
Jadi saat ini, kami biasanya cukup mengompilasi dengan -O2 dan -xhost. Apakah Anda memiliki saran yang lebih baik dengan ifort 11? Apakah ini akan berubah sekali lagi saat kita beralih ke ifort 12? Terima kasih sebelumnya.
performance
hpc
compiling
fortran
FrenchKheldar
sumber
sumber
Jawaban:
Kami sangat menyarankan semua pengguna kami mulai dengan
-O3 -xHost -ipo
ifort 11 dan ifort 12. Jika ada transformasi floating point tertentu yang diaktifkan oleh O3 yang memengaruhi ketepatan beberapa perhitungan Anda, Anda dapat mematikannya secara khusus dengan-fp-model precise -fp-model except
(atau, lebih drastis,-fp-model strict
) sementara mempertahankan optimasi lainnya yang dimungkinkan O3, seperti pemblokiran loop untuk cache, loop fusion dan unrolling, dan optimisasi akses memori.Saya akan menyarankan mencoba hal-hal model floating point pada file individual dan mencari tahu di mana itu membuat perbedaan, daripada mematikannya secara global; itu bisa berupa benjolan kecepatan ~ 15%, dan Anda ingin dapat mempertahankannya di tempat yang tidak memengaruhi perhitungan Anda. Jika Anda tidak yakin di mana ketepatan dipengaruhi, Anda dapat bermain dengan menghidupkan dan mematikan flag model floating point untuk file-file itu, atau bermain dengan mode pembulatan .
Kami baru-baru ini memberikan ceramah singkat kepada pengguna kami tentang flag optimasi, dengan fokus pada kompiler gnu dan intel untuk x86; Anda dapat melihat slide dari pembicaraan itu di sini .
Kebetulan, sementara kita berbicara tentang memilih flag optimasi untuk kode Anda, kadang-kadang juga layak melihat output -vec-report untuk melihat di mana kompiler berusaha untuk membuat vektor loop dan tidak bisa; kadang-kadang ada perubahan kecil yang dapat Anda lakukan untuk loop Anda yang dapat mengakibatkan vektorisasi menjadi mungkin (yang dapat menjadi 4x speedup). Demikian pula untuk -opt-report yang lebih umum .
sumber
-O3 -xhost -fp-model precise -fp-model except
menghasilkan 30% perlambatan . Saya akan melihat lagi pada profiling dan-vec-report
untuk mencoba melihat apa yang terjadi ...Saya bekerja untuk sebuah perusahaan yang menghasilkan aplikasi besar, sangat teknis di Fortran dengan IFort - aplikasi ini sangat penting kinerjanya, karena kecepatan (sambil mempertahankan akurasi) adalah titik penjualan utama.
Kami selalu mengkompilasi dengan -O3, dan setahu saya, hal-hal utama yang -O3 lakukan adalah loop membuka gulungan dan membuat prefetching. Saya menduga bahwa sebagian besar aplikasi komputasi ilmiah mendapat banyak manfaat dari ini, khususnya optimasi loop. Kami belum pernah melihat kesalahan kompiler dalam beberapa waktu (meskipun kami telah melihat beberapa kesalahan linker ketika menggunakan Ifort pada Mac). Kami menggunakan 11.1.095.
Saya harap ini membantu.
sumber
Saya menyadari jawaban ini mungkin jauh, sangat terlambat, tetapi untuk optimasi yang agresif, opsi "-cepat" sepertinya solusi termudah. Kutipan dari halaman manual:
sumber