JPH1063510A - コード展開方法 - Google Patents

コード展開方法

Info

Publication number
JPH1063510A
JPH1063510A JP22344896A JP22344896A JPH1063510A JP H1063510 A JPH1063510 A JP H1063510A JP 22344896 A JP22344896 A JP 22344896A JP 22344896 A JP22344896 A JP 22344896A JP H1063510 A JPH1063510 A JP H1063510A
Authority
JP
Japan
Prior art keywords
language
array
data entity
code
variable
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP22344896A
Other languages
English (en)
Inventor
Makoto Sato
真琴 佐藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP22344896A priority Critical patent/JPH1063510A/ja
Publication of JPH1063510A publication Critical patent/JPH1063510A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 変数Bで参照されるデータ実体を変数Aで参
照可能にする処理を含む手続きを、A、Bをポインタに
せずに高速に実現する。 【解決手段】 コード展開部103は、辞書112及び
中間語113を入力して展開すべき中間語の中の変数の
辞書に設定された属性をallocatable属性に変更する割
付属性変更部105、中間語113を入力して一方の変
数Bが参照するデータ実体の先頭アドレスを他方の変数
Aが参照するようにし、Aを割付状態、Bを未割付状態
にする他言語で書かれた手続きを呼び出す処理を生成す
る割付代入コード生成部106から構成される。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】高級言語を入力して中間言語
ないしオブジェクトプログラムを出力するコンパイラ
や、ある高級言語を入力して同じまたは別の高級言語を
出力するトランスレータなどの言語処理ソフトウエアに
関する。
【0002】
【従来の技術】従来、Bで参照されるデータ実体をAで
参照可能にする処理は、マイケル メトカーフ、ジョー
ン レイド、”フォートラン90 エクスプレイン
ド”、オックスフォード ユニヴァーシティ プレス、
1990。(Michael Metcalf, John Reid. "Fortran90
Explained", Oxford University Press, 1990.)に記
載されているように、Aをpointer属性、Bをtarget属
性で宣言し、ポインタ代入を用いて、A=>Bとしてき
た。
【0003】この第1の従来技術による言語処理ソフト
ウエアの構成を図3に示す。100は言語処理ソフトウ
エアであり、入力プログラム101を入力して辞書11
2及び中間語113を出力する構文解析部102、辞書
112及び中間語113を入力して、ある変数で参照さ
れるデータ実体を別の変数から参照可能にする処理を含
む組み込み関数などを中間語に展開するコード展開部1
03、辞書112及び中間語113を入力してデータフ
ローを解析するデータフロー解析部107、中間語11
3を入力して中間語を最適な中間語に変換する最適化部
109、辞書112及び中間語113を入力して出力プ
ログラム111を生成するコード生成部110から構成
される。
【0004】さらに、コード展開部103は、変数の属
性をポインタに変更するポインタ属性変更部105、ポ
インタ代入を含む一連の中間語を生成するポインタ代入
コード生成部106から構成される。
【0005】次に、第1の従来技術による生成コードを
説明するための、入力プログラムを説明する。図5は、
High Performance Fortran(HPF)の仕様によるソース
プログラムの一部である。詳細はハイ パフォーマンス
フォートラン フォーラム、”ハイパフォーマンス
フォートラン ランゲージ スペシフィケーション バ
ージョン1。0”、シー アール ピー シー、ライス
ユニヴァーシティ、メイ、1993(High Performan
ce Fortran Forum, "High Performance Fortran Langua
ge Specification Version 1.0", CRPC, Rice Universi
ty, May, 1993.)にあるがここで簡単に説明する。
【0006】501は仮想プロセッサ群の配置を宣言し
た文である。仮想プロセッサ群にpという名前を付け、
それらが3台、直線的に配置されている事を表わしてい
る。即ち、3台の仮想プロセッサは、それぞれ、p
(1)、p(2)、p(3)で参照される。
【0007】502は配列aのデータ分割方法と分割デ
ータの仮想プロセッサ群への割り付け方法を指示した文
である。”block”は配列aの2次元目を添字が連
続する部分配列へ分割することを表わす。”*”は配列
aの1次元目を分割しないことを表わす。”onto
p”は分割された部分配列を仮想プロセッサpへ割り付
けることを表わす。即ち、a(1:3,1:2)をp(1)へ、
a(1:3, 3:4)をp(2)へ、a(1:3, 5)をp(3)へ割
り付けることを表わす。
【0008】503は配列aがプログラムの実行途中
で、動的に別の分割に再分割され得ることを宣言する。
504は、プログラムの実行がこの位置に達したとき、
配列aを1次元目をblock分割、2次元目を分割し
ないように、配列aの分割の方法を動的に変更すること
を表す。この場合は、a(1,1:5)をp(1)へ、a(2,
1:5)をp(2)へ、a(3, 1:5)をp(3)へ割り付ける
ことを表わす。
【0009】次に、第1の従来技術による、図5の変換
結果を説明する。図6は、第1の従来技術による図5の
プログラムの変換結果である。配列tは、再分割した配
列aのデータを一時的に格納する配列である。
【0010】600はポインタ属性変更部105によ
り、配列a、tともにポインタに属性が変更されたこと
を示す。601は502が表す配列aの分割情報を格納
する構造体d_aの各成分の値を設定する文の集まりで
ある。602は分割された配列aに領域を確保する文で
ある。
【0011】603は504が表す配列aの分割情報と
同じ情報を格納する配列tの構造体d_tの各成分の値
を設定する文の集まりである。604は504による再
分割後の部分配列の大きさで配列tに領域を確保する文
である。605はd_aが表す分割情報を持つ配列aの
データを、d_tが表す分割情報を持つ配列tへ代入す
ることを表す。異なるプロセッサ間での代入は、分散メ
モリ型計算機の場合は、プロセッサ間通信で実現され
る。
【0012】606は配列aが示す領域を解放すること
を表す。607は504が表すd_tの分割情報をd_a
へ代入することを表す。608は、配列aを配列tが示
す領域を指すようにすることを表す。
【0013】以上で、配列aは504が表す分割情報に
従って分割され、d_aは504が表す分割情報を持
つ。ある変数で参照されるデータ実体を別の変数で参照
可能にする処理は608のポインタ代入で実現される。
【0014】次に第2の従来技術について説明する。一
つのデータ実体は一つの手続き内では一つの変数名のみ
で参照され、このデータ実体への領域の割付け・解放が
可能で、このデータ実体は割付状態か未割付状態を持
つ、という性質を満たすデータ実体の属性(以下、単一
割付属性と呼ぶ)の例としては、Fortran90言語におい
て、allocatable属性を指定し、かつ、target属性を指
定しない場合がある。
【0015】従来、Bで参照されるデータ実体をAで参
照可能にする処理は、A、Bをallocatable属性で宣言
した場合、Aへの領域の割付け、BからAへのデータの
コピー、Bの領域の解放、からなる一連の処理を行なっ
ていた。
【0016】この第2の従来技術による言語処理ソフト
ウエアの構成を図4に示す。105、106以外は図3
と同様である。
【0017】コード展開部103は、変数の属性をallo
catable属性に変更する割付属性変更部105、ポイン
タ代入などを使用せず、配列間のコピー、配列の割付・
解放のみから成る一連の中間語を生成する割付コード生
成部106から構成される。
【0018】次に、第2の従来技術による、図5の変換
結果を説明する。図7は、第2の従来技術による図5の
プログラムの変換結果である。700は割付属性変更部
105により、配列a、tともにallocatable属性に変
更されたことを示す。
【0019】701から707までは図6と同じであ
る。708から710が608に対応する部分である。
708は504による再分割後の部分配列の大きさで配
列aに領域を確保する文である。
【0020】709は配列tに格納されたデータをすべ
て配列aに代入する文である。710は配列tが示す領
域を解放することを表す。以上で、配列aは504が表
す分割情報に従って分割され、d_aは504が表す分
割情報を持つ。
【0021】このように、ある変数で参照されるデータ
実体を別の変数で参照可能にする処理は708、70
9、710の一連の処理で実現される。
【0022】
【発明が解決しようとする課題】上記第1の従来技術で
はポインタを利用するので、データフロー解析が精密に
できず、言語処理ソフトウエアの最適化が適用しにく
い、という問題点がある。ポインタを含むプログラムに
対するデータフロー解析は、ポインタが指すことが出来
る変数の情報がなければ、精密にできないことは、アル
フレッド エイホ、ジェフリー ウルマン、”プリンシ
プルズ オブ コンパイラ デザイン”、アディソンー
ウェスレー、1977。第499頁 (Alfred Aho, Jef
frey Ullman."Principles of Compiler Design", Addis
on-Wesley, 1977. p.499)で論じられている。
【0023】Fortran90では、ポインタで指される変数
はtarget宣言する必要があるため、データフロー解析が
まったく精密にできないことはないが、target宣言され
た変数が多数存在するときは、ポインタはどれでも指す
可能性があるため、データフロー解析を精密に行うこと
は困難である。
【0024】上記第2の従来技術では、ポインタではア
ドレスの代入だけで済む処理が、データ領域の割付け、
解放、データ領域間のコピーを必要とし、これらの処理
に時間がかかる、という問題点がある。
【0025】本発明の第1の目的は、ポインタを利用し
ないことにより、データフロー解析の精度を上げ、言語
処理ソフトウエアの最適化が適用されやすいプログラム
を生成することである。
【0026】本発明の第2の目的は、余分な、データ領
域の割付け、解放、ならびにデータ領域間のコピーを必
要としない高速なプログラムを生成することである。
【0027】
【課題を解決するための手段】上記目的を達成するため
に、本発明の最適プログラム生成方法は、Bで参照され
るデータ実体をAで参照可能にする処理を含む手続き
を、A、Bを単一割付属性で宣言し、Aを未割付状態、
Bを割付状態とし、Bで参照されるデータ実体の先頭ア
ドレスをAが参照するようにし、Aを割付状態、Bを未
割付状態にする、他言語で書かれた手続きを呼び出す処
理を含む手続きに変換するものである。
【0028】
【発明の実施の形態】以下、本発明の第1の実施例を図
1、図5、図7、図8から図10を用いて説明する。
【0029】図1は、本発明による言語処理ソフトウエ
アの構成を示したものである。100は言語処理ソフト
ウエアであり、入力プログラム101を入力して辞書1
12及び中間語113を出力する構文解析部102、辞
書112及び中間語113を入力して、ある変数で参照
されるデータ実体を別の変数から参照可能にする処理を
含む組み込み関数などを中間語に展開するコード展開部
103、辞書112及び中間語113を入力してデータ
フローを解析するデータフロー解析部107、中間語1
13を入力して中間語を最適な中間語に変換する最適化
部109、辞書112及び中間語113を入力して出力
プログラム111を生成するコード生成部110より成
る。
【0030】コード展開部103は、辞書112及び中
間語113を入力して展開すべき中間語の中の変数の辞
書に設定された属性をallocatable属性に変更する割付
属性変更部105、中間語113を入力して一方の変数
Bが参照するデータ実体の先頭アドレスを他方の変数A
が参照するようにし、Aを割付状態、Bを未割付状態に
する他言語で書かれた手続きを呼び出す処理を生成する
割付代入コード生成部106より成る。
【0031】データフロー解析部107は、従来のデー
タフロー解析部の中に、さらに、最適コード生成部10
3で生成された他言語で書かれた手続き呼び出しを検出
して、この呼び出し点において、変数Aに領域が割り付
けられ、変数Bの値が変数Aに代入され、変数Bの領域
が解放されたコードが存在した時と同じ処理を行う割付
代入用処理部108を含む。
【0032】次に本発明の並列化コンパイラの動作を、
図1を基に、図5、図7、図8から図10まで、具体例
を用いて説明する。図5は入力プログラム101の具体
例の、データ分割指示付きソースプログラムである。図
5の説明は従来技術ですでに行った。
【0033】図8は図5の入力プログラムを図1の言語
処理ソフトウエア100で処理した結果出力された出力
プログラム111である。800から807までは図7
と同じである。
【0034】808が図7の708から710、図6の
608に対応する部分である。808は、Cなどの他言
語で記述された関数であり、配列tが指す領域を配列a
が指すようにし、配列aを割付状態、配列tを未割付状
態にするものである。
【0035】図9は、802直後における3つのプロセ
ッサに分散された配列aの要素を表す。aijは配列a
のi行j列目の要素値を表す。
【0036】(A)はp1に分散された部分配列を、
(B)はp2に分散された部分配列を、(C)はp3に
分散された部分配列を示す。配列aの2次元目がblo
ck分割されているので、p1にはa(1:2, 1:3)撃ェp
2にはa(2:3, 1:3)が、p3にはa(5, 1:3)が割り当て
られる。
【0037】図10は、805により2次元目がblo
ck分割された図9の配列aの配列要素値が、1次元目
がblock分割された配列tに代入され、3つのプロ
セッサに分散された時の、配列tの要素を表す。
【0038】(A)はp1に分散された部分配列を、
(B)はp2に分散された部分配列を、(C)はp3に
分散された部分配列を示す。配列aの1次元目がblo
ck分割されているので、p1にはa(1, 1:5)が、p2
にはa 2, 1:5)が、p3にはa(3, 1:5)が割り当てられ
る。
【0039】図11は、808直後における3つのプロ
セッサに分散された配列aの要素を表す。
【0040】(A)はp1に分散された部分配列を、
(B)はp2に分散された部分配列を、(C)はp3に
分散された部分配列を示す。808により、これは図1
0が表す各プロセッサ中の配列tの先頭アドレスを配列
aが指すようにするだけなので、図10が表す各プロセ
ッサ中の配列tの先頭アドレスと図11が表す各プロセ
ッサ中の配列aの先頭アドレスとは等しい。
【0041】以上で、図5のプログラムに対する本発明
の第1の実施例の説明を終了する。
【0042】次に、本発明の第2の実施例を図2を用い
て説明する。図2は、本発明による言語処理ソフトウエ
アの構成を示したものである。データフロー解析部10
7以外の構成要素は図1と同じである。
【0043】図2におけるデータフロー解析部107
は、コード展開部103より先に処理を行うため、図1
のような割付代入用処理部108を含まない。107の
処理中で、組み込み関数などに対する解析を、通常のユ
ーザ関数と同じ扱いにすると、解析精度が悪くなる。
【0044】また、各組み込み関数などに対して個別に
処理を行うと、図1の構成と同じ解析精度が得られる。
この構成に対する、図5のプログラムの変換結果は、図
8になる。
【0045】図12は、本実施例の言語処理ソフトウエ
アが対象とする並列計算機システム構成の一例を示した
ものである。
【0046】1はローカルメモリ、2はプロセッサエレ
メント、3はネットワーク、4は入出力用プロセッサエ
レメント、5は入出力用コンソールまたはワークステー
ションを示している。
【0047】本実施例の言語処理ソフトウエアは、入出
力用コンソールまたはワークステーション5において実
行され、通信を含むソースプログラムまたはオブジェク
トプログラムに変換される。前者のソースプログラム
は、さらに、各プロセッサエレメント2向けのコンパイ
ラによってオブジェクトプログラムに変換される。上記
オブジェクトプログラムはリンカーによりロードモジュ
ールに変換され、入出力用プロセッサエレメント4を通
じて各プロセッサエレメント2のローカルメモリ1に配
置され、各プロセッサエレメント2により実行され、ネ
ットワーク3を通じて通信を行なう。
【0048】本実施例の言語処理ソフトウエアは上記並
列計算機システムを高速化してハードウエアを有効利用
するものである。
【0049】
【発明の効果】本発明によれば、ポインタを利用しない
ことによりデータフロー解析の精度を上げられるので、
言語処理ソフトウエアの最適化が適用されやすいプログ
ラムを生成できる。
【0050】また、本発明によれば、他言語で書かれた
プログラムでallocatable配列に対するアドレスの代入
に相当する処理を実行するので、データ領域の割付け、
解放、データ領域間のコピーといった処理を必要としな
い高速なプログラムを生成できる。
【図面の簡単な説明】
【図1】本発明による言語処理ソフトウエアの構成であ
る。
【図2】本発明による言語処理ソフトウエアの第2の構
成である。
【図3】第1の従来技術による言語処理ソフトウエアの
構成である。
【図4】第2の従来技術による言語処理ソフトウエアの
構成である。
【図5】本発明を説明するためのデータ分割指示入りソ
ースプログラムである。
【図6】図5を第1の従来技術で変換した結果である。
【図7】図5を第2の従来技術で変換した結果である。
【図8】図5を本発明による言語処理ソフトウエアで変
換した結果である。
【図9】プログラム実行直後で各プロセッサに分散され
た配列aである。
【図10】再分散により各プロセッサの配列tに代入さ
れた配列aの要素である。
【図11】割付代入により各プロセッサの配列aに代入
された要素である。
【図12】本発明の言語処理ソフトウエアが対象とする
並列計算機システムの構成の一例である。
【符号の説明】
100:言語処理ソフトウエア、101:入力プログラ
ム、102:構文解析部、103:コード展開部、10
4:最適コード生成部、105:割付属性変更部、10
6:割付代入コード生成部、107:データフロー解析
部、108:割付代入用処理部、109:最適化部、1
10:コード生成部、111:出力プログラム、11
2:辞書、113:中間語

