Hlavní stránka Hardware Procesory, paměti Hyper-Threading detailně
Hyper-Threading detailně
autor: Orel Petr , publikováno 22.11.2002
Hyper-Threading detailně
Původně měl název tohoto článku znít "Hyper nebo Hype?" jako reakce na uvedení nového procesoru Pentium 4 na frekvenci 3.06 GHz. Přestože všichni oslavují Hyper-Threading jako převratnou a skvělou technologii, já bych v tak pozitivním hodnocení byl o něco opatrnější. Při bližším pohledu na celou věc a pochopení základních principů zpracování instrukcí uvnitř procesoru je totiž zcela zřejmé, že i zde jsou určitá problémová místa. Chcete-li vědět, co je Hyper-Threading, které programy z něj mohou profitovat, ale i na co byste si měli dát pozor, neměl by vám tento článek uniknout. {mospagebreak title=Instrukce a thready}

Instrukční sady

Protože pro pochopení principu technologie Hyper-Threading je nezbytně nutné vědět, jak zhruba pracuje moderní procesor, začnu právě touto problematikou.

Procesor je v zásadě hloupé zařízení, které neumí nic jiného než počítat, případně provádět jiné specifické úkoly jako hlásit svojí teplotu atp. Protože jeho reprezentace v inteligenčním kvocientu (IQ) by byla zhruba kolem nuly, je procesor tak hloupý a nemyslící, že pro něj musí existovat přesně definované příkazy. Těmto příkazům se říká sada instrukcí a v případě procesorů pro platformu PC (Intel) jich dnes existuje hned několik. Ta základní se nazývá x86 a jsou to instrukce pro výpočet celých čísel. První procesory podporovaly pouze tuto instrukční sadu.

Protože sada x86 nepodporuje práci s desetinnými čísly, bylo brzy nutné přidat další sadu instrukcí. Tou sadou byla x87. Hlavním důvodem jejího přidání nebylo ani tak to, že by nešlo počítat s desetinnými čísly - operace šly emulovat na celých číslech a tak to dokonce dělal i například programovací jazyk Pascal - nýbrž fakt, že specifické instrukce a pro ně optimalizované části procesoru (matematický koprocesor) dokázaly tyto operace provádět mnohem rychleji.

Hyper-Threading detailně
jeden z oficiálních obrázků k tématu Hyper-Threading

Pomineme-li rozšíření sady x86 o operace s 32 bit čísly (zavedeno s procesorem 386), bylo dalším posunem vpřed zavedení SIMD operací. Zkratka SIMD znamená Single Instruction - Multiple Data (jedna instrukce - více dat). Běžné instrukce x86 a x87 jsou schopny pomocí jedné instrukce spočítat pouze jednu informaci (data). Data se načtou do paměti zvané register (značené EAX, EBX...) a poté se provede operace, která tyto data změní. Do jednoho registru je možné nahrát pouze jednu informaci (jedno číslo), proto i provedená operace upravuje pouze toto jedno číslo. SIMD operace spočívají v tom, že do jednoho registru se nahraje víc než jedna informace (víc než jedny data). Na takto "poskládaném" registru se pak provede operace, která změní všechny data naráz. Příklad: do registru se nahrají dvě čísla - 20 a 37, poté se provede operace přičtení čísla 5. Výsledkem budou čísla 25 a 42. Kdyby se tato operace měla provádět přes instrukční sadu x86, budou potřeba dvě instrukce. A vykonání dvou instrukcí bude pochopitelně trvat déle.

Z tohoto popisu je zřejmé, že SIMD operace nelze využít vždy, ale pouze v případě, kdy jsou na velkých blocích dat prováděny stále stejné operace. To je v praxi především v multimédiích. Prvními SIMD instrukcemi implementovanými v Intel kompatibilních procesorech byla sada MMX. Následovaly sady 3Dnow! a SSE.

Krom všech těchto sad s novými procesory přibývaly i samostatné instrukce, například Pentium Pro jich přineslo asi deset navíc oproti Pentiu. Vždy se více méně jednalo o instrukce, které zrychlují stávající operace vyjádřené více instrukcemi (například CMPXCHG - Compare and Exchange (porovnej a vyměň) - ta byla přidána v procesoru 486).

Co je thread

Základní jednotkou zpracování instrukcí je thread (vlákno). Programy samy o sobě jsou sekvence instrukcí a k nim příslušných dat. Instrukce jsou vykonávány v tom pořadí, jak byly napsány. Každá instrukce provádí operace s daty, z čehož pak vychází výsledky (jiná data). Podle výsledků se pak obvykle určuje, co se bude počítat dál.

Jako thread si můžeme, při určitém zjednodušení, představit nějakou sekvenci instrukcí, nějaký výpočet, do nějž se nahrají vstupní data a který poskytne výstupní data, jako jeden program.

{mospagebreak title=Výpočetní jednotky procesoru}

Procesor uvnitř

Protože již víte, co jsou to instrukce a thready, je nyní možné přistoupit k vlastní charakteristice toho, jak procesor tyto instrukce zpracovává.

Nejdříve blokové schéma - procesor AMD Athlon:

Hyper-Threading detailně

Na první pohled velmi složité, že? Po pravdě toto schéma je ještě velmi zjednodušené. Nyní k jednotlivým částem. Procesor na to, aby mohl počítat, musí mít nějaké instrukce a data. Tyto informace získá z paměti počítače. Paměť je připojena do čipové sady a čipová sada pak spojena pomocí sběrnice zvané Front Side Bus (na obrázku vlevo) do procesoru.

Z Front Side Bus putují data obvykle do velmi rychlé paměti cache. Ta se člení na několik úrovní, čím vyšší úroveň, tím má obvykle cache větší kapacitu, je ale také pomalejší. Běžné procesory mají dnes obvykle dvě úrovně, verze pro servery a pracovní stanice pak často tři. Třetí a druhá úroveň jsou většinou unifikované, ukládají se do ní instrukce i data. První úroveň je již rozdělená na cache pro instrukce a pro data. Důvodem je mechanismus předdekódování instrukcí (o tom se zmíním dále).

