El multiprocesamiento de Python lleva mucho más tiempo que el procesamiento único
Estoy realizando algunos cálculos grandes en 3 diferentes arrays 2D numpy secuencialmente. Las matrices son enormes, 25000x25000 cada una. Cada cálculo lleva mucho tiempo, así que decidí ejecutar 3 de ellos en paralelo en 3 núcleos de CPU en el servidor. Estoy siguiendo la guía estándar de multiprocesamiento y creando 2 procesos y una función de trabajo. Dos cálculos se ejecutan a través de los 2 procesos y el tercero se ejecuta localmente sin proceso separado. Estoy pasando las enormes matrices como argumentos de los procesos como:
p1 = Process(target = Worker, args = (queue1, array1, ...)) # Some other params also going
p2 = Process(target = Worker, args = (queue2, array2, ...)) # Some other params also going
la función Worker envía dos vectores numpy (matriz 1D) en una lista anexada en la cola como:
queue.put([v1, v2])
No estoy usandomultiprocessing.pool
pero, sorprendentemente, no estoy acelerando, en realidad está corriendo 3 veces más lento. ¿Pasar tiempo haciendo arreglos grandes toma tiempo? No puedo entender lo que está pasando. ¿Debo usar objetos de memoria compartida en lugar de pasar matrices?
Estaré agradecido si alguien puede ayudar.
Gracias.