Intel Fortran Compiler: Tipps zur Optimierung beim Kompilieren

21

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.

FranzösischKheldar
quelle
7
Optimierungen kommen nicht allen Codes gleichermaßen zugute. Ich denke also, eine bessere Frage wäre: "Wie kann ich meinen Code profilieren, um festzustellen, welche Compiler-Optimierungen wirksam sind?"
Matt Knepley
1
Weil die Semantik nicht erhalten blieb oder weil etwas neu angeordnet wurde? Dies mag ein wenig vom Thema abweichen, aber es wäre gut, einen Codeausschnitt zu sehen, der das Problem reproduziert. Es kann sein, dass etwas in einer Weise neu angeordnet wurde, die Sie nicht mögen, aber der Compiler denkt, dass es in Ordnung sein sollte. Ich habe die Erfahrung gemacht, dass Intel 12 die Vektorisierung besser beherrscht als alle seine Vorgänger. Daher würde ich erwarten, dass sich mit der Umstellung auf die neueste Version weitere Änderungen ergeben.
Bill Barth
Ich dachte, Semantik nicht erhalten zu haben, wäre gleichbedeutend mit Bestellung nicht erhalten. Wie auch immer, mir ist klar, dass meine Frage (auch?) Allgemein ist und ich mich nicht mit Einzelheiten befassen wollte. Wir hatten einige Probleme mit Intel 10, einige waren Compiler-Fehler und andere wurden nicht erklärt. Mit 11 sind wir auf Nummer sicher gegangen und mit der Leistung zufrieden. Aber vielleicht gehen wir zu sicher und ich wollte wissen, ob die Community einen Rat hat.
FrenchKheldar

Antworten:

16

Wir empfehlen dringend, dass alle unsere Benutzer mit -O3 -xHost -ipoifort 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 .

nullglob
quelle
Ihre Antwort gefällt mir, aber ich habe es mit einem unserer Testfälle erneut versucht und -O3 -xhost -fp-model precise -fp-model excepteine 30% ige Verlangsamung erzielt . Ich werde noch einmal auf die Profilerstellung schauen und -vec-reportversuchen zu sehen, was los ist ...
FrenchKheldar
2
Über -O2 -xhost? Das ist interessant; Es ist sehr ungewöhnlich, aber es kann passieren. In solchen Fällen tut das Optimierungsprogramm etwas, von dem es guten Grund zu der Annahme hat, dass es die Geschwindigkeit verbessert, aber es stellt sich heraus, dass es die Situation verschlimmert. Normalerweise passiert dies nicht für wissenschaftlichen Code, der eine ziemlich einfache Struktur hat. In solchen Fällen kann Profile Guided Optimization - software.intel.com/sites/products/documentation/hpc/compilerpro/… - häufig Abhilfe schaffen.
5

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.

OscarB
quelle
4

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:

-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.
user5428
quelle