インテル® C++ コンパイラー XE 13.1 ユーザー・リファレンス・ガイド

OpenMP* の使用

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

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

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

  3. 大規模なローカル配列や一時配列を持つアプリケーションの場合、実行時に利用可能なスタック領域を増やす必要があります。また、KMP_STACKSIZE 環境変数や対応するライブラリー・ルーチンを設定して、個々のスレッドに割り当てられるスタックを増やします。

マルチスレッド・コードの実行を制御するその他の環境変数を設定できます。

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

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

#include <omp.h>

OpenMP* 宣言子構文

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

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

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

説明:

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

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

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

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

オペレーティング・システム

説明

Linux* および OS X*

icc -openmp source_file

Windows*

icl /Qopenmp source_file

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

オペレーティング・システム

Linux* および OS X*

icc -openmp -c parallel.cpp -openmp-report

Windows*

icl /Qopenmp /c parallel.cpp /Qopenmp-report

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

parallel.cpp(20) : (列 3) リマーク: OpenMP 定義ループが並列化されました。

OpenMP 環境の設定

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


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