// Function for gathering the result matrix
void ResultCollection (double* pCMatrix, double* pCblock, int Size,
int BlockSize)
{
double * pResultRow = new double [Size*BlockSize];
for (int i=0; i<BlockSize; i++)
{
MPI_Gather(&pCblock[i*BlockSize], BlockSize, MPI_DOUBLE,
&pResultRow[i*Size], BlockSize, MPI_DOUBLE, 0, RowComm);
}
if (GridCoords[1] == 0)
{
MPI_Gather(pResultRow, BlockSize*Size, MPI_DOUBLE, pCMatrix,
BlockSize*Size, MPI_DOUBLE, 0, ColComm);
}
delete [] pResultRow;
}
Пример вызова
void main(int argc, char* argv[])
{
<…>
// Execution of Fox method
ParallelResultCalculation(pAblock, pMatrixAblock, pBblock, pCblock,
BlockSize);
ResultCollection(pCMatrix, pCblock, Size, BlockSize);
if (ProcRank == 0) {
printf(“Result matrix \n”);
PrintMatrix(pCMatrix, Size, Size);
}
// Process Termination
ProcessTermination (pAMatrix, pBMatrix, pCMatrix, pAblock, pBblock,
pCblock, pMatrixAblock);
MPI_Finalize();
}