¿Qué se entiende por caché sin bloqueo y caché de múltiples bancos?

Trataré de explicar en lenguaje sencillo y luego el aspecto técnico de la memoria caché sin bloqueo.

Entonces, digamos que hay una ventana a una tienda y una persona está manejando una solicitud, por ejemplo. Starbucks Ahora, cuando solicita un café, puede haber 2 enfoques para manejar su solicitud de café.
1. El cajero toma su pedido, hace café y le da café. Otras personas detrás de ti deben esperar.
2. El cajero toma su solicitud, la coloca en un contenedor y el trabajador de fondo maneja su solicitud. Y te haces a un lado y la gente detrás de ti puede hacer su pedido.
¿Cuál crees que es mejor?

Ahora reemplace a las personas con solicitudes de fallas que lleguen a un caché de nivel inferior, digamos L2 $ desde L1 $. Ahora, cuando se encuentra una falla, envía una solicitud a L2. Ahora L2 puede manejar, procesar esta solicitud de falta y otras solicitudes de falta deben esperar. Otra forma puede ser que se mantenga una cola que toma los errores y L2 los procesa. Esto se realiza mediante caché sin bloqueo y MSHR (Miss Status Handling Register). Entonces, ahora el caché no bloquea su ventana de solicitud (es por eso que no bloquea). Espero que eso lo aclare.

Tomado de la página en pdx.edu
Caché sin bloqueo:
Jerarquías de caché capaces de atender simultáneamente múltiples solicitudes de memoria
Block No bloquee las referencias de caché que no necesitan los datos faltantes.
Servicio de múltiples solicitudes fallidas a la memoria al mismo tiempo.
MSHR:
Los MSHR facilitan el paralelismo de nivel de memoria sin bloqueo
 Se utiliza para rastrear la dirección, los datos y el estado de múltiples errores de caché pendientes.
 Debe proporcionar un orden correcto de la memoria, responder a las solicitudes de la CPU y mantener la coherencia de la memoria caché.

En caso de tener dudas específicas, por favor comente.

Caché sin bloqueo: puede atender múltiples solicitudes al mismo tiempo. Piense en un camión de comida: generalmente toma un pedido a la vez, pero puede haber múltiples pedidos en vuelo en un momento dado. Al igual que las solicitudes de caché, requieren una cantidad variable de tiempo para el servicio.

Cachés almacenados: esencialmente separan el espacio de direcciones en varios fragmentos, de modo que las solicitudes que van a diferentes fragmentos pueden comenzar en paralelo. Para usar la analogía del camión de comida, el tipo que maneja la parrilla puede tomar una orden al mismo tiempo que el tipo que maneja las ensaladas: sirven diferentes cosas.

Digamos que una instrucción solicita datos de un caché y los datos no están allí (el caché falla):

– una caché de bloqueo no aceptará más solicitudes hasta que se solucione la falla.

– un caché sin bloqueo aceptará más solicitudes e intentará atender esas solicitudes. Ahora las solicitudes adicionales también pueden acertar o fallar. Un caché “hit-under-X-miss” permitirá que X número de errores quede pendiente en el caché antes de bloquear. Por ejemplo, un caché “hit-under-2-miss” continuará ejecutándose si hay como máximo 2 errores que aún no se han completado. Si se alcanzan solicitudes adicionales, el caché seguirá funcionando. Sin embargo, si una solicitud es un tercer error, el caché se bloqueará (dejará de recibir solicitudes).

Un caché de bloqueo es posiblemente un caché “hit-under-0-miss”, porque se bloquea inmediatamente cuando hay un fallo.

Extra: un caché “hit-under-miss” es útil solo en una CPU fuera de orden donde una instrucción puede omitir una instrucción bloqueada que viene antes.

Un caché de múltiples bancos simplemente divide datos en múltiples módulos de memoria, por ejemplo, separando una palabra (4 bytes) en 4 módulos. Cuando lee datos de la memoria caché de varios bancos, puede leerlos en paralelo (lea un byte de 4 bancos al mismo tiempo, en lugar de 4 bytes de un banco de forma secuencial). El resultado es que el tiempo de golpe se reduce.