Příručka se člení do jedenácti různě zaměřených kapitol.
-
Kapitola Hardware, procesory a vlákna se zabývá popisem základních komponent počítače, způsobem zpracování strojového kódu procesorem, vztahem mezi virtuální a fyzickou pamětí, rozlišením platforem s UMA, NUMA a ccNUMA pamětí. V závěru kapitoly vysvětluje pojmy vlákno a proces.
-
Poměrně obecná kapitola Programování s ohledem na výkon se netýká přímo paralelizace. Kapitola konstatuje, že různé algoritmy mají různou algoritmickou složitost, že kompilátor má různé přepínače a že při odlaďování programu se hodí profilery a debuggery.
-
Kapitola Identifikování příležitostí pro paralelismus je úvodem do problematiky paralelismu.
-
Kapitola Synchronizace a sdílení dat diskutuje nutnost korektní synchronizace přístupu k paměti u více konkurenčních procesů, ukazuje nejběžnější synchronizační primitiva (např. spinlock) a nejběžnější prostředky komunikace mezi procesy poskytované operačním systémem (např. roury).
-
Kapitola Vlákna v rozhraní POSIX stručně představuje programování vláken a prostředky komunikace mezi vlákny v UNIXových systémech. Specifika jednotlivých operačních systémů však nejsou diskutována.
-
Následuje kapitola Práce s vlákny v systému Windows.
-
Monotematická kapitola Automatická paralelizace a rozhraní OpenMP podrobně předvádí direktivy preprocesoru z rozhraní OpenMP. Překvapivě další známé rozhraní Message Passing Interface (MPI) je zmíněno jen v předposlední kapitole, na dvou stránkách.
-
Kapitola Ručně programovaná synchronizace a sdílení ukazuje, jak s pomocí elementárních prostředků vytvořit vlastní synchronizační primitiva.
-
Kapitola Škálování s vícejádrovými procesory pojednává o situacích, kdy paralelizace aplikace nepřináší dostatečné zlepšení.
-
Kapitola Další techniky paralelizace zmiňuje možnost výpočtů s pomocí CUDA, OpenCL, jazyk Cilk++, funkcionální paradigma v programování, instrukce procesoru typu SIMD, MapReduce a MPI.
-
Vše uzavírá kapitola Několik poznámek na závěr.
Ukázky kódu jsou psány v jazyku C s využitím pouze nízkoúrovňových rozhraní operačního systému. (Pozor, některé příklady předpokládají moderní dialekt C99 jazyka C. Tento dialekt ne všechny kompilátory plně podporují.) Všechny uváděné zdrojové kódy jsou velmi krátké a mají pouze demonstrační charakter. Text se nezabývá vyššími jazyky, frameworky, rozhraními a běhovými prostředími (C++, GTK, Qt, Java...), které se využívají při vývoji běžného aplikačního softwaru.
Nelíbilo se mi
Název Programování aplikací pro vícejádrové procesory nekoresponduje s obsahem. Většina kapitol se věnuje obecně vláknům a stejně dobře platí i pro stroje s jedním jednojádrovým procesorem. Přímo problematikou vícejádrových procesorů se roztroušeně zabývá pouze několik stránek. Dále se výklad spíše než pro programování aplikačního softwaru hodí pro programování systémových utilit.
Autor Darryl Gove je zaměstnancem Oracle. Možná proto dopřává disproporčně velkou pozornost produktům této společnosti. Zdaleka nejvíce prostoru se věnuje vcelku marginálnímu operačnímu systému Solaris. Jednoznačně preferovanými vývojářskými nástroji jsou části Oracle Solaris Studio. Některé postupy (např. podkapitola Použití optimalizace pomocí informací z profilu) jsou vysvětleny jen pro Solaris Studio. Neustále je zmiňována procesorová architektura SPARC.
Kniha se téměř nevěnuje specifikům operačního systému Linux, přestože nápis na deskách hlásá „Určeno pro Windows, Linux a Oracle Solaris“. Například nastavování priorit procesů a vláken je popsáno pouze pro systém Windows. Nastavování priorit vstupně výstupních operací a zjišťování aktuální spotřeby zdrojů není popsáno vůbec pro žádný systém.
Podkapitola Běžně dostupné profilovací nástroje pojednává o produktech VTune, CodeAnalyst, OProfile, Solaris Studio Performance Analyzer, CodeAnalyzer, Shark a nástroj Instrument. Z nepochopitelných důvodů podkapitola zcela ignoruje populární svobodné nástroje Valgrind, GNU profiler (gprof) a Sysprof. Stručně o Valgrindu a Sysprof se dočtete v dřívějším článku Deset nástrojů pro vývoj aplikací v GNOME.
Zvolená česká odborná terminologie působí místy značně neobvykle. Například termín „grid“, který se zpravidla nepřekládá, je překládán jako „výpočetní soustava“.
Kniha obsahuje bez dalšího vysvětlení několik nepřesných zjednodušujících tvrzení. Například na stránce 38 se tvrdí, že 32bitový procesor dokáže adresovat maximálně 4 GB operační paměti. Ve skutečnosti třeba procesory x86 při zapnutí physical address extension dokážou adresovat několik desítek GB operační paměti.
Závěr
Kniha neobsahuje žádné výsledky benchmarků, rozsáhlejší ukázky z programátorské praxe, novátorské postřehy a ani jinou přidanou hodnotu. Uváděné informace není problém najít na internetu. Kupříkladu programování vláken v Linuxu podrobněji rozebírá anglická příručka Advanced Linux programming, která je volně ke stažení.
Na druhou stranu koupí publikace získáte komplexní pojednání popisující nejrůznější témata, která souvisejí s paralelismem. Výhodou je, že tyto informace nemusíte čerpat z mnoha pramenů.