Sto cercando di capire meglio come memmap di numpy gestisce le viste di file molto grandi. Lo script di seguito apre una memoria mappata 2048^3 matrice, e copia un ricampionate 128^3 vista di essoCapire le prestazioni di 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
Solitamente, questa stamperà Time (ms): 80
o così. Tuttavia, se cambio l'incarico al fine di
view = np.array(array[1::16, 2::16, 3::16])
ed eseguirlo tre volte, ottengo il seguente:
Time (ms): 9988
Time (ms): 79
Time (ms): 78
Qualcuno capire perché la prima invocazione è tanto più lento?
Nota che un turno di 1 nella dimensione più striata provocherà uno spostamento di 32 MB, che sarà sufficiente per far sì che le letture provengano da un insieme di pagine disgiunte. – ecatmur
Grazie per la spiegazione: non mi ero reso conto che il sistema operativo poteva memorizzare risultati come questo – ChrisB