API счетчика производительности оборудования для Windows - PullRequest
8 голосов
/ 07 января 2012

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 10 января 2012

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

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

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

1 голос
/ 03 сентября 2013

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

...