Je ne sais pas si cela compte davantage comme un problème de système d'exploitation, mais j'ai pensé que je demanderais ici au cas où quelqu'un aurait un aperçu de la fin de Python.
J'ai essayé de paralléliser une for
boucle lourde en CPU joblib
, mais je trouve qu'au lieu d'attribuer chaque processus de travail à un noyau différent, je me retrouve tous affectés au même noyau et sans gain de performance.
Voici un exemple très trivial ...
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()
... et voici ce que je vois htop
pendant l'exécution de ce script:
J'exécute Ubuntu 12.10 (3.5.0-26) sur un ordinateur portable avec 4 cœurs. Il joblib.Parallel
est clair que des processus séparés sont créés pour les différents travailleurs, mais y a-t-il un moyen de faire exécuter ces processus sur différents cœurs?