🗊Презентация Введение в 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. Параллельное программирование. Доклад-сообщение содержит 40 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

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


Слайд 1






Параллельное программирование
доцент М.А. Сокольская
Описание слайда:
Параллельное программирование доцент М.А. Сокольская

Слайд 2





MPI: основные понятия и определения
MPI: основные понятия и определения
Введение в MPI
Инициализация и завершение MPI программ
Определение количества и ранга процессов
Прием и передача сообщений
Определение времени выполнения MPI программы
Пример: первая программа с использованием MPI
Описание слайда:
MPI: основные понятия и определения MPI: основные понятия и определения Введение в MPI Инициализация и завершение MPI программ Определение количества и ранга процессов Прием и передача сообщений Определение времени выполнения MPI программы Пример: первая программа с использованием MPI

Слайд 3


Введение в MPI. Параллельное программирование, слайд №3
Описание слайда:

Слайд 4





1993 г. – объединение нескольких групп в MPI Forum для создания единых требований к средствам программирования многопроцессорных систем с распределённой памятью .
1993 г. – объединение нескольких групп в MPI Forum для создания единых требований к средствам программирования многопроцессорных систем с распределённой памятью .
Результат – стандарт MPI 1.0 в 1994 г.
Основные положения стандарта:
Реализации стандарта должны быть через подключаемые библиотеки или модули, без создания новых компиляторов или языков.
Библиотеки должны реализовывать все возможные типы обменов данными между процессорами (вычислительными узлами)
Описание слайда:
1993 г. – объединение нескольких групп в MPI Forum для создания единых требований к средствам программирования многопроцессорных систем с распределённой памятью . 1993 г. – объединение нескольких групп в MPI Forum для создания единых требований к средствам программирования многопроцессорных систем с распределённой памятью . Результат – стандарт MPI 1.0 в 1994 г. Основные положения стандарта: Реализации стандарта должны быть через подключаемые библиотеки или модули, без создания новых компиляторов или языков. Библиотеки должны реализовывать все возможные типы обменов данными между процессорами (вычислительными узлами)

Слайд 5





1997 г – стандарт MPI 2.0
1997 г – стандарт MPI 2.0
Возможности, заложенные в стандарт превышают возможности самих машин, поэтому версия 2.0 широко применяется только сейчас.
Описание слайда:
1997 г – стандарт MPI 2.0 1997 г – стандарт MPI 2.0 Возможности, заложенные в стандарт превышают возможности самих машин, поэтому версия 2.0 широко применяется только сейчас.

Слайд 6





В рамках MPI для решения задачи разрабатывается одна программа, она запускается на выполнение одновременно на всех имеющихся процессорах
В рамках MPI для решения задачи разрабатывается одна программа, она запускается на выполнение одновременно на всех имеющихся процессорах
Для организации различных вычислений на разных процессорах:
Есть возможность подставлять разные данные для программы на разных процессорах, 
Имеются средства для идентификации процессора, на котором выполняется программа
Такой способ организации параллельных вычислений обычно именуется как модель "одна программа множество процессов" (single program multiple processes or SPMP)
Описание слайда:
В рамках MPI для решения задачи разрабатывается одна программа, она запускается на выполнение одновременно на всех имеющихся процессорах В рамках MPI для решения задачи разрабатывается одна программа, она запускается на выполнение одновременно на всех имеющихся процессорах Для организации различных вычислений на разных процессорах: Есть возможность подставлять разные данные для программы на разных процессорах, Имеются средства для идентификации процессора, на котором выполняется программа Такой способ организации параллельных вычислений обычно именуется как модель "одна программа множество процессов" (single program multiple processes or SPMP)

Слайд 7





В MPI существует множество операций передачи данных:
В MPI существует множество операций передачи данных:
обеспечиваются разные способы пересылки данных;
реализованы практически все основные коммуникационные операции.
 
Эти возможности являются наиболее сильной стороной MPI (об этом, в частности, свидетельствует и само название MPI)
Описание слайда:
В MPI существует множество операций передачи данных: В MPI существует множество операций передачи данных: обеспечиваются разные способы пересылки данных; реализованы практически все основные коммуникационные операции. Эти возможности являются наиболее сильной стороной MPI (об этом, в частности, свидетельствует и само название MPI)

Слайд 8





