Vývojáři a vícejádrová revoluce

1. 11. 2008

Sdílet

Elektrotechničtí inženýři v nejvyspělejších mikroprocesorových laboratořích světa nás poslední dobou zásobuj...


Elektrotechničtí inženýři v nejvyspělejších mikroprocesorových laboratořích světa nás poslední dobou zásobují nebývalou porcí inovací v hardwarových technologiích. Zcela nejpozoruhodnějším výsledkem jejich aktivit bylo vytvoření vícejádrových procesorů. Tyto procesory obsahují několik exekučních jader, která jsou schopna paralelně zpracovávat samostatné toky mikroinstrukcí. Nicméně aby mohla být vícejádrová revoluce považována za úspěšnou, musejí se tvůrci softwarových aplikací nejprve naučit, jak správně psát programy, které budou optimalizovány pro svůj běh na strojích osazených vícejádrovými procesory.



Jednovláknové a vícevláknové programy

Každý počítačový program obsahuje tzv. primární programové vlákno, na němž jsou zpracovávány jednotlivé programové instrukce. Všechny moderní programovací jazyky dovolují vývojářům vytvářet další vlákna, která se označují termínem vedlejší nebo také pracovní. Podle počtu vláken (PV), s nimiž program pracuje, můžeme všechny programy rozdělit do dvou kategorií:

Jednovláknové programy, PV=1 (program obsahuje pouze primární vlákno).

Vícevláknové programy, PV?2 (program obsahuje 1 primární vlákno a n pracovních vláken).
Grafický model vykresluje programová vlákna, která reprezentují aplikační vlákna. Aplikační vlákna sestrojuje vývojář pomocí syntakticko-sémantických konstrukcí zvoleného programovacího jazyka (nebo prostřednictvím rozhraní API pro podporu paralelizace). Každé aplikační vlákno je mapováno na vlákno operačního systému. Operační systém pak řídí zpracování „svých“ vláken a také zabezpečuje jejich transformaci na hardwarová vlákna. Na základě uvedeného smíme sestavit hierarchii vláken, podle níž vidíme, že vývojáři pracují s vlákny na nejvyšší možné úrovni abstrakce.

Paralelní, distribuované a souběžné programování

Analýza paralelních algoritmů a vytváření paralelních programů jsou dvě hlavní oblasti, jejichž zkoumáním se zabývá paralelní programování. Paralelní programování je paradigma, které se snaží algoritmicky řešit úlohy, jež lze uskutečňovat paralelně. Analýza, návrh a implementace paralelních algoritmů a datových struktur jsou vedeny procesem datové nebo úlohové dekompozice. Zjednodušeně řečeno, v tomto procesu se vyčlení porce dat nebo typy úloh, které smějí být podrobeny paralelní exekuci. Paralelní programování se soustřeďuje hlavně na paralelní aplikace, které budou spouštěny na počítačích finálních uživatelů. Pokud je paralelní aplikace optimalizována pro běh na strojích s vícejádrovými procesory, pak dosahuje dobré škálovatelnosti. To znamená, že se dokáže flexibilně adaptovat na bázovou hardwarovou platformu, přičemž je schopna využít všechnu dostupnou výpočetní kapacitu. Vedle paralelního programování existuje také distribuované programování, jehož smyslem je tvorba distribuovaných programů, které využívají výpočetního výkonu množiny počítačů zapojených do sítí různé topologie. Distribuované programování nachází své uplatnění zejména v akademické a vědecké sféře, v níž jsou složité problémy řešeny pomocí gridových technologií a výpočetních clusterů. Paralelní a distribuované programování pak zastřešuje vědní obor, jemuž říkáme souběžné programování.

Paralelní programování není triviální, ale patří mu budoucnost

Na tomto tvrzení se shodují nejenom vývojáři, nýbrž i tvůrci kompilátorů, vývojových prostředí a dokonce i samotní producenti vícejádrových mikroprocesorů. Ačkoliv by problematika vývoje paralelního softwaru vydala na celou knížku, můžeme vývojářům poskytnout několik doporučení:

Změňte svou filozofii. Kde končí sekvenční tvorba programů, tam začíná paralelní vývoj softwaru. Program již není možné chápat jako množinu příkazů, které se postupně vykonávají, ale jako sadu úloh, o jejichž paralelní zpracování usilujeme.

Vyzkoušejte rozhraní API pro podporu paralelizace. Ať už je to populární OpenMP, nebo Microsoft Parallel Extensions či RapidMind: všechna zmíněná rozhraní API nabízejí vyšší úroveň abstrakce při provádění paralelních aktivit.

