Udostępnij za pośrednictwem


Funkcja parallel_reduce

Oblicza sumę wszystkich elementów w zakresie określonym przez computing kolejnych sum częściowych lub oblicza wynik kolejne wyniki częściowe podobnie uzyskanej przy użyciu określonej operacji binarny, innych niż suma, równolegle.parallel_reducesemantycznie podobny do std::accumulate, z wyjątkiem, że wymaga operacji binarny za asocjacyjnych i wymaga wartości tożsamości zamiast wartości początkowe.

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 iteratora zakres wejściowy.

  • _Sym_reduce_fun
    Typ funkcji redukcji symetrycznego.Musi to być typ funkcji z podpisem _Reduce_type _Sym_fun(_Reduce_type, _Reduce_type), gdzie _Reduce_type jest taka sama jak typ tożsamości i typ wyniku obniżki.Trzeci przeciążenia, powinny to być zgodne z typem danych wyjściowych z _Range_reduce_fun.

  • _Reduce_type
    Typ zmniejszenia dane wejściowe, które mogą być różne od typu elementu input.Zwracana wartość i wartości tożsamości będzie ma tego typu.

  • _Range_reduce_fun
    Typ funkcji zmniejszenie zakresu.Musi to być typ funkcji z podpisem _Reduce_type _Range_fun(_Forward_iterator, _Forward_iterator, _Reduce_type), _Reduce_type jest taki sam, jak typ tożsamości i typ wyniku obniżki.

  • _Begin
    Wejściowy iterację adresowania pierwszy element w zakresie ulec zmniejszeniu.

  • _End
    Wejściowy iteratora adresowania element, który jest o jedną pozycję poza ostatnim elementem w zakresie zmniejszana.

  • _Identity
    Wartość tożsamości _Identity jest tego samego typu, jako wynik typ ograniczenia, a także value_type iteratora dla overloads pierwszego i drugiego.Trzeci przeciążenia, musi mieć ten sam typ jako typ wyniku redukcji wartość tożsamości, ale mogą się różnić od value_type iteratora.Musi mieć odpowiednią wartość takie, że operator zmniejszenie zakresu _Range_fun, gdy jest stosowany do zakresu określonego elementu typu value_type i wartość tożsamości zachowuje się jak obsada typ wartości z typu value_type do typu tożsamości.

  • _Sym_fun
    Funkcja symetryczny używany w drugim redukcji.Więcej informacji można znaleźć w uwagi.

  • _Range_fun
    Funkcja, która będzie używana w pierwszej fazie redukcji.Więcej informacji można znaleźć w uwagi.

Wartość zwracana

Wynik redukcji.

Uwagi

Aby wykonywać równolegle redukcji, funkcja dzieli zakres fragmentów, na podstawie liczby pracowników do podstawowego harmonogramu.Zmniejszenie odbywa się w dwóch fazach, pierwsza faza wykonuje redukcji w ramach każdego fragmentu, a drugi etap wykonuje redukcji między częściowe wyniki z każdego fragmentu.

Pierwszy przeciążenie wymaga, aby iteratora value_type, T, być taki sam, jak typ wartości tożsamości, jak również typu wyniku redukcji.Typ elementu t musi dostarczyć operator T T::operator + (T) do zmniejszenia elementów w każdym fragmencie.Ten sam podmiot jest używany na drugim etapie.

Drugi przeciążenie wymaga również, że iteratora value_type być taki sam, jak typ wartości tożsamości, jak również typu wyniku redukcji.Operator dwuargumentowy dostarczony _Sym_fun jest używany w obu fazach zmniejszenie wartości tożsamość jako wartość początkowa dla pierwszej fazy.

Trzeciego przeciążenia, typ wartości tożsamości musi być taka sama jak typu wyniku redukcji, ale iteratora value_type może się różnić od obu.Zakres funkcji redukcji _Range_fun jest używana w pierwszej fazie z wartością tożsamości jako wartość początkowa i binarne funkcji _Sym_reduce_fun jest stosowane do sub wyników w drugim etapie.

Wymagania

Nagłówek: ppl.h

Obszar nazw: współbieżności

Zobacz też

Informacje

Współbieżność obszaru nazw