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