Czy to prawda, że spójność sekwencyjna jest silniejszą właściwością niż spójność pamięci podręcznej?
Według
Sorin, Daniel J; Hill, Mark D; Wood, David A: A Primer on Memory Consistency and Cache Coherence , Morgan & Claypool, 2011
sekwencyjną spójność można opisać jako (nie formalnie):
Model pamięci spójności sekwencyjnej określa, że system musi pojawiać się, aby wykonywać wszystkie obciążenia wątków i zapisuje je we wszystkich lokalizacjach pamięci w całkowitej kolejności, która jest zgodna z kolejnością programu dla każdego wątku. Każde ładowanie otrzymuje wartość najnowszego sklepu w tej całkowitej kolejności.
Innymi słowy, system jest sekwencyjnie spójny, jeśli dane zdarzenia pamięci (obciążenia i zapasy) każdego wątku możemy uporządkować wszystkie te zdarzenia w taki sposób, że: 1) dla każdego wątku zachowana jest kolejność jego zdarzeń, i 2) porządek globalny jest serial (każde obciążenie zwraca ostatnią zapisaną wartość).
Teraz kontynuują i opisują spójność:
Definicja spójności, która jest analogiczna do definicji spójności sekwencyjnej, polega na tym, że spójny system musi wydawać się wykonywać obciążenia wszystkich wątków i zapisywać je w jednym miejscu pamięci w całkowitej kolejności, która jest zgodna z kolejnością programu dla każdego wątku.
Innymi słowy, system jest spójny, jeśli biorąc pod uwagę zdarzenia pamięci każdego wątku dla każdej lokalizacji , możemy uporządkować zdarzenia dla tej lokalizacji, tak że: 1) dla każdego wątku zachowana jest kolejność jego zdarzeń dla tej lokalizacji i 2) dla każdego lokalizacja zamówienie jest szeregowe.
Na koniec zwracają uwagę na różnicę:
Ta definicja podkreśla istotne rozróżnienie między spójnością a spójnością : spójność jest określana na podstawie lokalizacji na pamięć, podczas gdy spójność jest określana w odniesieniu do wszystkich lokalizacji w pamięci.
Wydaje się więc, że różnica polega na tym, że dla spójnych systemów potrzebujemy całkowitego porządku dla wszystkich zdarzeń dla każdej lokalizacji (a więc kolejności między zdarzeniami dla konkretnej lokalizacji), podczas gdy dla spójnych systemów całkowitą kolejność należy zdefiniować dla wszystkich zdarzeń (a zatem zamówienie jest również między wydarzeniami dla różnych lokalizacji)?
Czy to oznacza, że spójność jest mniej ścisła niż spójność? (co wydaje się zabawne!) Czy są ślady spójne, ale niespójne?
Odpowiedzi:
Jak wskazałeś, spójność jest właściwością pojedynczej lokalizacji pamięci, podczas gdy spójność odnosi się do kolejności dostępu do wszystkich lokalizacji pamięci. Spójność sekwencyjna jest właściwością zdecydowanie silniejszą niż spójność. To znaczy: każdy system sekwencyjnie spójny jest również spójny w każdym miejscu pamięci. Przeciwnie, nie jest prawdą, pamięć spójna w każdym miejscu niekoniecznie musi być spójna sekwencyjnie. W rzeczywistości istnieje wiele rzeczywistych wieloprocesorowych spójnych z pamięcią podręczną, w których model pamięci jest tylko słabo spójny (zdarzają się przypadki, w których różne procesory obserwują dostęp do różnych lokalizacji w różnych porządkach).
Dowód konsekwentnej konsekwencji oznacza spójność:
Może to prowadzić do zaskakujących wyników. Na przykład
Ten ślad jest spójny:
proc2 loads A(gets 0)
,proc1 stores A:=1
proc1 stores B:=1
,proc2 loads B(gets 1)
Ale to nie jest konsekwentne! Ponieważ jeśli
proc2 load B
zwraca 1, toproc1 store A := 1
już się stało iproc2 load A
powinno również zwrócić 1.źródło