Компиляция и запуск MPI программ

Выбор реализации MPI

Для выбора MPI среды используйте команду module availmodule load [modulename].

[user@mgt1 ~]$ module avail
------------------------------ /etc/modulefiles ---------------------------------
impi/3 impi/4 openmpi
[user@mgt1 ~]$ module load impi/3
[user@mgt1 ~]$

В данном случае доступны несколько модулей. В частности impi/3, загружает переменные среды для работы с Intel MPI библиотекой версии 3.

Загруженные переменные сохраняются в течении текущей сессии. Чтобы при повторном входе на кластер нужные модули загружались автоматически, добавьте в файл .modules в своей домашней директории, следующую строку

module load modulename

Компиляция MPI программ

После загрузки нужного модуля, можно использовать программы для компиляции и запуска параллельных приложений (mpicc, mpicxx, mpif77, mpif90, и т.д.).

[user@mgt1 ~]$ which mpicc
/home/COMMON/intel/impi/3.2.2/bin64/mpicc

Компилировать программы можно следующими командами (исходный код в файле hello.c):

[user@mgt1 ~]$ mpicc -o hello.mpi hello.c

Дополнительные ключи компиляции, если они нужны, можно посмотреть в официальной документации производителей компиляторов.

Запуск MPI программ

Запуск MPI программ возможен только через систему пакетной обработки заданий (см. "Работа с системой пакетной обработки заданий"). В файле пакетного задания необходимо запустить Вашу программу с помощью команды mpirun (аргументы программы mpirun указаны для библиотеки Intel MPI).

#!/bin/bash
#PBS -N hello.mpi
#PBS -A код_проекта
#PBS -l procs=8
#PBS -l walltime=00:01:00
cd $PBS_O_WORKDIR
module load impi/4
mpirun -r ssh -machinefile $PBS_NODEFILE -np $PBS_NP ./hello.mpi

В примере выше, запрошено 8 процессоров (ядер). Время выполнения программы 1 мин. Переменная $PBS_O_NODEFILE содержит путь к файлу в который СПО записывает имена выбранных нодов. В переменной $PBS_NP содержится количество запрошенных процессов (procs или nodes*ppn).

Для постановки задания в очередь используется команда qsub.

[user@mgt1 ~]$ qsub job.pbs