我对 Open MPI 很陌生。我制作了一个小程序,通过将数组拆分为等于进程数的片段来计算数组的总和。我的程序中的问题是每个进程都在计算其数组份额的正确总和,但单独计算的总和不是由 MPI_reduce 函数求和的。我尽力解决并查阅了 Open MPI 手册,但仍有一些我可能遗漏的东西。我将不胜感激任何形式的指导。下面是我制作的程序:
#include "mpi.h"
#include <stdio.h>
int main(int argc, char *argv[])
{
    int n, rank, nrofProcs, i;
    int sum, ans;
               //  0,1,2, 3,4,5, 6,7,8, 9
    int myarr[] = {1,5,9, 2,8,3, 7,4,6, 10};
    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &nrofProcs);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    n = 10;
    MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
    sum = 0.0;
    int remaining = n % nrofProcs;
    int lower =rank*(n/nrofProcs);
    int upper = (lower+(n/nrofProcs))-1;
    for (i = lower; i <= upper; i++)
    {
        sum = sum + myarr[i];
    }
    if(rank==nrofProcs-1)
    {
        while(i<=remaining)
        {
        sum = sum + myarr[i];
        i++;
        }
    }
        /* (PROBLEM IS HERE, IT IS NOT COMBINING "sums") */
    MPI_Reduce(&sum, &ans, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
//  if (rank == 0)
        printf( "rank: %d, Sum ans: %d\n", rank, sum);
    /* shut down MPI */
    MPI_Finalize();
    return 0;
}
Output: 
rank: 2, Sum ans: 17
rank: 1, Sum ans: 13
rank: 0, Sum ans: 15
(输出应该是rank: 0, Sum ans: 55)