2015-01-09 6 views
4

Я ищу профиль большого приложения на C++ и определяю, какие части данных (или области памяти) извлекаются больше всего. В принципе, я хочу иметь возможность сделать что-то вроде алгоритма кэша MFU процессора для определения того, что хранить в кэшах L2/L3. Существует неожиданно мало информации о том, что кто-либо пытался добиться этого.Как найти наиболее часто используемые области памяти?

Edit: Измененные MRU для MFU

Edit 2: Для того, чтобы уточнить, мне нужны адреса или структуры данных, которые указывали на по адресам.

+0

Какой процессор? Если x86, вы уже использовали VTune? –

+0

Мы нацеливаем как x86 (windows), так и powerpc (embedded vxworks). Я посмотрю, что может предложить vTune. –

+0

Только боковое примечание - есть разница между большинством/наименее * недавно * используемым и наиболее/наименее * часто * используется – Leeor

ответ

2

Вы можете использовать Pin tool, чтобы записывать все обращения к памяти и вычислять кэш-пропуск/промах.

+0

Я думаю, что у вас есть правильный ответ: [Теневая память адреса] (https://software.intel.com/sites/landingpage/pintool/docs/62141/Pin/html/index.html#MAddressTrace) Слишком плохо не упакован в приятный графический интерфейс. –

1

valgrind может это сделать - ему понадобится плагин, не знаю, есть ли уже один.

EDIT: это называется cachegrind