// вывод результатов с других процессов
23for (int i=1; i<ProcNum; i++)
{
if (ProcRank == i)
{
printf("\nProcRank = %d \n", ProcRank); printf(" Matrix Stripe:\n");
PrintMatrix(pProcRows, RowNum, Size);//самостоятельно printf(" Vector: \n");
PrintVector(pVector, Size);//самостоятельно
}
MPI_Barrier(MPI_COMM_WORLD);//ждем всех
}
}
24// освобождение памяти на всех процессах
void ProcessTermination (double* pMatrix, double* pVector, double* pResult, double* pProcRows, double* pProcResult)
{
if (ProcRank == 0)
delete [] pMatrix;// матрица А только на процессе 0 //на всех процессах
delete [] pVector; delete [] pResult; delete [] pProcRows; delete [] pProcResult;
}
25 Замечания
Разделение (по функциям) действий генерации исходных данных и их рассылки процессам не подходит для больших объемов данных.
Лучше сразу после генерации передавать процессам предназначенные им данные,
Всегда ли вычислительные узлы одинаковы по памяти и быстродействию???