0

現在、プロセスを異なるグループにグループ化する mpi4py プロジェクトに取り組んでいます。次に、これらのグループをそれぞれのコミュニケーターに割り当てます。これらの手順は、プロセス 0 によって実行されます。

ここでの問題は、他のプロセスがどのコミュニケーターに属しているかをどのように見つけることができるかということです。

グループのサイズが異なることに注意してください。たとえば、グループ 1 には 5 つのプロセスが含まれ、グループ 2 には 3 つのプロセスが含まれます。では、プロセス 4 (グループ 1 内) がグループ 1 からコミュニケーターを取得するにはどうすればよいでしょうか。

4

2 に答える 2

0

すべてのプロセスが同じ初期化を行うようにすることで問題を解決しました。つまり、すべてのプロセスがすべてのグループとコミュニケーターを作成し、同じスキーマに従ってこれらのグループにプロセスを割り当てます。このようにして、プロセスは対応するコミュニケーターを認識します。

興味深いことに、すべてのプロセスがすべてのグループとコミュニケーターを作成しますが、それらは自分が属するコミュニケーター (およびグループ) しか知らないことがわかりました。たとえば、コミュニケーター 1 に属しているが 2 には属していないプロセス 4 がコミュニケーター 2 を使用しようとすると、プロセスはクラッシュします。エラーメッセージによると、これはコミュニケーターを最初に初期化したものの、知らないためです。

于 2016-02-05T14:54:25.603 に答える
0

MPI does this for you. Take a look at MPI_COMM_SPLIT, or in mpi4py it would be COMM.Split(). The important parameters are the 'color' (which group processes will end up in) and 'key' (what order a process will be in that group).

It sounds like you already know how you want to 'color' your processes. COMM.Split() is collective over the parent communicator, so you'll compute on each node what the color should be, then split the communicator. You can likely leave the key alone, in which case the processes will be sorted according to their rank in the parent communicator.

于 2016-01-20T20:21:57.887 に答える