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