JPH05257707A - コンパイル方式 - Google Patents
コンパイル方式Info
- Publication number
- JPH05257707A JPH05257707A JP5451892A JP5451892A JPH05257707A JP H05257707 A JPH05257707 A JP H05257707A JP 5451892 A JP5451892 A JP 5451892A JP 5451892 A JP5451892 A JP 5451892A JP H05257707 A JPH05257707 A JP H05257707A
- Authority
- JP
- Japan
- Prior art keywords
- array
- intermediate word
- vector
- word
- transformed
- 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
Links
Landscapes
- Devices For Executing Special Programs (AREA)
- Complex Calculations (AREA)
Abstract
(57)【要約】
【目的】 コンパイラの処理性能を劣化させることな
く、配列を直接記述した演算式を直接ベクトル化するこ
と。 【構成】 配列演算式を配列演算の形を残した中間語を
生成し、その中間語のオペランドが配列全体を表してい
るか否かを判定し、配列全体を表しているならば配列演
算式の配列の大きさを表す情報をもとにベクトル命令を
生成するために必要なベクトル長、初期値、増分値を示
す情報を前記中間語に付加し、ベクトル命令を生成する
ことが可能な中間語に変形する。
く、配列を直接記述した演算式を直接ベクトル化するこ
と。 【構成】 配列演算式を配列演算の形を残した中間語を
生成し、その中間語のオペランドが配列全体を表してい
るか否かを判定し、配列全体を表しているならば配列演
算式の配列の大きさを表す情報をもとにベクトル命令を
生成するために必要なベクトル長、初期値、増分値を示
す情報を前記中間語に付加し、ベクトル命令を生成する
ことが可能な中間語に変形する。
Description
【0001】
【産業上の利用分野】本発明は、配列演算機能により記
述されたプログラムをベクトルプロセッサシステム上で
効率的に実行させるための目的プログラムを生成するコ
ンパイル方式に関する。
述されたプログラムをベクトルプロセッサシステム上で
効率的に実行させるための目的プログラムを生成するコ
ンパイル方式に関する。
【0002】
【従来の技術】従来、ソースプログラム中のループ繰返
し型の配列演算を、ベクトルプロセッサシステム上で実
行させるためのベクトル化方法として、「コンパイラ」
(1981年 中田育男 産業図書,第258頁から第
263頁に)に説明されている方法が知られている。
し型の配列演算を、ベクトルプロセッサシステム上で実
行させるためのベクトル化方法として、「コンパイラ」
(1981年 中田育男 産業図書,第258頁から第
263頁に)に説明されている方法が知られている。
【0003】
【発明が解決しようとする課題】しかしながら、上記文
献に説明されているベクトル化方法では、配列を直接記
述した演算式をベクトル化する場合について考慮されて
いないため、配列を直接記述した演算式のベクトル化を
行う場合には、配列要素の演算を繰り返す形の中間語に
一旦変形したうえでベクトル化を行なわなければなら
ず、しかも変形後の状態からベクトル化を行う為には、
配列データフロー解析および添字解析を行わなければな
らない。このため、コンパイラとしての性能が劣化する
といった問題がある。
献に説明されているベクトル化方法では、配列を直接記
述した演算式をベクトル化する場合について考慮されて
いないため、配列を直接記述した演算式のベクトル化を
行う場合には、配列要素の演算を繰り返す形の中間語に
一旦変形したうえでベクトル化を行なわなければなら
ず、しかも変形後の状態からベクトル化を行う為には、
配列データフロー解析および添字解析を行わなければな
らない。このため、コンパイラとしての性能が劣化する
といった問題がある。
【0004】本発明の目的は、コンパイラとしての性能
を劣化させることなく、配列を直接記述した演算式を直
接ベクトル化することができるコンパイル方式を提供す
ることである。
を劣化させることなく、配列を直接記述した演算式を直
接ベクトル化することができるコンパイル方式を提供す
ることである。
【0005】
【課題を解決するための手段】上記目的を解決するため
に本発明は、配列演算式を配列演算の形を残した中間語
を生成し、その中間語のオペランドが配列全体を表して
いるか否かを判定し、配列全体を表しているならば配列
演算式の配列の大きさを表す情報をもとにベクトル命令
を生成するために必要なベクトル長、初期値、増分値を
示す情報を前記中間語に付加し、ベクトル命令を生成す
ることが可能な中間語に変形し、この変形した中間語に
よってベクトル命令を生成し、配列全体を表していなけ
れば、ループ繰返し型の中間語に変形し、この変形した
中間語によってベクトル命令を生成するようにした。
に本発明は、配列演算式を配列演算の形を残した中間語
を生成し、その中間語のオペランドが配列全体を表して
いるか否かを判定し、配列全体を表しているならば配列
演算式の配列の大きさを表す情報をもとにベクトル命令
を生成するために必要なベクトル長、初期値、増分値を
示す情報を前記中間語に付加し、ベクトル命令を生成す
ることが可能な中間語に変形し、この変形した中間語に
よってベクトル命令を生成し、配列全体を表していなけ
れば、ループ繰返し型の中間語に変形し、この変形した
中間語によってベクトル命令を生成するようにした。
【0006】
【作用】上記手段によれば、配列演算式を配列演算の形
を残した中間語を生成し、その中間語のオペランドが配
列全体を表しているか否かを判定し、配列全体を表して
いるならば配列演算式の配列の大きさを表す情報をもと
にベクトル命令を生成するために必要なベクトル長、初
期値、増分値を示す情報を前記中間語に付加し、ベクト
ル命令を生成することが可能な中間語に変形するので、
配列のベクトル化可否のチェックのための配列データフ
ロー解析および添字解析配列などの依存関係のチェック
が不要であり、中間語の変形も少なくて済むためコンパ
イラの処理性能を劣化させることなく、配列を直接記述
した演算式を直接ベクトル化することができる。
を残した中間語を生成し、その中間語のオペランドが配
列全体を表しているか否かを判定し、配列全体を表して
いるならば配列演算式の配列の大きさを表す情報をもと
にベクトル命令を生成するために必要なベクトル長、初
期値、増分値を示す情報を前記中間語に付加し、ベクト
ル命令を生成することが可能な中間語に変形するので、
配列のベクトル化可否のチェックのための配列データフ
ロー解析および添字解析配列などの依存関係のチェック
が不要であり、中間語の変形も少なくて済むためコンパ
イラの処理性能を劣化させることなく、配列を直接記述
した演算式を直接ベクトル化することができる。
【0007】
【実施例】以下、本発明の一実施例を図を参照しつつ説
明する。
明する。
【0008】図1は本発明をFORTRANコンパイラ
に適用した場合の一実施例を示す全体構成図であり、コ
ンパイラ1は構文解析部2、中間部3、コード生成部4
とによって構成されている。
に適用した場合の一実施例を示す全体構成図であり、コ
ンパイラ1は構文解析部2、中間部3、コード生成部4
とによって構成されている。
【0009】構文解析部2は、FORTRANソースプ
ログラム5を入力して、中間語・配列情報6に変換す
る。また、ベクトル変換部や最適化部を含む中間部3
は、中間語・配列情報6を入力して、ベクトル変換を行
った後の中間語7に変換する。さらに、コード生成部4
は、中間語7に基づいて目的プログラム8を生成する。
ログラム5を入力して、中間語・配列情報6に変換す
る。また、ベクトル変換部や最適化部を含む中間部3
は、中間語・配列情報6を入力して、ベクトル変換を行
った後の中間語7に変換する。さらに、コード生成部4
は、中間語7に基づいて目的プログラム8を生成する。
【0010】本発明は中間部3に係わり、中間語・配列
情報6を中間語7に効率的に変換させるものである。
情報6を中間語7に効率的に変換させるものである。
【0011】以下、FORTRANプログラムの例を挙
げて詳細な動作を説明する。
げて詳細な動作を説明する。
【0012】図2はFORTRANソースプログラム5
の一例を示すものであるが、この例に記述されているプ
ログラム部9は配列要素ごとにループ繰り返しにより計
算する従来からの表現形式であるとする。これに対し、
プログラム部10は配列演算機能を用いてプログラム部
9と同じ配列演算を表したものとする。
の一例を示すものであるが、この例に記述されているプ
ログラム部9は配列要素ごとにループ繰り返しにより計
算する従来からの表現形式であるとする。これに対し、
プログラム部10は配列演算機能を用いてプログラム部
9と同じ配列演算を表したものとする。
【0013】このようなFORTRANソースプログラ
ム5が構文解析部2に入力された場合、構文解析部2は
プログラム部9に対しては図3に示すようなループ繰返
しによって表現された中間語17を生成する。同様に、
プログラム部10に対しては図4に示すような配列演算
の形を残した中間語19を生成する。
ム5が構文解析部2に入力された場合、構文解析部2は
プログラム部9に対しては図3に示すようなループ繰返
しによって表現された中間語17を生成する。同様に、
プログラム部10に対しては図4に示すような配列演算
の形を残した中間語19を生成する。
【0014】そこで、中間部3はこのような中間語1
7,19に対してベクトル変換処理を行う。
7,19に対してベクトル変換処理を行う。
【0015】図5はそのベクトル変換処理の手順を示す
フローチャートであり、まず、中間語・配列情報6から
入力した中間語17,19について配列演算があるかど
うかを調べ(ステップS50)、なければ、ベクトル化
が可能かどうかを調べる(ステップS51)。この場
合、ループ繰り返し計算プログラムを変数や配列の依存
関係解析によってベクトル化が可能かどうかは前述の文
献「コンパイラ」に説明されているので、ここではその
説明を省略する。
フローチャートであり、まず、中間語・配列情報6から
入力した中間語17,19について配列演算があるかど
うかを調べ(ステップS50)、なければ、ベクトル化
が可能かどうかを調べる(ステップS51)。この場
合、ループ繰り返し計算プログラムを変数や配列の依存
関係解析によってベクトル化が可能かどうかは前述の文
献「コンパイラ」に説明されているので、ここではその
説明を省略する。
【0016】図2の例のプログラム部9のように配列演
算でない場合の中間語17を調べた時、ベクトル化が可
能であると判断した場合、図6に示すようなベクトル命
令生成可能な中間語18に変形する(ステップS5
2)。
算でない場合の中間語17を調べた時、ベクトル化が可
能であると判断した場合、図6に示すようなベクトル命
令生成可能な中間語18に変形する(ステップS5
2)。
【0017】これに対し、プログラム部10のように配
列演算で記述された場合の中間語19については、配列
演算有りとなるので、次に、そのオペランド(A=B+
C)が全て配列全体を表しているか否かを判定する(ス
テップS53)。
列演算で記述された場合の中間語19については、配列
演算有りとなるので、次に、そのオペランド(A=B+
C)が全て配列全体を表しているか否かを判定する(ス
テップS53)。
【0018】この判定において、配列演算のオペランド
の一部が配列全体を表していなければ、ループ繰り返し
型の中間語17の形に変形する(ステップS54)。
の一部が配列全体を表していなければ、ループ繰り返し
型の中間語17の形に変形する(ステップS54)。
【0019】しかし、オペランドが全て配列全体を表し
ている場合は、その配列情報で示される配列の大きさ
(100×100=10000)の情報をもとにして、
ベクトル長,初期値,増分値を計算する(ステップS5
5)。続いて、その計算により求めたベクトル長,初期
値,増分値の情報を中間語19に付加し、図6に示すよ
うなベクトル命令生成可能な中間語18に変形する。
ている場合は、その配列情報で示される配列の大きさ
(100×100=10000)の情報をもとにして、
ベクトル長,初期値,増分値を計算する(ステップS5
5)。続いて、その計算により求めたベクトル長,初期
値,増分値の情報を中間語19に付加し、図6に示すよ
うなベクトル命令生成可能な中間語18に変形する。
【0020】従って、プログラム部10については、ベ
クトル命令を直接生成することが可能な中間語18に変
形するので、配列のベクトル化可否のチェックのための
配列データフロー解析および添字解析配列などの依存関
係のチェックが不要であり、また中間語の変形も少なく
て済むためコンパイラの処理性能を劣化させることな
く、配列を直接記述した演算式を直接ベクトル化するこ
とができる。
クトル命令を直接生成することが可能な中間語18に変
形するので、配列のベクトル化可否のチェックのための
配列データフロー解析および添字解析配列などの依存関
係のチェックが不要であり、また中間語の変形も少なく
て済むためコンパイラの処理性能を劣化させることな
く、配列を直接記述した演算式を直接ベクトル化するこ
とができる。
【0021】
【発明の効果】以上説明したように本発明によれば、配
列演算式を配列演算の形を残した中間語を生成し、その
中間語のオペランドが配列全体を表しているか否かを判
定し、配列全体を表しているならば配列演算式の配列の
大きさを表す情報をもとにベクトル命令を生成するため
に必要なベクトル長、初期値、増分値を示す情報を前記
中間語に付加し、ベクトル命令を生成することが可能な
中間語に変形し、この変形した中間語によってベクトル
命令を生成し、配列全体を表していなければ、ループ繰
返し型の中間語に変形し、この変形した中間語によって
ベクトル命令を生成するようにしたため、コンパイラと
しての性能を劣化させることなく、配列を直接記述した
演算式を直接ベクトル化することができるという効果が
ある。
列演算式を配列演算の形を残した中間語を生成し、その
中間語のオペランドが配列全体を表しているか否かを判
定し、配列全体を表しているならば配列演算式の配列の
大きさを表す情報をもとにベクトル命令を生成するため
に必要なベクトル長、初期値、増分値を示す情報を前記
中間語に付加し、ベクトル命令を生成することが可能な
中間語に変形し、この変形した中間語によってベクトル
命令を生成し、配列全体を表していなければ、ループ繰
返し型の中間語に変形し、この変形した中間語によって
ベクトル命令を生成するようにしたため、コンパイラと
しての性能を劣化させることなく、配列を直接記述した
演算式を直接ベクトル化することができるという効果が
ある。
【図1】本発明を適用したFORTRANコンパイラの
一実施例を示す全体構成図である。
一実施例を示す全体構成図である。
【図2】実施例におけるFORTRANソースプログラ
ムの例を示す説明図である。
ムの例を示す説明図である。
【図3】実施例における繰り返し型の配列計算の中間語
表現を示す説明図である。
表現を示す説明図である。
【図4】実施例における配列演算の中間語表現を示す説
明図である。
明図である。
【図5】実施例におけるベクトル変換部のベクトル変換
処理を示すフローチャートである。
処理を示すフローチャートである。
【図6】実施例においてベクトル変換を実施した後の中
間語表現を示す説明図である。
間語表現を示す説明図である。
1…コンパイラ、2…構文解析部、3…中間部、4…コ
ード生成部、5…FORTRANソースプログラム、6
…中間語・配列情報、7…中間語、8…目的プログラ
ム、9…FORTRANソースプログラムの繰り返し型
配列計算のプログラム部、109…FORTRANソー
スプログラムの配列演算のプログラム部、17…繰り返
し型配列計算の中間語、18…ベクトル化した中間語、
19…配列演算の中間語。
ード生成部、5…FORTRANソースプログラム、6
…中間語・配列情報、7…中間語、8…目的プログラ
ム、9…FORTRANソースプログラムの繰り返し型
配列計算のプログラム部、109…FORTRANソー
スプログラムの配列演算のプログラム部、17…繰り返
し型配列計算の中間語、18…ベクトル化した中間語、
19…配列演算の中間語。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 西田 哲夫 神奈川県横浜市中区尾上町6丁目81番地 日立ソフトウェアエンジニアリング株式会 社内
Claims (1)
- 【請求項1】 配列演算機能を有する高級プログラミン
グ言語をベクトル命令を含む機械語に翻訳するコンパイ
ル方式において、 配列演算式を配列演算の形を残した中間語を生成し、そ
の中間語のオペランドが配列全体を表しているか否かを
判定し、配列全体を表しているならば配列演算式の配列
の大きさを表す情報をもとにベクトル命令を生成するた
めに必要なベクトル長、初期値、増分値を示す情報を前
記中間語に付加し、ベクトル命令を生成することが可能
な中間語に変形し、この変形した中間語によってベクト
ル命令を生成し、配列全体を表していなければ、ループ
繰返し型の中間語に変形し、この変形した中間語によっ
てベクトル命令を生成することを特徴とするコンパイル
方式。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP5451892A JPH05257707A (ja) | 1992-03-13 | 1992-03-13 | コンパイル方式 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP5451892A JPH05257707A (ja) | 1992-03-13 | 1992-03-13 | コンパイル方式 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH05257707A true JPH05257707A (ja) | 1993-10-08 |
Family
ID=12972875
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP5451892A Pending JPH05257707A (ja) | 1992-03-13 | 1992-03-13 | コンパイル方式 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH05257707A (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2009211458A (ja) * | 2008-03-05 | 2009-09-17 | Nec Corp | コンパイラ、変数最適化装置、方法、及び、プログラム |
-
1992
- 1992-03-13 JP JP5451892A patent/JPH05257707A/ja active Pending
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2009211458A (ja) * | 2008-03-05 | 2009-09-17 | Nec Corp | コンパイラ、変数最適化装置、方法、及び、プログラム |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US4833606A (en) | Compiling method for vectorizing multiple do-loops in source program | |
| Bischof et al. | Combining source transformation and operator overloading techniques to compute derivatives for MATLAB programs | |
| US5355494A (en) | Compiler for performing incremental live variable analysis for data-parallel programs | |
| US6233733B1 (en) | Method for generating a Java bytecode data flow graph | |
| US4821181A (en) | Method for converting a source program of high level language statement into an object program for a vector processor | |
| US6983458B1 (en) | System for optimizing data type definition in program language processing, method and computer readable recording medium therefor | |
| JPH1097430A (ja) | 最適化のためにアセンブリコードルーチンをソースコードルーチンに挿入する方法およびそのシステム | |
| US6993756B2 (en) | Optimization apparatus that decreases delays in pipeline processing of loop and computer-readable storage medium storing optimization program | |
| US5349665A (en) | Compiler vectorizing system | |
| KR0125605B1 (ko) | 프로그램의 아키덱쳐 변환방법 및 장치와 그 방법 및 장치를 사용하여 프로그램의 동작을 검증하는 방법 및 장치 | |
| JPH05257707A (ja) | コンパイル方式 | |
| JP2001125792A (ja) | 最適化促進装置 | |
| JP3887097B2 (ja) | コンパイル方法,コンパイル装置および、コンパイル用プログラムを記憶したコンピュータ読み取り可能な記憶媒体 | |
| Silber et al. | The Nestor library: A tool for implementing fortran source to source transfromations | |
| JP3196625B2 (ja) | 並列化コンパイル方式 | |
| Boyle | LISP to FORTRAN—program transformation applied | |
| JP2956591B2 (ja) | ループ外への条件付き飛び出しがあるループの並列化方法及び装置 | |
| JP2701246B2 (ja) | コンパイラのベクトル化処理方式 | |
| JPH06222928A (ja) | ループ最適化方法 | |
| JPH0594470A (ja) | ベクトル化方式 | |
| JP3034582B2 (ja) | コンパイル処理方式 | |
| JP2674489B2 (ja) | ベクトル化処理装置 | |
| JPH04343140A (ja) | コンパイラの最適化処理方法 | |
| JPH0540780A (ja) | ベクトル化処理方式 | |
| JP3047418B2 (ja) | ベクトル化処理方式 |