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

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

  1. ターミナルセッションで次のコマンドを実行して、シリアルバージョンのビルド時に作成されたファイルをすべて削除します。

    %make clean

  2. コードエディターでソースファイル src/build_with_openmp/build_with_openmp.cpp を開きます。
  3. parallel_thread 関数で次の操作を行います。

    • mboxsize の反復に依存しない値をループの外側に移動します。video->next_frame の有効性チェックを削除します。

      • 並列ループの途中でループを出ることは許可されていません。

      • このチェックで保存した反復は、結果に影響することなく配布されます。

    • 最外 for ループに #pragma omp parallel for を追加して、スレッドごとの作業量を最大化します。

    • tachyon.openmp_solution.cpp に示す変更後のコードと比較してチェックしてみてください。

  4. ターミナルセッションで次のコマンドを実行してサンプルをビルドします。

    %make openmp

ビルド後、makefile は自動でサンプルを実行します。

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

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

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