OpenACC Tutorial - Profiling/fr: Difference between revisions

Updating to match new version of source page
No edit summary
(Updating to match new version of source page)
Line 9: Line 9:
* savoir concentrer vos efforts et réécrire les routines qui exigent beaucoup de temps
* savoir concentrer vos efforts et réécrire les routines qui exigent beaucoup de temps
}}
}}
<div class="mw-translate-fuzzy">
== Profiler du code  ==
== Profiler du code  ==
Pourquoi auriez-vous besoin de profiler du code? Parce que c'est la seule façon de comprendre
Pourquoi auriez-vous besoin de profiler du code? Parce que c'est la seule façon de comprendre
Line 14: Line 15:
* comprendre la performance du code,
* comprendre la performance du code,
* savoir comment mieux employer votre temps.
* savoir comment mieux employer votre temps.
</div>


<div class="mw-translate-fuzzy">
Pourquoi est-ce important de connaitre les points critiques dans le code?  
Pourquoi est-ce important de connaitre les points critiques dans le code?  
D'après la loi d'Amdahl, paralléliser les routines qui exigent le plus de temps d'exécution (les points critiques) produit le plus d'impact.
D'après la loi d'Amdahl, paralléliser les routines qui exigent le plus de temps d'exécution (les points critiques) produit le plus d'impact.
</div>


<div class="mw-translate-fuzzy">
== Préparer le code pour l'exercice ==
== Préparer le code pour l'exercice ==
Pour notre exemple, nous utilisons du code provenant de  [https://github.com/calculquebec/cq-formation-openacc ces dépôts]. Téléchargez les fichiers et utilisez les répertoires ''cpp'' ou ''f90''. Le but de l'exercice est de compiler et lier le code et d'obtenir un exécutable que nous profilerons.
Pour notre exemple, nous utilisons du code provenant de  [https://github.com/calculquebec/cq-formation-openacc ces dépôts]. Téléchargez les fichiers et utilisez les répertoires ''cpp'' ou ''f90''. Le but de l'exercice est de compiler et lier le code et d'obtenir un exécutable que nous profilerons.
</div>
{{Callout
{{Callout
|title=Choix du compilateur
|title=Choix du compilateur
|content=
|content=
En date de mai 2016, relativement peu de compilateurs offraient les fonctionnalités d'OpenACC. Les plus avancés en ce sens sont les compilateurs du [http://www.pgroup.com/ Portland Group] de [http://www.nvidia.com/content/global/global.php NVidia] et ceux de [http://www.cray.com/ Cray]. Pour ce est qui de [https://gcc.gnu.org/wiki/OpenACC GNU], l'implémentation d'OpenACC dans la version 5 était expérimentale et devrait être complète dans la version 6.  
<div class="mw-translate-fuzzy">
En date de mai 2016, relativement peu de compilateurs offraient les fonctionnalités d'OpenACC. Les plus avancés en ce sens sont les compilateurs du [http://www.pgroup.com/ Portland Group] de [http://www.nvidia.com/content/global/global.php NVidia] et ceux de [http://www.cray.com/ Cray]. Pour ce est qui de [https://gcc.gnu.org/wiki/OpenACC GNU], l'implémentation d'OpenACC dans la version 5 était expérimentale et devrait être complète dans la version 6.
</div>
 
As for the [https://gcc.gnu.org/wiki/OpenACC GNU compilers], since GCC version 6, the support for OpenACC 2.x kept improving.
As of July 2022, GCC versions 10, 11 and 12 support OpenACC version 2.6.


Dans ce tutoriel, nous utilisons la version 16.3 des [http://www.pgroup.com/support/download_pgi2016.php?view=current compilateurs du Portland Group] qui sont gratuits pour des fins de recherche universitaire.  
<div class="mw-translate-fuzzy">
Dans ce tutoriel, nous utilisons la version 16.3 des [http://www.pgroup.com/support/download_pgi2016.php?view=current compilateurs du Portland Group] qui sont gratuits pour des fins de recherche universitaire.
</div>
}}
 
{{Command
|module load nvhpc/22.7
|result=
Lmod is automatically replacing "intel/2020.1.217" with "nvhpc/22.7".
 
The following have been reloaded with a version change:
  1) gcccore/.9.3.0 => gcccore/.11.3.0        3) openmpi/4.0.3 => openmpi/4.1.4
  2) libfabric/1.10.1 => libfabric/1.15.1    4) ucx/1.8.0 => ucx/1.12.1
}}
}}


Line 35: Line 59:
}}
}}


