Share via


parallel_reduce, fonction

Calcule la somme de tous les éléments dans une plage spécifiée lors de le calcul de totaux partielles consécutives, ou calcule le résultat des résultats partiels consécutifs sont obtenus d'utiliser une opération binaire spécifiée autre que la somme, en parallèle.parallel_reduce est sémantiquement semblable à std::accumulate, mais il requiert que l'opération binaire d'être associatif, et requiert une valeur d'identité au lieu d'une valeur initiale.

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

Paramètres

  • _Forward_iterator
    Le type d'itérateur de plage d'entrée.

  • _Sym_reduce_fun
    Le type de la fonction symétrique de réduction.Ce doit être un type de fonction avec la signature _Reduce_type _Sym_fun(_Reduce_type, _Reduce_type), où le _Reduce_type est identique au type d'identité et le type de résultat de la réduction.Pour la troisième surcharge, cela doit être compatible avec le type de sortie d' _Range_reduce_fun.

  • _Reduce_type
    Le type auquel l'entrée réduit, qui peut être différent du type d'élément d'entrée.La valeur de retour et la valeur d'identité a ce type.

  • _Range_reduce_fun
    Le type de la fonction de réduction de la plage.Ce doit être un type de fonction avec la signature _Reduce_type _Range_fun(_Forward_iterator, _Forward_iterator, _Reduce_type), le _Reduce_type est identique au type d'identité et le type de résultat de la réduction.

  • _Begin
    Un itérateur d'entrée traitant le premier élément de la plage à réduire.

  • _End
    Un itérateur d'entrée traitant l'élément qui est une position au delà de le dernier élément dans la plage à réduire.

  • _Identity
    La valeur _Identity d'identité est du même type que le type de résultat de la réduction et l' value_type de l'itérateur pour la première et la deuxième surcharges.Pour la troisième surcharge, la valeur d'identité doit avoir le même type que le type de résultat de la réduction, mais peut être différente d' value_type de l'itérateur.Il doit avoir une valeur appropriée telle sorte que l'opérateur _Range_funde réduction de plage, une fois appliqué à une plage d'un élément unique de type value_type et de la valeur d'identité, se comporte comme un cast de type de la valeur du type value_type au type d'identité.

  • _Sym_fun
    La fonction symétrique utilisée dans la deuxième de la réduction.Consultez les notes pour plus d'informations.

  • _Range_fun
    La fonction qui sera utilisée lors de la première phase de la réduction.Consultez les notes pour plus d'informations.

Valeur de retour

Le résultat de la réduction.

Notes

Pour exécuter une réduction parallèle, la fonction divise la plage en segments en fonction de le nombre d'ouvriers disponibles au planificateur sous-jacent.La réduction se déroule en deux phases, la première phase exécute une réduction dans chaque segment, et la deuxième étape exécute une réduction entre les résultats partiels de chaque segment.

La première surcharge requiert qu' value_typede l'itérateur, T, soit les mêmes que le type valeur d'identité ainsi que le type de résultat de réduction.Le type d'élément T doit fournir l'opérateur T T::operator + (T) pour réduire les éléments de chaque segment.Le même opérateur est également utilisé dans la deuxième étape.

La deuxième surcharge requiert également qu' value_type de l'itérateur les mêmes que le type valeur d'identité ainsi que le type de résultat de réduction.L'opérateur binaire fourni _Sym_fun est utilisé dans les deux phases de réduction, avec la valeur d'identité comme la valeur initiale de la première phase.

Pour la troisième surcharge, le type valeur identity doit être le même que le type de résultat de réduction, mais value_type de l'itérateur peut être différent des deux.La fonction _Range_fun de réduction de plage est utilisée lors de la première phase avec la valeur d'identité comme valeur initiale, et la fonction binaire _Sym_reduce_fun est appliquée en substrater les résultats dans la deuxième étape.

Configuration requise

En-tête : ppl.h

Accès concurrentiel del'espace de noms :

Voir aussi

Référence

concurrency, espace de noms