MPI - 每个从站接收相同的数据
MPI - each slave receives same data
我在接收奴隶数据时遇到问题,我不知道问题在哪里。我为每个奴隶发送不同的数据,但所有奴隶都收到相同的数据。这是我的代码
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;
}
当我打印接收到的数据时,所有从站都得到相同的数据。谁能帮帮我,哪里有问题?
您忘记在每次迭代开始时重置 position
。
所以你发送了一个越来越大的缓冲区,但你没有注意到它,因为你只解包了前两个整数。
我在接收奴隶数据时遇到问题,我不知道问题在哪里。我为每个奴隶发送不同的数据,但所有奴隶都收到相同的数据。这是我的代码
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;
}
当我打印接收到的数据时,所有从站都得到相同的数据。谁能帮帮我,哪里有问题?
您忘记在每次迭代开始时重置 position
。
所以你发送了一个越来越大的缓冲区,但你没有注意到它,因为你只解包了前两个整数。