これがOSの問題としてそれ以上に数えられるかどうかはわかりませんが、誰かがPythonの終わりから何らかの洞察を持っている場合に備えて、ここで尋ねると思いました。
をfor
使用してCPU負荷の高いループを並列化しようとしましたがjoblib
、各ワーカープロセスが異なるコアに割り当てられる代わりに、すべてのワーカープロセスが同じコアに割り当てられ、パフォーマンスが向上しないことに気づきました。
これは非常に簡単な例です...
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
、このスクリプトの実行中に表示される内容は次のとおりです。
4コアのラップトップでUbuntu 12.10(3.5.0-26)を実行しています。明らかjoblib.Parallel
に、異なるワーカーに対して別々のプロセスを生成していますが、これらのプロセスを異なるコアで実行させる方法はありますか?