8

MPI_COMM_SELF という MPI コミュニケーターを発見しました。問題は、いつ役立つかわかりません。私には、すべてのプロセスが自分自身をルートとして「考える」ように見えます。

が正確にどのように機能MPI_COMM_SELFし、どのような状況で役立つかを説明していただけますか?

このスライド ショーを見つけましたが、コミュニケーターについては簡単にしか言及されていません。


この「Hello, world」の例を試してみたところ、すべてのプロセスが PID として 0 を返しました。

#include <mpi.h>
#include <stdio.h>

int main() {
    MPI_Init(NULL, NULL);

    int world_rank;
    MPI_Comm_rank(MPI_COMM_SELF, &world_rank);

    printf("Hello, my PID is %d!\n",
            world_rank);

    MPI_Finalize();
    return 0;
}
4

2 に答える 2

4

MPI コミュニケーターは、プロセスのコレクションとそのコレクションのコンテキストの 2 つの情報です。デフォルトのコミュニケーターは、MPI_COMM_WORLD (すべてのプロセス) と MPI_COMM_SELF (1 つのプロセスのみ) です。

すべて、1 つ、または一部のプロセスで、より多くのコミュニケーターを作成できます。

なぜ文脈が重要なのですか?ライブラリを考えてください。MPI を使用するライブラリは、そのライブラリのクライアントと競合する可能性があります。ただし、ライブラリがコミュニケータを複製し、それによってライブラリが通信できるコンテキストを作成し、クライアントが何をしているかを心配する必要はありません。

MPI_COMM_SELF は単一のプロセスです。集合ルーチンを呼び出す場合、コミュニケーター内のすべてのプロセスが参加する必要があります。

MPI_COMM_SELF は、MPI-IO ルーチンに特に役立ちますが、「プロセスごとのファイル」が必要な場合のみです。複数の MPI プロセスとファイルを共有している場合 (おそらく共有する必要があります)、それらの MPI プロセスを含むコミュニケーターを使用してください。

于 2015-05-28T20:14:45.260 に答える