2012-04-25 11 views
3

グループ番号にランク番号の一般化はありますか?私のコードでは、MPI :: COMM_WORLDの階層的分解を作成したいと思います。我々は16スレッドを使用すると仮定します。私はMPI :: COMM_WORLD.Splitを使ってそれぞれ4つのランクを持つ4つのコミュニケータを作成します。対応する4つのグループに固有のIDを提供するMPI関数がありますか?MPIグループへのMPIランク番号の一般化?

答えて

5

まだ、元のランクで各プロセスを参照できる場合は、MPI_COMM_WORLDです。また、colorkeyの引数をそれぞれMPI_Comm_split()として、各プロセスが新しいコミュニケータで受け取るランクを完全に制御できます。これは、古いランクと新しいグループ/ランクとの間のマッピングを作成するのに十分な情報です。

+0

あなたが正しいです、私が 'MPI_Comm_split()'に追加した情報は、私が求めた情報を計算するのに十分です。しかし、コアの数が10.000の場合、それを行うことは自明ではありません。これが私がMPIの基盤上でこれを直接サポートするかどうかを尋ねた理由です。 –

+2

私は十分にシンプルなようです。 N個のM個のプロセスをN個のM個のグループに分割したい場合、各プロセスは '' rank/N'色(オプションで '' rank%N''キー)で 'Split()'を呼び出します。これにより、グループ0にN. 1、グループ1にN。2 * N-1がランク付けされ、各グループ内のプロセスの元の順序が保持されます。グループ「j」におけるランク「i」を有するプロセスは、「MPI_COMM_WORLD」においてランク「j * N + i」を有するプロセスである。 – suszterpatt

1

@ suszterpattの答えが気に入らない場合は、常にデカルトコミュニケータを悪用し、コミュニケータのインデックス(2,3)のプロセスが階層分解のグループ2のプロセス3であるとふりまとうことができます。

しかし、これを読んで、私がそのような虐待を勧めているという印象を取り除くと、単なる考えです。