Premiers pas avec Intel Trace Analyzer et Collector

Premiers pas avec le produit Intel-Trace-Analyzer-and-Collector

Premiers pas avec Intel® Trace Analyzer et Collector

Utilisez ce document de démarrage et une trace pré-collectée file pour parcourir une analyse de base des performances MPI avec Intel® Trace Analyzer and Collector.
Intel Trace Analyzer and Collector aide à explorer l'efficacité de l'utilisation de l'interface de transmission de messages (MPI) et à identifier les points chauds de communication, les goulots d'étranglement de synchronisation et l'équilibrage de charge. Pour plus d'informations sur le produit, consultez la page produit Intel Trace Analyzer and Collector.

Télécharger Intel Trace Analyzer et Collector

  • dans le cadre d'Intel® oneAPI HPC Toolkit
  • en tant qu'outil autonome

Prérequis

  • Avant d'exécuter Intel Trace Analyzer and Collector, assurez-vous d'avoir installé la dernière bibliothèque Intel® MPI et le compilateur Intel® oneAPI DPC++/C++ ou le compilateur Intel® Fortran.
  • Cela définit les variables d'environnement requises pour les compilateurs, la bibliothèque Intel MPI et Intel Trace Analyzer and Collector, et vous êtes prêt à tracer vos applications.
  • Pour plus d'informations, voir : Configuration système requise pour la boîte à outils Intel® oneAPI HPC.

Comprendre le flux de travail

  1. Tracez votre candidature
  2. Analyser les fonctions MPI les plus actives
  3. Identifier les interactions problématiques
  4. Améliorez les performances de votre application en remplaçant la fonction à l'origine du problème

Tracez votre application MPI

Générer une trace file pour collecter les journaux d'événements pour l'analyse suivante du comportement de l'application.

  1. Configurez l'environnement pour lancer Intel® Trace Analyzer and Collector en exécutant le script setvars à partir du directeur d'installation oneAPI
    NOTE
    Par défaut, Intel Trace Analyzer and Collector est installé sur /opt/intel/oneapi/itac pour le système d'exploitation Linux* et sur Program Files (x86)\Intel\oneAPI\itac\latest pour le système d'exploitation Windows*.
    Sous Linux :
    $ source /opt/intel/oneapi/setvars.sh
    Sous Windows :
    « C:\Programme Files (x86)\Intel\oneAPI\setvars.bat »
  2. Exécutez votre application MPI et générez une trace avec l'option -trace.
    Sous Linux :
    $ mpirun -trace -n 4 ./poisson_sendrecv.single
    Sous Windows :
    Compilez l'application et collectez la trace.
    Pour le compilateur Intel oneAPI DPC++/C++, exécutez :
    > mpiicc -trace poisson_sendrecv.single.c
    Pour le compilateur Intel Fortran, exécutez :
    > mpiifort -trace poisson_sendrecv.single.f
    Cet example génère une trace (stf*) pour asample poisson_sendrcv.application MPI unique
  3. Ouvrez le .stf généré file avec Intel Trace Analyzer avec Intel Trace Analyzer et Collector.
    Sous Linux :
    $ traceanalyseur ./ poisson_sendrecv.single.stf
    Sous Windows :
    analyseur de traces poisson_sendrecv.single.stf

NOTE
A des fins de test, vous pouvez télécharger une trace pré-collectée file poisson_sendrecv.single.stf pour le poisson utilisé dans ce document et ouvrez-le avec Intel Trace Analyzer and Collector.
Le .stf file s'ouvre dans la page de résumé view, qui représente des informations générales sur les performances de votre application :Démarrez-avec-Intel-Trace-Analyzer-and-Collector-fig-1Démarrez-avec-Intel-Trace-Analyzer-and-Collector-fig-2NOTE Pour plus d'informations sur la fonctionnalité Intel Trace Analyzer et Collector, consultez En savoir plus.

Analyser les fonctions MPI les plus actives

