我是分布式并行编程的新手。在以下代码中,进程 0 卡在 MPI.Recv 方法执行上。
if (me != 0) {
if (finalTour != null) {
Node[] nodes = new Node[5];
nodes[0] = finalTour;
MPI.COMM_WORLD.Send(nodes, 0, 5, MPI.OBJECT, 0, 0);
}
}
if (me == 0) {
for (int i = 1; i < processes; i++) {
Node[] nodes = new Node[5];
MPI.COMM_WORLD.Recv(nodes, 0, 5, MPI.OBJECT, MPI.ANY_SOURCE, MPI.ANY_TAG);
if (nodes[0] != null) {
if (finalTour != null) {
if (finalTour.cost > nodes[0].cost) {
finalTour = nodes[0];
}
minCostPath = finalTour;
} else {
finalTour = nodes[0];
minCostPath = finalTour;
}
}
}
}
MPI.Finalize();
if (minCostPath != null) {
print(size, minCostPath);
}
当我调试这个片段时,我观察到以下情况:
1. 有时 Recv 方法在相应的 send 方法之前执行。这会造成问题吗?
2. 除了 0 之外的所有进程都向进程 0 发送消息并执行它们的 MPI.Finalize() 方法,而进程 0 正在等待 Recv。问题可能是因为这个吗?