[pyar] Multiprocessing: más lento que el secuencial

Hernan Grecco hernan.grecco en gmail.com
Lun Ago 11 20:49:19 ART 2014


Hola,

2014-08-11 20:33 GMT-03:00 Franco Nicolas Bellomo <fnbellomo en gmail.com>:
> Hola gente, como andan?
> Estoy queriendo empezar a usar python para para resolver algunos
> calculos que me dan en la carrera (soy estudiante de Lic. en Física).
> En particular, ahora quiero resolver elementos finitos. Cuando lo
> resuelvo secuencialmente (implementando numpy) lo calcula bien, pero
> como el for que recorro es muy grande tarde demasiado. Entonces,
> importo multiprocessing y anda!! el problema? es que el código
> paralelisado es más lento que el original, por que?? que estoy
> haciendo mal?

Hay varias cosas que pueden estar fallando.

En primer lugar, cuando tenes memoria compartida no siempre conviene
tener muchos procesos porque hay veces que la comunicación entre ellos
domina. Siempre hay un N por debajo del cual es mejor un solo proceso
y por arriba te convienen mas. Depende de cuanto cueste hacer una
operación en relación a cuanto cueste comunicarse. Si estas por debajo
de ese N, mp va a ser mas lento.

Ademas  multiprocessing.Array tiene un Lock y esto es lento. Por
default, este es un tipo de datos "process-safe". Es decir que podes
escribir y leer desde cualquier proceso sin temor a corromper los
datos. (podes desactivar este lock pasando lock=False cuando construis
el array con el riesgo que eso conlleva.

Finalmente, hay algoritmos mas paralelizables que otros. Cuando no
comparten nada de informacion, ahi seguro te conviene paralelizar (en
realidad estas distribuyendo).

Podes seguir por este camino, pero si necesitas velocidad te sugiero
que le des una mirada a Numba[0].

saludos,

Hernan
[0] http://numba.pydata.org/


More information about the pyar mailing list