Сила для промаха кеша L1

Я хотел бы заставить мою программу пропустить кеш L1 каждый раз (или почти каждый раз).

Итак, у моего IvyBridge есть кеш L1 объемом 32 КБ, и он имеет 8-way. Поэтому каждый набор содержит 8 строк, и каждая строка имеет 64 байта. Первые 6 бит адресной карты для установки, 7 последних бит-карт для смещения в строке, а другие биты определяют тег.

Как пропустить кеш? Должен ли я использовать 8 (каждый набор имеет 8 строк) различные операции загрузки из одного и того же набора?

Ответы

Ответ 1

Да, ты на правильном пути. Использование адресов, которые будут проходить в одном наборе, позволит вам протестировать пропуски кэша L1 с наименьшим количеством адресов.

Однако, 8 разных адресов явно недостаточно, так как они могут вписаться в один набор. Лучше всего их удвоить или увеличить в четыре раза, чтобы дать алгоритму выселения LRU множество шансов выселить линию, прежде чем вы вернетесь к ней.

Остерегайтесь промахов TLB, хотя, если вы используете слишком много разных адресов на слишком большом количестве страниц. Здесь могут помочь огромные страницы размером 2 МБ.