| |
![]() |
В программе умножения матриц нужно создать несколько коммуникаторов
- по одному для каждой строки процессов и по одному - для каждой колонки.
Это будет чрезвычайно утомительным процессом, если достаточно
большое, и каждый коммуникатор создается с использованием трех функции,
обсужденных ранее. Однако MPI содержит функцию MPI_Comm_split(),
которая может создать несколько коммуникаторов одновременно. Для иллюстрации
ее использования создаются коммуникаторы для каждой строки процессов:
int my_row;
/* my_rank это ранг в MPI_COMM_WORLD.
* q*q = p */
my_row = my_rank/q;
MPI_Comm_split(MPI_COMM_WORLD, my_row, my_rank,
&my_row_comm);
Синтаксис вызова MPI_Comm_split():
int rank_key, MPI_Comm* new_comm)
MPI_Comm_split() является коллективной операцией, поэтому ее нужно вызывать всем процессам из old_comm. Функция может использоваться, даже если пользователь не желает назначать каждый процесс на новый коммуникатор. Это можно выполнить, передав предопределенную константу MPI_UNDEFINED в качестве аргумента split_key. Процессы, выполнившие это, получат предопределенное значение MPI_COMM_NULL, возвращенное в new_comm.
Закладки на сайте Проследить за страницей |
Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |