ВУЗ:
Составители:
Для использования этих процедур необходимо знать несколько специальных терми-
нов.
Номер процесса – целое неотрицательное число, являющееся уникальным ат-
рибутом каждого процесса.
Атрибуты сообщения – номер процесса-отправителя, номер процесса-
получателя и идентификатор сообщения. Для них заведена структура MPI_Status,
содержащая три поля: MPI_Source (номер процесса отправителя), MPI_Tag (иден-
тификатор сообщения), MPI_Error (код ошибки); могут быть и добавочные поля.
Идентификатор сообщения (msgtag) – атрибут сообщения, являющийся целым
неотрицательным числом, лежащим в диапазоне от 0 до 32767.
Процессы объединяются в группы, могут быть вложенные группы. Внутри группы
все процессы перенумерованы. С каждой группой ассоциирован свой коммуника-
тор. Поэтому при осуществлении пересылки необходимо указать идентификатор
группы, внутри которой производится эта пересылка. Все процессы содержатся в
группе с предопределенным идентификатором MPI_COMM_WORLD.
Простой пример фрагмента MPI-программы (на Си):
MPI_Init (&argc, &argv);
MPI_Comm_rank (MPI_COMM_WORLD, &me);
MPI_Comm_size (MPI_COMM_WORLD, &size);
(void)printf ("Process %d size %d\n", me, size);
MPI_Finalize();
Первая и последняя строки этого примера предназначены для инициализации и
закрытия параллельной части приложения. Вторая строка предназначена для опре-
деления числа доступных параллельных процессов. В третьей строке определяется
номер процесса, который выполняет эту программу. Четвертая строка предназначе-
на для просмотра результатов второй и третьей строк.
В следующем примере показано, как от традиционного последовательного вы-
полнения цикла
DO i = lbound(A) , ubound(B)
IF (B(i) /= 0) THEN
C(i) = A(i) / B(i)
END IF
End Do
переходить к параллельному (одновременному) выполнению инструкции внутри
цикла:
FORALL (i = lbound(A): ubound(B): 1, B(i) /= 0 )
C(i) = A(i) / B(i)
END FORALL
225
Страницы
- « первая
- ‹ предыдущая
- …
- 224
- 225
- 226
- 227
- 228
- …
- следующая ›
- последняя »