如何查找MPI(4PY)可用的核心数量?

2024-10-01 13:42:04 发布

您现在位置:Python中文网/ 问答频道 /正文

如何找到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调度程序在集群上运行我的代码。在


Tags: 实例程序编码核心数量软件分层集群
1条回答
网友
1楼 · 发布于 2024-10-01 13:42:04

world communicator的属性可能提供预期的进程总数:MPI_UNIVERSE_SIZE。参见MPI标准http://mpi-forum.org/docs/mpi-3.1/mpi31-report/node253.htm#Node253

MPI provides an attribute on MPI_COMM_WORLD, MPI_UNIVERSE_SIZE, that allows the application to obtain this information in a portable manner. This attribute indicates the total number of processes that are expected. ... An application typically subtracts the size of MPI_COMM_WORLD from MPI_UNIVERSE_SIZE to find out how many processes it should spawn. ...

在mpi4py中,可以打印为:

from mpi4py import MPI

version= MPI.Get_version()
print "mpi version is ",version

comm = MPI.COMM_WORLD
rank = comm.Get_rank()
size = comm.Get_size()
print "size is ",size

universe_size=comm.Get_attr(MPI.UNIVERSE_SIZE)
print "universe size is ",universe_size

OpenMPI mpirun universe size之后,可以通过尝试来测试此功能:

^{pr2}$

如果您的MPI版本高于或等于3,MPI信息^{}可以帮助您。它有两个键,可以提供一些信息:

maxprocs Maximum number of MPI processes to start.

soft Allowed values for number of processors.

要在mpi4py中使用它,可以尝试:

soft=MPI.INFO_ENV.get("soft")
print soft
maxprocs=MPI.INFO_ENV.get("maxprocs")
print maxprocs

相关问题 更多 >