- LLVM inclut le compilateur Fortran Flang depuis LLVM 11 en 2020
- Au départ, le nom de l’exécutable était
flang-new et non flang
- Dans LLVM 20,
flang-new a été renommé en flang, reconnaissant ainsi la maturité de Flang
- Après des années de développement, Flang s’est imposé comme le compilateur Fortran officiel
L’importance de Fortran
- Fortran est né dans les années 1950 comme langage de traduction de formules (Formula Translation)
- Il est largement utilisé dans le calcul scientifique (modélisation météorologique, dynamique des fluides, chimie computationnelle, etc.)
- L’écosystème Fortran s’est récemment redynamisé
- avec l’apparition de fpm, du package manager Fortran, d’une bibliothèque standard non officielle, de LFortran, etc.
- Plus de 80 % du code exécuté sur le supercalculateur ARCHER2 est écrit en Fortran
Pourquoi un nouveau compilateur Fortran est nécessaire
- Compilateurs Fortran existants :
- compilateur Intel Fortran, compilateurs NVIDIA HPC, etc.
- compilateur open source : GFortran
- Premiers partenaires du projet Flang : des laboratoires nationaux américains et NVIDIA
- Objectifs :
- fournir une licence open source adaptée à un usage commercial
- construire une communauté active de développeurs de compilateurs Fortran
- soutenir le développement Fortran avec des outils basés sur LLVM
- offrir une plateforme d’expérimentation pour proposer de nouveaux standards du langage
- La présence de plusieurs implémentations permet de réduire les problèmes de compatibilité et d’encourager les améliorations
Chronologie de Flang
- 1989 : fondation du Portland Group (PGI)
- 2015 : lancement du projet Classic Flang (mené par NVIDIA et des laboratoires nationaux américains)
- 2017 : première version de Classic Flang et passage en open source
- 2018 : début de la réécriture du front-end de Classic Flang en F18
- 2019 : intégration de F18 au projet LLVM
- 2020 : introduction du nouveau pilote
flang-new
- 2022 : NVIDIA apporte FIR (Fortran IR) à LLVM
- 2024 :
flang-new est renommé en flang
- 2025 : inclusion de l’exécutable
flang dans LLVM 20.1
Le processus de changement de nom de Flang
- Le changement de nom de Flang a été discuté à plusieurs reprises
- Critères de décision :
- résolution des principaux problèmes de fonctionnalités et de performances
- affichage de messages d’erreur clairs pour les fonctionnalités du langage inachevées
- nécessité d’obtenir de bons résultats face aux autres compilateurs Fortran en comparaison de performances
- validation de la stabilité au moyen d’une suite de tests étendue
- Conseil de Chris Lattner, cofondateur de LLVM :
> « Il faut résoudre le conflit de noms entre l’ancien Flang et le nouveau Flang »
- En octobre 2024, après un consensus de la communauté, le renommage
flang-new → flang a été finalisé
Le processus de compilation de Flang et l’introduction de MLIR
MLIR (Multi-Level Intermediate Representation)
- Avec LLVM IR seul, il est difficile de préserver les informations des langages de haut niveau
- MLIR permet de conserver les caractéristiques des langages de haut niveau et de les optimiser
- Flang construit FIR (Fortran IR) sur la base de MLIR
- FIR préserve des informations propres à Fortran, comme les tableaux et les types
HLFIR (High Level FIR)
- Une représentation de niveau supérieur au sein de FIR
- Prise en charge de l’optimisation des tableaux et de la syntaxe Fortran avancée
Étapes de compilation
- Code source Fortran
- Génération de MLIR (HLFIR + FIR)
- Transformation de FIR
- Transformation vers LLVM IR
- Machine IR → assembleur → exécutable
La prise en charge d’OpenMP dans Flang
- OpenMP est une API standard pour la programmation parallèle
- Flang ajoute à MLIR un dialect dédié à OpenMP
- Conversion vers LLVM IR via
OpenMPIRBuilder
- L’implémentation OpenMP de Flang est structurellement similaire à celle de Clang
La conception du pilote de Flang
flang → pilote convivial pour l’utilisateur
flang -fc1 → pilote de front-end orienté développeur
- Implémentation basée sur la bibliothèque
clangDriver de Clang
- Possibilité de prendre en charge diverses cibles et divers outils
Contributions et réactions autour de Flang
- Arm : développement d’une toolchain HPC basée sur Flang
- Fujitsu : contribution à l’amélioration de Flang via une suite de tests HPC
- Linaro : correction de défauts grâce à la suite de tests de Fujitsu
- SciPy : l’adoption de Flang a permis de résoudre des problèmes de support sous Windows
- Barcelona Supercomputing Center : prise en charge de la vectorisation RISC-V et d’un modèle de parallélisme interne
- Chris Lattner :
> « Flang est le symbole du modèle de collaboration qu’offre le projet LLVM »
- AMD : développe un compilateur Fortran de nouvelle génération basé sur Flang
Comment contribuer à Flang
- Flang est un projet open source en évolution continue
- Il est possible de l’utiliser directement et de fournir des retours
- Il existe différentes manières de contribuer : code, documentation, etc.
- Suit le processus de contribution standard de LLVM
Aucun commentaire pour le moment.