次の方法で共有


parallel_for_each 関数 (C++ AMP)

関数は計算のドメイン内で実行します。詳細については、「C++ AMP の概要」を参照してください。

template <
   int _Rank,
   typename _Kernel_type                     
>
void parallel_for_each(
   const extent<_Rank>& _Compute_domain,
   const _Kernel_type &_Kernel                     
);
                     
template <
   int _Dim0,
   int _Dim1,
   int _Dim2,
   typename _Kernel_type                     
>
void parallel_for_each(
   const tiled_extent<_Dim0,
   _Dim1,
   _Dim2>& _Compute_domain,
   const _Kernel_type& _Kernel                     
);
                     
template <
   int _Dim0,
   int _Dim1,
   typename _Kernel_type                     
>
void parallel_for_each(
   const tiled_extent<_Dim0,
   _Dim1>& _Compute_domain,
   const _Kernel_type& _Kernel                     
);
                     
template <
   int _Dim0,
   typename _Kernel_type                     
>
void parallel_for_each(
   const tiled_extent<_Dim0>& _Compute_domain,
   const _Kernel_type& _Kernel                     
);
                     
template <
   int _Rank,
   typename _Kernel_type                     
>
void parallel_for_each(
   const accelerator_view& _Accl_view,
   const extent<_Rank>& _Compute_domain,
   const _Kernel_type& _Kernel                     
);
                     
template <
   int _Dim0,
   int _Dim1,
   int _Dim2,
   typename _Kernel_type                     
>
void parallel_for_each(
   const accelerator_view& _Accl_view,
   const tiled_extent<_Dim0,
   _Dim1,
   _Dim2>& _Compute_domain,
   const _Kernel_type& _Kernel                     
);
                     
template <
   int _Dim0,
   int _Dim1,
   typename _Kernel_type                     
>
void parallel_for_each(
   const accelerator_view& _Accl_view,
   const tiled_extent<_Dim0,
   _Dim1>& _Compute_domain,
   const _Kernel_type& _Kernel                     
);
                     
template <
   int _Dim0,
   typename _Kernel_type                     
>
void parallel_for_each(
   const accelerator_view& _Accl_view,
   const tiled_extent<_Dim0>& _Compute_domain,
   const _Kernel_type& _Kernel                     
);

パラメーター

  • _Accl_view
    accelerator_view 、並列計算を実行するオブジェクト。

  • _Compute_domain
    extent 、計算用のデータを含むオブジェクト。

  • _Dim0
    ディメンションのtiled_extentオブジェクト。

  • _Dim1
    ディメンションのtiled_extentオブジェクト。

  • _Dim2
    ディメンションのtiled_extentオブジェクト。

  • _Kernel
    「<_Rank> のインデックス」型の引数を受け取るし、並列計算を実行するラムダまたは関数オブジェクト。

  • _Kernel_type
    ラムダまたはファンクタ。

  • _Rank
    エクステントのランク。

解説

parallel_for_eachデータ並列計算アクセラレータ デバイス上の関数が起動します。基本動作のparallel_for_eachのようになりますfor_each、実行関数のコンテナー内にある各要素。基本的なコンポーネントへの呼び出しでparallel_for_eachは、 ドメインを計算は、 インデックスとカーネル関数。時parallel_for_each計算のドメイン内の各インデックスの並列のアクティビティの実行を実行します。入力または出力の配列内の要素にアクセスするのにには、parallel アクティビティを使用できます。呼び出しをparallel_for_eachは同期と同じように動作します。実際は、別のデバイスに実行するための呼び出しは非同期です。順序と、非-分割で実行並列アクティビティの同時実行について保証がないparallel_for_each。活動は、分割不可能な関数のみを使用して通信します。

タイル化されたバージョンのparallel_for_eachが、固定サイズおよび 1、2、または 3 サイズで指定されたタイルの並列アクティビティを編成、 tiled_extent引数。スレッドは同じタイルであると宣言されている変数へのアクセス、 tile_static キーワードします。使用できます、 tile_barrier::wait メソッドが宣言されている変数へのアクセスを同期する方法、 tile_static キーワードします。並べて表示するには、次の制限を適用するparallel_for_each

  • 製品のタイルのエクステントのサイズは、1024年を超えることはできません。

    • 3 D: D0 * D1 * D2 ≤ 1024; D0 ≤ 64

    • 2 D: D0 * D1 ≤ 1024年

    • 1 D: D0 ≤ 1024年

  • 最初のパラメーターとして用意されているタイル グリッドparallel_for_eachに沿って、それぞれ対応するタイルの程度によって、その寸法の倍数である必要があります。

詳細については、「タイルの使用」を参照してください。

parallel_for_each 、アクセラレータでは GPU のデバイスは、通常、コードが実行されます。このアクセラレータを明示的に渡すことができますparallel_for_each 、オプションとしてaccelerator_viewパラメーター。型のオブジェクトから対象のアクセラレータを選択するそれ以外の場合は、 array<T,N> 、カーネル関数でキャプチャされます。すべてのアレイに同じアクセラレータに連結されていない場合は、例外がスローされます。tiled_indexはカーネルに渡される引数には、コレクション インデックスは、現在の印刷面を含めにはが含まれています。

_Kernelのパラメーター、 parallel_for_each関数は、ラムダまたは関数オブジェクトする必要があります。ラムダでアクセラレータを実行するには、含める必要があります、 restrict(amp)句は、追加の制限を設定できますがします。制限句には、カーネル関数のいくつかの制限が課されます。詳細については、「制限の句 (C++ AMP)」を参照してください。

呼び出すことができる必要があります、 _Kernel引数は、次の引数の型のいずれかを使用しています。

  • 非並べて表示: index<N>、 Nランクが同じである必要があります、 extent<N>で使用される、 parallel_for_each

  • 並べて表示: A tiled_index寸法のと一致するオブジェクトがtiled_extentへの呼び出しで使用されるオブジェクトparallel_for_each

カーネル関数を返す必要がありますvoid。

カーネル関数の引数はかかりませんので、操作はカーネルによって他のすべてのデータ、ラムダまたは関数オブジェクトでキャプチャされます。キャプチャしたすべてのデータ値では、以外に渡す必要がありますarray<T,N> 、オブジェクト参照またはポインターでキャプチャする必要があります。いくつかの制限も取り込むことができます、オブジェクトの種類に適用されます。詳細については、「制限の句 (C++ AMP)」を参照してください。

開始しようとするときに、エラーが発生した場合、 parallel_for_each、呼び出しは、ランタイムは例外をスローします。次の理由により例外をスローできます。

  • シェーダーの作成に失敗しました。

  • バッファーの作成に失敗しました。

  • 無効な範囲を渡します。

  • 対応のアクセラレータ。

必要条件

ヘッダー: amp.h

名前空間: Concurrency

参照

関連項目

Concurrency 名前空間 (C++ AMP)