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
    解决输入的迭代器将减小大小的第一个元素。

  • _End
    解决输入的迭代器在最终元素以外的位置将减少的范围的元素。

  • _Identity
    标识值 _Identity 与减少的结果类型以及迭代的 value_type 第一个和第二个重载的。 对于第三个重载,标识值的类型必须与减少相同的结果类型,但是,可能与迭代器的 value_type 不同。 它必须具有适当的值此类范围缩减运算符 _Range_fun,那么,当应用于类型 value_type 和标识值的单个元素的大小,其行为类似于值的类型转换从类型 value_type 于标识类型。

  • _Sym_fun
    在第二减少的对称函数。 引用备注更多信息。

  • _Range_fun
    用于减小的第一个阶段的功能。 引用备注更多信息。

返回值

减少的结果。

备注

若要执行并行降低,该函数将此范围转换为基于数目的区块可用于基础计划程序。 减少在两个阶段内,第一个阶段对每个区块中,减少,第二个阶段对部分结果之间的减少从每个区块。

第一个重载需要迭代器的 value_typeT,是相同的标识值类型和减少结果类型。 元素类型 T 必须提供运算符 T T::operator + (T) 可以减少每块的元素。 运算符相同在第二个阶段。

第二个重载还需要迭代器的 value_type 是相同的标识值类型和减少结果类型。 将所提供的二元运算符 _Sym_fun 用于两阶段减少,含有标识值作为初始值在第一个阶段。

对于第三个重载,标识值类型必须与减少结果类型,但是,迭代器的 value_type 可能与两个不同。 大小减少功能 _Range_fun 用于标识值的第一个阶段作为初始值,因此,该二进制功能 _Sym_reduce_fun 将应用于第二阶段的子结果。

要求

**标头:**ppl.h

命名空间: 并发

请参见

参考

concurrency 命名空间