Я не уверен, что это больше похоже на проблему с ОС, но я подумал, что попрошу здесь, если у кого-то есть представление о конце Python.
Я пытаюсь параллелизовать цикл с процессором for
с использованием 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
, пока работает этот script:
Я запускаю Ubuntu 12.10 (3.5.0-26) на ноутбуке с 4 ядрами. Ясно, что joblib.Parallel
порождает отдельные процессы для разных работников, но есть ли способ, который я могу сделать, чтобы эти процессы выполнялись на разных ядрах?