Coerenza della cache

Da Wikipedia, l'enciclopedia libera.

(Cache Coherency)

Nei sistemi come SMP - Symmetric Multiprocessor System, multi-core e cc-NUMA dove viene usata una cache dedicata per ogni processore, core o nodo, si può verificare un problema di consistenza dei dati quando uno stesso dato è memorizzato in più di una cache. Questo problema si verifica quando un dato viene modificato in una cache. Può essere risolto in due modi:

  1. - Invalidando tutte le copie delle altre cache (broadcast-invalidate - diffusione invalidazione)
  2. - Aggiornando tutte le copie delle altre cache (write-broadcasting - diffusione scrittura), mentre la memoria può essere aggiornata (write through) o non aggiornata (write-back)
- Nota: La coerenza dai dati generalmente riguarda solo i dati (come operandi) e non le istruzioni (vedi Self-Modifying Code).

Gli schemi si possono classificati in base a:

- Schema Snoopy vs Directory e vs Shared caches
- Protocollo Write through vs Write-back (basati sull'ownership - proprietà)
- Protocollo Update vs Invalidation (aggiornamento vs invalidazione)
- Intervention vs non Intervention (intervento vs non intervento)
- Protocollo dirty-sharing vs non dirty-sharing (dati modificati condivisi vs non condivisi - MOESI vs MESI)

Tre approcci sono addottati per mantenere la coerenza dei dati.

  • Bus watching o Snooping - generalmente usato per i sistemi SMP - Symmetric Multiprocessor System/multi-core basati sul bus
  • Directory-based - Message-passing (basati sulla Directory e scambio di messaggi) possono essere usati in tutti i sistemi, ma tipicamente nei sistemi cc-NUMA e nei sistemi multi-core estesi
  • Shared cache (cache condivisa) - generalmente usata nei sistemi multi-core

Protocollo di Coerenza Snoopy[modifica | modifica wikitesto]

(protocollo di coerenza basato sullo Snoopy )

Protocollo usato nei sistemi con bus, come ad esempio nei sistemi SMP

SMP - Symmetric Multiprocessor System[modifica | modifica wikitesto]

(Sistema Multiprocessore Simmetrico)

- Sistema operante sotto un unico OS (Operating System - Sistema Operativo) con due o più processori omogenei e
   con una Main Memory centralizzata condivisa.

SMP - Symmetric Multiprocessor System

Ciascun processore ha una propria cache che agisce come ponte tra il processore e la Main Memory. La connessione è fatta usando un System Bus (bus di sistema) o un crossbar (connessioni incrociate) [1] (xbar) o un mix dei due precedenti sistemi, bus per gli indirizzi e crossbar per i dati (Data crossbar) [2][3][4].

Il limite maggiore di questi sistemi è il traffico e larghezza di banda di memoria (quantità di dati al sec.). La banda può essere aumentata usando un largo canale dati, un crossbar dati, la memory interleaving e transazioni di dati fuori ordine (out of order data transaction). Il traffico può essere ridotto usando una cache che agisce da "filtro" verso la memoria condivisa, cioè la cache è un elemento essenziale nei sistemi SMP con memoria condivisa (shared-memory).

Nei sistemi multiprocessori con cache separate che condividono una memoria comune, uno stesso dato può essere memorizzato in più di una cache. Un problema di consistenza dati nasce quando un dato è modificato in una sola cache.
Il protocolli per mantenere la coerenza fra processori multipli sono chiamati cache-coherency protocols (protocolli di coerenza delle cache).

Generalmente nei sistemi SMP la coerenza si basa sull'approccio chiamato "Bus watching" (sorveglianza del bus) o "Snoopy" (dal nome del cane Snoopy dei cartoni animati).
In un sistema basato sullo snoopy, tutte le cache controllano le transazioni del bus per intercettare i dati e verificare se ha una copia nella propria cache.

Vari protocolli di coerenza sono usati per mantenere la coerenza dei dati tra cache [5].

Questi protocolli sono generalmente classificati solo in base agli stati della cache (da 3 a 5 e 7 o più) e le transazioni tra questi, ma questo potrebbe creare qualche confusione.

La definizione di un protocollo così fatta è incompleta perché mancante di importanti ed essenziali informazioni come le azioni che questi producono. Queste azioni possono essere indotte dal processore o dal bus (esempio "intervention", "invalidation", "broadcasting", "updating", etc.). Il tipo di azioni sono dipendenti dall'implementazioni adottata. Protocolli aventi gli stessi stati e le stesse regole di transazioni possono essere differenti, per esempio il protocollo MESI con "shared intervention" (intervento su dati condivisi puliti (clean)) e MESI senza "intervention" (vedi sotto). Protocolli con stati differenti possono essere praticamente lo stesso protocollo, per esempio i protocolli 4-stati MESI Illinois e 5-stati MERSI (IBM) / MESIF-Intel sono solo una implementazione diversa delle stesse funzionalità (vedi sotto)

I più comuni e popolari protocolli sono considerati il protocollo 4-stati conosciuto con l'acronimo MESI e il 5-stati MOESI, termini usati giusto per una facile pronuncia e derivati dal nome degli stati usati. Altri protocolli usano gli stessi stati, o un sottoinsieme di questi, ma con differenti implementazioni e spesso con una differente ma equivalente terminologia. Con il termine MESI o MOESI, o un sottoinsieme di questi, generalmente si fa riferimento ad una classe di protocolli piuttosto che ad un specifico protocollo.

Stati della Cache[modifica | modifica wikitesto]

I protocolli MESI e MOESI sono spesso chiamati con nomi differenti.

  • M=Modified (modificato) o D=Dirty (sporco/alterato) o DE=Dirty-Exclusive (sporco esclusivo) o EM=Exclusive Modified (esclusivo modificato)
- modificato o sporco, cioè modificato solo in una cache - write-back in caso di rimpiazzo (replacement).
- Il dato è memorizzato in una sola cache, ma il dato in memoria non è aggiornato (invalido)
  • O=Owner (proprietario/resposabile) o SD=Shared Dirty (sporco condiviso) o M=Shared Modified (sporco modificato) o T=Tagged (etichettato/contrassegnato)
- modificato, potenzialmente condiviso, proprietario - write-back in caso di rimpiazzo.
- Il dato può essere memorizzato in più di una cache, ma il dato in memoria non è aggiornato (invalido). Solamente una cache è l' "owner" (proprietario), le altre cache sono marcate "shared" (condivise). In caso di una richiesta di lettura sul bus, il dato viene fornito dall' "owner" anziché dalla memoria.
  • E=Exclusive o R=Reserved o VE=Valid-Exclusive o EC=Exclusive Clean o Me=Exclusive
- esclusivo o riservato o valido esclusivo o esclusivo pulito
- Il dato è memorizzato solo in una cache e clean (pulito, cioè valido) in memoria.
  • S=Shared (condiviso) o V=Valid (valido) o SC=Shared Clean (condiviso pulito)
- Dato potenzialmente condiviso con altre cache. Il dato può essere clean o dirty. Il termine "clean" in SC è fuorviante perché può essere anche dirty (vedi Protocollo Dragon)
  • I=Invalid.
- Linea di cache invalida. Se la linea di cache non è presente (tag non corrispondente) è equivalente a linea invalida, perciò dato invalido significa dato presente ma invalido oppure non presente in cache

Stati speciali

  • F=Forward (in avanti) o R=Recent (recente)
- stati addizionali del protocollo MESI.
- L'ultimo dato letto. È un speciale stato "Valido" che è l' "Owner" per dati condivisi non modificati, usato in alcuni protocolli estesi di MESI (MERSI o R-MESI IBM [6][7], MESIF - Intel [8][9]). Lo stato R/F è usato per permettere l' "Intervention" quando il dato è "Valido" ma condiviso con le altre cache. Questa cache è responsabile per l'intervention (shared intervention ). Su una richiesta di lettura del bus, il dato viene fornito da questa cache invece che dalla memoria. MERSI e MESIF sono lo stesso protocollo solo con una differente terminologia (F al posto di R). Qualche volta R è riferito anche come "Shared Last " - ultimo condiviso (SL) [10][11].
Nota - Lo stato R = Recent è usato non solamente nel protocollo MERSI = R-MESI ma in diversi altri protocolli. Questo stato può essere usato in combinazione con altri stati. Per esempio RT-MESI, HR-MESI, HRT-MESI, HRT-ST-MESI [12][13][7]. Tutti i protocolli che usano questo stato saranno riferiti come R-MESI type.
  • H=Hover - H-MESI (stato addizionale del protocollo MESI) [12]
- Lo stato Hover (H) (sospeso) permette ad una cache di mantenere un indirizzo nella directory anche se il corrispondente valore della linea di cache è una copia invalida. Se il valore corrispondente appare sul bus (Tag dell'indirizzo coincidente) dovuto ad una "Read" o "Write" valida, il dato della linea di cache è aggiornato con una copia valida e il suo stato è cambiato in S.
- Questo stato può essere usato in combinazione con altri stati. Per es. HR-MESI, HT-MESI, HRT-MESI, HRT-ST-MESI [12][13][7]
  • W=Written (stato addizionale del protocollo MOESI)
- È solo uno stato intermedio temporaneo e non uno stato funzionale. Nelle operazione di RWITM dopo aver ricevuto il dato richiesto, la cache è settata prima in W poi in M (quando effettivamente sarà modificata) invece di andare direttamente in M come in MOESI (MOWESI è usato solamente in Fujitsu, per es. SPARC64 V) [14].

Vari Protocolli di Coerenza[modifica | modifica wikitesto]

                                                                                Protocolli

  • SI                                                                       Write Through
  • MSI                                                                    Synapse [5]
  • MEI                                                                    IBM PowerPC 750 [15], MPC7400 [7]
  • MES                                                                   Firefly [5]
  • MESI                                                                  Pentium II [16], PowerPC, Intel Harpertown (Xeon 5400)
  • MOSI                                                                 Berkeley [5]
  • MOESI                                                              AMD64 [17], AMD Opteron [1], MOESI [18], T-MESI IBM [13]

————————————————————————————————————————

                                                                                Terminologia usata

  • Illinois                                                                 D-VE-S-I                      (= MESI esteso) [5] [19]
  • Write-once o Write-first                                      D-R-V-I                         (= MESI)  [20][5][21]
  • Berkeley                                                             D-SD-V-I                      (= MOSI)  [5]
  • Synapse                                                             D-V-I                            (= MSI)     [5]
  • Firefly                                                                 D-VE-S                        (= MES) DEC [5]
  • Dragon                                                               D-SD (SM ?)-SC-VE   (= MOES) Xerox [5]
  • Bull HN ISI                                                         D-SD-R-V-I                  (= MOESI) [22]
  • Protocollo MERSI (IBM) / MESIF (Intel)            R=Recent - IBM PowerPC G4, MPC7400 [6][7]

                                                                                F=Forward - Intel [8] , Intel Nehalem[23][24][25]

  • RT-MESI                                                           T=Tagged - IBM [13]
  • HRT-ST-MESI                                                   H=Hover, R=Recent,T=Tagged, ST=Shared-Tagged - IBM [12][13]

- Nota: Le principali terminologie sono SD-D-R-V-I e MOESI, perciò saranno usate entrambe

————————————————————————————————————————

  • Protocollo POWER4 IBM                                 T-Mu-Me-M-S-SL-I  (L2 sette stati) [11]

                                                                                Mu=Unsolicited Modified - non Sollecitato Modificato Esclusivo - (M) (*)
                                                                                M=Modified Exclusive - Modificato Esclusivo
                                                                                T=Tagged - Modificato Owner non Esclusivo (O)
                                                                                Me=Valido Esclusivo - (E)
                                                                                S=Shared
                                                                                SL=Shared Last - sourced local" - (Shared Owner Locale)
                                                                                I=Invalido - (I)

(*) - Stato speciale - Richiesta per una prenotazione di lettura e scrittura di un "doubleword" (implementazioni a 64-bit)

————————————————————————————————————————

  • MOWESI protocollo                                          MOESI con un extra stato W = "Write". W non è uno stato funzionale.

                                                                               È solo uno stato intermedio temporaneo di comodo
                                                                               Invece di andare direttamente in M come in MOESI, va prima in W poi in M (vedi Cache states).
                                                                               È un pseudo nuovo protocollo.

————————————————————————————————————————

Operazioni di Coerenza Snoopy[modifica | modifica wikitesto]

- Transazioni di Bus
- Caratteristiche dei Dati
- Operazioni di Cache

Transazioni di Bus[modifica | modifica wikitesto]

Le principali operazioni sono:

- Write Through
- Write-Back
- Write Allocate
- Write no-Allocate
- Cache Intervention
- Shared Intervention
- Dirty Intervention
- Invalidation
- Write-broadcast
- Intervention-broadcasting
- La linea di cache è aggiornata sia in cache che in MM o solo in MM (write no-allocate)
- Semplice da implementare, alta occupazione di banda. Va bene per scritture singole.
- Il dato è scritto solo in cache. Il dato è scritto indietro in MM (Write-Back) solo quando sarà rimpiazzato (replacement).
- Soluzione intermedia: Write Through per la prima scrittura, Write-Back per le successive (protocolli Write-once e Bull HN ISl [22])
- In caso di miss il dato è letto dall' "owner" o dalla MM, poi il dato è scritto in cache (aggiornato - scrittura parziale)
[[#Write no-Allocate|Write no-Allocate]
- In caso di miss il dato è scritto in MM senza coinvolgere la cache, oppure, come nel protocollo Bull HN ISI, è scritto nell '"owner" , cioè nella D o SD cache (owner updating - aggiornamento dell' Owner), se sono presenti, altrimenti in MM
- Write-no-Allocate normalmente è associato al Write Through.
  • Cache Intervention
(o brevemente "intervention " - intervento)
- Shared Intervention - shared-clean intervention (intervento su dati non modificati)
- In caso Read Miss (miss di lettura) il dato viene fornito dall' "owner" - E o R/F o anche S invece che dalla MM (vedi protocolli Illinois, IBM R-MESI type and Intel MESIF)
- Dirty Intervention (intervento su dati modificati)
- In caso di Read Miss il dato è fornito dagli "owner" M (D) o O (SD) o E (R) (*) invece che dalla MM (es. protocollo MOESI, RT-MESI, …)
(*) - Non per E (R) nella proposta originale del protocollo MOESI [18] e in alcune altre implementazioni tipo-MOESI
- L' "Intervento " è una soluzione migliore rispetto al "non-Intervento " perché le transazioni cache-to-cache (da cache a cache) sono molto più veloci rispetto all'accesso alla MM, e in più si riduce il traffico di memoria (aumento di banda). MESI esteso Illinois e R-MESI type / MESIF sono perciò molto più efficienti rispetto al protocollo MOESI (vedi MESI vs MOESI sotto)
  • Invalidazione
- In caso di Write Hit con stato S (V) o O (SD) (shared) una transazione di bus è inviata per invalidare tutte le copie delle altre cache (Write-invalidate)
  • Write-broadcast (Write-update)
- (scrittura distribuita)
- In caso di "Write Hit" con stato S (V) o O (SD) (shared) una scrittura di aggiornamento è inviata a tutte le altre cache per aggiornare le loro copie (es. Intel Nehalem[23], Dragon protocol (Xerox), Firefly (DEC))
- Nota - L'operazione di aggiornamento delle altre cache è a volte chiamata anche Snarfing (arraffare, impadronirsi). Le cache monitorizzano (snoopy) il bus e se si ha hit la cache si impadronisce del dato che transita sul bus e aggiorna la propria cache. Anche l'aggiornamento dello stato H in (H-MESI) può essere definito come snarfing. Nel primo caso avviene solo in una operazione scrittura distribuita, nel secondo caso sia in lettura che scrittura.
  • Intervento-broadcasting
- (Intervento con aggiornamento distribuito)
- In caso di una transazione di intervento, una cache con stato H (H-MESI) aggiorna la sua copia invalida con il valore inviato sul bus e il suo stato è cambiato in S [7]
  • Write Invalidate vs broadcast
- Write Invalidate è migliore in caso di scritture multiple, tipicamente scritture parziali, fatte da un processore prima che la linea di cache sia letta da un altro processore.
- Write-broadcast (aggiornamento) è migliore quando si ha un produttore singolo a molti consumatori del dato, ma è peggiore quando una cache è aggiornata con un dato che non sarà più successivamente utilizzato (inutile aumento di traffico sul bus e aumento delle interferenze di cache)
- Invalidazione è la soluzione comune.

Caratteristiche dei Dati[modifica | modifica wikitesto]

Ci sono tre caratteristiche dei dati di cache

- Validità
- Esclusività
- Ownership - Proprietà
  • Validità
- Qualsiasi linea di cache non invalida, cioè MOES / D-SD-R-V
  • Esclusività
- Il dato è valido solo su una cache (dato non condiviso) in stato M (D) o E (R), con la MM non aggiornata (dirty) in caso di M (D) e aggiornata (clean) in caso di E (R).
  • Ownership
- La cache che è responsabile di fornire il dato richiesto in sostituzione della MM (Intervento). - Dipendente dal protocollo, la cache che deve fare l'intervento può essere S-E-M in MESI Illinois, o R/F-E-M in R-MESI type / MESIF o M (D) o O (SD) o anche E (R) (*) nel tipo MOESI, (es. AMD64, [18], Bull HN ISI [22] - vedi operazione di "Read Miss" sotto)

Nota : Non deve essere confusa la definizione più restrittiva di "owner" data nel protocollo in MOESI con questa più generale definizione

(*) - Dipendente dall'implementazione

Operazioni di Cache[modifica | modifica wikitesto]

Le operazioni delle cache sono:

- Read Hit
- Read Miss
- Write Hit
- Write Miss
  • Read Hit
- Il dato è letto dalla cache. Lo stato rimane inalterato
- Avvertenza: poiché questa è una operazione ovvia, in seguito non sarà più considerata, anche nei diagrammi di transazione di stato
  • Read Miss
- La richiesta di lettura dato è inviata sul bus
- Ci sono diverse situazioni:
  • Dato memorizzato solamente in MM
- Il dato è letto dalla MM
- La cache è settata E (R) o S (V)
- E (R) se una speciale linea di bus (Shared line) è usata per indicare "nessun dato condiviso " (no data sharing). Usato in tutti i protocolli aventi lo stato E (R) eccetto per i protocolli Write-once e Bull HN ISI (vedi "Write Hit" sotto).
  • Dato memorizzato in MM e in una o più cache in stato S (V) oppure in R/F nel protocollo R-MESI type / MESIF
- Ci sono tre situazioni:
  1. - Protocollo Illinois - una rete di priorità è usata per assegnare in modo arbitrario e temporaneo la "ownership" (proprietà) ad una copia S. Il dato è fornito dalla cache selezionata. La cache richiedente è settata S (shared intervention - intervento tra dati condivisi con MM clean)
  2. - Protocollo R-MESI type / MESIF con una cache in stato R/F - shared owner ("owner" delle cache condivise)
    - Il dato è fornito dalla cache R/F. La cache che fornisce il dato è cambiata in S e la cache richiedente è settata R/F (in read miss la "ownership" è sempre presa dalla cache richiedente) - shared intervention
  3. - In tutte gli altri casi il dato è fornito dalla MM e la cache richiedente è settata S (V)
  • Dato memorizzato in MM e in una sola cache in stato E (R).
  1. - Il dato è fornito dalla cache E (R) o dalla MM, in funzione del protocollo
    - Fornito da E (R) in MESI esteso (es. Illinois, Pentium (R) II [16]), R-MESI type / MESIF e in alcune implementazioni di MOESI (es. AMD64)
    - La cache richiedente è settata S (V), o R/F nel protocollo R-MESI type / MESIF e la cache E (R) è cambiata in S (V) o in I nel protocollo MEI.
  2. - In tutti gli altri casi il dato è fornito dalla MM
  • Dato modificato in una o più cache con MM non aggiornata
  • Protocollo tipo MOESI - Dato memorizzato in M (D) o in O (SD) e le altre cache nello stato S (V)
- Il dato è inviato alla cache richiedente dall' "owner" M (D) o O (SD). La cache richiedente è settata S (V) mentre M (D) è cambiato in O (SD)
- La MM rimane non è aggiornata.
  • Protocollo tipo MESI o MEI - Dato memorizzato in M (D) e le altre cache nello stato S (V)
- Ci sono due soluzioni:
  1. - Il dato è inviato dalla cache M (D) alla cache richiedente e contemporaneamente in MM (per es. Illinois)
  2. - L'operazione è fatta in due passi: la transazione richiedente è temporaneamente sospesa. Si ha il "Copy Back" del dato M (D) in MM, poi la transazione in attesa prosegue leggendo il dato dalla MM (es. protocolli MESI e MSI Synapse)
- Tutte le cache sono settate S (V)
  • Write Hit
- Il dato è scritto in cache
- Ci sono diverse situazioni:
  • Cache in stato S (V) o R/F o O (SD) (cache condivise)
- Write invalidate
- Copy back
- Il dato è scritto in cache e una transazione di invalida è inviata sul bus per invalidare le altre cache
- La cache è settata M (D)
- Write Through (Write-once, Bull HN ISI)
- Il dato è scritto in cache e in MM invalidando tutte le altre cache. La cache è settata R (E)
- Write broadcasting (es. Firefly, Dragon)
- Il dato è scritto in cache ed una transazione di "broadcasting" è inviata sul bus per aggiornare tutte le altre cache aventi una copia
- La cache è settata M (D) se la linea "shared line" non è attiva, altrimenti è settata O (SD). Tutte le altre cache sono settate S (V)
  • Cache con stato E (R) o M (D) (esclusività)
- La scrittura può essere fatta localmente senza nessuna altra azione. Lo stato è settato (o rimane) M (D)
  • Write Miss
- Write Allocate
- Operazione di Read with Intent to Modified operation (RWITM)
- Come per una operazione di Read più un comando di invalida, successivamente la cache è scritta (aggiornata)
- La cache richiedente è settata M (D) e tutte le altre cache sono invalidate
- Write broadcasting (es. Firefly, Dragon)
- Come per una Read Miss. Se la "shared line" non è attiva il dato è scritto in cache e settato M (D), altrimenti come per una Write Hit - Write broadcasting
- Write-no-Allocate
- Il dato è inviato alla MM, oppure come nel protocollo Bull HN ISI, solamente alle cache D (M) o SD (O) se presenti, bypassando la cache.

Protocolli di Coerenza[modifica | modifica wikitesto]

- Avvertenza - Per semplicità tutte le transazioni di stato di Read e Write "miss" che ovviamente provengono dallo stato I (o miss di Tag), nei diagrammi non sono mostrate. Sono mostrate direttamente sul nuovo stato.
- Nota - Molti dei seguenti protocolli hanno solo valore storico. Al momento i principali protocolli usati sono i protocolli R-MESI type / MESIF (tipo MESI) e il protocollo HRT-ST-MESI (tipo MOESI) o un sottoinsieme o un'estensione di questi.

————————————————————————————————————————

MESI Protocol - State Transaction Diagram

Protocollo MESI[modifica | modifica wikitesto]

  Stati MESI = D-R-V-I

- Uso della linea "shared line" per determinare copie condivise (shared) sulle altre cache
  • Operazioni del Processor
  • Read Miss
Ci sono due implementazioni alternative: MESI standard e MESI esteso
1 - MESI "no Intervention" (senza intervento) (es. PowerPC 604 [16])
- Se si ha una copia M in una cache, la transazione viene fermata e rimane in attesa sino a quando la cache M aggiornerà la MM, poi la transazione continuerà leggendo il dato dalla MM. Lo stato di tutte e due le cache è settato S
- altrimenti il dato è letto dalla MM. Se la linea "shared line" è "on" la cache è settata S altrimenti E
2 - MESI "Intervention" da M e da E (es. Pentium (R) II [16])
- Se si ha una copia M o E in una cache (esclusività), il dato è fornito alla cache richiedente da M o da E (intervento). Se è inviato da M il dato è contemporaneamente scritto anche in MM (copy back). Tutte le cache sono settate S
- altrimenti il dato è letto dalla MM. Se la linea "shared line" è "on" la cache è settata S altrimenti E
  • Wiite Hit
- Se la cache è M o E (esclusività), la scrittura può essere fatta localmente senza nessuna altra azione
- altrimenti il dato è scritto in cache ed una transazione di invalida è inviata sul bus per invalidare tutte le altre cache
- La cache è settata M
  • Wiite Miss
- Una operazione RWITM è inviata sul bus. L'operazione è fatta in due step: "Read Miss" con un comando di "invalida" per invalidare tutte le altre cache, poi come in una "Write Hit" con cache in stato M (vedi Operazioni di Cache-Write Miss).
  • Transazioni di Bus
  • Bus Read
- se M e "no Intervento" il dato è inviato alla MM (Copy Back)
- se M e "Intervento" il dato è inviato alla cache richiedente e alla MM (Copy Back)
- se E (*) e "Intervento" il dato è inviato alla cache richiedente
- Lo stato è cambiato (o rimane) in S
- Come in caso di "Bus Read"
- La cache è settata "Invalida" (I)
  • Transazione di Bus di Invalida
- La cache è settata "Invalida" (I)
  • Operazioni
- Write Allocate
- Intervento: da M - E (*)
- Write Invalidate
- Copy-Back: Rimpiazzo di M
(*) - MESI esteso

————————————————————————————————————————

MOESI Protocol - State Transaction Diagram

Protocollo MOESI[modifica | modifica wikitesto]

  Stati MEOSI = D-R-SD-V-I = T-MESI IBM [13]

- Uso della linea "shared line" per determinare copie condivise (shared) sulle altre cache
  • Operazioni del Processor
  • Read Miss
- Se c'è una copia in un'altra cache in stato M o O o E (*), il dato è fornito da questa cache (Intervention). La cache richiedente è settata S , M è cambiato in O e E in S
- altrimenti il dato è letto dalla MM
- Se la "shared line" è "on" la cache richiedente è settata S altrimenti E
  • Write Hit
- Se la cache è M o E (esclusività), la scrittura può essere fatta localmente senza nessuna altra azione
- altrimenti O o S (sharing) una transazione di invalida è inviata sul bus per invalidare le altre cache.
- Lo stato è cambiato (o rimane) in M
  • Write Miss
- Una operazione di RWITM è inviata sul bus
- Il dato è fornito dall' "owner" o dalla MM come nella Read Miss, poi il dato è scritto in cache (aggiornato = scrittura parziale)
- La cache è settata M e le altre cache sono settate I
  • Transazioni di Bus
  • Bus Read
- Se la cache è M o O o E (*) il dato è inviato alla cache (intervention). Se la cache è E lo stato è cambiato in S, altrimenti è settato (o rimane) O
- altrimenti lo stato è cambiato in S
- Se la cache è M o O o E (*) il dato è inviato alla cache (intervention)
- La cache è settata "Invalida" (I)
  • Transazione di Bus di Invalida
- La cache è settata "Invalida" (I)
Illinois State Transaction Diagram
  • Operazioni
- Write Allocate
- Intervention: da M-O-E (*)
- Write Invalidate
- Copy-Back: Rimpiazzo di M-O
- (*) dipendente dal tipo di implementazione per E

————————————————————————————————————————

Protocollo Illinois[modifica | modifica wikitesto]

  Stati MESI = D-R-V-I [5]

- Caratteristiche:
- È una estensione del protocollo MESI
- Uso di una rete di priorità per il shared intervention (intervento su dati condivisi)
- Differenze da MESI: intervento oltre che da E e M anche da S (vedi Operazioni di Cache-Read Miss - punto 1)
  • Operazioni
- Write Allocate
- Intervention: da M-E-S
- Write Invalidate
- Copy-Back: Rimpiazzo di M

————————————————————————————————————————

Write-Once Protocol - State Transaction Diagram

Protocollo Write-Once (or Write-First)[modifica | modifica wikitesto]

  States D-R-V-I (MESI) [5][20][21]

- Caratteristiche:
- Non uso della "shared line" (protocollo per bus standard o bus non modificabile)
- Write Through sulla prima Write Hit in stato V, poi Copy Back
  • Operazioni del Processor
  • Read Miss
- Se c'è una copia D in un'altra cache, il dato è fornito da questa cache (intervention) e contemporaneamente è anche scritto in MM (Copy-Back) .
- altrimenti il dato è letto dalla MM
- tutte le cache sono settate V
  • Wiite Hit
- Se la cache è D o R (esclusività), la scrittura è fatta localmente senza nessuna altra azione e lo stato è settato (o rimane) D
- altrimenti V (prima Write Hit) il dato è scritto in cache e in MM (Write Through) invalidando tutte le altre cache (Write-Invalidate). La cache è settata R
  • Wiite Miss
- Come per la Read Miss con un comando di "invalida" (RWITM) più una Write Hit in stato D (updating) . La cache è settata D e tutte le altre cache "Invalide" (I)
- Nota - La Write Through è fatta solamente in "Write Miss". È da notare che in questo caso una transazione di bus è comunque necessaria per invalidare le altre cache e perciò si può approfittare di questo fatto per aggiornare anche la MM. In "Write Miss" invece non è necessaria nessuna transazione in più per cui una Write Through diventerebbe un'inutile operazione nel caso in cui la cache fosse nuovamente aggiornata.
  • Transazioni di Bus
  • Bus Read
- Se la cache è D il dato è inviato da questa cache alla cache richiedente (intervention) e anche alla MM (copy-back). La cache è settata V
- altrimenti lo stato è cambiato (o rimane) in V
- Se la cache è D il dato è inviato alla cache richiedente (intervention)
- La cache è settata "Invalida" (I)
  • Transazione di Bus di Invalida
- La cache è settata "Invalida" (I)
  • Operazioni
- Write Allocate
- Intervention: da D
- Write Through: prima Write Hit in stato V
- Write Invalidate
- Copy-Back: Rimpiazzo di D

————————————————————————————————————————

Bull HN ISI Protocol - State Transaction Diagram

Protocollo Bull HN ISI[modifica | modifica wikitesto]

  Stati D-SD-R-V-I (MOESI)
  Protocollo brevettato (F. Zulian) [22]

- Caratteristiche:
- MOESI - estensione del protocollo Write-once
- Write-no-allocate su miss con aggiornamento di D o SD
- Non uso di RWITM
- Non uso della "shared line"
  • Operazioni del Processor
  • Read Miss
- Come per MOESI con "shared line" "on" ed intervento solo dall' "owner" D o SD e non da R
  • Wiite Hit
- Se la cache è D o R, come per MOESI, la scrittura è fatta localmente senza nessuna altra azione. The cache è settata (o rimane) D
- Se SD o V (prima scrittura), come per Write-Once, il dato è scritto in cache e in MM (Write Through) invalidando tutte le altre cache (Write-Invalidate). La cache è settata R
  • Write Miss
- Il dato è inviato sul bus bypassando la cache (Write-no-allocate)
- Se c'è una copia "owner" D o SD, l' "owner" è aggiornato (vedi Write-no-Allocate - aggiornamento dell' owner) mentre le altre cache sono invalidate. L' "owner" è settato (o rimane) D. La MM rimane "dirty" (non aggiornata)
- altrimenti il dato è inviato alla MM invalidando le altre cache (Write-Invalidate)
  • Transazioni di Bus
  • Bus Read
- Come per MOESI con intervento solo dall' "owner" D o SD
  • Bus Write (Write Update / Write Invalidate)
- Se la cache è D o SD, la cache è aggiornata, altrimenti è settata "Invalida" (I)
  • Operazioni
- Write-no-allocate: su miss
- Write update: su miss
- Write Through: per la prima scrittura, poi copy back
- Write Update / Write Invalidate
- Intervention: da SD-D
- Copy-Back: rimpiazzo di D o di SD con invalida

————————————————————————————————————————

Synapse Protocol - State Transaction Diagram

Protocollo Synapse[modifica | modifica wikitesto]

  Stati D-V-I (MSI) [5]

- Caratteristiche:
- La caratteristica di questo protocollo è di avere, per ciascuna linea di cache, un tag singolo-bit in MM, indicando una linea di cache è in stato D.
- Questo bit previene una possibile Race condition (condizione di corsa) se la cache D non risponde sufficientemente veloce per inibire la MM dal rispondere immediatamente prima di essere stata aggiornata.
- Il dato proviene sempre dalla MM
- Non uso della "shared line"
  • Operazioni del Processor
  • Read Miss
- Se c'è una copia D in un'altra cache, la transazione di lettura è rifiutata. La copia D è scritta indietro in MM e cambia il suo stato in V, poi la cache richiedente rimanda una nuova transazione di lettura e il dato è letto dalla MM.
- altrimenti il dato è letto dalla MM.
- La cache è settata V
  • Write Hit
- Se la cache è D, la scrittura può essere fatta localmente senza nessuna altra azione.
- altrimenti V, come in caso di Read Miss, includendo anche un trasferimento di dati dalla memoria con in più un comando di invalida (RWITM). Questo è fatto solo per invalidare le altre copie V perché questo protocollo non supporta una transazione di invalida.
- La cache è settata D. Tutte le altre cache sono settate "Invalide" (I)
- Come per la Read Miss, ma con un comando di invalida. La linea di cache è letta dalla MM, poi la cache è scritta (aggiornata). La cache è settata D. Tutte le altre cache sono settate "Invalide" (I).
  • Transazioni di Bus
  • Bus Read
- Se la cache è D il dato è inviato indietro alla MM (Copy Back). La cache è settata V
- altrimenti lo stato rimane in V
- Se la cache è D il dato è inviato indietro alla MM (Copy Back)
- La cache (D o V) è settata "Invalida" (I)
  • Operazioni
- Write Allocate
- Intervention: nessun intervento
- Write Invalidate: (RWITM)
- No transazione di invalida
- Copy-Back: rimpiazzo di D

————————————————————————————————————————

Berkeley Protocol - State Transaction Diagram

Protocollo Berkeley[modifica | modifica wikitesto]

  Stati D-SD-V-I (MOSI) [5]

- Caratteristiche:
- Come per MOESI senza lo stato E
- Non uso della "shared line"
  • Operazioni del Processor
  • Read Miss
- Ii dato è fornito dall' "owner", e cioè da D o da SD altrimenti dalla MM. D è cambiato in SD
- La cache è settata V
  • Wiite Hit
- Se la cache è D (esclusività), la scrittura è fatta localmente senza nessuna altra azione
- altrimenti (SD o V), una transazione di invalida è inviata sul bus per invalidare le altre cache.
- La cache è settata (o rimane) D
  • Write Miss
- Una operazione di RWITM è inviata sul bus
- Come per la Read Miss, il dato è fornito dall' "owner", e cioè da D o SD o dalla MM, poi la cache è aggiornata
- La cache è settata D. Tutte le altre cache sono settate I
  • Transazioni di Bus
  • Bus Read
- Se la cache è D o SD il dato è inviato alla cache richiedente (intervento). La cache è settata (o rimane) in SD
- altrimenti la cache rimane in V
- Se la cache è D o SD il dato è inviato sul bus (Intervento)
- La cache è settata "Invalida" (I)
  • Transazione di Bus di Invalida
- La cache è settata "Invalida" (I)
  • Operazioni
- Write Allocate
- Intervention: da D-SD
- Write Invalidate
- Copy-Back: rimpiazzo di D e SD

————————————————————————————————————————

Firefly Protocol - State Transaction Diagram

Protocollo Firefly (DEC)[modifica | modifica wikitesto]

  Stati D-VE-S (MES) [5]

- Caratteristiche:
- Non uso di stato "Invalido"
- Write-broadcasting +Write Through
- Uso della "shared line"
- Write-broadcasting evita la necessità dello stato "Invalido"
- Simultaneo intervento da tutte le cache (shared e dirty Intervention - su dati non modificati che modificati)
- Questo protocollo richiede un bus sincrono
  • Operazioni del Processor
  • Read Miss
- Ogni cache è l' "owner", cioè tutte le altre cache con una copia inviano simultaneamente il dato sul bus (intervento simultaneo - la temporizzazione del bus è fissa cosicché le cache rispondono nello stesso ciclo), altrimenti il dato è fornito dalla MM.
- Se c'è una cache D, il dato è inviato simultaneamente anche in MM (Copy Back)
- Se c'è una copia nelle altre cache la "Shared line" è settata "on"
- Se la "Shared line" è "off" tutte le altre cache sono settate S altrimenti la cache richiedente è settata VE.
  • Write Hit
- Se la cache è D o VE (esclusività), la scrittura è fatta localmente senza nessuna altra azione e la cache è settata D
- altrimenti S, una Write-broadcasting è inviata sul bus per aggiornare tutte le altre cache e la MM (Write Through)
- Se c'è una copia in un'altra cache, la "Shared line" è settata "on". Se la "Shared line" is "off" la cache è settata VE altrimenti tutte le cache sono settate S
  • White Miss
- L'operazione è fatta in due step. Read Miss seguita da una Write Hit.
- Se il dato proviene da una cache (Shared Line "on") una Write-broadcasting è inviata sul bus per aggiornate tutte le altre cache e la MM (Write Through). Tutte le cache sono settate S
- altrimenti la cache è settata D
  • Transazioni di Bus
  • Bus Read
- Se hit (D o VE o S) il dato è inviato sul bus (intervento) e in caso di D il dato è scritto anche in MM. La cache è settata S
  • Bus Write
- Se hit (D o VE o S) il dato è inviato sul bus (Intervento).
- Tutte le cache sono settate S
  • Write Broadcasting
- La cache è aggiornata con il nuovo dato. Lo stato rimane S
  • Operazioni
- Write Allocate
- Intervention: da D-VE-S (da tutte le cache "valide")
- Write-broadcasting - Write through
- Copy-Back: rimpiazzo di D e su qualsiasi transazione con una cache D

————————————————————————————————————————

Dragon Protocol - State Transaction Diagram

Protocollo Dragon (Xerox)[modifica | modifica wikitesto]

  Stati D-SD-VE-SC (MOES) [5]

Nota - lo stato SC, nonostante il termine "clean", può essere "clean" o "dirty" come lo stato S degli altri protocolli. SC e S sono equivalenti.

- Caratteristiche:
- Non uso di stato "Invalido"
- Write-broadcasting (non Write Through)
- Uso della "shared line"
- Write-broadcasting evita la necessità dello stato "Invalido"
  • Operazioni del Processor
  • Read Miss
- Ii dato è fornito dall' "owner", vale a dire da D o da SD altrimenti dalla MM. D è cambiato in SD
- Se la "shared line" è "on" la cache è settata SC altrimenti VE
  • Wiite Hit
- Se la cache è D o VE (esclusività), la scrittura è fatta localmente senza nessuna altra azione. La cache è settata (o rimane) D
- altrimenti SD o SC (sharing) il dato è scritto in cache ed una Write-broadcasting è inviata sul bus per aggiornare tutte le altre cache - La MM non è aggiornata (non Write through)
- Se c'è una copia in un'altra cache, la "Shared line" è settata "on"
- Se la "Shared Line" è "on" la cache è settata SD, altrimenti D. Tutte le altre eventuali copie sono settate SC
  • Wiite Miss
- Come per la Read Miss, il dato è inviato dall' "owner", D o SD o MM, poi la cache viene aggiornata.
- Se c'è una copia in un'altra cache, la "Shared line" è settata "on"
- Se la "Shared Line" è "on" il dato aggiornato è distribuito alle altre cache e lo stato è settato SD. Tutte le altre cache sono settate SC
- altrimenti la cache è settata D
  • Transazioni di Bus
  • Bus Read
- SE la cache è D o SD il dato è inviato alla cache richiedente (intervention). La cache è settata (o rimane) SD
- altrimenti la cache rimane SC
  • Bus Write
- Se la cache è D o SD il dato è inviato sul bus (Intervention)
- La cache è settata SC
  • Write Broadcasting
- La cache è aggiornata con il nuovo dato. La cache rimane SC
  • Operazioni
- Write Allocate
- Intervention: da D-SD (ma non da VE)
- Write-broadcasting
- Copy-Back: rimpiazzo di D-SD

————————————————————————————————————————

MERSI - MESIF Protocol - State Transaction Diagram

Protocollo MERSI (IBM) / MESIF (Intel)[modifica | modifica wikitesto]

  Stati MERSI o R-MESI
  Stati MESIF
  Protocolli brevettati - IBM (1997) [7] - Intel (2002) [9]

- MERSI e MESIF sono lo stesso identico protocollo (solamente lo stato del nome è differente, F invece di R )
- Caratteristiche:
- Le stesse funzionalità del protocollo Illinois
- Un nuovo stato R (Recent) / F (Forward) è l' "owner " per i dati shared-clean" (condivisi) .
- La "shared ownership" (l' owner delle cache condivise "clean" - non modificate) non è assegnata da una rete di priorità come con Illinois, ma è sempre assegnata all'ultima cache con Read Miss, settando il suo stato R/F
- La "shared ownership" è temporaneamente persa nel caso di rimpiazzo della linea R/F. La "ownership" è riassegnata alla prima successiva Read Miss con cache "shared" non modificate
- Uso della "shared line"
  • Operazioni
- Write Allocate
- Intervention: da M-E-R/F
- Write Invalidate
- Copy-Back: rimpiazzo di M

————————————————————————————————————————

MESI vs MOESI[modifica | modifica wikitesto]

MESI e MOESI sono i protocolli più popolari

È comune opinione che MOESI sia una estensione del protocollo MESI e perciò più sofisticato e più performante. Questo è vero solamente se confrontato con MESI standard, cioè con MESI senza intervento tra cache condivise "clean" (dato non modificato rispetto alla MM). MESI con intervento tra cache condivise "clean", come MESI Illinois o gli equivalenti protocolli 5-stati MERSI / MESIF, sono molto più performanti del protocollo MOESI.

In MOESI, le operazioni cache-cache sono fatte solamente su dati modificati. Invece nei protocolli tipo MESI Illinois e MERSI / MESIF, le operazioni cache-cache sono sempre fatte" sia su dati "clean" che su dati modificati. Nel caso di dati modificati, l'intervento è fatto dall' "owner" M, ma l'ownership non è persa perché essa migra in un'altra cache (la R/F in MERSI / MESIF o in una cache selezionata come nell caso di Illinois). L'unica differenza è che la MM deve essere aggiornata. In ogni caso anche in MOESI questa transazione dovrà più tardi comunque essere fatta in caso di rimpiazzo dell' "owner", se nessuna altra modifica avviene nel frattempo. Tuttavia questo è un limite minore rispetto ad una transazione di memoria dovuta ad un non intervento, come nel caso di dati non modificati (clean) per il protocollo MOESI. (vedi per es. "Performance evaluation between MOESI (Shanghai) and MESIF Nehalem-EP" [24])

I sistemi più avanzati usano solamente il protocollo R-MESI type / MESIF (IBM / Intel) o i più completi RT-MESI, HRT-ST-MESI e POWER4 IBM che sono l'unione evoluta dei protocolli MESI e MOESI.

Nota: Trasferimenti cache-cache sono soluzioni efficienti per sistemi multiprocessor/multicore connessi direttamente tra loro, ma meno nei sistemi con Cache remota come nei sistemi NUMA dove è preferibile MESI standard. Esempio nel Protocollo POWER4 IBM lo "shared intervention" è fatto solo "localmente" e non tra moduli remoti.

————————————————————————————————————————

RT-MESI Protocol - State Transaction Diagram

Protocollo RT-MESI[modifica | modifica wikitesto]

  States RT-MESI
  protocollo brevettato IBM [13][12]

- Caratteristiche:
- Unione di MESI e MOESI
- Shared Intervention + Dirty Intervention (sia tra cache "clean" che tra cache con dati modificati)
- Stesse funzionalità del protocollo R-MESI con un nuovo stato T = Tagged, equivalente allo stato O
- Migrazione del "Dirty-Owner"
- L' "owner" (sia Shared che Dirty) è sempre l'ultima cache richiedente (il nuovo "owner" (LRU) ha meno probabilità di essere deallocato a breve rispetto a quello più vecchio)
- Gli "owner" sono T, M, E, R (tutti eccetto S)
- Uso della "shared line"
  • Operazioni del Processor
  • Read Miss
- Se c'è una copia M o T (dirty-ownership) in un'altra cache, il dato è fornito da questa cache (dirty-intervention). La cache richiedente è settata T e i precedenti M o T sono cambiati in S
- Se c'è una copia E o R (shared-ownership) in un'altra cache, il dato è fornito da questa cache (shared-intervention). La cache richiedente è settata R e i precedenti E o R sono cambiati in S
- altrimenti il dato è letto dalla MM e la cache è settata R.
  • Write Hit
- Se la cache è M o E (esclusività), la scrittura è fatta localmente senza nessuna altra azione
- altrimenti T o R o S (sharing) una transazione di "Invalida" è inviata sul bus per invalidare tutte le altre cache.
- La cache è settata (o rimane) M e tutte le altre cache sono settate I
  • Write Miss
- Un'operazione di RWITM è inviata sul bus
- Il dato è fornito dall' "owner" o dalla MM come nella Read Miss, poi il dato è scritto (aggiornato) in cache
- La cache è settata M e tutte le altre cache sono settate I
  • Transazioni di Bus
  • Bus Read
- Se la cache è T o M o R o E il dato è inviato alla cache richiedente (intervention).
- La cache è settata (o rimane) S
- Se la cache è T o M o R o E il dato è inviato alla cache richiedente (intervention)
- La cache è settata "Invalida" (I)
  • Transazione di Bus di Invalida
- La cache è settata "Invalida" (I)
  • Operations
- Write Allocate
- Intervention: da T-M-R-E
- Write Invalidate
- Copy-Back: rimpiazzo di T-M

————————————————————————————————————————

Protocollo RT-ST-MESI[modifica | modifica wikitesto]

È un miglioramento del protocollo RT-MESI [13] ed è un subset del protocollo HRT-ST-MESI [12]

ST = Shared-Tagged
- L'uso dello stato "Shared-Tagged" permette di mantenere l' "intervention" dopo una deallocazione di una linea di cache "Tagged"
- Nel caso di rimpiazzo di T (deallocazione della linea di cache), il dato deve essere scritto indietro in MM e così perdere la "ownershisp". Per evitare ciò può essere usato un nuovo stato ST. In caso di Read Miss il precedente T è settato ST invece di S. ST sarà il candidato per rimpiazzare la ownership in caso di deallocazione di T. La transazione di "Copy Back" di T è bloccata da ST (la memoria non è aggiornata) che cambia il suo stato in T. Nel caso di una nuova Read MIss da un'altra cache, quest'ultima è settata T, il precedente T è cambiato in ST e precedente ST è cambiato in S.

Un miglioramento aggiuntivo può essere ottenuto usando più di uno stato ST, ST1, ST2 ,… STn.

- In Read Miss, T è cambiato in ST1 e gli indici degli altri STi sono incrementati di "1"
- In caso di deallocazione di T, ST1 blocca la transazione di "Copy Back" e cambia il suo stato in T e tutti gli indici degli STi sono decrementati di "1".
- In caso di una deallocazione, per es. di STk, la catena sarà interrotta e tutti gli STi con indice maggiore di "k" saranno automaticamente persi in termini di ST, e saranno considerati de facto solamente come stati S, anche se essi manterranno lo stato ST. Tutto ciò perché solo ST1 interviene per bloccare e sustituirsi a T. Per es. se si ha una situazione tipo T, ST1, ST3, ST4 con ST2 rimpiazzato, se T sarà rimpiazzato la nuova situazione sarà T, ST2, ST3 senza nessun ST1.

————————————————————————————————————————

HRT-ST-MESI Protocol - State Transaction Diagram

Protocollo HRT-ST-MESI[modifica | modifica wikitesto]

Protocollo IBM brevettato HRT-ST-MESI completo [12][13]

- Stato I = Tag invalido (*) - Dati Invalidi
- Stato H = Tag Valido - Dati Invalidi

- Lo stato I è settato all'inizializzazione e il suo stato cambia solo dopo una Read o Write miss del processor. Poi non tornerà più in questo stato.

- H ha le stesse funzionalità dello stato I ma con in più la capacità di catturare le transazioni del bus aventi lo stesso Tag della directory e aggiornare la cache dati.

- Dopo la prima utilizzazione I viene rimpiazzato da H nelle sue funzioni

- Le principali funzioni sono:
- Write Back
- Intervento sia su dati dirty che shared-clean - da T-M-R-E
- Stati di riserva del Tagged (Shared-Tagged)
- Auto aggiornamento dello stato invalido H (Hover)

(*) - Nota: Il Tag per definizione è sempre valido, ma sino al primo aggiornamento della linea di cache è considerato invalido per non aggiornare la cache anche quando questa linea non è ancora stata richiesta e usata.

————————————————————————————————————————

Protocollo POWER4 IBM[modifica | modifica wikitesto]

  Stati M-T-Me-S-I -Mu-SL = RT-MESI+Mu [11]

- Uso della "shared line"
- Usato in Sistemi multi-core/moduli - multi-cache L2 [11]
- Questo protocollo è equivalente al protocollo RT-MESI per sistemi con cache L2 multiple su sistemi multi moduli.
  • SL - "Shared Last" equivalente a R nel RT-MESI protocollo
  • Me - "Valid Exclusive" = E (valido esclusivo)
  • Mu - unsolicited modified state - stato modificato esclusivo non sollecitato
- stato speciale - richiesta di prenotazione scrittura e lettura "doubleword" (per l'implementazione a 64-bit)
- "Shared intervention" da SL è fatto solo tra cache L2 dello stesso modulo
- "Dirty intervention" da T è fatto solo tra cache L2 dello stesso modulo
  • Operations
- Write Allocate
- Intervention: da M-T-VE-SL = M-O-E-SL
- Write Invalidate
- Copy-Back: rimpiazzo di M-T
- Nota : T e SL - Intervento solo locale al modulo

————————————————————————————————————————

Considerazioni generali sui protocolli[modifica | modifica wikitesto]

Sotto certe condizioni il più efficiente e completo protocollo risulta essere il protocollo HRT-ST-MESI

- Write Back
- Intervento sia su dati dirty che shared clean
- Stati di riserva dello stato Tagged (Shared-Tagged)
- Auto aggiornamento dello stato invalido H (Hover)

Interferenze tra Snoopy e Attività del Processore[modifica | modifica wikitesto]


L'attività dello Snoopy richiede l'accesso alla Directory della cache e può essere in conflitto con gli accessi concorrenti del processore. Questa interferenza fa aumentare la latenza della cache.
Per ridurre o eliminare questa interferenze possono essere usate tre soluzioni:

  • Cache multi-livello inclusive
  • Cache Istruzioni e Dati separate
  • Dual-Port e Dual-Directory
  • Due o più livelli di cache "inclusive" riducono queste interferenze perché circa 85-90% [26] degli accessi del processore (per i dati) è fatto al livello più basso di cache.
  • Cache "Separate" Istruzioni e Dati riducono l'interferenza perché lo snoopy normalmente è fatto solamente sulla cache Dati (vedi Write Police), perciò i conflitti sulle Istruzioni vengono eliminati.
  • Lo snoopy spende la maggior parte del suo tempo a monitorare un traffico parassita. Una "dual-Port Directory" (Directory con due porte) o "dual-Cache" (cache con due porte - Directory+Dati) o un "dual-Directory" (doppia Directory) [27] elimina quasi completamente le interferenze. Una porta/directory è usata per lo snoopy e l'altra per il processore (i conflitti avvengono solo quando lo snoopy e il processore fanno uso della stessa entry, ma questo evento e comparativamente raro).

Coerenza della Cache Directory-based - Message-passing[modifica | modifica wikitesto]

È noto che i sistemi SMP hanno una limitata scalabilità. La memoria multi-banco e il crossbar dati [2] permettono accessi paralleli alla memoria. L'uso di grandi cache riduce il traffico sul bus di sistema ma non le write invalidate (scrittura con invalidazione) o write-broadcast (scrittura con distribuzione). La maggiore limitazione è che l'indirizzo di memoria deve essere monitorato (snoopy) usando un unico bus. Per superare questa limitazione, viene adottata una nuova architettura chiamata "cc-NUMA ".

Il sistema cc-NUMA è un insieme di sistemi SMP chiamati "Nodi" connessi via una rete di connessione che può essere un link (collegamento) formato da un singolo o doppio anello bidirezionale o multi-anello, connessioni punto-punto [8][1] o un mix di queste (vedi ad es. sistemi IBM Power Systems [28][11]), intercessione via bus (es. NUMAq [29]), crossbar, segmented bus (bus segmentato - NUMA Bull HN ISI ex Honeywell [30]), Mesh router, ecc..

Esempi di interconnessione

Double-reverse ring
Segmented Bus
Crossbar

La caratteristica principale del sistema cc-NUMA è di avere un'unica memoria globale condivisa e distribuita in ciascun nodo
direttamente acceduta da tutti i processori di tutti i nodi

cc-NUMA System

In un sistema NUMA l'accesso di un processore ad una memoria remota di un nodo remoto è più lento rispetto all'accesso alla propria memoria locale . Per questa ragione questo sistema è chiamato NUMA (Non Uniform Memory Access - accesso della memoria non uniforme).

L' architettura NUMA è anche chiamata Distributed Shared Memory (DSM) - memoria condivisa distribuita [31].

Normalmente ciascun nodo è un sistema SMP, dove un processore può essere un singolo processore o un multi-core, o un mix dei due, o qualsiasi altro tipo di architettura. La fig. a lato è solo un esempio.

La differenza del tempo di accesso fra una memoria locale ed una remota può anche essere di un ordine di grandezza, in dipendenza del tipo di connessione (più veloce nel segmented bus, crossbar e interconnessione punto-punto, più lenta con la connessione ad anelli seriali).

Cache Remota[modifica | modifica wikitesto]

Terminologia:
(da un punto di vista di un nodo)

- Memoria locale            - memoria del nodo
- Memorie remote           - memorie degli altri nodi
- Dati locali                     - dati memorizzati nella memoria locale
- Dati remoti                   - dati memorizzati nelle memorie remote
- Cache remota              - cache del nodo che memorizza dati remoti degli altri nodi
- Cache locali (L1-L3)    - cache del nodo che memorizzano dati locali e remoti

Per ridurre le differenze di accesso tra dati locali e remoti, viene utilizzata una cache remota (Remote cache). Questa cache memorizza i dati letti dalle altre memorie remote. Normalmente questa cache è inclusiva-condivisa (shared inclusive) con protocollo MESI. Le cache L1-L3 possono essere tipo MESI esteso (es. R-MESI, RT-MESI, ecc.). Ogni dato remoto memorizzato nelle cache L1-L3 è anche memorizzato in questa cache (per l'inclusività). Questa cache è il 4º livello di cache del nodo per i soli dati remoti (cache delle memorie remote), mentre le cache L1-L3 memorizzano sia dati locali che remoti (cache del nodo relativo alla memoria globale). Da un punto di vista interno di un nodo la remote cache può essere vista come un'estensione della memoria locale (dati remoti memorizzati localmente).

Poiché la funzione di questa cache è di ridurre il tempo di accesso remoto almeno come il tempo di accesso della propria memoria locale, può essere usata una tecnologia ibrida - SRAM per la directory, DRAM per la cache dei dati [32]. Questa soluzione permette di implementare cache sufficientemente grandi come richiesto da questi sistemi.

Coerenza delle Cache in cc-NUMA[modifica | modifica wikitesto]

cc-NUMA Memory Directory

La coerenza delle cache nei sistemi cc-NUMA (Cache Coherency-NUMA) è ottenuta usando il protocollo noto col nome di Directory-based - Message-passing. Questo approccio è stato proposto per la prima volta da Censier e Feaultrier [33] e descritto anche in "The Directory-Based Cache Coherency Protocol for DASH Multiprocessor" [34].

Poiché normalmente non tutti i nodi accedono nello stesso tempo agli stessi dati, il controllo di coerenza può essere molto più efficiente se fatto in modo selettivo sui soli nodi interessati.

Nei sistemi cc-NUMA la coerenza della cache a livello di sistema (inter-nodo) è perciò fatta mediante un protocollo directory-based (basato su una directory), usando una a directory associata a ciascuna memoria locale (local memory directory) che tiene traccia dello stato globale di tutti i blocchi della propria memoria locale ed un indicatore ("indicator bit") per indicare quale nodo ha il blocco memorizzato nella propria cache remota. La coerenza all'interno del nodo invece è basata sullo schema bus-snoopy.

Ciascuna entry (linea di ingresso) della directory ha N-1 bit indicatori di nodo e tre stati globali associati a ciascun blocco di memoria che sono una copia degli stati di tutte le cache remote..

  • Invalid (I) or Uncached (U) - nessun nodo ha il blocco nella cache remote. Il blocco è solo nella home, cioè nella memoria locale proprietaria del dato
  • Shared-Remote (S) - copie valide esistono negli altri nodi
  • Exclusive-Remote (E) o Dirty-Remote - il blocco è memorizzato nella cache remota di un solo nodo. Nel protocollo MESI il blocco nel nodo remoto può essere Clean-Exclusive o Dirty. Il cambiamento da Clean-Exclusive a Dirty è fatto localmente senza informare la "home directory", cioè la directory della memoria locale proprietaria del blocco. Nel protocollo MSI il blocco nel nodo remoto può essere solo nello stato Dirty anche se non modificato [34][35].

* La cache remota memorizza i dati letti dalle memorie remote degli altri nodi.
* La directory della memoria locale tiene traccia dei dati e del loro stato della propria memoria locale
   che sono memorizzati nelle cache remote degli altri nodi [36].

- Attenzione - non va confusa la directory della memoria locale con la directory della cache remota. La prima contiene informazioni sui dati locali, la seconda sui dati remoti

Ci sono quattro possibili situazioni per un nodo:

  • Lettura della memoria locale
  • Scrittura della memoria locale
  • Lettura della memoria remota
  • Scrittura della memoria remota

Lettura della memoria locale[modifica | modifica wikitesto]

cc-NUMA Local Memory Read and Invalidate
- Una transazione di lettura di memoria locale di uno stesso nodo è monitorata e gestita nello stesso modo come in un normale sistema SMP.
- L3 miss
- In caso di L1-L3 miss, la transazione è monitorata sul System Bus del proprio nodo da tutte le altre cache L3 e dalla "directory della memoria locale", in questo caso per verificare se il dato da leggere è presente nelle altre cache remote e in quali nodi. La directory della memoria locale è vista e gestita come una directory di un'extra cache e più precisamente come una "shared directory" (directory condivisa) di tutte le cache remote di tutti i nodi remoti. L'unica differenza rispetto alle cache L3 (formata da directory+dati) è che il campo dati e il "Tag" della cache non sono memorizzati nello stesso nodo della directory, ma distribuito sugli altri nodi. La comunicazione tra la directory della memoria locale e le cache remote è fatta tramite una connessione "Message-passing" (inviando un messaggio), punto-punto o distribuito usando il vettore "Indicator bit" (il campo dei bit indicatori dei nodi).
- In caso di stato E (esclusivo) nella directory della memoria locale, un messaggio è inviato all'unica cache remota del nodo dove il dato è memorizzato in attesa della risposta perché la cache potrebbe essere "Dirty".
- Se il dato è Dirty, il dato è inviato indietro alla "home" e gestita come se provenisse da una cache locale con l'eccezione che lo "Shared-Dirty" non è permesso tra nodi nel protocollo tipo MOESI. Potrebbe essere permesso solo con protocollo tipo T-Mesi con l' "owner" solo nella "home" (migrazione del "Dirty-Owner" nella home) ma normalmente il "Dirty-intervention" e il "Shared-clean intervention" tra nodi non è usato (vedi ad es. Protocollo POWER4 IBM)
- Lo stato della cache remota e lo stato delle cache L1-L3 associate sono settate "Shared" e lo stato della directory della memoria locale è cambiato in S
- Se il dato è memorizzato in una cache L3 "owner" locale, il dato è fornito da questa cache (che può essere "shared-clean owner" o "dirty-owner")
- altrimenti dalla memoria locale

Scrittura della memoria locale[modifica | modifica wikitesto]

- Hit Shared in L3
- Se c'è hit S in L3 una transazione di "Invalida" è inviata sul bus del proprio nodo per invalidare tutte le altre copie. Se nella directory della memoria locale ci sono alcuni nodi con lo stato S, una transazione di invalida è inviata, tramite l'indicatore di nodo della home directory, a ciascun nodo avente una copia
- Hit Esclusiva in L3
- La scrittura è fatta localmente in L1-L3 (per l'inclusività) come normalmente. Le cache sono settate (or rimangono) "Dirty"
- Miss
- Come con una "lettura della memoria locale miss" con un comando di invalida (RWITM), poi come con una "write hit-esclusiva"

Lettura della memoria remota[modifica | modifica wikitesto]

cc-NUMA Remote Memory Read
- Miss
- Una transazione di lettura di memoria locale (per un dato remoto) è monitorata da tutte le cache L3 e dalla cache remota del proprio nodo.
- Se c'è una cache L3 "owner", il data è fornito da questa cache
- altrimenti se "hit" nella cache remota del nodo, il dato è fornito da questa cache
- altrimenti una richiesta di lettura remota è inviata sul nodo "home" del dato. La "home" gestisce questa richiesta nello stesso modo come per una richiesta interna. L'unica differenza è che il dato è inviato invece al nodo richiedente. La cache richiedente è settata "Shared"
- In caso di dato "Dirty" in un altro nodo differente dalla "home", la "home" richiede il dato a questo nodo, come descritto nella operazione di "lettura della memoria locale miss" nel caso di stato E nella directory dalla memoria locale, poi il dato è inviato al nodo richiedente. Esempio: il nodo "A" richiede il dato alla "home" "B". "B" richiede il dato al nodo "C" che ha il dato "Dirty". Il nodo "C" invia il dato alla "home" nodo "B" (copy back), "B" lo rispedisce al nodo "A". I nodi "A" e "C" sono settati "Shared" come pure la directory dell memoria locale.
- Ci sono altre possibili varianti: per es. il nodo "C" manda il dato al nodo "B" (home) e simultaneamente al nodo richiedente "A" (vedi DASH [34] e Intel QuickPath" Interconnect [8]).

Scrittura della memoria remota[modifica | modifica wikitesto]

- Hit "Exclusive" in L3
- Il dato è processato localmente come in normale "scrittura hit-esclusiva locale"
- Hit "Shared" in L3
- Una transazione di invalida è mandata alla "home" del dato e resta in attesa per il consenso di scrittura. La "home" rinvia la transazione di invalidazione a tutti i nodi aventi il dato e poi invia il consenso di scrittura al nodo richiedente. Due scritture simultanee su differenti nodi sono così sincronizzate.
- Miss
- Come in una "Lettura remota miss" con un comando di invalida (RWITM), poi come in una "scrittura hit-esclusiva locale"

Shared Cache - Protocollo di Coerenza[modifica | modifica wikitesto]

Tipicamente usato nei sistemi Multi-core per la coerenza e per riduzione dei costi (in termini di spazio).

Sistemi Multi-core[modifica | modifica wikitesto]

(core = processore integrato)

Il Multi-core, denominato anche chip multiprocessors, multicore chips, e many-core chips, è uno speciale genere di multiprocessore dove tutti i processori sono sullo stesso chip (MCM - Multi-Chip Module)[37][38]

L2 Shared Cache
L3 Shared Cache

I processori Multi-core sono dei sistemi MIMD: core differenti eseguono differenti threads (Multithread/Multiple Istruzioni - esecuzione parallela sullo stesso contesto di piccole sequenze di istruzioni programmate), operando su differenti parti di memoria (Multiple Data).

Una soluzione comune di implementazione dei sistemi Multi-core è l'uso di cache multi-livello condivise e inclusive (multi-level inclusive shared cache) per mantenere la coerenza dei dati.

L' Inclusività forza i dati ad essere coerenti. Dati memorizzati in L1 sono memorizzati anche in L2 (e in L3 se usata). Qualsiasi cambiamento in L1 deve essere riportato anche nella cache L2 e così anche in L3. Se L2 è aggiornata o invalidata anche tutte le cache L1 devono essere invalidate o aggiornate (stessa relazione tra L2-L3).

La coerenza delle cache è mantenuta mediante l'uso di un controllore centralizzato della cache condivisa. La cache condivisa può essere la L2, o L3 se L2 è una cache privata.

Il protocollo di coerenza si basa protocollo tipo point-to-point message-passing simile a quello descritto nel sistema cc-NUMA. La differenza sta solamente nella directory, che nel sistema cc-NUMA è relativo alla memoria e non alla cache condivisa.

cc-NUMA Multi-Core

Ci sono due generi di implementazione. Messaggio distribuito (message broadcasting) a tutte le cache L1 oppure solo alle specifiche cache L1 che hanno il dato memorizzato. Nel primo caso il protocollo di coerenza è di tipo snoopy. La cache condivisa agisce come ponte in sostituzione del bus di sistema, rinviando le transazioni a tutte le cache L1 per lo snooping, solo però quando è necessario, cioè quando un dato non è esclusivo nella cache condivisa. Nel secondo caso, nella directory della cache condivisa c'è un "indicator bit" per ciascuna cache L1 per indicare quale L1 può avere il dato (Intel Nehalem [23]).

cc-NUMA in Sistemi Multi-core[modifica | modifica wikitesto]

Sistemi Multi-core possono essere connessi assieme per formare un sistema NUMA. La coerenza è garantita tramite message-passing tra le L3 shared-cache dei vari nodi (vedi ad es.Intel Nehalem [23], AMD Opteron [1][8][39], MCM Interconnections Power5 IBM [40][41][42], ecc.)

Note[modifica | modifica wikitesto]

  1. ^ a b c d AMD Opteron Shared Memory MP Systems - http://www.cse.wustl.edu/~roger/569M.s09/28_AMD_Hammer_MP_HC_v8.pdf
  2. ^ a b Multi-processor system with shared memory - http://www.freepatentsonline.com/5701413.html
  3. ^ Method for transferring data in a multiprocessor computer system with crossbar interconnecting unit - http://www.google.it/patents/EP0923032A1?cl=en
  4. ^ Specification and Verification of the PowerScale Bus Arbitration Protocol: An Industrial Experiment with LOTOS, Chap. 2, Pag. 4 - ftp://ftp.inrialpes.fr/pub/vasy/publications/cadp/Chehaibar-Garavel-et-al-96.pdftp://ftp.inrialpes.fr/pub/vasy/publications/cadp/Chehaibar-Garavel-et-al-96.pdf
  5. ^ a b c d e f g h i j k l m n o p Archibald, J. and Baer, J. 1986 - Cache coherence protocols: evaluation using a multiprocessor simulation model. ACM Trans. Comput. Syst. 4, 4 (Sep. 1986), 273-298) - http://ctho.org/toread/forclass/18-742/3/p273-archibald.pdf
  6. ^ a b MPC7400 RISC Microprocessor User’s Manual - http://pccomponents.com/datasheets/MOT-MPC7400.PDF
  7. ^ a b c d e f g Cache-coherency protocol with recently read state for data and instructions - IBM patent - http://www.google.com/patents/US5996049
  8. ^ a b c d e An Introduction to the Intel® QuickPath Interconnect - http://www.intel.ie/content/dam/doc/white-paper/quick-path-interconnect-introduction-paper.pdf
  9. ^ a b Forward state for use in cache coherency in a multiprocessor system - Intel -https://www.google.com/patents/US6922756
  10. ^ BM PowerPC 476FP L2 Cache Core Databook - https://www-01.ibm.com/chips/techlib/techlib.nsf/techdocs/8D5342097498C81A852575C50078D867/$file/L2CacheController_v1.5_ext_Pub.pdf
  11. ^ a b c d e "POWER4 System Microarchitecture", http://www.cc.gatech.edu/~bader/COURSES/UNM/ece637-Fall2003/papers/TDF02.pdf
  12. ^ a b c d e f g Cache Ccoherency Protocol Including an HR State - IBM patent - https://www.google.com/patents/US6275908
  13. ^ a b c d e f g h i Cache Coherency Protocol with Tagged State for Modified Values - IBM patent - http://www.google.com/patents/US6334172
  14. ^ Microprocessor - Fujitsu makes SPARC - http://docencia.ac.upc.edu/ETSETB/SEGPAR/microprocessors/ultrasparc6%20(mpr).pdf
  15. ^ MPC750UM/D 12/2001 Rev. 1 MPC750 RISC Microprocessor Family User’s Manual - http://www.freescale.com/files/32bit/doc/ref_manual/MPC750UM.pdf
  16. ^ a b c d Pentium Pro and Pentium II System Architecture pg. 160 - Di T. Shanley - http://books.google.it/books?id=MLJClvCYh34C&pg=PA160&lpg=PA160&dq=Pentium+protocol+cache&source=bl&ots=gaOu-EvaTy&sig=QQEM1krp-H_0KUhi5Ti2bmxU2kU&hl=it&sa=X&ei=Zt6KT7icG8TE4gShzaDwCQ&ved=0CDcQ6AEwAg#v=onepage&q=Pentium%20protocol%20cache&f=false
  17. ^ AMD64 Technology - AMD64 Architecture Programmer’s Manual Volume 2: System Programming - http://developer.amd.com/wordpress/media/2012/10/24593_APM_v21.pdf
  18. ^ a b c Sweazey, P., and Smith, A. J. A class of compatible cache consistency protocols and their support by the IEEE Futurebus. In Proceedings of the 13th International Symposium on Computer Architecture. IEEE. New York, 1986, pp. 414-423.) - http://pdf.aminer.org/000/419/524/a_class_of_compatible_cache_consistency_protocols_and_their_support.pdf
  19. ^ Mark S. Papamarcos and Janak H. Patel. In ISCA '84: Proceedings of the 11th annual international symposium on Computer architecture, pages 348{354, New York, NY, USA, 1984. ACM - http://www.researchgate.net/publication/220771512_A_Low-Overhead_Coherence_Solution_for_Multiprocessors_with_Private_Cache_Memories/file/50463519b8d139e451.pdf
  20. ^ a b Using cache memory to reduce processor-memory traffic". Proceedings of the 10th annual international symposium on Computer architecture - ISCA '83. International Symposium on Computer Architecture: Stockholm, Sweden, June 13–17, 1983.pp. 127-128 - http://courses.cs.vt.edu/cs5204/fall11-kafura/Papers/TransactionalMemory/Goodman-SnoopyProtocol.pdf
  21. ^ a b Advanced Computer Architecture, 2E pg. 301 - Di Hwang - http://books.google.it/books?id=m4VFXr6qjroC&pg=PA301&lpg=PR10&focus=viewport&dq=Multiprocessors+and+Multicomputers+7.2+Cache+Coherence+and+Synchronization&hl=it
  22. ^ a b c d Cache memory and related consistency protocol, Inventor Ferruccio Zulian, Bull HN ISI - http://www.google.com/patents/EP0396940B1?cl=en
  23. ^ a b c d Cache Organization and Memory Management of the Intel Nehalem Computer Architecture - Trent Rolf - http://rolfed.com/nehalem/nehalemPaper.pdf
  24. ^ a b Comparing Cache Architectures and Coherency Protocols on x86-64 Multicore SMP Systems - http://people.freebsd.org/~lstewart/articles/cache-performance-x86-2009.pdf
  25. ^ David Kanter, The Common System Interface: Intel’s Future Interconnect in Real World Tech, 28 agosto 2007, p. 5. URL consultato il 12 agosto 2012.
  26. ^ Architecture Analysis of Tightly Coupled Multiprocessor Systems - F. Zulian Honeywell [Bull Italia 1987)
  27. ^ Handy, Jim. "Cache Memory Book", Academic Press, Inc., 1998, p. 130, p. 208 - http://books.google.it/books?hl=it&id=-7oOlb-lCpMC&q=208
  28. ^ IBM POWER Systems Overview - https://computing.llnl.gov/tutorials/ibm_sp/
  29. ^ SourceForge - http://lse.sourceforge.net/numa/faq/system_descriptions.html
  30. ^ Bull HN F. Zulian - A. Zulian patent - Computer system with a bus having a segmented structure - http://www.freepatentsonline.com/6314484.html
  31. ^ NUMA Architecture - http://www.dba-oracle.com/real_application_clusters_rac_grid/numa.html
  32. ^ Data-processing system with CC-NUMA (cache-coherent, non-uniform memory access) architecture and remote cache incorporated in local memory - http://www.freepatentsonline.com/6243794.html
  33. ^ A new Solution to Coherence Problems in Multicaches Systems - Censier and Feaultrier - http://www.cs.auckland.ac.nz/courses/compsci703s1c/resources/Censier.pdf
  34. ^ a b c Proceedings of the 17th Annual International Symposium on Computer Architecture, IEEE 1990, pages 148-159; D. Lenosky et al: The Directory-Based Cache Coherency Protocol for DASH Multiprocessor - http://www.cse.wustl.edu/~roger/569M.s09/p148-lenoski.pdf
  35. ^ Directory-based CacheCoherence - Parallel Computer Architecture ch. 8 pg. 513 - http://www.dte.eis.uva.es/Docencia/ETSII/SMP/archivos/archibak/culler.pdf
  36. ^ SourceForge - http://lse.sourceforge.net/numa/faq/
  37. ^ http://scholar.google.it/scholar_url?url=http://minds.wisconsin.edu/bitstream/handle/1793/60554/TR1593.pdf%3Fsequenc&hl=it&sa=X&scisig=AAGBfm3Tfz0tL0HBvHhv_6mCWgvMIZhsxg&oi=scholarr&ei=pXGmVPnBAsn7Uti3g7AL&ved=0CCEQgAMoADAA
  38. ^ <http://scholar.google.it/scholar_url?url=http://www.itu.dk/people/jhh/thesis/references/36%2520-%2520Chip%2520Makers%2520Turn%2520to%2520Multicore%2520Processors.pdf&hl=it&sa=X&scisig=AAGBfm26PHbY3VJRZqQtLux3ac90MmK1rQ&oi=scholarr&ei=pXGmVPnBAsn7Uti3g7AL&ved=0CCIQgAMoATAA
  39. ^ Cache Coherence Techniques for Multicore Processors - Michael R. Marty - http://research.cs.wisc.edu/multifacet/theses/michael_marty_phd.pdf
  40. ^ IBM POWER Systems Overview - https://computing.llnl.gov/tutorials/ibm_sp/
  41. ^ The POWER4 Processor Introduction and Tuning Guide par. 2.4 - http://web.eecs.utk.edu/~terpstra/power4/p4Tuning.pdf
  42. ^ Of NUMA on POWER7 in IBM - http://www-03.ibm.com/systems/resources/pwrsysperf_P7NUMA.pdf

Voci correlate[modifica | modifica wikitesto]

Bibliografia[modifica | modifica wikitesto]

informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica