Des nouvelles de Fortran n°3 - Février 2022

Posté par  (site web personnel) . Édité par E3Ms6vyX, Ysabeau 🧶 et Benoît Sibaud. Modéré par Pierre Jarillon. Licence CC By‑SA.
Étiquettes :
34
8
fév.
2022
Fortran

Après deux journaux consacrés au monde du Fortran, publiés en mai 2020 et mai 2021, il va falloir s’habituer à des dépêches peut-être semestrielles, sur le langage vétéran. Il est temps de faire le point, la communauté Fortran-lang, point chaud de la planète Fortran depuis fin 2019, ayant publié fin décembre le bilan de ses activités en 2021. Mais nous aborderons bien sûr l’actualité Fortran de façon plus large.

Sommaire

Sur le front des compilateurs

  • Le compilateur commercial Fortran NAG® prend désormais en charge l’intégralité de la norme Fortran 2008 et en grande partie Fortran 2018, notamment les évènements, équipes et routines collectives pour le calcul parallèle, fonctionnalités que l’on peut regrouper sous le vocable coarrays. Il est disponible pour Windows, Linux et macOS, y compris pour les Apple M1 et les systèmes Linux ARM.

  • nvfortran, compilateur développé par Nvidia, est disponible en version 22.1 dans la suite Nvidia HPC SDK, gratuitement téléchargeable. Une partie des outils développés par Nvidia dans cette suite logicielle est basée sur les compilateurs PGI, dont Nvidia a fait l’acquisition en 2013. nvfortran fonctionne sur architecture x86-64, OpenPOWER et ARM. La norme Fortran 2003 y est implémentée complètement. OpenACC 2.7 est partiellement implémenté, ainsi que OpenMP 5.0. Le support des dernières versions de CUDA en fait le compilateur Fortran de choix pour l’utilisation des DPU et GPU Nvidia. À travers OpenMP et OpenACC, les compilateurs Nvidia sont compatibles avec les GPU AMD.

  • Le nouveau compilateur Intel ifx, basé sur LLVM, n’est plus en version bêta (version 2022.0.0). Il est disponible dans le oneAPI HPC Toolkit 2022.1, gratuitement téléchargeable. Il implémente intégralement la norme Fortran 2008 (à l’exception des coarrays) et la plupart des directives et fonctionnalités de déchargement (vers les GPU Intel) d’OpenMP 4.5 et OpenMP 5.0/5.1. Un guide de migration de ifort vers ifx est disponible sur le site d’Intel. En 2022, il devrait progressivement rejoindre son aîné en termes de fonctionnalités.

  • Le développement du nouveau Flang se poursuit. Il est maintenant inclus dans les paquets binaires officiels de LLVM 13.0 en tant que frontal Fortran (gfortran sert toujours de backend). Il est sous licence Apache 2.0.

  • Le développement de LFortran avance à grands pas, grâce, en particulier, aux travaux de trois étudiants lors du GSoC 2021. Il est sous licence BSD et peut être installé sous macOS, Windows et Linux en utilisant conda. Une des fonctionnalités phares de LFortran est de pouvoir être utilisé avec Jupyter. Il dispose également de trois backends : LLVM, C++ et x86. Les prochains objectifs de développement sont la prise en charge complète de la norme Fortran 2018, une interopérabilité native avec les autres compilateurs Fortran et d’autres langages, et la prise en charge des CPU multi-coeurs et des GPU. Ce projet prometteur est l’œuvre d’Ondřej Čertík (Los Alamos National Laboratory), créateur des bibliothèques de calcul symbolique SymPy et SymEngine.

  • GFortran, compilateur faisant partie de GCC, est actuellement en version 11.2. Il supporte désormais complètement OpenMP 4.5 et apporte une prise en charge améliorée d’OpenMP 5.0 et OpenACC 2.6. La collection de compilateurs GCC 12.1, première version stable de GCC 12, devrait sortir en avril 2022, apportant des fonctionnalités d’OpenMP 5.1 et un support complet de la norme TS 29113 Further Interoperability of Fortran with C, qui fait partie de la norme Fortran 2018.