Analysez le comportement d'une application MPI, trouvez les goulots d'étranglement et identifiez la sérialisation pour trouver les moyens d'améliorer les performances de l'application.

  1. À partir de la page de résumé, ouvrez la chronologie de l'événement view en cliquant sur Continuer > Graphiques > Chronologie des événements pour une analyse approfondie des principales fonctions MPI.
    Le graphique affiche les activités de processus individuelles au fil du temps.
    Le travail d'application est itératif, où chaque itération consiste en une partie informatique et des communications MPI.
  2. Identifiez une seule itération sur laquelle vous concentrer et zoomez dessus en faisant glisser votre souris sur l'intervalle de temps requis :Démarrez-avec-Intel-Trace-Analyzer-and-Collector-fig-3La piste view affiche la section dans la trace que vous avez sélectionnée. Le graphique Chronologie des événements affiche les événements qui étaient actifs pendant l'itération sélectionnée.
    • Les barres horizontales représentent les processus avec les fonctions appelées dans ces processus.
    • Les lignes noires indiquent les messages envoyés entre les processus. Ces lignes relient les processus d'envoi et de réception.
    • Les lignes bleues représentent les opérations collectives, telles que les opérations de diffusion ou de réduction.
  3. Passer au Flat Profile (A) pour voir de plus près les fonctions qui s'exécutent à l'instant que vous ( avez sélectionné dans la chronologie des événements.Démarrez-avec-Intel-Trace-Analyzer-and-Collector-fig-4
  4. Dissociez les fonctions MPI pour analyser l'activité des processus MPI dans votre application.
    Pour cela, faites un clic droit sur Tous les processus > Groupe MPI (B) dans le Flat Profile et choisissez DissocierMPI. Cette opération expose les appels MPI individuels.
  5. Analysez les processus communiquant avec leurs voisins directs à l'aide de MPI_Sendrecv au début de l'itération. Par exempleample:Démarrez-avec-Intel-Trace-Analyzer-and-Collector-fig-5
    • un. Dans les Sample, l'échange de données MPI_Sendrecv a un goulot d'étranglement : le processus n'échange pas de données avec son voisin suivant tant que l'échange avec le précédent n'est pas terminé. La chronologie des événements view affiche ce goulot d'étranglement comme un escalier.
    • b. Le MPI_Allreduce en fin d'itération resynchronise tous les processus ; c'est pourquoi ce bloc a l'aspect d'un escalier inversé.
  6. Identifier la sérialisation à l'aide de Function Profile et Message Profile views.
    • un. Ouvrez les graphiques en même temps :
      Dans la fonction Profile graphique, ouvrez l'onglet Load Balance.
    • Allez dans le menu Graphiques pour ouvrir un Message Profile.
    • b. Dans l'onglet Load Balance, développez MPI_Sendrecv et MPI_Allreduce. Le Load Balancing indique que le temps passé dans MPI_Sendrecv augmente avec le nombre de processus, tandis que le temps pour MPI_Allreduce diminue.
    • c. Examinez le Message Profile Graphique jusqu'au coin inférieur droit.
      Le codage couleur des blocs indique que les messages voyageant d'un rang supérieur à un rang inférieur nécessitent proportionnellement plus de temps tandis que les messages voyageant d'un rang inférieur à un rang supérieur révèlent un type de modèle pair-impair faible :Démarrez-avec-Intel-Trace-Analyzer-and-Collector-fig-6

Les résultats de l'analyse comparative montrent qu'il n'y a pas de modèles d'échange complexes dans l'application, l'échange s'effectue uniquement avec des processus voisins. Les informations seront essentielles pour l'étape Améliorer les performances de votre application en modifiant les communications afin d'optimiser le modèle de communication de l'application.

Identifier les communications déséquilibrées

Observez votre application dans des circonstances idéales et comparez la trace d'origine file avec l'idéalisé pour isoler les interactions problématiques.

  1. Créer une idéalisée file:
    • un. Sélectionnez Avancé > Idéalisation ou cliquez sur leDémarrez-avec-Intel-Trace-Analyzer-and-Collector-fig-7 (Idéalisation) bouton de la barre d'outils.
    • b. Vérifiez les paramètres d'idéalisation dans la boîte de dialogue Idéalisation (trace idéale file nom et période de conversion).
    • c. Cliquez sur Démarrer pour idéaliser votre tracé.
  2. Comparez la trace d'origine avec la trace idéalisée :
    • un. Sélectionnez Avancé > Diagramme des déséquilibres ou cliquez sur le Démarrez-avec-Intel-Trace-Analyzer-and-Collector-fig-8(Diagramme de déséquilibre) de la barre d'outils.
    • b. Dans la boîte de dialogue Diagramme des déséquilibres, cliquez sur le bouton Ouvrir un autre File , accédez au tracé idéalisé et sélectionnez-le.
    • c. Dans la fenêtre Diagramme des déséquilibres, cliquez sur le bouton Mode total et sélectionnez Mode répartition.

Démarrez-avec-Intel-Trace-Analyzer-and-Collector-fig-9

Vous pouvez voir que MPI_Sendrecv est la fonction la plus chronophage. Le poids de balourd est affiché dans
couleur claire et comprend environ 10% pour la fonction MPI_Sendrecv. C'est le temps que les processus passent à s'attendre.

Améliorez les performances de vos applications en modifiant les communications

  1. Améliorez les performances de l'application MPI en remplaçant les communications bloquantes par des communications non bloquantes.
    Dans votre code, remplacez le MPI_Sendrcv série par une communication non bloquante : MPI_Isend et MPI_Irecv. Par exempleample : Extrait de code d'origine :
    // échange de frontière
    void échange(para* p, grille* gr){
    int i, j;
    MPI_Status status_100, status_200, status_300, status_400 ;
    // envoie la première ligne
    MPI_Send(gr->x_new[1], gr->lcol+2, MPI_DOUBLE, gr->down, 100, MPI_COMM_WORLD); MPI_Recv(gr->x_new[gr->lrow+1], gr->lcol+2, MPI_DOUBLE, gr->up, 100, MPI_COMM_WORLD,
    &status_100);
    // envoie la dernière ligne
    MPI_Send(gr->x_new[gr->lrow], gr->lcol+2, MPI_DOUBLE, gr->up, 200, MPI_COMM_WORLD);
    MPI_Recv(gr->x_new[0], gr->lcol+2, MPI_DOUBLE, gr->down, 200, MPI_COMM_WORLD, &status_200);
    Utiliser la comparaison d'Intel Trace Analyzer view pour comparer l'application sérialisée avec la version révisée
    // copie la colonne de gauche dans les tableaux tmp
    if(gr->gauche != MPI_PROC_NULL){
    gr->x_new[i][gr->lcol+1] = right_col[i] ; right_col[i] = gr->x_new[i][gr->lcol] ;
    // envoie bien
    MPI_Send(right_col, gr->lrow+2, MPI_DOUBLE, gr->right, 400, MPI_COMM_WORLD); }
    si(gr->gauche != MPI_PROC_NULL)
    {
    MPI_Recv(left_col, gr->lrow+2, MPI_DOUBLE, gr->left, 400, MPI_COMM_WORLD,&status_400); for(i=0; i< gr->lrow+2; i++
    {
    gr->x_new[i][0] = left_col[i] ;
    }
    }
    Extrait de code mis à jour
    MPI_Request req[7] ;
    // envoie la première ligne
    MPI_Isend(gr->x_new[1], gr->lcol+2, MPI_DOUBLE, gr->down, 100, MPI_COMM_WORLD, &req[0]);
    MPI_Irecv(gr->x_new[gr->lrow+1], gr->lcol+2, MPI_DOUBLE, gr->up, 100, MPI_COMM_WORLD, &req[1]);
    …..
    MPI_Waitall(7, req, MPI_STATUSES_IGNORE);
    Une fois corrigée, l'itération unique de l'application révisée ressemblera à l'exemple suivantample:Démarrez-avec-Intel-Trace-Analyzer-and-Collector-fig-10
  2. Utiliser la comparaison d'Intel Trace Analyzer view pour comparer l'application sérialisée avec l'application révisée. Comparez deux traces à l'aide de la fonction Comparaison View, aller à View > Comparez. La comparaison View ressemble à :Démarrez-avec-Intel-Trace-Analyzer-and-Collector-fig-11Dans la comparaison View, vous pouvez voir que l'utilisation d'une communication non bloquante permet de supprimer la sérialisation et de réduire le temps de communication des processus.
    NOTE Pour plus d'informations sur les performances au niveau du nœud de votre application, consultez la documentation des outils respectifs : Intel® VTune™ Profiler Analyse du code MPI et analyse des applications Intel® MPI à l'aide d'Intel® Advisor.

Apprendre encore plus

Explorez les ressources suivantes pour plus d'informations sur Intel Trace Analyzer and Collector.Démarrez-avec-Intel-Trace-Analyzer-and-Collector-fig-12Démarrez-avec-Intel-Trace-Analyzer-and-Collector-fig-13

Avis et avis de non-responsabilité

  • Les technologies Intel peuvent nécessiter une activation matérielle, logicielle ou de service activée.
  • Aucun produit ou composant ne peut être absolument sûr.
  • Vos coûts et vos résultats peuvent varier.
  • ©Intel Corporation. Intel, le logo Intel et les autres marques Intel sont des marques commerciales d'Intel Corporation ou de ses filiales. D'autres noms et marques peuvent être revendiqués comme la propriété d'autrui.
  • Aucune licence (expresse ou implicite, par préclusion ou autre) sur aucun droit de propriété intellectuelle n'est accordée par ce document.
  • Les produits décrits peuvent contenir des défauts de conception ou des erreurs appelés errata qui peuvent entraîner un écart par rapport aux spécifications publiées. Les errata caractérisés actuels sont disponibles sur demande.
  • Intel décline toute garantie expresse et implicite, y compris, sans s'y limiter, les garanties implicites de qualité marchande, d'adéquation à un usage particulier et d'absence de contrefaçon, ainsi que toute garantie découlant du cours des performances, du cours des transactions ou de l'utilisation dans le commerce.

Documents / Ressources

intel Premiers pas avec Intel Trace Analyzer et Collector [pdf] Guide de l'utilisateur
Premiers pas avec Intel Trace Analyzer et Collector, Premiers pas avec Intel, Trace Analyzer et Collector, Collector

Références

Laisser un commentaire

Votre adresse email ne sera pas publiée. Les champs obligatoires sont marqués *