【问题标题】:Get master to do work in task farm让主人在任务农场工作
【发布时间】:2017-03-23 08:31:00
【问题描述】:

我有一个小测试代码,充当任务场,主进程将任务发送给从属。

我想知道是否有一种简单的方法可以让主人从任务列表中分担工作。例如使用从 master 到自身的发送和接收,但我不确定这是否会干净地完成。

代码如下:

###!/usr/bin/env python
from mpi4py import MPI
import numpy
import sys
import os
import time




comm=MPI.COMM_WORLD
rank=comm.Get_rank()
size = comm.Get_size()
#print(rank,size)


if rank == 0:
   tasks=([StopIteration] * (size-1))+[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
   status=MPI.Status()

   while tasks:
        comm.recv(source=MPI.ANY_SOURCE, status=status)
        data=tasks.pop()
        print("master sending data ",data," to rank", status.Get_source())
        comm.send(obj=data, dest=status.Get_source())
        print("master: done send. Data left: ",tasks)

else:
   print("slave", rank," entering loop")
   for task in iter(lambda: comm.sendrecv(dest=0), StopIteration):
       print("slave ", rank," recvd data", task)
       print("slave ", rank," going to sleep")
       time.sleep((task+0.5)*2*1.4)

欢迎提出任何好的建议!

谢谢

【问题讨论】:

  • 它要么需要主线程中的单独线程,要么需要非常复杂的逻辑,将计算与非阻塞消息传递相结合。最简单的解决方案是再启动一个 MPI 进程并指示 MPI 运行时将该进程放置在与 master rank 相同的主机上。

标签: python parallel-processing mpi mpi4py


【解决方案1】:

这里是关于如何在 mpi4py 中编写主从逻辑的完整示例

https://github.com/luca-s/mpi-master-slave

【讨论】:

    猜你喜欢
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    相关资源
    最近更新 更多