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



         

Программная реализация - часть 4


// Циклический сдвиг блоков матрицы В вдоль столбца процессной // решетки void BblockCommunication (double *pBblock, int BlockSize) { MPI_Status Status; int NextProc = GridCoords[0] + 1; if ( GridCoords[0] == GridSize-1 ) NextProc = 0; int PrevProc = GridCoords[0] - 1; if ( GridCoords[0] == 0 ) PrevProc = GridSize-1; MPI_Sendrecv_replace( pBblock, BlockSize*BlockSize, MPI_DOUBLE, NextProc, 0, PrevProc, 0, ColComm, &Status); }

8. Функция ParallelResultCalculation. Для непосредственного выполнения параллельного алгоритма Фокса умножения матриц предназначена функция ParallelResultCalculation, которая реализует логику работы алгоритма.

// Функция для параллельного умножения матриц void ParallelResultCalculation(double* pAblock, double* pMatrixAblock, double* pBblock, double* pCblock, int BlockSize) { for (int iter = 0; iter < GridSize; iter ++) { // Рассылка блоков матрицы A по строкам процессной решетки ABlockCommunication (iter, pAblock, pMatrixAblock, BlockSize); // Умножение блоков BlockMultiplication(pAblock, pBblock, pCblock, BlockSize); // Циклический сдвиг блоков матрицы B в столбцах процессной // решетки BblockCommunication(pBblock, BlockSize); } }




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