Событие Intel PMU для события попадания в кэш L1
Я пытаюсь подсчитать количество попаданий в кэш на разных уровнях (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 цикл. Есть ли какие-либо ссылки о том, как переводить мопы в циклы?
3) Будет лучше рассчитывать как грузы, так и магазины. (Я могу терпеть, не считая запросы магазина.)
Спасибо большое за вашу помощь!
1 ответ
Хотя я полностью согласен с Питером Кордесом в том, что то, что вы пытаетесь сделать, не имеет особого смысла, я отвечу на вопрос просто ради ответа на него, потому что это само по себе интересно.
Чтобы подсчитать количество пропусков L1D, вы можете использовать одно или оба из этих событий:
MEM_LOAD_UOPS_RETIRED.L1_MISS (Event 0xD1, Umask 0x08)
который подсчитывает количество инструкций загрузки, которые пропускают в L1D, но только в том случае, если еще нет невыполненных пропусков в той же строке кэша. Это действительно количество промахов в L1D.
MEM_LOAD_UOPS_RETIRED.HIT_LFB (Event 0xD1, Umask 0x40)
который подсчитывает количество инструкций загрузки, которые пропускают в L1D, для которых уже есть невыполненное промах в той же строке кэша.
Ты можешь использовать ICACHE.MISSES
подсчитать количество пропусков кеша инструкций Вам, вероятно, следует проверить этот счетчик, чтобы он имел смысл, прежде чем использовать его.
редактировать
Соответствующие события хита MEM_LOAD_UOPS_RETIRED.L1_HIT
а также ICACHE.HIT
, Я хотел бы еще раз подчеркнуть, что вы должны проверить ICACHE.HIT
перед его использованием.