Код 3.4.5.1.3

// 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();

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: