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