Zacznę od mojego osobistego doświadczenia w naszym laboratorium. W ciągu 9 i 10 dni w ifort byliśmy dość agresywni w zakresie optymalizacji, kompilując z flagami -O3 i specyficznymi dla procesora (na przykład -xW -xSSE4.2). Ale zaczynając od ifort 11, zaczęliśmy zauważać:
1. pewne niespójności w wynikach (ponieważ semantyka nie została zachowana)
2. mniejsze zyski w porównaniu do -O2.
Tak więc obecnie zwykle po prostu kompilujemy z -O2 i -xhost. Czy masz lepsze sugestie dotyczące ifort 11? Czy zmieni się to ponownie, gdy przejdziemy do ifort 12? Z góry dziękuję.
performance
hpc
compiling
fortran
FrenchKheldar
źródło
źródło
Odpowiedzi:
Zdecydowanie zalecamy, aby wszyscy nasi użytkownicy zaczęli od
-O3 -xHost -ipo
zarówno dla ifort 11, jak i ifort 12. Jeśli istnieją specjalne transformacje zmiennoprzecinkowe włączone przez O3, które wpływają na precyzję niektórych twoich obliczeń, możesz je wyłączyć za pomocą-fp-model precise -fp-model except
(lub, bardziej drastycznie,-fp-model strict
) zachowując inne optymalizacje, O3 włącza, takie jak blokowanie pętli dla pamięci podręcznej, scalanie i rozwijanie pętli oraz optymalizacje dostępu do pamięci.Radziłbym wypróbować rzeczy z modelu zmiennoprzecinkowego na poszczególnych plikach i dowiedzieć się, gdzie to robi różnicę, zamiast wyłączać go globalnie; może to być około 15% wzrost prędkości, a chcesz być w stanie utrzymać to tam, gdzie nie wpływa to na twoje obliczenia. Jeśli nie masz pewności, gdzie wpływa to na precyzję, możesz grać z włączaniem i wyłączaniem flag modelu zmiennoprzecinkowego dla tych plików lub z trybami zaokrąglania .
Niedawno przeprowadziliśmy krótką rozmowę z naszymi użytkownikami na temat flag optymalizacji, koncentrując się na kompilatorach GNU i Intel dla x86; możesz zobaczyć slajdy z tej rozmowy tutaj .
Nawiasem mówiąc, skoro mówimy o wyborze flag optymalizacyjnych dla twojego kodu, od czasu do czasu warto również przyjrzeć się wynikowi -vec-report, aby zobaczyć, gdzie kompilator próbował wektoryzować pętlę, a nie mógł; czasami w pętli można wprowadzić niewielkie zmiany, które mogą spowodować wektoryzację (która może być przyspieszeniem 4x). Podobnie w przypadku bardziej ogólnego raportu -opt-report .
źródło
-O3 -xhost -fp-model precise -fp-model except
spowodowałem 30% spowolnienie .-vec-report
Pracuję dla firmy, która produkuje duże, wysoce techniczne aplikacje w Fortran z IFort - aplikacje są bardzo ważne pod względem wydajności, ponieważ szybkość (przy zachowaniu dokładności) jest głównym punktem sprzedaży.
Zawsze kompilujemy z -O3 i, o ile wiem, najważniejsze rzeczy, które -O3 robią to rozwijanie pętli i pobieranie wstępne. Podejrzewam, że większość naukowych aplikacji komputerowych czerpie z nich ogromne korzyści, w szczególności optymalizacje pętli. Długo nie widzieliśmy błędów kompilatora (choć widzieliśmy kilka błędów linkera podczas korzystania z Ifort na Macu). Używamy 11.1.095.
Mam nadzieję, że to pomoże.
źródło
Zdaję sobie sprawę, że ta odpowiedź jest prawdopodobnie zdecydowanie za późna, ale w przypadku agresywnej optymalizacji opcja „-szybka” wydaje się najłatwiejszym rozwiązaniem. Fragmenty strony man:
źródło