Принудительно пропустить L1 кеш

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

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

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам