Dva v jednom: Hyper-Threading

Nedávno uvedený procesor Xeon s jádrem Prestonia podporuje velice zajímavou technologii, která umožňuje zvýšit výkon o zhruba 30 procent, přičemž skoro zadarmo. Stačí minimální úpravy čipu a výsledek se hned dostaví - jeden procesor zpracovává dva programy současně. Je to vůbec možné, aby se jeden procesor choval jako dva?

Co je Thread

V překladu znamená anglické slovo thread vlákno, nit. Počítačový pojem programové vlákno má hodně co dočinění s víceprocesorovými systémy. O co že jde? Během vykonávání programu se pracuje s vlákny, což jsou jakési sekvence kódu, instrukcí, které spolu nějak souvisí (jedná se o jeden program atp.). Operační systém řídí celý proces vykonávání programových vláken. U běžného počítače s jedním mikroprocesorem se v jednom okamžiku provádí vždy pouze jedno vlákno. Procesor dekóduje instrukce, naplňuje registry a provádí výpočty. Když je operace s vláknem dokončena - již není co počítat nebo dojde k přerušení výpočtu - začne se počítat jiné vlákno.

Víceprocesorové počítače

U víceprocesorových systémů je situace poněkud odlišná. Protože každý procesor je schopen pracovat v jeden konkrétní okamžik s jedním vláknem, jsou dvojprocesorové systémy schopny vykonávat dvě vlákna, čtyřprocesorové čtyři atd.

Výpočty probíhají paralelně, z čehož plyne, že takto zpracovávaná vlákna na sobě musí být nezávislá. V běžných podmínkách spíše platí, že operace jsou na sobě často závislé, takže není možné vykonávat více vláken zároveň - stačí si také všimnout, že počítač s dvěma procesory je obvykle jen asi o 50 procent rychlejší než počítač s jedním procesorem, a ne o 100 procent. Existují však výpočty, kdy je možné vytvořit takřka neomezeně na sobě nezávislých vláken a zaměstnat jimi i stovky procesorů současně. Mezi takovéto výpočty se řadí především operace jako komprimace audia/videa, luštění různých šifrovacích algoritmů hrubou sílou nebo jiné rozsáhlé výpočty. Mám-li jmenovat konkrétní případ, tak třeba SETI@home nebo šifra RC5 jsou typickými případy. Jestliže se luští šifra metodou pokus-omyl (funguje/nefunguje klíč), tak na běžném procesoru počítač vypočítá první klíč, pak přejde k druhému atd. Když jsou procesory dva, může jeden počítat klíče v pořadí sudé a druhý liché, např.

Využití stávajícího potenciálu

Ve víceprocesorovém uspořádání tedy dochází k práci s několika vlákny současně, každý procesor vykonává jedno vlákno. Protože ale málokdo je ochoten zaplatit za v průměru 50ti procentní nárůst výkonu vysokou cenu spojenou s pořízením drahého hardwarového vybavení (dvouprocesorová deska, dva procesory), není takovýto způsob zvyšování výkonu příliš běžný, natož efektivní.

Přitom existuje jiné řešení - vypočítat toho více na jednom mikroprocesoru! Protože dnešní procesory jsou značně složitá zařízení schopná vykonávat více instrukcí za jeden hodinový cyklus, nezřídka mají více než jednu specializovanou jednotku na jeden typ operací, stačí jen lépe využít jejich potenciál.

Toto je blokové schéma procesoru AMD Athlon. Bylo by asi dobré si jednotlivé části popsat:

  • x86 Instruction Decoders - překládá programové instrukce na vnitřní instrukce mikroprocesoru (takzvané mikroOps... AMD jim s láskou říká makroOps)
  • Instruction Control Unit - stará se o distribuci mikroOps do jednotlivých výpočetních částí procesoru
  • IEU (Integer Execution Unit) a AGU (Address Generation Unit) - pár jednotek pro operaci s celými čísly (sečítání, násobení atd.)
  • FPU (Floating Point Unit) - jednotka pro operaci s čísly s desetinnou čárkou
  • Integer / FPU Scheduler - stará se o řazení a distribuci mikroOps pro jednotlivé výpočetní jednotky tak, aby bylo co nejlépe využito možnosti paralelního zpracování
  • Load / Store - provádí čtení a zápisy do paměti

V případě Athlonu má procesor k dispozici tři páry jednotek pro výpočty s celými čísly a tři "primitivní" FPU jednotky, kde každá umí vykonávat pouze některé operace - neumí zpracovat všechny instrukce, ale jen některé, což ale příliš nevadí, protože variabilita instrukcí v programech je značná, takže se často využijí všechny. Dvě jednotky slouží pro výpočty (včetně MMX a 3Dnow! operací), třetí pro čtení a zápis dat.

