Sítový paralelní programovací systém C ++ - Sieve C++ Parallel Programming System
![]() | Téma tohoto článku nemusí splňovat požadavky Wikipedie obecný pokyn k notabilitě.Březen 2013) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
The Sítový paralelní programovací systém C ++ je C ++ překladač a paralelní běh navržený a vydaný Codeplay jehož cílem je zjednodušit paralelizace kódu, aby mohl efektivně fungovat na víceprocesorových nebo vícejádrových systémech. Jedná se o alternativu k dalším dobře známým paralelizačním metodám, jako je OpenMP, RapidMind Vývojová platforma a Navlékání stavebních bloků (TBB).
Úvod
Sieve je kompilátor C ++, který převezme část sériového kódu, který je anotován značkami síta, a automaticky jej paralelizuje. Programátor zabalí kód, který chtějí paralelizovat uvnitř a lexikální rozsah, který je označen jako „síto“. V tomto rozsahu, běžně označovaném jako „sítový blok“, platí určitá pravidla [1]:
- Všechno vedlejší efekty v rámci sítového bloku jsou odloženy až do konce rozsahu.
- Vedlejšími účinky jsou definovány jakékoli úpravy dat deklarovaných mimo rozsah sítového bloku.
- Lze volat pouze funkce anotované sítem nebo okamžité.
Zpožděním vedlejších účinků se odstraní mnoho malých závislostí, které by obvykle bránily automatické paralelizaci. Čtení a zápisy mohou být kompilátorem bezpečně přeuspořádány, aby bylo možné lépe využívat různé mechanismy pohybu dat, například Přímý přístup do paměti (DMA). Navíc, aliasová analýza a analýza toku dat lze zjednodušit [2]. Kompilátor pak může rozdělit kód v rámci sítového bloku mnohem snadněji, aby využil paralelismu.
Konfigurace paměti
Toto oddělení rozsahů také znamená, že Sieve System lze použít v nejednotných paměťových architekturách. Vícejádrové procesory, jako je Mikroprocesor buňky použitý v PlayStation 3 jsou tohoto typu, ve kterých mají rychlá jádra lokální paměti, které je třeba využít k využití výkonu vlastního systému. Je také schopen pracovat na systémech sdílené paměti, jako je x86, což znamená, že může běžet na různých architekturách. Sítové bloky lze také vnořit [3] pro systémy s hierarchií různých pamětí a prvků zpracování.
Paralelizace a škálovatelnost
Kompilátor síta může rozdělit kód v rámci sítového bloku na bloky buď implicitně, nebo explicitně prostřednictvím příkazu „splithere“. Například následující příklad ukazuje paralelizaci smyčky:
síto { pro (iterátor i(0); i<délka; ++i) { R[i] = A[i] * B[i] splithere; } }
Kompilátor implicitně přidá jako vstupní bod splitpoint nad tělem konstrukce smyčky for. Podobně bude jeden přidán jako výstupní bod.
V systému Sieve mohou mít závislosti pouze lokální proměnné k rozsahu bloku síta. Tyto závislosti však nesmí překračovat dělené body; vygenerují varování kompilátoru[Citace je zapotřebí ]. Aby bylo možné tuto smyčku paralelizovat, může se místo standardního čítače opakování celé smyčky použít speciální třída „Iterator“. Je to bezpečné pro paralelizaci a programátor si může libovolně vytvářet nové třídy Iterator [4]. Kromě těchto tříd Iterator může programátor volně implementovat třídy zvané „Akumulátory“, které se používají k provádění redukčních operací.
Způsob implementace tříd Iterator otevírá různé prostředky pro škálovatelnost. Sieve Parallel Runtime využívá dynamiku spekulativní provedení při provádění na cílové platformě. To může přinést velmi dobré zrychlení, ale běh na jednom jádrovém stroji může způsobit režijní náklady [5].
Determinismus
Determinismus je neobvyklou vlastností systému Sieve. Pokud spuštění paralelního programu Sieve na vícejádrovém stroji způsobí chybu, chyba nezmizí, když je spuštěna na jednom jádru, aby pomohla ladění[6][7]. To má výhodu eliminace podmínky závodu, jedna z nejběžnějších chyb v souběžné programování. Odstranění nutnosti zvážit řízení souběžnosti struktury v rámci sítového bloku mohou zrychlit dobu vývoje a vést k bezpečnějšímu kódu.
Podporované systémy
Systém je určen pro hierarchicky založené systémy s homogenními nebo heterogenními jádry CPU, která mají lokální paměti, připojené přes DMA enginy nebo podobné modely přenosu paměti.
Síto bylo ukázáno [8] úspěšně fungující na vícejádrových systémech x86, Ageia PhysX Fyzikální jednotka zpracování a IBM Mikroprocesor buňky. ANSI C. je generován, pokud je kompilátor generátor kódů není k dispozici pro určitou cílovou platformu. To umožňuje autoparallelizaci pomocí existujících sad nástrojů pro kompilaci jazyka C. [9][trvalý mrtvý odkaz ].
Viz také
- Softwarová transakční paměť
- Aliasová analýza
- OpenMP
- Navlékání stavebních bloků (TBB)
- Cilk /Cilk Plus
- Spekulativní provedení
Reference
- Automatická paralelizace programů Sieve C ++ Alastair Donaldson, Anton Lokhmotov, Colin Riley, Andrew Cook. In Proceedings of the Euro-Par Workshop Highly Parallel Processing on a Chip (HPPC'07), Rennes, France, August 2007. Lecture Notes in Computer Science 4854, 2007.
- Zpožděné vedlejší účinky Snadné vícejádrové programování Anton Lokhmotov, Alan Mycroft, Andrew Richards. In Proceedings of the 13th International Euro-Par Conference, Rennes, France, August 2007. Lecture Notes in Computer Science 4641, 641-650, 2007.
- Implementace deterministické deklarativní souběžnosti pomocí sít S. Lindley. Ve sborníku DAMP 2007: Workshop o deklarativních aspektech vícejádrového programování v Nice, Francie, leden 2007.
- Systém paralelního programování Codeplay Sieve C ++ A. Richards. Bílá kniha, 2006.
- Prezentace systému Codeplay Sieve C ++[trvalý mrtvý odkaz ] Scott McKenzie, představen na MicroGrid 2006.