Come funzionano i processori multi-core

L’aumento della frequenza, della cache o il passaggio dai 32 ai 64 bit non sono più sufficienti. I vantaggi e gli svantaggi delle nuove architetture.

maggio 2007 Nel nostro futuro ci saranno processori con decine e decine
di core? Per quanto possa sembrare sorprendente, si tratta di una prospettiva
molto probabile, e l’attuale scenario di mercato sembra già indicare
che il trend sia stato imboccato con decisione. Sono già in commercio
molti modelli di processore dual-core proposti sia da AMD, sia da Intel, che
ne hanno predisposto versioni per tutti i principali segmenti di mercato (desktop,
server e notebook). Intel è stata poi la prima ad offrire un processore
desktop quad-core, mentre AMD ha per il momento risposto con la sua architettura
Quad FX, che consente di realizzare sistemi desktop quad-core basati su due
processori dual-core, in attesa di lanciare a sua volta un proprio processore
quad-core: quando questo accadrà, la piattaforma Quad FX consentirà
di impiegarne due per realizzare un sistema desktop dotato, complessivamente,
di otto core. È difficile prevedere il ritmo di crescita del numero di
core nei nostri PC, ma è possibile comprendere le forze in gioco: da
un lato difficoltà tecniche frenano questa corsa, dall’altro ci
sono le aspettative dei costruttori.

L’interesse verso i processori multi-core per l’aumento delle
prestazioni è nato principalmente perché, negli ultimi tempi,
era apparso ormai chiaro che le sole strategie classiche - l’aumento del
clock della CPU, il passaggio da 32 a 64 bit, l’aumento della cache integrata
e l’accelerazione delle comunicazioni fra CPU e RAM – non erano
più sufficienti ad assicurare, da sole, una crescita della velocità
di elaborazione paragonabile a quella che è stato possibile mantenere
in passato. Inoltre, l’applicazione di quelle strategie stava diventando
sempre più difficile o inefficace.

Per esempio, nell’ultima fase del ciclo di vita dell’architettura
Pentium 4/Pentium D (la cosiddetta architettura Netburst), gli aumenti di clock
fra una versione e la successiva erano di pochi punti percentuali, con effetto
quasi trascurabile sulle prestazioni, mentre i problemi di dissipazione termica
e le difficoltà di produzione aumentavano rapidamente. Far funzionare
queste CPU senza rischiare il danno da surriscaldamento richiedeva dissipatori
sempre più potenti e sofisticati e la loro produzione stava diventando
troppo difficile e costosa.

Sui portatili era improponibile usare CPU che consumavano potenze che superavano
di slancio i 100W, e questo sia per motivi termici, sia per non ridurre a livelli
insoddisfacenti, per l’eccessivo consumo elettrico, l’autonomia
della batteria.

Dai 32 ai 64 bit
Anche il passaggio da un’architettura a 32 bit a una a 64 bit ha portato
frutti meno significativi di quanto ci si aspettasse.
Da un lato, i sistemi operativi hanno impiegato tempo ad adeguarsi, dall’altro,
le applicazioni hanno dimostrato di non aver bisogno di un gigantesco aumento
della quantità di memoria indirizzabile o di un raddoppio della lunghezza
dei registri della CPU, ma piuttosto di una CPU più veloce e possibilmente
più “libera” da altri compiti concomitanti.

L’aumento della cache integrata nel processore è sempre vantaggioso,
ma il vantaggio prestazionale decresce all’aumentare delle dimensioni.
Infatti, il principio di funzionamento della cache si basa su una semplice considerazione
statistica: un dato (o un’istruzione) utilizzato di recente sarà
probabilmente utilizzato nuovamente fra non molto tempo. Questo principio è
molto ben rispettato dalla maggior parte del software utilizzato sui PC, tanto
che una quantità relativamente modesta di cache memory L2 (anche dell’ordine
di 128-512Kbytes) è sufficiente ad evitare accessi alla memoria nel 90-95%
dei casi. Aumentare la cache L2 in modo esagerato permette di limare il 5-10%
rimanente, ma non può certo assicurare vantaggi eclatanti dato che si
è già vicini all’ottimo.

Infine, la RAM sta attraversando da anni un’evoluzione continua che,
da un lato, obbliga ad aggiornare motherboard e la RAM stessa ad ogni cambio
di PC e mantiene alti i costi dei moduli DIMM, dall’altro produce benefici
modesti dato che un aumento di transfer rate, ossia della velocità alla
quale la RAM fornisce i dati richiesti una volta iniziato il flusso di risposta,
si paga con un proporzionale aumento della latenza, ossia del ritardo con cui
tale risposta può avere inizio; pertanto, i vantaggi effettivi dipendono
fortemente dal tipo di applicazioni. Di certo non ci si deve aspettare che,
a parità di ogni altra condizione, passando semplicemente da un sistema
con memorie DDR a memorie DDR2 o DDR3 si ottenga un raddoppio o un quadruplicamento
delle prestazioni applicative.

