Sdílet prostřednictvím


Klauzule omezení (C++ AMP)

Specifikátor omezení lze použít pro funkce a deklarace lambda.Vynucuje omezení kódu ve funkci a chování funkce v aplikacích používajících modul runtime C++ Accelerated Massive Parallelism (C++ AMP).

[!POZNÁMKA]

Informace o klíčovém slově restrict, které je součástí atributů třídy úložiště __declspec, naleznete v tématu restrict.

Klauzule restrict může mít následující tvary:

Klauzule

Description

restrict(cpu)

Funkce může využívat celý jazyk C++.Funkci mohou volat pouze jiné funkce deklarované pomocí funkcí restrict(cpu).

restrict(amp)

Funkce může používat pouze tu podmnožinu jazyka C++, kterou může knihovna C++ AMP urychlit.

Sekvence specifikátorů restrict(cpu) a restrict(amp).

Funkce musí dodržovat omezení specifikátoru restrict(cpu) i restrict(amp).Funkci lze zavolat funkcemi deklarovanými se specifikátory restrict(cpu), restrict(amp), restrict(cpu, amp) nebo restrict(amp, cpu).

Tvar restrict(A) restrict(B) lze zapsat jako restrict(A,B).

Poznámky

Klíčové slovo restrict je kontextovým klíčovým slovem.Specifikátory omezení cpu a amp nejsou vyhrazenými slovy.Seznam specifikátorů nelze rozšířit.Funkce neobsahující klauzuli restrict je shodná s funkcí obsahující klauzuli restrict(cpu).

Funkce obsahující klauzuli restrict(amp) má následující omezení:

  • Funkce může volat pouze funkce obsahující klauzuli restrict(amp).

  • Funkci musí být možné vložit.

  • Funkce může deklarovat pouze proměnné typu int, unsigned int, float a double a třídy a struktury obsahující pouze tyto typy.Typ bool je povolen také, pro použití ve složeném typu však musí být zarovnán na 4 bajty.

  • Funkce lambda nedokáží zachytit ukazatele a hodnoty dle reference.

  • Reference a ukazatele jedné dereference jsou podporovány pouze jako místní proměnné, argumenty funkce a návratové typy.

  • Následující položky nejsou povoleny:

    • Rekurze.

    • Proměnné deklarované s klíčovým slovem volatile.

    • Virtuální funkce.

    • Ukazatelé na funkce.

    • Ukazatele na členské funkce.

    • Ukazatele ve strukturách.

    • Ukazatele na ukazatele.

    • Příkazy goto.

    • Příkazy s popiskem.

    • Příkazy try, catch nebo throw.

    • Globální proměnné

    • Statické proměnné.Jako náhradu použijte tile_static klíčové slovo.

    • Přetypování dynamic_cast.

    • Operátor typeid.

    • Deklarace asm.

    • Argumenty vararg.

Diskuzi o omezeních funkcí naleznete v tématu Omezení restrict(amp).

Příklad

Následující příklad ukazuje způsob použití klauzule restrict(amp).

void functionAmp() restrict(amp) {} 
void functionNonAmp() {} 

void callFunctions() restrict(amp) 
{ 
    // int is allowed.
    int x;
    // long long int is not allowed in an amp-restricted function. This generates a compiler error.
    // long long int y; 

    // Calling an amp-restricted function is allowed.
    functionAmp(); 

    // Calling a non-amp-restricted function is not allowed.
    // functionNonAmp(); 

}

Viz také

Další zdroje

C++ AMP (C++ Accelerated Massive Parallelism)