LFortran und Enzyme: Gradienten durch uralten Fortran-Code ohne Neuschreiben
Differentiable Fortran with LFortran and Enzyme

Was wäre, wenn man durch bestehenden Fortran-, C- oder C++-Simulationscode backpropagieren und ihn als differenzierbare Physik-Engine in JAX oder PyTorch einbetten könnte? Dieser Blogbeitrag von Pasteur Labs zeigt, wie das mit LFortran, LLVM und Enzyme gelingt: Enzyme differenziert auf LLVM-IR-Ebene, LFortran erzeugt besonders sauberes IR, und ein dünner C-Wrapper verbindet beides. Am Beispiel eines 2D-Wärmeleitungs-Solvers mit nichtlinearer Leitfähigkeit demonstriert der Autor die sechsstufige Compiler-Pipeline, die in etwa 30 Sekunden eine differenzierbare Shared Library erzeugt. Dabei werden praktische Hürden wie die Vermeidung von LFortran-Allocatables und die Wahl von -O1 statt -O3 vor dem AD-Pass beleuchtet. Das Ergebnis: exakte Gradienten durch die gesamte Zeitschleife, die mit analytischen Lösungen übereinstimmen – und die Tür zu inversen Problemen, die ohne AD unmöglich wären.
Es ist erstaunlich zu sehen, dass ein Stack, der einige der ältesten und neuesten Technologien kombiniert, überhaupt funktionieren kann.