JP4184900B2 - 変数の統計処理を行うコンパイル処理プログラム、およびその記録媒体、およびその処理方法ならびにその処理装置 - Google Patents

変数の統計処理を行うコンパイル処理プログラム、およびその記録媒体、およびその処理方法ならびにその処理装置 Download PDF

Info

Publication number
JP4184900B2
JP4184900B2 JP2003301039A JP2003301039A JP4184900B2 JP 4184900 B2 JP4184900 B2 JP 4184900B2 JP 2003301039 A JP2003301039 A JP 2003301039A JP 2003301039 A JP2003301039 A JP 2003301039A JP 4184900 B2 JP4184900 B2 JP 4184900B2
Authority
JP
Japan
Prior art keywords
program
value
record
processing
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.)
Expired - Fee Related
Application number
JP2003301039A
Other languages
English (en)
Other versions
JP2005071135A (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 JP2003301039A priority Critical patent/JP4184900B2/ja
Priority to US10/811,716 priority patent/US7412696B2/en
Publication of JP2005071135A publication Critical patent/JP2005071135A/ja
Application granted granted Critical
Publication of JP4184900B2 publication Critical patent/JP4184900B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本発明は、プログラム言語で記述された原始プログラムを翻訳して目的プログラムを生成するコンパイラ処理に関する。より詳しくは、本発明は、翻訳対象のプログラムの手続き中の変数に対して実行時に与えられる実際の値の統計情報を収集し、その統計情報を用いて手続きの最適化を行うコンパイラ処理に関する。
コンピュータにおけるプログラムのコンパイル処理において、原始プログラムを翻訳し生成した目的プログラムの実行中に、その手続き中の変数に実際に与えられた値とその頻度とを統計情報(プロファイル情報)として記録し、この記録したプロファイル情報を次回以降の翻訳処理において手続きを最適化するために利用する方法がある(例えば、特許文献1参照)。
特許文献1「コンパイラとプログラム最適化方法およびその処理プログラムを記録した記録媒体」に記載されている手法では、各手続きのプロファイルの対象となる変数の1つ1つにプロファイルレコード( 以後単に「レコード」と呼ぶ) が用意される。そして、目的プログラムの実行時にその変数に与えられる値の種別の1つ1つに対し、値と与えられた回数との組を格納するためのレコード中のデータ構造( 以後「値リスト」と呼ぶ) を、単に複数個用意することで、実行時に得られる値を頻度の高い順に保存できるとしているが、特許文献1には、そのように作用する処理の詳細については述べられていない。
しかし、特許文献1に記載された説明に従う限りでは次の二通りが考えられる。
1)従来手法A:先着順に登録
対象プログラムの手続きの実行時に、手続きが呼び出された順に変数に与えられた値を登録してゆき、値の種別がレコードの値リストの個数となった場合には、その時点以降に現れた新しい種別の値は登録しないものとする。
例えば、:sub(x)という1個の引数xを取る手続きの入り口で変数xに与えられた実際の値を記録することを考える。この手続きが10回呼び出されたときに、変数xに与えられた値が次のようだったとする。
x={4,4,4,7,7,10,10,3,6,10}
ここで、値リストの大きさが3であった場合に、3種類目の値“10”が与えられた時点でレコードの全ての値リストには値が格納されているため、それ以降に出現する新しい種類の値(“3”と“6”)は登録しない。したがって、プログラムの終了時点での値リストの状態は以下のようになる。
{値,回数}={4,3},{7,2},{10,3}
2)従来手法B:レコードの値リストが一杯になった時点で最小出現回数の値を切り捨て
対象プログラムの手続きの実行時に、手続きが呼び出された順に変数に与えられた値を登録してゆき、レコードの全ての値リストに値が格納されている場合に、その時点以降に新しい種別の値が現れた場合は、その時点で最も出現回数の少ない値を値リストから追い出し、新しい値を登録する。最も出現回数の少ない値が複数あった場合にはその中から適当に1つの値を選ぶ。
例えば、上記の例と同じ手続きが10回呼び出されたときに、変数xに与えられた値が次のようだったとする。
x={4,4,4,7,7,10,3,6,8,8}
このとき、値リストの大きさが3であった場合に、6回目の呼び出しの時点での値リストの状態は以下のようになる。
{値,回数}={4,3},{7,2},{10,1}
続いて、7回目に新しい値“3”と共に呼び出されたとき、全ての値リストはすでに値が格納されているので、この方法では最も出現回数の少ない値“10”を値リストから追い出して、新しい値“3”を登録する。結果は以下のようになる。
{値,回数}={4,3},{7,2},{3,1}
さらに8回目の呼び出しでは、同様に値“3”が追い出されて代わりに値“6”が登録され、9回目の呼び出しでは同様に値“6”が追い出されて値“8”が登録される。この結果、プログラムの終了時点での値リストの状態は以下のようになる。
{値,回数}={4,3},{7,2},{8,2}
特開平11−149380号公報
上記の2通りの従来手法には、それぞれ以下のような問題点がある。
1)従来手法Aの問題点
上記の処理例において、以下のような順序で値が与えられて手続きが呼ばれた場合に、レコードの値リストには、最も出現回数の高い値が保存されていない可能性がある。
x={1,2,3,4,4,5,5,6,6,6}
この場合であれば、正しくは、以下のような値と回数との組が値リストに保存されていなければならない。
{値,回数}={6,3},{4,2},{5,2}
しかし、実際に保存される組は以下のとおりとなる。
{値,回数}={1,1},{2,1},{3,1}
2)従来手法Bの問題点
上記の処理例でいえば、以下のような順序で値が与えられて手続きが呼ばれた場合に、値リストには最も出現回数の高い値が保存されていない可能性がある。
x={1,3,3,5,5,7,7,1,6,1}
この場合であれば、正しくは、以下のような値と回数との組が値リストに保存されていなければならない。
{値、回数}={1,3},{3,2},{7,2}
または{1,3},{3,2},{5,2}
しかし、実際に保存される組は以下のとおりとなる。
{値,回数}={3,2},{5,2},{1,1}
または{7,2},{5,2},{1,1}
または{7,2},{3,2},{1,1}
なお、実際にはどのような値と回数との組が値リストに保存されるかは、値リストが一杯になった時点でどの組を捨てるかによって変わることになる。
いずれの従来方法においても、手続きの実行時に得られる変数に与えられる値の種別が値リストの個数以上である場合に、値リストに保存された値と回数との組は信頼できないものとなる可能性があることがわかる。
特許文献1では明示的に言及されていないが、値リストの大きさは翻訳時に決定しなければならない。もし翻訳時に値リストの大きさを決定せずに実行時に動的に値リスト用の記憶領域を確保するとすれば、目的プログラム自身が動的に記憶領域を確保する処理を持つ場合に、その処理と干渉して悪影響を及ぼす可能性がある。そのため、例えば、JAVA(米国Sun Microsytems,Inc.の登録商標)のJIT(Just In Time)コンパイラにおける仮想マシンのように、システム側で適切な記憶管理を行える場合を除いて、一般的に安全には実行できない。
したがって、翻訳前に、値リストの大きさを、変数に与えられる値の種別数より十分に大きくして決定しておくことは実際上不可能である。
本発明の目的は、上記の問題点に鑑みて、プログラムのコンパイル処理において、翻訳対象のプログラムの実行中に、その手続きの変数に与えられる値であって50%以上の出現頻度のものについてのプロファイル情報を確実に収集できるコンパイル処理をコンピュータに実行させるための処理プログラムを提供することである。
さらに、上記の処理プログラムにより収集したプロファイル情報を利用して最適化を行えるコンパイル処理をコンピュータに実行させるための処理プログラムを提供することである。
さらに、上記の処理プログラムを記録した記録媒体、および、上記処理プログラムで実行される処理を実現できる処理方法ならびに処理装置を提供することである。
上記の問題点を解決するため、本発明は、プログラム言語で記述されたプログラムを翻訳してコンピュータが実行可能な目的プログラムを生成するコンパイル処理を、コンピュータに実行させるためのコンパイル処理プログラムにおいて、以下の処理を行うものである。
本発明は、プログラム内の全ての基本ブロックおよび変数に固有の識別情報を付与する処理と、以下の一次プロファイル処理と最終プロファイル処理とをコンピュータに実行させるものである。
一次プロファイル処理では、第1回目のプログラム翻訳時に、前記プログラムの実行中に基本ブロック内の変数各々に対して、前記変数に与えられる値と前記値が与えられる回数との組を格納するレコードを2つ設けて、当該変数に与えられる値が前記レコードに格納されていない場合に、前記レコードのうち回数がより少ないレコードに当該値と回数の値1との組を記録し、当該変数に与えられる値が前記レコードに格納されている場合に、当該値を格納するレコードの回数を1加算した値を記録する統計処理を行う命令列と、前記プログラムの実行終了後に前記レコードに記録された情報を一次プロファイル情報として出力する一次プロファイル出力処理を行う命令列とを、前記プログラムに付加する処理と、第1回目のプログラム実行の終了後に、前記一次プロファイル情報を記憶部に記憶する処理とをコンピュータに実行させる。
最終プロファイル処理では、第2回目のプログラム翻訳時に、前記一次プロファイル情報を読み込み、前記プログラム実行中に前記変数各々に対して、前記与えられる値と前記変数が与えられる回数との組を格納するレコードを2つ設けて、各変数のレコードに前記一次プロファイル情報の与えられた値を設定し、前記プログラムの実行中に当該設定された値の出現回数を前記レコードに記録し、前記変数が含まれる基本ブロックの実行回数を格納するカウンタを設けて、前記基本ブロックの実行回数をカウンタに記録する統計検証処理を行う命令列と、前記プログラムの実行終了後に前記レコード出現回数と前記カウンタの実行回数とを最終プロファイル情報として出力する最終プロファイル出力処理を行う命令列とを、前記プログラムに付加する処理と、前記第2回目のプログラム実行の終了後に、出力された前記最終プロファイル情報を記憶部に記憶する処理とをコンピュータに実行させる。
また、本発明は、上記の処理プログラムを記録した記録媒体、または上記の処理を実現する処理方法ならびに処理装置である。
本発明は、原始プログラムから生成された目的プログラムの実行中に、その手続きの変数に与えられる値であって50%以上の出現頻度のものについてのプロファイル情報を収集するために、コンパイル処理において以下の2つの処理を行う。
(1)一次プロファイル処理
本発明では、まず、翻訳対象のプログラムの手続き中の変数に与えられる値のうち出現頻度が50%以上となりうる値を記録する処理(統計処理)を、翻訳対象のプログラムの適切な位置に挿入する処理を行う。ここで、統計処理の結果を記録するレコードとして、値リストの大きさを2に固定したレコードを用意する。
そして、翻訳対象プログラムの実行中に、変数に対する出現頻度が50%以上になりうる値をレコードに記録し、レコードに記録された2つの値を一次プロファイル情報として出力する。
なお、出現頻度が50%以上になりうる値を記録する統計処理は、従来手法Bと同様の手法とする。すなわち、2つの値レコードに既に値が格納されている場合には、その時点以降に新しい種別の値が現れたときは、その時点で出現回数の少ない値を値リストから追い出し、新しい値を格納する。
ここでは、後の統計検出処理において出現頻度が50%以上になりうる値が記録されるようにするだけでよく、その出現回数を正確に記録する必要はない。例えば、上記の手続きsub(x)の例で、仮引数xに与えられた値が以下のようなものだったとする。
x={1,2,2,3,1,3,3,1,1,1}
この場合に、実際に保存される組は以下のようになり、出現頻度50% の値“1”が記録される。
{値,回数}={2,2},{1,3}または{3,2},{1,3}
つまり、ある特定の値の出現頻度が50%以上になりうるものであるならば、その値は、実行中の出現間隔が一時的にまばらな期間があるために一旦値リストから追い出されたとしても、実行中のいつかの時点で十分な頻繁さで出現するために必ず値リストに再格納されるので、大きさ2の値リストを持つレコードに記録されることになるからである。
しかし、このような統計処理だけでは、以下のような2つの問題点がある。
1) 値の出現回数は正しくない、すなわち実際より低く見積もられることがある。
2) 値リストには出現頻度が50%未満の値も登録されることがある。
そこで、最終プロファイル処理により、上記の統計処理の処理結果を修正して問題点を解決する。
(2)最終プロファイル処理
本発明では、さらに、1)変数に値を与える処理を含む基本ブロックの実行回数を計測する処理と、2)変数に与えらた値が前記の統計処理で得られたものであった場合に、その値の出現回数を計測する処理との2つの処理(以下、2つの処理を「統計検証処理」とする)を、翻訳対象のプログラムの適切な位置に挿入する処理を行う。
なお、基本ブロックとは、1個以上の命令からなる命令列であって、該命令列の末尾以外に分岐命令がなく、該命令列の先頭以外に分岐命令の分岐先となる命令がない命令列である。
ここで、統計検証処理の結果を記録するレコードとして、統計処理で用いたレコードと同様に値リストの大きさが2に固定されているレコードを用意し、一次プロファイル情報として記憶されている2つの値をレコードの値リストに設定する。
そして、一次プロファイル処理においてプログラムを実行したときと同じ条件のもとでプログラムを実行し、手続き中の変数に与えられた値が、レコードの値リストに設定された値(ここでは、「2と1のいずれか」または「3と1のいずれか」) と同じである場合のみ、その値の出現回数をカウント(1つ増分)していく。また、手続き呼出し自体の呼出し回数を記録するレコードを設け、手続きの実行回数をカウント(1つ増分)する。そして、プログラムの実行終了後に、レコードの記録から最終プロファイル情報を出力する。
このように、最終プロファイル処理を経た後は、任意の変数に対し、
1)出現頻度が50%以上の値があるかないか、
2)あるとすれば何(値)であるか、
についての統計情報(最終プロファイル情報)が取得できる。
したがって、以降の翻訳処理での最適化において、この最終プロファイル情報を使用することにより目的プログラムの高速化を図ることができる。
以降の翻訳処理において、最終プロファイル情報を参照して最適化を行い、目的プログラムを生成する。例えば、最終プロファイル情報の手続きの実行回数と値の出現回数とをもとに2つの値の出現頻度をそれぞれ算出し、出現頻度が50%以上である値について、その値が与えられる変数を含む手続きを、予測した動作を行うように特殊化する最適化を行う。
本発明によれば、原始プログラムを翻訳して目的プログラムを生成するコンパイラの処理において、翻訳対象のプログラムの手続き中の変数に実際に与えられる値とその頻度とをプロファイル情報として記録する場合に、手続き中の変数に与えられる値の出現回数を誤りなく見積もることができ、特に、出現頻度が50%を超える値を確実に記録したプロファイル情報を出力することができる。
よって、実行時に手続き中の変数に対して同一の値が高頻度で与えられるようなプログラムを翻訳処理する場合に、変数に与えられる特定の値により予測される動作を行うような処理に特殊化する最適化を施すことができ、一層高速化、効率化した目的プログラムを生成することができる。
本発明は、プログラムのコンパイルを行う一般的なコンパイル処理装置に利用することが可能であるが、変数に特定の値が参照されやすいようなプログラムについて、高速化な目的プログラムを生成するためのコンパイル処理装置に利用することができる。
例えば、組込み機器制御用のプログラムの最適化かつ高速化な目的プログラムを生成するためのコンパイル処理装置に利用することができる。
具体的には、自動車のエンジン、ブレーキなどの制御用機器では、ある1つの機器が複数の車種やグレードに採用されることが多い。この場合に、車種やグレードによってエンジン形式、車載装置、車体重量などが異なることが多く、制御対象の相違が機器制御用プログラム内のパラメータや外部センサから入力されるデータの典型値に影響することがある。しかし、このようなデータは事前に計算で求めることが困難であり、試走行などにより取得したデータから最適値を求めてプログラムに反映させる作業は、人手により行っていた。
しがたって、本発明をコンパイル処理装置に適用することにより、このような最適値のプログラムへの反映を自動化し、より最適化、高速化した目的プログラムを取得できるため、プログラム開発時における負担の軽減を図ることができる。
本発明の最良の実施の形態として、本発明を、原始プログラムの翻訳処理において、翻訳時に、実行中の手続きの変数に実際に与えられる値に関するプロファイル情報を記録する処理を付加し、目的プログラムの実行中にそのプロファイル情報を収集・出力し、出力されたプロファイル情報を利用して最適化を行うコンパイル処理装置において実施した。
図1は、本発明の一実施例における構成例を示す図である。
コンパイル処理装置1は、解析処理部11、一次プロファイル処理部12、一次プロファイル読み込み部13、最終プロファイル処理部14、最終プロファイル読み込み部15、最適化部16、および目的プログラム生成部17を備える。
解析処理部11は、翻訳対象の原始プログラム4を読み込み、構文やデータを解析し、原始プログラムから中間形式データを生成する処理手段である。
一次プロファイル処理部12は、目的プログラム5の実行中に手続き中の変数に与えられる値のうち出現頻度が50%以上となりうるものをレコード6に記録する統計処理を行う命令列と、実行終了後にレコード6の内容をまとめて一次プロファイル情報31としてファイル出力する処理を行う命令列とを、中間形式データの所定の位置に埋め込む処理手段である。
一次プロファイル読み込み部13は、一次プロファイル情報31を読み込む処理手段である。
最終プロファイル処理部14は、目的プログラム5の変数に値を与える処理を含む基本ブロックの実行回数と、変数に与えられる値であって一次プロファイル情報31に記憶されたものの出現回数とを計測する統計検証処理を行う命令列と、実行終了後にレコード6の内容をまとめて最終プロファイル情報32としてファイル出力する処理を行う命令列とを、中間形式データの所定の位置に埋め込む処理手段である。
最終プロファイル読み込み部15は、最終プロファイル情報32を読み込み、最終プロファイル情報32に設定された変数に与えられる2つの値それぞれについて値の出現頻度を求める処理手段である。
最適化部16は、最終プロファイル情報32を参照して、実行中に手続き中の変数に与えられる値のうち出現頻度が50%以上のものに対し、その値により予測される動作を行うような最適化を行う処理手段である。
目的プログラム生成部17は、中間形式データから目的プログラム5を生成する処理手段である。
目的プログラム5は、実行終了後に、一次プロファイル情報31または最終プロファイル情報32をファイル出力する。
図2に、本発明の処理フローを示す。
コンパイル処理装置1は、原始プログラム4に対して3回の翻訳処理を行い、最後の翻訳処理において最適化した目的プログラム5を生成する。
まず、第1回目の翻訳処理を行うため、コンパイル処理装置1は、一時プロファイル処理部12を実施する指示を受けて起動される。
コンパイル処理装置1は、解析処理部11により、原始プログラム4を読み込み、必要な構文解析やデータ解析などを行い、原始プログラム4を中間形式データに変換する。その際に原始プログラム4内の全ての基本ブロックと変数に固有の番号を振る(ステップS101)。
次に、一次プロファイル処理部12により、プロファイル情報を取るよう指定した変数の1つ1つに対し、以下のような処理を行う(ステップS102)。
まず、一次プロファイル処理部12は、中間形式データのデータ部分にその変数用のレコード6を用意する。そして、レコード6の基本ブロック番号欄と変数番号欄を設定し、中間形式データ内のその変数の定義点の直後に、統計処理を行う命令列を挿入する。
図3(A)に、レコード6の構成例を示す。レコード6は、基本ブロックの固有の番号が設定される基本ブロック番号、基本ブロックが実行された回数が設定される基本ブロック実行カウンタ、変数の固有の番号が設定される変数番号、プログラムの実行中に基本ブロック中のその変数に与えられる値が設定される値Vおよび値Vの出現回数が設定されるカウンタNの2つの項目を持つ2つの値リストAおよび値リストBで構成される。図3(B)は、図3(A)のレコード6のデータ構造体のC言語による記述例である。
その後、目的プログラム生成部17により、中間形式データから目的プログラム5を生成する(ステップS103)。
さらに、人手により、その目的プログラム5を仮に実行する(ステップS104)。目的プログラム5の実行中、ステップS102の処理で挿入された命令列により、以下のような統計処理が行われる。
図4に、統計処理の流れを示す。
まず、目的プログラム5の実行中に変数に与えられた値を取得し(ステップS20)、取得した値がレコード6の値リストAにあるかどうかを判定する(ステップS21)。
取得した値がレコード6の値リストAの値Vaと同じであれば、カウンタNaを1つ増やす(ステップS22)。
一方、取得した値が値リストAになければ、その値がレコード6の値リストBにあるかどうかを判定する(ステップS23)。その値がレコード6の値リストBにあれば、すなわち取得した値が値リストBの値Vbと同じであればカウンタNbを1つ増やし(ステップS24)、カウンタNbの値がカウンタNaの値より大きいかどうかを判定して(ステップS25)、カウンタNbの値がカウンタNaの値より大きければ、値リストAと値リストBとを入れ替える(ステップS26)。
また、ステップS23の処理において、その値がレコード6の値リストBになければ、取得した値を値リストBの値Vbに登録し、カウンタNbの値を1にする(ステップS27)。
実行の終了後、レコード6に記録された値がまとめられ、一次プロファイル情報31としてファイル出力される(ステップS105)。
このようにして、実行中の手続きの変数に与えられる出現頻度が50%以上になりうる値が一次プロファイル情報31として記憶される。
次に、第2回目の翻訳処理を行うため、コンパイル処理装置1は、一時プロファイル読み込み部13および最終プロファイル処理部14を実施する指示を受けて起動される。
まず、解析処理部11により、翻訳対象となる原始プログラム4を読み込み、ステップS101の処理と同様、必要な構文解析、データ解析などを行い、中間形式データに変換する。その際に、プログラム内の全ての基本ブロックと変数に固有の番号を振る(ステップS106)。
次に、一次プロファイル読み込み部13により、一次プロファイル情報31を読み込み、記憶されている2つの値をレコード6に設定する(ステップS107)。
さらに、最終プロファイル処理部14により、プロファイル情報をとるよう指定した変数の1つ1つに対し、以下のような処理を行う(ステップS108)。
まず、最終プロファイル処理部14は、中間形式データのデータ部分にその変数用のレコード6を用意する。なお、レコード6は、前記の統計処理において使用したものと同じデータ構造体である。そして、レコード6の基本ブロック番号欄と変数番号欄を設定し、一時プロファイル情報31から得た2つの値を、値リストAおよび値リストBにそれぞれ設定する。さらに、中間形式データ内のその変数の定義点の直後に、統計検証処理を行う命令列を挿入する。
その後、目的プログラム生成部17により、中間形式データから目的プログラム5を生成する(ステップS109)。さらに、人手により、目的プログラム5を仮に実行する(ステップS110)。目的プログラム5の実行中、ステップS108の処理で挿入された命令列により、以下のような統計検証処理が行われる。
図5に、挿入された命令列による統計検証処理の流れを示す。
まず、基本ブロックの実行回数カウンタを1つ増やす(ステップS30)。そして、実行中に手続き中の変数に与えられた値を取得し(ステップS31)、取得した値がレコード6の値リストAにあるかどうかを判定する(ステップS32)。
取得した値がレコード6の値リストAの値Vaと同じであれば、カウンタNaを1つ増やす(ステップS33)。
一方、取得した値が値リストAになければ、その値がレコード6の値リストBにあるかどうかを判定する(ステップS34)。
そして、その値がレコード6の値リストBにあれば、すなわち取得した値が値リストBの値Vbと同じであればカウンタNbを1つ増やす(ステップS35)。
実行の終了後、レコード6に記録された値がまとめられ、最終プロファイル情報32としてファイル出力される(ステップS111)。
このようにして、統計処理で抽出された2つの値の出現回数と、その値が与えられる変数を含む手続きの実行回数とが最終プロファイル情報32として記憶される。
次に、第3回目の翻訳処理を行うため、コンパイル処理装置1は、最終プロファイル読み込み部15および最適化部16を実施する指示を受けて起動される。
まず、解析処理部11により、翻訳対象となる原始プログラム4を読み込み、ステップS101の処理と同様、必要な構文解析、データ解析などを行い、中間形式データに変換する。その際に、プログラム内の全ての基本ブロックと変数に固有の番号を振る(ステップS112)。
次に、最終プロファイル読み込み部15により、最終プロファイル情報32を読み込み、統計検証処理において設定された値リストAおよび値リストBの値について、それぞれの実行回数カウンタの値(NaまたはNb)を基本ブロック実行カウンタで割り、それぞれの値の出現頻度を求める(ステップS113)。
そして、値リストAまたは値リストBの値のうち出現頻度が50%以上の値があれば、最適化部16により、その値を利用した最適化を行う(ステップS114)。そして、目的プログラム生成部17により、目的プログラム5を生成する(ステップS115)。
図6に、最終プロファイル情報32を用いた最適化の例を示す。
図6(A)は、最適化前の原始プログラム4のある一部を示す。原始プログラム4の部分に記述されている関数fooは、2つの整数引数をとり、その商を返す関数である。例えば、最終プロファイル読み込み部15により、最終プロファイル情報32を参照して、関数fooの変数yのとりうる値が50%以上の確率で「17」であることが判明したとする。
最適化部16は、関数fooについて、高頻度に与えられる変数yの値=17の場合と、それ以外の値の場合とに分けて動作を行い、高頻度の値を固定化して扱い処理速度を高速化する最適化を行う。
図6(B)は、最適化が施されて生成された目的プログラム5の図6(A)に示す部分を、可読性を確保して本発明の効果を明白にするために、原始プログラム4の記述形式で示したものである。図6(B)に示すように、この手続きにおいて頻度が50%以上となる変数yの値=17の場合の処理は、最適化前の処理より高速化される。
このように、高い出現頻度(50%以上)で変数に与えられる値に対して特殊化するような最適化を行うことにより、その変数を含む手続き全体の高速化を図ることができる。結果的に、生成する目的プログラム5の高速化、効率化を図ることができる。
以上、本発明をその実施の形態により説明したが、本発明はその主旨の範囲において種々の変形が可能であることは当然である。
例えば、ステップS113の処理において、一次プロファイル情報31に基づいて設定したレコード6の値の出現頻度を求める割り算処理は、ステップS111の処理において、統計検証処理の結果と一緒に目的プログラム5に挿入して行い、最終プロファイル情報32に記録するようにしてもよい。この場合に、最終プロファイル処理部14は、上記の出現頻度を求める割り算処理を行う命令列を、中間形式データ中に埋め込む。
また、統計処理および統計検証処理は、原始プログラム4に含まれる任意の変数を対象として行うようにしてもよい。この場合に、統計情報の対象とする変数に関する情報が、統計処理開始前にコンパイル処理装置1に与えられるようにする。なお、統計情報の対象とする変数は、ユーザが任意に設定できる。
また、本発明は、コンピュータにより読み取られ実行される処理プログラムとして実施するものとして説明したが、本発明を実現する処理プログラムは、コンピュータが読み取り可能な、可搬媒体メモリ、半導体メモリ、ハードディスクなどの適当な記録媒体に格納することができ、これらの記録媒体に記録して提供され、または、通信インタフェースを介して種々の通信網を利用した送受信により提供されるものである。
本発明の一実施例における構成例を示す図である。 本発明の処理フローを示す図である。 レコードの構成例を示す図である。 挿入された命令列による統計処理の流れを示す図である。 挿入された命令列による統計検証処理の流れを示す図である。 最終プロファイル情報を用いた最適化の例を示す図である。
符号の説明
1 コンパイル処理装置
11 解析処理部
12 一時プロファイル処理部
13 一時プロファイル読み込み部
14 最終プロファイル処理部
15 最終プロファイル読み込み部
16 最適化部
17 目的プログラム生成部
31 一時プロファイル情報
32 最終プロファイル情報
4 原始プログラム
5 目的プログラム
6 レコード

Claims (5)

  1. プログラム言語で記述されたプログラムを翻訳してコンピュータが実行可能な目的プログラムを生成するコンパイル処理を、コンピュータに実行させるためのコンパイル処理プログラムにおいて、
    プログラム内の全ての基本ブロックおよび変数に固有の識別情報を付与する処理と、
    第1回目のプログラム翻訳時に、前記プログラムの実行中に基本ブロック内の変数各々に対して、前記変数に与えられる値と前記値が与えられる回数との組を格納するレコードを2つ設けて、当該変数に与えられる値が前記レコードに格納されていない場合に、前記レコードのうち回数がより少ないレコードに当該値と回数の値1との組を記録し、当該変数に与えられる値が前記レコードに格納されている場合に、当該値を格納するレコードの回数を1加算した値を記録する統計処理を行う命令列と、前記プログラムの実行終了後に前記レコードに記録された情報を一次プロファイル情報として出力する一次プロファイル出力処理を行う命令列とを、前記プログラムに付加する処理と、
    前記第1回目のプログラム実行の終了後に、前記一次プロファイル情報を記憶部に記憶する処理と
    2回目のプログラム翻訳時に、前記一次プロファイル情報を読み込み、前記プログラム実行中に前記変数各々に対して、前記与えられる値と前記変数が与えられる回数との組を格納するレコードを2つ設けて、各変数のレコードに前記一次プロファイル情報の与えられた値を設定し、前記プログラムの実行中に当該設定された値の出現回数を前記レコードに記録し、前記変数が含まれる基本ブロックの実行回数を格納するカウンタを設けて、前記基本ブロックの実行回数をカウンタに記録する統計検証処理を行う命令列と、前記プログラムの実行終了後に前記レコード出現回数と前記カウンタの実行回数とを最終プロファイル情報として出力する最終プロファイル出力処理を行う命令列とを、前記プログラムに付加する処理と、
    前記第2回目のプログラム実行の終了後に、出力された前記最終プロファイル情報を記憶部に記憶する処理とを、
    コンピュータに実行させる
    ことを特徴とする変数の統計処理を行うコンパイル処理プログラム。
  2. さらに、前記最終プロファイル情報を読み込む処理と、
    第3回目のプログラム翻訳時に、前記最終プロファイル情報から取得した前記値の出現回数と前記基本ブロックの実行回数にもとづいて前記値の出現頻度を算出する処理と、
    前記出現頻度が50%以上である場合に、前記値により予測される動作を行う処理に最適化する処理とを、
    コンピュータに実行させる
    ことを特徴とする請求項1記載の変数の統計処理を行うコンパイル処理プログラム。
  3. プログラム言語で記述されたプログラムを翻訳してコンピュータが実行可能な目的プログラムを生成するコンパイル処理を、コンピュータに実行させるためのコンパイル処理プログラムを記録する記録媒体であって、
    プログラム内の全ての基本ブロックおよび変数に固有の識別情報を付与する処理と、
    第1回目のプログラム翻訳時に、前記プログラムの実行中に基本ブロック内の変数各々に対して、前記変数に与えられる値と前記値が与えられる回数との組を格納するレコードを2つ設けて、当該変数に与えられる値が前記レコードに格納されていない場合に、前記レコードのうち回数がより少ないレコードに当該値と回数の値1との組を記録し、当該変数に与えられる値が前記レコードに格納されている場合に、当該値を格納するレコードの回数を1加算した値を記録する統計処理を行う命令列と、前記プログラムの実行終了後に前記レコードに記録された情報を一次プロファイル情報として出力する一次プロファイル出力処理を行う命令列とを、前記プログラムに付加する処理と、
    前記第1回目のプログラム実行の終了後に、前記一次プロファイル情報を記憶部に記憶する処理と
    2回目のプログラム翻訳時に、前記一次プロファイル情報を読み込み、前記プログラム実行中に前記変数各々に対して、前記与えられる値と前記変数が与えられる回数との組を格納するレコードを2つ設けて、各変数のレコードに前記一次プロファイル情報の与えられた値を設定し、前記プログラムの実行中に当該設定された値の出現回数を前記レコードに記録し、前記変数が含まれる基本ブロックの実行回数を格納するカウンタを設けて、前記基本ブロックの実行回数をカウンタに記録する統計検証処理を行う命令列と、前記プログラムの実行終了後に前記レコード出現回数と前記カウンタの実行回数とを最終プロファイル情報として出力する最終プロファイル出力処理を行う命令列とを、前記プログラムに付加する処理と、
    前記第2回目のプログラム実行の終了後に、出力された前記最終プロファイル情報を記憶部に記憶する処理とを、
    コンピュータに実行させるプログラムを記録する
    ことを特徴とする変数の統計処理を行うコンパイル処理プログラム記録媒体。
  4. プログラム言語で記述されたプログラムを翻訳してコンピュータが実行可能な目的プログラムを生成するために、解析処理部と一次プロファイル処理部と一次プロファイル読み込み部と最終プロファイル処理部と最終プロファイル読み込み部とを備えるコンピュータが実行するコンパイル処理方法において、
    前記解析処理部がプログラム内の全ての基本ブロックおよび変数に固有の識別情報を付与する処理過程と、
    前記一次プロファイル処理部が、第1回目のプログラム翻訳時に、前記プログラムの実行中に基本ブロック内の変数各々に対して、前記変数に与えられる値と前記値が与えられる回数との組を格納するレコードを2つ設けて、当該変数に与えられる値が前記レコードに格納されていない場合に、前記レコードのうち回数がより少ないレコードに当該値と回数の値1との組を記録し、当該変数に与えられる値が前記レコードに格納されている場合に、当該値を格納するレコードの回数を1加算した値を記録する統計処理を行う命令列と、前記プログラムの実行終了後に前記レコードに記録された情報を一次プロファイル情報として出力する一次プロファイル出力処理を行う命令列とを、前記プログラムに付加する処理過程と
    前記一次プロファイル読み込み部が、第1回目のプログラム実行の終了後に、前記一次プロファイル情報を記憶部に記憶する処理過程と、
    前記最終プロファイル処理部が、第2回目のプログラム翻訳時に、前記一次プロファイル情報を読み込み、前記プログラム実行中に前記変数各々に対して、前記与えられる値と前記変数が与えられる回数との組を格納するレコードを2つ設けて、各変数のレコードに前記一次プロファイル情報の与えられた値を設定し、前記プログラムの実行中に当該設定された値の出現回数を前記レコードに記録し、前記変数が含まれる基本ブロックの実行回数を格納するカウンタを設けて、前記基本ブロックの実行回数をカウンタに記録する統計検証処理を行う命令列と、前記プログラムの実行終了後に前記レコード出現回数と前記カウンタの実行回数とを最終プロファイル情報として出力する最終プロファイル出力処理を行う命令列とを、前記プログラムに付加する処理過程と、
    前記最終プロファイル読み込み部が、前記第2回目のプログラム実行の終了後に、出力された前記最終プロファイル情報を記憶部に記憶する処理過程とを備える
    ことを特徴とする変数の統計処理を行うコンパイル処理方法。
  5. プログラム言語で記述されたプログラムを翻訳してコンピュータが実行可能な目的プログラムを生成するコンパイル処理装置において、
    プロファイル情報を記憶する記憶部と、
    プログラム内の全ての基本ブロックおよび変数に固有の識別情報を付与する解析処理部と、
    第1回目のプログラム翻訳時に、前記プログラムの実行中に基本ブロック内の変数各々に対して、前記変数に与えられる値と前記値が与えられる回数との組を格納するレコードを2つ設けて、当該変数に与えられる値が前記レコードに格納されていない場合に、前記レコードのうち回数がより少ないレコードに当該値と回数の値1との組を記録し、当該変数に与えられる値が前記レコードに格納されている場合に、当該値を格納するレコードの回数を1加算した値を記録する統計処理を行う命令列と、前記プログラムの実行終了後に前記レコードに記録された情報を一次プロファイル情報として出力する一次プロファイル出力処理を行う命令列とを、前記プログラムに付加する一次プロファイル処理部と
    前記第1回目のプログラム実行の終了後に、前記一次プロファイル情報を記憶部に記憶する一次プロファイル読み込み部
    2回目のプログラム翻訳時に、前記一次プロファイル情報を読み込み、前記プログラム実行中に前記変数各々に対して、前記与えられる値と前記変数が与えられる回数との組を格納するレコードを2つ設けて、各変数のレコードに前記一次プロファイル情報の与えられた値を設定し、前記プログラムの実行中に当該設定された値の出現回数を前記レコードに記録し、前記変数が含まれる基本ブロックの実行回数を格納するカウンタを設けて、前記基本ブロックの実行回数をカウンタに記録する統計検証処理を行う命令列と、前記プログラムの実行終了後に前記レコード出現回数と前記カウンタの実行回数とを最終プロファイル情報として出力する最終プロファイル出力処理を行う命令列とを、前記プログラムに付加する最終プロファイル処理部と、
    前記第2回目のプログラム実行の終了後に、出力された前記最終プロファイル情報を記憶部に記憶する最終プロファイル読み込み部を備える
    ことを特徴とする変数の統計処理を行うコンパイル処理装置。