Data na chvíli pominu a budu se věnovat instrukcím. Jakmile instrukce dorazí do cache první úrovně, putují dále do instrukčního dekodéru. Ten převádí instrukce sad x86, x87 atd. na vnitřní instrukce procesoru zvané OPs. Výpočetní části nerozumí instrukcím sady x86, pouze těmto OPs. Jsou to vlastně mikro-instukce pevné délky (x86 může být různě veliké), které určují přesné chování výpočetní jednotky. Jedna instrukce x86 může být převedena na jednu až několik desítek OPs, podle složitosti operace. Například takové zvýšení hodnoty v registru (EAX, EBX...) o jedničku je mnohem jednodušší operací než celočíselné dělení.

Insider: odhad větvení kódu

Dekodér při své činnosti využívá předdekódování a Branch Prediction Table. O co jde? V programu jsou často podmínkové skoky. Když je výsledek nějaké operace takový, provede se jeden kód, pokud onaký, provede se jiný kód. Protože instrukce jsou vnitřně v procesoru vykonávány v jiném pořadí, než jsou v programu za sebou (tzv. out-of-order), je možné obejít čekání na data, urychlit výpočet spočtením subvýpočtů naráz (1+2+3+4 bude trvat dva početní cykly, protože se nejprve sečte současně 1+2 a 3+4 a potom výsledky - tím se ušetří jeden cyklus) nebo dokonce začít počítat kód, který následuje až po podmínkovém skoku. Procesor odhadne, jaký asi bude výsledek podmínky ještě před tím, než jí skutečně vypočte, a rovnou začne počítat tu větev kódu, o které si myslí, že je ta správná. Aby mohl tyto odhady provádět, musí průběžně sledovat tok instrukcí a odhadnout tak, jak se bude program dále vyvíjet. Sledování toku instrukcí se provádí tak, že instrukce jsou dekódovány, ale nejsou tvořeny OPs, ale záznamy v Branch Prediction Table. Tomu se říká předdekódování.

OPs dále putují do Instruction Control Unit, kde jich v případě Athlonu může být až 72. Toto je jakási rozřazovací jednotka, která určuje pořadí vykonávání OPs za sebou a jejich přidělení mezi ALU a FPU část. ALU je zkratka pro Arithmetic Logic Unit, což jsou jednotky zabývající se výpočty s celými čísly. FPU naproti tomu znamená Floating Point Unit a jsou to jednotky počítající s desetinnými čísly, popřípadě se SIMD instrukcemi (MMX, 3Dnow!, SSE atd.).

Z Instruction Control Unit jsou OPs zaslány do Integer Scheduler (obsluhuje jednotky ALU) nebo do FPU Scheduler (obsluhuje jednotky FPU). Scheduler se stará již o samotné přidělování OPs jednotlivým výpočetním jednotkám. OPs jsou pokud možno přidělovány tak, aby se maximálně využil potenciál jednotlivých jednotek, tj. aby jich v jeden okamžik pracovalo co nejvíce.

Jednotlivé výpočetní jednotky již provedou požadované operace přikázané jednotlivými OPs. Při tom přistupují do datové cache první úrovně, odkud si berou (a kam ukládají) data.

{mospagebreak title=Zpracování}

Jeden procesor = jeden thread

Z již zmíněných informací vyplývá jeden poměrně zásadní fakt - jeden procesor zpracovává v jeden okamžik pouze jeden thread. Proč? Instrukční dekodér dekóduje instrukce v pořadí, jak jdou za sebou, tj. v takovém pořadí, které je určeno již samotným programem. Protože dekodér nesmí ztratit přehled o tom, které další instrukce má dekódovat, musí si vést evidenci o tom, která instrukce následuje kterou. A to je v praxi možné vysledovat pouze v rámci jednoho threadu, kde je chod instrukcí po sobě určen tím, jak jsou v programu napsány. Kdyby se do procesoru řítily instrukce několika threadů naráz, dekodér by nepoznal, která instrukce následuje kterou a pak by třeba dekódoval něco, co neměl.

Správa zpracování jednotlivých threadů se provádí na úrovni operačního systému. Ten rozhoduje o tom, který thread bude následovat který, co se provede přednostně atp. Starší systémy jako DOS nebyly multitaskingové, v nich nebyl až takový problém nakládat s thready. Vždy tam totiž platilo, že aktuálně je spuštěný pouze jeden program. Moderní systémy jako Windows jsou samozřejmě multitaskingové, to znamená, v jeden okamžik pod nimi můžou být spuštěny až desítky threadů. Protože procesor je schopen počítat v jednom okamžiku pouze s jedním threadem, musí se Windows postarat o to, který thread dostane přednost před kterým.

Víceprocesorové systémy

Situace správy threadů v multitaskingovém prostředí je značně zjednodušena přítomností více procesorů. Jestliže je každý z nich schopen provádět jeden thread, jsou dva schopné vykonávat thready dva. Pokud jsou výsledky výpočtů v jednotlivých threadech na sobě nezávislé, není problém přiřadit každému procesoru jeden thread.

V praxi na sobě nezávislých threadů v rámci jednoho programu až tak moc není, většinou se spíše využívá toho, že například spuštění programu vyvolá spuštění části Windows zodpovědné za zobrazení programu na obrazovku. V takovém případě jsou najednou spuštěné programy dva - volaný program a část Windows zodpovědná za zobrazení. Každý z těchto programů tvoří jeden thread, proto je možné je přidělit více procesorům a celou operaci tak urychlit.

Jiným příkladem využití více procesorů jsou náročné výpočty, například vyhlazování hran v obrázcích nebo práce v AutoCADu. To jsou v zásadě stále stejné činnosti, pouze je nutné je opakovat pro velké množství dat (u vyhlazování obrázků pro každý pixel, v AutoCADu pro každou souřadnici objektu). Jestliže je program takto stereotypní, může buďto profitovat ze SIMD instrukcí nebo využít více threadů a každý spustit na samostatném procesoru. V našem příkladu s vyhlazováním obrázků program vyvolá dva thready, kde jeden bude zpracovávat jednu množinu pixelů a druhý množinu jinou. Výpočet se tak značně urychlí.

Využití stávajících jednotek - mizivé!

Podívejme se nyní opět na blokové schéma procesoru Athlon.

Hyper-Threading detailně

