ВУЗ:
Составители:
Рубрика:
2 Лабораторная работа 2. Жизненный цикл процессов и
простейший обмен данными между ними, тупиковые ситуации
Цель работы – приобретение практических знаний и навыков в компиля-
ции и запуске простейших MPI-программ, доказательство необходимости
синхронизации ветвей параллельной программы.
Теоретическая часть. При использовании компактно расположенных кла-
стеров исполняемый код приложения компилируется главной машиной, рас-
сылается по ВУ и стартуется на каждом средствами ОС. Момент старта каж-
дой ветви программы может отличаться от такового на других ВУ, также
нельзя априори точно определить момент выполнения любого оператора
внутри конкретной ветви, см. рис.1 (именно поэтому применяются различно-
го типа приемы синхронизации при обмене сообщениями);
Для практического осознания необходимости
синхронизации процессов
при параллельном программировании служит первая часть данной работы.
Во второй части практически рассматривается формальный обмен данными
между процессами (использование простейших функций передачи
MPI_Send
и приема данных
MPI_Recv
).
Для этих (базовых) функций полезно привести прототипы (многие из при-
веденных формальных параметров используются и в других MPI-функциях):
int
MPI_Send(void* buf, int count, MPI_Datatype datatype, int dest, int msgtag,
MPI_Comm comm);
•
buf
- адрес начала буфера посылки сообщения
•
count -
число передаваемых в сообщении элементов (не байт – см. ниже)
•
datatype -
тип передаваемых элементов
•
dest -
номер процесса-получателя
•
msgtag -
идентификатор сообщения (0
÷
32767, выбирается пользовате-
лем)
•
comm -
идентификатор группы
(
MPI_COMM_WORLD
для создаваемого по
умолчанию коммуникатора)
Функция
MPI_Send
осуществляет блокирующую посылку сообщения с
идентификатором
msgtag
процессу с номером
dest;
причем сообщение состо-
ит из
count
элементов типа
datatype
(все элементы сообщения расположены
подряд в буфере
buf,
значение
count
может быть и нулем). Тип передаваемых
элементов
datatype
должен указываться с помощью предопределенных кон-
стант типа (см. ниже), разрешается передавать сообщение самому себе. При
пересылке сообщений можно использовать специальное значение
MPI
_
PROC
_
NULL
для несуществующего процесса; операции с таким про-
цессом немедленно успешно завершаются (код завершения
MPI
_
SUCCESS
).
2 Лабораторная работа 2. Жизненный цикл процессов и простейший обмен данными между ними, тупиковые ситуации Цель работы – приобретение практических знаний и навыков в компиля- ции и запуске простейших MPI-программ, доказательство необходимости синхронизации ветвей параллельной программы. Теоретическая часть. При использовании компактно расположенных кла- стеров исполняемый код приложения компилируется главной машиной, рас- сылается по ВУ и стартуется на каждом средствами ОС. Момент старта каж- дой ветви программы может отличаться от такового на других ВУ, также нельзя априори точно определить момент выполнения любого оператора внутри конкретной ветви, см. рис.1 (именно поэтому применяются различно- го типа приемы синхронизации при обмене сообщениями); Для практического осознания необходимости синхронизации процессов при параллельном программировании служит первая часть данной работы. Во второй части практически рассматривается формальный обмен данными между процессами (использование простейших функций передачи MPI_Send и приема данных MPI_Recv). Для этих (базовых) функций полезно привести прототипы (многие из при- веденных формальных параметров используются и в других MPI-функциях): int MPI_Send(void* buf, int count, MPI_Datatype datatype, int dest, int msgtag, MPI_Comm comm); • buf - адрес начала буфера посылки сообщения • count - число передаваемых в сообщении элементов (не байт – см. ниже) • datatype - тип передаваемых элементов • dest - номер процесса-получателя • msgtag - идентификатор сообщения (0 ÷ 32767, выбирается пользовате- лем) • comm - идентификатор группы (MPI_COMM_WORLD для создаваемого по умолчанию коммуникатора) Функция MPI_Send осуществляет блокирующую посылку сообщения с идентификатором msgtag процессу с номером dest; причем сообщение состо- ит из count элементов типа datatype (все элементы сообщения расположены подряд в буфере buf, значение count может быть и нулем). Тип передаваемых элементов datatype должен указываться с помощью предопределенных кон- стант типа (см. ниже), разрешается передавать сообщение самому себе. При пересылке сообщений можно использовать специальное значение MPI_PROC_NULL для несуществующего процесса; операции с таким про- цессом немедленно успешно завершаются (код завершения MPI_SUCCESS).
Страницы
- « первая
- ‹ предыдущая
- …
- 26
- 27
- 28
- 29
- 30
- …
- следующая ›
- последняя »