V dnešní době je již téměř standardem mít v počítači vícejádrové procesory. Dokonce dnes nalezneme na trhu i telefony, které mají procesory s více jak jedním jádrem. Větší počet jader nám dává možnost výrazně zvýšit výkon aplikace. Abychom takového výkonu mohli využívat, musíme na možnosti většího počtu jader myslet již při samotném vývoji aplikace. Tato kniha vás nastíněnou tématikou spolehlivě provede a ukáže vám, že paralelní zpracování nemusí být tak složité, jak se říká.
Programovacím jazykem, jenž byl zvolen pro ukázky zdrojových kódů, je nízkoúrovňový jazyk C. Autor v úvodu knihy upozorňuje, že se nejedná o učebnici tohoto jazyka. Je tomu skutečně tak. Pakliže neovládáte alespoň základy tohoto jazyka, určitě si je před přečtením této knihy osvojte. Místy jsou v knize i konstrukce v jazyce symbolických adres. Tyto ukázky jsou přímočaré a jsou doprovázeny řádnými komentáři. Není proto potřeba žádná znalost jakéhokoliv jazyka symbolických adres.
Kniha je psána strukturovaně a je tematicky rozdělaná do jedenácti kapitol. První kapitola se zabývá hardwarem počítače. Popisuje funkce a architekturu procesoru - jakým způsobem procesor zpracovává instrukce, jaké typy pamětí se používají a jaký mají vliv na výkon. V knize je mimo jiné ukázka překladu zdrojového kódu jazyka C do jazyka symbolických adres. Následující druhá kapitola řeší obecně problém výkonu aplikací. Autor se v ní zabývá například významem algoritmické složitosti či správné volby datové struktury nebo vlivem kompilátoru na výkon aplikace. Dále je zde možné najít ukázky vybraných profilovacích nástrojů (AMD Coda Analyst, Solaris Studio Performance Analyzer, Shark a VTune).
Třetí kapitola se zabývá paralelizmem. Popisuje nejrůznější strategie paralelizace, jak identifikovat úsek, který je vhodný paralelizovat, a jak velký výkon můžeme získat. Také jsou zde nastíněné možné problémy, které paralelizace přináší, jako například závislosti a synchronizace zdrojů. Velká část této kapitoly se také věnuje vzorům pro paralelizace – kupříkladu strategii klient-server, většímu počtu kopií téže úlohy, proudu úloh a dalším náležitostem. Čtvrtá kapitola vás pak uvede poněkud hlouběji do problému synchronizace a sdílení dat. Setkáte se s příklady známých přístupů řešení (např. mutex) a nejběžnějšími způsoby komunikace mezi procesy (např. fronty zpráv). Některé detaily si autor schovává do pozdějších kapitol, kde se jim věnuje podrobněji.
Vlákna a POSIX
Pátá kapitola se zabývá vlákny v UNIXových systémech, konkrétně rozhraním POSIX. Na zhruba padesáti stránkách se dozvíte vše podstatné o životě, synchronizaci a komunikaci těchto vláken. Není zde zamýšlen konkrétní operační systém, proto zde nehledejte žádné konkrétní neobvyklosti konkrétních UNIX systémů. Šestá kapitola je obdobně postavená jako ta předešlá. S tím rozdílem, že rozebírá práci s vlákny v systému Microsoft Windows.
Líbilo se nám, že autor v této kapitole kladl důraz na společné rysy s rozhraním POSIX. V sedmé kapitole je lehce odbočeno od nízkoúrovňového přístupu a je v ní představeno rozhraní OpenMP, které umožňuje pomocí speciálních direktiv v kódu vytvářet automatickou paralelizaci.
Osmá kapitola vám ukáže cestu, jak si můžete sami řídit synchronizaci a sdílení. Zaměřena je zejména na různé problémy, na které je dobré myslet při psaní synchronizačního kódu a na to, jak zajistit konzistenci dat. Devátá kapitola se věnuje škálování. V podstatě se vám autor snaží ukázat, že ne vždy je paralelizace úlohy výhodná, zejména z důvodu vyšší režie.
Desátá a jedenáctá kapitola je již závěrem knihy. V desáté kapitole je lehce nastíněno několik dalších používaných technik a směrů pro paralelizaci, v jedenácté kapitole se nachází několik posledních rad a autorova úvaha o budoucnosti paralelizace.
Ucelený přehled na 400 stranách
Na zhruba 400 stránkách se autor snaží seznámit čtenáře s tématem paralelizace, které by mohlo být zpracováno do několikasvazkové kolekce knih. Autorovi se to do značné míry povedlo a do knihy zanesl ty nejpodstatnější principy. Místy bylo znát, že je něco popsáno velmi obecně a pro získání hlubší znalosti je potřeba sáhnout pro jinou publikaci. Líbila se nám snaha zachovat maximální nezávislost na platformě, aby mohl mít knihu ve své sbírce nejen vývojář pro prostředí Windows, ale i vývojář v Linuxu nebo v Oracle Solaris.
V úvodu recenze knihy jsme zmínili, že ukázky kódu jsou v jazyce C. Je dobré upozornit, že v některých ukázkách jsou použity konstrukce z moderního dialektu C99, který ne všechny kompilátory zvládnou. Osobně nám chyběla v knize přítomnost jakéhokoliv vyššího programovacího jazyka, jakým je například Java. Využití nabytých znalostí ve vyšším programovacím jazyku, například volání nativního kódu jazyka C z platformy Java či samotné využívání vláken a jejich vliv na výkon ve vyšším programovacím jazyce v knize nehledejte.
Naopak se nám líbila část knihy, která se věnovala samotnému identifikování kódu, který je vhodným kandidátem pro paralelizaci, omezování škálování ze strany hardwaru či úskalí, která s sebou přináší ručně psaná synchronizace prostředků. Dále nás velmi potěšila část, která se věnovala automaticky vyvolané paralelizaci ze strany kompilátoru kódu a následně její optimalizaci.
Verdikt:
Koupí této knihy získáte ucelený přehled o problému paralelizace a obecného popisu vláken. Pro člověka znalého základů fungování operačních systémů a vláken zde není příliš mnoho nových informací. Pakliže se ale chcete seznámit s paralelním zpracováním a veškerými tématy, které s tím souvisejí, či chcete mít ve své knihovně takto ucelený přehled informací, pak koupí této knihy určitě neprohloupíte.
Počet stran: 416 stran
Cena: 509 Kč
Vydal: Computer Press, 2011