インテル® TBB バージョンをビルドするには、インテル® TBB を使用するようにサンプル・アプリケーションを変更してから、変更したコードをコンパイルします。次に、アプリケーションを開始して、実行時間とベースラインを比較します。
build_with_tbb プロジェクトをスタートアップ・プロジェクトに設定します。
プロジェクト build_with_tbb で、使用するコンパイラーをインテル® C++ コンパイラーに変更します ([プロジェクト] > [Intel C++ Composer XE 2013 (インテル® C++ Composer XE 2013)] > [Use Intel C++ (インテル® C++ を使用)])。
プロジェクト build_with_tbb で、インテル® TBB 環境変数を設定します ([プロジェクト] > [Intel C++ Composer XE 2013 (インテル® C++ Composer XE 2013)] > [Select Build Components (ビルド・コンポーネントの選択)] > [Use TBB (TBB を使用)])。 設定される環境変数は、注で定義されています。
プロジェクト 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() に置換されます。
Release 構成で build_with_tbb をビルドします。
サンプル・アプリケーションを開始します。
イメージのレンダリングにかかった時間とパフォーマンスのベースラインを比較します。