JP2011039857A - プログラム変換処理装置、データ処理装置、プログラム変換処理方法およびデータ処理方法 - Google Patents

プログラム変換処理装置、データ処理装置、プログラム変換処理方法およびデータ処理方法 Download PDF

Info

Publication number
JP2011039857A
JP2011039857A JP2009187623A JP2009187623A JP2011039857A JP 2011039857 A JP2011039857 A JP 2011039857A JP 2009187623 A JP2009187623 A JP 2009187623A JP 2009187623 A JP2009187623 A JP 2009187623A JP 2011039857 A JP2011039857 A JP 2011039857A
Authority
JP
Japan
Prior art keywords
reuse
instruction
execution
history
unit
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.)
Abandoned
Application number
JP2009187623A
Other languages
English (en)
Inventor
Motofumi Kashiwatani
元史 柏谷
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.)
Sony Corp
Original Assignee
Sony Corp
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 Sony Corp filed Critical Sony Corp
Priority to JP2009187623A priority Critical patent/JP2011039857A/ja
Priority to KR1020127003143A priority patent/KR20120068824A/ko
Priority to TW099126111A priority patent/TW201124910A/zh
Priority to US13/389,134 priority patent/US20120185859A1/en
Priority to CN2010800349313A priority patent/CN102667715A/zh
Priority to PCT/JP2010/063246 priority patent/WO2011018974A1/ja
Priority to EP10808157A priority patent/EP2466453A1/en
Publication of JP2011039857A publication Critical patent/JP2011039857A/ja
Abandoned legal-status Critical Current

Links

Images

Abstract

【課題】値再利用(メモ化:Memoization)の効率を改善させる。
【解決手段】再利用候補区間解析部612は、再利用候補区間に関する使用態様を解析する。再利用度生成部621は、再利用候補区間解析部612から供給された解析結果に基づいて、再利用候補区間の実行結果が再び利用される度合いを示す再利用度を生成する。再利用命令変換部623は、再利用度生成部621から供給された再利用度に基づいて、実行結果を再利用させる再利用候補区間の呼出し命令を再利用命令に変換する。これにより、再利用される確率の高い再利用候補区間だけを再利用命令によって呼び出すようにソースプログラムを変換する。
【選択図】図1

Description

