Jobs tableaux

Les jobs tableaux sont utiles lorsque l’on veut soumettre et gérer un grand nombre de jobs similaires, en particulier lorsqu’un même script doit être exécuté avec différents arguments, ou différents fichiers d’entrée.

Un job tableau est un job qui est composé de plusieurs tâches, qui se comportent toutes comme des jobs indépendants. Le même script est alors utilisé plusieurs fois avec différents arguments. L’argument est donné par un numéro d’index qui correspond au numéro de la tâche et est exporté via la variable d’environnement SGE_TASK_ID.

On soumet un job tableau à l’aide de l’option -t avec la syntaxe suivante :

% qsub -t min[-max[:intervalle]]

Note

Les arguments min, max et intervalle sont disponibles par les variables d’environnement SGE_TASK_FIRST, SGE_TASK_LAST et SGE_TASK_STEPSIZE. Notez que ces variables n’indiquent pas forcement l’ordre d’exécution.

Prenons comme exemple un script job.sh qui lit les données de quatre fichiers différents (input[1-4].txt) et dit “hello” à tous les éléments se trouvant dans les fichiers 1 et 3 (intervalle 2) :

#!/usr/bin/env bash

# Définir les index 'min-max:interval'
#$ -t 1-4:2

echo "Task id = $SGE_TASK_ID"

if [ -e input$SGE_TASK_ID.txt ]; then
while read file
do
echo "hello $file"
done < input$SGE_TASK_ID.txt
fi

Les fichiers input (input[1-4].txt) contiennent :

# input1.txt
world
moon

# input2.txt
forest
sun

# input3.txt
monkey
people

# input4.txt
banana
apple

Pour soumettre le job, tapez (les options sont données dans le fichier script) :

% qsub job.sh

La commande retournera :

Your job-array 1331.1-4:2 ("hello_items") has been submitted

Et vous aurez deux fichiers résultats (au lieu de quatre parce que l’intervalle est 2) :

% cat hello_items.o1331.1
...
hello world
hello moon
...

% cat hello_items.o1331.3
...
hello monkey
hello people
...