アプリケーションをスレッド化する

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 を開きます。含まれるプロジェクトは次のとおりです。

Note icon

build_with_openmpbuild_with_tbbbuild_with_tbbc は、OpenMP*、インテル® TBB、インテル® Cilk™ Plus をそれぞれ使用しています。これらの実装に加えて、インテル® TBB に基づくラムダ機能も使用できます。

次の手順に従って、Tachyon におけるシリアルおよびインテル® Cilk™ Plus アプローチをビルドしてください。

ワークフロー

以下の手順に従って、Microsoft* Visual C++* コンパイラーとインテル® C++ コンパイラーの両方を使用し、同じ関数の異なる並列実装バージョンをビルドします。アプリケーションの実行時、オブジェクトをレンダリングするのに必要な実行時間がウィンドウタイトルに表示されます。この時間により、最初のステップで確立されるシリアル実装のベースラインと比較して、並列実装で得られる速度向上が示されます。

シリアル・プロジェクトをビルド


  1. build_serial プロジェクトをスタートアップ・プロジェクトに設定します ([プロジェクト] > [スタートアップ プロジェクトに設定])。

  2. 構成を Release モードにします ([ビルド] > [構成マネージャ] > [アクティブ ソリューション構成:] > Release)。そして build_serial プロジェクトをビルドします。

  3. [デバッグ] > [デバッグなしで開始] で tachyon_compiler.exe を実行します。ウィンドウタイトルに表示された時間 (秒) をメモしておきます。イメージをレンダリングするこの時間が、Microsoft* Visual C++* コンパイラーで並列化する際のベースラインになります。

  4. プロジェクト build_serial と "tachyon.common" で、使用するコンパイラーをインテル® Parallel Composer に変更します ([プロジェクト] > [Intel C++ Composer XE 2011(インテル(R) C++ Composer XE 2011)] > [Use Intel C++ (インテル(R) C++ を使用)]).

  5. Release モードで build_serial をリビルドします (ここでは、インテル® コンパイラーを使用)。

  6. アプリケーションを実行します。この時間をメモしておきます。これが、インテル® コンパイラーで並列化する際のベースラインになります。

OpenMP* を使用してビルド


  1. build_with_openmp プロジェクトをスタートアップ・プロジェクトに設定します。

  2. プロジェクト build_with_openmp で、使用するコンパイラーをインテル® C++ Composer XE に変更します ([プロジェクト] > [Intel C++ Composer XE (インテル(R) C++ Composer XE)] > [Use Intel C++ (インテル(R) C++ を使用)])。

  3. プロジェクト build_with_openmp で、/Qopenmp コンパイラー・オプションが設定されていることを確認してください ([プロジェクト] > [プロパティ] > [構成プロパティ] > [C/C++] > [Language (言語)] > [OpenMP Support (OpenMP サポート)] で [Generate Parallel Code (/Qopenmp) (並列コードの生成 (/Qopenmp))])。

  4. プロジェクト build_with_openmp のソースファイル build_with_openmp.cpp を開きます。

  5. ルーチン draw_task の OpenMP* プラグマのコメントを外します。このプラグマは並列領域を作成し、スレッドチームにループの反復分配します。

  6. ルーチン draw_task の並列領域にある return をコメントアウトします。

  7. ルーチン draw_task の並列領域にある ison へのゼロの代入 (ison = 0;) のコメントを外します。

  8. ルーチン draw_task の最後にある return のコメントを外します。

  9. Release 構成で build_with_openmp をビルドします。

  10. アプリケーションを実行します。

  11. 時間をメモしてシリアルバージョンと比較します。

インテル® TBB を使用してビルド


  1. build_with_tbb プロジェクトをスタートアップ・プロジェクトに設定します。

  2. プロジェクト build_with_tbb で、使用するコンパイラーをインテル® C++ Composer XE に変更します ([プロジェクト] > [Intel C++ Composer XE (インテル(R) C++ Composer XE)] > [Use Intel C++ (インテル(R) C++ を使用)])。

  3. プロジェクト build_with_tbb で、インテル® TBB 環境が設定されていることを確認してください ([プロジェクト] > [Intel C++ Composer XE (インテル(R) C++ Composer XE)] > [Select Build Components (ビルド・コンポーネントの選択)] > [Use TBB (TBB を使用)]). 以下の注意事項を参照してください。

  4. プロジェクト build_with_tbb のソースファイル build_with_tbb.cpp を開きます。

  5. TBB ヘッダーファイル のコメントを外します。

  6. クラス draw_task のコメントを外します。

  7. ルーチン draw_task をコメントアウトします。

  8. ルーチン thread_trace の TBB スケジュールとスレッド数の行のコメントを外します。

  9. ルーチン thread_trace の粒度 (grain_size) の行のコメントを外します。

  10. ルーチン thread_trace の TBB parallel_for ルーチンの行のコメントを外します。

  11. ルーチン thread_trace の ルーチン draw_task の呼び出しをコメントアウトします。

  12. Release 構成で build_with_tbb をビルドします。

  13. アプリケーションを実行します。

  14. 時間をメモしてシリアルバージョンと比較します。

Note icon

追加のインクルード・ディレクトリーに $(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)) が設定されていることを確認してください。

インテル® Cilk™ Plus を使用してビルド


  1. build_with_cilk プロジェクトをスタートアップ・プロジェクトに設定します。

  2. プロジェクト build_with_cilk で、使用するコンパイラーをインテル® C++ コンパイラーに変更します ([プロジェクト] > [Intel C++ Composer XE 2011(インテル(R) C++ Composer XE 2011)] > [Use Intel C++ (インテル(R) C++ を使用)])。

  3. プロジェクト build_with_cilk で、インテル® C++ コンパイラー用のインテル® Cilk™ Plus の追加のライブラリー・ディレクトリーが設定されているこを確認してください ([プロジェクト] > [プロパティ] > [構成プロパティ] > [C/C++] > [General (全般)] > [Additional Include Directories (追加のインクルード・ディレクトリー)] で C:\Program Files\Intel\ComposerXE-2011\compiler\include\cilk\)。

  4. プロジェクト build_with_cilk のソースファイル build_with_cilk.cpp を開きます。

  5. インテル® Cilk™ Plus ヘッダーファイル のコメントを外します。

  6. インテル® Cilk™ Plus の実装に関連するルーチン draw_task のコメントを外します。

  7. シリアル draw_task() 関数をコメントアウトします。

  8. Release モードで build_with_cilk をビルドします。

  9. アプリケーションを実行します。

  10. 時間をメモして、インテル® Parallel Composer のシリアルバージョンと比較します。

プラットフォームおよびその他の詳細について

このサンプルのソリューションは Microsoft* Visual Studio* 2005 で作成されました。Microsoft* Visual Studio* 2008 で tachyon_compiler.sln ソリューションを開くと、Microsoft* Visual Studio* 2008 ソリューションに変換されます。

Win32 プラットフォームの場合

x64 プラットフォームの場合


このヘルプについてのフィードバックを送信

© 2010 Intel Corporation. 無断での引用、転載を禁じます。