Jak je vidět, v ideálním případě dokáže Athlon zpracovat devět mikroOps najednou, tři v IEU, tři v AGU a tři v FPU. V praxi je ale vytížení těchto jednotek kvůli "neflexibilitě" programového kódu mnohem nižší, může se jednat i o efektivitu kolem 20 procent.

Hyper-Threading

Proč je efektivita tak nízká? Programy jsou psány tak, a je to logické, že vždy provádějí výpočty na jednom typu výpočetní jednotky. Postup většiny programů by se dal shrnout zhruba takto:

celá čísla -> celá čísla -> desetinná čísla -> celá čísla -> celá čísla -> desetinná čísla -> desetinná čísla

Při operacích na celočíselném poli (více proměnných za sebou) dochází k značnému zatížení IEU a AGU a naopak při operaci s desetinnými čísly FPU jednotky. V praxi se tyto dvě fáze střídají, k souběžnému využití obou typů jednotek dochází jen v minimu případů.

Možná již tušíte, kam mířím. Otázka zní: Jak využít oba typy jednotek současně. Přesně tuhle otázku si položili v Intelu a vymysleli... Hyper-Threading, dříve známý také pod označením Jackson Technology.

Inženýři Intelu vyšli z předpokladu, že jeden procesor by mohl bez větších problémů zpracovávat dvě programová vlákna současně. Jak je vidět na obrázku výše, běžný procesor má jednu sadu registrů (AS - Architecture State), proto ve víceprocesorovém řešení se dva procesory chovají opravdu jako dva procesory. Technologie Hyper-Threading umožňuje, aby jeden procesor měl registry zdvojené a mohl se tak navenek tvářit jako dva procesory (operační systém pochopitelně nic nepozná). Dva procesory s Hyper-Threading se tak chovají jako čtyři procesory.

Na tomto zjednodušeném schématu reprezentuje každý čtvereček výpočetní jednotku procesoru, každá barva jedno vlákno, šedá políčka pak nevyužitou jednotku. V praxi vypadá zpracování dvou vláken jedním procesorem zhruba takto:

Operační systém zašle procesoru dvě vlákna, ty jsou dekódována a příslušné výpočetní jednotky obdrží instrukce (mikroOps). Také ale obdrží informaci o tom, ke kterému vláknu tyto instrukce patří. Výpočetní jednotka podle této informace začne pracovat s jednou nebo druhou sadou registrů, takže se nemůže stát, že by dvě jednotky současně pracovaly s jednou sadou (to by znamenalo ztrátu integrity dat a následně havárii).

Intel NetBurst architektura

Jak již bylo na PCtuningu mnohokrát řečeno, architektura NetBurst, na které jsou založeny procesory Pentium 4 a Xeon, má dvačetistupňovou pipeline a umožňuje tak dosažení vysokých frekvencí za cenu o něco nižšího počtu zpracovaných instrukcí za hodinový cyklus. Co však nebylo řečeno, že tato architektura se výborně hodí pro Hyper-Threading.

Toto je výsledek testu programu TestCPU měřící rychlost přístupu k různě velkým datovým blokům. 8kB cache první úrovně Pentia 4 (zde na frekvenci 2GHz) podává excelentní výkon, který doplňuje také velmi rychlá cache druhé úrovně (256kB). S takovouto datovou propustností se architektura NetBurst stává ideální pro zpracování dvou vláken současně, dokáže totiž zásobovat výpočetní jednotky dostatečně rychle.

Současná architektura NetBurst sestává z dvou ALU jednotek pro primitivní operace, které jsou taktovány dvojnásobnou frekvencí jádra, další ALU jednotky pro ostatní operace a FPU jednotky. V praxi tak může výhodu více vláken využít kombinace ALU a FPU, popř. pak ALU nebo primitivní ALU společně s druhou primitivní ALU jednotkou.

Hyper-Threading se v současnosti stále vyvíjí, avšak první procesor s oficiální podporou této technologie se již objevil. Je jím nový Intel Xeon s jádrem Prestonia vyráběný 0.13µm technologií a vybavený cache druhé úrovně o velikosti 512kB.

Podle návratové hodnoty CPUID instrukce tuto technologii podporují i procesory Pentium 4, ale pouze jako jeden logický procesor. Zda váš procesor podporuje Hyper-Threading a kolik logických procesorů zastupuje, se můžete přesvědčit tímto programem.

Možné negativní efekty

Nic není ideální a už vůbec nic není zadarmo. Pomineme-li fakt, že další sada registrů si vyžádá úpravy v architektuře čipu a zvětšení jeho plochy (což zase zvyšuje cenu), je zde i problém možného snížení výkonu.