本発明は、プログラム変換処理装置に関し、特に実行結果が再利用される命令区間の呼出し命令を再利用命令に変換するプログラム変換処理装置、データ処理装置、および、これらにおける処理方法に関する。
プログラムの処理速度を高速化するために種々の技術が開発されている。近年、その技術を用いた装置の一つとして、値再利用(メモ化:Memoization)と呼ばれる命令区間の実行結果を再利用する技法を用いた区間再利用装置が提案されている(例えば、特許文献1参照。)。この区間再利用装置は、プログラムの所定の命令区間における入力値および実行結果を保存しておくことによって、同じ命令区間を再び実行する際に入力値が一致する場合には、保存していた実行結果である出力値を出力する装置である。
特開2004−258905号公報(図1)
上記の従来技術では、同じ命令区間を再び実行して実行結果を出力する前に保存していた実行結果を出力することによって、その命令区間の実行時間を削減することができる。しかしながら、このような区間再利用装置は、再び実行されない命令区間における実行結果も保存するため、実行結果を保存するメモリの浪費や実行結果の無駄な検索が多くなることによって値再利用の効率が悪くなることが考えられる。
そこで、本発明はこのような状況に鑑みてなされたものであり、値再利用の効率を改善することを目的とする。
本発明は、上記課題を解決するためになされたものであり、その第1の側面は、プログラムにおける命令区間の使用態様を解析する解析部と、上記命令区間の実行結果が再び利用される度合いを示す再利用度を上記解析の結果に基づいて生成する再利用度生成部と、上記命令区間の呼出し命令を上記再利用度に基づいて再利用命令に変換する命令変換部とを具備するプログラム変換処理装置およびプログラム変換処理方法である。これにより、実行結果が再び利用される度合いを示す再利用度に基づいて命令区間の呼び出し命令を再利用命令に変換させるという作用をもたらす。
また、この第1の側面において、上記解析部は、上記使用態様として上記命令区間の入力値の個数を解析し、上記再利用度生成部は、上記解析の結果に基づいて上記再利用度を生成するようにしてもよい。これにより、命令区間の入力値の個数に基づいて再利用度を生成させるという作用をもたらす。
また、この第1の側面において、上記解析部は、上記使用態様として上記命令区間の入力値が採り得る値の組合せを解析し、上記再利用度生成部は、上記解析の結果に基づいて上記再利用度を生成するようにしてもよい。これにより、命令区間の入力値の採り得る値の組み合わせに基づいて再利用度を生成させるという作用をもたらす。
また、この第1の側面において、上記解析部は、上記使用態様として上記命令区間の呼び出される回数を解析し、上記再利用度生成部は、上記解析の結果に基づいて上記再利用度を生成するようにしてもよい。これにより、命令区間の呼び出される回数に基づいて再利用度を生成させるという作用をもたらす。
また、この第1の側面において、上記命令区間は関数であり、上記解析部は上記使用態様として上記関数の入力値および呼び出される回数を解析し、上記再利用度生成部は、上記解析の結果に基づいて上記再利用度を生成するようにしてもよい。これにより、関数の入力値および呼び出される回数に基づいて再利用度を生成させるという作用をもたらす。
また、この第1の側面において、上記命令区間はループであり、上記解析部は上記使用態様として上記ループの入力値および呼び出される回数を解析し、上記再利用度生成部は、上記解析の結果に基づいて上記再利用度を生成するようにしてもよい。これにより、ループの入力値および呼び出される回数に基づいて再利用度を生成させるという作用をもたらす。
また、この第1の側面において、上記解析部は、上記使用態様として上記命令区間の上記入力値がメモリアクセスを伴うか否かを解析し、上記再利用度生成部は、上記命令区間の上記入力値がメモリアクセスを伴う場合には当該メモリアクセスを伴わない上記入力値を用いる場合と比較して低い上記度合いを示す上記再利用度を生成するようにしてもよい。これにより、メモリアクセスを伴う入力値がある命令区間に対して低い再利用度を生成させるという作用をもたらす。
また、この第1の側面において、上記命令変換部は、上記再利用度と上記命令区間の上記実行結果を保持するためのデータである実行履歴のデータ量と上記実行履歴が保持される履歴メモリの容量とに基づいて、上記命令区間の上記データ量の総和が上記履歴メモリの容量以内となるように上記再利用度が最も高い上記命令区間から順に上記呼出し命令を上記再利用命令に変換するようにしてもよい。これにより、実行履歴のデータ量の総和が履歴メモリの容量以内となるように再利用度が最も高い命令区間から順に呼出し命令を再利用命令に変換させるという作用をもたらす。
また、この第1の側面において、上記実行履歴が上記履歴メモリに保持される際の優先度を上記再利用度に基づいて生成する優先度生成部をさらに具備し、上記命令変換部は、上記命令区間の呼出し命令を上記優先度が含まれる上記再利用命令に変換するようにしてもよい。これにより、実行結果を再利用する命令区間の呼出し命令を優先度が含まれる再利用命令に変換させるという作用をもたらす。
また、本発明の第2の側面は、複数の命令区間のうち実行結果が再び利用される再利用区間を指定する再利用命令により呼び出された上記再利用区間における処理を実行し、上記再利用区間の区間識別情報と上記再利用区間の入力値と上記再利用区間の実行結果とを実行履歴として出力する実行部と、上記実行履歴を保持する履歴メモリとを具備するデータ処理装置およびデータ処理方法である。これにより、再利用命令により呼び出された再利用区間の実行履歴を保持させるという作用をもたらす。
また、この第2の側面において、上記実行部は、上記複数の命令区間のうち再び利用される度合いに基づいて抽出された命令区間を指定する上記再利用命令により呼び出された上記再利用区間における処理を実行し、上記実行履歴を出力するようにしてもよい。これにより、実行結果が再利用される度合いに基づいて決定された再利用区間の実行履歴を出力させるという作用をもたらす。この場合において、上記再利用区間は関数であり、上記実行部は、上記区間情報と上記再利用区間の入力値と上記再利用区間の実行結果として上記関数の開始アドレスと上記関数の入力値と上記関数の実行結果とを出力するようにしてもよい。これにより、関数の開始アドレスと入力値と実行結果とを出力させるという作用をもたらす。この場合において、上記再利用区間はループであり、上記実行部は、上記区間情報と上記再利用区間の入力値と上記再利用区間の実行結果として上記ループの開始アドレスと上記ループの入力値と上記ループの実行結果とを出力するようにしてもよい。これにより、ループの開始アドレスと入力と実行結果とを出力させるという作用をもたらす。
また、この第2の側面において、上記区間識別情報と上記再利用区間の入力値とを用いて上記履歴メモリから上記実行結果が検索された場合には上記実行結果を出力する履歴検索部をさらに具備するようにしてもよい。これにより、履歴メモリにおいて実行結果が検索された場合には、実行結果を出力させるという作用をもたらす。
また、この第2の側面において、上記実行結果が再利用される度合いの順位を示す優先度および上記実行履歴の上記履歴メモリにおけるアドレスを優先度情報として保持する優先度テーブルと、上記優先度テーブルから上記優先度が最も低い上記優先度情報を消去候補情報として検索する最低優先度履歴検索部と、上記実行部が上記履歴メモリに新たな実行履歴を保持しようとしている場合には上記消去候補情報の上記優先度と上記新たな実行履歴の上記優先度とを比較する優先度比較部と、上記消去候補情報の上記優先度が上記新たな実行履歴の上記優先度より低い場合には上記消去候補情報の上記アドレスに基づいて上記実行履歴を上記履歴メモリから消去する消去部とをさらに具備するようにしてもよい。これにより、新たな実行履歴の優先度より消去候補情報の優先度が低い場合には、消去候補情報が指し示す実行履歴を履歴メモリから消去させるという作用をもたらす。この場合において、上記履歴メモリの空き容量を管理する履歴メモリ管理部をさらに具備し、上記優先度比較部は、上記新たな実行履歴のデータ量が上記履歴メモリの空き容量よりも大きい場合には上記消去候補情報の上記優先度と上記新たな実行履歴の上記優先度とを比較するようにしてもよい。これにより、新たな実行履歴のデータ量が履歴メモリの空き容量よりも大きい場合に優先度を比較させるという作用をもたらす。
本発明によれば、値再利用の効率を改善することができるという優れた効果を奏し得る。
本発明の第1の実施の形態におけるコンパイル処理装置500の構成例を示すブロック図である。 本発明の第1の実施の形態において再利用候補区間抽出部611が再利用候補区間を抽出する際に、再利用候補区間から除外される関数の一例を示す模式図である。 本発明の第1の実施の形態における再利用候補区間解析部612により引数の個数を使用態様として解析する場合における再利用度生成部621による再利用度の生成例を示す模式図である。 本発明の第1の実施の形態における再利用候補区間解析部612により引数の型を使用態様として解析する場合における再利用度生成部621による再利用度の生成例を示す模式図である。 本発明の第1の実施の形態における再利用候補区間解析部612により定数と変数とで異なる引数を使用態様として解析する場合における再利用度生成部621による再利用度の生成例を示す模式図である。 本発明の第1の実施の形態における再利用候補区間解析部612により引数の採る値の組合せを使用態様として解析する場合における再利用度生成部621による再利用度の生成例を示す模式図である。 本発明の第1の実施の形態における再利用候補区間解析部612により関数の呼び出される回数を使用態様として解析する場合における再利用度生成部621による再利用度の生成例を示す模式図である。 本発明の第1の実施の形態における再利用候補区間解析部612によりメモリアクセスを伴う引数の有無を使用態様として解析する場合における再利用度生成部621による再利用度の生成例を示す模式図である。 本発明の第1の実施の形態におけるプログラム変換処理部600の第1の動作例を示すプログラムの模式図である。 本発明の第1の実施の形態における関数の呼出し命令および関数の再利用命令の一例を示す概念図である。 本発明の第1の実施の形態におけるコンパイル処理装置500によるコンパイル処理の処理手順を示すフローチャートである。 本発明の第2の実施の形態におけるデータ処理装置100の構成例を示すブロック図である。 本発明の第2の実施の形態におけるプロセッサコア300および履歴管理部400の構成例を示すブロック図である。 本発明の第2の実施の形態における履歴メモリ430のデータ構造の一例を示す概念図である。 本発明の第2の実施の形態におけるプロセッサコア300により処理されるプログラムおよび履歴管理部400により保存される実行履歴の一例を示す概念図である。こ 本発明の第2の実施の形態におけるプロセッサコア300および履歴管理部400による関数の実行処理の処理手順を示すフローチャートである。 本発明の第3の実施の形態におけるコンパイル処理装置500の構成例を示すブロック図である。 本発明の第3の実施の形態におけるプログラム変換処理部600による複数の引数が入力値である関数を含むプログラムの変換例を示す模式図である。 本発明の第3の実施の形態における引数の型は同じだが使用態様が異なる関数を含むプログラムのプログラム変換処理部600による変換例を示す模式図である。 本発明の第3の実施の形態における関数の呼出し命令および関数の再利用命令の一例を示す概念図である。 本発明の第1の実施の形態におけるコンパイル処理装置500によるコンパイル処理の処理手順を示すフローチャートである。 本発明の第4の実施の形態におけるプロセッサコア300および履歴管理部400の構成例を示すブロック図である。 本発明の第4の実施の形態における履歴メモリ430のデータ構造の一例を示す概念図である。 本発明の第4の実施の形態における優先度テーブル450のデータ構造の一例を示す概念図である。 本発明の第4の実施の形態におけるプロセッサコア300により処理されるプログラムおよび履歴管理部400により保存される実行履歴の一例を示す概念図である。 本発明の第4の実施の形態におけるプロセッサコア300および履歴管理部400による関数の実行処理の処理手順を示すフローチャートである。 本発明の第4の実施の形態における履歴管理部400による実行履歴の登録処理(ステップS950)の処理手順例を示すフローチャートである。
以下、本発明を実施するための形態(以下、実施の形態と称する)について説明する。説明は以下の順序により行う。
1.第1の実施の形態(コンパイル処理制御:実行履歴のデータ量の総和が履歴メモリの容量以内となるように呼出し命令を再利用命令に変換する例)
2.第2の実施の形態(データ処理制御:実行履歴のデータ量の総和が履歴メモリの容量以内となるように変換された再利用命令に基づいて実行履歴を保持する例)
3.第3の実施の形態(コンパイル処理制御:優先度を含む再利用命令に変換する例)
4.第4の実施の形態(データ処理制御:優先度を含む再利用命令に基づいて実行履歴を保持する例)
<1.第1の実施の形態>
[コンパイル処理装置500の構成例]
図1は、本発明の第1の実施の形態におけるコンパイル処理装置500の構成例を示すブロック図である。このコンパイル処理装置500は、ソースプログラム記憶部510と、再利用アシストコンパイル処理部520と、オブジェクトプログラム記憶部530とを備える。また、ここでは、コンパイル処理装置500が処理する命令区間は関数を想定するものとする。
ソースプログラム記憶部510は、コンパイルを行うソースプログラムを記憶するものである。このソースプログラムは、例えば、実行結果が再び利用される再利用区間が含まれるソースプログラムである。このソースプログラム記憶部510は、記憶したソースプログラムを再利用アシストコンパイル処理部520に供給する。
再利用アシストコンパイル処理部520は、ソースプログラム記憶部510から読み出したソースプログラムをコンパイルすることによって、再利用命令を付した後に、機械語プログラムであるオブジェクトプログラムを生成するものである。ここにいう再利用命令とは、再利用区間と再利用しない区間とを再利用される度合いに基づいて区別することによって、再利用区間が呼出された際に実行結果を再利用するための処理をデータ処理装置に行わせる命令である。この再利用アシストコンパイル処理部520は、その生成したオブジェクトプログラムをオブジェクトプログラム記憶部530に供給する。この再利用アシストコンパイル処理部520は、プログラム変換処理部600およびコード生成部522を備える。
プログラム変換処理部600は、ソースプログラム記憶部510から読み出されたソースプログラムを解析して、最適化することによって、ソースプログラムを再利用命令が含まれる効率の高いプログラムに変換するものである。このプログラム変換処理部600は、ソースプログラム解析部610および最適化部620を備える。なお、プログラム変換処理部600は、特許請求の範囲に記載のプログラム変換処理装置の一例である。
ソースプログラム解析部610は、ソースプログラム記憶部510から読み出されたソースプログラムに基づいて形態素解析や構文解析などを行うものである。また、このソースプログラム解析部610は、解析や最適化に適した形式の中間コードのプログラムを生成した後に、その生成されたプログラムの解析を行う。このソースプログラム解析部610は、再利用候補区間抽出部611および再利用候補区間解析部612を備える。
再利用候補区間抽出部611は、複数の命令区間のうち、実行結果を再利用する再利用区間の候補となる再利用候補区間をプログラムから抽出するものである。この再利用候補区間抽出部611は、関数およびループなどの複数回呼び出される可能性がある命令区間を再利用候補区間として抽出する。
また、この再利用候補区間抽出部611は、入力値が同じでも異なる実行結果になる関数などの実行結果が再利用できる可能性が無い関数を、再利用候補区間から除外する。また、再利用候補区間抽出部611は、例えば、システムコールを含む関数をこの除外される関数として除外する。この再利用候補区間抽出部611は、抽出した再利用候補区間の識別情報をプログラムとともに再利用候補区間解析部612に供給する。
再利用候補区間解析部612は、再利用候補区間抽出部611により抽出された再利用候補区間に関する使用態様を解析するものである。この再利用候補区間解析部612は、例えば、関数およびループの入力値である引数に関する内容と、関数およびループの呼出し回数に関する内容とを使用態様として解析する。また、再利用候補区間解析部612は、例えば、関数およびループの処理内容に基づいて引数の採り得る値の組合せを解析することによって、推定組合せ値を解析結果として出力する。
また、この再利用候補区間解析部612は、最適化部620において実行結果を再利用するためのデータである実行履歴のデータ量を予測する場合には、再利用候補区間を実行した結果である実行結果に関する内容を解析する。この再利用候補区間解析部612は、この解析の結果を、再利用候補区間の識別情報およびプログラムとともに最適化部620に供給する。なお、再利用候補区間解析部612は、特許請求の範囲に記載の解析部の一例である。また、再利用候補区間は、特許請求の範囲に記載の命令区間の一例である。
最適化部620は、再利用候補区間解析部612から供給されたプログラムに基づいて、実行速度の向上のための最適化およびコードサイズの削減のための最適化などのプログラム最適化処理を行うものである。この最適化部620は、再利用度生成部621および再利用命令変換部623を備える。
再利用度生成部621は、再利用候補区間解析部612から供給された解析結果に基づいて、再利用候補区間の実行結果が再び利用される度合いを示す再利用度を生成するものである。この再利用度生成部621は、例えば、再利用候補区間の入力値が採り得る値の組合せに応じて再利用度を生成する。この場合には、再利用候補区間の入力値が採り得る値の組合せが少ないほど再利用される度合いは高くなるため、入力値が採り得る値の組合せを分母とする再利用度を生成する。
この再利用度生成部621は、その生成した再利用度を再利用候補区間の識別情報およびプログラムとともに再利用命令変換部623に供給する。なお、再利用度生成部621は、特許請求の範囲に記載の再利用度生成部の一例である。
再利用命令変換部623は、再利用度生成部621から供給された再利用度に基づいて、実行結果を再利用させる再利用候補区間の呼出し命令を再利用命令に変換するものである。この再利用命令変換部623は、その変換した命令を含む最適化されたプログラムをコード生成部522に供給する。
また、再利用命令変換部623は、例えば、再利用度と、再利用候補区間の実行履歴のデータ量の予測値と、実行履歴が登録される履歴メモリの容量とに基づいて、実行結果を再利用させる再利用区間の呼出し命令を再利用命令に変換する。この例において、再利用命令変換部623は、再利用候補区間の入力値の採り得る値の組合せと、入力値の個数と、実行結果の個数と、入力値および実行結果のビット数とに応じて実行履歴のデータ量の予測値を生成する。そして、再利用命令変換部623は、実行履歴のデータ量の予測値の総和が履歴管理部の容量以内となるように、再利用度が最も高い再利用候補区間から順に呼出し命令を再利用命令に変換する。なお、再利用命令変換部623は、特許請求の範囲に記載の命令変換部の一例である。
コード生成部522は、再利用命令変換部623から供給された最適化されたプログラムに基づいて、機械語プログラムのコードであるオブジェクトプログラムを生成するものである。このコード生成部522は、その生成したオブジェクトプログラムをオブジェクトプログラム記憶部530に供給する。
オブジェクトプログラム記憶部530は、コード生成部522から供給されたオブジェクトプログラムを記憶するものである。
このように、コンパイル処理装置500は、関数の実行結果が再利用される度合いに応じて関数の呼出し命令を再利用命令に変換することによって、再利用される関数と再利用されない関数とが区別できるプログラムを生成する。
なお、ここでは、コンパイル処理装置500は、関数を再利用対象とする例について説明したが、ループに関しても同様に再利用対象とすることができる。例えば、再利用候補区間解析部612は、ループに関しても関数と同様に解析し、再利用度生成部621は、再利用候補区間解析部612の解析結果に基づいて再利用度を生成する。
なお、ここでは、便宜上、再利用候補区間解析部612が再利用候補区間の使用態様を関数毎に解析する例について説明したが、より詳細に使用態様を解析するために関数の呼出し命令毎に解析するものとしてもよい。また、再利用度生成部621についても再利用度を関数毎に生成する例について説明したが、より詳細に解析するために関数の呼出し命令毎に生成するものとしてもよい。この場合において、再利用命令変換部623は、関数は同じであっても関数の呼出し命令毎に異なる再利用度に基づいて、関数の呼出し命令毎に呼出し命令を再利用命令に変換する。
[再利用候補区間抽出部611が再利用候補区間から除外する関数の例]
図2は、本発明の第1の実施の形態において再利用候補区間抽出部611が再利用候補区間を抽出する際に、再利用候補区間から除外される関数の一例を示す模式図である。ここでは、再利用候補区間抽出部611により再利用候補区間から除外される関数が各枠の中にC言語のコードにより示されている。
図2(a)には、再利用候補区間から除外される関数として、システムコールを含む関数(funcA)が示されている。このシステムコールを含む関数(funcA)は、入力値が同じ場合でも実行される度に実行結果が異なる可能性が高い。このため、システムコールを含む関数(funcA)は、再利用区間として用いることができない。したがって、再利用候補区間抽出部611は、再利用候補区間からシステムコールを含む関数を除外する。
図2(b)には、再利用候補区間から除外される関数として、乱数発生関数(rand)が示されている。この乱数発生関数(rand)は、呼出す度にランダムな値を実行結果として出力する関数である。このため、再利用候補区間抽出部611は、再利用候補区間から乱数発生関数を除外する。
このように、再利用候補区間抽出部611は、ソースプログラムを解析する段階において実行結果が再利用される可能性が低い関数を再利用候補区間から除外する。
[再利用候補区間解析部612によって解析される命令区間の使用態様および再利用度生成部621において生成される再利用度の一例]
次に、本発明の第1の実施の形態における再利用候補区間解析部612により解析される命令区間の使用態様の一例および再利用度生成部621により生成される再利用度の関係例について次図を参照して説明する。ここでは、再利用候補区間は関数であると想定する。また、再利用度が大きいものほど再利用される度合いが大きく、再利用命令変換部623において優先的に呼出し命令が再利用命令に変換されるものとする。
[引数の個数に基づく再利用度の生成例]
図3は、本発明の第1の実施の形態における再利用候補区間解析部612により引数の個数を使用態様として解析する場合における再利用度生成部621による再利用度の生成例を示す模式図である。
図3(a)は、引数の個数が異なる関数の一例を示す模式図である。ここには、再利用候補区間抽出部611において抽出された再利用候補区間のうち、入力値である引数の型は同じだが引数の個数は異なる3つの関数(funcA乃至C)が示されている。
この3つの関数としては、int(integer)型の1個の変数を引数とする関数(funcA)と、int型の2個の変数を引数とする関数(funcB)と、int型の3個の変数を引数とする関数(funcC)とがC言語のコードにより示されている。
この3つの関数(funcA乃至C)を解析する場合において、再利用候補区間解析部612は、その3つの関数(funcA乃至C)における引数の個数について関数毎に解析を行う。そして、再利用度生成部621は、再利用候補区間解析部612が解析した引数の個数に基づいて再利用度を生成する。
図3(b)は、図3(a)において示した関数の解析結果に基づいて生成される再利用度の一例を示す模式図である。ここには、図3(a)において示した3つの関数(funcA乃至C)の再利用度の度合いの順序関係が示されている。ここでは、引数が1個の関数(funcA)の再利用度が1番高く、引数が2個の関数(funcB)の再利用度が2番目に高く、引数が3個の関数(funcC)の再利用度が1番低いことが示されている。
このように、引数の型は同じだが引数の個数は異なる複数の関数については、引数の個数が少ない関数ほど入力値が一致する度合いは高くなるため、再利用度生成部621は、引数の個数が最も少ない関数から順に高い度合いを示す再利用度を生成する。
なお、ここでは、再利用度生成部621は入力値の個数に応じて再利用度を生成する場合について説明したが、これに限定されるものではない。例えば、複数の引数を入力値とする関数について再利用度を生成する場合には、再利用度生成部621はそれぞれの引数が採り得る値の組合せに基づいて入力値の組合せを求め、この入力値の組合せの数に応じて再利用度を生成する場合などが考えられる。
[引数の型に基づく再利用度の生成例]
図4は、本発明の第1の実施の形態における再利用候補区間解析部612により引数の型を使用態様として解析する場合における再利用度生成部621による再利用度の生成例を示す模式図である。
図4(a)は、引数の型が異なる関数の一例を示す模式図である。ここには、再利用候補区間抽出部611において抽出された再利用候補区間のうち、引数の個数は同じだが引数の型は異なる3つの関数(funcA乃至C)が示されている。
この3つの関数として、ここでは、1ビットのバイナリ数値データであるbool(Boolean)型の1個の変数を引数とする関数(funcA)がC言語のコードにより示されている。さらに、16ビットのバイナリ文字データであるchar型の1個の変数を引数とする関数(funcB)と、32ビットのバイナリ数値データであるint型の1個の変数を引数とする関数(funcC)とがC言語のコードにより示されている。
この3つの関数(funcA乃至C)を解析する場合において、再利用候補区間解析部612は、この3つの関数における引数の型について関数毎に解析を行う。そして、再利用度生成部621は、再利用候補区間解析部612が解析した引数の型に基づいて再利用度を生成する。
図4(b)は、図4(a)において示した関数の解析結果に基づいて生成される再利用度の一例を示す模式図である。ここには、図4(a)において示した3つの関数(funcA、funcB、および、funcC)の再利用度の度合いの順序関係が示されている。ここでは、bool型の1個の変数を引数とするfuncAの再利用度が1番高く、char型の1個の変数を引数とするfuncBの再利用度が2番目に高く、int型の1個の変数を引数とするfuncCの再利用度が1番低いことが示されている。
このように、引数の個数は同じだが引数の型は異なる複数の関数については、引数の表現力(引数が採り得る値の組合せ)が低い関数ほど入力値が一致する度合いは高くなる。このため、再利用度生成部621は、引数の表現力が最も低い関数から順に高い度合いを示す再利用度を生成する。この引数の表現力は、引数の型のビット数から判断することができる。したがって、再利用度生成部621は、引数の型のビット数が最も少ないものを最も表現力が低い引数と判断し、順に引数の表現力を判断する。
[引数に定数を含む関数に対する再利用度の生成例]
図5は、本発明の第1の実施の形態における再利用候補区間解析部612により定数と変数とで異なる引数を使用態様として解析する場合における再利用度生成部621による再利用度の生成例を示す模式図である。
図5(a)は、引数が定数および変数のいずれである関数の一例を示す模式図である。ここには、引数の個数は同じだが定数の引数および変数の引数として異なる2つの関数を含むメインプログラム(main)が示されている。この2つの関数として、ここでは、1個の定数(0)と複数の変数を引数とする関数(funcA)と、1個のint型の変数(a)とfuuncAと同じ複数の変数を引数とする関数(funcB)とがC言語のコードにより示されている。
この2つの関数(funcAおよびB)を解析する場合において、再利用候補区間解析部612は、この2つの関数における引数が定数および変数のいずれであるかについて関数毎に解析を行う。そして、再利用度生成部621は、再利用候補区間解析部612が解析した結果に基づいて再利用度を生成する。
図5(b)は、図5(a)において示した関数の解析結果に基づいて生成される再利用度の一例を示す模式図である。ここには、図5(a)において示した2つの関数(funcAおよびB)の再利用度の度合いの順序関係が示されている。ここでは、1個の定数(0)と複数の変数を引数とする関数(funcA)の再利用度は、1個のint型の変数(a)と第1の関数と同じ複数の変数を引数とする関数(funcB)の再利用度よりも高ことが示されている。
ここでは、定数が関数の引数に含まれる場合には、定数である引数は1つの値しか入力値とならないため引数の個数から除外することができる。このため、定数の引数の数が増えるほど入力値が一致する度合いは高くなり実行結果が再利用される度合いは高くなる。このため、再利用度生成部621は、引数の個数は同じだが定数が引数として含まれる複数の関数について、定数の引数が最も多い関数から順に高い度合いを示す再利用度を生成する。
なお、ここでは、定数である引数を引数の個数から除外することによって再利用度を生成したが、これだけに限定されるものではない。例えば、定数は入力値の採り得る値を「1」とし、定数の採り得る値と各変数の採り得る値とを掛け合わせることによって、入力値全体の採り得る値の組合せを生成して、その生成された組合せに応じて再利用度を生成する場合などが考えられる。
[引数の採る値の組合せに対する再利用度の生成例]
図6は、本発明の第1の実施の形態における再利用候補区間解析部612により引数の採る値の組合せを使用態様として解析する場合における再利用度生成部621による再利用度の生成例を示す模式図である。
図6(a)は、引数の採る値の組合せが異なる関数の一例を示す模式図である。ここには、再利用候補区間抽出部611において抽出された再利用候補区間のうち、引数の個数および型は同じだが引数が採る値が限定されている2つの関数が示されている。
この2つの関数の一方として、ここでは、1個のint型の変数を引数と定義しているが関数が呼び出される段階で「2」および「3」の2つの値に引数が採る値が限定されている関数(funcA)がC言語のコードにより示されている。他方の関数として、1個のint型の変数を引数と定義しているが関数が呼び出される段階で「2」、「3」、「4」、または、「5」の4つの値に引数が採る値が限定される関数(funcB)がC言語のコードにより示されている。
この2つの関数(funcAおよびB)を解析する場合において、再利用候補区間解析部612は、この2つの関数における引数の採る値の組合せについて関数毎に解析を行う。そして、再利用度生成部621は、再利用候補区間解析部612が解析した引数の型に基づいて再利用度を生成する。
図6(b)は、図6(a)において示した関数の解析結果に基づいて生成される再利用度の一例を示す模式図である。ここには、図6(a)において示した2つの関数(funcAおよびB)の再利用度の度合いの順序関係が示されている。ここでは、「2」および「3」の2つの値に引数が採る値が限定される関数(funcA)の再利用度は、「2」、「3」、「4」、または、「5」の4つの値に引数が採る値が限定される関数(funcB)の再利用度よりも高ことが示されている。
このように、引数の個数および型は同じだが引数の採る値の組合せは異なる複数の関数がある場合には、引数の採る値の組合せがより少ない関数ほど実行結果が再利用される確率は高くなる。このため、再利用度生成部621は、引数の個数および型は同じだが引数の採る値の組合せは異なる複数の関数について再利用度を生成する場合には、引数の採り得る値の組合せが最も少ない関数から順に高い度合いを示す再利用度を生成する。
[関数の呼出し回数に基づく再利用度の生成例]
図7は、本発明の第1の実施の形態における再利用候補区間解析部612により関数の呼び出される回数を使用態様として解析する場合における再利用度生成部621による再利用度の生成例を示す模式図である。
図7(a)は、関数の呼び出される回数が異なる関数の一例を示す模式図である。ここには、再利用候補区間抽出部611において抽出された再利用候補区間のうち、呼び出される回数が異なる2つの関数が示されている。
この2つの関数として、ここでは、1回呼び出される関数(funcA)と、3回呼び出される関数(funcB)とがC言語のコードにより示されている。
この2つの関数(funcAおよびB)を解析する場合において、再利用候補区間解析部612は、この2つの関数における呼び出される回数について関数毎に解析を行う。そして、再利用度生成部621は、再利用候補区間解析部612が解析した呼び出される回数に基づいて再利用度を生成する。
図7(b)は、図7(a)において示した関数の解析結果に基づいて生成される再利用度の一例を示す模式図である。ここには、図7(a)において示した2つの関数(funcAおよびB)の再利用度の度合いの順序関係が示されている。ここでは、3回呼び出される関数(funcB)の再利用度は、1回呼び出される関数(funcA)の再利用度よりも高いことが示されている。
このように、引数の個数および型は同じだが関数が呼び出される回数は異なる複数の関数がある場合には、呼び出される回数がより多い関数ほど実行結果が再利用される確率は高くなる。このため、再利用度生成部621は、引数は同じだが関数が呼び出される回数は異なる複数の関数について、呼び出される回数が最も多い関数から順に高い度合いを示す再利用度を生成する。
[メモリアクセスを伴う引数の有無による再利用度の生成例]
図8は、本発明の第1の実施の形態における再利用候補区間解析部612によりメモリアクセスを伴う引数の有無を使用態様として解析する場合における再利用度生成部621による再利用度の生成例を示す模式図である。
図8(a)は、引数の設定においてメモリアクセスを伴う関数の一例を示す模式図である。ここには、再利用候補区間抽出部611において抽出された再利用候補区間のうち、メモリアクセスを伴う引数の有無が異なる2つの関数が示されている。
この2つの関数のうちの一方として、ここでは、ポインタを備えメモリ領域のアドレスを指定する1個の変数およびその他の複数の変数を引数とする関数(funcA)がC言語のコードにより示されている。他方の関数として、1個のint型の変数およびfuncAと同じその他の複数の変数を引数とする関数(funcB)がC言語のコードにより示されている。
この2つの関数(funcAおよびB)を解析する場合において、再利用候補区間解析部612は、この2つの関数におけるメモリアクセスを伴うか否かについて解析を行う。そして、再利用度生成部621は、再利用候補区間解析部612が解析した結果に基づいて再利用度を生成する。
図8(b)は、図8(a)において示した関数の解析結果に基づいて生成される再利用度の一例を示す模式図である。ここには、図8(a)において示した2つの関数(funcAおよびfuncB)の再利用度の度合いの順序関係が示されている。ここでは、1個のint型の変数およびfuncAと同じその他の複数の変数を引数とするfuncBの再利用度は、メモリ領域のアドレスを指定する1個の変数およびその他の複数の変数を引数とするfuncAの再利用度よりも高いことが示されている。
このように、ポインタを備えメモリ領域のアドレスを指定する引数は、その指定しているアドレスおよび指定先のアドレスの値が2つとも一致しないと実行結果を再利用することができない。すなわち、引数の個数および型は同じだが引数のポインタの有無は異なる複数の関数が再利用候補区間である場合には、ポインタを備える引数がより少ない関数ほど実行結果が再利用される確率は高くなる。
このため、再利用度生成部621は、ポインタを備えメモリ領域のアドレスを指定する引数の個数が異なる複数の関数について再利用度を生成する場合には、ポインタを備える引数が最も少ない関数から順に高い度合いを示す再利用度を生成する。すなわち、再利用度生成部621は、関数がポインタを備える変数によりメモリアドレスを指定してメモリアクセスを伴う変数を引数とする場合にはポインタを備える変数を引数とする関数と比較して低い度合いを示す再利用度を生成する。
この図5乃至10において示すように、再利用候補区間解析部612は、再利用候補区間の使用態様を解析し、再利用度生成部621はその解析結果に基づいて再利用度を生成する。
なお、図5乃至10では、再利用候補区間解析部612は、再利用候補区間の使用態様を関数毎に解析し、再利用度生成部621は関数毎に再利用度を生成する場合について説明したが、これだけに限定されるものではない。例えば、再利用候補区間解析部612は、関数の呼出し命令毎に呼び出される関数の使用態様を解析し、再利用度生成部621は関数の呼出し命令毎に再利用度を生成する場合などが考えられる。
[本発明の第1の実施の形態におけるプログラム変換処理部600の動作例]
次に、本発明の第1の実施の形態におけるプログラム変換処理部600の動作について図面を参照して説明する。
図9は、本発明の第1の実施の形態におけるプログラム変換処理部600の第1の動作例を示すプログラムの模式図である。ここでは、再利用候補区間解析部612は、図3乃至図8において示した使用態様を解析するものと想定する。さらに、ここでは、再利用候補区間解析部612は、再利用候補区間の処理内容を解析することによって引数の採り得る値の組合せが推測できる場合には、その推測した推測組合せ値を解析結果として出力するものとする。
また、図9では、再利用命令変換部623は、再利用度と、プログラムに書き込まれた実行履歴が登録される履歴メモリの容量と、予測される実行履歴のデータ量とに基づいて命令区間の呼出し命令を再利用命令に変換するものとする。さらに、ここでは、命令区間は関数であり、呼出し命令はアセンプリ言語で表現した場合の「call」命令を想定し、再利用命令はアセンブリ言語で「memocall」と表現することを想定する。そして、ここでは、各関数の実行結果は、入力値と同じ型の1個の変数であることを想定する。
図9(a)には、データ処理装置100が容量の小さい履歴メモリを備える場合におけるプログラム変換処理部600の動作例が示されている。ここでは、右矢印に対して左側にある枠の中には、プログラム変換処理部600に処理される前のソースプログラムの一例がC言語により示されている。また、右矢印に対して右側にある枠の中には、プログラム変換処理部600に処理されたプログラムの一例がアセンブリ言語により示されている。
なお、図9(a)では、履歴メモリは、1個のbool型の変数を引数とすることによって、1個のbool型の実行結果を出力する関数の実行履歴を5個ほど保持するのに十分な容量であるとする。さらに、履歴メモリは、1個のchar型の変数を引数とすることによって1個のchar型の実行結果を出力する関数の実行履歴は、1個も保持できない容量であると想定する。
ソースプログラムには、プログラムのメインの関数(funcX)と、そのメインの関数により呼び出される3つの関数とが示されている。この3つの関数として、bool型の1個の変数を引数とする関数(funcA)と、char型の1個の変数を引数とする関数(funcB)と、int型の1個の変数を引数とする関数(funcC)とが表されている。
まず、プログラム変換処理部600の再利用候補区間抽出部611は、ソースプログラムから再利用候補区間を抽出する。このソースプログラムにおいては、bool型の引数を持つ関数(funcA)、char型の引数を持つ関数(funcB)およびint型の引数を持つ関数(funcC)が再利用候補区間として抽出される。
次に、再利用候補区間解析部612は、抽出された3つの関数(funcA乃至C)の使用態様を解析する。これにより、funcAの引数がbool型の1個の変数と解析され、funcBの引数がchar型の1個の変数と解析され、funcCの引数がint型の1個の変数と解析される。
また、再利用候補区間解析部612は、関数の処理内容に基づいて引数の採り得る値の組合せを推定する。このプログラムにおいて、再利用候補区間解析部612は、funcBに関しては、実行結果が50個と推定し、funcAおよびfuncCについては、実行結果が推定できなかったとする解析結果を出力することを想定する。
この場合において、再利用度生成部621は、再利用候補区間解析部612からの解析結果に基づいて再利用度を生成する。この再利用度生成部621は、例えば、bool型の引数を持つ関数(funcA)に関しては、bool型の1個の変数が引数であるため、その引数に関する解析結果から、最大2個の実行履歴を生成する関数と判断する。
また、再利用度生成部621は、char型の引数を持つ関数(funcB)に関しては、char型の1個の変数が引数であるため、その引数に関する解析結果から、最大216個の実行履歴を生成すると判断する。さらに、int型の引数を持つ関数(funcC)に関しては、int型の1個の変数が引数であるため、引数に関する解析結果から、最大232個の実行履歴を生成する関数と判断する。これらの判断とともに、再利用度生成部621は、関数の処理内容に基づいて推定された推定組合せ値を用いて実行履歴の量を判断する。
その結果、この再利用度生成部621は、bool型の引数を持つ関数(funcA)は実行履歴が最大2個と、char型の引数を持つ関数(funcB)は実行履歴が最大50個と、int型の引数を持つ関数(funcC)は実行履歴が最大232個と判断する。これにより、再利用度生成部621は、bool型の引数を持つfuncAの再利用度が1番高く、char型の引数を持つfuncBの再利用度が2番目に高く、int型の引数を持つfuncCの再利用度が1番低い度合いの再利用度を生成する。
次に、再利用命令変換部623は、再利用度に基づいて命令区間の呼出し命令を再利用命令に変換する。この場合において、再利用命令変換部623は、履歴メモリの容量をプログラムに書き込まれたコードより検出する。また、再利用命令変換部623は、再利用候補区間である3つの関数(funcA乃至C)の予測される実行履歴のデータ量を、入力値が採り得る値の組合せと、実行結果の個数と、入力値および実行結果のビット数より関数毎に予測する。
そして、再利用命令変換部623は、再利用度が最も高い関数から順に履歴メモリに登録される関数を設定する。この時、再利用命令変換部623は、再利用候補区間の予測される実行履歴のデータ量の総和が履歴メモリの容量以内になるように履歴メモリに保持する関数を設定し、その関数の呼出し命令(call)を再利用命令(memocall)に変換する。
その結果、この再利用命令変換部623は、bool型の引数を持つfuncAに関しては、全ての実行履歴を履歴メモリに登録できると解析して、funcAの呼出し命令(call)を再利用命令(memocall)に変換する。次に、この再利用命令変換部623は、再利用命令に変換した関数(funcA)の実行履歴のデータ量を履歴メモリ保持させた場合には、char型の引数を持つfuncBの実行履歴は1個も登録できないと判断する。そのため、再利用命令変換部623は、funcBの呼出し命令(call)は再利用命令(memocall)に変換しない。
また、再利用命令変換部623は、char型の引数を持つfuncBと同様に、int型の引数を持つfuncCに関してもfuncCの実行履歴は1個も保持できないと判断し、funcCの呼出し命令(call)も変換しない。
このようにして、プログラム変換処理部600は、bool型の引数を持つfuncAについては再利用命令(memocall)により呼び出し、他の2つの関数(funcBおよびC)については呼出し命令(call)により呼び出すプログラムを生成する。
図9(b)には、データ処理装置100が容量の大きい履歴メモリ430を備える場合におけるプログラム変換処理部600の動作例が示されている。ここでは、右矢印に対して左側にある枠の中には、図9(a)と同様に、プログラム変換処理部600に処理される前のソースプログラムの一例がC言語により示されている。また、右矢印に対して右側にある枠の中には、プログラム変換処理部600に処理されたプログラムの一例がアセンブリ言語により示されている。
なお、ここでは、履歴メモリは、1個のchar型の変数を引数とすることによって、1個のchar型の実行結果を出力する関数の実行履歴を55個ほど保持するのに十分な容量であるとする。
再利用候補区間抽出部611、再利用候補区間解析部612、および、再利用度生成部621の動作は、図9(a)において示した動作と同じ働きであるので詳細な説明を省略する。
この場合において、再利用度生成部621により再利用度が生成された後に、再利用命令変換部623は、図9(a)と同様に、関数の呼出し命令(call)を再利用命令(memocall)に変換する。
その結果、再利用命令変換部623は、まず、bool型の引数を持つ関数(funcA)に関しては全ての実行履歴を履歴メモリに登録できると解析し、funcAの呼出し命令(call)を再利用命令(memocall)に変換する。次に、この再利用命令変換部623は、再利用命令に変換した関数(funcA)の実行履歴のデータ量を差し引いた履歴メモリにはchar型の引数を持つfuncBの実行履歴は全て登録できると解析する。この解析により、再利用命令変換部623は、funcBの呼出し命令(call)を再利用命令(memocall)に変換する。また、この再利用命令変換部623は、再利用命令に変換した関数(funcAおよびB)の実行履歴のデータ量を差し引いた履歴メモリにはint型の引数を持つfuncCの実行履歴は2個しか登録できないと解析する。この解析により、再利用命令変換部623は、funcCの呼出し命令(call)は変換しない。
このようにして、プログラム変換処理部600は、bool型の引数を持つfuncAおよびchar型の引数を持つfuncBは再利用命令(memocall)により呼び出し、funcCは呼出し命令(call)により呼び出すプログラムを生成する。
なお、ここでは、再利用区間は関数であり、呼出し命令はアセンプリ言語で表現した場合の「call」命令を想定し、再利用命令はアセンブリ言語で「memocall」と表現することを想定したが、これに限定されるものではない。例えば、再利用区間はループであり、呼出し命令はアセンブリ言語で表現した場合の「branch」命令を想定し、再利用命令はアセンブリ言語で「memoLoop」と表現する場合などが考えられる。
[本発明の第1の実施の形態における再利用命令の一例]
次に、本発明の第1の実施の形態におけるコンパイル処理装置500が生成する再利用命令について図面を参照して説明する。
図10は、本発明の第1の実施の形態における関数の呼出し命令および関数の再利用命令の一例を示す概念図である。ここでは、再利用命令を処理するデータ処理装置のプロセッサコアはMIPSにより構成されることを想定する。また、ここでは、左端は最上位ビット(MSB)を示し、右端は最下位ビット(LSB)を示している。
図10(a)には、MIPS命令セットにおける関数の呼出し命令(call)であるJALR(Jump And Link Register)命令が示されている。MIPS命令セットは32ビットの固定長の命令セットであり、このJALR命令は、32個のビット(0乃至31番)のビット列により表現されるものである。
このJALR命令は、オペコードフィールド710と、関数番地フィールド(rs)720と、第1未使用フィールド730と、戻り番地フィールド(rd)740と、第2未使用フィールド750と、機能指定フィールド760とから構成される。
オペコードフィールド710は、命令の種別を指定するフィールドである。このオペコードフィールド710は、第26乃至第31番目のビットから構成されるビット列である。このオペコードフィールド710には、SPECIAL命令として「000000」のビット列が格納される。
関数番地フィールド(rs)720は、関数の番地を格納するレジスタを指定するフィールドである。この関数番地フィールド(rs)720は、第21乃至第25番目のビットから構成されるビット列である。
第1未使用フィールド730は、JALR命令では使用されないフィールドである。この第1未使用フィールド730は、第16乃至第20番目のビット列である。この第1未使用フィールド730は、JALR命令では「00000」のビット列が格納される。
戻り番地フィールド(rd)740は、関数からの戻り番地を指定するフィールドである。この戻り番地フィールド(rd)740は、第11乃至第15番目のビットから構成されるビット列である。この戻り番地フィールド(rd)740は、JALR命令では31番レジスタを指すビット列(11111)が格納される。
第2未使用フィールド750は、JALR命令では使用されないフィールドである。この第2未使用フィールド750は、第6乃至第10番目のビットから構成されるビット列である。この第2未使用フィールド750は、JALR命令では「00000」のビット列が格納される。
機能指定フィールド760は、オペコードフィールド710により指定された命令が複数の機能を含む場合には、その複数の機能のうち1つの機能を指定するフィールドである。この機能指定フィールド760は、第0乃至第5番目のビットから構成されるビット列である。この機能指定フィールド760は、JALR命令では「001001」のビット列が格納される。
図10(b)には、関数の再利用命令の一例が示されている。この再利用命令は、32個のビット(0乃至31番)のビット列により表現されるものである。この再利用命令は、オペコードフィールド710と、関数番地フィールド(rs)720と、第1再利用フィールド731と、戻り番地フィールド(rd)740と、第2再利用フィールド751と、機能指定フィールド760とから構成される。なお、ここでは、第1再利用フィールド731および第2再利用フィールド751以外の構成は、図10(a)と同様のものであるため、図10(a)と同符号を付してここでの説明を省略する。
第1再利用フィールド731および第2再利用フィールド751は、共に再利用命令であることを示すフィールドである。この第1再利用フィールド731および第2再利用フィールド751は、JALR命令における第1未使用フィールド730および第2未使用フィールド750のビット列を「00000」以外のビット列に変更したものである。ただし、この第1再利用フィールド731および第2再利用フィールド751は、一方のビット列が「00000」以外ならば再利用命令を指し示し、他方のビット列が「00000」であってもよい。
このように、JALR命令の第11乃至第15番目あるいは第6乃至第10番目のビット列のいずれかにおいて「00000」の代わりに「00001乃至11111」のビット列が格納されていた場合には、その命令は再利用命令となる。
[本発明の第1の実施の形態におけるコンパイル処理装置500の動作例]
次に、本発明の第1の実施の形態におけるコンパイル処理装置500の処理について図面を参照して説明する。
図11は、本発明の第1の実施の形態におけるコンパイル処理装置500によるコンパイル処理の処理手順を示すフローチャートである。
まず、コンパイル処理装置500により、ソースプログラム記憶部510からソースプログラムが読み出される(ステップS911)。次に、再利用候補区間抽出部611により、再利用候補区間が抽出される(ステップS912)。
そして、再利用候補区間解析部612により、再利用候補区間の使用態様が解析される(ステップS913)。なお、ステップS913は、特許請求の範囲に記載の解析手順の一例である。
次に、再利用度生成部621により、再利用候補区間の解析結果に基づいて再利用度が生成される(ステップS914)。なお、ステップS914は、特許請求の範囲に記載の再利用度生成手順の一例である。
続いて、再利用命令変換部623により、再利用度に基づいて再利用候補区間の呼出し命令が再利用命令に変換される(ステップS916)。これは、関数が再利用候補区間である場合には、関数の呼出し命令(call)が再利用命令(memoCall)に変換されることを意味する。なお、ステップS915は、特許請求の範囲に記載の命令変換手順の一例である。
そして、コード生成部522により、変換された命令を含むプログラムに基づいて機械語プログラムのコードであるオブジェクトプログラムが生成される(ステップS917)
このように、本発明の第1の実施の形態によれば、再利用度を生成することによって、再利用される再利用候補区間の呼出し命令を実行結果が再利用される度合いに基づいて再利用命令に変換することが出来る。
<2.第2の実施の形態>
[データ処理装置100の構成例]
図12は、本発明の第2の実施の形態におけるデータ処理装置100の構成例を示すブロック図である。このデータ処理装置100は、バス120を介して主記憶部130と相互に接続されている。また、ここでは、データ処理装置100が処理する命令区間は関数を想定するものとする。
データ処理装置100は、プログラムデータにおける各処理を実行するものである。このデータ処理装置100は、例えば、一般的なコンピュータにおいてはCPU(Central Processing Unit)により実現される。このデータ処理装置100は、一次キャッシュ200と、プロセッサコア300と、履歴管理部400とを備える。ここでは、データ処理装置100は、本発明の第1の実施の形態におけるコンパイル処理装置500により生成された再利用命令を含むプログラムを処理するものとする。
一次キャッシュ200は、プロセッサコア300がバス120を介して入出力する情報を一時的に保持するものである。この一次キャッシュ200は、命令キャッシュ210およびデータキャッシュ220を備える。
命令キャッシュ210は、プロセッサコア300において実行される命令を一時的に保持するものである。この命令キャッシュ210は、プロセッサコア300が頻繁に実行する命令を一時的に保持することによってプロセッサコア300から主記憶部130へのアクセスを軽減させて、プロセッサコア300におけるデータの入力待ち時間を軽減させる。この命令キャッシュ210は、主記憶部130から供給された再利用命令をプロセッサコア300に供給する。
データキャッシュ220は、プロセッサコア300の入力データおよび出力データを一時的に保持するものである。このデータキャッシュ220は、使用頻度の高いプロセッサコア300の入力データを一時的に保持することによりプロセッサコア300から主記憶部130へのアクセスを軽減させて、プロセッサコア300におけるデータの入力待ち時間を軽減させる。このデータキャッシュ220は、主記憶部130から供給された関数の入力値および関数の開始アドレスをプロセッサコア300に出力する。
プロセッサコア300は、プログラムの命令に従って演算を実行するものである。このプロセッサコア300は、例えば、MIPS(Microprocessor without Interlocked Pipeline Stages)プロセッサにより実現される。このプロセッサコア300は、命令キャッシュ210およびデータキャッシュ220から入力される命令と入力データと関数の開始アドレスとに基づいて命令を実行し、その結果の実行結果を出力する。このプロセッサコア300は、入力される命令が再利用区間を指定する再利用命令である場合において履歴管理部400から実行結果が供給されないときには、この命令を実行した結果である実行結果をデータキャッシュ220および履歴管理部400に出力する。
またプロセッサコア300は、入力される命令が再利用区間を指定する再利用命令である場合において履歴管理部400から実行結果が供給されたときには、再利用区間における処理を中止して、この再利用区間を呼出したルーチンに戻る。
履歴管理部400は、再利用区間の実行結果を保持して管理するものである。この履歴管理部400は、プロセッサコア300から供給された再利用区間の区間識別情報と入力値と実行結果とを実行履歴として保持する。ここでいう区間識別情報とは、再利用区間を特定するための情報であり、例えば、関数やループの開始アドレスである。すなわち、この履歴管理部400は、区間識別情報、入力値、および、実行結果として、関数の開始アドレス、入力値、および、実行結果を保持する。また、この履歴管理部400は、プロセッサコア300から関数の開始アドレスおよび入力値が供給された場合には、この開始アドレスおよび入力値を含んでいる実行履歴を検索する。
バス120は、データ処理装置100および主記憶部130へのデータのやりとりを行うためのバスである。
主記憶部130は、データ処理装置100が動作するために必要なデータを保持するものである。この主記憶部130は、例えば、RAM(Random Access Memory)などが考えられる。この主記憶部130は、記憶しているデータを、バス120を介してデータ処理装置100に出力する。
このように、本発明の第2の実施の形態によれば、データ処理装置100に履歴管理部400を設けることによって、複数の命令区間のうち実行結果が再利用される度合いに基づいて抽出された再利用区間の実行結果を再利用することができる。
[プロセッサコア300および履歴管理部400の構成例]
図13は、本発明の第2の実施の形態におけるプロセッサコア300および履歴管理部400の構成例を示すブロック図である。ここでは、プロセッサコア300および履歴管理部400の機能は、図12と同様のものであるため、同一の符号を付してここでの説明を省略する。
プロセッサコア300は、フェッチ部310と、命令デコーダ320と、実行部330と、レジスタファイル340とを備える。
フェッチ部310は、命令キャッシュ210から主記憶部130からの命令を読み出すものである。このフェッチ部310は、その読み出した命令を一時的に保持して、その保持されている命令のうち、実行部330に実行させるための命令を命令デコーダ320に供給する。このフェッチ部310は、例えば、一時的に保持している命令のうち、実行部330において実行される再利用命令を命令デコーダ320に供給する。このフェッチ部310は、例えば、主記憶部130に記憶された再利用命令を命令デコーダ320に供給する。
命令デコーダ320は、フェッチ部310から供給された命令を解析することによってプロセッサコア300の構成部位を制御する制御信号を生成するものである。この命令デコーダ320は、例えば、命令を解析することによって実行部330およびレジスタファイル340を制御する制御信号を生成して、その生成された制御信号を実行部330およびレジスタファイル340に供給する。
この命令デコーダ320は、フェッチ部310から再利用命令が供給された場合には、この再利用命令を解析することによって、実行部330およびレジスタファイル340の各々を制御する制御信号を実行部330およびレジスタファイル340に供給する。
実行部330は、命令デコーダ320から供給された制御信号に基づいて、命令デコーダ320において解析した命令を実行するものである。この実行部330は、命令デコーダ320から再利用命令に基づく制御信号が供給された場合には、再利用命令が指定する再利用区間の処理を開始する。また、この再利用区間の処理の開始とともに、実行部330は、レジスタファイル340から取得した再利用区間の区間識別情報を信号線309を介して履歴管理部400に出力する。そして、実行部330は、レジスタファイル340から供給される再利用区間の入力値に基づいて再利用区間における処理を実行するとともに、再利用区間の入力値を信号線309を介して履歴管理部400に出力する。
また、実行部330は、履歴管理部400から再利用区間の実行結果が供給された場合には、再利用区間の処理を中止するとともに、実行結果を履歴管理部400から受け取ったことを知らせる信号をフェッチ部310に供給する。この時、実行部330は、実行結果をレジスタファイル340に出力する。
一方、実行部330は、履歴管理部400から再利用区間の実行結果が供給されない場合には、再利用区間の処理を最後まで行い、実行結果を履歴管理部400およびレジスタファイル340に出力する。なお、実行部330は、特許請求の範囲に記載の実行部の一例である。
レジスタファイル340は、データキャッシュ220から供給されたデータおよび実行部330から供給された実行結果を一時的に保持するものである。このレジスタファイル340は、例えば、命令デコーダ320から再利用命令に基づく制御信号が供給された場合には、再利用区間の入力値を実行部330に供給する。
履歴管理部400は、履歴対象データ保持部410と、履歴検索部420と、履歴メモリ430と、履歴登録部440とを備える。
履歴対象データ保持部410は、実行部330から供給されたデータを一時的に保持するものである。この履歴対象データ保持部410は、実行部330から区間識別情報および入力値が供給された際には、これらを検索要求として履歴検索部420に供給する。例えば、履歴対象データ保持部410は、再利用区間が関数である場合には、実行部330から供給された関数の開始アドレスおよび入力値を検索要求として履歴検索部420に供給する。
また、この履歴対象データ保持部410は、実行部330から区間識別情報と、入力値と、実行結果とが供給されることによって、実行履歴を登録する条件が整った場合には、これらを実行履歴として履歴登録部440に供給する。
履歴検索部420は、履歴対象データ保持部410から供給された検索要求に基づいて実行履歴を検索し、実行履歴が検索された場合には実行結果を出力するものである。この履歴検索部420は、検索要求入力部421および実行結果出力部422を備える。なお、履歴検索部420は、特許請求の範囲に記載の履歴検索部の一例である。
検索要求入力部421は、履歴対象データ保持部410から供給された検索要求に基づいて履歴メモリ430から実行履歴を検索するものである。この検索要求入力部421は、例えば、関数の再利用命令が命令デコーダ320において解析された場合には、この関数の開始アドレスおよび入力値を履歴メモリ430に供給することによって、実行履歴の検索を開始する。
実行結果出力部422は、履歴メモリ430において実行履歴が検索された場合に実行結果を履歴メモリ430から抽出し、その抽出した実行結果を実行部330に出力するものである。この実行結果出力部は、その抽出した実行結果を信号線409を介して実行部330に供給する。
履歴メモリ430は、履歴登録部440から供給された実行履歴を保持するものである。この履歴メモリ430は、例えば、履歴検索部420から検索要求が供給された場合において、この検索要求と一致する実行履歴を保持しているときは、この実行履歴の実行結果を実行結果出力部422に供給する。また、この履歴メモリ430は、履歴登録部440から実行履歴が供給された場合には、この実行履歴を保持する。この履歴メモリ430は、例えば、連想メモリ(CAM:Content Addressable Memory)により実現される。なお、履歴メモリ430は、特許請求の範囲に記載の履歴メモリの一例である。
履歴登録部440は、履歴対象データ保持部410から供給された実行履歴を履歴メモリ430に保存させるデータ構造に変換し、この実行履歴を履歴メモリ430に登録するものである。この履歴登録部440は、例えば、関数を指定する再利用命令が命令デコーダ320において解析された際に、履歴検索部420により実行履歴が検索されない場合には、関数の開始アドレス、入力値および実行結果を実行履歴として履歴メモリ430に登録する。
このように、プロセッサコア300および履歴管理部400は、関数の実行結果が再利用される度合いに応じて関数の呼出し命令が再利用命令に変換されたプログラムを実行することができる。なお、ここでは、プロセッサコア300および履歴管理部400は、関数を再利用対象とする例について説明したが、ループに関しても同様に再利用対象とすることができる。
[履歴メモリ430のデータ構造例]
図14は、本発明の第2の実施の形態における履歴メモリ430のデータ構造の一例を示す概念図である。ここでは、履歴メモリ430により、区間識別情報ごとに保持された実行履歴のうち、1つの区間識別情報における実行履歴を木構造により保持する構成が示されている。この例では、引数がn個であり、かつ、実行結果である出力をm個の格納先に返す関数を想定している。また、ここでは、関数の先頭アドレスである関数の開始アドレスを区間識別情報として用いることとする。
この例では、木構造における関数ルート810と、第1の引数ノード821および822と、第nの引数ノード831乃至834と、第1の出力ノード841乃至844と、第mの出力ノード851乃至854とが示されている。
関数ルート810には、区間識別情報である関数の開始アドレスと、第1の引数ノード821を指し示すポインタとが示されている。
第1および第nの引数ノード821、822および831乃至834には、履歴メモリ430に保持されている実行履歴における引数の入力値として、引数の値を示す入力値と、その引数の型と、その引数の格納場所を示す種類とが示されている。ここにいう格納場所とは、レジスタ番号または主記憶部130のメモリアドレスのことをいう。
さらに、第1および第nの引数ノード821、822および831乃至834には、比較対象の入力値が互いに一致した場合に次の引数の引数ノードを指し示す右ポインタと、不一致の場合に同一の引数における他の引数ノードを指し示す下ポインタとが示されている。また、第nの引数ノード831乃至834の各々は、第1および第mの出力ノード841乃至844および851乃至854にそれぞれ連結されている。
第1および第mの出力ノード841乃至844および851乃至854には、履歴メモリ430に保持されている実行履歴における実行結果として、実行結果の値を示す出力値と、その実行結果の格納場所を示す種類と、その実行結果の型とが示されている。さらに、第1の出力ノード841乃至844には、次の出力ノードを指し示す右ポインタが示されている。すなわち、第1および第mの出力ノード841乃至844および851乃至854は、連結リストを構成している。また、第mの出力ノード851乃至854には、出力ノードの終端を表わすヌルが示されている。
このような木構造において、関数ルート810に示された関数の開始アドレスと一致する関数の開始アドレスが履歴検索部420から入力されると、関数ルート810のポインタによって指し示された第1の引数ノード821において入力値の比較処理が実行される。ここにいう入力値の比較処理とは、第1の引数ノード821に示された入力値、種類および型である入力値と、履歴検索部420からの入力値とを比較することである。
このとき、例えば、第1の引数ノード821に示された入力値と履歴検索部420からの入力値とが一致した場合には、第1の引数ノード821の右ポインタにより指し示された次の引数ノードにおいて入力値の比較処理が実行される。一方、第1の引数ノード821に示された入力値と、履歴検索部420からの入力値とが一致しない場合には、第1の引数ノード821の下ポインタにより指し示された第1の引数ノード822において入力値の比較処理が実行される。
このようにして、各引数ノードにおける比較処理による結果に基づいて右または下ポインタの指し示す引数ノードが選択され、その選択された引数ノードにおいて入力値の比較処理が順次実行される。そして、例えば、第nの引数ノード831に示された入力値と履歴検索部420からの入力値とが互いに一致した場合には、第nの引数ノード831の右ポインタの指し示す第1の出力ノード841の実行結果が履歴検索部420に出力される。そして、最後に、第m番の出力ノード851の実行結果が履歴検索部420に出力される。
このように、履歴メモリ430を識別情報ごとに木構造により構成することによって、同じ引数の入力値を重複して保持させる必要が無いため、記憶領域を節約することができる。また、識別情報ごとにデータ構造を分けることによって、検索速度の低下を抑制することができる。
[本発明の第2の実施の形態におけるプロセッサコア300および履歴管理部400により保存される実行履歴の一例]
図15は、本発明の第2の実施の形態におけるプロセッサコア300により処理されるプログラムおよび履歴管理部400により保存される実行履歴の一例を示す概念図である。ここでは、従来技術を用いて実行履歴を保存する場合と、本発明の第2の実施の形態により実行履歴を保存する場合とが表されている。なお、ここでは、変換されたプログラムの実行は、ここで示したプログラムの上から順に実行されるものと想定する。
図15(a)は、従来技術によるソースプログラムの変換例を示す模式図である。ここでは、右矢印に対して左側にある枠の中には、ソースプログラムがC言語により示されている。また、右矢印に対して右側にある枠の中には、従来技術により変換されたプログラムの一例がアセンブリ言語により示されている。
ソースプログラムには、プログラムのメインの関数(funcX)と、そのメインの関数により呼び出される6つの関数とが示されている。この6つの関数として、char型の2個の変数を引数とする関数(funcA)と、char型の1個の変数およびint型の1個の変数を引数とする関数(funcB)と、char型の1個の変数を引数とする関数(funcC)とが示されている。さらに、bool型の1個の変数を引数とする関数(funcD)と、int型の2個の変数を引数とする関数(funcE)と、int型の1個の変数を引数とする関数(funcF)とが示されている。
このソースプログラムは、関数を再利用区間として指定する場合には全ての関数を再利用の対象とする従来技術のコンパイル処理装置により、全ての関数が再利用の対象とされるプログラムに変換される。その結果、右矢印に対して右側にある枠の中に示すように、funcA乃至Gを呼出し命令(call)で呼び出し、funcA乃至Gの実行結果を全て再利用するプログラムを生成する。
図15(b)は、図15(a)の右矢印の右側にある枠の中に示したプログラムを上から順に1回ずつ実行した場合における履歴メモリに保存される実行履歴の一例を示す模式図である。なお、ここでは、実行履歴が保存される履歴メモリは、便宜上、入力値および出力値の型や個数を問わず、2つの関数に関する実行履歴を保存できるものとする。また、新たな実行履歴を保存する際に、履歴メモリの空き容量が無い場合には、最も長い期間未使用だった実効履歴を履歴メモリから消去した後に、新たな実行履歴を履歴メモリに保存するものとする。さらに、ここでは、図15(a)において示した変換されたプログラムの呼出し命令を、上から順に1回ずつ実行するものとする。
従来技術を用いる場合では、図15(a)の右矢印の右側にある変換されたプログラムに基づいて、6つの関数(funcA乃至F)が再利用命令(cal)により呼び出される。最初に、char型の2個の変数を引数とするfuncAが再利用区間として呼び出され、funcAの実行履歴が履歴メモリに保存される。次に、char型の1個の変数およびint型の1個の変数を引数とするfuncBが再利用区間として呼び出された後に実行履歴が保存される。
その後、履歴メモリには空き容量が無い状態でchar型の1個の変数を引数とするfuncCが再利用区間として呼び出される。この時、従来技術のデータ処理装置では、最も長い期間未使用だったfuncAの実行履歴を履歴メモリから消去するとともに、funcCの実行履歴を保存する。
そして、funcCのときと同様にして、bool型の1個の変数を引数とするfuncDのときには、funcBの実行履歴の代わりにfuncDの実行履歴が保存される。そして、int型の2個の変数を引数とするfuncEのときには、funcCの実行履歴の代わりにfuncEの実行履歴が保存される。最後に、int型の1個の変数を引数とする関数funcFが再利用区間として呼び出されると、最も長い期間未使用だったfuncDの実行履歴が履歴メモリから消去されるとともに、funcFの実行履歴が保存される。
このようにして、図15(a)の変換されたプログラムの呼出し命令を上から順に1回ずつ実行すると、図15(b)において示したように、2つの関数(funcEおよびfuncF)の実行履歴が履歴メモリに保存される。
このように、従来技術を用いる場合では、常に再利用される確率が高い実行履歴が履歴メモリに保存されているわけではない。このため、実行するプログラムによっては、全く再利用されない関数の実行履歴が履歴メモリに保存され、再利用の効果が得られない場合が生じる。
図15(c)は、本発明の第1の実施の形態によるソースプログラムの変換例を示す模式図である。なお、ここでは、再利用度生成部621は、関数の入力値が採り得る値の組合せに基づいて再利用度を生成することを想定する。また、履歴メモリ430は、便宜上、入力値および出力値の型や個数を問わず、2つの関数に関する実行履歴を保存できるものとする。
ここでは、右矢印に対して左側にある枠の中には、図15(a)において示したソースプログラムと同様のソースプログラムがC言語により示されている。また、右矢印に対して右側にある枠の中には、本発明の第1の実施の形態により変換されたプログラムの一例がアセンブリ言語により示されている。
このソースプログラムは、まず、6つの関数(funcA乃至F)における引数の個数および型について関数毎に再利用候補区間解析部612により解析される。その後、再利用度生成部621は、再利用候補区間解析部612が解析した引数の個数および型に基づいて再利用度を生成する。
この時、再利用度生成部621は、関数毎の入力値が採り得る値の組合せに基づいて再利用度を生成する。この再利用度生成部621は、例えば、関数の入力値が採り得る値の組合せとして入力値の総ビット数を算出する場合には、算出した入力値の総ビット数に基づいて再利用度を生成する。この場合において、この再利用度生成部621は、char型の2個の変数を引数とする関数(funcA)については入力値の組合せは「16+1+16=32」により32ビットと判断する。さらに、char型の1個の変数およびint型の1個の変数を引数とする関数(funcB)については、入力値の組合せは「16+1=17」により17ビットと判断する。また、char型の1個の変数を引数とする関数(funcC)については、入力値の組合せは16ビットと判断する。そして、bool型の1個の変数を引数とする関数(funcD)については、入力値の組合せは1ビットと判断する。さらに、int型の2個の変数を引数とする関数(funcE)については、入力値の組合せは「32+32=64」により64ビットと判断する。int型の1個の変数を引数とする関数(funcF)については、入力値の組合せは32ビットと判断する。
その結果、再利用度生成部621は、入力値の組合せの逆数に基づいて、bool型の1個の変数を引数とするfuncDには1番高い再利用度を生成し、char型の1個の変数を引数とするfuncCには2番目に高い再利用度を生成する。さらに、再利用度生成部621は、char型の1個の変数およびint型の1個の変数を引数とするfuncBには、3番目に高い再利用度を生成する。また、char型の2個の変数を引数とするfuncAおよびint型の1個の変数を引数とするfuncFには、4番目に高い再利用度を生成する。そして、int型の2個の変数を引数とするfuncEには、1番低い再利用度を生成する。
そして、再利用命令変換部623は、再利用度が最も高い関数から順に履歴メモリ430に保持する関数を設定する。この結果、再利用命令変換部623は、bool型の1個の変数を引数とするfuncDおよびchar型の1個の変数を引数とするfuncCの呼出し命令(call)を再利用命令(memocall)に変換する。
図15(d)には、図15(c)の右矢印の右側にある枠の中に示したプログラムを上から順に1回ずつ実行した場合における履歴メモリに保存される実行履歴の一例が示されている。なお、履歴メモリ430は、便宜上、入力値および出力値の型や個数を問わず、2つの関数に関する実行履歴を登録できるものとする。
本発明の第2の実施の形態におけるプロセッサコア300は、図15(c)において示した変換されたプログラムに基づいて、再利用命令(memoCall)で呼び出されるfuncCおよびfuncDの実行履歴を履歴管理部400に出力する。その結果、funcAおよびfuncBの実行履歴が履歴メモリ430に保存される。
このように、本発明の第2の実施の形態によれば、実行結果が再利用される確率が高い関数を選択して履歴メモリ430に保存することができる。
[本発明の第2の実施の形態におけるプロセッサコア300および履歴管理部400の動作例]
次に、本発明の第2の実施の形態におけるプロセッサコア300および履歴管理部400の処理について図面を参照して説明する。
図16は、本発明の第2の実施の形態におけるプロセッサコア300および履歴管理部400による関数の実行処理の処理手順を示すフローチャートである。
まず、フェッチ部310およびレジスタファイル340に、関数を参照する命令およびその関数の入力値が読み出される(ステップS931)。次に、命令デコーダ320によって、関数を参照する命令がデコードされる(ステップS932)。続いて、デコードした命令が再利用命令か否かが解析される(ステップS933)。解析の結果、デコードした命令が再利用命令でない場合には、実行部330によって、レジスタファイル340から供給される入力値に基づいてその関数が実行され、実行結果が出力される(ステップS940)。そして、関数の実行処理は終了する。
一方、デコードした命令が再利用命令である場合には、検索要求入力部421によって、実行部330から供給された関数の開始アドレスおよび入力値を用いて履歴メモリ430から実行履歴が検索される(ステップS934)。
次に、実行履歴があるか否かが判断される(ステップS935)。実行履歴が履歴メモリ430にある場合には、実行結果出力部422によって、実行結果が出力される(ステップS938)。続いて、実行部330は、実行結果が出力された関数の実行を中止させる(ステップS939)。そして、関数の実行は終了する。
一方、実行履歴が履歴メモリ430に保持されていない場合には、実行部330によって、レジスタファイル340から供給される入力値に基づいてその関数が実行され、実行結果が出力される(ステップS936)。そして、履歴登録部440によって、実行履歴が履歴メモリ430に登録される(ステップS937)。なお、このステップS936およびステップS937は、特許請求の範囲に記載の実行手段の一例である。そして、関数の実行は終了する。
このように、本発明の第2の実施の形態によれば、再利用区間の呼出し命令が再利用候補区間の再利用度に従って再利用命令に変換されたプログラムに基づいて、実行結果の再利用の効果が高い再利用区間の実行履歴のみを履歴メモリ430に保持することができる。
<3.第3の実施の形態>
[本発明の第3の実施の形態におけるコンパイル処理装置500の構成例]
図17は、本発明の第3の実施の形態におけるコンパイル処理装置500の構成例を示すブロック図である。このコンパイル処理装置500は、図1において示したコンパイル処理装置500の構成に加えて優先度生成部622を備えている。ここでは、優先度生成部622以外の構成は、図1と同様のものであるため、図1と同符号を付してここでの各部の構成の詳細な説明を省略する。
優先度生成部622は、再利用度生成部621から供給された再利用度に基づいて、実行履歴が履歴メモリ430に保持されるための優先度を生成するものである。この優先度生成部622は、例えば、再利用度が高い再利用候補区間から順に高い値の優先度を生成する。この優先度生成部622は、生成した優先度を、再利用度、再利用候補区間の識別情報、および、プログラムとともに再利用命令変換部623に供給する。なお、優先度生成部622は、特許請求の範囲に記載の優先度生成部の一例である。
再利用命令変換部623は、優先度生成部622から供給された再利用度および優先度に基づいて、再利用候補区間の呼出し命令を優先度が含まれる再利用命令に変換するものである。この再利用命令変換部623は、例えば、再利用度および優先度が算出された全ての再利用候補区間の呼出し命令を、優先度が含まれる再利用命令に変換する。この再利用命令変換部623は、その変換した命令を含む最適化されたプログラムをコード生成部522に供給する。
なお、第3の実施の形態では、優先度生成部622は、再利用度の順序に応じて優先度を生成するものを想定するが、これに限定されるものではない。例えば、優先度生成部622は、再利用度と、再利用候補区間の実行履歴のデータ量の予測値と、履歴メモリ430の容量とに基づいて、再利用候補区間の優先度を生成するものなどが考えられる。この場合において、優先度生成部622は、図1において示した再利用命令変換部623と同様に実行履歴のデータ量の予測値を生成する。そして、優先度生成部622は、履歴メモリ430から実行履歴が削除されるタイミングを考慮し、効率の良い実行履歴の入れ替えが出来るように優先度を生成する。
なお、ここでは、コンパイル処理装置500は、関数を再利用対象とする例について説明したが、ループに関しても同様に再利用対象とすることができる。
なお、第3の実施の形態では、便宜上、再利用候補区間解析部612は、再利用候補区間の使用態様を関数毎に解析するが、より詳細に解析するために関数の呼出し命令毎に解析するものとしてもよい。この場合において、再利用度生成部621は、関数の呼出し命令毎に再利用度を生成し、優先度生成部622は、呼び出される関数は同じであっても関数の呼出し命令毎に異なる優先度を生成する。そして、再利用命令変換部623は、呼び出される関数は同じであっても関数の呼出し命令毎に異なる優先度が含まれる再利用命令に変換する。
[本発明の第3の実施の形態におけるプログラム変換処理部600の動作例]
次に、本発明の第3の実施の形態におけるプログラム変換処理部600の動作について次図を参照して説明する。
図18は、本発明の第3の実施の形態におけるプログラム変換処理部600による複数の引数が入力値である関数を含むプログラムの変換例を示す模式図である。
図18(a)は、引数の型は同じだが引数の個数は異なる複数の関数を含むプログラムのプログラム変換処理部600による変換例を示す模式図である。なお、再利用候補区間解析部612および再利用度生成部621については、図3において示した動作例と同様の動作をすることを想定し、ここでの詳細な説明を省略する。
図18(a)の右矢印に対して左側に位置する枠の中には、プログラム変換処理部600に処理される前のソースプログラムの一例がC言語により示されている。また、右矢印に対して右側に位置する枠の中には、プログラム変換処理部600に処理されたプログラムの一例がアセンブリ言語により示されている。
ソースプログラムには、プログラムのメインの関数(funcX)と、そのメインの関数により呼び出される3つの関数とが示されている。この3つの関数として、int型の1個の変数を引数とする関数(funcA)と、int型の2個の変数を引数とする関数(funcB)と、int型の3個の変数を引数とする関数(funcC)とが示されている。
このソースプログラムは、再利用候補区間解析部612および再利用度生成部621によって、図3において示した動作例と同様に解析および再利用度の生成がされる。これにより、引数が1個の関数(funcA)の再利用度が1番高く、引数が2個の関数(funcB)の再利用度が2番目に高く、引数が3個の関数(funcC)の再利用度が1番低い再利用度が生成される。
次に、優先度生成部622により3つの関数(funcA乃至funcC)の優先度が生成される。優先度生成部622は、再利用度に基づいて優先度を生成することにより、再利用度が1番高い関数(funcA)には1番高い優先度(3)を生成し、再利用度が2番目に高い関数(funcB)には2番目に高い優先度(2)を生成する。また、優先度生成部622は、再利用度が1番低い関数(funcC)には1番低い優先度(1)を生成する。
そして、再利用命令変換部623は、実行結果を再利用させる再利用区間の呼出し命令を優先度が含まれる再利用命令に優先度に基づいて変換する。この図18(a)の場合においては、再利用命令変換部623は、履歴メモリの容量を考慮しないため、優先度が生成された全ての関数の呼出し命令を優先度が含まれる再利用命令に変換する。その結果、この再利用命令変換部623は、3つの関数(funcA乃至C)の呼出し命令を優先度が含まれる再利用命令に変換する。
このようにして、プログラム変換処理部600は、右矢印に対して右側にある枠の中に示すようなプログラムを生成する。このプログラムにより、int型の1個の変数を引数とするfuncAは優先度(3)を含む再利用命令(memoCall)により呼び出される。int型の2個の変数を引数とするfuncBは優先度(2)を含む再利用命令(memocall)により呼び出され、int型の3個の変数を引数とするfuncCは優先度(1)を含む再利用命令(memocall)により呼び出される。
図18(b)は、引数の型および引数の個数が異なる複数の関数を含むプログラムのプログラム変換処理部600による変換例を示す模式図である。ここでは、再利用候補区間解析部612は、引数の個数および引数の型を使用態様として解析することを想定する。また、再利用度生成部621は、関数の入力値が採り得る値の組合せに基づいて再利用度を生成することを想定する。
図18(b)の右矢印に対して左側に位置する枠の中には、プログラム変換処理部600に処理される前のソースプログラムの一例がC言語により示されている。また、右矢印に対して右側に位置する枠の中には、プログラム変換処理部600に処理されたプログラムの一例がアセンブリ言語により示されている。
ソースプログラムには、プログラムのメインの関数(funcX)と、そのメインの関数により呼び出される4つの関数(funcA乃至D)とが示されている。この4つの関数として、int型の1個の変数を引数とする関数(funcA)と、int型の2個の変数を引数とする関数(funcB)と、bool型の2個の変数を引数とする関数(funcC)とが示されている。さらに、この4つの関数として、bool型の3個の変数を引数とする関数(funcD)が示されている。
このソースプログラムは、まず、4つの関数(funcA乃至D)における引数の個数および型について、関数毎に再利用候補区間解析部612により解析される。その後、再利用度生成部621は、再利用候補区間解析部612が解析した引数の個数および型に基づいて再利用度を生成する。
この時、再利用度生成部621は、関数毎の入力値が採り得る値の組合せに基づいて再利用度を生成する。この再利用度生成部621は、例えば、関数の入力値が採り得る値の組合せとして入力値の総ビット数を算出する場合には、算出した入力値の総ビット数に基づいて再利用度を生成する。この場合において、この再利用度生成部621は、int型の1個の変数を引数とする関数(funcA)については入力値の組合せは32ビットと判断する。さらに、int型の2個の変数を引数とする関数(funcB)については、
入力値の組合せは「32+32=64」により64ビットと判断する。
また、bool型の2個の変数を引数とする関数(funcC)については、入力値の組合せは「1+1=2」により2ビットと判断する。そして、bool型の3個の変数を引数とする関数(funcD)については、入力値の組合せは「1+1+1=3」により3ビットと判断する。
その結果、再利用度生成部621は、入力値の組合せの逆数を再利用度にして、bool型の2個の変数を引数とするfuncCの再利用度が1番高く、bool型の3個の変数を引数とするfuncDの再利用度が2番目に高い度合いの再利用度を生成する。さらに、再利用度生成部621は、入力値の組合せの逆数を再利用度にして、int型の1個の変数を引数とするfuncAの再利用度が3番目に高く、int型の2個の変数を引数とするfuncBの再利用度が1番低い度合いの再利用度を生成する。
次に、優先度生成部622は、4つの関数(funcA乃至funcD)の優先度を生成する。この優先度生成部622は、再利用度に基づいて優先度を生成することにより、再利用度が1番高い関数(funcC)には1番優先度が高い優先度(4)を生成し、再利用度が2番目に高い関数(funcD)には2番目に優先度が高い優先度(3)を生成する。また、優先度生成部622は、再利用度が3番目に高い関数(funcA)には3番目に優先度が高い優先度(2)を生成し、再利用度が1番低い関数(funcB)には優先度が1番低い優先度(1)を生成する。
そして、再利用命令変換部623は、図18(a)において示した再利用命令変換部623と同様に、実行結果を再利用させる再利用区間の呼出し命令を優先度が含まれる再利用命令に優先度に基づいて変換する。
このようにして、プログラム変換処理部600は、右矢印に対して右側に位置する枠の中に示すようなプログラムを生成する。このプログラムにより、int型の1個の変数を引数とするfuncAは優先度(2)を含む再利用命令(memoCall)により呼び出される。さらに、int型の2個の変数を引数とするfuncBは優先度(1)を含む再利用命令(memoCall)により呼び出され、bool型の2個の変数を引数とするfuncCは優先度(4)を含む再利用命令(memoCall)により呼び出される。また、bool型の3個の変数を引数とするfuncCは優先度(3)を含む再利用命令(memoCall)により呼び出される。
図19は、本発明の第3の実施の形態における引数の型は同じだが使用態様が異なる関数を含むプログラムのプログラム変換処理部600による変換例を示す模式図である。
図19(a)は、引数の型は同じだが引数の使用態様が定数あるいは変数で異なる複数の関数を含むプログラムのプログラム変換処理部600による変換例を示す模式図である。ここでは、再利用候補区間解析部612は、引数が定数および変数のいずれであるかおよび引数の採り得る値の限定を使用態様として解析することを想定する。また、再利用度生成部621は、関数の入力値が採り得る値の組合せに基づいて再利用度を生成することを想定する。
図19(a)の右矢印に対して左側に位置する枠の中には、プログラム変換処理部600に処理される前のソースプログラムの一例がC言語により示されている。また、右矢印に対して右側に位置する枠の中には、プログラム変換処理部600に処理されたプログラムの一例がアセンブリ言語により示されている。なお、ここでは、優先度生成部622は、優先度として「1乃至9」の値を生成するものと想定する。
ソースプログラムには、プログラムのメインの関数(funcX)と、そのメインの関数により呼び出される2つの関数(funcAおよびB)とが示されている。この2つの関数として、1個のint型の変数を引数と定義しているが関数が呼び出される段階で「2」および「3」の2つの値に引数が限定される関数(funcA)と、1個のint型の変数を引数とする関数(funcB)とが示されている。
このソースプログラムは、まず、2つの関数(funcAおよびB)における引数が定数および変数のいずれであるか、および、引数の採り得る値の限定について関数毎に再利用候補区間解析部612により解析される。そして、再利用度生成部621は、再利用候補区間解析部612が解析した引数の個数および型に基づいて再利用度を生成する。
その結果、再利用度生成部621は、1個のint型の変数を引数と定義しているが関数が呼び出される段階で「2」および「3」の2つの値に引数が限定されるfuncAの再利用度が1番高い度合いの再利用度を生成する。さらに、再利用度生成部621は、1個のint型の変数を引数とするfuncBの再利用度が1番低い度合いの再利用度を生成する。
次に、優先度生成部622は、2つの関数(funcAおよびB)の優先度を生成する。この優先度生成部622は、再利用度に基づいて優先度を生成することにより、再利用度が1番高い関数(funcA)には1番優先度が高い優先度(9)を生成し、再利用度が1番低い関数(funcB)には1番優先度が低い優先度(1)を生成する。
そして、再利用命令変換部623は、図18において示した再利用命令変換部623と同様に、実行結果を再利用させる再利用区間の呼出し命令を優先度が含まれる再利用命令に優先度に基づいて変換する。
このようにして、プログラム変換処理部600は、右矢印に対して右側に位置する枠の中に示すようなプログラムを生成する。このプログラムにより、1個のint型の変数を引数と定義しているが関数が呼び出される段階で「2」および「3」の2つの値に引数が限定されるfuncAは優先度(9)を含む再利用命令(memoCall)により呼び出される。さらに、1個のint型の変数を引数とするfuncBは優先度(1)を含む再利用命令(memoCall)により呼び出される。
図19(b)は、関数の呼び出される回数が異なる複数の関数を含むプログラムのプログラム変換処理部600による変換例を示す模式図である。ここでは、再利用候補区間解析部612および再利用度生成部621は、図7において示した動作例と同様の動作をすることを想定する。また、ここでは、優先度生成部622は、優先度として「1乃至5」の値を生成するものとする。
図19(b)の右矢印に対して左側に位置する枠の中には、プログラム変換処理部600に処理される前のソースプログラムの一例がC言語により示されている。また、右矢印に対して右側に位置する枠の中には、プログラム変換処理部600に処理されたプログラムの一例がアセンブリ言語により示されている。
ソースプログラムには、プログラムのメインの関数(funcX)と、そのメインの関数により呼び出される2つの関数(funcAおよびB)とが示されている。この2つの関数のうちfuncAは、1個のint型の変数を引数とする関数であり、メインの関数(funcX)において3回呼び出される関数である。funcBは、1個のint型の変数を引数とする関数であり、メインの関数(funcX)において1回呼び出される関数である。
このソースプログラムは、再利用候補区間解析部612および再利用度生成部621によって、図7において示した動作例と同様に解析および再利用度の生成がされる。これにより、1個のint型の変数を引数とする関数であり、メインの関数(funcX)において3回呼び出される関数(funcA)に関しては、1番高い度合いの再利用度が生成される。また、1個のint型の変数を引数とする関数であり、メインの関数(funcX)において1回呼び出される関数(funcB)に関しては、1番低い度合いの再利用度が生成される。
次に、優先度生成部622により2つの関数(funcA乃至funcC)の優先度が生成される。優先度生成部622は、再利用度に基づいて優先度を生成することにより、
再利用度が1番高い関数(funcA)には1番優先度が高い優先度(5)を生成し、
再利用度が1番低い関数(funcB)には1番優先度が低い優先度(1)を生成する。
そして、再利用命令変換部623は、実行結果を再利用させる再利用区間の呼出し命令を優先度が含まれる再利用命令に図19(a)と同様にして変換する。
このようにして、プログラム変換処理部600は、右矢印に対して右側に位置する枠の中に示すようなプログラムを生成する。すなわち、1個のint型の変数を引数とする関数であり、メインの関数(funcX)において3回呼び出されるfuncAは、優先度(5)を含む再利用命令(memoCall)により呼び出されるプログラムが生成される。また、1個のint型の変数を引数とする関数であり、メインの関数(funcX)において1回呼び出されるfuncBは、優先度(1)を含む再利用命令(memoCall)により呼び出されるプログラムが生成される。
[本発明の第3の実施の形態における再利用命令の一例]
次に、本発明の第3の実施の形態におけるコンパイル処理装置500が生成する再利用命令について図面を参照して説明する。
図20は、本発明の第3の実施の形態における関数の呼出し命令および関数の再利用命令の一例を示す概念図である。ここでは、データ処理装置100のプロセッサコア300は図10と同様にMIPSにより構成されることを想定する。また、ここでは、左端は最上位ビット(MSB)を示し、右端は最下位ビット(LSB)を示している。図20(b)では、図10(b)に示したMIPSにおける関数の再利用命令の第1再利用フィールド731および第2再利用フィールド751に替えて、第1再利用フィールド732および733と、第2再利用フィールド752および753とが示されている。なお、第1再利用フィールド732および733と、第2再利用フィールド752および753と以外の各フィールドの機能は、図10と同様のものであるため、図10と同符号を付してここでの各フィールドの説明を省略する。
図20(a)には、MIPS命令セットにおける関数の呼出し命令(call)であるJALR命令が示されている。本発明の第3の実施の形態において再利用されない関数の呼出し命令は、図10において示した本発明の第1の実施の形態と同様に、MIPS命令セットにおけるJALR命令が用いられる。
図20(b)には、本発明の第3の実施の形態における関数の再利用命令の一例が示されている。
第1再利用フィールド732および733は、第2再利用フィールド752および753とともに優先度が含まれる再利用命令であることを示すフィールドである。この第1再利用フィールド732および733は、第2再利用フィールド752および753のビット列と連結させることによって、優先度を示す10ビットの数値を示すフィールドになる。
例えば、第1再利用フィールド732には、第2再利用フィールド752とともに、優先度が最も低い再利用命令におけるビット列の値が格納されている。この第1再利用フィールド732は、第2再利用フィールド752と連結させることによって、10ビットのビット列(0000000001)となる。すなわち、この命令を処理するデータ処理装置において、このビット列(0000000001)は優先度(1)を示すと判断される。
さらに、第1再利用フィールド733には、第2再利用フィールド753とともに、優先度が最も高い再利用命令におけるビット列の値が格納されている。この第1再利用フィールド733は、第2再利用フィールド753と連結させることによって、10ビットのビット列(1111111111)となる。すなわち、この命令を処理するデータ処理装置において、このビット列(1111111111)は優先度(1024)を示すと判断される。
このように、第3の実施の形態における再利用命令変換部623は、第1再利用フィールド732乃至733と、第2再利用フィールド752乃至753とを連結したビット列の示す値を変えることで、優先度の異なる再利用命令を生成することが出来る。
[本発明の第3の実施の形態におけるコンパイル処理装置500の動作例]
次に、本発明の第3の実施の形態におけるコンパイル処理装置500の処理について図面を参照して説明する。
図21は、本発明の第1の実施の形態におけるコンパイル処理装置500によるコンパイル処理の処理手順を示すフローチャートである。
まず、コンパイル処理装置500により、ソースプログラム記憶部510からソースプログラムが読み出される(ステップS911)。次に、再利用候補区間抽出部611により、再利用候補区間が抽出される(ステップS912)。
そして、再利用候補区間解析部612により、再利用候補区間の使用態様が解析される(ステップS913)。なお、ステップS913は、特許請求の範囲に記載の解析手順の一例である。
次に、再利用度生成部621により、再利用候補区間の解析結果に基づいて再利用度が生成される(ステップS914)。なお、ステップS914は、特許請求の範囲に記載の再利用度生成手順の一例である。
続いて、優先度生成部622により、再利用度に基づいて優先度が生成される(ステップS915)。
そして、再利用命令変換部623により、再利用度および優先度に基づいて再利用候補区間の呼出し命令が優先度が含まれる再利用命令に変換される(ステップS916)。これは、関数が再利用候補区間である場合には、関数の呼出し命令(call)が優先度が含まれる再利用命令(memoCall)に変換されることを意味する。なお、ステップS915は、特許請求の範囲に記載の命令変換手順の一例である。
そして、コード生成部522により、変換された命令を含むプログラムに基づいて機械語プログラムのコードであるオブジェクトプログラムが生成される(ステップS917)
このように、本発明の第3の実施の形態によれば、優先度を生成することによって、実行結果が再利用される度合いに基づいて、再利用される再利用候補区間の呼出し命令を履歴メモリに保存される優先度を含む再利用命令に変換することが出来る。
<4.第4の実施の形態>
[プロセッサコア300および履歴管理部400の構成例]
図22は、本発明の第4の実施の形態におけるプロセッサコア300および履歴管理部400の構成例を示すブロック図である。ここでは、図13において示した構成に加えて、優先度テーブル450、履歴メモリ容量管理部460、および、低優先度履歴消去部470を備えている。ここでは、優先度テーブル450、履歴メモリ容量管理部460、および、低優先度履歴消去部470以外の構成の機能は、図13とほぼ同様のものであるため、図13と同符号を付してここでの詳細な説明を省略する。
実行部330は、命令デコーダ320から優先度が含まれる再利用命令に基づく制御信号が供給された場合には、優先度が含まれる再利用命令が指定する再利用区間の処理を開始する。この処理の開始とともに、レジスタファイル340から取得した再利用区間の区間識別情報および優先度を信号線309を介して履歴管理部400に出力する。
また、履歴対象データ保持部410は、実行履歴を登録するための情報が整った場合には、実行履歴とともに優先度を履歴登録部440に供給する。
履歴登録部440は、新たな実行履歴を履歴メモリ430に登録する場合には、優先度を履歴メモリ430に供給する。また、この履歴登録部440は、新たな実行履歴を履歴メモリ430に登録する際に、履歴メモリ容量管理部460から通知された履歴メモリの空き容量より新たな実行履歴の容量のほうが大きい場合には、登録を一時中断する。そして、この場合において、履歴登録部440は、その登録を一時中断した実行履歴に関する優先度を低優先度履歴消去部470に供給する。
また、この履歴登録部440は、既に登録された実行履歴に関する優先度よりも新たな実行履歴に関する優先度のほうが低いことを示す情報が低優先度履歴消去部470から供給された場合には、新たな実行履歴は登録しない。
優先度テーブル450は、履歴メモリ430に登録されている実行履歴に関する優先度および履歴メモリ430における実行履歴のアドレスを優先度情報として保持するものである。この優先度テーブル450は、例えば、履歴メモリ430に新たな実行履歴が保持された場合には、履歴メモリ430から供給されたその登録された実行履歴に関する優先度と、その登録された実行履歴のアドレス情報とを優先度情報として保持する。そして、この優先度テーブル450は、例えば、履歴メモリ430において実行履歴が消去された場合には、その消去された実行履歴に関する優先度情報を消去する。
また、この優先度テーブル450は、低優先度履歴消去部470によって検索された最も低い優先度の優先度情報を消去候補情報として低優先度履歴消去部470に供給する。なお、優先度テーブル450は、特許請求の範囲に記載の優先度テーブルの一例である。
履歴メモリ容量管理部460は、履歴メモリ430の空き容量を管理するものである。この履歴メモリ容量管理部460は、例えば、履歴メモリ430に新たな実行履歴が登録される度に、履歴メモリ430の空き容量を測定する。さらに、この履歴メモリ容量管理部460は、履歴メモリ430から実行履歴が消去される度に、履歴メモリ430の空き容量を測定する。この履歴メモリ容量管理部460は、履歴メモリ430の空き容量に関する情報を履歴登録部440に供給する。
低優先度履歴消去部470は、履歴メモリ430から消去候補情報が指し示す実行履歴を削除するものである。この低優先度履歴消去部470は、最小値優先度履歴検索部471と、優先度比較部472と、消去部473とを備える。
最小値優先度履歴検索部471は、優先度テーブル450から最も低い優先度を含む優先度情報を消去候補情報として検索するものである。この最小値優先度履歴検索部471は、検索された消去候補情報を優先度テーブル450から抽出し、その抽出した消去候補情報を優先度比較部472に供給する。なお、最小値優先度履歴検索部471は、特許請求の範囲に記載の最低優先度履歴検索部の一例である。
優先度比較部472は、新たな実行履歴に関する優先度と、最小値優先度履歴検索部471から供給された消去候補情報に含まれる優先度とを比較するものである。そして、この優先度比較部472は、消去候補情報に含まれる優先度のほうが新たな実行履歴に関する優先度より低い場合には、この消去候補情報を消去部473に供給する。
また、この優先度比較部472は、新たな実行履歴に関する優先度のほうが消去候補情報に含まれる優先度よりも低い場合には、新たな実行履歴の登録を中止させる情報を履歴登録部440に供給する。なお、優先度比較部472は、特許請求の範囲に記載の優先度比較部の一例である。
消去部473は、優先度比較部472から供給された消去候補情報に基づいて履歴メモリ430から実行履歴を消去するものである。この消去部473は、優先度比較部472から供給された消去候補情報に含まれているアドレスが指し示す実行履歴を履歴メモリ430から消去する。なお、消去部473は、特許請求の範囲に記載の消去部の一例である。
[履歴メモリ430のデータ構造例]
図23は、本発明の第4の実施の形態における履歴メモリ430のデータ構造の一例を示す概念図である。ここでは、履歴メモリ430により、区間識別情報ごとに保持された実行履歴のうち、1つの区間識別情報における実行履歴を木構造により保持する構成が示されている。この例では、引数がn個であり、かつ、実行結果である出力をm個の格納先に返す関数を想定している。また、ここでは、関数の開始アドレスを区間識別情報として用いることとする。さらに、ここでは、m個目の出力のアドレスを優先度情報の登録された実行履歴のアドレスとすることとする。
この例では、木構造における関数ルート815と、第1の引数ノード825および826と、第nの引数ノード835乃至838と、第1の出力ノード845乃至848と、第mの出力ノード855乃至858とが示されている。
関数ルート815には、図14において示した第1の実施の形態における関数ルート8
10と同様に、区間識別情報である関数の開始アドレスと、第1の引数ノード825を指し示すポインタとが示されている。
第1および第nの引数ノード825、826および835乃至838には、図14において示した第1の実施の形態における第1および第nの引数ノード821、822および831乃至834と同様に、引数の入力値と、型と、種類とが示されている。
また、第1および第nの引数ノード825、826および835乃至838には、図14における第1の実施の形態の引数ノード821、822および831乃至834と同様に、右ポインタおよび下ポインタが示されている。さらに、第1および第nの引数ノード825、826および835乃至838には、履歴メモリ430から消去される場合において、次の引数の引数ノードを指し示す消去ポインタが点線の矢印で示されている。また、第nの引数ノード835乃至838の各々は、第1の出力ノード845乃至848にそれぞれ連結されている。
第1および第mの出力ノード845乃至848および855乃至858には、図14において示した第1の実施の形態の出力ノード841乃至844および851乃至854と同様に、実行履歴を実行した結果の出力値と、種類と、型とが示されている。また、第1の出力ノード845乃至848には、第1の実施の形態の出力ノード841乃至844と同様に、右ポインタが示されている。さらに、第1および第mの出力ノード845乃至848および855乃至858には、履歴メモリ430から消去される場合において、次の引数の引数ノードを指し示す消去ポインタが点線の矢印で示されている。
このような木構造における入力値の比較処理は、図14において示した第1の実施の形態における木構造における入力値の比較処理と同様であるため、ここでの詳細な説明を省略する。
このような木構造において、履歴メモリ430から実行履歴を消去する場合には、その実行履歴に関するm番目の出力ノードのアドレスが消去部473から供給されると、そのアドレスの出力ノードから実行履歴の消去が開始される。この場合において、その指定されたm番目の出力ノードから1番目の出力ノードまでの出力ノードをそれぞれの消去ポインタを参照して抽出し、1番目の出力ノードの消去ポインタが指し示すn番目の入力ノードを参照するとともに出力ノードを消去する。
次に、履歴メモリ430から消去する実行履歴に関する入力ノードの消去をn番目の入力ノードから開始する。この場合において、消去ポインタにより指し示された入力ノードが、その消去ポインタを保持していたノード以外への右ポインタあるいは下ポインタを保持している場合には、その入力ノードは消去しない。
そして、その消去しない入力ノードにおいて、消去された入力ノードを指し示すポインタが消去されることによって、入力ノードの消去を終了させる。また、1番目の入力ノードにおいて、消去された入力ノード以外を指し示す右ポインタまたは下ポインタが保持されていない場合には、関数ルート815も消去させて実行履歴の消去を終了させる。
例えば、m番目の出力ノードにおける出力ノード855のアドレスが消去部473から供給された場合には、その出力ノード855からこの出力に関する実行履歴の消去が開始される。これにより、出力ノード855から1番目の出力ノード845まで消去ポインタを参照して抽出し、1番目の出力ノード845の消去ポインタが指し示すn番目の入力ノード835を参照するとともに、出力ノード845から855までの出力ノードを消去する。
次に、n番目の入力ノード835が出力ノード845以外への右ポインタあるいは下ポインタを含んでいるか否か検出される。この場合においては、n番目の入力ノード835は右ポインタにより1番目の出力ノード845を指し示しているので、n番目の入力ノード836を指し示す下ポインタがn番目の入力ノード835に含まれているか否かが検出される。
この場合において、n番目の入力ノード836が履歴メモリ430に保持されており、n番目の入力ノード835に下ポインタが含まれているときには、n番目の入力ノード835は消去しないで、n番目の入力ノード835における右ポインタを消去する。そして、実行履歴の消去を終了させる。
一方、n番目の入力ノード836が履歴メモリ430に保持されていないで、n番目の入力ノード835に下ポインタが含まれていないときには、n番目の入力ノード835の消去ポインタが指し示す入力ノードを参照するとともに入力ノード835を消去する。そして、消去しない入力ノードを検出するか、入力ノードを全て消去して関数ルート815を消去するまで入力ノードの消去が繰り返される。
[優先度テーブル450のデータ構造例]
図24は、本発明の第4の実施の形態における優先度テーブル450のデータ構造の一例を示す概念図である。ここでは、一例として、1乃至6の優先度と、この優先度を含む再利用命令により生成された実行履歴に関するアドレスとが示されている。
優先度カラム861には、優先度テーブル450に登録されている優先度が示されている。この優先度カラム861には、履歴メモリ430に登録されている実行履歴に関する全ての優先度が格納される。例えば、1乃至6の優先度を含む再利用命令により生成された実行履歴が履歴メモリ430に保持されている場合には、優先度カラム861には1乃至6の優先度が格納されている。
実行履歴最終出力アドレスカラム862には、優先度カラム861に示した優先度を含む再利用命令によって生成された履歴メモリ430における実行履歴の最終出力アドレスが示されている。この最終出力アドレスは、例えば、図24において示したm番目の出力ノード855乃至858のアドレスである。
この例において、例えば、優先度が「6」である再利用区間の実行履歴が履歴メモリ430に新たに登録された場合には、優先度(6)および履歴メモリ430におけるm番目の出力ノードのアドレスが、履歴メモリ430から優先度テーブル450に供給される。この場合において、優先度テーブル450は、優先度カラム861に優先度(6)が既に登録されているときには、その優先度(6)に対する実行履歴最終出力アドレスカラム862に新たな優先度情報のm番目の出力ノードのアドレスを追加する。
また、この場合において、優先度カラム861に優先度(6)が未登録の場合には、新たに登録するとともに、その優先度(6)に対応する実行履歴最終出力アドレスカラム862を生成して、新たな優先度情報のm番目の出力ノードのアドレスを登録する。
[本発明の第4の実施の形態におけるプロセッサコア300および履歴管理部400により保存される実行履歴の一例]
図25は、本発明の第4の実施の形態におけるプロセッサコア300により処理されるプログラムおよび履歴管理部400により保存される実行履歴の一例を示す概念図である。ここでは、従来技術を用いて実行履歴を保存する場合と、本発明の第4の実施の形態により実行履歴を保存する場合とが表されている。なお、ここでは、変換されたプログラムの実行は、ここで示したプログラムの上から順に実行されるものと想定する。
図25(a)には、従来技術によるソースプログラムの変換例を示す模式図である。ここでは、右矢印に対して左側にある枠の中には、従来技術により変換されるソースプログラムがC言語により示されている。また、右矢印に対して右側にある枠の中には、従来技術により変換されたプログラムの一例がアセンブリ言語により示されている。
ソースプログラムには、プログラムのメインの関数(funcX)と、そのメインの関数により呼び出される7つの関数とが示されている。この7つの関数として、int型の1個の変数を引数とする関数(funcA)と、bool型の1個の変数を引数とする関数(funcB)と、int型の1個の変数およびbool型の1個の変数を引数とする関数(funcC)とが示されている。さらに、bool型の3個の変数を引数とする関数(funcD)と、char型の1個の変数を引数とする関数(funcE)と、bool型の2個の変数を引数とする関数(funcF)とが示されている。また、int型の2個の変数を引数とする関数(funcG)が示されている。
このソースプログラムは、関数を再利用区間として指定する場合には全ての関数を再利用の対象とする従来技術のコンパイル処理装置により、全ての関数が再利用の対象とされるプログラムに変換される。その結果、右矢印に対して右側にある枠の中に示すように、funcA乃至Gを呼出し命令(call)で呼び出し、funcA乃至Gの実行結果を全て再利用するプログラムを生成する。
図25(b)は、図25(a)の右矢印の右側にある枠の中に示したプログラムを上から順に1回ずつ実行した場合における履歴メモリ430に保存される実行履歴の一例を示す模式図である。なお、ここでは、実行履歴が登録される履歴メモリは、便宜上、入力値および出力値の型や個数を問わず、3つの関数に関する実行履歴を登録できるものとする。また、図15(a)と同様に、新たな実行履歴を登録する際に履歴メモリの空き容量が無い場合には、最も長い期間未使用だった実効履歴を履歴メモリから消去した後に新たな実行履歴を履歴メモリに登録するものとする。さらに図15(a)と同様に、図25(a)において示した変換されたプログラムの呼出し命令を、上から順に1回ずつ実行するものとする。
従来技術における履歴メモリへの実行履歴の登録方法は、図15(b)において示した方法と同様のものであるので、ここでの詳細な説明を省略する。図25(a)の変換されたプログラムの呼出し命令を上から順に1回ずつ実行された結果、図25(b)において示すように、funcE乃至Gの3つの関数の実行履歴が履歴メモリに登録される。
このように、従来技術では、常に再利用される確率が高い実行履歴が履歴メモリに登録されているわけではない。すなわち、実行するプログラムによっては、全く再利用されない関数の実行履歴が履歴メモリに登録され、再利用の効果が出ない場合が生じる。
図25(c)は、本発明の第1の実施の形態によるソースプログラムの変換例を示す模式図である。ここでは、再利用度生成部621は、関数の入力値が採り得る値の組合せに基づいて再利用度を生成することを想定する。
ここでは、右矢印に対して左側にある枠の中には、図25(a)において示したソースプログラムと同様のソースプログラムがC言語により示されている。また、右矢印に対して右側にある枠の中には、本発明の第3の実施の形態により変換されたプログラムの一例がアセンブリ言語により示されている。
このソースプログラムは、図15(c)において示したソースプログラムと同様に再利用候補区間解析部612により解析され、そして、再利用度生成部621により同様にして再利用度が生成される。
その結果、bool型の1個の変数を引数とするfuncBに対して1番高い再利用度が生成され、bool型の2個の変数を引数とするfuncFに対して2番目に高い再利用度が生成される。また、bool型の3個の変数を引数とするfuncDに対して3番目に高い再利用度が生成され、char型の1個の変数を引数とするfuncEに対して4番目に高い再利用度が生成される。さらに、int型の1個の変数およびbool型の1個の変数を引数とするfuncCに対して5番目に高い再利用度が生成され、int型の1個の変数を引数とするfuncFには6番目に高い再利用度が生成される。そして、int型の2個の変数を引数とするfuncGには1番低い再利用度が生成される。
次に、優先度生成部622により7つの関数(funcA乃至G)の優先度が生成される。優先度生成部622は、再利用度に基づいて優先度を生成することにより、再利用度が1番高い関数(funcB)には1番優先度が高い優先度(7)を生成し、再利用度が2番目に高い関数(funcF)には2番目に優先度が高い優先度(6)を生成する。さらに、優先度生成部622は、再利用度が3番目に高い関数(funcD)には3番目に高い優先度(5)を生成し、再利用度が4番目に高い関数(funcE)には4番目に高い優先度(4)を生成する。また、再利用度が5番目に高い関数(funcC)には5番目に高い優先度(3)を生成し、再利用度が6番目に高い関数(funcA)には6番目に高い優先度(2)を生成する。そして、再利用度が1番低い関数(funcG)には1番低い優先度(1)を生成する。
そして、再利用命令変換部623は、実行結果を再利用させる再利用区間の呼出し命令を優先度が含まれる再利用命令に優先度に基づいて変換する。この図25(c)の場合においては、再利用命令変換部623は、履歴メモリの容量を考慮しないため、優先度が生成された全ての関数の呼出し命令を優先度が含まれる再利用命令に変換する。
その結果、再利用命令変換部623は、7つの関数(funcA乃至G)の呼出し命令(call)を優先度が含まれる再利用命令(memoCall)に変換したプログラムを生成する。
図25(d)には、図25(c)の右矢印の右側にある枠の中に示したプログラムに基づいて登録される実行履歴の一例が示されている。なお、履歴メモリ430は、便宜上、入力値および出力値の型や個数を問わず、3つの関数に関する実行履歴を登録できるものとする。また、ここでは、図25(a)において示した変換されたプログラムの命令を、上から順に1回ずつ実行するものとする。
本発明の第4の実施の形態におけるプロセッサコア300は、図25(a)において示した変換されたプログラムに基づいて、優先度が含まれる再利用命令(memoCall)により呼び出されるfuncA乃至Gの実行履歴を履歴管理部400に出力する。まず、最初に、funcAが再利用区間として呼び出され、funcAの実行履歴が履歴メモリ430に登録される。この時、図23において示した実行履歴のm番目の出力ノードのアドレスおよび優先度が履歴メモリ430から優先度テーブル450に供給されて、優先度テーブル450に優先度情報として登録される。そして、funcAに続いて呼び出される2つの関数(funcBおよびC)もfuncAと同様に、再利用区間として呼び出された後に実行履歴が登録されるとともに、優先度テーブル450に優先度情報が登録される。
その後、履歴メモリには空き容量が無い状態で、funcDが再利用区間として呼び出される。この時、優先度比較部472は、funcDの実行履歴に関する優先度(5)と、優先度テーブル450から最小値優先度履歴検索部471により検索された消去候補情報(funcAの優先度情報)の優先度(2)とを比較する。この結果、最小値優先度履歴検索部471は、消去候補情報(funcAの優先度情報)を消去部473に供給する。そして、消去部473は、供給された消去候補情報に基づきfuncAの実行履歴を消去する。この時、優先度テーブル450は、優先度テーブル450から供給されるfuncAの実行履歴の消去情報に従ってfuncAの優先度情報を消去する。そして、履歴登録部440は、履歴メモリ容量管理部460から供給される履歴メモリ430の空き情報に基づいて履歴メモリ430の空き容量を確認した後に、funcDの実行履歴を履歴メモリ430に登録する。また、このfuncDの実行履歴の登録に伴って、優先度テーブル450にfuncDの実行履歴に関する優先度情報が登録される。
次に、funcEが再利用区間として呼び出される。この時、優先度比較部472は、funcDのときと同様に、funcEの実行履歴に関する優先度(4)と、消去候補情報(funcCの優先度情報)の優先度(3)とを比較する。この比較の結果、消去候補情報(funcCの優先度情報)の優先度(3)のほうが低いと判断され、funcDのときと同様に、funcCの実行履歴が履歴メモリ430から消去され、新たにfuncEの実行履歴が履歴メモリ430に登録される。
そして、funcFが再利用区間として呼び出される。優先度比較部472による比較の結果、funcFの実行履歴に関する優先度(6)より消去候補情報(funcEの優先度情報)の優先度(4)のほうが低いと判断される。そして、funcDおよびfuncEのときと同様に、funcEの実行履歴が履歴メモリ430から消去され、新たにfuncFの実行履歴が履歴メモリ430に登録される。
最後に、funcGが再利用区間として呼び出される。優先度比較部472による比較の結果、funcGの実行履歴に関する優先度(1)は、消去候補情報(funcDの優先度情報)の優先度(5)よりも低いと判断される。そして、優先度比較部472は、funcGの実行履歴の登録を中止させる情報を履歴登録部440に供給する。これにより、履歴登録部440は、履歴メモリ430へのfuncGの実行履歴の登録を中止する。
このように、図25(c)の変換されたプログラムの呼出し命令を上から順に1回ずつ実行された結果、図25(d)において示すように、funcB、funcD、および、funcFの実行履歴が履歴メモリに登録される。
このように、本発明の第4の実施の形態によれば、優先度に従って履歴メモリ430に実行履歴を登録することにより、常に再利用される確率が高い関数を履歴メモリ430に登録しておくことができる。
[本発明の第4の実施の形態におけるプロセッサコア300および履歴管理部400の動作例]
次に、本発明の第4の実施の形態におけるプロセッサコア300および履歴管理部400の処理について図面を参照して説明する。
図26は、本発明の第4の実施の形態におけるプロセッサコア300および履歴管理部400による関数の実行処理の処理手順を示すフローチャートである。
まず、フェッチ部310およびレジスタファイル340に、関数を参照する命令およびその関数の入力値が読み出される(ステップS931)。次に、命令デコーダ320によって、関数を参照する命令がデコードされる(ステップS932)。続いて、デコードした命令が再利用命令か否かが解析される(ステップS933)。解析の結果、デコードした命令が再利用命令でない場合には、実行部330によって、レジスタファイル340から供給される入力値に基づいてその関数が実行され、実行結果が出力される(ステップS940)。そして、関数の実行処理は終了する。
一方、デコードした命令が再利用命令である場合には、検索要求入力部421によって、実行部330から供給された関数の開始アドレスおよび入力値を用いて履歴メモリ430から実行履歴が検索される(ステップS934)。
次に、実行履歴があるか否かが判断される(ステップS935)。実行履歴が履歴メモリ430にある場合には、実行結果出力部422によって、実行結果が出力される(ステップS938)。続いて、実行部330は、実行結果が出力された関数の実行を中止させる(ステップS939)。そして、関数の実行は終了する。
一方、実行履歴が履歴メモリ430にない場合には、実行部330によって、レジスタファイル340から供給される入力値に基づいてその関数が実行され、実行結果が出力される(ステップS936)。そして、履歴登録部440によって、履歴メモリ430の空き容量に応じた実行履歴の登録処理が行われる(ステップS950)。そして、関数の実行は終了する。
次に、本発明の第4の実施の形態によるステップS950の処理について図面を参照して説明する。
図27は、本発明の第4の実施の形態における履歴管理部400による実行履歴の登録処理(ステップS950)の処理手順例を示すフローチャートである。
まず、履歴登録部440により、履歴メモリ容量管理部460から供給された履歴メモリ430の空き容量の情報に基づいて、新たな実行履歴を登録する空き容量が履歴メモリ430にあるか否かが判断される(ステップS951)。その空き容量が履歴メモリ430に有る場合には、実行履歴が履歴メモリ430に登録される(ステップS952)。続いて、その実行履歴の優先度および履歴メモリ430における最後の出力ノードのアドレスが優先度テーブル450に登録される(ステップS953)。そして、実行履歴の登録処理は終了する。
一方、新たな実行履歴を登録する空き容量が履歴メモリ430にない場合には、新たな実行履歴の優先度と、最小値優先度履歴検索部471が検索した優先度が最小値の優先度情報の優先度とが優先度比較部472により比較される(ステップS954)。そして、新たな実行履歴の優先度が優先度情報の優先度よりも低い場合には、新たな実行履歴の履歴メモリ430への登録は中止される(ステップS955)。そして、実行履歴の登録処理は終了する。
また、優先度情報の優先度よりも新たな実行履歴の優先度のほうが高い場合には、消去部473によりその優先度情報が指し示す実行履歴が履歴メモリ430から消去される(ステップS956)。そして、ステップS951に戻り、処理が繰り返される。
このように、本発明の第4の実施の形態によれば、優先度に従って履歴メモリ430に実行履歴を登録することにより、常に再利用される確率が高い関数を履歴メモリ430に登録しておくことができる。
このように、本発明の実施の形態によれば、再利用度に基づいて命令区間の呼び出し命令を再利用命令に変換することによって、再利用される確率の高い命令区間の実行履歴のみを履歴メモリ430に保持することができる。これにより、実行履歴が再利用される効率を改善することができる。
なお、本発明の実施の形態は本発明を具現化するための一例を示したものであり、本発明の実施の形態において明示したように、本発明の実施の形態における事項と、特許請求の範囲における発明特定事項とはそれぞれ対応関係を有する。同様に、特許請求の範囲における発明特定事項と、これと同一名称を付した本発明の実施の形態における事項とはそれぞれ対応関係を有する。ただし、本発明は実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において実施の形態に種々の変形を施すことにより具現化することができる。
また、本発明の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。この記録媒体として、例えば、CD(Compact Disc)、MD(MiniDisc)、DVD(Digital Versatile Disk)、メモリカード、ブルーレイディスク(Blu-ray Disc(登録商標))等を用いることができる。
100 データ処理装置
120 バス
130 主記憶部
200 一次キャッシュ
210 命令キャッシュ
220 データキャッシュ
300 プロセッサコア
309、409 信号線
310 フェッチ部
320 命令デコーダ
330 実行部
340 レジスタファイル
400 履歴管理部
410 履歴対象データ保持部
420 履歴検索部
421 検索要求入力部
422 実行結果出力部
430 履歴メモリ
440 履歴登録部
450 優先度テーブル
460 履歴メモリ容量管理部
470 低優先度履歴消去部
471 最小値優先度履歴検索部
472 優先度比較部
473 消去部
500 コンパイル処理装置
510 ソースプログラム記憶部
520 再利用アシストコンパイル処理部
522 コード生成部
530 オブジェクトプログラム記憶部
600 プログラム変換処理部
610 ソースプログラム解析部
611 再利用候補区間抽出部
612 再利用候補区間解析部
620 最適化部
621 再利用度生成部
622 優先度生成部
623 再利用命令変換部

