问题描述
我正在测试一种使用多处理来加速“高级”计算的方法。 这个想法是让多个进程(我们称它们为 G)执行同一任务的不同执行T。这可能是一项很长的任务(玩整个棋盘游戏),最终会返回一些结果。它可以是异步的,我已经知道如何使用 multiprocessing 和 apply_async 收集所有结果。
但是,在某些时候,T 需要调用 GPU 函数。我的想法是创建另一个进程 S 充当服务,从注册的 G 收集数据,对收集的数据调用 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 ...
感谢您的帮助!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)