JPH0795275B2 - コンパイル処理装置 - Google Patents

コンパイル処理装置

Info

Publication number
JPH0795275B2
JPH0795275B2 JP62286604A JP28660487A JPH0795275B2 JP H0795275 B2 JPH0795275 B2 JP H0795275B2 JP 62286604 A JP62286604 A JP 62286604A JP 28660487 A JP28660487 A JP 28660487A JP H0795275 B2 JPH0795275 B2 JP H0795275B2
Authority
JP
Japan
Prior art keywords
mathematical function
function
processing
unit
conversion
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.)
Expired - Fee Related
Application number
JP62286604A
Other languages
English (en)
Other versions
JPH01128136A (ja
Inventor
真理子 坂本
浩士 長倉
秀夫 高嶋
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP62286604A priority Critical patent/JPH0795275B2/ja
Publication of JPH01128136A publication Critical patent/JPH01128136A/ja
Publication of JPH0795275B2 publication Critical patent/JPH0795275B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

【発明の詳細な説明】 〔概要〕 例えば平方根関数のような数学関数を含むソースプログ
ラムのコンパイルを行うコンパイル処理装置に関し, 数学関数がより高速処理ができる別の数学関数に変換可
能か否かを認識し,その変換を行うことによって,数学
関数の処理を最適化することを目的とし, 数学関数を含むソースプログラム(9)をコンパイルす
るコンパイル処理装置において, 前記ソースプログラム(9)を解析し中間言語を出力す
る構文解析部(3)と, 数学関数を使用形態において別の数学関数に変換する条
件を設定する条件記憶部(12)と, 前記条件記憶部(12)の内容および前記構文解析部
(3)が出力した中間言語にもとづいて,前記数学関数
を前記別の数学関数に変換する変換部(6)と, 前記変換部(6)の変換結果について目的コードを生成
する目的コード生成部(7)と から構成される。
〔産業上の利用分野〕
本発明はコンパイル処理装置に関し,更に詳しくは,例
えば平方根関数のような数学関数を含むソースプログラ
ムのコンパイルを行うコンパイル処理装置に関する。
科学技術計算の分野で用いられるプログラムにおいて
は,基本的な数学関数(平方根関数,指数関数,対数関
数,三角関数等)が大きなコストを占める(実行時間の
大きな割合を占める)ものが少なくない。
このようなプログラムでは,数学関数の処理の最適化に
よる処理速度の高速化が,実行性能の向上つまりプログ
ラム全体の実行時間の大幅な短縮に大きな効果をもたら
す。
〔従来の技術〕
第4図は従来の数学関数のコンパイル処理の例を示す図
である。
ソースプログラムが入力されると(),コンパイラは
その構文解析を行い(),その解析結果に従ってソー
スプログラムと等価の中間言語(コード)を生成する
()。
ソースプログラムがFORTRANにより図示の如く, F=Q/SQRT(X+Y) −(1) と記述されていた場合,中間言語は例えば, とされる。ここで,SQRTは平方根関数,t1とt2はコンパイ
ラが生成した作業変数である。
次に,コンパイラは,生成された中間言語に従って,目
的(オブジェクト)コードを生成する()。従って,
数学関数を処理するためのプログラムが格納された関数
ライブラリからは,平方根関数SQRTのプログラムが呼出
される()。
平方根関数SQRTの処理においては,(2)式のt2=SQRT
(t1)を処理する場合,実際は,計算機内ではその処理
の都合上, の如き処理が行われるようにされている。
従って,(1)式は,実際は, の如く処理される。
〔発明が解決しようとする問題点〕
前述の従来技術においては,数学関数の処理の最適化の
手段として,主に関数自体(関数ライブラリに格納され
た関数プログラム)の性能向上のみが考慮され,数学関
数がソースプログラムにおいてどのように使用されてい
るかという使用形態が考慮されることはなかった。
即ち,(3)式の如き処理のなされる数学関数SQRTが
(1)式の如くソースプログラムで使用される場合, の如くに変換することにより,(4)式に比べ2回の割
算を省略して高速に処理することが可能であるにも拘ら
ず,(5)式による処理が行われることはなかった。
換言すれば,数学関数の使用形態を認識して,数学関数
を別の数学関数に変換する,即ち,関数ライブラリから
の呼出し形式を変換する((3)式の のみを呼出すか,またはこれに相当する関数プログラム
を呼出す)ことは行われない。即ち,従来のコンパイラ
は,数学関数の使用形態の認識による最適化という手段
を持たないため,ソースプログラムの記述そのままの数
学関数に対応するような目的コードを生成するのみであ
った。
本発明は,数学関数がより高速処理ができる別の数学関
数に変換可能か否かを認識し,その変換を行うことによ
って,数学関数の処理を最適化することが可能なコンパ
イル処理装置を提供することを目的とする。
〔問題点を解決するための手段〕
第1図は本発明の原理構成図であり,本発明によるコン
パイラを備えた処理装置を示している。
第1図において,1は中央処理装置(CPU)とメモリとを
含む処理装置,2はコンパイラ,3は構文解析部,4は最適化
処理部,5は認識部,6は変換部,7は目的コード生成部,8は
結合編集処理部,9はソースプログラム,10はオブジェク
トモジュール,11は関数ライブラリ,12は変換テーブル,1
3はロードモジュールである。
FORTRANの如き高級言語で記述されたソースプログラム
9は,コンパイラ2によって機械語コードに翻訳され,
その翻訳結果である目的コードの集合はオブジェクトモ
ジュール10として格納される。リンケージエディタの如
き結合編集処理部8は,目的コードに従って関数ライブ
ラリ11から呼出した関数プログラムと目的コード(オブ
ジェクトモジュール10)とを結合させて,関数プログラ
ムを直ちに参照できるようにした(実行可能な形式にし
た)ロードモジュール13を編集し,格納する。
コンパイラ2において,構文解析部3は,ソースプログ
ラム9を解析して,中間言語(最適化前)に展開する。
最適化処理部4は,数学関数の使用形態を考慮すること
によって,中間言語の最適化を行う。この最適化された
中間言語について,目的コード生成部7が目的コードを
生成し,オブジェクトモジュール10に展開する。
最適化処理部4においては,次の如き処理が行われる。
構文解析部3からの中間言語を入力とする認識部5は,
その中間言語に含まれる数学関数がより高速処理できる
別の数学関数に変換可能か否かを認識する。この認識
は,数学関数が所定の条件を満足する形で使用されてい
るかを調べることによって行われる。
このために,例えば,変換テーブル12が用意される。変
化テーブル12には,変換のために満足すべき所定の条件
と,変換後の別の数学関数およびその使用条件とが登録
される。即ち,認識部5は,まず数学関数の使用形態を
認識し,次にこれが変換テーブル12に登録された所定の
条件と一致するかを変換テーブル12を参照して判断する
(一致する時に変換可能とされる)。なお,変換テーブ
ル12は,関数ライブラリ11内または最適化処理部4内に
設けられてもよい。
変換部6は,認識部5が変換可能とした数学関数につい
て,変換テーブル12を参照することによって,他の数学
関数への変換を行い,これに伴う必要な処理を行う。
関数ライブラリ11は,変換前の数学関数についての関数
プログラムの他,変換後の数学関数についての関数プロ
グラムも含むようにされる。
〔作用〕
コンパイラ2の最適化処理部4は,数学関数の使用形態
が所定の条件を満たす場合に,自動的に,別の数学関数
に変換するというコンパイル処理を行う。また,この変
換に伴う処理として,最適化処理部4は,別の数学関数
をその使用条件に合わせて使用するために,中間言語の
一部を変換するコンパイル処理を行う。
これにより,ソースプログラム9との等価性を維持しつ
つも,ソースプログラム9における記述に拘らず,より
高速処理が可能な別の数学関数を用いて記述されたロー
ドモジュール13が得られる。
このように,高速処理のための数学関数の最適化が成さ
れた結果,処理装置1においてロードモジュール13(ソ
ースプログラム9)を実行する場合,その実行時間を短
縮することができる。
〔実施例〕
第2図は本発明の一実施例説明図であり,簡単な具体例
を示している。
ソースプログラム9がFORTRANで記述されており,その
中に図示の如く前述の(1)式と同様の文があったとす
る。
このソースプログラム9がコンパイラ2に入力される
と,構文解析部3がこれを解析し,最適化前の中間言語
からなる第1中間テキスト14を生成する。この時,
(1)式は図示の如く前述の(2)式と同様に展開され
る。
第1中間テキストは最適化処理部4に入力され,最適化
された中間言語からなる第2中間テキスト15が生成され
る。この時,(2)式は, の如く展開されている。ここでXSQRTは平方根の逆数を
求める関数,t3はコンパイラ2が生成した作業変数であ
る。また,関数SQRTとXSQRTとの関係は,変数をt4とす
ると, の如く表される。通常, を求めるためには,ニュートン=ラプソン法を用い,ま
を求めてからその逆数をとる処理を行う。つまり, を求めるのであれば,本来,最後の逆数をとる処理は不
要である。逆数をとる処理は1回の割り算で実現される
ため, を求める関数SQRT(x)よりも を求める関数XSQRT(x)の方が割り算の処理が1回だ
け少なくてすむ。
(2)式と(6)式とを比較すると,次のようである。
変数t3を求める処理は,(7)式の関係を考慮すると,
変数t2を求める処理よりも割算が1回少ないので,この
分高速に処理される。また,Q*t3の処理は,割算よりも
掛算が高速処理できるので,Q/t2の処理よりもこの分速
く処理できる。従って,(6)式は(2)式をより高速
に処理することに適した形式に変換したものといえる。
このように,最適化処理部4は,その認識部5において
数学関数SQRTがより高速処理できる数学関数XSQRTに変
換できることを認識し,その変換部6において当該変換
を第1中間テキスト14(式(2))に施して第2中間テ
キスト15(式(6))を得る。これにより,数学関数SQ
RTは,ソースプログラム9におけるその使用形態(割算
の除数として用いられる)までを考慮して,最適化処理
されたこととなる。
目的コード生成部7は,第2中間テキスト15が入力され
ると,これに基づいてオブジェクトモジュール10を展開
する。
結合編集処理部8は,入力されたオブジェクトモジュー
ル10に従って,数学関数XSQRTを関数ライブラリ11から
呼出す。そして,オブジェクトモジュール10と数学関数
とを結合編集し,ロードモジュール13を生成する。従っ
て,ロードモジュール13は,ソースプログラム9の記述
が数学関数SQRTであるにも拘わらず,より高速処理が可
能な数学関数XSQRTを用いて記述された機械語コードか
らなるものとされる。
処理装置1がロードモジュール13を実行する場合,ソー
スプログラム9の記述にそのまま対応したコンパイル処
理(第1中間テキスト14を得る処理)に従ったロードモ
ジュールを実行する場合に比べ,数学関数の処理の最適
化により,その実行時間を短くすることができる。な
お,このための処理は最適化処理部4において自動的に
行われるので,プログラマの負担はなく,また,特殊な
関数をソースプログラム中に導入してその可搬性を損な
うこともない。
第3図は最適化処理部4における最適化処理フロー図で
ある。
最適化処理部4に第1中間テキスト14が入力される
と,認識部5は,使用する数学関数がSQRTであることを
認識する。換言すれば,関数ライブラリ11から呼出す数
学関数はSQRTであることを認識する。
さらに,認識部5は,数学関数SQRTを用いた処理の
結果の値(t2)が割算の除数として参照されていること
を認識する。
認識部5は,処理で得た数学関数SQRTの使用形態
について,これが数学関数SQRTをより高速処理可能な別
の数学関数に変換できる条件に適合しているか否かを判
断する。このために,認識部5は変換テーブル12を参照
する。
変換テーブル12には,数学関数SQRTを用いた処理の結果
の値(t2)が割算の除数として参照されている時は,別
の数学関数XSQRTに変換可能なことが登録されている。
認識部5は,数学関数SQRTを用いた処理の結果の値
(t2)がソースプログラム9(第1中間テキスト14)に
おいて他に参照されているか否かを判断する。
認識部5において,次の (ア) 数学関数SQRTが使用されている。
(イ) その処理結果の値t2が割算の除数として用いら
れている。即ち,この使用形態が変換テーブル12に登録
されている。
(ウ) その処理結果の値t2が他で参照されていない。
という命令列が認識された時,変換部6は次の処理を行
う。
変換部6は,変換テーブル12を参照して数学関数SQ
RTを別の数学関数XSQRTに変換する。即ち,(2)式中
のt2=SQRT(t1)を,(6)式中のt3=XSQRT(t1)に
変換する。
さらに,変換部6は,変換テーブル12を参照して,
処理のような変換を行った時の別の数学関数XSQRTの
使用形態を知り,必要な処理を行う。即ち,数学関数SQ
RTの処理結果の値t2を除数として参照している割算
((2)式のF=Q/t2)を,別の数学関数XSQRTの処理
結果の値t3を乗数として参照する掛算((6)式のF=
Q*t3)に変換する。これにより,(2)式と同じくソ
ースプログラム9の(1)式に等しい(6)式が得られ
る。
〔発明の効果〕
以上説明したように,本発明によれば,数学関数を含む
ソースプログラムのコンパイル処理において,数学関数
の使用形態までを考慮することにより,当該数学関数を
より高速処理可能な別の数学関数に変換することがで
き,プログラム全体の実行時間を短縮することができ
る。
【図面の簡単な説明】
第1図は本発明の原理構成図, 第2図は一実施例説明図, 第3図は最適化処理フロー図, 第4図は従来のコンパイル処理の例を示す図。 1は処理装置,2はコンパイラ,3は構文解析部,4は最適化
処理部,5は認識部,6は変換部,7は目的コード生成部,8は
結合編集処理部,9はソースプログラム,10はオブジェク
トモジュール,11は関数ライブラリ,12は変換テーブル,1
3はロードモジュール,14および15は中間テキストであ
る。

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】数学関数を含むソースプログラム(9)を
    コンパイルするコンパイル処理装置において, 前記ソースプログラム(9)を解析し中間言語を出力す
    る構文解析部(3)と, 数学関数を使用形態において別の数学関数に変換する条
    件を設定する条件記憶部(12)と, 前記条件記憶部(12)の内容および前記構文解析部
    (3)が出力した中間言語にもとづいて,前記数学関数
    を前記別の数学関数に変換する変換部(6)と, 前記変換部(6)の変換結果について目的コードを生成
    する目的コード生成部(7)と から構成される ことを特徴とするコンパイル処理装置。
JP62286604A 1987-11-13 1987-11-13 コンパイル処理装置 Expired - Fee Related JPH0795275B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP62286604A JPH0795275B2 (ja) 1987-11-13 1987-11-13 コンパイル処理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP62286604A JPH0795275B2 (ja) 1987-11-13 1987-11-13 コンパイル処理装置

Publications (2)

Publication Number Publication Date
JPH01128136A JPH01128136A (ja) 1989-05-19
JPH0795275B2 true JPH0795275B2 (ja) 1995-10-11

Family

ID=17706565

Family Applications (1)

Application Number Title Priority Date Filing Date
JP62286604A Expired - Fee Related JPH0795275B2 (ja) 1987-11-13 1987-11-13 コンパイル処理装置

Country Status (1)

Country Link
JP (1) JPH0795275B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000284970A (ja) * 1999-03-29 2000-10-13 Matsushita Electric Ind Co Ltd プログラム変換装置及びプロセッサ
DE10216602A1 (de) 2002-04-15 2003-10-30 Giesecke & Devrient Gmbh Optimierung von compilergeneriertem Programmcode

Also Published As

Publication number Publication date
JPH01128136A (ja) 1989-05-19

Similar Documents

Publication Publication Date Title
JP3190773B2 (ja) 言語処理プログラムのコンパイル処理方法
JPH08202545A (ja) ターゲット言語コードを生成するためのオブジェクト指向システム及びその方法
US20150020051A1 (en) Method and apparatus for automated conversion of software applications
JPH0795275B2 (ja) コンパイル処理装置
CN115268918A (zh) 一种基于规则模板的c++代码向c代码的自动转化方法
JPH0756745A (ja) 言語処理プログラムのコンパイラ処理方式
JP2977642B2 (ja) Fortranコンパイル処理装置
JP2956591B2 (ja) ループ外への条件付き飛び出しがあるループの並列化方法及び装置
JP3003459B2 (ja) プログラム作成支援装置
JPH0573332A (ja) ソースプログラムの並列翻訳方式
JPH03144830A (ja) 並列処理方式
JPS63187364A (ja) 指標変数ベクトル化コンパイル方式
JP3327640B2 (ja) 命令コード選択装置
JPH0695890A (ja) コンパイラにおける名前置換方式
CN115469848A (zh) 一种前端实现多文件编译器的方法
JPH0950429A (ja) コンパイラにおけるポインタベクトル化システム
JPS6297031A (ja) 仮数部のビツト数整合方式
JPH05313909A (ja) 中間コードインライン展開機能を有するコンパイラシステム
JPH06242958A (ja) コンパイル方式
JP2003208317A (ja) プログラム開発方法
JPH02253443A (ja) プログラム生成方法
JPH05120025A (ja) ソースプログラムのインライン展開方法
JPH096626A (ja) Perlスクリプトの実行方法
Narayanan et al. Interfacing OpenAD and Tapenade
JPH0612259A (ja) コンパイラ処理方式

Legal Events

Date Code Title Description
LAPS Cancellation because of no payment of annual fees