中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

关于指定算法模式的若干说明

关于MPI_Allreduce指定算法的说明

目前MPI_Allreduce集合操作,在选用算法3、6、8时需要加上以下选项,保证进程数在socket上平均分布(socket-aware类算法不支持socket间进程数不均衡),命令如下:

--map-by-socket --rank-by-core

在选用算法5、6时,因节点内为K-nomial算法,需要引入调节K-nomial tree结构的K值参数,示例命令如下:

-x UCX_BUILTIN_DEGREE_INTRA_FANOUT=3

-x UCX_BUILTIN_DEGREE_INTRA_FANIN=8

在选用算法7、8时,因节点内与节点间都采用K-nomial算法,需要引入调节K-nomial tree结构的K值参数,示例命令如下:

-x UCX_BUILTIN_DEGREE_INTER_FANOUT=7 -x UCX_BUILTIN_DEGREE_INTER_FANIN=7

-x UCX_BUILTIN_DEGREE_INTRA_FANOUT=3 -x UCX_BUILTIN_DEGREE_INTRA_FANIN=8

为提高性能,也可加入以下选项:

--bind-to core -x UCX_TLS=sm,rc_x

综上,在调用MPI_Allreduce时,推荐选用的算法8,其中K值需根据具体的节点及ppn数目调节,运行命令示例如下(ARM):

mpirun -np 16 -N 2 --hostfile hf --mca btl ^vader,tcp,openib --map-by socket --rank-by core --bind-to core -x UCX_TLS=sm,rc_x -x UCX_BUILTIN_ALLREDUCE_ALGORITHM=8 -x UCX_BUILTIN_DEGREE_INTER_FANOUT=7 -x UCX_BUILTIN_DEGREE_INTER_FANIN=7 -x UCX_BUILTIN_DEGREE_INTRA_FANOUT=3 -x UCX_BUILTIN_DEGREE_INTRA_FANIN=8 osu_allreduce

关于MPI_Bcast指定算法的说明

目前,MPI_Bcast集合操作,在调用算法3时,因为节点间K-nomial算法,需要加上调节K值的参数,命令示例如下:

-x UCX_BUILTIN_DEGREE_INTER_FANOUT=7

在调用算法4时,因为节点内与节点间都采用了K-nomial算法,需要加上两个调节K值的参数,命令示例如下:

-x UCX_BUILTIN_DEGREE_INTER_FANOUT=7

-x UCX_BUILTIN_DEGREE_INTRA_FANOUT=3

为提高性能,也可加入以下选项:

--bind-to core –x UCX_TLS=sm,rc_x

综上,在调用MPI_Bcast时,推荐选用算法3,其中K值需根据具体的节点及ppn数目调节,运行命令示例如下(ARM):

mpirun -np 16 -N 2 --hostfile hf --mca btl ^vader,tcp,openib --bind-to core -x UCX_TLS=sm,rc_x -x UCX_BUILTIN_BCAST_ALGORITHM=3 -x UCX_BUILTIN_DEGREE_INTER_FANOUT=7 osu_bcast

关于MPI_Barrier指定算法的说明

从算法地图中可知,Barrier的算法是Allreduce算法的子集,因此可对照MPI_Allreduce指定算法说明部分,不再赘述。

推荐命令

在调用Hyper MPI跑应用时,会同时调用MPI_Allreduce、MPI_Bcast操作,此时的推荐算法命令示例如下(ARM):

mpirun -np 16 -N 2 --hostfile hf --mca btl ^vader,tcp,openib --map-by socket --rank-by core --bind-to core -x UCX_TLS=sm,rc_x -x UCX_BUILTIN_BCAST_ALGORITHM=4 -x UCX_BUILTIN_ALLREDUCE_ALGORITHM=8 -x UCX_BUILTIN_DEGREE_INTER_FANOUT=7 -x UCX_BUILTIN_DEGREE_INTER_FANIN=7 -x UCX_BUILTIN_DEGREE_INTRA_FANOUT=3 -x UCX_BUILTIN_DEGREE_INTRA_FANIN=8 ./wrf.exe

特性支持与功能回退说明

并不能要求所有的算法支持所有的场景,以下几种场景属于部分算法支持:

场景一:节点进程不均衡(即ppn不均衡)

mpirun提交任务不指定ppn或者使用rankfile等情况下,可能出现节点进程不均衡的场景,和binomial tree相关的感知到node层topo-aware算法(Bcast算法2,Allreduce算法2)可支持ppn不均衡的场景;其余topo感知算法目前不支持进程在socket或node上不均匀分布的情况。

当用户指定算法不能支持ppn不均衡场景时,会进行算法切换并给出提示如下信息:

“Current algorithm don't support ppn unbalance case, switch to default algorithm”

场景二:socket进程不均衡

所有的socket-aware算法都要求socket进程数均衡;指定socket-aware算法且socket进程数不均衡时,会切换到node-aware算法并给出提示信息:

“Warning: process number in every socket must be same in socket-aware algorithm, please make sure ppn must be even and '--map-by socket' included. Switch to corresponding node-aware algorithm already”

场景三:非对易操作

MPI标准支持在MPI_Allreduce内用户进行自定义数学操作,即不局限于求和(MPI_SUM)、乘积(MPI_PROC)等MPI内置的数学操作;用户在自定义数学操作时会出现操作本身不对易的情况,如矩阵乘法。Allreduce算法1和算法4支持此类操作。

当用户指定算法不是算法1或算法4时,HMPI会根据数据大小切换成算法1(中小包)或者算法4(大包),并给出如下提示:

“Current algorithm does not support non commutative operation, and switch to Recursive doubling or Ring Algorithm which may have unexpected performance”

场景四:超大datatype

MPI标准支持用户进行自定义数据类型,即不局限于整数类型(MPI_INT)、双精度型(MPI_DOUBLE)等MPI内置的数据类型;用户自定义的数据类型有可能过长导致出错。Allreduce算法1和算法4支持此类操作,提示如下:

“Current algorithm does not support large datatype, and switch to Recursive doubling or Ring Algorithm which may have unexpected performance”

场景五:Allreduce算法8,socket内仅有一个进程场景

由于算法8实现的特殊性,当指定算法8且socket内仅有一个进程时,会被切换成算法7。

场景六:使用拓扑感知算法,但感知单元内进程号不连续

只有非拓扑算法、Allreduce算法2和Bcast算法2支持此场景;当指定算法不在这几个算法之列时,自动切换算法并给出提示:

“Current algorithm demand rank number is continous. Switch default algorithm whose performance may be not the best”