Trabajos secuenciales masivos Seqfarmer



Seqfarmer es un programa MPI disponible en Magerit (tanto en Power como en Intel) indicado para la ejecución masiva de trabajos secuenciales. Un uso típico es una batería de pruebas del mismo programa con diferentes argumentos. Para su uso hay que definir, además del jobfile, un tasksfile.

En este ejemplo, vamos a ejecutar 7 trabajos secuenciales, a los que hemos llamado t1, t2, t3, t4, t5, t6 y t7.

Así, nuestro jobfile tendría este aspecto

  #!/bin/bash
  #--------Start job description---------#
  #@ arch = (ppc64|power|intel)
  #@ initialdir = /home/<project_id>
  #@ output = SCRATCH/out-%j.log
  #@ error = SCRATCH/err-%j.log
  #@ total_tasks = 4
  #@ wall_clock_limit = <hh:mm:ss>
  #---------End job description----------#
  #------------Start execution-----------#
  #------------Run our program-----------#
  srun seqfarmer -f=<tasksfile>
  #------------End execution-------------#  

Es muy importante emplear la sintaxis adecuada para la llamada al Seqfarmer. Así, es obligatorio que nuestro jobfile tenga una línea del tipo srun seqfarmer -f=<tasksfile>.

El otro fichero que tenemos que definir es el tasksfile. En él se especifican, en orden, los trabajos a realizar por Seqfarmer. Así, en nuestro caso tendría este aspecto:

  #!/bin/bash
  ./t1
  ./t2
  ./t3
  ./t4
  ./t5
  ./t6
  ./t7

En el jobfile hemos escrito la directiva #@ total_tasks = 4, por lo que tendremos 4 procesadores para ejecutar nuestros trabajos. Uno de ellos (el que tiene rank 0) se encargará de gestionar el paralelismo, enviando a los demás las tareas especificadas en el tasksfile.

Los trabajos del tasksfile esperan a ser ejecutados mediante un mecanismo de cola única.

Antes de comenzar la ejecución, se observa cómo de los 4 procesadores, uno se encargará de gestionar el paralelismo y los demás (3 en este caso) procesarán las tareas del tasksfile. El color naranja del procesador maestro indica que está en espera y, el verde de los otros tres, que están libres.

Seqfarmer: antes de iniciar ejecución
Seqfarmer: antes de iniciar ejecución

Al inicio, el procesador maestro envía un mensaje MPI a cada uno de los otros 3 en el que indica qué tarea deben comenzar a ejecutar. Indicamos esto con el color morado.

Seqfarmer: envío primeros trabajos
Seqfarmer: envío primeros trabajos

Vemos cómo los procesadores comienzan a ejecutar las tareas asignadas.

Seqfarmer: envío primeros trabajos
Seqfarmer: envío primeros trabajos

Inmediatamente, estos procesadores realizan el trabajo que les ha sido asignado a cada uno (color azul). El procesador maestro vuelve a ponerse a la espera (color naranja).

Seqfarmer: primeros trabajos en ejecución
Seqfarmer: primeros trabajos en ejecución

En cuanto un procesador termina su tarea notifica mediante MPI (color morado) al encargado de gestionar el paralelismo.

Seqfarmer: rank 2 notifica a rank 0
Seqfarmer: rank 2 notifica a rank 0

El procesador maestro recibe el mensaje y le envía otro de vuelta que contiene el siguiente trabajo a ejecutar. El color verde del procesador con rank = 2 indica que actualmente está libre.

Seqfarmer: nuevo trabajo a rank 2
Seqfarmer: nuevo trabajo a rank 2

De nuevo, se comienza inmediatamente la ejecución del trabajo asignado.

Seqfarmer: nuevo trabajo a rank 2
Seqfarmer: nuevo trabajo a rank 2

El procesador maestro espera nuevos mensajes.

Seqfarmer: rank 2 comienza nuevo trabajo
Seqfarmer: rank 2 comienza nuevo trabajo

Este proceso se repite hasta que no queden más tareas.

Seqfarmer: fin 1
Seqfarmer: fin 1

Los procesadores envían mensaje al padre al quedarse libres, pero obviamente no reciben respuesta.

Seqfarmer: fin 2
Seqfarmer: fin 2

Finalmente, todos los procesadores quedan libres y finaliza la ejecución de Seqfarmer.

Seqfarmer: fin 3
Seqfarmer: fin 3