HPF仕様の概要 (6)
− Extrinsicプログラム単位(呼出し元) −
(株) 日立製作所 太田 寛
1997年2月12日
1. 概要
EXTRINSIC機能は、HPFプログラムから、他のプログラミングモデルや言語で記述された手続き(
extrinsic手続き)を呼出すためのものである。HPF言語に含まれるのは、呼出し元に関する規定であり、呼出し先の手続きに関する規定は公認拡張機能となっている。EXTRINSIC機能によりユーザは、例えば、
・カーネル部分のメッセージパッシング形式での人手チューニング。
・他言語で実装されたライブラリの呼出し
などが可能となる。
まず、プログラミングモデルとプログラミング言語を説明する。
手続きの
プログラミングモデル(programming model)には、次のようなものがある。
表 1 手続きのプログラミングモデル
|
モデル呼称 |
プロセッサ数 |
制御スレッド |
|
global (通常のHPF) |
複数プロセッサ
|
単一制御スレッド(ソースプログラム上で実行の軌跡はただ一つ) |
|
local (いわゆるSPMD) |
複数プロセッサ |
複数制御スレッド(ソースプログラム上で実行の軌跡が、各プロセッサ毎に、複数存在) |
|
serial (逐次プログラム) |
単一プロセッサ |
単一制御スレッド |
その他のモデルも可能。例えば、fork-joinモデルのように実行中にスレッドが生成消滅するもの。
手続きの
プログラミング言語(programming language)は、次のようなものがある。(通常の意味と同じ)
Fortran, HPF, Fortran 77, C, C++, Java, Visual Basic, COBOL, ...
手続きのモデルと言語を合わせて、手続きの
extrinsic種別(extrinsic kind)と呼ぶ。
2. Extrinsicプログラム単位の構文と用法
2.1 構文
FUNCTION文, SUBROUTINE文等の先頭に、
EXTRINSICプレフィックス(EXTRINSIC prefix)を付ける。
[LANGUAGE=] 言語
[MODEL=] モデル , ... FUNCTION文
[EXTERNAL_NAME=] 名前 SUBROUTINE文
EXTRINSIC
( HPF ) PROGRAM文HPF_LOCAL MODULE文
HPF_SERIAL BLOCK DATA文
EXTRINSICプレフィックス
{ }は選択、[ ]は省略可を表す。
・「言語」は、'HPF', 'FORTRAN', 'F77', 'C' などの文字列。(厳密には文字型のスカラ初期値式。以下も同じ。)
・「モデル」は、'GLOBAL', 'LOCAL', 'SERIAL' などの文字列。
・「名前」は、呼出し先の言語での手続き名。
・キーワードHPFは、LANGUAGE='HPF', MODEL='GLOBAL' と同義。(すなわち通常のHPF)
・キーワードHPF_LOCALは、LANGUAGE='HPF', MODEL='LOCAL' と同義。
・キーワードHPF_SERIALは、LANGUAGE='HPF', MODEL='SERIAL' と同義。
2.2 用法と制約
(1) HPFからEXTRINSIC手続きを呼出すときは、明示的引用仕様がなければならない。
(2) HPFから呼出されるEXTRINSIC手続きは、それがHPFで書かれたのと同じように見える。(そう見えるように処理系が呼出し規約を設け、ユーザがそれを守らねばならない。)
REAL A(100)
!HPF$ DISTRIBUTE A(BLOCK)
INTERFACE
EXTRINSIC(HPF_LOCAL) SUBROUTINE SPMD
REAL D(:)
!HPF$ DISTRIBUTE D(CYCLIC)
END SUBROUTINE
END INTERFACE
CALL SPMD(A)
この例では、以下の動作が起こる。
(i) CALL文直前までの処理の完了。
(ii) 実引数Aが仮引数Dに合わせて、BLOCKからCYCLICへリマッピングされる。
(iii) 手続きSPMDの実行と完了
(iv) 実引数Aが元の状態(BLOCK)へリマッピングされる。
(v) CALL文以降の処理。
(3) 大域データ(コモン等)は、異なるextrinsic種別の手続き間で共有できない。例えば、HPFとHPF_LOCALで同じ名前のコモンブロックを使ってはならない。
(4) 呼出し先の言語の定義はHPF言語仕様の範囲外。(いくつかは公認拡張機能で定義される)
(5) どのextrinsic種別をサポートするかは、HPF処理系に依存する。(全くサポートしなくても良い。)
−以上−