2011-03-27 22 views
8

Necesito evaluar el tiempo que toma una función C++ en una serie de hipótesis sobre la eficiencia de la jerarquía de memoria (por ejemplo: tiempo cuando tenemos una caché, un caché o una página al leer una parte una matriz), así que me gustaría tener algunas bibliotecas que me permitan contar las fallas de falta/página de caché para poder generar automáticamente un resumen de rendimiento.Contando las fallas del caché programáticamente

Sé que hay algunas herramientas como cachegrind que proporcionan algunas estadísticas relacionadas sobre la ejecución de una aplicación determinada, pero me gustaría una biblioteca, como ya he dicho.

edición Ah, me olvidaba: estoy usando Linux y no estoy interesado en la portabilidad, es una cosa académica.

¡Cualquier sugerencia es bienvenida!

+1

Se puede instrumentar el sistema operativo para ayudar a darle algo de esta información? En un moderno sistema multitarea preventiva con memoria virtual, es muy posible que el sistema operativo haga todo tipo de cosas locas en su aplicación sin su conocimiento ... –

+0

No lo sé, estoy usando Linux. En cuanto a las fallas de página, sé que esas estadísticas son de poco interés debido a la forma en que los sistemas operativos modernos manejan la memoria, como usted dijo: de hecho, estoy mucho más interesado en fallas de caché L2, que creo que son mucho más independientes en el gestión del sistema operativo. – akappa

Respuesta

4

Parece que ahora hay exactamente lo que estaba buscando: perf_event_open.

Le permite hacer cosas interesantes como inicializar/habilitar/deshabilitar contadores de rendimiento para recuperar sus valores a través de una API uniforme e intuitiva (le da un descriptor de archivo especial que alberga una estructura que contiene las informaciones solicitadas previamente).

Es una solución Linux-solamente y las funcionalidades varía dependiendo de la versión del kernel, así que ten cuidado :)

+0

Solucionado (ahora es una página de manual). – akappa

1

Las fallas de caché no se pueden contar fácilmente. La mayoría de las herramientas o los perfiladores simulan el acceso a la memoria al redirigir los accesos de memoria a una función que proporciona esta función. Eso significa que este tipo de herramientas instrumenta el código en todos los lugares donde se realiza un acceso a la memoria y hace que su código funcione muy despacio. Esta no es tu intención, supongo.

Sin embargo, dependiendo del hardware, puede que tenga otras posibilidades. Pero incluso si este es el caso, el sistema operativo debe sostenerla (porque de lo contrario se podrían obtener del sistema de estadísticas globales no los relacionados con un proceso o subproceso)

EDIT: he podido encontrar este artículo interesante que puede ayudarle a: http://lwn.net/Articles/417979/

+0

Estaba pensando exactamente en algunas características del procesador "mágico" (como algunos buenos registros que de alguna manera cuentan las fallas del caché), abstraídas por una biblioteca que detecta automáticamente el tipo de procesador y hace las conexiones necesarias para obtener los datos reales. No sé si incluso es posible que algo así funcione, esos "valores mágicos" deberían copiarse al cambiar el contexto, por ejemplo, pero si esa biblioteca existe, sería genial. – akappa

5

Las CPU más recientes (AMD e Intel) tienen registros de monitor de rendimiento que se pueden utilizar para este tipo de trabajo. Para Intel, están cubiertos en el manual de referencia del programador, volumen 3B, capítulo 30. Para AMD, está en la Guía del desarrollador de BIOS y Kernel.

De cualquier forma, puede contar cosas como cache hits, cache misses, solicitudes de memoria, prefetches de datos, etc. Tienen selectores bastante específicos, por lo que podría obtener un recuento de (por ejemplo) el número de lecturas en la L2 caché para rellenar líneas en la memoria caché de instrucciones L1 (sin incluir las lecturas L2 para rellenar líneas en la memoria caché de datos L1).

Hay un módulo kernel de Linux para dar acceso a MSR (registros específicos del modelo). A primera vista, no sé si da acceso a los registros del monitor de rendimiento, pero espero que probablemente sí lo haga.

+0

¿Se refería a perfmon2 cuando hablaba del módulo kernel? – akappa

+0

@akappa: según recuerdo, se llamaba simplemente "módulo de kernel MSR" o algo así. Ha pasado un tiempo desde que lo usé, así que es posible que no recuerde el nombre correctamente. –

+0

De acuerdo, investigaré si perfmon2 será demasiado difícil de usar. Gracias :) – akappa

3

Intel VTune es una herramienta de ajuste del rendimiento que hace exactamente lo que está pidiendo; Por supuesto, funciona con procesadores Intel, ya que accede a los contadores internos del procesador, como se explica en Jerry Coffin, por lo que probablemente no funcione en un procesador AMD. Expone literalmente la cantidad de contadores, como los aciertos/errores de caché, las tasas de predicción de sucursales, etc. El problema real es entender qué contadores verificar;)

+0

Herramienta interesante, pero estoy leyendo la documentación y no puedo encontrar ninguna mención a algunas API para buscar algunas estadísticas de rendimiento en tiempo de ejecución. – akappa

+0

Honestamente, siempre lo usé como un programa independiente, si encuentro más detalles los publicaré;) – sergico

+0

Eso es lo que encontré: [enlace] (http://software.intel.com/en-us/articles/performance -tools-for-software-developers-using-the-vtune-analyzer-pauseresume-api-from-microsoft-visual-basic /) y [link] (http://www.google.com/url?sa=t&source = web & cd = 1 & ved = 0CBoQFjAA & url = http% 3A% 2F% 2Fsoftware.intel.com% 2Ffile% 2F6743 y rct = j & q = Vtune% 20API y ei = M9iQTbaDCZGbhQe41-G7Dg y USG = AFQjCNGP4BIHFHtUbNUBY4wcth9_Tmmd8A y CAD = RJA) – sergico

Cuestiones relacionadas