Co se týče výpočetních jednotek, je Athlon vybaven třemi jednotkami ALU (zde označené IEU - Integer Execution Unit), třemi AGU - Adress Generation Unit (ty se starají o výpočet adres v paměti) a třemi FPU jednotkami. Vlastně bych měl spíše říct jednou jednotkou FPU. Vtip je totiž v tom, že Athlon má tři (sub)jednotky FPU, z nichž každá  je schopná vykonávat pouze některé operace. Jedna umí sčítání a SIMD operace, další násobení a SIMD operace. Poslední umí pouze ukládat data (všimněte si šipek proudění dat do Load / Store Queue Unit napojenou na datovou cache). Z toho plyne, že v závislosti na posloupnosti instrukcí (OPs) jsou v chodu jedna až tři jednotky za hodinový cyklus.

Sestrojit dvě nebo tři plnohodnotné FPU jednotky schopné zpracovat všechny instrukce by bylo výrobně příliš nákladné a výkon by patrně nebyl o moc vyšší. Důvodem je fakt, že instrukce se mezi sebou poměrně často střídají, navíc díky FPU Scheduleru je často možné je seřadit takovým způsobem, že se výpočetní jednotky využijí, jak jen to jde.

Přes všechny pomocné systémy jako odhad větvení za podmínkou a paralelismus zpracování díky Schedulerům jsou situace, kdy procesor zahálí. Uvést několik příkladů je vcelku jednoduché:

  • program sestává pouze ze specifických instrukcí - když by například všechny instrukce směřovaly do jednotky sčítání desetinných čísel, všechny ostatní budou v době výpočtu lenošit.
  • je prováděn takový kód, který nelze paralelizovat (výpočty jsou závislé na výsledcích jiných výpočtů) - v takovém případě je využita jen jedna jednotka, další výpočty je možné provádět až poté, co byly provedeny výpočty předchozí. Ostatní jednotky v tom případě opět lenoší.
  • program počítá s velkými datovými bloky - v takovém případě se často stává, že výpočetní jednotky musí čekat na nové instrukce nebo data, která se ještě "courají" v oblasti FSB. V tomto případě lenoší jednotky úplně všechny, nemají totiž co počítat.

Problém neschopnosti paralelizovat kód je také hlavním důvodem, proč jsou procesory s delší pipeline na stejné frekvenci pomalejší než procesory s pipeline kratší. Jestliže je jeden výpočet závislý na výsledku jiného, není možné tento provést, dokud neskončí ten předchozí. V případě dlouhých pipeline (například ta u Pentia 4 má 20 stupňů) bude trvat výrazně více cyklů, než se provede výpočet jednoho úkolu. A až teprve po skončení tohoto výpočtu je možné zahájit výpočet jiný. Ve zpracování tak vzniknou "prázdná místa", kdy část výpočetní jednotky nemůže počítat, protože potřebuje znát výsledek předchozí úlohy. Výsledný efekt je pak takový jako kdyby procesor pracoval na nižší frekvenci.

Ze všech těchto příkladů je vidět, že průměrné využití všech jednotek současně je mizivé, odhadem se jedná o nějakých 30%.

{mospagebreak title=Hyper-Threading}

Hyper-Threading

Protože paralelismus v rámci jednoho threadu není schopen ani zdaleka využít všech výpočetních jednotek současně, vznikla otázka, jak jinak by šlo celkovou vytíženost zvednout. Inženýři přemýšleli a přemýšleli, až je napadlo, že by možná nebylo od věci nepoužít paralelismus pouze na úrovni threadu, ale i mezi thready. Tak vzniknul Hyper-Threading, technologie schopná v jednom procesoru zpracovávat dva thready současně.

V praxi se tak mění pouze to, že dekodér teď dostává namísto jednoho threadu dva a produkuje z nich OPs. Některé OPs patří prvnímu threadu, jiné druhému. Protože využití výpočetních jednotek je v každém threadu trochu jiné, dostává teď výpočetní část instrukce, u nichž je pravděpodobnější, že dohromady budou využívat paralelismus více než by tomu bylo v rámci jednoho threadu. Jestliže dříve jeden thread využíval třeba jenom jednu ALU jednotku, může nyní druhý thread využít zbývajících výpočetních částí.

Hyper-Threading detailně

Jestliže tedy procesor zpracovává dva thready současně, znamená to, že má mnohem více úkolů najednou a že průměrné využití výpočetních jednotek roste. Na obrázku výše je to jasně vidět. V případě ne-multitasking operačního systému, kde se nejdříve dokončí první thread a až po něm následuje další, není využití jednotek nijak závratné. Ještě horší situace je v případě multitaskingového operačního systému (obrázek uprostřed). Zde se jednotlivé thready střídají. Využití jednotek je stále nízké (= stejné jako v prvním případě), ale střídání threadů s sebou přináší další režii v podobě obhospodařování více threadů operačním systémem. Na obrázku to sice není vidět, ale v praxi by vykonání dvou threadů v multitaskingovém operačním systému trvalo déle než když by se thready střídaly způsobem jako v prvním případě.

Na posledním obrázku je technologie Hyper-Threading. Spuštění dvou threadů současně znamená, že využití výpočetních jednotek roste, za stejný čas je teď procesor schopen vypočítat víc. Čas potřebný pro zpracování dvou threadů je kratší.

Možné nevýhody

Ačkoliv může technologie Hyper-Threading vypadat úžasně, má i své nevýhody. Tou hlavní nevýhodou je možnost poklesu výkonu. Proč? Jednoduchá odpověď - co se asi stane, když dvě vlákna požadují stejnou výpočetní jednotku?

Hyper-Threading detailně

Na tomto obrázku je to jasně vidět - vlákna jsou v konfliktu, hádají se, které z nich bude provedeno dřív. Nezbývá nic jiného, než že jedno musí být na chvíli pozastaveno. Toto pozastavení přitom přináší celkové snížení výkonu až o 20%. Tento problém pochopitelně nastává pouze v případě, kdy je snaha využít jednu specializovanou jednotku. V našem příkladu s Athlonem by se jednalo o využití jedné z dvojic specializovaných FPU subjednotek pro výpočty x87 instrukcí.

