如何查看Intel MPI集合通信算法及Broadcast可用算法?
问题背景
在OpenMPI中,可通过以下命令列出Broadcast的所有可用MPI集合通信算法:
ompi_info --param coll tuned -l 9 | grep 'bcast algorithm'
输出包含以下具体算法:
- Binomial
- Recursive doubling
- Ring
- Topology aware binomial
- Topology aware recursive doubling
- Topology aware ring
- Shumilin's
- Knomial
- Topology aware SHM-based flat
- Topology aware SHM-based Knomial
- Topology aware SHM-based Knary
- NUMA aware SHM-based (SSE4.2)
- NUMA aware SHM-based (AVX2)
- NUMA aware SHM-based (AVX512)
但在Intel MPI中,执行impi_info -v I_MPI_ADJUST_BCAST仅显示算法ID范围,无具体算法名称:
impi_info -v I_MPI_ADJUST_BCAST
输出如下:
I_MPI_ADJUST_BCAST
MPI Datatype:
MPI_CHAR
Description:
Control selection of MPI_Bcast algorithm presets.
Arguments- Algorithm identifier
range: 0-18
同样,查询MPI_Allreduce时,执行impi_info -v I_MPI_ADJUST_ALLREDUCE(或添加-all、-e参数)也仅显示ID范围0-26,无具体算法信息。
技术问询
- 如何列出Intel MPI的所有集合通信算法?
- 是否有办法获取Intel MPI中MPI_Bcast的所有具体算法?
回答
1. 列出Intel MPI所有集合通信算法的方法
Intel MPI没有直接通过命令行工具列出所有集合算法名称的官方命令,但可以通过以下两种方式获取相关信息:
- 查看官方文档:Intel MPI的集合通信算法细节会在官方用户指南或优化手册中说明,针对每个集合操作(如Bcast、Allreduce)的预设算法ID对应的具体实现会有明确标注。
- 环境变量调试输出:设置
I_MPI_COLL_VERBOSE=1或更高级别(如2、3)运行MPI程序,程序执行时会输出实际使用的集合通信算法名称及对应的ID。例如:
运行后日志中会包含类似export I_MPI_COLL_VERBOSE=2 mpirun -n 4 ./your_mpi_programMPI_Bcast using algorithm <name> (ID: X)的输出,通过多次测试不同场景(如不同进程数、数据量)可以收集到大部分可用算法。
2. 获取Intel MPI中MPI_Bcast的具体算法
除了上述通用方法外,针对MPI_Bcast可以额外尝试:
- 直接指定算法ID测试:通过设置
I_MPI_ADJUST_BCAST=<algid>强制使用特定ID的算法,结合I_MPI_COLL_VERBOSE输出查看对应的算法名称。例如:
日志会显示该ID对应的算法名称,逐个遍历0-18的ID即可收集所有MPI_Bcast的具体算法。export I_MPI_ADJUST_BCAST=5 export I_MPI_COLL_VERBOSE=2 mpirun -n 4 ./your_bcast_program - 参考Intel MPI优化文档:官方文档中会针对Bcast这类常用操作列出预设算法的适用场景和具体实现,比如常见的Binomial、Ring、Recursive Doubling,以及针对共享内存、NUMA架构优化的特殊版本。
内容的提问来源于stack exchange,提问作者khd
相关产品推荐
相关产品推荐

