Bunun bir işletim sistemi sorunu olarak sayılıp sayılmayacağından emin değilim, ancak herhangi birinin Python'un sonundan bir fikir edinmesi durumunda soracağımı düşündüm.
İşlemci ağırlıklı bir for
döngüyü kullanarak paralel hale getirmeye çalışıyorum joblib
, ancak her çalışan işlemin farklı bir çekirdeğe atanması yerine, hepsinin aynı çekirdeğe atandığını ve hiçbir performans kazanmadığımı görüyorum.
İşte çok önemsiz bir örnek ...
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()
... ve işte htop
bu komut dosyası çalışırken gördüklerim :
4 çekirdekli bir dizüstü bilgisayarda Ubuntu 12.10 (3.5.0-26) çalıştırıyorum. Açıkçası joblib.Parallel
farklı çalışanlar için ayrı süreçler üretiyor, ancak bu süreçlerin farklı çekirdeklerde yürütülmesini sağlamanın bir yolu var mı?