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

时间:2017-10-07 03:09:09

标签: c parallel-processing mpi processor hpc

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

以下是代码:

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;
}

有什么我不照顾的吗?

1 个答案:

答案 0 :(得分:1)

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

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