Pred časom som sa znova stretol s touto technológiou od Intelu a rád by som sa podelil o pár výsledkov...
Hlavný zámer bol zistiť ako môže prispieť či už k čistému výkonu jadra, alebo aplikácie. Meral som vyťaženie CPU (pomocou Windows Task manageru) a k testovaniu som použil niekolko jednoduchších aplikácií. Výkon CPU bol meraný pomocou prográmku TestCPU 0.96 pričom za klúčovú hodnotu bol výkon FPU v megaflopoch.
P4:
V prvom rade som si na mušku zobral Pentium 4 ako jednojadrového zástupcu tejto technológie a skúsil niekolko aplikácií - či už jedno alebo viacthreadových.
Výkon celého jadra (merané bez HT) pri 3ghz frekvencii a 2mb cache je okolo 430 Megaflops.
Jednothreadová aplikácia prakticky dokázala využiť len jedno virtuálne jadro, čo nieje nič prekvapujúce. Vo vzťahu k výkonu CPU (hrubému výkonu) je to však negatívne pretože aplikácia tak 50 percent času nerobila nič a všetky akcie bežiace priamo na jadre tak zabrali dvojnásobok času.
Dvojthreadové aplikácie dokázali využiť jadro na sto percent bez nejakého následku.
Prakticky možný dopad na stabilitu systému kedy by pri jednej zacyklovanej aplikácii (spadnutá aplikácia ktorá vyťaží jadro na 100 percent) by mohol byť ten že systém sa hned nezloží, avšak za týchto situácií boli skôr pozorované velmi nepríjemné chyby na velmi nízkej systémovej úrovni - velmi podobné aké by ste videli pri zle pretaktovanom počítači.
Core I7:
Jadro ako také obsahuje 4 fyzické procesory, pričom hyperthreading z nich spraví 8 virtuálnych. Výkon jediného procesoru môže byť až cez 1300 megaflops podla verzie a frekvencie.
Hyperthreading funguje u tohoto CPU rovnako - to značí virtuálne zdvojí procesory na nízkej SW úrovni, čím ich virtuálne budete mať osem.
I7 sa svojím hrubým FPU výkonom od P4 líši značne. Dve P4 bez HT by mali čo robiť aby sa vyrovnali jednému jadru I7 s HT. Praktický dopad je ten že I7 lepšie znáša multiplikovanie jadier. Kdežto na P4 s HT jednothreadová aplikácia využila maximálne 215 Megaflops jadra, u I7 HT to môže byť až 650 megaflops.
Dopad na výkon aplikácií v tomto smere môže bývať velmi zásadný. Aplikácie s viac threadmi môžu mať rozličné nároky na CPU. Thread 0 môže na CORE 0 využívať 100 percent prostriedkov pričom ak by bolo viac výkonu využil by ho tiež, avšak Thread 1 na CORE 1 bude využívať povedzme 10 percent celkového výkonu jadra.
Obecne platí že čím vyšší hrubý výkon má jedno jadro celého CPU tým vyšší výkon je možné dosiahnuť. Hyperthreading však tento potenciálny výkon znižuje. Na druhej strane, pokial máme viacvláknovú aplikáciu ktorá využíva menej než 50 percent času jedného CPU v najnáročnejšom threade tak Hyperthreading uvolní časť výkonu inému threadu ktorý môže začať bežať paralelne v rovnakom čase.
To isté platí aj v prípade ak je 100 percent využitia jadra neefektívne pretože aplikácia produkuje vizuálne rovnaké výsledky. Ako príklad si predstavte aplikáciu ktorej Thread 0 je 3d renderer ktorý generuje wireframe pre GPU. Pokial renderer generuje napríklad 500 FPS, z ktorých grafika zobrazí 100 tak použitie HT nebude mať na výkon aplikácie žiadny dopad, prípadne ak by grafika tolko FPS aj zobrazila tak ludské oko rozdiel medzi 250 a 500 FPS nepozná (ak náhodou zoženiete tak výkonnú zobrazovaciu techniku).
Záver:
V ére p4 procesorov bol Hyperthreading značne neefektívny. V dnešnej dobe jeho použitie konečne má zmysel, avšak stálo by za uváženie umožniť nastavenie či a ktoré jadrá budú HT používať. Optimalizácia aplikácií v tomto smere môže značne pokrivkávať. Využitie jedného fyzického jadra bez HT pre nejaký náročný thread, a dalších troch s HT pre menej náročné thready aplikácie môže prispieť k rapídnemu optimalizovaniu výkonu.
V tomto smere ponúkajú riešenia bez HT vyšší hrubý výkon jedného jadra, riešenia s HT ponúkajú vyšší potenciál k jeho optimalizovaniu výkonu a efektívnejšiemu používaniu. Bohužial hybridné riešenie som zatial v praxi nemal možnosť nijak vyskúšať.