この付録では、f95 Fortran コンパイラで認識可能な指令について示します。
一般的な Fortran 指令
Sun の並列化指令
Cray の並列化指令
OpenMP Fortran 95 指令、ライブラリルーチン、および環境
f95 で受け入れられる一般的な指令ては、「2.3 指令」で説明します。
表 C–1 一般的な Fortran 指令の要約
書式 |
|
!$PRAGMA keyword ( a [ , a ] … ) [ , keyword ( a [ , a ] … ) ] ,… !$PRAGMA SUN keyword ( a [ , a ] … ) [ , keyword ( a [ , a ] … ) ] ,… 1 桁目に指定する注釈指示子は、c, C、!、または *. です。(これらの例では注釈指示子として ! を使用しています。f95 の自由形式では ! を使用する必要があります。 |
|
C 指令 |
!$PRAGMA C(list ) 外部関数の名前リストを C 言語のルーチンとして宣言します。 |
IGNORE_TKR 指令 |
!$PRAGMA IGNORE_TKR {name {, name} ...} コンパイラは、特定の呼び出しを解釈するとき、一般的な手続きのインタフェースで表示される仮引数名の型、種類、ランクを無視します。 |
UNROLL 指令 |
!$PRAGMA SUN UNROLL=n コンパイラに、次のループは長さ n に展開できることを伝えます。 |
WEAK 指令 |
!$PRAGMA WEAK(name[ =name2]) name を弱いシンボル (weak symbol) または name2 の別名として宣言します。 |
OPT 指令 |
!$PRAGMA SUN OPT=n 副プログラムの最適化レベルを n に設定します。 |
PIPELOOP 指令 |
!$PRAGMA SUN PIPELOOP[= n] ループの n 離れた反復間の依存性を宣言します。 |
PREFETCH 指令 |
!$PRAGMA SUN_PREFETCH_READ_ONCE (name ) !$PRAGMA SUN_PREFETCH_READ_MANY (name ) !$PRAGMA SUN_PREFETCH_WRITE_ONCE (name ) !$PRAGMA SUN_PREFETCH_WRITE_MANY (name ) 名前の参照のために、先読み命令を生成するようにコンパイラに要求します。(-xprefetch オプションを指定する必要があります。このオプションはデフォルトで有効になっています。PREFETCH 指令は、—xprefetch=no でコンパイルし無効にします。ターゲットアーキテクチャーも PREFETCH 指令をサポートしている必要があり、コンパイラ最適化レベルは -xO2 より上に設定されている必要があります) |
ASSUME 指令 |
!$PRAGMA [BEGIN} ASSUME (expression [ ,probability]) !$PRAGMA END ASSUME プログラム内の特定の個所において、コンパイラが真であると想定できる条件について表明を行います。 |
次の指令は、f95 でのみ使用できます。詳細は、「4.8.2 FIXED 指令と FREE 指令」を参照してください。
表 C–2 特殊な Fortran 指令
書式 |
!DIR$ directive : 最初の行 !DIR$& ... : 継続行 固定形式の場合、C は CDIR$ directive... のように指令指示子としても CDIR$ directive... 行は第 1 行から始める必要があります。自由形式の場合は、行の前に空白がある場合があります。 |
FIXED/FREE 指令 |
!DIR$ FREE!DIR$ FIXED 指令のあとに続くソース行の書式を指定します。これらは、次に FREE 指令または FIXED 指令が出現するまで、残りのソースファイルに適用されます。 |
IVDEP |
!DIR$ IVDEP 次の DO、FORALL、または WHERE ループにループがもたらす依存関係がないことを表明します。これでループを最適化できます。-xivdep オプションによって解釈が決まります。「2.3.3 IVDEP 指令」を参照してください。 |
Solaris Studio Fortran のコンパイラでは、OpenMP 3.0 の Fortran API がサポートされています。-openmp コンパイラフラグは、これらの指令を有効にします (「3.4.153 –xopenmp[={ parallel|noopt|none}]」を参照)。
詳細は、『OpenMP API ユーザーズガイド』を参照してください。