- •Разработка
- •План
- •Литература
- •Интерфейсы разработки параллельных программ
- •Стандарт MPI
- •Основные понятия
- •Запуск MPI машины
- •Запуск программ
- •Структура MPI программы
- •Основной коммуникационный домен
- •Пример MPI программы
- •Создание новых коммуникационных доменов
- •Копирование доменов
- •Разбиение существующего домена на части
- •Пример расщепления
- •Компиляция и выполнения
- •Создание коммуникатора на базе группы
- •Создание группы на базе коммуникатора
- •Операции с группами
- •Создание нового коммуникатора на базе
- •Пример работы с группами
- •Компиляция и выполнение
- •Получение имени машины, где работает процесс
- •Операции передачи данных
- •Операции точка-точка (блокирующие)
- •Результат операции (статус)
- •Коллективные (распределенные) операции
- •Пример выполнения
- •Типы данных
- •Встроенные типы данных
- •Создание новых типов данных
- •Функции создания новых типов данных
- •Пример создания типа структуры
- •Упаковка данных (сериализация)
- •Распаковка данных
- •Пример упаковки- распаковки
- •Асинхронные операции
- •Функции асинхронной передачи-приема
- •Проверка состояния
- •Пример асинхронной операции
- •Расширенные возможности MPI-2
- •Параллельная машина
- •Запуск параллельной машины
- •Функции управления процессами
- •Функции управления процессами
- •Управление виртуальной машиной
- •Пример
- •Пример выполнения и компиляции
- •Прием и отправка сообщений
- •Инициализация буфера упаковки
- •Упаковка и распаковка сообщений
- •Отправка-прием
- •Пример программы
- •Пример выполнения
- •Вопросы ?
Разработка
параллельных программ в системах с
распределенной
Судаков А.А.
памятью“Параллельные и распределенные вычисления” Лекция 22
План
MPI
PVM
Литература
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
Интерфейсы разработки параллельных программ
API для распределенного программирования не рассчитаны на разработку сложных схем обмена между процессами
Для этого разработаны специальные интерфейсы
Стандарт MPI
Стандарт интерфейса обмена сообщениями
Гарантируется совместимость на уровне исходного кода C и Fortran
Существует множество реализаций
mpich
LAM
SCALI
..
По исполняемому коду, протоколу передачи и др. совместимость не гарантируется
MPI – надстройка над сокетами, общей памятью и др.
Основные понятия
MPI программа – набор параллельно выполняющихся процессов, которые могут обмениваться между собой сообщениями
Для обмена сообщениями процессы объединяются в группы
– коммуникаторы или коммуникационные области (домены)
MPI предоставляют функции обмена сообщениями внутри любых коммуникационных доменов
С помощью библиотеки MPI каждый процесс может определить свой номер внутри домена и выполнять необходимую часть расчетов (SIMD, MISD, MIMD)
Все процессы выполняют один и тот же исполняемый файл
Разные процессы выполняют разные исполняемые файлы
Каждое сообщение имеет свой номер – идентификатор, по которому сообщения можно отличать друг от друга
Запуск MPI машины
Зависит от реализации
Программы на других машинах запускаются командой $LAMRSH
export LAMRSH="rsh“
Виртуальная машина запускается командой
lamboot <файл списка машин>
Первой в списке должна быть локальная машина
node1
node2
Запуск программ
mpirun –np <количество процессоров> <программа>
Структура MPI программы
Все процессы чаще всего выполняют один и тот же исполняемый файл
Первой MPI функцией должна быть вызвана
MPI_Init( &argc, &argv )
Последней одна из функций
MPI_Finalize() - нормальное завершение
MPI_Abort( описатель области связи, код ошибки MPI ); - завершение с сообщением об ошибке
Между этими вызовами можно вызывать любые функции MPI
Основной коммуникационный домен
Все процессы выполняют один исполняемый файл
Все процессы принадлежат основному коммуникационному домену с именем MPI_COMM_WORLD
Каждому процессу после запуска присваивается номер
Для любого коммуникационного домена каждый процесс может узнать свой номер и общее количество процессов в домене
int size, rank;
MPI_Comm_size( MPI_COMM_WORLD, &size ); - количество процессов в домене
MPI_Comm_rank( MPI_COMM_WORLD, &rank ); - номер процесса в домене
Эти вызовы - только после MPI_Init