Partager via


parallel_reduce, fonction

Calcule la somme de tous les éléments dans une plage spécifiée en calculant les sommes partielles consécutives, ou calcule le résultat de résultats partiels consécutifs obtenus en utilisant en parallèle une opération binaire spécifiée autre que la somme. parallel_reduce est sémantiquement semblable à std::accumulate, mis à part qu'il requiert que l'opération binaire soit associative, et qu'il 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 la portée d'entrée.

  • _Sym_reduce_fun
    Le type de la fonction symétrique de réduction. Il doit s'agir d'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 du compactage. Pour la troisième surcharge, cela doit être compatible avec le type de sortie _Range_reduce_fun.

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

  • _Range_reduce_fun
    Le type de la fonction de réduction de portée. Il doit s'agir d'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 du compactage.

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

  • _End
    Un itérateur d'entrée adressant l'élément qui est une position au-delà de l'élément final 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 ainsi que la value_type de l'itérateur pour les première et 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 de value_type de l'itérateur. Il doit avoir une valeur appropriée telle que l'opérateur _Range_funde réduction de plage, lorsqu'il est appliqué à une plage d'un élément de type value_type et la valeur d'identité, se comportent comme une conversion de type de la valeur du type value_type au type identity.

  • _Sym_fun
    La fonction symétrique à utiliser dans la seconde partie du compactage. Référez-vous aux Remarques pour plus d'informations.

  • _Range_fun
    La fonction symétrique à utiliser dans la première phase du compactage. Référez-vous aux Remarques pour plus d'informations.

Valeur de retour

Le résultat du compactage.

Notes

Pour exécuter une réduction parallèle, la fonction divise la plage en des segments selon le nombre de threads de travail disponibles pour le planificateur sous-jacent. La réduction a lieu en deux phases, la première étape effectue une réduction au sein de chaque segment, et la deuxième étape effectue une réduction entre les résultats partiels de chaque segment.

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

La seconde surcharge nécessite aussi que value_type de l'itérateur, soit le même que le type de valeur d'identité ainsi que le type de résultat de réduction. L'opérateur binaire spécifié _Sym_fun est utilisé dans les deux phases de réduction, avec la valeur d'identité comme valeur initiale pour la première phase.

Pour la troisième surcharge, le type de valeur d'identité doit être identique au 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 au cours de la première phase avec la valeur d'identité comme valeur initiale, et la fonction binaire _Sym_reduce_fun est appliquée aux sous résultats dans la deuxième étape.

Configuration requise

En-tête : ppl.h

Espace de noms : concurrency

Voir aussi

Référence

concurrency, espace de noms