¿Por qué el multiprocesamiento usa solo un solo núcleo después de importar numpy?
No estoy seguro de si esto cuenta más como un problema de sistema operativo, pero pensé que preguntaría aquí en caso de que alguien tenga alguna idea del final de Python.
He estado tratando de paralelizar una CPU pesadafor
bucle usandojoblib
, pero encuentro que, en lugar de que cada proceso de trabajo se asigne a un núcleo diferente, termino con todos ellos asignados al mismo núcleo y sin ganancia de rendimiento.
Aquí hay un ejemplo muy 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()
... y esto es lo que veo enhtop
mientras se ejecuta este script:
Estoy ejecutando Ubuntu 12.10 (3.5.0-26) en una computadora portátil con 4 núcleos. Claramentejoblib.Parallel
¿Está generando procesos separados para los diferentes trabajadores, pero hay alguna forma de hacer que estos procesos se ejecuten en diferentes núcleos?