Sdílet prostřednictvím


omezení (C++ AMP)

Lze použít omezení Specifikátor deklarace funkce a lambda.Vynucuje omezení na kód ve funkci a chování funkce v aplikacích, které používají modul runtime C++ Accelerated masivní paralelismus (C++ AMP).

[!POZNÁMKA]

Informace o restrict klíčové slovo, které je součástí __declspec atributy třídy úložiště, viz restrict.

restrict Klauzule přebírá následující formuláře:

Klauzule

Description

restrict(cpu)

Funkci můžete použít úplné jazyka C++.Další funkce, které jsou deklarovány pomocí funkce restrict(cpu) lze volat funkci.

restrict(amp)

Funkci lze použít pouze podmnožinu jazyka C++, které mohou urychlit C++ AMP.

A sequence of restrict(cpu) and restrict(amp).

Funkce musí respektovat omezení obou restrict(cpu) a restrict(amp).Funkce mohou být volány funkce, které jsou deklarovány pomocí restrict(cpu), restrict(amp), restrict(cpu, amp), nebo restrict(amp, cpu).

Formulář restrict(A) restrict(B) lze zapsat jako restrict(A,B).

Poznámky

restrict Kontextové klíčové slovo je klíčové slovo.Specifikátory omezení cpu a amp jsou vyhrazená slova.Seznam specifikátory je rozšiřitelný.Funkce, která nemá restrict klauzule je stejné jako funkci, která má restrict(cpu) klauzule.

Funkce, která má restrict(amp) klauzule má následující omezení:

  • Funkce může volat pouze funkce, které mají restrict(amp) klauzule.

  • Funkce musí být inlinable.

  • Funkce lze deklarovat pouze int, unsigned int, float, a double proměnné a třídy a struktur, které obsahují pouze tyto typy.boolje také povolena, ale musí být zarovnány 4 bajt Pokud pomocí složeného typu.

  • Lambda funkce nelze zachytit odkazem a ukazatele nelze zachytit.

  • Odkazy a jeden dereference ukazatele jsou podporovány pouze jako lokální proměnné argumenty funkce a návratové typy.

  • Nejsou povoleny následující:

    • Rekurze.

    • Proměnné deklarované pomocí těkavých klíčové slovo.

    • Virtuální funkce.

    • Ukazatele na funkce.

    • Odkazy na členské funkce.

    • Ukazatele ve strukturách.

    • Ukazatele na ukazatele.

    • gotopříkazy.

    • Označené příkazy.

    • try, catch, or throw statements.

    • globální proměnné.

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

    • dynamic_castnádech.

    • typeid Operátor.

    • asm prohlášení.

    • VarArgs.

Diskusi o omezení funkce, viz restrict(amp) omezení.

Příklad

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

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 (masivní rovnoběžnosti Accelerated C++)