在指定范围内通过计算连续的部分总和来计算所有元素的总和,或并行计算连续的部分结果,该结果类似于从使用指定的二元运算而不是求和获得的。 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
解决在范围的输入迭代数减少第一个元素。_End
解决超出最终元素外的位置将收缩范围元素的输入迭代器。_Identity
标识值是 _Identity 类型和减小的结果类型以及迭代器的 value_type 相同的第一个和第二个重载的。 对于第三个重载,则标识值的类型必须与相同,降低的结果类型,但可能与迭代器的 value_type。 它必须具有适当的值使范围缩减运算符 _Range_fun,因此,当应用于 value_type 类型和标识值的单个元素的范围,其行为类似值的类型转换将类型 value_type 对标识的类型。_Sym_fun
在第二降低对称函数。 参阅有关详细信息标记。_Range_fun
在第一行降低时将使用的函数。 参阅有关详细信息标记。
返回值
降低的结果。
备注
若要执行并行降低,函数范围划分到不同的块数类型用于基础计划程序。 减少两个阶段中,第一阶段执行在每个区块中减少,并且,第二个阶段执行。部分结果之间减少的每个块。
第一个重载需要迭代器的 value_type,T,与标识值类型和减小结果类型。 元素类型 T 必须提供 T T::operator + (T) 运算符可以减少每个区块的元素。 同一运算符在第二个阶段。
第二个重载也需要迭代器的 value_type,,与标识值类型和减小结果类型。 提供的二元运算符 _Sym_fun 在两阶段减少,则标识值,初始值。第一个阶段。
对于第三个重载,则标识值类型必须与结果类型,但降低,迭代器的 value_type 可以与两种不同。 范围减少 _Range_fun 函数在含有标识值的第一阶段为初始值,并且,二进制函数 _Sym_reduce_fun 应用一在第二个阶段的结果。
要求
**标头:**ppl.h
**命名空间:**并发