我们在一个鲲鹏920节点上运行一个开源的量子化学计算软件,节点配置是128核,操作系统openEuler 22.03。该软件使用MPI进行进程间通信,并且主要在单节点内并行,很少跨节点。我们想用HyperMPI替换OpenMPI来提升性能,但遇到了比较棘手的问题。当运行规模较小比如16个进程时,一切正常。一旦把进程数提升到64个以上,程序就会随机崩溃,错误信息指向内存访问冲突,具体表现为“段错误”或者“双重释放”。通过地址随机化等手段定位,发现崩溃点总是在MPI_Waitall或者MPI_Testall这类等待多个请求完成的函数附近。用Valgrind检测没有发现程序本身的内存错误。用OpenMPI跑同样的程序和进程数,没有任何问题。我们已经尝试了关闭HyperMPI的共享内存优化(设置相关环境变量),但问题依然存在。想请教这种情况是什么原因造成的,是HyperMPI的共享内存实现与软件的通信模式有冲突吗?
我们在一个鲲鹏920节点上运行一个开源的量子化学计算软件,节点配置是128核,操作系统openEuler 22.03。该软件使用MPI进行进程间通信,并且主要在单节点内并行,很少跨节点。我们想用HyperMPI替换OpenMPI来提升性能,但遇到了比较棘手的问题。当运行规模较小比如16个进程时,一切正常。一旦把进程数提升到64个以上,程序就会随机崩溃,错误信息指向内存访问冲突,具体表现为“段错误”或者“双重释放”。通过地址随机化等手段定位,发现崩溃点总是在MPI_Waitall或者MPI_Testall这类等待多个请求完成的函数附近。用Valgrind检测没有发现程序本身的内存错误。用OpenMPI跑同样的程序和进程数,没有任何问题。我们已经尝试了关闭HyperMPI的共享内存优化(设置相关环境变量),但问题依然存在。想请教这种情况是什么原因造成的,是HyperMPI的共享内存实现与软件的通信模式有冲突吗?