Введение в практику разработки параллельных программ в стандарте MPI. Баканов В.М - 22 стр.

UptoLike

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

2. Лабораторная работа 2. Жизненный цикл процессов и простейший
обмен данными между ними, тупиковые ситуации
Общие сведения. При использовании компактно расположенных кластеров
исполняемый код приложения компилируется главной машиной, рассылается
по ВУ и стартуется на каждом средствами ОС. Момент старта каждой ветви
программы может отличаться от такового на других ВУ, также нельзя
априо-
ри точно определить момент выполнения любого оператора внутри конкрет-
ной ветви, см. рис.2 (именно поэтому применяются различного типа приемы
синхронизации при обмене сообщениями);
Для практического осознания необходимости синхронизации процессов
при параллельном программировании служит первая часть данной работы.
Во второй части практически рассматривается формальный обмен данными
между процессами (использование простейших функций
передачи 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).
Блокировка гарантирует корректность повторного использования всех па-
раметров после возврата из подпрограммы. Это достигается копированием в
промежуточный буфер или непосредственной передачей процессу
dest (опре-
деляется MPI). Важно отметить, что возврат из
MPI_Send не означает ни того,
что сообщение уже передано процессу
dest, ни того, что сообщение покинуло
  2. Лабораторная работа 2. Жизненный цикл процессов и простейший
     обмен данными между ними, тупиковые ситуации

  Общие сведения. При использовании компактно расположенных кластеров
исполняемый код приложения компилируется главной машиной, рассылается
по ВУ и стартуется на каждом средствами ОС. Момент старта каждой ветви
программы может отличаться от такового на других ВУ, также нельзя априо-
ри точно определить момент выполнения любого оператора внутри конкрет-
ной ветви, см. рис.2 (именно поэтому применяются различного типа приемы
синхронизации при обмене сообщениями);
  Для практического осознания необходимости синхронизации процессов
при параллельном программировании служит первая часть данной работы.
Во второй части практически рассматривается формальный обмен данными
между процессами (использование простейших функций передачи 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).
  Блокировка гарантирует корректность повторного использования всех па-
раметров после возврата из подпрограммы. Это достигается копированием в
промежуточный буфер или непосредственной передачей процессу dest (опре-
деляется MPI). Важно отметить, что возврат из MPI_Send не означает ни того,
что сообщение уже передано процессу dest, ни того, что сообщение покинуло