Analyser la performance de votre code : VTune [AmplifierXE]

Description et utilisation de VTtune (outil de profilage d’Intel)

Article mis en ligne le 30 octobre 2014
dernière modification le 19 septembre 2019

VTune [AmplifierXE] est un outil d’analyse de performance de code. Il permet de déterminer facilement les régions chaudes du codes (c’est-à -dire les régions les plus consommatrices en temps de calcul). Il permet de déterminer le profil d’exécution d’un code multithreadé (OpenMP). VTune peut aussi analyser un processus mpi, mais il ne vous dira rien sur les communications inter-nœuds.

Vtune s’utilise en deux temps :

  1. Collection des données sur un nœud de calcul
  2. Analyse des résultats à travers une interface graphique : amplxe-gui

Collecter les données

Le script suivant, utilisé à travers sbatch, permet d’assurer la collecte des données :

Les lignes #vtune-18.2 et vtune-self-check.sh sont indispensables. Elles vous diront si vous
avez les droits suffisants pour utiliser vtune. Si ce n’est pas le cas merci de contacter le support.

Éviter de générer de trop gros fichiers

Il est recommandé de faire vos analyses vtune sur de petits jeux de données, afin d’avoir des temps d’exécution courts et des fichiers de résultats de taille modérée.

Une autre solution est d’arrêter la collecte des données avant la fin de l’application :

  • Connectez-vous sur le nœud de calcul
  • Si nécessaire initialisez l’environnement
  • Exécutez la commande permettant de stopper la collecte des données : la commande précise est écrite à la fin de votre sortie slurm (fichier slurm-xxx.out).

Ne pas arrêter vtune avec la commande scancel : cela peut conduire au plantage du nœud de calcul !

Analyser les données

Charger le module intel/18.2 (si ce n’est pas déjà fait), puis lancer l’interface graphique :

Attention : Si Vous lancez votre programme à partir de l’interface graphique, il tournera sur la frontale

Ci-dessous quelques copies d’écran sur un cas simple.
Le cas étudié est une produit de matrice 2000x2000 en simple précision (SP).
Le produit est réalisé par appel de la routine BLAS SGEMM de la MKL. Le calcul est multithreadé (-mkl=parallel) sur 20 cœurs physiques.

  • Ci-dessous les temps d’exécution. La majeure partie du temps est dans SGEMM (ce qui est attendu). Un gain potentiel est indiqué.
    Hot Spot - Points chauds {PNG}
  • Ci-dessous on visualise le % d’utilisation du CPU par les 20 threads du calculs.
    Exactution Time Line % CPU used {PNG}

Ne profiler qu’une partie du code

Afin d’avoir des résultats plus précis, il est souvent nécessaire de ne collecter les données que sur une partie du code : par exemple ne considérer que la boucle principale, en excluant les phases d’initialisation et de terminaison du programme.
Pour cela, il est nécessaire d’ajouter dans votre code quelques appels à des fonctions de VTune. En Fortran :

Compilation (en utilisant des versions récentes du compilateur et de vtune) :

Profiler un code MPI avec VTune

ATTENTION : Ce qui suit ne fonctionne qu’avec intelmpi. Dans le cas où le code à profiler est un code MPI, il est nécessaire d’adapter la ligne de commande.

Ici le paramètre 0,1 correspond aux rangs MPI que l’on souhaite profiler. Il est généralement inutile de profiler tous les processus mpi, puisqu’ils sont censés se comporter tous de la même manière. Le switch -r est indispensable, les résultats seront déposés dans les répertoires RESULTATS.0 et RESULTATS.1

Attention ! Il s’agit ici de profiler de façon indépendante l’exécution d’un ou plusieurs processus issus d’un programme MPI. Aucune information concernant les communications ne sera collectée.