【问题标题】:Using MPI_Gather to gather the sums calculated from all processes in one array使用 MPI_Gather 将所有进程计算的总和收集到一个数组中
【发布时间】:2015-12-06 03:30:29
【问题描述】:

我试图让每个进程计算一个总和,然后将总和发送回根进程。

但是,printf("\nSUMS[%d] = %d",i,sums[i]); 行打印的总和与 printf("\nI am process %d and my sum is %d", my_rank, sum); 打印的总和不同

只有root的和与sums[0]相同。

有人能解释为什么会这样吗?如果这个问题有一个明显的答案,但我是 MPI 的新手,请问一下。

sum = 0;
for ( i=0 ; i < np; i++)
    sum += y[i];

printf("\nI am process %d and my sum is %d", my_rank, sum);



if (!my_rank)
    sums = (int *)malloc(sizeof(int) * comm_size);

MPI_Gather(&sum, 1, MPI_INT, sums, comm_size, MPI_INT, 0, MPI_COMM_WORLD);

if (!my_rank)
    for ( i = 0; i < comm_size; i++)
        printf("\nSUMS[%d] = %d",i,sums[i]);

【问题讨论】:

    标签: c parallel-processing mpi


    【解决方案1】:

    根据MPI_Gather() 上的mpich 文档,此函数recvcount 的第五个参数是任何单个接收的元素数。在您发布的代码中,使用了comm_size,但它是要接收的元素总数。因此,以下行可以解决您的问题:

    MPI_Gather(&sum, 1, MPI_INT, sums, 1, MPI_INT, 0, MPI_COMM_WORLD);
    

    如果不起作用,请告诉我们!

    【讨论】:

      猜你喜欢
      • 2021-04-08
      • 1970-01-01
      • 1970-01-01
      • 2018-04-26
      • 2022-01-03
      • 2017-12-16
      • 2013-08-14
      • 2011-06-06
      • 2021-10-12
      相关资源
      最近更新 更多