Stand: 26. September 2024

Leitfaden zum Umstieg von IFORT zu IFX (95.4 MB)

Intel hat angekündigt, die Weiterentwicklung des “Intel® Fortran Compiler Classic (IFORT)“ zum Jahresende 2024 einzustellen und nur noch den neueren “Intel® Fortran Compiler (IFX)“ pflegen und weiterentwickeln zu wollen. Mit dem Erscheinen der Version 2025.0 soll der IFORT nicht mehr Bestandteil der Installation sein (vgl. [2]). Man bekommt IFORT dann nur noch, wenn man einen Wartungsvertrag (“Support Service”) hat, der einem u.a. den Zugang zu älteren Versionen der Fortran Compiler ermöglicht.
Damit ergeben sich für die Nutzer des IFORT früher oder später einige Fragen, die hier beantwortet werden sollen. Und zwar für Windows, da die meisten Fortran-Programmierer Intel Fortran unter diesem Betriebssytem einsetzen. Wenn Sie Intels Fortran Compiler unter Linux verwenden, dürfte das meiste des Nachfolgenden allerdings auch dafür relevant bzw. anwendbar sein.

  1. Warum wird IFORT nicht mehr unterstützt bzw. warum gibt es einen zweiten Fortan Compiler IFX von Intel?
    Seit Jahren verfolgt Intel das Ziel, die Performance seiner Compiler (C++ und Fortran) für die Nutzung auf Mehrkernprozessoren (multi-core CPUs) für PCs zu verbessern. Mit dem Aufkommen von wesentlich leistungsfähigeren Prozessoren auf Graphikkarten (GPU) oder Accelerator Cards, die ein Vielfaches an “Kernen” (many-core) gegenüber herkömmlichen PC-Prozessoren aufweisen können, ergab sich die Forderung nach Compilern, die nicht nur den CPU-Maschinencode erzeugen können, sondern eben auch Binärcode für eine GPU. Diese Variabilität mit ein und demselbem Compiler sowohl Binärcode für CPUs als auch GPUs zu erzeugen, war mit Intels IFORT nicht mehr umsetzbar, so daß Intel den neuen Compiler IFX entwickelt hat, der das Frontend des IFORT verwendet, damit den Fortran Quellcode in einen Zwischencode, basierend auf einem virtuellen Befehlssatz, übersetzt und diesen mittels eines Backend in den Binärcode des Zielsystems (CPU oder GPU) umsetzt. Die dazu notwendige Compilertechnologie wird heutzutage mit LLVM bezeichnet.
    Intels Fortran Compiler IFX ist ein solcher Compiler, der Binärcode für Intel CPUs (und kompatible) erzeugt und auch sogenannten OpenMP Offload Code für Intel GPUs.
  2. Was unterscheidet IFX im Wesentlichen vom IFORT?
    • IFORT kann parallelisierten Binärcode nur für x86/x64 basierende CPUs erzeugen. IFX hingegen unterstützt auch Binärcode für GPUs.
    • Im Gegensatz zum IFORT erzeugt IFX ausschließlich Code für 64-Bit basierende CPUs (x64). 32-Bit Binärcode (x86 basierend) kann nur mit dem IFORT erzeugt werden.
  3. Kann ich Libraries (.lib), Object-File (.obj) und Präcompilate von MODULEs (.mod Files), die mit dem IFORT erstellt wurden, auch mit Programmen, die mit dem IFX compiliert werden, binden?
    Ja, sofern sie mit dem 64-Bit IFORT Compiler erstellt wurden und dabei nicht die Option -ipo verwandt wurde.
    Am “Ende” produzieren alle Compiler für PC CPU-Binärcode. Sofern dieser intern den gleichen Aufrufkonventionen folgt, ist er kompatibel. Man muß also Binärdateien (.obj, .lib), die man binden (link) möchte, für die bisher IFORT basierenden Executables (.exe) nicht neu erstellen. Das gilt auch für die compilierten MODULEs (.mod).
    D.h. aber auch, daß man “fremde” Libraries (.lib), die man bisher in IFORT basierende Executables (.exe) eingebunden hat, auch mit IFX compilierten Object-Files binden kann – allerdings mit der Einschränkung, daß diese Libraries für 64-Bit CPUs erstellt sein müssen.
  4. Gibt es Nachteile des IFX gegenüber dem IFORT?
    Ja, laut [1] muß man mit Performance-Einbußen rechnen, wenn der Binärcode nur auf CPUs ausgeführt wird. Hier wäre insbesondere die Verarbeitung von COMPLEX Datentypen zu erwähnen (vgl. [1] “Known Limitations”). Intel erklärt, daß es mit jedem neuen Release des IFX Performance-Verbesserungen geben soll.
    QT: Unsere Benchmarks ergeben ein wesentlich besseres Bild des IFX (Version 2024.2.1). Performanceverluste gegenüber IFORT können wir nur vereinzelt feststellen – und stattdessen aber auch durchaus signifikant kürzere Laufzeiten, also bessere Performance.
  5. Wo finde oder woher bekomme ich den neuen Fortran Compiler IFX?
    Beide Fortran Compiler sind seit Jahren Bestandteil des “Intel® oneAPI HPC Toolkit” und des Produkts “Intel® Fortran Compilers”, so daß bei der Installation selbiger bereits beide Compiler auf Ihrem PC vorhanden sind.
    Sie können sich davon sehr einfach überzeugen, indem Sie unter Windows die DOS Eingabeaufforderung aus dem Startmenü unter Intel oneAPI

    starten und dann die Compiler mit ihrem .exe-Stammnamen aufrufen:
    DOS Eingabeaufforderung mit Intel Fortran Environment
    Wenn Sie in der DOS Eingabeaufforderung Ihre Fortran-Programme compilieren, brauchen Sie also lediglich den bisher verwandten Befehl IFORT durch IFX ersetzen.
    Wenn Sie Stapelprogramme bzw. Batch-Files (.bat) zum Erstellen Ihrer Programme verwenden, ist in diesen der Befehl IFORT durch IFX zu ersetzen. Mitunter müssen auch noch Anpassungen bei den Compiler- und Linker-Optionen gemacht werden (siehe Frage 6).
  6. Was muß ich bei der Umstellung von IFORT auf IFX eventuell wissen bzw.ggf. beachten?
    • Da beide Compiler das gleiche Frontend verwenden, sollten Änderungen am Fortran Quellcode nicht nötig sein.
      Da das Backend der beiden Compiler aber nicht den gleichen Binärcode für die CPU erzeugt, muß man zumindest darauf gefaßt sein, daß sich numerische Ergebnisse unterscheiden könnten, oder sogar der Programmablauf ein anderer sein könnte. Wie bei jedem Umstieg auf einen anderen Fortran-Compiler oder auf ein neues Release, sind Tests unerläßlich.
    • Die Compileroptionen von IFORT und IFX sind in vielen Fällen gleich. IFX verarbeitet fast alle dokumentierten Optionen des IFORT. Es gibt kleinere Unterschiede bei den Performance-Einstellungen und der Profile-guided optimization. Siehe [1] unter “CPU Performance”.
      Werden IFORT Optionen beim Compilieren mit IFX verwandt, die dieser nicht unterstützt, erscheint eine Warnung, bspw.:
      command line warning #10148: option '-ip' not supported.
      Weiteres siehe [1] unter “Important Compiler Options Mapping”.
    • Es gibt Unterschiede bei Vergleichen von Gleitkommazahlen. Näheres siehe [1] unter “Floating Point Behavior”.
    • Die Gleitkommaarithmetik unterscheidet sich bei Verwendung der Option fp-model. Siehe [1] unter “fp-model, fp Compiler Option”.
    • Die Optimierer von IFX und IFORT unterscheiden sich hinsichtlich der Annahme des “Überlaufens” von INTEGER-Werten (integer overflow). Die Voreinstellung des IFX ist im Gegensatz zum IFORT davon auszugehen, daß dies während des Programmlaufs nicht auftritt. Siehe [1] unter “-fstrict-overflow (Linux) /Qstrict-overflow (Windows)”.
      Hierzu noch die Anmerkung: INTEGER overflows werden weder vom IFORT noch vom IFX Runtime System während der Laufzeit eines Programms detektiert. Die Verwendung der IFX Option “strict-overflow” ändert daran nichts, auch wenn man sich das vielleicht erhofft. (QT: Leider.)
    • IFX unterstützt OpenMP Befehle, die GPU offloading ermöglichen. Diese sind beim IFORT nicht vorhanden. Näheres siehe [1] unter “ifx Compiler Options and OpenMP Directives”.
    • Es gibt für den IFX keine Auto-Parallelisierung (Option -parallel). Näheres siehe [1] unter “-parallel”.
    • Bei Verwendung des IFX können laut [1] unter Windows die Intel Fortran Laufzeit-Bibliotheken (runtime libraries) nicht statisch gebunden werden. Unter Linux sind einige Besonderheiten zu beachten – siehe [1] “Static and Dynamic Linking of Intel Fortran Libraries with ifx”.
      QT: unsere Erfahrung ist, daß statisches Binden in vielen Fällen doch möglich ist. Siehe [3].
    • IFX verwendet andere Methoden bei der Interprocedural Analysis (IPO) und im Falle Profile Guided Optimizations (PGO). Siehe [1] “PGO, IPO, and Linking Changes” bzgl. Einzelheiten.
    • Weitere Unterschiede betreffen
      • Optimierungsberichte ([1] “Optimization Reports”),
      • AVX Optionen ([1] “Notes on Intel® Advanced Vector Extensions 512 (Intel® AVX-512)”),
      • Versionierung ([1] “Compiler Versioning”)
      • “Brutus or Bisectional Optimization Support” ([1])
    • Es gibt einige weitere Beschränkungen, die abhängig von der verwendeten IFX Version sind. Siehe [1] “Known Limitations” bzgl. Einzelheiten.
  7. Wie stelle ich meine Intel Fortran Projekte (.vfproj) in Microsoft Visual Studio (VS) von IFORT auf IFX um?
    In Ihrem Intel Fortran Projekt in VS (bzw. in der Ansicht “Solution Explorer”) klicken sie mit der rechten Maustaste auf das Projekt und wählen in dem daraufhin erscheinenden Popup-Menu die Option “Intel Compiler” aus, und in dem Sub-Menu den Eintrag “IFX Intel® Fortran Compiler”.
    Intel Fortran in Visual Studio
    Anschließend erstellen Sie ihr Projekt neu (“Build”).
    Wichtig: als Plattform muß “x64” ausgewählt sein (64-Bit).

Wie sind Ihre Erfahrungen?

Sollten Sie beim Umstieg von IFORT zu IFX Erfahrungen gemacht haben, die Sie hier nicht erwähnt wiederfinden, teilen Sie uns diese gerne mit, so daß wir sie hier ggf. berücksichtigen können (bitte per email an: admin@qtsoftware.de . Danke.

Quellen bzw. Links:

[1] Porting Guide for Intel® Fortran Compiler
https://www.intel.com/content/www/us/en/developer/articles/guide/porting-guide-for-ifort-to-ifx.html

[2] Deprecation of The Intel® Fortran Compiler Classic (ifort)
https://community.intel.com/t5/Blogs/Tech-Innovation/Tools/Deprecation-of-The-Intel-Fortran-Compiler-Classic-ifort/post/1541699

[3] https://community.intel.com/t5/Intel-Fortran-Compiler/Last-build-for-ifort-and-plans-for-removing-ifort-from-packages/m-p/1615558#M172957