インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

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

OpenMP* サポートをアプリケーションに追加するには、次の操作を行います。

  1. 適切な OpenMP* プラグマをソースコードに追加します。

  2. /Qopenmp (Windows*) または -qopenmp (Linux* および macOS*) オプションを指定してアプリケーションをコンパイルします。

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

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

OpenMP* プラグマ構文

OpenMP* サポートをアプリケーションに追加するには、最初に OpenMP* ヘッダーを宣言し、適切な OpenMP* プラグマをソースコードに追加します。

OpenMP* ヘッダーを宣言するには、コードに次の文を追加します。

#include <omp.h>

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

次の構文は、ソースでプラグマを使用する例を示します。

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

説明:

Qopenmp (Windows*) または qopenmp (Linux* および macOS*) オプションを指定しない場合、プラグマはコメントとして解釈されます。

次の例は、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; 
}

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

Qopenmp (Windows*) または qopenmp (Linux* および macOS*) オプションを指定すると、並列化機能はソースの OpenMP* プラグマに基づいてマルチスレッド・コードを生成します。このコードはシングル・プロセッサー・システム、マルチプロセッサー・システム、マルチコア・プロセッサー・システムで並列実行が可能です。

Qopenmp (Windows*) または qopenmp (Linux* および macOS*) オプションは、-O0 (Linux* および macOS*) または /Od (Windows*)、O1O2O3 の最適化レベルで動作します。

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

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

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

構文の例

Linux*

icc -qopenmp source_file

macOS*

icc -qopenmp source_file

Windows*

icl /Qopenmp source_file

次のようなコマンドを使用して、上記の例をコンパイルすると仮定します。c オプションは、実行ファイルを生成しないでコードをコンパイルするようにコンパイラーに指示します。

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

拡張構文の例

Linux*

icc -qopenmp -c parallel.cpp

macOS*

icc -qopenmp -c parallel.cpp

Windows*

icl /Qopenmp /c parallel.cpp

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

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

OpenMP 環境の設定

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

関連情報