Overleg:Hyper-threading

message: Dit verhaal klopt niet. Het beschrijft een soort superscalaire architectuur (iets dat al een dikke 10 jaar bestaat). Het tegelijk uitvoeren van twee instructies binnen 1 task kan al sinds de Pentium 1.
Het is ook niet zo dat er bij Hyper-Threading meer rekeneenheden zijn (dus dat er een "X1 en X2 onderdeel" is). Wat is HTT dan wel? Hieronder een poging tot een betere uitleg.
—Boudewijn 19 aug 2005 00:09 (CEST)

message: De Hyper-Threading Technologie (HTT) is een technologie van Intel die er in een aantal gevallen voor zorgt dat instructies van twee verschillende threads tegelijk worden uitgevoerd.
Een gewone CPU voert steeds 1 task tegelijk uit. Een superscalaire CPU (zoals elke moderne CPU sinds de Pentium 1) zal de reeks instructies zoveel mogelijk naast elkaar plaatsen. Als een vermenigvuldiging en een optelling elkaar niet in de weg zitten dan worden ze tegelijk uitgevoerd. Alleen werkt dit lang niet altijd.
Als een task steeds dezelfde instructie X uitvoert dan blokkeert de hele CPU, terwijl een andere rekeneenheid Y helemaal niet gebruikt wordt.
Hyper-Threading lost dat op door twee tasks naast elkaar te leggen. Er komen geen extra rekeneenheden, maar de bestaande rekeneenheden worden beter benut door instructies slimmer samen te vlechten.
Voorbeelden:
=== Superscalair: Ideaal ===
Twee tasks die beide X,Y,X,Y willen uitvoeren. Een superscalaire CPU zal X en Y naast elkaar plaatsen:
 	Task 1	Task 2
1	X, Y  	
2	X, Y  	
3	      	X, Y
4	      	X, Y
In dit geval zou Hyper-Threading geen enkele winst behalen. Zowel X als Y zijn tijdens elke klokcycle in gebruik.
=== Superscalair: Niet ideaal ===
Task 1 wil X,X,X,X uitvoeren en Task 2 wil Y,Y,Y,Y uitvoeren.
Eerst wordt Task 1 uitgevoerd en staat de Y-rekeneenheid 4 cycles lang uit z'n neus te vreten. Dan volgt er een task switch. Task 2 wordt uitgevoerd en nu staat de X-eenheid 4 cycles lang niks te doen.
 	Task 1	Task 2
1	X     	
2	X     	
3	X     	
4	X     	
5	      	Y
6	      	Y
7	      	Y
8	      	Y
=== Hyper-Threading ===
Kijk naar twee tasks tegelijk. Terwijl Task 1 met een X-instructie bezig is kan Task 2 een Y-instructie doen. In dit (ideale) geval heb je 100% snelheidswinst.
 	Task 1	Task 2
1	X     	Y
2	X     	Y
3	X     	Y
4	X     	Y
thread_title:  Hyper-Threading 

message: Twee tasks die beide X,Y,X,Y willen uitvoeren. Een superscalaire CPU zal X en Y naast elkaar plaatsen:
 	Task 1	Task 2
1	X, Y  	
2	X, Y  	
3	      	X, Y
4	      	X, Y
In dit geval zou Hyper-Threading geen enkele winst behalen. Zowel X als Y zijn tijdens elke klokcycle in gebruik.
thread_title:  Superscalair: Ideaal 

message: Task 1 wil X,X,X,X uitvoeren en Task 2 wil Y,Y,Y,Y uitvoeren.
Eerst wordt Task 1 uitgevoerd en staat de Y-rekeneenheid 4 cycles lang uit z'n neus te vreten. Dan volgt er een task switch. Task 2 wordt uitgevoerd en nu staat de X-eenheid 4 cycles lang niks te doen.
 	Task 1	Task 2
1	X     	
2	X     	
3	X     	
4	X     	
5	      	Y
6	      	Y
7	      	Y
8	      	Y
thread_title:  Superscalair: Niet ideaal 

message: Kijk naar twee tasks tegelijk. Terwijl Task 1 met een X-instructie bezig is kan Task 2 een Y-instructie doen. In dit (ideale) geval heb je 100% snelheidswinst.
 	Task 1	Task 2
1	X     	Y
2	X     	Y
3	X     	Y
4	X     	Y
thread_title:  Hyper-Threading