🗊 Презентация Интерфейс передачи сообщений MPI

Нажмите для полного просмотра!
Интерфейс передачи сообщений MPI, слайд №1 Интерфейс передачи сообщений MPI, слайд №2 Интерфейс передачи сообщений MPI, слайд №3 Интерфейс передачи сообщений MPI, слайд №4 Интерфейс передачи сообщений MPI, слайд №5 Интерфейс передачи сообщений MPI, слайд №6 Интерфейс передачи сообщений MPI, слайд №7 Интерфейс передачи сообщений MPI, слайд №8 Интерфейс передачи сообщений MPI, слайд №9 Интерфейс передачи сообщений MPI, слайд №10 Интерфейс передачи сообщений MPI, слайд №11 Интерфейс передачи сообщений MPI, слайд №12 Интерфейс передачи сообщений MPI, слайд №13 Интерфейс передачи сообщений MPI, слайд №14 Интерфейс передачи сообщений MPI, слайд №15 Интерфейс передачи сообщений MPI, слайд №16 Интерфейс передачи сообщений MPI, слайд №17 Интерфейс передачи сообщений MPI, слайд №18 Интерфейс передачи сообщений MPI, слайд №19 Интерфейс передачи сообщений MPI, слайд №20 Интерфейс передачи сообщений MPI, слайд №21 Интерфейс передачи сообщений MPI, слайд №22 Интерфейс передачи сообщений MPI, слайд №23 Интерфейс передачи сообщений MPI, слайд №24 Интерфейс передачи сообщений MPI, слайд №25 Интерфейс передачи сообщений MPI, слайд №26 Интерфейс передачи сообщений MPI, слайд №27 Интерфейс передачи сообщений MPI, слайд №28 Интерфейс передачи сообщений MPI, слайд №29 Интерфейс передачи сообщений MPI, слайд №30 Интерфейс передачи сообщений MPI, слайд №31 Интерфейс передачи сообщений MPI, слайд №32 Интерфейс передачи сообщений MPI, слайд №33 Интерфейс передачи сообщений MPI, слайд №34 Интерфейс передачи сообщений MPI, слайд №35 Интерфейс передачи сообщений MPI, слайд №36 Интерфейс передачи сообщений MPI, слайд №37 Интерфейс передачи сообщений MPI, слайд №38 Интерфейс передачи сообщений MPI, слайд №39 Интерфейс передачи сообщений MPI, слайд №40 Интерфейс передачи сообщений MPI, слайд №41 Интерфейс передачи сообщений MPI, слайд №42 Интерфейс передачи сообщений MPI, слайд №43

Содержание

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

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


Слайд 1


Интерфейс передачи сообщений MPI
Описание слайда:
Интерфейс передачи сообщений MPI

Слайд 2


Стандарт механизма передачи сообщений MPI (Message Passing Interface) был принят в 1994 г. Стандарт готовился с 1992 по 1994 годы. группой Message...
Описание слайда:
Стандарт механизма передачи сообщений MPI (Message Passing Interface) был принят в 1994 г. Стандарт готовился с 1992 по 1994 годы. группой Message Passing Interface Forum. Основная цель, которую ставили перед собой разработчики MPI – обеспечение полной независимости программ, написанных с использованием библиотеки MPI, от архитектуры многопроцессорной системы. Стандарт механизма передачи сообщений MPI (Message Passing Interface) был принят в 1994 г. Стандарт готовился с 1992 по 1994 годы. группой Message Passing Interface Forum. Основная цель, которую ставили перед собой разработчики MPI – обеспечение полной независимости программ, написанных с использованием библиотеки MPI, от архитектуры многопроцессорной системы. Отметим, что интерфейс громоздок и сложен для прикладного программиста. Интерфейс также сложен для реализации. Поэтому практически отсутствуют реализации MPI, в которых в полной мере обеспечивается совмещение обменов с вычислениями. В 1997 появился проект стандарта MPI-2, который выглядит еще более громоздким и трудным для полной реализации. Реализацией стандарта MPI-2 является библиотека MPI-2.

