Int _tmain(int argc, _tchar* argv[])
{
int
nSize = 0;
int
nRank = 0;
int
nResult = 0;
int
nError = 0;
MPI_Init(&argc,
&argv);
MPI_Comm_size(MPI_COMM_WORLD,
&nSize);
MPI_Comm_rank(MPI_COMM_WORLD,
&nRank);
nError
= MPI_Reduce(&nRank, &nResult, 1, MPI_INT, MPI_SUM, 0,
MPI_COMM_WORLD);
if(nError)
{
printf("MPI_Reduce
returned Error %d\n",
nError);
}
else
{
if(!nRank)
{
printf("Result
is %d\n",
nResult);
}
}
MPI_Finalize();
return
0;
}
Результат работы функции. Вывод
полученного значения суммы номеров
всех процессов(для 4-х процессов):
Result
is 6
Функция MPI_AllReduce()
отличается только тем, что сохраняет
данные во всех процессах, поэтому в ней
не указывается корневой процесс. Список
параметров аналогичен предыдущей
функции.
int
MPI_Allreduce(void* sendbuf, void* recvbuf, int count,
MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)