À noter que, parmi les compilateurs en ligne, certains incluent un ou plusieurs compilateurs Fortran. Par exemple le site Compiler Explorer, alias Godbolt, propose en particulier GFortran, ifort, ifx et flang (qui ne semble pas fonctionner pour l’instant).

Projets de la communauté Fortran-lang

Le gestionnaire de paquets Fortran fpm

fpm (Fortran Package Manager) est actuellement disponible en version 0.5.0, avec de nombreuses corrections de bogues et améliorations. Vous pouvez aussi installer la version bleeding edge, désormais délivrée en continue sur GitHub pour Windows, Linux et macOS, et même sous forme d’un fichier Fortran unique (plus de 24 000 lignes). La version officielle est également disponible sous forme de paquets pour MSYS2, Homebrew, Conda et Arch Linux.

Les fonctionnalités de fpm peuvent être étendues à l’aide de greffons. La commande fpm search permet ainsi de faire des recherches dans le catalogue des paquets fpm. Et fpm man permet d’afficher des pages d’aide sur les instructions intrinsèques du Fortran.

Autre nouveauté, fpm dispose d’une documentation en ligne fpm-docs. Des traductions en français, espagnol, allemand et chinois sont disponibles, et bientôt en néerlandais. Cette documentation est basée sur la méthode Diátaxis où la documentation est divisée en quatre quadrants : tutoriels, guides pratiques, comprendre fpm, manuel de référence. On y trouvera également des actualités et les notes de version.

La bibliothèque standard stdlib

La version 0.1.0 de la bibliothèque standard Fortran stdlib a été publiée le 4 octobre 2021. Elle a été enrichie d’une douzaine de modules en 2021 et est désormais utilisable en tant que paquet fpm. Une présentation en a été faite lors de la conférence FortranCon 2021. Et le travail de documentation vient tout juste de commencer : vous n’y trouverez pour l’instant qu’un how-to expliquant comment compiler la bibliothèque sur votre système.

Bibliothèques adoptées par la communauté

fftpack est une bibliothèque de transformées de Fourier rapides réelles et complexes. Basée sur la bibliothèque classique FFTPACK disponible sur Netlib, elle a été adoptée par la communauté Fortran-lang avec pour objectif d’en moderniser le code et d’en faire un paquet fpm.

Autre bibliothèque disponible sur Netlib, Minpack vient également d’être adoptée pour modernisation du code, originellement en FORTRAN 77, et transformation en paquet fpm. Elle permet de résoudre des équations non-linéaires et d’utiliser des méthodes de moindres carrés non-linéaires.

test-drive

test-drive est un environnement de tests simple à utiliser développé par Sebastian Ehlert. Il est utilisé en particulier par les projets stdlib et fpm. Il s’intègre facilement avec Meson, CMake et fpm.

Tutoriels

Le site Fortran-lang.org s’est enrichi du tutoriel Fortran Best Practices, qui a été rapatrié du site de référence fortran90.org d’Ondřej Čertík et amélioré par la communauté. Il fournit de nombreux conseils sur la façon d’écrire un Fortran simple et idiomatique pour les tâches numériques, et sur la façon d’éviter certains pièges courants.

Une documentation décrivant chaque fonction/procédure intrinsèque du langage est en cours de réalisation. Cette documentation n’est, pour l’instant, disponible qu’en prévisualisation. Chaque page propose également un court programme d’exemple complet et éventuellement des liens externes. Ce projet est destiné à permettre également la génération de pages man.

Autres projets

Quickstart Fortran

Quickstart Fortran permet d’installer facilement sous Windows les outils essentiels pour développer en Fortran, à l’aide d’une interface graphique et sans nécessiter les droits d’administration :

GCC-GFortran 10.3.0
Fortran Package Manager v0.5.0
Git for Windows v2.33.1 (nécessaire pour fpm)
OpenBLAS (BLAS/LAPACK) v0.3.17-1
GNU make v4.3 

Il peut également faciliter l’installation d’Intel OneAPI et de la bibliothèque stdlib.

Ce nouvel utilitaire est développé par L. Kedward (Université de Bristol, UK) et est publié sous licence MIT.

