caching - open - ¿Cuál es la diferencia entre la falta de conflicto y la pérdida de capacidad?
whatsapp cache link (3)
La distinción importante aquí es entre los errores de caché causados por el tamaño de su conjunto de datos, y los errores de caché causados por la forma en que se organizan el caché y la alineación de datos.
Supongamos que tiene un caché asignado directo de 32k y considere los siguientes 2 casos:
Usted repetidamente itera sobre una matriz de 128k. No hay forma de que los datos puedan caber en esa memoria caché, por lo tanto, todas las fallas son de capacidad (excepto el primer acceso de cada línea, que es una falta obligatoria, y permanecería incluso si pudiera aumentar su caché infinitamente).
Tiene 2 arreglos pequeños de 8k, pero desafortunadamente ambos están alineados y asignados a los mismos conjuntos. Esto significa que, si bien teóricamente podrían caber en la memoria caché (si arreglas tu alineación), no utilizarán el tamaño completo de la memoria caché y, en cambio, competirán por el mismo grupo de conjuntos y se enfrentarán entre sí. Estos son conflictos que faltan, ya que los datos podrían encajar, pero aún así chocan debido a la organización. El mismo problema puede ocurrir con los cachés asociativos establecidos, aunque con menos frecuencia (digamos que el caché es bidireccional, pero tiene 4 conjuntos de datos alineados ...).
Los 2 tipos están realmente relacionados, se podría decir que dados los altos niveles de asociatividad, configuración de sesgos, alineamientos de datos adecuados y otras técnicas, se podrían reducir los conflictos, hasta que en su mayoría queden faltas de capacidad reales que son inevitables.
La falta de capacidad se produce porque los bloques se descartan de la memoria caché porque la memoria caché no puede contener todos los bloques necesarios para la ejecución del programa (el conjunto de trabajo del programa es mucho mayor que la capacidad de la memoria caché).
Las fallas de conflicto se producen en el caso de establecer estrategias asociativas o de asignación de bloques asignados directamente, las fallas de conflictos se producen cuando se asignan varios bloques al mismo conjunto o marco de bloques; También se llama fallos de colisión o fallos de interferencia.
¿Están realmente muy estrechamente relacionados?
Por ejemplo, si todas las líneas de caché están llenas y tenemos una solicitud de lectura para la memoria B, tenemos que desalojar la memoria A.
Entonces, ¿debería considerarse como una pérdida de capacidad ya que no tenemos suficiente espacio? Y luego, si queremos acceder a la memoria A, y como se desalojó antes, se considera una falta de conflicto.
¿Estoy entendiendo esto correctamente? Gracias
Mi definición favorita para el conflicto se pierde en la reducción de faltas obligatorias y de capacidad por Norman P. Jouppi:
Las faltas de conflicto son fallas que no se producirían si la memoria caché fuera totalmente asociativa con el reemplazo de LRU.
Veamos un ejemplo. Tenemos un caché de mapeo directo de tamaño 4. Las secuencias de acceso son
0 (falta obligatoria), 1 (falta obligatoria), 2 (falta obligatoria), 3 (falta obligatoria), 4 (falta obligatoria), 1 (golpe), 2 (golpe), 3 (golpe), 0 (falta de capacidad) , 4 (falta de capacidad), 0 (falta de conflicto)
El segundo al último 0 es una falta de capacidad porque incluso si el caché fuera totalmente asociativo con el caché LRU, todavía causaría una falla porque se accedió a 4,1,2,3 antes del último 0. Sin embargo, el último 0 es una falta de conflicto porque en un caché totalmente asociativo, los últimos 4 tendrían que reemplazar 1 en el caché en lugar de 0.
Falta obligatoria: cuando un bloque de memoria principal intenta ocupar una nueva línea de caché vacía y el primer acceso a un bloque de memoria que debe introducirse en la memoria caché se denomina falta obligatoria.
Conflicto perdido: cuando todavía hay líneas vacías en el caché, el bloque de la memoria principal está en conflicto con la línea ya llenada del caché, es decir, incluso cuando hay un lugar vacío disponible, el bloque intenta ocupar la línea ya llena. Su llamado conflicto se pierde.
Capacidad faltante: la falla ocurrió cuando todas las líneas de caché están llenas.
la falta de conflicto se produce solo en la memoria caché asignada directa y en la memoria caché asociativa de conjuntos. Porque en el mapeo asociativo, ningún bloque de la memoria principal intenta ocupar la línea ya llena.