Share via


Beschränken Sie ein (C++-AMP)

Der Einschränkungsspezifizierer kann angewendet werden, um zu arbeiten und Lambda-Deklarationen.Es erzwingt Einschränkungen für den Code in der Funktion und dem Verhalten der Funktion in Anwendungen, die beschleunigte C++ enorme Laufzeit der Parallelität (C++-AMP) verwenden.

HinweisHinweis

Informationen zum restrict-Schlüsselwort, das Teil der __declspec Speicherklassenattribute ist, finden Sie unter restrict.

Die - Klausel restrict akzeptiert die folgenden Formate an:

Klausel

Description

restrict(cpu)

Die Funktion kann die vollständige Programmiersprache C++ verwenden.Nur weitere Funktionen, die deklariert werden, indem verwendet, sollten Funktionen (CPU) können die Funktion aufrufen ein.

restrict(amp)

Die Funktion kann die Teilmenge der Programmiersprache C++ nur verwenden, die C++-AMP beschleunigen kann.

Eine Sequenz von restrict(cpu) und von restrict(amp).

Die Funktion muss die Einschränkungen von restrict(cpu) und von restrict(amp) befolgen.Die Funktion kann durch Funktionen aufgerufen werden, die deklariert werden, indem restrict(cpu), restrict(amp), restrict(cpu, amp) oder restrict(amp, cpu) verwendet.

Das Formular restrict(A) restrict(B) kann als restrict(A,B) geschrieben werden.

Hinweise

Das restrict-Schlüsselwort ist ein Kontextschlüsselwort.Die Einschränkungsspezifizierer, cpu und amp, sind nicht reservierte Wörter.Die Liste der Spezifizierern ist nicht erweiterbar.Eine Funktion, die keine restrict-Klausel enthält, ist die gleiche wie eine Funktion, die die restrict(cpu)-Klausel enthält.

Eine Funktion, die die restrict(amp)-Klausel enthält, hat die folgenden Einschränkungen:

  • Die Funktion kann nur Funktionen aufrufen, die die restrict(amp)-Klausel verfügen.

  • Die Funktion muss inlinable sein.

  • Die Funktion kann nur int, unsigned int, float und double-Variablen und Klassen und Strukturen deklarieren, die nur diese Typen enthalten.bool wird auch zulässig, aber es muss 4 sein Byte-ausgerichtet, wenn Sie es in einem Verbundtyp verwenden.

  • Lambda-Funktionen können nicht als Verweis aufzeichnen und können Zeiger nicht aufgezeichnet.

  • Verweise und EinzelDereferenzierungszeiger werden nur als lokale Variablen, Argumente und Rückgabetypen unterstützt.

  • Die folgenden ist nicht zulässig:

    • Rekursion.

    • Variablen deklariert mit dem - Schlüsselwort flüchtig.

    • Virtuelle Funktionen.

    • Zeiger auf Funktionen.

    • Zeiger auf den Memberfunktionen.

    • Zeiger in Strukturen.

    • Zeiger auf den Zeiger.

    • goto-Anweisungen.

    • Anweisungen mit Bezeichnung.

    • try, catch oder throw-Anweisungen.

    • Globale Variablen.

    • Statische Variablen.Verwenden Sie stattdessen tile_static Schlüsselwort.

    • dynamic_cast Umwandlungen.

    • Der typeid-Operator.

    • asm-Deklarationen.

    • Varargs.

Eine Erläuterung Funktionseinschränkungen, finden Sie unter Beschränken Sie (amp) Einschränkungen ein.

Beispiel

Im folgenden Beispiel wird gezeigt, wie die restrict(amp)-Klausel verwendet.

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(); 

}

Siehe auch

Weitere Ressourcen

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