MPI - 每个从站接收相同的数据

时间:2018-04-20 17:58:56

标签: mpi

我接收奴隶数据时遇到问题,我不知道问题出在哪里。我为每个从站发送不同的数据,但所有从站都接收相同的数据。这是我的代码

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;

    }

当我打印接收的数据时,所有从站都获得相同的数据。有人可以帮我,哪里可能有问题?

1 个答案:

答案 0 :(得分:0)

您忘记在每次迭代开始时重置position

所以你发送的缓冲区变得越来越大,但你没有注意到它,因为你只解包了前两个整数。