Domanda

Quando il mio programma esegue l'operazione di caricamento con la semantica acquisiscono / negozio con la semantica di rilascio o forse un full-recinto, si invalida la cache della CPU.
La mia domanda è questa: quale parte della cache è in realtà invalidata? solo la cache-line che ha tenuto la variabile che ho usato acquisiscono / release? o forse l'intera cache viene invalidata? (L1 + L2 + L3 .. e così via?). C'è una differenza in questo argomento quando uso la semantica acquisiscono / rilascio, o quando uso un full-recinto?

È stato utile?

Soluzione

Io non sono un esperto su questo, ma mi sono imbattuto su questo documento, forse è utile http://www.rdrop.com/users/ paulmck / scalabilità / carta / whymb.2009.04.05a.pdf

Altri suggerimenti

Quando si esegue un carico senza recinzioni o mutex, allora il valore caricato potrebbe potenzialmente provenire da qualsiasi parte, vale a dire, le cache, registri (per mezzo di ottimizzazioni del compilatore), o RAM ... ma dalla tua domanda, si sapeva già questo .

Nella maggior parte delle implementazioni mutex, quando si acquista un mutex, un recinto viene sempre applicato, in modo esplicito (per esempio, mfence, barriere, ecc) o implicito (ad esempio, il prefisso di blocco per bloccare il bus su x86). Questo fa sì che la cache linee di tutte le cache sul percorso per essere invalidata.

Si noti che l'intera cache non è inficiata, solo le rispettive cache-linee per la locazione di memoria. Questo include anche le linee per il mutex (che di solito è implementato come un valore in memoria).

Naturalmente, ci sono specifici per l'architettura dettagli, ma questo è come funziona in generale.

Si noti inoltre che questa non è l'unica ragione per la cache invalidanti, come ci possono essere operazioni su una CPU che avrebbe bisogno cache su un altro essere invalidato. Facendo una ricerca su Google per "i protocolli di coerenza della cache" vi fornirà un sacco di informazioni su questo argomento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top