URL:     https://linuxfr.org/news/des-nouvelles-de-fortran-n-3-fevrier-2022
Title:   Des nouvelles de Fortran n°3 - Février 2022
Authors: vmagnin
        E3Ms6vyX, Ysabeau et Benoît Sibaud
Date:    2022-02-02T15:52:21+01:00
License: CC By-SA
Tags:    fortran
Score:   3


Après deux journaux consacrés au monde du Fortran, publiés en [mai 2020](https://linuxfr.org/users/vmagnin/journaux/des-nouvelles-de-fortran) et [mai 2021](https://linuxfr.org/users/vmagnin/journaux/encore-des-nouvelles-de-fortran), 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](https://fortran-lang.org/newsletter/2021/12/29/Fortran-lang-2021-in-review/) de ses activités en 2021. Mais nous aborderons bien sûr l’actualité Fortran de façon plus large.

----

[Fortran-lang.org, page d'accueil du Fortran depuis 2020](https://fortran-lang.org/)
[Tutoriels Fortran](https://fortran-lang.org/learn/)
[Liste des compilateurs Fortran actuels](https://fortran-lang.org/compilers/)
[Une liste de programmes et bibliothèques Fortran](https://fortran-lang.org/packages/)
[Le gestionnaire de paquets Fortran fpm](https://fpm.fortran-lang.org/fr/index.html)
[Les bulletins mensuels de la communauté Fortran-lang](https://fortran-lang.org/news/)
[Le forum Fortran Discourse](https://fortran-lang.discourse.group/)
[La communauté Fortran-lang sur Twitter](https://twitter.com/fortranlang)
[Les projets de la communauté Fortran-lang sur GitHub](https://github.com/fortran-lang)
[Quickstart Fortran, pour commencer sous Windows](https://github.com/LKedward/quickstart-fortran)
[Fortran sur le Wiki ubuntu-fr](https://doc.ubuntu-fr.org/fortran)
[Page Fortran sur Wikipédia](https://fr.wikipedia.org/wiki/Fortran)
[Vidéos des conférences FortranCon](https://www.youtube.com/channel/UCmrUfKC3D2ZMHLRyQANeP_Q/videos)
[US Fortran Standards Committee (J3)](https://j3-fortran.org/)
[Norme Fortran 2018 (PDF du comité J3)](https://www.j3-fortran.org/doc/year/18/18-007r1.pdf)

----

# Sur le front des compilateurs



* Le compilateur commercial [Fortran NAG®](https://www.nag.com/news/nag-fortran-compiler-full-fortran-2008-and-fortran-2018-coarray-support) 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](https://docs.nvidia.com/hpc-sdk/hpc-sdk-release-notes/index.html), 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é](https://docs.nvidia.com/hpc-sdk/compilers/hpc-compilers-user-guide/index.html#acc-dir-openacc-sum), ainsi que [OpenMP 5.0](https://docs.nvidia.com/hpc-sdk/compilers/hpc-compilers-user-guide/index.html#openmp-subset). Le support des dernières versions de [CUDA](https://en.wikipedia.org/wiki/CUDA) en fait le compilateur Fortran de choix pour l’utilisation des [DPU](https://www.nvidia.com/fr-fr/networking/products/data-processing-unit/) 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](https://www.intel.com/content/www/us/en/developer/articles/technical/fortran-language-and-openmp-features-in-ifx.html)). 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](https://www.intel.com/content/www/us/en/developer/articles/guide/porting-guide-for-ifort-to-ifx.html) 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](https://github.com/llvm/llvm-project/tree/main/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](https://lfortran.org/) 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](https://www.sympy.org/) et [SymEngine](https://github.com/symengine/symengine).



* GFortran, compilateur faisant partie de GCC, est actuellement en [version 11.2](https://www.gnu.org/software/gcc/gcc-11/changes.html). 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](https://www.gnu.org/software/gcc/gcc-12/changes.html), 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](https://godbolt.org/), 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)](https://github.com/fortran-lang/fpm) est actuellement disponible en [version 0.5.0](https://fpm.fortran-lang.org/fr/news/2021/11-21-fpm-version-0.5.0.html), 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`](https://github.com/brocolis/fpm-search) permet ainsi de faire des recherches dans le catalogue des paquets fpm. Et [`fpm man`](https://github.com/urbanjost/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](https://fpm.fortran-lang.org/fr/index.html). 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](https://diataxis.fr/) 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](https://github.com/fortran-lang/stdlib/releases/tag/v0.1.0) 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_](https://awvwgk.github.io/stdlib-docs/en/how-to/index.html) expliquant comment compiler la bibliothèque sur votre système.



## Bibliothèques adoptées par la communauté



[fftpack](https://github.com/fortran-lang/fftpack) est une bibliothèque de transformées de Fourier rapides réelles et complexes. Basée sur la bibliothèque classique [FFTPACK](https://www.netlib.org/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](https://github.com/fortran-lang/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](https://github.com/fortran-lang/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](https://fortran-lang.org/learn/best_practices), qui a été rapatrié du site de référence [fortran90.org](https://www.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](https://fortran-lang.org/pr/347/learn/intrinsics). 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](https://github.com/LKedward/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](https://github.com/Fortran-FOSS-Programmers/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](https://github.com/vmagnin/gtk-fortran/wiki) 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](https://github.com/vmagnin/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](https://summerofcode.withgoogle.com/archive/2021/organizations/6542461173760000) 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](https://summerofcode.withgoogle.com/) mais également à la [Google Season of Docs 2022](https://developers.google.com/season-of-docs/) afin d’améliorer la documentation des projets.



## FortranCon 2021



Seconde édition, la conférence internationale [FortranCon 2021](https://tcevents.chem.uzh.ch/event/14/contributions/), 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](https://www.youtube.com/channel/UCmrUfKC3D2ZMHLRyQANeP_Q/videos). 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](https://packaging-con.org/talks.html), 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](https://www.youtube.com/watch?v=YG8zEM1lAVM&list=PLl386dCR5QGQu7XhFaVTwEGoD7fLtnGQ7&index=37).



# Littérature



## Livres



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



* Robert Robey et Yuliana Zamora, [*Parallel and High Performance Computing*](https://www.manning.com/books/parallel-and-high-performance-computing), Manning, mai 2021, 704 pages, ISBN 978-1617296468.



* M.S. Ramkarthik et Payal D. Solanki, [*Numerical Recipes in Quantum Information Theory and Quantum Computing: An Adventure in FORTRAN 90*](https://www.routledge.com/Numerical-Recipes-in-Quantum-Information-Theory-and-Quantum-Computing-An/Ramkarthik-Solanki/p/book/9780367759285), CRC Press, septembre 2021, 424 Pages, ISBN 978-0367759285.



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](https://arxiv.org/abs/2109.07382).



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.](https://www.predsci.com/portal/home.php) ont mis en ligne une prépublication intitulée « Can Fortran's 'do concurrent' replace directives for accelerated computing? » sur le site [arXiv](https://arxiv.org/abs/2110.10151) qui complète un [billet](https://developer.nvidia.com/blog/accelerating-fortran-do-concurrent-with-gpus-and-the-nvidia-hpc-sdk/) 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)_](https://sc21.supercomputing.org/proceedings/workshops/workshop_pages/ws_waccpd102.html) 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](https://releases.llvm.org/12.0.1/tools/flang/docs/DoConcurrent.html), 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](https://dl.acm.org/newsletter/sigplan-fortran), 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*](https://oxford.universitypressscholarship.com/view/10.1093/oso/9780198811893.001.0001/oso-9780198811893) 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](https://j3-fortran.org/doc/year/22/22-007.pdf) 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é.