Více jader, větší výkon
Vystačíte si s výpočetním výkonem dvou jader, nebo jich potřebujete čtyři, osm, 16? A znamená víc jader v procesoru i vyšší výkon?
THOMAS LITTSCHWAGER & MARTIN JÄGER
Mýtus Počet jader v procesorech se neustále zvyšuje. Čím větším množstvím jader totiž procesor disponuje, tím je i rychlejší, takže byste měli raději kupovat procesory s větším množstvím výpočetních jader.
Pravda Procesor s větším počtem jader bude vždy rychlejší při paralelní práci s více programy. V případě, že využíváte primárně jen jeden program, musí být optimalizován pro práci s více jádry, a to stále řada aplikací neumí. Do optimalizace aplikací pro provoz s vícejádrovými procesory se programátorům dlouhou dobu moc nechtělo a paralelní zpracování vláken programů se používalo převážně u serverů a nejvýkonnějších pracovních stanic. V roce 2005 však výrobci ukončili svůj dlouhý souboj o zvyšování výkonu CPU neustálým zvyšováním frekvence jediného jádra a zaměřili se na architekturu více jader pracujících na nižší frekvenci. Přidávání jader teoreticky znásobuje výkon procesoru, ale v praxi vede k tzv. multicore krizi.
V éře před příchodem vícejádrových procesorů zpracovával CPU programy sekvenčním způsobem, tedy příkaz po příkazu, takt po taktu. Takové programy pracovaly rychleji na jednojádrových procesorech s vyšším taktem než na vícejádrových CPU s taktem nižším. Sekvenčně napsané aplikace většinou nelze automaticky paralelizovat. K tomu je nutné, aby s paralelizací programátor počítal již od začátku, a může tak učinit jedním ze tří způsobů vysvětlených v naší infografice.
První z nich počítá s výpočty, které lze snadno paralelizovat a provádět. Další kategorie pracuje s výpočty, které jsou rychlé i v případě, že nejsou paralelizované a není třeba je upravovat. Ve většině případů však programátor musí zvolit určité části kódu a upravit je tak, aby je bylo možné paralelizovat. Musí tedy oddělit výpočty, které na sebe navazují a nelze je většinou paralelizovat, od nezávislých výpočtů, které paralelizovat lze. Musí tedy nastavit pravidla (tzv. race conditions) pro případy, kdy bloky dat přistupují ke stejným zdrojům. V nejhorším případě se může stát, že se programové bloky (dva nebo více) navzájem zablokují a program nemůže doběhnout do konce (nastává tzv. deadlock). Taková analýza programu zabere hodně času i práce a programátoři ji nedělají rádi. Z toho důvodu dosud nejsou všechny aplikace optimalizovány pro vícejádrové zpracování a ani osmijádrové procesory je nezvládnou rychleji než procesory jednojádrové. Drahé vícejádrové procesory v takovém případě zbytečně plýtvají energií, a i když jsou využity pouze z části, aplikace je zahřívá víc, než kdyby byla ke zpracování rozložena do více jader při nižším kmitočtu. Tento mýtus tedy není vždy pravdivý – pokud není software dobře optimalizován, může být větší počet jader i nevýhodou.
SNADNO PARALELIZOVATELNÉ VÝPOČTY
Řadu výpočtů, jako je například násobení více činitelů, lze velmi snadno paralelizovat. Každé jádro zpracuje část výpočtu a mezivýpočty se násobí až do dosažení výsledku.
NETRIVIÁLNÍ PARALELIZACE
Na první pohled nelze výpočty, které jsou založeny na využití jiných mezivýpočtů, paralelizovat. Často ale může i v takových případech dobrá analýza urychlit zpracování výpočtu prostřednictvím více jader.
VÝPOČTY, KTERÉ NELZE PARALELIZOVAT
Řada výpočtů musí být zpracovávána krok za krokem. Vzhledem k nadřazenosti matematických operací nelze za daných podmínek žádnou část výpočtu paralelizovat.