Visualizza messaggio singolo
Vecchio 28-11-2007, 18.34.25   #6 (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...

La latenza di memoria continua ad essere una delle grandi sfide dei moderni processori e anche in questo campo le novità riguardano essenzialmente le possibilità offerte dalla integrazione.
Prestando particolare attenzione come detto alle applicazioni multimediali che fanno grande uso della computazione intensiva per floating point si è andato affermando negli ultimi anni la tendenza ad estendere il parallelismo ai dati di questa natura per processare un numero maggiore di elementi in minore tempo. Questa tecnica, adottata dalle isctruzioni MMX, 3DNow!, SSE e SSE2 è conosciuta come Single Instruction Multiple Data (SIMD) e si esplicita per mezzo della estensione del set di istruzioni dei processori con apposite istruzioni. Per quanto riguarda questo ultimo aspetto abbiamo implicazioni anche per quanto riguarda l’evoluzione tecnologica dato che ha consentito l’integrazione di apposite unità esecutive dedicate a queste operazioni e ricadute sulla gestione della latenza di memoria dato che questi set di istruzioni prevedono generalmente istruzioni di gestione delle cache.

Nel corso di questi anni i maggiori produttori hanno messo a punto processi tecnologici a 0.13 e ora a 0.09 micron a 6 livelli di metallizzazione con connessioni in rame o alluminio che avranno come effetti principali:

# Riduzione delle dimensioni dei chip a parità di densità di transistori e quindi dei costi di produzione oppure incremento del numero dei transistori a parità di dimensioni del chip e quindi più unità funzionali oppure una combinazione delle due opzioni;
# Riduzione delle tensioni di alimentazione dei core e quindi della potenza assorbita;
# Incremento delle frequenze di lavoro dei processori (ciò che dicevo prima a proposito di Intel).

Mentre gli ultimi due effetti hanno immediate e ovvie ricadute sulle prestazioni complessive di un processore, la possibilità di integrare un numero maggiore di transistor può essere variamente sfruttata. Innanzitutto la possibilità di integrare più unità funzionali consente una maggiore superscalarità e la specializzazione di unità per specifiche applicazioni. Inoltre esiste la possibilità di dotare di un numero maggiore di buffer le unità dedicate al riordino o al temporaneo stoccaggio delle istruzioni per l’esecuzione fuori ordine o di incrementare le dimensioni delle Branch History Table per consentire accurate predizioni delle diramazioni che supportino adeguatamente le pipeline sempre più profonde.

L’aspetto di sicuro maggiore impatto sulla latenza di memoria è però la possibilità sia di incrementare le dimensioni della cache di primo livello (si è giunti ad avere 128 KB di cache L1) che di integrare la cache di secondo livello direttamente su chip. Questa soluzione comporta una maggiore banda a disposizione e una riduzione dei costi complessivi ed è la caratteristica saliente delle versioni dei processori di questi ultimi anni. Di questi aspetti si avvantaggiano soprattutto le architetture x86 dato che necessitano mediamente di un 40% in più di cache istruzioni o magari di precoded cache per la decodificazione delle istruzioni x86 e la sempre maggiore quantità di cache a disposizione ha contribuito notevolmente a colmare il gap di cui godevano nella computazione su interi rispetto i processori RISC.
Di fatto le cache L2 on chip occupano già adesso gran parte del die, anche fino al 90% in alcuni processori. Su alcune CPU di fascia alta (P4 Xeon) ci sono già cache di terzo livello (L3-cache).

PARALLELISMO DEI DATI

Gli algoritmi utilizzati nelle applicazioni multimedia e DSP (Digital Signal Processing) prevedono sostanzialmente l’applicazione della medesima operazione ad un grande numero di dati del medesimo tipo. Un tipico esempio può essere l’inversione di una immagine RGB per determinarne il negativo oppure la riproduzione del movimento in una scena 3D. Il modo migliore di trattare dati di tale natura consiste nel raggrupparne un certo numero all’interno di un vettore e operare su di esso piuttosto che operare sui singoli dati (un dato alla volta) per analogia definiti scalari.

