米国特許情報 | 欧州特許情報 | 国際公開(PCT)情報 | Google の米国特許検索
 
     特許分類
A 農業
B 衣類
C 家具
D 医学
E スポ−ツ;娯楽
F 加工処理操作
G 机上付属具
H 装飾
I 車両
J 包装;運搬
L 化学;冶金
M 繊維;紙;印刷
N 固定構造物
O 機械工学
P 武器
Q 照明
R 測定; 光学
S 写真;映画
T 計算機;電気通信
U 核技術
V 電気素子
W 発電
X 楽器;音響


  ホーム -> 計算機;電気通信 -> エヌイーシーマイクロシステム株式会社

発明の名称 最適化コンパイル方法及び最適化コンパイル装置
発行国 日本国特許庁(JP)
公報種別 公開特許公報(A)
公開番号 特開2003−67195(P2003−67195A)
公開日 平成15年3月7日(2003.3.7)
出願番号 特願2001−258224(P2001−258224)
出願日 平成13年8月28日(2001.8.28)
代理人 【識別番号】100082935
【弁理士】
【氏名又は名称】京本 直樹 (外2名)
【テーマコード(参考)】
5B081
【Fターム(参考)】
5B081 CC11 CC24 
発明者 星野 力也
要約 課題
原始プログラム中の変数や演算式が実際に取りうる範囲を抽出し、その結果によって最適化を行い、よりコストの小さい命令を生成する。

