Por que as atribuições multiprocessing.sharedctypes são tão lentas?

Aqui está um pequeno código de referência para ilustrar minha pergunta:

import numpy as np
import multiprocessing as mp
# allocate memory
%time temp = mp.RawArray(np.ctypeslib.ctypes.c_uint16, int(1e8))
Wall time: 46.8 ms
# assign memory, very slow
%time temp[:] = np.arange(1e8, dtype = np.uint16)
Wall time: 10.3 s
# equivalent numpy assignment, 100X faster
%time a = np.arange(1e8, dtype = np.uint16)
Wall time: 111 ms

Basicamente, quero que uma matriz numpy seja compartilhada entre vários processos, porque é grande e somente leitura.Este método funciona muito bem, nenhuma cópia extra é feita e o tempo real de computação nos processos é bom. Mas a sobrecarga decriando a matriz compartilhada é imensa.

Esta postagem ofereceu algumas dicas importantes sobre por que certas maneiras de inicializar a matriz são lentas (observe que no exemplo acima, estou usando o método mais rápido). Mas o post não descreve realmente como melhorar a velocidade do desempenho, como se estivesse entorpecido.

Alguém tem alguma sugestão sobre como melhorar a velocidade? Algum código cython faria sentido alocar a matriz?

Estou trabalhando em um sistema Windows 7 x64.

questionAnswers(3)

yourAnswerToTheQuestion