付録A  HPF構文一覧


この章では、 HPF構文 について簡潔に述べます。 構文は、HPF2.0仕様、HPF2.0公認拡張 、 あるいは HPF/JA1.0拡張仕様 に基づいています。
 HPF/JA1.0仕様で新たに定義された仕様 に関しては、その旨が記述されています。
特に記述のない場合は、HPF2.0又はHPF2.0公認拡張中で 定義されている仕様です。

A.1  HPF実体の宣言指示文

 HPF2.0中で定義された名前付き要素を宣言するための指示文 について述べます。

A.1.1  PROCESSORS指示文

PROCESSORS プロセッサ名 [ ([下限:]上限[,[下限:]上限...] ) ]

 PROCESSOR指示文により、プロセッサ構成を宣言できます。

A.1.2  TEMPLATE指示文

TEMPLATE テンプレート名 [ ([下限:]上限[,[下限:]上限...] ) ]

 TEMPLATE指示文により、記憶領域を持たない仮想的な配列を 宣言し、整列先として利用できます。

A.2  宣言部のマッピング指示文

 ここでは、宣言部で記述できるマッピング指示文の一覧を示します。
POINTER属性やTARGET属性を持ったり、 そのような実体を成分として持つ構造型配列をマップすることはできません。

A.2.1  DISTRIBUTE指示文

DISTRIBUTE 配列名 [*][(分散形式[,分散形式...])] [ ONTO [*] プロセッサ名 ]

分散形式としては、以下のいずれかを指定することができます。

BLOCK[(スカラ整数式)]
CYCLIC[(スカラ整数式)]
GEN_BLOCK(整数型一次元配列)
INDIRECT(整数型一次元配列)
*

DISTRIBUTE指示文により、配列をプロセッサ構成上へ分散することができます。

GEN_BLOCK分散、INDIRECT分散 の整数型一次元配列マッピング配列 と言います。
分散形式'*'で分散された次元は、on-processor分散されていると言います。

A.2.2  ALIGN指示文

ALIGN 配列名 [(align-source-list)] WITH [*] 配列名 [(align-subscript-list)]

align-source としては、以下のいずれかを指定することができます。

整数型スカラ変数名
*
:

align-source が、整数型スカラ変数名であるとき、 これを align-dummy といいます。

align-subscript としては、以下のいずれかを指定することができます。

align-dummyの線形式
*
添字3つ組
スカラ整数式

ALIGN指示文により、配列を他の配列 ( 整列先 と呼ばれます) に整列することができます。

A.2.3  SHADOW指示文

SHADOW 配列名 [*][(shadow-spec-ja-list)]

shadow-spec-ja としては、以下のいずれかを指定することができます。

スカラ整定数式
スカラ整定数式:スカラ整定数式

SHADOW指示文により、各抽象プロセッサ上のローカルな部分に隣接した 定数幅のシャドウ領域 を指定することができます。

A.2.4  DYNAMIC指示文

DYNAMIC 配列名 [,配列名...]

 REDISTRIBUTE指示文、REALIGN指示文 により、 マッピングが動的に変更される実体は、宣言部でDYNAMIC指示文中に記述し なければなりません。

A.2.5  INHERIT指示文

INHERIT 配列名 [,配列名...]

 INHERIT指示文を仮引数に指定することにより、 対応する実引数のマッピングをそのまま引継ぐことができます。

A.3  属性形式による指示文

 ここまでに記述された指示文は、 以下の形式により、一行にまとめて指定することができます。

属性[,属性...] :: 配列名[([下限:]上限[,[下限:]上限...])][,配列名[([下限:]上限[,[下限:]上限...])]...]

属性としては、以下のものが指定できます。

PROCESSORS
TEMPLATE
DISTRIBUTE [*][(分散形式[,分散形式...])] [ ONTO [*] プロセッサ名 ]
ALIGN [(align-source-list)] WITH [*] 配列名 [(align-subscript-list)]
SHADOW [*][(shadow-spec-ja-list)]
DYNAMIC
INHERIT
DIMENSION([下限:]上限[,[下限:]上限...] )

A.4  SEQUENCE指示文

