Linux C++: как представить время, потраченное впустую из-за неудачных обращений в кэш?

Я знаю, что могу использовать gprof для сравнительного тестирования моего кода.

Однако у меня есть эта проблема - у меня есть интеллектуальный указатель, который имеет дополнительный уровень абстракции (думайте о ней как об объекте прокси).

В результате у меня есть этот дополнительный слой, который эффекты в значительной степени все функции, и завинчивают с кэшированием.

Существует ли способ измерить время, которое мой ЦП тратит впустую из-за неудачных обращений в кэш?

Спасибо!

44
задан Georg Fritzsche 21 March 2010 в 12:30
поделиться

7 ответов

Вы можете найти инструмент для доступа к счетчикам производительности ЦП. Вероятно, в каждом ядре есть регистр, который считает промахи L1, L2 и т. Д. В качестве альтернативы Cachegrind выполняет моделирование от цикла к циклу.

Однако я не думаю, что это будет полезно. Предположительно, ваши прокси-объекты изменяются своими собственными методами. Обычный профилировщик скажет вам, сколько времени занимают эти методы. Ни один инструмент профилирования не подскажет, как можно улучшить производительность без этого источника загрязнения кеша. Это вопрос уменьшения размера и структуры рабочего набора программы, который нелегко экстраполировать.

Быстрый поиск в Google обнаружил boost :: intrusive_ptr , который может вас заинтересовать. Похоже, что он не поддерживает что-то вроде weak_ptr , но преобразование вашей программы может быть тривиальным, и тогда вы будете точно знать стоимость счетчиков ненавязчивых ссылок.

11
ответ дан 26 November 2019 в 22:14
поделиться

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

5
ответ дан 26 November 2019 в 22:14
поделиться

Другой инструмент для профилирования на основе счетчика производительности ЦП - это oprofile . Вы можете просмотреть его результаты с помощью kcachegrind.

2
ответ дан 26 November 2019 в 22:14
поделиться

Вы можете попробовать cachegrind и это интерфейс kcachegrind.

18
ответ дан 26 November 2019 в 22:14
поделиться

Это зависит от того, какую ОС и ЦП вы используете. Например. для Mac OS X и x86 или ppc Shark выполнит профилирование промахов кэша. То же для Zoom в Linux.

5
ответ дан 26 November 2019 в 22:14
поделиться

Я бы посоветовал использовать PTU (служебную программу настройки производительности) от Intel.

Эта утилита является прямым потомком VTune и предоставляет лучший доступный профилировщик выборки. Вы сможете отслеживать, на что ЦП тратит или тратит время (с помощью доступных аппаратных событий), и это без замедления работы вашего приложения или нарушения профиля. И, конечно же, вы ». Я смогу собрать все события пропуска строк кэша, которые вы ищете.

2
ответ дан 26 November 2019 в 22:14
поделиться

Вот такой общий ответ .

Например, если ваша программа тратит, скажем, 50% времени на промахи в кэше, то 50% времени, когда вы ставите ее на паузу, счетчик программы будет в точных местах, где она ожидает выборки из памяти. которые вызывают промахи кеша.

2
ответ дан 26 November 2019 в 22:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: