2011-07-31 11 views
13

Este es mi requisito, sé que ciertos algoritmos hacen un buen uso de Cache, algunos no, algunos hacen más E/S que otros en un conjunto de datos en particular, etc. Me gustaría ver y analizar eso mismo.Cache Hit/Miss para un valor en C/C++ Programa

Me preguntaba si había alguna manera de saber cómo se lee una determinada memoria/variable, es decir, desde la memoria caché o si se ha perdido una memoria caché. Además, si hubo un error de página al recuperar este valor, etc.

¡Muchas gracias!

+1

Puede que le interese esta pregunta ASÍ: http://stackoverflow.com/questions/3052776/how-to-detect-cache-misses-from-users-codes –

Respuesta

7

Si realmente desea saber cuándo faltan sus memorias caché, los procesadores modernos tienen contadores de rendimiento que puede utilizar para este propósito. Los he usado extensamente para la investigación académica. La forma más fácil de usarlos es a través del perfmon2. Perfmon2 tiene una biblioteca que puede vincular a su programa o un programa independiente que supervisará un programa existente. Por ejemplo, aquí está la grabación de todos los datos de nivel 1 lee caché peticiones y pierde el programa autónomo:

pfmon -eL1D_CACHE_LD:MESI,L1D_CACHE_LD:I_STATE your_program 

Como referencia, el Apéndice A de this document (PDF) enumera la documentación de Intel en lo que los contadores de hardware están disponibles.

0

Depende del compilador específico, el sistema operativo y el modelo específico de procesador en el que se está ejecutando. Nada (que yo sepa) en el lenguaje C/C++ le da acceso a lo que está pasando en el nivel de caché.

Existen varias herramientas de medición, pero serían en gran medida independientes del idioma.

Existen algunas "reglas" para minimizar los problemas de caché y paginación, aunque me llevaría algún tiempo pensar en una lista bastante completa.

4

Yo trataría de usar el valgrind cachegrind tool, puede imprimir líneas de fuente anotadas con el número de visitas/errores en el caché de esa línea.

+0

Tenga en cuenta que las fallas en el cachegrind cache no son reales caché falla, pero simuló uno. – osgx

1

No sé si AMD CodeAnalyst puede mostrar ese nivel de granularidad pero no estaría de más comprobarlo.

+0

AMD CodeAnalyst un poco limitado en la plataforma Intel (pero el muy básico funcionará). Entonces, para Intel, hay Intel Vtune; linux oprofile/perf/perfmon2. – osgx