Je ne suis pas sûr que cela compte plus comme un OS de problème, mais j'ai pensé que je voudrais poser ici au cas où quelqu'un a un aperçu de l'Python fin des choses.
J'ai essayé de paralléliser un PROCESSEUR lourds- for
boucle à l'aide de joblib
, mais je trouve qu'au lieu de chaque processus de travail d'être affecté à une autre base, je me retrouve avec chacun d'entre eux étant affecté à la même base et pas de gain de performance.
Voici un exemple 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 en htop
alors que ce script est en cours d'exécution:
Je suis sur Ubuntu 12.10 (3.5.0-26) sur un ordinateur portable avec 4 cœurs. Clairement joblib.Parallel
de fraye des processus séparés pour les différentes catégories de travailleurs, mais est-il une manière que je peux faire de ces processus s'exécutent sur différents cœurs?