Aumentar el tamaño de la línea del caché cuando el caché y la RAM no funcionan de forma asíncrona

1

Quiero mejorar el diseño de un procesador. Tiene una memoria caché asignada directamente, y quiero mejorar la tasa de aciertos. He estado trabajando para aumentar el tamaño de la línea del caché de una palabra de datos a cuatro, pero dado que todos los accesos al caché y la RAM están bloqueados actualmente (quiero decir que el funcionamiento de toda la CPU está bloqueado cuando está esperando una lectura de datos o escribir), creo que simplemente estoy cambiando el retraso necesario para acceder a la RAM en el momento en que se necesita cualquier dato en la misma línea de caché. Si estoy en lo cierto, esto no hará que el procesador se ejecute más rápido (y probablemente solo más lento, ya que se transfieren más datos entre la memoria caché y la RAM).

¿Es este el caso o estoy pasando por alto algo?

    
pregunta Ruben

4 respuestas

1

Al no disociar la actividad de la memoria de la actividad de la CPU, está eliminando la mayor parte del beneficio de tener un caché.

Pero en función de cómo haya descrito su sistema hasta ahora, parece que su análisis es correcto: al aumentar el tamaño de la línea, en efecto, buscaremos algunos datos, pero esto no dará como resultado ningún aumento de rendimiento. De hecho, podría dar lugar a una leve pérdida de rendimiento en aquellas ocasiones en que los datos recopilados previamente nunca se usen realmente, el tiempo dedicado a recuperarlos simplemente se desperdició.

    
respondido por el Dave Tweed
2

No está claro si está pensando en pasar de una caché de asignación directa de N x 1 palabra a una (por ejemplo) DM de N / 2 x 2 palabras o a una caché de DM de N x 2 palabras. La primera podría mejorar un poco el acceso secuencial, porque la segunda palabra en una línea actúa como un búfer de captación previa. La segunda alternativa mejorará significativamente la tasa de éxito, pero principalmente porque el tamaño del caché se ha duplicado.

    
respondido por el Wouter van Ooijen
1

El beneficio de rendimiento de un tamaño de bloque de caché más grande depende del ancho de banda y la latencia de la memoria principal y la carga de trabajo. Si la latencia de la memoria y el ancho de banda son relativamente altos (por ejemplo, la primera palabra está disponible en 8 ciclos de procesador y una palabra adicional en cada ciclo), entonces, si la carga de trabajo está utilizando incluso la mitad del bloque de caché antes de que se desaloje, entonces un bloque de cuatro palabras aumentará el rendimiento (se paralizará solo durante 11 ciclos en lugar de 16). (Dado que muchas tecnologías de memoria tienen restricciones de ráfaga, el beneficio podría ser menor si el controlador de memoria tiene un búfer [por lo que los accesos secuenciales podrían impactar en el búfer, sin sufrir la penalización de acceso a la memoria completa] o más si las fallas son en diferentes partes de la memoria y el uso de la ráfaga completa aumenta el ancho de banda efectivo de la memoria].)

Si el caché es de escritura, se debe considerar el costo adicional del desalojo. Por ejemplo, si el 50% de las palabras están sucias, el promedio de pérdida (para los dos accesos que en promedio se alcanzan en el bloque de 4 palabras) cambiaría de 16 ciclos a 20 ciclos y de 11 ciclos a 19,25 ciclos (el 75% de los bloques estaría sucio ya que la mitad de las palabras utilizadas están sucias y la mitad de las palabras en una línea de caché).

Un caché de reescritura con bloques de una sola palabra tampoco tendría que leer la memoria para escrituras de palabra completa en una falta de caché.

(La no asignación por escritura tiene algunas ventajas para los cachés asignados directamente, si hay un búfer de escritura. Combinar un búfer de escritura y un caché de la víctima puede ser útil).

En una caché de asignación directa , aumentar el tamaño del bloque también aumentará la tasa de fallas de conflictos. Lo importante que esto dependerá de la carga de trabajo (e incluso de la asignación de datos).

Otras posibles mejoras al caché incluyen proporcionar un caché víctima (de hecho, un pequeño caché L2), usar una asociatividad más alta (la forma en que se puede usar la predicción para proporcionar una velocidad de asignación directa en las predicciones correctas) y proporcionar un búfer de captación previa. Si la latencia de la memoria es significativa, entonces no tiene que haber muchos aciertos en el caché de la víctima o en el búfer de búsqueda previa para compensar el retraso en el acceso a la memoria. (El acceso especulativo a la memoria en una falla antes de verificar el caché de la víctima / el búfer de recuperación anticipada reduciría la latencia por fallas en estas cachés auxiliares, pero podría aumentar la latencia cuando un caché de la víctima es seguido inmediatamente por una falla de caché de la víctima, ya que el segundo acceso podría espere a que se complete el primer acceso a la memoria que se va a descartar antes de iniciar su propia cuenta.)

Otra posibilidad a considerar es cachés especializados. Por ejemplo, si los accesos a la pila se pueden filtrar del resto de la caché de datos, los conflictos se reducirán al tiempo que se mantiene la simplicidad de las caches asignadas directamente.

Por cierto, algunas formas de predicción de manera se benefician de los bloques de caché más grandes que la palabra porque pueden explotar la localidad de referencia.

    
respondido por el Paul A. Clayton
0

La mayor ventaja de tener un mayor tamaño de línea de caché es que la complejidad de un controlador de caché a menudo se relaciona principalmente con el tamaño del búfer de etiquetas, que a su vez está controlado por el número de líneas. Al duplicar el tamaño de cada línea, se duplica la cantidad de información que se puede almacenar en caché con un búfer de etiquetas de tamaño dado. Si no fuera por el costo, duplicar el tamaño de cada línea de caché a menudo sería inferior a tener el doble de líneas de caché. Sin embargo, si cuadruplicar el tamaño de cada línea de caché (pero mantener el mismo número) costaría lo mismo que duplicar el número de ellas (pero mantener el mismo tamaño), es posible que el primero ofrezca más "bang for the buck" .

En general, si uno está tratando de obtener un buen rendimiento de las líneas de caché más grandes, debe tener un par de bits para cada unidad direccionable dentro de una palabra, lo que indica si esa unidad está vacía, presente y limpia (coincide con la RAM). o presente y sucio (solo aplicable para cachés de escritura). Si alguna de las líneas de caché no está completamente llena, puede ser útil recuperar su contenido de la RAM en momentos en que el bus de memoria estaría inactivo, pero se debe dar prioridad a la CPU sobre las que no lo está.

Por cierto, una de las ventajas de los cachés de escritura simultánea en comparación con la de reescritura es que es posible tener cualquier número de dispositivos que tengan cachés de escritura simultánea compartiendo el bus sin que ningún código tenga que saber acerca de los cachés de nadie; todo lo que se necesita para mantener la coherencia es lógica para invalidar las líneas afectadas por accesos externos. Por el contrario, cuando se usa un caché de reescritura, será necesario que los dispositivos realicen un seguimiento de los datos que se guardan en los cachés de otros dispositivos, para garantizar que cada dispositivo que tenga un bloque en su caché reciba una notificación si alguien más lo modifica. .

    
respondido por el supercat

Lea otras preguntas en las etiquetas