如何找到MPI可用的核心数(4PY)?在
动机
我的Python程序分层生成MPI实例。在
第一次生成总是发生并创建4个实例。由于我的计算结构,增加这个数字没有意义,所以我硬编码了它。在
根据主程序的命令行选项,4个实例中的每个实例都会调用几乎线性伸缩的外部Python软件。在
我把这个外部软件叫做
N=3
child=MPI.COMM_SELF.Spawn(sys.executable,args=[`external.py`],maxprocs=N)
目前,我使用N=3
使第一个spawn的4个实例每个产生3个外部程序实例,总共产生12个实例,与我工作站上的核心数量相匹配。在
但是,为了便于携带,我想
^{pr2}$这样就不需要硬编码可用核心的数量。在
这有可能吗?有道理吗?在
注意事项
我原本希望不指定maxprocs就可以完成这项工作,就像mpirun
与out -np
生成尽可能多的实例一样。但是,Spawn
则默认为maxprocs=1
。在
外部库的调用是阻塞的,这就是为什么我不(不)从N_avail
中的第一个派生中减去4个实例。在
我不能只使用multiprocessing.cpu_count()
,因为这只会给我当前节点上的核心(在集群设置中)。我计划使用SLURM调度程序在集群上运行我的代码。在
world communicator的属性可能提供预期的进程总数:
MPI_UNIVERSE_SIZE
。参见MPI标准http://mpi-forum.org/docs/mpi-3.1/mpi31-report/node253.htm#Node253在mpi4py中,可以打印为:
在OpenMPI mpirun universe size之后,可以通过尝试来测试此功能:
^{pr2}$如果您的MPI版本高于或等于3,MPI信息^{} 可以帮助您。它有两个键,可以提供一些信息:
要在mpi4py中使用它,可以尝试:
相关问题 更多 >
编程相关推荐