Ich werde mit meiner persönlichen Erfahrung in unserem Labor beginnen. In den letzten 9 und 10 Tagen waren wir ziemlich aggressiv bei den Optimierungen. Wir kompilierten mit -O3 und prozessorspezifischen Flags (-xW -xSSE4.2 zum Beispiel). Ab ifort 11 bemerkten wir jedoch:
1. einige Inkonsistenzen in den Ergebnissen (weil die Semantik nicht erhalten blieb)
2. geringere Gewinne im Vergleich zu -O2.
Derzeit kompilieren wir normalerweise einfach mit -O2 und -xhost. Haben Sie bessere Vorschläge mit ifort 11? Wird sich dies beim Übergang zu ifort 12 noch einmal ändern? Danke im Voraus.
performance
hpc
compiling
fortran
FranzösischKheldar
quelle
quelle
Antworten:
Wir empfehlen dringend, dass alle unsere Benutzer mit
-O3 -xHost -ipo
ifort 11 und ifort 12 beginnen. Wenn O3 bestimmte Gleitkommatransformationen aktiviert hat, die sich auf die Genauigkeit einiger Ihrer Berechnungen auswirken, können Sie diese mit-fp-model precise -fp-model except
(oder drastischer-fp-model strict
) deaktivieren. unter Beibehaltung der anderen Optimierungen, die O3 ermöglicht, wie z. B. Schleifenblockierung für Cache, Schleifenfusion und -entrollung sowie Speicherzugriffsoptimierungen.Ich empfehle, das Gleitkommamodell für einzelne Dateien auszuprobieren und herauszufinden, wo es einen Unterschied macht, anstatt es global auszuschalten. Es kann eine Geschwindigkeitsschwelle von ~ 15% sein, und Sie möchten in der Lage sein, dies dort beizubehalten, wo es Ihre Berechnungen nicht beeinflusst. Wenn Sie sich nicht sicher sind, wo sich die Genauigkeit auswirkt, können Sie die Fließkommamodell-Flags für diese Dateien aktivieren und deaktivieren oder mit Rundungsmodi spielen .
Vor kurzem haben wir unseren Benutzern einen kurzen Vortrag über Optimierungsflags gehalten, wobei wir uns auf die Gnu- und Intel-Compiler für x86 konzentrierten. Sie können die Folien von diesem Vortrag hier sehen .
Übrigens, während wir über die Auswahl von Optimierungsflags für Ihren Code sprechen, lohnt es sich gelegentlich auch, die Ausgabe von -vec-report zu überprüfen, um festzustellen , wo der Compiler versucht hat, eine Schleife zu vektorisieren, was aber nicht möglich ist. Manchmal können Sie kleine Änderungen an Ihrer Schleife vornehmen, die dazu führen können, dass eine Vektorisierung möglich ist (dies kann eine 4-fache Beschleunigung sein). Ähnliches gilt für den allgemeineren -opt-Bericht .
quelle
-O3 -xhost -fp-model precise -fp-model except
eine 30% ige Verlangsamung erzielt . Ich werde noch einmal auf die Profilerstellung schauen und-vec-report
versuchen zu sehen, was los ist ...Ich arbeite für ein Unternehmen, das mit IFort große, hochtechnische Anwendungen in Fortran herstellt - die Anwendungen sind sehr leistungskritisch, da die Geschwindigkeit (bei gleichzeitiger Wahrung der Genauigkeit) das Hauptverkaufsargument ist.
Wir kompilieren immer mit -O3, und meines Wissens sind die wichtigsten Dinge, die -O3 macht, das Abrollen von Loops und das Prefetching. Ich vermute, dass die meisten wissenschaftlichen Computeranwendungen in großem Maße davon profitieren, insbesondere die Schleifenoptimierungen. Wir haben seit einiger Zeit keine Compilerfehler mehr gesehen (obwohl wir einige Linkerfehler bei der Verwendung von Ifort auf einem Mac gesehen haben). Wir verwenden den 11.1.095.
Ich hoffe das hilft.
quelle
Mir ist klar, dass diese Antwort wahrscheinlich viel zu spät ist, aber für aggressive Optimierungen scheint die Option "-fast" die einfachste Lösung zu sein. Auszüge aus der Manpage:
quelle