Coerenza della memoria vs coerenza della cache


16

È vero che la coerenza sequenziale è una proprietà più forte della coerenza della cache?

Secondo

Sorin, Daniel J; Hill, Mark D; Wood, David A: A Primer on Memory Coistence and Cache Coherence , Morgan & Claypool, 2011

la coerenza sequenziale può essere descritta come (non formalmente):

Il modello di memoria a coerenza sequenziale specifica che il sistema deve apparire per eseguire tutti i carichi dei thread e memorizza in tutte le posizioni di memoria in un ordine totale che rispetti l'ordine del programma di ciascun thread. Ogni carico ottiene il valore dell'archivio più recente in quell'ordine totale.

In altre parole, il sistema è sequenzialmente coerente, se dati eventi di memoria (carica e memorizza) di ciascun thread possiamo ordinare tutti questi eventi in modo tale che: 1) per ogni thread l'ordine dei suoi eventi sia preservato e 2) l'ordine globale sia seriale (qualsiasi carico restituisce l'ultimo valore memorizzato).

Ora continuano e descrivono la coerenza:

Una definizione di coerenza analoga alla definizione di coerenza sequenziale è che un sistema coerente deve apparire per eseguire tutti i carichi e le archiviazioni di tutti i thread in una singola posizione di memoria in un ordine totale che rispetti l'ordine del programma di ciascun thread.

In altre parole, il sistema è coerente, se dati eventi di memoria di ciascun thread per ogni posizione , possiamo ordinare eventi per quella posizione, in modo tale che: 1) per ogni thread l'ordine dei suoi eventi in quella posizione venga conservato e 2) per ciascuno luogo in cui l'ordine è seriale.

Infine, sottolineano la differenza:

Questa definizione evidenzia un'importante distinzione tra coerenza e coerenza : la coerenza è specificata in base alla posizione per memoria, mentre la coerenza è specificata rispetto a tutte le posizioni di memoria.

Quindi sembra che la differenza sia che per sistemi coerenti abbiamo bisogno di un ordine totale su tutti gli eventi per ogni posizione (quindi l'ordine tra eventi per una particolare posizione), mentre per sistemi coerenti l'ordine totale dovrebbe essere definito su tutti gli eventi (e quindi il l'ordinamento è anche tra eventi per diverse località)?

Ciò significa che la coerenza è meno rigorosa di quella coerenza? (che sembra divertente!) Ci sono tracce coerenti ma non coerenti?


2
Nota che non ci piacciono le domande del modulo "controlla la mia risposta!". Puoi aggiungere una domanda più specifica? Dove pensi che potrebbe essere il tuo divario?
Raffaello

@Raphael hai ragione, e non è stata una bella sensazione quando stavo scrivendo la domanda. Ma cosa fare se non riuscissi a trovare una risposta su Internet (tranne le vaghe affermazioni come "la coerenza parla di un bit, che è diverso dalla coerenza che parla di tutti i bit"), e quindi ho cercato di trovare una risposta, e quando sembra scoprire che non era sicuro che fosse corretto. Avrei dovuto farmi una domanda sospetta? O non fornire una risposta alla domanda? :)
Ayrat,

@Ayrat Ho letto l'ultima parte della tua domanda come risposta che vuoi controllare. In tal caso, dovrebbero esserci dei dubbi (altro, perché chiedere?) Che dovresti individuare per i lettori. Forse ho letto male?
Raffaello

@Raphael 'l'ultima parte vuole essere controllata' - sì. 'perchè chiedere?' - l'argomento è nuovo e non ero sicuro che la conclusione fosse corretta. Cercherò di evitare questo tipo di domande in futuro e probabilmente troverò qualcuno in giro per controllarlo.)
Ayrat

Risposte:


9

Come hai sottolineato, la coerenza è una proprietà di una singola posizione di memoria mentre la coerenza si riferisce all'ordine di accesso a tutte le posizioni di memoria. La coerenza sequenziale è una proprietà strettamente più forte della coerenza. Cioè: ogni sistema sequenzialmente coerente è anche coerente in ogni posizione di memoria. Non è vero il contrario, un ricordo coerente in ogni luogo non è necessariamente coerente sequenzialmente. In effetti, ci sono molti multiprocessori coerenti con la cache in cui il modello di memoria è solo debolmente coerente (ci sono casi in cui processori diversi osservano accessi a posizioni diverse in ordini diversi).

La prova di coerenza sequenziale implica coerente:

XX

XyX0y0XyXyyX

Questo può portare a risultati sorprendenti. Per esempio

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

Questa traccia è coerente:

  • per A l'ordine è: proc2 loads A(gets 0),proc1 stores A:=1
  • per B l'ordine è: proc1 stores B:=1,proc2 loads B(gets 1)

Ma non è coerente! Dal momento che se proc2 load Brestituisce 1, allora è proc1 store A := 1già successo e proc2 load Adovrebbe restituire anche 1.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.