这是在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_SEND
和MPI_RECV
调用中,您将数据类型定义为MPI_INT
,这解释了为什么它作为整数工作。您需要将其更改为MPI_DOUBLE
才能使用双精度
关于c - MPI-C-发送数组的行为很奇怪,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20206869/