Schema generale del corso

Architett
Configurazione della memoria secondaria per aumentare PRESTAZIONI e AFFIDABILITA' degli HDD
Aumentare le prestazioni
Distribuire informazione memorizzata su più dischi
Aumentare l'affidabilità
Duplicare l'informazione memorizzata su più dischi
L'informazione viene divisa in strips (di k blocchi) e ogni strip viene memorizzata su un un disco diverso
op
Maggiori prestazioni
Block striping
reg1
RAID 0
Minore affidabilità
reg2
Struttura istruzione
reg dst
Ogni strip viene memorizzata su un disco diverso e replicata su un disco di mirror
shift
Prestazioni e affidabilità
Block striping + Mirroring
funct
MIPS
Register
RAID 1
Costo
tipi di istruzione
Immediate
Informazione replicata con ECC(p.e:Hamming) memorizzata bit a bit in dischi diversi
Jump
Definita a livello teorico
ALU
Bit level striping + ECC
Prestazioni elevate per letture sequenziali di dati
Architettura
RAID 2
CU
PC
Irrealizzabile la sincronizzazione perfetta tra i dischi
IF: Instruction Fetch
Il byte di parità(p.e:EX-OR) viene calcolato per i byte memorizzati nella stessa posizione
Lettura sequenziale efficiente
Idee di fondo
Byte level striping + parity
ID: Instruction Decode
RAID: Redundant Array of Independent Disks
Fasi
RAID 3
Disco di parità molto sollecitato e parità da ricalcolare ad ogni modifica di dati
EX: Execution
MEM: Memory Access
Macchina multiciclo
Introduzione
WB: Write Back
Striping a livello di blocchi
CPI = 3,98
Prestazioni
Affidabilità elevata per rottura di 1 disco
CU più complessa
Block level striping + parity
Registri intermedi
RAID 4
Il ricalcolo della parità per ogni modifica di dati è inefficiente, il disco di parità è bottleneck
Per semplificare il ruolo del programmatore l'Instruction Set viene ampliato fornendo istruzioni molto potenti
Funziona come il 4 ma riduce il carico del disco di parità
CISC
Migliore combinazione tra prestazioni, affidabilità e capacità di memorizzazione
PIU' USATO in applicazioni generiche
CU molto complicate per intepretare l'istruzione
Intel: incrocio tra RISC e CISC per retrocompatibilità
Block level striping + distributed parity
No microcodice sofisticato
Efficiente e parità non bottleneck
RAID 5
Dimensioni fisse
Istruzioni facili da decodificare
In caso di guasto è più complessa la ricostruzione del contenuto perché contiene sia dati che parità
Sfrutta principi di buona progettazipne
Come il 5 ma con due livelli di parità
Supporta doppio guasto contemporaneo, maggiore affidabilità
Block level striping + dual distributed parity
Tanti registri multi purpose
RISC
RAID 6
Campi fissi
Accesso alla memoria limitato a LOAD e STORE
Sfruttamento del pipelining
Maggiore overhead, superfluo perché una rottura doppia è molto improbabile
Meno overhead per la decodifica dell'istruzione e CU più semplici
Compito del programmatore più arduo e poca retrocompatibilità
Sovrappone l'esecuzione delle istruzioni sfruttando tutte le unità funzionali contemporaneamente
Cache istruzioni != cache dati
Caratteristiche strutturali
Le istruzioni vengono eseguite una alla volta su un unico flusso di dati
Classica architettura monoprocessore
SISD: Single Instruction (stream) Single Data (stream)
Multiple issue e pipeline rientrano forzatamente in questa classe
Non ha senso anche se qualcuno sostiene che i moderni processori ne facciano parte
Soluzione
PIPELINING
SIMD: Single Instruction (stream) Multiple Data (stream)
Architetture multiprocessore e multicomputer
Dati (istruzioni dipendenti sovrapposte
PROBLEMI
MISD: Multiple Instruction (stream) Single Data (stream)
Processori vettoriali
Registri di pipelining
Strutturali (UF usate contemporaneamente)
Predizione
Controllo (calcolo dei branch)
RISOLTO
RISOLTO
NON RISOLTO
Delayed branch
Soluzione
MIMD: Multiple Instruction (stream) Multiple Data (stream)
Duplicazione UF
Forwarding
NON RISOLTO
Statico
Scheduling
Dinamico
Più pipeline
Architetture superscalari
Più fasi EX
Tassonomia di Flynn
Legge che calcola lo speed up dato da un'architettura a più processori
Clock per fase più breve
Dati
Legge di Amdahl
Poco parallelismo nei programmi
Dipendenze
Problemi
Costo (di T) comunicazione processore-memoria
Introduzione
Incremento prestazioni
Affidabilità del sistema
Alee
Suddivisione del carico anche su ampia scala
Antidipendenza
Nomi
RAW
Vantaggi
Una istruzione necessita di un risultato scritto sopra
Se j scrive su un registro che i deve ancora leggere
Dipendenza in output
Possibile lettura del registro prima che sia stato scritto il dato
WAW
Possibile scrittura in ordine scorretto, il registo può non contenere il risultato più recente
WAR
Possibile riscrittura del registro prima che il dato sia stato letto
Nato per CPU monocore
Stazione di prenotazione
Se fatti girare su CPU che lo supportano ne sfruttano le caratteristiche
Il concetto non va bene tra thread diversi perché si cambia spazio di indirizzamento
Common Data Bus
Se un thread va in stall la CPU passa ad un altro thread senza problemi di CONTEXT SWITCH
Nel coarse-grained si può svuotare la pipeline ad ogni context switch per sapere a che thread appartiene l'istruzione
Introduzione
Accesso distribuito agli operatori
Pregi essenziali
I thread vengono identificati con un ID
Schema di tomasulo
Le istruzioni devono essere nella cache per non rallentare il context switch
Alee WAW e WAR risolte con ridenominazione
Issue
Il thread-switch avviene ad ogni istruzione, politica ROUND ROBIN
Fasi
Execute
Pipeline k stage
Write Result
Almeno k peer-thread da eseguire
Efficiente se la branch prediction è accurata
Pipeline potenzialmente sempre piena (a meno di CACHE MISS)
CPU esegue thread switch ad ogni ciclo di clock
Fine-grained
Esecuzione OUT of ORDER risolve anche stall da CACHE MISS
Salto eseguito SEMPRE
Statica
Salto eseguito MAI
IMPOSSIBILE implementare CONTEXT SWITCH efficiente
1 bit
Un thread viene rallentato anche quando potrebbe proseguire la sua esecuzione
Rischi di dipendenze
PROBLEMI
2 bit
Caso meno thread che stage
Branch Prediction Buffer
3 o più bit
Switch quando c'è stall
Predittori correlati
Sfruttamento della pipeline anche quando ci sono pochi thread
Spreco di tempo
Load
Switch avviene DOPO che c'è stato lo stall
Coarse-grained
Torneo
PROBLEMI
Branch Target Buffer
Medium Grained
Non si spreca il ciclo di stall del coarse-grained
Istruzioni memorizzate insieme a risultato
Esecuzione Out of Order ma COMMIT in Order tramite CODA CIRCOLARE
Multithreading
Branch Prediction
Supporto per la ridenominazione dei registri
ILP + TLP
Si occupano più unità funzionali
Tramite l'ILP si lanciano "contemporaneamente" istruzioni di thread diversi
Per TRADUZIONE INDIRIZZI : servono k mem associative per k programmi paralleli
Dinamica
Tipo di ISTRUZIONE
Simultaneous
Servono registri rinominabili in abbondanza
Si tiene conto dei salti circostanti
Si tengono più BPB e si usa quello che si è comportato meglio l'ultima volta
Si tiene in memoria l'indirizzo di destinazione del salto
ILP DINAMICO
Thread switch quando si esegue una istruzione con potenziale stall
Jump
Ridenominazione dei registri
Se i e j scrivono nello stesso registro
DESTINAZIONE
4 entry
Esecuzione contemporanea di istruzioni appartenenti a programmi diversi
Speculazione Hardware
VALORE
ROB
READY
Incrementa le prestazioni del 25-30% con aumento dimensioni processore 5%
Con condivisione CACHE e RAM
2 PC
4 macropassi
Partizionamento reale delle risorse
Un thread non può usare la parte di risorsa inutilizzata da un altro thread
ILP
Intel (Hyperthreading)
Condivisione vera e propria delle risorse
Condivisione controllata delle risorse
Accesso ai registri simultaneo
Manipolazione del codice in fase di compilazione
Se tutti i thread necessitano di 3/4 della CACHE, molti CACHE MISS
Concetti
Switch ad ogni ciclo di clock SALTANDO THREAD IN STALL
Fine Grained Multi Threading
SUN UltraSPARC T1
Utilizzato particolarmente in ambito embedded per basso overhead computazionale
Casi di studio
Strettamente collegato all'architettura sottostante
Architettura con più CPU e memoria primaria condivisa
Pipeline scheduling
Tutti i processi condividono lo spazio di indirizzamento logico, mappabile fisicamente su memoria di processori diversi
Rischio cache miss per spostamento processo
Introduzione
Strumenti
L'efficienza dipende dal numero di registri disponibili (rischio di appoggiarsi a RAM)
Loop unrolling
PROBLEMI
Bilanciamento del carico
Possiblità di spostare processi tra le code
Spostamento delle istruzioni per LIMITARE gli STALL
Nasce per limitare l'overhead di gestione del loop
SO moderni usano SMP (symmetric multiprocessing), uno scheduler per processore
SO moderni con SMP usano code separate per ogni processore
Come si fa per cicli di lunghezza non definita?
Codice generato più lungo con rischio di CACHE MISS delle istruzioni
Uniform Memory Access
Ogni CPU ha tempo di accesso a MEM uniforme
Tutti i processori condividono la memoria primaria
La memoria condivisa può essere il collo di bottiglia
Compilatore genera ISSUE PACKETS
Sistemi UMA
Cache Snooper non fa nulla
Multiple Issue Statico
approccio VLIW
Dato è presente nella mia Cache
Non faccio nulla
Read hit
Write Through
Tecniche più sofisticate
Exclusive
Linea valida, RAM NON aggiornata, no altre copie
Modified
PROBLEMA
Estende concetto VLIW
operation group 4 bit
Inzializzazione
Architettura IA-64
template 5 bit
Advanced Load
SOLUZIONE
Trimedia TM32
LIMITE: con un bus singolo si possono avere max 32 CPU
Si usa una rete che connette ogni processore con ogni memoria
Ogni commutatore si occupa dell'inoltro dell'informazione a seconda del valore di un bit, nell'ordine
PREGI
Semplicità dell'hardware
Codice molto lungo
OBIETTIVO: spostare una parte di informazioni utili in memorie più veloci e costose
Esempio: rete Omega
n CPU -> (n/2)log2(n)
Spaziale
Località
Ogni CACHE LINE è numerata e identificata dai primi (n-m) bit dell'indirizzo in RAM
In ogni istante alcune delle linee di RAM sono anche nella cache
Multiprocessori (sistemi a mem condivisa)
Non tutte le operazioni possono essere eseguite contemporaneamente
E' probabile che vengano utilizzati indirizzi utilizzati di recente (es.: cicli)
RAM divisa in CACHE LINES di dimensione fissa
Struttura
Value (opzionale)
E' probabile che vengano utilizzati indirizzi simili a quelli appena usati (es.: array)
Temporale
Commutatori a più stadi
CPU e memoria si scambiano messaggi con 4 campi
Funzionamento
Non Caching NUMA (NC-NUMA)
Prestazioni dipendenti dalla dimensione delle linee
Una MMU apposita controlla quale memoria viene utilizzata
Utilizzo di cache -> PROBLEMA coerenza
Ogni nodo del sistema ha directory che traccia le linee nelle cache
Far sì che la linea possa essere in più di una cache contemporaneamente
Funzionamento di base
Non Uniform Memory Access
Cache Coherent (CC-NUMA)
1 ciclo clock per richiedere indirizzo in RAM
Costo di servizio di un cache miss
Effetti sul sistema
Ottimizzazione
Tempo d'accesso che varia in funzione della memoria in cui si trova il dato
Slide da 51 a 62 (p.17-21)
Qualsiasi lettura restituisce il valore più recente scritto
Aumentare dimensione cache
Architetture Parallele
Cache Direct-Mapped
Bit di validità
Contenuto della cache
Cache associativa a n vie
Sistema combinato UMA/CC-NUMA
Cache Set-Associative
I processori nella stessa boardset sono connessi con un BUS con snooping
18 boardset connesse
3 crossbar switch
Sun Fire E25K
Caching a più livelli
DIMM
1 per i dati
SDRAM
SGI ALTIX
RAM
DDR
La CACHE del sistema viene vista come locale e i dati vengono spostati tra le CACHE al bisogno
Dual Inline Memory Modules
Syncronous DRAM
Double Data Rate
DDR2, DDR3, DDR4 ...
Quando un dato viene sovrascritto ed era l'ultima copia, che succede?
Difficoltà a connettere tra tante CPU che vedano intero spazio di memoria
Collo di bottiglia
Necessità di rete di interconnessione velocissima
Costosissimi (milioni di $), usati per FINANZA, SCIENZA, MILITARI
Migliaia di CPU connesse da una rete ad alte prestazioni, alta capacità di I/O
Alta tolleranza ai guasti
Ogni sistema ha le sue peculiarità
Unità computazionali uguali e dense
Sfruttano una rete ad alte prestazioni progettata apposta
La singola unità computazionale non potrebbe funzionare da sola
Problemi con elevato sforzo computazionale
Idea è alta potenza e alta efficienza ($,watt,m3)
SOLUZIONE
PowerPC 440
2 processori
16x Custom card
32x Motherboard
64x Cabinet
Composizione
BlueGene/L (il primo)
cache 4 MB L3 condivisa
Massively Parallel Processors (MPP)
512MB-2GB di RAM
Nodi connessi da un toroide 3D (6 vicini x nodo)
Diviso in 2 thread
1 solo processo
Su ogni CPU gira un SO molto semplice
1 solo utente
Potenza computazionale 1 PetaFlop
BlueGene/P
CHIP: 4 PowerPC 450
Raggiunge 20 PetaFLOPS
BlueGene/Q
CHIP: 18 core PowerPC A2
Processore Opteron (prima 1 poi 2/4 core)
1 GB RAM x Core
8x Scheda
3x Card Cage
108x Cabinet
Chip Ethernet 100Mb/s
RedStorm
Multicomputers (sistemi a scambio messaggi)
Rete toroidale 3D
SO: catamount per computazione, linux per le CPU di servizio
Composto da macchine anche molto diverse
Spesso, ciascuna unità computazionale può funzionare da sola
Rete di interconnessione NON progettata appositamente
Numero di nodi connessi molto VARIABILE
Non esiste un criterio di progettazione specifico
Resistenza ai guasti
Le query vengono inoltrate al server più vicino
Più centri di elaborazione sparsi per il mondo
Centro->Internet 2,488Gb in fibra
Backup: Centro->provider alternativo 622Mb
Processori a basso costo e consumo
80x PC
64x rack
Connessi su due porte per ogni switch
Hardware numeroso -> tanti guasti
Migliora prestazioni e tolleranza guasti
Replicazione e SW di gestione fanno sì che sistemi di sicurezza costosi siano superflui
2x switch Ethernet
Connessioni
60x datacenter(oggi di più)
Software tollerante ai guasti
Replicazione dei componenti HW/SW
Cardini gestione del sistema
Cluster Of Workstation (COW)
Ottimizzazione rapporto costi/prestazioni
Copia di ogni pagina Web
Esplorazione periodica della rete per mantenere aggiornato il DB
Search index diviso in shards e replicato
Shards replicati e distribuiti su vari cluster non adiacenti
Google
Aggiornamento del search index
Caratteristiche
Pagine web suddivise in shards
Master server usati per sapere la locazione degli shards
1. Richiesta inviata a data center
2. Load balancer instrada richiesta a gestore di query
3. Richiesta inoltrata a analizzatore sintattico
4. In parallelo inviata a Ad server
Processamento query
5. Il gestore di query interroga uno o più index server per sapere in quali pagine si trovano le parole oggetto della ricerca
6. Con i risultati si interrogano i document server per estrarre i pezzi di testo più significativi
7. Risposta inviata al client inseme a pubblicità e eventuali segnalazioni di errore
Semplificano i loop
HW in grado di lavorare su vettori di dati con istruzioni vettoriali
P.E. sommare due vettori e copiare il risultato in un terzo
Una singola istruzione specifica grande quantità di lavoro (eqiv a un loop)
Non servono controlli di data hazard
L'uso di istruzioni vettoriali indica che la computazione di ogni elemento è indipendente
Le alee tra due istruzioni vettoriali vanno controllate solo una volta per ogni vettore operando
Caratteristiche istruzioni vettoriali
Le istruzioni vettoriali di solito accedono a locazioni di memoria adiacenti
Un intero loop viene sostituito da un'unica istruzione vettoriale
8 registri vettoriali che contengono 64 elementi da 32/64bit
Registri vettoriali
Ogni unità pipelined, una unità di controllo verifica eventuali confilitti
Unità funzionali vettoriali
Possono spostare l'intero contenuto in più celle adiacenti da/in RAM
Unità vettoriali load-store
Possono essere usati per calcolare indirizzi di RAM o eseguire operazioni tra vettori e scalari
Componenti di un processore vettoriale
Registri scalari
Processori vettoriali
Architettura più complessa che limita la frequenza di clock
Registri più grandi e connessi in modo più complicato
Ogni UF è più sofisticata volendo operare su più elementi contemporaneamente
Datapath più ampio per poter spostare più blocchi di operandi contemporaneamente da un punto all'altro
PROBLEMI
Connessione con memoria più sofisticata per sostenere mole di dati che CPU richiede
COSTO MAGGIORE
Uso giustificato da applicazioni che hanno connotazione vettoriale
P.E. Pentium 2 MMX
P.E. Pentium III SSE
SDRAM che trasferiscono dati sia su fronte di salita che di discesa del clock
Clock aumenta
Voltaggio (->consumi) diminuisce
Trasferimento in parallelo = alta banda
Saldate direttamente a GPU
Molti processori hanno arricchito l'Istruction Set con estensioni multimediali (tipo vettoriali)
P.E. Pentium 4 SSE2
Utilizzate molto nelle consolle per videogames
Caratteristiche
Numero limitato di riscritture
Costo : - di SDRAM + di HD
Prestazioni più vicine a SDRAM che HD
Architetture dove i nodi comunicano con SCAMBI DI MESSAGGI
Ogni nodo è un computer normale più un PROCESSORE PER LA COMUNICAZIONE
Chip montati su piccole schede contenenti 4-16 DRAM che memorizzano dati in blocchi da 8 byte (+ECC)
Statiche
DIFETTI multiprocessori
FLASH Memory
Stato attuale
Troppo costosa da implementare
DRAM dotate di clock sincronizzabile con quello del controller
Particolari EEPROM leggibili e riscrivibili
NO Remote Memory Access (NORMA)
Uso di SEND-RECEIVE invece di STORE-LOAD
Graphics (Sync) DRAM
PROBLEMI
Scalabilità limitata
Molte CPU possono accedere a stesse variabili
Sistemi COMA
GDRAM
Quando un indirizzo logico viene tradotto in un indirizzo fisico e il dato non è in cache né in RAM dov'è?
Ogni linea può andare in qualsiasi entry
L1 C L2 C L3
Cache Only Memory Access
I dati non hanno un luogo specifico ma possono migrare e essere replicati nei vari banchi di memoria della memoria centrale
Contiene n word
Ogni linea può essere memorizzata in n entry della cache
L'insieme di entry in cui può andare una linea si calcola (indirizzo linea in RAM) mod (numero di insiemi della cache)
Cache fully associative
1 per le richieste
1 per le risposte
Campo Tag
Cache line
Consistenza del processore
Per ogni locazione di memoria, qualsiasi CPU vede tutte le scritture effettuate da ogni singola CPU in quella locazione nello stesso ordine
(Indirizzo della linea in RAM) modulo (numero di entry nella cache)
Per distinguere il contenuto dell'entry della cache tra le possibili linee di RAM che può contenere c'è un campo tag con i bit più significativi dell'indirizzo
Modelli di consistenza della memoria
Vengono utilizzate varianti più "relaxed"
Le scritture da parte di una qualsiasi CPU sono viste da altre CPU nell'ordine in cui sono state inviate
Parallelizzare la lettura dei dati da RAM
Usare più livelli di cache
Linee di dimensione ottimale
CACHING
Consistenza stretta
Consistenza sequenziale
Interleaved memory
Cache set-associative
Ogni linea della RAM viene memorizzata in un punto ben preciso della CACHE
Difficile da implementare
2x Chip
Miglioramento
Riduzione del numero di cache miss
In una sequenza di istruzioni di lettura/scrittura viene scelto un qualche ordine di esecuzione (anche casuale), ma è uguale per tutte le CPU
4 x 15 cc per leggere linea
4 x 1 cc per inoltrare la linea alla cache
Sincronizzazione tra processi
In sistemi di questo tipo non viene garantito l'ordine di esecuzione delle istruzioni
Snooping per coerenza cache
Modifiche solo in cache, copia in RAM solo se il dato deve essere rimpiazzato
Ritardo
Non viene usata
Perdita di tempo
Conserva il dato finché non viene scritto in RAM
Miglioramento del CPI ideale da 151 a 4
Memoria fisica distribuita sui processori
1 per comunicazioni tra nodi nel sistema
Write buffer
Write back
Sistemi NUMA
Spazio di indirizzamento unico
1 per istruzioni
Poche linee = + località spaziale - temporale
Propagare direttamente il valore in RAM
Problema coerenza con RAM per scritture
CACHE MISS: word prelevata da RAM e esecuzione rallentata
Troppe linee = + località temporale - spaziale
MIGLIORAMENTI
MOLTO DIFFICILE da implementare
CACHE HIT: esecuzione non rallentata
Quando viene indirizzata una word l'HW controlla se è presente in CACHE
I processori non hanno cache o se ce l'hanno la usano solo per dati privati
Protocollo directory-based
Indica presenza di "stop"
Load che restituisce il valore prima di sapere se deve essere eseguita, controllata su ALAT
No controlli runtime
DIFETTI
Crossbar Switch
Con n CPU ci vogliono n^2 switch, INACCETTABILE
Directory interrogata spesso -> serve HW veloce
Indica unità usate dal bundle
Processore VLIW per usi embedded
Se non si usa una politica write-allocate la modifica viene propagata direttamente in RAM
Directory usa 1 bit per tracciare se la linea è stata inviata o meno a un altro nodo
3 x Reg 7 bit
Predicate Reg 6 bit
Coerenza della cache
Linea modificata da CPU1
Se CPU2 richiede la linea, CPU1 informa che CPU2 deve aspettare mentre CPU1 inoltra la modifica in RAM
No problema di coerenza cache ma TEMPI di accesso ai dati ELEVATI
OP type 10 bit
3 x istruzioni 41 bit
Istruzioni organizzate in bundle 128 bit
CPU1: Modified
Altre CPU: Invalid
Itanium II
Protocollo MESI
Letture di altre CPU, linea marcata come SHARED
Opcode
Ogni gruppo viene schedulato liberamente da CPU
Ordine blocchi rispettato
Letture successive di CPU1 usano la copia in cache
Operazione da eseguire: WRITE o READ
Blocchi più flessibili
SOLUZIONE
Prima lettura da CPU1, viene marcata come EXCLUSIVE nella cache relativa
Address
Difficoltà di conversione in codice predicativo, specie se lungo
Istruzioni predicative spesso più lente
4 stati possibili per ogni entry della cache
Tutte le entry sono INVALID
Indirizzo all'interno della memoria
Istruzioni separate da varie istruzioni condizionali compattate in sequenze di istruzioni indipendenti
Gruppo: insieme di istruzioni indipendenti
Shared
Nessun'altra cache contiene la linea e RAM aggiornata
Module
Loop non srotolato ma in ogni pacchetto vengono inserite istruzioni indipendenti anche appartenenti a cicli diversi
Global code scheduling
Invalid
Linea contenuta in più cache e RAM aggiornata
ID MEM-ID CPU, p.e.: 110-001
Symbolic loop unrolling
Esecuzione di istruzioni inutili
Istruzioni predicative
ILP STATICO
PROBLEMA: ogni operazione viene propagata in RAM -> INEFFICIENTE
Dati contenuti non validi
Parallelismo evidenziato in loop con istruzioni non indipendenti
Esecuzione parallela sia del codice di branch eseguito e non eseguito e selezione di quello corretto
Snooping
Write hit/miss
PROBLEMA
Dato non presente nella mia Cache
Assume un branch statico o cerca di capire l'andamento tramite il codice
Loop level parallelism
Read miss
Cache Snooper non se ne accorge
Cache Snooper invalida
Non serve il controllo delle dipendenze perché è stato fatto in fase di compilazione
Static branch prediction
Un controller monitora le richieste alla memoria delle altre CPU ed, eventualmente, interviene
Se una linea non è stata modificata ed è presente nella mia RAM conviene prelevarla da lì piuttosto che richiederla all'altra CPU
BRANCH SBAGLIATO: ROB svuotato
Scheduling dinamico NON necessario MA consigliato
Serve un hardware aggiuntivo (OVERHEAD)
Bloccante se il Module usa gli stessi commutatori
Risultato scritto nel CDB e nel ROB
NO BRANCH: contenuto del campo valore trasferito in registro o MP
Prelievo contemporaneo di più operandi e più istruzioni per ciclo di clock
Multiple Issue
Un thread può utilizzare al massimo fino a un TOT della risorsa
Valore nel caso di WRITE
WRITE RESULT
UF in numero sufficiente
Strategie perché 2 thread usino contemporaneamente le risorse della CPU
Nei processori Intel sono condivise solo le risorse abbondanti
SOLUZIONE: usare cache o parti di memoria private
Operandi necessari inviati alla stazione se disponibili nei registri o nel ROB
EXECUTE
COMMIT
La risorsa viene utilizzata dal primo thread che se ne impossessa
Rischio STARVATION
L'istruzione viene inoltrata al passo EXECUTE se ci sono entry nel ROB e stazioni di prenotazione libere
ISSUE
Architetture 2
Duplicazione delle risorse
2 tavole di mappatura dei registri
Ogni thread usa metà della risorsa
L'OS lo vede come processore doppio