Claims (18)

  1. プログラムにおける命令区間の使用態様を解析する解析部と、
    前記命令区間の実行結果が再び利用される度合いを示す再利用度を前記解析の結果に基づいて生成する再利用度生成部と、
    前記命令区間の呼出し命令を前記再利用度に基づいて再利用命令に変換する命令変換部と
    を具備するプログラム変換処理装置。
  2. 前記解析部は、前記使用態様として前記命令区間の入力値の個数を解析し、
    前記再利用度生成部は、前記解析の結果に基づいて前記再利用度を生成する
    請求項1記載のプログラム変換処理装置。
  3. 前記解析部は、前記使用態様として前記命令区間の入力値が採り得る値の組合せを解析し、
    前記再利用度生成部は、前記解析の結果に基づいて前記再利用度を生成する
    請求項1記載のプログラム変換処理装置。
  4. 前記解析部は、前記使用態様として前記命令区間の呼び出される回数を解析し、
    前記再利用度生成部は、前記解析の結果に基づいて前記再利用度を生成する
    請求項1記載のプログラム変換処理装置。
  5. 前記命令区間は関数であり、前記解析部は前記使用態様として前記関数の入力値および呼び出される回数を解析し、
    前記再利用度生成部は、前記解析の結果に基づいて前記再利用度を生成する
    請求項1記載のプログラム変換処理装置。
  6. 前記命令区間はループであり、前記解析部は前記使用態様として前記ループの入力値および呼び出される回数を解析し、
    前記再利用度生成部は、前記解析の結果に基づいて前記再利用度を生成する
    請求項1記載のプログラム変換処理装置。
  7. 前記解析部は、前記使用態様として前記命令区間の前記入力値がメモリアクセスを伴うか否かを解析し、
    前記再利用度生成部は、前記命令区間の前記入力値がメモリアクセスを伴う場合には当該メモリアクセスを伴わない前記入力値を用いる場合と比較して低い前記度合いを示す前記再利用度を生成する
    請求項1記載のプログラム変換処理装置。
  8. 前記命令変換部は、前記再利用度と前記命令区間の前記実行結果を保持するためのデータである実行履歴のデータ量と前記実行履歴が保持される履歴メモリの容量とに基づいて、前記命令区間の前記データ量の総和が前記履歴メモリの容量以内となるように前記再利用度が最も高い前記命令区間から順に前記呼出し命令を前記再利用命令に変換する請求項1記載のプログラム変換処理装置。
  9. 前記実行履歴が前記履歴メモリに保持される際の優先度を前記再利用度に基づいて生成する優先度生成部をさらに具備し、
    前記命令変換部は、前記命令区間の呼出し命令を前記優先度が含まれる前記再利用命令に変換する請求項1記載のプログラム変換処理装置。
  10. 複数の命令区間のうち実行結果が再び利用される再利用区間を指定する再利用命令により呼び出された前記再利用区間における処理を実行し、前記再利用区間の区間識別情報と前記再利用区間の入力値と前記再利用区間の実行結果とを実行履歴として出力する実行部と、
    前記実行履歴を保持する履歴メモリと
    を具備するデータ処理装置。
  11. 前記実行部は、前記複数の命令区間のうち再び利用される度合いに基づいて抽出された命令区間を指定する前記再利用命令により呼び出された前記再利用区間における処理を実行し、前記実行履歴を出力する請求項10記載のデータ処理装置。
  12. 前記再利用区間は関数であり、前記実行部は、前記区間情報と前記再利用区間の入力値と前記再利用区間の実行結果として前記関数の開始アドレスと前記関数の入力値と前記関数の実行結果とを出力する請求項11記載のデータ処理装置。
  13. 前記再利用区間はループであり、前記実行部は、前記区間情報と前記再利用区間の入力値と前記再利用区間の実行結果として前記ループの開始アドレスと前記ループの入力値と前記ループの実行結果とを出力する請求項11記載のデータ処理装置。
  14. 前記区間識別情報と前記再利用区間の入力値とを用いて前記履歴メモリから前記実行結果が検索された場合には前記実行結果を出力する履歴検索部をさらに具備する請求項10記載のデータ処理装置。
  15. 前記実行結果が再利用される度合いの順位を示す優先度および前記実行履歴の前記履歴メモリにおけるアドレスを優先度情報として保持する優先度テーブルと、
    前記優先度テーブルから前記優先度が最も低い前記優先度情報を消去候補情報として検索する最低優先度履歴検索部と、
    前記実行部が前記履歴メモリに新たな実行履歴を保持しようとしている場合には前記消去候補情報の前記優先度と前記新たな実行履歴の前記優先度とを比較する優先度比較部と、
    前記消去候補情報の前記優先度が前記新たな実行履歴の前記優先度より低い場合には前記消去候補情報の前記アドレスに基づいて前記実行履歴を前記履歴メモリから消去する消去部と
    をさらに具備する請求項10記載のデータ処理装置。
  16. 前記履歴メモリの空き容量を管理する履歴メモリ管理部をさらに具備し、
    前記優先度比較部は、前記新たな実行履歴のデータ量が前記履歴メモリの空き容量よりも大きい場合には前記消去候補情報の前記優先度と前記新たな実行履歴の前記優先度とを比較する請求項15記載のデータ処理装置。
  17. プログラムにおける命令区間の使用態様を解析する解析手順と、
    前記命令区間の実行結果が再び利用される度合いを示す再利用度を前記解析の結果に基づいて生成する再利用度生成手順と、
    前記命令区間の呼出し命令を前記再利用度に基づいて再利用命令に変換する命令変換手順と
    を具備するプログラム変換処理方法。
  18. 複数の命令区間のうち実行結果が再び利用される再利用区間を指定する再利用命令により呼び出された前記再利用区間における処理を実行し、前記再利用区間の区間識別情報と前記再利用区間の入力値と前記再利用区間の実行結果とを実行履歴として出力する実行手順を具備するデータ処理方法であって、
    前記実行履歴を保持する履歴メモリを備えるコンピュータにおけるデータ処理方法。
