parallel_for_each テンプレート関数

概要

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 型の要件を示しています。

Body B と T 型の引数に対する parallel_for_each の要件

擬似署名

意味

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 引数が指定されている場合、アルゴリズムのタスクはこのグループで実行されます。デフォルトでは、アルゴリズムは自身がバインドされているグループで実行されます。