OpenMP*、ディレクティブ形式、および診断でのコンパイル

OpenMP* モードでインテル® Fortran コンパイラを起動するには、-openmp オプションでインテル・コンパイラを起動する必要があります。

ifort -openmp input_file(s)

マルチスレッド・コードを起動する前に、OpenMP 環境変数 OMP_NUM_THREADS で使用するスレッドの数を設定できます。詳細は、「OpenMP の環境変数」のセクションを参照してください。「インテル拡張ルーチン」では、インテル Fortran コンパイラの仕様に追加された OpenMP 拡張機能について説明します。

-openmp オプション

-openmp オプションは、パラレライザが OpenMP ディレクティブに基づいてマルチスレッド・コードを生成できるようにします。このコードは、単一プロセッサ・システムとマルチプロセッサ・システムのいずれでも並列実行が可能です。

-openmp オプションは、-O0 (最適化なし) と -O1-O2 (デフォルト) および -O3 の最適化レベルで動作します。-openmp-O0 を指定すると、OpenMP アプリケーションのデバッグに役立ちます。

-openmp オプションを使用すると、コマンドラインで他のオプションを指定しない限り、-auto オプションが設定されます (すべての変数を、ローカル静的記憶域ではなく、スタックに割り当てます)。

OpenMP ディレクティブ形式と構文

OpenMP ディレクティブの形式は次のとおりです:

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

上記のカッコの意味は次のとおりです:

固定形式のソース入力の場合、プリフィックスは !$omp または c$omp です。

自由形式のソース入力の場合、プリフィックスは !$omp のみです。

プリフィックスの後には、ディレクティブがきます。次に例を示します:

!$omp parallel

OpenMP ディレクティブは感嘆符で始まるため、-openmp オプションを省くと、ディレクティブはコメント形式になります。

ソースコードの並列領域の構文

並列領域を定義している OpenMP 構造の構文形式は、次のいずれかです。

!$omp <directive>
<structured block of code>
!$omp end <directive>

または
!$omp <directive>
<structured block of code>

または
!$omp <directive>

<directive> は、特定の OpenMP ディレクティブの名前です。

OpenMP 診断レポート

-openmp_report{0|1|2} オプションは、OpenMP パラレライザの診断レベル 012 を次のように制御します:

-openmp_report0 = 診断情報を表示しません。

-openmp_report1 = 正常に並列化されたループ、領域、およびセクションを示す診断を表示します。

-openmp_report2 = -openmp_report1 の診断に加えて、正常に処理された MASTER 構造、SINGLE 構造、CRITICAL 構造、ORDERED 構造、ATOMIC ディレクティブなどを示す診断を表示します。

デフォルトは -openmp_report1 です。