共用方式為


parallel_for_each 函式 (C++ AMP)

在整個計算區域( compute domain )執行函式。 如需詳細資訊,請參閱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 物件的維度 (Dimension)。

  • _Dim1
    tiled_extent 物件的維度 (Dimension)。

  • _Dim2
    tiled_extent 物件的維度 (Dimension)。

  • _Kernel
    使用型別「index<_Rank>」引數並執行平行計算的 Lambda 或函式物件。

  • _Kernel_type
    lambda 或 functor。

  • _Rank
    範圍的層級。

備註

parallel_for_each 函式啟動加速裝置的資料平行計算。 parallel_for_each 基本行為和 for_each很類似,在每個在容器中的項目上執行函式。 呼叫parallel_for_each的基本元件有 : 計算區域 、索引、和 核心函式。 當 parallel_for_each 執行時,平行的活動會在計算區域中的每個索引執行。 您可以使用平行活動存取在輸入或輸出陣列的項目。 對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。

    • 3D:D0 *名稱為* D2 ≤ 1024;然後 D0 ≤ 64

    • 2D: D0 * D1 ≤ 1024

    • 1D: D0 ≤ 1024

  • 被提供做為 parallel_for_each 的第一個參數的並排顯示的方格必須是可以依對應的區塊範圍,沿著它的每個維度分割的。

如需詳細資訊,請參閱使用磚

parallel_for_each 程式碼在加速器上執行,通常是一個GPU 裝置。 您可以特定地將這個加速器傳入 parallel_for_each 做為選擇性 accelerator_view 參數。 否則,目標加入器會從在核心函式中擷取的array<T,N> 型別的物件中選擇 。 如果所有陣列未繫結至相同的加入器,則會擲回例外狀況 (Exception)。 被傳遞至核心的tiled_index 引數包含索引的集合,其中包含那些和目前顯示有關聯的項目。

parallel_for_each 函式的 _Kernel 參數必須是 Lambda 或函式物件。 若要在加速器上執行,Lambda 必須包含 restrict(amp) 條款,不過,它可以有其他額外的限制。 限制條款施加了核心函式的數個限制。 如需詳細資訊,請參閱限制子句 (C++ AMP)

您可以使用下列引數型別來叫用 _Kernel 引數:

  • 非並排顯示: index<N>,其中 N 必須和 parallel_for_each用在extent<N> 是同一個層級。

  • 並排顯示: 一個tiled_index物件,其維度和tiled_extent物件相符合,會被用在呼叫parallel_for_each之時 。

核心函式必須傳回 void。

因為核心函式不接受任何其他的引數,所有核心操作的其他資訊必須擷取在 Lambda 函式或物件中。 所有被擷取的資料必須以傳值方式傳遞,除了 array<T,N>物件 ,必須由物件參考或指標擷取。 許多限制在可擷取的物件型別也適用。 如需詳細資訊,請參閱限制子句 (C++ AMP)

如果在嘗試啟動 parallel_for_each發生錯誤,執行階段會擲回例外狀況。 可能會擲回例外狀況。下列原因:

  • 無法建立 shader。

  • 無法建立緩衝區。

  • 傳遞無效的範圍。

  • 不相符的加速器。

需求

標頭檔: amp.h

**命名空間:**並行

請參閱

參考

Concurrency 命名空間 (C++ AMP)