std::for_each の並列バージョン。
#include "tbb/parallel_for_each.h"
template<typename InputIterator, typename Func> void parallel_for_each( InputIterator first, InputIterator last, const Func& f[, task_group_context& group] ); template<typename Container, typename Func> void parallel_for_each( Container c, const Func& f[, task_group_context& group] );
parallel_for_each テンプレート関数は、シーケンス [first,last) またはコンテナー c の各要素に関数オブジェクト f を並列に適用します。
入力イテレーターの要件は、ISO C++ 標準の第 24 章で定義されています。以下の表は、Body 型の要件を示しています。
擬似署名 |
意味 |
---|---|
B::operator()( cv-qualifiers T& item ) const |
item を処理します。parallel_for_each は、同じボディー・オブジェクトで item が異なる operator() を同時に呼び出します。 |
T( const T& ) |
ワークアイテムをコピーします。 |
~T::T() |
ワークアイテムを破棄します。 |
ランダムアクセスのない入力ストリームで優れたパフォーマンスを得るには、B::operator() を少なくとも 100,000 クロックサイクル実行します。クロックサイクルが少ない場合、parallel_for_each のオーバーヘッドがパフォーマンスの利点よりも上回ることがあります。
オーバーヘッドを小さくしてスケーラビリティーを向上するには、ランダムアクセス・イテレーターを使用して入力ストリームを指定します。
group 引数が指定されている場合、アルゴリズムのタスクはこのグループで実行されます。デフォルトでは、アルゴリズムは自身がバインドされているグループで実行されます。