Существует для двух языков:
Существует для двух языков:
Fortran
C/C++
Представляет собой реализацию общих положений стандарта под тот или иной язык.
Мы рассматриваем реализацию mpi.h для C/C++
Описание слайда:
Существует для двух языков: Существует для двух языков: Fortran C/C++ Представляет собой реализацию общих положений стандарта под тот или иной язык. Мы рассматриваем реализацию mpi.h для C/C++

Слайд 9





Необходимое ПО устанавливается (как правило) на кластерных системах. Доступ к кластеру КГПУ осуществляется удалённо.
Необходимое ПО устанавливается (как правило) на кластерных системах. Доступ к кластеру КГПУ осуществляется удалённо.
Программы (для ОС Windows):
putty: для доступа к кластеру, запуска и компиляции программ;
WinSCP: для обмена файлами между кластером и удалённой машиной.
Для ОС Linux – доступ на кластер с командной строки
Описание слайда:
Необходимое ПО устанавливается (как правило) на кластерных системах. Доступ к кластеру КГПУ осуществляется удалённо. Необходимое ПО устанавливается (как правило) на кластерных системах. Доступ к кластеру КГПУ осуществляется удалённо. Программы (для ОС Windows): putty: для доступа к кластеру, запуска и компиляции программ; WinSCP: для обмена файлами между кластером и удалённой машиной. Для ОС Linux – доступ на кластер с командной строки

Слайд 10


Введение в MPI. Параллельное программирование, слайд №10
Описание слайда:

Слайд 11


Введение в MPI. Параллельное программирование, слайд №11
Описание слайда:

Слайд 12


Введение в MPI. Параллельное программирование, слайд №12
Описание слайда:

Слайд 13


Введение в MPI. Параллельное программирование, слайд №13
Описание слайда:

Слайд 14


Введение в MPI. Параллельное программирование, слайд №14
Описание слайда:

Слайд 15





Понятие параллельной программы
Понятие параллельной программы
Под параллельной программой в рамках MPI понимается множество одновременно выполняемых процессов: 
процессы могут выполняться на разных процессорах; вместе с этим, на одном процессоре могут располагаться несколько процессов,
Каждый процесс параллельной программы порождается на основе копии одного и того же программного кода (модель SPMP).
Описание слайда:
Понятие параллельной программы Понятие параллельной программы Под параллельной программой в рамках MPI понимается множество одновременно выполняемых процессов: процессы могут выполняться на разных процессорах; вместе с этим, на одном процессоре могут располагаться несколько процессов, Каждый процесс параллельной программы порождается на основе копии одного и того же программного кода (модель SPMP).

Слайд 16





Количество процессов определяется в момент запуска параллельной программы средствами среды исполнения MPI программ. 
Количество процессов определяется в момент запуска параллельной программы средствами среды исполнения MPI программ.
Описание слайда:
Количество процессов определяется в момент запуска параллельной программы средствами среды исполнения MPI программ. Количество процессов определяется в момент запуска параллельной программы средствами среды исполнения MPI программ.

Слайд 17





В основу MPI положены четыре основных понятия:
В основу MPI положены четыре основных понятия:
Тип операции передачи сообщения
Тип данных, пересылаемых в сообщении
Понятие коммуникатора (группы процессов)
Понятие виртуальной топологии
Описание слайда:
В основу MPI положены четыре основных понятия: В основу MPI положены четыре основных понятия: Тип операции передачи сообщения Тип данных, пересылаемых в сообщении Понятие коммуникатора (группы процессов) Понятие виртуальной топологии

Слайд 18





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

Слайд 19





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

Слайд 20





В ходе вычислений могут создаваться новые и удаляться существующие коммуникаторы. 
В ходе вычислений могут создаваться новые и удаляться существующие коммуникаторы. 
Один и тот же процесс может принадлежать разным коммуникаторам. 
Все имеющиеся в параллельной программе процессы входят в состав создаваемого по умолчанию коммуникатора с идентификатором MPI_COMM_WORLD.
Описание слайда:
В ходе вычислений могут создаваться новые и удаляться существующие коммуникаторы. В ходе вычислений могут создаваться новые и удаляться существующие коммуникаторы. Один и тот же процесс может принадлежать разным коммуникаторам. Все имеющиеся в параллельной программе процессы входят в состав создаваемого по умолчанию коммуникатора с идентификатором MPI_COMM_WORLD.

Слайд 21





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

Слайд 22





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

Слайд 23





