Cache Hit / Miss для значения в программе C / C ++ - PullRequest
13 голосов
/ 31 июля 2011

Это мое требование, я знаю, что некоторые алгоритмы хорошо используют Cache, некоторые нет, некоторые делают больше операций ввода-вывода, чем другие, для определенного набора данных и т. Д. Я хотел бы увидеть и проанализировать это самостоятельно.

Так что мне было интересно, есть ли способ узнать, как читается определенная память / переменная, т. Е. Из кеша, или был пропущен кеш. Далее, если при получении этого значения произошла ошибка страницы и т. Д.

Большое спасибо!

Ответы [ 4 ]

7 голосов
/ 31 июля 2011

Если вы действительно хотите знать, когда ваш кэш срабатывает / отсутствует, современные процессоры имеют счетчики производительности, которые вы можете использовать именно для этой цели. Я широко использовал их для научных исследований. Самый простой способ их использования - через perfmon2 . Perfmon2 имеет как библиотеку, которую вы можете связать с вашей программой, так и отдельную программу, которая будет контролировать существующую программу. Например, вот отдельная программа, записывающая все запросы на чтение из кэша данных уровня 1 и пропускающие:

pfmon -eL1D_CACHE_LD:MESI,L1D_CACHE_LD:I_STATE your_program

Для справки, Приложение A из этого документа (PDF) содержит список документации Intel о доступных аппаратных счетчиках.

4 голосов
/ 31 июля 2011

Я бы попробовал использовать инструмент valgrind cachegrind , он может распечатывать аннотированные исходные строки с количеством попаданий / пропусков в каком кеше для этой строки.

1 голос
/ 31 июля 2011

Я не знаю, сможет ли AMD CodeAnalyst показать этот уровень детализации, но это не мешало бы проверить.

0 голосов
/ 31 июля 2011

Зависит от конкретного компилятора, ОС и конкретной модели процессора, на котором вы работаете. Ничто (о чем я знаю) в языке C / C ++ не дает вам доступа к тому, что происходит на уровне кэша.

Существуют различные инструменты измерения, но они в значительной степени не зависят от языка.

Существуют некоторые «правила» для минимизации проблем с кешем и подкачкой, хотя мне понадобится некоторое время, чтобы придумать достаточно полный список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...