C++AMP

A C++ Accelerated Massive Parallelism ( röviden C++ AMP ) egy DirectX 11 alapú könyvtár és nyílt specifikáció, amelyet a Microsoft hozott létre, hogy párhuzamos programokat valósítson meg hibrid rendszerekben C++ nyelven. A C++AMP rendszer lehetővé teszi a számítások átvitelét GPU-kra (videógyorsítókra) anélkül, hogy nagyszámú változtatást kellene végrehajtania a programokon. A GPU-n nem futtatható kód, például összetettsége miatt, automatikusan lefut a CPU-n a SIMD (SSE) utasítások segítségével. A rendszer Microsoft általi megvalósítása (eddig az egyetlen) a Visual Studio 2012-ben található, és tartalmaz egy hibakeresőt és egy profilkészítőt is. Más platformok és hardverek támogatását a Microsoft vagy mások a jövőben megvalósíthatják.

A Microsoft kezdeti C++ AMP kiadásához Windows 7 vagy Windows Server 2008 R2 szükséges. [egy]

A " " szintaktikai konstrukció restrict(amp)hozzáadásra került a nyelvhez, amely bármely függvényhez megadható (beleértve a lambda függvényt is), jelezve, hogy a C ++ AMP-gyorsítón végrehajtható. A restrikciós kulcsszó ebben az esetben azt jelenti, hogy a fordítónak ki kell értékelnie, hogy az adott függvény alkalmas-e a GPU-ra (hogy a C ++ nyelvnek csak azokat a tulajdonságait használja-e, amelyek a legtöbb GPU-n végrehajthatók).

Használati példa:

void myFunc () korlátoz ( amp ) { // Funkciókód }

A Microsoft vagy más jövőbeni C++ AMP-kompatibilis rendszerek gyártói az „erősítőn” kívül más korlátozási specifikációkat is hozzáadhatnak.

A C++ AMP többi része egy fejlécfájlon <amp.h>és a „concurrency” névtéren keresztül érhető el. C++ AMP alaposztályok: tömb (adattároló a gyorsítóhoz), array_view (adatcsomagoló), index (pontkoordináták N-dimenziós derékszögű térben egész koordinátákkal), kiterjedés (N-dimenziós egész dimenzió), gyorsító (számítási egység, pl. , GPU, amelyen a memória le lesz foglalva és a számítás elindul), accelerator_view (gyorsító nézet).

Meg van határozva egy globális függvény is parallel_for_each, amely lehetővé teszi egy párhuzamos hurok meghatározását a C++ AMP számára.

Példa C++ függvényre C++ AMP használatával két 2D tömb összegzésére:

void AddArrays ( int n , int m , int * pA , int * pB , int * pSum ) { párhuzamosság :: tömb_nézet < int , 2 > a ( n , m , pA ), b ( n , m , pB ), sum ( n , m , pSum ); concurrency :: parallel_for_each ( összeg . kiterjedés , [ = ]( párhuzamosság :: index < 2 > i ) korlátoz ( amp ) { összeg [ i ] = a [ i ] + b [ i ]; }); }

Lásd még

Jegyzetek

  1. C++ AMP egyoldalas összefoglaló Archiválva : 2012. október 26. // MSDN blogok  

Irodalom

  • Kate Gregory, Ade Miller. C++ erősítő: Gyorsított tömeges párhuzamosság a Microsoft Visual C++ segítségével – Microsoft, 2012 – 326 oldal – ISBN 978-0-7356-6473-9
  • Novák István és mások. A Windows 8 alkalmazásfejlesztés kezdete. — John Wiley & Sons, 2012—624 oldal — ISBN 978-1-118-22183-9 . 13. fejezet "Windows 8 stílusú alkalmazás létrehozása C++ segítségével". "A gyorsított masszív párhuzamosság használata" szakasz , 486-489. oldal
  • Sasha Goldstein és mások. Pro .NET Performance: Optimalizálja C# alkalmazásait. - Apress, 2012-372 oldal - ISBN 978-1-4302-4458-5 . 6. fejezet „Egyidejűség és párhuzamosság”. Az „Általános célú GPU számítástechnika” szakasz , 205–214. oldal

Linkek