Come aumentare le prestazioni?
Quale strada, allora, per aumentare le prestazioni? Lavorare sulla capacità
della CPU di eseguire istruzioni sempre più rapidamente. Per anni alle
CPU sono state applicate tecniche che miravano a replicare i vantaggi dell’impostazione
del lavoro di una catena di montaggio, in cui il lavoro viene decomposto in
una serie di fasi semplici, e quindi di breve durata (CPU superpipelined), oppure
tecniche con le quali si tentava di eseguire in parallelo le attività
non interdipendenti trovate nella sequenza di istruzioni di un programma (CPU
superscalari). Questo ha portato a costruire processori che si sono probabilmente
avvicinati a un’efficienza ottimale nell’esecuzione del codice x86.
Ma il funzionamento dei moderni sistemi operativi è caratterizzato da
un gran numero di attività svolte in parallelo.

Numerosi processi, poi, eseguono operazioni periodiche necessarie per il buon
funzionamento del sistema e delle sue periferiche.
Per avere un’idea di quanti processi ci sono in esecuzione anche in un
momento di assoluta “quiete” apparente del sistema, è sufficiente
aprire il Task Manager di Windows. In definitiva, il processore è conteso
da decine e decine di processi, alcuni dei quali particolarmente pesanti da
eseguire, ai quali la CPU deve ciclicamente “dare retta”: tutto
mentre è in funzione l’applicazione che interessa all’utente,
ossia, in questo esempio, il Web browser.

Una soluzione a questo problema consiste nell’installare più
di una CPU nel PC, in modo tale che il carico lavoro per l’esecuzione
dei programmi venga ripartito fra i processori disponibili. Poiché l’installazione
di CPU multiple fisicamente distinte, ognuna con il proprio socket, il proprio
dissipatore, la propria RAM, etc. complica notevolmente la motherboard e crea
seri problemi di spazio, AMD e Intel hanno puntato sui processori dual-core,
che in un unico involucro racchiudono due CPU complete e vantaggiosamente integrate
tra loro in quanto, a seconda dell’architettura, condividono la cache,
il controller della memoria o il canale d’accesso al bus. Per la motherboard
non cambia sostanzialmente nulla, né dal punto di vista degli ingombri
fisici, né dal punto di vista della logica di funzionamento: al massimo,
può essere richiesto un aggiornamento del firmware.

Il Dual core
I processori AMD della serie X2 e quelli Intel con suffisso Duo seguono questo
approccio. L’Intel Core 2 Duo Extreme QX6700, infine, integra al suo interno
2 die dual-core praticamente uguali a quelli di un Core 2 Duo, per un totale
di 4 core; le due coppie di core dispongono di due banchi di cache totalmente
indipendenti, che comunicano tra loro con il normale Front Side bus, sul quale
devono perciò viaggiare i segnali di controllo di coerenza delle cache.
Si può considerare questa soluzione come una fase provvisoria, in attesa
che sia possibile fabbricare un die monolitico con 4 core e cache condivisa.

Questo è tecnicamente molto più difficile che produrre due die
dual-core ed aggregarli, in quanto la difficoltà produttiva dipende direttamente
dall’area del die. Più è grande il die, più è
statisticamente probabile che su esso vi siano dei transistor difettosi. La
strada per migliorare la resa produttiva consiste nel passare dal processo a
65 nm a quello a 45 nm, che riduce sensibilmente la dimensione del die facilitandone
la produzione.

Inoltre, il processo a 45 nm (e le successive evoluzioni, via via più
miniaturizzate), grazie alla riduzione degli ingombri e dei consumi elettrici
consentirà di alloggiare nell’involucro della CPU un numero ancora
maggiore di core.

Per dare un’idea delle possibilità, la Sun produce già
oggi un processore, l’UltraSparc T1 altrimenti detto “Niagara”,
che contiene 8 core, ognuno dei quali possiede una potenza di calcolo paragonabile
a quella di un processore UltraSparc III, ed implementa inoltre una sorta di
HyperThreading quadruplo anziché doppio, come quello impiegato sui Pentium
4 HT. Un singolo processore Niagara è quindi in grado di gestire direttamente
(senza emulazione né altro supporto da parte del sistema operativo) l’esecuzione
di ben 32 thread simultanei, il massimo per la tecnologia attuale delle workstation.
È già annunciata anche una versione T2 i cui 8 core gestiscono
non più 4, ma 8 thread ognuno.

È verosimile che anche i processori x86 seguano in futuro la stessa
strada: un numero sempre maggiore di core integrati e, probabilmente, un ritorno
della tecnologia HyperThreading per enfatizzare ulteriormente il parallelismo
raggiungibile.
Grazie al massiccio parallelismo che lo caratterizza, un processore multi-core
può evitare di perseguire a tutti i costi l’aumento della frequenza
di lavoro, che può anzi diminuire, compensata da un maggior numero di
unità di esecuzione.

Poiché il consumo elettrico decresce più che linearmente al
decrescere della frequenza, mentre la potenza di calcolo complessiva cresce
linearmente con il numero dei core, un processore dual-core operante a metà
del clock di uno single-core può possedere le stesse prestazioni di calcolo
con un consumo elettrico inferiore.

