在python脚本中替代mpirun

时间:2018-06-01 17:39:55

标签: python parallel-processing mpi mpi4py

我正面临着这个奇怪的问题。我不认为答案很难,但我无法在任何地方找到它,所以我依靠你的建议。

假设我在文件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使parallel_func正常工作所需的所有信息?

提前感谢您的回答!

1 个答案:

答案 0 :(得分:2)

您正在寻找动态流程管理。这意味着您从单个进程中生成某些进程,它们形成了一个通信器。你可以找到一个example here。这种方法有几个缺点:

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

在评估您的应用程序设计方式时考虑到这一点。

相关问题