Ještě horší ale je, že Hyper-Threading má problémy se spouštěním některých aplikací. O tomto se málo povídá, ale faktem je, že na provozování technologie Hyper-Threading je nutné mít počítač s nainstalovaným systémem Windows XP se Service Pack 1. Všechny starší systémy včetně Windows XP bez Service Pack 1 mohou jevit známky problémů.

Také si všimněte, že všechny recenze Pentia 4 s Hyper-Threading byly právě na systémech s Windows XP SP1.

Důvod je celkem zřejmý - až teprve Windows XP jsou systém, který dokáže Hyper-Threading rozpoznat. A teprve Service Pack 1 dokáže ošetřit problémy se spouštěním starších aplikací. Čím přesně je problém způsobem, bohužel nevím, pravdou ale je, že i systémy s více procesory mají s některými aplikacemi problémy. Patrně dochází k nějakým neshodám při paralelním zpracování threadů, zde ještě posílené nutností thready v případě "bitky" o výpočetní jednotky pozastavovat.

Opravdu nemohu doporučit použití systémů jako Windows NT nebo Windows 2000, které jsou sice optimalizovány pro paralelní spouštění threadů (Windows 2000 je ve své variantě Datacenter dokonce vlajkový serverový systém Microsoftu současnosti), ale již nerozpoznají rozdíl mezi logickým a fyzickým procesorem. Pod těmito systémy tudíž selhává přidělování threadů mezi logické procesory a může docházet k výše zmíněným problémům.

Změny v hardware

Protože Pentium 4 bylo již od začátku navrhováno s Hyper-Threadingem, obsahuje také příslušné hardwarové úpravy nutné k zpracování více (konkrétně dvou) threadů současně.

Hyper-Threading detailně

Jedná se především o úpravy v oblasti sledování následující instrukce v threadu (další Instruction Pointer) a hlavně úpravy ve stack a registerech. Procesor totiž pro zpracování dvou threadů nutně musí zachovat integritu výpočtů, musí mít například dvě sady registrů, každému threadu je přidělena jedna. Z pohledu programátora se totiž vůbec nic nemění, vše vypadá, jako kdyby zde byly procesory dva. Již od úrovně dekódování je nutné přesně vědět, které OPs náleží ke kterému threadu, tj. samotné OPs v sobě patrně nesou příslušnou informaci k identifikaci té správné sady.

O tom, že příslušné úpravy má již Willamette, jen je nebylo možné využít, se můžete přesvědčit na obrázku zde.

Z ostatních součástí se nic nemění, cache je v případě dvou logických procesorů sdílená, nedochází k jejímu dělení na dvě části. Jediná dělená část je Instruction TLB - ten má za normálních okolností 128 záznamů, při zapnutí Hyper-Threading pak dvakrát 64.

{mospagebreak title=Současná inkarnace}

Pentium 4

V předchozí kapitole jsem nakousnul, co se změnilo v architekturě Pentia 4. Důvod byl zcela zřejmý - bude to právě Pentium 4, které se pokusí přinutit programátory navrhovat aplikace s co možná největší mírou paralelismu, tak, aby se využila technologie Hyper-Threading a výkon tak celkově stoupl. Díky tomu se zlepší i podpora více procesorových systémů, ty totiž budou z paralelismu profitovat také.

Hyper-Threading detailně

Toto je zjednodušené schéma procesoru Pentium 4, které jsem vytvořil. Sehnat nějaké přímo z Intelu se mi bohužel nepodařilo, patrně ani neexistuje.

Již na první pohled je Pentium 4 procesor o něčem jiném než Athlon. Jeho design se od ostatních procesorů kompatibilních s x86 instrukční sadou podstatně liší. První odlišností je absence instrukční cache první úrovně. Místo ní je teď až za dekodérem cache na OPs. Do ní dekodér ukládá dekódované instrukce, přičemž samotné instrukce na dekódování se bere přímo v L2 cache. Zatímco u Athlonu a jiných procesorů se instrukce dodávají přímo z dekodéru do Instruction Control Unit a následně do Schedulerů, zde tuto úlohu plní tato cache. Nazývá se Trace cache a její kapacita dnes činí 12000 OPs.

Druhou markantní odlišností je počet jednotek a netradičně i jejich frekvence. Procesor obsahuje dvě ALU jednotky pro jednoduché operace (například sčítání), které pracují na dvojnásobné frekvenci procesoru. Protože ne všechny instrukce jsou jednoduché, je zde ještě jedna ALU jednotka pro komplexní celočíselné operace. Ta pracuje "pouze" na frekvenci procesoru. K těmto třem jednotkám náleží ještě jedna AGU jednotka pro čtení a jedna pro zápis, přičemž obě pracují na dvojnásobné frekvenci procesoru.

Athlon má tři ALU jednotky pro všechny instrukce a tři AGU jednotky pro čtení i zápis.

FPU část je podobně jako u Athlonu rozdělena na subjednotky. Ty jsou tentokrát ale pouze dvě. Jedna se stará o ukládání dat a ta druhá počítá x87 a SIMD operace.

Athlon má jednu jednotku na ukládání, jednu na SIMD a sčítání x87, druhou na SIMD a násobení x87.

Již na první pohled je zřejmé, že Pentium 4 nemá tolik jednotek jako Athlon. Především pak FPU část je o hodně pomalejší než v případě Athlonu. To je logické - co se týče výpočtů instrukcí, není zde možný žádný paralelismus, není ho totiž kde provést. Naproti tomu rozdělení ALU jednotek na jednoduché a složité a jejich optimalizace není až tak špatný nápad, jednoduchých instrukcí je v běžném kódu relativně hodně. V operacích jako sčítání bude Pentium 4 nad Athlonem díky rychlejším ALU jednotkám patrně vítěžit.

Je zde ještě jeden fakt, na který se nesmí zapomínat. Tím je, že délka pipeline je oproti Athlonu dvojnásobná. Proto v ní bude spíše docházet k čekání na výsledky jiných výpočtů a horší bude také situace při špatném odhadu větvení za podmínkou. Jestliže totiž dojde k špatnému odhadu, bude nutné celou pipeline vyprázdnit a znovu naplnit daty. A protože je tak dlouhá, bude první výsledek dostupný až za 20 cyklů, nikoli za 10 jako v případě Athlonu.

Kde může Pentium 4 profitovat

