@ Карта сайта News Автора!

Bog BOS: 

Последние изменения:
2024.03.28: sysadmin: Файловая система zfs под Linux для архива (обновление от 0.6 до 2.2)

Последнее изменение файла: 2011.10.21
Скопировано с www.bog.pp.ru: 2024.03.29

Стандарт MPI 1.0 (message passing interface) принят в 1994 году организацией MPI Forum Модель вычислений SPMP (single program multiple processes), копия программы должна быть доступна в момент запуска на всех узлах. Единая программа состоит из множества процессов, каждый из которых имеет собственное адресное пространство. Обмен данными и синхронизация осуществляется явно с помощью обмена сообщениями. Реализация стандарта представляется в виде библиотек для C и Fortran. Сложен как для реализации, так и для использования. Версия 2.0 принята в 1997 году - динамическое создание и удаление процессов, односторонние коммуникации, обмен через общую память, распараллеливание ввода-вывода..

Основные задачи, которые могут решаться вручную или автоматически в различных моделях организации параллельных работ:

MPI иногда называют "параллельным ассемблером".

Архитектура

Количество процессов и процессоров обычно определяется в момент запуска. Номера процессов (ранги) нумеруются с нуля. Процессы могут объединяться в группы, допустимо вложение групп. Процессы внутри группы также перенумерованы. Каждая группа имеет идентификатор (коммуникатор). Имеется универсальная группа с идентификатором MPI_COMM_WORLD. Обмен сообщениями - асинхронный, что позволяет совмещать обмен с вычислениями. Имеются широковещательные операции как передачи, так и приёма и редукции. Возможно автоматическое преобразование представления информации в гетерогенных сетях.

Интерфейс

Каждое сообщение содержит заголовок (MPI_Status): номер процесса-отправителя (MPI_Source), номер процесса получателя, идентификатор (MPI_Tag, от 0 до 32767), код ошибки (MPI_Error).

Операции передачи сообщений

Типы передаваемых элементов данных

Функции (возвращают MPI_SUCCESS в случае успеха):

Пример (с использованием OpenMPI)

Пример программы запускаемой в несколько процессов. Текст

#include 
#include 

int main(int argc, char **argv)
{
  int mpi_id, nthreads, i=0;

  MPI_Init(&argc, &argv);
  MPI_Comm_rank(MPI_COMM_WORLD, &mpi_id);
  MPI_Comm_size(MPI_COMM_WORLD, &nthreads);
  if( mpi_id == 0) {
      printf ("there are MPI threads: %i\n", nthreads);
  }
  printf ("thread: %i\n", mpi_id);

  {
    for(;;) i++;
  }
  MPI_Finalize();
}

Компиляция

module load OpenMPI
mpicc -c -o hello_mpi.o hello_mpi.c
mpicc hello_mpi.o -s -lcrypto -lm -o hello_mpi

Запуск на одном компьютере:

mpirun -np 2 ./hello_mpi

Запуск на нескольких компьютерах (используется SSH по ключу, /usr/lib64/openmpi/1.2.7-gcc/etc/openmpi-mca-params.conf):

for node in 192.168.0.1 192.168.0.2 192.168.0.3 192.168.0.4; do scp hello_mpi $node:
cat > openmpi_host <<EOF
192.168.0.1 slots=8
192.168.0.2 slots=8
192.168.0.3 slots=8
192.168.0.4 slots=8
EOF
mpirun -hostfile openmpi_host -np 32 -mca btl tcp,self ./hello_mpi

Другие реализации MPI - LAM (по слухам, разработчики перешли в OpenMPI) и mpich2.

mpich2

mpich2 - реализация MPI 2.0 - в пакетах mpich2-1.2.1-2.3.el6.x86_64, mpich2-devel-1.2.1-2.3.el6.x86_64 и mpich2-doc-1.2.1-2.3.el6.noarch. Имеется поддержка системы модулей для переключения реализации MPI (mpich2-i386 и mpich2-x86_64).

Создать ~.mpd.conf с правами 600 и добавить строку MPD_SECRETWORD=пароль. После этого можно запускать mpd.

Ссылки

@ Карта сайта News Автора!

Bog BOS: 

Последние изменения:
2024.03.28: sysadmin: Файловая система zfs под Linux для архива (обновление от 0.6 до 2.2)



Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru