Debugging MPI_通信_创建挂起而无响应

Debugging MPI_通信_创建挂起而无响应,debugging,mpi,mpich,Debugging,Mpi,Mpich,我希望多播到不超过4台机器的组,MPI_bcast是否仍能在多个单播上节省大量时间(请记住,我的组大小很小) 我编写了以下函数来创建一个新的通信器,给出了这些机器的数量和等级 void createCommunicator(MPI_Comm *NGBRS_WORLD, int num_ngbrs, int *ngbrs_ranks) { MPI_Group NGBRS_GROUP, MPI_COMM_GROUP; int ret = MPI_Comm_group

我希望多播到不超过4台机器的组,MPI_bcast是否仍能在多个单播上节省大量时间(请记住,我的组大小很小)

我编写了以下函数来创建一个新的通信器,给出了这些机器的数量和等级

void createCommunicator(MPI_Comm *NGBRS_WORLD, int num_ngbrs, int *ngbrs_ranks)
{
        MPI_Group NGBRS_GROUP, MPI_COMM_GROUP;

        int ret = MPI_Comm_group(MPI_COMM_WORLD, &MPI_COMM_GROUP);
        printf("RETURNED %d\n", ret);

        ret = MPI_Group_incl(MPI_COMM_GROUP, num_ngbrs, ngbrs_ranks, &NGBRS_GROUP);
        printf("RETURNED %d\n", ret);

        ret = MPI_Comm_create(MPI_COMM_WORLD, NGBRS_GROUP, NGBRS_WORLD);
        printf("RETURNED : %d\n", ret);
}
调用此函数时,输出为:

RETURNED 0
RETURNED 0
程序只是挂起在MPI_Comm_create上


对于可能出现的错误或如何调试问题,有什么想法吗?注意,我已经动态地将ngbrs_列组分配为大小num_ngbrs。

要确定,我们需要确认
ngbrs_列组的值在所有列组上都是相同的。另外,请记住,在
MPI_COMM_WORLD
中的每个人都需要调用
createCommunicator
,即使他们不在
NGBRS_WORLD
@WesleyBland,这正是我发现的。每个人都需要打电话给createCommunicator。有没有一种方法可以在不涉及所有人的情况下创建一个新的沟通者?理想情况下,是否有一个进程可以创建新的通信器?没有一个进程可以创建通信器,但是如果您使用支持MPI-3的MPI库版本,您可以使用
MPI\u COMM\u CREATE\u GROUP
MPI\u COMM\u CREATE\u GROUP
仍然是集体的,但仅在新组中的进程上使用,而不是在旧通信器组中的所有进程上使用。如果您找到了解决方案,我们将非常感兴趣。