Jak je to možné? Operační systém při zjištění dvou procesorů každému z nich zadá úlohu v podobě jednoho programového vlákna. Procesor tuto úlohu řeší a vše probíhá, jak má. Problémem technologie Hyper-Threading je ovšem fakt, že počítá s využitím právě nevyužitých výpočetních jednotek, tj. jedno vlákno by mělo využívat celá čísla a druhé desetinná, aby se pokryly jak ALU (tj. IEU a AGU), tak i FPU jednotky. S tím bohužel současné operační systémy nepočítají, protože v době jejich tvorby si mohli programátoři o technologii Hyper-Threading nechat jenom zdát.

V případě, kdy je procesoru s Hyper-Threading zadána úloha v podobě dvou vláken, kdy každé by využilo stejnou výpočetní jednotku, dojde ke konfliktu, protože jedna jednotka může v jeden konkrétní okamžik počítat pouze jedno vlákno. V praxi se tak musí střídat, což nejenom že výpočet vůbec nezrychlí, navíc to s sebou nese další režijní náklady v podobě obhospodařování dvou vláken.

Řešení problému spočívá ve využití HLT (Halt) instrukcí, kterými se zapne nebo vypne jeden z logických procesorů v době, kdy by si dvě vlákna navzájem konkurovaly. Jak jsem již ale říkal, to současné operační systémy ani aplikace na nich spuštěné nedělají. Pro efektivní využití potenciálu je proto nutné je upravit. Jestliže dnes je možné čekat nárůsty výkonu kolem 30ti procent, v budoucnu bude možné získat lepší organizací kódu výrazně víc.

Protože ne vždy se Hyper-Threding hodí, je možné ho v BIOSu úplně zakázat.

Shrnutí

Technologie Hyper-Threading je jistě velmi zajímavá a dle mého názoru se jedná o směr, kterým se budou ubírat příští generace procesorů. Jedná se o opravdu efektivní způsob, jak za málo peněz zvýšit výkon. Bohužel je nutné změnit techniku programování tak, aby nová generace softwaru využívala více vláken (to však není realizovatelné ve všech případech). Dobrý nápad má i zde svá ale a v tomto případě nalezne uplatnění především v oblasti serverů a pracovních stanic. Pro běžného uživatele tato technologie prozatím nějaké razantní vylepšení výkonu nepřinese, protože málokterá aplikace je schopná ji využít. To je také patrně důvod, proč Intel u Pentia 4 de facto Hyper-Threading vypnul.

Zdroj informací: Intel Developer Site

Eagle

Diskuze (22) Další článek: Quake III Arena rychlejší na Linuxu

Témata článku: Procesor, Druhý případ, Razantní snížení, Vlákno, Hype, Efektivní využití, Unit, Hyper, Celý systém, Druhý typ, Unity, Ostatní operace, Excelentní výkon, Starý typ, Možný problém, Anglické slovo, Měřící rychlost, Ideální případ, Eagle, Floating, Thread, Jackson, Výpočetní výkon, Odlišné zjištění, Současná architektura


Určitě si přečtěte

20 tipů a triků pro Gmail: Užitečné maličkosti, které zefektivní práci s e-maily

20 tipů a triků pro Gmail: Užitečné maličkosti, které zefektivní práci s e-maily

** V Gmailu je řada užitečných funkcí, které možná všechny neznáte ** Odeslání mailu můžete například pozdržet či naplánovat na později ** Nad Gmailem můžete mít s několika triky daleko lepší kontrolu

Karel Kilián | 25

Starý smartphone nemusí skončit v koši. 10 způsobů, jak ho ještě můžete využít

Starý smartphone nemusí skončit v koši. 10 způsobů, jak ho ještě můžete využít

** Co dělat s vysloužilým chytrým telefonem? Neházejte ho do koše! ** Našli jsme pro vás deset možností, jak ho prakticky využít ** I stará zařízení tak mohou být užitečná

Karel Kilián | 47

3D tisk pro naprosté zelenáče: Co vyrobíte na laciném stroji za pár tisíc korun

3D tisk pro naprosté zelenáče: Co vyrobíte na laciném stroji za pár tisíc korun

** Domácí 3D tisk je dnes už finančně dostupný prakticky všem ** Lacinou tiskárnu pořídíte za pár tisíc korun ** Jak vlastně tisk probíhá a jak navrhnout, co vytisknout

Jakub Čížek | 66

13 praktických tipů a triků pro Mapy.cz, které možná neznáte

13 praktických tipů a triků pro Mapy.cz, které možná neznáte

** Mapy.cz neslouží jen k zobrazení podkladů a plánování tras ** Nabízejí celou řadu dalších praktických funkcí a možností ** Vybrali jsme třináct tipů a triků, o kterých možná (ne)víte

Karel Kilián | 30



Aktuální číslo časopisu Computer

Speciál o přechodu na DVB-T2

Velký test herních myší

Super fotky i z levného mobilu

Jak snadno upravit PDF