Il vantaggio è ancor più evidente all’aumentare del numero
dei core, senza contare che è possibile fare in modo che, in condizioni
di basso carico, uno o più core vengano disattivati quasi completamente,
entrando in uno stato a bassissimo consumo elettrico. Quindi i processori multi-core
risultano anche energeticamente efficienti e particolarmente adatti ad applicazioni
in cui conta la durata della batteria (portatili), il silenzio e l’assenza
di ventole (media center) o bassi consumi elettrici e produzione di calore (macchine
server e blade).

E sul fronte delle prestazioni, qual è il beneficio per l’utente
finale? La risposta breve è: dipende, dal tipo di utilizzo che si fa
del PC e dal tipo di applicazioni che si fanno girare. Se il PC viene usato
per eseguire contemporaneamente molte applicazioni “pesanti” l’architettura
multi-core è la piattaforma hardware ottimale.

Questo è vero soprattutto nei server, che per rispondere alle richieste
che arrivano dai client devono mandare in esecuzione dei programmi. Un server
multi-core, fintantochè vi sono core “scarichi”, non subirà
praticamente alcun degrado di prestazioni all’arrivo di una nuova richiesta.
Semplicemente, la assegnerà ad un processore libero senza minimamente
perturbare l’esecuzione concomitante dei programmi che stanno servendo
le richieste arrivate in precedenza. Ma anche in un normale PC da ufficio il
beneficio si percepisce. L’entrata in funzione dell’antivirus mentre
si lavora quasi non si avverte; i programmi partono più in fretta, ed
il tempo di risposta appare in generale più basso. Migliora la latenza
del computer.

Vi sono poi applicazioni che si prestano particolarmente bene all’esecuzione
su hardware multi-core, in quanto i loro algoritmi sono più adatti ad
essere suddivisi in più compiti indipendenti da eseguire in parallelo.
È il caso dei programmi che codificano e decodificano audio e video,
oppure di quelli che eseguono calcoli per grafica tridimensionale. Questi programmi
possono esibire un aumento di prestazioni quasi esattamente proporzionale al
numero dei core.

Viceversa, chi usa il PC per sviluppare software, giocare oppure utilizzare
database noterà vantaggi minori, in quanto compilatori, giochi e database
server si prestano meno bene alla parallelizzazione e non riescono a sfruttare
al massimo la capacità di calcolo della macchina.

Per queste applicazioni che tendenzialmente vengono eseguite da un singolo
core, infatti, conta di più la velocità di quel core rispetto
al numero di core presenti. Sono insomma sensibili ad aspetti più tradizionali
delle caratteristiche di un PC: clock, cache, banda verso la memoria, efficienza
intrinseca di esecuzione della CPU. Non a caso, il top di gamma Intel dual-core,
il Core2 Extreme X6800 dual-core (a 2.93 MHz, con 4 MB di cache), nei giochi
si comporta leggermente meglio del “mostro” Core2 Extreme QX6700
quad-core (a “soli” 2.66 GHz, ma con 4+4 MB di cache).

Questo sia per effetto del clock leggermente più alto, sia per il fatto
che, attualmente, i giochi più curati sotto questo aspetto riescono a
sfruttare adeguatamente non più di 2 core: pertanto, né la capacità
di calcolo aggiuntiva, né la cache della seconda coppia di core possono
essere efficacemente sfruttati.

Nel futuro ci saranno sicuramente processori con un numero di core in aumento
(recentemente Intel ha parlato di processori a 80 core che potrebbero arrivare
entro cinque anni, e ha mostrato un prototipo di questa tecnologia), tuttavia
non ci dobbiamo aspettare che le prestazioni percepite crescano con pari ritmo.

E chi beneficierà maggiormente del multi-core?
Il massimo beneficio prestazionale si avrà sicuramente sui server. I
portatili beneficeranno dei minori consumi elettrici ed offriranno una maggiore
autonomia, mantenendo buone prestazioni. Sulle workstation per grafica 3D, calcolo
scientifico, simulazioni meteorologiche o elaborazione video i vantaggi saranno
evidenti.

Sui desktop da ufficio, invece, il beneficio sarà più incerto,
in particolare sui PC usati come “stazioni di gioco”, nei quali
sarà più sensato investire in una scheda video ultraveloce e in
una CPU ad altissimo clock, anche con minor numero di core. Segnaliamo, infine,
che nel mondo x86 si parla di un’architettura in cui il processore integra
un certo numero di core utilizzabili come processori per l’esecuzione
delle applicazioni (CPU) o come “aiutanti” della scheda grafica
(GPU).

Si potrebbe quindi stabilire di mobilitare parte della capacità di
elaborazione per supportare questo o quel fronte. Questa architettura potrebbe
adattarsi momento per momento al campo d’impiego della macchina e produrre
risultati più equilibrati ed uniformi. Se confermato, ciò potrebbe
concretizzarsi in pochi anni.

CONDIVIDI

LASCIA UN COMMENTO

Please enter your comment!
Please enter your name here