MPI-C-发送数组代理wierd

MPI-C-发送数组代理wierd,c,arrays,mpi,C,Arrays,Mpi,这是在C中使用MPI的一小段较大的代码。我不明白为什么输出是这样的。 代码: 上述代码的输出: 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 wo

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

上述代码的输出:

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

您的问题是,在
MPI\u SEND
MPI\u RECV
调用中,您将数据类型定义为
MPI\u INT
,这解释了为什么它是一个整数。您需要将其更改为
MPI_DOUBLE
才能使用DOUBLE

您也可以显示您的接收代码吗?这里是
,同时(1){int wor[2];/*从主机接收消息*/MPI_Recv(wor,2,MPI_int,0,MPI_ANY_标记,MPI_COMM_WORLD,&status);printf(“从主机接收%d w1%d w2%d\n”,秩,wor[0],wor[1]);
请将您的接收代码添加到问题中,以使其格式可读。请注意,我刚刚也清理了您的问题。您确定要将
&work
而不是
work
作为
MPI\u Send()的参数吗
?老实说,我当时非常绝望,我尝试了所有有和没有&的组合,所以都没有用。但是,是的,我知道这应该是唯一有效的组合
`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]);`