🗊 Презентация Операции редукции – передача данных от всех процессов одному процессу

Категория: Образование
Нажмите для полного просмотра!
Операции редукции – передача данных от всех процессов одному процессу, слайд №1 Операции редукции – передача данных от всех процессов одному процессу, слайд №2 Операции редукции – передача данных от всех процессов одному процессу, слайд №3 Операции редукции – передача данных от всех процессов одному процессу, слайд №4 Операции редукции – передача данных от всех процессов одному процессу, слайд №5 Операции редукции – передача данных от всех процессов одному процессу, слайд №6 Операции редукции – передача данных от всех процессов одному процессу, слайд №7 Операции редукции – передача данных от всех процессов одному процессу, слайд №8 Операции редукции – передача данных от всех процессов одному процессу, слайд №9 Операции редукции – передача данных от всех процессов одному процессу, слайд №10 Операции редукции – передача данных от всех процессов одному процессу, слайд №11 Операции редукции – передача данных от всех процессов одному процессу, слайд №12 Операции редукции – передача данных от всех процессов одному процессу, слайд №13 Операции редукции – передача данных от всех процессов одному процессу, слайд №14 Операции редукции – передача данных от всех процессов одному процессу, слайд №15 Операции редукции – передача данных от всех процессов одному процессу, слайд №16 Операции редукции – передача данных от всех процессов одному процессу, слайд №17 Операции редукции – передача данных от всех процессов одному процессу, слайд №18 Операции редукции – передача данных от всех процессов одному процессу, слайд №19 Операции редукции – передача данных от всех процессов одному процессу, слайд №20 Операции редукции – передача данных от всех процессов одному процессу, слайд №21 Операции редукции – передача данных от всех процессов одному процессу, слайд №22 Операции редукции – передача данных от всех процессов одному процессу, слайд №23 Операции редукции – передача данных от всех процессов одному процессу, слайд №24 Операции редукции – передача данных от всех процессов одному процессу, слайд №25 Операции редукции – передача данных от всех процессов одному процессу, слайд №26 Операции редукции – передача данных от всех процессов одному процессу, слайд №27 Операции редукции – передача данных от всех процессов одному процессу, слайд №28 Операции редукции – передача данных от всех процессов одному процессу, слайд №29

Содержание

Вы можете ознакомиться и скачать презентацию на тему Операции редукции – передача данных от всех процессов одному процессу. Доклад-сообщение содержит 29 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1


