Вопрос по windows, linux – Профилирование CPU Cache / Memory из ОС / Приложения?

7

Я хотел бы написать программное обеспечение, которое могло бы по существу профилировать кэш процессора (L2, L3, возможно L1) и память, чтобы анализировать производительность.

Правильно ли я считаю, что это невозможно, поскольку у программного обеспечения нет доступа к содержимому кеша?

Другой способ сформулировать мой вопрос: есть ли какой-нибудь способ узнать на уровне ОС / приложения, какие данные были загружены в кэш / память?

РЕДАКТИРОВАТЬ: операционная система Windows или Linux и CPU Intel Desktop / Xeon

Ваш Ответ

3   ответа
2

как правило, измеряется с точки зрения частоты попаданий и количества ошибок.

Есть много инструментов, чтобы сделать это для вас. Проверь какValgrind выполняет профилирование кеша.

Такжеcache performance is generally measured on a per program basis, Хорошо написанные программы приведут к меньшему количеству промахов кэша и лучшей производительности кэша и наоборот для плохо написанного кода.

Измерениеactual cache speed Это головная боль производителей оборудования, и вы можете обратиться к их руководствам, чтобы узнать это значение.

Callgrind/похожем на Cachegrind комбинация может помочь вам отслеживать попадания / промахи кэша

@ user1107474 Я обновил свой ответ. Проверьте ссылки
& quot; Хорошо написанные программы & quot; .... вот почему я хотел бы знать, можно ли отслеживать, какие переменные загружаются в кэш? mezamorphic
спасибо, оценили mezamorphic
7

вы захотите взглянуть на PMU Intel, т. Е. Блок мониторинга производительности. У некоторых процессоров есть один. Это набор регистров специального назначения (Intel называет их регистрами, зависящими от модели, или MSR), которые вы можете запрограммировать для подсчета событий, например пропусков кэша, используяRDMSR а такжеWRMSR инструкции.

Вот документ оАнализ производительности на i7 и Xeon 5500.

, вы захотите проверить IntelМонитор счетчика производительностиЭто, в основном, некоторые подпрограммы, которые абстрагируют PMU, который вы можете использовать в приложении C ++ для измерения нескольких показателей производительности в реальном времени, включая потери в кеше. У этого также есть некоторые инструменты GUI / Commandline для автономного использования.

По-видимому,ядро Linux имеет возможность манипулировать MSR.

Есть другие утилиты / API, которые также используют PMU:перфорация, PAPI.

0

это TAU, профилировщик с открытым исходным кодом, который работает с использованием PAPI, также может быть использован.

Однако, если вы хотите написать код для измерения статистики кэша, вы можете написать программу, используя PAPI. PAPI позволяет пользователю получить доступ к аппаратным счетчикам без необходимости знать архитектуру системы. PMU использует регистры, специфичные для модели, следовательно, вы должны иметь знание регистров, которые будут использоваться.

Perf позволяет измерять L1 и LLC (который является L2), Cachegrind, с другой стороны, позволяет пользователю измерять L1 и LLC (который может быть L2 или L3, какой бы ни был кэш самого высокого уровня). Используйте Cachegrind, только если вам не нужны более быстрые результаты, потому что Cachegrind запускает программу примерно в 10 раз медленнее.

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