![jak-funguje-procesor-amd-fx-bulldozer-v-detailu](https://storage.googleapis.com/pctuning-cz/article/default.jpg)
Jak funguje procesor AMD FX (Bulldozer) v detailu
V další dnešní novince vám ukážeme, jak funguje první osmijádrový procesor od AMD (Bulldozer).
O Bulldozeru a procesorech AMD FX se nyní hodně hovoří, ale málokdo skutečně ví o čemu mluví a jak vše v procesoru funguje. Po unikátním článku o funkci Turbo Core 2.0 se dnes podíváme na funkci jader a vysvětlíme jednou provždy, zdali je procesor AMD FX osmijádrový nebo čtyřjádrový. Tím začněme.
![Jak funguje procesor AMD FX (Bulldozer) v detailu](https://storage.googleapis.com/pctuning-cz/media/images/d6cd5vd3jgrzwag60cdfaec95310215765751.png)
Procesory Intel architektury Sandy Bridge jsou pouze čtyřjádra, fyzicky jsou totiž na "die" čipu pouze čtyři jádra. Funkce Hyper-Threading nijak nezvyšuje počet fyzických jader, jen využívá stávající obvody procesoru jež se během normální činnosti "flákají" a zatíží je. Ano, pro Hyper-Threading je nutná speciální logika uvnitř procesoru a stojí za ní blíže nespecifikovaný počet tranzistorů navíc. Vůči velikosti samotného výpočetního jádra jde ale o nárůst plochy o 10-20 procent. U architektury Sandy Bridge má procesor fyzicky čtyři výpočetní jádra, každé má vlastní L2 cache a L3 je sdílená. Fyzická jádra jsou čtyři, logických pak osm. Nárůst výkonu Hyper-Threadingu se nedá přesně říci, záleží na vytížení jader a aplikaci. Někde je přínos větší (aplikace tolik nevytíží pipeline a zbývá více zdrojů pro HT). Průměrně se jedná o nárůst výkonu do 20-ti procent v určitých aplikacích. Najdou se ale i aplikace kde se HT zapínat přímo nevyplatí. Pokud totiž aplikace vytíží procesor natolik, že mu nezbude už žádná rezerva pro HT, může být výsledek naopak horší nebo s mizernou efektivitou.
Naproti tomu procesor architektury Bulldozer (obrázek nahoře), má fyzicky osm výpočetních jader. Že jsou umístěná ve čtyřech blocích po dvou se sdílenou L2 cache a dalšími obvody je už věc návrhu, fyzicky je ale jader osm. I AMD označuje procesor jako "první nativní osmijádro". Všech osm jader je pro systém transparentní a aplikace neví zdali je L2 cache nebo FPU sdílená, je jí to s prominutím jedno. Pokud někdo tvrdí, že jádra nejsou v modulu plnohodnotná, není to pravda - jsou. Každé z osmi má k dispozici L2 i L3 cache, záleží už jen na efektivitě přidělování prostředků. A v tom je právě trik jež vám dnes popíši ... jak totiž docílit co nejvyššího výkonu, když je zde jasná penalizace výkonu pokud budou obě jádra v modulu zatížená? - AMD na to šlo fikaně ... všechna čest!
![Jak funguje procesor AMD FX (Bulldozer) v detailu](https://storage.googleapis.com/pctuning-cz/media/images/969uqnh15y4gmrf60cdfaed2f1a8078586995.png)
Pokud zatížíte jedno jádro v systému, zatíží je jakékoliv ze sudých jader procesoru, na obrázku jsem označil červeně. Můžete si ve správci úloh hrát jak chcete, ale stále se zatíží vždy jen sudé jádro v modulu i když ručně vyberete liché! Operační systém může procesoru "přikazovat" co chce, ten ale ví své a zátěž vždy přehodí na sudé jádro. To ještě samo o sobě není nic zajímavého ... ale co když zatížíme dvě jádra? - Které se zatíží? - Jádro "1" v prvním modulu? - Podívejte se.
![Jak funguje procesor AMD FX (Bulldozer) v detailu](https://storage.googleapis.com/pctuning-cz/media/images/ykpturc89desc7q60cdfaedc137b724751843.png)
To je překvapení. Pokud jsou zatížena plně dvě jádra, zatíží se jako druhé opět sudé jádro v druhém modulu. To nám říká, že výkon obou threadů bude maximální, oba thready mají k dispozici "své" výpočetní jádro s celou L2 cache, s celou FPU jednotkou a nemusí se o výkon s druhým jádrem dělit. Co ale když zatížíme další jádro nebo dvě.
![Jak funguje procesor AMD FX (Bulldozer) v detailu](https://storage.googleapis.com/pctuning-cz/media/images/ybf3tzu0ak1tde460cdfaee6a027259705003.png)
![Jak funguje procesor AMD FX (Bulldozer) v detailu](https://storage.googleapis.com/pctuning-cz/media/images/u78y06jec9tfstg60cdfaef076e5274909070.png)
Pokud jste to odhadli takto, máte bod. Pokud procesor architektury Bulldozer zatížíte čtyřmi thready, jsou aktivní všechny čtyři moduly a v každém druhé jádro. V tuto chvíli mají všechny čtyři thready k dispozici maximální výkon modulu jen pro sebe. Žádné jádro se nemusí o sdílené komponenty dělit v bloku s tím druhým, které je pravděpodobně v C-state C6, tedy vypnuté. Není totiž potřeba a spoří to energii. Nejvyšší efektivitu má procesore AMD FX v aplikacích jež využijí maximálně čtyři thready (typicky hry?). Daleko vyšší bude i frekvence díky Turbo Core než o více aktivních jader. Tuto situaci jsem simuloval pomocí správce a programem s možností volit kolik jader zatížíte. V praxi se bude snažit Windows neustále zátěž "rozházet" i na čtyři zbylá jádra. Procesor se tomu ale usilovně brání a sám se snaží o efektivní rozložení viz horní obrázek.
![Jak funguje procesor AMD FX (Bulldozer) v detailu](https://storage.googleapis.com/pctuning-cz/media/images/qb667dg6qrtsldz60cdfaef98db1529055045.png)
Co se ale stane v případě plného zatížení všech jader, nebo více než čtyř? - Zatíží se samozřejmě i lichá jádra viz poslední obrázek. V tuto chvíli výkon na jádro a efektivita klesá. Sdílení prostředků plně zatížených jader bude náročné a dojde ke znatelné ztrátě výkonu modulu. Pokud bych to měl odhadnout, nebude už modul (jedno jádro) pracovat s efektivitou 100 procent jako v případě čtyř threadů, ale třeba s 80-ti procenty, ovšem se dvěma jádry (2x80). Efektivní výkon tedy klesne na jádro, na modul se ale zvýší o předpokládaných 60 procent. Pokud tedy srovnáme se Sandy Bridge kde Hyper-Threading přináší benefit +20 procent, tento systém by mohl přinést minimálně 60 procent výkonu navíc, někde třeba i více (nebo méně, dle aplikace a vytížení).
Jaká je výhoda tohoto řešení? - AMD ušetřilo spoustu prostoru na "die" procesoru, jelikož paměti cache vždy zabírají nejvíce místa. Záleží tedy jen na efektivitě sheduleru v přidělování prostředků oběma jádrům v modulu. Paradoxně se totiž můžeme dostat do situace, že výkon v nějaké hodně náročné aplikaci (masivně využívající cache a FPU), což jsou serverové úlohy databází a podobně, bude pěkně škálovat s méně než čtyřmi thready, ale po překročení zatížení čtyř jader bude strmě klesat dolů. Tato situace je pozorovatelná i v běžné praxi, kdy u aplikací jež nezatíží procesor tolik (Cinebench R10) výkon škáluje solidně, ale u náročnější úlohy (Cinebench R11.5) už to není tak ideální, o tom ale až někdy příště.