Vargas : exécution en interactif d'un code parallèle multitâche à mémoire partagée



Vous êtes ici : Support technique → Calcul scalaire → Exécution/contrôle d'un code en interactif → code multitâche (OpenMP ou Pthreads).


L'exécution en interactif d'un programme parallèle à mémoire partagée (parallélisé avec OpenMP ou automatiquement) sur Vargas est limitée au niveau :

Voici une exemple d'exécution en interactif d'un programme OpenMP demandant 4 threads (tâches OpenMP) :

#Compilation et édition de liens du programme OpenMP
vargas : xlf_r -qsmp=omp -o prog programme.f 

#On demande 4 threads pour l'exécution
vargas : export OMP_NUM_THREADS=4

#Execution du programme
vargas : ./prog

Si le programme a besoin de plus de ressources, il faut alors soumettre ce programme en mode batch.

Si votre programme a été parallélisé automatiquement, vous pouvez, exactement de la même façon, contrôler le nombre de processus légers avec la variable OMP_NUM_THREADS. Vous pouvez aussi, de façon équivalente, utiliser la variable parthds, qui est un champ de la variable XLSMPOPTS :

XLSMPOPTS="parthds=<nombre>"

Si les deux variables sont définies, la valeur de OMP_NUM_THREADS a priorité sur celle de parthds.

Pour la parallélisation de la fonction matmul, si vous avez utilisé les options -qessl -lesslsmp (comme nous vous le conseillons à la page sur la parallélisation automatique), vous n'avez rien de plus à faire : OMP_NUM_THREADS, ou bien parthds, contrôle aussi cette parallélisation.

Si vous souhaitez paralléliser la fonction matmul et que vous n'avez pas utilisé l'option -qessl à la compilation, utilisez la variable intrinthds, qui est un champ de la variable XLFRTEOPTS :

XLFRTEOPTS="$XLFRTEOPTS : intrinthds=<nombre>"

La parallélisation de matmul est alors complètement indépendante de celle du reste de votre programme.


© CNRS - IDRIS, 13/01/2012