JP2009187623A 2009-08-13 2009-08-13 プログラム変換処理装置、データ処理装置、プログラム変換処理方法およびデータ処理方法 Abandoned JP2011039857A (ja)

Priority Applications (7)

Application Number Priority Date Filing Date Title
JP2009187623A JP2011039857A (ja) 2009-08-13 2009-08-13 プログラム変換処理装置、データ処理装置、プログラム変換処理方法およびデータ処理方法
KR1020127003143A KR20120068824A (ko) 2009-08-13 2010-08-05 데이터 처리 장치, 데이터 처리 방법, 프로그램 변환 처리 장치, 프로그램 변환 처리 방법, 프로그램 해석 처리 장치, 프로그램 해석 처리 방법, 이력 보존 장치, 프로그램, 컴파일 처리 장치, 및 컴파일 처리 방법
TW099126111A TW201124910A (en) 2009-08-13 2010-08-05 Data processing device, data processing method, program conversion processing device, and program conversion processing method
US13/389,134 US20120185859A1 (en) 2009-08-13 2010-08-05 Methods and systems for program analysis and program conversion
CN2010800349313A CN102667715A (zh) 2009-08-13 2010-08-05 数据处理设备、数据处理方法、程序转换处理设备和程序转换处理方法、程序转换处理设备、数据处理设备、程序转换处理方法和数据处理方法、数据处理设备、数据处理方法、程序分析处理设备和程序分析处理方法、数据处理设备、历史保存设备、数据处理方法和程序、以及编译处理设备
PCT/JP2010/063246 WO2011018974A1 (ja) 2009-08-13 2010-08-05 データ処理装置、データ処理方法、プログラム変換処理装置およびプログラム変換処理方法、プログラム変換処理装置、データ処理装置、プログラム変換処理方法およびデータ処理方法、データ処理装置、データ処理方法、プログラム解析処理装置およびプログラム解析処理方法、データ処理装置、履歴保存装置、データ処理方法およびプログラム、並びに、コンパイル処理装置、データ処理装置、コンパイル処理方法およびプログラム
EP10808157A EP2466453A1 (en) 2009-08-13 2010-08-05 Data processing device, data processing method, program conversion processing device, and program conversion processing method, program conversion processing device, data processing device, program conversion processing method, and data processing method, data processing device, data processing method, program analysis processing device, and program analysis processing method, data processing device, history storing device, data processing method, and program, and compile processing device, data processing device, compile processing method, and program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009187623A JP2011039857A (ja) 2009-08-13 2009-08-13 プログラム変換処理装置、データ処理装置、プログラム変換処理方法およびデータ処理方法

