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 01/05/2021, 12:12]
vmagnin [Débogueurs et outils d'analyse] ajout -fcheck=all
fortran [Le 10/05/2021, 18:18] (Version actuelle)
vmagnin [GFortran] gfortran et OpenMP
Ligne 21: Ligne 21:
  
 Mais le dépôt ''​universe''​ propose plusieurs autres versions : par exemple, dans Ubuntu 20.10 le dépôt ''​main''​ propose gfortran 10.2 et le dépôt ''​universe''​ les versions 9.3, 8.4 et 7.5. Or les versions avec un numéro de version mineure plus élevé sont déboguées depuis plus longtemps. En particulier,​ pour des calculs très longs, la dernière version n'est pas toujours la plus rapide. Il est donc intéressant d'​installer plusieurs versions et de les tester sur votre problème. ​ Mais le dépôt ''​universe''​ propose plusieurs autres versions : par exemple, dans Ubuntu 20.10 le dépôt ''​main''​ propose gfortran 10.2 et le dépôt ''​universe''​ les versions 9.3, 8.4 et 7.5. Or les versions avec un numéro de version mineure plus élevé sont déboguées depuis plus longtemps. En particulier,​ pour des calculs très longs, la dernière version n'est pas toujours la plus rapide. Il est donc intéressant d'​installer plusieurs versions et de les tester sur votre problème. ​
 +
 +=== Options de diagnostic ===
 +
 +  * ''​-std''​ permet de spécifier la norme à respecter, par exemple ''​-std=f2008''​ pour Fortran 2008. On peut lui associer l'​option ''​-pedantic''​ pour être encore plus strict.
 +  * ''​-Wall -Wextra''​ permettront d'​obtenir un maximum d'​avertissements lors de la compilation.
 +
 +=== Options d'​optimisation ===
  
 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 34: Ligne 41:
   * ''​-Os''​ : permet de minimiser la taille de l'​exécutable. Cela peut en particulier être intéressant si l'​exécutable occupe en mémoire une place similaire à celle des caches du processeur, afin de réduire les allers-retours coûteux entre cache et mémoire vive.   * ''​-Os''​ : permet de minimiser la taille de l'​exécutable. Cela peut en particulier être intéressant si l'​exécutable occupe en mémoire une place similaire à celle des caches du processeur, afin de réduire les allers-retours coûteux entre cache et mémoire vive.
  
 +L'​option ''​-static-libgfortran''​ permet d'​utiliser [[https://​gcc.gnu.org/​onlinedocs/​gfortran/​Link-Options.html|la version statique de la librairie gfortran]], plutôt que la version partagée : cela peut permettre dans certains cas (à tester) de gagner un peu en vitesse (quelques pourcents) au détriment de la taille de l'​exécutable,​ qui va embarquer les fonctions de la librairie que vous utilisez. Cette option est compatible avec OpenMP et les coarrays, contrairement à l'​option ''​-static''​.
 +
 +Pour faire du calcul parallèle avec OpenMP, l'​option de compilation est ''​-fopenmp''​. Parmi les méthodes utilisables pour régler le nombre de //​threads,//​ on peut alors utiliser la variable d'​environnement (exemple avec ici 4 threads) :
 +<​code>​
 +export OMP_NUM_THREADS=4
 +</​code>​
  
 === OpenCoarrays === === OpenCoarrays ===
  
-Contrairement à ifort, gfortran ne gère pas encore les cotableaux de façon native. Si vous voulez les utiliser vous aurez besoin d'​installer [[http://​www.opencoarrays.org/​|OpenCoarrays]], par exemple si vous voulez ​l'​installer dans un répertoire Logiciels de votre compte :+Contrairement à ifort, gfortran ne gère pas encore les cotableaux de façon native. Si vous voulez les utiliser vous aurez besoin d'​installer [[http://​www.opencoarrays.org/​|OpenCoarrays]] ​
 +<​code>​ 
 +sudo apt install libcoarrays-dev libcoarrays-mpich-dev 
 +</​code>​ 
 + 
 +Vous pouvez également ​l'​installer ​depuis les sources, par exemple ​dans un répertoire Logiciels de votre compte :
 <​code>​ <​code>​
 cd Logiciels cd Logiciels
Ligne 44: Ligne 62:
 ./​install.sh ./​install.sh
 </​code>​ </​code>​
-S'il vous propose d'​installer la librairie ​MPI [[https://​www.mpich.org/​|mpich]], acceptez. Sinon, OpenCoarrays peut également fonctionner avec [[https://​www.open-mpi.org/​|OpenMPI]].+S'il vous propose d'​installer la librairie [[https://​www.mpich.org/​|MPICH]], acceptez. Sinon, OpenCoarrays peut également fonctionner avec [[https://​www.open-mpi.org/​|OpenMPI]].
  
 Définissez ensuite les variables d'​environnement : Définissez ensuite les variables d'​environnement :
Ligne 76: Ligne 94:
 rm GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB rm GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
 sudo add-apt-repository "deb https://​apt.repos.intel.com/​oneapi all main" sudo add-apt-repository "deb https://​apt.repos.intel.com/​oneapi all main"
 +sudo apt update
 sudo apt install intel-oneapi-compiler-fortran sudo apt install intel-oneapi-compiler-fortran
 source /​opt/​intel/​oneapi/​setvars.sh source /​opt/​intel/​oneapi/​setvars.sh
Ligne 111: Ligne 130:
 ifx -O3 test.f90 ifx -O3 test.f90
 ./a.out ./a.out
 +</​code>​
 +
 +Pour utiliser OpenMP, l'​option de compilation est ''​-qopenmp''​.
 +
 +ifort supporte nativement la programmation parallèle à l'aide des cotableaux : il suffit d'​utiliser l'​option de compilation ''​-coarray''​.
 +
 +Parmi les méthodes utilisables pour régler le nombre de //​threads///​images,​ on peut alors utiliser ces variables d'​environnement (exemple avec ici 4 //​threads//​) :
 +<​code>​
 +export OMP_NUM_THREADS=4
 +export FOR_COARRAY_NUM_IMAGES=4
 </​code>​ </​code>​
 ===== Editeurs et Environnement de Développement Intégré ===== ===== Editeurs et Environnement de Développement Intégré =====
  • fortran.1619863952.txt.gz
  • Dernière modification: Le 01/05/2021, 12:12
  • par vmagnin