OpenMP* の使用

アプリケーションで OpenMP を使用するには、いくつかのステップがあります。OpenMP を使用するには、次の操作が必要です。

  1. OpenMP 宣言子をアプリケーションのソースコードに追加します。

  2. アプリケーションを -openmp (Linux* および Mac OS* X) オプションまたは /Qopenmp (Windows*) オプションでコンパイルします。

さらに、マルチスレッド・コードの実行用に環境変数を設定できます。

OpenMP サポートをアプリケーションに追加する

次のような文をコードに追加して、OpenMP API ルーチン宣言をアプリケーションに追加します。

#include <omp.h>

ランタイム・ライブラリーに含める必要のある構文については、「OpenMP* サンプル」の説明にあるサンプルファイルを参照してください。

OpenMP 宣言子構文

OpenMP 宣言子は、特定の形式と構文を使用します。「OpenMP* のインテル拡張ルーチン」では、インテル(R) コンパイラーに追加された OpenMP の拡張機能について説明されています。

次の構文は、ソースで宣言子を使用する例を示します。

構文

<prefix> <directive> [<clause>, ...] <newline>

各アイテムの意味は次のとおりです。

-openmp (Linux および Mac OS X) オプションまたは /Qopenmp (Windows) オプションを省略した場合は、宣言子はコメントとして解釈されます。

次の例は、OpenMP 宣言子を使用してループを並列化する 1 つの方法を説明します。

#include <omp.h>

void simple_omp(int *a){

  int i;

  #pragma omp parallel for

  for (i=0; i<1024; i++)

    a[i] = i*2;

}

特定の状況で宣言子を使用するその他の例は、「OpenMP* の例」を参照してください。

アプリケーションのコンパイル

-openmp オプション (Linux および Mac OS X) または /Qopenmp オプション (Windows) により、パラレライザーはソースの OpenMP 宣言子に基づいてマルチスレッド・コードを生成します。このコードはシングル・プロセッサー・システム、マルチ・プロセッサー・システム、マルチコア・プロセッサー・システムで並列実行が可能です。

IA-64 アーキテクチャー: このオプションを指定することは、-opt-mem-bandwith1 (Linux および Mac OS X) または /Qopt-mem-bandwidth1 (Windows) を意味します。

openmp オプションは、-O0 (Linux および Mac OS X) と /Od (Windows)、および -O1-O2-O3 (Linux および Mac OS X) または /O1/O2/O3 (Windows) の任意の最適化レベルのどちらとも併用できます。

OpenMP オプションと -O0 (Linux および Mac OS X) または /Od (Windows) を指定すると、OpenMP アプリケーションのデバッグに役立ちます。

次のようなコマンドを使用してアプリケーションをコンパイルします。

プラットフォーム

説明

Linux および Mac OS X

icc -openmp source_file

Windows

icl /Qopenmp source_file

次のようなコマンドを使用して、上記の例をコンパイルすると仮定します。-c (Linux および Mac OS X) または /c (Windows) は、実行ファイルを生成しないでコードをコンパイルするようにコンパイラーに指示します。

プラットフォーム

Linux および Mac OS X

icc -openmp -c parallel.cpp

Windows

icl /Qopenmp /c parallel.cpp

コンパイラーは、次のようなメッセージを表示します。

parallel.c(20) : (col. 3) remark: OpenMP 定義ループが並列化されました。

OpenMP 環境の設定

マルチスレッド・コードを起動する前に、OpenMP 環境変数 OMP_NUM_THREADS で使用するスレッドの数を設定できます「OpenMP* の環境変数」を参照してください。