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処理系に依存する。(全くサポートしなくても良い。)

 

−以上−