Mandar trabajos paralelos tipo MPI usando Grid Engine consiste principalmente en elegir un entorno paralelo correspondiente y definir el rango de números de slots (núcleos CPU) que requiere el trabajo.
La elección del entorno parallelo está determinado por la opción de línea de comandos -pe <nombre_entorno_patralelo> <número_slots>.
Para mandar por ejemplo un trabajo de openmpi que requiere 100 slots ejecutamos
$ qsub -pe openmpi 100 ./mi_trabajo_mpi.sh
o usamos un rango
$ qsub -pe openmpi 100-200 ./mi_trabajo_mpi.sh
También es posible especificar el entorno paralelo en el script de nuestro trabajo introduciendo una línea como
#$ -pe openmpi 100
Vamos a ver unos ejemplos para cada uno de los entornos MPI instalados en ClusterUA.
Una lista de los entorno conseguimos ejecutando
[hpuser@login ~]$ qconf -spl
impi
mvapich
mvapich2
openmpi
OpenMPI
El entorno de OpenMPI para Grid Engine es openmpi. Después de haber compilado nuestro ejecutable con openmpi con, por ejemplo:
$ module load openmpi-gcc
$ mpicc MPI01.c -o MPI01_openmpi_gcc
Un simple script para mandar el trabajo usando 32 slots puede ser:
Grid Engine se ocupa de arrancar y apagar los demonios mpd en los nodos. Por eso se usar mpiexec para ejecutar el trabajo.
Intel MPI con Trace Analyzer and Collector
Para usar el Intel Trace Analyzer and Collector primero tenemos que compilar nuestro programa con la opción “-trace”.
$ module load icc
$ module load trace
$ mpiicc -trace ./MPI01.c -o MPI01_impi_trace
Para crear el perfil de trace modificamos nuestro script de trabajo de Grid Engine cargando el módulo itac y añadiendo la opción “-trace” como opción del mpiexec :