OpenMP* バージョンをビルドする

OpenMP* バージョンをビルドするには、OpenMP* 並列化を使用するようにサンプル・アプリケーションを変更してから、変更したコードをコンパイルします。次に、アプリケーションを開始して、実行時間とベースラインを比較します。

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

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

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

  4. プロジェクト build_with_openmp のソースファイル build_with_openmp.cpp を開きます。
  5. draw_task() 関数で次の操作を行います。

    • OpenMP* #pragma omp parallel および #pragma omp for schedule(dynamic) 宣言子のコメントを外して、並列領域を作成し、for ループ反復を複数のスレッドに分散して実行します。 schedule(dynamic) 節を有効にすると、各スレッドは実行する少数のループ反復を受け取り、その処理を終了すると、また別の少数のループ反復を受け取ります。 アプリケーションの負荷が分散され、各スレッドがビジーに保たれることにより、パフォーマンスが向上します。

    • 並列領域の内側にある return; 行をコメントアウトします。 OpenMP* 並列領域の内側から外側へ分岐することはできません。

    • 並列領域の内側にある ison=0; 行のコメントを外します。 この値を 0 に設定すると、フレームのレンダリングが停止します。

    • 関数の最後の return; 行のコメントを外して、コメントアウトした並列領域の内側の return; 行の代わりにここでリターンします。

  6. サンプル・アプリケーションを開始します。

イメージのレンダリングにかかった時間とパフォーマンスのベースラインを比較します。

スレッド数を明示的に設定する場合は、環境変数 OMP_NUM_THREADS=N を設定します (N はスレッド数)。 または、omp_lib.h で宣言されている void omp_set_num_threads(int nthreads) 関数を使用します。 並列領域が定義される前にこの関数を呼び出していることを確認します。

OpenMP* を使用するオプションはインテル製マイクロプロセッサーおよび互換マイクロプロセッサーの両方で利用可能ですが、両者では結果が異なります。両者の結果が異なる可能性のある OpenMP* 構造および機能の主なリストは次のとおりです。


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