¿Por qué el tamaño del caché L1 no ha aumentado mucho en los últimos 20 años?

35

El Intel i486 tiene 8 KB de caché L1. El Intel Nehalem tiene 32 KB de caché de instrucciones L1 y 32 KB de caché L1 de datos por núcleo.

La cantidad de caché L1 no ha aumentado casi a la velocidad de la velocidad de reloj.

Por qué no?

once81
fuente
Estas comparando manzanas con naranjas. Las velocidades de reloj han aumentado, pero no hay correlación con la necesidad de más caché. El hecho de que pueda hacer algo más rápido no significa que se beneficie de un balde más grande.
Keltari
El exceso de caché y la sobrecarga de administración pueden ralentizar un sistema. Han encontrado el punto dulce y allí permanecerá.
Fiasco Labs

Respuestas:

17

30K del texto de Wikipedia no es tan útil como una explicación de por qué un caché demasiado grande es menos óptimo. Cuando el caché se vuelve demasiado grande, la latencia para encontrar un elemento en el caché (factorizando errores de caché) comienza a acercarse a la latencia de buscar el elemento en la memoria principal. No sé a qué proporciones apuntan los diseñadores de CPU, pero creo que es algo análogo a la directriz 80-20: le gustaría encontrar sus datos más comunes en la memoria caché el 80% del tiempo, y los otros 20 % del tiempo tendrás que ir a la memoria principal para encontrarlo. (o cualesquiera que sean las proporciones previstas por los diseñadores de CPU).

EDITAR: estoy seguro de que no está cerca del 80% / 20%, así que sustituya X y 1-X. :)

JMD
fuente
66
"Cuando el caché se vuelve demasiado grande, la latencia para encontrar un elemento en el caché (factorizando errores de caché) comienza a acercarse a la latencia de buscar el elemento en la memoria principal". ¿Estas seguro acerca de esto? Por ejemplo, duplicar la cantidad de RAM instalada ciertamente no aumentará su latencia, ¿por qué esto sería cierto para el caché? Y también, ¿por qué el caché L2 crecería con las nuevas CPU, si esto es un problema? No soy un experto en esto, realmente quiero saber :)
sYnfo
2
Había preparado una descripción grande y larga del almacenamiento en caché en el software, y la medición de cuándo su caché se había sobrepasado y debería volcarse / reconstruirse, pero luego decidí que sería mejor admitir que no soy un diseñador de hardware. :) En cualquier caso, sospecho que la respuesta puede resumirse en la ley de rendimientos decrecientes. Es decir, más no siempre es mejor.
JMD
3
Desde mi larga historia de jugar con hardware en niveles bajos, pero no siendo realmente un diseñador, diría que la latencia parece estar relacionada con la cantidad de formas en que la caché es asociativa, no con el tamaño. Supongo que los transistores adicionales que irían al caché han demostrado ser más efectivos en otros lugares para el rendimiento general.
Brian Knoblauch el
1
@JMD Sin embargo, me interesaría esa descripción;) Aunque los comentarios probablemente no sean el mejor lugar para esto, es cierto. @Brian Entonces, si lo entiendo correctamente, decidieron poner menos transistores en el caché L1 y al mismo tiempo poner mucho más en L2, que es significativamente más lento. No te
ofendas,
10

Un factor es que las recuperaciones de L1 comienzan antes de que se completen las traducciones de TLB para disminuir la latencia. Con un caché lo suficientemente pequeño y lo suficientemente alto, los bits de índice para el caché serán los mismos entre las direcciones virtuales y físicas. Esto probablemente disminuye el costo de mantener la coherencia de la memoria con un caché virtualmente indexado y etiquetado físicamente.

AJW
fuente
1
respuesta más interesante :)
GameDeveloper
1
Creo que esta es la razón, pero déjame darte el número. El tamaño de página en la arquitectura x86 es 4096 bytes. El caché desea elegir el depósito de caché en el que buscar la entrada de la línea de caché (64 bytes) antes de que se complete la traducción de la página. Sería costoso tener que decidir entre demasiadas entradas en un depósito, por lo que cada depósito solo tiene 8 entradas. Como resultado, durante los últimos diez años, todos los costosos cpus x86 tienen exactamente 32768 bytes (512 líneas de caché) en su caché de datos L1.
b_jonas
Como esto es tan difícil de aumentar, los cpus agregan un nivel medio de caché, por lo que ahora tenemos cachés L2 y L3 separados. Además, el caché de código L1 y el caché de datos L1 están separados, porque la CPU sabe si está accediendo a código o datos.
b_jonas
8

