Estoy trabajando en un sistema, escrito en C++, ejecutándose en un Xeon en Linux, que necesita ejecutarse lo más rápido posible. Hay una gran estructura de datos (básicamente una matriz de estructuras) contenida en la RAM, más de 10 GB, y se debe acceder periódicamente a los elementos de la misma. Quiero revisar la estructura de datos para trabajar con el mecanismo de caché del sistema tanto como sea posible.¿Cuántos bytes trae un Xeon en el caché por acceso a la memoria?
Actualmente, los accesos se realizan principalmente de forma aleatoria en toda la estructura, y cada vez que se leen de 1 a 4 entradas de 32 bits. Pasará mucho tiempo antes de que se realice otra lectura en el mismo lugar, por lo que no se obtiene beneficio de la memoria caché.
Ahora sé que cuando lee un byte de una ubicación aleatoria en la memoria RAM, más que solo ese byte se lleva a la caché. Mi pregunta es cuántos bytes traen? ¿Es 16, 32, 64, 4096? ¿Esto se llama una línea de caché?
Estoy buscando rediseñar la estructura de datos para minimizar los accesos aleatorios a la memoria RAM y trabajar con la memoria caché en lugar de hacerlo en su contra. Saber cuántos bytes se extraen en la caché en un acceso aleatorio informará las elecciones de diseño que haga.
Actualización (octubre de 2014): Poco después de que hice la pregunta anterior, el proyecto se puso en espera. Desde entonces se ha reanudado y, en base a las sugerencias en las respuestas a continuación, realicé algunos experimentos sobre el acceso a la RAM, porque parecía probable que se estuviera produciendo un ataque de TLB. Revisé el programa para ejecutarlo con páginas enormes (2MB en lugar de 4KB estándar) y observé una pequeña aceleración, aproximadamente 2.5%. Encontré buena información acerca de la configuración de enormes páginas here y here.
Sí, línea de caché. Puede asumir 64 bytes hasta que descubra cuál de las docenas de modelos de procesadores Xeon tiene. Las cachés L2 y L3 también juegan un papel. Céntrese en los accesos de memoria secuenciales y no asuma nada.Medida. –
Gracias a todos por sus respuestas. –