我们有一个基于MPI的分布式任务框架,支持在运行过程中动态增加工作进程。具体做法是用MPI_Comm_spawn在已有的通信域中动态添加一批新进程。在Intel平台配合OpenMPI时这个功能一直工作正常。最近我们将整个框架迁移到鲲鹏集群上,并换用了HyperMPI。初始启动的进程之间通信没有问题,但是当主进程调用MPI_Comm_spawn添加新进程后,出现了奇怪的现象:部分新加入的进程可以正常收发消息,但有少数新进程在执行MPI_Allreduce这类集合操作时会卡住。卡住的进程既不报错也不退出,其他进程会一直等待它。如果用MPI_Comm_abort强行终止它,整个作业就会崩溃。我们检查过动态添加的进程数量符合HyperMPI的文档中给出的限制,而且卡住的现象每次发生在新进程中的固定某几个上(比如总是第3和第5个新进程)。想请教这种动态进程场景下集合通信卡死的问题应该如何排查和解决。
我们有一个基于MPI的分布式任务框架,支持在运行过程中动态增加工作进程。具体做法是用MPI_Comm_spawn在已有的通信域中动态添加一批新进程。在Intel平台配合OpenMPI时这个功能一直工作正常。最近我们将整个框架迁移到鲲鹏集群上,并换用了HyperMPI。初始启动的进程之间通信没有问题,但是当主进程调用MPI_Comm_spawn添加新进程后,出现了奇怪的现象:部分新加入的进程可以正常收发消息,但有少数新进程在执行MPI_Allreduce这类集合操作时会卡住。卡住的进程既不报错也不退出,其他进程会一直等待它。如果用MPI_Comm_abort强行终止它,整个作业就会崩溃。我们检查过动态添加的进程数量符合HyperMPI的文档中给出的限制,而且卡住的现象每次发生在新进程中的固定某几个上(比如总是第3和第5个新进程)。想请教这种动态进程场景下集合通信卡死的问题应该如何排查和解决。