La tecnica che sottende a questo procedimento è conosciuta come SIMD ed è diventata una delle parole chiave dei processori di recente realizzazione che la applicano a dati floating point che sono i più coinvolti nelle applicazioni multimediali. A questa scelta, ancora una volta, sono giunti sia processori nativi CISC che RISC sebbene l’introduzione di nuove istruzioni e di nuove unità a livello hardware non appartenga certo al canone RISC. Le scelte che differenziano l’implementazione di tale tecnica riguardano essenzialmente l’introduzione di appositi registri o, analogamente a quanto fatto a suo tempo da Intel con la tecnologia MMX su interi, la condivisione di registri esistenti.

Altre differenze riguardano il numero e le modalità di operazione delle unità dedicate alla esecuzione delle istruzioni SIMD. Vantaggi derivanti dalle tecniche SIMD sono ad esempio quelli del supporto dell’aritmetica di saturazione: se utilizzo la classica aritmetica di arrotondamento quando, ad esempio in un procedimento di incremento di colore, giungo al limite di rappresentazione di un dato un ulteriore incremento determina un overflow con il numero che raggiunge erroneamente il limite opposto. Quando io sommo invece ad esempio due valori a 32 bit che raggiungono un valore che eccede i limiti di rappresentazione avrei semplicemente bisogno di indicare che ho raggiunto il valore massimo rappresentabile. Questo è un evento particolarmente frequente in applicazioni multimediali (ad esempio nei valori di colore dei pixel) e l’aritmetica di saturazione serve appunto a questo.

FRONT-END e BACK-END

oncettualmente ogni processore può essere suddiviso in due blocchi principali. Il primo si occupa di prelevare le istruzioni dalla gerarchia di memoria e di predisporle alla esecuzione. Questo significa che le istruzioni devono essere decodificate (mediante suddivisione in microistruzioni o decodifica hardware) per renderle "comprensibili" dalle unità di esecuzione e quindi distribuite ognuna alla propria unità di esecuzione. Questo blocco è conosciuto come il Front End del processore. Naturalmente quante più istruzioni esso riesce a inviare alle unità di esecuzione tanto più è efficiente. Importante per questo stadio è la comunicazione con la gerarchia di memoria (quindi le modalità e la velocità con cui essa opera) per rifornire continuamente di istruzioni il Front End, e la predizione delle diramazioni che cerca di impedire che la pipeline del processore abbia stadi che non eseguono alcuna operazione in attesa che sia noto l’esito della condizione di diramazione.

Il secondo stadio del processore è quello che esegue effettivamente il "lavoro" cioè esegue le istruzioni e fornisce i risultati. Questo stadio è chiamato Back End. L’efficienza di questo stadio è fortemente condizionata dal numero di unità di esecuzione di cui dispone (per cominciare l’esecuzione di più di una istruzione per ciclo) e dal tempo di cui necessita ciascuna unità per processare una istruzione. I processori moderni fanno uso dell’esecuzione fuori ordine proprio per fare fronte alla carenza di risorse (registri, unità di esecuzione) di cui generalmente soffrono.

Questi due stadi influenzano reciprocamente le proprie prestazioni. Un Back End che esegue un elevato numero di istruzioni per clock deve essere continuamente rifornito di nuove istruzioni dal Front End da elaborare per non essere sottoutilizzato. Analogamente per facilitare il lavoro di distribuzione delle istruzioni alle unità di esecuzione del Front End le istruzioni devono essere eseguite efficacemente per liberare le risorse che questi deve alimentare e dirimere le diramazioni. Non è un caso se un processore come l’Athlon, che è dotato ad oggi probabilmente del più efficace Back End del mercato x86, sia stato fornito anche del Front End con il maggior numero, effettivo, di istruzioni decodificate per clock. Analogamente l’Itanium che, grazie alla definizione di una nuova architettura, riesce a decodificare e inviare alle unità di esecuzione ben 6 istruzioni per ciclo è stato dotato di massicce risorse di esecuzione. Un processore che non rispettasse questo principio di bilanciamento sarebbe destinato all’insuccesso.
MarcoGT non è connesso   Rispondi citando