【问题标题】:Which of the following three ways is the most efficient when constructing one MPI communicator?在构建一个 MPI 通信器时,以下三种方式中哪一种最有效?
【发布时间】:2017-10-25 08:31:06
【问题描述】:

在构建 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);

那么哪种方法最有效?

【问题讨论】:

  • 它们用于不同的用例。这与效率无关。

标签: parallel-processing mpi


【解决方案1】:

正如 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 库上运行任何基准测试,因此在您的环境中可能没有任何性能优势。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 2015-06-28
    • 2019-02-03
    • 2012-09-09
    • 1970-01-01
    相关资源
    最近更新 更多