Présentation de LFortran et Enzyme
LFortran et Enzyme permettent de rendre du code Fortran différentiable, ce qui signifie qu'il est possible d'obtenir les dérivées du code sans avoir à le réécrire. Cela est particulièrement utile pour les simulations scientifiques où les dérivées sont nécessaires pour l'optimisation ou les problèmes inverses.
Fonctionnement de LFortran et Enzyme
LFortran est un compilateur Fortran qui génère du code LLVM IR, qui peut ensuite être traité par Enzyme pour obtenir les dérivées. Le processus de compilation implique plusieurs étapes, notamment la conversion du code Fortran en LLVM IR, la mise en forme du code pour qu'il soit compatible avec Enzyme, et la génération des dérivées.
$ lfortran --show-llvm --no-array-bounds-checking thermal_2d.f90 > thermal_2d.ll
Cette commande compile le code Fortran en LLVM IR et le stocke dans le fichier thermal_2d.ll.
Exemple de code Fortran différentiable
Pour illustrer le fonctionnement de LFortran et Enzyme, nous allons utiliser un exemple de code Fortran qui résout l'équation de la chaleur en 2D. Le code est écrit en Fortran 90 et utilise une méthode de différences finies pour résoudre l'équation.
subroutine thermal_2d_solve(n, nx, ny, n_steps, &
T_init, T_final, T_cur, T_new, &
k0, k1, rho, cp, &
h_conv, T_inf, T_hot, &
Q, Lx, Ly, dt)
Ce code définit une subroutine qui prend en entrée les paramètres de la simulation et renvoie la solution de l'équation de la chaleur en 2D.
Compilation et génération des dérivées
Une fois le code Fortran écrit, nous devons le compiler en utilisant LFortran et Enzyme pour obtenir les dérivées. Le processus de compilation implique plusieurs étapes, notamment la conversion du code Fortran en LLVM IR, la mise en forme du code pour qu'il soit compatible avec Enzyme, et la génération des dérivées.
$ opt --l…
Cette commande génère les dérivées du code Fortran en utilisant Enzyme.