制限します (C++ AMP)

機能するために制約を指定子がラムダの宣言は適用されません。この関数のコードとC++で加速された大きい並列AMP (C++) のランタイムを使用するアプリケーションの関数の動作に制限を適用します。

[!メモ]

__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) の句を持つ関数のみ呼び出すことができます。

  • 関数はinlinableなります。

  • 関数では、これらの型だけを含む構造体と int、unsigned int、floatと double の変数とクラスは一つだけです。bool は、与えられ、複合型で使用する場合、4バイト配置される必要があります。

  • ラムダ関数は参照によってキャプチャし、ポインターをキャプチャすることはできません。

  • 参照と一つの間接参照のポインターはローカル変数としてのみ機能し、サポート、引数と型を返します。

  • 次は使用できません:

    • 再帰。

    • [volatile] のキーワードで宣言された変数。

    • 仮想関数。

    • 関数へのポインター。

    • メンバー関数へのポインター。

    • 構造体のポインター。

    • ポインターへのポインター。

    • goto のステートメント。

    • ラベル付きステートメント。

    • try、catch、またはのステートメント throw。

    • グローバル変数。

    • 静的変数。代わりに、tile_static キーワード を使用してください。

    • dynamic_cast のキャストします。

    • typeid 演算子です。

    • asmの宣言。

    • Varargs。

関数の制限事項の詳細については、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(); 

}

参照

その他の技術情報

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