Claims (2)

    【特許請求の範囲】
  1. 【請求項1】一つのデータ実体は一つの手続き内では一
    つの変数名のみで参照され、このデータ実体への領域の
    割付け・解放が可能で、このデータ実体は割付状態か未
    割付状態を持つ、という性質を満たすデータ実体の属性
    と、他言語で書かれた手続きを呼び出す手段と、を持つ
    言語で書かれたプログラムにおいて、Bで参照されるデ
    ータ実体をAで参照可能にする処理を含む当言語固有の
    手続きを、当言語のコンパイラないしトランスレータで
    中間語ないしコードに展開する際のコード展開方法であ
    って、A、Bを上記属性で宣言し、Aを未割付状態、B
    を割付状態とし、Bで参照されるデータ実体の先頭アド
    レスをAが参照するようにし、Aを割付状態、Bを未割
    付状態にする、他言語で書かれた手続きを呼び出す処理
    を含む手続きに変換する、ことを特徴とするコード展開
    方法。
  2. 【請求項2】請求項1記載の言語で記述されるべき、複
    数の配列に対する配列内および配列間の配列要素値入れ
    替え処理を、上記各配列Ai (i=1,...,n)の属性、およ
    びA1, ..., Anの要素を入れ替えた値の一時保存用デ
    ータ実体Bi (i=1,...,n)の属性を請求項1記載の属性
    で宣言し、A1, ..., Anの配列要素値を入れ替えかえ
    たものをBi (i=1,...,n)に一時的に保存し、Ai (i=
    1,...,n)を未割付状態、Bi (i=1,...,n)を割付状態に
    し、Ai、Bi (i=1,...,n) に対して請求項1記載の処
    理を行う、コード展開方法。
