. : New eShop! - Mobilní verze - Pandatron.cz - Pandatron.sk - Diskuzní fórum - Zakázkový vývoj : .
 
OpenMP a vícejádrové systémy
25. března 2013 - 8:00 | Dr. Eric Stotzer, PhD | OpenMP a vícejádrové systémy | Komentářů: 3  

OpenMP a vícejádrové systémy

OpenMP je rozšířený standard paralelního programování při sdíleném paměťovém prostoru a podporou několika jazyků. V následujícím článku si představíme jeho možnosti i přiblížíme první kroky při návrhu paralelního systému.

Nové generace vícejádrových procesorů mění vývoj aplikací snad ve všech oblastech výpočetní techniky. Mezi jejich hlavní výhody patří bezesporu vysoký výpočetní výkon při nízké spotřebě energie a zároveň i poměrně nízká výrobní cena. Je tedy logické, že se vícejádrové procesory v poslední době rozšířili i do vestavěných (tzv. embedded) systémů, kde umožňují implementaci zcela nových aplikací.

Bohužel právě podpora paralelního zpracování vytváří zároveň ten největší problém, kterým je stále komplikovanější software. V případě vestavných systémů je situace ještě o něco horší, neboť zde musíme brát v úvahu i řadu kritických funkcí, které jsou pro provoz systému zcela nezbytné. Jednou z možností, jakou se lze s uvedeným problémem vypořádat, je použití systému programovacího modelu vysoké úrovně, jako je například OpenMP. Pouze tak je možné nejen zvýšit produktivitu programátora, ale i snížit náklady na vývoj a samozřejmě také omezit dobu uvedení aplikace na trh.

V následujícím článku se zaměříme na převod stávající aplikace do systému paralelního programovacího modelu OpenMP, použitelného na vícejádrových procesorech.

OpenMP
OpenMP je rozšířený standard paralelního programování při sdíleném paměťovém prostoru a podporou jazyků C, C++, nebo Fortran. Jedná se o vysokoúrovňový programovací systém s dobrou přenositelností kódu, který usnadňuje vývoj paralelních úloh a jejich dílčích mechanismů.

Uživatelé mají k dispozici možnost zvolit si takovou strategii, která je vhodná právě pro jejich daný systém a využívaný programový kód, který má být vykonán paralelně. O výsledné mapování jednotlivých výpočetních algoritmů do zvoleného procesoru se již postará sám kompilátor OpenMP.


Obr. 1: Hlavní vlákno je podle potřeby rozděleno na několik dalších vláken. Paralelismus zde přidává další výkon pouze podle potřeby: tj. pokud to aplikace vyžaduje, jednoduchý sekvenční program se rozvine do několika paralelních vláken.

Jak je vidět na obr. 1, OpenMP je programovací systém založený na vláknech. Hlavní vlákno programu (zelená barva) zajišťuje obvyklé sekvenční vykonání dílčích instrukcí. Jakmile se však zpracovávání hlavního vlákna dostane do „paralelní oblasti“, dojde k jeho rozdělení do více vláken a jejich další vykonávání probíhá paralelně s hlavním vláknem.

Rozhraní OpenMP API dovoluje programátorovi následující úkony:

  • Vytvářet a spravovat vlákna
  • Přiřazovat a rozdělovat práci (úkoly) do vláken
  • Určovat, které proměnné jsou mezi vlákny sdílené a které jsou privátní
  • Koordinovat přístup vlákna ke sdíleným datům


Obr. 2: Příklad paralelního zpracování. Oblast paralelního kódu z obr. 1 zde reprezentuje několik samostatných smyček, které jsou vykonávány souběžně. Jediná kopie proměnných x[] a c[] se přitom sdílí mezi všemi vlákny.