Investujte do svého vzdělání. Vzhledem k tomu, že revoluce ve znamení masivní paralelizace na sebe nenechá dlouho čekat, zkuste využít čas a připravte se na zvládnutí této technologické inovace již nyní. Je jisté, že odborníci na paralelizaci budou na pracovním trhu patřit k těm nejžádanějším. 8 0629/CZ ?Zpracování jedno- a vícevláknových programů na jedno- a vícejádrových procesorech

Současná teoretická informatika diagnostikuje čtyři základní exekuční modely jedno- a vícevláknových programů:

Zpracování jednovláknového programu na jednojádrovém procesoru. Toto je typický případ sekvenční exekuce programu, která neumožňuje žádnou paralelizaci. I takovýto program ovšem smí být podroben optimalizačním úkonům, které mohou produkovat znatelný nárůst výkonu.

Zpracování jednovláknového programu na vícejádrovém procesoru. Spustíme-li jednovláknový program na procesoru s více jádry, jeho zpracování bude rovněž sekvenční. Je to proto, že program s jedním vláknem obsadí pouze jedno exekuční jádro procesoru. Ostatní jádra jsou nevyužitá, a dochází tudíž k plýtvání výpočetní kapacitou počítačového systému.

Zpracování vícevláknového programu na jednojádrovém procesoru. Toto je varianta tzv. „pseudoparalelismu“. Díky preemptivnímu víceúlohovému zpracování a podpoře spouštění více vláken bude každému vláknu programu přiřazeno časové kvantum, během něhož bude procesor vykonávat kód právě jednoho vlákna. Uplyne-li časové kvantum, CPU se přesune na další vlákno v pořadí a zpracuje zase jeho kód. Tímto způsobem se CPU pohybuje mezi všemi dostupnými vlákny. Jelikož fyzikální délka časového kvanta je velmi malá (zpravidla se pohybuje v milisekundách), z vnějšího pohledu se jeví, jako by program pracoval paralelně (jak ovšem vidíme, není tomu tak).

Zpracování vícevláknového programu na vícejádrovém procesoru. Za předpokladu paralelní optimalizace programu (zejména co se týká distribuce pracovního zatížení jednotlivých vláken) lze rozdělit vlákna na jednotlivá jádra procesoru. Tím bude zahájeno paralelní zpracování programových operací na exekučních jádrech procesoru.

Nejenom počet jader ovlivňuje výkonnost procesoru

Stejně důležitou roli hraje i souprava rychlých vyrovnávacích pamětí, jež se vyskytují v několika úrovních neboli vrstvách. Přímo na exekučním jádru je přítomná vyrovnávací paměť 1. úrovně (L1 cache) a někdy také vyrovnávací paměť
2. úrovně (L2 cache). Nejnovější vícejádrové procesory spolupracují rovněž s vyrovnávací pamětí 3. úrovně (L3 cache), která je sdílena všemi exekučními jádry. Se vzrůstajícím číslováním vyrovnávacích pamětí se zvětšuje jejich alokační kapacita, ovšem zvyšuje se také přístupová doba. Zatímco L1 cache má jenom několik desítek kilobajtů, je to paměť, která je několikrát rychlejší než kapacitně vyspělejší L2 cache, resp. L3 cache.

Vícejádrové procesory

Od předchozí generace jednojádrových procesorů se vícejádrová CPU liší větším počtem exekučních jader implementovaných na jednom čipu. Každé z jader disponuje výpočetní jednotkou pro explicitní provádění toku mikroinstrukcí. Těmto tokům mikroinstrukcí, jež jsou exekuční jádra procesoru schopna realizovat, se říká hardwarová vlákna. Jelikož na každé exekuční jádro připadá jedno hardwarové vlákno, můžeme jejich vztah vyjádřit poměrem 1 : 1. Větší zastoupení výpočetních jednotek procesoru je důležité, protože umožňuje paralelně zpracovávat více úloh současně. Tento tzv. skutečný paralelizmus umožňuje naplno rozvinout myšlenku paralelního programování a paralelní exekuce počítačových aplikací. V současné době jsou na trhu k dispozici procesory se dvěma, třemi a čtyřmi jádry, připravují se však i procesory šesti- a osmijádrové. Zatímco hlavnímu zájmu spotřebitelů se těší především dvoujádrová CPU, dosažitelné jsou také procesory se třemi (AMD) nebo čtyřmi jádry (AMD a Intel).

Budoucnost je ale zcela jasná:

v následujících měsících a letech se budou exekuční jádra na procesorech dále množit. Od architektury „multi-core“ (8 a méně jader) se tak pozvolna přesuneme k architektuře „many-core“ (více než 8 jader). Jádra se budou na procesorech množit tak dlouho, dokud nenarazíme na hardwarové limity.