Запуск MPI-задач #
Для запуска MPI-задач можно использовать команду mpirun.
По умолчанию задача будет запущена с заказанным количеством процессов, информация об этом будет взята из системы очередей Slurm (параметр --ntasks).
Если нужно запустить меньшее количество процессов, то можно использовать параметр -n np.
Например:
mpirun -n 8 ./mpiprog8.exe
Intel MPI #
Подключите модули Intel и используйте компиляторы mpiicc, mpicpc и mpiifort:
module load intel impi
mpiicc -o main main.c
Open MPI #
Вы можете использовать Open MPI с компиляторами gcc, для этого включите необходимые модули и используйте компиляторы mpicc, mpicxx и mpifort:
# компилятор gcc-12
module load gnu12 openmpi4
# компилятор gcc-9
# module load gnu9 openmpi4
# компилятор gcc-7
# module load gnu openmpi
mpicc -o main main.c
Запуск гибридных задач MPI+OpenMP #
Рассмотрим наглядный пример гибридной программы xthi. Код программы можно найти, например, на сайте NERSC.
#define _GNU_SOURCE
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sched.h>
#include <mpi.h>
#include <omp.h>
#include <sys/syscall.h>
/* Borrowed from util-linux-2.13-pre7/schedutils/taskset.c */
static char *cpuset_to_cstr(cpu_set_t *mask, char *str)
{
char *ptr = str;
int i, j, entry_made = 0;
for (i = 0; i < CPU_SETSIZE; i++) {
if (CPU_ISSET(i, mask)) {
int run = 0;
entry_made = 1;
for (j = i + 1; j < CPU_SETSIZE; j++) {
if (CPU_ISSET(j, mask)) run++;
else break;
}
if (!run)