Параллельное программирование с использованием технологии MPI Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 7 Томский политехнический университет.

Презентация:



Advertisements
Похожие презентации
Введение в параллельные вычисления. Технология программирования MPI (день третий) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Advertisements

Параллельное программирование с использованием технологии MPI Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 4 Томский политехнический университет.
Параллельное программирование с использованием технологии MPI Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 8 Томский политехнический университет.
Лекция 6 Множественное распараллеливание на Linux кластере с помощью библиотеки MPI 1. Компиляция и запуск программы на кластере. 2. SIMD модель параллельного.
Основы параллельного программирования с использованием MPI Лекция 4 Немнюгин Сергей Андреевич Санкт-Петербургский государственный университет физический.
Введение в параллельные вычисления. Технология программирования MPI (день второй) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Введение в параллельные вычисления. Технология программирования MPI (день четвертый) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Кафедра ЮНЕСКО по НИТ1 Коммуникационные операции «точка-точка» параллельное программирование.
Кафедра ЮНЕСКО по НИТ1 Передача упакованных данных Параллельное программирование.
Интерфейс передачи сообщений: MPI. Базовые архитектуры Массивно-параллельные системы (MPP) Симметричные мультипроцессорные системы (SMP) Системы с неоднородным.
Кафедра ЮНЕСКО по НИТ1 Создание групп и коммуникаторов Параллельное программирование.
Параллельное программирование с использованием технологии OpenMP Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 3 Томский политехнический.
Кафедра ЮНЕСКО по НИТ1 Производные типы данных Параллельное программирование.
КОЛЛЕКТИВНЫЕ ВЗАИМОДЕЙСТВИЯ ПРОЦЕССОВ Барьерная синхронизация всех процессов группы. Широковещательная передача (broadcast) от одного процесса всем остальным.
Основы параллельного программирования с использованием MPI Лекция 3 Немнюгин Сергей Андреевич Санкт-Петербургский государственный университет физический.
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 4 Методы разработки параллельных программ при использования интерфейса передачи.
Основы параллельного программирования с использованием MPI Лекция 5 Немнюгин Сергей Андреевич Санкт-Петербургский государственный университет физический.
Технология программирования MPI Антонов Александр Сергеевич, к.ф.-м.н., с.н.с. лаборатории Параллельных информационных технологий НИВЦ МГУ.
Кафедра ЮНЕСКО по НИТ1 Коллективные коммуникационные операции параллельное программирование.
Основы параллельного программирования с использованием MPI Лекция 6 Немнюгин Сергей Андреевич Санкт-Петербургский государственный университет физический.
Транксрипт:

Параллельное программирование с использованием технологии MPI Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 7 Томский политехнический университет 1 Параллельное программирование с использованием технологии MPI Аксёнов С.В.

Блокирующая проверка завершения всех обменов Вызов функции блокирует выполнение процесса до тех пор, пока все операции обмена, связанные с активными запросами в массиве requests, не будут выполнены. Возвращается статус этих операций. Статус обменов содержится в массиве statuses. Параллельное программирование с использованием технологии MPI Аксёнов С.В. 2 int MPI_Waitall(int count, MPI_Request *requests, MPI_Status *statuses) Вход count: Размер массивов requests и statuses Вход/Выход requests: Массив запросов Выход statuses: Массив статусов

Неблокирующая проверка завершения всех обменов Функция выполняет неблокирующую проверку завершения приема или передачи всех сообщений. При вызове возвращается значение флага (flag) «истина», если все обмены, связанные с активными запросами в массиве requests, выполнены. Если завершены не все обмены, флагу присваивается значение «ложь», а массив statuses не определен. Параллельное программирование с использованием технологии MPI Аксёнов С.В. 3 int MPI_Testall(int count, MPI_Request *requests, int * flag, MPI_Status *statuses) Вход count: Размер массивов requests и statuses Вход/Выход requests: Массив запросов Выход: flag:1 – если все обмены завершены Выход statuses: Массив статусов

Пример MPI_Request *request; MPI_Status *status; MPI_Comm_rank( MPI_COMM_WORLD, &rank ); if (rank == 0) { MPI_Isend(&buf1,20,MPI_INT,1,25,MPI_COMM_WORLD, &requests[0]); MPI_Isend(&buf2,20,MPI_INT,1,26,MPI_COMM_WORLD, &requests[1]); MPI_Waitall(2,requests, statuses) } if (rank==1) { MPI_Irecv(&source1, 20, MPI_INT, 0, 25, MPI_COMM_WORLD, &requests[0]); MPI_Irecv(&source2, 20, MPI_INT, 0, 26, MPI_COMM_WORLD, &request[1]); MPI_Waitall(2,requests, statuses); } Параллельное программирование с использованием технологии MPI Аксёнов С.В. 4

Блокирующая проверка завершения одного обмена из набора обменов Операция блокирует работу до тех пор, пока не завершится одна из операций из массива активных запросов. Если более чем одна операция задействована и может закончиться, выполняется произвольный выбор. Операция возвращает в index индекс этого запроса в массиве и возвращает в status статус завершаемого обмена. Параллельное программирование с использованием технологии MPI Аксёнов С.В. 5 int MPI_Waitany(int count, MPI_Request *requests, int *index, MPI_Status *status) Вход count: Размер массива requests Вход/Выход requests: Массив запросов Выход: index:Индекс запроса для завершенной операции Выход status: Статус

