2011-01-04 21 views
5

Recentemente ho letto su modelli di memoria ed ero piuttosto confuso su come funzionasse.Informazioni sui modelli di memoria

Per citare http://cis.poly.edu/muller/CS623/weakmemory.htm

se il processore scrive un nuovo X scrive un nuovo Y, tutti gli altri processori che successivamente eseguire una lettura Y poi una lettura X, sarà accesso o la nuova Y e nuovo X , il vecchio Ye il nuovo X, o il vecchio X e il vecchio Y: ma nessun processore accederà a il nuovo Y e il vecchio X. Questa ipotesi di forte ordinamento era, al una volta, ragionevole. Computer corrente produce, tuttavia, raccomanda che i programmatori non si basano sull'ordinazione della memoria . Questo perché i nuovi sistemi di gestione della memoria tentano di riordinare l'accesso alla memoria per l'ottimizzazione . I sistemi autorizzati alla richiesta di riordino della memoria sono chiamati sistemi di memoria debolmente ordinati (modelli). Per esaminare come utilizzare il riordino per migliorare le prestazioni, considerare il seguente codice assemblatore [2].

Load reg1, A     // register1 = contents of memory A 
Load reg2, B     // register2 = contents of memory B 
ADD reg3, reg1, reg2  // register3 = register1 + register2 
Store reg3, C     // contents of memory C = contents of register3 

Se assumiamo che posizione B è attualmente nella cache e il percorso A è non memorizzata nella cache, quindi il caricamento di un prenderà più di B. Invece di aspettare A, la CPU può recupera B dalla sua cache, nascondendo la latenza di B: così la CPU può eseguire l'aggiunta non appena A è disponibile. Rilasciando il potente modello di esecuzione (sequenziale) di esecuzione (vale a dire, A deve caricare per primo, seguito da B), è possibile una maggiore prestazione ---- ma il riordino potrebbe non essere trasparente per il software. Considerare il frammento di codice di seguito, fa parte del codice che può essere utilizzato per implementare un semaforo di spinlock [2].

La mia domanda è, come è possibile che con un modello di memoria più debole potrebbe portare il caso che un processore potrebbe accedere al nuovo Y e vecchio X. Non è forse scritto nella stessa memoria (RAM) o funziona diversamente? Suppongo che se un processo modifica una variabile e un'altra lo legge dopo, legge l'ultimo valore.

Un'altra cosa di cui non sono sicuro è quale componente consenta il riordino dell'accesso alla memoria, ora suppongo che un compilatore possa riordinare le istruzioni. Ma potrebbe anche riordinarle una CPU?

Grazie

risposta

4

È necessario ricordare che la cache si trova tra la CPU e la memoria. Quando il software scrive un valore, sicuramente cade nella cache, ma potrebbe non andare mai alla memoria principale se il valore viene scritto di nuovo prima che la cache lo copi in RAM (pensa alle variabili del ciclo e ai locals). Tutta questa discussione ruota intorno ai diversi modelli per quando i dati vengono effettivamente inseriti nella RAM o letti dalla RAM.All'interno di un nucleo non ha molta importanza, poiché useranno quell'ultimo valore scritto che proviene dalla cache o dalla RAM.