インテル® TBB バージョンをビルドするには、インテル® TBB を使用するようにサンプル・アプリケーションを変更してから、変更したコードをコンパイルします。次に、アプリケーションを実行して、実行時間とベースラインを比較します。
次のコマンドを実行して、シリアルバージョンのビルド時に作成されたファイルをすべて削除します。
%make clean
コードエディターでソースファイル src/build_with_tbb/build_with_tbb.cpp を開きます。
インテル® TBB ヘッダーのコメントを外して、サンプル・アプリケーションで使用されるインテル® TBB 関数を宣言します。
#include "tbb/task_scheduler_init.h" #include "tbb/parallel_for.h" #include "tbb/blocked_range.h"
draw_task クラス定義のコメントを外します。 このクラスは、draw_task() 関数を、関数オブジェクトを定義するクラスに置換します。 draw_task クラスの operator() メンバー関数と draw_task() 関数のコードの類似性に注意してください。 operator() メンバー関数の引数は const tbb:blocked_range<int> &r です。 この引数は、この関数オブジェクトを実行するインテル® TBB スレッドに渡される反復範囲です。
draw_task() 関数をコメントアウトします。この関数のタスクは draw_task クラスで定義されます。
thread_trace 関数にある次のコメントを外します。
インテル® TBB のスケジュールとスレッド数に関する行。環境変数 TACHYON_NUM_THREADS にスレッド数を手動で定義できるようになります。
粒度を変更する場合は、粒度に関する行。粒度は、複数のスレッドに分割できるループ反復の数の下限です。
インテル® TBB の parallel_for 関数。 この関数で並列呼び出しが行われます。この関数の最初の引数は、ループを実行する反復空間を (starty から stopy で) 定義します。 粒度を手動で指定する場合は、grain_size を 3 番目の引数として tbb::blocked_range constructor に渡します。 2 番目の引数は、draw_task() 関数オブジェクトです。 最後の引数は、インテル® TBB の auto_partitioner で、ループ反復のパーティショニングを自動的に制御します。
シリアル draw_task() 関数をコメントアウトします。この関数は parallel_for() に置換されます。
次のコマンドを実行してサンプルをビルドします。
%make tbb
サンプル・アプリケーションを実行します。
イメージのレンダリングにかかった時間とパフォーマンスのベースラインを比較します。