Rozkládání zátěže kódování x264 mezi jádra a vlákna: Core Parking OFF
Kapitoly článků
Tato stránka se pokusí najít odpověď na to, zda je Bulldozer osmijádro, nebo čtyřjádro s nabušenou variací na Hyper-Threading. Abychom to zjistili, museli jsme se k Bulldozeru chovat jako ke čtyřjádru s Hyper-Threadingem. Každý Bulldozer modul budeme považovat za jedno jádro schopné zpracovat dvě vlákna, stejně jako je tomu u procesorů Intel Core i7 Sandy Bridge či Lynnfield.
Začneme takticky „od konce“, tedy s vypnutým Core parkingem. Jako příklad si vezmeme Bulldozer, abyste viděli, co se vlastně bude dít. Pustíme třikrát kódování videa pomocí nejnovější x64 verze x264 (build 2106, kde je už nějaká podpora AVX i XOP), přičemž první instance bude používat všechna jádra a vlákna, druhá pouze 1., 3. 5. a 7. vlákno (označeny jako 0, 2, 4 a 6) a třetí pouze první čtyři vlákna (0, 1, 2 a 3). Aby to bylo přehlednější, budeme pro označování používat binární vyjádření:
- 1. instance: 11111111
- 2. instance: 10101010
- 3. instance: 11110000
Druhou instancí tak zaměstnáme u Intelu čtyři jádra bez vlivu Hyper-Threadingu a po jednom jádru z každého ze čtyř Bulldozer modulů. Třetí instance zaměstná v případě Intelu dvě jádra včetně Hyper-Threadingu a u AMD dva celé moduly (všechna jejich jádra).
Pokud by Bulldozer měl být považován za osmijádro, pak se musí znatelně lišit první instance od druhé a třetí, zatímco druhá a třetí instance by se měly lišit jen trochu. Faktem ale je, že vzhledem k podpoře AVX v x264 jistý rozdíl mezi 2. a 3. instancí očekáváme, protože osmijádrový Bulldozer má jen čtyři FPU jednotky schopné makat naplno s AVX. Otázkou je, co vlastně tato verze x264 používá v případě Bulldozeru: AVX, nebo XOP, nebo obojí a v jakém poměru ;-).
Ukázka průběhu první instance
Na obrázku, který je typickou ukázkou práce x264 kodéru, je vidět průběh kódování. Graf začíná zhruba v momentě, kdy je spuštěn první průběh, druhý průběh je vyznačen oranžovou křivkou (jde o celkovou zátěž vybraného procesu ve sledovači prostředků) a samozřejmě není celý, ale přibližně tak, jak je to vidět, se to táhne až do konce průběhu.
Ukázka průběhu 2. instance (vlevo) a 3. instance (vpravo)
Graf druhé a třetí instance názorně ukazuje zátěž procesorových vláken 0, 2, 4 a 6, resp. 0, 1, 2 a 3. Připomínáme, že máme vypnutý Core Parking. Až ho zapneme, bude v tom správný hokej, uvidíte ;-). Jdeme na výsledky první instance pořízené ve Windows 7 a pro srovnání i Windows 8:
Mezi jednotlivými systémy vidíme minimální rozdíly, s drobnou výjimkou u prvního průchodu o Core i7 2600K, což ovšem považujeme za anomálii (měření tentokráte z časových důvodů neprobíhalo třikrát už každé situace, ale jen jednou). Důležitější jsou především druhé průchody, nicméně i ty první v tabulce zatím necháme, protože zde také ještě nastanou zajímavosti. Je otázkou, zda by byl Bulldozer poražen procesorem Core i7 880, který běhá o 133 MHz rychleji než model 870. Myslíme si, že spíše nikoli, nanejvýš v prvním průchodu, který zase až tolik nepotřebuje více jader jako spíše vyšší takt (on sice více jader využít dokáže, ale ne naplno).
Nyní ale zajímavější čísla: k první instanci přidáme druhou:
Toto už začíná vypadat zajímavěji. Bulldozeru ubrání druhého jádra v každém modulu ublížilo totiž hodně podobně jako ubrání Hyper-Threadingu u procesorů Core i7. Rozdíly mezi operačními systémy opět zanedbatelné, zajímavěji vypadá nárůst rychlosti prvního průchodu po odebrání sousedních vláken jader/modulů.
Do třetice všeho dobrého - přidáme třetí instanci:
Je vidět zajímavá věc: Bulldozeru tato změna ublížila méně než Intelu, tomu zase ublížilo méně odebrání Hyper-Threadingu. Je to logické: AMD o procesoru FX-8150 tvrdí, že jde o osmijádro a tudíž by mělo být do určité míry jedno, jestli se o dvouvláknovou práci podělí dvě jádra v jednom modulu, nebo dvě jádra, každé z jiného modulu. Jelikož ale v modulu jádra hodně věcí sdílí, zas tak úplně jedno to není. U Intelu jde též o logické vyústění: Hyper-Threading rozhodně není tak silný jako u Bulldozeru druhé jádro v modulu.
Abychom však řekli úplnou pravdu, pořád se nemůžeme rozhodnout, zda je Bulldozer modul spíše dvoujádro, nebo spíše jednojádro. Čistokrevné dvoujádro (jako třeba u Bobcatu) to určitě není, na jednojádro jde ale zase o dost velký nárůst.