MPI-C-发送数组作用域



这是在C中使用MPI的一小段较大的代码。我不明白为什么输出是这样的。代码:

int *work=malloc(2*sizeof(int));
work = get_borders(32);
/* Send it to each rank */
printf("Master sendingn w1 %d w2  %d to slave %dn",work[0],work[1],rank);
fflush(stdout);
MPI_Send(&work,             /* message buffer */
         2,                 /* one data item */
         MPI_INT,           /* data item is an integer */
         rank,              /* destination process rank */
         10,           /* user chosen message tag */
         MPI_COMM_WORLD);
printf("Check back values...n w1 %d w2  %d for slave %dn",work[0],work[1],rank);
fflush(stdout);

以上代码的输出:

Master sending  w1 0 w2  32 to slave 1 Check back values...  w1
2293552 w2  28079928 for slave 1

问题是0和32的值是正确的,但我不明白为什么会有那么长的数字。最糟糕的是,这些随机数在Recv函数的另一侧被接收。我一点也不明白——你能解释一下吗?

Recv代码添加

`while (1) {
   int  wor[2];
    /* Receive a message from the master */
   MPI_Recv (wor, 2, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
  printf("Slave %d recieving from master w1 %d w2 %dn",rank,wor[0],wor[1]);`

您的问题是,在MPI_SENDMPI_RECV调用中,您将数据类型定义为MPI_INT,这解释了它作为整数工作的原因。您需要将其更改为MPI_DOUBLE才能使用双

通常这会显示数据类型问题您发送的数据超过32位,开始显示不正确的数据(如2293552和28079928)为了避免此类问题,请改用双数据类型我通常在mpi中使用double来避免数据类型问题

最新更新