pipeline クラス

概要

パイプライン実行を行うクラス。

ヘッダー

#include "tbb/pipeline.h"

構文

class pipeline; 

説明

pipeline は、アイテムのストリームへのフィルターを含む、パイプライン化された一連のアプリケーションを表します。各フィルターは特定のモードで実行します: parallel、serial_in_order、または serial_out_of_order (MacDonald 2004)。

pipeline は、ここで fi として示された 1 つ以上のフィルターを含みます。i は、パイプラインにおけるフィルターの位置を示します。パイプラインは、f0 フィルターで開始し、f1f2、... と続きます。次のステップで、クラス・パイプラインの使用方法を説明します。

  1. filter から各クラス fi をから派生します。fi のコンストラクターは、基本クラス filter のコンストラクターへの引数としてモードを指定します。
  2. アイテムでフィルターのアクションを行い、次のフィルターによって処理されるアイテムへのポインターを返すように仮想メソッド filter::operator() をオーバーライドします。最初のフィルター f0 はストリームを生成します。ストリームにアイテムがそれ以上ない場合、NULL を返します。最後のフィルターの戻り値は無視されます。
  3. pipeline クラスのインスタンスを作成します。
  4. fi フィルターのインスタンスを作成して、最初から最後の順にパイプラインに追加します。フィルターのインスタンスは、パイプラインに一度だけ追加することができます。フィルターは、同時に 2 つ以上のパイプラインのメンバーであってはなりません。
  5. pipeline::run メソッドを呼び出します。max_number_of_live_tokens 引数は、同時に実行するステージ数の上限を設定します。高い値を設定すると、同時に実行できる数は増加しますが、処理するアイテムが多くなるためメモリー消費量が増加します。max_number_of_live_tokens の効果的な使用方法については、チュートリアルの pipeline クラスのセクションを参照してください。

ヒント

十分なプロセッサーとトークンが提供された場合、パイプラインの処理能力は、最も遅いシリアルフィルターの処理能力に制限されます。

parallel_pipeline 関数は、パイプラインの構築および実行用の厳密な型のラムダ・フレンドリーなインターフェイスを提供します。

メンバー

namespace tbb {
    class pipeline {
     public:
        pipeline();
        ~pipeline();
        void add_filter( filter& f );
        void run( size_t max_number_of_live_tokens [, task_group_context& group ] );
        void clear();
    };
}

現在の実装では、デストラクターを仮想として宣言していますが、これに依存しないでください。仮想は推奨されていません。インテル® TBB の将来のバージョンでは、廃止される可能性があります。

次の表は、このテンプレート・クラスのメンバーの詳細な情報を提供します。
メンバー 説明
pipeline()

フィルターなしのパイプラインを構築します。

~pipeline()

パイプラインからすべてのフィルターを削除してパイプラインを破棄します。

void add_filter( filter& f )

パイプラインのフィルターのシーケンスにフィルター f を追加します。フィルター f は、すでにパイプライン中にあってはなりません。

void run( size_t max_number_of_live_tokens[, task_group_context& group] )

最初のフィルターが NULL を返し、後のフィルターがそれぞれ、その前からのアイテムをすべて処理するまで、パイプラインを実行します。並列に処理されるアイテムの数は、パイプラインの構造と利用可能なスレッド数に依存します。同時に最大 max_number_of_live_tokens を実行できます。

パイプラインは複数回実行することができます。各実行の間にステージを追加できます。パイプラインの同じインスタンス上で同時に実行を複数呼び出すことは禁止されています。

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

void clear()

パイプラインからすべてのフィルターを削除します。

関連情報