我接收奴隶数据时遇到问题,我不知道问题出在哪里。我为每个从站发送不同的数据,但所有从站都接收相同的数据。这是我的代码
for (int i = 1; i < slavesCounter; i++){
data = x[cnt]; // x is vector of struct
MPI_Pack(&data.a, 1, MPI_INT, buffer, LENGTH, &position,MPI_COMM_WORLD);
MPI_Pack(&data.b, 1, MPI_INT, buffer, LENGTH, &position,MPI_COMM_WORLD);
MPI_Send (buffer, position, MPI_PACKED, i, tag, MPI_COMM_WORLD);
cnt++;
}
这是奴隶部分
while(true){
position = 0;
MPI_Recv(buffer, LENGTH, MPI_PACKED, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
MPI_Unpack(buffer, LENGTH, &position, &x, 1, MPI_INT, MPI_COMM_WORLD);
MPI_Unpack(buffer, LENGTH, &position, &y, 1, MPI_INT, MPI_COMM_WORLD);
cout << x << " " << y << endl;
}
当我打印接收的数据时,所有从站都获得相同的数据。有人可以帮我,哪里可能有问题?
答案 0 :(得分:0)
您忘记在每次迭代开始时重置position
。
所以你发送的缓冲区变得越来越大,但你没有注意到它,因为你只解包了前两个整数。