Hyper MPI中并非每一个算法都支持所有的场景,以下几种场景属于部分算法支持。
使用mpirun命令提交任务不指定PPN或者使用rankfile等情况下,会出现节点进程不均衡的场景,当指定Hyper MPI中Allreduce算法11、13、14,Allgatherv算法7,Scatterv算法3,Barrier算法10时,会自动回退至支持的算法。
使用mpirun命令提交任务不指定PPS或者使用rankfile等情况下,会出现socket进程不均衡的场景,当指定Hyper MPI中Allreduce算法13、14时,会自动回退至支持的算法。
MPI标准支持用户在Allreduce内进行自定义数学操作,即不局限于求和(MPI_SUM)、乘积(MPI_PROC)等MPI内置的数学操作;用户在自定义数学操作时会出现操作本身不对易的情况,如矩阵乘法。Allreduce算法1支持此类操作。
当用户指定算法不是算法1时,Hyper MPI会根据数据包大小回退成算法1(中小包)。
当MPI指定--bind-to为none或者board时,Allreduce算法3、6、8、13、14和Barrier算法3、5、7不支持此场景,会自动回退至支持的算法。
当发送的数量count小于所有节点进程数np时,Allreduce算法4、12、13、14和Bcast算法8不支持此场景,会自动回退至支持的算法。
当发送的数量count对ppn取余不等于0时,Allreduce算法13不支持此场景,会自动回退至支持的算法。
当PPS=1时,Allreduce算法14不支持此场景,会自动回退至支持的算法。
当PPN=1时,Allreduce算法11、13、14,Allgatherv算法7,Scatterv算法3,Barrier算法10不支持此场景,会自动回退至支持的算法。
当np为非二的N次方时,Allreduce算法11,Barrier算法10不支持此场景,会自动回退至支持的算法。
当np为奇数时,Hyper MPI中Allgatherv算法1不支持此场景,会自动回退至支持的算法。
当MPI指定--rank-by node或者--rank-by board时,Scatterv算法3不支持此场景,将自动回退至支持的算法。
当节点数为1时,Hyper MPI中Allgatherv算法7和Scatterv算法3不支持此场景,将自动回退至支持的算法。
当sendbuf为MPI_IN_PLACE时,Hyper MPI中Scatterv算法3不支持此场景,回退到Open MPI。