我有一个遗传算法,它的适应度函数是一个繁琐的模拟环境。这段代码绝对是CPU限制的,运行在64位的Python3.3上,所以我实现了multiprocessing.starmap_async
来并行化。在
它工作得很好,效率比串行大幅度提高。在我的处理器上,Intel i7 CPU@2.40 GHz(带16GB RAM): 我注意到4个进程的运行时间为8到9秒(2个进程的运行时间较慢,串行进程的运行时间甚至更低)。在
但是,这只使用了65%到73%的处理器。
将进程计数增加到6将占用95%到100%的处理器,但运行时间为11秒。记忆仍停留在20%左右
将此计数增加到8,处理器将一直保持在100%的状态,但运行时间现在是12秒。记忆力很好。在
我不能发布所有内容,但下面是多处理调用(去掉了参数)。我有什么办法可以在不减速的情况下利用更多的处理器吗?我也希望你能帮助我理解为什么会出现这种现象。在
多处理调用:
step = np.int8(pop_size/4)
pol = Pool(processes=4)
res = pol.starmap_async(SimWorker, ((i, i+step,pop,"a bunch of other arguments") for i in range(0, pop_size, step)))
fitnessdict = res.get()
fitnessdict = np.asarray(fitnessdict)
for i in range(0,pop_size,step):
for p in range(i,i+step):
fitness[p] = fitnessdict[i/step,p]
SimWorker公司:
^{pr2}$
目前没有回答
相关问题 更多 >
编程相关推荐