Ať už z našich testů nebo testů na jiných webech (Tom´s Hardware, např.) vyplynulo, že Hyper-Threading ve většině případů nemá žádný nebo má dokonce negativní dopad na výkon. Uvažujeme-li známá fakta a princip této technologie, není to až tak velké překvapení. Pentiu 4 je již svým návrhem výpočetní části předurčeno, že možných využití Hyper-Threadingu není právě nejvíc.

Předně je třeba zmínit, že v FPU části není možné uvažovat o nějak rozsáhlém paralelismu. Není například možné počítat dvě SIMD nebo x87 instrukce najednou, jednoduše proto, protože není kde. Prakticky jediná výhoda by mohla nastat, když by jeden thread chtěl ukládat data (využít FPU Store / Move jednotku) a druhý by zároveň chtěl počítat (využít FPU provádějící samotné výpočty). Takových situací ale patrně příliš mnoho nebude.

Velice podobně vypadá situace v ALU. Zde je možné paralelizovat buďto vykonávání více jednoduchých instrukcí zároveň nebo kombinaci jedné jednoduché a jedné složité instrukce. Setkají-li se dvě složité instrukce nebo je-li požadavek na využití AGU jednotek, dojde ke konfliktu a bude nutné jeden z threadů pozastavit.

V praxi tak největší výpočetní výhody plynou ze směsice kódu SIMD / x87 a klasického x86. V takovém případě se rovnoměrně využijí jednotky FPU i ALU. Bohužel (bohudík) něco podobného je realizovatelné i na úrovni paralelizování jednoho threadu.

Paradoxně největší výhoda technologie Hyper-Threading nespočívá ve využití více jednotek najednou, ale v eliminaci čekání na data. Dva thready jsou na sobě více méně nezávislé programy. Každý využívá jiná data a tudíž i jinou oblast v paměti (proměnné se obvykle v paměti organizují přímo za sebou). Protože Pentium 4 používá prefetch mechanismus, který do cache nahrává při požadavku na data z nějaké konkrétní oblasti paměti i data umístěná v paměti hned vedle, je velice pravděpodobné, že procesor bude mít při vykonávání instrukcí příslušná data již v cache. Pokud je náhodou mít nebude, bude muset čekat klidně i desítky hodinových cyklů, než se mu je podaří z paměti získat. A hádejte, co se bude dít mezi tím. No jistě, výpočetní jednotky budou lenošit! Jestliže ale budou spuštěny dva thready současně, využije procesor čekání na data u jednoho threadu k vykonání threadu druhého. Je totiž velice nepravděpodobné, že by nastala situace, kdy budou spuštěny dva thready, které oba čekají na data z paměti (účinnost cache je běžně vysoko nad 90 procent).

{mospagebreak title=Budoucnost a závěr}

Co do budoucna

Současné stádium vývoje Hyper-Threadingu není samozřejmě poslední. Pominu-li tu možnost, že by se procesory v budoucnu chovaly jako více než dva logické procesory (v případě Pentia 4 z důvodu absence výpočetních jednotek nepřijatelné, v případě například Itania 2 vynikající nápad), je možné uvažovat i jiné způsoby, jak vše zefektivnit.

Předně vede cesta lepším návrhem výpočetní části s ohledem na možný paralelismus. Není tajemstvím, že Pentium 4 je v tomto ohledu uspěchaný procesor, který Intel uvedl jen jako reakci na ve své době převratný Athlon. Pentium 4 bylo evidentně koncipováno pro dokonalejší výrobní technologii, než s kterou se dostalo na svět (0,18um). Protože podle původních návrhů by byl procesor výrobně příliš drahý, bylo ho nutné na poslední chvíli pozměnit. A to se pochopitelně na celém designu podepsalo. Některé jednotky tady jakoby přebývají (2x ALU pro jednoduché operace) a některé naopak chybí (paralelismus v FPU).

Jedním z problémů je taktéž malá datová cache první úrovně a patrně i pomalá Trace cache. Ta je v současnosti schopná poslat do Schedulerů maximálně tři OPs za cyklus, což není pro technologii Hyper-Threading předpokládající využití výpočetních jednotek na dvojnásobné frekvenci procesoru právě mnoho. Zkombinuje-li se to s datovou cache o velikosti pouze 8 kByte, která je v případě FPU schopná dodat data až za 9 hodinových cyklů, dostaneme nepříliš přesvědčivý výsledek. Tato cache musí být nutně větší a to dost podstatně. Zvětšovat cache druhé úrovně je jen obcházení problému.

Hyper-Threading detailněA co se týče samotného Hyper-Threadingu, je i zde co zlepšovat. Předně nevidím budoucnost v přizpůsobování software. Již několikrát se ukázalo, že tudy cesta nevede. Žádný programátor se nebude bez vážných důvodů zabývat předělávání programu přímo v Assembleru, když je spokojen se svým výrazně jednodušším vývojovým prostředím Delphi. Příklad za všechny - jaká dnes mohla být penetrace SIMD instrukcí mezi běžnými programy, jenom kdyby se někomu podařilo vytvořit kompilátor, který by tuto technologii alespoň částečně využil? Jak dlouho je tady MMX a kolik programů ho využívá? A to samé se dá říct o Hyper-Threading. Teď se Microsoft problémem zabýval a díky Windows XP s SP1 většinu problémů vyřešil. Znamená to ovšem, že s příchodem každé další varianty Hyper-Threadingu bude nutné změnit operační systém, popřípadě i software?

Cesta jednoznačně vede přes hardwarové zpracování správy threadů. Procesor sám by měl včas poznat, který thread chce kterou jednotku a podle toho se zařídit. Organizace až na úrovni dekodérů a Schedulerů asi není právě optimální. Například nový procesor Hammer od AMD bude provádět předdekódování již na úrovni cache druhé úrovně. Podobným směrem by se mohl vydat i Hyper-Threading. Operační systém by mohl pomoci v tom ohledu, že by každému threadu přidělil určitou prioritu a procesor by se pak snažit přednostně provést thready s vyšší prioritou. Tak by bylo možné eliminovat pokles výkonu, který byl nyní v některých případech i poměrně značný.

Shrnutí