Nejdůležitějším krokem je vždy přechod ze stávajícího zdrojového kódu v jazyku C/C++ do paralelního zpracování, který je díky využití povelů pro preprocesor (#pragma) velice jednoduchý. Jak je vidět na obr. 2, použitím jednoduché směrnice můžeme OpenMP přímo stanovit, které části zdrojového kódu je možné provádět paralelně a kdy je tedy vhodnější rozdělit práci do samostatných procesů. Hlavní slovo má tedy sám programátor, který přesně určuje, jaké části zdrojového kódu jsou náročné na zpracování a je možné je rozdělit do samostatných vláken. Takto jednoduchý je i celý přechod ze stávající aplikace do paralelního zpracování, kdy programátor pouze přidává další kód. Jakmile se pak aplikace spustí na vícejádrové platformě, běží v ní jinak pomalé procesy díky paralelního zpracování mnohem rychleji.

Specifikace systému OpenMP je zastřešena sdružením OpenMP architecture review board (ARB), které obsahuje zástupce vlády, akademické obce i průmyslu. Díky dlouhé historii OpenMP v oblasti vysoce výkonných počítačových systémů je dostupná podpora všech hlavních/ISA platforem, včetně GCC. Poslední zatím vydaná verze standardu OpenMP 3.0 rozšiřuje v první řadě programovací model OpenMP a začleňuje model paralelních vláken. Jeho cílem je vytvoření explicitních úkolů a re-distribuci práce s vytvořením implicitních úkolů. Hlavní výhodou je pak samozřejmě plná podpora ze strany OpenMP co se týče jejich přípravy již při psaní zdrojového kódu a přesného naplánování jednotlivých úloh. Je tak možné říct, že se OpenMP v současné době vyvíjí především na podporu paralelních akcelerátorů a tzv. heterogenních systémů. Pro více informací o OpenMP navštivte stránky: www.openmp.org.

Implementace OpenMP
Při sestavování kódu s více vlákny využívá kompilátor OpenMP vlastní runtime knihovny. Ty mají totiž přímo zásadní vliv nejen na efektivitu výsledné aplikace, ale i na řízení a plánování vláken, správu sdílené paměti a synchronizaci jednotlivých úkolů.

OpenMP podporuje jak sdílené, tak i privátní proměnné. Každé vlákno má k dispozici pouze svou vlastní kopii proměnných a k jiným datům tak nemá povolen přístup. V případě sdílených proměnných je naopak k dispozici pouze jediná, sdílená kopie, ke které mají přístup všechny vlákna.

Součástí systému OpenMP je samozřejmě přesná specifikace struktury a práce se sdílenou pamětí. Jednotlivá vlákna, která běží v jeden okamžik paralelně, mají zajištěn dočasný plný přístup ke sdílené paměťové oblasti. Ten je vždy ukončen buď synchronizací, nebo bodem, kdy vlákno svá práva přístupu ukončí. Jedině až tehdy mohou získat plný přístup ke sdílené paměťové oblasti ostatní paralelně běžící procesy a mohou tak vykonat svůj zápis. Při synchronizaci zůstává výhradní přístup stávajícímu vláknu i nadále.

Paměťový model
Ačkoli mnoho vícejádrových embedded procesorů obsahuje ve své struktuře vyhrazenou oblast pro sdílenou paměť, o její správu a přiřazování práv se musí starat software. V našem případě se o to starají runtime knihovny systému OpenMP. Jejich úkolem je navíc i možnost zajistit příslušné operace pro řízení vyrovnávací paměti - cache, která slouží pro udržení konzistence dat ve sdílené paměti. Pokud to samozřejmě struktura dané aplikace vyžaduje.

V případě zápisu do sdílených proměnných pracuje obsluha cache následovně. Ve chvíli, kdy vlákno požádá o aktualizace sdílených proměnných, je jejich aktualizovaná hodnota načtena a uložena do příslušené L1 cache. Jakmile vlákno svou práci ukončí, má runtime knihovna na starosti vykonání všech nezbytných operací synchronizace dané L1 cache se sdílenou pamětí. To znamená, že o přenos hodnot do sdílené paměti a jejich zpřístupnění všem vláknům prostřednictvím jejich vyrovnávacích pamětí se v celém rozsahu starají knihovny OpenMP.

Model paralelního řízení procesů
Každá paralelní oblast aplikace se prostřednictvím OpenMP kompilátoru rozdělí do několika mikro-úkolů, které jsou pak správci úloh přiřazována dynamicky za běhu aplikace. Vytváření paralelních oblastí se realizuje pomocí následujícího mechanismu:

  • Po inicializaci procesoru čeká správce úloh na vytvoření tzv. mikro-úkolů.
  • Hlavní vlákno aplikace přiřadí zvolený mikro-úkol správci úloh tak, že do fronty zpráv vloží oznámení, obsahující ukazatel na funkci a samozřejmě i ukazatel na datovou oblast.
  • Jakmile správce úloh zprávu přijme, zajistí spuštění mikro-kódu, který má definován ukazatelem na funkci. Zároveň této funkci předá jako argument ukazatel na přiřazenou datovou oblast.
  • Po dokončení funkce zajistí správce úloh předání této informace zpět do fronty zpráv.
  • Paralelní oblast kódu je uzavřena ve chvíli, kdy dorazí zprávy ze všech jednotlivých pracovních vláken.

Shrnutí
OpenMP implementuje paralelní programovací model, založený na úlohovém sdílení paměti a paralelním zpracování vláken dané úrovně. Na řadě praktických aplikací se již mnohokrát prokázalo, jak praktický a především produktivní programovací systém pro vestavné systémy OpenMP je.

Jedním z hlavních nedostatků embedded procesorů je, že nemají implementované funkce, které jsou v klasických procesorech zcela běžné. Především se jedná o jednotku správy paměti, systém vyrovnávací paměti a jednotný, časově definovatelný přístup k paměťovému prostoru. Společnost Texas Instruments (TI) zajišťuje řešení těchto úkolů v rámci rozšíření kompilátoru procesů řady TI C6X o podporu OpenMP.

Autor: Dr. Eric Stotzer, PhD, člen technického týmu - Texas Instruments

Dr. Eric Stotzer je člen týmu zaměřujícího se na produkci softwarových vývojových nástrojů v TI. Již více než 22 let se věnuje softwarových nástrojům, překladačům, architekturám a paralelním programovacím modelům. Je držitelem doktorátu v oboru počítačových věd na univerzitě University of Houston v Texasu.

Odkazy & Download:
Domovská stránka Texas Instruments
Domovská stránka OpenMP
About OpenMP and OpenMP.org







GooglePlus1 FaceBook Twitter del.icio.us DiGG Google StumbleUpon Google Buzz Email RSS PDF Tisk

Komentáře (3):

Zobrazit starší 30 dnů (3)...



Název příspěvku: Vaše jméno: host
                 
  Zakázat formátování [Zakáže kódování a nahrazování smajlíky.]
Připojit soubory
reklama:
PU232E - Převodník USB / sériový port (UART), modul
Kompaktní a jednoduše použitelný modul datového převodníku do USB portu.
Skladem od 199 Kč

Informace uvedené v článcích jsou platné v době jejich vydání a samotné články jsou určeny pouze jako zdroj informací. Autor článku ani správce webu nenesou žádnou zodpovědnost za případné újmy na majetku a zdraví. Názvy společností a výrobků, loga a další multimediální materiál mohou být ochrannými známkami příslušných společností.
RSS kanály: | |
+420 723 846 377
info@pandatron.cz
Všechna práva vyhrazena | mobilní verze | © Copyright 2000 - 2016 ISSN 1803-6007