Compartilhar via


Função de parallel_reduce

Calcula a soma de todos os elementos em um intervalo especificado pela computação sucessivas somas parciais ou calcula o resultado de sucessivos resultados parciais da mesma forma obtido usando uma operação de binário especificada diferente de soma, em paralelo.parallel_reduceé semanticamente similar ao std::accumulate, exceto que ela exige a operação binária associativa e requer um valor de identidade, em vez de um 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
    O tipo de iterador de intervalo de entrada.

  • _Sym_reduce_fun
    O tipo de função redução simétrica.Isso deve ser um tipo de função com assinatura _Reduce_type _Sym_fun(_Reduce_type, _Reduce_type), onde _Reduce_type é o mesmo como o tipo de identidade e o tipo de resultado de redução.Para a terceira sobrecarga, deve ser consistente com o tipo de saída de _Range_reduce_fun.

  • _Reduce_type
    O tipo que reduzirá a entrada, que pode ser diferente do tipo de elemento de entrada.O valor de retorno e o valor de identidade será tem esse tipo.

  • _Range_reduce_fun
    O tipo da função de redução do intervalo.Isso deve ser um tipo de função com assinatura _Reduce_type _Range_fun(_Forward_iterator, _Forward_iterator, _Reduce_type), _Reduce_type é o mesmo que o tipo de identidade e o tipo de resultado de redução.

  • _Begin
    Um entrada iterador do primeiro elemento no intervalo de endereçamento seja reduzido.

  • _End
    Um iterador entrado endereçamento o elemento é uma posição além do elemento final no intervalo a ser reduzido.

  • _Identity
    O valor de identidade _Identity é do mesmo tipo como o tipo de resultado de redução e também a value_type do iterador para sobrecargas de primeiro e segundo.Para a sobrecarga de terceira, o valor de identidade deve ter o mesmo tipo como o tipo de resultado de redução, mas pode ser diferente do value_type do iterador.Ele deve ter um valor apropriado que o operador de redução do intervalo _Range_fun, quando aplicado a um intervalo de um único elemento do tipo value_type e o valor de identidade, se comporta como uma conversão de tipo de valor do tipo value_type o tipo de identidade.

  • _Sym_fun
    A função simétrica que será usada na segunda de redução.Para obter mais informações, consulte comentários.

  • _Range_fun
    A função que será usada na primeira fase de redução.Para obter mais informações, consulte comentários.

Valor de retorno

O resultado de redução.

Comentários

Para realizar uma redução paralela, a função divide o intervalo em partes com base no número de trabalhadores disponíveis para o Agendador subjacente.A redução ocorre em duas fases, a primeira fase executa uma redução dentro de cada bloco e a segunda fase executa uma redução entre os resultados parciais de cada bloco.

A primeira sobrecarga requer que o iterador value_type, T, ser o mesmo como o tipo de valor de identidade, bem como o tipo de resultado de redução.O tipo de elemento t deve fornecer o operador T T::operator + (T) para reduzir os elementos em cada bloco.O mesmo é usado na segunda fase.

A segunda sobrecarga também requer que o iterador value_type ser o mesmo como o tipo de valor de identidade, bem como o tipo de resultado de redução.O operador binário fornecido _Sym_fun é usado em ambas as fases de redução, com o valor de identidade, como o valor inicial para a primeira fase.

Para a sobrecarga de terceira, o tipo de valor de identidade deve ser o mesmo como o tipo de resultado de redução, mas o iterador value_type pode ser diferente de ambos.A função de redução do intervalo _Range_fun é usado na primeira fase com o valor de identidade, como o valor inicial e a função binária _Sym_reduce_fun aplicados a sub resultados na segunda fase.

Requisitos

Cabeçalho: ppl.h

Namespace: concorrência

Consulte também

Referência

simultaneidade Namespace