2010-04-05 14 views
14

¿Cómo puedo medir mediante programación (no consultar el sistema operativo) el tamaño y el orden de asociatividad de las cachés L1 y L2 (cachés de datos)?Tamaño de medida y orden de las cachés L1 y L2

Las suposiciones sobre el sistema:

  • Ha L1 y L2 cache (puede ser L3 también, puede ser el intercambio de caché),
  • Se puede tener una unidad de captación previa de hardware (como P4 +),
  • Tiene un clocksource estable (tickcounter o buen HPET para gettimeofday).

No hay suposiciones sobre el sistema operativo (puede ser Linux, Windows u otra cosa) y no podemos usar consultas POSIX.

El lenguaje es C, y optimizaciones del compilador puede estar desactivado.

+3

Pregunta muy interesante. +1 –

+1

Hay una biblioteca que mide los tamaños de caché en tiempo de compilación. Se llama ATLAS http://math-atlas.sourceforge.net/. Supongo que también puedes encontrar información allí. –

+0

¿Identificación del procesador con búsqueda? (¿O es eso hacer trampa?) –

Respuesta

6

Creo que todo lo que hay que hacer es acceder a la memoria en varias ocasiones en trozos cada vez mayores (para determinar el tamaño de caché), y creo que se pueden variar los pasos para determinar la asociatividad.

Así que comenzaría a cabo tratando de acceder a segmentos muy cortos de memoria y seguir doblando el tamaño hasta que el acceso se ralentiza. Cada vez que se ralentiza el acceso, usted determina el tamaño de otro nivel de caché.

+2

, pero ¿cómo puedo activar la captación previa de hardware, que enmascara algunos tamaños? – osgx

1

Usted puede encontrar el STREAM benchmark útil o interesante, o ambos.

+0

Marca, por favor, eche un vistazo en http://stackoverflow.com/questions/2517694/can-the-stream-and-gups-single-cpu-benchmark-use-non-local-memory-in-numa-machi – osgx

1

pregunta no está actualizado un poco, pero la respuesta es here.

+0

Solo buenas ilustraciones, pero no la solución. Además, no entiendo, cómo obtener cuenta de manera de sus gráficos. – osgx

+2

Si bien esto podría responder teóricamente a la pregunta, [sería preferible] (http://meta.stackexchange.com/q/8259) incluir aquí las partes esenciales de la respuesta y proporcionar el enlace de referencia. –

Cuestiones relacionadas