Ich bin mir nicht sicher, ob dies mehr als Betriebssystemproblem zählt, aber ich dachte, ich würde hier fragen, falls jemand einen Einblick in das Python-Ende der Dinge hat.
Ich habe versucht, eine CPU-schwere for
Schleife mithilfe von zu parallelisieren joblib
, aber ich stelle fest, dass nicht jeder Arbeitsprozess einem anderen Kern zugewiesen wird, sondern alle demselben Kern zugewiesen werden und kein Leistungsgewinn erzielt wird.
Hier ist ein sehr triviales Beispiel ...
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()
... und hier ist, was ich sehe, htop
während dieses Skript ausgeführt wird:
Ich verwende Ubuntu 12.10 (3.5.0-26) auf einem Laptop mit 4 Kernen. Es joblib.Parallel
ist klar, dass separate Prozesse für die verschiedenen Worker erzeugt werden. Gibt es jedoch eine Möglichkeit, diese Prozesse auf verschiedenen Kernen auszuführen?