1

MPI_Comm_split を使用して、デフォルトの MPI コミュニケーターを分割しました。最初にデフォルトのコミュニケーター MPI_COMM_WORLD に 10 個のプロセスがあった場合、それらのランクは id_original によって識別されました。新しいコミュニケーターは、id_original 6,7,8,9 を持つ 4 つのプロセスで構成されていました。これらのプロセスは、新しいコミュニケーターの id_new によって定義されたランクを持ちます。これら 2 つのコミュニケーターにおけるプロセスのランク間の関係はどうなるでしょうか。id_original が 6,7,8,9 のプロセスは、新しいコミュニケーターでそれぞれ新しいランク 0,1,2,3になりますか、それとも順序が異なる可能性がありますか?

4

2 に答える 2

1

これによると(私による強調):

各サブグループ内で、プロセスは引数 key の値によって定義された順序でランク付けされます

そうです、プロセス 6 ~ 9 が に同じ値を提供する場合key、それらは新しいコミュニケーターでそれぞれランク 0 ~ 3 を取得します。ただし、これがプログラムの正確性にとって重要である場合は、Edric の方法を使用してコード内でこの配置を明示する必要があります。

于 2010-05-13T15:20:08.603 に答える
1

新しいコミュニケーターでの順序を制御するには、MPI_Comm_splitの「キー」引数を使用する必要があります。たとえば、次のように、MPI_Comm_world (または「id_original」) のランクをキーとして使用できます。

MPI_Comm_split( MPI_COMM_WORLD, id_original >= 6 && id_original <= 9,
                id_original, &newComm ); 
于 2010-05-12T14:12:29.963 に答える