Intel IA-64
Daniele Venzano
Davide Chiarella
Francesco Figari
1/29
Obiettivi della Intel 1
Espandibilità futura: IA-64 è stato progettato
per permettere espansioni future fornendogli
sufficiente capacità architetturale


Spazio di indirizzamento a 64 bit

File dei registri ampio e direttamente accessibile


Numero sufficiente di bit di istruzione per la comunicazione fra
compilatore e Hardware
Elevato ILP (Instruction Level Parallelism)
2/29
Obiettivi della Intel 2

Retrocompatibilità con Architettura IA-32
Per ragioni di mercato Intel ha preferito
conservare la retrocompatibilità con la vecchia
architettura IA-32, permettendo così ai vecchi
applicativi di essere eseguiti anche su IA-64, a
discapito tutttavia dell’efficienza.
3/29
Obiettivi della Intel 3

Risolvere le limitazione delle attuali architetture
Attualmente gli incrementi di prestazioni delle CPU
sono dovuti in massima parte al miglioramento del
processo tecnologico della lavorazione del silicio
piuttosto che ad innovazioni strutturali delle
macchine. Tenendo conto della legge di Moore, Intel
ha scommesso su questa nuova architettura che, a
parità di tecnologia, sulla carta dovrebbe sbaragliare
la vecchia IA-32.
4/29
Obiettivi della Intel 4

Elevato ILP (Instruction Level Parallelism)
Esempio di gruppi di
istruzioni
I compilatori per i processori attuali
producono codice senza tenere presente
come il processore le eseguirà: IA-64, per
aumentare l’ILP, permette al compilatore di
creare gruppi di istruzioni che possono essere
eseguite in parallelo. Questo compito può
sembrare complesso, ma i compilatori attuali
possiedono già tutte le informazioni
necessarie.
5/29
Obiettivi della Intel 5

Elevato numero di registri dedicati e general
purpose
IA-64 è stato fornito di un elevato numero di
registri (128) per aumentare le performance
del processore (ad es. minori swap fra registri
e memoria)
6/29
Architettura EPIC
(Explicit Parallel Instruction Computing)
Una architettura EPIC fornisce:
1.
Meccanismi per permettere al compilatore di
organizzare efficientemente la computazione
basandosi sulla sua conoscenza globale
2.
Risorse sufficienti (registri ed unità funzionali) per
eseguire operazioni multiple in parallelo e
memorizzare i risultati intermedi
3.
Formati di istruzioni che permettono al compilatore
di comunicare all’hardware le informazioni chiave
che ha raccolto in fase di compilazione
7/29
Formato delle Istruzioni 1
Ogni istruzione è ampia 41 bit così divisi:
• 14 bit per l’operazione
• 7 bit per il primo operando
• 7 bit per il secondo operando
• 7 bit per il terzo operando
• 6 bit per il registro predicato
La dimensione, alquanto singolare, delle istruzioni è
stata determinata dalla scelta della codifica che usa
IA-64: una codifica a 128 bit (chiamata bundle) che
raggruppa 3 istruzioni.
8/29
Formato delle Istruzioni 2
Un bundle, come già detto,
contiene tre istruzioni per un
totale di 123 bit: i rimanenti
5 bit costituiscono il template
che specifica il mapping fra
gli instruction slot e le
Execution Unit Type (Integer
Unit, Floating Point Unit,
Memory Unit e Branch Unit) e
inoltre contiene informazioni
sulla separazione dei basic
block.
9/29
Modalità di Funzionamento

L’architettura IA-64 supporta tre modalità
di funzionamento:



IA-32 System Environment
supporta sistemi operativi IA-32 a 32 bit
IA-64 System Environment
supporta sistemi operativi IA-64-based
IA-32 mista
supporta su sistemi operativi IA-64-based applicazioni
sviluppate su IA-32
10/29
Sommario dei Registri
2
1
3
4
11/29
Supporto al Sistema Operativo

Problema:




IA-32 -> spazio di indirizzamento 4 GB
IA-64 -> spazio di indirizzamento 16x109 GB
Utilizzare le pagine da 4KB significa avere una page
table con 1015 entry, che non può essere contenuta
completamente in memoria
Soluzione:


Pagine di dimensioni più grandi
Suddivisione dello spazio di indirizzamento
12/29
Soluzioni


IA-64 supporta pagine di dimensione variabile
tra 4 KB e 256 MB
Lo spazio di indirizzamento è suddiviso in 8
regioni che il sistema operativo può destinare a
differenti compiti:




Librerie condivise
Memoria condivisa e IPC
Kernel
...
13/29
Register Stack




Lo stack dell’IA-64 è implementato sui 96 registri
generali che possono essere ridenominati sotto
controllo software.
L’RSE (Register Stack Engine) provvede ad
allocare un nuovo stack frame al momento della
chiamata ad una procedura, occupando i registri
necessari.
Se non c’è più spazio una parte dello stack viene
copiata in memoria, liberando dei registri.
Questo meccanismo può anche essere
implementato in modo speculativo.
14/29
Ridenominazione dei Registri
1
2
3
1. Chiamata: i registri locali vengono nascosti.
2. Allocazione: registri vuoti vengono allocati per la nuova
procedura.
3. Ritorno: vengono ristabiliti i nomi dei registri come erano
prima della chiamata.
15/29
Software Pipelining