Publications (1)

Publication Number Publication Date
JP2011039857A true JP2011039857A (ja) 2011-02-24

Family

ID=43767549

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009187623A Abandoned JP2011039857A (ja) 2009-08-13 2009-08-13 プログラム変換処理装置、データ処理装置、プログラム変換処理方法およびデータ処理方法

Country Status (1)

Country Link
JP (1) JP2011039857A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014200084A (ja) * 2013-03-14 2014-10-23 株式会社半導体エネルギー研究所 データ処理装置、データ処理方法およびコンピュータプログラム
WO2017204139A1 (ja) * 2016-05-23 2017-11-30 日本電気株式会社 データ処理装置、データ処理方法、およびプログラム記録媒体

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014200084A (ja) * 2013-03-14 2014-10-23 株式会社半導体エネルギー研究所 データ処理装置、データ処理方法およびコンピュータプログラム
US10061558B2 (en) 2013-03-14 2018-08-28 Semiconductor Energy Laboratory Co., Ltd. Data processing device, data processing method, and computer program
JP2018137751A (ja) * 2013-03-14 2018-08-30 株式会社半導体エネルギー研究所 データ処理装置
WO2017204139A1 (ja) * 2016-05-23 2017-11-30 日本電気株式会社 データ処理装置、データ処理方法、およびプログラム記録媒体
US10789203B2 (en) 2016-05-23 2020-09-29 Nec Corporation Data processing apparatus, data processing method, and program recording medium

