O multiprocessamento Python está demorando muito mais que o processamento único
Eu estou executando alguns cálculos grandes em 3 matrizes 2D numpy diferentes seqüencialmente. As matrizes são enormes, 25000x25000 cada. Cada cálculo leva um tempo significativo, então eu decidi executar 3 deles em paralelo em 3 núcleos de CPU no servidor. Estou seguindo a diretriz de multiprocessamento padrão e criando 2 processos e uma função de trabalho. Dois cálculos estão sendo executados pelos dois processos e o terceiro está sendo executado localmente sem processo separado. Estou passando os enormes arrays como argumentos dos processos 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
a função Worker envia de volta dois vetores numpy (array 1D) em uma lista anexada na fila como:
queue.put([v1, v2])
Não estou usandomultiprocessing.pool
mas, surpreendentemente, não estou obtendo aceleração, ele está na verdade rodando 3 vezes mais devagar. Está passando grandes matrizes levando tempo? Eu não consigo descobrir o que está acontecendo. Devo usar objetos de memória compartilhada em vez de transmitir matrizes?
Ficarei grato se alguém puder ajudar.
Obrigado.