El tamaño del caché está influenciado por muchos factores:

  1. Velocidad de las señales eléctricas (debería ser, si no la velocidad de la luz, algo del mismo orden de magnitud):

    • 300 metros en un microsegundo.
    • 30 centímetros en un nanosegundo.
  2. Costo económico (los circuitos en diferentes niveles de caché pueden ser diferentes y ciertos tamaños de caché pueden no valer)

    • Duplicar el tamaño de la memoria caché no duplica el rendimiento (incluso si la física permitía que ese tamaño funcionara) para duplicar tamaños pequeños ofrece mucho más que duplicar el rendimiento, para los tamaños grandes duplicar el tamaño de la memoria caché casi no ofrece rendimiento adicional.
    • En wikipedia puede encontrar un gráfico que muestra, por ejemplo, lo poco valioso que es hacer que los cachés sean más grandes que 1 MB (en realidad existen cachés más grandes, pero debe tener en cuenta que esos son núcleos multiprocesador).
    • Para los cachés L1, debería haber otros gráficos (que los proveedores no muestran) que tengan un tamaño conveniente de 64 Kb.

Si el tamaño de caché L1 no cambió después de 64 kb es porque ya no valía la pena. También tenga en cuenta que ahora hay una mayor "cultura" sobre el caché y muchos programadores escriben código "compatible con el caché" y / o usan instrucciones prefetech para reducir la latencia.

Una vez intenté crear un programa simple que estaba accediendo a ubicaciones aleatorias en una matriz (de varios MegaBytes): ese programa casi congelaba la computadora porque por cada lectura aleatoria se movía una página completa de la RAM a la memoria caché y como eso se hacía muy a menudo de esa manera El programa estaba drenando todo el ancho de banda dejando muy pocos recursos para el sistema operativo.

Desarrollador de juegos
fuente
6

Creo que se puede resumir simplemente afirmando que cuanto mayor sea el caché, más lento será el acceso. Por lo tanto, un caché más grande simplemente no ayuda, ya que un caché está diseñado para reducir la comunicación lenta del bus a la RAM.

Dado que la velocidad del procesador ha aumentado rápidamente, el caché del mismo tamaño debe funcionar más y más rápido para mantenerse al día. Por lo tanto, los cachés pueden ser significativamente mejores (en términos de velocidad) pero no en términos de almacenamiento.

(Soy un tipo de software, así que espero que esto no sea lamentablemente incorrecto)

Andrew Flanagan
fuente
3

Desde el caché L1 :

El caché de nivel 1, o caché primario, está en la CPU y se utiliza para el almacenamiento temporal de instrucciones y datos organizados en bloques de 32 bytes. El caché primario es la forma más rápida de almacenamiento. Debido a que está integrado en el chip con una interfaz de estado de espera cero (retraso) con la unidad de ejecución del procesador, su tamaño es limitado .

SRAM utiliza dos transistores por bit y puede almacenar datos sin asistencia externa, siempre que se suministre energía al circuito. Esto se compara con la RAM dinámica (DRAM), que debe actualizarse muchas veces por segundo para mantener su contenido de datos.

El procesador P55 MMX de Intel, lanzado a principios de 1997, fue notable por el aumento en el tamaño de su caché de Nivel 1 a 32 KB. Los chips AMD K6 y Cyrix M2 lanzados más tarde ese año aumentaron aún más la apuesta al proporcionar cachés de nivel 1 de 64 KB. 64 Kb ha seguido siendo el tamaño de caché L1 estándar, aunque varios procesadores de múltiples núcleos pueden utilizarlo de manera diferente.

EDITAR: Tenga en cuenta que esta respuesta es de 2009 y las CPU han evolucionado enormemente en los últimos 10 años. Si ha llegado a esta publicación, no tome todas nuestras respuestas aquí demasiado en serio.

harrymc
fuente
Una celda SRAM típica está compuesta por seis MOSFET. Cada bit en una SRAM se almacena en cuatro transistores (M1, M2, M3, M4) que forman dos inversores de acoplamiento cruzado. Fuente Segunda Fuente
lukecampbell
Esta es solo una descripción de la situación, y no explica nada sobre por qué.
Eonil
@Eonil: no podríamos proporcionar la respuesta "por qué" si quisiéramos. Sin embargo, la disminución de los rendimientos del rendimiento es una explicación razonable viable. Cuando la pregunta se escribió hace casi una década, era mucho más costoso aumentar el tamaño sin incluir un éxito en el rendimiento. Esta respuesta intentó al menos responder a la pregunta que se hizo.
Ramhound
-4

