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