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

Franco Nicolas Bellomo fnbellomo en gmail.com
Lun Ago 11 20:33:29 ART 2014


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?

Gracias!!

import numpy as np
import multiprocessing
import ctypes

n = int(size) #size de los array
i_steps = 1e8
deriv2_base = multiprocessing.Array(ctypes.c_double, n)
temp_base = multiprocessing.Array(ctypes.c_double, n)
deriv2 = np.ctypeslib.as_array(deriv2_base.get_obj())
temp = np.ctypeslib.as_array(temp_base.get_obj())

temp[-1] = const['T0']

#Proceso paralelo
def calculo(i, def_param=(deriv2, temp)):
    pos_ini = i*blockDim + 1/(1 + i)
    pos_fin = (i + 1)*blockDim - (i+1)/cores

    deriv2[pos_ini:pos_fin] = (temp[pos_ini-1:pos_fin-1]
-2*temp[pos_ini:pos_fin] + temp[pos_ini+1:pos_fin+1]) / delta_z**2
    temp[pos_ini:pos_fin] = temp[pos_ini:pos_fin] +
kappa*deriv2[pos_ini:pos_fin] * delta_t_seg

if __name__ == '__main__':
    pool = multiprocessing.Pool(processes = cores)

    def cu():
        for j in xrange(i_steps):
            pool.map(calculo, range(cores))

    %timeit cu()
    print temp


More information about the pyar mailing list