繁体   English   中英

python脚本中mpirun的替代方法

[英]Alternative to mpirun inside python script

我面临着这个奇怪的问题。 我认为答案并不困难,但我找不到任何答案,因此我依靠您的建议。

假设我在文件parallel_func.py有一个并行的python函数:

    def parallel_func():

      parser=OptionParser()
      parser.add_option("-f", "--file",       dest="filename",
                          help="Input FILE", metavar="FILE")
      parser.add_option("--parallel", action="store_true",
                          help="Specify if we need to initialize MPI", 
                          dest="with_MPI", default=False)
      (options, args)=parser.parse_args()

      if options.with_MPI == True:
         from mpi4py import MPI  
         comm = MPI.COMM_WORLD
         myid = comm.Get_rank()
         numberPart = comm.Get_size()
         have_MPI = True
     else:
         comm = 0
         myid = 0
         numberPart = 1
         have_MPI = False
    etc. etc.  

我可以从shell调用此函数,只需键入:

mpirun -np XX parallel_func.py -f input_file --parallel

现在,有没有一种方法可以将我的parallel_func用作在非并行且在单核中运行的python脚本中的函数? 我当前的版本可以运行,但只能在单核中运行parallel_func:

from parallel_func.py import parallel_func
# -------------------------------------------------------------------
#  Main
# -------------------------------------------------------------------

def main():

  parser=OptionParser()
  parser.add_option("-f", "--file",       dest="filename",
                      help="Input FILE", metavar="FILE")
  parser.add_option("-n", "--partitions", dest="partitions", 
                      default=1,
                      help="number of PARTITIONS", 
                      metavar="PARTITIONS")                                            

  (options, args)=parser.parse_args()
  options.partitions  = int( options.partitions )  

  if options.partitions > 1:
     options.with_MPI = True
  else:
     options.with_MPI = False

  parallel_func(options)

长话短说,有没有一种方法可以在python函数main进行MPI.COMM_WORLD以使MPI.COMM_WORLD使parallel_func正常工作所需的所有信息?

在此先感谢您的回答!!

您正在寻找动态流程管理。 这意味着您从单个过程中产生了一些过程,它们构成了一个沟通者。 您可以在此处找到示例 这种方法有几个缺点:

  • 您需要为启动的进程提供一个特殊的脚本或入口点-您不能只在生成调用时恢复
  • 产生的进程位于包含两个单独的组的内部通信器中(父进程和产生的进程)。 它们的用法不同于您的常规(内部通信者)。
  • 某些HPC系统/批处理系统不支持MPI流程生成

在评估如何设计应用程序时,请考虑到这一点。

暂无
暂无

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

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