gpt4 book ai didi

c - MPI_Gather 发送和接收数组错误

转载 作者:行者123 更新时间:2023-11-30 16:22:51 25 4
gpt4 key购买 nike

    #include<mpi.h>
#include<stdio.h>
int main(int argc,char * argv[])
{
int rank,size,m;
int arr[1000];
int b[100];
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);

if(rank == 0)
{
scanf("%d",&m);
for(int i=0;i<size*m;i++)
{
scanf("%d",&arr[i]);
}

}
MPI_Barrier(MPI_COMM_WORLD);
MPI_Scatter(arr,m,MPI_INT,b,m,MPI_INT,0,MPI_COMM_WORLD);

printf("in process %d \n",rank);
for(int i=0;i<m;i++)
{
printf("%d ",b[i]);
}
printf("\n");

MPI_Finalize();
return 0;
}

输入

mpiexec -n 4 ./three

实际输出

in process 2 
in process 1
in process 3
2
1 2 3 4 5 6 7 8
in process 0
1 2

预期输出

2
1 2 3 4 5 6 7 8
in process 0
1 2
in process 1
3 4
in process 2
5 6
in process 3
7 8

最佳答案

您尚未广播 m 的值,因此只有排名 0 具有正确的值 - 看起来其他排名默认为 m=0,因此它们缺乏输出。

不需要屏障 - MPI 集合自动执行所有必要的同步。

如果您将障碍调用替换为:

MPI_Bcast(&m, 1, MPI_INT, 0, MPI_COMM_WORLD);

那么您的代码将按预期工作(但输出并不像 Gilles 上面指出的那样干净)。

关于c - MPI_Gather 发送和接收数组错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54269514/

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