Принудительно пропустить L1 кеш
Я хотел бы заставить мою программу пропускать кэш L1 каждый раз (или почти каждый раз).
Итак, мой IvyBridge имеет кэш-память L1 объемом 32 КБ, и он 8-сторонний. Поэтому каждый набор содержит 8 строк, а каждая строка имеет 64 байта. Первые 6 битов адресной карты для установки, 7 последних битовых карт для смещения в строке и другие биты определяют тег.
Как пропустить кеш? Должен ли я использовать 8 (в каждом наборе по 8 строк) разные операции загрузки из одного и того же набора?
1 ответ
Да, вы на правильном пути. Использование адресов, которые будут входить в один и тот же набор, позволит вам протестировать промахи кэша L1 с наименьшим количеством разных адресов.
Однако 8 разных адресов явно недостаточно, поскольку все они могут вписаться в один набор. Лучше всего удвоить или удвоить его, чтобы у алгоритма выселения LRU было много шансов выселить линию, прежде чем вернуться к ней.
Остерегайтесь пропусков TLB, если вы используете слишком много разных адресов на слишком многих страницах. 2MB огромные страницы могут помочь здесь.