Hyper-Threading a princip paralelizování threadu (či threadů) obecně v rámci procesoru jsou bez pochyby velice zajímavé technologie. Je vcelku bez diskuze, že v multitaskingových operačních systémech bude přínos nezanedbatelný. Dva současně spuštěné programy budou patrně využívat každá jiných jednotek, možné kombinování OPs na úrovni Instruction Control Unit tak bude nabírat nové směry. Nárůst výkonu v rámci jednoho programu asi nikdy nebude úchvatný (obecně jsou na sobě jednotlivé výpočty velmi závislé, což zabraňuje paralelismu), ale v případě celku může být efekt značný. Bohužel ale v současné podobě, kdy Pentium 4 je svým designem vhodné tak napůl, se o nějakém převratu mluvit rozhodně nedá. Vše mi tak trochu připadá, jako kdyby marketingové oddělení Intelu využilo zatím ne zcela dokonalou technologii k propagaci tvrzení, že Hyper-Threading umožní rapidně zvýšit výkon. To rozhodně není celá pravda, nárůst v rámci jedné aplikace bude ve většině případů nulový. Při tomto uvažování bychom mohli stejným způsobem propagovat například prefetch mechanismus.

O čem se samozřejmě mluví ještě méně, jsou negativní stránky. Již teď bylo Pentium 4 procesor pro domácnost s největší spotřebou vůbec. S příchodem Hyper-Threading a vyššího využití jednotek zcela jasně musí růst i spotřeba. Ta je v případě nového čipu stanovena na typických 82W a maximálních na neuvěřitelných 93W. Proto se také měnil typ BOX chladiče, který má teď úplně jiný tvar a měděnou základnu.

Hyper-Threading detailně

Intel musel zvýšit napětí až na 1,55V, což je z Northwoodů nejvíc. Proudový odběr tak stoupnul až na 65.4A. Obávám se, že Intel tentokrát zvyšování frekvence poněkud přehnal. Frekvenční potenciál Northwoodu je u konce, i nové motherboardy umí dodat maximálně 70A, což by vyhovělo tak maximálně Pentiu 4 na 3,33 GHz.

Celé to tak nakonec vypadá, že Pentium 4 na frekvenci 3.06 GHz bylo tak trochu uspěcháno. Intel se asi bojí procesorů Hammer od AMD a chce za každou cenu zvýšit výkon svých procesorů. Hyper-Threading teď ještě není vyzrálá technologie a já osobně bych si počkal, co nabídne následovník Northwoodu, procesor Prescott. V něm by mělo dojít k nějakým výraznějším změnám v návrhu a měl by i implementovat novou verzi Hyper-Threadingu. Do té doby bych tuto technologii nebral jako nějaký významný převrat. Budoucnost jí patrně čeká především v procesorech Itanium.

 
Komentáře k článku
RSS
Pouze registrovaní uživatelé mohou přidat komentář!
21.11.2002 13:09:19   0.0.0.xxx 57
Nie je pravda, ze v DOSe neexistoval multithreading, prave naopak, existoval a bol kvalitativne na urovni Windows NT, tym myslim, skutocny preemptivny mt.
21.11.2002 16:21:54   0.0.0.xxx 66
Zajímavé je, že Ace's hardware i Tom's hardware dosáhly v testech u multithreadových aplikací překvapivě dobrých výsledků - 10 - 30 % nárůstu výkonu. Oba servery tvrdí, že jedna multithreadová aplikace může z HT významně benefitovat.

Na Tom's hardware porovnávali 3 GHz s HT a 3,6 GHz bez HT a i když většinou by rychlejší ten druhý, byly i případy, kdy byl rychlejší 3 GHz procesor s HT.

Tj. - HT samozřejmě nemůže nikdy dosáhnout výkonu dvou procesorů - a ani dva procesory nikdy nedosahují dvojnásobného výkonu. Ale vzhledem k tomu, že HT v P4 jenom zcela výjimečně snižuje výkon (na rozdíl od prvních Xeonů s HT!) a že je ZDARMA (kdyby ho P4-3 nemělo, nebylo by o nic levnější, Intel si skutečně nic nepřirazil), má IMHO naprosto famózní poměr výkon / cena.

Pro 3D grafiky rozhodně.
21.11.2002 17:12:58   0.0.0.xxx 66
Tak zrovna podle Tom's Hardware nárůst výkonu v Lightwave při zapnutém HyperThreading asi mínus půl procenta. Takže dost záleží na nastavení.

Z multithreaded aplikací mohou na Pentiu 4 profitovat pouze ty, o kterých jsem mluvil - tj. především ty, které jsou směsice kódu pro FPU a ALU. A jelikož Lightwave je silně optimalizován pro SIMD operace (konkrétně pro SSE2), není se čemu divit, že nějaký nárůst tu být může. I velmi FPU / SIMD intenzivní programy mají alespoň část kódu pro ALU, a protože Pentium 4 má i při nejdrsnějším využití FPU části pořád jednu OPs za cyklus volnou, může jí využít právě pro ALU operace.

Propad u Xeonů se zapnutým HT byl pochopitelně způsoben použitím Windows 2000 namísto Windows XP se Service Pack 1 a nikoliv tedy chybou v Xeonech. Xeon je totiž s Pentiem 4 zcela identický procesor.
21.11.2002 17:59:17   0.0.0.xxx 66
Fakt 65,4 Amperu ? A ne 65,4W ? Jinak, super clanekm, jen tak dal, pokracujte, nenechte se podplatit od intelu/microsoftu, jako to udelal Toms a Ace's hardware. AMD Rulez !!!
21.11.2002 18:44:27   0.0.0.xxx 66

hmm ted si eagle napsal jak kdyby byl intel v krizi ale ono zatim je amd v krizi nevim co se vyvine az skoci na trh Athlon XP64 asi se situace pro amd zlepsi ale ted je na tom podle me zle... a intel rozhodne lip ... ale pokud se mylim rad si to necham vysvetlit

