मुझे यकीन नहीं है कि क्या यह ओएस के मुद्दे के रूप में अधिक मायने रखता है, लेकिन मुझे लगा कि मैं यहां पूछूंगा कि किसी को चीजों के पायथन अंत से कुछ अंतर्दृष्टि है।
मैं एक सीपीयू-भारी 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
जबकि यह स्क्रिप्ट चल रही है:
मैं 4 कोर वाले लैपटॉप पर Ubuntu 12.10 (3.5.0-26) चला रहा हूं। स्पष्ट रूप joblib.Parallel
से विभिन्न श्रमिकों के लिए अलग-अलग प्रक्रियाएं पैदा कर रहा है, लेकिन क्या कोई तरीका है कि मैं इन प्रक्रियाओं को अलग-अलग कोर पर निष्पादित कर सकता हूं?