Слайд 3


Общие сведения о MPI стандарт MPI не стандартизует реализацию. Поставщики многопроцессорных вычислительных систем, как правило, предлагают свои...
Описание слайда:
Общие сведения о MPI стандарт MPI не стандартизует реализацию. Поставщики многопроцессорных вычислительных систем, как правило, предлагают свои реализации стандарта MPI для своих машин. Однако правильная MPI-программа (программа, написанная с использованием MPI) должна одинаково выполняться на всех реализациях. Существуют стандартные "привязки" MPI к языкам С/С++, Fortran 77/90, а также бесплатные и коммерческие реализации MPI почти для всех суперкомпьютерных платформ, а также для UNIX и Windows NT вычислительных кластеров. Переносимой версией библиотеки МРI является библиотека МРIСН. MPI-программа представляет собой набор независимых процессов, каждый из которых выполняет свою собственную программу, написанную на каком-либо языке высокого уровня. Процессы MPI-программы взаимодействуют друг с другом посредством передачи сообщений путем вызова коммуникационных функций MPI-библиотеки. Как правило, каждый процесс выполняется в своем собственном адресном пространстве, однако допускается и режим разделения памяти.

Слайд 4


MPI-библиотека реализована в виде примерно 130 функций, в число которых входят следующие основные наборы функций: MPI-библиотека реализована в виде...
Описание слайда:
MPI-библиотека реализована в виде примерно 130 функций, в число которых входят следующие основные наборы функций: MPI-библиотека реализована в виде примерно 130 функций, в число которых входят следующие основные наборы функций: функции для работы с группами процессов и коммуникаторами; функции, реализующие коммуникационные операции типа точка-точка; функции, реализующие коллективные коммуникационные операции. Набор функций библиотеки MPI далеко выходит за рамки набора функций, минимально необходимого для поддержки механизма передачи сообщений. Почти любая MPI-программа может быть написана с использованием всего 6 MPI-функций, а достаточно полную и удобную среду программирования составляет набор из 24 функций.

Слайд 5


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

Слайд 6


Основными понятиями стандарта MPI являются: процесс; группа процессов; коммуникатор. Процесс – исполнение программы на одном процессоре. Процесс...
Описание слайда:
Основными понятиями стандарта MPI являются: процесс; группа процессов; коммуникатор. Процесс – исполнение программы на одном процессоре. Процесс может содержать последовательный код, параллельные ветви, операции ввода/вывода и пр. Группа процессов – совокупность процессов, каждый из которых имеет внутри группы уникальное имя. Процессы в группе взаимодействуют посредством коммуникатора группы. Процессы в группе имеют номер от 0 до (n-1), где n – количество процессов в группе. Коммуникатор реализует обмены данными между процессами и их синхронизацию. Для прикладной программы коммуникатор выступает в качестве коммуникационной среды. Различают внутригрупповые коммуникаторы (intra) и межгрупповые коммуникаторы (inter). Сообщения, использующие разные коммуникаторы, не оказывают влияния друг на друга и не взаимодействуют.

Слайд 7


Программа "Hello world! #include #include void main(int argc , char *argv[]) { MPI_Init( &argc, &argv ); printf("Hello world!");...
Описание слайда:
Программа "Hello world! #include #include void main(int argc , char *argv[]) { MPI_Init( &argc, &argv ); printf("Hello world!"); MPI_Finalize(); }

Слайд 8


Модель параллельной программы в MPI В модели программирования MPI параллельная программа при запуске порождает несколько процессов, взаимодействующих...
Описание слайда:
Модель параллельной программы в MPI В модели программирования MPI параллельная программа при запуске порождает несколько процессов, взаимодействующих между собой с помощью сообщений. Совокупность всех процессов, составляющих параллельное приложение, или их части, описывается специальной структурой, которая называется коммуникатором (областью взаимодействия). Каждому процессу в области взаимодействия назначается уникальный числовой идентификатор - ранг, значение которого от 0 до np – 1 (np - число процессов).

