Hyper MPI中并非每一个算法都支持所有的场景,以下几种场景属于部分算法支持。
使用mpirun命令提交任务不指定PPN或者使用rankfile等情况下,可能出现节点进程不均衡的场景,Hyper MPI中仅MPI_Allreduce算法1、2、4,MPI_Bcast算法2,MPI_Barrier算法1、2,MPI_Alltoallv算法1支持节点进程不均衡场景,当指定其他算法时,将自动回退至支持的算法。
所有的Socket-aware算法都要求socket进程数均衡;指定Socket-aware算法且socket进程数不均衡时,会回退到Node-aware算法。
MPI标准支持用户在MPI_Allreduce内进行自定义数学操作,即不局限于求和(MPI_SUM)、乘积(MPI_PROC)等MPI内置的数学操作;用户在自定义数学操作时会出现操作本身不对弈的情况,如矩阵乘法。MPI_Allreduce算法1和算法4支持此类操作。
当用户指定算法不是算法1或算法4时,Hyper MPI会根据数据包大小回退成算法1(中小包)或者算法4(大包)。
MPI支持自定义数据类型,用户自定义的数据类型过长有可能导致出错。MPI_Allreduce算法1和算法4支持此类操作。
由于算法8实现的特殊性,当指定算法8且socket内仅有一个进程时,会被回退成算法7。
只有非拓扑算法、MPI_Allreduce算法2、MPI_Bcast算法2、MPI_Alltoallv算法1支持此场景;当指定算法不在这几个算法之列时,会自动回退算法。
算法1不支持非连续及超大MPI数据类型,在该两种场景下,将回退至Open MPI默认算法。
算法2不支持sdispls(发送偏移量)与rdispls (接收偏移量)非单调递增场景,将回退至算法1。