Структура параллельной программы, разработанная с использованием MPI, должна иметь следующий вид:
Структура параллельной программы, разработанная с использованием MPI, должна иметь следующий вид:
Описание слайда:
Структура параллельной программы, разработанная с использованием MPI, должна иметь следующий вид: Структура параллельной программы, разработанная с использованием MPI, должна иметь следующий вид:

Слайд 24





Определение количества процессов в выполняемой параллельной программе осуществляется при помощи функции:
Определение количества процессов в выполняемой параллельной программе осуществляется при помощи функции:
int MPI_Comm_size ( MPI_Comm comm, int *size );
Для определения ранга процесса используется функция:
int MPI_Comm_rank ( MPI_Comm comm, int *rank );
Описание слайда:
Определение количества процессов в выполняемой параллельной программе осуществляется при помощи функции: Определение количества процессов в выполняемой параллельной программе осуществляется при помощи функции: int MPI_Comm_size ( MPI_Comm comm, int *size ); Для определения ранга процесса используется функция: int MPI_Comm_rank ( MPI_Comm comm, int *rank );

Слайд 25





Как правило, вызов функций MPI_Comm_size и MPI_Comm_rank выполняется сразу после MPI_Init:
Как правило, вызов функций MPI_Comm_size и MPI_Comm_rank выполняется сразу после MPI_Init:
#include "mpi.h"
int main ( int argc, char *argv[] ) {
	int ProcNum, ProcRank;
	<программный код без использования MPI функций>
	MPI_Init (&agrc, &argv);
	MPI_Comm_size (MPI_COMM_WORLD, &ProcNum);
	MPI_Comm_rank (MPI_COMM_WORLD, &ProcRank);
	<программный код с использованием MPI функций >
	MPI_Finalize();
	<программный код без использования MPI функций >
	return 0;
}
Описание слайда:
Как правило, вызов функций MPI_Comm_size и MPI_Comm_rank выполняется сразу после MPI_Init: Как правило, вызов функций MPI_Comm_size и MPI_Comm_rank выполняется сразу после MPI_Init: #include "mpi.h" int main ( int argc, char *argv[] ) { int ProcNum, ProcRank; <программный код без использования MPI функций> MPI_Init (&agrc, &argv); MPI_Comm_size (MPI_COMM_WORLD, &ProcNum); MPI_Comm_rank (MPI_COMM_WORLD, &ProcRank); <программный код с использованием MPI функций > MPI_Finalize(); <программный код без использования MPI функций > return 0; }

Слайд 26





Коммуникатор MPI_COMM_WORLD создается по умолчанию и представляет все процессы выполняемой параллельной программы;
Коммуникатор MPI_COMM_WORLD создается по умолчанию и представляет все процессы выполняемой параллельной программы;
Ранг, получаемый при помощи функции MPI_Comm_rank, является рангом процесса, выполнившего вызов этой функции, и, тем самым, переменная ProcRank будет принимать различные значения в разных процессах.
Описание слайда:
Коммуникатор MPI_COMM_WORLD создается по умолчанию и представляет все процессы выполняемой параллельной программы; Коммуникатор MPI_COMM_WORLD создается по умолчанию и представляет все процессы выполняемой параллельной программы; Ранг, получаемый при помощи функции MPI_Comm_rank, является рангом процесса, выполнившего вызов этой функции, и, тем самым, переменная ProcRank будет принимать различные значения в разных процессах.

Слайд 27


Введение в MPI. Параллельное программирование, слайд №27
Описание слайда:

Слайд 28





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

Слайд 29





Отправляемое сообщение определяется через указание блока памяти (буфера), в котором это сообщение располагается. Используемая для указания буфера триада (buf, count, type) входит в состав параметров практически всех функций передачи данных,
Отправляемое сообщение определяется через указание блока памяти (буфера), в котором это сообщение располагается. Используемая для указания буфера триада (buf, count, type) входит в состав параметров практически всех функций передачи данных,
Процессы, между которыми выполняется передача данных, обязательно должны принадлежать коммуникатору, указываемому в функции MPI_Send,
Параметр tag используется только если нужно различать передаваемые сообщения, в противном случае в качестве значения параметра может быть использовано произвольное целое число.
Описание слайда:
Отправляемое сообщение определяется через указание блока памяти (буфера), в котором это сообщение располагается. Используемая для указания буфера триада (buf, count, type) входит в состав параметров практически всех функций передачи данных, Отправляемое сообщение определяется через указание блока памяти (буфера), в котором это сообщение располагается. Используемая для указания буфера триада (buf, count, type) входит в состав параметров практически всех функций передачи данных, Процессы, между которыми выполняется передача данных, обязательно должны принадлежать коммуникатору, указываемому в функции MPI_Send, Параметр tag используется только если нужно различать передаваемые сообщения, в противном случае в качестве значения параметра может быть использовано произвольное целое число.

