Oracle® Solaris Studio 12.4: OpenMP API ユーザーズガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

2.1 コンパイラオプション

OpenMP のディレクティブを使用して明示的に並列化を有効にするには、ccCC、または f95 のコンパイラオプション -xopenmp を指定してプログラムをコンパイルします。f95 コンパイラでは、-xopenmp-openmp を同義語として使用できます。

-xopenmp フラグは、次の表にあるキーワードサブオプションを受け入れます。

-xopenmp=parallel
OpenMP ディレクティブの認識を有効にします。
-xopenmp=parallel の最小限の最適化レベルは -xO3 です。
最適化レベルが -xO3 より低い場合、コンパイラは最適化レベルを -xO3 に上げ、警告を発行します。
-xopenmp=noopt
OpenMP ディレクティブの認識を有効にします。
最適化のレベルが -xO3 より低い場合でも、コンパイラは最適化のレベルを上げません。
-xopenmp=noopt を指定して最適化レベルを -xO2 -xopenmp=noopt のように明示的に -xO3 よりも低く設定すると、エラーが表示されます。
-xopenmp=noopt で最適化レベルを指定しない場合、OpenMP ディレクティブが認識され、それに従ってプログラムが並列化されますが、最適化は行われません。
-xopenmp=stubs
このオプションはサポートされていません。
OpenMP スタブライブラリは、ユーザーの便宜上の理由で提供されています。
OpenMP 実行時ルーチンを呼び出しても OpenMP ディレクティブを無視するような OpenMP プログラムをコンパイルするには、-xopenmp オプションを指定しないでコンパイルします。その後、libompstubs.a ライブラリを使ってオブジェクトファイルをリンクします。たとえば、次のように指定します。
% cc omp_ignore.c -lompstubs
libompstubs.a と OpenMP 実行時ライブラリの libmtsk.so 両方とのリンクはサポートされていません。両方とリンクすると、予期しない動作になることがあります。
-xopenmp=none
OpenMP ディレクティブの認識を無効にし、最適化レベルを変更しません。

次の点にも注意してください。

  • コマンド行で -xopenmp を指定しない場合、コンパイラではデフォルトで –xopenmp=none (OpenMP ディレクティブの認識を無効にする) を指定したと見なされます。

  • -xopenmp をキーワードサブオプションなしで指定した場合、コンパイラでは –xopenmp=parallel を指定したと見なされます。

  • -xopenmp=parallel または -xopenmp=noopt を指定すると、C/C++ では _OPENMP マクロに 10 進値の 201307L が定義され、Fortran では 201307 が定義されます。ここで、2013 は年であり、07 は OpenMP 4.0 仕様の月です。

  • dbx を使用して OpenMP プログラムをデバッグする場合は、-xopenmp=noopt -g を指定してコンパイルし、完全なデバッグ機能を有効にします。

  • コンパイルで警告メッセージが出力されないようにするには、変更される可能性があるデフォルト値に依存するのではなく、適切な最適化レベルを明示的に指定します。

  • Fortran の場合、-xopenmp-xopenmp=parallel、または -xopenmp=noopt を指定してコンパイルすることは、-stackvar を意味します。スタックとスタックサイズを参照してください。

  • 別々の手順で OpenMP プログラムをコンパイルしてリンクする場合は、コンパイル時およびリンク時にそれぞれ -xopenmp を含めます。

  • OpenMP プログラミングの潜在的な問題に関するコンパイラの警告を表示するには、-xvpara オプションを -xopenmp オプションとともに使用します (Chapter 7, スコープチェックを参照)。