ワークアイテムを処理するテンプレート・クラス。
これは古いクラス (非推奨) です。代わりに parallel_do を使用してください。
template<typename Body> class parallel_while;
#include "tbb/parallel_while.h"
parallel_while<Body> は、アイテムの並列反復を行います。各アイテムで行う処理は、Body 型の関数オブジェクトによって定義されます。アイテムは 2 つの方法で指定されます。
アイテムのストリーム。
ストリームの処理中に追加される追加アイテム。
次の表は、ストリームとボディーの要件を示しています。
擬似署名 |
意味 |
---|---|
bool S::pop_if_present( B::argument_type& item ) |
次のストリームアイテムを取得します。parallel_while は、同じストリーム・オブジェクトのメソッドを同時に呼び出しません。 |
B::operator()( B::argument_type& item ) const |
item を処理します。parallel_while は、同じ ボディー・オブジェクトで item が異なる operator を同時に呼び出します。 |
B::argument_type() |
デフォルト・コンストラクター。 |
B::argument_type( const B::argument_type& ) |
コピー・コンストラクター。 |
~B::argument_type() |
デストラクター。 |
速度を向上するには、B::operator() を少なくとも 10,000 命令にします。命令が少ない場合、parallel_while の内部オーバーヘッドが大きくなります。すべてのアイテムが入力ストリームから読み込まれる場合、parallel_while の並列処理はスケーラブルではありません。スケーリングを達成するには、add メソッドがワークの断片を 2 つ以上追加するようにアルゴリズムを設計してください。
namespace tbb { template<typename Body> class parallel_while { public: parallel_while(); ~parallel_while(); typedef typename Body::argument_type value_type; template<typename Stream> void run( Stream& stream, const Body& body ); void add( const value_type& item ); }; }
メンバー | 説明 |
---|---|
parallel_while<Body>() |
まだ実行していない parallel_while を構築します。 |
~parallel_while<Body>() |
parallel_while を破棄します。 |
Template <typename Stream> void run( Stream& stream, const Body& body ) |
body を stream の各アイテムと add メソッドによって追加されたほかのアイテムに適用します。次の条件が両方とも真の場合に終了します。
|
void add( const value_type& item ) |
要件: parallel_while によって作成された body .operator() への呼び出しから呼び出されること。その他の場合、run メソッドの終了セマンティクスは未定義です。 効果: 処理するアイテムのコレクションにアイテムを追加します。 |