Поделиться через


Функция 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
    Итератор ввода адресацию элемент, позиция за одну final элементом в диапазоне быть уменьшенным.

  • _Identity
    Значение идентификатора _Identity того же типа, что тип результата уменьшить, а также value_type итератора для первого и второго перегрузок.Для третьей перегрузки, значение идентификаторов должны иметь один и тот же тип, что и тип результата сократить, но может отличаться от value_type итератора.Оно должно иметь соответствующее значение те, что оператор _Range_fun уменьшить расстояния, примененный к диапазону одного элемента типа value_type и значения идентификаторов, ведет себя как приведение типов значений от типа value_type к типу идентификатора.

  • _Sym_fun
    Симметрическая функция, которая будет использоваться во втором из сокращения.Дополнительные сведения см. в разделе " примечания ".

  • _Range_fun
    Функция, которая будет использоваться в первом этапе сокращения.Дополнительные сведения см. в разделе " примечания ".

Возвращаемое значение

Результат сокращения.

Заметки

Для выполнения параллельного уменьшение, функция сортирует диапазон на блоки, основанные на количестве рабочих доступных в базовом планировщику.Снижение происходит в шагах 2 первый этап выполняет сокращение в каждом блоке, а второй этап выполняет сокращение от частично результаты из каждого блока.

Первый перегруженный метод требует value_type итератора, T, такие же, как тип значения идентификаторов, так же как результат уменьшения типа.Тип t элементов должно предоставить оператор T T::operator + (T) для уменьшения количества элементов в каждом блоке.Оператор используется один и тот же во втором шаге.

Вторая перегрузка также требует, чтобы value_type итератора совпадает с типом значения идентификаторов, так же как результат уменьшения типа.Предоставленный аргумент бинарный оператор _Sym_fun используется в обоих этапах уменьшить, значение идентификаторов, как начальное значение на первый этап.

Для третьей перегрузки, тип значения идентификаторов должен быть тем же, что и тип результата сократить, но value_type может отличаться от оба итератора.Функция _Range_fun уменьшения диапазона используется в первом этапе со значением идентификатора в качестве начального значения и _Sym_reduce_fun бинарная функция применяется для вложенных результатов во втором шаге.

Требования

Заголовок: ppl.h

Параллелизм пространство имен:

См. также

Ссылки

Пространство имен concurrency