I loop sono molto comuni, una loro
ottimizzazione porta grossi vantaggi in tutto il
software esistente.
IA-64 offre un supporto hardware che riduce di
molto la dimensione del codice che il
compilatore deve generare per l’esecuzione delle
singole iterazioni all’interno di una pipeline.
Ogni iterazione inizia prima che quella
precedente sia terminata, quindi in ogni istante
potrebbe essercene in esecuzione più d’una.
16/29
Esecuzione Software Pipelining



IA-64 offre istruzioni e registri appositi per la
gestione dei loop.
Il contatore viene decrementato
automaticamente ad ogni iterazione.
C’è una istruzione di jump apposita per
terminare il ciclo e un registro (l’epilog count)
che mantiene un conteggio degli stadi ancora
attivi nella pipeline quando il ciclo termina.
17/29
Istruzioni Predicated 1

Predication: esecuzione condizionale di
una singola istruzione, dove il valore di
guardia è dato da un registro per predicato

Supporto nell’IA-64

Hardware:
64 registri (16 statici + 48 sottoposti alla RSE)

Instruction set:
target delle istruzioni di test e compare
tutte le istruzioni possono essere predicate
(salvo poche eccezioni)
18/29
Istruzioni Predicated 2

If conversion
Asm tradizionale
if (r1 == r2)
r9 = r10-r11;
else
r5 = r6+r7;
cmp
cjmp
< ramo
jump
r1,r2
then
else >
end
IA-64
(p1)
(p2)
cmp.eq p1,p2 = r1,r2;;
sub r9 = r10,r11
add r5 = r6,r7
then:
< ramo then >
end:
…

Altre applicazioni: Multiway branches, Parallel Compare
19/29
Branch Prediction 1

E’ resa necessaria dalla struttura a pipeline

Alcuni salti sono eliminabili tramite predication

Si introducono istruzioni che forniscono al
branch predictor informazioni per migliorare la
corretta predizione, la velocità (meno bolle nella
pipeline) e lo sfruttamento di risorse hardware
20/29
Branch Prediction 2

Hints a disposizione
vengono forniti via modificatori o istruzioni brp

Prediction strategy



meccanismo hw di predizione
valore più probabile del salto
Sequential prefetch


Static / Dynamic
Taken / Not-Taken
Few / Many
numero di linee da precaricare
Predictor deallocation

Clr
azzera le informazioni sul salto
21/29
Compiler-directed Speculation 1

Necessità:
riordinare il codice per sfruttare il parallelismo

Problemi:
dipendenze di flusso (control ) e di accesso alla
memoria (data )

Soluzioni:
istruzioni speculative e differimento delle eccezioni
Speculation:
esecuzione di codice che probabilmente sarà utile
22/29
Compiler-directed Speculation 2

Suddivisione del set di istruzioni:

Istruzioni speculative



Istruzioni non-speculative



Scrivono solo nei registri GR e FR
Differiscono o propagano eventuali eccezioni
Modificano lo stato dell’architettura
Sollevano eccezioni
Rappresentazione eccezioni

Registri NaT (GR) e valori NaT (FR) (NaT – Not a Thing)
23/29
Control Speculation

Nuova classe di istruzioni: speculative loads


possono essere rischedulate prima di un salto
condizionale
al loro posto istruzioni di check ed eventuali
procedure di recovery
instrA
ld8.s r1 = [r2]
instrB
use r1
…
instrA
br
instrB
…
ld8 r1 = [r2]
use r1
br
chk.s
24/29
Data Speculation 1

Ulteriore classe di istruzioni introdotta dalla
architettura Intel: advanced loads


possono essere inserite prima di una serie di store in
dipendenza ambigua con un’operazione di load
al loro posto sono sostituite da

check load, se in caso di modifica è sufficiente ricaricare il
valore

advanced load check ed eventuale recovery, se sono state
eseguite speculativamente operazioni più complesse

si appoggia ad una cache hardware che tiene traccia
delle locazioni caricate nei registri, chiamata ALAT –
Advanced Load Address Table
25/29
Data Speculation 2
Esempio 1: recovery utilizzando check load
Senza Data Speculation
Con Data Speculation
// altre istruzioni
ld8.a
r6 = [r8];;
st8
[r4] = r12
// altre istruzioni
ld8
r6 = r[8]
st8
[r4] = r12
add
r5 = r6, r7;;
ld8.c.clr
r6 = [r8]
st8
[r18] = r5
add
r5 = r6, r7;;
st8
[r18] = r5
26/29
Data Speculation 3
Esempio 2: recovery con advanced load check
Senza Data
Con Data Speculation
Speculation
[r4] = r12
ld8
r6 = r[8]
add
r5 = r6, r7;;
st8
[r18] = r5
r6 = [r8];;
add
r5 = r6, r7;;
// altre istruzioni
// altre istruzioni
st8
ld8.a
st8
[r4] = r12
chk.a.clr
r6, recover
st8
[r18] = r5
recover: ld8
r6 = [r8];;
add
r5 = r6, r7
br
back
back:
…
27/29
Software per Itanium 1
Itanium Server:




Debian
SuSE Linux Enterprise Server 7
Windows 2003 Adv. Server Lim. Ed.
RedHat Linux Adv. Server 7.2
28/29
Software per Itanium 2
Itanium Workstation:






RedHat NULL
HP-UX 11i v1.5 (workstation HP)
Windows XP 64-bit Edition
IBM AX-5L
Turbolinux
SuSE Linux 7.2
29/29
Scarica

ppt