Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
fortran [Le 10/05/2021, 18:18] vmagnin [GFortran] gfortran et OpenMP |
fortran [Le 03/09/2021, 15:09] vmagnin [Fortran] Ajouts de Fortran 2018 |
||
---|---|---|---|
Ligne 3: | Ligne 3: | ||
====== Fortran ====== | ====== Fortran ====== | ||
- | Fortran est un langage de programmation normalisé destiné au calcul scientifique. Il intègre la programmation orientée objet et l'interfaçage avec le langage C depuis Fortran 2003 et la programmation parallèle //(coarrays)// depuis Fortran 2008. La dernière norme est Fortran 2018 et la suivante est en préparation (nommée 202X pour l'instant). | + | Fortran est un langage de programmation normalisé destiné au calcul scientifique. Il intègre la programmation orientée objet et l'interfaçage avec le langage C depuis Fortran 2003 et la programmation parallèle //(coarrays)// depuis Fortran 2008. La norme actuelle est Fortran 2018 : elle améliore en particulier l'interfaçage entre C et Fortran et ajoute de nouveaux concepts pour la programmation parallèle //(teams, events, collective subroutines).// La prochaine norme est prévue pour 2023 (nommée Fortran 202X pour l'instant). |
===== Compilateurs ===== | ===== Compilateurs ===== | ||
Le langage Fortran dispose de [[https://fortran-lang.org/compilers/|nombreux compilateurs]], en particulier : | Le langage Fortran dispose de [[https://fortran-lang.org/compilers/|nombreux compilateurs]], en particulier : | ||
- | * Le compilateur libre GNU Fortran (GFortran). Le compilateur [[http://www.g95.org/|g95]] n'est plus développé depuis 2013. | + | * Le compilateur libre GNU Fortran (GFortran). |
* Le propriétaire Intel Fortran Compiler (ifort), et son successeur ifx basé sur LLVM (actuellement en version beta), téléchargeables gratuitement pour tous les développeurs depuis début 2021. | * Le propriétaire Intel Fortran Compiler (ifort), et son successeur ifx basé sur LLVM (actuellement en version beta), téléchargeables gratuitement pour tous les développeurs depuis début 2021. | ||
* Le compilateur commercial [[http://www.pgroup.com/resources/docs.htm| PGI]] édité par [[wp>The_Portland_Group]], qui devrait être remplacé prochainement par le compilateur [[https://github.com/flang-compiler/flang|Flang]] intégré à LLVM. | * Le compilateur commercial [[http://www.pgroup.com/resources/docs.htm| PGI]] édité par [[wp>The_Portland_Group]], qui devrait être remplacé prochainement par le compilateur [[https://github.com/flang-compiler/flang|Flang]] intégré à LLVM. | ||
- | gfortran est très utilisé par les scientifiques, bien que le compilateur Intel ifort puisse être plus performant sur certains problèmes ([[https://polyhedron.com/?page_id=175|voir une comparaison des différents compilateurs ici)]]. | + | gfortran est très utilisé par les scientifiques, bien que le compilateur Intel ifort puisse être plus performant sur certains problèmes ([[https://polyhedron.com/?page_id=175|voir une comparaison des différents compilateurs ici)]]. Mais plutôt que de se fier aux benchmarks, qui se concentrent sur des problèmes spécifiques, il vaut mieux faire le test sur vos programmes. Il est de toute façon toujours conseillé de compiler ses programmes avec plusieurs compilateurs afin d'obtenir un code plus robuste : un compilateur peut afficher des messages de diagnostique différents, et à l'exécution certains bogues subtiles peuvent se révéler avec un compilateur mais pas un autre. |
Un autre compilateur prometteur est actuellement en développement : [[https://lfortran.org/|LFortran]], qui permettra de travailler en Fortran de façon interactive, à l'aide par exemple de Jupyter. | Un autre compilateur prometteur est actuellement en développement : [[https://lfortran.org/|LFortran]], qui permettra de travailler en Fortran de façon interactive, à l'aide par exemple de Jupyter. | ||
Ligne 119: | Ligne 119: | ||
<code>man ifort</code> | <code>man ifort</code> | ||
+ | |||
+ | L'ajout d'informations de débogage se fait avec l'option ''-g''. | ||
Exemple de commande avec optimisation poussée ''-O3'' (l'exécutable est nommé par défaut ''a.out'') : | Exemple de commande avec optimisation poussée ''-O3'' (l'exécutable est nommé par défaut ''a.out'') : | ||
Ligne 131: | Ligne 133: | ||
./a.out | ./a.out | ||
</code> | </code> | ||
+ | |||
+ | Parmi les options d'optimisation, on citera également ''-Ofast'', ainsi que ''-xHost'' pour choisir le jeu d'instructions le plus élevé disponible sur le processeur de la machine. | ||
Pour utiliser OpenMP, l'option de compilation est ''-qopenmp''. | Pour utiliser OpenMP, l'option de compilation est ''-qopenmp''. | ||
Ligne 141: | Ligne 145: | ||
export FOR_COARRAY_NUM_IMAGES=4 | export FOR_COARRAY_NUM_IMAGES=4 | ||
</code> | </code> | ||
+ | ou utiliser l'option de compilation ''-coarray-num-images=4'' pour les cotableaux. | ||
===== Editeurs et Environnement de Développement Intégré ===== | ===== Editeurs et Environnement de Développement Intégré ===== | ||
Ligne 180: | Ligne 185: | ||
===== Gestionnaire de paquets Fortran fpm ===== | ===== Gestionnaire de paquets Fortran fpm ===== | ||
- | Depuis 2020, [[https://github.com/fortran-lang/fpm|fpm (Fortran Package Manager)]] est en développement. Bien que disponible en version 0.2.0 alpha au 30 avril 2021, il est déjà pleinement utilisable pour des projets simples. Vous pouvez l'installer en ligne de commandes à l'aide de git : | + | Depuis 2020, [[https://github.com/fortran-lang/fpm|fpm (Fortran Package Manager)]] est en développement. Bien que disponible en version 0.4.0 alpha au 30 août 2021, il est déjà pleinement utilisable pour des projets simples. Vous pouvez l'installer en ligne de commandes à l'aide de git : |
<code> | <code> | ||
git clone https://github.com/fortran-lang/fpm.git | git clone https://github.com/fortran-lang/fpm.git | ||
Ligne 202: | Ligne 207: | ||
===== Bibliothèques graphiques ===== | ===== Bibliothèques graphiques ===== | ||
- | Fortran ne dispose pas d'instructions graphiques. La visualisation des résultats se fait soit avec des programmes externes comme [[gnuplot]] ou [[apt>paraview|ParaView]], soit avec des bibliothèques graphiques, comme par exemple : | + | Fortran ne dispose pas d'instructions graphiques. La visualisation des résultats peut se faire avec des programmes externes comme [[gnuplot]] ou [[apt>paraview|ParaView]], ou des bibliothèques graphiques, comme par exemple : |
* [[apt>libplot-dev libplplotfortran0|PLplot]], | * [[apt>libplot-dev libplplotfortran0|PLplot]], | ||
* [[https://github.com/vmagnin/gtk-fortran/wiki|gtk-fortran]] qui permet de créer des interfaces GTK en Fortran, | * [[https://github.com/vmagnin/gtk-fortran/wiki|gtk-fortran]] qui permet de créer des interfaces GTK en Fortran, | ||
* [[https://github.com/kookma/ogpf|ogpf]] qui permet d'appeler simplement gnuplot depuis un programme en Fortran, grâce à son interface orientée objet. Il peut être installé en tant que paquet fpm. | * [[https://github.com/kookma/ogpf|ogpf]] qui permet d'appeler simplement gnuplot depuis un programme en Fortran, grâce à son interface orientée objet. Il peut être installé en tant que paquet fpm. | ||
+ | Un programme Fortran peut également générer facilement des fichiers graphiques au format [[https://fr.wikipedia.org/wiki/Portable_pixmap|Portable pixmap (PPM)]] (voir cet [[https://github.com/certik/fortran-utils/blob/master/src/ppm.f90|exemple]]). | ||
===== Liens ===== | ===== Liens ===== | ||
* La page française [[wpfr>Fortran|Fortran]] fournit de nombreuses informations, liens et références bibliographiques concernant le Fortran. | * La page française [[wpfr>Fortran|Fortran]] fournit de nombreuses informations, liens et références bibliographiques concernant le Fortran. |