Gráficos de benchmark de memória: entendendo o comportamento do cache

Eu tentei todo tipo de raciocínio que eu poderia possivelmente ter, mas eu realmente não entendo esse enredo. Basicamente mostra o desempenho de leitura e escrita a partir de diferentes tamanhos de matriz com diferentes passos. Eu entendo que para pequenos passos como 4 bytes eu leio toda a célula no cache, consequentemente tenho bom desempenho. Mas o que acontece quando eu tenho a matriz de 2 MB e o passo de 4k? ou o passo 4M e 4k? Por que o desempenho é tão ruim? Finalmente, por que quando eu tenho um array de 1MB e o stride é 1/8 do tamanho do desempenho são decentes, quando é 1/4 o tamanho do desempenho fica pior e então na metade do tamanho, o desempenho é super bom? Por favor me ajude, essa coisa está me deixando louco.

Neste link, o código:https://dl.dropboxusercontent.com/u/18373264/membench/membench.c

questionAnswers(1)

yourAnswerToTheQuestion