[英]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.