Слайд 9


Структура программы, написанной по схеме хозяин/работник, приведена ниже. Структура программы, написанной по схеме хозяин/работник, приведена ниже....
Описание слайда:
Структура программы, написанной по схеме хозяин/работник, приведена ниже. Структура программы, написанной по схеме хозяин/работник, приведена ниже. if (ранг процесса = рангу мастер-процесса) { код мастер-процесса } else { код подчиненного процесса (подчиненных процессов) } Каждый экземпляр программы уже в процессе своего выполнения определяет, является ли он мастер-процессом. Затем, в зависимости от результата этой проверки, выполняется одна из ветвей условного оператора. Первая ветвь соответствует мастер-задаче, а вторая - подчиненной задаче. Способы взаимодействия между подзадачами определяются программистом. Перед использованием процедур передачи сообщений программа должна подключиться к системе обмена сообщениями.

Слайд 10


Сообщения Сообщение содержит пересылаемые данные и служебную информацию. Для того, чтобы передать сообщение, необходимо указать: • ранг...
Описание слайда:
Сообщения Сообщение содержит пересылаемые данные и служебную информацию. Для того, чтобы передать сообщение, необходимо указать: • ранг процесса-отправителя сообщения; • адрес, по которому размещаются пересылаемые данные процесса-отправителя; • тип пересылаемых данных; • количество данных; • ранг процесса, который должен получить сообщение; • адрес, по которому должны быть размещены данные процессом-получателем. • тег сообщения; • идентификатор коммуникатора, описывающего область взаимодействия, внутри которой происходит обмен.

Слайд 11


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

Слайд 12


Разновидности обменов сообщениями В MPI реализованы разные виды обменов. Прежде всего, это двухточечные (задействованы только два процесса) и...
Описание слайда:
Разновидности обменов сообщениями В MPI реализованы разные виды обменов. Прежде всего, это двухточечные (задействованы только два процесса) и коллективные (задействованы более двух процессов). Двухточечные обмены используются для организации локальных и неструктурированных коммуникаций. При выполнении глобальных операций используются коллективные обмены. Асинхронные коммуникации реализуются с помощью запросов о получении сообщений. Имеется несколько разновидностей двухточечного обмена. • Блокирующие прием/передача - приостанавливают выполнение процесса на время приема сообщения. • Неблокирующие прием/передача - выполнение процесса продолжается в фоновом режиме, а программа в нужный момент может запросить подтверждение завершения приема сообщения. • Cинхронный обмен - сопровождается уведомлением об окончании приема сообщения. • Асинхронный обмен - уведомлением не сопровождается.

Слайд 13


MPI & C/C++ В программах на языке C имена функций имеют вид Класс_действие_подмножество или Класс_действие. В C++ подпрограмма является методом для...
Описание слайда:
MPI & C/C++ В программах на языке C имена функций имеют вид Класс_действие_подмножество или Класс_действие. В C++ подпрограмма является методом для определенного класса, имя имеет в этом случае вид MPI::Класс::действие_подмножество. Для некоторых действий введены стандартные наименования: Create - создание нового объекта, Get – получение информации об объекте, Set - установка параметров объекта, Delete – удаление информации, Is - запрос о том, имеет ли объект указанное свойство. Имена констант MPI записываются в верхнем регистре. Их описания находятся в заголовочном файле mpi.h. Входные параметры функций передаются по значению, а выходные (и INOUT) — по ссылке. Соответствие типов MPI стандартным типам языка C приведено в табл.

Слайд 14


Интерфейс передачи сообщений MPI, слайд №14
Описание слайда:

Слайд 15


Коды завершения В MPI приняты стандартные соглашения о кодах завершения вызовов подпрограмм. Так, например, возвращаются значения MPI_SUCCESS - при...
Описание слайда:
Коды завершения В MPI приняты стандартные соглашения о кодах завершения вызовов подпрограмм. Так, например, возвращаются значения MPI_SUCCESS - при успешном завершении вызова и MPI_ERR_OTHER - обычно при попытке повторного вызова MPI_Init. Вместо числовых кодов в программах обычно используют специальные именованные константы: • MPI_ERR_BUFFER - неправильный указатель на буфер; • MPI_ERR_COMM - неправильный коммуникатор; • MPI_ERR_RANK - неправильный ранг; • MPI_ERR_OP - неправильная операция; • MPI_ERR_ARG - неправильный аргумент; • MPI_ERR_UNKNOWN - неизвестная ошибка; • MPI_ERR_TRUNCATE - сообщение обрезано при приеме; • MPI_ERR_INTERN - внутренняя ошибка. Обычно возникает, если системе не хватает памяти.

Слайд 16


Коммуникатор представляет собой структуру, содержащую либо все процессы, исполняющиеся в рамках данного приложения, либо их подмножество....
Описание слайда:
Коммуникатор представляет собой структуру, содержащую либо все процессы, исполняющиеся в рамках данного приложения, либо их подмножество. Коммуникатор представляет собой структуру, содержащую либо все процессы, исполняющиеся в рамках данного приложения, либо их подмножество. Процессы, принадлежащие одному и тому же коммуникатору, наделяются общим контекстом обмена. Операции обмена возможны только между процессами, связанными с общим контекстом, то есть, принадлежащие одному и тому же коммуникатору. Каждому коммуникатору присваивается идентификатор. В MPI есть несколько стандартных коммуникаторов: • MPI_COMM_WORLD – включает все процессы параллельной программы; • MPI_COMM_SELF – включает только данный процесс; • MPI_COMM_NULL – пустой коммуникатор, не содержит ни одного процесса. В MPI имеются процедуры, позволяющие создавать новые коммуникаторы, содержащие подмножества процессов.

Слайд 17


Коммуникатор и ранги
Описание слайда:
Коммуникатор и ранги

Слайд 18


Функции MPI int MPI_Init(int *argc, char **argv) Подключение к MPI. Данный вызов предшествует всем прочим вызовам подпрограмм MPI. int MPI_Finalize()...
Описание слайда:
Функции MPI int MPI_Init(int *argc, char **argv) Подключение к MPI. Данный вызов предшествует всем прочим вызовам подпрограмм MPI. int MPI_Finalize() Завершение работы с MPI. После вызова данной подпрограммы нельзя вызывать подпрограммы MPI. MPI_Finalize должны вызывать все процессы перед завершением своей работы.

Слайд 19


int MPI_Comm_size(MPI_Comm comm, int *size) int MPI_Comm_size(MPI_Comm comm, int *size) Определение размера области взаимодействия. Входные...
Описание слайда:
int MPI_Comm_size(MPI_Comm comm, int *size) int MPI_Comm_size(MPI_Comm comm, int *size) Определение размера области взаимодействия. Входные параметры: • comm - коммуникатор. Выходные параметры: • size - количество процессов в области взаимодействия. int MPI_Comm_rank(MPI_Comm comm, int *rank) Определение ранга процесса. Входные параметры: • comm - коммуникатор. Выходные параметры: • rank - ранг процесса в области взаимодействия.

Слайд 20


Двухточечный обмен
Описание слайда:
Двухточечный обмен

Слайд 21


