---
title: 指定算法说明
description: "以下算法序号对应的算法内容请参见算法地图。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/devg/userg_huaweimpi_0020.html
sourcePath: /source/zh/kunpenghpcs/hpckit/devg/userg_huaweimpi_0020.html
indexId: 85e69d2da2ff71a7414ed44a071278818d7ddbf728a1e88a067b286740f7abb560
---
# 指定算法说明

以下算法序号对应的算法内容请参见算法地图。


#### 关于Allreduce指定算法的说明

- 在选用算法13、14时，为保证进程数在Socket上平均分布，需要加上以下选项，命令如下：
  --map-by-socket --rank-by-core

- 在选用算法5、6时，节点内采用了K-nomial算法，可通过调节K-nomial tree结构的K值参数值，寻找最优参数值，从而获得最佳性能。K值范围为(0,进程数]。示例命令如下：
  -x UCG_PLANC_UCX_ALLREDUCE_FANOUT_INTRA_DEGREE=3

  -x UCG_PLANC_UCX_ALLREDUCE_FANIN_INTRA_DEGREE=8

- 在选用算法7、8时，节点内与节点间都采用了K-nomial算法，可通过调节K-nomial tree结构的K值参数值，寻找最优参数值，从而获得最佳性能。K值范围为(0,进程数]。示例命令如下：
  -x UCG_PLANC_UCX_ALLREDUCE_FANOUT_INTER_DEGREE=7 -x UCG_PLANC_UCX_ALLREDUCE_FANIN_INTER_DEGREE=7 -x UCG_PLANC_UCX_ALLREDUCE_FANOUT_INTRA_DEGREE=3 -x UCG_PLANC_UCX_ALLREDUCE_FANIN_INTRA_DEGREE=8


为提高性能，也可加入以下选项，调整传输模式：

-x UCX_TLS=sm,rc_x

综上，在调用MPI_Allreduce和MPI_Iallreduce时运行命令示例如下（鲲鹏芯片）：

mpirun -np 16 -N 2 --hostfile hf8 -x UCX_TLS=sm,rc_x -x UCG_PLANC_UCX_ALLREDUCE_ATTR=I:nS:200R:0- test_case


#### 关于Bcast指定算法的说明

- 在选用算法3时，节点间采用了K-nomial算法，可通过调节K值参数值，寻找最优参数值，从而获得最佳性能。K值范围为(0,进程数]。命令示例如下：
  -x UCG_PLANC_UCX_BCAST_NA_KNTREE_INTER_DEGREE=7

- 在选用算法4时，节点内与节点间都采用了K-nomial算法，可通过调节K值参数值，寻找最优参数值，从而获得最佳性能。K值范围为(0,进程数]。命令示例如下：
  -x UCG_PLANC_UCX_BCAST_NA_KNTREE_INTER_DEGREE=7

  -x UCG_PLANC_UCX_BCAST_NA_KNTREE_INTRA_DEGREE=3

- 在选用算法9时，可通过以下参数值调整ESBT算法中划分的块数，寻找最优参数值，从而获得最佳性能。默认值为0，表示auto。命令示例如下：
  -x UCG_PLANC_UCX_BCAST_ESBT_BLOCKS=3

  为提高性能，也可加入以下选项（共享内存Shared Memory和基于任意传输的可靠连接），调整传输模式：


-x UCX_TLS=sm,rc_x

综上，在调用MPI_Bcast和MPI_Ibcast时运行命令示例如下（鲲鹏芯片）：

mpirun -np 16 -N 2 --hostfile hf8 -x UCX_TLS=sm,rc_x -x UCG_PLANC_UCX_BCAST_ATTR=I:nS:200R:0- test_case


#### 关于Barrier指定算法的说明

从算法地图可知，Barrier的算法是Allreduce算法的子集，因此可参考Allreduce指定算法说明，此处不再赘述。


#### 关于Alltoallv指定算法的说明

在选用算法1时，可通过调整以下参数值，调整每次的通信请求次数，请根据实际情况替换。命令示例如下：

-x UCG_PLANC_UCX_ALLTOALLV_LADD_THROTTLED_FACTOR=2

在选用算法5时，需要开启以下参数使能共享内存。命令示例如下：

