Hyper Threading Technology Di Muddolon Laura introduzione Database sempre più complessi, videogiochi caratterizzati da animazioni realistiche, motori di ricerca capaci di connettere migliaia di siti internet, e streaming media eseguiti in tempo reale, esigono un gran quantitativo di risorse hardware. Intel, per far fronte a richieste hardware così esose, ha sviluppato e proposto una nuova tecnologia: l' Hyper Threading. Cos’ è L’Hyper Threading technology? Pur continuando ad utilizzare l’ attuale architettura Netburst ,tipica dei processori Pentium 4 a 32 bit, l’ Hyper Threading Technology abilita in un solo processore fisico l’esecuzione di due flussi di codice (detti THREADS)in simultanea esttamente nella stessa modalità di esecuzione di un sistema dual processor (due CPU fisiche): In questo modo due applicazoni in esecuzione simultanea vengono gestite in REALE MULTITASKING Ma partiamo dalla differenza tra processi thread e programmi: I programmi sono costituiti da processi; I processi sono indipendenti tra loro e e posseggono dei registri e delle variabili proprie; I “threads” sono “processi leggeri che hanno la caratteristica di condividere le stesse variabili globali per l’ esecuzione di una ben determinata mansione; E inolte... Un processo può essere composto da un solo thread o da più threads; Più threads in un processo possono essere utilizzati per condividere lo stesso job e cooperano per un qualche tipo di attività , mentre processi diversi sono fondamentalmente scorrelati. Thread I thread sono sono processi con con uno stato molto ridotto (quindi “leggeri”)che condividono lo spazio di indirizzamento e tutto ciò che vi è associato, come i descrittori dei file, le variabili di ambiente e i timer. Ogni thread ha però il suo program counter, i suoi registri e la sua stack.Quando un thread si blocca gli altri thread dello stesso processo sono comunque in grado di continuare l’ esecuzione. la seguente figura illustra la differenza tra thread processo e programma Vediemo cosa succede all’ interno della CPU: CICLO FETCH-DECODE-EXECUTE Generalmente un microprocessore calcola un’ istruzione alla volta, attuando una procedura a passi chiamata ciclo FETCH-DECODEEXECUTE Passo 1. Carica un'istruzione dalla memoria, e assegnala al registro delle istruzioni (IR). Passo 2. Cambia il registro speciale "program counter" con l'indirizzo della prossima istruzione. Passo 3. Determina il tipo di istruzione appena caricata nel registro delle istruzioni (IR). Passo 4. L'istruzione utilizza una parola in memoria? In tal caso determina il suo indirizzo. Passo 5. Se necessario, carica la parola residente in memoria in un registro della cpu. Passo 6. Esegui l'istruzione. Passo 7. Torna all'inizio, al 1 passo, ed esegui la prossima istruzione. Più cicli di istruzioni compongono un processo, e quest'ultimo non può essere eseguito nello stesso istante di un altro processo. E' fondamentale capire che l'esecuzione di un processo è unica, e non può avvenire contemporaneamente con un altro processo; Ciò significa, che la cpu in un singolo istante esegue un processo, ma in un arco di tempo maggiore passa da un processo all'altro dando all'utente l'impressione di calcolare più processi contemporaneamente. Tale condizione si chiama "pseudo-parallelismo" e si riferisce al modo in cui la cpu alterna l'elaborazione di più processi. Ma nel caso io avessi a disposizione due o più cpu in grado di calcolare contemporaneamente più cicli di istruzioni, cosa succederebbe? In teoria, potrei raddoppiare la velocità di esecuzione dei programmi, poichè il sistema sarebbe in grado di calcolare due o più processi nello stesso arco di tempo. Quindi, nello stesso istante potrei eseguire il "PROCESSO 1", il "PROCESSO 2" e il "PROCESSO 3". In questo caso saremmo in presenza di un sistema multiprocessore. Il modelo Hypep Threading La tecnologia Hyper-Threading fu realizzata per la prima volta sulle CPU Intel Xeon MP (Foster MP), ed allora era nota con il nome di Jackson Technology. Essa consiste nell'ottenere due processori logici da una CPU fisica singola; Ciò significa, che le due CPU virtuali ottenute dalla divisione delle risorse di un processore singolo, potranno elaborare un maggior quantitativo di istruzioni in parallelo, aumentando notevolmente le prestazioni del sistema hardware. Quando viene utilizzata la funzionalità Hyper threading siamo in presenza di una forma di tecnologia SMT (Simultaneous Multi Threading), e di processori logici, a differenza dei sistemi SMP (Symmetric Multi Processing) caratterizzati da due cpu reali. Naturalmente, non si può dimenticare che per poter sfruttare i due processori "virtuali" bisogna utilizzare un sistema operativo capace di supportarli. Windows 98SE, Windows Millenium Edition, e Windows 2000 Professional non sono stati progettati per poter utilizzare la tecnologia Hyper-Threading, mentre Windows XP (nelle versioni Professional e Home) la supportarno completamente (A tal proprosito vedi tabella B). A quest'ultimi sistemi operativi aggiungiamo Linux, BeOS, Unix e altri ancora. Versioni di Windows. Limite CPU fisiche. Limite CPU logiche. Windows Xp Home edition. 1 2 Windows Xp Professional 2 4 Windows 2003 Standard Server 4 8 Windows 2003 Enterprise Server 8 16 Windows 2003 Datacenter Server 32 32 Putroppo, non basta la compatibilità del sistema operativo con i due o più processori virtuali, ma bisogna che il software utilizzi tale capacità. Quindi, un Word o un Excel sfrutteranno un'unica CPU, e in un sistema dualprocessor le prestazioni non aumenteranno di molto. Ma, il processo di rilevazione della tecnologia Hyper-Threading, come avviene? Durante la fase di "boot" del sistema hardware, il BIOS, determina il numero di processori logici disponibili in quel momento, e registra solo il primo dei due (nel caso il sistema fosse composto da due CPU fisiche, quindi quattro processori logici) nella tabella MPS (Multi-processors Specifications) per garantire la compatibilità con i sistemi "legacy" (x esempio Windows NT). Quest'ultimi rilevano la tabella MPS, e non riconoscono il secondo processore logico, e la tecnologia HyperThreading. Successivamente, il Bios registra nella tabella ACPI (Advanced Configuration Power Interface) le informazioni riguardanti i processori logici presenti, e i sistemi che la utilizzano possono usufruire della tecnologia Hyper-Threading (x esempio Windows Xp professional). COME FUNZIONA L'HYPER THREADING? Il funzionamento dell'Hyper Threading si basa su un principio abbastanza semplice: che, in ogni istante solo una parte delle risorse (unità di esecuzione) di una CPU fisica è utilizzata per l'esecuzione di un programma (o di un thread del programma). Con la nuova tecnologia di Intel le risorse latenti (unità in idle state) vengono coinvolte in un altro processo di un altra applicazione, il tutto in parallelo. In pratica possiamo visualizzarne così il funzionamento : (Colore bianco = unità non operative; Colore rosso = primo processo; Colore giallo = secondo processo) Guardando la figura precedente si può capire che durante l'esecuzione di un processo (processore singolo senza l'implementazione della tecnologia Hyper-Threading), solo il 35% delle unità di esecuzione sono utilizzate dalla CPU (unità rappresentate nella figura con il colore rosso). Nel caso in cui, il processore utilizzi la tecnologia HyperThreading, le unità di esecuzione "libere" sono occupate da un secondo processo (rappresentato con il colore giallo), con un ottimizzazione di circa il +30%. Cosa accade se il nostro sistema è composto da più processori fisici? Analizziamo il caso di un architettura superscalare dualprocessor proposto dalla figura qui accanto, e il caso mostrato dalla figuraseguente, di un architettura analoga, ma con in più la presenza della tecnologia Hyper-Threading. Come potete osservare nella prima figura, il processore 1 si occupa dell'esecuzione di un thread (di colore rosso), mentre il processore 2 stà eseguendo un altro thread (di colore giallo). In questa situazione la quantità massima di risorse disponibili per l'esecuzione dei processi è uguale a 6 per ogni ciclo di clock ( 3 per ogni processore). Purtroppo, i due processori fisici non raggiungeranno mai, o solo in pochi casi, il picco massimo di risorse in esecuzione. Questa figura dimostra come una CPU fisica possa elaborare contemporaneamente due processi (rosso, e giallo) con l'adozione della tecnologia HyperThreading, mentre l'altra CPU esegue parallelamente altri due processi (verde, e blu). Si può notare che vi è una differenza sostanziale nell'occupazione dell'unità di esecuzione disponibili (tra modalità H.T e non H.T.), e che il sistema raggiunge più volte il picco massimo di occupazione delle risorse disponibili. Tutto ciò è possibile grazie all'adozione di due CPU logiche per ogni CPU fisica: praticamente ogni CPU fisica viene divisa in due unità virtuali. Nell'esempio descritto dalla figura, una cpu logica si occupa di elaborare il primo processo, la seconda cpu logica esegue il secondo processo. Contemporaneamente, la seconda CPU fisica viene divisa in due CPU logiche in grado di gestire il terzo e il quarto processo. Così, un processore fisico diventa due CPU logiche (due stati architetturali), in grado di condividere alcune risorse fisiche di una cpu fisica (cache, registri ecc), e in grado di elaborare le istruzioni in parallelo. La condivisione delle risorse può essere di tipo dinamico, o di tipo statico: nel primo caso, la ripartizione può avvenire in base alla necessità, mentre nel secondo caso, si assiste ad una netta divisione delle risorse. LE MODALITA' DI ESECUZIONE DELLA CPU HYPERTHREADING per ottimizzare l'utilizzo delle risorse, il processore H.T. (Hyper-Threading) dispone di ben quattro modalità di esecuzione: 1) Modalità ST0. In questa modalità solo il processore logico ST0 è attivo, e utilizza completamente le risorse disponibili. L'altra CPU logica è disabilitata dall'istruzione HALT. 2) Modalità ST1. In questa modalità solo il processore logico ST1 è attivo, e utilizza completamente le risorse disponibili. L'altra CPU logica è disabilitata dall'istruzione HALT. 3) Modalità MT. Quando un applicazione richiede l'esecuzione alla seconda CPU logica (con una richiesta o interrupt), quest'ultima diventa subito operativa, e la CPU fisica cambia la modalità di esecuzione in MT (multithreading) utilizzando sia la CPU ST0, che quella ST1. 4) Modalità Lower Power (L.P). In questa modalità tutti e due i processori logici vengono posti in "idle" dall'istruzione HALT, e il sistema entra in modalità Lower Power. NB: la somma delle due CPU logiche ST0 e ST1 costituiscono insieme la vostra CPU fisica. L'Hyper Threading è simile alla tecnologia complementare SMP (Symmetric Multi Processing), ma le risorse disponibili di una CPU fisica, sono fruibili contemporaneamente dai due processori logici; Così le prestazioni del sistema H.T. non saranno mai uguali a quelle ottenute con un sistema dual o multi-processore, poichè in quest'ultimi casi, ogni CPU ha una quantità di risorse fruibili ben maggiori L'abilitazione della tecnologia H.T. in un sistema SMP (due processori ) può aumentare le prestazioni complessive del PC (come evidenziato da alcuni benchmark). Infatti a rigor di logica, la tecnologia Hyper-Threading non ottimizza solo le prestazioni dei sistemi "single-processor", ma può essere utilizzata anche per incrementare le prestazioni dei sistemi multi-processore (SMP). Tutto questo quanto costa in termini di dimensioni del core? La dimensione del core della CPU aumenta di circa il 5% con l'implementazione della tecnologia Hyper-Threading: per far procedere indipendentemente in parallelo i processi, le pipeline devono essere in grado di gestirli separatamente, e per far ciò all'interno del core della CPU devono essere aggiunti nuovi transistors. Come cambia l'architettura Netburst con l'utilizzo della tecnologia HyperThreading? Con l'utilizzo della tecnologia Hyper-Threading alcune unità dell' in order front end vengono condivise dai due processori logici, è il caso della Trace Cache, del Microcode ROM, del BTB, e del IA-32 Instruction Decoder; Altre unità vengono duplicate, come l'IA-32 Instruction TLB, e il BTB. Nella fase "out-of-order Execution logic" le unità Allocator e Rename logic sono duplicate, vi sono due RAT (Register Alias Table), una per ognuno dei processori logici. Dopo l'allocazione (unità Allocator), e l'operazione di reindirizzamento (unità Rename logic) fisico, i processi vengono posti nelle Uop Queues partizionate opportunamente per ognuno dei due processori logic Inoltre.... Lo scheduler è condiviso tra i processori logici, ed è l'unità che invia alla unità di calcolo (fase di esecuzione) le micro operazioni quando tutti i dati richiesti sono disponibili, e soprattutto quando le unità di esecuzione sono libere. Durante la fase di esecuzione le unità di calcolo vere e proprie sono condivise dalle due CPU virtuali. Infine, nell'ultima fase retirement le risorse disponibili sono condivise dai processori logici. In definitiva.... Il concetto di base dell'Hyper Threading è l'elaborazione indipendente di due processi all'interno delle pipeline, ottimizzando l'utilizzo delle risorse, e aumentando le prestazioni complessive del sistema. QUALI PIATTAFORME SUPPORTANO LA TECNOLOGIA HYPERTHREADING? Quasi tutti i Chipset Intel disponibili attualmente nel mercato supportano la tecnologia HyperThreading di Intel. Chipset Caratteristiche 850E Supporto memorie RDRAM PC 1066 845GE Scheda video integrata Intel Extreme Graphics, e supporto memorie DDR 333/266 845PE Supporto memorie DDR 333/266 845GV Scheda video integrata Intel Extreme Graphics 845G Supporto memorie DDR 266. 845E Supporto memorie DDR 200/266 E7205 Supporto memorie DDR E7501 Supporto memorie E7505 Supporto memorie E7500 Supporto memorie via Al momento, l'unico Chipset VIA in grado di supportare la tecnologia Hyper-Threading è il VIA Apollo P4X400 (Northbridge P4X400, Southbridge VT8235) con supporto delle memorie DDR a 400 Mhz. SIS Anche SIS Technology supporta con i suoi Chipset la nuova tecnologia Hyper-Threading e la seguente tabella vi mostra quali fra quelli attuali. SIS Chip set 655 R65 8 648 645 DX 651 M65 0 Versi one del Chip set B B B B B B Hyp er Thre adin g SI SI SI SI SI SI