Manual de uso

⌘K
  1. Inicio
  2. Documentos
  3. Manual de uso
  4. 3. Envío de trabajos
  5. Envío de trabajos
  6. Programas paralelos usando memoria distribuida

Programas paralelos usando memoria distribuida

Son trabajos que dividen el problema en varios procesos que colaboran y se sincronizan entre ellos mediante el intercambio de información a través de una red de comunicaciones. Normalmente, se emplea MPI para la programación de este tipo de trabajos.

Compilación de programas MPI

Consultar esta entrada del manual.

Reserva de recursos

Dos son los principales parámetros que tenemos que seleccionar a la hora de reservar programas MPI:

  • número de tareas: indicará el número de procesos que se inician y formarán parte del trabajo
  • número de nodos: el número de nodos que se han de reservar para ese número de tareas. Como variante, también se puede indicar el número de tareas por nodo, con lo que Slurm calcularía automáticamente el número de nodos necesarios

 

Por ejemplo:
$ cat run.sh
#!/bin/bash
#SBATCH -n 8
#SBATCH --ntasks-per-node=4
#SBATCH -p short
#SBATCH -t 00:10:00
module load <MPI_libraries>
srun ./mpi_program

En este ejemplo, se solicitan 8 procesos (-n 8) y 4 procesos por nodo (–ntasks-per-node=4), por lo que se reservarán dos nodos de la partición short (-p short). Es necesario que carguemos los módulos de las aplicaciones/compiladores/mpi dentro de los scripts de ejecución, salvo si los tenemos cargados a la hora de envío, ya que Slurm copia todas las variables de entorno.

 

Programación híbrida

Se conoce como programación híbrida aquella que emplea paralelismo de memoria compartida y distribuida. Así, típicamente se lanza un número bajo de procesos por nodo, a las que se reservarán varios cores que usarán con sus hebras, y que se comunican con los procesos de otros nodos mediante paso de mensajes.

Tomando el ejemplo anterior, podríamos solicitar el número de CPUs por tarea y ajustar el número de tareas y número de tareas por nodo según nuestras necesidades.

 

¿Cómo podemos ayudarte?