Dvoujádrový procesor: mýtus silnější než realita

Když jsem před rokem a půl napsal článek s příhodným názvem „Dual-core: proč nemůže uspět“, byl jsem mnohými označen za skeptika. Nevěřil jsem tomu, že se dvoujádrové procesory dokážou v blízké budoucnosti významně prosadit. Od té doby už nějaký ten čas uplynul, změnilo se ale za tu dobu něco? Má už v dnešní době nákup dvoujádrového procesoru význam?
Kapitoly článku

O dvoujádrových procesorech toho bylo napsáno již mnoho. Testovali je snad už ve všech magazínech. Provází je obrovský hype (jakási forma nadnesené „reklamní kampaně“) majitelů argumentujících tím, že dva jsou víc než jeden. Stejně jako osmiválcový motor v autě je proti čtyřválcovému znakem síly, je i dual-core jakousi formou typického lidského chlubení se „já mám víc“. Jenže znáte to – všechno má své „ale“, nic není dokonalé.

Stejně jako osmiválcový motor poskytne stejnou službu jako čtyřválcový (nějaký výkon transformovaný v pohyb), i dvoujádrový procesor má dělat v zásadě totéž, co procesor klasický jednojádrový – počítat programy (poskytovat nějaký výpočetní výkon). Opustíme-li poněkud primitivní chování kořenící v pravěkém soupeření o vůdcovství tlupy, můžeme se rozumně zeptat: „Stojí dual-core opravdu za to? Poskytne mi tu nejlepší hodnotu?“ Právě to jsem si dal jako úkol tohoto článku.

Pokud jste typ člověka, který musí za všech okolností působit jako snob, už dále nemusíte číst.

Dual-core a speciálně navržený software

Připomeňme si pro začátek ve stručnosti, co to vlastně dvoujádrový (resp. vícejádrový) procesor vlastně je a jak funguje.

Běžný procesor funguje tak, že na vstupu přijímá instrukce a data načítaná z paměti RAM, respektive z pevného disku. Když spustíte např. Microsoft Word, tento při svém spuštění přikazuje procesoru (zjednodušeně), aby otevřel nové okno, aby se objevil na liště s tlačítkem Start, aby vytvořil nabídku počínaje záložkou Soubor, aby v ní vyplnil další volby (Nový, Otevřít, Zavřít, Uložit, Uložit jako...) Tento, jak jistě uznáte, dlouhý seznam úkolů je ve skutečnosti mnohem delší. Procesor je totiž natolik hloupý, že rozumí jen několika málo příkazům – podobně jako kapesní kalkulačka za vás neopraví pravopisné chyby, stejně tak nelze říkat procesoru „nakresli“.

Konkrétně například kreslení na obrazovku vyžaduje, aby program procesoru sdělil souřadnice, kam má psát. Pak mu musí říct, co má s tímto místem udělat pomocí velmi jednoduchých příkazů – např. že tam má namalovat tečku nějaké dané barvy, což samotné pak musí dále rozložit na elementární matematiku (sčítání, odčítání, násobení, dělení). Víme-li například, že levý horní roh obrazovky má souřadnice x = 1 a y = 1 a že chceme psát na čtvrtý řádek, přičemž každý řádek je vysoký deset bodů, pak příslušné souřadnice se spočtou jako y = 4 × 10 (výsledek 40). Kombinace teček vytvoří písmeno, více písmen slovo, slova nabídky atd.


Kalkulačka provádí obdobně jednoduché matematické úkony jako procesor a to právě využitím schopností procesoru.

Pomocí těchto velmi jednoduchých operací je možné udělat cokoli, co na obrazovce vidíte, sčítáním v Kalkulačce počínaje a nejnovější počítačovou hrou konče. Operace jsou instrukcemi („násob“) prováděnými nad daty („4“, „10“). Sekvence těchto instrukcí je programové vlákno.

Každé programové vlákno sestává až ze stovek tisíc po sobě jdoucích instrukcí a na ně navázaných dat. Ty jsou počítány za sebou v přesně stanoveném pořadí. Je například zřejmé, že vyplňovat položky Nový, Otevřít atd. ve Wordu je možné až v okamžiku, kdy existuje záložka Soubor. Proto je tato posloupnost daná a neměnná. Běžný jednojádrový procesor umí zpracovávat v jeden okamžik jedno takové vlákno. Jinými slovy, budeme-li chtít v onom Wordu vyplnit záložky Soubor, Úpravy, Zobrazit, program to provede postupně – nejdříve se bude zabývat záložkou Soubor, poté Úpravy atd.

Nyní se konečně dostáváme k tomu, co umí dvoujádrový procesor. Ten je totiž schopen přijmout na vstupu dvě programová vlákna současně, a tedy provádět dvě sekvence instrukcí paralelně (vedle sebe), a to každý téměř takovou rychlostí, jako procesor jednojádrový (s hodně velkou ztrátou výkonu to už před čtyřmi lety uměl HyperThreading). V našem modelovém příkladu by tedy dvoujádrový procesor mohl současně vyplňovat nabídku Soubor a Úpravy. Čtyřjádrový by pak zvládnul v jeden okamžik ještě nabídky Zobrazit a Vložit. Díky dvěma jádrům může být dvoujádrový procesor v optimálním případě oproti jednojádrovému dvojnásobně rychlý. Ale to pouze za předpokladu, že jsou jeho obě jádra zatížena (dvěma) sekvencemi instrukcí (dvěma programovými vlákny). Pokud je zatíženo jen jedno, je výkon dvoujádrového procesoru zcela identický s výkonem jednojádrového (že to za určitých okolností nemusí být pravda, si ukážeme za chvíli).

