Analyser la performance de votre code : VTune

VTune [AmplifierXE] est un outil d’analyse de performance de code développé par Intel. 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 étapes :

  1. ÉTAPE 1: Collection des données sur un nœud de calcul
  2. ÉTAPE 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 :

#!/bin/bash
#SBATCH -J vtune
#SBATCH -N 1
#SBATCH -n 36
#SBATCH --ntasks-per-node=36
#SBATCH --ntasks-per-core=1
#SBATCH --time=01:00:00

export OMP_NUM_THREADS=36

module purge
module load intel/18.2
module list

#vtune-18.2
vtune-self-check.sh

cd ..../bin
amplxe-cl -collect hpc-performance ./mon_executable

Les lignes marquées 1 et 2 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.

Ne pas se noyer sous les données

Évitez 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 par ssh 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, soit à partir de la frontale soit à partir du nœud graphique

# module load intel/18.2
# amplxe-gui &

Attention : Si vous lancez votre programme à partir de l’interface graphique, il tournera sur la frontale (ou sur le nœud graphique)

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é.

vtune, écran donnant les performances globales

Ci-dessous, on visualise le % d’utilisation du CPU par les 20 threads du calculs.

vtune, affichage principal
 

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 :

USE  ITTNOTIFY
...
CALL ITT_PAUSE()
...
CALL ITT_RESUME()
...
CALL ITT_PAUSE()

Compilation:

Profiler un code MPI avec VTune

Un exemple de script sbatch qui fonctionne avec intelMpi. À adapter pour utiliser openMpi !

#!/bin/bash
#SBATCH -J vtune
#SBATCH -N 1
#SBATCH -n 36
#SBATCH --ntasks-per-node=36
#SBATCH --ntasks-per-core=1
#SBATCH --time=01:00:00

module purge
module load intel/18.2
module list

mpiexec.hydra -n 36 -r RESULTATS -gtool "amplxe-cl -collect hpc-performance : 0,1" ./mon_executable

Ligne 1:  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, et 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, pour cela voir ici

Voir aussi

FAQ

Questions fréquentes et messages d'erreurs

ITAC (Intel Trace Analyzer Collector)

ITAC s’utilise en deux temps : Étape 1 : on lance un job pour la collecte des informations Étape 2 : on lance l’outil de post-traitement graphique afin d’analyser les résultats

Profiler votre code avec map

Pour profiler votre code, vous devez travailler en deux temps :