Sdílet prostřednictvím


parallel_reduce funkce

Vypočítá součet všech prvků v určeném rozsahu vypočtením následné dílčí součty nebo vypočítá výsledek následné částečné výsledky získané podobně pomocí zadané operace binární Sum, paralelně.parallel_reduceje sémanticky podobné std::accumulate, s výjimkou, že vyžaduje být asociativní binární operace a vyžaduje hodnotu identity místo počáteční hodnota.

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

Parametry

  • _Forward_iterator
    Typ iterační vstupní oblasti.

  • _Sym_reduce_fun
    Typ funkce symetrické snížení.Typ funkce podpisu musí být _Reduce_type _Sym_fun(_Reduce_type, _Reduce_type), kde _Reduce_type je stejný jako typ identity a typ výsledek snížení.Pro třetí přetížení, to by měla být konzistentní s typem výstupu _Range_reduce_fun.

  • _Reduce_type
    Typ, vstupní sníží, což může být odlišné od typu vstupní element.Tento typ bude má vrácené hodnoty a hodnoty identity.

  • _Range_reduce_fun
    Typ funkce snížení rozsahu.Typ funkce podpisu musí být _Reduce_type _Range_fun(_Forward_iterator, _Forward_iterator, _Reduce_type), _Reduce_type je stejný jako typ identity a typ výsledek snížení.

  • _Begin
    Vstupní iterace adresování první prvek v rozsahu sníží.

  • _End
    Vstupní iterační adresování prvek, který je o jednu pozici za poslední prvek v rozsahu sníží.

  • _Identity
    Hodnota identity _Identity je stejného typu jako typ výsledek snížení a také value_type z pro přetížení první a druhé iterace.Pro třetí přetížení musí mít stejný typ jako výsledek typu snížení hodnoty identity, ale může se lišit od value_type z iterace.Musí mít odpovídající hodnotu tak, aby operátor snížení rozsahu _Range_fun, když je použit pro rozsah jeden prvek typu value_type a hodnota identity chová cast typ hodnoty z typu value_type identity typu.

  • _Sym_fun
    Symetrické funkce použité v druhé snížení.Další informace naleznete v poznámky.

  • _Range_fun
    Funkce použité v první fázi snížení.Další informace naleznete v poznámky.

Vrácená hodnota

V důsledku snížení.

Poznámky

Chcete-li provádět paralelní snížení funkce rozdělí rozsah bloky na základě počtu pracovníků k dispozici základní Plánovač.Snížení probíhá ve dvou fázích, první fáze provede snížení v rámci každého bloku a druhá fáze provede snížení mezi částečné výsledky z každého bloku.

Vyžaduje přetížení první iteraci value_type, T, být stejná jako hodnota typ identity, jakož i snížení výsledek typu.Typ prvku t musí poskytnout operátor T T::operator + (T) snížit prvky v každém bloku.Ve druhé fázi se používá stejný operátor.

Druhý přetížení také vyžaduje iteraci value_type být stejná jako hodnota typ identity, jakož i snížení výsledek typu.Zadaná binární operátor _Sym_fun se používá v obou fázích snížení, s hodnotou identity jako počáteční hodnotu pro první fázi.

Třetí přetížení hodnotu typ identity musí být stejný jako výsledek typu snížení, ale iteraci value_type mohou být odlišné od obou.Funkce snižování rozsahu _Range_fun se používá v první fázi s hodnotou identity jako počáteční hodnotu a binární funkce _Sym_reduce_fun sub výsledky ve druhé fázi je použita.

Požadavky

Záhlaví: ppl.h

Obor názvů: souběžnosti

Viz také

Referenční dokumentace

souběžnost oboru názvů