gpt4 book ai didi

c - 无法将数组发送到 MPI 中的正确目标处理器

转载 作者:行者123 更新时间:2023-11-30 14:54:35 26 4
gpt4 key购买 nike

我正在尝试将数组发送到超立方体架构中的不同处理器。问题是它要么不发送到所有处理器,要么发送到错误的处理器。当我尝试发送单个整数时,它工作正常。

这是代码:

void hypercube(int d,int my_id,int X[]){
mask = (int)pow((double)2,d)-1;
for(i = d-1;i>=0;i--){
//printf("before xor mask is %d and power is %d\n",mask,(int)pow((double)2,i));
mask = xor(mask,(int)pow((double)2,i));
//printf("After xor rank is %d and mask is %d\n",rank,mask);
if(and(my_id, mask) == 0){
if(and(my_id,(int) pow((double)2,i)) == 0){
dest = xor(my_id,(int) pow((double)2,i));
printf("rank %d destination %d\n",rank,dest);
MPI_Send(&X,8,MPI_INT,dest,tag,MPI_COMM_WORLD);;
//MPI_Send(&X,1,MPI_INT,dest,tag,MPI_COMM_WORLD);
//printf("After sending from rank %d and destination is %d\n",my_id,dest);
}
else{
//printf("going to receive in a sec...\n");
source = xor(my_id,(int)pow((double)2,i));
MPI_Recv(&X,8,MPI_INT,source,tag,MPI_COMM_WORLD,&status);
//MPI_Recv(&X,1,MPI_INT,source,tag,MPI_COMM_WORLD,&status);
//printf("in rank %d with data %d\n",rank,X);

}
}
}
}

int main(int argc, char **argv){


MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&world_size);;
MPI_Comm_rank(MPI_COMM_WORLD,&rank);


if(rank == master){
//a[ARR_SIZE] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
// q = 4;
}

hypercube(3,rank,a);


return 0;
}

还有什么我没处理好的吗?

最佳答案

您的数组声明为 int X[],因此您必须传递给 MPI_Send()MPI_Recv() 的缓冲区为X 而不是 &X

注意传递 &X[0] 也是正确的,但我宁愿建议 X 因为它更简单。

关于c - 无法将数组发送到 MPI 中的正确目标处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46616284/

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