Udostępnij za pośrednictwem


Ogranicz (C++ AMP)

Specyfikator ograniczenia mogą być stosowane do deklaracji funkcji i lambda.Wymusza ograniczenia kod w funkcji oraz zachowanie funkcji w aplikacji, które używają środowiska wykonawczego języka C++ przyspieszone ogromne równoległości (C++ AMP).

[!UWAGA]

Aby uzyskać informacje o restrict słowa kluczowego, które jest częścią __declspec atrybuty klasy magazynu, zobacz restrict.

restrict Klauzula przybiera następujące formy:

Klauzula

Opis

restrict(cpu)

Funkcji można użyć pełnego języka C++.Tylko inne funkcje, które są zadeklarowane za pomocą funkcji restrict(cpu) można wywołać funkcję.

restrict(amp)

Funkcji można używać tylko podzbiór języka C++, który może przyspieszyć C++ AMP.

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

Funkcja muszą przestrzegać ograniczeń obu restrict(cpu) i restrict(amp).Funkcja może być wywoływana przez funkcje, które są zadeklarowane za pomocą restrict(cpu), restrict(amp), restrict(cpu, amp), lub restrict(amp, cpu).

Formularz restrict(A) restrict(B) może być zapisany jako restrict(A,B).

Uwagi

restrict Słów kluczowych jest kontekstowe słowa kluczowego.Specyfikatory ograniczenie cpu i amp nie są słowami zastrzeżonymi.Wykaz specyfikatory nie jest rozszerzalny.Funkcja, która nie ma restrict klauzula jest taka sama, jak funkcja, która ma restrict(cpu) klauzuli.

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

  • Funkcję można wywołać tylko te funkcje, które mają restrict(amp) klauzuli.

  • Funkcja musi być inlinable.

  • Funkcja można zadeklarować tylko int, unsigned int, float, i double zmiennych oraz klas i struktur, które zawierają tylko te typy.booljest również dozwolone, ale musi być wyrównany do 4-bajtowy użycie typu złożonego.

  • Funkcje lambda nie może przechwytywać przez odniesienie i nie może przechwytywać wskaźniki.

  • Odwołania i wskaźniki pośrednia pojedynczego są obsługiwane tylko jako zmienne lokalne, argumenty funkcji i zwracanych typów.

  • Nie wolno następujące czynności:

    • Rekursję.

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

    • Funkcje wirtualnych.

    • Wskaźniki do funkcji.

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

    • Wskaźniki w strukturach.

    • Wskaźniki do wskaźników.

    • gotoinstrukcje.

    • Instrukcje etykietami.

    • try, catch, or throw statements.

    • Zmienne globalne.

    • Zmienne statyczne.Zamiast tego użyj elementu tile_static kluczowe.

    • dynamic_castposługując się miarką kątową.

    • typeid Operatora.

    • deklaracje Asm.

    • VarArgs.

Omówienie funkcji ograniczeń, zobacz restrict(amp) ograniczeń.

Przykład

Poniższy przykład pokazuje, jak używać restrict(amp) klauzuli.

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++ przyspieszyć równoległości prostych masowe)