Parallel processing MPI_Comm实例是全局的还是私有的?

Parallel processing MPI_Comm实例是全局的还是私有的?,parallel-processing,mpi,Parallel Processing,Mpi,为了概括我的问题,假设我有一个由9个节点组成的小集群,这些节点在3*3矩阵中对齐: 6 7 8 3 4 5 0 1 2 我尝试了几种“本地”通讯器(MPI_Comm),包括: 当前节点的秩和 相邻节点的节点 我试图从MPI_Comm_World中拆分节点,并为每个节点创建新的通信器,但未能使用新的通信器,因为它似乎包含不适用于当前节点的列组 所以我的问题是,是否可以对所有节点只使用一个变量,比如说,每个节点包含不同列组的local_comm。或者我必须使用不同的成员变量,如下所示 MPI_Co

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

6 7 8
3 4 5
0 1 2
我尝试了几种“本地”通讯器(MPI_Comm),包括:

  • 当前节点的秩和
  • 相邻节点的节点 我试图从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};
    
    等等


    提前感谢。

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

    一个更好的主意(尽管这完全取决于您正在做什么)是使用MPI_Cart_create定义处理器矩阵,然后使用普通发送和接收(或ISEND和IRECV)进行通信。这里有一个MPI\u购物车\u创建示例:


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

    这看起来可疑地像是试图编写代码来实现笛卡尔通讯器已经提供的功能。如果
    MPI\u CART\u CREATE
    不是您想要的,请进一步解释。MPI\u CART\u CREATE是我需要的,谢谢您的提示。