====== APLICACIÓN OpenMPI - Compilación y envío ====== MPI (//Message Passing Interface//) es un estándar que define la sintaxis y la semántica de las funciones contenidas en la biblioteca de paso de mensajes, diseñada para ser usada en aplicaciones que exploten la existencia de múltiples procesadores. Su principal característica es que usa memoria distribuida. Se conocen como aplicaciones de memoria distribuida. En el HPC UO hay varias implementaciones de MPI, pero se recomienda usar OpenMPI. MPI también se puede utilizar con códigos de Python, Perl, Java y otros. **1. Compilación** Primero hay que escribir el código OpenMPI y compilarlo usando el módulo correspondiente. Por ejemplo, para compilar el código fuente //mi_programa.c// y crear el ejecutable //mi_programa.x//, se carga el módulo OpenMPI y se ejecuta el comando //mpicc//: module load OpenMPI mpicc -o mi_programa.x mi_programa.c **2. Envío** Para enviar la aplicación MPI compilada, se usa un script de Slurm en el que se solicitan los nodos y los procesos por nodos necesarios. Por ejemplo, para ejecutar //mi_programa.x// solicitando 2 nodos y 4 procesos por nodos: #!/bin/bash #SBATCH --nodes=2 # 2 nodos solicitados #SBATCH --ntasks-per-node=4 # 4 procesos/nodo. No debe exceder el número de núcleos (cores) de CPU del nodo module load OpenMPI # Sólo en el caso de usar mpirun # Usar uno de los dos siguientes, preferentemente srun srun -np 8 mi_programa.x # np=8 2 nodos x 4 procesos/nodo = 8 mpirun -n 4 -N 2 mi_programa.x Se recomienda a los usuarios que usen //srun// en vez de //mpirun// ya que los procesos MPI van a usar los mecanismos de Slurm para enviar/terminar los procesos. En realidad //srun// es la versión MPI de Slurm y el comando //srun// acepta prácticamente las mismas opciones de //mpirun//. Se debe notar que en el caso anterior en vez de: #SBATCH --ntasks-per-node=4 # 4 procesos Se puede usar: #SBATCH --ntasks=8 # Número de procesos totales Slurm se encarga de distribuir el total de los procesos entre los nodos solicitado, por tanto no es necesario cargar ningún módulo.