Saya tidak yakin apakah ini dianggap lebih sebagai masalah OS, tapi saya pikir saya akan bertanya di sini kalau-kalau ada yang memiliki wawasan dari akhir Python.
Saya telah mencoba untuk memparalelkan penggunaan CPU-heavy for
loop joblib
, tetapi saya menemukan bahwa alih-alih setiap proses pekerja ditugaskan ke inti yang berbeda, saya berakhir dengan semuanya ditugaskan ke inti yang sama dan tidak ada peningkatan kinerja.
Inilah contoh yang sangat sepele ...
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()
... dan inilah yang saya lihat htop
saat skrip ini berjalan:
Saya menjalankan Ubuntu 12.10 (3.5.0-26) pada laptop dengan 4 core. Jelas joblib.Parallel
sedang memunculkan proses terpisah untuk pekerja yang berbeda, tetapi apakah ada cara saya bisa membuat proses ini dijalankan pada core yang berbeda?