Udostępnij za pośrednictwem


ograniczenie (C++ AMP)

Specyfikator ograniczenia może być stosowany do deklaracji wyrażenia lambda i funkcji.Wymusza on ograniczenia dotyczące kodu w funkcji i zachowania funkcji w zastosowaniach, które korzystają ze środowiska uruchomieniowego C++ Accelerated Massive Parallelism (C++ AMP).

[!UWAGA]

Aby uzyskać informacje dotyczące słowa kluczowego restrict, które stanowi część atrybutów klasy magazynu __declspec, zobacz ograniczenie.

Klauzula restrict przybiera następujące formy:

Klauzula

Opis

restrict(cpu)

Funkcja może używać w pełni języka C++.Tylko inne funkcje, które są zadeklarowane za pomocą funkcji restrict(cpu) mogą wywołać tą funkcję.

restrict(amp)

Funkcja może używać tylko podzbioru języka C++, który może być przyspieszony przez C++ AMP.

Sekwencja restrict(cpu) i restrict(amp).

Funkcja musi stosować się do ograniczeń zarówno restrict(cpu), jak i restrict(amp).Funkcja może być wywołana przez funkcje, które są zadeklarowane przy użyciu restrict(cpu), restrict(amp), restrict(cpu, amp) lub restrict(amp, cpu).

Postać restrict(A) restrict(B) może być zapisana jako restrict(A,B).

Uwagi

Słowo kluczowe restrict jest kontekstowym słowem kluczowym.Specyfikatory ograniczeń cpu i amp nie są słowami zarezerwowanymi.Lista specyfikatorów nie jest rozszerzalna.Funkcja, która nie ma klauzuli restrict jest taka sama, jak funkcja, która posiada klauzulę restrict(cpu).

Funkcja, która posiada klauzulę restrict(amp) posiada następujące ograniczenia:

  • Funkcja może wywołać tylko te funkcje, które mają klauzulę restrict(amp).

  • Funkcja musi być możliwa do wbudowania.

  • Funkcja może zadeklarować tylko zmienne int, unsigned int, float i double oraz klasy i struktury, które zawierają te typy.bool jest też dozwolony, ale musi być wyrównany do 4-bajtów w razie użycia typu złożonego.

  • Funkcje lambda nie mogą przechwytywać poprzez odwołanie i nie mogą przechwytywać wskaźników.

  • Odwołania i wskaźniki pojedynczego pośrednictwa są obsługiwane tylko jako zmienne lokalne, argumenty funkcji i typy zwracane.

  • Nie są dozwolone:

    • Rekursja.

    • Zmienne zadeklarowane za pomocą słowa kluczowego volatile.

    • Funkcje wirtualne.

    • Wskaźniki do funkcji.

    • Wskaźniki do funkcji elementów członkowskich.

    • Wskaźniki w strukturach.

    • Wskaźniki do wskaźników.

    • Instrukcje goto.

    • Instrukcje oznaczone.

    • Instrukcje try, catch lub throw.

    • Zmienne globalne.

    • Zmienne statyczne.Zamiast tego użyj elementu tile_static — słowo kluczowe.

    • Rzutowania dynamic_cast.

    • Operator typeid.

    • Deklaracje asm.

    • Elementy vararg.

W celu dyskusji na temat ograniczeń funkcji, zobacz Ograniczenia restrict(amp).

Przykład

W poniższym przykładzie pokazano sposób używania klauzuli 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(); 

}

Zobacz też

Inne zasoby

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