Стандартная блокирующая передача Стандартная блокирующая передача int MPI_Send(void *buf, int count, MPI_Datatype datatype, int dest, int tag,...
Описание слайда:
Стандартная блокирующая передача Стандартная блокирующая передача int MPI_Send(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) Входные параметры: • buf - адрес первого элемента в буфере передачи • count - количество элементов в буфере передачи; • datatype - тип MPI каждого пересылаемого элемента; • dest - ранг процесса-получателя сообщения (целое число от 0 до n – 1, где n ¾ число процессов в области взаимодействия); • tag - тег сообщения; • comm - коммуникатор; Возвращает код завершения.

Слайд 22


Стандартный блокирующий прием Стандартный блокирующий прием int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm...
Описание слайда:
Стандартный блокирующий прием Стандартный блокирующий прием int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status) Входные параметры: • count - максимальное количество элементов в буфере приема. Фактическое их количество можно определить с помощью подпрограммы MPI_Get_count; • datatype - тип принимаемых данных. Напомним о необходимости соблюдения соответствия типов аргументов подпрограмм приема и передачи; • source - ранг источника. Можно использовать специальное значение MPI_ANY_SOURCE, соответствующее произвольному значению ранга. В программировании идентификатор, отвечающий произвольному значению параметра, часто называют "джокером". Этот термин будем использовать и мы; • tag - тег сообщения или "джокер" MPI_ANY_TAG, соответствующий произвольному значению тега; • comm - коммуникатор. При указании коммуникатора "джокеры" использовать нельзя. Выходные параметры: • buf - начальный адрес буфера приема. Его размер должен быть достаточным, чтобы разместить принимаемое сообщение, иначе при выполнении приема произойдет сбой возникнет ошибка переполнения; • status - статус обмена. Если сообщение меньше, чем буфер приема, изменяется содержимое лишь тех ячеек памяти буфера, которые относятся к сообщению.

Слайд 23


Send-Recv example #include int main(int argc, char* argv[]){ int rank, buf[256]; MPI_Status status; MPI_Init(&argc, &argv);...
Описание слайда:
Send-Recv example #include int main(int argc, char* argv[]){ int rank, buf[256]; MPI_Status status; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); if(rank == 0){ // init buffer MPI_Send(buf, 256, MPI_INT, 1, 10, MPI_COMM_WORLD); } if(rank == 1){ MPI_Recv(buf, 256, MPI_INT, 0, 10, MPI_COMM_WORLD, &status); // process buffer } MPI_Finalize(); return 0; }

Слайд 24


Wildcard Получить сообщение от любого источника — source = MPI_ANY_SOURCE Получить сообщение с любым tag — tag = MPI_ANY_TAG Реальные значения source...
Описание слайда:
Wildcard Получить сообщение от любого источника — source = MPI_ANY_SOURCE Получить сообщение с любым tag — tag = MPI_ANY_TAG Реальные значения source и tag возвращаются в структуре status.

Слайд 25


Определение размера полученного сообщения (count) Определение размера полученного сообщения (count) int MPI_Get_count(MPI_Status *status,...
Описание слайда:
Определение размера полученного сообщения (count) Определение размера полученного сообщения (count) int MPI_Get_count(MPI_Status *status, MPI_Datatype datatype, int*count) Аргумент datatype должен соответствовать типу данных, указанному в операции передачи сообщения. Буферизованный обмен int MPI_Bsend(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) Параметры совпадают с параметрами подпрограммы MPI_Send. Создание буфера int MPI_Buffer_attach(void *buf, size) Выходной параметр: • buf - буфер размером size байтов. Роль буфера может играть массив. Этот массив должен быть описан в программе, его не следует использовать для других целей (например, в качестве первого аргумента подпрограммы MPI_Bsend). За один раз к процессу может быть подключен только один буфер. Отключение буфера int MPI_Buffer_detach(void *buf, int *size) Выходные параметры: • buf - адрес; • size - размер отключаемого буфера. Вызов данной подпрограммы блокирует работу процесса до тех пор, пока все сообщения, находящиеся в буфере, не будут обработаны. В языке C данный вызов не освобождает автоматически память, отведенную для буфера.

Слайд 26


Прием и передача данных с блокировкой Прием и передача данных с блокировкой int MPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype, int...
Описание слайда:
Прием и передача данных с блокировкой Прием и передача данных с блокировкой int MPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype, int dest, int sendtag, void *recvbuf, int recvcount, MPI_Datatype recvtype, int source, int recvtag, MPI_Comm comm, MPI_Status *status) Входные параметры: • sendbuf - начальный адрес буфера передачи; • sendcount - количество передаваемых элементов; • sendtype - тип передаваемых элементов; • dest - ранг адресата; • sendtag - тег передаваемого сообщения; • recvbuf - начальный адрес буфера приема; • recvcount - количество элементов в буфере приема; • recvtype - тип элементов в буфере приема; • source - ранг источника; • recvtag - тег принимаемого сообщения; • comm - коммуникатор. Выходные параметры: • recvbuf - начальный адрес буфера приема; • status - статус операции приема. Прием, и передача используют один и тот же коммуникатор. Буферы передачи и приема не должны пересекаться, у них может быть разный размер, типы пересылаемых и принимаемых данных также могут различаться.

