Warum verwendet Multiprocessing nur einen einzigen Kern, nachdem ich numpy importiert habe?
Ich bin mir nicht sicher, ob dies mehr als Betriebssystemproblem gilt, aber ich dachte, ich würde hier nachfragen, falls jemand einen Einblick in das Python-Ende der Dinge hat.
Ich habe versucht, eine CPU-last zu parallelisierenfor
Schleife mitjoblib
Aber ich stelle fest, dass, anstatt dass jeder Arbeitsprozess einem anderen Kern zugewiesen wird, alle demselben Kern zugewiesen werden und kein Leistungsgewinn entsteht.
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 sehehtop
Während dieses Skript ausgeführt wird:
Ich starte Ubuntu 12.10 (3.5.0-26) auf einem Laptop mit 4 Kernen. Deutlichjoblib.Parallel
Gibt es eine Möglichkeit, diese Prozesse auf verschiedenen Kernen ausführen zu lassen?