Função parallel_reduce
Calcula a soma de todos os elementos em um intervalo especificado calculando somas parciais sucessivas, ou calcula o resultado de resultados parciais sucessivos obtidos da mesma forma de usar uma operação binária especificada diferente da soma, em paralelo. parallel_reduce é semanticamente similar a std::accumulate, exceto que requer a operação binária ser 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 simétrica de redução. Isso deve ser um tipo de função com assinatura _Reduce_type _Sym_fun(_Reduce_type, _Reduce_type), onde o _Reduce_type é o mesmo que o tipo de identidade e o tipo de resultado de redução. Para a terceira sobrecarga, isso deve ser consistente com o tipo de saída de _Range_reduce_fun._Reduce_type
O tipo que a entrada será reduzido, que pode ser diferente do tipo de elemento de entrada. O valor de retorno e o valor de identidade tenham esse tipo._Range_reduce_fun
O tipo de 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), o _Reduce_type é o mesmo que o tipo de identidade e o tipo de resultado de redução._Begin
Um iterador de entrada que trata o primeiro elemento no intervalo a ser reduzido._End
Um iterador de entrada que trata o elemento que é uma posição além de elemento final no intervalo ser reduzido._Identity
O valor _Identity de identidade seja do mesmo tipo que o tipo de resultado da redução e também o value_type de iterador para o primeiro e segundo sobrecargas. Para a terceira sobrecarga, o valor da identidade deve ter o mesmo tipo que o tipo de resultado da redução, mas pode ser diferente de value_type de iterador. Deve ter um valor apropriado de modo que o operador _Range_funde redução de intervalo, quando aplicado a um intervalo de um único elemento de tipo value_type e o valor de identidade, se comporta como uma conversão de tipo do valor do tipo value_type ao tipo de identidade._Sym_fun
A função simétrica que será usada na segunda de redução. Consulte comentários para obter mais informações._Range_fun
A função que será usada na primeira fase de redução. Consulte comentários para obter mais informações.
Valor de retorno
O resultado de redução.
Comentários
Para executar uma redução em paralelo, 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 em cada parte, e a segunda fase executa uma redução entre os resultados parciais de cada parte.
A primeira sobrecarga requer que value_typeiterator, T, é o mesmo que o tipo de valor de identidade bem como o resultado da redução tipo. O tipo de elemento T deve fornecer o operador T T::operator + (T) para reduzir os elementos em cada parte. O mesmo operador é usado na segunda fase também.
A segunda sobrecarga também requer que value_type de iterador é o mesmo que o tipo de valor de identidade bem como o resultado da redução tipo. 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 terceira sobrecarga, o tipo de valor de identidade deve ser o mesmo que o tipo de resultado de redução, mas value_type de iterador pode ser diferente de ambos. A função _Range_fun de redução do intervalo é usada na primeira fase com o valor de identidade como o valor inicial, e a função binário _Sym_reduce_fun é aplicada para sub resultados na segunda fase.
Requisitos
Cabeçalho: ppl.h
Namespace: simultaneidade