Visualizza messaggio singolo
Vecchio 28-11-2007, 18.35.07   #7 (permalink)
MarcoGT
VV.com Aficionados
 
L'avatar di MarcoGT
 
Data registrazione: 27-11-2007
Residenza: near COD NDB
Messaggi: 687
MarcoGT is on a distinguished road
Predefinito

...continua...

IL SUPERAMENTO DEI LIMITI DELL'ARCHITETTURA x86

L’architettura x86 o IA-32 (Intel Architecture-32 bit) è vecchia di oltre 20 anni e sta mostrando, ora che le sue potenzialità sono state spinte all’estremo dalle recenti architetture, i propri limiti.

Essi sono essenzialmente i seguenti:

* Lunghezza variabile delle istruzioni: ciò comporta una fase di decodifica molto complessa che per compensazione richiede frequenze di lavoro più alte o pipeline più profonde con relativi problemi di predizione delle diramazioni.
* Carenza dei registri: gli indirizzi dei registri nell’architettura x86 sono di soli 3 bit che consentono quindi l’indirizzamento di soli 8 registri di uso generale. I moderni processori hanno cercato di superare questo limite per mezzo di tecniche come la ridenominazione dei registri che aggiungono però ulteriore complessità.
* Floating Point Stack: le istruzioni x87 usano per le proprie operazioni uno stack del quale viene fatto un uso intensivo con spreco di molti cicli per posizionare i dati occorrenti alla sua cima e che costituisce la ragione principale della sostanziale inferiorità delle CPU x86 rispetto le CPU RISC per la computazione floating point.
* Istruzioni che referenziano indirizzi di memoria: con evidenti rallentamenti dovuti alle latenze associate ai chip di memoria in confronto a quelle che caratterizzano i registri interni della CPU (mentre le CPU RISC adottano un modello di memoria Load/Store che prevede le istruzioni operino solo tra registri e gli accessi alla memoria siano espliciti e deputati solo alle istruzioni di load e store).
* Dimensioni del die: i buffer sempre più grandi, sempre più sviluppate tecniche di branch prediction (Intel stima che le penalità di errata predizione delle diramazioni comportino diminuzioni del 20%-30% delle prestazioni dei processori), la decodifica di istruzioni x86 in microistruzioni RISC sono tutti accorgimenti per estrarre grandi prestazioni dalle CPU x86 ma che richiedono molti transistor e quindi molto spazio sui die e quindi aumenti dei costi.

La Intel ha ritenuto che, per assicurare l’incremento delle prestazioni che ha visto la recente storia del mercato dei PC, occorresse cambiare radicalmente il set di istruzioni anche a costo di penalizzare, naturalmente il meno possibile, la compatibilità con l’architettura precedente ma offrendo nel contempo prestazioni con le nuove architetture tali da giustificare un simile passo. La strada scelta da Intel per aumentare le prestazioni è quella di incrementare il parallelismo a livello di istruzioni (ILP).

Le due strade privilegiate sino ad oggi per conseguire questo obbiettivo sono: la superscalarità nella quale il parallelismo non è esplicitamente indicato ma viene estratto mediante scheduling dinamico delle istruzioni in pratica deputando all’hardware tutto il lavoro (figura a sinistra) e la tecnica VLIW (Very Long Instruction Word) secondo la quale le istruzioni contengono esplicite informazioni riguardanti il parallelismo da esplicitare, ad esempio quante e quali istruzioni elaborare parallelamente che il compilatore raggruppa in pacchetti di dimensione fissata (in genere tra 112 e 168 bits inserendo NOP per riempire gli slots vuoti del pacchetto) e invia alle unità esecutive (figura a destra). In questo caso il grosso del lavoro è svolto dal compilatore e l’esecuzione è fissata staticamente al momento della compilazione.

L’approccio usato da Intel e HP è una combinazione delle due per sfruttarne le caratteristiche di dinamicità e staticità di ognuna che è stato chiamato Explicitly Parallel Instruction Computing (EPIC). La filosofia EPIC in sostanza lascia decidere al compilatore quali istruzioni debbano essere eseguite in parallelo, le riunisce in un bundle (fascio) e manda in esecuzione questi bundle. In aggiunta a questo la tecnica EPIC prevede tipiche azioni di controllo e correzione della esecuzione come Prediction oppure Speculation (per dati e istruzioni) che consente il loro caricamento prima della risoluzione delle relative dipendenze per ridurre gli effetti della latenza di memoria.

Le caratteristiche principali di questa architettura sono:

* la possibilità di far collaborare il compilatore e l’hardware in modo che il compilatore possa controllare le risorse hardware in maniera più diretta anche a livello di predizione delle diramazioni o della gestione della gerarchia di memoria. Un tipico esempio di questa collaborazione è la tecnica di Predication che consente ad esempio l’esecuzione in caso di una diramazione IF THEN ELSE di entrambi i THEN e ELSE (che non dipendono uno dall’altro) in parallelo (e quindi con la latenza di uno solo) salvo poi invalidare quello non corretto mediante apposito valore dei flag di Predicate assegnati a ciascuna delle diramazioni all’atto della loro esecuzione;
* il grande numero di registri utilizzabili che, oltre ad una computazione sia di interi che floating point più agevole specie a doppia precisione, fornisce adeguate risorse hardware per funzioni specializzate come la Predication e consente grande flessibilità ed estensibilità circa la superscalarità dei chip basati sul ISA IA-64 (è difficile per un processore x86 gestire un numero elevato di pipeline con solo 8 registri indirizzabili). Inoltre è possibile ridurre gli accessi alla memoria solo alle operazioni load e store sfruttando i registri per i risultati intermedi;
* grande memoria indirizzabile grazie ai registri a 64 bit che consente di superare gli attuali 4 GB dell’architettura IA-32, i cui limiti peraltro non sono ancora stati raggiunti dalle applicazioni attuali ma potrebbero esserlo in futuro, e di supportare numerosi GB di RAM;
MarcoGT non è connesso   Rispondi citando