Jean Zay : 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).

Compilation

Votre programme doit être compilé avec l'option -g des compilateurs Intel et GNU. Cette option indique 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, …

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 :

$ 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 requière 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 apparaitre sur votre écran :

GUI Arm Forge installé localement (Arm Remote Client)

Alternativement, il est possible d’utiliser l'interface graphique Arm Remote Client installé 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 champs 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 chaine de caractères /path/to/install/arm/arm-forge-version/bin 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 section « Connecting to a remote system » de la documentation Arm.

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
...
# Chargement des modules habituels
...
# Ajout du module arm-forge pour MAP
module load arm-forge
 
# Echo des commandes lancées
set -x
 
# 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
    ...
    # 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
     
    # 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
  2. 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.