Презентация MPI 1 - Томский политехнический университет

advertisement
Параллельное программирование с
использованием технологии MPI
Лекция 4
Томский политехнический университет
Аксёнов Сергей Владимирович
к.т.н., доцент каф.ОСУ ТПУ
Определения и основные положения
Процесс есть программная единица, у которой имеется
собственное адресное пространство и одна или несколько
нитей.
Процессор −фрагмент аппаратных средств, способный к
выполнению программы.
В модели передачи сообщений процессы, выполняющиеся
параллельно, имеют раздельные адресные пространства.
Связь происходит, когда часть адресного пространства
одного процесса скопирована в адресное пространство
другого процесса.
Процессы в MPI принадлежат группам. Если группа
содержит n процессов, то процессы нумеруются внутри
группы номерами, которые являются целыми числами от 0
до n-l.
Параллельное программирование с
использованием технологии OpenMP
Аксёнов С.В.
2
Возможности MPI-1.2 и MPI-2.0
MPI-1.2
Коммуникация точка-точка
Коллективная коммуникация
Коммуникаторы
Топологии процессов
Пользовательские типы данных
Интерфейс профилирования
MPI-2.0
Динамическое создание процессов
Параллельный ввод-вывод
Параллельное программирование с
использованием технологии OpenMP
Аксёнов С.В.
3
Функции MPI-1.2
В состав библиотеки входит 129 функций.
Для написания подавляющего числа программ
принципиально достаточно следующих шести функций
MPI_Init
Инициализация MPI
MPI_Comm_size
Определение числа процессов
MPI_Comm_rank
Определение процессом собственного
номера
MPI_Send
Посылка сообщения
MPI_Recv
Получение сообщения
MPI_Finalize
Завершение программы MPI
Параллельное программирование с
использованием технологии OpenMP
Аксёнов С.В.
4
Функция MPI_Init()
int MPI_Init(int *argc, char **argv)
Вход argc, argv:
Результат:
аргументы функции main()
MPI_SUCСESS или код ошибки
Назначение: Инициализация MPI.
Функция должна быть вызвана каждым процессом MPI до
использования им любой другой функции MPI.
В каждом выполнении программы может выполняться только
один вызов MPI_Init()
Параллельное программирование с
использованием технологии OpenMP
Аксёнов С.В.
5
Функция MPI_Finalize()
int MPI_Finalize()
Назначение: Завершение программы MPI.
Предусловие: Все незаконченные коммуникации должны быть
завершены.
Функция должна быть вызвана каждым процессом MPI до
завершения работы процесса.
После вызова MPI_Finalize() не может быть вызовов других
функций MPI.
Параллельное программирование с
использованием технологии OpenMP
Аксёнов С.В.
6
Функция MPI_Comm_size()
int MPI_Comm_size(MPI_Comm comm, int *size)
Вход comm:
Выход size:
Коммуникатор
Число процессов в коммуникаторе
Назначение:
Определение
коммуникаторе.
числа
процессов
в
MPI_COMM_WORLD – предопределённый стандартный
коммуникатор. Его группа процессов включает все процессы
параллельного приложения
Параллельное программирование с
использованием технологии OpenMP
Аксёнов С.В.
7
Функция MPI_Comm_rank()
int MPI_Comm_rank(MPI_Comm comm, int *rank)
Вход comm:
Выход rank:
Коммуникатор
Номер процесса, запустившего функцию
Назначение: Определение процессом своего номера.
Единственный способ различения процессов.
Номер процесса – уникальный идентификатор внутри группы
процессов коммуникатора.
Параллельное программирование с
использованием технологии OpenMP
Аксёнов С.В.
8
Функция MPI_Send()
int MPI_Send(void *buf, int count, MPI_Datatype datatype, int
dest, int tag, MPI_Comm comm)
Вход
Вход
Вход
Вход
Вход
Вход
buf:
count:
datatype:
dest:
tag:
comm:
Начальный адрес буфера посылки сообщения
Число передаваемых элементов в сообщении
Тип передаваемых элементов
Номер процесса-получателя
Идентификатор сообщения
Коммуникатор
Назначение: Посылка сообщения.
Блокирующая операция, не возвращает управление до тех
пор, пока данные и атрибуты сообщения не будут сохранены в
соответствующий приемный буфер или во временный
системный буфер.
Параллельное программирование с
использованием технологии OpenMP
Аксёнов С.В.
9
Типы данных MPI
MPI
C
MPI_CHAR
signed char
MPI_SHORT
signed short int
MPI_INT
signed int
MPI_LONG
unsigned long int
MPI_UNSIGNED_CHAR
unsigned char
MPI_UNSIGNED_SHORT
unsigned short int
MPI_UNSIGNED
unsigned int
MPI_UNSIGNED_LONG
unsigned long int
MPI_FLOAT
float
MPI_DOUBLE
double
MPI_LONG_DOUBLE
long double
MPI_BYTE
1 байт
MPI_PACKED
Упакованные данные
Параллельное программирование с
использованием технологии OpenMP
Аксёнов С.В.
10
Функция MPI_Recv()
int MPI_Send(void *buf, int count, MPI_Datatype datatype, int
source, int tag, MPI_Comm comm, MPI_Status *status)
Выход buf:
Вход count:
Вход datatype:
Вход source:
Вход tag:
Вход comm:
Выход status:
Начальный адрес буфера процесса-получателя
Число элементов в принимаемом сообщении
Тип элементов сообщения
Номер процесса-отправителя
Идентификатор сообщения
Коммуникатор
Статусная информация
Назначение: Приём сообщения.
Блокирующая операция, завершает свою работу после того,
как сообщение становится доступным в буфере получателе.
Сообщение должно быть меньше чем размер буфера.
Параллельное программирование с
использованием технологии OpenMP
Аксёнов С.В.
11
Пример
#include “mpi.h”
#include <stdio.h>
#include <stdlib.h>
#define TAG 25
void main(int argc, char *argv[] ) {
{
char message[20];
int rank;
MPI_Status status;
MPI_Init( &argc, &argv );
MPI_Comm_rank( MPI_COMM_WORLD, &rank );
if (rank == 0)
{
strcpy(message, " Текст сообщения MPI");
MPI_Send(message, 20,MPI_CHAR,1,TAG, MPI_COMM_WORLD);
}
else if (rank==1)
{
MPI_Recv(message, 20, MPI_CHAR, 0, TAG, MPI_COMM_WORLD, &status);
printf("Полученное сообщение: %s\n", message);
}
MPI_Finalize();
Параллельное программирование с
}
использованием технологии OpenMP
Аксёнов С.В.
12
Download