Intel Fortran Compiler: derlemede optimizasyonla ilgili ipuçları


21

Laboratuvarımızdaki kişisel tecrübemle başlayacağım. 9. ve 10. günlerde ifortta -O3 ve işlemciye özgü bayraklarla (örneğin -xW -xSSE4.2) derlenen optimizasyonlarda oldukça agresif davranırdık. Fakat ifort 11 ile başlayarak, şunu fark etmeye başladık:
1. sonuçlardaki bazı tutarsızlıklar (anlambilim korunmadığından)
2. -O2 ile karşılaştırıldığında daha küçük kazançlar.

Şimdilik, genellikle -O2 ve -xhost ile derledik. İfort 11 ile ilgili daha iyi önerileriniz var mı? İfort 12'ye geçerken bu bir kez daha değişecek mi? Şimdiden teşekkürler.


7
Optimizasyonlar tüm kodları aynı şekilde kullanmaz. Bu nedenle, daha iyi bir sorunun "Hangi derleyici optimizasyonlarının etkili olduğunu söylemek için kodumu nasıl profillendirebilirim?" Olacağını düşünüyorum.
Matt Knepley

1
Anlambilim korunmadığından veya bir şey yeniden düzenlendiğinden mi? Bu, konudan biraz uzaklaşıyor olabilir, ancak sorunu ortaya çıkaran kod parçacığını görmek iyi olur. Bir şey hoşunuza gitmeyecek şekilde yeniden düzenlenmiş olabilir, ancak derleyicinin iyi olması gerektiğini düşünüyor. Tecrübelerim, Intel 12'nin öncekilerden daha iyi bir vektörleştirme işi yapmasıdır, bu yüzden en yeniye geçtiğinizde daha fazla değişiklik yapılmasını beklerdim.
Bill Barth

Semantiklerin korunmadığını söyleyerek siparişin korunmadığını belirtmiştim. Her neyse, sorumun (çok?) Genel olduğunu fark ettim ve spesifiklerde durmak istemedim. İntel 10 ile ilgili birçok sorunumuz oldu, bazıları derleyici hataları ve bazıları açıklanamadılar. 11 ile güvenli oynuyorduk ve gösteriden memnun kaldık. Ama belki de çok güvenli oynuyoruz ve topluluğun bir tavsiyesi olup olmadığını bilmek istedim.
FrenchKheldar

Yanıtlar:


16

Tüm kullanıcılarımıza -O3 -xHost -ipohem ifort 11 hem de ifort 12 için başlamalarını şiddetle tavsiye ediyoruz . O3 tarafından etkinleştirilen, bazı hesaplamalarınızın kesinliğini etkileyen belirli kayan nokta dönüşümleri varsa, bunları özellikle -fp-model precise -fp-model except(veya daha sert bir şekilde -fp-model strict) ile kapatabilirsiniz. diğer optimizasyonları korurken O3, önbellek için döngü engelleme, döngü füzyon ve açma işlemlerini ve bellek erişim optimizasyonlarını sağlar.

Kayan nokta modelini tek tek dosyalar üzerinde denemeyi ve onu küresel olarak kapatmak yerine nerede bir fark yaratacağını bulmanızı öneririm; % ~ 15'lik bir hız artışı olabilir ve bunu hesaplamalarınızı etkilemeyeceği bir yerde tutabilmek istersiniz. Kesinliğin nerede etkilendiğinden emin değilseniz, bu dosyalar için kayan nokta model bayraklarını açıp kapatarak ya da yuvarlama modlarıyla oynayabilirsiniz .

Son zamanlarda kullanıcılarımıza x86 için gnu ve intel derleyicilerine odaklanarak optimizasyon bayrakları hakkında kısa bir konuşma yaptık; Bu konuşmadaki slaytları burada görebilirsiniz .

Bu arada, kodunuz için optimizasyon bayraklarını seçmekten bahsederken, şimdi ve sonra derleyicinin bir döngüyü vektörleştirmeye çalıştığı ve yapamayacağını görmek için -vec-raporunun çıktısına bakmaya değer ; Bazen, döngünüzde yapabileceğiniz küçük değişiklikler olabilir ve bu da vektörleşmenin mümkün olmasına neden olur (4x hızlık olabilir). Benzer şekilde daha genel -opt-raporu için .


Cevabınızı beğendim ancak test cihazımızdan biriyle tekrar denedim ve -O3 -xhost -fp-model precise -fp-model except% 30'luk bir yavaşlama ile sonuçlandı . Tekrar profillemeye ve -vec-reportneler olup bittiğini görmeye çalışacağım ...
FrenchKheldar

2
02'nin üzerinde mi? İlginç; çok sıradışı ama olabilir. Bu gibi durumlarda, en iyi duruma getirici, hızı artıracağını düşünmek için iyi bir nedene sahip olan bir şey yapıyor, ancak sonuçta işleri daha da kötüleştiriyor. Genellikle oldukça basit bir yapıya sahip olan bilimsel kod için bu gerçekleşmez. Bu gibi durumlarda, Profil Kılavuzlu Optimizasyon - software.intel.com/sites/products/documentation/hpc/compilerpro/… - genellikle yardımcı olabilir.

5

Fortran'da IFort ile büyük ve son derece teknik uygulamalar üreten bir şirket için çalışıyorum - uygulamalar çok önemlidir, çünkü hız (doğruluk korunurken) ana satış noktasıdır.

Her zaman -O3 ile derleriz ve benim bilgime göre, -O3'ün yaptığı temel şeyler döngü açma ve ön almadır. Bilimsel bilgi işlem uygulamalarının çoğunun bunlardan, özellikle de döngü optimizasyonlarından büyük ölçüde faydalandığından şüpheleniyorum. Bir süredir derleyici hataları görmedik (Mac'te Ifort kullanırken birkaç linker hatası görmüş olsak da). 11.1.095 kullanıyoruz.

Umarım bu yardımcı olur.


4

Bu cevabın muhtemelen çok uzak, çok geç olduğunu biliyorum, ancak agresif optimizasyon için "-fast" seçeneği en kolay çözüm gibi gözüküyor. Man sayfasından alıntılar:

-fast
    Maximizes speed across the entire program.
    Description:
    This option maximizes speed across the entire program.

    It sets the following options:
     - On Linux* systems: -ipo, -O3, -no-prec-div, -static, and -xHost
     - On OS X* systems: -ipo, -mdynamic-no-pic, -O3, -no-prec-div, and -xHost
     - On Windows*  systems:  /O3,  /Qipo,  /Qprec-div-,  and /QxHost

    NOTE: Option fast sets some aggressive optimizations that may not be appropriate for all
    applications. The resulting executable may not run on processor types different from the
    one on which you compile. You should make sure that you understand the individual optimi-
    zation options that are enabled by option fast.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.