Fabio Casale, Matteo Sosso ARCHITETTURA IA-64
Introduzione all’ IA-64 CISC RISC VLIW EPIC ARCHITETTURA IA-64 Introduzione all’ IA-64 EPIC nasce dall’analisi delle caratteristiche dalle architetture esistenti CISC RISC VLIW EPIC E’ necessario cambiare architettura! E’ necessario cambiare architettura, perdendo la compatibilita’ binaria con l’x86. Per la progetazione dell’IA 64 si e’ tenuto conto dei vantaggi e degli svantaggi delle architetture esistenti ( CISC, RISC, VLIW). Avendo perso la compatibilita’ binaria e’ necessario usare software nuovo, a partire dal sistema operativo e dai compilatori (possibile limite iniziale). IA 64 e x86 non sono compatibili a livello binario Possibile compatibilita’ con codice a 32 bit tramite emulatori o traduttori binari. Necessita’ di nuovo software (sistemi operativi, compilatori ecc.) Nuovo set di istruzioni orientate al parallelismo ( ILP )
le limitazioni del x86 Problemi x86 CISC: ARCHITETTURA IA-64 le limitazioni del x86 Problemi x86 CISC: parallelismo implementato via hardware predizione dei salti limitate risorse interne latenza memoria complessita’ hardware Per aumentare le performace dei processori a 32 bit si puo’ agire solamente sul clock e sulla lunghezza della pipeline
… sono state risolte Esecuzione parallela architettura EPIC ARCHITETTURA IA-64 … sono state risolte Esecuzione parallela architettura EPIC Predizione dei salti: uso dei predicati (predicative execution) Grandi cache suddivise su piu’ livelli, istruzioni di precaricamento dati direttamente nel codice (a compile time invece che a run time) Grande disponibilita’ di risorse, registri rotanti, pagine di memoria a dimensione variabile (indirizzamento) Chiamate a subroutine e passaggio dei parametri (register stack engine) Implementazione dei cicli
Parallelismo delle istruzioni ARCHITETTURA IA-64 Parallelismo delle istruzioni VECCHIE ARCHITETTURE unita’ hardware aggiuntive per scegliere parallelo gruppi di istruzioni da eseguire in parallelo. natura intrinsecamente sequenziale del set di istruzioni x86. Vedere pagina web lithium ARCHITETTURA EPIC ( Explicitly Parallel Instruction Computing ) la scelta dei gruppi da eseguire parallelamente e’ presa dal compilatore. non serve piu’ hardware aggiuntivo che esegue controlli a run time. il nuovo set di istruzioni permette di creare un codice contente riferimenti espliciti ai gruppi eseguibili in parallelo.
Predizione dei salti ARCHITETTURA IA-64 VECCHIE ARCHITETTURE dispositivi hardware aggiuntivi per la predizione dei salti in caso di fallimento e’ necessario svuotare la pipeline e ricaricare le nuove istruzioni piu’ lunga e’ la pipeline maggiore e’ lo svantaggio portato da una predizione errata IA-64 introduzione dei predicati ( predicative execution ) possibilita’ di eseguire entrambi i flussi di un salto il compilatore puo’ aggiungere nel codice istruzioni per aiutare la predizione dei salti
Predizione dei salti Sistema dei predicati Architettura tradizionale ARCHITETTURA IA-64 Predizione dei salti Esempio di salto eseguito nelle architetture tradizionali e nella nuova IA-64 codice stile C if a[i].ptr != 0 b[i]=a[i].l; else b[i]=a[i].r; i++; Sistema dei predicati Architettura tradizionale IA-64 load a[i].ptr load a[i].ptr p1, p2=CMP a[i].ptr != 0 p1, p2=CMP a[i].ptr != 0 jump if p2 p1 load a[i].l p2 load a[i].r load a[i].l p1 store b[i] p2 store b[i] then store b[i] i = i +1 jump load a[i].r else store b[i] i = i +1
ARCHITETTURA IA-64 Predizione dei salti Il compilatore ha la possibilita’ di inserire nel codice informazioni per aiutare la predizione dei salti. Indizi disponibili per la predizione dei salti: Strategia di predizione: Taken / Not Taken: salto probabile / improbabile Static / Dynamic: se static utilizza il valore Taken/Not Taken, lascia all’algoritmo di predizione la scelta Prefetch Sequenziale: Few / Many: indica la quantita’ di istruzioni da precaricare nel ramo prescelto
Organizzazione della memoria ARCHITETTURA IA-64 Organizzazione della memoria Con l’aumento della velocita’ dei processori e’ venuto a crearsi il problema del tempo di latenza delle memorie. Per questo motivo sono state introdotte le memorie cache. In caso di lunghe pipeline, se un solo elemento della pipeline ha bisogno di un dato residente in memoria tutta la pipeline deve fermarsi per attenderne il caricamento. VECCHIE ARCHITETTURE adozione di memorie cache introduzione di circuiti hardware per predire quali dati della memoria debbano venir caricati in cache ( hardware prefetch ) necessita’ di controllare la coerenza fra dati in cache e in memoria IA-64 adozione di memorie cache di grandi dimensioni e divise su piu’ livelli ( tre livelli per Itanium ) set di istruzioni specifico per la verifica della coerenza fra cache e memoria. possibilita’ di gestire il precaricamento in cache dei dati tramite istruzioni inserite al momento della compilazione.
Control speculation ARCHITETTURA IA-64 Permette al compilatore di caricare i dati prima che il codice ne abbia effettivamente bisogno questo permette di ridurre la perdita di tempo dovuta alla latenza delle memorie e di eseguire istruzioni in parallelo al caricamento dei dati. Vedi note disi Esistono due istrizioni speciali: - speculative load (ld.s) - check (check.s)
Control speculation Control speculation Architettura tradizionale ARCHITETTURA IA-64 Control speculation codice stile C t1=t1+1; if t1>t2 { j=a[t1-t2]; b[j]++ } Control speculation Architettura tradizionale IA-64 add t1 + 1 add t1 + 1 exception detection cmp t1 > t2 ld.s r8=a[t1-t2] jump cmp t1 > t2 Vedi note disi jump exception delivery load a[t1-t2] check.s r8 load b[j] load b[j] add b[j] + 1 add b[j] + 1
Grande disponibilita’ di risorse interne ARCHITETTURA IA-64 Grande disponibilita’ di risorse interne L’architettura IA-64 mette a disposizione un elevato numero di risorse interne: grande numero di registri interni (interi, float, flag) registri rotanti stack sui registri possibilta’ di indirizzare pagine di memoria di dimensione variabile
Grande numero di registri ARCHITETTURA IA-64 Grande numero di registri 128 registri a 64 bit per gli interi di cui 32 statici e 96 rotanti 128 registri a 82 bit per i numeri in virgola mobile di cui 32 statici e 96 rotanti 64 registri per i predicati di cui 16 statici e 48 rotanti 8 registri per i salti 128 registri speciali 1 registro CFM Guardare cos’e’ CFM
Grande numero di registri ARCHITETTURA IA-64 Grande numero di registri Schema dei registri interni dell’IA-64
ARCHITETTURA IA-64 Registri rotanti I registri vengono usati come fossero uno stack rotante. Nei momenti di inutilizzo della memoria centrale si effettua un salvataggio/ripristino dei registri più vecchi (quelli più lontani dalla posizione della finestra corrente). Man mano che la finestra avanza, la logica di controllo libera dei registri davanti ad essa per permettere altri avanzamenti, e vicerversa man mano che torna indietro il valore dei vecchi registri viene ripristinato. In conclusione il risultato di tutto ciò è una ruota di registri virtualmente infinita. La copia dei dati in memoria viene eseguita via hardware in background senza l’intervento dell’applicazione. la seconda frase fa cagare
ARCHITETTURA IA-64 Registri rotanti Registro virtuale = registro fisico – registro di rotazione base (RRB)
ARCHITETTURA IA-64 Chiamate a subroutine Il passaggio dei parametri avviene attraverso il banco dei registri, organizzato in una struttura a stack rotante di 96 registri. Ciascuna subroutine ha accesso ad un numero programmabile di registri consecutivi (la sua finestra), i primi saranno i registri dei parametri ricevuti dalla subroutine chiamante, gli ultimi quelli di uscita verso altre subroutine. Quando una subroutine A chiama un'altra subroutine B, la finestra scorre in avanti, così che quelli che per A erano i registri dei parametri di uscita, per B sono i registri dei parametri di ingresso. Al ritorno dalla subroutine la finestra scorre indietro, ripristinando la finestra precedente.
ARCHITETTURA IA-64 Chiamate a subroutine Schema del passaggio di parametri fra subroutine tramite il meccanismo dello stack sui registri.
Indirizzamento della memoria ARCHITETTURA IA-64 Indirizzamento della memoria E’ possibile indirizzare fino a 18 miliardi di GB di memoria direttamente 2^64 = 18.446.744.073.709.551.616 Byte L’ IA-64 puo’ indirizzare pagine di memoria di dimensione variabile fino a 256MB. L’ IA-32 permetteva di indirizzare solo pagine di dimensione fissa di 4KB. Vedi note disi L’ IA-64 mette a disposizione del Sistema Operativo registri per suddividere lo spazio di indirizzamento fino ad un massimo di 8 aree.
Conclusioni Grande passo in avanti rispetto all’architettura x86 ARCHITETTURA IA-64 Conclusioni Grande passo in avanti rispetto all’architettura x86 Elevata potenza specifica (maggiore efficienza a parita’ di clock) Necessita’ di riscrivere completamente il software (Sistemi Operativi, Compilatori, ecc.) Vedi note disi Viene delegato molto “lavoro” ai compilatori. L’unico processore con architettura IA-64 attualmente in commercio e’ l’ITANIUM di Intel.