Share via


parallel_reduce-Funktion

Berechnet die Summe aller Elemente in einem angegebenen Bereich, indem das Berechnen von Summen oder teilweisen aufeinander folgende berechnet das Ergebnis der aufeinander folgende partiellen Ergebnissen abgerufene auf ähnliche Weise für die Verwendung einer angegebenen binären Operation nicht als Summe parallel.parallel_reduce ist semantisch auf std::accumulate vergleichbar, außer dass die binäre Operation erfordert, vereinigend und erfordert einen Identitätswert anstelle eines Anfangswerts.

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

Parameter

  • _Forward_iterator
    Der Iterator den Typ des Eingabebereichs.

  • _Sym_reduce_fun
    Der Typ des symmetrischen Reduzierungs für Reservierungen.Dies muss ein Funktionstyp mit Signatur _Reduce_type _Sym_fun(_Reduce_type, _Reduce_type) sein, in der _Reduce_type mit dem Identitätstyp und der Ergebnistyp der Verringerung ist.Für die dritte Überladung sollte dies mit dem Ausgabetyp von _Range_reduce_fun konsistent sein.

  • _Reduce_type
    Der Typ, für den die Eingabe für reduziert, die auf das Eingabeelement des Arrays unterscheiden kann.Der Rückgabewert und der Identitätswert sind diesen Typ.

  • _Range_reduce_fun
    Der Typ der Funktion reduzierungs Bereichs.Dies muss ein Funktionstyp mit Signatur _Reduce_type _Range_fun(_Forward_iterator, _Forward_iterator, _Reduce_type) sein, _Reduce_type ist identisch mit der Identitätstyp und der Ergebnistyp der Verringerung.

  • _Begin
    Ein Eingabeiterator, der das erste Element im reduzierten Bereich behandelt werden soll.

  • _End
    Ein Eingabeiterator, der das Element adressiert, das eine Position oberhalb des abschließenden Elements hinaus im Bereich reduziert werden.

  • _Identity
    Der Identitätswert _Identity ist vom selben Datentyp wie der Ergebnistyp der Verringerung und auch value_type des Iterators für die erste und zweite Überladungen.Für die dritte Überladung muss der Identitätswert denselben Typ wie der Ergebnistyp der Verringerung haben, kann jedoch zu value_type des Iterators unterscheiden.Er muss einen entsprechenden Wert enthalten reduzierungs Bereich so, dass der Operator _Range_fun, wenn er auf einen Bereich eines einzelnen Elements vom Typ value_type und des Identitätswerts angewendet wird, z. B. eine Typumwandlung des Werts vom Typ value_type auf den Identitätstyp verhält.

  • _Sym_fun
    Der symmetrische Funktion, die in der zweiten die Verringerung verwendet wird.Siehe Hinweise.

  • _Range_fun
    Die Funktion, die in der ersten Phase der Verringerung verwendet wird.Siehe Hinweise.

Rückgabewert

Das Ergebnis der Verringerung.

Hinweise

Um eine parallele Verringerung auszuführen, wird die Funktion der Bereich in Ausschnitte auf Grundlage der Arbeiterzahl unter Planer des zugrunde liegenden verfügbar.Die Verringerung erfolgt in zwei Phasen statt, wird die erste Phase eine Verringerung innerhalb eines Ausschnitts aus, und die zweite Phase führt eine Verringerung von partiellen Ergebnissen aus einem Ausschnitt aus.

Die erste Überladung ist es erforderlich, dass value_type des Iterators, T, mit dem die Identität werttyp sowie der Reduzierungs String ist.Der Elementtyp T muss den Operator T T::operator + (T) bereitstellen, um Elemente in jedem Block zu reduzieren.Derselbe Operator wird auch in der zweiten Phase verwendet.

Die zweite Überladung erfordert außerdem, dass value_type des Iterators mit dem die Identität werttyp sowie der Reduzierungs String ist.Der angegebene binäre Operator _Sym_fun wird in beide Reduzierungs phasen, mit dem Identitätswert z. B. der Anfangswert für die erste Phase verwendet.

Für die dritte Überladung muss die Identität der werttyp derselbe wie der Reduzierungs String sein, aber value_type des Iterators ist möglicherweise sowohl unterschiedlich.Im Bereich reduzierungs _Range_fun Feature wird in der ersten Phase mit dem Identitätswert als Startwert verwendet, und die binäre Funktion _Sym_reduce_fun wird angewendet, um Ergebnisse in der zweiten Phase einzuspringen.

Anforderungen

Header: ppl.h

Namespace: Parallelität

Siehe auch

Referenz

concurrency-Namespace