Linaro 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).
L'IDRIS propose une formation "Débogage HPC" pour apprendre à déboguer son code MPI et/ou OpenMP avec DDT.
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 Linaro Forge est commune pour le débogueur DDT et le profiler MAP. Vous pouvez utiliser l'interface graphique de Linaro Forge installée sur Jean Zay ou celle installée localement sur votre machine (appelée Linaro Forge Remote Client).
GUI Linaro Forge sur Jean Zay
L'accès au débogueur DDT installé sur Jean Zay s'effectue via la commande module :
module load linaro-forge
Vous trouverez également des modules contenant des versions plus anciennes sous le nom arm-forge.
L'interface graphique de DDT ne peut être utilisée
que sur les nœuds frontaux de Jean Zay. De plus, son utilisation
requiert que votre connexion SSH autorise l'affichage graphique XWindows, par exemple avec l'option -X de ssh :ssh -X <votre_login>@jean-zay.idris.fr.
Une fois DDT lancé avec la commande suivante,
ddt&
une fenêtre telle que celle-ci doit apparaître sur votre écran :

GUI Linaro Forge installé localement (Linaro Forge Remote Client)
Alternativement, il est possible d'utiliser Linaro Forge 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.
Linaro Forge Remote Client peut être téléchargé gratuitement sur le site de Linaro Forge.
La version du Remote Client doit correspondre à la version du paquet Linaro Forge installé sur Jean Zay. Le numéro de version est indiqué par la commande ddt -v :
$ module load linaro-forge
$ ddt -v
Linaro DDT
Part of Linaro Forge.
Copyright (c) March 2023 - Linaro Limited. All rights reserved.
Version: X.Y.Z
Au premier lancement de Linaro Forge Remote Client, il faut établir une connexion
à Jean Zay via Remote Launch > Configure > Add.

Connection Name: un nom que vous choisissez pour identifier cette connexion ;Host Name: votre identifiant Jean Zay suivi de l'adresse de la machine ;Remote Installation Directory: le répertoire d'installation de Linaro Forge sur Jean Zay. Pour connaître ce chemin, vous pouvez lancer la commandemodule display linaro-forgeet récupérer le chemin ajouté auPATH(sans le suffixe/bin) :prepend-path PATH /path/to/install/arm/forge/X.Y.Z/bin
^------------------------------^
Pour de plus amples détails sur Linaro Forge Remote Client, vous pouvez consulter la section "1.5 Connecting to a remote system" de la documentation Linaro Forge.
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 :
-
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 linaro-forge pour DDT
module load linaro-forge
# Echo des commandes lancées
set -x
# Execution du code via DDT en mode Reverse Connect.
ddt --connect srun ./exec_mpi_to_debugremarqueDans 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=1ou si elles ne fonctionnent pas :
export ALLINEA_STOP_AT_MAIN=1 -
Ensuite, depuis votre session interactive, lancez l'interface graphique de DDT en arrière plan (notez le symbole
&à la fin de la commandeddt&) puis lorsque l'interface est affichée sur votre écran, soumettez votre job Slurm :module load linaro-forge
ddt& -
Soumettez votre job :
sbatch intel_mpi_debug.slurmattentionQuand votre job exécutera la commande
ddt --connect ..., DDT affichera une demande de connexion que vous devrez accepter avant de cliquer surRunpour 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 si besoin).
Par exemple :
$ module load cuda/12.2.0
$ module list
Currently Loaded Modulefiles:
1) cuda/12.2.0
$ export ALLINEA_FORCE_CUDA_VERSION=12.2
$ ddt&
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).

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 de Linaro Forge : https://www.linaroforge.com/download-documentation
Licence
L'IDRIS possède une licence comportant au total 8196 jetons pour les deux produits Linaro DDT et MAP ; leur utilisation requiert un jeton par processus MPI.