<div class="mw-translate-fuzzy">
Une fois l'exécutable créé, nous allons profiler le code.
Une fois l'exécutable créé, nous allons profiler le code.
</div>


{{Callout
{{Callout
|title=Choix du profileur
|title=Choix du profileur
|content=
|content=
<div class="mw-translate-fuzzy">
Dans ce tutoriel, nous utilisons plusieurs des profileurs suivants&nbsp;:  
Dans ce tutoriel, nous utilisons plusieurs des profileurs suivants&nbsp;:  
* PGPROF : outil simple mais puissant pour l'analyse de programmes parallèles écrits avec OpenMP, OpenACC ou [https://fr.wikipedia.org/wiki/Compute_Unified_Device_Architecture CUDA]; rappelons que PGPROF est gratuit pour des fins de recherche universitaire.  
* PGPROF : outil simple mais puissant pour l'analyse de programmes parallèles écrits avec OpenMP, OpenACC ou [https://fr.wikipedia.org/wiki/Compute_Unified_Device_Architecture CUDA]; rappelons que PGPROF est gratuit pour des fins de recherche universitaire.  
* NVVP (NVIDIA Visual Profiler) : outil d'analyse multiplateforme pour des programmes écrits avec OpenACC et CUDA C/C++.
* NVVP (NVIDIA Visual Profiler) : outil d'analyse multiplateforme pour des programmes écrits avec OpenACC et CUDA C/C++.
* NVPROF : version ligne de commande du NVIDIA Visual Profiler.
* NVPROF : version ligne de commande du NVIDIA Visual Profiler.
</div>
}}
}}


=== PGPROF  ===
<div class="mw-translate-fuzzy">
[[File:Pgprof new0.png|thumbnail|300px|Commencer une nouvelle session PGPROF|right  ]]
<br />
<br />
<br />
Ouvrez d'abord une nouvelle session PGPROF.
Localisez ensuite le fichier exécutable du code que vous voulez profiler.
Enfin, sélectionnez les options;  par exemple, pour profiler l'activité du processeur, cochez ''Profile execution of the CPU''.
<br />
<br />
<br />
<br />
 
=== NVVP ===
 
Le NVIDIA Visual Profiler peut être employé avec les applications OpenACC. C'est un outil d'analyse multiplateforme pour les instructions OpenACC et CUDA C/C++.
[[File:Nvvp-pic1.png|thumbnail|300px|Localisez l'exécutable à profiler|left]]
[[File:Nvvp-pic0.png|thumbnail|300px|Profileur NVVP|right  ]]
<br />
<br />
<br />
<br />
<br />
 
<br />
<br />
<br />
<br />
Line 77: Line 82:
=== NVPROF ligne de commande ===
=== NVPROF ligne de commande ===
La version ligne de commande de NVPROF est semblable à GPU prof.
La version ligne de commande de NVPROF est semblable à GPU prof.
</div>
{{Command
|module load cuda/11.7
}}
To profile a pure CPU executable, we need to add the arguments <code>--cpu-profiling on</code> to the command line:
{{Command
{{Command
|nvprof --cpu-profiling on ./cg.x  
|nvprof --cpu-profiling on ./cg.x  
|result=
|result=
...
<Program output >
<Program output >
...
======== CPU profiling result (bottom up):
======== CPU profiling result (bottom up):
84.25% matvec(matrix const &, vector const &, vector const &)
Time(%)      Time  Name
84.25% main
83.54% 90.6757s  matvec(matrix const &, vector const &, vector const &)
9.50% waxpby(double, vector const &, double, vector const &, vector const &)
83.54% 90.6757s  {{!}} main
3.37% dot(vector const &, vector const &)
  7.94% 8.62146s  waxpby(double, vector const &, double, vector const &, vector const &)
2.76% allocate_3d_poisson_matrix(matrix&, int)
  7.94%  8.62146s  {{!}} main
2.76% main
  5.86% 6.36584s  dot(vector const &, vector const &)
0.11% __c_mset8
  5.86%  6.36584s  {{!}} main
0.03% munmap
  2.47% 2.67666s  allocate_3d_poisson_matrix(matrix&, int)
  0.03% free_matrix(matrix&)
  2.47% 2.67666s  {{!}} main
    0.03% main
  0.13% 140.35ms  initialize_vector(vector&, double)
  0.13% 140.35ms  {{!}} main
...
======== Data collected at 100Hz frequency
======== Data collected at 100Hz frequency
}}
}}
From the above output, the <code>matvec()</code> function is responsible for 83.5% of the execution time, and this function call can be found in the <code>main()</code> function.


==Renseignements sur le compilateur==
==Renseignements sur le compilateur==
38,760

edits