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