Pro práce s MPI je potřeba nejprve aktivovat příslušný module. Použijeme příkaz:
module load openmpi
A nyní stačí použít wrappery překladačů mpicc, mpic++, mpif77, mpif90 místo běžného kompilátoru.
Uvažujme tento jednoduchý příklad mpitest.c
#include <stdio.h>
#include <stdlib.h>
#include "mpi.h"
int main(int argc, char *argv[])
{
int numprocs; /* Pocet vsech procesoru */
int procnum; /* Cislo aktualniho procesoru */
/* Nejprve inicializace */
MPI_Init(&argc, &argv);
/* Zjisti cislo meho procesoru v ramci celeho COMM */
MPI_Comm_rank(MPI_COMM_WORLD, &procnum);
/* Zjisti kolik procesoru je uloza prideleno */
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
printf ("Hello world! od procesoru %d z celkoveho poctu %d\n",
procnum, numprocs);
/* Ukonceni prace s MPI */
MPI_Finalize();
return EXIT_SUCCESS;
}
Přeložíme pomocí
mpicc mpitest.c -o mpitest
Na clusteru pak spustíme předáním pbs systému takto. Vytvoříme si popisný soubor job.sh
#!/bin/bash
#SBATCH --job-name=MPI1
#SBATCH --output=mpi_output.txt
#
#SBATCH -n 16
#SBATCH -p q2
#SBATCH --constraint="InfiniBand"
#SBATCH --mail-type=ALL
#SBATCH --mail-user=madlik@karlin.mff.cuni.cz
module load openmpi cd /usr/users/madlik/snehurka/ukazky/parallel/1 mpirun ./mpitest
A předáme systému příkazem
sbatch job.sh Systém zařídí jeho běh na 16 procesorech. Detailnější popis použití SLURM čtěte zde.
