构建MPI通信器时,我们有三种方式:
int MPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm);
int MPI_Comm_create_group(MPI_Comm comm, MPI_Group group, int tag, MPI_Comm *newcomm);
int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm);
那么哪一个是最有效的方式?
答案 0 :(得分:0)
正如Zulan先前所说,这些是具有不同语义的不同子程序。
从效果的角度来看,我不希望MPI_Comm_create()
和MPI_Comm_split()
MPI_Comm_create_group()
与手册页有点不同:
MPI_Comm_create_group类似于MPI_Comm_create;然而, MPI_Comm_create必须由 comm 组中的所有进程调用, 而MPI_Comm_create_group必须由中的所有进程调用 group ,这是comm的一个子组。
从性能的角度来看,这意味着如果comm
中只有一小部分MPI任务最终会出现在合法的沟通者中,那么就有优化的空间。
请注意,这只是基于定义的观察,我没有在任何MPI库上运行任何基准测试,因此您的环境可能没有任何性能优势。