Python脚本内mpirun的替代方法

2024-04-25 06:17:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正面临这个奇怪的问题。我认为答案不难,但我哪儿也找不到,所以我相信你的建议。在

假设我在文件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脚本中的函数调用,而python脚本不是并行的,并且运行在单核中?我当前的版本可以工作,但只在单核中运行parallel_func:

^{pr2}$

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

提前感谢您的回答!!在


Tags: 函数pyaddparserifparallelwithhelp
1条回答
网友
1楼 · 发布于 2024-04-25 06:17:58

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

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

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

相关问题 更多 >