Così funziona la scheda grafica

I fattori che influenzano le performance della video card. Il ruolo del bus e della GPU.

giugno 2007 A seguito dell’arrivo di Windows Vista e della sua
spettacolare interfaccia Aero, la scheda grafica si trova a ricoprire un ruolo
di primo piano. E grande importanza riveste anche il tipo di bus che utilizza.

La potenza di una scheda video, infatti, dipende dai seguenti fattori che
si possono così riassumere:
• Tipo, velocità e livello di parallelismo interno del processore
grafico
• Quantità e velocità della memoria video dedicata e larghezza
di banda del canale di comunicazione per accedervi
• Larghezza di banda del bus di sistema su cui la scheda grafica si attesta.

Le schede grafiche più economiche sono prive di memoria video dedicata
e fanno uso di una porzione della RAM di sistema, che viene sottratta alla disponibilità
di Windows e delle applicazioni (si parla di memoria video condivisa). Si tratta
di una soluzione che degrada le prestazioni e che è giustificabile soltanto
su sistemi nei quali la riduzione dei costi conta più della potenza grafica:
per esempio, macchine entry level oppure PC da ufficio.

Nelle schede grafiche di questo tipo il processore grafico deve comporre l’immagine
scrivendo su un banco di memoria che non è locale alla scheda grafica,
ma fa parte della RAM di sistema e deve quindi essere raggiunto passando per
il bus di sistema, attraversando il southbridge e il northbridge.

Inoltre, il RAMDAC, il componente che si occupa di leggere la memoria video
per generare il segnale VGA o DVI da inviare al monitor, deve comunicare con
lo stesso banco di memoria, rileggendo gli stessi dati in senso inverso. In
conclusione, per risparmiare qualche decina di euro di RAM si finisce con il
sovraccaricare il bus di sistema, costringendo i componenti ad un lavoro eccessivo
a causa di un’architettura illogica. In ogni caso, perfino in questa configurazione
la velocità del bus di sistema (che va attraversato ben due volte, prima
per comporre l’immagine e poi per generare il segnale video a partire
da essa) è fondamentale per ottenere prestazioni dignitose.

Anche nei sistemi grafici ad alte prestazioni, però, il bus di sistema
deve essere veloce. Infatti, anche se la RAM della scheda video risiede a bordo
della scheda stessa e, quindi, il bus di sistema non è più interessato
dal traffico sopra descritto, vi sono ancora operazioni che lo coinvolgono e
che richiedono una banda il più possibile ampia.

Per esempio, nei giochi dalla grafica più curata e più spettacolare,
la scena è formata da un gran numero di personaggi ed oggetti caratterizzati
da superfici completamente diverse (dalla pelle agli abiti, dal legno alle pareti
in muratura, dai pannelli metallici ai pavimenti di ogni tipo), per il cui disegno
il processore grafico effettua un processo in due fasi: prima approssima l’andamento
delle superfici con un modello composto di innumerevoli piccoli poligoni o triangoli,
poi cerca in un repertorio di textures il tipo di “rivestimento”
da applicare, e con esso effettua il vero e proprio “riempimento”
(campitura) delle superfici. In questo processo è un po’ come se
le textures fossero campioni di carta da parati di vari colori con cui rivestire
un’armatura in filo di ferro (wireframe) che approssima la sagoma del
soggetto da disegnare.

È chiaro che se le superfici sono tante e di tanti tipi diversi, occorre
un ampio repertorio di textures. Inoltre, se si lavora con superfici molto più
grandi della texture, questa dovrà ovviamente essere disegnata più
volte fino a “tappezzare” completamente l’oggetto. Questo
potrebbe causare un evidente effetto di ripetizione (si pensi ad un muro che
viene disegnato usando una piccola texture a mattoni in cui, per renderla più
realistica, è stata disegnata una imperfezione o una scrostatura: questo
particolare sarebbe ripetuto ad intervalli regolari e si noterebbe immediatamente).
La soluzione per attenuare questo problema è utilizzare texture di grandi
dimensioni.

Chiarito che per questo genere di applicazioni occorre avere a disposizione
molte texture di grandi dimensioni, risulta immediatamente chiaro che occorre
avere molta memoria ed un velocissimo canale di comunicazione con la CPU. Infatti,
le texture non sono altro che grosse immagini disegnate con grande accuratezza,
e le immagini occupano molta memoria. Normalmente, se la scheda video dispone
di molta memoria locale, si farà in modo di parcheggiare a bordo di essa
un repertorio di textures il più possibile vasto in modo tale che, per
usarle, non sia necessario passare dal bus di sistema.

