MPI - C - 发送阵列很奇怪

时间:2013-11-26 01:22:34

标签: c arrays mpi

这是在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函数的另一侧接收了这些随机数。我根本不明白这个 - 你能解释一下吗?

已添加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]);`

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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