¿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?
Respuestas:
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:
Esto puede conducir a resultados sorprendentes. Por ejemplo
Este rastro es coherente:
proc2 loads A(gets 0)
,proc1 stores A:=1
proc1 stores B:=1
,proc2 loads B(gets 1)
¡Pero no es consistente! Como si
proc2 load B
devuelve 1, entoncesproc1 store A := 1
ya sucedió yproc2 load A
también debería devolver 1.fuente