A nyelv a Visual C++ 2012 (Visual C++ 11.0) kiterjesztése.
Mindössze két új kulcsszót vezet be a restrict és a tile_static-ot.
Restrict kulcsszó
Segítségével megszorítást tehetünk egy függvény törzsében használható nyelvi elemekre.
pl.: void functionAmp() restrict(amp) {} esetében a függvény törzsében a C++ nyelvi elemeinek csak egy részhalmaza használható, amelyet minden adatpárhuzamos eszköznek ismernie kell.
Az restrict kucsszó után zárójelben adható meg a megszorítás, amely értéke a következők lehetnek:
A megszorítások teljesülését fordításidőben a compiler ellenőrzi.
restrict(amp)
Legfontosabb megkötések:
- a function-nek inline-olhatónak kell lennie
- csak int, unsigned int, float, double és bool változók és csak ezen típusokat tartalmazó struct-ok és class-ok szerepelhetnek benne
- Nem tartalmazhat:
- Rekurziót
- Függvény pointer-t
- Goto-t
- Kivételkezelést
- globális változót
- statikus változót
restrict(cpu)
- csak olyan függvényekből hívható, amely szintén restrict(cpu)-val lett megjelölve
- ez a default
Tile_static kulcsszó
- A tile_static kulcsszó után deklarált változó warp lokális memória területén kerül allokálásra
- Az adatokat nekünk kell belemásolni a globális memória területről
- Csak akkor van értelme, ha a belemásolt adatot többször kell használnunk.