Архив документации OpenNet.ru /
Раздел "Программирование в Linux" /
Индекс
Next: Реализация алгоритма Фокса
Up: Коммуникаторы и топологии
Previous: Топологии
Contents
Еще одним способом является деление сетки на участки меньшей размерности.
Например, можно создать коммуникатор для каждой строки сетки следующим
образом:
-
- int varying_coords[2];
MPI_Comm row_comm;
Varying_coords[0] = 0; varying_coords[1] = 1;
MPI_Cart_sub(grid_comm, varying_coords, &);
Вызов MPI_Cart_sub() создает
новых коммуникаторов. Аргумент
varying_coords является массивом логических значений. Они
определяют, принадлежит ли определенное измерение новому коммуникатору.
Поскольку в примере создаются коммуникаторы для строк сетки, то каждый
новый коммуникатор состоит из процессов, получающих фиксированную
координату строки, при этом позволяя координате колонки изменяться.
Поэтому varying_coords[0] принимает значение 0 - первая
координата не изменяется, а
varying_coords[1] принимает
значение 1 - вторая координата изменяется. В каждом процессе возвращается
новый коммуникатор row_comm. Чтобы создать коммуникаторы
для колонок, можно просто изменить оператор присваивания для элементов varying_coords:
-
- MPI_Comm col_comm;
Varying_coords[0] = 1; varying_coords[1] = 0;
MPI_Cart_sub(grid_comm, varying_coord, col_comm);
MPI_Cart_sub() можно использовать только с коммуникатором,
ассоциированным с декартовой топологией. При этом новые коммуникаторы
могут быть созданы при фиксации одной или нескольких размерностей
старых коммуникаторов. Функция MPI_Cart_sub() является
коллективной операцией.
2004-06-22
Архив документации на OpenNet.ru