gpt4 book ai didi

c - 使用 MPI_Gather 将所有进程计算出的总和收集到一个数组中

转载 作者:行者123 更新时间:2023-11-30 15:14:19 32 4
gpt4 key购买 nike

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

但是, printf("\nSUMS[%d] = %d",i,sums[i]); 行打印出的总和与 printf("中打印的总和不同\n我是进程 %d,我的总和是 %d", my_rank, sum);

只有根之和与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]);

最佳答案

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

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

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

关于c - 使用 MPI_Gather 将所有进程计算出的总和收集到一个数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34107281/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com