¿Por qué las asignaciones multiprocesamiento.sharedctypes son tan lentas?

Aquí hay un pequeño código de referencia para ilustrar mi pregunta:

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

Básicamente quiero que se comparta una matriz numpy entre múltiples procesos porque es grande y de solo lectura.Este método funciona muy bien, no se realizan copias adicionales y el tiempo de cálculo real de los procesos es bueno. Pero la sobrecarga decreando La matriz compartida es inmensa.

Esta publicación ofreció una gran idea de por qué ciertas formas de inicializar la matriz son lentas (tenga en cuenta que en el ejemplo anterior estoy usando el método más rápido). Pero la publicación realmente no describe cómo mejorar realmente la velocidad para obtener un rendimiento similar.

¿Alguien tiene alguna sugerencia sobre cómo mejorar la velocidad? ¿Tendría sentido algún código de cython para asignar la matriz?

Estoy trabajando en un sistema Windows 7 x64.

Respuestas a la pregunta(3)

Su respuesta a la pregunta