我希望多播一组不超过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_ranks,其大小为num_ngbrs。