Теория и практика параллельных вычислений



Пример 2


// Создание коммуникатора в виде двумерной квадратной решетки

// и коммуникаторов для каждой строки и каждого столбца решетки

void CreateGridCommunicators() {

int DimSize[2]; // Количество процессов в каждом измерении

// решетки

int Periodic[2]; // =1 для каждого измерения, являющегося

// периодическим

int Subdims[2]; // =1 для каждого измерения, оставляемого

// в подрешетке

DimSize[0] = GridSize;

DimSize[1] = GridSize;

Periodic[0] = 0;

Periodic[1] = 0;

// Создание коммуникатора в виде квадратной решетки

MPI_Cart_create(MPI_COMM_WORLD, 2, DimSize, Periodic, 1, &GridComm);

// Определение координат процесса в решетке

MPI_Cart_coords(GridComm, ProcRank, 2, GridCoords);

// Создание коммуникаторов для строк процессной решетки

Subdims[0] = 0; // Фиксация измерения

Subdims[1] = 1; // Наличие данного измерения в подрешетке

MPI_Cart_sub(GridComm, Subdims, &RowComm);

// Создание коммуникаторов для столбцов процессной решетки

Subdims[0] = 1;

Subdims[1] = 0;

MPI_Cart_sub(GridComm, Subdims, &ColComm);

}




Содержание  Назад  Вперед