MacOS 10.9.5运行256进程MPI程序报[warn] select: Invalid argument
嘿,我来帮你捋捋这个问题!从你描述的情况来看,硬件资源明明足够,但大进程数跑不起来,大概率是系统或MPI实现的资源限制在搞鬼,下面给你几个排查和解决的方向:
检查并调整用户进程数上限
MacOS默认会限制每个用户能创建的最大进程数,你可以先在终端里输入ulimit -u看看当前限制值。如果数值低于256,那就是这个问题了!临时调整的话,执行ulimit -u 512(或者更大的数),然后再尝试运行你的MPI程序。要是想永久生效,旧版Mavericks可以编辑/etc/launchd.conf文件,添加一行limit maxproc 512 1024,重启后生效。启用MPI的超订阅模式
你的机器只有8核,却要跑256个进程,属于**超订阅(oversubscribe)**场景。有些MPI实现(比如OpenMPI)默认不允许这种操作,会直接报错。试试在运行命令里加上--oversubscribe参数,比如:mpirun --oversubscribe -np 256 your_mpi_program这个参数会告诉MPI忽略核数限制,允许创建更多进程。
考虑进程实际内存开销
你只算了数组的内存,但每个进程启动时还有MPI运行时的内部结构、语言运行时库、进程本身的内存占用,256个进程加起来的总内存可能比你预估的64MB要多不少。不过你的机器有16G内存,这点开销应该不是核心问题,但可以试试调整栈大小:用ulimit -s查看当前栈大小,执行ulimit -s 8192调大栈空间后再运行程序,排除栈溢出的可能。排查MPI版本与旧系统的兼容性
MacOS 10.9 Mavericks是比较老旧的系统了,如果你用的是较新版本的MPI(比如OpenMPI 4.x以上),可能会存在兼容性问题。试试降级到适配旧系统的MPI版本,比如OpenMPI 3.x系列,看看能不能解决问题。
内容的提问来源于stack exchange,提问作者user1773603

