En las computadoras , los contadores de rendimiento de hardware ( HPC ), [1] o contadores de hardware, son un conjunto de registros de propósito especial integrados en los microprocesadores modernos para almacenar los recuentos de actividades relacionadas con el hardware dentro de los sistemas informáticos. Los usuarios avanzados a menudo confían en esos contadores para realizar análisis o ajustes de rendimiento de bajo nivel .
La cantidad de contadores de hardware disponibles en un procesador es limitada, mientras que cada modelo de CPU puede tener muchos eventos diferentes que un desarrollador podría querer medir. Cada contador se puede programar con el índice de un tipo de evento que se desea monitorear, como un error de caché L1 o una predicción errónea de una rama.
Uno de los primeros procesadores en implementar dicho contador y una instrucción asociada RDPMC
para acceder a él fue el Intel Pentium , pero no fueron documentados hasta que Terje Mathisen escribió un artículo sobre ingeniería inversa en Byte en julio de 1994. [2]
La siguiente tabla muestra algunos ejemplos de CPU y la cantidad de contadores de hardware disponibles:
En comparación con los perfiladores de software , los contadores de hardware proporcionan un acceso con bajo consumo de recursos a una gran cantidad de información detallada sobre el rendimiento relacionada con las unidades funcionales de la CPU, las memorias caché y la memoria principal, etc. Otro beneficio de su uso es que, en general, no se necesitan modificaciones del código fuente. Sin embargo, los tipos y significados de los contadores de hardware varían de un tipo de arquitectura a otro debido a la variación en las organizaciones de hardware.
Puede haber dificultades para correlacionar las métricas de rendimiento de bajo nivel con el código fuente. La cantidad limitada de registros para almacenar los contadores a menudo obliga a los usuarios a realizar múltiples mediciones para recopilar todas las métricas de rendimiento deseadas.
Los procesadores superescalares modernos programan y ejecutan múltiples instrucciones fuera de orden a la vez. Estas instrucciones "en curso" pueden retirarse en cualquier momento, dependiendo del acceso a la memoria, los accesos a la memoria caché, los bloqueos en el flujo de trabajo y muchos otros factores. Esto puede provocar que los eventos del contador de rendimiento se atribuyan a las instrucciones incorrectas, lo que dificulta o imposibilita el análisis preciso del rendimiento.
AMD introdujo métodos para mitigar algunos de estos inconvenientes. Por ejemplo, los procesadores Opteron implementaron [4] en 2007 una técnica conocida como Muestreo Basado en Instrucciones (o IBS). La implementación de IBS por parte de AMD proporciona contadores de hardware tanto para el muestreo de búsqueda (la parte delantera del pipeline superescalar) como para el muestreo de operaciones (la parte trasera del pipeline). Esto da como resultado datos de rendimiento discretos que asocian las instrucciones retiradas con la instrucción AMD64 "principal".