restrict (C++ AMP)
制限指定子は、関数宣言およびラムダ宣言に適用できます。 制限は、関数のコードに適用され、また、C++ Accelerated Massive Parallelism (C++ AMP) ランタイムを使用するアプリケーションの関数の動作に適用されます。
Note
__declspec
ストレージ クラス属性の一部である restrict
キーワードの詳細については、「restrict」をご覧ください。
restrict
句は次の形式をとります。
句 | 説明 |
---|---|
restrict(cpu) |
関数は C++ 言語をフルに使用できます。 restrict (cpu) 関数を使用して宣言された他の関数だけがこの関数を呼び出すことができます。 |
restrict(amp) |
関数は C++ AMP で高速化できる C++ 言語のサブセットのみを使用できます。 |
連続した restrict(cpu) と restrict(amp) |
関数は restrict(cpu) と restrict(amp) の両方の制約に従う必要があります。 関数は restrict(cpu) 、restrict(amp) 、restrict(cpu, amp) 、または restrict(amp, cpu) を使用して宣言した関数から呼び出すことができます。restrict(A) restrict(B) という形式は restrict(A,B) と書くことができます。 |
解説
restrict
キーワードは、コンテキスト キーワードです。 制限指定子の cpu
と amp
は予約語ではありません。 指定子の数を増やすことはできません。 restrict
句がない関数は restrict(cpu)
句を持つ関数と同じです。
restrict(amp)
句を持つ関数には次の制限があります。
関数は
restrict(amp)
句を持つ関数のみを呼び出すことができます。関数はインライン化できる必要があります。
関数は、型が
int
、unsigned int
、float
、double
の変数と、これらの型だけを含むクラスと構造体のみを宣言できます。bool
は許可されていますが、複合型で使用する場合は 4 バイトアラインする必要があります。ラムダ関数は、参照によってキャプチャできず、また、ポインターをキャプチャできません。
参照と単一間接ポインターは、ローカル変数、関数の引数、戻り値の型としてのみサポートされています。
以下は使用できません。
再帰
volatile キーワードで宣言した変数。
仮想関数
関数へのポインター
メンバー関数へのポインター
構造体へのポインター
ポインターへのポインター
goto
ステートメント。ラベル付きステートメント
try
、catch
、throw
ステートメント。グローバル変数
静的変数 代わりに tile_static Keyword を使用します。
dynamic_cast
キャスト。typeid
演算子。asm 宣言
可変個引数
関数の制限事項の詳細については、「restrict(amp) restrictions (restrict (amp) の制限)」をご覧ください。
例
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();
}