C++AMP

C++ Accelerated Massive Parallelism ( zkráceně C++ AMP ) je knihovna založená na DirectX 11 a otevřená specifikace vytvořená společností Microsoft pro implementaci paralelních programů pro hybridní systémy v C++. Systém C++AMP umožňuje přenášet výpočty na GPU (video akcelerátory), aniž by bylo nutné provádět velké množství změn v programech. Kód, který nelze spustit na GPU, například kvůli jeho složitosti, bude automaticky spuštěn na CPU pomocí instrukcí SIMD (SSE). Implementace systému od Microsoftu (zatím jediná) je součástí Visual Studia 2012 a zahrnuje debugger a profiler. Podporu pro další platformy a hardware by mohl v budoucnu implementovat Microsoft nebo jiní.

První vydání C++ AMP od společnosti Microsoft vyžaduje Windows 7 nebo Windows Server 2008 R2. [jeden]

Do jazyka byla přidána konstrukce syntaxe " restrict(amp)", kterou lze zadat pro libovolnou funkci (včetně funkce lambda), což znamená, že ji lze spustit na akcelerátoru C++ AMP. Klíčové slovo omezení v tomto případě znamená, že kompilátor musí vyhodnotit, zda je daná funkce vhodná pro GPU (zda využívá pouze ty vlastnosti jazyka C++, které lze spustit na většině GPU).

Příklad použití:

void myFunc () limited ( amp ) { // Kód funkce }

Microsoft nebo jiní budoucí dodavatelé systémů kompatibilních s C++ AMP by mohli kromě „amp“ přidat další specifikátory omezení.

Zbytek C++ AMP je dostupný prostřednictvím souboru záhlaví <amp.h>a jmenného prostoru „concurrency“. C++ třídy jádra AMP: pole (datový kontejner pro akcelerátor), array_view (obálka dat), index (souřadnice bodů v N-rozměrném kartézském prostoru s celočíselnými souřadnicemi), rozsah (N-rozměrný celočíselný rozměr), akcelerátor (výpočetní jednotka, např. , GPU, na kterém bude alokována paměť a bude spuštěn výpočet), accelerator_view (pohled akcelerátoru).

Je také definována globální funkce parallel_for_each, která umožňuje definovat paralelní smyčku pro C++ AMP.

Příklad funkce C++ používající C++ AMP k sečtení dvou 2D polí:

void AddArrays ( int n , int m , int * pA , int * pB , int * pSum ) { souběžnost :: array_view < int , 2 > a ( n , m , pA ), b ( n , m , pB ), součet ( n , m , pSum ); souběžnost :: parallel_for_each ( suma . rozsah , [ = ]( souběžnost :: index < 2 > i ) omezit ( amp ) { součet [ i ] = a [ i ] + b [ i ]; }); }

Viz také

Poznámky

  1. Jednostránkové shrnutí C++ AMP Archivováno 26. října 2012. // Blogy MSDN  

Literatura

  • Kate Gregory, Ade Miller. C++ Amp: Accelerated Massive Parallelism With Microsoft Visual C++ - Microsoft, 2012—326 stran - ISBN 978-0-7356-6473-9
  • István Novák a další. Začátek vývoje aplikací pro Windows 8. — John Wiley & Sons, 2012—624 stran — ISBN 978-1-118-22183-9 . Kapitola 13 "Vytvoření aplikace ve stylu Windows 8 pomocí C++". Část "Použití zrychleného masivního paralelismu" , strany 486-489
  • Sasha Goldstein a další. Pro .NET Výkon: Optimalizujte své C# aplikace. - Apress, 2012-372 stran - ISBN 978-1-4302-4458-5 . Kapitola 6 "Souběh a paralelismus". Sekce „Výpočetní technika GPU pro obecné účely“ , strany 205–214

Odkazy