Запуск MPI-задач

Запуск 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)