Параллельное программирование в стандарте MPI. Баканов В.М - 28 стр.

UptoLike

Составители: 

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).