Diagrama de referencia de memoria: entender el comportamiento de caché

He intentado todo tipo de razonamiento con el que puedo salir, pero realmente no entiendo esta trama. Básicamente, muestra el rendimiento de la lectura y escritura de diferentes matrices de tamaño con diferentes zancadas. Entiendo que para pasos pequeños como 4 bytes leo toda la celda en el caché, por lo tanto tengo un buen rendimiento. Pero, ¿qué sucede cuando tengo la matriz de 2 MB y el paso 4k? ¿O los pasos 4M y 4k? ¿Por qué el rendimiento es tan malo? Finalmente, ¿por qué cuando tengo 1MB de matriz y el paso es 1/8 del rendimiento del tamaño es decente, cuando 1/4 el rendimiento del tamaño empeora y luego con la mitad del tamaño, el rendimiento es super bueno? Por favor, ayúdame, esto me está volviendo loco.

En este enlace, el código:https://dl.dropboxusercontent.com/u/18373264/membench/membench.c