Krásný ideál s velkými nedostatky

Idea stojící za vícejádrovými procesory je sice krásná, bohužel ale taky značně „nedokonalá“. Vcelku zajímavá myšlenka má hned několik nepříjemných vad na kráse. Pro využití potenciálu je totiž zapotřebí speciálních aplikací – tzv. multithreaded (vícevláknových).

O co jde? Při programování člověk (v pozici „příkazce“) zapisuje v daném pořadí požadavky, které má procesor udělat. Programátor tak píše do kódu, že při startu má Microsoft Word vytvořit nabídku Soubor a vkládat do ní volby Nový, Otevřít... s různými funkcemi. Jak tak píše, sestavuje pořadí úkonů. Jinými slovy, vytváří programové vlákno. Vlákno, které je schopné zaměstnat jen jedno z jader dvoujádrového procesoru. Takové jediné vlákno nedokáže využít potenciálu dvoujádrového procesoru. K tomu jsou totiž zapotřebí vlákna dvě.

Kde se tedy druhé vlákno vezme? Programátor ho musí vytvořit. Zjednodušeně řečeno musí označit kusy programu a ty jakoby přidělit jednomu vláknu, zatímco zbytek zůstane ve vláknu původnímu.


V programu vytvořená vlákna „h1“ a „h2“

Problémové na celé záležitosti je, že toto vytváření vláken ho stojí čas. Čas, který on by raději využil návštěvou kina se svojí přítelkyní. Čas, který jemu samotnému nic nepřinese a nikdo mu ho nezaplatí. Rozumně ekonomicky se chovající člověk jedná podle zásady, že když nemusí něco dělat, tak to prostě nedělá, neboť jakákoli akce zvyšuje náklady (čas, peníze, nálada...), které když nejsou adekvátně kompenzovány, snižují výsledný užitek (tedy poměr přínos/náklady). Typickému programátorovi je úplně lhostejné, zda jím vytvořený program poběží na zrovna vašem počítači dostatečně rychle. Neběží-li, vzkáže vám, abyste si prostě pořídili rychlejší. Často programátoři ani nechtějí zapínat optimalizace kompilátoru, což by jim zabralo pět minut a udělalo by se to samo. Chovají se racionálně.

Zdá se vám to neetické? Omyl je pravdou. Ekonomické chování vede ke správné alokaci zdrojů. Zabraňuje tomu, aby jedna strana přenášela své problémy na někoho jiného. Programátor nemá absolutně žádný zájem na tom, aby na něj výrobci hardware přenášeli své problémy, a proto nebude programovat s využitím vláken až do okamžiku, kdy to bude nezbytně nutné. Na tomto místě si přiznejme jedno – dvoujádrové procesory nikdo nevyrábí proto, aby vám udělal radost, nýbrž proto, že se na nich dá vydělat. Výrobci jako IBM, Intel či AMD desítky let zvyšovali výkon pomocí vyšší frekvence a pomocí vylepšování čipu. Tato taktika byla úspěšná a vedla ke stále výkonnějším (ve všech ohledech, bez nějaké podmínky) produktům. Dual-core je zde odpovědí na to, že desítky let aplikovaná cesta je kvůli fyzikálním limitům neudržitelná.

Můžete si to představit jako u letadel. Ta také kdysi létala pomalu, řekněme 350 km/h. Poté přišly na řadu tryskové letouny s rychlostí 900 km/h. Doba cestování se zkrátila, komfort nabízený jednotlivci tím vzrostl. Pak přišel Concorde a rychlost přes 2000 km/h. Jenže se ukázalo, že Concorde má vysokou spotřebu paliva a že je drahý na údržbu. Vysoké náklady mu zabránily se prosadit. Proto dalším vývojovým stupněm po tryskových letadlech byly tzv. wide-body jako např. Boeing 747, McDonnell Douglas DC-10 a jiné, které přinesly něco jiného – velkokapacitní přepravu a z toho plynoucí pokles cen letenek. Z hlediska délky letu a komfortu pro jednotlivce ale nic moc nezměnily.

Protože programátoři nemají žádnou motivaci ani stimulaci k tvorbě vícevláknových aplikací, je těchto málo. Málo jich je ale i z toho důvodu, že ještě nedávno nikdo dvoujádrové procesory neměl, neboť tyto prostě neexistovaly. V podstatě jedinou výjimkou je profesionální software používaný na pracovních stanicích – tedy nástroje určené ke zpracování audiovizuálních nahrávek (fotografie, video, audio), rendering, nástroje využívané ve strojírenství (CAD) atp. – a z ještě větší části serverové záležitosti (databáze, email servery, datové sklady... ) U těchto typů aplikací jsou důvody zřejmé:

1) Tyto počítače už delší dobu mají více než jeden procesor, což z nich činí ekvivalent dvoujádrového čipu.

2) Vysoké požadavky na výkon a především vysoká prodejní cena jsou faktory, které hrají ve prospěch optimalizace. Dodatečné úsilí programátorů se jim vrátí formou vyšší mzdy.

Zde v podstatě platí, že prakticky každá serverová záležitost využívá více vláken – je totiž téměř nemyslitelné, aby tomu bylo jinak. U pracovních stanic je situace různorodá – mnoho aplikací dvoujádrové procesory podporuje, některé aplikace ale nikoli. Stále je to ale o mnoho lepší než u běžného SOHO (Small Office / Home Office) nasazení a domácího použití.

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , , ,