c - MPI 星型(中心辐射型)通信器的性能是否优于 MPI_COMM_WORLD?

标签 c performance mpi topology communicator

让我们考虑以下 MPI 应用程序的简单场景:根进程广播 (MPI_Bcast) 一些参数(几十个字节 - 固定大小),然后所有节点开始执行一些计算,然后root 收集结果(MPI_Gather - 可能是非常大的数据集)。数据被root保存后,程序结束。

在什么情况下(进程数、延迟等)(如果有)使用虚拟星形拓扑创建的通信器比使用 MPI_COMM_WORLD 提供更好的性能,为什么?通信器是否对实际 channel 使用惰性初始化(即仅在第一次需要时打开管道、套接字等)。此行为实现依赖吗?

注意:我使用的是 openmpi1.4.3-2 和纯 C。

最佳答案

通信器拓扑是方便的映射功能,它们不需要改变实际通信发生的方式。即使在星形或任何其他图形拓扑中存在未连接的进程(在拓扑意义上),如果它们知道通信器中其他进程的等级,这也不会阻止它们相互发送消息. MPI 实现可能会使用拓扑作为优化通信路径的提示,但这会使它们成为非常复杂的代码片段,至少 Open MPI 在其集体算法中不会这样做(没有经过很好的测试,因此通常禁用的 hierarch 集合组件考虑硬件层次结构,但不考虑虚拟拓扑)。

如果将 reorder=1 给通信器构造函数,拓扑可能会通过重新排序影响通信。这使 MPI 实现可以自由地重新排序进程等级,以便尽可能接近地将它们的物理位置与提供给构造函数的拓扑方案相匹配,给定下面硬件的物理拓扑。有带有专用网络的硬件平台用于集体操作。例如,IBM Blue Gene/P 有一个全局中断网络,允许快速实现 MPI_BARRIER 和一个专门的集体网络,可以加速一些集体操作(包括广播)。但这些只能在 MPI_COMM_WORLD 上使用 - 后备软件实现用于任何其他通信器。

Is this behavior implementation dependent?

是的,它依赖于实现系统(对于支持多个硬件/通信系统的实现)。这也是您其余问题的答案。

关于c - MPI 星型(中心辐射型)通信器的性能是否优于 MPI_COMM_WORLD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13892768/

相关文章:

python - 在 numpy 数组中查找条件索引的最快方法

performance - L2/L3缓存可以全部被数据使用吗?如果是这样,为什么 Graviton 3 带宽图在 L2/L3 大小一半后下降,但只是逐渐下降?

linux - 如何设计 Web 应用程序以在 Web 浏览器中监视服务器状态

python - 如何从 python 脚本执行 mpirun 或 mpiexec 命令?

c - 显示功能问题

将正斜杠转换为反斜杠

c - ld : file was built for unsupported file format on Mac OS X

c - 通过 system() C/C+ 将 mpi 等级传递给 bash 脚本;奇怪的错误

mpi - 带有 SysV 共享内存的异步 MPI

c - 字符集是机器相关的还是语言相关的?