Tachyon は、データファイルのオブジェクトをレンダリングするレイ・トレーシング・アプリケーションです。Tachyon プログラムは製品の Samples ディレクトリー以下にあります: <install-dir>\Samples\<locale>\C++\Tachyon.zip
ファイルを \Tachyon に展開してください。
デフォルトで、入力ファイルとして balls.dat を使用します。データファイルは \Tachyon\dat\ ディレクトリーにあります。オリジナルの Tachyon は、関数 pthread_create() (ソースファイル: \Tachyon\src\Windows\pthread.cpp) で明示的なスレッド (1 つはレンダリング用、もう 1 つは演算用) により並列処理されたアプリケーションでした。このチュートリアルでは、OpenMP*、インテル® TBB、およびインテル® Cilk™ Plus により演算スレッドに並列化を実装します。並列化は 1 つ関数 draw_task() でのみ実装されます。この関数は、build_serial プロジェクトの build_serial.cpp ソースファイルにあります。
Microsoft* Visual Studio* でソリューション・ファイル \Tachyon\vc8\tachyon_compiler.sln を開きます。含まれるプロジェクトは次のとおりです。
build_serial
build_with_cilk
build_with_openmp
build_with_tbb
tachyon.common
build_with_openmp、build_with_tbb、build_with_tbbc は、OpenMP*、インテル® TBB、インテル® Cilk™ Plus をそれぞれ使用しています。これらの実装に加えて、インテル® TBB に基づくラムダ機能も使用できます。
次の手順に従って、Tachyon におけるシリアルおよびインテル® Cilk™ Plus アプローチをビルドしてください。
以下の手順に従って、Microsoft* Visual C++* コンパイラーとインテル® C++ コンパイラーの両方を使用し、同じ関数の異なる並列実装バージョンをビルドします。アプリケーションの実行時、オブジェクトをレンダリングするのに必要な実行時間がウィンドウタイトルに表示されます。この時間により、最初のステップで確立されるシリアル実装のベースラインと比較して、並列実装で得られる速度向上が示されます。
build_serial プロジェクトをスタートアップ・プロジェクトに設定します ([プロジェクト] > [スタートアップ プロジェクトに設定])。
構成を Release モードにします ([ビルド] > [構成マネージャ] > [アクティブ ソリューション構成:] > Release)。そして build_serial プロジェクトをビルドします。
[デバッグ] > [デバッグなしで開始] で tachyon_compiler.exe を実行します。ウィンドウタイトルに表示された時間 (秒) をメモしておきます。イメージをレンダリングするこの時間が、Microsoft* Visual C++* コンパイラーで並列化する際のベースラインになります。
プロジェクト build_serial と "tachyon.common" で、使用するコンパイラーをインテル® Parallel Composer に変更します ([プロジェクト] > [Intel C++ Composer XE 2011(インテル(R) C++ Composer XE 2011)] > [Use Intel C++ (インテル(R) C++ を使用)]).
Release モードで build_serial をリビルドします (ここでは、インテル® コンパイラーを使用)。
アプリケーションを実行します。この時間をメモしておきます。これが、インテル® コンパイラーで並列化する際のベースラインになります。
build_with_openmp プロジェクトをスタートアップ・プロジェクトに設定します。
プロジェクト build_with_openmp で、使用するコンパイラーをインテル® C++ Composer XE に変更します ([プロジェクト] > [Intel C++ Composer XE (インテル(R) C++ Composer XE)] > [Use Intel C++ (インテル(R) C++ を使用)])。
プロジェクト build_with_openmp で、/Qopenmp コンパイラー・オプションが設定されていることを確認してください ([プロジェクト] > [プロパティ] > [構成プロパティ] > [C/C++] > [Language (言語)] > [OpenMP Support (OpenMP サポート)] で [Generate Parallel Code (/Qopenmp) (並列コードの生成 (/Qopenmp))])。
プロジェクト build_with_openmp のソースファイル build_with_openmp.cpp を開きます。
ルーチン draw_task の OpenMP* プラグマのコメントを外します。このプラグマは並列領域を作成し、スレッドチームにループの反復分配します。
ルーチン draw_task の並列領域にある return をコメントアウトします。
ルーチン draw_task の並列領域にある ison へのゼロの代入 (ison = 0;) のコメントを外します。
ルーチン draw_task の最後にある return のコメントを外します。
Release 構成で build_with_openmp をビルドします。
アプリケーションを実行します。
時間をメモしてシリアルバージョンと比較します。
build_with_tbb プロジェクトをスタートアップ・プロジェクトに設定します。
プロジェクト build_with_tbb で、使用するコンパイラーをインテル® C++ Composer XE に変更します ([プロジェクト] > [Intel C++ Composer XE (インテル(R) C++ Composer XE)] > [Use Intel C++ (インテル(R) C++ を使用)])。
プロジェクト build_with_tbb で、インテル® TBB 環境が設定されていることを確認してください ([プロジェクト] > [Intel C++ Composer XE (インテル(R) C++ Composer XE)] > [Select Build Components (ビルド・コンポーネントの選択)] > [Use TBB (TBB を使用)]). 以下の注意事項を参照してください。
プロジェクト build_with_tbb のソースファイル build_with_tbb.cpp を開きます。
TBB ヘッダーファイル のコメントを外します。
クラス draw_task のコメントを外します。
ルーチン draw_task をコメントアウトします。
ルーチン thread_trace の TBB スケジュールとスレッド数の行のコメントを外します。
ルーチン thread_trace の粒度 (grain_size) の行のコメントを外します。
ルーチン thread_trace の TBB parallel_for ルーチンの行のコメントを外します。
ルーチン thread_trace の ルーチン draw_task の呼び出しをコメントアウトします。
Release 構成で build_with_tbb をビルドします。
アプリケーションを実行します。
時間をメモしてシリアルバージョンと比較します。
追加のインクルード・ディレクトリーに $(TBB22_INSTALL_DIR)\include ([プロジェクト] > [プロパティ] > [構成プロパティ] > [C/C++] > [General (全般)] > [Additional Include Directories (追加のインクルード・ディレクトリー)] で $(TBB22_INSTALL_DIR)\include)) が設定されていることを確認してください。
追加のライブラリー・ディレクトリーに $(TBB22_INSTALL_DIR)\ia32\vc8\lib ([プロジェクト] > [プロパティ] > [構成プロパティ] > [Linker (リンカー)] > [General (全般)] > [Additional Library Directories (追加のライブラリー・ディレクトリー)] で $(TBB22_INSTALL_DIR)\ia32\vc8\lib)) が設定されていることを確認してください。
x64 プラットフォームでは、$(TBB22_INSTALL_DIR)\ia32 の代わりに、$(TBB22_INSTALL_DIR)\intel64 を設定します。
インテル® TBB バージョン 3 では、$(TBB22_INSTALL_DIR) の代わりに、$(TBB30_INSTALL_DIR) $(TBB22_INSTALL_DIR) を設定します。
Microsoft* Visual Studio* 2008 を使用している場合は、追加のライブラリー・ディレクトリーに $(TBB22_INSTALL_DIR)\ia32\vc9\lib を設定します。
build_with_cilk プロジェクトをスタートアップ・プロジェクトに設定します。
プロジェクト build_with_cilk で、使用するコンパイラーをインテル® C++ コンパイラーに変更します ([プロジェクト] > [Intel C++ Composer XE 2011(インテル(R) C++ Composer XE 2011)] > [Use Intel C++ (インテル(R) C++ を使用)])。
プロジェクト build_with_cilk で、インテル® C++ コンパイラー用のインテル® Cilk™ Plus の追加のライブラリー・ディレクトリーが設定されているこを確認してください ([プロジェクト] > [プロパティ] > [構成プロパティ] > [C/C++] > [General (全般)] > [Additional Include Directories (追加のインクルード・ディレクトリー)] で C:\Program Files\Intel\ComposerXE-2011\compiler\include\cilk\)。
プロジェクト build_with_cilk のソースファイル build_with_cilk.cpp を開きます。
インテル® Cilk™ Plus ヘッダーファイル のコメントを外します。
インテル® Cilk™ Plus の実装に関連するルーチン draw_task のコメントを外します。
シリアル draw_task() 関数をコメントアウトします。
Release モードで build_with_cilk をビルドします。
アプリケーションを実行します。
時間をメモして、インテル® Parallel Composer のシリアルバージョンと比較します。
このサンプルのソリューションは Microsoft* Visual Studio* 2005 で作成されました。Microsoft* Visual Studio* 2008 で tachyon_compiler.sln ソリューションを開くと、Microsoft* Visual Studio* 2008 ソリューションに変換されます。
Win32 プラットフォームの場合
すべての実装の実行ファイルは \Tachyon\vc8\Release\ ディレクトリー以下の tachyon_compiler.exe です。
オブジェクト・ファイルは、\Tachyon\vc8\tachyon_compiler\Release\ ディレクトリー以下に格納されます。
x64 プラットフォームの場合
すべての実装の実行ファイルは \Tachyon\vc8\x64\Release\ ディレクトリー以下の tachyon_compiler.exe です。
オブジェクト・ファイルは、\Tachyon\vc8\x64\tachyon_compiler\Release\ ディレクトリー以下に格納されます。
© 2010 Intel Corporation. 無断での引用、転載を禁じます。