Arm MAP
MAP est un outil graphique d'analyse de performances pour des applications parallĂšles CPU (OpenMP, MPI) ou GPU (CUDA C/C++/Fortran, OpenACC) et des applications hybrides (MPI+CUDA/OpenACC).
Nous vous invitons à consulter les bonnes pratiques pour le profilage de code pour des conseils généraux sur l'analyse de performance sur Jean Zay.
Compilationâ
Votre programme doit ĂȘtre compilĂ© avec les options -g -O3 des compilateurs Intel et GNU ou -gopt des compilateurs NVIDIA. Ces options indiquent au compilateur d'ajouter dans l'exĂ©cutable diverses informations qui permettront d'afficher les numĂ©ros de ligne du code source, les noms des variables, etc., tout en conservant un niveau Ă©levĂ© d'optimisation.
Pour plus d'information, vous pouvez consulter la liste détaillée des options de débogage des compilateurs Intel.
Utilisationâ
Lâinterface graphique Arm Forge est commune pour le dĂ©bogueur DDT et le profiler MAP. Vous pouvez utiliser lâinterface graphique dâArm Forge installĂ©e sur Jean Zay ou celle installĂ©e localement sur votre machine (appelĂ©e Arm Remote Client).
GUI Arm Forge sur Jean Zayâ
L'accÚs à l'interface graphique d'Arm Forge installé sur Jean Zay s'effectue via la commande :
$ module load arm-forge
L'interface graphique d'Arm Forge ne peut ĂȘtre utilisĂ©e que sur les nĆuds frontaux de Jean Zay. De plus, son utilisation requiert que votre connexion autorise l'affichage graphique XWindows (par exemple avec l'option -X de la commande ssh).
Une fois MAP lancé avec la commande suivante :
$ map&
une fenĂȘtre telle que celle-ci doit apparaĂźtre sur votre Ă©cran.

GUI Arm Forge installĂ© localement (Arm Remote Client)â
Alternativement, il est possible dâutiliser l'interface graphique Arm Remote Client installĂ©e en local sur votre machine. Cela permet dâĂ©viter lâaffichage graphique Xwindows au travers de la connexion ssh et, ainsi, d'offrir de meilleurs temps de rĂ©ponse de l'interface si votre rĂ©seau est peu performant.
Arm Remote Client peut ĂȘtre tĂ©lĂ©chargĂ© gratuitement sur le site d'Arm.
La version du Remote Client doit correspondre à la version du paquet Arm Forge installé sur Jean Zay. Le numéro de version est indiqué par la commande map -v :
$ module load arm-forge
$ map -v
Arm MAP
Part of Arm Forge.
Copyright (c) 2002-2019 Arm Limited (or its affiliates). All rights reserved.
Version: ...
Au premier lancement dâArm Remote Client, il faut Ă©tablir une connexion Ă Jean Zay via Remote Launch/Configure/Add. Dans le champ Remote Installation Directory, vous devez indiquer le rĂ©pertoire dâinstallation d'Arm Forge sur Jean Zay qui peut ĂȘtre connu via la commande suivante :
$ module display arm-forge
...
prepend-path PATH /path/to/install/arm/arm-forge-version/bin
...
Dans la sortie de cette commande, vous constaterez que la variable PATH est complétée par la chaßne de caractÚres /path/to/install/arm/arm-forge-version/bin, ce qui indique que le répertoire d'installation est /path/to/install/arm/arm-forge-version (sans le suffixe /bin).
Pour de plus amples détails sur Arm Remote Client, vous pouvez consulter la documentation Connecting to a remote system.
Profiler un codeâ
Il y a deux façons de profiler un code avec MAP :
- soit en exécutant le code en ligne de commande dans votre job Slurm et en visualisant a posteriori les résultats grùce à l'interface graphique d'Arm Forge ;
- soit en exécutant le code directement via l'interface graphique d'Arm Forge et la fonctionnalité Reverse Connect.
Profiler un code en ligne de commandeâ
Pour profiler votre code en ligne de commande, ajoutez la commande map avec l'option --profile au dĂ©but de la ligne dâexĂ©cution (avant la commande srun) :
# Vos directives Slurm habituelles
...
# La ligne ci-dessous peut ĂȘtre dĂ©commentĂ©e pour passer en mode exclusif et disposer
# d'un accÚs complet aux compteurs matériels (cf. les bonnes pratiques pour le profilage)
##SBATCH --exclusive -C prof
# Chargement des modules habituels
...
# Ajout du module arm-forge pour MAP
module load arm-forge
# Echo des commandes lancées
set -x
# Evite une saturation du répertoire temporaire /tmp
export TMPDIR=$JOBSCRATCH
# Execution du code
map --profile srun ./exec_mpi_to_profile
AprĂšs lâexĂ©cution du code, un fichier .map sera gĂ©nĂ©rĂ© dans votre rĂ©pertoire d'exĂ©cution.
Si l'exécution est effectuée dans le répertoire temporaire JOBSCRATCH, le fichier .map sera effacé automatiquement. Il faut donc penser à le recopier dans un autre répertoire à la fin du job.
Pour le visualiser, lancez l'interface graphique soit en local sur votre machine soit sur Jean Zay, puis cliquez sur Load Profile Data File et choisissez le fichier .map qui vient d'ĂȘtre gĂ©nĂ©rĂ©.
Profiler un code via l'interface graphiqueâ
La seconde façon de profiler avec MAP est d'utiliser sa fonctionnalité Reverse Connect en respectant les deux étapes suivantes.
- Créez ou modifiez votre script de soumission pour utiliser MAP en mode Reverse Connect (option
--connectde la commandemap) :
#!/bin/bash
# Vos directives Slurm habituelles
...
# La ligne ci-dessous peut ĂȘtre dĂ©commentĂ©e pour passer en mode exclusif et disposer
# d'un accÚs complet aux compteurs matériels (cf. les bonnes pratiques pour le profilage)
##SBATCH --exclusive -C prof
# Chargement des modules habituels
module purge
module load ...
# Ajout du module arm-forge pour MAP
module load arm-forge
# echo des commandes lancées
set -x
# Evite une saturation du répertoire temporaire /tmp
export TMPDIR=$JOBSCRATCH
# exécution du code
map --connect srun ...
Dans certains cas (par exemple, avec des codes qui nâutilisent pas la bibliothĂšque MPI), il peut ĂȘtre nĂ©cessaire de positionner les variables dâenvironnement suivantes dans votre script :
export ALLINEA_MPI_INIT=main
export ALLINEA_HOLD_MPI_INIT=1
ou si elles ne fonctionnent pas :
export ALLINEA_STOP_AT_MAIN=1
- Ensuite, depuis votre session interactive sur Jean Zay ou sur votre machine locale (Arm Remote Client), lancez l'interface graphique de MAP (en arriĂšre plan dans cet exemple via le symbole
&à la fin de la commandemap&), puis lorsque l'interface est affichée sur votre écran, soumettez votre job Slurm :
$ module load arm-forge
$ map&
$ sbatch intel_mpi.slurm
Quand votre job exécutera la commande map --connect ..., MAP affichera une demande de connexion que vous devrez accepter avant de cliquer sur Run pour lancer l'exécution de votre code.
Documentationâ
La documentation de MAP est disponible sur le site d'Arm.
Licenceâ
L'IDRIS possĂšde une licence comportant au total 8196 jetons pour les deux produits Arm DDT et MAP ; leur utilisation requiert un jeton par processus MPI.