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 ]; }); }