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
**命名空間:**並行