21.11.2002 18:56:26   0.0.0.xxx 76
P4 s HT bude asi o 500Kč dražší + OS + základní deska podporující HT. Zadarmo to určitě nebude.
21.11.2002 19:14:37   0.0.0.xxx 66
Netvrdím, že je Intel v krizi, to vůbec ne. Jen si podle mě s tím zvyšováním frekvence dost naběhnul. AMD teď pomalu začíná dodávat XP 2700+, příští rok asi v lednu startují Barton, u kterého se čekají modelová čísla i 3000+. A když to vezmu kolem a kolem, tohle má být v nabídce AMD procesor střední třídy, high-end bude Hammer. A zajímalo by mě, čím chce Intel konkurovat. Do příchodu Prescottu s frekvencí nahoru moc jít nemůžou. A Hyper-Threading rozhodně není všelék, až taková bomba to v dnešní podobě není.
21.11.2002 19:57:50   0.0.0.xxx 76
Já nevím, moc tomu nerozumím, ale proč Intel (když je to Pentium 4 tak uspěchané a částečně "proškrtané") už při současné kvalitnější technologii výroby, nedělá Pentium 4 takové, jaké podle jejich inženýrů mělo původně být? Když ho mohly tak rychle pozměnit (aby měli čím konkurovat Athlonu), proč je teď takový problém ho "dovybavit" (přidat FPU, zvětšit L1 cache, atd)? Pokud vím, tak Prescott se bude od Northwooda lišit jen kvalitnější výrobní technologií, větší L2 cache, rychlejší FSB a PNI instrukcema.
je zajímavé, jak se Intel hodlá uchylovat k nouzovým řešením a lá AMD, jako je zvyšování výkonu díky rychlejší FSB (když už to nejde zvyšováním frekvence jádra) :-)
21.11.2002 22:13:57   0.0.0.xxx 68
to co pridaly na zacatku pro HT byly opravdu kosmeticke upravy, janze pridat ALU nebo FPU jednotku obnasi i testovani a hlavne optimalizaci jadra a pripadne zmeny v dalsich castech jako jsou shedulery ktere se musi prispusobit pro vice jednotek

jedine co by dle meho slo udelat nejjednouduseji je zvetseni L1 cache
PS: napad o posunuti L1 byl asi nejlepsim napadem ktery Intel napadl od Pentia Pro(II)
21.11.2002 22:54:35   0.0.0.xxx 66
jo spotřeba 65W by byla super. Eagle hovoří 0 100W což je cca těch 65,4A (max) * 1,55V
21.11.2002 23:48:24   0.0.0.xxx 66
Opravdu me fascinuje jak nekdo dokaze tak nadsene mluvit o nejakych novych virtualnich produktech jiz pres pul roku(navic novinar, ktery by se mel snazit byt ze zasady nezavisly). Neustale jsou to jen sliby, ktere se casto meni v chyby uvedeni na trh se neustale odklada a odklada bez udani jasneho duvodu...Navic kdyz uz neco na trh uvedemo je tak se to stejne nikde neda koupit!!! Intel v tomhle smeru alespon sliby plni a navic casto se nove produkty, technologie objevuji jeste drive (HyperThreading mel byt az u Prescottu pokud se nemylim). Nemuzu si pomoci, ale za soucasneho stavu INTEL RULES.
22.11.2002 07:51:48   0.0.0.xxx 66
Dobry den,

myslite, ze budete pokracovat v nastavene frekvenci uvadeni clanku, jako na zacatku, nebo to zabalite s Hyper-Threadingem???
22.11.2002 10:23:20   0.0.0.xxx 66
Ano, AMD hodně slibuje a málo plní, s tím se nedá než souhlasit. Ale... co vytáhlo Pentium 4 Northwood nahoru? Dobrý návrh výpočetní části? To dost těžko. Northwood vítězil kvůli frekvenci a tuto frekvenci mu umožnila dosáhnout velice povedená technologie výroby. Její potenciál je ale v současnosti již vyčerpán, žádné další zrychlování nepřipadá v úvahu. Hyper-Threading byl nyní uveden pouze protože se Intel bojí Hammeru. Stejně tak plány využít nestandardizovaných pamětí DDR400 o něčem svědčí.
22.11.2002 13:03:25   0.0.0.xxx 76
Skutecne VYNIKAJICI clanek, z toho co jsem na ceskem inetu za posledni 3 mesice cetl jednoznacne nejlepsi. Jen tak dal...
22.11.2002 13:43:39   0.0.0.xxx 66
Taky si myslim, ze je to dobre napsane. Mirne pokrocili (jako jsem ja) se hodne dozvedi o technologiich a pokrocili maji kvalitni podklad pro diskusi. Tenhle podzim asi nejlepsi na nasich serverech.
22.11.2002 14:37:57   0.0.0.xxx 66
Nezbývá mi, než se připojit k pochvalným reakcím na kvalitu článku. To je přesně to, co většinou výrobci "zapomínají" uvádět ve svých reklamních kampaních. Pohled z druhé strany je vždycky přínosem pro spotřebitele, který je za všech stran bombardován reklamami typu "Tohle naše XY je fakt nejlepší a nekomromisní řešení pro vás, vaši tchýni i souseda v podnájmu...". Díky
22.11.2002 18:40:31   0.0.0.xxx 66
Koukam, stale stejny problem. Pracuje na tom nekdo ?
22.11.2002 23:02:52   0.0.0.xxx 66
Opravdu skvělí článek a smekám. Kdyby byl nějaký zlatý fond článků o HW tak by tam tento článek patřil. Fakt se ti to povedlo, jen tak dál :-)
23.11.2002 14:30:27   0.0.0.xxx 67
Dobry den,

nechapu tyhle diskuze.Sam poutivam Intel(bohuzel jsem dostal na stul) ale vim,ze AMD Athlon XP je neco o cem se Intelu ani nezdalo.Tady jen kazdy obhajuje svuj Procesor!Amd krici intel - hruza!Intel krici Amd - hruza!Rika Vam neco Aplle?Navstivte jejich web a zjistite ze AMD+INTEL+MICROSOFT je banda!Kdo uvidel a vi vic pochopi.

Jinak predpokladam velke reakce na muj nazor!

Clanek byl naprosto super a opravdu jsem si takovy uz dlouho neprecetl.Jen tak dale...
24.11.2002 01:57:08   0.0.0.xxx 66
Maji to spocitany. Cokoli Intel udela, AMD slibi vic. Intel nema sanci, jen at zkusi zrychlit, AMD slibi jeste vic. Az Intel zacne prodavat 5GHz, AMD oznami Sroubovak a bude ! AMD RULEZZ
24.11.2002 22:40:02   0.0.0.xxx 66
Díky za výborný článek, opravdu velmi dobře a pochopitelně napsaný, dozvěděl jsem se spoustu věcí o Pentiu 4, který jsem nevěděl a který asi Intel ani nechce, abychom věděli :-))) Od chvíle, co jste se odtrhli od Cpress to jde jenom nahoru. Vydržte!

