【发布时间】:2021-04-25 11:03:06
【问题描述】:
我正在测试一种使用多处理加速“高级”计算的方法。 这个想法是让多个进程(我们称它们为G)执行同一任务T的不同执行。这可能是一项漫长的任务(玩整个棋盘游戏),最终会返回一些结果。它可以是异步的,我已经知道如何使用 multiprocessing 和 apply_async 收集所有结果。
但是,在某些时候,T 需要调用 GPU 函数。我的想法是创建另一个进程 S 作为服务,从注册的 Gs 收集数据,在收集的数据上调用 GPU 函数(tensorflow NN 评估)(同时将 Gs 停止)并将结果“发送”回所有相应的 Gs。
我看了How do I make processes able to write in an array of the main program?的答案。但是,这里的不同之处在于,聚会不仅仅发生在任务结束时。
你认为这可能吗?我还尝试了使用 ctypes 和 OpenMP 的不同方法,但均未成功。
这是我想做的伪代码:
shared_service = Service()
class Worker():
def __init__(self):
shared_service.register(self)
...
def run(self):
finished = False
while (not finished):
... do my stuff ...
... gather data to "send" to GPU ...
shared_service.request(data, self.callback)
... wait for result ...
... use result ...
... do more stuff ...
def callback(self, result):
... store result ...
class Service():
...
def register(self, o):
... register new "client" ...
def request(self, o, data):
... add request to current buffer(and keep track of requester)...
def run(self):
while(True):
... wait for full buffer ...
... call GPU function ...
... dispatch results to "clients" ...
main:
... init one "Service" ...
... init N "Worker" ...
... run N Workers asynchronously ...
感谢您的帮助!
【问题讨论】:
标签: python multiprocessing gpu data-sharing