次の方法で共有


parallel_reduce 関数

連続する部分的な合計を計算することで、指定された範囲のすべての要素の合計を計算します。または、指定された二項演算を使用して取得した、合計以外の連続する部分的な結果を並列で計算します。 parallel_reducestd::accumulate と意味が同じです。ただし、結合のための二項演算と、初期値ではなく ID 値が必要です。

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

パラメーター

  • _Forward_iterator
    入力範囲の反復子の型。

  • _Sym_reduce_fun
    対称リダクション関数の型。 これは_Reduce_type が reduction ID の型と戻り値の型と同じである **_Reduce_type _Sym_fun(_Reduce_type, _Reduce_type)**シグネチャを持つ関数型である必要があります。 3 番目のオーバーロードでは、これは _Range_reduce_funの出力の種類に準拠している必要があります。

  • _Reduce_type
    入力要素の型と異なる場合、入力が単純化する型。 戻り値と ID 値はこの型を含んでいます。

  • _Range_reduce_fun
    範囲の低減関数の型。 これは **_Reduce_type _Range_fun(_Forward_iterator, _Forward_iterator, _Reduce_type)**シグネチャを持つ関数型である必要があります_Reduce_type が reduction ID の型と戻り値の型と同じです。

  • _Begin
    低下する範囲の最初の要素を示す入力反復子。

  • _End
    低下する範囲の最後の要素以外の 1 種類の要素の位置を示す入力反復子。

  • _Identity
    ID 値 _Identity が reduction 結果型、1 番目と 2 番目のオーバーロードの反復子の、value_type と同じ型です。 3 番目のオーバーロードでは、識別子の値が reduction 結果型と同じ型でなければなりません。反復子の value_type とは異なります。 この型は、型 value_type と ID 値の一つの要素の範囲に適用した場合、範囲の低減の演算子が型 value_type から特定の型に応じた値の型キャストのように動作すること _Range_funように適切な値が必要です。

  • _Sym_fun
    リダクションの第 2 で使用される対称関数。 詳細については、"解説"を参照してください。

  • _Range_fun
    リダクションのフェーズ内に使用される関数。 詳細については、"解説"を参照してください。

戻り値

リダクションの結果。

解説

並列リダクションを実行するには、関数は、基になるスケジューラで使用できる豊富な数に基づいてチャンクに範囲を区切ります。 リダクションは 2 フェーズで行われますフェーズでは、各チャンク内の低減を実行し、2 番目のフェーズでは、各チャンクの部分的な結果間の低減を実行します。

最初のオーバーロードは、反復子の value_typeTが ID 値の型、または reduction 結果型と同じであることが必要です。 要素の型 T に各チャンク要素を単純化するに演算子を指定する T T::operator + (T) 必要があります。 同じ演算子は 2 番目のフェーズに使用されます。

2 番目のオーバーロードは、反復子の value_type が ID 値の型、または reduction 結果型と同じであることが必要です。 指定された _Sym_fun 二項演算子は最初の段階 ID 値を使用して両方の低減フェーズは、初期値として使用されます。

3 番目のオーバーロードでは、識別子の値型が reduction 結果型と同じである必要があります。反復子の value_type とは異なる場合があります。 範囲の低減関数 _Range_fun は初期値として ID 値を持つ最初に使用され、バイナリ _Sym_reduce_fun 関数は 2 番目のフェーズの補助的な結果に適用されます。

必要条件

ヘッダー: ppl.h

名前空間: concurrency

参照

関連項目

concurrency 名前空間