这是在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]);`
答案 0 :(得分:0)
您的问题是,在MPI_SEND
和MPI_RECV
调用中,您将数据类型定义为MPI_INT
,这解释了为什么它可以作为整数运行。您需要将其更改为MPI_DOUBLE
才能使用双
答案 1 :(得分:0)
通常这表示数据类型问题 您发送的数据超过 32 位,开始显示不正确的数据(例如 2293552 和 28079928 ) 为了避免此类问题,请改用 double 数据类型 我通常在 mpi 中使用 double 来避免数据类型问题