JP22344896A 1996-08-26 1996-08-26 コード展開方法 Pending JPH1063510A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP22344896A JPH1063510A (ja) 1996-08-26 1996-08-26 コード展開方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP22344896A JPH1063510A (ja) 1996-08-26 1996-08-26 コード展開方法

Publications (1)

Publication Number Publication Date
JPH1063510A true JPH1063510A (ja) 1998-03-06

Family

ID=16798308

Family Applications (1)

Application Number Title Priority Date Filing Date
JP22344896A Pending JPH1063510A (ja) 1996-08-26 1996-08-26 コード展開方法

Country Status (1)

Country Link
JP (1) JPH1063510A (ja)

Similar Documents

Publication Publication Date Title
US6199093B1 (en) Processor allocating method/apparatus in multiprocessor system, and medium for storing processor allocating program
JP2893071B2 (ja) マルチ・スレッド対応ディジタル・データ・プロセッサ用スレッド・プライベート・メモリ
JP3617852B2 (ja) 多重処理パイプラインデータ処理エミュレート方法
JP3617851B2 (ja) パイプライン化データ処理方法
JP3551353B2 (ja) データ再配置方法
US5367684A (en) Register allocation using an improved register candidate usage matrix
US5781777A (en) Optimization method for computation partitioning oriented to a distributed memory
US20070300210A1 (en) Compiling device, list vector area assignment optimization method, and computer-readable recording medium having compiler program recorded thereon
JPH07319710A (ja) コンパイル処理方法
JPH1063510A (ja) コード展開方法
JPH0844577A (ja) データ分割方法及びマルチプロセッサシステム
JP3304445B2 (ja) プログラム生成処理装置
US6029003A (en) Method of assigning external variables to memories when compiling source program
JP2739836B2 (ja) 最適データ分散生成装置およびコンパイル処理装置
JP2809073B2 (ja) 配列のメモリ割り付け方式
JPH08255086A (ja) オブジェクトコード生成方式
JPH07105013A (ja) レジスタ割り付け方式
JPS6234240A (ja) デ−タ割付け方式
JPH06103462B2 (ja) ベクトル・レングス制御範囲分割処理方式
Li et al. swTVM: Towards Optimized Tensor Code Generation for Deep Learning on Sunway Many-Core Processor
JP2003256214A (ja) 配列拡張によるループ変換方法
JPH02171831A (ja) コンパイラのデータ接近方式
JP2526481B2 (ja) 分散メモリ型並列計算機におけるデ―タ転送コ―ド自動生成方法
JPH0991151A (ja) コンパイル装置及びプロセッサ装置
JPH0444181A (ja) 並列変換処理方法