共用方式為


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
    輸入範圍 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降低的結果型別為相同型別的以及value_type的第一個和第二個多載的 iterator。 為第三個多載,識別值都必須有的降低,結果型別相同的型別,但是可能會與不同value_type的 iterator。 它必須要有適當的值的範圍減少運算子_Range_fun、 套用至一系列型別的單一項目時value_type識別值的行為就像從型別值的型別轉換和value_type的識別型別。

  • _Sym_fun
    降低的秒數中將會使用對稱式的函式。 如需詳細資訊,請參閱 < 備註 >。

  • _Range_fun
    降低在第一個階段中將會使用此函式。 如需詳細資訊,請參閱 < 備註 >。

傳回值

降低的結果。

備註

若要執行的平行降低,函式會將範圍分割成區塊 (chunk) 為基礎的基礎的排程器可用的工作者數目。 降低發生分成兩個階段,第一階段執行中每個區塊,減少,而第二個階段會執行部分的結果從每個區塊之間的降低。

第一個多載的所需的 iterator value_typeT、 做為識別實值型別,以及減少結果型別都相同。 項目型別 t 必須提供運算子**T T::operator + (T)**降低每個區塊中的項目。 在第二個階段,會使用相同的運算子。

第二個多載也需要的 iterator 的value_type做為識別實值型別,以及減少結果型別都相同。 所提供的二元運算子_Sym_fun用在這兩種減少階段,以做為第一個階段的起始值的識別值。

為第三個多載,識別實值型別必須是相同降低的結果型別,但 iterator 的value_type可能會不同於這兩者。 範圍縮小函式_Range_fun的初始值,但二進位的函式以用於第一階段中使用的識別值_Sym_reduce_fun會套用到子中的第二個階段的結果。

需求

標頭: ppl.h

Namespace: 並行存取

請參閱

參考

concurrency 命名空間