Consistencia de memoria vs coherencia de caché

16

¿Es cierto que la coherencia secuencial es una propiedad más fuerte que la coherencia de caché?

De acuerdo a

Sorin, Daniel J; Hill, Mark D; Wood, David A: Introducción a la coherencia de la memoria y la coherencia de caché , Morgan y Claypool, 2011

la consistencia secuencial se puede describir como (no formalmente):

El modelo de memoria de coherencia secuencial especifica que el sistema debe aparecer para ejecutar todas las cargas de los subprocesos y se almacena en todas las ubicaciones de memoria en un orden total que respeta el orden del programa de cada subproceso. Cada carga obtiene el valor de la tienda más reciente en ese orden total.

En otras palabras, el sistema es secuencialmente consistente, si se dan eventos de memoria (cargas y almacenes) de cada subproceso, podemos ordenar todos estos eventos de manera que: 1) para cada subproceso se mantenga el orden de sus eventos, y 2) el orden global es serial (cualquier carga devuelve el último valor almacenado).

Ahora continúan y describen la coherencia:

Una definición de coherencia que es análoga a la definición de coherencia secuencial es que debe aparecer un sistema coherente para ejecutar todas las cargas y almacenes de subprocesos en una única ubicación de memoria en un orden total que respeta el orden del programa de cada subproceso.

En otras palabras, el sistema es coherente, si se dan eventos de memoria de cada subproceso para cada ubicación , podemos ordenar eventos para esa ubicación, de modo que: 1) para cada subproceso se conserva el orden de sus eventos en esa ubicación , y 2) para cada ubicación el pedido es en serie.

Finalmente, señalan la diferencia:

Esta definición resalta una distinción importante entre coherencia y consistencia : la coherencia se especifica por ubicación de memoria, mientras que la consistencia se especifica con respecto a todas las ubicaciones de memoria.

Entonces, parece que la diferencia es que para sistemas coherentes necesitamos un orden total en todos los eventos para cada ubicación (por lo tanto, el orden entre eventos para una ubicación particular), mientras que para sistemas consistentes, el orden total debe definirse en todos los eventos (y, por lo tanto, ordenar también es entre eventos para diferentes ubicaciones)?

¿Eso significa que la coherencia es menos estricta que la coherencia? (¡lo que parece divertido!) ¿Hay rastros que sean coherentes pero no consistentes?

Ayrat
fuente
2
Tenga en cuenta que no nos gustan las preguntas del formulario "¡por favor verifique mi respuesta!". ¿Puedes agregar una pregunta más específica? ¿Dónde crees que podría estar tu brecha?
Raphael
@ Raphael tienes razón, y no me sentí muy bien cuando estaba escribiendo la pregunta. Pero, ¿qué debo hacer si no puedo encontrar una respuesta en Internet? para encontrar no estaba seguro si es correcto. ¿Debería haber hecho una pregunta sospechosa? ¿O no proporciona una respuesta en la pregunta? :)
Ayrat
@Ayrat Leí la última parte de su pregunta como una respuesta que desea verificar. Si ese es el caso, debe haber alguna duda (de lo contrario, ¿por qué preguntar?) Que debe señalar para los lectores. Tal vez leí mal?
Raphael
@Raphael 'la última parte quiere ser revisada' - sí. '¿Por qué preguntar?' - El tema es nuevo, y no estaba seguro de que la conclusión fuera correcta. Trataré de evitar este tipo de preguntas en el futuro y probablemente encontraré a alguien para revisarlo.)
Ayrat

Respuestas:

9

Como señaló, la coherencia es una propiedad de una ubicación de memoria individual, mientras que la coherencia se refiere al orden de acceso a todas las ubicaciones de memoria. La consistencia secuencial es una propiedad estrictamente más fuerte que la coherencia. Es decir: cada sistema que es secuencialmente consistente también es coherente en cada ubicación de memoria. Lo contrario no es cierto, una memoria que es coherente en cada ubicación no necesariamente es consecuentemente secuencial. De hecho, hay muchos multiprocesadores reales coherentes de caché donde el modelo de memoria es solo débilmente consistente (hay casos en que diferentes procesadores observan que los accesos a diferentes ubicaciones suceden en diferentes órdenes).

La prueba de secuencialmente consistente implica coherente:

XX

XyX0 0y0 0XyXyyX

Esto puede conducir a resultados sorprendentes. Por ejemplo

initially A=B=0
process 1               process 2
store A := 1            load B (gets 1)
store B := 1            load A (gets 0) 

Este rastro es coherente:

  • para A la orden es: proc2 loads A(gets 0),proc1 stores A:=1
  • para B el orden es: proc1 stores B:=1,proc2 loads B(gets 1)

¡Pero no es consistente! Como si proc2 load Bdevuelve 1, entonces proc1 store A := 1ya sucedió y proc2 load Atambién debería devolver 1.

Lógica Errante
fuente