JP2003301039A 2003-08-26 2003-08-26 変数の統計処理を行うコンパイル処理プログラム、およびその記録媒体、およびその処理方法ならびにその処理装置 Expired - Fee Related JP4184900B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2003301039A JP4184900B2 (ja) 2003-08-26 2003-08-26 変数の統計処理を行うコンパイル処理プログラム、およびその記録媒体、およびその処理方法ならびにその処理装置
US10/811,716 US7412696B2 (en) 2003-08-26 2004-03-29 Method, apparatus and computer program for compiling program using statistical information on variables, and recording medium therefor

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003301039A JP4184900B2 (ja) 2003-08-26 2003-08-26 変数の統計処理を行うコンパイル処理プログラム、およびその記録媒体、およびその処理方法ならびにその処理装置

Publications (2)

Publication Number Publication Date
JP2005071135A JP2005071135A (ja) 2005-03-17
JP4184900B2 true JP4184900B2 (ja) 2008-11-19

Family

ID=34213867

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003301039A Expired - Fee Related JP4184900B2 (ja) 2003-08-26 2003-08-26 変数の統計処理を行うコンパイル処理プログラム、およびその記録媒体、およびその処理方法ならびにその処理装置

Country Status (2)

Country Link
US (1) US7412696B2 (ja)
JP (1) JP4184900B2 (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060020574A1 (en) * 2004-07-21 2006-01-26 Mentor Graphics Corporation Area optimization of hardware for algorithms by optimizing sizes of variables of the algorithm
US7809936B2 (en) * 2006-08-02 2010-10-05 Freescale Semiconductor, Inc. Method and apparatus for reconfiguring a remote device
US20080034349A1 (en) * 2006-08-04 2008-02-07 Microsoft Corporation Incremental program modification based on usage data
JP5039948B2 (ja) * 2007-10-30 2012-10-03 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムを最適化するコンパイラ
JP4806060B2 (ja) * 2009-09-15 2011-11-02 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ・プログラム、コンパイル方法及びコンピュータ・システム
JP5719278B2 (ja) 2011-11-11 2015-05-13 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 情報処理装置、プロファイル対象決定プログラム及び方法
US9027006B2 (en) 2012-08-09 2015-05-05 Apple Inc. Value profiling for code optimization
US9760351B2 (en) * 2013-04-02 2017-09-12 Google Inc. Framework for user-directed profile-driven optimizations
US9348566B1 (en) * 2014-01-02 2016-05-24 Google Inc. Continuous profiling for automatic feedback directed optimization

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5752035A (en) * 1995-04-05 1998-05-12 Xilinx, Inc. Method for compiling and executing programs for reprogrammable instruction set accelerator
US5815720A (en) * 1996-03-15 1998-09-29 Institute For The Development Of Emerging Architectures, L.L.C. Use of dynamic translation to collect and exploit run-time information in an optimizing compilation system
JPH11149380A (ja) 1997-11-18 1999-06-02 Hitachi Ltd コンパイラとプログラム最適化方法およびその処理プログラムを記録した記録媒体

Also Published As

Publication number Publication date
JP2005071135A (ja) 2005-03-17
US7412696B2 (en) 2008-08-12
US20050050532A1 (en) 2005-03-03

Similar Documents

Publication Publication Date Title
JP3664473B2 (ja) プログラムの最適化方法及びこれを用いたコンパイラ
USRE45199E1 (en) Compiler apparatus
US20060064682A1 (en) Compiler, compilation method, and compilation program
JP2007528059A (ja) ソフトウェアのモデル化、抽象、および分析のためのシステムと方法
US8555266B2 (en) Managing variable assignments in a program
US20070094646A1 (en) Static single assignment form pattern matcher
US7917899B2 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
US20040255279A1 (en) Block translation optimizations for program code conversation
JP5583514B2 (ja) バイナリコードを最適化するコンパイル方法、及びそのコンパイラシステム、並びにコンピュータ・プログラム
JP2001282549A (ja) プログラム変換装置及び方法並びに記録媒体
US20100199269A1 (en) Program optimization device and program optimization method
JP2010079894A (ja) トレース操作の修正によるトレースのオーバーヘッドの削減
JPH11212797A (ja) プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
WO2002010909A2 (en) Methods and apparatus for compiling computer programs using partial function inlining
JP4184900B2 (ja) 変数の統計処理を行うコンパイル処理プログラム、およびその記録媒体、およびその処理方法ならびにその処理装置
JP2012510661A (ja) 逐次コンピュータプログラムコードを並列処理する方法及びシステム
JP5048949B2 (ja) 非同期プログラムフローのモデリングを含むソフトウェアツール
JP3539613B2 (ja) ループ飛び出し文を含むループに対する配列サマリ解析方法
JP4462676B2 (ja) プログラム変換装置、コンパイラ装置およびプログラム変換プログラムを記録したコンピュータ読み取り可能な記録媒体
EP1164477A2 (en) A loop optimization method and a compiler
JPWO2004036463A1 (ja) コンパイラ及び論理回路の設計方法
US20050144605A1 (en) Information processing system and code generation method
WO2017204139A1 (ja) データ処理装置、データ処理方法、およびプログラム記録媒体
JP7407192B2 (ja) フィールド・プログラマブル・ゲート・アレイのためのコードを最適化する方法および装置
US20170344351A1 (en) Information processing apparatus, compiling management method, and recording medium

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20051026

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20080313

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080527

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080728

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20080728

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20080728

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20080902

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080904

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110912

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees