我正在尝试平行化Python代码,并且由于大量的常量数据而将操作作为函数调用时遇到了一些问题。
我的非并行代码就是这样......
ps is a list of points
result = array of len(ps)
compute a,b,c being large numpy array independent of p
for p in ps:
compute some stuff dependant on p, a,b,c
return scalar to result[i]
在没有计算大数组a,b,c的函数中包装它每次都让我
def calc(p,a,b,c):
compute some stuff dependant on p, a,b,c
return scalar
然后我使用一些常见的python模块并行调用
results = Parallel(n_jobs=num_cores)(delayed(calc)(p,a,b,c) for p in ps)
在不同内核上进行测试实际上可以在一定程度上加速进程(在4核上将时间缩短3倍是我得到的......)但是在一个核心上运行比旧循环版本慢得多加速只是没有削减它。
我把这归咎于数据交换 - 那么有没有办法解决这个限制?