0

我是分布式并行编程的新手。在以下代码中,进程 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。问题可能是因为这个吗?

4

0 回答 0