MPICH

Az MPI egy széles körben használt párhuzamos programozási modell, amely praktikus, hordozható, hatékony és rugalmas szabványt hoz létre az üzenetek továbbítására a párhuzamos folyamatokban.

A Cray MPI az Argonne National Laboratory MPICH-tól származik, és az MPI-3.1 szabványt valósítja meg.

Alap esetben - amennyiben nem kerül másik modul a felhasználó által betöltésre - ezt az MPI környezetet lehet használni.

MPICH Példa program

Az alábbi egyszerű példa program mutatja be a MPI programozását az mpi.h headerben található funkciók felhasználásával.

#include <stdio.h>
#include <mpi.h>
int main(int argc, char **argv)
{
   int rank;
   MPI_Init(&argc, &argv);
   MPI_Comm_rank(MPI_COMM_WORLD, &rank);
   printf("Hello from rank %d\n", rank);
   MPI_Finalize();
   return 0;
}

További tudnivalók man intro_mpi parancs segítségével érhetők el. Urás a Cray MPICH dokumentációra

MPICH CPU

A példaként megadott MPI programot az alábbak szerint fordítani:

cc mpi.c

A következőképpen lehet ellenőrizni, hogy a megfelelő Cray MPI könyvtár lett-e dinamikusan linkelve:

$ ldd a.out | grep mpi
    libmpi_cray.so.12 => /opt/cray/pe/lib64/libmpi_cray.so.12 (0x00007f5613dc2000)

MPICH GPU

A GPU használathoz fordítás előtt be kell tölteni a Cray Nvidia gyorsítást az Ampere archtiektúrájú A100 GPU-hoz.

module load craype-accel-nvidia80
cc mpi.c

A következőképpen lehet ellenőrizni, hogy a GPU-ra optimalizált Cray MPI könyvtár lett-e dinamikusan linkelve:

$ ldd a.out | grep mpi
     libmpi_cray.so.12 => /opt/cray/pe/lib64/libmpi_cray.so.12 (0x00007f2b5e715000)
     libmpi_gtl_cuda.so.0 => /opt/cray/pe/lib64/libmpi_gtl_cuda.so.0 (0x00007f2b5e4cf000)

MPICH CPU Batch Job

A következő példában 4 gépen futtatunk 8 MPI taskot:

#!/bin/bash
#SBATCH -A hpcteszt
#SBATCH --partition=cpu
#SBATCH --job-name=mpi-cpu
#SBATCH --output=mpi-cpu.out
#SBATCH --time=06:00:00
#SBATCH --nodes=4
#SBATCH --ntasks-per-node=8
srun ./mpi-cpu

MPICH GPU Batch Job

MPICH_GPU_SUPPORT_ENABLED változót 1-re kell állítani, hogy a GPU-ra dinamikusan linkelt applikáció ki tudja használni a gyorsítást:

#!/bin/bash
#SBATCH -A hpcteszt
#SBATCH --partition=gpu
#SBATCH --job-name=mpi-gpu
#SBATCH --output=mpi-gpu.out
#SBATCH --time=06:00:00
#SBATCH --nodes=4
#SBATCH --ntasks-per-node=8
#SBATCH --gres=gpu:1
export MPICH_GPU_SUPPORT_ENABLED=1
srun ./mpi-gpu