Similar Documents

Publication Publication Date Title
WO2011018974A1 (ja) データ処理装置、データ処理方法、プログラム変換処理装置およびプログラム変換処理方法、プログラム変換処理装置、データ処理装置、プログラム変換処理方法およびデータ処理方法、データ処理装置、データ処理方法、プログラム解析処理装置およびプログラム解析処理方法、データ処理装置、履歴保存装置、データ処理方法およびプログラム、並びに、コンパイル処理装置、データ処理装置、コンパイル処理方法およびプログラム
KR102376117B1 (ko) 병렬 결정 트리 프로세서 아키텍처
US7249350B2 (en) Optimized translation of scalar type SIMD instructions into non-scalar SIMD instructions
JP6398725B2 (ja) コンパイルプログラム、コンパイル方法およびコンパイラ装置
JP2002116914A (ja) コンパイラ
JP2006313422A (ja) 演算処理装置及びデータ転送処理の実行方法
JP2015201119A (ja) コンパイルプログラム、コンパイル方法およびコンパイル装置
US7228528B2 (en) Building inter-block streams from a dynamic execution trace for a program
US9182960B2 (en) Loop distribution detection program and loop distribution detection method
JP5440287B2 (ja) シンボリック実行支援プログラム、方法及び装置
JP2011039857A (ja) プログラム変換処理装置、データ処理装置、プログラム変換処理方法およびデータ処理方法
US8490098B2 (en) Concomitance scheduling commensal threads in a multi-threading computer system
JP4930435B2 (ja) 可変長符号復号装置、可変長符号復号方法およびプログラム
US10108405B2 (en) Compiling apparatus and compiling method
JPWO2017204139A1 (ja) データ処理装置、データ処理方法、およびプログラム記録媒体
CN113031952A (zh) 深度学习模型的执行代码的确定方法、装置及存储介质
JP2011039859A (ja) データ処理装置、履歴保存装置、データ処理方法およびプログラム
JP2011096153A (ja) コンパイル処理装置、データ処理装置、コンパイル処理方法およびプログラム
CN216527140U (zh) 一种分支预测的装置及处理器
JP4311327B2 (ja) ソースコード自動生成装置、ソースコード自動生成方法、プログラムおよび記録媒体
JP2011039858A (ja) データ処理装置、データ処理方法、プログラム解析処理装置およびプログラム解析処理方法
JP3758984B2 (ja) マイクロプロセッサ用目的コードの最適化装置、最適化方法及び最適化プログラムを記録した記録媒体
JP2011039856A (ja) データ処理装置、データ処理方法、プログラム変換処理装置およびプログラム変換処理方法
Poletanović et al. Implementation of Machine Outliner for nanoMIPS in the LLVM Compiler Infrastructure
CN115543472A (zh) 定长指令集程序的运行方法及中央处理器

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120723

A762 Written abandonment of application

Free format text: JAPANESE INTERMEDIATE CODE: A762

Effective date: 20130416