8.1 HPF_LIBRARY モジュールサマリ
このセクションには、Fortran 95に対するHigh Performance Fortran拡張機能によって 提供されるHPF_LIBRARYモジュールに関する簡単な参照ガイドが含まれています。 これらの関数にアクセスするためには、プログラム単位中における ‘USE HPF_LIBRARY’に加えて-hpf オプションが必要と なります。
以下の表において名称がイタリック体で書かれた引数は省略可能です。 これらの関数に関する完全な情報についてはHPF Language Specificationをご参照くだ さい。
8.1.1 基本関数
| 関数(引数) | 概要 |
| LEADZ (I) | 内部表現における先行0ビットの数。 |
| POPCNT (I) | 内部表現における1ビットの数。 |
| POPPAR (I) | POPCNT(I)が奇数のときは1、そうでないときは0。 |
8.1.2 Reduction関数
これらはSUM, PRODUCT等の組込み関数に類似したものです。
| 関数(引数) | Reduction操作 |
| IALL (ARRAY, DIM, MASK) | IAND 組込み関数 |
| IANY (ARRAY, DIM, MASK) | IOR 組込み関数 |
| IPARITY (ARRAY, DIM, MASK) | IEOR 組込み関数 |
| PARITY (MASK, DIM) | .NEQV. 演算子 |
8.1.3 Scan関数
それぞれのscan関数は1番目の引数(LOGICAL関数に対するMASK引数、 その他に対するARRAY引数)と同じ形状の配列を生成します。 Scan操作は“現行”値とこの引数の配列要素とをscan関数に従って結合します。 例えばSUM_PREFIXとSUM_SUFFIXは個々の配列要素を足し合わせます。 それぞれの操作に対し、前向き(XXX_PREFIX )と後向き (XXX_SUFFIX )の2つのscan関数が存在します。定義により、XXX_SUFFIX(A(1:N)) はXXX_PREFIX(A(N:1:-1)) と等価です。 なお、“現行”値に対する初期値は関数によって次のように異なるので注意 してください:
| 関数 | 初期値 |
| ALL | .TRUE. |
| ANY and PARITY | .FALSE. |
| COPY | 配列の第1要素の値 |
| COUNT, IANY, IPARITY, SUM | ゼロ |
| IALL | NOT(0) |
| MAXVAL | -HUGE(ARRAY) |
| MINVAL | HUGE(ARRAY) |
| PRODUCT | 1 |
例:‘SUM_PREFIX( (/ 1,2,3,4 /) )’は‘(/ 1,3,6,10 /)’ に等しくなります。
DIM引数が存在しない場合には、配列全体が配列要素順にスキャンされます。 DIM引数が存在する場合には、配列はその次元方向にパラレルにスキャンされ ます。
SEGMENT引数が存在する場合、スキャンに対応したSEGMENTの要素が (該当SEGMENTの最終要素から)値を変えるたびに、“現行”値はリセッ トされます。
(非論理値関数に対して)省略可能なMASK引数が存在する場合、 MASKの対応する要素が.TRUE.であるARRAYの要素のみがスキャ ンの値に貢献することになります。
EXCLUSIVE引数が存在し、かつ.TRUE.である場合、scanによる結合 操作はそれぞれの要素の値を決定した後、従ってscan関数の値を一つずらし、開始 時には初期の“現行”値に挿入した後に行われます。 例:‘SUM_PREFIX( (/ 1,2,3 /), EXCLUSIVE=.TRUE. )’は ‘(/ 0,1,3 /)’に等しくなります。
| 関数(引数) | 結合操作 |
| ALL_PREFIX (MASK, DIM, SEGMENT, EXCLUSIVE) | .AND. 演算子 |
| ANY_PREFIX (MASK, DIM, SEGMENT, EXCLUSIVE) | .OR. 演算子 |
| COPY_PREFIX (ARRAY, DIM, SEGMENT) | コピー |
| COUNT_PREFIX (MASK, DIM, SEGMENT, EXCLUSIVE) | .TRUE.値のカウント |
| IALL_PREFIX (ARRAY, DIM, MASK, SEGMENT, EXCLUSIVE) | IAND 組込み関数 |
| IANY_PREFIX (ARRAY, DIM, MASK, SEGMENT, EXCLUSIVE) | IOR 組込み関数 |
| IPARITY_PREFIX (ARRAY, DIM, MASK, SEGMENT, EXCLUSIVE) | IEOR 組込み関数 |
| MAXVAL_PREFIX (ARRAY, DIM, MASK, SEGMENT, EXCLUSIVE) | 最大値 |
| MINVAL_PREFIX (ARRAY, DIM, MASK, SEGMENT, EXCLUSIVE) | 最小値 |
| PARITY_PREFIX (MASK, DIM, SEGMENT, EXCLUSIVE) | .NEQV. 演算子 |
| PRODUCT_PREFIX (ARRAY, DIM, MASK, SEGMENT, EXCLUSIVE) | 乗算 |
| SUM_PREFIX (ARRAY, DIM, MASK, SEGMENT, EXCLUSIVE) | 加算 |
8.1.4 Scatter関数
それぞれのscatter関数はBASE引数と同じ形状の配列を生成します。結果の各 要素のデフォルト値はBASEの対応する要素のそれと同一になります。ARRAY(または論理関数の場合はMASK)の要素は結果中の選択された 要素にscatterされ、それぞれの場所で指定された演算(関連するscanまたは reduction関数を参照)を使って結合されます。
それぞれの要素はそのインデックス値を取り、結果中へのインデックス修飾に対応 するINDXn 引数を用いてscatterされます。INDXn 引数の 数はARRAY(またはMASK)の次元数に一致していなくてはなりません。 ただしARRAY(またはMASK)の形状はBASEと同一である必要 はありません。
| 関数 | (引数) |
| ALL_SCATTER | (MASK, BASE, INDX1, ..., INDXn) |
| ANY_SCATTER | (MASK, BASE, INDX1, ..., INDXn) |
| COPY_SCATTER | (ARRAY, BASE, INDX1, ..., INDXn, MASK) |
| COUNT_SCATTER | (MASK, BASE, INDX1, ..., INDXn) |
| IALL_SCATTER | (ARRAY, BASE, INDX1, ..., INDXn, MASK) |
| IANY_SCATTER | (ARRAY, BASE, INDX1, ..., INDXn, MASK) |
| IPARITY_SCATTER | (ARRAY, BASE, INDX1, ..., INDXn, MASK) |
| MAXVAL_SCATTER | (ARRAY, BASE, INDX1, ..., INDXn, MASK) |
| MINVAL_SCATTER | (ARRAY, BASE, INDX1, ..., INDXn, MASK) |
| PARITY_SCATTER | (MASK, BASE, INDX1, ..., INDXn) |
| PRODUCT_SCATTER | (ARRAY, BASE, INDX1, ..., INDXn, MASK) |
| SUM_SCATTER | (ARRAY, BASE, INDX1, ..., INDXn, MASK) |
省略可能なMASKが存在する場合には(非論理関数の場合のみ)、 MASKの対応する要素が.TRUE.であるARRAY要素のみがscatter されます。
8.1.5 ソート関数
これらの関数は、配列をソートされた順序でインデックス修飾する際に使用される permutationインデックスを生成します。
| 関数(引数) | 概要 |
| GRADE_DOWN (ARRAY, DIM) | 配列インデックスとして下降順にソート |
| GRADE_UP (ARRAY, DIM) | 配列インデックスとして上昇順にソート |
8.1.6 問合せ関数
これらの関数はマルチプロセッサ環境下で実行時に使用される整列、分散、テンプ レート値を問い合わせます。 nAG FortranコンパイラはHPFの単一プロセッサ実装であるため、これらの関数から は余り有用な情報が得られるわけではありません。
| 関数 | (引数) |
| HPF_ALIGNMENT | (ALIGNEE, LB, UB, STRIDE, AXIS_MAP, |
| IDENTITY_MAP, DYNAMIC, NCOPIES) | |
| HPF_DISTRIBUTION | (DISTRIBUTEE, AXIS_TYPE, AXIS_INFO, |
| PROCESSORS_RANK, PROCESSORS_SHAPE) | |
| HPF_TEMPLATE | (ALIGNEE, TEMPLATE_RANK, LB, UB, AXIS_TYPE, |
| AXIS_INFO, NUMBER_ALIGNED, DYNAMIC) |
