Using job dependencies

Example

  • First create the dependencies main script submission file:
$ cat dependencies.sh

#!/bin/sh

j=$1
NJOBS=$2
NPROC=$3

jfinal=`expr $j + $NJOBS`
first="true"

while [ $j -lt $jfinal ]; do
   j=`expr $j + 1`
   j1=`expr $j + 1`

cat - > $0.$j << EOF;
#!/bin/bash
#!/bin/bash


# Call MPI environment with #NPROC
#$ -pe mpi $NPROC


# Load modules 
source /etc/profile.d/modules.sh
module load gcc44/openmpi-1.4.1

# Compile application
echo "=== Compiling ===" 
mpicc -o cpi cpi.c 

# Execute application 
echo "=== Running ==="
mpirun -np $NSLOTS cpi
EOF

if [ "X$first" == "Xtrue" ]; then
   JID=`qsub $0.$j | awk '{print $3}'`
   if [ $? == 0 ]; then
            first="false"
               echo "Submitting job for $j (JID=$JID)"
       else
          echo "Problem submitting job for $j"
          exit 1
   fi
else
   OLDJID=$JID
   JID=`qsub -hold_jid $JID $0.$j | awk '{print $3}'`
       if [ $? != 0 ]; then
              echo "Problem submitting job $j"
              exit 1
       else
       echo "Submitting job for j=$j (JID=$JID). Depends on $OLDJID"
       fi
fi

rm -f $0.$j
done
  • Second submit the job (100 tasks with 8 core each on which N*1 starts after N finish's);
./dependencies.sh 1 100 8