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.