===== Hello World, MPI & SLURM =====
Esta guía provee un hello world para MPI y como correrlo usando SLURM.
==== MPI ====
* Código fuente de hello world:
#include
#include
#include "mpi.h"
int main(int argc, char *argv[]) {
MPI_Init(&argc, &argv);
int rank;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
char processor_name[MPI_MAX_PROCESSOR_NAME];
int name_len;
MPI_Get_processor_name(processor_name, &name_len);
#pragma omp parallel
{
int thread_num = omp_get_thread_num();
printf("Hello from thread %d and process %d on processor %s\n",
thread_num, rank, processor_name);
}
MPI_Finalize();
}
* Makefile para compilar el hello world
all: hello-world
hello-world: hello-world.cpp
source $$MODULESHOME/init/bash; module add mpi ; mpic++ hello-world.cpp -o hello-world -fopenmp
clean:
rm -v hello-world
==== SLURM ====
Existen diversas maneras para ejecutar trabajos en SLURM, en este caso se dan dos alternativas:
=== srun ===
El siguiente comando ejecuta el hello world en la partición tara-2N-1H (-p tara-2N-1H) utilizando 2 nodos (-N 2):
srun -N 2 -p tara-2N-1H hello-world
=== sbatch ===
Para correr el hello world usando **sbatch** es necesario crear el siguiente archivo:
#!/bin/bash
#
#SBATCH --job-name=mpi-hello-world
#SBATCH --nodes=2
#SBATCH --ntasks=1
#SBATCH --time=1:00
#SBATCH --partition=tara-2N-1H
#SBATCH --output=mpi-hello-world.txt
module load mpi/openmpi
export OMP_NUM_THREADS=2
mpirun hello-world
Para ejecutar el script de **sbatch** se utiliza:
sbatch hello-world.sbatch