¿Cuándo se devuelve el caché de la CPU a la memoria principal?

18

Si tengo una CPU con dos núcleos, cada núcleo tiene su propio caché L1, ¿es posible que Core1 y Core2 almacenen en caché una misma parte de memoria al mismo tiempo?
Si es posible, ¿cuál será el valor de la memoria principal si Core1 y Core2 han editado su valor en caché?

CarmeloS
fuente

Respuestas:

26

Si tengo una CPU con dos núcleos, cada núcleo tiene su propio caché L1, ¿es posible que Core1 y Core2 almacenen en caché una misma parte de la memoria al mismo tiempo?

Si. El rendimiento sería terrible si este no fuera el caso. Considere dos hilos que ejecutan el mismo código. Desea ese código en ambos cachés L1.

Si es posible, ¿cuál será el valor de la memoria principal si Core1 y Core2 han editado su valor en caché?

El valor anterior estará en la memoria principal, lo que no importará ya que ninguna CPU lo leerá. Antes de expulsar un valor modificado de la memoria caché, debe escribirse en la memoria. Por lo general , se utiliza alguna variante del protocolo MESI . En la implementación tradicional de MESI, si un valor se modifica en una caché, no puede estar presente en ninguna otra caché en el mismo nivel.

David Schwartz
fuente
15

Sí, esto (tener dos cachés en caché en la misma región de memoria) puede suceder, en realidad es un problema que ocurre mucho en la práctica. Hay varias soluciones, por ejemplo:

  • los dos cachés pueden comunicarse para asegurarse de que no estén en desacuerdo
  • puede tener algún tipo de supervisor que supervise todos los cachés y los actualice en consecuencia
  • cada procesador monitorea las áreas de memoria que ha almacenado en caché, y cuando detecta una escritura, arroja su caché (ahora no válido)

El problema se llama coherencia de caché . El artículo de Wikipedia sobre el tema tiene una buena descripción del problema y las posibles soluciones.

sleske
fuente
2

Para responder la pregunta en su título, depende del protocolo de almacenamiento en caché. Si es una reescritura, el caché solo se volverá a la memoria principal cuando el controlador de caché no tenga más remedio que colocar un nuevo bloque de caché en el espacio ya ocupado. El bloque que anteriormente ocupaba el espacio se elimina y su valor se vuelve a escribir en la memoria principal.

El otro protocolo es de escritura. En ese caso, cada vez que el bloque de caché se escribe en el nivel n, el bloque correspondiente en el nivel (n + 1) se actualiza. (Es similar en concepto a llenar nuestro formulario con papel carbón debajo; lo que escriba en la parte superior se copia en la hoja a continuación). Esto es más lento porque obviamente implica más operaciones de escritura, pero los valores entre cachés son más consistentes. En el esquema de reescritura, solo el caché de nivel más alto tendría el valor más actualizado para un bloque de memoria en particular.

Kimberly W
fuente
1
Me pregunto qué porcentaje de lectores aquí han usado papel carbón. :)
Barmar