ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
70
Если, например, коммуникатор comm содержит семь процессов, будет создан
новый коммуникатор из процессов 0, 3 и 6; коммуникатор из процессов 1 и 4, а так-
же коммуникатор из процессов 2 и 5 (рис. 6.1).
Подпрограмма MPI_Comm_free помечает коммуникатор comm для удаления:
int MPI_Comm_free(MPI_Comm *comm)
MPI_COMM_FREE(COMM, IERR)
Обмены, связанные с этим коммуникатором, завершаются обычным образом,
а сам коммуникатор удаляется только после того, как на него не будет активных
ссылок. Данная операция может применяться к коммуникаторам обоих видов (ин-
тра- и интер-).
Сравнение двух коммуникаторов (comm1) и (comm2) выполняется подпро-
граммой MPI_Comm_compare:
int MPI_Comm_compare(MPI_Comm comml, MPI_Comm comm2, int *result)
MPI_COMM_COMPARE(COMM1, COMM2, RESULT, IERR)
Результат ее выполнения result — целое значение, которое равно MPI_IDENT,
если контексты и группы коммуникаторов совпадают; mpi_congruent, если совпада-
ют только группы; MPI_SIMILAR и MPI_UNEQUAL, если не совпадают ни группы,
ни контексты. В качестве аргументов нельзя использовать пустой коммуникатор
MPI_COMM_NULL.
Рис. 6.1. Создание коммуникаторов
К числу операций управления коммуникаторами можно отнести знакомые уже
нам операции MPI_Comm_size и MPI_Comm_rank. Они позволяют, в частности,
распределить роли между процессами в модели "главная задача — подчиненные
задачи" (master-slave).
Новый
коммуникатор
Новый
коммуникатор
Новый
коммуникатор
Исходный
коммуникатор
1...,62,63,64,65,66,67,68,69,70,71 73,74,75,76,77,78,79,80,81,82,...180