| |
В программе умножения матриц нужно создать несколько коммуникаторов - по одному для каждой строки процессов и по одному - для каждой колонки. Это будет чрезвычайно утомительным процессом, если достаточно большое, и каждый коммуникатор создается с использованием трех функции, обсужденных ранее. Однако 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-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |