指定生成MPI进程的主机(排名)

时间:2013-12-23 01:26:16

标签: python mpi spawn

我有一些使用MPI的多代理系统。我用mpiexec -np 1 Admin.py : -np 4 Other.py开始主要演员。每个“other.py”也会产生一个进程。为了提高计算效率,我真的希望将生成的进程放在与父进程相同的处理器(rank)上。我怎样才能做到这一点? (并且好奇心: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.

1 个答案:

答案 0 :(得分:0)

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

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

要了解流程的运行位置,请使用MPI.Get_processor_name()。在大多数集群系统上,它返回调用进程执行的节点的主机名。