Warum multiprocessing verwenden Sie nur einen single-core-nachdem ich den import numpy?

Ich bin mir nicht sicher, ob das zählt mehr als ein OS-Problem, aber ich dachte, ich würde bitten, hier in den Fall, jemand hat einen kleinen Einblick von der Python-Seite der Dinge.

Ich habe versucht, parallelise ein CPU-heavy for Schleife mit joblib, aber ich finde, dass nicht jeder worker-Prozess zugewiesen wird, um einen anderen Kern, ich am Ende mit allen von Ihnen zugewiesen wird, die gleichen Kern-und kein performance-Gewinn.

Hier 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 in htop während das Skript ausgeführt wird:

Warum multiprocessing verwenden Sie nur einen single-core-nachdem ich den import numpy?

Ich bin mit Ubuntu 12.10 (3.5.0-26) auf einem laptop mit 4 Kernen. Klar joblib.Parallel ist Laich-separate Prozesse für die verschiedenen Arbeiter, aber gibt es irgendeine Möglichkeit, dass ich diese Prozesse werden auf verschiedenen Kernen?

stackoverflow.com/questions/15168014/... - keine Antworten gibt es, fürchte ich, aber es klingt wie das gleiche Problem.
Auch stackoverflow.com/questions/6905264/...
Und stackoverflow.com/questions/12592018/...

InformationsquelleAutor ali_m | 2013-03-26

Schreibe einen Kommentar