![](/user_photo/2706_HbeT2.jpg)
- •Разработка
- •План
- •Литература
- •Интерфейсы разработки параллельных программ
- •Стандарт MPI
- •Основные понятия
- •Запуск MPI машины
- •Запуск программ
- •Структура MPI программы
- •Основной коммуникационный домен
- •Пример MPI программы
- •Создание новых коммуникационных доменов
- •Копирование доменов
- •Разбиение существующего домена на части
- •Пример расщепления
- •Компиляция и выполнения
- •Создание коммуникатора на базе группы
- •Создание группы на базе коммуникатора
- •Операции с группами
- •Создание нового коммуникатора на базе
- •Пример работы с группами
- •Компиляция и выполнение
- •Получение имени машины, где работает процесс
- •Операции передачи данных
- •Операции точка-точка (блокирующие)
- •Результат операции (статус)
- •Коллективные (распределенные) операции
- •Пример выполнения
- •Типы данных
- •Встроенные типы данных
- •Создание новых типов данных
- •Функции создания новых типов данных
- •Пример создания типа структуры
- •Упаковка данных (сериализация)
- •Распаковка данных
- •Пример упаковки- распаковки
- •Асинхронные операции
- •Функции асинхронной передачи-приема
- •Проверка состояния
- •Пример асинхронной операции
- •Расширенные возможности MPI-2
- •Параллельная машина
- •Запуск параллельной машины
- •Функции управления процессами
- •Функции управления процессами
- •Управление виртуальной машиной
- •Пример
- •Пример выполнения и компиляции
- •Прием и отправка сообщений
- •Инициализация буфера упаковки
- •Упаковка и распаковка сообщений
- •Отправка-прием
- •Пример программы
- •Пример выполнения
- •Вопросы ?
![](/html/2706/356/html_XWqRmU1HSK.HVzp/htmlconvd-Qq0eH31x1.jpg)
Разработка
параллельных программ в системах с
распределенной
Судаков А.А.
памятью“Параллельные и распределенные вычисления” Лекция 22
![](/html/2706/356/html_XWqRmU1HSK.HVzp/htmlconvd-Qq0eH32x1.jpg)
План
MPI
PVM
![](/html/2706/356/html_XWqRmU1HSK.HVzp/htmlconvd-Qq0eH33x1.jpg)
Литература
http://www.mpi-forum.org/docs/docs.html
http://www.cluster.kiev.ua/support/documentat
ion
/
http://www.cluster.kiev.ua/support/document ation/pvm3/book/pvm-book.html
![](/html/2706/356/html_XWqRmU1HSK.HVzp/htmlconvd-Qq0eH34x1.jpg)
Интерфейсы разработки параллельных программ
API для распределенного программирования не рассчитаны на разработку сложных схем обмена между процессами
Для этого разработаны специальные интерфейсы
![](/html/2706/356/html_XWqRmU1HSK.HVzp/htmlconvd-Qq0eH35x1.jpg)
Стандарт MPI
Стандарт интерфейса обмена сообщениями
Гарантируется совместимость на уровне исходного кода C и Fortran
Существует множество реализаций
mpich
LAM
SCALI
..
По исполняемому коду, протоколу передачи и др. совместимость не гарантируется
MPI – надстройка над сокетами, общей памятью и др.
![](/html/2706/356/html_XWqRmU1HSK.HVzp/htmlconvd-Qq0eH36x1.jpg)
Основные понятия
MPI программа – набор параллельно выполняющихся процессов, которые могут обмениваться между собой сообщениями
Для обмена сообщениями процессы объединяются в группы
– коммуникаторы или коммуникационные области (домены)
MPI предоставляют функции обмена сообщениями внутри любых коммуникационных доменов
С помощью библиотеки MPI каждый процесс может определить свой номер внутри домена и выполнять необходимую часть расчетов (SIMD, MISD, MIMD)
Все процессы выполняют один и тот же исполняемый файл
Разные процессы выполняют разные исполняемые файлы
Каждое сообщение имеет свой номер – идентификатор, по которому сообщения можно отличать друг от друга
![](/html/2706/356/html_XWqRmU1HSK.HVzp/htmlconvd-Qq0eH37x1.jpg)
Запуск MPI машины
Зависит от реализации
Программы на других машинах запускаются командой $LAMRSH
export LAMRSH="rsh“
Виртуальная машина запускается командой
lamboot <файл списка машин>
Первой в списке должна быть локальная машина
node1
node2
![](/html/2706/356/html_XWqRmU1HSK.HVzp/htmlconvd-Qq0eH38x1.jpg)
Запуск программ
mpirun –np <количество процессоров> <программа>
![](/html/2706/356/html_XWqRmU1HSK.HVzp/htmlconvd-Qq0eH39x1.jpg)
Структура MPI программы
Все процессы чаще всего выполняют один и тот же исполняемый файл
Первой MPI функцией должна быть вызвана
MPI_Init( &argc, &argv )
Последней одна из функций
MPI_Finalize() - нормальное завершение
MPI_Abort( описатель области связи, код ошибки MPI ); - завершение с сообщением об ошибке
Между этими вызовами можно вызывать любые функции MPI
![](/html/2706/356/html_XWqRmU1HSK.HVzp/htmlconvd-Qq0eH310x1.jpg)
Основной коммуникационный домен
Все процессы выполняют один исполняемый файл
Все процессы принадлежат основному коммуникационному домену с именем MPI_COMM_WORLD
Каждому процессу после запуска присваивается номер
Для любого коммуникационного домена каждый процесс может узнать свой номер и общее количество процессов в домене
int size, rank;
MPI_Comm_size( MPI_COMM_WORLD, &size ); - количество процессов в домене
MPI_Comm_rank( MPI_COMM_WORLD, &rank ); - номер процесса в домене
Эти вызовы - только после MPI_Init