Overleg:Hyper-threading

Laatste reactie: 18 jaar geleden door BE

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)Reageren

Hyper-Threading

bewerken

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

bewerken

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

bewerken

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

bewerken

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
Terugkeren naar de pagina "Hyper-threading".