ВУЗ:
Составители:
Рубрика:
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, ни того, что сообщение покинуло
Страницы
- « первая
- ‹ предыдущая
- …
- 20
- 21
- 22
- 23
- 24
- …
- следующая ›
- последняя »