Tuttavia, anche solo per la popolazione iniziale rimane la necessità
di far arrivare alla scheda video queste textures, che si trovano sul CD del
gioco o sull’hard disk. La strada da percorrere per questo trasferimento
è ovviamente il bus di sistema. La quantità di textures che possono
essere usate in un gioco di ultima generazione può facilmente superare
la quantità di memoria video a disposizione della scheda.

Questo significa che, durante l’esecuzione del gioco, la CPU di sistema
dovrà trasmettere alla scheda video le texture che le servono, e poiché
non è facile o possibile prevedere in anticipo quali texture serviranno,
perché ciò dipende dal percorso seguito dal giocatore, dalle sue
azioni e dalla direzione verso cui volge lo sguardo, il trasferimento alla scheda
video delle texture mancanti dovrà avvenire nel momento stesso in cui
il gioco si accorge che servono per comporre la scena. In altre parole, in pochi
millisecondi si dovrà riuscire a trasferire diversi megabyte di materiale
grafico dalla RAM di sistema alla scheda video, passando per il bus di sistema.

Sempre per il bus di sistema viaggiano poi gli ordini che il programma principale
impartisce alla scheda video: come comporre la scena, come generare le ombre,
quali texture usare, quali elaborazioni tridimensionali applicare, quale illuminazione
adottare, e così via. Solo le informazioni sulla costruzione della scena
sono costituite da liste di coordinate dei vertici di migliaia o milioni di
piccoli triangoli o poligoni che costituiscono il reticolo tridimensionale che
approssima la sagoma degli oggetti, su cui andrà poi applicata la texture
appropriata per ognuno.

Se per ogni triangolo devono essere fornite le coordinate tridimensionali precise
dei tre vertici, ogni triangolo richiede l’invio di 3×3=9 numeri floating
point, ognuno dei quali richiede diversi byte. “Inviare la descrizione
della scena”, quindi, tradotto in numeri, significa “megabyte e
megabyte al secondo” di dati da trasferire, passando per il bus di sistema.

Infine la scheda video, o più precisamente il suo processore grafico
(Graphics Processor Unit, GPU), è rapida nell’esecuzione dei compiti
su cui è specializzata ma deve essere costantemente istruita sul da farsi,
e questo spetta al programma principale che gira sul processore principale del
PC (Central Processing Unit, CPU). Il canale di comunicazione fra CPU e GPU,
su cui devono viaggiare tutte queste informazioni, è naturalmente, ancora
una volta, il bus di sistema.

Per tutti i motivi citati risulterà ora chiaro come mai il bus di sistema
usato dalla scheda video abbia tanta rilevanza per l’aumento delle prestazioni,
e perché negli anni si siano succeduti così tanti tipi di bus
sempre più veloci, specializzati per le schede grafiche: se un normale
bus PCI (banda di 133 Mbyte/s) è sicuramente sufficiente per le esigenze
di un controller USB, questo non è vero per una scheda grafica.

Ecco perché negli anni sono statiproposti bus accelerati, in tre “dinastie”
principali: AGP, PCI-X e PCI Express (all’epoca dei PC 486 esisteva anche
un altro bus grafico denominato VESA Local Bus o VL-Bus, tramontato già
con l’introduzione dei Pentium ed oggi completamente in disuso).

Ricordiamo che la larghezza di banda che un bus può assicurare dipende
da due semplici fattori: la larghezza del canale, in bit, e la frequenza alla
quale vengono trasferiti i dati su questo canale. Moltiplicando questi due valori
si ottiene la banda. Si può paragonare il flusso di dati su un bus alla
portata d’acqua in un fiume, che dipende dalla sezione (larghezza e profondità)
e dalla velocità della corrente d’acqua.

Per esempio, un canale largo 8 bit che lavora a 1 MHz effettua 1 milione di
trasferimenti da 8 bit ogni secondo. In altre parole, la sua banda è
di 1 Megabyte/secondo. Per aumentare la sua banda si può costruire un
canale più largo a parità di frequenza, oppure aumentare la frequenza
a parità di larghezza di canale, o entrambe le cose. Come vedremo, le
strategie seguite finora sono state diverse.