SEQUENCE [[::] 配列名又は共通ブロック名[,配列名又は共通ブロック名...]]
NO SEQUENCE [[::] 配列名又は共通ブロック名[,配列名又は共通ブロック名...]]

形状の異なる実引数と仮引数を、Fortranの順序結合に基づいて結合する場合や、 EQUIVALENCE文や共通ブロックを通じて、形状の異なる実体同士を Fortranの記憶列結合に基づいて結合する場合、 それらにSEQUENCE指示文を指定する必要があります。

SEQUENCE指示文を指定した配列をマップすることはできません。

A.5  実行部のマッピング指示文

 ここでは、実行部に記述できるマッピング指示文の一覧を示します。

A.5.1  REDISTRIBUTE指示文

REDISTRIBUTE 配列名 [(分散形式[,分散形式...])] [ ONTO プロセッサ名 ]
REDISTRIBUTE [(分散形式[,分散形式...])] [ ONTO プロセッサ名 ] :: 配列名[,配列名...]

REDISTRIBUTE指示文により、配列の分散を実行時に変更することができます。
REDISTRIBUTE指示文中に指定する配列名は、有効域の宣言部で、 DYNAMIC指示文中に記述しなければなりません。

A.5.2  REALIGN指示文

REALIGN 配列名 [(align-source-list)] WITH 配列名 [(align-subscript-list)]
REALIGN [(align-source-list)] WITH 配列名 [(align-subscript-list)] :: 配列名[,配列名...]

REALIGN指示文により、配列の整列を実行時に変更することができます。
REALIGN指示文中に指定する配列名は、有効域の宣言部で、 DYNAMIC指示文中に記述しなければなりません。

A.6  計算マッピングと通信制御関連の指示文

 ここでは、実行部に記述できる、計算マッピングや通信を制御するための 指示文について述べます。

A.6.1  INDEPENDENT指示文とNEW節、REDUCTION節

  INDEPENDENT [,NEW(変数名 [,変数名...])] [,REDUCTION(変数名 [,変数名...])] 

INDEPENDENT指示文によって、 ループの繰り返しにまたがる依存がないことを、 HPFコンパイラに対して明示し、HPFコンパイラの最適化を促進できます。

NEW節中に、ループの各繰り返し内で、定義されてから利用される 作業変数を指定することにより、例えば、スカラ作業変数の配列化といった プログラムの書き換えをせずに、INDEPENDENT指示文を記述できます。

集計演算を行うようなループに対しても、 REDUCTION節中に集計演算の対象となる変数名を 指定することで、INDEPENDENT指示文を記述できます。

A.6.2  ON指示文とLOCAL節

 ON指示文とLOCAL節の構文は以下の通りです。

ON HOME( 変数又はテンプレートの部分 ) [,LOCAL[(配列名[,配列名...])]]

 ON指示構文とLOCAL節の構文は以下の通りです。

ON HOME( 変数又はテンプレートの部分 ) [,LOCAL[(配列名[,配列名...])]] BEGIN
     block
END ON   

block は、Fortranの実行文の列を意味しています。

ON指示文により、演算の抽象プロセッサへの割り当て方法を指定できます。

ON指示文により指定された抽象プロセッサの集合を活動プロセッサ集合といいます。

LOCAL節によって、 指定された配列が、 全ての活動プロセッサ上にデータ実体又はシャドウ実体としてマップされている ために、対象の文が、一切の通信の必要なく実行可能であることを HPFコンパイラに対して明示できます。
LOCAL節は、HPF/JA1.0仕様で定義されています。

A.6.3  REFLECT指示文

REFLECT 配列名[,配列名...]

REFLECT指示文により、配列のシャドウ実体に、対応するデータ実体の 値を設定することができます。
REFLECT指示文は、HPF/JA1.0仕様で定義されています。

A.6.4  INDEX_REUSE指示文

INDEX_REUSE [ (論理式) ] 配列名[,配列名...]

配列が、ループ中で間接参照されるような場合に、 もし、全く同じ添字の値でそのループ処理が繰り返し行われるなら、 INDEX_REUSE指示文により、2回目以降の通信や参照のオーバヘッドを 削減することができます。
INDEX_REUSE指示文は、HPF/JA1.0仕様で、定義された指示文です。