Intereting Posts

API-интерфейсы производительности оборудования для Windows

Я бы хотел использовать счетчик производительности оборудования , в частности, процессоры x86 для получения пропусков в кэше или неверного предсказания филиала. Счетчики производительности широко используются в продвинутых профайлерах, таких как Intel VTune. Пожалуйста, не путайте счетчики производительности в операционных системах Windows.

Чтобы использовать эти счетчики в программе C / C ++, можно использовать PAPI: http://icl.cs.utk.edu/papi/

Это позволяет вам легко использовать счетчики производительности, но только для Linux. PAPI однажды поддерживал Windows, но не сейчас.

Кто-нибудь, кто недавно попробовал PAPI или другие API-интерфейсы для использования аппаратных счетчиков производительности в Windows?

Вы можете использовать инструкцию RDPMC или встроенный компилятор MSVC __readpmc , что является одним и тем же.

Однако Windows запрещает приложениям пользовательского режима выполнять эту инструкцию, устанавливая CR4.PCE на 0. Предположительно, это делается потому, что значение каждого счетчика определяется регистрами MSR, которые доступны только в режиме ядра. Другими словами, если вы не являетесь модулем режима ядра (например, драйвером устройства), вы попытаетесь получить ловушку «привилегированной команды», если попытаетесь выполнить эту инструкцию.

Если вы пишете приложение с пользовательским режимом, единственным вариантом является (как @Christopher, упомянутый в комментариях), написать модуль ядра, который выполнил бы эту инструкцию для вас (вы понесете штраф пользователя -> отказ ядра) и включите тест подпишитесь на своем компьютере, чтобы можно было загрузить ваш предположительно самозаверенный «драйвер». Это означает, что вы не можете легко распространять это приложение, но это будет работать для внутренней настройки.

Как насчет ссылки на HCP ? Разве это не обеспечивает то, что вы хотите?