Informatique

Fortran, le langage du calcul scientifique

Livré par IBM en 1957, Fortran est le premier langage de programmation de haut niveau à avoir connu une large diffusion. Il a été conçu pour écrire des formules mathématiques comme sur le papier et en obtenir un programme aussi rapide que s'il avait été écrit à la main. Près de soixante-dix ans plus tard, il fait encore tourner les prévisions météo, les modèles de climat et une bonne partie des supercalculateurs. Cinq planches pour voir comment il traduit les formules, range ses tableaux, simule le mouvement des planètes, résout des systèmes d'équations, puis pour exécuter de vrais programmes Fortran.

« FORmula TRANslation »

Au début des années 1950, on programme les ordinateurs en langage machine ou en assembleur, et le travail de programmation et de mise au point représente l'essentiel du coût d'un calcul. En 1954, chez IBM, John Backus propose de laisser l'ordinateur faire lui-même la traduction : le scientifique écrit Y = A*X**2 + B*X + C, et un programme, le compilateur, produit les instructions machine. Beaucoup de spécialistes doutent qu'un programme traduit automatiquement puisse être aussi rapide qu'un programme écrit à la main. Après trois ans de travail, l'équipe de Backus livre en avril 1957 le premier compilateur FORTRAN pour l'IBM 704, dont l'optimisation est si soignée que les programmes obtenus rivalisent avec ceux des meilleurs programmeurs. En quelques années, la majorité des programmes scientifiques sont écrits en FORTRAN.

Les éditions successives du langage. Jusqu'en 1977, on écrit FORTRAN en majuscules (les perforatrices n'avaient pas de minuscules) ; depuis Fortran 90, on l'écrit avec une seule majuscule. Chaque norme ajoute des fonctions sans casser les anciens programmes.
Planche 1

Traduire une formule en instructions machine

1954 – 1957

L'IBM 704 calcule avec un seul registre, l'accumulateur : on y charge un nombre (CLA), on lui ajoute, soustrait, multiplie ou divise un nombre de la mémoire, on range le résultat (STO). Pour traduire une formule, le compilateur la découpe d'abord en un arbre qui respecte les priorités (puissance, puis multiplication et division, puis addition et soustraction, de gauche à droite), puis parcourt cet arbre pour produire les instructions, en rangeant les résultats intermédiaires dans des cases temporaires T1, T2… Choisissez une formule, ou écrivez la vôtre, puis suivez l'exécution pas à pas.

L'arbre de la formule : les feuilles sont les variables et les constantes, chaque nœud est une opération. Le nœud en cours de calcul est entouré de rouge.

