发送数组的行为很奇怪

发送数组的行为很奇怪

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

int *work=malloc(2*sizeof(int));
work = get_borders(32);

/* Send it to each rank */
printf("Master sending\n w1 %d w2  %d to slave %d\n",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 %d\n",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函数的另一端接收到的。我一点都不明白,您能解释一下吗?

接收代码已添加

`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 %d\n",rank,wor[0],wor[1]);`

最佳答案

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

关于c - MPI-C-发送数组的行为很奇怪,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20206869/

10-11 21:17