La prima famiglia, AGP, fece la sua comparsa nel 1997. Adottava una larghezza
di canale a 32 bit come quella del normale bus PCI, ma lavorava a frequenze
più elevate con uso di ulteriori tecniche per aumentare la frequenza
efficace. Nel bus AGP 1x, per esempio, la frequenza era di 66 MHz, il doppio
del PCI, e la banda era anch’essa doppia: 266 Mbyte/s. Le successive evoluzioni
di AGP hanno mantenuto la larghezza di canale a 32 bit, ma hanno aumentato la
frequenza efficace mediante tecniche come dual-pumping o quad-pumping.

Sono nati così gli standard AGP 2x, AGP 4x e AGP 8x (figura 1_AGP8x.jpg),
capaci di assicurare, rispettivamente, bande massime di 533, 1.066 e 2.133 Mbyte/s.
Lavorando a frequenze così elevate questi bus andavano incontro anche
a problemi elettrici, che è stato possibile attenuare riducendo progressivamente
la tensione di lavoro: se l’AGP 1x funzionava a 3.3V, l’AGP 8x usava
tensioni di soli 0.8V.

La seconda soluzione tentata per assicurare alte prestazioni sul bus è
stata il PCI-X, introdotto nel 1998, in piena era AGP, come tecnologia di bus
alternativa al PCI. Il suo scopo, quindi, non si limitava all’accelerazione
delle schede grafiche, ma consisteva in un aggiornamento dell’intero bus
di sistema, per qualsiasi uso. Questo bus ricorreva sia ad un allargamento del
canale (lavorava infatti a 64 bit), sia ad un aumento della frequenza (133 MHz).
La sua banda di 1.066 Mbyte/s equivaleva a quella di un bus AGP 4x. Il PCI-X
non è riuscito ad imporsi come standard generale per il bus nell’architettura
PC, forse perché per le schede grafiche o di futura realizzazione non
appariva comunque sufficientemente potente, mentre le periferiche PCI meno “esigenti”
non ne avevano bisogno.

La terza famiglia, che oggi sembra avere definitivamente preso piede nell’architettura
PC tanto da essere stata incorporata anche nel nuovo standard ExpressCard per
le schede di espansione dei PC portatili, è quella del PCI-Express, o
PCIe, da non confondere naturalmente con PCI-X.

Il PCI Express adotta un approccio originale rispetto alle strategie seguite
finora per aumentare la banda del bus: la larghezza di canale si riduce a 1
bit soltanto, mentre la frequenza sale vertiginosamente, a ben 2500 MHz. Si
tratta quindi di un bus seriale (fra l’altro con un connettore piccolissimo,
solo 18 pin, dal momento che vi è un’unica linea dati e, quindi,
un basso numero di contatti), che trasferisce 250 Mbyte/s (a causa della codifica
usata per assicurare l’integrità dei dati, occorrono 10 cicli di
clock per trasferire 8 bit).

Questo valore può apparire deludente se confrontato con quelli che
caratterizzano le ultime evoluzioni di AGP e lo stesso PCI-X, e in effetti lo
sarebbe, se non si tenesse conto di una fondamentale caratteristica prevista
dallo standard PCI-Express: quella di aggregare un certo numero di canali seriali
elementari PCIe per ottenere una banda complessiva superiore.

In quest’ottica, un bus PCIe elementare è detto PCIe 1x, mentre
le versioni “aggregate” si chiamano PCIe x4, x8 e x16, ed assicurano
rispettivamente una banda complessiva di 1Gbyte/s, 2 Gbyte/s e 4 Gbyte/s. Da
non sottovalutare poi il fatto che il bus PCIe nelle sue versioni aggregate
consente alle varie periferiche di utilizzare contemporaneamente, e in modo
indipendente, piccole “quote” della banda complessivamente disponibile,
semplicemente usando una “corsia” del bus aggregato. La flessibilità
assicurata da questa possibilità di utilizzo concorrente del bus è
propria della natura di bus multipli seriali aggregati del PCIe e costituisce,
al di là dell’elevato valore di banda, una novità architetturale
di grande importanza.

LASCIA UN COMMENTO

Inserisci il tuo commento
Inserisci il tuo nome