0

为了概括我的问题,假设我有一个由 9 个节点组成的小集群,这些节点在 3*3 矩阵中对齐:

6 7 8
3 4 5
0 1 2

我正在尝试几个“本地”通信器(MPI_Comm),其中包括:

  1. 当前节点的等级和
  2. 那些相邻的节点。

我试图从 MPI_Comm_World 中拆分节点并为每个节点创建新的通信器,但未能使用新的通信器,因为它似乎包含不针对当前节点的等级。

所以这是我的问题,是否可以对所有节点只使用一个变量,例如 local_comm,它包含每个节点的不同等级。或者我必须使用不同的成员变量,如下所示

MPI_Comm local_comm_0 = {0, 1, 3};
MPI_Comm local_comm_4 = {1, 3, 4, 5, 7};
MPI_Comm local_comm_7 = {4, 6, 7, 8};

ETC...

提前致谢。

4

1 回答 1

2

可以在所有节点上拥有一个同名的变量,但您可能不希望这样做。一个节点将有一个通信器,其中包含与其每个邻居不同的一组节点。在您的示例中,节点 4 和 7 是邻居,但它们的通信器中有不同的节点集。这会引起头痛。

一个更好的主意(尽管这完全取决于您在做什么)是使用 MPI_Cart_create 来定义处理器的矩阵,然后使用普通的 Sends 和 Recvs(或 ISends 和 IRecvs)进行通信。这里有一个 MPI_Cart_create 示例:http: //mpi.deino.net/mpi_functions/MPI_Cart_create.html

如果节点集完全不相交(如 {0,3,6}、{1,4,7}、{2,5,9}),那么我建议创建不同的通信器并为它们提供相同的变量名。但我认为这不会是解决您问题的正确方法。

于 2012-07-03T09:27:54.023 回答