Compartir a través de


parallel_reduce (Función)

Calcula la suma de todos los elementos en un intervalo especificado calcular sumas parciales sucesivas, o calcula el resultado de los resultados parciales sucesivos obtenidos de igual forma de utilizar una operación binaria especificada distinto de suma, en paralelo.parallel_reduce es semánticamente similar a std::accumulate, salvo que requiere la operación binaria ser asociativa, y requiere un valor de identidad en lugar de un valor inicial.

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
);

Parámetros

  • _Forward_iterator
    El tipo de iterador del intervalo de entrada.

  • _Sym_reduce_fun
    El tipo de función simétrica de reducción.Debe ser una función escrita con la firma _Reduce_type _Sym_fun(_Reduce_type, _Reduce_type), donde es el mismo el _Reduce_type que la identidad escribe y el tipo de resultado de reducción.Para la tercera sobrecarga, este debe ser coherente con el tipo de resultados de _Range_reduce_fun.

  • _Reduce_type
    El tipo al que la entrada reducirá, que puede ser diferente del tipo de elemento de entrada.El valor devuelto y la identidad tiene este tipo.

  • _Range_reduce_fun
    El tipo de función de reducción de intervalo.Debe ser una función escrita con la firma _Reduce_type _Range_fun(_Forward_iterator, _Forward_iterator, _Reduce_type), el _Reduce_type es igual que la identidad escribe y el tipo de resultado de reducción.

  • _Begin
    Un iterador de entrada que dirige el primer elemento del intervalo que se reducirá.

  • _End
    Un iterador de entrada que las el elemento que tiene una posición más allá del último elemento en el intervalo que se reducirá.

  • _Identity
    El valor _Identity identity es del mismo tipo que el tipo de resultado de reducción y también value_type de iterador para la primera y la segunda sobrecarga.Para la tercera sobrecarga, el valor de identidad debe tener el mismo tipo que el tipo de resultado de reducción, pero puede ser diferente de value_type de iterador.Debe tener un valor apropiado para que el operador _Range_funde reducción de intervalo, cuando se aplica a un intervalo de un solo elemento de value_type tipo y valor de identidad, se comporta como una conversión de tipo del valor de value_type escrito en el tipo de la identidad.

  • _Sym_fun
    La función simétrica que se utilizará en la segunda de reducción.Consulte las notas para obtener información.

  • _Range_fun
    La función que se utilizará en la primera fase de reducción.Consulte las notas para obtener información.

Valor devuelto

El resultado de reducción.

Comentarios

Para realizar una reducción en paralelo, la función divide el intervalo en partes basándose en el número de trabajadores disponibles para el programador subyacente.Reducción tiene lugar en dos fases, la primera fase realiza una reducción dentro de cada fragmento, y la segunda fase realiza una reducción entre los resultados parciales de cada fragmento.

La primera sobrecarga requiere que value_typede iterador, T, es igual que el tipo de valor de identidad así como el tipo de resultado de reducción.El tipo t de elemento debe proporcionar el operador T T::operator + (T) para reducir elementos en cada fragmento.Utilizan el mismo operador en la segunda fase también.

La segunda sobrecarga también requiere que value_type de iterador es igual que el tipo de valor de identidad así como el tipo de resultado de reducción.Utiliza un operador binario proporcionado _Sym_fun en ambas fases de reducción, con el valor de identidad como valor inicial para la primera fase.

Para la tercera sobrecarga, el tipo de valor de identidad debe ser el mismo que el tipo de resultado de reducción, pero value_type de iterador puede ser diferente de ambos.La función _Range_fun de reducción de intervalo se utiliza en la primera fase con el valor de identidad como valor inicial, y la función binaria _Sym_reduce_fun se aplica para sub resultados en la segunda fase.

Requisitos

Encabezado: ppl.h

Simultaneidad deespacio de nombres:

Vea también

Referencia

concurrency (Espacio de nombres)