É verdade que a consistência sequencial é uma propriedade mais forte que a coerência do cache?
De acordo com
Daniel Sorin; Hill, Mark D; Wood, David A: Uma cartilha sobre consistência de memória e coerência de cache , Morgan & Claypool, 2011
a consistência sequencial pode ser descrita como (não formalmente):
O modelo de memória de consistência sequencial especifica que o sistema deve parecer executar todas as cargas de encadeamentos e armazenado em todos os locais de memória em uma ordem total que respeite a ordem do programa de cada encadeamento. Cada carga obtém o valor da loja mais recente nesse pedido total.
Em outras palavras, o sistema é sequencialmente consistente, se dados eventos de memória (cargas e armazenamentos) de cada thread, podemos ordenar todos esses eventos de modo que: 1) para cada thread, a ordem de seus eventos seja preservada e 2) a ordem global seja serial (qualquer carga retorna o valor mais recente armazenado).
Agora eles continuam e descrevem a coerência:
Uma definição de coerência análoga à definição de Consistência sequencial é que um sistema coerente deve parecer executar todas as cargas de encadeamentos e armazenar em um único local de memória em uma ordem total que respeite a ordem do programa de cada encadeamento.
Em outras palavras, o sistema é coerente; se dados eventos de memória de cada encadeamento para cada local , podemos solicitar eventos para esse local, de modo que: 1) para cada encadeamento, a ordem de seus eventos para esse local seja preservada e 2) para cada local em que o pedido é serial.
Finalmente, eles apontam a diferença:
Essa definição destaca uma distinção importante entre coerência e consistência : a coerência é especificada em uma localização por memória, enquanto a consistência é especificada em relação a todos os locais da memória.
Portanto, parece que a diferença é que, para sistemas coerentes, precisamos de uma ordem total em todos os eventos para cada local (assim, a ordenação entre eventos para uma localização específica), enquanto que para sistemas consistentes a ordem total deve ser definida em todos os eventos (e, portanto, no o pedido também é entre eventos para locais diferentes)?
Isso significa que a coerência é menos estrita que a consistência? (o que parece divertido!) Existem vestígios coerentes, mas não consistentes?
Respostas:
Como você apontou, a coerência é uma propriedade de um local de memória individual, enquanto a consistência se refere à ordem dos acessos a todos os locais de memória. A consistência sequencial é uma propriedade estritamente mais forte que a coerência. Ou seja: todo sistema sequencialmente consistente também é coerente em todos os locais da memória. O oposto não é verdadeiro, uma memória que é coerente em todos os locais não é necessariamente sequencialmente consistente. De fato, existem muitos multiprocessadores reais coerentes com o cache em que o modelo de memória é apenas fracamente consistente (há casos em que diferentes processadores observam acessos a diferentes locais em diferentes ordens).
A prova de consistência sequencial implica coerente:
Isso pode levar a resultados surpreendentes. Por exemplo
Esse rastreio é coerente:
proc2 loads A(gets 0)
,proc1 stores A:=1
proc1 stores B:=1
,proc2 loads B(gets 1)
Mas não é consistente! Como se
proc2 load B
retorna 1,proc1 store A := 1
já aconteceu eproc2 load A
também deve retornar 1.fonte