OpenACC Tutorial - Profiling/fr: Difference between revisions

no edit summary
(Created page with "Dans le résultat, la fonction <code>matvec()</code> utilise 83.5&nbsp% du temps d'exécution; son appel se trouve dans la fonction <code>main()</code>.")
No edit summary
 
(14 intermediate revisions by one other user not shown)
Line 52: Line 52:


Une fois l'exécutable <code>cg.x</code> créé, nous allons profiler son code source. Le profileur mesure les appels des fonctions en exécutant et en surveillant ce programme.
Une fois l'exécutable <code>cg.x</code> créé, nous allons profiler son code source. Le profileur mesure les appels des fonctions en exécutant et en surveillant ce programme.
'''Important :''' Cet exécutable utilise environ 3Go de mémoire et un cœur CPU presqu'à 100&nbsp;%. '''L'environnement de test devrait donc avoir 4Go de mémoire disponible et au moins deux (2) cœurs CPU'''.
'''Important :''' Cet exécutable utilise environ 3Go de mémoire et un cœur CPU presque à 100&nbsp;%. '''L'environnement de test devrait donc avoir 4Go de mémoire disponible et au moins deux (2) cœurs CPU'''.


{{Callout
{{Callout
Line 92: Line 92:
======== Data collected at 100Hz frequency
======== Data collected at 100Hz frequency
}}
}}
Dans le résultat, la fonction <code>matvec()</code> utilise 83.5&nbsp% du temps d'exécution; son appel se trouve dans la fonction <code>main()</code>.
Dans le résultat, la fonction <code>matvec()</code> utilise 83.5&nbsp;% du temps d'exécution; son appel se trouve dans la fonction <code>main()</code>.


==Renseignements sur le compilateur==
==Renseignements sur le compilateur==
Line 100: Line 100:
* La performance serait-elle affectée par les petites modifications?
* La performance serait-elle affectée par les petites modifications?


<div class="mw-translate-fuzzy">
Le compilateur NVIDIA offre l'indicateur <code>-Minfo</code> avec les options suivantes&nbsp;:
Le compilateur PGI offre l'indicateur '''-Minfo'''  avec les options suivantes&nbsp;:
* <code>all</code>, pour imprimer presque tous les types d'information, incluant
* accel – liste des opérations du compilateur relativement à l'accélérateur
** <code>accel</code> pour les opérations du compilateur en rapport avec l'accélérateur
* all – résultats en sortie du compilateur
** <code>inline</code> pour l'information sur les fonctions extraites et alignées
* intensity – renseignements sur l'intensité de la boucle
** <code>loop,mp,par,stdpar,vect</code> pour les renseignements sur l'optimisation et la vectorisation des boucles
* ccff – ajout de renseignements aux fichiers objet pour utilisation future
* <code>intensity</code>, pour imprimer l'information sur l'intensité des boucles
</div>
* (aucune option) produit le même résultat que l'option  <code>all</code>, mais sans l'information fournie par <code>inline</code>.


<div class="mw-translate-fuzzy">
== Obtenir les renseignements sur le compilateur  ==
== Obtenir les renseignements sur le compilateur  ==
* Éditez le Makefile.
* Modifiez le Makefile.
CXX=nvc++
  CXX=nvc++
CXXFLAGS=-fast -Minfo=all,intensity,ccff
  CXXFLAGS=-fast -Minfo=all,intensity
LDFLAGS=${CXXFLAGS}
  LDFLAGS=${CXXFLAGS}
 
* Effectuez un nouveau build.
* Effectuez un nouveau build.
</div>
* Rebuild
{{Command
{{Command
|make clean; make
|make clean; make
Line 243: Line 240:
}}
}}


<div class="mw-translate-fuzzy">
== Interpréter le résultat ==
== Intensité computationnelle ==
L'''intensité computationnelle'' d'une boucle représente la quantité de travail accompli par la boucle en fonction des opérations effectuées en mémoire, soit
L'intensité computationnelle d'une boucle représente la quantité de travail accompli par la boucle en fonction des opérations effectuées en mémoire.
</div>


<math>\mbox{Computational Intensity} = \frac{\mbox{Compute Operations}}{\mbox{Memory Operations}}</math>
<math>\mbox{intensité computationnelle} = \frac{\mbox{opérations de calcul}}{\mbox{opérations en mémoire}}</math>


<div class="mw-translate-fuzzy">
Dans le résultat, une valeur supérieure à 1 pour <code>Intensity</code> indique que la boucle serait bien exécutée sur un processeur graphique (GPU).
Une valeur de 1 ou plus indique que la boucle serait bien exécutée sur un processeur graphique (GPU).
</div>


== Comprendre le code  ==
== Comprendre le code  ==
Line 271: Line 264:
   }
   }
</syntaxhighlight>  
</syntaxhighlight>  
<div class="mw-translate-fuzzy">
On trouvera les dépendances de données en se posant les questions suivantes&nbsp;:
On trouvera les dépendances de données en se posant les questions suivantes&nbsp;:
* Une itération en affecte-t-elle d'autres?
* Une itération en affecte-t-elle d'autres?
* Les itérations lisent-elles ou écrivent-elles à des endroits différents du même tableau?
** par exemple, quand une  '''[https://fr.wikipedia.org/wiki/Suite_de_Fibonacci suite de Fibonacci]''' est générée, chaque nouvelle valeur dépend des deux valeurs qui la précèdent. Il est donc très difficile, sinon impossible, d'implémenter un parallélisme efficace.
* Est-ce que sum est une dépendance? Non, c'est une réduction.
* L'accumulation des valeurs dans <code>sum</code> est-elle une dépendance?
</div>
** Non, c'est une''' [https://en.wikipedia.org/wiki/Reduction_operator réduction]'''! Et les compilateurs modernes optimisent bien ce genre de réduction.  
* Est-ce que les itérations de boucle écrivent et lisent dans les mêmes vecteurs de sorte que les valeurs sont utilisées ou écrasées par d'autres itérations?
** Heureusement, ceci ne se produit pas dans le code ci-dessus.


Maintenant que le code est analysé, nous pouvons ajouter des directives au compilateur.
Maintenant que le code est analysé, nous pouvons ajouter des directives au compilateur.


[[OpenACC Tutorial - Introduction/fr|<- Page précédente, ''Introduction'']] | [[OpenACC Tutorial/fr|^- Retour au début du tutoriel]] | [[OpenACC Tutorial - Adding directives/fr|Page suivante, ''Ajouter des directives'' ->]]
[[OpenACC Tutorial - Introduction/fr|<- Page précédente, ''Introduction'']] | [[OpenACC Tutorial/fr|^- Retour au début du tutoriel]] | [[OpenACC Tutorial - Adding directives/fr|Page suivante, ''Ajouter des directives'' ->]]
Bureaucrats, cc_docs_admin, cc_staff, rsnt_translations
2,837

edits