我不确定这是否更多地算作操作系统问题,但我想问一下这里是否有人从Python的角度能提供一些见解。
我一直试图使用joblib
并行化一个CPU密集型的for
循环,但我发现每个工作进程都被分配到同一个核心,而没有性能提升。
以下是一个非常简单的例子...
from joblib import Parallel,delayed
import numpy as np
def testfunc(data):
# some very boneheaded CPU work
for nn in xrange(1000):
for ii in data[0,:]:
for jj in data[1,:]:
ii*jj
def run(niter=10):
data = (np.random.randn(2,100) for ii in xrange(niter))
pool = Parallel(n_jobs=-1,verbose=1,pre_dispatch='all')
results = pool(delayed(testfunc)(dd) for dd in data)
if __name__ == '__main__':
run()
...以下是我在运行此脚本时在 htop
中看到的:
我正在运行 Ubuntu 12.10(3.5.0-26)在一台有4个内核的笔记本电脑上。显然,joblib.Parallel
正在为不同的工作进程生成单独的进程,但是否有任何方法可以使这些进程在不同的内核上执行?