Coherencia de Caché: Ejemplos Prácticos y Optimización del Rendimiento

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 5,21 KB

Ejemplo 1: Variables en la Misma Línea de Caché

En este caso, las variables x e z residen en la misma línea de caché. Asumiremos valores iniciales para x y z. Por ejemplo, x = 100 y z = 200.

Hilo 1: lw $r0, x

  • La línea correspondiente de la caché se encuentra en estado I (Inválido).
  • Se produce un fallo de lectura.
  • Caché 1: Transición I -> S (Compartido).
  • Se coloca un fallo de lectura en el bus que no tiene efecto en la otra caché.

Hilo 1: add $r0, $r0, 1

  • No genera accesos a memoria.

Hilo 2: lw $t0, z

  • La línea correspondiente de la caché se encuentra en estado I (Inválido).
  • Se produce un fallo de lectura.
  • Caché 2: Transición I -> S (Compartido).
  • Se coloca un fallo de lectura en el bus.
  • Caché 1: S -> S (Permanece en estado Compartido).

Hilo 2: add $t0, $t0, 2

  • Sin efecto.

Hilo 1: sw $r0, x

  • Se escribe en x el valor 101. Escritura.
  • Transición en caché 1: S -> M (Modificado).
  • Se coloca invalidación en el bus.
  • Caché 2: Transición S -> I (Inválido).

Hilo 2: sw $t0, z

  • Se escribe en z el valor 202.
  • Caché 2: Transición I -> M (Modificado).
  • Se coloca un fallo de escritura en el bus.
  • Caché 1: M -> I (Inválido).
  • Caché 1: Se hace write-back del bloque.

Estado final:

  • Caché 1: Bloque inválido.
  • Caché 2: Bloque exclusivo (M).
  • Valores: x = 101, z = 202.
  • Memoria: Valores: x = 101, z = 200.

Ejemplo 2: Latencia de Acceso a Caché

Hilo 1: lw $r0, x

  • Requiere 4 ciclos de acceso a caché, más 100 ciclos para resolver el fallo de lectura.

Hilo 2: lw $t0, z

  • Requiere 4 ciclos de acceso a caché, más 100 ciclos para resolver el fallo de lectura.

Hilo 1: sw $r0, x

  • Requiere 4 ciclos de acceso a caché.

Hilo 2: sw $t0, z

  • Requiere 4 ciclos de acceso a caché, más 100 ciclos para hacer write-back.

Ejemplo 3: Variables en Distintas Líneas de Caché

En este caso, las variables x e z residen en distintas líneas de caché.

Hilo 1: lw $r0, x

  • La línea correspondiente de la caché se encuentra en estado I (Inválido).
  • Se produce un fallo de lectura.
  • Caché 1: Bloque(x), Transición I -> S (Compartido).
  • Se coloca un fallo de lectura en el bus que no tiene efecto en la otra caché.

Hilo 1: add $r0, $r0, 1

  • No genera accesos a memoria.

Hilo 2: lw $t0, z

  • La línea correspondiente de la caché se encuentra en estado I (Inválido).
  • Se produce un fallo de lectura.
  • Caché 2: Bloque(z), Transición I -> S (Compartido).
  • Se coloca un fallo de lectura en el bus que no tiene efecto en la otra caché.

Hilo 2: add $t0, $t0, 2

  • Sin efecto.

Hilo 1: sw $r0, x

  • Se escribe en x el valor 101. Escritura.
  • Bloque(x), Transición en caché 1: S -> M (Modificado).
  • Se coloca invalidación en el bus que no tiene efecto en la otra caché.

Hilo 2: sw $t0, z

  • Se escribe en z el valor 202.
  • Caché 2: Bloque(z), Transición S -> M (Modificado).
  • Se coloca invalidación en el bus que no tiene efecto en la otra caché.

Después de esta secuencia de operaciones, la memoria no se modifica puesto que no se ha producido ningún write-back.

  • Caché 1, Bloque(x), Estado exclusivo (M), x = 101
  • Caché 2, Bloque(z), Estado exclusivo (M), z = 202
  • Memoria: x = 100, z = 200

Ejemplo 4: Latencia de Acceso a Caché (Continuación)

Hilo 1: lw $r0, x

  • Requiere 4 ciclos de acceso a caché, más 100 ciclos para resolver el fallo de lectura.

Hilo 2: lw $t0, z

  • Requiere 4 ciclos de acceso a caché, más 100 ciclos para resolver el fallo de lectura.

Hilo 1: sw $r0, x

  • Requiere 4 ciclos de acceso a caché.

Hilo 2: sw $t0, z

  • Requiere 4 ciclos de acceso a caché.

Entradas relacionadas: