|
Diamo ora una breve spiegazione della tecnologia HyperThreading.
Tutte le CPU, a livello macroscopico, sono composte da diversi blocchi
che collaborano fra loro per perseguire un dato scopo. Ognuno di questi
blocchi viene mediamente usato "poco". Intel parla di sfruttamento delle
diverse componenti solo al 35% della loro capacità. Dunque ci si
potrebbe chiedere come mai non si riesce a sfruttare la propria CPU al
massimo.
Uno dei problemi è che le CPU integrate nel nostro computer sono adatte
ad usi generici e dunque in grado di svolgere un elevato numero di
compiti. Volendo fare un esempio in contrapposizione, un chip video
dedicato esclusivamente ad accelerare la grafica viene sfruttato molto
di più quando stiamo giocando con percentuali che sfiorano anche l'80%
delle possibilità.
Un altro problema è che la nostra CPU può svolgere un solo "thread" per
volta. Un thread è un insieme di istruzioni necessarie a portare a
termine un certo compito all'interno di un programma più vasto.
A questo punto per poter ottenere uno sfruttamento maggiore della CPU si
potrebbe rendere la CPU maggiormente specializzata per risolvere compiti
specifici, ma questo andrebbe contro le caratteristiche di "general
purpose" dei processori per personal computer. Un'altra strada è
rappresentata dal cercare di eseguire più thread per volta sulla propria
CPU.
La tecnologia HyperThreading di Intel,detta anche simultaneous
multithreading (SMT), si propone di seguire proprio
questa strada. Inviando alla CPU più thread contemporaneamente, le unità
che sono al momento "senza far nulla" dovrebbero prendere in carico il
lavoro e cominciare a svolgerlo.
Le micro-ops (micro operazioni) dei due differenti thread
nell'architettura HyperThreading di Intel, devono essere gestite
separatamente della due unità logiche del processore. Naturalmente le
risorse fisiche, come instruction decoders, cache, registri,
bus, etc., a disposizione delle due CPU logiche devono essere
condivise fra esse. Le eccezioni, invece, devono essere gestite
separatamente per ogni thread; questo implica che tutte le pipeline
devono poter gestire indipendentemente i due processi; per fare questo
occorrono nuovi moduli e dunque altri transistor da aggiungere
all'architettura.
La pipeline di una architettura HyperThreading è diversa da quella di
una normale CPU dato che prevede che alcune unità vengano suddivise in
due, come visibile nella figura seguente:
|