ワークアイテムを処理するテンプレート・クラス。
これは古いクラス (非推奨) です。代わりに 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 メソッドの終了セマンティクスは未定義です。 効果: 処理するアイテムのコレクションにアイテムを追加します。 |