XL Fortran ディレクティブは、注釈形式ディレクティブまたは非注釈形式ディレクティブのどちらかのグループに属します。
この章では、以下の注釈形式ディレクティブについて詳しく説明します。
COLLAPSE | SNAPSHOT |
SOURCEFORM | SUBSCRIPTORDER |
この章で説明するもの以外の注釈形式ディレクティブについては、ディレクティブおよび最適化を参照してください。
>>-trigger_head--trigger_constant--directive------------------->< |
trigger_constant のデフォルト値は IBM* です。
-qsmp コンパイラー・オプションをこれらの呼び出しコマンドと併用する場合、オプション -qdirective=IBM*:SMP$:$OMP:IBMP:IBMT がデフォルトでオンになります。-qsmp=omp オプションを指定した場合、デフォルトでオプション -qdirective=$OMP を設定したときと同じようになります。-qdirective コンパイラー・オプションで代替または追加の trigger_constant を指定することもできます。詳細については、「ユーザーズ・ガイド」の -qdirective コンパイラー・オプションを参照してください。
すべての注釈形式ディレクティブ (デフォルト trigger_constant を使用するディレクティブ以外) は、コンパイラーによって注釈として見なされます。ただし、該当する trigger_constant が -qdirective コンパイラー・オプションによって定義されている場合は例外です。結果として、これらのディレクティブを含むコードは、非 SMP 環境に移植することができます。
XL Fortran は、IBM での解釈による OpenMP 使用をサポートします。コードの移植性を最大限にするために、可能な限りこれらのディレクティブを使用することをお勧めします。これらのディレクティブは、OpenMP の trigger_constant、 $OMP と一緒に使用してください。この trigger_constant は、他のディレクティブとは使用しないでください。
XLF にはさらに trigger_constant の IBMP および IBMT が含まれます。-qsmp コンパイラー・オプションを使用する場合、コンパイラーは IBMP を認識します。 IBMP は、SCHEDULE ディレクティブ、および OpenMP ディレクティブの IBM 拡張と一緒に使用してください。 -qthreaded コンパイラー・オプションを使用してコンパイルする場合、コンパイラーは IBMT を認識します。 xlf_r、 xlf_r7、 xlf90_r、 xlf90_r7、 xlf95_r 、または xlf95_r7 呼び出しコマンドのデフォルトは IBMT です。これは THREADLOCAL ディレクティブと一緒に使用することをお勧めします。
XLF ディレクティブには、他のベンダーと共通のディレクティブがあります。これらのディレクティブをコードで使用すると、ベンダーが選択したどの trigger_constant でも使用することができます。 -qdirective コンパイラー・オプションを使用してトリガー定数を指定すると、ベンダーが選択した trigger_constant を使用可能にすることができます。代替 trigger_constant の指定について詳しくは、「ユーザーズ・ガイド」の -qdirective コンパイラー・オプションを参照してください。
trigger_head は、Fortran 90 の自由ソース形式または固定ソース形式のいずれかの注釈行の規則に従います。 trigger_head が ! である場合、桁 1 に入れる必要はありません。 trigger_head と trigger_constant の間にブランクを入れないでください。
directive_trigger (trigger_head を trigger_constant、!IBM* と組み合わせて定義したものなど)、およびすべてのディレクティブ・キーワードは、大文字だけ、小文字だけ、大文字小文字の混合のいずれでも指定できます。
インライン注釈をディレクティブ行に指定できます。
!SMP$ INDEPENDENT, NEW(i) !This is a comment
ディレクティブは、同じ行の別のステートメントまたは行の後に入れることはできません。
すべての注釈形式ディレクティブは、継続行を持てます。ディレクティブを後続のステートメントに組み込んだり、ステートメントを後続のディレクティブに組み込むことはできません。
すべての継続行において directive_trigger を指定しなければなりません。ただし、継続行上の directive_trigger は、継続行で使用されている directive_trigger と同一である必要はありません。たとえば、次のようにします。
!SMP$ INDEPENDENT & !IBM*& , REDUCTION (X) & !SMP$& , NEW (I)
これは、 IBM* と SMP$ の両方がアクティブ trigger_constant である場合、以下のものと同等です。
!SMP$ INDEPENDENT, REDUCTION (X), NEW (I)
詳細については、行およびソース形式を参照してください。
ディレクティブは、自由ソース形式または固定ソース形式の注釈として (現行のソース形式によって異なる) 指定できます。
trigger_head が C、c、* のいずれかである場合は、1 桁目に入れる必要があります。
1 行または複数行に継続ディレクティブの場合、固定ソース形式の trigger_constant の最大長は、4 です。この規則は継続行にのみ適用され、最初の行には適用されません。最初の行の場合、trigger_constant の最大長は 15 です。ただし、最初の行のトリガーの最大長は 4 にすることをお勧めします。許容最大長の 15 は後方互換性のために設定されているものです。
trigger_constant の長さが 4 以下の場合、注釈ディレクティブの最初の行の 6 桁目には空白文字またはゼロのどちらかが必要です。長さが 5 以上の場合、6 桁目にある文字は trigger_constant の一部になります。
注釈ディレクティブの継続行の directive_trigger は、 1 〜 5 桁目に入れる必要があります。継続行の 6 桁目には、空白文字やゼロ以外の文字が必要です。
詳細については、固定ソース形式を参照してください。
trigger_constant の最大長は 15 です。
行の最後のアンパーサンド (&) は、ディレクティブが続くことを示します。 ディレクティブ行を続ける場合は、directive_trigger をすべての継続行の最初に入れなければなりません。継続行をアンパーサンドで始める場合でも、directive_trigger をアンパーサンドの前に入れる必要があります。たとえば、次のようにします。
!IBM* INDEPENDENT & !SMP$& , REDUCTION (X) & !IBM*& , NEW (I)
詳細については、自由ソース形式を参照してください。
この章では、以下の非注釈形式ディレクティブについて詳しく説明します。
EJECT | INCLUDE |
#LINE | @PROCESS |
>>-directive--------------------------------------------------->< |
コンパイラーは、非注釈形式のディレクティブを必ず認識します。
非注釈形式ディレクティブは継続行を持つことができません。
付加的なステートメントをディレクティブと同じ行に入れることはできません。
空白文字に関するソース形式規則は、ディレクティブ行に適用されます。