Почему этот код генерирует попадание в кэш много раз?
Я понимаю концепцию попадания в кэш, но почему-то я не понимаю ее в примерах кода. Следующий код должен генерировать много хитов, но почему? В какой части мы это видим? Как нам теперь, когда этот код будет находить большую часть времени данные в кеше?
char array[1000];
for ( int i=0; i<1000; i++ ){
printf("%d ", array[i]);
}
1 ответ
Данный код является прекрасным примером пространственной привязки, потому что array[i]
доступ к нему осуществляется непрерывно и вперед. Согласно Википедии:
Пространственная местность
Если на конкретное место хранения ссылаются в определенное время, то вполне вероятно, что на близлежащие места памяти будут ссылаться в ближайшем будущем. В этом случае принято пытаться угадать размер и форму области вокруг текущей привязки, для которой стоит подготовить более быстрый доступ.
Вы также можете отметить, что i
переменная показывает временную локальность, и в этом случае вполне вероятно, что она будет помещена путем оптимизации компилятора в регистр процессора.