Coll模式
Coll模式下使用Hyper MPI的UCG功能,使用时不必加--mca coll ^ucg参数。Coll模式目前支持五种MPI集合操作:Allreduce、Bcast、Barrier、Allgatherv、Scatterv。
Coll模式分默认算法和指定算法两种模式:
- 默认算法实现了基于包长、PPN、节点数三个参数的算法自动选择功能,即根据不同的包长、PPN、节点数选择不同的算法。
PPN:表示每个节点的进程数。
- 指定算法模式则需要利用命令行参数进行特定算法的指定。
默认算法模式
Hyper MPI在默认情况下根据包长、PPN、节点数三个参数进行算法选择,在使用时直接运行mpirun命令即可,不用添加额外参数。
- Allreduce、Bcast、Allgatherv和Scatterv集合操作默认算法根据包长、PPN、节点数三个参数进行选择。
- Barrier集合操作默认算法根据PPN和节点数进行选择。
运行命令示例如下:
mpirun -np 16 -N 2 --hostfile hf test_case
指定算法模式
- 方法1:通过命令行参数指定算法。
- 使用PuTTY工具,以Hyper MPI普通用户,如“hmpi_user”登录作业执行节点。
- 在mpirun命令中增加如下参数。
-x UCG_PLANC_UCX_ALLREDUCE_ATTR=I:nS:200R:0-
- 方法2:通过设置环境变量的方式来选择对应的算法。

