2012-06-19 11 views

risposta

27

Una coda invalidate è più simile a un buffer negozio, ma è parte del sistema di memoria, non la CPU. Fondamentalmente si tratta di una coda che tiene traccia delle invalidazioni e garantisce che vengano completate correttamente in modo che una cache possa assumere la proprietà di una linea della cache in modo che possa quindi scrivere quella linea. Una coda di caricamento è una struttura speculativa che tiene traccia dei carichi in volo nel processore fuori servizio. Ad esempio, la seguente può verificarsi

  1. CPU specularmente un carico da X
  2. Tale carico era in ordine programma dopo un negozio per Y, ma l'indirizzo di Y non è ancora risolto, così il negozio non procede.
  3. Y viene risolto e risulta essere uguale a X. Nel momento in cui viene risolto il negozio su Y, tale archivio ricerca la coda di caricamento per i carichi speculativi emessi, ma sono presenti dopo il negozio su Y nel programma ordine. Noterà il carico su X (che è uguale a Y) e dovrà schiacciare quelle istruzioni partendo dal carico X e seguenti.

Un buffer di archivio è una struttura speculativa che esiste nella CPU, proprio come la coda di caricamento ed è per consentire alla CPU di speculare sui negozi. Un buffer di combinazione di scrittura fa parte del sistema di memoria e in pratica richiede un sacco di piccole scritture (si pensi alle scritture a 8 byte) e le impacchetta in una singola transazione più grande (una linea di cache a 64 byte) prima di inviarle al sistema di memoria. Queste scritture non sono speculative e fanno parte del protocollo di coerenza. L'obiettivo è di risparmiare larghezza di banda del bus. In genere, un buffer di combinazione di scrittura viene utilizzato per le scritture non memorizzate su dispositivi I/O (spesso per schede grafiche). Nei dispositivi di I/O è tipico eseguire una serie di programmi di registri di dispositivo eseguendo scritture a 8 byte e il buffer di combinazione di scrittura consente di combinare tali scritture in transazioni più grandi quando vengono spedite oltre la cache.

+19

Ho appena notato la domanda, e stavo per rispondere - diamine, ho inventato la combinazione di Intel per scrivere e caricare i buffer, o almeno il mio nome è su molti dei brevetti - ma la risposta sopra è perfettamente soddisfacente. –

+7

Memorizza buffer = non sempre speculativi, non sempre all'interno della CPU. Potrebbero esserci buffer di memorizzazione all'esterno della CPU, ad es. tra scrivere attraverso L1 e L2. –

+9

I buffer di caricamento (1) trattengono i carichi dopo aver calcolato gli indirizzi di carico, ma fino a quando il carico non è realmente pronto per l'esecuzione; oppure, dopo aver provato a eseguire un carico, ma determinato che c'era un problema, come un errore di cache o un negozio precedente per lo stesso indirizzo che non è ancora pronto per i dati. (2) può essere usato per verificare che i carichi out-order siano speculati correttamente, come descritto da Martin. –