Turing : SCALASCA

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'identifier facilement les parties critiques. Cet outil est parfaitement adapté à l'étude d'exécutions massivement parallèles.

Versions installées

  • SCALASCA 1.4.3
  • SCALASCA 2.0
  • SCALASCA 2.1 (version par défaut)
  • SCALASCA 2.2

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

Attention : SCALASCA 1.4.3 ne peut plus être utilisé pour instrumenter une application sur Turing depuis le passage au driver V1R2M1 le 1er avril 2014. Par contre, les fichiers qui ont été générés avec cette version ne sont pas exploitables avec SCALASCA 2.x. SCALASCA 1.4.3 est donc toujours disponible pour analyser les traces créées avec cette version.

Utilisation

La commande module permet d'accéder à SCALASCA.

Avant de travailler avec cet outil, il faut donc exécuter la commande :

module load scalasca

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

  1. Instrumentation de l'application ;
  2. Exécution de l'application instrumentée ;
  3. Analyse/visualisation des résultats.

Instrumentation

SCALASCA fonctionne en modifiant votre application pour insérer ses propres procédures de mesures.

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

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

skin mpixlf95_r my_code.f95

Attention : les performances sont mesurées entre les appels à MPI_Init et MPI_Finalize. Toute opération effectuée en-dehors ne sera pas prise en compte.

Attention : l'usage de SCALASCA entraîne des surcoûts en temps d'exécution, d'occupation mémoire et disque.

Exécution

L'exécution se fait en ajoutant la commande scan (ou scalasca -analyze) juste avant runjob dans vos scripts LoadLeveler.

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

Pour obtenir une trace des événements et non plus un simple profil, il suffit d'utiliser l'option -t. Attention, cette option augmente fortement les besoins en espace disque. 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.

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 :

job.ll
# @ job_name = scalasca_run
# @ job_type = BLUEGENE
# Fichier sortie standard du travail
# @ output = $(job_name).$(jobid)
# Fichier erreur standard du travail
# @ error = $(output)
# Temps elapsed maximum demande
# @ wall_clock_limit = 1:00:00
# Taille bloc d'execution
# @ bg_size = 64
# @ queue
 
module load scalasca
scan runjob --ranks-per-node 8 --envs "OMP_NUM_THREADS=8" --np 512 : ./my_appli my_args

Analyse/visualisation des résultats

L'analyse des résultats se fait à l'aide de l'interface graphique square (ou scalasca -examine). Pour la lancer, il suffit de taper :

module load scalasca
square repertoire_sortie_scalasca

L'interface est divisée en trois volets. A gauche, les différentes mesures effectuées sont présentées. Au milieu, l'arbre des appels est donné et à 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 sources 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 de la frontale de Turing. Pour contourner ce problème, il est possible d'installer sur un PC sous Linux (ou toute machine UNIX) l'outil de visualisation CUBE (téléchargeable sur le site officiel de SCALASCA). L'outil graphique CUBE permet également de faire la différence entre deux traces scalasca via la commande suivante :

cube_diff trace1 trace2

Documentation

* Les manuels d'autres versions sont également disponibles directement sur Turing dans le répertoire $SCALASCA_DIR/share/doc/scalasca/manual (ou $SCALASCA_DIR/doc pour la version 1.4.3)