Aller au contenu principal

SCALASCA

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.

Description​

SCALASCA est un outil graphique d'analyse de performances pour applications parallĂšles ; il a Ă©tĂ© dĂ©veloppĂ© par le JSC (JĂŒlich Supercomputing Centre). Il permet d'analyser le comportement d'une application et d'en identifier facilement les parties critiques. Cet outil est particulierement adaptĂ© Ă  l'Ă©tude d'exĂ©cutions massivement parallĂšles.

Versions installĂ©es​

La commande module permet d'accéder aux diverses versions de HPCToolkit et HPCViewer.

Pour afficher les versions disponibles :

$ module avail scalasca
scalasca/2.4-mpi scalasca/2.5-mpi scalasca/2.6-mpi
Attention

SCALASCA est parfaitement adapté aux applications hybrides MPI et multithreads/OpenMP jusqu'au niveau MPI_THREAD_MULTIPLE pour un profil et jusqu'au niveau MPI_THREAD_FUNNELED pour une trace.

Utilisation​

La commande module permet d'accéder à SCALASCA ; une utilisation appropriée de SCALASCA nécessite également de charger Score-P :

Avant de travailler avec cet outil, il faut donc exécuter les commandes :

$ module load scalasca
$ module load scorep

L'utilisation de SCALASCA se fait en trois étapes :

  • Instrumentation de l'application ;
  • ExĂ©cution de l'application instrumentĂ©e ;
  • Analyse/visualisation des rĂ©sultats.

Instrumentation​

SCALASCA fonctionne en modifiant votre application pour y insérer ses propres procédures de mesure lors de la compilation.

Toute application peut ĂȘtre instrumentĂ©e soit automatiquement, soit manuellement. Seule l'instrumentation automatique d'une application MPI "pure" (sans OpenMP) sera abordĂ©e dans ce document. Pour la procĂ©dure manuelle, rĂ©fĂ©rez vous au manuel PDF de SCALASCA.

Pour instrumenter automatiquement votre application, il suffit d'ajouter devant le nom du compilateur la commande skin (en laissant un blanc) :

  $ skin mpif90 my_code.f90
Attention
  • l'usage de SCALASCA entraĂźne des surcoĂ»ts en temps d'exĂ©cution, en occupation mĂ©moire et en espace disque.
  • les performances sont mesurĂ©es entre les appels Ă  MPI_Init et MPI_Finalize : toute opĂ©ration effectuĂ©e en dehors de ces appels ne sera pas prise en compte.

ExĂ©cution​

L'exécution se fait en ajoutant la commande scan juste avant la commande srun dans vos scripts Slurm.

Un profil est un résumé de l'exécution : par défaut, seul un profil est collecté.

Pour obtenir une trace complÚte des évÚnements et non plus un simple profil, il suffit d'utiliser l'option -t. Cette option est trÚs utile car elle permet à SCALASCA d'identifier divers problÚmes de performances qui seront mis en évidence lors de la visualisation.

Attention

Cette option augmente fortement les besoins en espace disque d'une exécution.

A chaque exécution, SCALASCA écrit ses fichiers dans un répertoire dont le nom est généré de la maniÚre suivante :

scorep_NOMAPPLI_RANKSPERNODEpNPROCxNTHR_TYPE

avec

  • NOMAPPLI, le nom de l'exĂ©cutable,
  • RANKSPERNODE, le nombre de processus par nƓud,
  • NPROC, le nombre total de processus,
  • NTHR, le nombre de threads par processus,
  • TYPE, sum pour un profil, trace pour une trace.
Attention

Si le répertoire existe déjà, l'exécution échouera pour éviter d'écraser des résultats précédents. Il faut donc vous assurer avant qu'il n'existe pas.

Voici un exemple de job de soumission :

scalasca_mpi.slurm
#!/bin/bash
#SBATCH --job-name=scalasca_run # nom du job
#SBATCH --ntasks=40 # Nombre total de processus MPI
#SBATCH --ntasks-per-node=40 # Nombre de processus MPI par noeud
# /!\ Attention, la ligne suivante est trompeuse mais dans le vocabulaire
# de Slurm "multithread" fait bien référence à l'hyperthreading.
#SBATCH --hint=nomultithread # 1 thread par coeur physique (pas d'hyperthreading)
# 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
#SBATCH --time=01:00:00 # Temps d’exĂ©cution maximum demandĂ© (HH:MM:SS)
#SBATCH --output=scalasca%j.out # Nom du fichier de sortie
#SBATCH --error=scalasca%j.out # Nom du fichier d'erreur (ici commun avec la sortie)

# on se place dans le répertoire de soumission
cd ${SLURM_SUBMIT_DIR}

# nettoyage des modules charges en interactif et hérites par défaut
module purge

# chargement des modules
module load ...
module load scalasca
module load scorep

# echo des commandes lancées
set -x

# exécution du code
scan srun ./my_appli my_args

Soumission de ce script via la commande sbatch :

$ sbatch scalasca_mpi.slurm

Analyse/visualisation des rĂ©sultats​

L'analyse des résultats se fait à l'aide de l'interface graphique Cube. Pour la lancer, il suffit de taper, en interactif, les commandes suivantes :

$ module load scalasca
$ module load scorep
$ module load cube
$ square repertoire_sortie_scalasca/profile.cubex

L'interface est divisée en trois volets :

  • À gauche, les diffĂ©rentes mesures effectuĂ©es ;
  • Au milieu, l'arbre des appels ;
  • À droite, la topologie.

En développant ou en réduisant les différentes entrées du panneau de gauche, il est possible d'avoir une vue plus ou moins synthétique des performances. Les choix effectués dans ce volet sont répercutés dans les 2 autres et permettent ainsi d'identifier les points critiques de l'application.

Si l'exécution a été faite en mode trace, SCALASCA peut identifier certains comportements responsables de pertes de performances (envois de messages dans le désordre, déséquilibrage de charge...).

La visualisation passant par une application graphique, il n'est pas toujours commode de l'utiliser directement à partir d'une frontale de Jean Zay. Pour contourner ce problÚme, il est possible d'installer l'outil de visualisation Cube (téléchargeable sur le site officiel de SCALASCA) sur un PC sous Linux ou toute machine UNIX pour l'exécuter.

Documentation​