Я пытаюсь подсчитать количество попаданий в кеш на разных уровнях (L1, L2 и L3) кеша для программы на процессоре Intel Haswell.
Я написал программу для подсчета количества попаданий в кэш L2 и L3, отслеживая соответствующие события. Чтобы добиться этого, я проверил руководство по разработке программного обеспечения Intel x86 и использовал событие cache_all_request и событие cache_miss для кеша L2 и L3. Однако я не нашел событий для кеша L1. Может быть, я что-то пропустил?
Мои вопросы:
Какой номер события и значение UMASK следует использовать для подсчета событий попадания в кэш L1?
Пояснения*
1) Конечная цель, которую я хочу достичь, - это верхняя граница времени выполнения программы, когда все попадания в кеш программы становятся промахами в кеше. Если я могу подсчитать количество запросов на попадание в кеш, я могу рассматривать их как промахи в кеше и рассчитать увеличение времени выполнения;
2) Я проверил событие MEM_LOAD_UOPS_RETIRED.L1_ HIT в Intel SDM, оно говорит: «Удаленные загрузочные операции с кэш-памятью L1 в качестве источников данных». Я не уверен, что 1 мкп занимает 1 цикл. Есть ли упоминание о том, как перевести uops в циклы?
3) Лучше будет считать и нагрузки и магазины. (Хотя я могу мириться с тем, что не считаю запросы в хранилище.)
Спасибо большое за вашу помощь!
mem_load_retired.l1_hit
. (Используйте обертку ocperf.py, чтобы вам не нужны были номера событий/umask или получить от него числа.) В качестве альтернативы используйтеL1-dcache-loads - L1-dcache-load-misses
. (Событий HW, которые подсчитывают сохранения, гораздо меньше, в основном потому, что ЦП не нужно их ждать, и они не фиксируются до тех пор, пока не отменяется инструкция сохранения. вы согласны с просто нагрузками?) - person Peter Cordes   schedule 01.03.2018