Información y ayuda

HPC Universidad de Oriente

Herramientas de usuario

Herramientas del sitio


hpc-script-openmpi

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.

hpc-script-openmpi.txt · Última modificación: 2022/12/06 18:38 por Beatriz Valdés Díaz