Слайд 27


Неблокирующие операции Выполнение в три этапа: ● Инициализация – немедленный выход – функции начинаются с MPI_I… ● Выполняем какую-то работу ●...
Описание слайда:
Неблокирующие операции Выполнение в три этапа: ● Инициализация – немедленный выход – функции начинаются с MPI_I… ● Выполняем какую-то работу ● Ожидание завершения

Слайд 28


int MPI_Isend(void *buf, int count, MPI_Datatype datatype, int dest, int msgtag, MPI_Comm comm, MPI_Request *request) int MPI_Isend(void *buf, int...
Описание слайда:
int MPI_Isend(void *buf, int count, MPI_Datatype datatype, int dest, int msgtag, MPI_Comm comm, MPI_Request *request) int MPI_Isend(void *buf, int count, MPI_Datatype datatype, int dest, int msgtag, MPI_Comm comm, MPI_Request *request) buf - адрес начала буфера посылки сообщения count - число передаваемых элементов в сообщении datatype - тип передаваемых элементов dest - номер процесса-получателя msgtag - идентификатор сообщения comm - идентификатор группы OUT request - идентификатор асинхронной передачи Передача сообщения, аналогичная MPI_Send, однако возврат из подпрограммы происходит сразу после инициализации процесса передачи без ожидания обработки всего сообщения, находящегося в буфере buf. Это означает, что нельзя повторно использовать данный буфер для других целей без получения дополнительной информации о завершении данной посылки. Окончание процесса передачи (т.е. того момента, когда можно переиспользовать буфер bufбез опасения испортить передаваемое сообщение) можно определить с помощью параметра request и процедур MPI_Wait и MPI_Test. Сообщение, отправленное любой из процедур MPI_Send и MPI_Isend, может быть принято любой из процедур MPI_Recv и MPI_Irecv.

Слайд 29


int MPI_Irecv(void *buf, int count, MPI_Datatype datatype, int source, int msgtag, MPI_Comm comm, MPI_Request *request) int MPI_Irecv(void *buf, int...
Описание слайда:
int MPI_Irecv(void *buf, int count, MPI_Datatype datatype, int source, int msgtag, MPI_Comm comm, MPI_Request *request) int MPI_Irecv(void *buf, int count, MPI_Datatype datatype, int source, int msgtag, MPI_Comm comm, MPI_Request *request) OUT buf - адрес начала буфера приема сообщения count - максимальное число элементов в принимаемом сообщении datatype - тип элементов принимаемого сообщения source - номер процесса-отправителя msgtag - идентификатор принимаемого сообщения comm - идентификатор группы OUT request - идентификатор асинхронного приема сообщения Прием сообщения, аналогичный MPI_Recv, однако возврат из подпрограммы происходит сразу после инициализации процесса приема без ожидания получения сообщения в буфере buf. Окончание процесса приема можно определить с помощью параметра request и функций MPI_Wait и MPI_Test.

Слайд 30


int MPI_Wait( MPI_Request *request, MPI_Status *status) int MPI_Wait( MPI_Request *request, MPI_Status *status) request - идентификатор асинхронного...
Описание слайда:
int MPI_Wait( MPI_Request *request, MPI_Status *status) int MPI_Wait( MPI_Request *request, MPI_Status *status) request - идентификатор асинхронного приема или передачи OUT status - параметры сообщения Ожидание завершения асинхронных процедур MPI_Isend или MPI_Irecv, ассоциированных с идентификатором request. В случае приема, атрибуты и длину полученного сообщения можно определить обычным образом с помощью параметра status. int MPI_Waitall( int count, MPI_Request *requests, MPI_Status *statuses) int MPI_Waitany( int count, MPI_Request *requests, int *index, MPI_Status *status) count - число идентификаторов requests - массив идентификаторов асинхронного приема или передачи OUT index - номер завершенной операции обмена OUT status(es) - параметры сообщений

Слайд 31


int MPI_Waitsome( int incount, MPI_Request *requests, int *outcount, int *indexes, MPI_Status *statuses) int MPI_Waitsome( int incount, MPI_Request...
Описание слайда:
int MPI_Waitsome( int incount, MPI_Request *requests, int *outcount, int *indexes, MPI_Status *statuses) int MPI_Waitsome( int incount, MPI_Request *requests, int *outcount, int *indexes, MPI_Status *statuses) incount - число идентификаторов requests - массив идентификаторов асинхронного приема или передачи OUT outcount - число идентификаторов завершившихся операций обмена OUT indexes - массив номеров завершившихся операции обмена OUT statuses - параметры завершившихся сообщений Выполнение процесса блокируется до тех пор, пока по крайней мере одна из операций обмена, ассоциированных с указанными идентификаторами, не будет завершена. Параметр outcount содержит число завершенных операций, а первые outcount элементов массива indexes содержат номера элементов массива requests с их идентификаторами. Первые outcount элементов массива statuses содержат параметры завершенных операций.

Слайд 32


int MPI_Test( MPI_Request *request, int *flag, MPI_Status *status) int MPI_Test( MPI_Request *request, int *flag, MPI_Status *status) request -...
Описание слайда:
int MPI_Test( MPI_Request *request, int *flag, MPI_Status *status) int MPI_Test( MPI_Request *request, int *flag, MPI_Status *status) request - идентификатор асинхронного приема или передачи OUT flag - признак завершенности операции обмена OUT status - параметры сообщения Проверка завершенности асинхронных процедур MPI_Isend или MPI_Irecv, ассоциированных с идентификатором request. В параметре flag возвращает значение 1, если соответствующая операция завершена, и значение 0 в противном случае. Если завершена процедура приема, то атрибуты и длину полученного сообщения можно определить обычным образом с помощью параметра status. int MPI_Testall( int count, MPI_Request *requests, int *flag, MPI_Status *statuses) int MPI_Testany(int count, MPI_Request *requests, int *index, int *flag, MPI_Status *status)

Слайд 33


#include "mpi.h“ #include "mpi.h“ #include int main(int argc, char *argv[]) { int myid, numprocs, left, right; int buffer[10], buffer2[10];...
Описание слайда:
#include "mpi.h“ #include "mpi.h“ #include int main(int argc, char *argv[]) { int myid, numprocs, left, right; int buffer[10], buffer2[10]; MPI_Request request, request2; MPI_Status status; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD, &numprocs); MPI_Comm_rank(MPI_COMM_WORLD, &myid); right = (myid + 1) % numprocs; left = myid - 1; if (left < 0) left = numprocs - 1; MPI_Irecv(buffer, 10, MPI_INT, left, 123, MPI_COMM_WORLD, &request); MPI_Isend(buffer2, 10, MPI_INT, right, 123, MPI_COMM_WORLD, &request2); MPI_Wait(&request, &status); MPI_Wait(&request2, &status); MPI_Finalize(); return 0; }

Слайд 34


Коллективные операции Взаимодействует группа процессов. ● Вовлечены все процессы в коммуникаторе ● Примеры: – Синхронизация (барьер). – Broadcast,...
Описание слайда:
Коллективные операции Взаимодействует группа процессов. ● Вовлечены все процессы в коммуникаторе ● Примеры: – Синхронизация (барьер). – Broadcast, scatter, gather. – Global sum, global maximum, etc. Характеристики: Коллективная над коммуникатором ● ВСЕ процессы в рамках коммуникатора должны вызвать коллективную функцию ● Коллективные операции - блокирующие. ● Нет tag-а. ● Буфер на отправку данных должен быть такого же размера как и буфер на прием данных.

Слайд 35


Barrier Synchronization ● C: int MPI_Barrier(MPI_Comm comm) ● MPI_Barrier обычно не используется, но: – Используется для отладки: ● Не забывайте...
Описание слайда:
Barrier Synchronization ● C: int MPI_Barrier(MPI_Comm comm) ● MPI_Barrier обычно не используется, но: – Используется для отладки: ● Не забывайте удалять после отладки. – Используется для профилирования ● Load imbalance of computation [ MPI_Wtime(); MPI_Barrier(); .... MPI_Wtime() ] ● communication epochs [ MPI_Wtime(); MPI_Allreduce(); …; MPI_Wtime() ] – Используется для синхронизации внешних операций (например, I/O): ● Посылка сообщений может быть более эффективна

Слайд 36


Broadcast Broadcast int MPI_Bcast(void *buf, int count, PI_Datatype datatype,int root, MPI_Comm comm)
Описание слайда:
Broadcast Broadcast int MPI_Bcast(void *buf, int count, PI_Datatype datatype,int root, MPI_Comm comm)

Слайд 37


Scatter Scatter int MPI_Scatter(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root,...
Описание слайда:
Scatter Scatter int MPI_Scatter(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm)

Слайд 38


Gather Gather int MPI_Gather(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root,...
Описание слайда:
Gather Gather int MPI_Gather(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm)

Слайд 39


Глобальные операции редукции Сумма Произведение Минимум Максимум Битовые операции «Собираемая» переменная может быть простой или массивом.
Описание слайда:
Глобальные операции редукции Сумма Произведение Минимум Максимум Битовые операции «Собираемая» переменная может быть простой или массивом.

Слайд 40


Операторы редукции Операторы Функции MPI_BAND Bitwise AND MPI_BOR Bitwise OR MPI_BXOR Bitwise exclusive OR MPI_MAX Maximum MPI_MAXLOC Maximum and...
Описание слайда:
Операторы редукции Операторы Функции MPI_BAND Bitwise AND MPI_BOR Bitwise OR MPI_BXOR Bitwise exclusive OR MPI_MAX Maximum MPI_MAXLOC Maximum and location of the maximum MPI_MIN Minimum MPI_MINLOC Minimum and location of the minimum MPI_LAND Logical AND MPI_LOR Logical OR MPI_LXOR Logical exclusive OR MPI_PROD Product MPI_SUM Sum

Слайд 41


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

Слайд 42


Определение собственных глобальных операций Определение собственных глобальных операций int MPI_Op_create(MPI_User_function *function, int commute,...
Описание слайда:
Определение собственных глобальных операций Определение собственных глобальных операций int MPI_Op_create(MPI_User_function *function, int commute, MPI_Op *op) Входные параметры: • function - пользовательская функция; • commute - флаг, которому присваивается значение "истина", если операция коммутативна (результат не зависит от порядка операндов). Описание типа пользовательской функции выглядит следующим образом: typedef void (MPI_User_function)(void *a, void *b, int *len, MPI_Datatype *dtype) Здесь операция определяется так: b[I] = a[I] op b[I] для I = 0, …, len – 1.

Слайд 43


int res, gres; int res, gres; char * buf, *rbuf; MPI_Init(&argc, &argv); // init bufs MPI_Comm_rank(MPI_COMM_WORLD, &rank);...
Описание слайда:
int res, gres; int res, gres; char * buf, *rbuf; MPI_Init(&argc, &argv); // init bufs MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); while(/* have data */){ if(rank == 0) read_data(buf, 100*size); MPI_Scatter(buf, 100, MPI_CHAR, rbuf, 100, MPI_CHAR, 0, MPI_COMM_WORLD); res = process_data(rbuf, 100); MPI_Reduce(&res, &gres, 1, MPI_INT, MPI_XOR, 0, MPI_COMM_WORLD); save_res(gres); }



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