Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
fortran [Le 10/05/2021, 18:18]
vmagnin [GFortran] gfortran et OpenMP
fortran [Le 21/06/2022, 09:28]
vmagnin fpm, mise à jour
Ligne 1: Ligne 1:
 +
 {{tag>​programmation calcul_numérique compilation IDE}} {{tag>​programmation calcul_numérique compilation IDE}}
  
 ====== 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 120:
  
 <​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 134:
 ./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 146:
 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 153: Ligne 159:
   * [[:​netbeans]] (cf [[http://​netbeans.org/​community/​releases/​67/​cpp-setup-instructions.html]])   * [[:​netbeans]] (cf [[http://​netbeans.org/​community/​releases/​67/​cpp-setup-instructions.html]])
  
 +[[apt>​findent|findent]] est un utilitaire en ligne de commandes permettant d'​indenter automatiquement un code Fortran et de transformer un code du format fixe vers le format libre du Fortran moderne.
  
 ===== Débogueurs et outils d'​analyse ===== ===== Débogueurs et outils d'​analyse =====
  
-On peut utiliser [[:gdb]], le débogueur GNU ou [[http://​en.wikipedia.org/​wiki/​Intel_Debugger|idb]] //(Intel Debugger).//​+On peut utiliser [[:gdb]], le débogueur GNU ou [[https://​en.wikipedia.org/​wiki/​Intel_Debugger|idb]] //(Intel Debugger).//​
  
 Avec gfortran, lors de la compilation on utilisera l'​option ''​-g''​ (mode debug) : Avec gfortran, lors de la compilation on utilisera l'​option ''​-g''​ (mode debug) :
Ligne 180: Ligne 187:
 ===== 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, Fortran dispose du gestionnaire de paquets et système de construction ​[[https://​github.com/​fortran-lang/​fpm|fpm (Fortran Package Manager)]]. 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 199: Ligne 206:
  
 fpm gère les dépendances,​ qu'il peut télécharger automatiquement depuis GitHub. fpm gère les dépendances,​ qu'il peut télécharger automatiquement depuis GitHub.
 +
 +La [[https://​fpm.fortran-lang.org/​fr/​index.html|documentation de fpm]] propose des tutoriels, des guides pratiques //​(how-to),//​ des documents, un manuel de référence et des actualités. Cette documentation est disponible en français, ainsi que dans plusieurs autres langues (allemand, espagnol, néerlandais...)
  
 ===== 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 ​et peut être utilisé comme dépendance 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.   * [[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.
-  * [[https://​fortran-lang.org/​|Fortran-lang.org]] se veut depuis 2020 la page d'​accueil du langage Fortran. La communauté développe en particulier le gestionnaire de paquets Fortran fpm, une bibliothèque standard stdlib et le compilateur interactif LFortran. Les utilisateurs de Fortran se retrouve dans le [[https://​fortran-lang.discourse.group/​|Discourse Fortran]].+  * [[https://​fortran-lang.org/​|Fortran-lang.org]] se veut depuis 2020 la page d'​accueil du langage Fortran. La communauté développe en particulier le gestionnaire de paquets Fortran fpm, une bibliothèque standard stdlib et le compilateur interactif LFortran. Les utilisateurs de Fortran se retrouve dans le [[https://​fortran-lang.discourse.group/​|Discourse Fortran]]. Un article académique [[https://​arxiv.org/​abs/​2203.15110|"​The State of Fortran"​]] a été publié en 2022.
   * [[https://​groups.google.com/​g/​comp.lang.fortran|comp.lang.fortran]] est un groupe de discussion Usenet actif depuis 1983.    * [[https://​groups.google.com/​g/​comp.lang.fortran|comp.lang.fortran]] est un groupe de discussion Usenet actif depuis 1983. 
-  * [[http://​fortranwiki.org/​fortran/​show/​HomePage|Fortran Wiki]] offre en anglais de nombreuses ressources proposées par les développeurs Fortran.+  * [[https://​fortranwiki.org/​fortran/​show/​HomePage|Fortran Wiki]] offre en anglais de nombreuses ressources proposées par les développeurs Fortran.
  
  
  
  • fortran.txt
  • Dernière modification: Le 21/06/2022, 09:28
  • par vmagnin