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.