Неблокирующая проверка завершения одного обмена из набора обменов Смысл и назначение параметров этой функции те же, что и для подпрограммы MPI_Waitany. Дополнительный аргумент flag, принимает значение «истина», если одна из операций завершена. Параллельное программирование с использованием технологии MPI Аксёнов С.В. 6 int MPI_Testany(int count, MPI_Request *requests, int *index, int *flag, MPI_Status *status) Вход count: Размер массива requests Вход/Выход requests: Массив запросов Выход index:индекс запроса для завершенной операции Выход flag:1 – если хотя бы один обмен завершен Выход status: Статус

Дополнительная функция блокирующей проверки завершения обмена Параллельное программирование с использованием технологии MPI Аксёнов С.В. 7 int MPI_Waitsome (int incount, MPI_Request *requests, int *outcount, int *indices, MPI_Status *statuses) Вход count: Размер массива requests Вход/Выход requests: Массив запросов Выход outcount: Число завершенных запросов Выход indices:Массив индексов завершенных операций Выход status: Массив статусов Функция ожидает, пока, по крайней мере, одна операция, связанная с активным дескриптором в списке, не завершится. Возвращает в outcount число запросов из списка array_of_indices, которые завершены.

Дополнительная функция неблокирующей проверки завершения обмена Параллельное программирование с использованием технологии MPI Аксёнов С.В. 8 int MPI_Testsome (int incount, MPI_Request *requests, int *outcount, int *indices, MPI_Status *statuses) Вход count: Размер массива requests Вход/Выход requests: Массив запросов Выход outcount: Число завершенных запросов Выход indices:Массив индексов завершенных операций Выход status: Массив статусов Функция MPI_TESTSOME ведет себя подобно MPI_WAITSOME за исключением того, что заканчивается немедленно. Если ни одной операции не завершено, она возвращает outcount = 0.

Неблокирующая проба Параллельное программирование с использованием технологии MPI Аксёнов С.В. 9 int MPI_Iprobe(int source, int tag, MPI_Comm comm, int *flag, MPI_Status *status) Входsource: Номер источника Входtag: Значение тега Входcomm: Коммуникатор Выходflag:1 – существует входящее сообщение Выход status:Статус Операции MPI_PROBE и MPI_IPROBE позволяют проверить входные сообщения без реального их приема. Пользователь затем может решить, как ему принимать эти сообщения, основываясь на информации, возвращенной при пробе.

Блокирующая проба Параллельное программирование с использованием технологии MPI Аксёнов С.В. 10 int MPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status) Входsource: Номер источника Входtag: Значение тега Входcomm: Коммуникатор Выход status:Статус MPI_PROBE ведет себя подобно MPI_IPROBE, исключая то, что функция MPI_PROBE является блокирующей и заканчивается после того, как соответствующее сообщение было найдено. Сообщение не обязательно должно быть получено сразу после опробования, оно может опробоваться несколько раз перед его получением.

Пример Параллельное программирование с использованием технологии MPI Аксёнов С.В. 11 int myid, numprocs, **buf, source, i; int message[3] = {0, 1, 2}; int myrank, count, TAG = 0; MPI_Status status; if (myrank == 0) { MPI_Send(&message, 3, MPI_INT, 2, TAG, MPI_COMM_WORLD); } else { MPI_Probe(MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &status); source = status.MPI_SOURCE; MPI_Get_count(&status, MPI_INT, &count); buf = malloc(count*sizeof(int)); MPI_Recv(buf, count, MPI_INT, source, TAG, MPI_COMM_WORLD, &status); for (i = 0; i < count; i++){ printf("received: %d\n", buf[i]); }

Отмена ждущих неблокирующих операций обмена Параллельное программирование с использованием технологии MPI Аксёнов С.В. 12 int MPI_Cancel(MPI_Request *request) Входrequest: Коммуникационный запрос Обращение к MPI_CANCEL маркирует для отмены ждущие неблокирующие операции обмена (передача или прием). Вызов cancel является локальным. Он заканчивается немедленно, возможно перед действительной отменой обмена. После маркировки необходимо завершить эту операцию обмена, используя вызов MPI_WAIT или MPI_TEST (или любые производные операции).

Проверка отмены передачи Параллельное программирование с использованием технологии MPI Аксёнов С.В. 13 int MPI_Test_cancelled(MPI_Status *status, int *flag) Входstatus: Статус Выход flag: 1 – если была успешно произведена отмена обмена Функция MPI_TEST_CANCELLED возвращает flag = true, если обмен, связанный со статусным объектом, был отменен успешно. В таком случае все другие поля статуса (такие как count или tag) не определены. В противном случае возвращается flag = false.

Пример Параллельное программирование с использованием технологии MPI Аксёнов С.В. 14 int myid, flag; int message[3] = {0, 1, 2}; int myrank, data = 2222, TAG = 0; MPI_Status status; MPI_Request request; if (myrank == 0) { MPI_BSend(&data, 1, MPI_INT, 2, TAG, MPI_COMM_WORLD); } else if (myrank == 1) { MPI_BSend(&message, 3, MPI_INT, 2, TAG, MPI_COMM_WORLD); } else { MPI_Irecv(&message, 3, MPI_INT, 1, TAG, MPI_COMM_WORLD, &request); MPI_Cancel(&request); MPI_Wait(&request,&status); MPI_Test_cancelled(&status, &flag); If (flag==1) printf(Приём был отменён); }