Babel : exécution d'un code parallèle mixte MPI/OpenMP en batch

La Blue Gene/P supporte les applications mixtes MPI/OpenMP et MPI/pthreads. Les différents modes d'exécution fixent le nombre maximum de threads par processus MPI. En mode VN, seul 1 thread peut être exécuté ; en mode DUAL, 2 threads maximum et au plus quatre en mode SMP.

Voici un exemple de soumission d'un job pour exécuter un code sur 256 coeurs en mode SMP avec 64 processus MPI et 4 threads OpenMP par processus MPI. La soumission se fait, en supposant que le fichier de soumission s'appelle job.ll, via la commande :

llsubmit job.ll

Le fichier de soumission contient les lignes suivantes :

# @ job_name = job_mixte
# @ 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 partition d'execution (multiple de 64)
# en nombre de noeuds de calcul (4coeurs/noeud)
# @ bg_size = 64
# @ queue

mpirun -mode SMP -env ''OMP_NUM_THREADS=4 XLSMPOPTS=spins=0:yields=0:stack=64000000'' -np 64 -mapfile TXYZ -exe ./my_code_mpi_omp

La variable d'environnement OMP_NUM_THREADS indique le nombre de threads OpenMP que l'on veut. Celle-ci ne doit pas dépasser le nombre maximum de threads du mode d'exécution choisi (1 en VN, 2 en DUAL et 4 en SMP). Elle n'est pas obligatoire et a pour valeur en cas d'omission le nombre maximum de threads du mode d'exécution choisi.

La variable d'environnement XLSMPOPTS n'est pas non plus obligatoire mais positionne des valeurs importantes pour des raisons de performance. spins=0 et yields=0 laissent les threads actifs même quand ils n'ont pas de travail les rendant plus prompts à réagir en cas de nouvelles tâches. stack fixe la taille maximum du stack d'un thread (4Mo par défaut).

Pour rappel, il est fortement conseillé de créer des jobs multisteps pour traiter vos parties séquentielles (pré ou post-traitement et transferts de fichiers).

Vous trouverez plus d'informations sur comment soumettre des jobs dans les sections exécution d'un code parallèle en batch et principaux paramètres des commandes mpirun et bgrun.