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 .