Estoy intentando comprender mejor cómo el memmap de numpy maneja vistas de archivos muy grandes. La secuencia de comandos a continuación se abre una memoria mapeada 2048^3 matriz y copia una vista downsampled 128^3 de la mismaComprender el rendimiento de numpy memmap
import numpy as np
from time import time
FILE = '/Volumes/BlackBox/test.dat'
array = np.memmap(FILE, mode='r', shape=(2048,2048,2048), dtype=np.float64)
t = time()
for i in range(5):
view = np.array(array[::16, ::16, ::16])
t = ((time() - t)/5) * 1000
print "Time (ms): %i" % t
Por lo general, esta opción se imprime Time (ms): 80
más o menos. Sin embargo, si cambio la opinión de asignación a
view = np.array(array[1::16, 2::16, 3::16])
y ejecutarlo tres veces, me sale el siguiente:
Time (ms): 9988
Time (ms): 79
Time (ms): 78
nadie entiende por qué la primera invocación es mucho más lento?
Tenga en cuenta que un cambio de 1 en la dimensión más estriada dará como resultado un desplazamiento de 32MB, que será suficiente para que las lecturas provengan de un conjunto de páginas disjuntas. – ecatmur
Gracias por la explicación: no me di cuenta de que el sistema operativo podría almacenar en caché resultados como este – ChrisB