- UCG_PLANC_UCX_ALLREDUCE_ATTR:表示Allreduce的算法参数,其他可选参数请参见表6。
- I:表示算法编号。
- n:表示对应算法的序号。如果算法选择的数值不在有效范围内,则会执行默认算法。
- S:表示算法分数(默认INT_MAX),可以不指定。
- R:表示算法包大小范围(默认[0,max)),可以不指定。
算法序号与算法对应关系参考地图如表1、表2、表3、表4和表5所示。
算法序号 |
算法内容 |
备注 |
---|---|---|
1 |
Recursive |
完成源码安装Hyper MPI后即可使用 |
2 |
Node-aware Recursive+Binomial |
完成源码安装Hyper MPI后即可使用 |
3 |
Socket-aware Recursive+Binomial |
完成源码安装Hyper MPI后即可使用 |
4 |
Ring |
完成源码安装Hyper MPI后即可使用 |
5 |
Node-aware Recursive+K-nomial |
完成源码安装Hyper MPI后即可使用 |
6 |
Socket-aware Recursive+K-nomial |
完成源码安装Hyper MPI后即可使用 |
7 |
Node-aware K-nomial+K-nomial |
完成源码安装Hyper MPI后即可使用 |
8 |
Socket-aware K-nomial+K-nomial |
完成源码安装Hyper MPI后即可使用 |
12 |
Rabenseifner |
完成源码安装Hyper MPI后即可使用 |
13 |
Node-aware Rabenseifner |
完成源码安装Hyper MPI后即可使用 |
14 |
Socket-aware Rabenseifner |
完成源码安装Hyper MPI后即可使用 |
算法序号 |
算法内容 |
备注 |
---|---|---|
2 |
Node-aware Binomial+Binomial |
完成源码安装Hyper MPI后即可使用 |
3 |
Node-aware K-nomial+Binomial |
完成源码安装Hyper MPI后即可使用 |
4 |
Node-aware K-nomial+K-nomial |
完成源码安装Hyper MPI后即可使用 |
6 |
Ring |
完成源码安装Hyper MPI后即可使用 |
算法序号 |
算法内容 |
备注 |
---|---|---|
1 |
Recursive |
完成源码安装Hyper MPI后即可使用 |
2 |
Node-aware Recursive+Binomial |
完成源码安装Hyper MPI后即可使用 |
3 |
Socket-aware Recursive+Binomial |
完成源码安装Hyper MPI后即可使用 |
4 |
Node-aware Recursive+K-nomial |
完成源码安装Hyper MPI后即可使用 |
5 |
Socket-aware Recursive+K-nomial |
完成源码安装Hyper MPI后即可使用 |
6 |
Node-aware K-nomial+K-nomial |
完成源码安装Hyper MPI后即可使用 |
7 |
Socket-aware K-nomial+K-nomial |
完成源码安装Hyper MPI后即可使用 |
算法序号 |
算法内容 |
备注 |
---|---|---|
1 |
Neighbor exchange |
完成源码安装Hyper MPI后即可使用 |
2 |
Ring |
完成源码安装Hyper MPI后即可使用 |
3 |
Ring-HPL |
完成源码安装Hyper MPI后即可使用 |
4 |
Linear |
完成源码安装Hyper MPI后即可使用 |
5 |
Bruck |
完成源码安装Hyper MPI后即可使用 |
Hyper MPI兼容Open MPI的命令参数,详情请参见https://www.open-mpi.org/doc/current/man1/mpirun.1.php;Hyper MPI新增命令参数说明参见表6。
参数 |
参数含义 |
---|---|
-x UCG_PLANC_UCX_ALLREDUCE_FANOUT_INTER_DEGREE= |
Allreduce K叉树节点间扇出值。 |
-x UCG_PLANC_UCX_ALLREDUCE_FANIN_INTER_DEGREE= |
Allreduce K叉树节点间扇入值。 |
-x UCG_PLANC_UCX_ALLREDUCE_FANOUT_INTRA_DEGREE= |
Allreduce K叉树节点内扇出值。 |
-x UCG_PLANC_UCX_ALLREDUCE_FANIN_INTRA_DEGREE= |
Allreduce K叉树节点内扇入值。 |
-x UCG_PLANC_UCX_BARRIER_FANOUT_INTER_DEGREE= |
Barrier K叉树节点间扇出值。 |
-x UCG_PLANC_UCX_BARRIER_FANIN_INTER_DEGREE= |
Barrier K叉树节点间扇入值。 |
-x UCG_PLANC_UCX_BARRIER_FANOUT_INTRA_DEGREE= |
Barrier K叉树节点内扇出值。 |
-x UCG_PLANC_UCX_BARRIER_FANIN_INTRA_DEGREE= |
Barrier K叉树节点内扇入值。 |
-x UCG_PLANC_UCX_BCAST_ATTR= |
Bcast的算法参数,“=”号后面的数字代表对应的算法序号,例如:-x UCG_PLANC_UCX_BCAST_ATTR=I:2,就代表Bcast的算法2。 |
-x UCG_PLANC_UCX_ALLREDUCE_ATTR= |
Allreduce的算法参数,“=”号后面的数字代表对应的算法序号,例如:-x UCG_PLANC_UCX_ALLREDUCE_ATTR=I:7,就代表Allreduce的算法7。 |
-x UCG_PLANC_UCX_BARRIER_ATTR= |
Barrier的算法参数,“=”号后面的数字代表对应的算法序号,例如:-x UCG_PLANC_UCX_BARRIER_ATTR=I:4,就代表Barrier的算法4。 |
-x UCG_PLANC_UCX_ALLGATHERV_ATTR= |
Allgatherv的算法参数,“=”号后面的数字代表对应的算法序号,例如:-x UCG_PLANC_UCX_ ALLGATHERV_ATTR=I:3,就代表Allgatherv的算法3。 |
-x UCG_PLANC_UCX_SCATTERV_ATTR= |
Scatterv的算法参数,“=”号后面的数字代表对应的算法序号,例如:-x UCG_PLANC_UCX_ SCATTERV_ATTR=I:1,就代表Scatterv的算法1。 |
-x UCG_PLANC_UCX_BCAST_NA_KNTREE_INTER_DEGREE= |
配置Bcast的node-aware kntree算法节点之间的K值,默认值为8。 |
-x UCG_PLANC_UCX_BCAST_NA_KNTREE_INTRA_DEGREE= |
配置Bcast的node-aware kntree算法节点内的K值,默认值为2。 |
-x UCG_PLANC_UCX_REDUCE_KNTREE_DEGREE= |
配置Reduce的kntree算法的K值,默认值为2。 |
-x UCG_PLANC_UCX_SCATTERV_KNTREE_DEGREE= |
配置Scatterv的kntree算法的K值,默认值为2。 |
-x UCG_PLANC_UCX_SCATTERV_MIN_SEND_BATCH= |
配置Scatterv的Linear算法发送批处理模式的最小边界值,默认值为auto。 |
-x UCG_PLANC_UCX_SCATTERV_MAX_SEND_BATCH= |
配置Scatterv的Linear算法发送批处理模式的最大边界值,默认值为auto。 |
-x UCG_PLANC_UCX_NPOLLS= |
p2p请求测试ucp进度轮询周期数,默认值为3。 |
-x UCG_PLANC_UCX_USE_OOB= |
复用ompi pml ucx链路,默认值为try。具体取值如下:
|
-x UCG_USE_MT_MUTEX= |
在UCG中使用互斥体来支持多线程,参数值y为使用mutex锁;n为使用默认的spinlock锁。默认值为n。 |
-x UCG_LOG_LEVEL= |
指定UCG日志级别,参数值为:fatal、error、warn、info、debug、trace,默认值为warn。 |
--mca coll_ucg_priority |
Hyper MPI调用UCG模块的优先级,值越大,优先级越高,默认值90,例如:--mca coll_ucg_priority 100,代表设置UCG优先级为100。 |
--mca coll_ucg_verbosity |
UCG组件的日志详细程度,默认值2。 |
--mca coll_ucg_max_rcache_size |
设置coll ucg组件的请求cache大小,默认是0,0即是关闭。设置为1024,即是开放1024个cache。 |
--mca coll_ucg_disable_coll |
设置运行时禁用部分集合操作,例如:--mca coll_ucg_disable_coll barrier,bcast(禁用多个集合操作之间用逗号隔开)。 |