Quote:
Originariamente inviato da valerio86
iin modo più preciso due distinte ALU), ottimizzando alcune esecuzioni.
Spero di averti aiutato...
|
Mica solo la ALU...
Il processore è suddiviso in unità di esecuzione (ALU, FPU, SSE, fetch ed altre)... Ogni unità di esecuzione ha un compito preciso da svolgere in uno o più cicli di clock...
Il problema principale dell'architettura NetBurst (quella di tutti i P4) è che in media la % di unità di esecuzine occupate in ogni stadio è molto bassa...
HyperThreading permette di alzare il livello medio di utilizzo delle unità di calcolo "mescolando" due flussi di codice distinti (due programmi diversi ad esempio, o due thread dello stesso programma)...
In pratica si abbassa la dipendenza fra istruzioni consecutive (molto spesso un'istruzione deve aspettare il risultato di quella precedente per essere eseguita) in modo da allocare i vari stage delle unità di calcolo in maniera quasi ottimale...
Ovviamente non tutte le situazioni di applicazione sono ottimali... Non tutti i programmi multithreaded funzionano bene su HyperThreading... La magior parte delle volte necessitano di ottimizzazioni ad hoc per sfruttare questa caratteristica...