Aller au contenu principal

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
Attention

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.
FenĂȘtre d'accueil de Arm MAP

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.

Attention

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) :

intel_mpi_map.slurm
# 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.

Attention

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.

  1. Créez ou modifiez votre script de soumission pour utiliser MAP en mode Reverse Connect (option --connect de la commande map) :
#!/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 ...
Remarque

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
  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 commande map&), puis lorsque l'interface est affichée sur votre écran, soumettez votre job Slurm :
$ module load arm-forge
$ map&
$ sbatch intel_mpi.slurm
Attention

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.