Пример static long num_steps = 100000; void main (int argc, char *argv[]) { int i, my_id, numprocs; double x, pi, step, sum = 0.0 ; step =...
Описание слайда:
Пример static long num_steps = 100000; void main (int argc, char *argv[]) { int i, my_id, numprocs; double x, pi, step, sum = 0.0 ; step = 1.0/(double) num_steps ; MPI_Init(&argc, &argv) ; MPI_Comm_Rank(MPI_COMM_WORLD, &my_id) ; MPI_Comm_Size(MPI_COMM_WORLD, &numprocs) ; for (i=my_id+1; i

Слайд 2


Операции редукции – передача данных от всех процессов одному процессу int MPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype type,...
Описание слайда:
Операции редукции – передача данных от всех процессов одному процессу int MPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype type, MPI_Op op, int root, MPI_Comm comm) sendbuf – буфер с отправляемым сообщением, recvbuf – буфер для результирующего сообщения (только для процесса с рангом root), count – количество элементов в сообщениях, type – тип элементов сообщений, op - операция, которая должна быть выполнена над данными, root – ранг процесса, на котором должен быть получен результат, comm - коммуникатор, в рамках которого выполняется операция.

Слайд 3


Базовые типы данных MPI для С MPI_Datatype Тип данных MPI Тип C MPI_BYTE 8 битов для нетипиз.данных MPI_CHAR signed char MPI_DOUBLE double MPI_FLOAT...
Описание слайда:
Базовые типы данных MPI для С MPI_Datatype Тип данных MPI Тип C MPI_BYTE 8 битов для нетипиз.данных MPI_CHAR signed char MPI_DOUBLE double MPI_FLOAT float MPI_INT int MPI_LONG long MPI_LONG_DOUBLE long double MPI_PACKED упакованные данные MPI_SHORT short MPI_UNSIGNED_CHAR unsigned char MPI_UNSIGNED unsigned int MPI_UNSIGNED_LONG unsigned long MPI_UNSIGNED_SHORT unsigned short

Слайд 4


Базовые типы операций редукции MPI_Op Операция Описание MPI_MAX максимальное значение MPI_MIN минимальное значение MPI_SUM сумма значений MPI_PROD...
Описание слайда:
Базовые типы операций редукции MPI_Op Операция Описание MPI_MAX максимальное значение MPI_MIN минимальное значение MPI_SUM сумма значений MPI_PROD произведение значений MPI_LAND операция "И" (над значениями сообщений) MPI_BAND битовая операция "И” MPI_LOR операция "ИЛИ” MPI_BOR битовая операция "ИЛИ" MPI_LXOR операция исключающее "ИЛИ" MPI_BXOR операция исключающее "ИЛИ" MPI_MAXLOC макс. значение и соотв. индекс* MPI_MINLOC миним. значение и соотв. индекс *Как правило, это ранг процесса, предоставившего max (min) Перечень базовых операций м.б. дополнен пользовательскими.

Слайд 5


Допустимые типы операндов MPI_Op Операция Допустимые типы операндов MPI_MAX целые, вещественные MPI_MIN MPI_SUM MPI_PROD MPI_MAXLOC MPI_MINLOC...
Описание слайда:
Допустимые типы операндов MPI_Op Операция Допустимые типы операндов MPI_MAX целые, вещественные MPI_MIN MPI_SUM MPI_PROD MPI_MAXLOC MPI_MINLOC MPI_LAND целые MPI_LOR MPI_LXOR MPI_BAND целые, MPI_BYTE MPI_BOR MPI_BXOR

Слайд 6


Выполнение операций редукции Суть редукции - коллективная операция пересылки сообщений от всех процессов коммуникатора comm процессу root. Выполнение...
Описание слайда:
Выполнение операций редукции Суть редукции - коллективная операция пересылки сообщений от всех процессов коммуникатора comm процессу root. Выполнение редукции: операция op, выполняется над первыми элементами входного буфера sendbuf, результат посылается в первый элемент буфера приема recvbuf процесса root, аналогично для вторых элементов буфера и т.д. до count элементов.

Слайд 7


Схема выполнения редукции
Описание слайда:
Схема выполнения редукции

Слайд 8


Пример выполнения редукции для «+»
Описание слайда:
Пример выполнения редукции для «+»

Слайд 9


Синхронизация процессов Одновременное достижение всеми процессами коммуникатора определенной «точки» вычислений обеспечивает функция int...
Описание слайда:
Синхронизация процессов Одновременное достижение всеми процессами коммуникатора определенной «точки» вычислений обеспечивает функция int MPI_Barrier(MPI_Comm comm) Вызывается всеми процессами. При вызове блокирует выполнение процесса. Заблокированные процессы продолжат выполнение только после вызова всеми процессами коммуникатора.

Слайд 10


Передача данных от одного процесса всем процессам int MPI_Bcast(void *buf, int count, MPI_Datatype type, int root, MPI_Comm comm) buf – буфер с...
Описание слайда:
Передача данных от одного процесса всем процессам int MPI_Bcast(void *buf, int count, MPI_Datatype type, int root, MPI_Comm comm) buf – буфер с отправляемым сообщением (для процесса с рангом root) и буфер для приема результирующего сообщения для всех остальных процессов. count – количество элементов в сообщении, type – тип элементов сообщения, root – ранг процесса, выполняющего рассылку, comm - коммуникатор, в рамках которого выполняется передача данных.

Слайд 11


Улучшенная программа примера int main(int argc, char** argv) { int rank=-1, total_proc=-1; int n; double pi, mypi, h, sum, x, t1, t2; double PI25 =...
Описание слайда:
Улучшенная программа примера int main(int argc, char** argv) { int rank=-1, total_proc=-1; int n; double pi, mypi, h, sum, x, t1, t2; double PI25 = 3.1415926535897932384626433832795; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD,&rank); MPI_Comm_size(MPI_COMM_WORLD,&total_proc); //While - создание повторяющегося диалога while (1) { if (rank == 0) { cout

Слайд 12


MPI_Bcast(&n,1, MPI_INT, 0, MPI_COMM_WORLD); if (n == 0) {break;} else { h = 1.0/(double) n; sum = 0.0; //Каждый процесс вычисляет свою сумму for (...
Описание слайда:
MPI_Bcast(&n,1, MPI_INT, 0, MPI_COMM_WORLD); if (n == 0) {break;} else { h = 1.0/(double) n; sum = 0.0; //Каждый процесс вычисляет свою сумму for ( i=rank+1; i

Слайд 13


if (rank == 0) { //Вторая засечка времени на головном процессоре t2 = MPI_Wtime(); cout
Описание слайда:
if (rank == 0) { //Вторая засечка времени на головном процессоре t2 = MPI_Wtime(); cout

Слайд 14


MPI. Операции передачи сообщений Операции, поддерживаемые MPI функциями: Парные (point-to-point) – для взаимодействия между двумя процессами....
Описание слайда:
MPI. Операции передачи сообщений Операции, поддерживаемые MPI функциями: Парные (point-to-point) – для взаимодействия между двумя процессами. Коллективные (collective) – для одновременного взаимодействия нескольких процессов.

Слайд 15


Функция передачи сообщения int MPI_Send(void *buf, int count, MPI_Datatype type, int dest, int tag, MPI_Comm comm) buf – буфер с отправляемым...
Описание слайда:
Функция передачи сообщения int MPI_Send(void *buf, int count, MPI_Datatype type, int dest, int tag, MPI_Comm comm) buf – буфер с отправляемым сообщением, count – количество элементов в сообщении, type – тип элементов сообщения, dest – ранг процесса, которому отправляется сообщение, tag – значение (тэг), используемое для идентификации сообщения и фильтрации сообщений при приеме, comm - коммуникатор, в рамках которого выполняется операция

Слайд 16


Режим отправки – стандартный (standard) Вызов функции обеспечивает режим standard: На время выполнения функции процесс-отправитель сообщения...
Описание слайда:
Режим отправки – стандартный (standard) Вызов функции обеспечивает режим standard: На время выполнения функции процесс-отправитель сообщения блокируется. После завершения выполнения функции буфер может использоваться повторно. Состояние отправленного сообщения может быть различным – сообщение может: располагаться на процессе-отправителе, находиться в состоянии передачи, храниться на процессе-получателе, быть принято процессом-получателем при помощи функции MPI_Recv.

Слайд 17


Дополнительные режимы передачи сообщений Синхронный режим (Synchronous)–завершение функции отправки сообщения происходит только при получении от...
Описание слайда:
Дополнительные режимы передачи сообщений Синхронный режим (Synchronous)–завершение функции отправки сообщения происходит только при получении от процесса-получателя подтверждения о начале приема отправленного сообщения. Функция отправки сообщения в синхронном режиме - MPI_Ssend Режим передачи по готовности (Ready) –может быть использован только, если операция приема сообщения уже инициирована. Буфер сообщения после завершения функции отправки сообщения может быть повторно использован. Функция отправки сообщения в режиме по готовности - MPI_Rsend

Слайд 18


Дополнительные режимы передачи сообщений Буферизованный режим (Buffered) – для копирования отправляемых сообщений используются дополнительные...
Описание слайда:
Дополнительные режимы передачи сообщений Буферизованный режим (Buffered) – для копирования отправляемых сообщений используются дополнительные системные буферы. Функция отправки сообщения завершается сразу же после копирования сообщения в буфер. Функция отправки сообщения в буферизованном режиме - MPI_Bsend

Слайд 19


MPI буфер памяти Для использования буферизованного режима должен быть создан и передан MPI буфер памяти: int MPI_Buffer_attach(void *buf, int size),...
Описание слайда:
MPI буфер памяти Для использования буферизованного режима должен быть создан и передан MPI буфер памяти: int MPI_Buffer_attach(void *buf, int size), где buf – буфер памяти для буферизации сообщений, size – размер буфера. После завершения работы с буфером он должен быть отключен от MPI при помощи функции: int MPI_Buffer_detach(void *buf, int *size) size – возвращаемый размер буфера

Слайд 20


Практическое использование режимов передачи Режим передачи по готовности формально – наиболее быстрый, но сложно гарантировать готовность операции...
Описание слайда:
Практическое использование режимов передачи Режим передачи по готовности формально – наиболее быстрый, но сложно гарантировать готовность операции приема  используется редко. Стандартный и буферизованный режимы - быстрые, но могут приводить к большим расходам памяти  рекомендуются для передачи коротких сообщений, Синхронный режим – наиболее медленный, т.к. требует подтверждения приема. Но этот режим наиболее надежен  рекомендуется для передачи длинных сообщений.

Слайд 21


Функция приема сообщения int MPI_Recv(void *buf, int count, MPI_Datatype type, int source, int tag, MPI_Comm comm, MPI_Status *status) buf – буфер...
Описание слайда:
Функция приема сообщения int MPI_Recv(void *buf, int count, MPI_Datatype type, int source, int tag, MPI_Comm comm, MPI_Status *status) buf – буфер для приема сообщения, count – количество элементов в сообщении, type – тип элементов сообщения, source– ранг процесса, от которого д.б. выполнен прием сообщения, tag– тэг сообщения, которое д.б. принято процессом, comm - коммуникатор, в рамках которого выполняется операция, status - указатель на переменную с результатами выполнения операции приема.

Слайд 22


Требования к приему сообщения Буфер памяти должен быть достаточным для приема сообщения. При нехватке памяти часть сообщения будет потеряна. В коде...
Описание слайда:
Требования к приему сообщения Буфер памяти должен быть достаточным для приема сообщения. При нехватке памяти часть сообщения будет потеряна. В коде завершения функции будет зафиксирована ошибка переполнения. Типы элементов передаваемого и принимаемого сообщения должны совпадать. Для приема сообщения от любого процесса-отправителя параметру source устанавливается значение MPI_ANY_SOURCE, с любым тэгом параметру tag устанавливается значение MPI_ANY_TAG.

Слайд 23


Требования к приему сообщения Параметр status позволяет определить для принятого сообщения: status.MPI_SOURCE – ранг процесса-отправителя принятого...
Описание слайда:
Требования к приему сообщения Параметр status позволяет определить для принятого сообщения: status.MPI_SOURCE – ранг процесса-отправителя принятого сообщения, status.MPI_TAG –тэг принятого сообщения. Функция MPI_Get_count(MPI_Status*status, MPI_Datatypetype, int *count) возвращает в переменной count количество элементов типа type в принятом сообщении.

Слайд 24


Требования к приему сообщения Прием сообщения м.б. инициирован до момента, в момент, после момента начала отправки сообщения. Вызов MPI_Recv не...
Описание слайда:
Требования к приему сообщения Прием сообщения м.б. инициирован до момента, в момент, после момента начала отправки сообщения. Вызов MPI_Recv не обязан согласовываться со временем вызова соответствующей функции MPI_Recv Функция MPI_Recv – блокирующая для процесса-получателя, его выполнение приостанавливается до завершения работы функции  если ожидаемое для приема сообщение будет отсутствовать, выполнение параллельной программы будет блокировано. По завершении MPI_Recv в buf будет размещено принятое сообщение.

Слайд 25


Неблокирующее выполнение передачи данных Блокирующие функции - приостанавливают выполнение процессов (например, вычислений) до момента завершения...
Описание слайда:
Неблокирующее выполнение передачи данных Блокирующие функции - приостанавливают выполнение процессов (например, вычислений) до момента завершения работы вызванных функций. Все рассмотренные функции для парных операций передачи и приема являются блокирующими. Если вычисления (др. операции) не зависят от передаваемых данных, то блокировка не нужна.

Слайд 26


Неблокирующее выполнение передачи данных Неблокирующие функции обмена данными выполняются без блокировки процессов для совмещения процессов передачи...
Описание слайда:
Неблокирующее выполнение передачи данных Неблокирующие функции обмена данными выполняются без блокировки процессов для совмещения процессов передачи сообщений и вычислений. Минус – более сложны для использования. Плюс – могут уменьшить потери эффективности параллельных вычислений из-за медленных коммуникационных операций.

Слайд 27


Неблокирующие функции int MPI_Isend(void*buf, int count, MPI_Datatypetype, int dest,int tag, MPI_Commcomm, MPI_Request*request); int...
Описание слайда:
Неблокирующие функции int MPI_Isend(void*buf, int count, MPI_Datatypetype, int dest,int tag, MPI_Commcomm, MPI_Request*request); int MPI_Issend(void*buf, int count, MPI_Datatypetype, int dest,int tag, MPI_Commcomm, MPI_Request*request); int MPI_Ibsend(void*buf, int count, MPI_Datatypetype, int dest,int tag, MPI_Commcomm, MPI_Request*request); int MPI_Irsend(void*buf, int count, MPI_Datatypetype, int dest, int tag, MPI_Commcomm, MPI_Request*request); int MPI_Irecv(void*buf, int count, MPI_Datatypetype, int source, int tag, MPI_Commcomm, MPI_Request*request);

Слайд 28


Параметры функций request - определяется функцией перед завершением выполнения и может использоваться для проверки в неблокирующей функции int...
Описание слайда:
Параметры функций request - определяется функцией перед завершением выполнения и может использоваться для проверки в неблокирующей функции int MPI_Test( MPI_Request*request, int *flag, MPI_status*status), request-дескриптор операции, определенный при вызове неблокирующей функции, flag-результат проверки(true, если операция завершена), status-результат выполнения операции (только для завершенной операции)

Слайд 29


Пример Условная схема вычислений и выполнения неблокирующей операции передачи сообщения: MPI_Isend(buf, count, type, dest, tag, comm, &request); … do...
Описание слайда:
Пример Условная схема вычислений и выполнения неблокирующей операции передачи сообщения: MPI_Isend(buf, count, type, dest, tag, comm, &request); … do { … MPI_Test(&request,&flag,&status); } while(!flag);



Похожие презентации
Mypresentation.ru
Загрузить презентацию