Страничка семинаров по MPI.

Добро пожаловать на страничку семинаров по MPI. Здесь вы можете найти ссылки на документацию, скачать тексты задач, посмотреть на примеры программ и многое другое. Со всеми вопросами, касающимися работы сайта просьба обращатья по адресу: mpi@gorodok.net

Студентам настоятельно рекомендуется установить на доступной машине одну из библиотек MPI. Ссылки и инструкции по настройке и установке можно найти на этом сайте.

MPI
Message Passing Interface — это стандарт библиотек поддержки параллельного программирования.
Документация

Здесь собраны ссылки на ресурсы, содержащие документацию по MPI. В будущем планируется создать собственную документацию.

Лекция Воеводина на parallel.ru
Глава книги Designing and Building Parallel Programs про MPI (англ.)
Описания функций стандарта MPI (англ.)
Примеры

Ниже приведен пример наивной программы проверки числа на простоту.

Скачать исходный текст: prime.c
#include "mpi.h"
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int numprocs, p, i, rank, r = 1, result;
  
  MPI_Init(&argc, &argv);
  MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
  MPI_Comm_rank(MPI_COMM_WORLD, &rank);

#ifdef  INTERACTIVE
  if (!rank)
    fscanf(stdin, "%d", &p);
#else
  p = rand() / (RAND_MAX / 10000);
#endif

  MPI_Bcast(&p, 1, MPI_INT, 0, MPI_COMM_WORLD);

  if (p != 0 && rank < p / 2 - 1)
    for (i = 2 + rank * (p / 2 - 1) / numprocs;
         i < 2 + (rank + 1) * (p / 2 - 1) / numprocs;
         i++)
      {
        if (p % i == 0) {
          r = 0;
          break;
        }
      }

  MPI_Reduce(&r, &result, 1, MPI_INT, MPI_LAND, 0, MPI_COMM_WORLD);

  if (rank == 0)
    printf("%d is %sa prime.\n", p, result == 0 ? "not " : "");

  MPI_Finalize();
  return 0;
}
Замечания

Для написания программы с использованием MPI следует хорошо представлять модель распределения данных между различными ветвями исполнения программы.

Следует понимать, что все переменные, кроме тех, что инициализирутся статически (т.е конкретным значением, или детерминированным выражением), имеют потенциально разное значение в различных ветвях. Таким образом, если ваша задача — отсортировать массив, то нет необходимости полностью его генерировать в каждой из ветвей. Можно (в зависимости от алгоритма) либо сгенерировать массив в ветви 0, а затем разослать (MPI_Bcast) остальным ветвям, либо генерировать в каждой ветви некоторую часть массива, с которой данная ветвь будет работать.

МВС-1000М

Занятия на семинаре проходят с использованием терминального доступа к кластеру типа МВС-1000М по протоколу ssh. Кластер МВС-1000М, находящийся в Сибирском Суперкомпьютерном Центре, состоит из 16 вычислительных узлов и одного управляющего. Каждый вычислительный узел имеет два процессора Dec Alpha с тактовой частотой 866Мгц и 2Гбайта разделяемой памяти. Управляющий узел имеет один процессор. Все узлы разделяют между собой пользовательскую область файловой системы. Кластер работает под управлением ОС Red Hat Linux.

Доступ

Кластер МВС-1000М Сибирского Суперкомпьютерного Центра доступен по адресу mvs1000.sscc.ru по протоколу ssh. Для доступа рекоммендуется свободные ssh-клиент putty и openssh.

Скачать ssh-клиент: putty.exe
Документация

Здесь приведены ссылки на руководства пользователя и программиста МВС-1000М. Их прочтение настоятельно рекомендуется.

Руководство пользователя МВС-1000М
Руководство программиста МВС-1000М
MPICH

MPICH — это свободная библиотека, реализующая стандарт MPI. Библиотека перенесена на многие платформы и поддерживает гетерогенные (неоднородные) кластеры, архитектуры с разделяемой памятью и т.д. Далее приводятся ссылки на пакеты с MPICH и инструкции по установке и настройке библиотеки для ОС Windows и UNIX-like операционных систем.

Скачать

Скомпилированную библиотеку MPICH для Windows (MPICH.NT) можно скачать непосредственно с этого сайта.

Скачать MPICH.NT часть 1
Скачать MPICH.NT часть 2

Для UNIX-like систем доступны следующие пакеты

Скачать MPICH (исходные тексты)
Windows

Ниже приводятся инструкции по настройке Visual Studio для использования библиотеки MPICH.NT.

1. Скачайте, распакуйте и установите MPICH.NT.

2. Добавьте MPICH.NT в пути для заголовков и библиотек.

3. В свойствах нового проекта следует указать использование библиотек MPICH.NT.

Unix-like

Для работы с MPI без кластера (это может быть одно- или многопроцессорная машина), необходимо установить MPICH собранный с коммуникациями через разделяемую память. Для Debian вам достаточно выполнить (от имени суперпользователя) комманду

$ apt-get install mpich-shmem-bin
Ниже приводится общая инструкция по сборке MPICH с коммуникациями через разделяемую память из исходных текстов для Unix-like ОС.

1. Скачайте файл с исходными текстами MPICH и распакуйте архив.

Пользователи Debian GNU/Linux могут выполнить комманду

$ apt-get source mpich

2. Сконфигурируйте и скомпилируйте исходники mpich для сборки с поддержкой коммуникаций через разделяемую память. Для этого в директории с распакованным mpich нужно выполнить комманду:

$ ./configure --prefix=/usr/local/mpich --with-device=ch_shmem && make

3. Установите MPICH

# make install
THE END