Forscher entwickeln Transpiler von Fortran zu Python

Forscher des Climate Modeling Center am französischen Institut Pierre-Simon Laplace (IPSL) haben mit FGPT (Fortran General-Purpose Transpiler) einen Ansatz vorgestellt, mit dem sich bestehender Fortran-Code automatisiert in moderne Softwareumgebungen übertragen lässt. Das als Proof of Concept vorgestellte Framework übersetzt Fortran unter anderem in NumPy- und JAX-Code. Die Autoren Shivamshan Sivanesan und Kazem Ardaneh wollen damit die Modernisierung umfangreicher wissenschaftlicher Fortran-Codebasen erleichtern.

Ausgangspunkt der jüngst veröffentlichten Arbeit ist der nach Einschätzung der Autoren wachsende Aufwand für die Pflege und Weiterentwicklung großer Fortran-Anwendungen. Die Sprache werde weiterhin umfangreich für Klima- und Wettermodelle, Strömungssimulationen und andere wissenschaftliche Anwendungen eingesetzt. Gleichzeitig gebe es immer weniger Entwickler mit entsprechender Fortran-Erfahrung. Auch die Anpassung bestehender Anwendungen an GPUs und andere heterogene Rechnerarchitekturen könne umfangreiche manuelle Änderungen erfordern.

Autoren setzen auf Compilertechnik

Für FGPT setzen die Forscher auf klassische Compilerverfahren. Der Fortran-Code wird analysiert, Abhängigkeiten werden ermittelt und die Programmstruktur über sogenannte Abstract Syntax Trees (AST) schrittweise transformiert. Die Übersetzungen sollen dadurch deterministisch und reproduzierbar sein und die Semantik des ursprünglichen Programms erhalten.

FGPT übersetzt Fortran-Code über eine AST-basierte Zwischenrepräsentation in Python-Code. Dabei sollen die Programmsemantik erhalten und Python-Bibliotheken wie NumPy eingebunden werden. (Quelle: Sivanesan/Ardaneh, „A Fortran General-Purpose Transpiler: Proof of Concept“, 2026, Abb. 1.)

Die Autoren grenzen ihren Ansatz dabei ausdrücklich von einer alleinigen Übersetzung durch Large Language Models ab. Wissenschaftliche Codebasen könnten Hunderttausende Zeilen umfassen. Bei solchen Größenordnungen seien konsistente Transformationen, numerische Genauigkeit und die Validierung anhand produktiver Tests entscheidend. Bisherige LLM-basierte Arbeiten hätten zudem gezeigt, dass große Anwendungen in Abhängigkeit von ihrer Programmstruktur schrittweise bearbeitet werden müssten und weiterhin manuelle Korrekturen erforderlich sein könnten.

FGPT zerlegt den Prozess in mehrere Schritte. Einzelne Fortran-Prozeduren werden zusammen mit ihren Abhängigkeiten isoliert. Daraus erzeugt das Framework zunächst NumPy-Code, dessen Ergebnisse mit Referenzwerten aus dem ursprünglichen Fortran-Programm verglichen werden. Anschließend kann der NumPy-Code nach JAX übertragen werden. Die Architektur sieht darüber hinaus GPU-angepasstes Fortran sowie automatisch differenzierbares Fortran über Tapenade vor.

Test mit rund 15.000 Zeilen Fortran

Erprobt wurde FGPT am Hydrologie-Modul eines IPSL-Landoberflächenmodells. Der untersuchte Bereich umfasst rund 15.000 Zeilen Fortran-Code mit verschachtelten Prozeduren, mehrdimensionalen Arrays, Schleifen, Bedingungen und zahlreichen Modulabhängigkeiten. Die Forscher übersetzten den kompletten untersuchten Hydrologie-Workflow nach NumPy und JAX.

Nach ihren Ergebnissen blieben die erzeugten Implementierungen innerhalb der festgelegten numerischen Toleranzen. Beim Vergleich zwischen NumPy und Fortran lagen die maximalen absoluten Abweichungen typischerweise in einer Größenordnung von 10⁻⁹. Bei JAX berichten die Autoren für zahlreiche Routinen von exakten Übereinstimmungen oder sehr kleinen Abweichungen infolge unterschiedlicher Gleitkommaberechnungen.

Der NumPy-Code war in vielen Tests erheblich langsamer als das kompilierte Fortran-Original. Anders fiel der Vergleich mit dem JIT-kompilierten JAX-Code aus. Dieser war laut Paper bei fast allen untersuchten Prozeduren schneller als die Fortran- und NumPy-Versionen. Für die untersuchte Implementierung nennen die Autoren einen 3,66-fachen Speed-up gegenüber Fortran, den sie auf Vektorisierung und JIT-Kompilierung zurückführen. Bei einer der getesteten Routinen ließ sich dagegen kein Performancegewinn erzielen.

Noch nicht für alle Fortran-Konstrukte geeignet

FGPT befindet sich weiterhin im Proof-of-Concept-Stadium. Pointer, Derived Types und Interface Blocks werden bislang nicht unterstützt. Auch die automatische Differenzierung über JAX ist noch nicht vollständig umgesetzt. Der erzeugte Code ist nach Angaben der Forscher strukturell darauf vorbereitet, Schnittstellen für jax.grad, jax.jvp oder jax.vjp erzeugt FGPT derzeit aber noch nicht.

Für die Legacy-Modernisierung ist vor allem der gewählte Ansatz relevant: Bestehender Fortran-Code soll nicht vollständig manuell neu implementiert werden. FGPT analysiert Programmstrukturen und Abhängigkeiten und übersetzt den Code über reproduzierbare Transformationsschritte. Wie sich FGPT bei wesentlich größeren und komplexeren Anwendungen schlägt, ist in der vorliegenden Arbeit noch nicht untersucht. (td)