Share via


parallel_reduce-Funktion

Berechnet die Summe aller Elemente in einem angegebenen Bereich, indem aufeinander folgende Teilsummen berechnet werden, oder berechnet das Ergebnis der aufeinander folgenden Teilergebnisse, die auf ähnliche Weise mithilfe eines angegebenen binären Vorgangs (außer Summe) abgerufen werden parallel. parallel_reduce entspricht std::accumulate semantisch, außer dass der binäre Vorgang assoziativ sein muss und ein Identitätswert anstelle eines Anfangswerts erforderlich ist.

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 Iteratortyp des Eingabebereich.

  • _Sym_reduce_fun
    Der Typ der Reduzierungsfunktion symmetrischen. Dieser muss ein Funktionstyp mit Signatur _Reduce_type _Sym_fun(_Reduce_type, _Reduce_type) sein, in der _Reduce_type das gleiche wie der Identitätstyp und der Ergebnistyp der Reduzierung ist. Bei der dritten Überladung sollte dieses mit den Ausgabetyp von _Range_reduce_fun konsistent sein.

  • _Reduce_type
    Der Typ, dem die Eingabe zu reduziert, die zu dem Eingabeelementtyp unterscheiden kann. Der Rückgabewert und der Identitätswert werden verfügt über diesen Typ.

  • _Range_reduce_fun
    Der Typ der Bereichsreduzierungsfunktion. Dieser muss ein Funktionstyp mit Signatur _Reduce_type _Range_fun(_Forward_iterator, _Forward_iterator, _Reduce_type) sein, ist _Reduce_type das gleiche wie der Identitätstyp und der Ergebnistyp der Reduzierung.

  • _Begin
    Ein Eingabeiterator, der das erste Element im Bereich reduziert werden.

  • _End
    Ein Eingabeiterator, der das Element behandelt, die eine Position über dem letzten Element hinaus im Bereich ist reduziert werden.

  • _Identity
    Der Identitätswert _Identity hat denselben Typ wie der Ergebnistyp der Verringerung und auch value_type des Iterators für die erste und zweite Überladungen. Bei der dritten Überladung muss der Identitätswert den gleichen Datentyp wie der Ergebnistyp der Reduzierung wurden, jedoch kann der value_type des Iterators unterscheiden. Er muss einen passenden Wert verfügen so, dass der Bereichsreduzierungsoperator _Range_fun, wenn er einem Bereich eines einzelnen Elements vom Typ value_type und vom Identitätswerts angewendet wird, z eine Typumwandlung der Wert vom Typ value_type zum Identitätstyp verhält.

  • _Sym_fun
    Die symmetrische Funktion, die in der zweiten der Reduzierung verwendet wird. Siehe Hinweise weitere Informationen.

  • _Range_fun
    Die Funktion, die in der ersten Phase der Reduzierung verwendet wird. Siehe Hinweise weitere Informationen.

Rückgabewert

Das Ergebnis der Reduzierung.

Hinweise

Um einer parallelen Reduzierung auszuführen, wird die Funktion den Bereich in Ausschnitte auf Grundlage der Arbeiterzahl verfügbar zum zugrunde liegenden Planer unter. Die Reduzierung erfolgt in zwei Schritten statt, wird die erste Phase eine Verringerung innerhalb jedes Blocks aus, die zweite Phase führt eine Verringerung zwischen den partiellen Ergebnissen aus jedem Block aus.

Die erste Überladung muss, dass die value_type des Iterators, T, das mit dem Identitätswerttyp sowie der Reduzierungsergebnistyp ist. Der Elementtyp T muss den Operator T T::operator + (T) bereitgestellt werden, um Elemente in jedem Block zu reduzieren. Derselbe Operator wird in der zweiten Phase auch verwendet.

Die zweite Überladung muss auch, dass value_type des Iterators das gleiche wie der Identitätswerttyp sowie der Reduzierungsergebnistyp ist. Der angegebene binäre Operator _Sym_fun wird in beiden Reduzierungsphasen, mit dem Identitätswert wie der Anfangswert für die erste Phase verwendet.

Bei der dritten Überladung muss der Identitätswerttyp dem Reduzierungsergebnistyp sein, jedoch value_type des Iterators kann sowohl unterschiedlich. Die Bereichsreduzierungsfunktion _Range_fun wird in der ersten Phase mit dem Identitätswert als dem Anfangswert verwendet, und die binäre Funktion eine _Sym_reduce_fun angewendet, um Ergebnisse in der zweiten Phase einzuspringen.

Anforderungen

Header: ppl.h

Namespace: Parallelität

Siehe auch

Referenz

concurrency-Namespace