OpenMP* バージョンをビルドするには、OpenMP* 並列化を使用するようにサンプル・アプリケーションを変更してから、変更したコードをコンパイルします。次に、アプリケーションを開始して、実行時間とベースラインを比較します。
build_with_openmp プロジェクトをスタートアップ・プロジェクトに設定します。
プロジェクト build_with_openmp で、使用するコンパイラーをインテル® C++ コンパイラーに変更します ([プロジェクト] > [Intel C++ Compiler (インテル® C++ コンパイラー)] > [Use Intel C++ (インテル® C++ を使用)])。
プロジェクト build_with_openmp で、/Qopenmp コンパイラー・オプションが設定されていることを確認します ([プロジェクト] > [プロパティ] > [構成プロパティ] > [C/C++] > [Language [Intel C++] (言語 [インテル® C++])] > [OpenMP Support (OpenMP サポート)] > [Generate Parallel Code (並列コードの生成) (/Qopenmp)])。コンパイラーで OpenMP* 拡張を有効にするには、このオプションを設定する必要があります。
parallel_thread 関数で次の変更を行います。
ビルド後、makefile は自動でサンプルを実行します。
イメージのレンダリングにかかった時間とパフォーマンスのベースラインを比較します。
スレッド数を明示的に設定する場合は、環境変数 OMP_NUM_THREADS=N を設定します (N はスレッド数)。または、omp_lib.h で宣言されている void omp_set_num_threads(int nthreads) 関数を使用します。並列領域が定義される前にこの関数を呼び出していることを確認します。
OpenMP* を使用するオプションはインテル製マイクロプロセッサーおよび互換マイクロプロセッサーの両方で利用可能ですが、両者では結果が異なります。両者の結果が異なる可能性のある OpenMP* 構造および機能の主なリストは次のとおりです。
ロック (内部的なものおよびユーザーが利用可能なもの)
SINGLE 構造
バリア (暗黙的および明示的)
並列ループ・スケジューリング
リダクション
メモリー割り当て
スレッド・アフィニティー、バインド