tipos significa que procesador microprocesador memoria caracteristicas cache arquitectura performance intel cpu-architecture cpu-cache

performance - significa - ¿Dónde está documentada la memoria caché L1 de los procesadores Intel x86?



x86 que significa (6)

Estoy tratando de perfilar y optimizar algoritmos y me gustaría entender el impacto específico de los cachés en varios procesadores. Para los recientes procesadores Intel x86 (por ejemplo, Q9300), es muy difícil encontrar información detallada sobre la estructura del caché. En particular, la mayoría de los sitios web (incluido Intel.com ) que las especificaciones posteriores al procesador no incluyen ninguna referencia a la memoria caché L1. ¿Esto se debe a que la memoria caché L1 no existe o esta información, por alguna razón, se considera poco importante? ¿Hay algún artículo o discusión sobre la eliminación de la memoria caché L1?

[editar] Después de ejecutar varias pruebas y programas de diagnóstico (principalmente los que se analizan en las respuestas a continuación), he llegado a la conclusión de que mi Q9300 parece tener un caché de datos de 32K L1. Todavía no he encontrado una explicación clara de por qué esta información es tan difícil de conseguir. Mi teoría de trabajo actual es que los detalles del almacenamiento en caché L1 ahora están siendo tratados como secretos comerciales por Intel.



Los cachés L1 existen en estas plataformas. Esto seguirá siendo prácticamente cierto hasta que la memoria y la velocidad del bus frontal excedan la velocidad de la CPU, que es muy probable que esté muy lejos.

En Windows, puede utilizar GetLogicalProcessorInformation para obtener algún nivel de información de caché (tamaño, tamaño de línea, asociatividad, etc.). La versión Ex en Win7 proporcionará aún más datos, como qué núcleos comparten qué caché. CpuZ también brinda esta información.


Usted está mirando las especificaciones del consumidor, no las especificaciones del desarrollador. Aquí está la documentación que desea. Los tamaños de caché varían según los submodelos de la familia de procesadores, por lo que normalmente no están en los manuales de desarrollo IA-32, pero puede buscarlos fácilmente en NewEgg y demás.

Editar: Más específicamente: Capítulo 10 del Volumen 3A (Guía de programación de sistemas), Capítulo 7 del Manual de referencia de optimización, y potencialmente algo en el manual de almacenamiento en caché de páginas de TLB, aunque supongo que uno está más alejado de la L1 de lo que le importa acerca de.


La Localidad de referencia tiene un gran impacto en el rendimiento de algunos algoritmos; El tamaño y la velocidad de la caché L1, L2 (y en la CPU más nueva L3) obviamente juegan un papel importante en esto. La multiplicación de matrices es uno de esos algoritmos.


Este manual de Intel: Manual de referencia de optimización de arquitecturas Intel® 64 e IA-32 tiene una discusión decente sobre consideraciones de caché.

Página 46, Sección 2.2.5.1 Manual de referencia de optimización de arquitecturas Intel® 64 e IA-32

Incluso MicroSlop está despertando a la necesidad de más herramientas para monitorear el uso y el rendimiento de la memoria caché, y tiene un ejemplo de función GetLogicalProcessorInformation (...) mientras crea nuevos caminos para crear nombres de funciones ridículamente largos en el proceso. Creo que voy a codificar arriba.

ACTUALIZAR I: Hazwell aumenta el rendimiento de la carga del caché 2X, desde Inside the Tock; La arquitectura de Haswell

Si hubiera alguna duda de cuán importante es hacer el mejor uso posible de la memoria caché, esta presentación de Cliff Click, anteriormente de Azul, debería disipar cualquier duda. En sus palabras, "¡la memoria es el nuevo disco!".

ACTUALIZACIÓN II: especificaciones de rendimiento de caché significativamente mejoradas de SkyLake.


Es casi imposible encontrar especificaciones en cachés Intel. Cuando estaba enseñando una clase sobre memorias caché el año pasado, pregunté a amigos de Intel (en el grupo del compilador) y no pudieron encontrar las especificaciones.

¡¡¡Pero espera!!! Jed , bendice su alma, nos dice que en los sistemas Linux, puedes extraer mucha información del kernel:

grep . /sys/devices/system/cpu/cpu0/cache/index*/*

Esto le dará asociatividad, establecer el tamaño y un montón de otra información (pero no de latencia). Por ejemplo, aprendí que a pesar de que AMD anuncia su caché 128K L1, mi máquina AMD tiene una caché I y D dividida de 64K cada una.

Dos sugerencias que ahora son en su mayoría obsoletas gracias a Jed:

  • AMD publica mucha más información sobre sus cachés, por lo que al menos puede obtener cierta información sobre un caché moderno. Por ejemplo, los cachés AMD L1 del año pasado entregaron dos palabras por ciclo (pico).

  • La herramienta de código abierto valgrind tiene todo tipo de modelos de caché dentro de ella, y es muy valiosa para perfilar y comprender el comportamiento de la caché. Viene con una herramienta de visualización muy buena, kcachegrind que es parte del SDK de KDE.

Por ejemplo: en el tercer trimestre de 2008, las CPU AMD K8 / K10 utilizan líneas de caché de 64 bytes, con 64 kB cada caché de división L1I / L1D. L1D es asociativo bidireccional y exclusivo con L2, con latencia de 3 ciclos. La memoria caché L2 es de 16 vías asociativa y la latencia es de aproximadamente 12 ciclos.

Las CPU AMD Bulldozer-family usan una L1 dividida con una L1D asociativa de 4 vías 16kiB por clúster (2 por núcleo).

Las CPU Intel han mantenido L1 igual durante mucho tiempo (desde Pentium M a Haswell a Skylake, y presumiblemente muchas generaciones después de eso): dividir 32kB cada caché I y D, con L1D siendo de 8 vías asociativo. Líneas de caché de 64 bytes, que coinciden con el tamaño de transferencia de ráfaga de DDR DRAM. La latencia de uso de carga es ~ 4 ciclos.

Consulte también la wiki de la etiqueta x86 para obtener enlaces a más rendimiento y datos microarquitectónicos.