Функция 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_type и T были такими же, как и тип идентификатора и результата редукции. Тип элемента T должен предоставить оператор T T::operator + (T), чтобы выполнить редукцию в каждом блоке. Тот же оператор используется во втором фазе.
Второй перегруженный метод также требует, чтобы тип итератора value_type был таким же, как и тип идентификатора и результата редукции. Предоставленный бинарный оператор _Sym_fun используется в обоих фазах редукции со значением идентификатора как начальным значением для первая фазы.
В третьей перегруженной функции, тип значения идентификатора должен совпадать с типом результата редукции, но value_type итератора может отличаться от них. Функция _Range_fun редукции диапазона используется в первой фазе со значением идентификатора в качестве начального, а бинарная функция _Sym_reduce_fun применяется к промежуточным результатам в второй фазе.
Требования
Заголовок: ppl.h
Пространство имен: concurrency