Le code produit (IBM 704 simplifié)

    Accumulateur / cases temporaires
    —
    Instructions : formule développée / schéma de Horner
    —
    Résultat (A = 2, B = −3, C = 1,5, D = 0,25, E = 4, X = 1,7)
    —
    Contrôle : les 6 formules d'exemple calculées par gfortran 13, comparées sur 17 chiffres
    —
    Ce qu'il faut retenir. La formule développée A·X³ + B·X² + C·X + D demande 6 multiplications ; écrite selon le schéma de Horner, ((A·X + B)·X + C)·X + D, elle n'en demande que 3, et le code est plus court. Les deux résultats diffèrent pourtant au 16e chiffre (3,95599999999999986 contre 3,95599999999999995) : les nombres à virgule flottante sont arrondis à chaque opération, et l'ordre des calculs compte. Un compilateur Fortran respecte l'ordre écrit par le programmeur, sauf si on l'autorise à le changer pour aller plus vite. Le compilateur de 1957 cherchait déjà à éviter les chargements et rangements inutiles : c'est le début de l'optimisation automatique, une idée qui est aujourd'hui au cœur de tous les compilateurs.
    Planche 2

    Des tableaux rangés par colonnes

    1957 – aujourd'hui

    Fortran a été le premier langage à proposer des tableaux à plusieurs dimensions : A(I,J) désigne l'élément de la ligne I et de la colonne J d'une matrice. En mémoire, qui n'a qu'une seule dimension, Fortran range les éléments colonne après colonne (le langage C, lui, les range ligne après ligne). Or le processeur ne lit pas la mémoire nombre par nombre : il charge dans sa mémoire cache, très rapide mais petite, des lignes de 64 octets, soit 8 réels en double précision. Parcourir la matrice dans le bon ordre réutilise chaque ligne de cache chargée ; dans le mauvais ordre, on la jette souvent avant de s'en être servi.

    24
    8
    À gauche, la matrice A(n,n) : chaque case est un réel, les couleurs regroupent les 8 réels d'une même ligne de cache. Au centre, la mémoire, colonne après colonne. À droite, le contenu du cache. Une case qui s'allume en rouge est un défaut de cache : il faut aller chercher la ligne en mémoire principale, ce qui coûte environ cent fois plus cher qu'une lecture dans le cache.
    Lectures / défauts de cache
    —
    Défauts : bon ordre / mauvais ordre
    —
    Mesure réelle avec gfortran (n = 4 000, somme des éléments)
    —
    Contrôle : 30 configurations (taille × cache × ordre) simulées en Python
    —
    Ce qu'il faut retenir. Dans le bon ordre, on n'a qu'un défaut de cache pour 8 lectures, quelle que soit la taille du cache. Dans le mauvais ordre, deux éléments voisins d'une ligne de la matrice sont éloignés de n réels en mémoire : si le cache ne peut pas garder une ligne de cache par ligne de la matrice, chaque lecture devient un défaut. Sur un vrai ordinateur, la somme d'une matrice de 4 000 × 4 000 réels prend environ 8 fois plus de temps dans le mauvais ordre. C'est pourquoi, en Fortran, la boucle intérieure doit parcourir le premier indice. Fortran 90 permet aussi d'écrire directement S = SUM(A) ou C = A + B sur des tableaux entiers, et laisse le compilateur choisir le meilleur ordre.
    Planche 3

    Simuler le mouvement : la Terre autour du Soleil

    1960 – aujourd'hui

    Le métier premier de Fortran est la simulation numérique : on découpe le temps en petits pas dt et on fait avancer, pas après pas, la position et la vitesse. Prenons une planète attirée par le Soleil, avec les unités de l'astronomie (distance en unités astronomiques, temps en années, GM = 4π²). Trois méthodes se ressemblent beaucoup : Euler met à jour la position avec l'ancienne vitesse ; Euler-Cromer met d'abord à jour la vitesse ; Verlet fait un demi-pas de vitesse, un pas de position, puis un second demi-pas de vitesse. Observez la trajectoire et l'énergie, qui devrait rester constante.

    Les trajectoires calculées par les trois méthodes, partant du même point (x = 1 UA). Le Soleil est au centre ; le cercle gris est l'orbite exacte dans le cas circulaire.
    Énergie mécanique au cours du temps (par unité de masse). Elle doit rester constante : Euler la fait monter, la planète s'échappe en spirale.
    Temps simulé / pas calculés
    —
    Énergie finale : Euler / Euler-Cromer / Verlet (initiale)
    —
    Distance au Soleil après 10 ans : Euler / E.-C. / Verlet
    —
    Contrôle : positions et énergies finales des 18 simulations calculées par gfortran, comparées sur 17 chiffres
    —
    Ce qu'il faut retenir. Diviser le pas de temps par deux réduit l'erreur, mais double le calcul : la méthode compte davantage. Euler-Cromer et Verlet sont des méthodes symplectiques : leur énergie oscille sans dériver, et l'orbite reste fermée, même après des milliers de tours. Ce sont elles qu'on utilise en dynamique moléculaire et en mécanique céleste. Les modèles de météo et de climat appliquent la même idée à des millions de cases de l'atmosphère et de l'océan, avec les équations de la mécanique des fluides : ce sont parmi les plus gros programmes Fortran au monde.
    Planche 4

    Résoudre des équations : de LINPACK au TOP500

    1979 – 2026

    Une grande partie du calcul scientifique se ramène à résoudre un système linéaire A·x = b. La méthode reine est l'élimination de Gauss : on fait apparaître des zéros sous la diagonale, colonne par colonne, puis on remonte. Pour limiter les erreurs d'arrondi, on choisit à chaque étape comme pivot le plus grand nombre de la colonne. En 1979, la bibliothèque Fortran LINPACK fournit ces méthodes, et son guide publie un tableau des temps de calcul sur différents ordinateurs : c'est l'origine du test qui classe depuis 1993 les 500 plus puissants supercalculateurs du monde, le TOP500.

    10 000
    Le système 4 × 4 et son second membre b. Ligne du pivot en bleu, ligne qui reçoit l'élimination en rouge. Une fois le triangle obtenu, on remonte de la dernière inconnue à la première.
    Puissance du n° 1 du TOP500 (en opérations par seconde, échelle logarithmique), mesurée par le test LINPACK. Le point orange donne l'IBM 704 de 1957 pour comparaison.
    Étape
    —
    Opérations pour n inconnues (≈ ⅔ n³) et durée sur IBM 704 / LineShine
    —
    Matrice de Hilbert 6 × 6 (solution exacte : six 1) : plus grand écart
    —
    Contrôle : solutions des deux systèmes calculées par gfortran, comparées sur 17 chiffres
    —
    Ce qu'il faut retenir. Pour n inconnues, l'élimination demande environ ⅔ n³ opérations : doubler la taille multiplie le travail par 8. La matrice de Hilbert montre qu'un système peut être mal conditionné : les arrondis, pourtant minuscules (16 chiffres), y sont amplifiés et on perd environ sept des seize chiffres de la solution. Les bibliothèques Fortran BLAS (1979), LINPACK puis LAPACK (1992) rassemblent ces méthodes, optimisées pour chaque processeur ; elles sont toujours utilisées, par exemple par NumPy et SciPy en Python, par R ou par MATLAB. En juin 2026, le n° 1 du TOP500, LineShine (Chine), atteint 2,2 milliards de milliards d'opérations par seconde, et cinq machines dépassent l'exaflops.
    Planche 5 · signature

    Exécuter de vrais programmes Fortran

    2026

    Voici un petit interpréteur Fortran, écrit pour cette page, qui exécute dans votre navigateur un sous-ensemble de Fortran 90 en forme libre : types integer (4 ou 8 octets), real (simple ou double précision), logical, character ; constantes parameter ; tableaux à plusieurs dimensions, sections a(2:5) et opérations sur tableaux entiers ; boucles do, do while, exit, cycle ; if et select case ; fonctions et sous-programmes avec passage des arguments par référence ; fonctions intrinsèques (sqrt, mod, sum, matmul…) ; affichage avec formats (I, F, E, ES, G, A, L, X). Chaque exemple a aussi été compilé par le vrai compilateur gfortran : les sorties sont comparées caractère par caractère.

    Le programme

    La sortie

    
          

    Les variables du programme principal en fin d'exécution

    Opérations élémentaires exécutées / durée
    —
    Message du compilateur
    —
    Contrôle : sortie identique à celle de gfortran 13 (exemple d'origine)
    —
    Ce qu'il faut retenir. En Fortran, les variables se déclarent au début, avec leur type ; implicit none interdit les déclarations implicites d'autrefois (une variable commençant par I à N était automatiquement entière, les autres réelles : d'où la célèbre boucle DO I). Les arguments sont passés par référence : un sous-programme peut modifier la variable de l'appelant, ce que précise l'attribut intent (exemple 6). Les formats d'affichage, hérités des imprimantes des années 1950, fixent la largeur exacte de chaque nombre : F12.6 donne 12 caractères dont 6 décimales, ES14.3 la notation scientifique. Essayez de modifier les exemples : changez le nombre de points de l'exemple 6 ou la taille du crible de l'exemple 3.

    Où trouve-t-on Fortran aujourd'hui ?

    Météo et climat

    Les grands modèles de prévision du temps, comme celui du Centre européen de prévision météorologique à moyen terme (ECMWF) ou les modèles de Météo-France, et la plupart des modèles de climat utilisés pour les rapports du GIEC sont écrits en Fortran, souvent sur des millions de lignes.

    Physique et ingénierie

    Mécanique des fluides (aérodynamique, combustion), physique nucléaire, calcul des structures, astrophysique : des codes développés depuis des décennies et validés par l'expérience continuent d'évoluer en Fortran, désormais sur des processeurs graphiques.

    Chimie et matériaux

    De nombreux logiciels de chimie quantique et de simulation des matériaux, très utilisés sur les supercalculateurs, sont écrits en grande partie en Fortran, comme VASP ou Quantum ESPRESSO.

    Bibliothèques mathématiques

    BLAS et LAPACK, écrites à l'origine en Fortran, servent encore de référence pour l'algèbre linéaire. Quand on calcule avec NumPy, SciPy, R ou MATLAB, on appelle souvent, sans le savoir, du code d'origine Fortran.

    Supercalculateurs

    Les centres de calcul fournissent tous des compilateurs Fortran optimisés, avec la parallélisation par OpenMP, MPI ou les coarrays de Fortran 2008. Le test du TOP500 descend directement de LINPACK.

    Popularité

    Longtemps jugé dépassé, Fortran est revenu dans le classement TIOBE des 20 langages les plus recherchés en 2021. En octobre 2026, il y est 13e, juste devant COBOL (16e). Une communauté active développe des outils modernes (gestionnaire de paquets fpm, bibliothèque standard stdlib, compilateur LFortran).

    Frise des jalons

    Pour aller plus loin

    Les exemples de la planche 5, les formules de la planche 1, les orbites de la planche 3 et les systèmes de la planche 4 ont été compilés et exécutés par gfortran 13.3 (sans optimisation qui change l'ordre des calculs) au moment de la fabrication de la page ; la simulation de cache a été refaite en Python. Votre navigateur refait tous ces calculs et les compare. Les performances du TOP500 sont celles publiées sur top500.org.