FORD (FORtran Documentation)

Le générateur de documentation FORD, écrit en Python, a trouvé un nouveau mainteneur en juillet 2021. La dernière version 6.0.0 datait alors de 2018. La version 6.1.0 est donc sortie en juillet et la 6.1.8 est sortie le 1ᵉʳ février 2022.

gtk-fortran 4.1

Projet personnel, gtk-fortran 4.1 est basé sur GTK 4.4 et GLib 2.70. La version 4.2 basée sur GTK 4.6 devrait être lâchée dans la nature après la sortie de Fedora 36 fin avril.

De nouveaux exemples, sous licence MIT, sont disponibles sur le dépôt gtk-fortran-extra. La licence GNU GPLv3 de gtk-fortran concerne en effet également les exemples inclus. Disposer d’autres exemples sous licence MIT permet aux personnes qui ne souhaitent pas utiliser la licence GPL de débuter leurs propres applications en partant du code de ces nouveaux exemples.

Événements

GSoC 2021

La communauté Fortran-lang a participé au programme Google Summer of Code pour la première fois, avec six étudiants travaillant sur des projets concernant stdlib, fpm, et LFortran.

La réflexion est en cours pour les projets à proposer non seulement à la GSoC 2022 mais également à la Google Season of Docs 2022 afin d’améliorer la documentation des projets.

FortranCon 2021

Seconde édition, la conférence internationale FortranCon 2021, organisée par l’Université de Zurich, s’est tenue à nouveau virtuellement les 23 et 24 septembre 2021. Les diapositives de certaines présentations sont accessibles sur le site de la conférence. Et les vidéos de dix-neuf présentations sont disponibles sur la chaîne YouTube FortranCon. Il y avait typiquement 70-80 participants simultanément dans Zoom. Ce fut en particulier l’occasion pour les étudiants ayant participé au GSoC 2021 de présenter leurs travaux.

Le rythme annoncé pour les conférences FortranCon étant de dix-huit mois, la prochaine devrait donc avoir lieu au premier semestre 2023.

PackagingCon 2021

Lors de la PackagingCon 2021, une conférence dédiée aux logiciels de gestion de paquets, Sebastian Ehlert a présenté le gestionnaire de paquets Fortran fpm. Vous pouvez regarder l’enregistrement ici sur YouTube.

Littérature

Livres

Parmi les livres sortis en 2021, on notera en particulier :

Le premier concerne les programmeurs C, C++ et Fortran. Le second se limite à la norme Fortran 90, ce qui n’est pas gênant, car il propose essentiellement de courtes routines de calcul. Mais il est un peu dommage d’y trouver pour la déclaration des variables des notations qui ont été courantes mais sans faire partie des normes Fortran, par exemple real*8 au lieu de real(8) 1.

Publications Fortran-lang

En 2021, deux articles sur les projets Fortran-lang ont été écrits collaborativement sur GitHub. Le premier article documente la motivation et les objectifs de Fortran-lang :

Milan Curcic, Ondřej Čertík, Brad Richardson, Sebastian Ehlert, Laurence Kedward, Arjen Markus, Ivan Pribec, et Jérémie Vandenplas, « Toward Modern Fortran Tooling and a Thriving Developer Community ».

Il a été soumis à ACM FORTRAN Forum, mais le journal a malheureusement cessé ses publications en 2021 (voir section suivante). Il est néanmoins disponible sous forme de prépublication sur l’archive ouverte arXiv.org.

A également été soumis un article intitulé « The State of Fortran » au journal Computing in Science & Engineering (CiSE) de l’IEEE. Il est en cours de revue par les pairs.

Publication sur la structure do concurrent

En octobre 2021, des employés de l’entreprise Predictive Science Inc. ont mis en ligne une prépublication intitulée « Can Fortran's 'do concurrent' replace directives for accelerated computing? » sur le site arXiv qui complète un billet publié par Nvidia fin 2020. Elle a finalement gagné le prix du meilleur papier présenté au Workshop WACCPD 2021 (Eighth Workshop on Accelerator Programming Using Directives) de la conférence SC21 The International Conference for High Performance Computing, Networking, Storage, and Analysis.