-x UCG_USE_SHM_POOL=y

为提高性能，也可加入以下选项，调整传输模式：

-x UCX_TLS=sm,rc_x

综上，在调用MPI_Alltoallv和MPI_Ialltoallv时运行命令示例如下（鲲鹏芯片）：

mpirun -np 16 -N 2 --hostfile hf8 -x UCX_TLS=sm,rc_x -x UCG_PLANC_UCX_ALLTOALLV_ATTR=I:nS:200R:0- test_case


#### 关于Scatterv指定算法的说明

- 在选用算法1时，可通过调整以下参数值，寻找最优参数值，从而获得最佳性能。命令示例如下：
  -x UCG_PLANC_UCX_SCATTERV_MIN_SEND_BATCH=7

  -x UCG_PLANC_UCX_SCATTERV_MAX_SEND_BATCH=8

- 在选用算法2时，采用了K-nomial算法，可通过调整K值参数值，寻找最优参数值，从而获得最佳性能。命令示例如下：
  -x UCG_PLANC_UCX_SCATTERV_KNTREE_DEGREE=3

- 在选用算法3时，采用了Node-aware K-nomial tree算法，由于节点间和节点内通信都采用了K-nomial算法，可通过调整节点间和节点内通信的K值参数值，寻找最优参数值，从而获得最佳性能。命令示例如下：
  -x UCG_PLANC_UCX_SCATTERV_NA_KNTREE_INTER_DEGREE=4

  -x UCG_PLANC_UCX_SCATTERV_NA_KNTREE_INTRA_DEGREE=3


- Scatterv操作的算法3在数据量较小的场景下性能较优，数据量大的场景下性能较差。

- 由于Scatterv操作无法根据数据量的大小自动选择最优算法，建议在数据量较小的场景下使用算法3。


为提高性能，也可加入以下选项，调整传输模式：

-x UCX_TLS=sm,rc_x

综上，在调用MPI_Scatterv和MPI_Iscatterv时运行命令示例如下（鲲鹏芯片）：

mpirun -np 16 -N 2 --hostfile hf8 -x UCX_TLS=sm,rc_x -x UCG_PLANC_UCX_SCATTERV_ATTR=I:nS:200R:0- test_case


#### 关于Allgatherv指定算法的说明

为提高性能，可加入以下选项，调整传输模式：

-x UCX_TLS=sm,rc_x

综上，在调用MPI_Allgatherv和MPI_Iallgatherv时运行命令示例如下（鲲鹏芯片）：

mpirun -np 16 -N 2 --hostfile hf8 -x UCX_TLS=sm,rc_x -x UCG_PLANC_UCX_ALLGATHERV_ATTR=I:nS:200R:0- test_case


#### 关于Gather指定算法的说明

- 在选用算法3时，采用了K-nomial算法，可通过调整K值参数值，寻找最优参数值，从而获得最佳性能。命令示例如下：
  -x UCG_PLANC_UCX_GATHER_KNTREE_DEGREE=3

- 在选用算法4时，采用了Node-aware K-nomial tree算法，由于节点间和节点内通信都采用了K-nomial算法，可通过调整节点间和节点内通信的K值参数值，寻找最优参数值，从而获得最佳性能。命令示例如下：
  -x UCG_PLANC_UCX_GATHER_NA_KNTREE_INTER_DEGREE=4

  -x UCG_PLANC_UCX_GATHER_NA_KNTREE_INTRA_DEGREE=3


#### 关于Gatherv指定算法的说明

- 在选用算法3时，采用了K-nomial算法，可通过调整K值参数值，寻找最优参数值，从而获得最佳性能。命令示例如下：
  -x UCG_PLANC_UCX_GATHERV_KNTREE_DEGREE=3

- 在选用算法4时，采用了Node-aware K-nomial tree算法，由于节点间和节点内通信都采用了K-nomial算法，可通过调整节点间和节点内通信的K值参数值，寻找最优参数值，从而获得最佳性能。命令示例如下：
  -x UCG_PLANC_UCX_GATHERV_NA_KNTREE_INTER_DEGREE=4

  -x UCG_PLANC_UCX_GATHERV_NA_KNTREE_INTRA_DEGREE=3
