Aller au contenu principal

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

important

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
NOTE

Vous trouverez également des modules contenant des versions plus anciennes sous le nom 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 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 :

DDT welcome

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.

attention

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.

DDT add config

  • 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 commande module display linaro-forge et récupérer le chemin ajouté au PATH (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 :

  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 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_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 linaro-forge
    ddt&
  3. Soumettez votre job :

    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 :

    DDT welcome

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&
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).

DDT welcome

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 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.