解決手段
原始プログラムF1に対し、構文解析後、演算式の各々毎に最適化しこの演算式の最適化結果により演算式の最小値及び最大値の各々を格納する範囲テーブル31を初期化する演算式の最適化ステップS1と、プログラム毎に最適化しその結果により範囲テーブル31を更新する広域最適化ステップS2と、広域最適化ステップの最適化結果に基づき演算式の最適化が可能であるかを判定する最適化可能判定ステップS3と、最適化可能判定ステップS3で演算式の最適化が可能な場合、更新した範囲テーブル31を参照して再度の演算式の最適化を実行し的プログラムF2を生成する演算式の最適化ステップS4とを有する。
特許請求の範囲
【請求項1】 原始プログラムを構文解析しこの構文解析結果認識した演算式の単位毎での第1の演算式最適化を実施し、その後プログラム単位での広域最適化を実施し、その後第2の演算式最適化を実施して目的プログラムを生成する最適化コンパイル方法において、前記第1の演算式最適化で、第1の変数及び前記演算式の各々の取り得る最小値及び最大値を前記第1の変数及び前記演算式の各々毎に格納する範囲テーブルを生成して対象プロセッサの演算値の最小値及び最大値の各々を前記範囲テーブルの初期値としてそれぞれ格納し、前記広域最適化で、予め定めた広域最適化方法の変数である第2の変数を認識しこの第2の変数の初期値及び終了値を前記第2の変数の最小値及び最大値として前記演算式の前記最小値及び最大値の各々の更新値を求めて前記範囲テーブルの前記初期値を更新し、前記第2の演算式最適化で、前記演算式の各々毎に更新した前記範囲テーブルの前記第2の変数の前記最小値及び最大値を参照して前記対象プロセッサの演算命令とサブルーチン呼出のいずれか一方を選択使用して最適化することを特徴とする最適化コンパイル方法。
【請求項2】 前記広域最適化方法が、ループ最適化であり、前記第2の変数がループ及びループカウンタの変数であることを特徴とする請求項1記載の最適化コンパイル方法。
【請求項3】 原始プログラムを構文解析しこの構文解析結果認識した演算式の単位毎での第1の演算式最適化を実施し、その後プログラム単位での広域最適化を実施し、その後第2の演算式最適化を実施してコンパイルの対象とする対象プロセッサの目的プログラムを生成する最適化コンパイル方法において、入力した前記原始プログラムに対し、構文解析後、前記演算式単位で演算式自身の最適化と冗長な演算式の削除及び演算式の移動を含む最適化手法により前記演算式を最適化しこの演算式の最適化結果により前記演算式の最小値及び最大値の各々を格納する範囲テーブルを初期化する第1の演算式の最適化ステップと、より広範囲なプログラムの流れに着目し、このプログラムの範囲において冗長なコードの削除とループ最適化と関数のインライン展開最適化を含む最適化手法により最適化しその結果により前記範囲テーブルを更新する広域最適化ステップと、前記広域最適化ステップの最適化結果に基づき前記演算式の最適化が可能であるかを判定し、可能ならば後述する第2の演算式の最適化ステップに進み、不可ならば処理を終了してそのまま前記目的プログラムを生成する最適化可能判定ステップと、前記最適化可能判定ステップで、前記演算式の最適化が可能な場合、更新した前記範囲テーブルを参照して再度の演算式の最適化を実行し前記目的プログラムを生成する第2の演算式の最適化ステップとを有することを特徴とする最適化コンパイル方法。
【請求項4】 前記広域最適化ステップが、前記対象プロセッサの演算式におけるループ及びループカウンタの変数を認識しこの変数の初期値及び終了値を前記変数の最小値及び最大値として前記演算式の前記最小値及び最大値の各々の更新値を求めて前記範囲テーブルの初期値を更新するループ最適化によりループ内の乗算の最小値及び最大値である乗算範囲を最適化することを特徴とする請求項3記載の最適化コンパイル方法。
【請求項5】 前記最適化可能判定ステップが、前記広域最適化ステップで最適化された前記ループ内の前記乗算の前記乗算範囲に基づき前記対象プロセッサの乗算命令と乗算サブルーチン呼出のいずれか一方を選択使用して最適化することを特徴とする請求項4記載の最適化コンパイル方法。
【請求項6】 原始プログラムを構文解析しこの構文解析結果認識した演算式の単位毎での第1の演算式最適化を実施し、その後プログラム単位での広域最適化を実施し、その後第2の演算式最適化を実施してコンパイルの対象とする対象プロセッサの目的プログラムを生成する最適化コンパイル装置において、入力した原始プログラムの前記構文解析及び意味解析を行う解析手段と、最適化の各過程でデータベースを参照・更新しながら前記解析手段で認識した前記演算式の最適化を実施し前記目的プログラムを生成する最適化手段とを備え、前記最適化手段が、前記演算式又は部分式毎に、その演算整数の取り得る最大値と最小値を格納した前記データベースに対し初期化・更新を含むテーブル管理を行う範囲テーブル管理手段と、前記演算式又は部分式を構成する部分式の最大値と最小値から前記演算式又は部分式の最大値と最小値を予測する範囲予測手段と、前記演算式又は部分式の前記最大値と最小値から可能な最適化を判定して最適化を実行する最適化判定実行手段と、他の最適化によって前記演算式又は部分式の前記最大値又は最小値が変更された場合に関係する前記演算式又は部分式の前記最大値及び最小値を再予測する範囲再予測手段とを備えることを特徴とする最適化コンパイル装置。
【請求項7】 前記データベースが、前記演算式又は部分式の各々毎の最大値と最小値を格納した範囲テーブルを備えることを特徴とする請求項6記載の最適化コンパイル装置。
発明の詳細な説明
【0001】
【発明の属する技術分野】本発明は最適化コンパイル方法及び最適化コンパイル装置に関し、特に演算式を含むプログラムの最適化を行う最適化コンパイル方法及び最適化コンパイル装置に関する。
【0002】
【従来の技術】コンパイルプログラム(コンパイラ)における最適化は、通常の演算式の最適化や冗長な演算式の削除、演算式の共通部分をテンポラリ変数に代入して参照部分をそのテンポラリ変数に置換する共通部分式の削除の最適化、ループの最適化や関数のインライン展開、様々な最適化を同時に行うことによって実行性能を向上させるとともにコードサイズを縮小する。
【0003】従来の最適化コンパイル方法における入力原始プログラムの最適化を行い目的プログラムを生成するまでの処理をフローチャートで示す図4を参照すると、この従来の最適化コンパイル方法は、入力した原始プログラムF1に対し、構文解析後、まず演算式単位で演算式自身の最適化や冗長な演算式の削除、演算式の移動といった最適化(以下、演算式の最適化とする)ステップP1を行う。
【0004】次に、より広範囲なプログラムの流れに着目し、その範囲において冗長なコードの削除、ループ最適化、関数のインライン展開最適化といった最適化(以下、広域最適化とする)ステップP2を行う。
【0005】その結果、最適化可能判定ステップP3で演算式の最適化が可能になった場合は、再度演算式の最適化ステップP4を行い、全ての最適化の終了後に目的プログラムF2を生成する。
【0006】これらの最適化のうち、演算式の最適化の中に、演算式の取り得る値が特定の範囲の場合のみ行える最適化が存在する。
【0007】例を挙げると、コンパイラの目的プログラムのターゲットとなるプロセッサの中には、特定の命令に対する実行に制限があるものが存在する。その例として、16ビットの乗算器を持ち、32ビットのデータ長を操作できるプロセッサがある。このプロセッサでは、乗算器が16ビットまでしか存在しないために、32ビット長の乗算は特定のサブルーチンを呼び出すことによって機能を実現することになる。このように、特定命令の実行上に制限があるものが存在するので、演算式の内容からそれらのどちらかの機能を使用するか判定する最適化がある。
【0008】演算式の計算で何度も使用される変数や、共通部分式の削除の最適化で生成されるテンポラリ変数は、性能向上のためにプロセッサのレジスタに取られることが多いが、一般にレジスタの大きさは通常プロセッサが扱える最大の大きさの変数と同一であり、それらの変数を利用した演算式の結果の大きさも同一となる。
【0009】上述した従来の最適化コンパイル方法の場合、変数や演算式の取りうる値として認識できるのはそれぞれ変数あるいは演算式の型の最大の範囲であり、これらは実際に取りうる値の範囲の方が小さい場合でも効率の良い目的プログラムの命令に置き換えることができない。
【0010】16ビットの乗算器を持つ32ビットのプロセッサをターゲットとしたコンパイラで、従来の最適化コンパイル方法による最適化の過程を説明図で示す図5を参照すると、原始プログラムF1は、ループカウンタ変数Iが0から1000までの1ずつ増加する間の1001回、I*Iを配列AのI番目の要素に代入する演算式F11を実行するループのプログラムである。
【0011】原始プログラムF1の中で演算式F11の変数Iおよび演算式I*Iについて、最適化P1〜P4の実行中はそれぞれの演算式の型は、最適化中の演算式変数認識情報を表形式で示す演算式変数認識情報101に示すように符号付き32ビット整数と認識される。その結果、目的プログラムF2を生成すると、演算式F11の乗算部分はプロセッサが持つ乗算命令を使用できないので、32ビットの乗算を行うサブルーチンの呼び出しF21になる。
【0012】
【発明が解決しようとする課題】上述した従来の最適化コンパイル方法及び最適化コンパイル装置は、変数や演算式の取りうる値として認識できるのはそれぞれ変数あるいは演算式の型の最大の範囲であり、これらは実際に取りうる値の範囲の方が小さい場合でも効率の良い目的プログラムの命令に置き換えることができないという欠点があった。
【0013】本発明の目的は、原始プログラム中の変数や演算式が実際に取りうる範囲を抽出し、その結果によって最適化を行い、よりコストの小さい命令を生成することが可能な最適化コンパイル方法及び最適化コンパイル装置を提供することにある。
【0014】
【課題を解決するための手段】請求項1記載の発明の最適化コンパイル方法は、原始プログラムを構文解析しこの構文解析結果認識した演算式の単位毎での第1の演算式最適化を実施し、その後プログラム単位での広域最適化を実施し、その後第2の演算式最適化を実施して目的プログラムを生成する最適化コンパイル方法において、前記第1の演算式最適化で、第1の変数及び前記演算式の各々の取り得る最小値及び最大値を前記第1の変数及び前記演算式の各々毎に格納する範囲テーブルを生成して対象プロセッサの演算値の最小値及び最大値の各々を前記範囲テーブルの初期値としてそれぞれ格納し、前記広域最適化で、この広域最適化の1つであるループ最適化によりループ及びループカウンタの変数である第2の変数を認識しこの第2の変数の初期値及び終了値を前記第2の変数の最小値及び最大値として前記演算式の前記最小値及び最大値の各々の更新値を求めて前記範囲テーブルの前記初期値を更新し、前記第2の演算式最適化で、前記演算式の各々毎に更新した前記範囲テーブルの前記第2の変数の前記最小値及び最大値を参照して前記対象プロセッサの演算命令とサブルーチン呼出のいずれか一方を選択使用して最適化することを特徴とするものである。
【0015】また、請求項2記載の発明は、請求項1記載の最適化コンパイル方法において、前記広域最適化方法が、ループ最適化であり、前記第2の変数がループ及びループカウンタの変数であることを特徴とするものである。
【0016】請求項3記載の発明の最適化コンパイル方法は、原始プログラムを構文解析しこの構文解析結果認識した演算式の単位毎での第1の演算式最適化を実施し、その後プログラム単位での広域最適化を実施し、その後第2の演算式最適化を実施してコンパイルの対象とする対象プロセッサの目的プログラムを生成する最適化コンパイル方法において、入力した前記原始プログラムに対し、構文解析後、前記演算式単位で演算式自身の最適化と冗長な演算式の削除及び演算式の移動を含む最適化手法により前記演算式を最適化しこの演算式の最適化結果により前記演算式の最小値及び最大値の各々を格納する範囲テーブルを初期化する第1の演算式の最適化ステップと、より広範囲なプログラムの流れに着目し、このプログラムの範囲において冗長なコードの削除とループ最適化と関数のインライン展開最適化を含む最適化手法により最適化しその結果により前記範囲テーブルを更新する広域最適化ステップと、前記広域最適化ステップの最適化結果に基づき前記演算式の最適化が可能であるかを判定し、可能ならば後述する第2の演算式の最適化ステップに進み、不可ならば処理を終了してそのまま前記目的プログラムを生成する最適化可能判定ステップと、前記最適化可能判定ステップで、前記演算式の最適化が可能な場合、更新した前記範囲テーブルを参照して再度の演算式の最適化を実行し前記目的プログラムを生成する第2の演算式の最適化ステップとを有することを特徴とするものである。
【0017】また、請求項4記載の発明は、請求項3記載の最適化コンパイル方法において、前記広域最適化ステップが、前記対象プロセッサの演算式におけるループ及びループカウンタの変数を認識しこの変数の初期値及び終了値を前記変数の最小値及び最大値として前記演算式の前記最小値及び最大値の各々の更新値を求めて前記範囲テーブルの初期値を更新するループ最適化によりループ内の乗算の最小値及び最大値である乗算範囲を最適化することを特徴とするものである。
【0018】また、請求項5記載の発明は、請求項4記載の最適化コンパイル方法において、前記最適化可能判定ステップが、前記広域最適化ステップで最適化された前記ループ内の前記乗算の前記乗算範囲に基づき前記対象プロセッサの乗算命令と乗算サブルーチン呼出のいずれか一方を選択使用して最適化することを特徴とするものである。
【0019】請求項6記載の発明の最適化コンパイル装置は、原始プログラムを構文解析しこの構文解析結果認識した演算式の単位毎での第1の演算式最適化を実施し、その後プログラム単位での広域最適化を実施し、その後第2の演算式最適化を実施してコンパイルの対象とする対象プロセッサの目的プログラムを生成する最適化コンパイル装置において、入力した原始プログラムの前記構文解析及び意味解析を行う解析手段と、最適化の各過程でデータベースを参照・更新しながら前記解析手段で認識した前記演算式の最適化を実施し前記目的プログラムを生成する最適化手段とを備え、前記最適化手段が、前記演算式又は部分式毎に、その演算整数の取り得る最大値と最小値を格納した前記データベースに対し初期化・更新を含むテーブル管理を行う範囲テーブル管理手段と、前記演算式又は部分式を構成する部分式の最大値と最小値から前記演算式又は部分式の最大値と最小値を予測する範囲予測手段と、前記演算式又は部分式の前記最大値と最小値から可能な最適化を判定して最適化を実行する最適化判定実行手段と、他の最適化によって前記演算式又は部分式の前記最大値又は最小値が変更された場合に関係する前記演算式又は部分式の前記最大値及び最小値を再予測する範囲再予測手段とを備えて構成されている。
【0020】また、請求項7記載の発明は、請求項6記載の最適化コンパイル装置において、前記データベースが、前記演算式又は部分式の各々毎の最大値と最小値を格納した範囲テーブルを備えて構成されている。
【0021】
【発明の実施の形態】次に、本発明の実施の形態について図面を参照して詳細に説明する。
【0022】本実施の形態の最適化コンパイル方法及び最適化コンパイル装置は、原始プログラムを構文解析しこの構文解析結果認識した演算式の単位での第1の演算式最適化を実施し、その後プログラム単位での広域最適化を実施し、その後第2の式最適化を実施してコンパイルの対象とする対象プロセッサの目的プログラムを生成する最適化コンパイル方法において、上記第1の式最適化で、第1の変数及び上記演算式の各々の取り得る最小値及び最大値を上記第1の変数及び上記演算式の各々毎に格納する範囲テーブルを生成して前記対象プロセッサの演算値の最小値及び最大値の各々を上記範囲テーブルの初期値としてそれぞれ格納し、上記広域最適化で、予め定めた広域最適化方法の変数である第2の変数を認識しこの第2の変数の初期値及び終了値を上記第2の変数の最小値及び最大値として上記演算式の上記最小値及び最大値の各々の更新値を求めて上記範囲テーブルの上記初期値を更新し、上記第2の式最適化で、上記演算式の各々毎に更新した上記範囲テーブルの上記第2の変数の上記最小値及び最大値を参照して上記対象(ターゲット)プロセッサの演算命令とサブルーチン呼出のいずれか一方を選択使用して最適化することを特徴とするものである。
【0023】次に、本発明の実施の形態をフローチャートで示す図1を参照すると、この図に示す本実施の形態の最適化コンパイル方法は、入力したターゲットプロセッサの原始プログラムF1に対し、構文解析後、演算式単位で演算式自身の最適化や冗長な演算式の削除、演算式の移動等により演算式を最適化しこの演算式の最適化結果により演算式の最小値及び最大値を格納したデータベースF3の範囲テーブル31を初期化する演算式の最適化ステップS1と、より広範囲なプログラムの流れに着目し、このプログラム範囲において冗長なコードの削除とループ最適化と関数のインライン展開最適化等により最適化しその結果によりデータベースF3の範囲テーブル31を更新する広域最適化ステップS2と、広域最適化ステップS2の最適化結果に基づき演算式の最適化が可能であるかを判定し、可能ならば次の演算式の最適化ステップS4に進み、不可ならば処理を終了してそのまま目的プログラムF2を生成する最適化可能判定ステップS3と、最適化可能判定ステップS3で演算式の最適化が可能な場合、更新した範囲テーブル31Aを参照して再度の演算式の最適化を実行しターゲットプロセッサの目的プログラムF2を生成する演算式の最適化ステップS4とを有する。
【0024】本発明の実施の形態の最適化コンパイル方法を実行する本実施の形態の最適化コンパイル装置をブロック図で示す図2を参照すると、この図に示す本実施の形態の最適化コンパイル装置は、データ格納用のファイルとして従来と共通の原始プログラムF1を格納したファイルである原始プログラムファイルF1(以下プログラムとその格納ファイルとを区別する必要がない場合は原始プログラムF1等と省略)と、最適化結果である目的プログラムF2を格納する目的プログラムファイルF2とに加えて、変数及び演算式の情報を格納し最適化の各過程で上記格納情報を更新・参照するためのデータベース3を備え、入力した原始プログラムF1の構文解析及び意味解析を行う解析手段1と、最適化の各過程でデータベースF3を参照・更新しながら解析手段1で認識した演算式の最適化を実施し目的プログラムF2を生成する最適化手段2とを備える。
【0025】最適化手段2は、演算式又は部分式毎に、その演算整数の取り得る最大値と最小値(以下最大値と最小値)を格納したデータベース3の後述の範囲テーブル31に対し初期化・更新を含むテーブル管理を行う範囲テーブル管理手段21と、演算式又は部分式を構成する部分式の最大値と最小値から演算式又は部分式の最大値と最小値を予測する範囲予測手段22と、演算式又は部分式の最大値と最小値から可能な最適化を判定して最適化を実行する最適化判定実行手段23と、他の最適化によって演算式又は部分式の最大値又は最小値が変更された場合に関係する演算式又は部分式の最大値及び最小値を再予測する範囲再予測手段24とを備える。
【0026】データベース3は、演算式又は部分式の各々毎の最大値と最小値を格納した範囲テーブル31を備える。
【0027】次に、図1及び図2を参照して本実施の形態の動作について説明すると、まず、解析手段1は原始プログラムF1を読み込み、構文解析及び意味解析を行い、解析結果を最適化手段2に出力する。また、データベース3は、範囲テーブル管理手段21が、後述の演算式最適化ステップS1において、変数及び演算演算式毎に格変数及びこの演算式の取り得る最小値及び最大値を格納する範囲テーブル31を生成し、この範囲テーブル31にプログラムの最適化対象とするターゲットプロセッサの演算値(整数)の最小値及び最大値を初期値としてそれぞれ格納しておく。
【0028】次に、最適化手段2では、解析手段1から供給を受けた解析結果から、演算式の値を認識し、演算式単位で演算式自身の最適化、冗長な演算式の削除、及び演算式の移動等により演算式を最適化し、この演算式の最適化結果によりデータベースF3の範囲テーブル31を更新する(演算式最適化ステップS1)。以下説明の便宜上、最適化対象の演算式を1つ取り上げこの演算式を演算式Aとする。
【0029】次に、プログラム単位での広域最適化ステップS2を行う。広域最適化ステップS2では、冗長なコードの削除、ループ最適化、関数のインライン展開最適化を行う。処理例としてループ最適化について説明すると、このループ最適化では、範囲予測手段22が、ターゲットプロセッサの演算式(例えば乗算)におけるループ及びそのループカウンタの変数(以下ループ及びループカウンタ変数)を認識し、このループ及びループカウンタ変数の各々の初期値及び終了値をそれぞれこのループ及びループカウンタ変数の各々の最小値及び最大値として演算式Aの最小値及び最大値を求め、範囲テーブル管理手段21により、範囲テーブル31の演算式Aの最小値及び最大値の欄を更新する。
【0030】次に、最適化判定実行手段23は、広域最適化ステップS2の最適化結果により更新した範囲テーブル31の最小値及び最大値に基づき、演算式Aの最適化が可能であるかを判定する(最適化可能判定ステップS3)。最適化が可能ならば、次の演算式の最適化ステップS4に進む。
【0031】演算式の最適化ステップS4では、演算式毎に、この例では演算式Aに対し、範囲再予測手段24により、範囲テーブル31の広域最適化ステップS2で更新した変数の最小値及び最大値を参照して上記対象プロセッサの演算命令又はサブルーチン呼出を選択使用して最適化する。
【0032】最適化可能判定ステップS3で、演算式の最適化が不可能ならば処理を終了してそのまま目的プログラムF2を生成する。
【0033】次に、具体例として、本実施の形態の最適化コンパイル方法を従来と同様の16ビットの乗算器を持つ32ビットのプロセッサをターゲットとしたコンパイラに対し適用した場合において、広域最適化の一つであるループ最適化の過程を説明図で示す図3を参照すると、ここでは、本実施の形態の最適化コンパイル方法によりループ内の乗算が最適化されるまでの過程を示す。
【0034】原始プログラムF1の中で演算式F11の変数I及び演算式I*Iについて、最初の演算式の最適化ステップS1における演算式の認識の実行時に、それぞれの最大値と最小値を格納するためのデータベース3を生成する。この時点では、、広域最適化ステップS2の実行前であり、ループ内の演算式F11のI及びI*Iはループ内部であることが認識されていないので、データベース3内の範囲テーブル31の各演算式の最大値及び最小値は、従来と同様に、初期設定として、32ビットの符号付き整数の最大値及び最小値が設定されている。この例では、Iの最小値は、−2147483648、最大値は、2147483647であり、また、I*Iの最小値は、−2147483648、最大値は、2147483647である。
【0035】仮に、この状態で目的プログラムF2を生成したとすると、演算式F11の乗算部分は、プロセッサが持つ乗算命令を使用できないので、従来と同様に、32ビットの乗算を行うサブルーチンの呼び出しF21になる。
【0036】広域最適化ステップS2のループ最適化ステップS21で、ループ及びカウンタ変数Iを認識すると、ループ内の演算式Iについて、ループカウンタの初期値及び終了値をそれぞれ最小値及び最大値としてデータベース3の範囲テーブル31のIの欄を範囲テーブル31Aの状態に更新すると同時に、I*Iの最大値と最小値も更新する。
【0037】この例では、Iの最小値を0、最大値を1000に、また、I*Iの最小値を0に、最大値を1000000にそれぞれ更新する。
【0038】Iが16ビットの整数の範囲内と認識したので、次の演算式の最適化ステップS4によって次のように最適化する。すなわち、目的プログラムF2の生成時は、演算式F11の乗算部分をサブルーチン呼び出しF21ではなく、乗算命令F22を使用する。
【0039】なお、以上の説明では、範囲テーブル32のI*Iの最大値及び最小値は使用していないが、演算式がさらに複雑になった場合に利用することができる。
【0040】このように、本実施の形態の最適化コンパイル方法は、演算式又は部分式の最小値と最大値を広域最適化でのループ最適化によりループ及びループカウンタの変数の最小値及び最大値として上記演算式の前記最小値及び最大値を求め上記範囲テーブルを更新し、上記第2の式最適化で演算式毎に更新した上記範囲テーブルの変数の上記最小値及び最大値である演算範囲を参照して上記対象プロセッサの演算命令又はサブルーチン呼出命令を選択使用して最適化することにより、例えば乗算の場合、大きな計算コストを必要とする乗算のサブルーチンであるランタイムライブラリ関数ではなく、通常1ないし2クロックで処理する乗算命令に置換することにより処理速度の大幅な向上とコードサイズの削減を実現できる。また、乗算以外の他の演算式の最適化やプロセッサに依存する最適化にも応用して処理速度の向上やコードサイズの削減ができる。
【0041】
【発明の効果】以上説明したように、本発明の最適化コンパイル方法及び最適化コンパイル装置は、第1の演算式最適化で、第1の変数及び前記演算式の各々の取り得る最小値及び最大値を範囲テーブルの初期値としてそれぞれ格納し、広域最適化で、ループ最適化によりループ及びループカウンタの変数の初期値及び終了値を変数の最小値及び最大値として上記演算式の最小値及び最大値の各々の更新値を求めて上記範囲テーブルの前記初期値を更新し、2の演算式最適化で、演算式の各々毎に更新した範囲テーブルの変数の最小値及び最大値を参照して対象プロセッサの演算命令とサブルーチン呼出のいずれか一方を選択使用して最適化することにより、対象プロセッサに対し、更新した範囲テーブルのより狭い範囲の最小値と最大値に基づき大きな計算コストを必要とする通常演算のサブルーチン呼出命令ではなく、上記狭い範囲の最小値と最大値の演算を実行可能な単純な演算命令に置換することにより処理速度の大幅な向上とコードサイズの削減を実現できるという効果がある。




 

 


     NEWS
会社検索順位 特許の出願数の順位が発表

URL変更
平成6年
平成7年
平成8年
平成9年
平成10年
平成11年
平成12年
平成13年


 
   お問い合わせ info@patentjp.com patentjp.com   Copyright 2007-2013