Mimochodem, Intel je opravdu v řiti, doufám, že ho Hammer rozmajzne na sračku... Pravda je, že novej Celeron stojí za hov.o, Pentium 4 taky není žádná sláva - no a Athlon XP, kterej je stejně rychlej jako P4, bude jako low-end, to jsem zvědavej, co Intel nabídne proti Athlonu64... NIC!
25.11.2002 10:31:03   0.0.0.xxx 66
No, ja nevim, cetl jsem si nejaky povidani na www.lowendmac.com a dosel jsem k nazoru, ze doma zbastlena 486 je lepsi nez vetsina toho, co v minulosti Apple vyprodukoval do prichodu 603...
25.11.2002 15:49:10   0.0.0.xxx 56
Predne dekuji za vyborny clanek ! Po vasem znovuosamostatneni nemam uz na zive skoro co cist.
K tomu kdo si nabehl (intel/AMD). Je rozhodne pravda ze na dnesnich frekvencich se pro nejakou dobu intel vycerpal, ale aby toho amd hohlo vyuzit musi vytahnout s novejma procesorama co nejdriv. Jestlize bude hamer neustale odkladany a bude mit stejne problemy s vyteznosti (nasledne s dodavkami do obchodni site) tak to nebude s amd az tak ruzove.
Doted reagoval intel na vyborny navrh athlonu jen hrubym zvysovanim frekvence, ted s tim hyperthredingem to vypada ze snad zacne vymejslet konecne i lepsi navrh procesoru. U intelu je ale jeste jedna cesta. A to prechod na 0.09 technologii, ktera je uz nejakou dobu v laboratorich. Uvidime.
25.11.2002 20:35:16   0.0.0.xxx 56
Ohledně HT ve Windows doporučuji nahlédnout do:
http://www.microsoft.com/hwdev/platform/proc/HT-Windows.asp
Je tam uvedeno, že jak Win XP tak Win 2k (od nějakého SP, asi SP3) podporují HT (tím, že mají správně implementován "spin lock" v MP kernelu). Win XP se od Win 2k liší tím, že rozlišují i fyzické a logické procesory, zatímco na Win 2k jsou všechny procesory chápány jako fyzické, což mimo jiné znamená, že bude problém s licencemi.
Nemohu to ovšem potvrdit, nemám HT procesor .
26.11.2002 11:48:41   0.0.0.xxx 56
bohuzel jen slibuje a to je vse.
27.11.2002 12:35:48   0.0.0.xxx 76
Před pár týdny Intel řekl, že architektura P4 bude (samozřejmě v rámci evoluce jak jádra, tak výrobní technologie) vyhovovat asi do 10 GHz.

Před pár měsíců prosakovaly zprávy (nevím ale, kde přesně pramenily), že Intel v roce 2003 představí Prescott na 5 GHz. Teď se ale mluví o tom, že to se zvyšováním frekvence nebude tak horké.

Podle mne nemá Intel momentálně problémy srovnatelné s problémy AMD. A důvod, proč chce v první polovině příštího roku "zpomalit" může být ten, že přestal cítit tlak od AMD. Tak proč nepozdržet investice do 90 nm a nezvýšit si tak marži na pár čtvrtletí?
27.11.2002 12:37:40   0.0.0.xxx 66
...Tak proč nepočkat se zaváděním 90 nm a nezvýšit si marži na pár čtvrtletí.

BTW: Prescott prý bude umět čtyřnásobný heperthreading v jednom procesoru. Ale možná to nebude enablované.

(Pentia 4 mají hyperthreading zabudovaný už asi rok, ale není u nich aktivní.)
27.11.2002 19:30:10   0.0.0.xxx 66
10 GHz je docela relativní, protože některé části běží na dvojnásobné frekvenci. Čili 5 GHz čip má některé části na 10 GHz. Ovšem vyrobit 5 GHz čip se Intelu jen tak nepodaří a v roce 2003 Prescott určitě 5 GHz nedosáhne (za jedno čtvrtletí přeskočit 2 GHz? To je trochu nesmysl).

AMD má sice pořád problémy s výrobou, nic to ale nemění na faktu, že Intel teď rok nebude zvyšovat frekvence! A za tu dobu patrně AMD výkonem Pentia 4 předhoní, ať už to bude Barton nebo (a to především !) Hammer.
27.11.2002 19:32:19   0.0.0.xxx 66
... to bude Barton nebo (a to především) Hammer. Problémem zvyšování frekvence je teplo, delší pipeline neznamená nižší tepelný výkon a v tom bude mít Intel se zmenšující se velikostí čipu problémy (viz. náhlá smrt u Northwoodů).
2.12.2002 09:03:06   0.0.0.xxx 66
musim pochválit fakt SUPER článek!
5.12.2002 03:41:09   0.0.0.xxx 66
Diky za velmi zajimavy a pro me take velmi prinosny clanek. Konecne mam trosku predstavu jak pracuji procesory.
21.4.2003 16:34:12   0.0.0.xxx 66
...Xeon je totiž s Pentiem 4 zcela identický procesor....
Ale Xeon DP, Xeon MP je naprosto jiný procesor než P4
8.5.2003 11:16:38   0.0.0.xxx 66
Stačí se podívat na výstupní hodnoty CPUID - Xeon DP a Pentium 4 používají zcela stejné jádro. Xeon MP je jiný, to je pravda, Northwood patrně není uzpůsoben na práci s L3 cache, proto nebylo možné použít jednoduchou úpravu v podobě přidání bloku L3 cache.

Redakce si vyhrazuje právo odstranit neslušné a nevhodné příspěvky. Případné vyhrady na diskuze(zavináč)pctuning.cz

0 čtenářů navrhlo autorovi prémii: 0Kč Prémie tohoto článku jsou již uzavřené, děkujeme za váš zájem.
TOPlist
Tento web používá k poskytování služeb soubory cookie.