L’objet de l’article est de comparer les performances de certains compilateurs Fortran lorsqu’ils parallélisent une structure do concurrent. Introduite dans la norme Fortran 2008, cette structure impose un certain nombre de contraintes sur les itérations dans l’espoir, parfois vain, de paralléliser la boucle automatiquement. Les compilateurs gfortran et ifort tentent de paralléliser la boucle à l’aide d’instructions OpenMP, tandis que le compilateur nvfortran s’appuie sur OpenACC.

En ce qui concerne les calculs sur GPU, la parallélisation automatique réalisée par nvfortran donne des résultats très proches de ceux obtenus avec des instructions OpenACC explicites. Pour les calculs sur CPU, la parallélisation automatique réalisée par les compilateurs nvfortran, gfortran et ifort donne des résultats très proches de ceux obtenus avec des instructions OpenMP / OpenACC explicites.

Bien entendu, l’analyse proposée dans la prépublication n’est pas complètement exhaustive, et est spécifique au code étudié. Les évolutions des compilateurs, ainsi que des standards Fortran, OpenMP et OpenACC pourraient chambouler les performances observées.

Divers

Nécrologie

2021 marque la fin du bulletin mensuel FORTRAN Forum, qui était publié trois fois par an par le SIGPLan (Special Interest Group in Programming Languages) de l’ACM (Association for Computing Machinery). Créé en juillet 1982, il a accueilli 322 publications écrites par les utilisateurs du langage. L’article le plus téléchargé, daté de 2006, parle d’un programme en Fortran 95 permettant de générer et de résoudre des… Sudokus ! L’auteur en est Michael Metcalf, un des trois auteurs du célèbre livre Modern Fortran Explained mis à jour régulièrement depuis 1987 (la dernière version intègre la norme Fortran 2018).

Future norme Fortran 202x

La future norme est toujours en cours d’élaboration et prévue pour octobre 2023. Le dernier brouillon de travail date du 27 décembre 2021 et est disponible sur le site du J3, le comité des normes Fortran US. Comme d’habitude les nouveautés de la norme sont résumées dans l’introduction (page 13 du PDF). Une réunion du comité a lieu du 28 février au 9 mars, à nouveau en virtuel.

Fortran sur Twitter

Des conseils et astuces sur le Fortran sont désormais diffusés quotidiennement sur Twitter @fortrantip. Ces tweets s’ajoutent à ceux de la communauté @fortranlang et de ses membres. Le compilateur LFortran est également présent avec @lfortranorg. Plus largement, les tweets parlant du Fortran peuvent bien sûr être traqués avec le mot-dièse #fortran.

Conclusion

Comme vous pouvez le constater, l’actualité du monde Fortran est suffisamment riche pour envisager des dépêches une ou deux fois par an.


  1. Et encore, real(8) est une notation à éviter, le 8 étant un numéro de type signifiant dans la plupart des compilateurs qu’il s’agit d’un réel sur 8 octets, mais pas forcément dans tous… En Fortran moderne, on utilisera le type real64 défini dans le module intrinsèque iso_fortran_env, qui lui est normalisé. 

