restrict (C++ AMP)
Der Einschränkungsspezifizierer kann auf Funktions- und Lambda-Deklarationen angewendet werden. Er erzwingt Einschränkungen für den Code in der Funktion und das Verhalten der Funktion in Anwendungen, die C++ Accelerated Massive Parallelism(C++ AMP)-Laufzeit verwenden.
Hinweis
Informationen zu den restrict
Schlüsselwort (keyword), die Teil der Attribute der __declspec
Speicherklasse sind, finden Sie unter Restrict.
Die restrict
Klausel verwendet die folgenden Formen:
Klausel | Beschreibung |
---|---|
restrict(cpu) |
Die Funktion kann die vollständige C++-Programmiersprache verwenden. Es können nur andere Funktionen, die durch die Verwendung von restrict(cpu)-Funktionen deklariert werden, die Funktion aufrufen. |
restrict(amp) |
Die Funktion kann nur die Teilmenge der Programmiersprache C++ verwenden, die mit C++ AMP beschleunigt werden kann. |
Eine Sequenz von restrict(cpu) und restrict(amp) . |
Die Funktion muss den Einschränkungen von restrict(cpu) und restrict(amp) folgen. Die Funktion kann von Funktionen aufgerufen werden, die durch die Verwendung von restrict(cpu) , restrict(amp) , restrict(cpu, amp) oder restrict(amp, cpu) deklariert werden.Das Formular restrict(A) restrict(B) kann als restrict(A,B) geschrieben werden. |
Hinweise
Die restrict
Schlüsselwort (keyword) ist eine kontextbezogene Schlüsselwort (keyword). Die Einschränkungsspezifizierer, cpu
und amp
sind keine reservierten Wörter. Die Liste der Spezifizierer ist nicht erweiterbar. Eine Funktion, die nicht über eine restrict
Klausel verfügt, ist identisch mit einer Funktion, die die restrict(cpu)
Klausel enthält.
Eine Funktion, die über die restrict(amp)
-Klausel verfügt, hat folgende Einschränkungen:
Die Funktion kann nur Funktionen aufrufen, die die
restrict(amp)
-Klausel enthalten.Die Funktion muss inlinable sein.
Die Funktion kann nur
int
Klassenunsigned int
float
und Strukturen deklarieren, diedouble
nur diese Typen enthalten.bool
ist auch zulässig, muss jedoch 4-Byte ausgerichtet sein, wenn Sie es in einem Verbundtyp verwenden.Lambda-Funktionen können nicht als Verweis erfassten und können keine Zeiger erfassen.
Verweise und Einzeldereferenzierungszeiger werden nur als lokale Variablen, Funktionsargumente und Rückgabetypen unterstützt.
Folgendes ist nicht zulässig:
Rekursion.
Variablen, die mit der veränderliche Schlüsselwort (keyword) deklariert wurden.
Virtuelle Funktionen.
Zeiger auf Funktionen.
Zeiger auf die Memberfunktionen.
Zeiger in Strukturen.
Zeiger auf Zeiger.
goto
-Anweisungen.Anweisungen mit Bezeichnung.
try
,catch
oderthrow
Anweisungen.Globale Variablen.
Statische Variablen. Verwenden Sie stattdessen tile_static Schlüsselwort .
dynamic_cast
Wirft.Der Operator
typeid
.ASM-Deklarationen.
Varargs.
Eine Erläuterung der Funktionsbeschränkungen finden Sie unter restrict(amp)restrictions.
Beispiel
Das folgende Beispiel zeigt, wie die restrict(amp)
Klausel verwendet wird.
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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Tickets als Feedbackmechanismus für Inhalte auslaufen lassen und es durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unter:Einreichen und Feedback anzeigen für