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_type, T、 做為識別實值型別,以及減少結果型別都相同。 項目型別 t 必須提供運算子**T T::operator + (T)**降低每個區塊中的項目。 在第二個階段,會使用相同的運算子。
第二個多載也需要的 iterator 的value_type做為識別實值型別,以及減少結果型別都相同。 所提供的二元運算子_Sym_fun用在這兩種減少階段,以做為第一個階段的起始值的識別值。
為第三個多載,識別實值型別必須是相同降低的結果型別,但 iterator 的value_type可能會不同於這兩者。 範圍縮小函式_Range_fun的初始值,但二進位的函式以用於第一階段中使用的識別值_Sym_reduce_fun會套用到子中的第二個階段的結果。
需求
標頭: ppl.h
Namespace: 並行存取