Аппаратный счетчик производительности


В компьютерах аппаратные счетчики производительности ( HPC ) [ 1] или аппаратные счетчики представляют собой набор специальных регистров , встроенных в современные микропроцессоры для хранения счетчиков операций, связанных с оборудованием, в компьютерных системах. Опытные пользователи часто полагаются на эти счетчики для проведения низкоуровневого анализа или настройки производительности .

Количество доступных аппаратных счетчиков в процессоре ограничено, в то время как каждая модель ЦП может иметь множество различных событий, которые разработчик может захотеть измерить. Каждый счетчик может быть запрограммирован с индексом типа события, которое нужно отслеживать, например, промах кэша L1 или неверное предсказание ветвления.

Одним из первых процессоров, в котором реализован такой счетчик и связанная с ним инструкция RDPMCдля доступа к нему, был Intel Pentium , но они не были задокументированы до тех пор, пока Терье Матисен не написал статью об их обратном проектировании в Byte , июль 1994 г. [2]

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

Могут возникнуть трудности с соотнесением низкоуровневых показателей производительности с исходным кодом. Ограниченное количество регистров для хранения счетчиков часто вынуждает пользователей проводить несколько измерений, чтобы собрать все необходимые показатели производительности.

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


Вывод профиля IBS из CodeAnalyst .