1

我使用 MPI_Comm_split 来拆分默认的 MPI 通信器。如果最初默认通信器中有 10 个进程,MPI_COMM_WORLD 和,比如说,它们的等级由 id_original 标识。新的通信器由 4 个进程组成,id_original 为 6,7,8,9。这些进程将在新通信器中具有由 id_new 定义的等级。这两个通信器中的进程等级之间的关系是什么。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的“key”参数来控制新通信器中的顺序。例如,您可以使用 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 回答