Spójność pamięci a spójność pamięci podręcznej

17

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?

Ayrat
źródło
2
Pamiętaj, że nie lubimy pytań w formie „sprawdź moją odpowiedź!”. Czy możesz dodać bardziej szczegółowe pytanie? Jak myślisz, gdzie może być twoja luka?
Raphael
@ Rafael masz rację, a kiedy pisałem pytanie, nie czułem się zbyt dobrze. Ale co zrobić, gdybym nie mógł znaleźć odpowiedzi w Internecie (z wyjątkiem niejasnych twierdzeń, takich jak „spójność mówi o jednym kawałku, który różni się od spójności, która mówi o wszystkich bitach”), i tak próbował znaleźć odpowiedź, a kiedy wydaje się nie było pewne, czy jest poprawne. Czy powinienem wymyślić podejrzane pytanie? Czy nie
udzielacie
@Ayrat Przeczytałem ostatnią część twojego pytania jako odpowiedź, którą chcesz sprawdzić. W takim przypadku należy mieć wątpliwości (w innym razie po co pytać?), Które należy wskazać czytelnikom. Może źle odczytałem?
Raphael
@Raphael „ostatnia część chce być sprawdzona” - tak. 'po co pytać?' - temat jest nowy i nie byłem pewien, czy wniosek jest poprawny. Spróbuję uniknąć tego rodzaju pytań w przyszłości i prawdopodobnie znajdę kogoś, kto to sprawdzi.)
Ayrat 30.01.2014

Odpowiedzi:

11

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ść:

xx

xyx0y0xyxyyx

Może to prowadzić do zaskakujących wyników. Na przykład

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

Ten ślad jest spójny:

  • dla A kolejność jest: proc2 loads A(gets 0),proc1 stores A:=1
  • dla B zamówienia jest: proc1 stores B:=1,proc2 loads B(gets 1)

Ale to nie jest konsekwentne! Ponieważ jeśli proc2 load Bzwraca 1, to proc1 store A := 1już się stało i proc2 load Apowinno również zwrócić 1.

Wędrująca logika
źródło