Aller plus loin

  • # Le gestionnaire de paquetages Fortran

    Posté par  . Évalué à 5.

  • # Mon premier langage

    Posté par  . Évalué à 10.

    Fortran, mon premier langage de programmation.
    J'ai commencé à écrire mes premières lignes de code en Fortran à l'automne 1962 (p'tain je réalise que cela fait 60 ans…), comme étudiant en école d'ingénieur. Sur une IBM 1620, 20 K caractères de 6 bits. Ce qui n'empêchait pas d'écrire des programmes assez copieux : régression, équadif par Runge-Kutta, etc.

    Puis ensuite, l'assembler de l'IBM 1620, l'assembler de l'IBM 360, COBOL (j'ai honte, mais il faut parfois gagner sa croûte, très bien la gagner en l’occurrence il est vrai), PLAN (assembler de l'ICL 1900 qui avait un magnifique système d'exploitation pour l'époque, années 1970, GEORGE), assembler de la série 200 Honeywell, PASCAL, C, MODULA, assembler de divers microcalculateurs.
    Mais je n'ai plus fait de FORTRAN depuis une trentaine d'années.

    Maintenant, j'apprends RUST, uniquement pour le plaisir, je vais peut-être devenir le programmeur RUST le plus âgé (notez que je dit âgé, pas vieux) : 80 ans et douze jours :-)) . Je développe en RUST un éditeur de texte, je sais, je sais, il y en a déjà une foultitude, mais c'est bien plus beau lorsque c'est inutile.

    • [^] # Re: Mon premier langage

      Posté par  (site web personnel) . Évalué à 4.

      J'ai commencé à écrire mes premières lignes de code en Fortran à l'automne 1962 (p'tain je réalise que cela fait 60 ans…), comme étudiant en école d'ingénieur.

      Ecole qui était à la pointe du progrès ! Le premier compilateur Fortran a été déployé par IBM chez ses clients en 1957. Ca montre donc à quel point ça a diffusé rapidement à l'époque !

      • [^] # Re: Mon premier langage

        Posté par  (site web personnel, Mastodon) . Évalué à 5.

        Frances Allen avait formé les gens à son arrivée, en 1957, sur Fortran. Les chercheurs avaient accueilli ce langage assez fraichement. En fait, je subodore que ça a été diffusé rapidement aussi, voire surtout parce qu'il y avait un très forte incitation d'IBM pour cela.

        « Tak ne veut pas quʼon pense à lui, il veut quʼon pense », Terry Pratchett, Déraillé.

        • [^] # Re: Mon premier langage

          Posté par  (site web personnel) . Évalué à 5.

          Ca répondait au besoin d'un langage de haut-niveau (par rapport à l'assembleur). Mais il fallait convaincre les programmeurs de l'époque qu'un compilateur pouvait générer du code machine quasiment aussi rapide que celui écrit par un être humain. Beaucoup n'y croyaient pas.

          L'équipe de Backus était consciente de cela et a travaillé énormément pour que le premier compilateur optimise le code au maximum dans quasiment tous les cas de figure. Ils savaient que sinon il y aurait rejet.

      • [^] # Re: Mon premier langage

        Posté par  . Évalué à 5. Dernière modification le 09 février 2022 à 19:17.

        École effectivement à la pointe du progrès, École polytechnique de Lausanne (EPUL) devenue École polytechnique fédérale de Lausanne (EPFL). Dans le top 30 mondial de pratiquement tous les classements.

        C'était un FORTRAN encore rudimentaire, tout ce qu'il fallait pour les calculs, mais, c'est un exemple, impossible d'imprimer des titres (le compilateur ne connaissait pas les chaînes de caractères), une instruction permettait d'arrêter le programme, on tapait le titre à la machine à écrire de la 1620 (unique moyen de sortie écrit) et un appui sur la touche "RUN" (c'est encore très net dans ma mémoire), le programme repartait.

        C'était assez laborieux, on tapait le programme sur la machine à écrire de la 1620, ce qui permettait de perforer un ruban. Ensuite on introduisait le compilateur sous forme de ruban. La compilation se faisait en deux passes du code source (toujours sous forme de ruban), puis le compilateur réclamait le rubans contenant les subroutines et enfin, il crachait le programme objet sous forme de ruban. Le tout, prenait au minimum une demi-heure. Inutile de dire que l'on vérifiait soigneusement le source avant de compiler.
        C'était la bagarre pour réserver des demi-heures machine.

        Plus tard, la 1620 s'est vue agrémentée d'une imprimante, puis de disques d'une capacité phénoménale de 2 Mcaractères ASCII, temps d'accès moyen 250 ms.

        • [^] # Re: Mon premier langage

          Posté par  (site web personnel, Mastodon) . Évalué à 4.

          Rétrospectivement, ça doit être assez impressionnant de se dire qu'on a démarré sur ce genre de machines très encombrantes et qu'on travaille maintenant sur un portable léger.

          « Tak ne veut pas quʼon pense à lui, il veut quʼon pense », Terry Pratchett, Déraillé.

          • [^] # Re: Mon premier langage

            Posté par  . Évalué à 3.

            Je ne suis pas très portable.
            En revanche, j'ai sur mon bureau, sous forme d'un parallélépipède d'environ 25 dm², un petit monstre animé par un Intel Core I7-11700K, 32 GB de mémoire, 1 SSD 240 GB monté en rack amovible (contient Linux, en changeant de SSD, je passe en 1 min. d'une distribution à une autre), 1 SSD 1TB.

            Totalement disproportionné par rapport à mes besoins réels, mais il n'est pas interdit de se faire plaisir.

        • [^] # Re: Mon premier langage

          Posté par  . Évalué à 2.

          Pour ceux que cela intéresse, à titre historique, je viens de me rendre compte qu'il y a un excellent article sur l'IBM 1620 sur le wikipédia en anglais. Celui en français est trop sommaire.

    • [^] # Re: Mon premier langage

      Posté par  (site web personnel) . Évalué à 7.

      J'ai commencé à écrire mes premières lignes de code en Fortran à l'automne 1962 …

      Je suis un petit peu plus jeune et mon premier programme, c'était en 1970 quand je préparais ma thèse de doctorat à la SEREB. La machine, un IBM 360 était la plus grosse machine de tout le sud-ouest, elle avait une mémoire de 32K octets !
      Le Fortran de l'époque était assez rustique, il comprenait tellement de GOTO qu'il illustrait parfaitement la programmation spaghetti tant décriée par la suite. On utilisait des cartes perforées de 80 colonnes et le résultat sortait sur une imprimante à chaîne.

      En 1975, je me suis régalé avec le HPL sur le calculateur HP9825 et je suis retourné au Fortran en 1979 sur HP1000 pour faire , tenez vous bien, un programme de gestion de données techniques.
      Pour écrire "Salut!", il fallait utiliser la notation hollerith : "2HSA,2HLU,2HT!" pour que 2 octets rentrent dans un mot de 16 bits…

      En 1990, il a fallu réécrire le programme de gestion pour fonctionner sur un HP9000, HP-UX et toujours en Fortran. Mais c'était plus confortable, le Fortran 7X de HP gérait les chaînes de caractères !

      J'ai appris que le programme de gestion était toujours utilisé.

  • # LFortran vs Flang

    Posté par  . Évalué à 5.

    Bonjour,

    J'ai du mal à comprendre la différence entre LFortran et Flang, tous deux libres basés sur LLVM. LFortran semble plus avancé, mais Flang est dans les dépôts officiel, si je comprends bien.

    • [^] # Re: LFortran vs Flang

      Posté par  (site web personnel) . Évalué à 6.

      Les trois nouveaux compilateurs en développement ces dernières années utilisent LLVM : Flang, Intel ifx, LFortran.

      LFortran et Flang sont deux projets parfaitement indépendants :

      • concernant Flang, c'est un projet soutenu par NVidia. Ma compréhension est que pour l'instant Flang est capable de parser un code Fortran, de le manipuler et de générer un autre code Fortran générique puis de l'envoyer à un compilateur (GFortran par défaut). C'est ce qu'on peut constater quand on l'essaie, il appelle in fine GFortran. Donc le code machine n'est pas encore généré par LLVM. Enfin, attention aux confusions possibles : il y a l'ancien Flang, et le nouveau Flang qui s'est appelé un temps f18 avant d'être rebaptisé Flang comme l'ancien… :-(

      • LFortran est initialement un projet personnel d'Ondřej Čertík, du Los Alamos National Laboratory. D'après ce que je comprends, il est effectivement plus avancé puisqu'il est non seulement capable de parser et analyser le code Fortran mais qu'il dispose déjà de trois backends : génération de binaires via LLVM ou directement en code x86, et génération d'un code C++ équivalent. Il est également architecturé pour être utilisable en tant que librairie. Enfin, une fonctionnalité majeure est qu'il peut être utilisé dans des notebooks Jupyter, ce qui va ouvrir pas mal de possibilités.

      Dans les deux cas, il y a aussi bien sûr la problématique de faciliter l'utilisation du calcul parallèle sur des architectures très diverses…

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.