繁体   English   中英

指定在哪个主机(等级)上生成MPI进程

[英]Specify on which host (rank) to spawn MPI processes

我有一些使用MPI的多代理系统。 我从mpiexec -np 1 Admin.py : -np 4 Other.py开始mpiexec -np 1 Admin.py : -np 4 Other.py开始主要角色。 每个“ other.py”也产生一个更多的进程。 为了提高计算效率,我真的希望将生成的进程与父进程放在同一处理器(等级)上。 我该如何实现? (出于好奇:1.默认情况下将它们生成在哪里?2.有没有办法查看进程在哪里运行?)

我的Other.py代码包含以下内容(无MWE)

from mpi4py import MPI
comm = MPI.COMM_WORLD                  
rank = comm.Get_rank() 
...
icomm = MPI.COMM_SELF.Spawn(sys.executable,args["front_process.py",str(rank)],\
 maxprocs=1)

通过向Spawn提供info信息,您通常可以控制将生成的进程放置在何处。

myinfo = MPI.Info.Create()
myinfo.Set("host","%s" % str(rank) )
icomm = MPI.COMM_SELF.Spawn(sys.executable,args=["front_process.py",str(rank)],\
 maxprocs=1,info=myinfo)

但是,添加此“信息”时,MPI崩溃: All nodes which are allocated for this job are already filled.

根据提供的主机列表(如果未提供主机列表,则在本地主机上)中定义的插槽和分配规则(通常作为mpiexec参数提供)产生新进程。 如果您的MPI作业在资源管理器(RM)(例如SGE,LSF等)的监督下运行,并且MPI库与RM紧密集成,则主机列表和可用插槽由RM和MPI_Info对象中的host密钥用作对RM指定列表的过滤器(至少对于Open MPI为true)。

如果不使用RM,则可能应提供一个主机列表,其中为每个主机定义了足够的插槽。 使用Open MPI 1.6.x,可以使用add-host键将新主机添加到列表中。 如果在RM下运行,则应发出适当的请求(这是特定于站点的)。

要找出您的进程在哪里运行,请使用MPI.Get_processor_name() 在大多数群集系统上,它返回执行调用过程的节点的主机名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM