2

私は MPI から始めて、簡単なデモ プログラムを作成しました。

int main(int argc, char** argv)
{
    MPI_Init(&argc, &argv);
    int myRank = MPI_Comm_rank(MPI_COMM_WORLD, &myRank);
    if (myRank) {
    cout << "slave" << endl;
    }
    else {
    cout << "master" << endl;
    }
    MPI_Finalize();
    return 0;
}

次のコマンドで実行します。

aprun -n 4 test

私の出力は

master
master
master
master

私は何かを期待していた

slave
master
slave
slave

なぜこうなった?すべてのスレッドがマスターになるのはなぜですか?

4

1 に答える 1

6

問題は次の行にあります。

int myRank = MPI_Comm_rank(MPI_COMM_WORLD, &myRank);

MPI_Comm_rankへの呼び出しの結果にmyRankを割り当てないでください。ただ行う:

int myRank;
MPI_Comm_rank(MPI_COMM_WORLD, &myRank);

そしてそれは動作します。

于 2012-05-23T15:09:14.660 に答える