MPI的一种非常奇怪的行为

MPI的一种非常奇怪的行为,mpi,Mpi,我在使用MPI时遇到了一个非常奇怪的错误。无法删除已成功创建的通讯器。删除尝试在除communicator组中包含的节点之外的所有节点上都会导致致命错误。下面是最简单的工作示例。你认为这种奇怪行为的原因是什么 #include <stdio.h> #include <mpi.h> int main(int argc, char* argv[]) { MPI_Group group_world; // group of MPI_COMM_

我在使用MPI时遇到了一个非常奇怪的错误。无法删除已成功创建的通讯器。删除尝试在除communicator组中包含的节点之外的所有节点上都会导致致命错误。下面是最简单的工作示例。你认为这种奇怪行为的原因是什么

#include <stdio.h>
#include <mpi.h>

int main(int argc, char* argv[])
{
    MPI_Group group_world;              // group of MPI_COMM_WORLD
    MPI_Group group_new;                // new group
    MPI_Comm  comm_new;                 // new communicator 
    int group_new_ranks[3]={10,20,30};  // new communicator's ranks 

    MPI_Init(&argc, &argv);

    MPI_Comm_group(MPI_COMM_WORLD, &group_world);                 // get group_world - MPI_SUCCESS for all nodes
    MPI_Group_incl(group_world, 3, group_new_ranks, &group_new);  // get new group - MPI_SUCCESS for all nodes
    MPI_Comm_create(MPI_COMM_WORLD, group_new, &comm_new);        // create new communicator - MPI_SUCCESS for all nodes

    MPI_Comm_free(&comm_new);   // FATAL ERROR for all nodes except 10, 20, 30
    MPI_Group_free(&group_new);
    MPI_Group_free(&group_world);

    MPI_Finalize();
    return 0;
}
#包括
#包括
int main(int argc,char*argv[])
{
MPI_组组世界;//MPI_通信世界组
MPI_Group Group_new;//新建组
MPI_Comm_Comm_new;//新通讯器
int group_new_秩[3]={10,20,30};//新通信者的秩
MPI_Init(&argc,&argv);
MPI_Comm_group(MPI_Comm_WORLD和group_WORLD);//获取group_WORLD-所有节点的MPI_成功
MPI_Group_incl(Group_world,3,Group_new_ranks和Group_new);//获取新组-所有节点的MPI_成功
MPI_Comm_create(MPI_Comm_WORLD、group_new和Comm_new);//创建新通信器-所有节点的MPI_成功
MPI_Comm_free(&Comm_new);//除10、20、30之外的所有节点都出现致命错误
无MPI组(新组和新组);
MPI_Group_free(和Group_world);
MPI_Finalize();
返回0;
}
MPI\u COMM\u NULL
返回给组外的所有进程。您正在向传递
MPI\u COMM\u NULL
,这是不允许的