Share via


parallel_reduce 函式

平行地透過計算後繼元素的部分總和以計算在一定範圍內的所有元素總和,或是計算部分後繼結果由同樣地使用不同於加總的指定二進位運算得出。 parallel_reduce 語意與 std::accumulate類似,不同的是,它需要二進位運算,而且需要識別值而不是原始值。

template<
   typename _Forward_iterator
>
inline typename std::iterator_traits<_Forward_iterator>::value_type parallel_reduce(
   _Forward_iterator_Begin,
   _Forward_iterator_End,
   const typename std::iterator_traits<_Forward_iterator>::value_type &_Identity
);

template<
   typename _Forward_iterator,
   typename _Sym_reduce_fun
>
inline typename std::iterator_traits<_Forward_iterator>::value_type parallel_reduce(
   _Forward_iterator_Begin,
   _Forward_iterator_End,
   const typename std::iterator_traits<_Forward_iterator>::value_type &_Identity,
   _Sym_reduce_fun_Sym_fun
);

template<
   typename _Reduce_type,
   typename _Forward_iterator,
   typename _Range_reduce_fun,
   typename _Sym_reduce_fun
>
inline _Reduce_type parallel_reduce(
   _Forward_iterator_Begin,
   _Forward_iterator_End,
   const _Reduce_type& _Identity,
   const _Range_reduce_fun &_Range_fun,
   const _Sym_reduce_fun &_Sym_fun
);

參數

  • _Forward_iterator
    輸入範圍的迭代器類型。

  • _Sym_reduce_fun
    對稱減少函式的型別。 這必須是使用此簽章簽署之 **_Reduce_type _Sym_fun(_Reduce_type, _Reduce_type)**的一個函式型別, _Reduce_type 相同識別型別和減少的結果型別。 針對第三個多載,這應該是一致的 _Range_reduce_fun的輸出型別。

  • _Reduce_type
    輸入要減少到可以與輸入元素型別不同的型別。 傳回值和識別值將具有型別。

  • _Range_reduce_fun
    範圍減少函式的型別。 這必須是使用此簽章簽署之 **_Reduce_type _Range_fun(_Forward_iterator, _Forward_iterator, _Reduce_type)**的一個函式型別, _Reduce_type 相同識別型別和減少的結果型別。

  • _Begin
    輸入定址的 Iterator 會減少範圍內的第一個項目。

  • _End
    輸入定址的 Iterator 是在最後一個項目以外介於減少的項目的位置。

  • _Identity
    識別值 _Identity 與減少的結果型別以及 Iterator 的 value_type 第一和第二個多載。 針對第三個多載,識別值必須與減少相同的結果型別,不過,可以是與 Iterator 的 value_type 不同。 它必須具有適當的值這類範圍削減運算子,則為 _Range_fun,當套用至型別 value_type 和識別值的單一項目的範圍,其行為和值的型別轉換為 value_type 的自然變換為識別型別。

  • _Sym_fun
    在第二個減少的對稱函式。 請參閱標記處得到更多資訊。

  • _Range_fun
    在第二個階段減少的函式。 請參閱標記處得到更多資訊。

傳回值

減少的結果。

備註

若要執行平行縮小,函式分割這個範圍會根據大量數目可用的基本排程器。 減少兩階段內發生,第一個階段會在每個區塊內的降低,第二個階段對部分結果之間從每個區塊減少。

第一個多載需要 Iterator 的 value_typeT,與識別實值型別以及降低結果型別。 項目型別 T 必須提供運算子 T T::operator + (T) 來減少每個區塊的項目。 在第二個階段相同的運算子。

第二個多載需要 Iterator 的 value_type, 與識別實值型別以及降低結果型別。 提供的二元運算子 _Sym_fun 用來減少兩階段,在第一個階段以識別當作原始值。

針對第三個多載,識別實值型別必須與減少結果型別,不過, Iterator 的 value_type 與兩個不同。 範圍減少函式 _Range_fun 用來與識別值的第一個階段為初始值,因此,二元函式 _Sym_reduce_fun 套用替代在第二階段的結果。

需求

標頭: ppl.h

**命名空間:**concurrency

請參閱

參考

concurrency 命名空間