En realidad, el tamaño de caché L1 ES el mayor cuello de botella para la velocidad en las computadoras modernas. Los tamaños de caché L1 patéticamente pequeños pueden ser el punto dulce por el precio, pero no el rendimiento. Se puede acceder al caché L1 a frecuencias de GHz, lo mismo que las operaciones del procesador, a diferencia del acceso RAM 400 veces más lento. Es costoso y difícil de implementar en el diseño bidimensional actual, sin embargo, es técnicamente factible, y la primera compañía que lo haga con éxito, tendrá computadoras 100 veces más rápidas y aún funcionará, algo que produciría importantes innovaciones en muchos Actualmente, solo son accesibles a través de configuraciones ASIC / FPGA costosas y difíciles de programar. Algunos de estos problemas tienen que ver con problemas de propiedad / propiedad intelectual y avaricia corporativa que abarca décadas, donde un cuadro de ingenieros insignificante e ineficaz son los únicos con acceso al funcionamiento interno, y a quienes se les da principalmente órdenes de marcha para exprimir tonterías proteccionistas ofuscadas rentables. La investigación excesivamente privatizada siempre conduce a tal estancamiento tecnológico o estrangulamiento (como hemos visto en los sectores aeroespacial y automotriz por parte de los grandes fabricantes y pronto será farmacéutico). El código abierto y una regulación de patentes y secretos comerciales más sensata que beneficie a los inventores y al público (en lugar de a los jefes y accionistas de la compañía) ayudaría mucho aquí. Sería obvio para el desarrollo hacer cachés L1 mucho más grandes y esto debería y podría haberse desarrollado hace décadas. Estaríamos mucho más adelante en computadoras y muchos campos científicos usándolos si lo hubiéramos hecho. y a quienes se les da principalmente órdenes de marcha para exprimir tonterías proteccionistas ofuscadas rentables. La investigación excesivamente privatizada siempre conduce a tal estancamiento tecnológico o estrangulamiento (como hemos visto en los sectores aeroespacial y automotriz por parte de los grandes fabricantes y pronto será farmacéutico). El código abierto y una regulación de patentes y secretos comerciales más sensata que beneficie a los inventores y al público (en lugar de a los jefes y accionistas de la compañía) ayudaría mucho aquí. Sería obvio para el desarrollo hacer cachés L1 mucho más grandes y esto debería y podría haberse desarrollado hace décadas. Estaríamos mucho más adelante en computadoras y muchos campos científicos usándolos si lo hubiéramos hecho. y a quienes se les da principalmente órdenes de marcha para exprimir tonterías proteccionistas ofuscadas rentables. La investigación excesivamente privatizada siempre conduce a tal estancamiento tecnológico o estrangulamiento (como hemos visto en los sectores aeroespacial y automotriz por parte de los grandes fabricantes y pronto será farmacéutico). El código abierto y una regulación de patentes y secretos comerciales más sensata que beneficie a los inventores y al público (en lugar de a los jefes y accionistas de la compañía) ayudaría mucho aquí. Sería obvio para el desarrollo hacer cachés L1 mucho más grandes y esto debería y podría haberse desarrollado hace décadas. Estaríamos mucho más adelante en computadoras y muchos campos científicos usándolos si lo hubiéramos hecho. La investigación excesivamente privatizada siempre conduce a tal estancamiento tecnológico o estrangulamiento (como hemos visto en los sectores aeroespacial y automotor por parte de los grandes fabricantes y pronto será farmacéutico). El código abierto y una regulación de patentes y secretos comerciales más sensata que beneficie a los inventores y al público (en lugar de a los jefes y accionistas de la compañía) ayudaría mucho aquí. Sería obvio para el desarrollo hacer cachés L1 mucho más grandes y esto debería y podría haberse desarrollado hace décadas. Estaríamos mucho más adelante en computadoras y muchos campos científicos usándolos si lo hubiéramos hecho. La investigación excesivamente privatizada siempre conduce a tal estancamiento tecnológico o estrangulamiento (como hemos visto en los sectores aeroespacial y automotor por parte de los grandes fabricantes y pronto será farmacéutico). El código abierto y una regulación de patentes y secretos comerciales más sensata que beneficie a los inventores y al público (en lugar de a los jefes y accionistas de la compañía) ayudaría mucho aquí. Sería obvio para el desarrollo hacer cachés L1 mucho más grandes y esto debería y podría haberse desarrollado hace décadas. Estaríamos mucho más adelante en computadoras y muchos campos científicos usándolos si lo hubiéramos hecho. Sería obvio para el desarrollo hacer cachés L1 mucho más grandes y esto debería y podría haberse desarrollado hace décadas. Estaríamos mucho más adelante en computadoras y muchos campos científicos usándolos si lo hubiéramos hecho. Sería obvio para el desarrollo hacer cachés L1 mucho más grandes y esto debería y podría haberse desarrollado hace décadas. Estaríamos mucho más adelante en computadoras y muchos campos científicos usándolos si lo hubiéramos hecho.

Zack Barkley
fuente