Ada : exécution d'un travail MPI en batch

Les travaux sont gérés sur l'ensemble des nœuds par le logiciel LoadLeveler. Ils sont répartis dans des classes principalement en fonction du temps Elapsed, du nombre de cœurs et de la mémoire demandés. Vous pouvez consulter ici la structure des classes sur Ada.

Attention : depuis le 4 mars 2014, nous avons positionné par défaut la variable MP_USE_BULK_XFER à yes pour activer le RDMA. Cette fonctionnalité permet d'accroître les performances des communications collectives ainsi que le recouvrement calcul/communication. Cependant, quelques codes peuvent voir leurs performances baisser lorsque cette variable est positionnée à yes : vous pouvez désactiver le RDMA pour votre code en valorisant la variable à no juste avant l'exécution de votre binaire (export MP_USE_BULK_XFER=no ou setenv MP_USE_BULK_XFER no).

Pour soumettre un travail MPI en batch, il faut :

  • Créer un script de soumission. Voici un exemple enregistré dans le fichier mpi.ll :
mpi.ll
# Nom du travail LoadLeveler
# @ job_name= Mpi
# Fichier de sortie standard du travail
# @ output  = $(job_name).$(jobid)
# Fichier de sortie d'erreur du travail
# @ error   = $(job_name).$(jobid)
# Type de travail
# @ job_type= parallel
# Nombre de processus demandes (ici 64)
# @ total_tasks = 64
# Temps ELAPSED max. pour l'ensemble du job en hh:mm:ss (10mn ici)
# @ wall_clock_limit = 00:10:00
# @ queue
# Repertoire temporaire de travail
cd $TMPDIR
# La variable LOADL_STEP_INITDIR est automatiquement positionnee par
# LoadLeveler au repertoire dans lequel on tape la commande llsubmit
cp $LOADL_STEP_INITDIR/a.out .
cp $LOADL_STEP_INITDIR/input.data .
# Execution d'un programme MPI.
poe ./a.out
  • Soumettre ce script (uniquement depuis Ada) via la commande llsubmit :
$ llsubmit mpi.ll

Remarques :

  • Dans cet exemple, on suppose que l'exécutable a.out se situe dans le répertoire de soumission, c'est-à-dire le répertoire dans lequel on entre la commande llsubmit (la variable LOADL_STEP_INITDIR est automatiquement valorisée par LoadLeveler).
  • Le fichier de sortie du calcul Mpi.numero_job se trouve également dans le répertoire de soumission, il est créé dès le début de l'exécution du travail; l'éditer ou le modifier pendant le déroulement du travail peut perturber celui-ci.
  • Mémoire : La valeur par défaut est de 3.5 Go par cœur réservé (donc par tache MPI). Si vous demandez plus de 64 cœurs (mot-clef total_tasks) alors vous ne pouvez pas dépasser cette limite. Sinon, la valeur maximale que vous pouvez demander est de 7.0 Go par cœur réservé via le mot-clef # @ as_limit = 7.0gb.
  • Si votre travail comporte des commandes séquentielles relativement longues (pré ou post-traitement, transferts ou archivages de gros fichiers,…), l'utilisation de travaux multisteps peut se justifier.