Слайд 30


Введение в MPI. Параллельное программирование, слайд №30
Описание слайда:

Слайд 31





Для приема сообщения процесс-получатель должен выполнить функцию:
Для приема сообщения процесс-получатель должен выполнить функцию:
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 – указатель на структуру данных с информацией о
             результате выполнения операции приема данных.
Описание слайда:
Для приема сообщения процесс-получатель должен выполнить функцию: Для приема сообщения процесс-получатель должен выполнить функцию: 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 – указатель на структуру данных с информацией о результате выполнения операции приема данных.

Слайд 32





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

Слайд 33





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

Слайд 34





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

Слайд 35


Введение в MPI. Параллельное программирование, слайд №35
Описание слайда:

Слайд 36





#include " mpi.h" 
#include " mpi.h" 
int main(int argc, char* argv[]) 
{ 
  int ProcNum, ProcRank, RecvRank; 
  MPI_Status Status; 
  MPI_Init(&argc, &argv);
  MPI_Comm_size(MPI_COMM_WORLD, &ProcNum);
  MPI_Comm_rank(MPI_COMM_WORLD, &ProcRank); 
  if ( ProcRank == 0 ) 
  { // Действия для процесса 0 
     printf ("\n Hello from process %3d", ProcRank);
     for ( int i=1; i < ProcNum; i++ ) 
     {
Описание слайда:
#include " mpi.h" #include " mpi.h" int main(int argc, char* argv[]) { int ProcNum, ProcRank, RecvRank; MPI_Status Status; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &ProcNum); MPI_Comm_rank(MPI_COMM_WORLD, &ProcRank); if ( ProcRank == 0 ) { // Действия для процесса 0 printf ("\n Hello from process %3d", ProcRank); for ( int i=1; i < ProcNum; i++ ) {

Слайд 37





      MPI_Recv(&RecvRank, 1, MPI_INT,     	MPI_ANY_SOURCE, MPI_ANY_TAG, 	MPI_COMM_WORLD, &Status); 
      MPI_Recv(&RecvRank, 1, MPI_INT,     	MPI_ANY_SOURCE, MPI_ANY_TAG, 	MPI_COMM_WORLD, &Status); 
      printf("\n Hello from process %d", RecvRank); 
     } 
  } 
  else // Действия для всех остальных процессов
	MPI_Send(&ProcRank,1,MPI_INT,0,0,MPI_COMM_WORLD);
  MPI_Finalize(); // Завершение работы
  return 0; 
 }
Описание слайда:
MPI_Recv(&RecvRank, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &Status); MPI_Recv(&RecvRank, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &Status); printf("\n Hello from process %d", RecvRank); } } else // Действия для всех остальных процессов MPI_Send(&ProcRank,1,MPI_INT,0,0,MPI_COMM_WORLD); MPI_Finalize(); // Завершение работы return 0; }

Слайд 38





Каждый процесс определяет свой ранг, после чего действия в программе разделяются (разные процессы выполняют различные действия), 
Каждый процесс определяет свой ранг, после чего действия в программе разделяются (разные процессы выполняют различные действия), 
Все процессы, кроме процесса с рангом 0, передают значение своего ранга нулевому процессу, 
Процесс с рангом 0 сначала печатает значение своего ранга, а далее последовательно принимает сообщения с рангами процессов и также печатает их значения,
Описание слайда:
Каждый процесс определяет свой ранг, после чего действия в программе разделяются (разные процессы выполняют различные действия), Каждый процесс определяет свой ранг, после чего действия в программе разделяются (разные процессы выполняют различные действия), Все процессы, кроме процесса с рангом 0, передают значение своего ранга нулевому процессу, Процесс с рангом 0 сначала печатает значение своего ранга, а далее последовательно принимает сообщения с рангами процессов и также печатает их значения,

Слайд 39





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

Слайд 40





Мы рассмотрели:
Мы рассмотрели:
Основные определения и понятия MPI, основные функции MPI  и их применение.
Описание слайда:
Мы рассмотрели: Мы рассмотрели: Основные определения и понятия MPI, основные функции MPI и их применение.



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