Hola, les saluda Miguel y esta vez les traigo un nuevo artículo.
Índice
Una ilustración detallada de diferentes tipos de errores de caché
Introducción a la memoria caché
La mayoría de las computadoras modernas tienen tres niveles de memoria caché, a saber, cachés L1, L2 y L3. A menudo, las cachés L1 y L2 residen en el chip, mientras que la caché L3 reside fuera del chip. Estas memorias caché juegan un papel importante en la creación de la ilusión de tener una memoria principal rápida. Pero, ¿por qué tienen que crear tal ilusión?
Siempre ha habido una brecha significativa entre el rendimiento de la CPU y la memoria principal y, como resultado, la memoria principal se ha convertido en un cuello de botella de rendimiento. La velocidad a la que la CPU procesa los datos es mucho mayor que la velocidad a la que la memoria principal puede proporcionar datos. Acceder a la memoria principal es aproximadamente 100 veces más lento que acceder a la caché L1.
Cuando la CPU necesita acceder a algunos datos, primero verificará los cachés. Si los datos están presentes, lo llamamos golpe de caché lo que daría como resultado un acceso más rápido a los datos. Si los datos requeridos no están presentes en ningún nivel de caché, lo llamamos falta de caché. Luego, los datos deben obtenerse de la memoria principal, que es relativamente muy lenta. Las fallas de caché se han categorizado en 4 tipos, a saber:
- Señorita fría (también conocida como señorita obligatoria)
- Falta de capacidad
- Conflicto señorita
- Error de coherencia (error de compartir verdadero y error de compartir falso)
1. Error frío / error obligatorio
Se produce un error frío u obligatorio cuando se accede a un dato por primera vez.
Supongamos que el tamaño de la línea de caché es 32B, el tamaño de la caché es 128B (solo por el bien de la ilustración) y tenemos una matriz de tamaño 32 con valores dobles almacenados en la memoria principal (matriz doble[32]).
Inicialmente, la caché está vacía y la matriz se almacena en la memoria principal como se ilustra en el siguiente diagrama.
Cuando intentamos acceder a la matriz[0], no está disponible en la caché ya que es la primera vez que la matriz[0] está accediendo a configurar, lo que resultaría en una señorita fría / obligatoria y obtenemos una línea de caché de datos de la memoria principal a la caché.
Podemos reducir faltas obligatorias mediante precarga. En el ejemplo anterior, cuando array[0] se está accediendo, matriz[1], matriz[2] y matriz[3] están precargados. Más tarde, cuando accedemos a la matriz[0–3] logramos hits de caché.
2. Falta de capacidad
Se produce una pérdida de capacidad cuando los datos obtenidos anteriormente se han eliminado de la caché debido a la limitación de espacio.
Supongamos que hemos obtenido datos hasta la matriz[15]. Ahora el estado de la caché es el siguiente.
Supongamos que queremos acceder a la matriz[16] a continuación, no hay espacio libre en la caché. Si el sistema sigue el protocolo LRU (menos usado recientemente), se eliminará la primera línea de caché y se almacenarán los nuevos datos.
Si queremos acceder a la matriz[0] de nuevo, terminamos en un falta de capacidad. Aunque hayamos accedido a array[0] anteriormente, no está en el caché ya que se ha desalojado del caché debido a la falta de capacidad del caché.
3. Señorita de conflicto
Los errores de conflicto se producen en cachés asociativos de conjuntos o asignados directamente. un conflicto de señorita ocurre cuando los datos a los que se accedió anteriormente se eliminan de la caché aunque haya espacio libre en la caché.
Suponiendo un caché mapeado directamente, la siguiente figura demuestra cómo se mapean las direcciones de memoria al caché.
¿Qué pasaría si accedemos a los elementos de la matriz en la matriz de pedidos? [0] → matriz[16] → matriz[0]
Cuando matriz[0] se accede, la caché se vería así:
Entonces, cuando intentamos acceder a la matriz[16], esa dirección de memoria en particular se asigna al mismo bloque de caché que la matriz[0]. Por lo tanto, la línea de caché anterior debe desalojarse para dejar espacio para los nuevos datos.
Ahora, cuando queremos acceder a la matriz[0] de nuevo, no está en el caché, lo que da como resultado un conflicto señorita (porque matriz accedida anteriormente [0] se ha eliminado de la caché aunque la caché no esté llena).
Podemos eliminar el conflicto falla mediante el uso de la asociatividad completa. La asociatividad completa permite que cualquier ubicación de la memoria se almacene en cualquier lugar de la caché y, como resultado, nunca habría un conflicto.
4. La señorita Coherencia
Los errores de coherencia se dividen en dos categorías: (1) Error de compartir verdadero y (2) Error de compartir falso. La falta de coherencia a menudo ocurre en un entorno paralelo.
4.1 Señorita de True Sharing
Considere un escenario donde el sistema tiene dos procesadores y ambos requieren acceso al arreglo[0] uno después del otro. Processor_1 accede a la matriz[0] primero. Entonces Processor_2 accede a la matriz[0] y modifica su valor. Esto invalidaría la línea de caché correspondiente en Processor_1. Cuando Processor_1 intenta acceder a la matriz[0] de nuevo, resultaría en una verdadero compartir señorita ya que la línea de caché correspondiente ha sido invalidada.
4.2 Falsa por compartir
¿Qué pasaría si Processor_2 requiere acceso a la matriz? [1] ¿en lugar?
Aunque ambos procesos están trabajando con datos diferentes, cuando Processor_2 modifica la matriz [1] , la línea de caché en Processor_1 se invalidará ya que la matriz [0] y la matriz [1] residen en la misma línea de caché. Lo llamamos un error de compartir falso porque los datos en realidad no se comparten, pero desafortunadamente terminaron en la misma línea de caché.
Dado que las pérdidas de caché son caras, organizar los datos de tal manera que se reduzcan las pérdidas de caché proporcionaría un aumento del rendimiento.
Gracias por leer.
Añadir comentario