Jean Zay : Arm DDT

Description

DDT est un débogueur parallèle graphique qui permet de travailler sur des applications CPU (OpenMP, MPI), GPU (CUDA, OpenACC) et des applications hybrides (MPI+CUDA, MPI+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 aux débogueurs d'afficher les numéros de ligne du code source, les noms des variables, … etc.

Pour le débogage des codes CUDA, il faut ajouter l'option -G du compilateur NVIDIA nvcc pour avoir les informations nécessaires sur les noyaux GPU.

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 au débogueur DDT installé sur Jean Zay s'effectue via la commande module :

$ module load arm-forge

Attention : l'interface graphique de DDT 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 DDT lancé avec la commande suivante :

$ ddt&

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 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 ddt -v :

$ module load arm-forge
$ ddt -v
Arm DDT
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.

Mode Reverse Connect

L'interface graphique de DDT ne pouvant pas être exécutée sur les nœuds de calcul, nous vous recommandons d'utiliser la fonctionnalité Reverse Connect de DDT en respectant les deux étapes suivantes :

  1. Créez ou modifiez votre script de soumission pour utiliser DDT en mode Reverse Connect :
    intel_mpi_debug.slurm
    # Vos directives Slurm habituelles
    ...
    # Chargement des modules habituels
    ...
    # Ajout du module arm-forge pour DDT
    module load arm-forge
     
    # Echo des commandes lancées
    set -x
     
    # Execution du code via DDT en mode Reverse Connect.
    ddt --connect srun ./exec_mpi_to_debug

    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, lancez l'interface graphique de DDT en arrière plan (notez le symbole & à la fin de la commande ddt&) puis lorsque l'interface est affichée sur votre écran, soumettez votre job Slurm :
    $ module load arm-forge
    $ ddt&
    $ sbatch intel_mpi_debug.slurm

    Attention : quand votre job exécutera la commande ddt --connect ..., DDT affichera une demande de connexion que vous devrez accepter avant de cliquer sur Run pour lancer l'exécution de votre code. Sur votre écran, l'affichage devrait ressembler à ceci :

Spécificités pour les codes GPU

Vous pouvez rencontrer certaines difficultés de débogage des codes GPU écrits en utilisant des modèles de programmation de haut niveau comme OpenACC.

Pour lancer DDT sur des codes GPU, la variable ALLINEA_FORCE_CUDA_VERSION doit être positionnée selon la version de CUDA utilisée : voir la sortie de la commande module list pour connaître cette version.
Par exemple, avec CUDA 9.2 :

$ module load cuda
$ module list
Currently Loaded Modulefiles:
  1) cuda/9.2
$ export ALLINEA_FORCE_CUDA_VERSION=9.2
$ ddt&

Attention : Après que DDT se soit connecté à votre travail SLURM, assurez vous que le débogage CUDA est bien activé avant de démarrer l'exécution du code. Notez que si vous le souhaitez, le débogage mémoire peut aussi être activé (comme ci-dessous).

Remarque : par défaut, DDT s’arrêtera au lancement de chaque noyau exécuté sur le GPU. Ce comportement peut être changé sur le menu Control/Default Breakpoints.

Documentation

La documentation de DDT 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.