我们的计算集群上运行着一个流体力学模拟程序,使用HyperMPI进行通信。程序本身的并行负载比较均衡,但服务器上偶尔会有其他用户的低优先级任务占用部分核心,导致MPI进程中少数几个的CPU资源被抢占,运行速度比其它进程慢一截。按理说这种短暂的不均衡MPI库应该能够处理,最多就是整体运行时间变长。但在HyperMPI下出现了一个奇怪的现象:一旦某个进程因为CPU资源紧张而慢下来,整个作业就会在一段时间后彻底卡住,不再有任何进展。卡住的时候所有进程既没有报错也没有退出,就是通信不再推进。通过信号跟踪发现,那些没有被抢占的进程都卡在MPI_Wait或MPI_Test上,在等待一个永远不会到达的消息。而那个被抢占的慢进程实际上还在处理数据,只是进展很慢。用OpenMPI跑同样的场景,虽然整体会被拖慢但不会卡死。想请教这种现象是否和HyperMPI的进度引擎有关,有没有办法调整参数来避免这种假死。
我们的计算集群上运行着一个流体力学模拟程序,使用HyperMPI进行通信。程序本身的并行负载比较均衡,但服务器上偶尔会有其他用户的低优先级任务占用部分核心,导致MPI进程中少数几个的CPU资源被抢占,运行速度比其它进程慢一截。按理说这种短暂的不均衡MPI库应该能够处理,最多就是整体运行时间变长。但在HyperMPI下出现了一个奇怪的现象:一旦某个进程因为CPU资源紧张而慢下来,整个作业就会在一段时间后彻底卡住,不再有任何进展。卡住的时候所有进程既没有报错也没有退出,就是通信不再推进。通过信号跟踪发现,那些没有被抢占的进程都卡在MPI_Wait或MPI_Test上,在等待一个永远不会到达的消息。而那个被抢占的慢进程实际上还在处理数据,只是进展很慢。用OpenMPI跑同样的场景,虽然整体会被拖慢但不会卡死。想请教这种现象是否和HyperMPI的进度引擎有关,有没有办法调整参数来避免这种假死。