Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемСтепан Сусанин
1 Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 4 Методы разработки параллельных программ при использования интерфейса передачи сообщений MPI Нижегородский Государственный Университет им. Н.И. Лобачевского
2 4.2 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Содержание Основы подхода История Основы MPIОсновы MPI Основные операции Оценка времени выполнения Коллективные операции Режимы передачи сообщений Проверка завершения операций Буферизация сообщений Пример 1 Пример 2
3 4.3 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Основы подхода… 1. Организация взаимодействия независимо- выполняемых вычислений на процессорах с распределенной памятью
4 4.4 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Основы подхода… 2. Организация параллельных вычислений путем запуска одной и той же программы на нескольких процессоров (модель SPMD – single program multiple data). Различие вычислений обеспечиваются при помощи анализа номера процессора (процесса).
5 4.5 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Основы подхода… 3. Способы организации передачи сообщений Process S: P = 10; s1: send P to R; s2: P = 20; Process R: Q = 0; r1: receive Q from S; r2: T = Q + 1; Синхронный (synchronous) – завершение send/receive после окончания передачи (T==11) Блокирующий (blocking) – send завершается после копирования сообщения в промежуточный буфер, receive ждет окончания приема (T==11) Неблокирующий (nonblocking) – send /receive только инициируют начало операции передачи (T==1,11,21)
6 4.6 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Основы подхода… 4. Библиотеки программ для организации передачи сообщений PVM – Parallel Virtual Machine MPI – Message Passing Interface и др. ! Библиотеки MPI основываются на стандарте MPI, разработанном международным консорциумом MPI Forum
7 4.7 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. История 1992 г. Начало работ над стандартом библиотеки передачи сообщений (Oak Ridge National Laboratory, Rice University). Ноябрь 1992 г. Объявление рабочего варианта стандарта MPI1. Ноябрь 1993 г. Обсуждение стандарта на конференции Supercomputing'93. 5 мая 1994 г. Окончательный вариант стандарта MPI Июня 1995 г. Новая версия стандарта - MPI Июля 1997 г. Опубликован стандарт MPI-2: Extensions to the Message-Passing Interface.
8 4.8 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Основы MPI… В основу MPI положены четыре основные концепции: Тип операции передачи сообщения Тип данных, пересылаемых в сообщении Понятие коммуникатора (группы процессов) Понятие виртуальной топологии
9 4.9 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Основы MPI… 1. Операции передачи сообщений MPI включает в состав большое количество процедур передачи данных (125). Минимально-необходимый набор – 6 функций. 2. Тип данных В силу возможной неоднородности вычислительной системы при передачи сообщения необходимо указывать тип передаваемых данных. В MPI имеется набор стандартных типов (MPI_INT, MPI_DOUBLE,..), возможным является конструирование новых типов данных.
10 4.10 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Основы MPI… 3. Понятие коммуникатора На одном компьютере может быть запущено несколько копий (процессов) исходной программы. Все процессы могут быть распределены на группы (коммуникаторы). Группа процессов может отличаться контекстом (значениями параметров, выбранной топологией и др.). В составе коммуникатора процесс идентифицируется уникальным номером (рангом). Предопределенный коммуникатор, объединяющий все имеющиеся процессы, MPI_COMM_WORLD
11 4.11 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Основные операции… 1. Структура программы (начало/завершение) #include mpi.h main(int argc, char *argv[]){... MPI_Init(&argc, &argv); /* место, где допустим вызов MPI-функций */ MPI_Finalize();... }
12 4.12 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Основные операции… 2. Определение количества и ранга процессов int n, rank; MPI_Comm_size(MPI_COMM_WORLD, &n); MPI_Comm_rank(MPI_COMM_WORLD, &rank); Предопределенный коммуникатор, объединяющий все имеющиеся процессы Общее количество процессов Ранг (номер) процесса
13 4.13 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Основные операции… 3. Передача сообщения (синхронная) MPI_Send(Buf, Count, DataType, Dest, Tag, Comm) (Buf,Count,Datatype) – пересылаемое сообщение –Buf - адрес буфера памяти с сообщением, –Count - количество элементов данных в сообщении, –Datatype – тип элементов данных Dest – ранг (номер) процесса-адресата Tag – номер сообщения Comm – коммуникатор
14 4.14 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Основные операции… 4. Прием сообщения (синхронный) MPI_Recv(Buf, Count, DataType, Source, Tag, Comm, Status) Source – номер процесса-отправителя –MPI_ANY_SOURCE – любой источник Tag – номер принимаемого сообщения –MPI_ANY_TAG – любое сообщение Status – результат операции (MPI_Status Status;) –Status.MPI_Source – номер источника –Status.MPI_Tag – номер принятого сообщения –MPI_Get_count( &status, DataType, &count) – длина сообщения
15 4.15 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Пример1: Параллельный "Hello, world" int main(int argc, char* argv[]){ return 0; } MPI_Init(&argc, &argv); MPI_Finalize(); int rank, n, i, message; MPI_Comm_size(MPI_COMM_WORLD, &n); MPI_Comm_rank(MPI_COMM_WORLD, &rank); if (rank == 0){ /* Process 0 will output data */ } else MPI_Send(&rank, 1, MPI_INT, 0, 111, MPI_COMM_WORLD); MPI_Status status; printf ("\n Hello from process %3d", rank); for (i=1; i
16 4.16 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Оценка времени выполнения Необходимо измерение скорости исполнения параллельной программы Функция MPI_Wtime() дает время в секундах в виде числа двойной точности – Формат: double MPI_Wtime(); Разрешение выдаваемых функцией значений не специфицируется Функция MPI_Wtick() выдает число секунд между двумя ближайшими последовательными тиками часов – Формат: double MPI_Wtick();
17 4.17 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Коллективные операции… 1. Синхронизация вычислений (согласование времени нахождения исполняемых процессов в необходимых точках параллельного метода решения задачи) Формат: int MPI_Barrier( MPI_Comm comm ); ! Вызов MPI_Barrier должен осуществляться в каждом процессе Process S: … MPI_Barrier(comm); … Process Q: … MPI_Barrier(comm); …
18 4.18 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Коллективные операции… 2. Рассылка сообщений всем процессам int MPI_Bcast(&Buf, Count, Type, Root, &Comm); Root – ранг процесса, источника рассылки ! Вызов MPI_Bcast должен осуществляться в каждом процессе Process S: … MPI_Bcast(&n,1,MPI_INT,0, &Comm); … Process Q: … MPI_Bcast(&n,1,MPI_INT,0, &Comm); …
19 4.19 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Коллективные операции… 3. Прием сообщения от всех процессов с выполнением стандартной операции обработки int MPI_Reduce(&Sbuf, &Rbuf, Count, DataType, Operation, Root, &Comm); - Sbuf – буфер отправляемого сообщения, - Rbuf – буфер для приема сообщения, - Root – ранг процесса для приема сообщения, - Operation – операция обработки (MPI_SUM,…) ! Вызов MPI_Reduce должен осуществляться в каждом процессе
20 4.20 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Коллективные операции… Операции функции MPI_Reduce MPI_MAX и MPI_MIN ищут поэлементные максимум и минимум; MPI_SUM вычисляет сумму векторов; MPI_PROD вычисляет поэлементное произведение векторов; MPI_LAND, MPI_BAND, MPI_LOR, MPI_BOR, MPI_LXOR, MPI_BXOR - логические и двоичные операции И, ИЛИ, исключающее ИЛИ; MPI_MAXLOC, MPI_MINLOC - поиск индексированного минимума/максимума - здесь не рассматриваются.
21 4.21 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Коллективные операции Иллюстрация операции MPI_Reduce
22 4.22 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Пример 2: Вычисление числа … Значение числа может быть получено при помощи интеграла Для численного интегрирования применим метод прямоугольников
23 4.23 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Пример 2: Вычисление числа … Распределим вычисления между p процессорами Получаемые на отдельных процессорах частные суммы должны быть просуммированы
24 4.24 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Пример 2: Вычисление числа … #include "mpi.h" #include double f(double a) { return (4.0 / (1.0 + a*a)); } int main(int argc, char *argv) { int done = 0, n, myid, numprocs, i, rc; double PI25DT = ; double mypi, pi, h, sum, x, a; double startwtime, endwtime; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myid);
25 4.25 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Пример 2: Вычисление числа … n = 0; while (!done) { if (myid == 0) { printf("Enter the number of intervals: "); scanf("%d",&n); startwtime = MPI_Wtime(); } MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD); if (n == 0) done = 1; else { h = 1.0 / (double) n; sum = 0.0;
26 4.26 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Пример 2: Вычисление числа … for (i = myid + 1; i
27 4.27 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Пример 2: Вычисление числа … program main include 'mpif.h' double precision PI25DT parameter (PI25DT = d0) double precision mypi, pi, h, sum, x, f, a integer n, myid, numprocs, i, rc c function to integrate f(a) = 4.d0 / (1.d0 + a*a) call MPI_INIT( ierr ) call MPI_COMM_RANK( MPI_COMM_WORLD,myid,ierr ) call MPI_COMM_SIZE( MPI_COMM_WORLD,numprocs,ierr) print *, "Process ", myid, " of ", numprocs 10 if ( myid.eq. 0 ) then write(6,98) 98 format('Enter the number of intervals: ') read(5,99) n 99 format(i10) endif
28 4.28 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Пример 2: Вычисление числа … sizetype = 1 sumtype = 2 call MPI_BCAST(n,1,MPI_INTEGER,0,MPI_COMM_WORLD,ierr) c check for quit signal if ( n.le. 0 ) goto 30 c calculate the interval size h = 1.0d0/n sum = 0.0d0 do 20 i = myid+1, n, numprocs x = h * (dble(i) 0.5d0) sum = sum + f(x) 20 continue mypi = h * sum
29 4.29 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Пример 2: Вычисление числа … c collect all the partial sums call MPI_REDUCE(mypi,pi,1,MPI_DOUBLE_PRECISION, $ MPI_SUM,0,MPI_COMM_WORLD,ierr) c node 0 prints the answer if (myid.eq. 0) then write(6, 97) pi, abs(pi PI25DT) 97 format(' pi is approximately: ', F18.16, $ ' Error is: ', F18.16) endif goto call MPI_FINALIZE(rc) stop end
30 4.30 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Режимы передачи сообщений… Синхронный (synchronous) – send не возвращает управление, пока не начат receive Буферизуемый (buffered) - send возвращает управление после копирования сообщения в буфер передачи (работа с буфером MPI_Buffer_attatch, MPI_Buffer_detatch ) Стандартный (standard) – режим по умолчанию (синхронный или буферизуемый) По готовности (Ready) – может применяться для передачи данных при гарантированности, что операция приема уже активна (иначе send выдаст сообщение об ошибке)
31 4.31 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Режимы передачи сообщений… Для операции передачи возможны 8 различных вариантов 4 режима передачи 2 способа блокировки Для операции приема возможны 2 различных варианта 1 режим передачи (standard) 2 способа блокировки
32 4.32 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Режимы передачи сообщений… Система обозначений функций
33 4.33 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Проверка завершения операций… Блокирующая проверка int MPI_Wait( MPI_Request *request, MPI_Status *status); при завершении MPI_Wait -для MPI_Isend сообщение переслано или скопировано в буфер, -для MPI_Irecv сообщение скопировано в буфер процесса -request == MPI_REQUST_NULL -status такой же, как и в MPI_Irecv
34 4.34 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Проверка завершения операций Неблокирующая проверка int MPI_Test( MPI_Request *request, int *flag, MPI_Status *status); при завершении MPI_Test для незавершенной операции пересылки flag == 0
35 4.35 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Буферизация сообщений
36 4.36 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Самостоятельное задание. Скалярное умножение векторов Условия: Даны: вектор x, вектор y, p процессов Пусть длина векторов нацело делится на p Схема алгоритма: Ввод данных осуществляет процесс 0 Каждый процесс получает оба вектора Каждый процесс выполняет расчет над своей частью векторов, вычисляемой по рангу (x, y) = x i y i = x pi y pi Суммирование промежуточных результатов осуществляет нулевой процесс
37 4.37 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Вопросы для обсуждения Сложность параллельных программ, разработанных с использованием MPI Проблема отладки
38 4.38 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Заключение Технология разработки параллельных программ на основе интерфейса передачи данных Стандарт MPI как средство обеспечения мобильности параллельных программ Основные операции передачи сообщений
39 4.39 ННГУ, Н.Новгород, 2001 Параллельные Гергель В.П. Следующая тема Модели вычислений и методы анализа эффективности - 2
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.