Les job array permettent de lancer plusieurs instances d’un même job (séquentiel ou parallèle) en une seule commande. Chaque instance sera identique aux autres, mis à part le numéro de task qui est accessible dans la pseudo variable d’environnement SGE_TASK_ID. Il est ainsi possible de fournirs des paramètres différents à chaque task en utilisant le numéro de task. Plusieurs solutions sont possibles, 2 sont proposées ici.
Utiliser autant de fichier input que de tasks
Soit les fichiers input1.dat
, input2.dat
, … inputN.dat
, contenant chacun les paramètres à transmettre aux différentes instances du programme à exécuter.
>> more input*.dat :::::::::::::: input1.dat :::::::::::::: 0.5 1.0 0.1 :::::::::::::: input2.dat :::::::::::::: 0.6 1.0 0.1 . . . :::::::::::::: inputN.dat :::::::::::::: 0.6 1.0 0.3
Le script de jobs suivant réserve 6 jobs séquentiels dont les paramètres sont lus dans les fichier inputX.dat
avec X correspondant au numéro de « task ». Ce numéro est contenu dans la variable SGE_TASK_ID
.
#$ -N seq-array ## Job séquentiel court #$ -q seq_short ## TASK ARRAY : matrice de jobs (numérotés de 1 à 6) #$ -t 6 ## Quantité de mémoire réservée #$ -l m_mem_free=500M ## Messages #$ -M prenom.nom@cyu.fr #$ -m esa ## Environnement #$ -cwd #$ -j y module load module1 module2 module3 ./programme << input${SGE_TASK_ID}.dat
Utiliser un unique fichier input
Soit le fichier inputs.dat
contenant N lignes de paramètres à transmettre au programme à exécuter.
0.5 1.0 0.1 0.6 1.0 0.1 0.5 1.0 0.2 0.6 1.0 0.2 0.5 1.0 0.3 0.6 1.0 0.3 ...
Le script de jobs suivant réserve 4 jobs parallèles openMP dont les paramètres sont lus à la ligne du fichier inputs.dat
correspondant au numéro de « task ». Ce numéro est contenu dans la variable SGE_TASK_ID
. Pour illustrer les possibilités de l’option -t
, seules les lignes 2, 4, 6 et 8 du fichier inputs.dat
seront utilisées.
#$ -N omp-array ## Nombre de coeurs CPU réservés ($NSLOTS) #$ -pe openmp 4 ## TASK ARRAY : matrice de jobs (numérotés de 2 à 8 par pas de 2) #$ -t 2-8:2 ## Quantité de mémoire réservée par process openMP #$ -l m_mem_free=250M ## Messages #$ -M prenom.nom@cyu.fr #$ -m esa ## Environnement #$ -cwd #$ -j y module load module1 module2 module3 export OMP_NUM_THREADS=$NSLOTS ## Lecture de la i-ème ligne des paramètres stockés dans le fichier 'inputs.dat' params=$(sed $SGE_TASK_ID'q;d' inputs.dat) ./programme-openmp $params