(57)【要約】【課題】値再利用（メモ化：Memoization）の効率を改善させる。【解決手段】再利用候補区間解析部６１２は、再利用候補区間に関する使用態様を解析する。再利用度生成部６２１は、再利用候補区間解析部６１２から供給された解析結果に基づいて、再利用候補区間の実行結果が再び利用される度合いを示す再利用度を生成する。再利用命令変換部６２３は、再利用度生成部６２１から供給された再利用度に基づいて、実行結果を再利用させる再利用候補区間の呼出し命令を再利用命令に変換する。これにより、再利用される確率の高い再利用候補区間だけを再利用命令によって呼び出すようにソースプログラムを変換する。【選択図】図１
2011039857.tif 000002
【特許請求の範囲】
【請求項１】
プログラムにおける命令区間の使用態様を解析する解析部と、
前記命令区間の実行結果が再び利用される度合いを示す再利用度を前記解析の結果に基づいて生成する再利用度生成部と、
前記命令区間の呼出し命令を前記再利用度に基づいて再利用命令に変換する命令変換部と
を具備するプログラム変換処理装置。
【請求項２】
前記解析部は、前記使用態様として前記命令区間の入力値の個数を解析し、
前記再利用度生成部は、前記解析の結果に基づいて前記再利用度を生成する
請求項１記載のプログラム変換処理装置。
【請求項３】
前記解析部は、前記使用態様として前記命令区間の入力値が採り得る値の組合せを解析し、
前記再利用度生成部は、前記解析の結果に基づいて前記再利用度を生成する
請求項１記載のプログラム変換処理装置。
【請求項４】
前記解析部は、前記使用態様として前記命令区間の呼び出される回数を解析し、
前記再利用度生成部は、前記解析の結果に基づいて前記再利用度を生成する
請求項１記載のプログラム変換処理装置。
【請求項５】
前記命令区間は関数であり、前記解析部は前記使用態様として前記関数の入力値および呼び出される回数を解析し、
前記再利用度生成部は、前記解析の結果に基づいて前記再利用度を生成する
請求項１記載のプログラム変換処理装置。
【請求項６】
前記命令区間はループであり、前記解析部は前記使用態様として前記ループの入力値および呼び出される回数を解析し、
前記再利用度生成部は、前記解析の結果に基づいて前記再利用度を生成する
請求項１記載のプログラム変換処理装置。
【請求項７】
前記解析部は、前記使用態様として前記命令区間の前記入力値がメモリアクセスを伴うか否かを解析し、
前記再利用度生成部は、前記命令区間の前記入力値がメモリアクセスを伴う場合には当該メモリアクセスを伴わない前記入力値を用いる場合と比較して低い前記度合いを示す前記再利用度を生成する
請求項１記載のプログラム変換処理装置。
【請求項８】
前記命令変換部は、前記再利用度と前記命令区間の前記実行結果を保持するためのデータである実行履歴のデータ量と前記実行履歴が保持される履歴メモリの容量とに基づいて、前記命令区間の前記データ量の総和が前記履歴メモリの容量以内となるように前記再利用度が最も高い前記命令区間から順に前記呼出し命令を前記再利用命令に変換する請求項１記載のプログラム変換処理装置。
【請求項９】
前記実行履歴が前記履歴メモリに保持される際の優先度を前記再利用度に基づいて生成する優先度生成部をさらに具備し、
前記命令変換部は、前記命令区間の呼出し命令を前記優先度が含まれる前記再利用命令に変換する請求項１記載のプログラム変換処理装置。
【請求項１０】
複数の命令区間のうち実行結果が再び利用される再利用区間を指定する再利用命令により呼び出された前記再利用区間における処理を実行し、前記再利用区間の区間識別情報と前記再利用区間の入力値と前記再利用区間の実行結果とを実行履歴として出力する実行部と、
前記実行履歴を保持する履歴メモリと
を具備するデータ処理装置。
【請求項１１】
前記実行部は、前記複数の命令区間のうち再び利用される度合いに基づいて抽出された命令区間を指定する前記再利用命令により呼び出された前記再利用区間における処理を実行し、前記実行履歴を出力する請求項１０記載のデータ処理装置。
【請求項１２】
前記再利用区間は関数であり、前記実行部は、前記区間情報と前記再利用区間の入力値と前記再利用区間の実行結果として前記関数の開始アドレスと前記関数の入力値と前記関数の実行結果とを出力する請求項１１記載のデータ処理装置。
【請求項１３】
前記再利用区間はループであり、前記実行部は、前記区間情報と前記再利用区間の入力値と前記再利用区間の実行結果として前記ループの開始アドレスと前記ループの入力値と前記ループの実行結果とを出力する請求項１１記載のデータ処理装置。
【請求項１４】
前記区間識別情報と前記再利用区間の入力値とを用いて前記履歴メモリから前記実行結果が検索された場合には前記実行結果を出力する履歴検索部をさらに具備する請求項１０記載のデータ処理装置。
【請求項１５】
前記実行結果が再利用される度合いの順位を示す優先度および前記実行履歴の前記履歴メモリにおけるアドレスを優先度情報として保持する優先度テーブルと、
前記優先度テーブルから前記優先度が最も低い前記優先度情報を消去候補情報として検索する最低優先度履歴検索部と、
前記実行部が前記履歴メモリに新たな実行履歴を保持しようとしている場合には前記消去候補情報の前記優先度と前記新たな実行履歴の前記優先度とを比較する優先度比較部と、
前記消去候補情報の前記優先度が前記新たな実行履歴の前記優先度より低い場合には前記消去候補情報の前記アドレスに基づいて前記実行履歴を前記履歴メモリから消去する消去部と
をさらに具備する請求項１０記載のデータ処理装置。
【請求項１６】
前記履歴メモリの空き容量を管理する履歴メモリ管理部をさらに具備し、
前記優先度比較部は、前記新たな実行履歴のデータ量が前記履歴メモリの空き容量よりも大きい場合には前記消去候補情報の前記優先度と前記新たな実行履歴の前記優先度とを比較する請求項１５記載のデータ処理装置。
【請求項１７】
プログラムにおける命令区間の使用態様を解析する解析手順と、
前記命令区間の実行結果が再び利用される度合いを示す再利用度を前記解析の結果に基づいて生成する再利用度生成手順と、
前記命令区間の呼出し命令を前記再利用度に基づいて再利用命令に変換する命令変換手順と
を具備するプログラム変換処理方法。
【請求項１８】
複数の命令区間のうち実行結果が再び利用される再利用区間を指定する再利用命令により呼び出された前記再利用区間における処理を実行し、前記再利用区間の区間識別情報と前記再利用区間の入力値と前記再利用区間の実行結果とを実行履歴として出力する実行手順を具備するデータ処理方法であって、
前記実行履歴を保持する履歴メモリを備えるコンピュータにおけるデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム変換処理装置に関し、特に実行結果が再利用される命令区間の呼出し命令を再利用命令に変換するプログラム変換処理装置、データ処理装置、および、これらにおける処理方法に関する。
【背景技術】
【０００２】
プログラムの処理速度を高速化するために種々の技術が開発されている。近年、その技術を用いた装置の一つとして、値再利用（メモ化：Memoization）と呼ばれる命令区間の実行結果を再利用する技法を用いた区間再利用装置が提案されている（例えば、特許文献１参照。）。この区間再利用装置は、プログラムの所定の命令区間における入力値および実行結果を保存しておくことによって、同じ命令区間を再び実行する際に入力値が一致する場合には、保存していた実行結果である出力値を出力する装置である。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００４−２５８９０５号公報（図１）
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上記の従来技術では、同じ命令区間を再び実行して実行結果を出力する前に保存していた実行結果を出力することによって、その命令区間の実行時間を削減することができる。しかしながら、このような区間再利用装置は、再び実行されない命令区間における実行結果も保存するため、実行結果を保存するメモリの浪費や実行結果の無駄な検索が多くなることによって値再利用の効率が悪くなることが考えられる。
【０００５】
そこで、本発明はこのような状況に鑑みてなされたものであり、値再利用の効率を改善することを目的とする。
【課題を解決するための手段】
【０００６】
本発明は、上記課題を解決するためになされたものであり、その第１の側面は、プログラムにおける命令区間の使用態様を解析する解析部と、上記命令区間の実行結果が再び利用される度合いを示す再利用度を上記解析の結果に基づいて生成する再利用度生成部と、上記命令区間の呼出し命令を上記再利用度に基づいて再利用命令に変換する命令変換部とを具備するプログラム変換処理装置およびプログラム変換処理方法である。これにより、実行結果が再び利用される度合いを示す再利用度に基づいて命令区間の呼び出し命令を再利用命令に変換させるという作用をもたらす。
【０００７】
また、この第１の側面において、上記解析部は、上記使用態様として上記命令区間の入力値の個数を解析し、上記再利用度生成部は、上記解析の結果に基づいて上記再利用度を生成するようにしてもよい。これにより、命令区間の入力値の個数に基づいて再利用度を生成させるという作用をもたらす。
【０００８】
また、この第１の側面において、上記解析部は、上記使用態様として上記命令区間の入力値が採り得る値の組合せを解析し、上記再利用度生成部は、上記解析の結果に基づいて上記再利用度を生成するようにしてもよい。これにより、命令区間の入力値の採り得る値の組み合わせに基づいて再利用度を生成させるという作用をもたらす。
【０００９】
また、この第１の側面において、上記解析部は、上記使用態様として上記命令区間の呼び出される回数を解析し、上記再利用度生成部は、上記解析の結果に基づいて上記再利用度を生成するようにしてもよい。これにより、命令区間の呼び出される回数に基づいて再利用度を生成させるという作用をもたらす。
【００１０】
また、この第１の側面において、上記命令区間は関数であり、上記解析部は上記使用態様として上記関数の入力値および呼び出される回数を解析し、上記再利用度生成部は、上記解析の結果に基づいて上記再利用度を生成するようにしてもよい。これにより、関数の入力値および呼び出される回数に基づいて再利用度を生成させるという作用をもたらす。
【００１１】
また、この第１の側面において、上記命令区間はループであり、上記解析部は上記使用態様として上記ループの入力値および呼び出される回数を解析し、上記再利用度生成部は、上記解析の結果に基づいて上記再利用度を生成するようにしてもよい。これにより、ループの入力値および呼び出される回数に基づいて再利用度を生成させるという作用をもたらす。
【００１２】
また、この第１の側面において、上記解析部は、上記使用態様として上記命令区間の上記入力値がメモリアクセスを伴うか否かを解析し、上記再利用度生成部は、上記命令区間の上記入力値がメモリアクセスを伴う場合には当該メモリアクセスを伴わない上記入力値を用いる場合と比較して低い上記度合いを示す上記再利用度を生成するようにしてもよい。これにより、メモリアクセスを伴う入力値がある命令区間に対して低い再利用度を生成させるという作用をもたらす。
【００１３】
また、この第１の側面において、上記命令変換部は、上記再利用度と上記命令区間の上記実行結果を保持するためのデータである実行履歴のデータ量と上記実行履歴が保持される履歴メモリの容量とに基づいて、上記命令区間の上記データ量の総和が上記履歴メモリの容量以内となるように上記再利用度が最も高い上記命令区間から順に上記呼出し命令を上記再利用命令に変換するようにしてもよい。これにより、実行履歴のデータ量の総和が履歴メモリの容量以内となるように再利用度が最も高い命令区間から順に呼出し命令を再利用命令に変換させるという作用をもたらす。
【００１４】
また、この第１の側面において、上記実行履歴が上記履歴メモリに保持される際の優先度を上記再利用度に基づいて生成する優先度生成部をさらに具備し、上記命令変換部は、上記命令区間の呼出し命令を上記優先度が含まれる上記再利用命令に変換するようにしてもよい。これにより、実行結果を再利用する命令区間の呼出し命令を優先度が含まれる再利用命令に変換させるという作用をもたらす。
【００１５】
また、本発明の第２の側面は、複数の命令区間のうち実行結果が再び利用される再利用区間を指定する再利用命令により呼び出された上記再利用区間における処理を実行し、上記再利用区間の区間識別情報と上記再利用区間の入力値と上記再利用区間の実行結果とを実行履歴として出力する実行部と、上記実行履歴を保持する履歴メモリとを具備するデータ処理装置およびデータ処理方法である。これにより、再利用命令により呼び出された再利用区間の実行履歴を保持させるという作用をもたらす。
【００１６】
また、この第２の側面において、上記実行部は、上記複数の命令区間のうち再び利用される度合いに基づいて抽出された命令区間を指定する上記再利用命令により呼び出された上記再利用区間における処理を実行し、上記実行履歴を出力するようにしてもよい。これにより、実行結果が再利用される度合いに基づいて決定された再利用区間の実行履歴を出力させるという作用をもたらす。この場合において、上記再利用区間は関数であり、上記実行部は、上記区間情報と上記再利用区間の入力値と上記再利用区間の実行結果として上記関数の開始アドレスと上記関数の入力値と上記関数の実行結果とを出力するようにしてもよい。これにより、関数の開始アドレスと入力値と実行結果とを出力させるという作用をもたらす。この場合において、上記再利用区間はループであり、上記実行部は、上記区間情報と上記再利用区間の入力値と上記再利用区間の実行結果として上記ループの開始アドレスと上記ループの入力値と上記ループの実行結果とを出力するようにしてもよい。これにより、ループの開始アドレスと入力と実行結果とを出力させるという作用をもたらす。
【００１７】
また、この第２の側面において、上記区間識別情報と上記再利用区間の入力値とを用いて上記履歴メモリから上記実行結果が検索された場合には上記実行結果を出力する履歴検索部をさらに具備するようにしてもよい。これにより、履歴メモリにおいて実行結果が検索された場合には、実行結果を出力させるという作用をもたらす。
【００１８】
また、この第２の側面において、上記実行結果が再利用される度合いの順位を示す優先度および上記実行履歴の上記履歴メモリにおけるアドレスを優先度情報として保持する優先度テーブルと、上記優先度テーブルから上記優先度が最も低い上記優先度情報を消去候補情報として検索する最低優先度履歴検索部と、上記実行部が上記履歴メモリに新たな実行履歴を保持しようとしている場合には上記消去候補情報の上記優先度と上記新たな実行履歴の上記優先度とを比較する優先度比較部と、上記消去候補情報の上記優先度が上記新たな実行履歴の上記優先度より低い場合には上記消去候補情報の上記アドレスに基づいて上記実行履歴を上記履歴メモリから消去する消去部とをさらに具備するようにしてもよい。これにより、新たな実行履歴の優先度より消去候補情報の優先度が低い場合には、消去候補情報が指し示す実行履歴を履歴メモリから消去させるという作用をもたらす。この場合において、上記履歴メモリの空き容量を管理する履歴メモリ管理部をさらに具備し、上記優先度比較部は、上記新たな実行履歴のデータ量が上記履歴メモリの空き容量よりも大きい場合には上記消去候補情報の上記優先度と上記新たな実行履歴の上記優先度とを比較するようにしてもよい。これにより、新たな実行履歴のデータ量が履歴メモリの空き容量よりも大きい場合に優先度を比較させるという作用をもたらす。
【発明の効果】
【００１９】
本発明によれば、値再利用の効率を改善することができるという優れた効果を奏し得る。
【図面の簡単な説明】
【００２０】
【図１】本発明の第１の実施の形態におけるコンパイル処理装置５００の構成例を示すブロック図である。
【図２】本発明の第１の実施の形態において再利用候補区間抽出部６１１が再利用候補区間を抽出する際に、再利用候補区間から除外される関数の一例を示す模式図である。
【図３】本発明の第１の実施の形態における再利用候補区間解析部６１２により引数の個数を使用態様として解析する場合における再利用度生成部６２１による再利用度の生成例を示す模式図である。
【図４】本発明の第１の実施の形態における再利用候補区間解析部６１２により引数の型を使用態様として解析する場合における再利用度生成部６２１による再利用度の生成例を示す模式図である。
【図５】本発明の第１の実施の形態における再利用候補区間解析部６１２により定数と変数とで異なる引数を使用態様として解析する場合における再利用度生成部６２１による再利用度の生成例を示す模式図である。
【図６】本発明の第１の実施の形態における再利用候補区間解析部６１２により引数の採る値の組合せを使用態様として解析する場合における再利用度生成部６２１による再利用度の生成例を示す模式図である。
【図７】本発明の第１の実施の形態における再利用候補区間解析部６１２により関数の呼び出される回数を使用態様として解析する場合における再利用度生成部６２１による再利用度の生成例を示す模式図である。
【図８】本発明の第１の実施の形態における再利用候補区間解析部６１２によりメモリアクセスを伴う引数の有無を使用態様として解析する場合における再利用度生成部６２１による再利用度の生成例を示す模式図である。
【図９】本発明の第１の実施の形態におけるプログラム変換処理部６００の第１の動作例を示すプログラムの模式図である。
【図１０】本発明の第１の実施の形態における関数の呼出し命令および関数の再利用命令の一例を示す概念図である。
【図１１】本発明の第１の実施の形態におけるコンパイル処理装置５００によるコンパイル処理の処理手順を示すフローチャートである。
【図１２】本発明の第２の実施の形態におけるデータ処理装置１００の構成例を示すブロック図である。
【図１３】本発明の第２の実施の形態におけるプロセッサコア３００および履歴管理部４００の構成例を示すブロック図である。
【図１４】本発明の第２の実施の形態における履歴メモリ４３０のデータ構造の一例を示す概念図である。
【図１５】本発明の第２の実施の形態におけるプロセッサコア３００により処理されるプログラムおよび履歴管理部４００により保存される実行履歴の一例を示す概念図である。こ
【図１６】本発明の第２の実施の形態におけるプロセッサコア３００および履歴管理部４００による関数の実行処理の処理手順を示すフローチャートである。
【図１７】本発明の第３の実施の形態におけるコンパイル処理装置５００の構成例を示すブロック図である。
【図１８】本発明の第３の実施の形態におけるプログラム変換処理部６００による複数の引数が入力値である関数を含むプログラムの変換例を示す模式図である。
【図１９】本発明の第３の実施の形態における引数の型は同じだが使用態様が異なる関数を含むプログラムのプログラム変換処理部６００による変換例を示す模式図である。
【図２０】本発明の第３の実施の形態における関数の呼出し命令および関数の再利用命令の一例を示す概念図である。
【図２１】本発明の第１の実施の形態におけるコンパイル処理装置５００によるコンパイル処理の処理手順を示すフローチャートである。
【図２２】本発明の第４の実施の形態におけるプロセッサコア３００および履歴管理部４００の構成例を示すブロック図である。
【図２３】本発明の第４の実施の形態における履歴メモリ４３０のデータ構造の一例を示す概念図である。
【図２４】本発明の第４の実施の形態における優先度テーブル４５０のデータ構造の一例を示す概念図である。
【図２５】本発明の第４の実施の形態におけるプロセッサコア３００により処理されるプログラムおよび履歴管理部４００により保存される実行履歴の一例を示す概念図である。
【図２６】本発明の第４の実施の形態におけるプロセッサコア３００および履歴管理部４００による関数の実行処理の処理手順を示すフローチャートである。
【図２７】本発明の第４の実施の形態における履歴管理部４００による実行履歴の登録処理（ステップＳ９５０）の処理手順例を示すフローチャートである。
【発明を実施するための形態】
【００２１】
以下、本発明を実施するための形態（以下、実施の形態と称する）について説明する。説明は以下の順序により行う。
１．第１の実施の形態（コンパイル処理制御：実行履歴のデータ量の総和が履歴メモリの容量以内となるように呼出し命令を再利用命令に変換する例）
２．第２の実施の形態（データ処理制御：実行履歴のデータ量の総和が履歴メモリの容量以内となるように変換された再利用命令に基づいて実行履歴を保持する例）
３．第３の実施の形態（コンパイル処理制御：優先度を含む再利用命令に変換する例）
４．第４の実施の形態（データ処理制御：優先度を含む再利用命令に基づいて実行履歴を保持する例）
【００２２】
＜１．第１の実施の形態＞
［コンパイル処理装置５００の構成例］
図１は、本発明の第１の実施の形態におけるコンパイル処理装置５００の構成例を示すブロック図である。このコンパイル処理装置５００は、ソースプログラム記憶部５１０と、再利用アシストコンパイル処理部５２０と、オブジェクトプログラム記憶部５３０とを備える。また、ここでは、コンパイル処理装置５００が処理する命令区間は関数を想定するものとする。
【００２３】
ソースプログラム記憶部５１０は、コンパイルを行うソースプログラムを記憶するものである。このソースプログラムは、例えば、実行結果が再び利用される再利用区間が含まれるソースプログラムである。このソースプログラム記憶部５１０は、記憶したソースプログラムを再利用アシストコンパイル処理部５２０に供給する。
【００２４】
再利用アシストコンパイル処理部５２０は、ソースプログラム記憶部５１０から読み出したソースプログラムをコンパイルすることによって、再利用命令を付した後に、機械語プログラムであるオブジェクトプログラムを生成するものである。ここにいう再利用命令とは、再利用区間と再利用しない区間とを再利用される度合いに基づいて区別することによって、再利用区間が呼出された際に実行結果を再利用するための処理をデータ処理装置に行わせる命令である。この再利用アシストコンパイル処理部５２０は、その生成したオブジェクトプログラムをオブジェクトプログラム記憶部５３０に供給する。この再利用アシストコンパイル処理部５２０は、プログラム変換処理部６００およびコード生成部５２２を備える。
【００２５】
プログラム変換処理部６００は、ソースプログラム記憶部５１０から読み出されたソースプログラムを解析して、最適化することによって、ソースプログラムを再利用命令が含まれる効率の高いプログラムに変換するものである。このプログラム変換処理部６００は、ソースプログラム解析部６１０および最適化部６２０を備える。なお、プログラム変換処理部６００は、特許請求の範囲に記載のプログラム変換処理装置の一例である。
【００２６】
ソースプログラム解析部６１０は、ソースプログラム記憶部５１０から読み出されたソースプログラムに基づいて形態素解析や構文解析などを行うものである。また、このソースプログラム解析部６１０は、解析や最適化に適した形式の中間コードのプログラムを生成した後に、その生成されたプログラムの解析を行う。このソースプログラム解析部６１０は、再利用候補区間抽出部６１１および再利用候補区間解析部６１２を備える。
【００２７】
再利用候補区間抽出部６１１は、複数の命令区間のうち、実行結果を再利用する再利用区間の候補となる再利用候補区間をプログラムから抽出するものである。この再利用候補区間抽出部６１１は、関数およびループなどの複数回呼び出される可能性がある命令区間を再利用候補区間として抽出する。
【００２８】
また、この再利用候補区間抽出部６１１は、入力値が同じでも異なる実行結果になる関数などの実行結果が再利用できる可能性が無い関数を、再利用候補区間から除外する。また、再利用候補区間抽出部６１１は、例えば、システムコールを含む関数をこの除外される関数として除外する。この再利用候補区間抽出部６１１は、抽出した再利用候補区間の識別情報をプログラムとともに再利用候補区間解析部６１２に供給する。
【００２９】
再利用候補区間解析部６１２は、再利用候補区間抽出部６１１により抽出された再利用候補区間に関する使用態様を解析するものである。この再利用候補区間解析部６１２は、例えば、関数およびループの入力値である引数に関する内容と、関数およびループの呼出し回数に関する内容とを使用態様として解析する。また、再利用候補区間解析部６１２は、例えば、関数およびループの処理内容に基づいて引数の採り得る値の組合せを解析することによって、推定組合せ値を解析結果として出力する。
【００３０】
また、この再利用候補区間解析部６１２は、最適化部６２０において実行結果を再利用するためのデータである実行履歴のデータ量を予測する場合には、再利用候補区間を実行した結果である実行結果に関する内容を解析する。この再利用候補区間解析部６１２は、この解析の結果を、再利用候補区間の識別情報およびプログラムとともに最適化部６２０に供給する。なお、再利用候補区間解析部６１２は、特許請求の範囲に記載の解析部の一例である。また、再利用候補区間は、特許請求の範囲に記載の命令区間の一例である。
【００３１】
最適化部６２０は、再利用候補区間解析部６１２から供給されたプログラムに基づいて、実行速度の向上のための最適化およびコードサイズの削減のための最適化などのプログラム最適化処理を行うものである。この最適化部６２０は、再利用度生成部６２１および再利用命令変換部６２３を備える。
【００３２】
再利用度生成部６２１は、再利用候補区間解析部６１２から供給された解析結果に基づいて、再利用候補区間の実行結果が再び利用される度合いを示す再利用度を生成するものである。この再利用度生成部６２１は、例えば、再利用候補区間の入力値が採り得る値の組合せに応じて再利用度を生成する。この場合には、再利用候補区間の入力値が採り得る値の組合せが少ないほど再利用される度合いは高くなるため、入力値が採り得る値の組合せを分母とする再利用度を生成する。
【００３３】
この再利用度生成部６２１は、その生成した再利用度を再利用候補区間の識別情報およびプログラムとともに再利用命令変換部６２３に供給する。なお、再利用度生成部６２１は、特許請求の範囲に記載の再利用度生成部の一例である。
【００３４】
再利用命令変換部６２３は、再利用度生成部６２１から供給された再利用度に基づいて、実行結果を再利用させる再利用候補区間の呼出し命令を再利用命令に変換するものである。この再利用命令変換部６２３は、その変換した命令を含む最適化されたプログラムをコード生成部５２２に供給する。
【００３５】
また、再利用命令変換部６２３は、例えば、再利用度と、再利用候補区間の実行履歴のデータ量の予測値と、実行履歴が登録される履歴メモリの容量とに基づいて、実行結果を再利用させる再利用区間の呼出し命令を再利用命令に変換する。この例において、再利用命令変換部６２３は、再利用候補区間の入力値の採り得る値の組合せと、入力値の個数と、実行結果の個数と、入力値および実行結果のビット数とに応じて実行履歴のデータ量の予測値を生成する。そして、再利用命令変換部６２３は、実行履歴のデータ量の予測値の総和が履歴管理部の容量以内となるように、再利用度が最も高い再利用候補区間から順に呼出し命令を再利用命令に変換する。なお、再利用命令変換部６２３は、特許請求の範囲に記載の命令変換部の一例である。
【００３６】
コード生成部５２２は、再利用命令変換部６２３から供給された最適化されたプログラムに基づいて、機械語プログラムのコードであるオブジェクトプログラムを生成するものである。このコード生成部５２２は、その生成したオブジェクトプログラムをオブジェクトプログラム記憶部５３０に供給する。
【００３７】
オブジェクトプログラム記憶部５３０は、コード生成部５２２から供給されたオブジェクトプログラムを記憶するものである。
【００３８】
このように、コンパイル処理装置５００は、関数の実行結果が再利用される度合いに応じて関数の呼出し命令を再利用命令に変換することによって、再利用される関数と再利用されない関数とが区別できるプログラムを生成する。
【００３９】
なお、ここでは、コンパイル処理装置５００は、関数を再利用対象とする例について説明したが、ループに関しても同様に再利用対象とすることができる。例えば、再利用候補区間解析部６１２は、ループに関しても関数と同様に解析し、再利用度生成部６２１は、再利用候補区間解析部６１２の解析結果に基づいて再利用度を生成する。
【００４０】
なお、ここでは、便宜上、再利用候補区間解析部６１２が再利用候補区間の使用態様を関数毎に解析する例について説明したが、より詳細に使用態様を解析するために関数の呼出し命令毎に解析するものとしてもよい。また、再利用度生成部６２１についても再利用度を関数毎に生成する例について説明したが、より詳細に解析するために関数の呼出し命令毎に生成するものとしてもよい。この場合において、再利用命令変換部６２３は、関数は同じであっても関数の呼出し命令毎に異なる再利用度に基づいて、関数の呼出し命令毎に呼出し命令を再利用命令に変換する。
【００４１】
［再利用候補区間抽出部６１１が再利用候補区間から除外する関数の例］
図２は、本発明の第１の実施の形態において再利用候補区間抽出部６１１が再利用候補区間を抽出する際に、再利用候補区間から除外される関数の一例を示す模式図である。ここでは、再利用候補区間抽出部６１１により再利用候補区間から除外される関数が各枠の中にＣ言語のコードにより示されている。
【００４２】
図２（ａ）には、再利用候補区間から除外される関数として、システムコールを含む関数（ｆｕｎｃＡ）が示されている。このシステムコールを含む関数（ｆｕｎｃＡ）は、入力値が同じ場合でも実行される度に実行結果が異なる可能性が高い。このため、システムコールを含む関数（ｆｕｎｃＡ）は、再利用区間として用いることができない。したがって、再利用候補区間抽出部６１１は、再利用候補区間からシステムコールを含む関数を除外する。
【００４３】
図２（ｂ）には、再利用候補区間から除外される関数として、乱数発生関数（ｒａｎｄ）が示されている。この乱数発生関数（ｒａｎｄ）は、呼出す度にランダムな値を実行結果として出力する関数である。このため、再利用候補区間抽出部６１１は、再利用候補区間から乱数発生関数を除外する。
【００４４】
このように、再利用候補区間抽出部６１１は、ソースプログラムを解析する段階において実行結果が再利用される可能性が低い関数を再利用候補区間から除外する。
【００４５】
［再利用候補区間解析部６１２によって解析される命令区間の使用態様および再利用度生成部６２１において生成される再利用度の一例］
次に、本発明の第１の実施の形態における再利用候補区間解析部６１２により解析される命令区間の使用態様の一例および再利用度生成部６２１により生成される再利用度の関係例について次図を参照して説明する。ここでは、再利用候補区間は関数であると想定する。また、再利用度が大きいものほど再利用される度合いが大きく、再利用命令変換部６２３において優先的に呼出し命令が再利用命令に変換されるものとする。
【００４６】
［引数の個数に基づく再利用度の生成例］
図３は、本発明の第１の実施の形態における再利用候補区間解析部６１２により引数の個数を使用態様として解析する場合における再利用度生成部６２１による再利用度の生成例を示す模式図である。
【００４７】
図３（ａ）は、引数の個数が異なる関数の一例を示す模式図である。ここには、再利用候補区間抽出部６１１において抽出された再利用候補区間のうち、入力値である引数の型は同じだが引数の個数は異なる３つの関数（ｆｕｎｃＡ乃至Ｃ）が示されている。
【００４８】
この３つの関数としては、ｉｎｔ（integer）型の１個の変数を引数とする関数（ｆｕｎｃＡ）と、ｉｎｔ型の２個の変数を引数とする関数（ｆｕｎｃＢ）と、ｉｎｔ型の３個の変数を引数とする関数（ｆｕｎｃＣ）とがＣ言語のコードにより示されている。
【００４９】
この３つの関数（ｆｕｎｃＡ乃至Ｃ）を解析する場合において、再利用候補区間解析部６１２は、その３つの関数（ｆｕｎｃＡ乃至Ｃ）における引数の個数について関数毎に解析を行う。そして、再利用度生成部６２１は、再利用候補区間解析部６１２が解析した引数の個数に基づいて再利用度を生成する。
【００５０】
図３（ｂ）は、図３（ａ）において示した関数の解析結果に基づいて生成される再利用度の一例を示す模式図である。ここには、図３（ａ）において示した３つの関数（ｆｕｎｃＡ乃至Ｃ）の再利用度の度合いの順序関係が示されている。ここでは、引数が１個の関数（ｆｕｎｃＡ）の再利用度が１番高く、引数が２個の関数（ｆｕｎｃＢ）の再利用度が２番目に高く、引数が３個の関数（ｆｕｎｃＣ）の再利用度が１番低いことが示されている。
【００５１】
このように、引数の型は同じだが引数の個数は異なる複数の関数については、引数の個数が少ない関数ほど入力値が一致する度合いは高くなるため、再利用度生成部６２１は、引数の個数が最も少ない関数から順に高い度合いを示す再利用度を生成する。
【００５２】
なお、ここでは、再利用度生成部６２１は入力値の個数に応じて再利用度を生成する場合について説明したが、これに限定されるものではない。例えば、複数の引数を入力値とする関数について再利用度を生成する場合には、再利用度生成部６２１はそれぞれの引数が採り得る値の組合せに基づいて入力値の組合せを求め、この入力値の組合せの数に応じて再利用度を生成する場合などが考えられる。
【００５３】
［引数の型に基づく再利用度の生成例］
図４は、本発明の第１の実施の形態における再利用候補区間解析部６１２により引数の型を使用態様として解析する場合における再利用度生成部６２１による再利用度の生成例を示す模式図である。
【００５４】
図４（ａ）は、引数の型が異なる関数の一例を示す模式図である。ここには、再利用候補区間抽出部６１１において抽出された再利用候補区間のうち、引数の個数は同じだが引数の型は異なる３つの関数（ｆｕｎｃＡ乃至Ｃ）が示されている。
【００５５】
この３つの関数として、ここでは、１ビットのバイナリ数値データであるｂｏｏｌ（Boolean）型の１個の変数を引数とする関数（ｆｕｎｃＡ）がＣ言語のコードにより示されている。さらに、１６ビットのバイナリ文字データであるｃｈａｒ型の１個の変数を引数とする関数（ｆｕｎｃＢ）と、３２ビットのバイナリ数値データであるｉｎｔ型の１個の変数を引数とする関数（ｆｕｎｃＣ）とがＣ言語のコードにより示されている。
【００５６】
この３つの関数（ｆｕｎｃＡ乃至Ｃ）を解析する場合において、再利用候補区間解析部６１２は、この３つの関数における引数の型について関数毎に解析を行う。そして、再利用度生成部６２１は、再利用候補区間解析部６１２が解析した引数の型に基づいて再利用度を生成する。
【００５７】
図４（ｂ）は、図４（ａ）において示した関数の解析結果に基づいて生成される再利用度の一例を示す模式図である。ここには、図４（ａ）において示した３つの関数（ｆｕｎｃＡ、ｆｕｎｃＢ、および、ｆｕｎｃＣ）の再利用度の度合いの順序関係が示されている。ここでは、ｂｏｏｌ型の１個の変数を引数とするｆｕｎｃＡの再利用度が１番高く、ｃｈａｒ型の１個の変数を引数とするｆｕｎｃＢの再利用度が２番目に高く、ｉｎｔ型の１個の変数を引数とするｆｕｎｃＣの再利用度が１番低いことが示されている。
【００５８】
このように、引数の個数は同じだが引数の型は異なる複数の関数については、引数の表現力（引数が採り得る値の組合せ）が低い関数ほど入力値が一致する度合いは高くなる。このため、再利用度生成部６２１は、引数の表現力が最も低い関数から順に高い度合いを示す再利用度を生成する。この引数の表現力は、引数の型のビット数から判断することができる。したがって、再利用度生成部６２１は、引数の型のビット数が最も少ないものを最も表現力が低い引数と判断し、順に引数の表現力を判断する。
【００５９】
［引数に定数を含む関数に対する再利用度の生成例］
図５は、本発明の第１の実施の形態における再利用候補区間解析部６１２により定数と変数とで異なる引数を使用態様として解析する場合における再利用度生成部６２１による再利用度の生成例を示す模式図である。
【００６０】
図５（ａ）は、引数が定数および変数のいずれである関数の一例を示す模式図である。ここには、引数の個数は同じだが定数の引数および変数の引数として異なる２つの関数を含むメインプログラム（ｍａｉｎ）が示されている。この２つの関数として、ここでは、１個の定数（０）と複数の変数を引数とする関数（ｆｕｎｃＡ）と、１個のｉｎｔ型の変数（ａ）とｆｕｕｎｃＡと同じ複数の変数を引数とする関数（ｆｕｎｃＢ）とがＣ言語のコードにより示されている。
【００６１】
この２つの関数（ｆｕｎｃＡおよびＢ）を解析する場合において、再利用候補区間解析部６１２は、この２つの関数における引数が定数および変数のいずれであるかについて関数毎に解析を行う。そして、再利用度生成部６２１は、再利用候補区間解析部６１２が解析した結果に基づいて再利用度を生成する。
【００６２】
図５（ｂ）は、図５（ａ）において示した関数の解析結果に基づいて生成される再利用度の一例を示す模式図である。ここには、図５（ａ）において示した２つの関数（ｆｕｎｃＡおよびＢ）の再利用度の度合いの順序関係が示されている。ここでは、１個の定数（０）と複数の変数を引数とする関数（ｆｕｎｃＡ）の再利用度は、１個のｉｎｔ型の変数（ａ）と第１の関数と同じ複数の変数を引数とする関数（ｆｕｎｃＢ）の再利用度よりも高ことが示されている。
【００６３】
ここでは、定数が関数の引数に含まれる場合には、定数である引数は１つの値しか入力値とならないため引数の個数から除外することができる。このため、定数の引数の数が増えるほど入力値が一致する度合いは高くなり実行結果が再利用される度合いは高くなる。このため、再利用度生成部６２１は、引数の個数は同じだが定数が引数として含まれる複数の関数について、定数の引数が最も多い関数から順に高い度合いを示す再利用度を生成する。
【００６４】
なお、ここでは、定数である引数を引数の個数から除外することによって再利用度を生成したが、これだけに限定されるものではない。例えば、定数は入力値の採り得る値を「１」とし、定数の採り得る値と各変数の採り得る値とを掛け合わせることによって、入力値全体の採り得る値の組合せを生成して、その生成された組合せに応じて再利用度を生成する場合などが考えられる。
【００６５】
［引数の採る値の組合せに対する再利用度の生成例］
図６は、本発明の第１の実施の形態における再利用候補区間解析部６１２により引数の採る値の組合せを使用態様として解析する場合における再利用度生成部６２１による再利用度の生成例を示す模式図である。
【００６６】
図６（ａ）は、引数の採る値の組合せが異なる関数の一例を示す模式図である。ここには、再利用候補区間抽出部６１１において抽出された再利用候補区間のうち、引数の個数および型は同じだが引数が採る値が限定されている２つの関数が示されている。
【００６７】
この２つの関数の一方として、ここでは、１個のｉｎｔ型の変数を引数と定義しているが関数が呼び出される段階で「２」および「３」の２つの値に引数が採る値が限定されている関数（ｆｕｎｃＡ）がＣ言語のコードにより示されている。他方の関数として、１個のｉｎｔ型の変数を引数と定義しているが関数が呼び出される段階で「２」、「３」、「４」、または、「５」の４つの値に引数が採る値が限定される関数（ｆｕｎｃＢ）がＣ言語のコードにより示されている。
【００６８】
この２つの関数（ｆｕｎｃＡおよびＢ）を解析する場合において、再利用候補区間解析部６１２は、この２つの関数における引数の採る値の組合せについて関数毎に解析を行う。そして、再利用度生成部６２１は、再利用候補区間解析部６１２が解析した引数の型に基づいて再利用度を生成する。
【００６９】
図６（ｂ）は、図６（ａ）において示した関数の解析結果に基づいて生成される再利用度の一例を示す模式図である。ここには、図６（ａ）において示した２つの関数（ｆｕｎｃＡおよびＢ）の再利用度の度合いの順序関係が示されている。ここでは、「２」および「３」の２つの値に引数が採る値が限定される関数（ｆｕｎｃＡ）の再利用度は、「２」、「３」、「４」、または、「５」の４つの値に引数が採る値が限定される関数（ｆｕｎｃＢ）の再利用度よりも高ことが示されている。
【００７０】
このように、引数の個数および型は同じだが引数の採る値の組合せは異なる複数の関数がある場合には、引数の採る値の組合せがより少ない関数ほど実行結果が再利用される確率は高くなる。このため、再利用度生成部６２１は、引数の個数および型は同じだが引数の採る値の組合せは異なる複数の関数について再利用度を生成する場合には、引数の採り得る値の組合せが最も少ない関数から順に高い度合いを示す再利用度を生成する。
【００７１】
［関数の呼出し回数に基づく再利用度の生成例］
図７は、本発明の第１の実施の形態における再利用候補区間解析部６１２により関数の呼び出される回数を使用態様として解析する場合における再利用度生成部６２１による再利用度の生成例を示す模式図である。
【００７２】
図７（ａ）は、関数の呼び出される回数が異なる関数の一例を示す模式図である。ここには、再利用候補区間抽出部６１１において抽出された再利用候補区間のうち、呼び出される回数が異なる２つの関数が示されている。
【００７３】
この２つの関数として、ここでは、１回呼び出される関数（ｆｕｎｃＡ）と、３回呼び出される関数（ｆｕｎｃＢ）とがＣ言語のコードにより示されている。
【００７４】
この２つの関数（ｆｕｎｃＡおよびＢ）を解析する場合において、再利用候補区間解析部６１２は、この２つの関数における呼び出される回数について関数毎に解析を行う。そして、再利用度生成部６２１は、再利用候補区間解析部６１２が解析した呼び出される回数に基づいて再利用度を生成する。
【００７５】
図７（ｂ）は、図７（ａ）において示した関数の解析結果に基づいて生成される再利用度の一例を示す模式図である。ここには、図７（ａ）において示した２つの関数（ｆｕｎｃＡおよびＢ）の再利用度の度合いの順序関係が示されている。ここでは、３回呼び出される関数（ｆｕｎｃＢ）の再利用度は、１回呼び出される関数（ｆｕｎｃＡ）の再利用度よりも高いことが示されている。
【００７６】
このように、引数の個数および型は同じだが関数が呼び出される回数は異なる複数の関数がある場合には、呼び出される回数がより多い関数ほど実行結果が再利用される確率は高くなる。このため、再利用度生成部６２１は、引数は同じだが関数が呼び出される回数は異なる複数の関数について、呼び出される回数が最も多い関数から順に高い度合いを示す再利用度を生成する。
【００７７】
［メモリアクセスを伴う引数の有無による再利用度の生成例］
図８は、本発明の第１の実施の形態における再利用候補区間解析部６１２によりメモリアクセスを伴う引数の有無を使用態様として解析する場合における再利用度生成部６２１による再利用度の生成例を示す模式図である。
【００７８】
図８（ａ）は、引数の設定においてメモリアクセスを伴う関数の一例を示す模式図である。ここには、再利用候補区間抽出部６１１において抽出された再利用候補区間のうち、メモリアクセスを伴う引数の有無が異なる２つの関数が示されている。
【００７９】
この２つの関数のうちの一方として、ここでは、ポインタを備えメモリ領域のアドレスを指定する１個の変数およびその他の複数の変数を引数とする関数（ｆｕｎｃＡ）がＣ言語のコードにより示されている。他方の関数として、１個のｉｎｔ型の変数およびｆｕｎｃＡと同じその他の複数の変数を引数とする関数（ｆｕｎｃＢ）がＣ言語のコードにより示されている。
【００８０】
この２つの関数（ｆｕｎｃＡおよびＢ）を解析する場合において、再利用候補区間解析部６１２は、この２つの関数におけるメモリアクセスを伴うか否かについて解析を行う。そして、再利用度生成部６２１は、再利用候補区間解析部６１２が解析した結果に基づいて再利用度を生成する。
【００８１】
図８（ｂ）は、図８（ａ）において示した関数の解析結果に基づいて生成される再利用度の一例を示す模式図である。ここには、図８（ａ）において示した２つの関数（ｆｕｎｃＡおよびｆｕｎｃＢ）の再利用度の度合いの順序関係が示されている。ここでは、１個のｉｎｔ型の変数およびｆｕｎｃＡと同じその他の複数の変数を引数とするｆｕｎｃＢの再利用度は、メモリ領域のアドレスを指定する１個の変数およびその他の複数の変数を引数とするｆｕｎｃＡの再利用度よりも高いことが示されている。
【００８２】
このように、ポインタを備えメモリ領域のアドレスを指定する引数は、その指定しているアドレスおよび指定先のアドレスの値が２つとも一致しないと実行結果を再利用することができない。すなわち、引数の個数および型は同じだが引数のポインタの有無は異なる複数の関数が再利用候補区間である場合には、ポインタを備える引数がより少ない関数ほど実行結果が再利用される確率は高くなる。
【００８３】
このため、再利用度生成部６２１は、ポインタを備えメモリ領域のアドレスを指定する引数の個数が異なる複数の関数について再利用度を生成する場合には、ポインタを備える引数が最も少ない関数から順に高い度合いを示す再利用度を生成する。すなわち、再利用度生成部６２１は、関数がポインタを備える変数によりメモリアドレスを指定してメモリアクセスを伴う変数を引数とする場合にはポインタを備える変数を引数とする関数と比較して低い度合いを示す再利用度を生成する。
【００８４】
この図５乃至１０において示すように、再利用候補区間解析部６１２は、再利用候補区間の使用態様を解析し、再利用度生成部６２１はその解析結果に基づいて再利用度を生成する。
【００８５】
なお、図５乃至１０では、再利用候補区間解析部６１２は、再利用候補区間の使用態様を関数毎に解析し、再利用度生成部６２１は関数毎に再利用度を生成する場合について説明したが、これだけに限定されるものではない。例えば、再利用候補区間解析部６１２は、関数の呼出し命令毎に呼び出される関数の使用態様を解析し、再利用度生成部６２１は関数の呼出し命令毎に再利用度を生成する場合などが考えられる。
【００８６】
［本発明の第１の実施の形態におけるプログラム変換処理部６００の動作例］
次に、本発明の第１の実施の形態におけるプログラム変換処理部６００の動作について図面を参照して説明する。
【００８７】
図９は、本発明の第１の実施の形態におけるプログラム変換処理部６００の第１の動作例を示すプログラムの模式図である。ここでは、再利用候補区間解析部６１２は、図３乃至図８において示した使用態様を解析するものと想定する。さらに、ここでは、再利用候補区間解析部６１２は、再利用候補区間の処理内容を解析することによって引数の採り得る値の組合せが推測できる場合には、その推測した推測組合せ値を解析結果として出力するものとする。
【００８８】
また、図９では、再利用命令変換部６２３は、再利用度と、プログラムに書き込まれた実行履歴が登録される履歴メモリの容量と、予測される実行履歴のデータ量とに基づいて命令区間の呼出し命令を再利用命令に変換するものとする。さらに、ここでは、命令区間は関数であり、呼出し命令はアセンプリ言語で表現した場合の「ｃａｌｌ」命令を想定し、再利用命令はアセンブリ言語で「ｍｅｍｏｃａｌｌ」と表現することを想定する。そして、ここでは、各関数の実行結果は、入力値と同じ型の１個の変数であることを想定する。
【００８９】
図９（ａ）には、データ処理装置１００が容量の小さい履歴メモリを備える場合におけるプログラム変換処理部６００の動作例が示されている。ここでは、右矢印に対して左側にある枠の中には、プログラム変換処理部６００に処理される前のソースプログラムの一例がＣ言語により示されている。また、右矢印に対して右側にある枠の中には、プログラム変換処理部６００に処理されたプログラムの一例がアセンブリ言語により示されている。
【００９０】
なお、図９（ａ）では、履歴メモリは、１個のｂｏｏｌ型の変数を引数とすることによって、１個のｂｏｏｌ型の実行結果を出力する関数の実行履歴を５個ほど保持するのに十分な容量であるとする。さらに、履歴メモリは、１個のｃｈａｒ型の変数を引数とすることによって１個のｃｈａｒ型の実行結果を出力する関数の実行履歴は、１個も保持できない容量であると想定する。
【００９１】
ソースプログラムには、プログラムのメインの関数（ｆｕｎｃＸ）と、そのメインの関数により呼び出される３つの関数とが示されている。この３つの関数として、ｂｏｏｌ型の１個の変数を引数とする関数（ｆｕｎｃＡ）と、ｃｈａｒ型の１個の変数を引数とする関数（ｆｕｎｃＢ）と、ｉｎｔ型の１個の変数を引数とする関数（ｆｕｎｃＣ）とが表されている。
【００９２】
まず、プログラム変換処理部６００の再利用候補区間抽出部６１１は、ソースプログラムから再利用候補区間を抽出する。このソースプログラムにおいては、ｂｏｏｌ型の引数を持つ関数（ｆｕｎｃＡ）、ｃｈａｒ型の引数を持つ関数（ｆｕｎｃＢ）およびｉｎｔ型の引数を持つ関数（ｆｕｎｃＣ）が再利用候補区間として抽出される。
【００９３】
次に、再利用候補区間解析部６１２は、抽出された３つの関数（ｆｕｎｃＡ乃至Ｃ）の使用態様を解析する。これにより、ｆｕｎｃＡの引数がｂｏｏｌ型の１個の変数と解析され、ｆｕｎｃＢの引数がｃｈａｒ型の１個の変数と解析され、ｆｕｎｃＣの引数がｉｎｔ型の１個の変数と解析される。
【００９４】
また、再利用候補区間解析部６１２は、関数の処理内容に基づいて引数の採り得る値の組合せを推定する。このプログラムにおいて、再利用候補区間解析部６１２は、ｆｕｎｃＢに関しては、実行結果が５０個と推定し、ｆｕｎｃＡおよびｆｕｎｃＣについては、実行結果が推定できなかったとする解析結果を出力することを想定する。
【００９５】
この場合において、再利用度生成部６２１は、再利用候補区間解析部６１２からの解析結果に基づいて再利用度を生成する。この再利用度生成部６２１は、例えば、ｂｏｏｌ型の引数を持つ関数（ｆｕｎｃＡ）に関しては、ｂｏｏｌ型の１個の変数が引数であるため、その引数に関する解析結果から、最大２個の実行履歴を生成する関数と判断する。
【００９６】
また、再利用度生成部６２１は、ｃｈａｒ型の引数を持つ関数（ｆｕｎｃＢ）に関しては、ｃｈａｒ型の１個の変数が引数であるため、その引数に関する解析結果から、最大２１６個の実行履歴を生成すると判断する。さらに、ｉｎｔ型の引数を持つ関数（ｆｕｎｃＣ）に関しては、ｉｎｔ型の１個の変数が引数であるため、引数に関する解析結果から、最大２３２個の実行履歴を生成する関数と判断する。これらの判断とともに、再利用度生成部６２１は、関数の処理内容に基づいて推定された推定組合せ値を用いて実行履歴の量を判断する。
【００９７】
その結果、この再利用度生成部６２１は、ｂｏｏｌ型の引数を持つ関数（ｆｕｎｃＡ）は実行履歴が最大２個と、ｃｈａｒ型の引数を持つ関数（ｆｕｎｃＢ）は実行履歴が最大５０個と、ｉｎｔ型の引数を持つ関数（ｆｕｎｃＣ）は実行履歴が最大２３２個と判断する。これにより、再利用度生成部６２１は、ｂｏｏｌ型の引数を持つｆｕｎｃＡの再利用度が１番高く、ｃｈａｒ型の引数を持つｆｕｎｃＢの再利用度が２番目に高く、ｉｎｔ型の引数を持つｆｕｎｃＣの再利用度が１番低い度合いの再利用度を生成する。
【００９８】
次に、再利用命令変換部６２３は、再利用度に基づいて命令区間の呼出し命令を再利用命令に変換する。この場合において、再利用命令変換部６２３は、履歴メモリの容量をプログラムに書き込まれたコードより検出する。また、再利用命令変換部６２３は、再利用候補区間である３つの関数（ｆｕｎｃＡ乃至Ｃ）の予測される実行履歴のデータ量を、入力値が採り得る値の組合せと、実行結果の個数と、入力値および実行結果のビット数より関数毎に予測する。
【００９９】
そして、再利用命令変換部６２３は、再利用度が最も高い関数から順に履歴メモリに登録される関数を設定する。この時、再利用命令変換部６２３は、再利用候補区間の予測される実行履歴のデータ量の総和が履歴メモリの容量以内になるように履歴メモリに保持する関数を設定し、その関数の呼出し命令（ｃａｌｌ）を再利用命令（ｍｅｍｏｃａｌｌ）に変換する。
【０１００】
その結果、この再利用命令変換部６２３は、ｂｏｏｌ型の引数を持つｆｕｎｃＡに関しては、全ての実行履歴を履歴メモリに登録できると解析して、ｆｕｎｃＡの呼出し命令（ｃａｌｌ）を再利用命令（ｍｅｍｏｃａｌｌ）に変換する。次に、この再利用命令変換部６２３は、再利用命令に変換した関数（ｆｕｎｃＡ）の実行履歴のデータ量を履歴メモリ保持させた場合には、ｃｈａｒ型の引数を持つｆｕｎｃＢの実行履歴は１個も登録できないと判断する。そのため、再利用命令変換部６２３は、ｆｕｎｃＢの呼出し命令（ｃａｌｌ）は再利用命令（ｍｅｍｏｃａｌｌ）に変換しない。
【０１０１】
また、再利用命令変換部６２３は、ｃｈａｒ型の引数を持つｆｕｎｃＢと同様に、ｉｎｔ型の引数を持つｆｕｎｃＣに関してもｆｕｎｃＣの実行履歴は１個も保持できないと判断し、ｆｕｎｃＣの呼出し命令（ｃａｌｌ）も変換しない。
【０１０２】
このようにして、プログラム変換処理部６００は、ｂｏｏｌ型の引数を持つｆｕｎｃＡについては再利用命令（ｍｅｍｏｃａｌｌ）により呼び出し、他の２つの関数（ｆｕｎｃＢおよびＣ）については呼出し命令（ｃａｌｌ）により呼び出すプログラムを生成する。
【０１０３】
図９（ｂ）には、データ処理装置１００が容量の大きい履歴メモリ４３０を備える場合におけるプログラム変換処理部６００の動作例が示されている。ここでは、右矢印に対して左側にある枠の中には、図９（ａ）と同様に、プログラム変換処理部６００に処理される前のソースプログラムの一例がＣ言語により示されている。また、右矢印に対して右側にある枠の中には、プログラム変換処理部６００に処理されたプログラムの一例がアセンブリ言語により示されている。
【０１０４】
なお、ここでは、履歴メモリは、１個のｃｈａｒ型の変数を引数とすることによって、１個のｃｈａｒ型の実行結果を出力する関数の実行履歴を５５個ほど保持するのに十分な容量であるとする。
【０１０５】
再利用候補区間抽出部６１１、再利用候補区間解析部６１２、および、再利用度生成部６２１の動作は、図９（ａ）において示した動作と同じ働きであるので詳細な説明を省略する。
【０１０６】
この場合において、再利用度生成部６２１により再利用度が生成された後に、再利用命令変換部６２３は、図９（ａ）と同様に、関数の呼出し命令（ｃａｌｌ）を再利用命令（ｍｅｍｏｃａｌｌ）に変換する。
【０１０７】
その結果、再利用命令変換部６２３は、まず、ｂｏｏｌ型の引数を持つ関数（ｆｕｎｃＡ）に関しては全ての実行履歴を履歴メモリに登録できると解析し、ｆｕｎｃＡの呼出し命令（ｃａｌｌ）を再利用命令（ｍｅｍｏｃａｌｌ）に変換する。次に、この再利用命令変換部６２３は、再利用命令に変換した関数（ｆｕｎｃＡ）の実行履歴のデータ量を差し引いた履歴メモリにはｃｈａｒ型の引数を持つｆｕｎｃＢの実行履歴は全て登録できると解析する。この解析により、再利用命令変換部６２３は、ｆｕｎｃＢの呼出し命令（ｃａｌｌ）を再利用命令（ｍｅｍｏｃａｌｌ）に変換する。また、この再利用命令変換部６２３は、再利用命令に変換した関数（ｆｕｎｃＡおよびＢ）の実行履歴のデータ量を差し引いた履歴メモリにはｉｎｔ型の引数を持つｆｕｎｃＣの実行履歴は２個しか登録できないと解析する。この解析により、再利用命令変換部６２３は、ｆｕｎｃＣの呼出し命令（ｃａｌｌ）は変換しない。
【０１０８】
このようにして、プログラム変換処理部６００は、ｂｏｏｌ型の引数を持つｆｕｎｃＡおよびｃｈａｒ型の引数を持つｆｕｎｃＢは再利用命令（ｍｅｍｏｃａｌｌ）により呼び出し、ｆｕｎｃＣは呼出し命令（ｃａｌｌ）により呼び出すプログラムを生成する。
【０１０９】
なお、ここでは、再利用区間は関数であり、呼出し命令はアセンプリ言語で表現した場合の「ｃａｌｌ」命令を想定し、再利用命令はアセンブリ言語で「ｍｅｍｏｃａｌｌ」と表現することを想定したが、これに限定されるものではない。例えば、再利用区間はループであり、呼出し命令はアセンブリ言語で表現した場合の「ｂｒａｎｃｈ」命令を想定し、再利用命令はアセンブリ言語で「ｍｅｍｏＬｏｏｐ」と表現する場合などが考えられる。
【０１１０】
［本発明の第１の実施の形態における再利用命令の一例］
次に、本発明の第１の実施の形態におけるコンパイル処理装置５００が生成する再利用命令について図面を参照して説明する。
【０１１１】
図１０は、本発明の第１の実施の形態における関数の呼出し命令および関数の再利用命令の一例を示す概念図である。ここでは、再利用命令を処理するデータ処理装置のプロセッサコアはＭＩＰＳにより構成されることを想定する。また、ここでは、左端は最上位ビット（ＭＳＢ）を示し、右端は最下位ビット（ＬＳＢ）を示している。
【０１１２】
図１０（ａ）には、ＭＩＰＳ命令セットにおける関数の呼出し命令（ｃａｌｌ）であるＪＡＬＲ（Jump And Link Register）命令が示されている。ＭＩＰＳ命令セットは３２ビットの固定長の命令セットであり、このＪＡＬＲ命令は、３２個のビット（０乃至３１番）のビット列により表現されるものである。
【０１１３】
このＪＡＬＲ命令は、オペコードフィールド７１０と、関数番地フィールド（ｒｓ）７２０と、第１未使用フィールド７３０と、戻り番地フィールド（ｒｄ）７４０と、第２未使用フィールド７５０と、機能指定フィールド７６０とから構成される。
【０１１４】
オペコードフィールド７１０は、命令の種別を指定するフィールドである。このオペコードフィールド７１０は、第２６乃至第３１番目のビットから構成されるビット列である。このオペコードフィールド７１０には、ＳＰＥＣＩＡＬ命令として「００００００」のビット列が格納される。
【０１１５】
関数番地フィールド（ｒｓ）７２０は、関数の番地を格納するレジスタを指定するフィールドである。この関数番地フィールド（ｒｓ）７２０は、第２１乃至第２５番目のビットから構成されるビット列である。
【０１１６】
第１未使用フィールド７３０は、ＪＡＬＲ命令では使用されないフィールドである。この第１未使用フィールド７３０は、第１６乃至第２０番目のビット列である。この第１未使用フィールド７３０は、ＪＡＬＲ命令では「０００００」のビット列が格納される。
【０１１７】
戻り番地フィールド（ｒｄ）７４０は、関数からの戻り番地を指定するフィールドである。この戻り番地フィールド（ｒｄ）７４０は、第１１乃至第１５番目のビットから構成されるビット列である。この戻り番地フィールド（ｒｄ）７４０は、ＪＡＬＲ命令では３１番レジスタを指すビット列（１１１１１）が格納される。
【０１１８】
第２未使用フィールド７５０は、ＪＡＬＲ命令では使用されないフィールドである。この第２未使用フィールド７５０は、第６乃至第１０番目のビットから構成されるビット列である。この第２未使用フィールド７５０は、ＪＡＬＲ命令では「０００００」のビット列が格納される。
【０１１９】
機能指定フィールド７６０は、オペコードフィールド７１０により指定された命令が複数の機能を含む場合には、その複数の機能のうち１つの機能を指定するフィールドである。この機能指定フィールド７６０は、第０乃至第５番目のビットから構成されるビット列である。この機能指定フィールド７６０は、ＪＡＬＲ命令では「００１００１」のビット列が格納される。
【０１２０】
図１０（ｂ）には、関数の再利用命令の一例が示されている。この再利用命令は、３２個のビット（０乃至３１番）のビット列により表現されるものである。この再利用命令は、オペコードフィールド７１０と、関数番地フィールド（ｒｓ）７２０と、第１再利用フィールド７３１と、戻り番地フィールド（ｒｄ）７４０と、第２再利用フィールド７５１と、機能指定フィールド７６０とから構成される。なお、ここでは、第１再利用フィールド７３１および第２再利用フィールド７５１以外の構成は、図１０（ａ）と同様のものであるため、図１０（ａ）と同符号を付してここでの説明を省略する。
【０１２１】
第１再利用フィールド７３１および第２再利用フィールド７５１は、共に再利用命令であることを示すフィールドである。この第１再利用フィールド７３１および第２再利用フィールド７５１は、ＪＡＬＲ命令における第１未使用フィールド７３０および第２未使用フィールド７５０のビット列を「０００００」以外のビット列に変更したものである。ただし、この第１再利用フィールド７３１および第２再利用フィールド７５１は、一方のビット列が「０００００」以外ならば再利用命令を指し示し、他方のビット列が「０００００」であってもよい。
【０１２２】
このように、ＪＡＬＲ命令の第１１乃至第１５番目あるいは第６乃至第１０番目のビット列のいずれかにおいて「０００００」の代わりに「００００１乃至１１１１１」のビット列が格納されていた場合には、その命令は再利用命令となる。
【０１２３】
［本発明の第１の実施の形態におけるコンパイル処理装置５００の動作例］
次に、本発明の第１の実施の形態におけるコンパイル処理装置５００の処理について図面を参照して説明する。
【０１２４】
図１１は、本発明の第１の実施の形態におけるコンパイル処理装置５００によるコンパイル処理の処理手順を示すフローチャートである。
【０１２５】
まず、コンパイル処理装置５００により、ソースプログラム記憶部５１０からソースプログラムが読み出される（ステップＳ９１１）。次に、再利用候補区間抽出部６１１により、再利用候補区間が抽出される（ステップＳ９１２）。
【０１２６】
そして、再利用候補区間解析部６１２により、再利用候補区間の使用態様が解析される（ステップＳ９１３）。なお、ステップＳ９１３は、特許請求の範囲に記載の解析手順の一例である。
【０１２７】
次に、再利用度生成部６２１により、再利用候補区間の解析結果に基づいて再利用度が生成される（ステップＳ９１４）。なお、ステップＳ９１４は、特許請求の範囲に記載の再利用度生成手順の一例である。
【０１２８】
続いて、再利用命令変換部６２３により、再利用度に基づいて再利用候補区間の呼出し命令が再利用命令に変換される（ステップＳ９１６）。これは、関数が再利用候補区間である場合には、関数の呼出し命令（ｃａｌｌ）が再利用命令（ｍｅｍｏＣａｌｌ）に変換されることを意味する。なお、ステップＳ９１５は、特許請求の範囲に記載の命令変換手順の一例である。
【０１２９】
そして、コード生成部５２２により、変換された命令を含むプログラムに基づいて機械語プログラムのコードであるオブジェクトプログラムが生成される（ステップＳ９１７）
【０１３０】
このように、本発明の第１の実施の形態によれば、再利用度を生成することによって、再利用される再利用候補区間の呼出し命令を実行結果が再利用される度合いに基づいて再利用命令に変換することが出来る。
【０１３１】
＜２．第２の実施の形態＞
［データ処理装置１００の構成例］
図１２は、本発明の第２の実施の形態におけるデータ処理装置１００の構成例を示すブロック図である。このデータ処理装置１００は、バス１２０を介して主記憶部１３０と相互に接続されている。また、ここでは、データ処理装置１００が処理する命令区間は関数を想定するものとする。
【０１３２】
データ処理装置１００は、プログラムデータにおける各処理を実行するものである。このデータ処理装置１００は、例えば、一般的なコンピュータにおいてはＣＰＵ（Central Processing Unit）により実現される。このデータ処理装置１００は、一次キャッシュ２００と、プロセッサコア３００と、履歴管理部４００とを備える。ここでは、データ処理装置１００は、本発明の第１の実施の形態におけるコンパイル処理装置５００により生成された再利用命令を含むプログラムを処理するものとする。
【０１３３】
一次キャッシュ２００は、プロセッサコア３００がバス１２０を介して入出力する情報を一時的に保持するものである。この一次キャッシュ２００は、命令キャッシュ２１０およびデータキャッシュ２２０を備える。
【０１３４】
命令キャッシュ２１０は、プロセッサコア３００において実行される命令を一時的に保持するものである。この命令キャッシュ２１０は、プロセッサコア３００が頻繁に実行する命令を一時的に保持することによってプロセッサコア３００から主記憶部１３０へのアクセスを軽減させて、プロセッサコア３００におけるデータの入力待ち時間を軽減させる。この命令キャッシュ２１０は、主記憶部１３０から供給された再利用命令をプロセッサコア３００に供給する。
【０１３５】
データキャッシュ２２０は、プロセッサコア３００の入力データおよび出力データを一時的に保持するものである。このデータキャッシュ２２０は、使用頻度の高いプロセッサコア３００の入力データを一時的に保持することによりプロセッサコア３００から主記憶部１３０へのアクセスを軽減させて、プロセッサコア３００におけるデータの入力待ち時間を軽減させる。このデータキャッシュ２２０は、主記憶部１３０から供給された関数の入力値および関数の開始アドレスをプロセッサコア３００に出力する。
【０１３６】
プロセッサコア３００は、プログラムの命令に従って演算を実行するものである。このプロセッサコア３００は、例えば、ＭＩＰＳ（Microprocessor without Interlocked Pipeline Stages）プロセッサにより実現される。このプロセッサコア３００は、命令キャッシュ２１０およびデータキャッシュ２２０から入力される命令と入力データと関数の開始アドレスとに基づいて命令を実行し、その結果の実行結果を出力する。このプロセッサコア３００は、入力される命令が再利用区間を指定する再利用命令である場合において履歴管理部４００から実行結果が供給されないときには、この命令を実行した結果である実行結果をデータキャッシュ２２０および履歴管理部４００に出力する。
【０１３７】
またプロセッサコア３００は、入力される命令が再利用区間を指定する再利用命令である場合において履歴管理部４００から実行結果が供給されたときには、再利用区間における処理を中止して、この再利用区間を呼出したルーチンに戻る。
【０１３８】
履歴管理部４００は、再利用区間の実行結果を保持して管理するものである。この履歴管理部４００は、プロセッサコア３００から供給された再利用区間の区間識別情報と入力値と実行結果とを実行履歴として保持する。ここでいう区間識別情報とは、再利用区間を特定するための情報であり、例えば、関数やループの開始アドレスである。すなわち、この履歴管理部４００は、区間識別情報、入力値、および、実行結果として、関数の開始アドレス、入力値、および、実行結果を保持する。また、この履歴管理部４００は、プロセッサコア３００から関数の開始アドレスおよび入力値が供給された場合には、この開始アドレスおよび入力値を含んでいる実行履歴を検索する。
【０１３９】
バス１２０は、データ処理装置１００および主記憶部１３０へのデータのやりとりを行うためのバスである。
【０１４０】
主記憶部１３０は、データ処理装置１００が動作するために必要なデータを保持するものである。この主記憶部１３０は、例えば、ＲＡＭ（Random Access Memory）などが考えられる。この主記憶部１３０は、記憶しているデータを、バス１２０を介してデータ処理装置１００に出力する。
【０１４１】
このように、本発明の第２の実施の形態によれば、データ処理装置１００に履歴管理部４００を設けることによって、複数の命令区間のうち実行結果が再利用される度合いに基づいて抽出された再利用区間の実行結果を再利用することができる。
【０１４２】
［プロセッサコア３００および履歴管理部４００の構成例］
図１３は、本発明の第２の実施の形態におけるプロセッサコア３００および履歴管理部４００の構成例を示すブロック図である。ここでは、プロセッサコア３００および履歴管理部４００の機能は、図１２と同様のものであるため、同一の符号を付してここでの説明を省略する。
【０１４３】
プロセッサコア３００は、フェッチ部３１０と、命令デコーダ３２０と、実行部３３０と、レジスタファイル３４０とを備える。
【０１４４】
フェッチ部３１０は、命令キャッシュ２１０から主記憶部１３０からの命令を読み出すものである。このフェッチ部３１０は、その読み出した命令を一時的に保持して、その保持されている命令のうち、実行部３３０に実行させるための命令を命令デコーダ３２０に供給する。このフェッチ部３１０は、例えば、一時的に保持している命令のうち、実行部３３０において実行される再利用命令を命令デコーダ３２０に供給する。このフェッチ部３１０は、例えば、主記憶部１３０に記憶された再利用命令を命令デコーダ３２０に供給する。
【０１４５】
命令デコーダ３２０は、フェッチ部３１０から供給された命令を解析することによってプロセッサコア３００の構成部位を制御する制御信号を生成するものである。この命令デコーダ３２０は、例えば、命令を解析することによって実行部３３０およびレジスタファイル３４０を制御する制御信号を生成して、その生成された制御信号を実行部３３０およびレジスタファイル３４０に供給する。
【０１４６】
この命令デコーダ３２０は、フェッチ部３１０から再利用命令が供給された場合には、この再利用命令を解析することによって、実行部３３０およびレジスタファイル３４０の各々を制御する制御信号を実行部３３０およびレジスタファイル３４０に供給する。
【０１４７】
実行部３３０は、命令デコーダ３２０から供給された制御信号に基づいて、命令デコーダ３２０において解析した命令を実行するものである。この実行部３３０は、命令デコーダ３２０から再利用命令に基づく制御信号が供給された場合には、再利用命令が指定する再利用区間の処理を開始する。また、この再利用区間の処理の開始とともに、実行部３３０は、レジスタファイル３４０から取得した再利用区間の区間識別情報を信号線３０９を介して履歴管理部４００に出力する。そして、実行部３３０は、レジスタファイル３４０から供給される再利用区間の入力値に基づいて再利用区間における処理を実行するとともに、再利用区間の入力値を信号線３０９を介して履歴管理部４００に出力する。
【０１４８】
また、実行部３３０は、履歴管理部４００から再利用区間の実行結果が供給された場合には、再利用区間の処理を中止するとともに、実行結果を履歴管理部４００から受け取ったことを知らせる信号をフェッチ部３１０に供給する。この時、実行部３３０は、実行結果をレジスタファイル３４０に出力する。
【０１４９】
一方、実行部３３０は、履歴管理部４００から再利用区間の実行結果が供給されない場合には、再利用区間の処理を最後まで行い、実行結果を履歴管理部４００およびレジスタファイル３４０に出力する。なお、実行部３３０は、特許請求の範囲に記載の実行部の一例である。
【０１５０】
レジスタファイル３４０は、データキャッシュ２２０から供給されたデータおよび実行部３３０から供給された実行結果を一時的に保持するものである。このレジスタファイル３４０は、例えば、命令デコーダ３２０から再利用命令に基づく制御信号が供給された場合には、再利用区間の入力値を実行部３３０に供給する。
【０１５１】
履歴管理部４００は、履歴対象データ保持部４１０と、履歴検索部４２０と、履歴メモリ４３０と、履歴登録部４４０とを備える。
【０１５２】
履歴対象データ保持部４１０は、実行部３３０から供給されたデータを一時的に保持するものである。この履歴対象データ保持部４１０は、実行部３３０から区間識別情報および入力値が供給された際には、これらを検索要求として履歴検索部４２０に供給する。例えば、履歴対象データ保持部４１０は、再利用区間が関数である場合には、実行部３３０から供給された関数の開始アドレスおよび入力値を検索要求として履歴検索部４２０に供給する。
【０１５３】
また、この履歴対象データ保持部４１０は、実行部３３０から区間識別情報と、入力値と、実行結果とが供給されることによって、実行履歴を登録する条件が整った場合には、これらを実行履歴として履歴登録部４４０に供給する。
【０１５４】
履歴検索部４２０は、履歴対象データ保持部４１０から供給された検索要求に基づいて実行履歴を検索し、実行履歴が検索された場合には実行結果を出力するものである。この履歴検索部４２０は、検索要求入力部４２１および実行結果出力部４２２を備える。なお、履歴検索部４２０は、特許請求の範囲に記載の履歴検索部の一例である。
【０１５５】
検索要求入力部４２１は、履歴対象データ保持部４１０から供給された検索要求に基づいて履歴メモリ４３０から実行履歴を検索するものである。この検索要求入力部４２１は、例えば、関数の再利用命令が命令デコーダ３２０において解析された場合には、この関数の開始アドレスおよび入力値を履歴メモリ４３０に供給することによって、実行履歴の検索を開始する。
【０１５６】
実行結果出力部４２２は、履歴メモリ４３０において実行履歴が検索された場合に実行結果を履歴メモリ４３０から抽出し、その抽出した実行結果を実行部３３０に出力するものである。この実行結果出力部は、その抽出した実行結果を信号線４０９を介して実行部３３０に供給する。
【０１５７】
履歴メモリ４３０は、履歴登録部４４０から供給された実行履歴を保持するものである。この履歴メモリ４３０は、例えば、履歴検索部４２０から検索要求が供給された場合において、この検索要求と一致する実行履歴を保持しているときは、この実行履歴の実行結果を実行結果出力部４２２に供給する。また、この履歴メモリ４３０は、履歴登録部４４０から実行履歴が供給された場合には、この実行履歴を保持する。この履歴メモリ４３０は、例えば、連想メモリ（ＣＡＭ：Content Addressable Memory）により実現される。なお、履歴メモリ４３０は、特許請求の範囲に記載の履歴メモリの一例である。
【０１５８】
履歴登録部４４０は、履歴対象データ保持部４１０から供給された実行履歴を履歴メモリ４３０に保存させるデータ構造に変換し、この実行履歴を履歴メモリ４３０に登録するものである。この履歴登録部４４０は、例えば、関数を指定する再利用命令が命令デコーダ３２０において解析された際に、履歴検索部４２０により実行履歴が検索されない場合には、関数の開始アドレス、入力値および実行結果を実行履歴として履歴メモリ４３０に登録する。
【０１５９】
このように、プロセッサコア３００および履歴管理部４００は、関数の実行結果が再利用される度合いに応じて関数の呼出し命令が再利用命令に変換されたプログラムを実行することができる。なお、ここでは、プロセッサコア３００および履歴管理部４００は、関数を再利用対象とする例について説明したが、ループに関しても同様に再利用対象とすることができる。
【０１６０】
［履歴メモリ４３０のデータ構造例］
図１４は、本発明の第２の実施の形態における履歴メモリ４３０のデータ構造の一例を示す概念図である。ここでは、履歴メモリ４３０により、区間識別情報ごとに保持された実行履歴のうち、１つの区間識別情報における実行履歴を木構造により保持する構成が示されている。この例では、引数がｎ個であり、かつ、実行結果である出力をｍ個の格納先に返す関数を想定している。また、ここでは、関数の先頭アドレスである関数の開始アドレスを区間識別情報として用いることとする。
【０１６１】
この例では、木構造における関数ルート８１０と、第１の引数ノード８２１および８２２と、第ｎの引数ノード８３１乃至８３４と、第１の出力ノード８４１乃至８４４と、第ｍの出力ノード８５１乃至８５４とが示されている。
【０１６２】
関数ルート８１０には、区間識別情報である関数の開始アドレスと、第１の引数ノード８２１を指し示すポインタとが示されている。
【０１６３】
第１および第ｎの引数ノード８２１、８２２および８３１乃至８３４には、履歴メモリ４３０に保持されている実行履歴における引数の入力値として、引数の値を示す入力値と、その引数の型と、その引数の格納場所を示す種類とが示されている。ここにいう格納場所とは、レジスタ番号または主記憶部１３０のメモリアドレスのことをいう。
【０１６４】
さらに、第１および第ｎの引数ノード８２１、８２２および８３１乃至８３４には、比較対象の入力値が互いに一致した場合に次の引数の引数ノードを指し示す右ポインタと、不一致の場合に同一の引数における他の引数ノードを指し示す下ポインタとが示されている。また、第ｎの引数ノード８３１乃至８３４の各々は、第１および第ｍの出力ノード８４１乃至８４４および８５１乃至８５４にそれぞれ連結されている。
【０１６５】
第１および第ｍの出力ノード８４１乃至８４４および８５１乃至８５４には、履歴メモリ４３０に保持されている実行履歴における実行結果として、実行結果の値を示す出力値と、その実行結果の格納場所を示す種類と、その実行結果の型とが示されている。さらに、第１の出力ノード８４１乃至８４４には、次の出力ノードを指し示す右ポインタが示されている。すなわち、第１および第ｍの出力ノード８４１乃至８４４および８５１乃至８５４は、連結リストを構成している。また、第ｍの出力ノード８５１乃至８５４には、出力ノードの終端を表わすヌルが示されている。
【０１６６】
このような木構造において、関数ルート８１０に示された関数の開始アドレスと一致する関数の開始アドレスが履歴検索部４２０から入力されると、関数ルート８１０のポインタによって指し示された第１の引数ノード８２１において入力値の比較処理が実行される。ここにいう入力値の比較処理とは、第１の引数ノード８２１に示された入力値、種類および型である入力値と、履歴検索部４２０からの入力値とを比較することである。
【０１６７】
このとき、例えば、第１の引数ノード８２１に示された入力値と履歴検索部４２０からの入力値とが一致した場合には、第１の引数ノード８２１の右ポインタにより指し示された次の引数ノードにおいて入力値の比較処理が実行される。一方、第１の引数ノード８２１に示された入力値と、履歴検索部４２０からの入力値とが一致しない場合には、第１の引数ノード８２１の下ポインタにより指し示された第１の引数ノード８２２において入力値の比較処理が実行される。
【０１６８】
このようにして、各引数ノードにおける比較処理による結果に基づいて右または下ポインタの指し示す引数ノードが選択され、その選択された引数ノードにおいて入力値の比較処理が順次実行される。そして、例えば、第ｎの引数ノード８３１に示された入力値と履歴検索部４２０からの入力値とが互いに一致した場合には、第ｎの引数ノード８３１の右ポインタの指し示す第１の出力ノード８４１の実行結果が履歴検索部４２０に出力される。そして、最後に、第ｍ番の出力ノード８５１の実行結果が履歴検索部４２０に出力される。
【０１６９】
このように、履歴メモリ４３０を識別情報ごとに木構造により構成することによって、同じ引数の入力値を重複して保持させる必要が無いため、記憶領域を節約することができる。また、識別情報ごとにデータ構造を分けることによって、検索速度の低下を抑制することができる。
【０１７０】
［本発明の第２の実施の形態におけるプロセッサコア３００および履歴管理部４００により保存される実行履歴の一例］
図１５は、本発明の第２の実施の形態におけるプロセッサコア３００により処理されるプログラムおよび履歴管理部４００により保存される実行履歴の一例を示す概念図である。ここでは、従来技術を用いて実行履歴を保存する場合と、本発明の第２の実施の形態により実行履歴を保存する場合とが表されている。なお、ここでは、変換されたプログラムの実行は、ここで示したプログラムの上から順に実行されるものと想定する。
【０１７１】
図１５（ａ）は、従来技術によるソースプログラムの変換例を示す模式図である。ここでは、右矢印に対して左側にある枠の中には、ソースプログラムがＣ言語により示されている。また、右矢印に対して右側にある枠の中には、従来技術により変換されたプログラムの一例がアセンブリ言語により示されている。
【０１７２】
ソースプログラムには、プログラムのメインの関数（ｆｕｎｃＸ）と、そのメインの関数により呼び出される６つの関数とが示されている。この６つの関数として、ｃｈａｒ型の２個の変数を引数とする関数（ｆｕｎｃＡ）と、ｃｈａｒ型の１個の変数およびｉｎｔ型の１個の変数を引数とする関数（ｆｕｎｃＢ）と、ｃｈａｒ型の１個の変数を引数とする関数（ｆｕｎｃＣ）とが示されている。さらに、ｂｏｏｌ型の１個の変数を引数とする関数（ｆｕｎｃＤ）と、ｉｎｔ型の２個の変数を引数とする関数（ｆｕｎｃＥ）と、ｉｎｔ型の１個の変数を引数とする関数（ｆｕｎｃＦ）とが示されている。
【０１７３】
このソースプログラムは、関数を再利用区間として指定する場合には全ての関数を再利用の対象とする従来技術のコンパイル処理装置により、全ての関数が再利用の対象とされるプログラムに変換される。その結果、右矢印に対して右側にある枠の中に示すように、ｆｕｎｃＡ乃至Ｇを呼出し命令（ｃａｌｌ）で呼び出し、ｆｕｎｃＡ乃至Ｇの実行結果を全て再利用するプログラムを生成する。
【０１７４】
図１５（ｂ）は、図１５（ａ）の右矢印の右側にある枠の中に示したプログラムを上から順に１回ずつ実行した場合における履歴メモリに保存される実行履歴の一例を示す模式図である。なお、ここでは、実行履歴が保存される履歴メモリは、便宜上、入力値および出力値の型や個数を問わず、２つの関数に関する実行履歴を保存できるものとする。また、新たな実行履歴を保存する際に、履歴メモリの空き容量が無い場合には、最も長い期間未使用だった実効履歴を履歴メモリから消去した後に、新たな実行履歴を履歴メモリに保存するものとする。さらに、ここでは、図１５（ａ）において示した変換されたプログラムの呼出し命令を、上から順に１回ずつ実行するものとする。
【０１７５】
従来技術を用いる場合では、図１５（ａ）の右矢印の右側にある変換されたプログラムに基づいて、６つの関数（ｆｕｎｃＡ乃至Ｆ）が再利用命令（ｃａｌ）により呼び出される。最初に、ｃｈａｒ型の２個の変数を引数とするｆｕｎｃＡが再利用区間として呼び出され、ｆｕｎｃＡの実行履歴が履歴メモリに保存される。次に、ｃｈａｒ型の１個の変数およびｉｎｔ型の１個の変数を引数とするｆｕｎｃＢが再利用区間として呼び出された後に実行履歴が保存される。
【０１７６】
その後、履歴メモリには空き容量が無い状態でｃｈａｒ型の１個の変数を引数とするｆｕｎｃＣが再利用区間として呼び出される。この時、従来技術のデータ処理装置では、最も長い期間未使用だったｆｕｎｃＡの実行履歴を履歴メモリから消去するとともに、ｆｕｎｃＣの実行履歴を保存する。
【０１７７】
そして、ｆｕｎｃＣのときと同様にして、ｂｏｏｌ型の１個の変数を引数とするｆｕｎｃＤのときには、ｆｕｎｃＢの実行履歴の代わりにｆｕｎｃＤの実行履歴が保存される。そして、ｉｎｔ型の２個の変数を引数とするｆｕｎｃＥのときには、ｆｕｎｃＣの実行履歴の代わりにｆｕｎｃＥの実行履歴が保存される。最後に、ｉｎｔ型の１個の変数を引数とする関数ｆｕｎｃＦが再利用区間として呼び出されると、最も長い期間未使用だったｆｕｎｃＤの実行履歴が履歴メモリから消去されるとともに、ｆｕｎｃＦの実行履歴が保存される。
【０１７８】
このようにして、図１５（ａ）の変換されたプログラムの呼出し命令を上から順に１回ずつ実行すると、図１５（ｂ）において示したように、２つの関数（ｆｕｎｃＥおよびｆｕｎｃＦ）の実行履歴が履歴メモリに保存される。
【０１７９】
このように、従来技術を用いる場合では、常に再利用される確率が高い実行履歴が履歴メモリに保存されているわけではない。このため、実行するプログラムによっては、全く再利用されない関数の実行履歴が履歴メモリに保存され、再利用の効果が得られない場合が生じる。
【０１８０】
図１５（ｃ）は、本発明の第１の実施の形態によるソースプログラムの変換例を示す模式図である。なお、ここでは、再利用度生成部６２１は、関数の入力値が採り得る値の組合せに基づいて再利用度を生成することを想定する。また、履歴メモリ４３０は、便宜上、入力値および出力値の型や個数を問わず、２つの関数に関する実行履歴を保存できるものとする。
【０１８１】
ここでは、右矢印に対して左側にある枠の中には、図１５（ａ）において示したソースプログラムと同様のソースプログラムがＣ言語により示されている。また、右矢印に対して右側にある枠の中には、本発明の第１の実施の形態により変換されたプログラムの一例がアセンブリ言語により示されている。
【０１８２】
このソースプログラムは、まず、６つの関数（ｆｕｎｃＡ乃至Ｆ）における引数の個数および型について関数毎に再利用候補区間解析部６１２により解析される。その後、再利用度生成部６２１は、再利用候補区間解析部６１２が解析した引数の個数および型に基づいて再利用度を生成する。
【０１８３】
この時、再利用度生成部６２１は、関数毎の入力値が採り得る値の組合せに基づいて再利用度を生成する。この再利用度生成部６２１は、例えば、関数の入力値が採り得る値の組合せとして入力値の総ビット数を算出する場合には、算出した入力値の総ビット数に基づいて再利用度を生成する。この場合において、この再利用度生成部６２１は、ｃｈａｒ型の２個の変数を引数とする関数（ｆｕｎｃＡ）については入力値の組合せは「１６＋１＋１６＝３２」により３２ビットと判断する。さらに、ｃｈａｒ型の１個の変数およびｉｎｔ型の１個の変数を引数とする関数（ｆｕｎｃＢ）については、入力値の組合せは「１６＋１＝１７」により１７ビットと判断する。また、ｃｈａｒ型の１個の変数を引数とする関数（ｆｕｎｃＣ）については、入力値の組合せは１６ビットと判断する。そして、ｂｏｏｌ型の１個の変数を引数とする関数（ｆｕｎｃＤ）については、入力値の組合せは１ビットと判断する。さらに、ｉｎｔ型の２個の変数を引数とする関数（ｆｕｎｃＥ）については、入力値の組合せは「３２＋３２＝６４」により６４ビットと判断する。ｉｎｔ型の１個の変数を引数とする関数（ｆｕｎｃＦ）については、入力値の組合せは３２ビットと判断する。
【０１８４】
その結果、再利用度生成部６２１は、入力値の組合せの逆数に基づいて、ｂｏｏｌ型の１個の変数を引数とするｆｕｎｃＤには１番高い再利用度を生成し、ｃｈａｒ型の１個の変数を引数とするｆｕｎｃＣには２番目に高い再利用度を生成する。さらに、再利用度生成部６２１は、ｃｈａｒ型の１個の変数およびｉｎｔ型の１個の変数を引数とするｆｕｎｃＢには、３番目に高い再利用度を生成する。また、ｃｈａｒ型の２個の変数を引数とするｆｕｎｃＡおよびｉｎｔ型の１個の変数を引数とするｆｕｎｃＦには、４番目に高い再利用度を生成する。そして、ｉｎｔ型の２個の変数を引数とするｆｕｎｃＥには、１番低い再利用度を生成する。
【０１８５】
そして、再利用命令変換部６２３は、再利用度が最も高い関数から順に履歴メモリ４３０に保持する関数を設定する。この結果、再利用命令変換部６２３は、ｂｏｏｌ型の１個の変数を引数とするｆｕｎｃＤおよびｃｈａｒ型の１個の変数を引数とするｆｕｎｃＣの呼出し命令（ｃａｌｌ）を再利用命令（ｍｅｍｏｃａｌｌ）に変換する。
【０１８６】
図１５（ｄ）には、図１５（ｃ）の右矢印の右側にある枠の中に示したプログラムを上から順に１回ずつ実行した場合における履歴メモリに保存される実行履歴の一例が示されている。なお、履歴メモリ４３０は、便宜上、入力値および出力値の型や個数を問わず、２つの関数に関する実行履歴を登録できるものとする。
【０１８７】
本発明の第２の実施の形態におけるプロセッサコア３００は、図１５（ｃ）において示した変換されたプログラムに基づいて、再利用命令（ｍｅｍｏＣａｌｌ）で呼び出されるｆｕｎｃＣおよびｆｕｎｃＤの実行履歴を履歴管理部４００に出力する。その結果、ｆｕｎｃＡおよびｆｕｎｃＢの実行履歴が履歴メモリ４３０に保存される。
【０１８８】
このように、本発明の第２の実施の形態によれば、実行結果が再利用される確率が高い関数を選択して履歴メモリ４３０に保存することができる。
【０１８９】
［本発明の第２の実施の形態におけるプロセッサコア３００および履歴管理部４００の動作例］
次に、本発明の第２の実施の形態におけるプロセッサコア３００および履歴管理部４００の処理について図面を参照して説明する。
【０１９０】
図１６は、本発明の第２の実施の形態におけるプロセッサコア３００および履歴管理部４００による関数の実行処理の処理手順を示すフローチャートである。
【０１９１】
まず、フェッチ部３１０およびレジスタファイル３４０に、関数を参照する命令およびその関数の入力値が読み出される（ステップＳ９３１）。次に、命令デコーダ３２０によって、関数を参照する命令がデコードされる（ステップＳ９３２）。続いて、デコードした命令が再利用命令か否かが解析される（ステップＳ９３３）。解析の結果、デコードした命令が再利用命令でない場合には、実行部３３０によって、レジスタファイル３４０から供給される入力値に基づいてその関数が実行され、実行結果が出力される（ステップＳ９４０）。そして、関数の実行処理は終了する。
【０１９２】
一方、デコードした命令が再利用命令である場合には、検索要求入力部４２１によって、実行部３３０から供給された関数の開始アドレスおよび入力値を用いて履歴メモリ４３０から実行履歴が検索される（ステップＳ９３４）。
【０１９３】
次に、実行履歴があるか否かが判断される（ステップＳ９３５）。実行履歴が履歴メモリ４３０にある場合には、実行結果出力部４２２によって、実行結果が出力される（ステップＳ９３８）。続いて、実行部３３０は、実行結果が出力された関数の実行を中止させる（ステップＳ９３９）。そして、関数の実行は終了する。
【０１９４】
一方、実行履歴が履歴メモリ４３０に保持されていない場合には、実行部３３０によって、レジスタファイル３４０から供給される入力値に基づいてその関数が実行され、実行結果が出力される（ステップＳ９３６）。そして、履歴登録部４４０によって、実行履歴が履歴メモリ４３０に登録される（ステップＳ９３７）。なお、このステップＳ９３６およびステップＳ９３７は、特許請求の範囲に記載の実行手段の一例である。そして、関数の実行は終了する。
【０１９５】
このように、本発明の第２の実施の形態によれば、再利用区間の呼出し命令が再利用候補区間の再利用度に従って再利用命令に変換されたプログラムに基づいて、実行結果の再利用の効果が高い再利用区間の実行履歴のみを履歴メモリ４３０に保持することができる。
【０１９６】
＜３．第３の実施の形態＞
［本発明の第３の実施の形態におけるコンパイル処理装置５００の構成例］
図１７は、本発明の第３の実施の形態におけるコンパイル処理装置５００の構成例を示すブロック図である。このコンパイル処理装置５００は、図１において示したコンパイル処理装置５００の構成に加えて優先度生成部６２２を備えている。ここでは、優先度生成部６２２以外の構成は、図１と同様のものであるため、図１と同符号を付してここでの各部の構成の詳細な説明を省略する。
【０１９７】
優先度生成部６２２は、再利用度生成部６２１から供給された再利用度に基づいて、実行履歴が履歴メモリ４３０に保持されるための優先度を生成するものである。この優先度生成部６２２は、例えば、再利用度が高い再利用候補区間から順に高い値の優先度を生成する。この優先度生成部６２２は、生成した優先度を、再利用度、再利用候補区間の識別情報、および、プログラムとともに再利用命令変換部６２３に供給する。なお、優先度生成部６２２は、特許請求の範囲に記載の優先度生成部の一例である。
【０１９８】
再利用命令変換部６２３は、優先度生成部６２２から供給された再利用度および優先度に基づいて、再利用候補区間の呼出し命令を優先度が含まれる再利用命令に変換するものである。この再利用命令変換部６２３は、例えば、再利用度および優先度が算出された全ての再利用候補区間の呼出し命令を、優先度が含まれる再利用命令に変換する。この再利用命令変換部６２３は、その変換した命令を含む最適化されたプログラムをコード生成部５２２に供給する。
【０１９９】
なお、第３の実施の形態では、優先度生成部６２２は、再利用度の順序に応じて優先度を生成するものを想定するが、これに限定されるものではない。例えば、優先度生成部６２２は、再利用度と、再利用候補区間の実行履歴のデータ量の予測値と、履歴メモリ４３０の容量とに基づいて、再利用候補区間の優先度を生成するものなどが考えられる。この場合において、優先度生成部６２２は、図１において示した再利用命令変換部６２３と同様に実行履歴のデータ量の予測値を生成する。そして、優先度生成部６２２は、履歴メモリ４３０から実行履歴が削除されるタイミングを考慮し、効率の良い実行履歴の入れ替えが出来るように優先度を生成する。
【０２００】
なお、ここでは、コンパイル処理装置５００は、関数を再利用対象とする例について説明したが、ループに関しても同様に再利用対象とすることができる。
【０２０１】
なお、第３の実施の形態では、便宜上、再利用候補区間解析部６１２は、再利用候補区間の使用態様を関数毎に解析するが、より詳細に解析するために関数の呼出し命令毎に解析するものとしてもよい。この場合において、再利用度生成部６２１は、関数の呼出し命令毎に再利用度を生成し、優先度生成部６２２は、呼び出される関数は同じであっても関数の呼出し命令毎に異なる優先度を生成する。そして、再利用命令変換部６２３は、呼び出される関数は同じであっても関数の呼出し命令毎に異なる優先度が含まれる再利用命令に変換する。
【０２０２】
［本発明の第３の実施の形態におけるプログラム変換処理部６００の動作例］
次に、本発明の第３の実施の形態におけるプログラム変換処理部６００の動作について次図を参照して説明する。
【０２０３】
図１８は、本発明の第３の実施の形態におけるプログラム変換処理部６００による複数の引数が入力値である関数を含むプログラムの変換例を示す模式図である。
【０２０４】
図１８（ａ）は、引数の型は同じだが引数の個数は異なる複数の関数を含むプログラムのプログラム変換処理部６００による変換例を示す模式図である。なお、再利用候補区間解析部６１２および再利用度生成部６２１については、図３において示した動作例と同様の動作をすることを想定し、ここでの詳細な説明を省略する。
【０２０５】
図１８（ａ）の右矢印に対して左側に位置する枠の中には、プログラム変換処理部６００に処理される前のソースプログラムの一例がＣ言語により示されている。また、右矢印に対して右側に位置する枠の中には、プログラム変換処理部６００に処理されたプログラムの一例がアセンブリ言語により示されている。
【０２０６】
ソースプログラムには、プログラムのメインの関数（ｆｕｎｃＸ）と、そのメインの関数により呼び出される３つの関数とが示されている。この３つの関数として、ｉｎｔ型の１個の変数を引数とする関数（ｆｕｎｃＡ）と、ｉｎｔ型の２個の変数を引数とする関数（ｆｕｎｃＢ）と、ｉｎｔ型の３個の変数を引数とする関数（ｆｕｎｃＣ）とが示されている。
【０２０７】
このソースプログラムは、再利用候補区間解析部６１２および再利用度生成部６２１によって、図３において示した動作例と同様に解析および再利用度の生成がされる。これにより、引数が１個の関数（ｆｕｎｃＡ）の再利用度が１番高く、引数が２個の関数（ｆｕｎｃＢ）の再利用度が２番目に高く、引数が３個の関数（ｆｕｎｃＣ）の再利用度が１番低い再利用度が生成される。
【０２０８】
次に、優先度生成部６２２により３つの関数（ｆｕｎｃＡ乃至ｆｕｎｃＣ）の優先度が生成される。優先度生成部６２２は、再利用度に基づいて優先度を生成することにより、再利用度が１番高い関数（ｆｕｎｃＡ）には１番高い優先度（３）を生成し、再利用度が２番目に高い関数（ｆｕｎｃＢ）には２番目に高い優先度（２）を生成する。また、優先度生成部６２２は、再利用度が１番低い関数（ｆｕｎｃＣ）には１番低い優先度（１）を生成する。
【０２０９】
そして、再利用命令変換部６２３は、実行結果を再利用させる再利用区間の呼出し命令を優先度が含まれる再利用命令に優先度に基づいて変換する。この図１８（ａ）の場合においては、再利用命令変換部６２３は、履歴メモリの容量を考慮しないため、優先度が生成された全ての関数の呼出し命令を優先度が含まれる再利用命令に変換する。その結果、この再利用命令変換部６２３は、３つの関数（ｆｕｎｃＡ乃至Ｃ）の呼出し命令を優先度が含まれる再利用命令に変換する。
【０２１０】
このようにして、プログラム変換処理部６００は、右矢印に対して右側にある枠の中に示すようなプログラムを生成する。このプログラムにより、ｉｎｔ型の１個の変数を引数とするｆｕｎｃＡは優先度（３）を含む再利用命令（ｍｅｍｏＣａｌｌ）により呼び出される。ｉｎｔ型の２個の変数を引数とするｆｕｎｃＢは優先度（２）を含む再利用命令（ｍｅｍｏｃａｌｌ）により呼び出され、ｉｎｔ型の３個の変数を引数とするｆｕｎｃＣは優先度（１）を含む再利用命令（ｍｅｍｏｃａｌｌ）により呼び出される。
【０２１１】
図１８（ｂ）は、引数の型および引数の個数が異なる複数の関数を含むプログラムのプログラム変換処理部６００による変換例を示す模式図である。ここでは、再利用候補区間解析部６１２は、引数の個数および引数の型を使用態様として解析することを想定する。また、再利用度生成部６２１は、関数の入力値が採り得る値の組合せに基づいて再利用度を生成することを想定する。
【０２１２】
図１８（ｂ）の右矢印に対して左側に位置する枠の中には、プログラム変換処理部６００に処理される前のソースプログラムの一例がＣ言語により示されている。また、右矢印に対して右側に位置する枠の中には、プログラム変換処理部６００に処理されたプログラムの一例がアセンブリ言語により示されている。
【０２１３】
ソースプログラムには、プログラムのメインの関数（ｆｕｎｃＸ）と、そのメインの関数により呼び出される４つの関数（ｆｕｎｃＡ乃至Ｄ）とが示されている。この４つの関数として、ｉｎｔ型の１個の変数を引数とする関数（ｆｕｎｃＡ）と、ｉｎｔ型の２個の変数を引数とする関数（ｆｕｎｃＢ）と、ｂｏｏｌ型の２個の変数を引数とする関数（ｆｕｎｃＣ）とが示されている。さらに、この４つの関数として、ｂｏｏｌ型の３個の変数を引数とする関数（ｆｕｎｃＤ）が示されている。
【０２１４】
このソースプログラムは、まず、４つの関数（ｆｕｎｃＡ乃至Ｄ）における引数の個数および型について、関数毎に再利用候補区間解析部６１２により解析される。その後、再利用度生成部６２１は、再利用候補区間解析部６１２が解析した引数の個数および型に基づいて再利用度を生成する。
【０２１５】
この時、再利用度生成部６２１は、関数毎の入力値が採り得る値の組合せに基づいて再利用度を生成する。この再利用度生成部６２１は、例えば、関数の入力値が採り得る値の組合せとして入力値の総ビット数を算出する場合には、算出した入力値の総ビット数に基づいて再利用度を生成する。この場合において、この再利用度生成部６２１は、ｉｎｔ型の１個の変数を引数とする関数（ｆｕｎｃＡ）については入力値の組合せは３２ビットと判断する。さらに、ｉｎｔ型の２個の変数を引数とする関数（ｆｕｎｃＢ）については、
入力値の組合せは「３２＋３２＝６４」により６４ビットと判断する。
【０２１６】
また、ｂｏｏｌ型の２個の変数を引数とする関数（ｆｕｎｃＣ）については、入力値の組合せは「１＋１＝２」により２ビットと判断する。そして、ｂｏｏｌ型の３個の変数を引数とする関数（ｆｕｎｃＤ）については、入力値の組合せは「１＋１＋１＝３」により３ビットと判断する。
【０２１７】
その結果、再利用度生成部６２１は、入力値の組合せの逆数を再利用度にして、ｂｏｏｌ型の２個の変数を引数とするｆｕｎｃＣの再利用度が１番高く、ｂｏｏｌ型の３個の変数を引数とするｆｕｎｃＤの再利用度が２番目に高い度合いの再利用度を生成する。さらに、再利用度生成部６２１は、入力値の組合せの逆数を再利用度にして、ｉｎｔ型の１個の変数を引数とするｆｕｎｃＡの再利用度が３番目に高く、ｉｎｔ型の２個の変数を引数とするｆｕｎｃＢの再利用度が１番低い度合いの再利用度を生成する。
【０２１８】
次に、優先度生成部６２２は、４つの関数（ｆｕｎｃＡ乃至ｆｕｎｃＤ）の優先度を生成する。この優先度生成部６２２は、再利用度に基づいて優先度を生成することにより、再利用度が１番高い関数（ｆｕｎｃＣ）には１番優先度が高い優先度（４）を生成し、再利用度が２番目に高い関数（ｆｕｎｃＤ）には２番目に優先度が高い優先度（３）を生成する。また、優先度生成部６２２は、再利用度が３番目に高い関数（ｆｕｎｃＡ）には３番目に優先度が高い優先度（２）を生成し、再利用度が１番低い関数（ｆｕｎｃＢ）には優先度が１番低い優先度（１）を生成する。
【０２１９】
そして、再利用命令変換部６２３は、図１８（ａ）において示した再利用命令変換部６２３と同様に、実行結果を再利用させる再利用区間の呼出し命令を優先度が含まれる再利用命令に優先度に基づいて変換する。
【０２２０】
このようにして、プログラム変換処理部６００は、右矢印に対して右側に位置する枠の中に示すようなプログラムを生成する。このプログラムにより、ｉｎｔ型の１個の変数を引数とするｆｕｎｃＡは優先度（２）を含む再利用命令（ｍｅｍｏＣａｌｌ）により呼び出される。さらに、ｉｎｔ型の２個の変数を引数とするｆｕｎｃＢは優先度（１）を含む再利用命令（ｍｅｍｏＣａｌｌ）により呼び出され、ｂｏｏｌ型の２個の変数を引数とするｆｕｎｃＣは優先度（４）を含む再利用命令（ｍｅｍｏＣａｌｌ）により呼び出される。また、ｂｏｏｌ型の３個の変数を引数とするｆｕｎｃＣは優先度（３）を含む再利用命令（ｍｅｍｏＣａｌｌ）により呼び出される。
【０２２１】
図１９は、本発明の第３の実施の形態における引数の型は同じだが使用態様が異なる関数を含むプログラムのプログラム変換処理部６００による変換例を示す模式図である。
【０２２２】
図１９（ａ）は、引数の型は同じだが引数の使用態様が定数あるいは変数で異なる複数の関数を含むプログラムのプログラム変換処理部６００による変換例を示す模式図である。ここでは、再利用候補区間解析部６１２は、引数が定数および変数のいずれであるかおよび引数の採り得る値の限定を使用態様として解析することを想定する。また、再利用度生成部６２１は、関数の入力値が採り得る値の組合せに基づいて再利用度を生成することを想定する。
【０２２３】
図１９（ａ）の右矢印に対して左側に位置する枠の中には、プログラム変換処理部６００に処理される前のソースプログラムの一例がＣ言語により示されている。また、右矢印に対して右側に位置する枠の中には、プログラム変換処理部６００に処理されたプログラムの一例がアセンブリ言語により示されている。なお、ここでは、優先度生成部６２２は、優先度として「１乃至９」の値を生成するものと想定する。
【０２２４】
ソースプログラムには、プログラムのメインの関数（ｆｕｎｃＸ）と、そのメインの関数により呼び出される２つの関数（ｆｕｎｃＡおよびＢ）とが示されている。この２つの関数として、１個のｉｎｔ型の変数を引数と定義しているが関数が呼び出される段階で「２」および「３」の２つの値に引数が限定される関数（ｆｕｎｃＡ）と、１個のｉｎｔ型の変数を引数とする関数（ｆｕｎｃＢ）とが示されている。
【０２２５】
このソースプログラムは、まず、２つの関数（ｆｕｎｃＡおよびＢ）における引数が定数および変数のいずれであるか、および、引数の採り得る値の限定について関数毎に再利用候補区間解析部６１２により解析される。そして、再利用度生成部６２１は、再利用候補区間解析部６１２が解析した引数の個数および型に基づいて再利用度を生成する。
【０２２６】
その結果、再利用度生成部６２１は、１個のｉｎｔ型の変数を引数と定義しているが関数が呼び出される段階で「２」および「３」の２つの値に引数が限定されるｆｕｎｃＡの再利用度が１番高い度合いの再利用度を生成する。さらに、再利用度生成部６２１は、１個のｉｎｔ型の変数を引数とするｆｕｎｃＢの再利用度が１番低い度合いの再利用度を生成する。
【０２２７】
次に、優先度生成部６２２は、２つの関数（ｆｕｎｃＡおよびＢ）の優先度を生成する。この優先度生成部６２２は、再利用度に基づいて優先度を生成することにより、再利用度が１番高い関数（ｆｕｎｃＡ）には１番優先度が高い優先度（９）を生成し、再利用度が１番低い関数（ｆｕｎｃＢ）には１番優先度が低い優先度（１）を生成する。
【０２２８】
そして、再利用命令変換部６２３は、図１８において示した再利用命令変換部６２３と同様に、実行結果を再利用させる再利用区間の呼出し命令を優先度が含まれる再利用命令に優先度に基づいて変換する。
【０２２９】
このようにして、プログラム変換処理部６００は、右矢印に対して右側に位置する枠の中に示すようなプログラムを生成する。このプログラムにより、１個のｉｎｔ型の変数を引数と定義しているが関数が呼び出される段階で「２」および「３」の２つの値に引数が限定されるｆｕｎｃＡは優先度（９）を含む再利用命令（ｍｅｍｏＣａｌｌ）により呼び出される。さらに、１個のｉｎｔ型の変数を引数とするｆｕｎｃＢは優先度（１）を含む再利用命令（ｍｅｍｏＣａｌｌ）により呼び出される。
【０２３０】
図１９（ｂ）は、関数の呼び出される回数が異なる複数の関数を含むプログラムのプログラム変換処理部６００による変換例を示す模式図である。ここでは、再利用候補区間解析部６１２および再利用度生成部６２１は、図７において示した動作例と同様の動作をすることを想定する。また、ここでは、優先度生成部６２２は、優先度として「１乃至５」の値を生成するものとする。
【０２３１】
図１９（ｂ）の右矢印に対して左側に位置する枠の中には、プログラム変換処理部６００に処理される前のソースプログラムの一例がＣ言語により示されている。また、右矢印に対して右側に位置する枠の中には、プログラム変換処理部６００に処理されたプログラムの一例がアセンブリ言語により示されている。
【０２３２】
ソースプログラムには、プログラムのメインの関数（ｆｕｎｃＸ）と、そのメインの関数により呼び出される２つの関数（ｆｕｎｃＡおよびＢ）とが示されている。この２つの関数のうちｆｕｎｃＡは、１個のｉｎｔ型の変数を引数とする関数であり、メインの関数（ｆｕｎｃＸ）において３回呼び出される関数である。ｆｕｎｃＢは、１個のｉｎｔ型の変数を引数とする関数であり、メインの関数（ｆｕｎｃＸ）において１回呼び出される関数である。
【０２３３】
このソースプログラムは、再利用候補区間解析部６１２および再利用度生成部６２１によって、図７において示した動作例と同様に解析および再利用度の生成がされる。これにより、１個のｉｎｔ型の変数を引数とする関数であり、メインの関数（ｆｕｎｃＸ）において３回呼び出される関数（ｆｕｎｃＡ）に関しては、１番高い度合いの再利用度が生成される。また、１個のｉｎｔ型の変数を引数とする関数であり、メインの関数（ｆｕｎｃＸ）において１回呼び出される関数（ｆｕｎｃＢ）に関しては、１番低い度合いの再利用度が生成される。
【０２３４】
次に、優先度生成部６２２により２つの関数（ｆｕｎｃＡ乃至ｆｕｎｃＣ）の優先度が生成される。優先度生成部６２２は、再利用度に基づいて優先度を生成することにより、
再利用度が１番高い関数（ｆｕｎｃＡ）には１番優先度が高い優先度（５）を生成し、
再利用度が１番低い関数（ｆｕｎｃＢ）には１番優先度が低い優先度（１）を生成する。
【０２３５】
そして、再利用命令変換部６２３は、実行結果を再利用させる再利用区間の呼出し命令を優先度が含まれる再利用命令に図１９（ａ）と同様にして変換する。
【０２３６】
このようにして、プログラム変換処理部６００は、右矢印に対して右側に位置する枠の中に示すようなプログラムを生成する。すなわち、１個のｉｎｔ型の変数を引数とする関数であり、メインの関数（ｆｕｎｃＸ）において３回呼び出されるｆｕｎｃＡは、優先度（５）を含む再利用命令（ｍｅｍｏＣａｌｌ）により呼び出されるプログラムが生成される。また、１個のｉｎｔ型の変数を引数とする関数であり、メインの関数（ｆｕｎｃＸ）において１回呼び出されるｆｕｎｃＢは、優先度（１）を含む再利用命令（ｍｅｍｏＣａｌｌ）により呼び出されるプログラムが生成される。
【０２３７】
［本発明の第３の実施の形態における再利用命令の一例］
次に、本発明の第３の実施の形態におけるコンパイル処理装置５００が生成する再利用命令について図面を参照して説明する。
【０２３８】
図２０は、本発明の第３の実施の形態における関数の呼出し命令および関数の再利用命令の一例を示す概念図である。ここでは、データ処理装置１００のプロセッサコア３００は図１０と同様にＭＩＰＳにより構成されることを想定する。また、ここでは、左端は最上位ビット（ＭＳＢ）を示し、右端は最下位ビット（ＬＳＢ）を示している。図２０（ｂ）では、図１０（ｂ）に示したＭＩＰＳにおける関数の再利用命令の第１再利用フィールド７３１および第２再利用フィールド７５１に替えて、第１再利用フィールド７３２および７３３と、第２再利用フィールド７５２および７５３とが示されている。なお、第１再利用フィールド７３２および７３３と、第２再利用フィールド７５２および７５３と以外の各フィールドの機能は、図１０と同様のものであるため、図１０と同符号を付してここでの各フィールドの説明を省略する。
【０２３９】
図２０（ａ）には、ＭＩＰＳ命令セットにおける関数の呼出し命令（ｃａｌｌ）であるＪＡＬＲ命令が示されている。本発明の第３の実施の形態において再利用されない関数の呼出し命令は、図１０において示した本発明の第１の実施の形態と同様に、ＭＩＰＳ命令セットにおけるＪＡＬＲ命令が用いられる。
【０２４０】
図２０（ｂ）には、本発明の第３の実施の形態における関数の再利用命令の一例が示されている。
【０２４１】
第１再利用フィールド７３２および７３３は、第２再利用フィールド７５２および７５３とともに優先度が含まれる再利用命令であることを示すフィールドである。この第１再利用フィールド７３２および７３３は、第２再利用フィールド７５２および７５３のビット列と連結させることによって、優先度を示す１０ビットの数値を示すフィールドになる。
【０２４２】
例えば、第１再利用フィールド７３２には、第２再利用フィールド７５２とともに、優先度が最も低い再利用命令におけるビット列の値が格納されている。この第１再利用フィールド７３２は、第２再利用フィールド７５２と連結させることによって、１０ビットのビット列（０００００００００１）となる。すなわち、この命令を処理するデータ処理装置において、このビット列（０００００００００１）は優先度（１）を示すと判断される。
【０２４３】
さらに、第１再利用フィールド７３３には、第２再利用フィールド７５３とともに、優先度が最も高い再利用命令におけるビット列の値が格納されている。この第１再利用フィールド７３３は、第２再利用フィールド７５３と連結させることによって、１０ビットのビット列（１１１１１１１１１１）となる。すなわち、この命令を処理するデータ処理装置において、このビット列（１１１１１１１１１１）は優先度（１０２４）を示すと判断される。
【０２４４】
このように、第３の実施の形態における再利用命令変換部６２３は、第１再利用フィールド７３２乃至７３３と、第２再利用フィールド７５２乃至７５３とを連結したビット列の示す値を変えることで、優先度の異なる再利用命令を生成することが出来る。
【０２４５】
［本発明の第３の実施の形態におけるコンパイル処理装置５００の動作例］
次に、本発明の第３の実施の形態におけるコンパイル処理装置５００の処理について図面を参照して説明する。
【０２４６】
図２１は、本発明の第１の実施の形態におけるコンパイル処理装置５００によるコンパイル処理の処理手順を示すフローチャートである。
【０２４７】
まず、コンパイル処理装置５００により、ソースプログラム記憶部５１０からソースプログラムが読み出される（ステップＳ９１１）。次に、再利用候補区間抽出部６１１により、再利用候補区間が抽出される（ステップＳ９１２）。
【０２４８】
そして、再利用候補区間解析部６１２により、再利用候補区間の使用態様が解析される（ステップＳ９１３）。なお、ステップＳ９１３は、特許請求の範囲に記載の解析手順の一例である。
【０２４９】
次に、再利用度生成部６２１により、再利用候補区間の解析結果に基づいて再利用度が生成される（ステップＳ９１４）。なお、ステップＳ９１４は、特許請求の範囲に記載の再利用度生成手順の一例である。
【０２５０】
続いて、優先度生成部６２２により、再利用度に基づいて優先度が生成される（ステップＳ９１５）。
【０２５１】
そして、再利用命令変換部６２３により、再利用度および優先度に基づいて再利用候補区間の呼出し命令が優先度が含まれる再利用命令に変換される（ステップＳ９１６）。これは、関数が再利用候補区間である場合には、関数の呼出し命令（ｃａｌｌ）が優先度が含まれる再利用命令（ｍｅｍｏＣａｌｌ）に変換されることを意味する。なお、ステップＳ９１５は、特許請求の範囲に記載の命令変換手順の一例である。
【０２５２】
そして、コード生成部５２２により、変換された命令を含むプログラムに基づいて機械語プログラムのコードであるオブジェクトプログラムが生成される（ステップＳ９１７）
【０２５３】
このように、本発明の第３の実施の形態によれば、優先度を生成することによって、実行結果が再利用される度合いに基づいて、再利用される再利用候補区間の呼出し命令を履歴メモリに保存される優先度を含む再利用命令に変換することが出来る。
【０２５４】
＜４．第４の実施の形態＞
［プロセッサコア３００および履歴管理部４００の構成例］
図２２は、本発明の第４の実施の形態におけるプロセッサコア３００および履歴管理部４００の構成例を示すブロック図である。ここでは、図１３において示した構成に加えて、優先度テーブル４５０、履歴メモリ容量管理部４６０、および、低優先度履歴消去部４７０を備えている。ここでは、優先度テーブル４５０、履歴メモリ容量管理部４６０、および、低優先度履歴消去部４７０以外の構成の機能は、図１３とほぼ同様のものであるため、図１３と同符号を付してここでの詳細な説明を省略する。
【０２５５】
実行部３３０は、命令デコーダ３２０から優先度が含まれる再利用命令に基づく制御信号が供給された場合には、優先度が含まれる再利用命令が指定する再利用区間の処理を開始する。この処理の開始とともに、レジスタファイル３４０から取得した再利用区間の区間識別情報および優先度を信号線３０９を介して履歴管理部４００に出力する。
【０２５６】
また、履歴対象データ保持部４１０は、実行履歴を登録するための情報が整った場合には、実行履歴とともに優先度を履歴登録部４４０に供給する。
【０２５７】
履歴登録部４４０は、新たな実行履歴を履歴メモリ４３０に登録する場合には、優先度を履歴メモリ４３０に供給する。また、この履歴登録部４４０は、新たな実行履歴を履歴メモリ４３０に登録する際に、履歴メモリ容量管理部４６０から通知された履歴メモリの空き容量より新たな実行履歴の容量のほうが大きい場合には、登録を一時中断する。そして、この場合において、履歴登録部４４０は、その登録を一時中断した実行履歴に関する優先度を低優先度履歴消去部４７０に供給する。
【０２５８】
また、この履歴登録部４４０は、既に登録された実行履歴に関する優先度よりも新たな実行履歴に関する優先度のほうが低いことを示す情報が低優先度履歴消去部４７０から供給された場合には、新たな実行履歴は登録しない。
【０２５９】
優先度テーブル４５０は、履歴メモリ４３０に登録されている実行履歴に関する優先度および履歴メモリ４３０における実行履歴のアドレスを優先度情報として保持するものである。この優先度テーブル４５０は、例えば、履歴メモリ４３０に新たな実行履歴が保持された場合には、履歴メモリ４３０から供給されたその登録された実行履歴に関する優先度と、その登録された実行履歴のアドレス情報とを優先度情報として保持する。そして、この優先度テーブル４５０は、例えば、履歴メモリ４３０において実行履歴が消去された場合には、その消去された実行履歴に関する優先度情報を消去する。
【０２６０】
また、この優先度テーブル４５０は、低優先度履歴消去部４７０によって検索された最も低い優先度の優先度情報を消去候補情報として低優先度履歴消去部４７０に供給する。なお、優先度テーブル４５０は、特許請求の範囲に記載の優先度テーブルの一例である。
【０２６１】
履歴メモリ容量管理部４６０は、履歴メモリ４３０の空き容量を管理するものである。この履歴メモリ容量管理部４６０は、例えば、履歴メモリ４３０に新たな実行履歴が登録される度に、履歴メモリ４３０の空き容量を測定する。さらに、この履歴メモリ容量管理部４６０は、履歴メモリ４３０から実行履歴が消去される度に、履歴メモリ４３０の空き容量を測定する。この履歴メモリ容量管理部４６０は、履歴メモリ４３０の空き容量に関する情報を履歴登録部４４０に供給する。
【０２６２】
低優先度履歴消去部４７０は、履歴メモリ４３０から消去候補情報が指し示す実行履歴を削除するものである。この低優先度履歴消去部４７０は、最小値優先度履歴検索部４７１と、優先度比較部４７２と、消去部４７３とを備える。
【０２６３】
最小値優先度履歴検索部４７１は、優先度テーブル４５０から最も低い優先度を含む優先度情報を消去候補情報として検索するものである。この最小値優先度履歴検索部４７１は、検索された消去候補情報を優先度テーブル４５０から抽出し、その抽出した消去候補情報を優先度比較部４７２に供給する。なお、最小値優先度履歴検索部４７１は、特許請求の範囲に記載の最低優先度履歴検索部の一例である。
【０２６４】
優先度比較部４７２は、新たな実行履歴に関する優先度と、最小値優先度履歴検索部４７１から供給された消去候補情報に含まれる優先度とを比較するものである。そして、この優先度比較部４７２は、消去候補情報に含まれる優先度のほうが新たな実行履歴に関する優先度より低い場合には、この消去候補情報を消去部４７３に供給する。
【０２６５】
また、この優先度比較部４７２は、新たな実行履歴に関する優先度のほうが消去候補情報に含まれる優先度よりも低い場合には、新たな実行履歴の登録を中止させる情報を履歴登録部４４０に供給する。なお、優先度比較部４７２は、特許請求の範囲に記載の優先度比較部の一例である。
【０２６６】
消去部４７３は、優先度比較部４７２から供給された消去候補情報に基づいて履歴メモリ４３０から実行履歴を消去するものである。この消去部４７３は、優先度比較部４７２から供給された消去候補情報に含まれているアドレスが指し示す実行履歴を履歴メモリ４３０から消去する。なお、消去部４７３は、特許請求の範囲に記載の消去部の一例である。
【０２６７】
［履歴メモリ４３０のデータ構造例］
図２３は、本発明の第４の実施の形態における履歴メモリ４３０のデータ構造の一例を示す概念図である。ここでは、履歴メモリ４３０により、区間識別情報ごとに保持された実行履歴のうち、１つの区間識別情報における実行履歴を木構造により保持する構成が示されている。この例では、引数がｎ個であり、かつ、実行結果である出力をｍ個の格納先に返す関数を想定している。また、ここでは、関数の開始アドレスを区間識別情報として用いることとする。さらに、ここでは、ｍ個目の出力のアドレスを優先度情報の登録された実行履歴のアドレスとすることとする。
【０２６８】
この例では、木構造における関数ルート８１５と、第１の引数ノード８２５および８２６と、第ｎの引数ノード８３５乃至８３８と、第１の出力ノード８４５乃至８４８と、第ｍの出力ノード８５５乃至８５８とが示されている。
【０２６９】
関数ルート８１５には、図１４において示した第１の実施の形態における関数ルート８
１０と同様に、区間識別情報である関数の開始アドレスと、第１の引数ノード８２５を指し示すポインタとが示されている。
【０２７０】
第１および第ｎの引数ノード８２５、８２６および８３５乃至８３８には、図１４において示した第１の実施の形態における第１および第ｎの引数ノード８２１、８２２および８３１乃至８３４と同様に、引数の入力値と、型と、種類とが示されている。
【０２７１】
また、第１および第ｎの引数ノード８２５、８２６および８３５乃至８３８には、図１４における第１の実施の形態の引数ノード８２１、８２２および８３１乃至８３４と同様に、右ポインタおよび下ポインタが示されている。さらに、第１および第ｎの引数ノード８２５、８２６および８３５乃至８３８には、履歴メモリ４３０から消去される場合において、次の引数の引数ノードを指し示す消去ポインタが点線の矢印で示されている。また、第ｎの引数ノード８３５乃至８３８の各々は、第１の出力ノード８４５乃至８４８にそれぞれ連結されている。
【０２７２】
第１および第ｍの出力ノード８４５乃至８４８および８５５乃至８５８には、図１４において示した第１の実施の形態の出力ノード８４１乃至８４４および８５１乃至８５４と同様に、実行履歴を実行した結果の出力値と、種類と、型とが示されている。また、第１の出力ノード８４５乃至８４８には、第１の実施の形態の出力ノード８４１乃至８４４と同様に、右ポインタが示されている。さらに、第１および第ｍの出力ノード８４５乃至８４８および８５５乃至８５８には、履歴メモリ４３０から消去される場合において、次の引数の引数ノードを指し示す消去ポインタが点線の矢印で示されている。
【０２７３】
このような木構造における入力値の比較処理は、図１４において示した第１の実施の形態における木構造における入力値の比較処理と同様であるため、ここでの詳細な説明を省略する。
【０２７４】
このような木構造において、履歴メモリ４３０から実行履歴を消去する場合には、その実行履歴に関するｍ番目の出力ノードのアドレスが消去部４７３から供給されると、そのアドレスの出力ノードから実行履歴の消去が開始される。この場合において、その指定されたｍ番目の出力ノードから１番目の出力ノードまでの出力ノードをそれぞれの消去ポインタを参照して抽出し、１番目の出力ノードの消去ポインタが指し示すｎ番目の入力ノードを参照するとともに出力ノードを消去する。
【０２７５】
次に、履歴メモリ４３０から消去する実行履歴に関する入力ノードの消去をｎ番目の入力ノードから開始する。この場合において、消去ポインタにより指し示された入力ノードが、その消去ポインタを保持していたノード以外への右ポインタあるいは下ポインタを保持している場合には、その入力ノードは消去しない。
【０２７６】
そして、その消去しない入力ノードにおいて、消去された入力ノードを指し示すポインタが消去されることによって、入力ノードの消去を終了させる。また、１番目の入力ノードにおいて、消去された入力ノード以外を指し示す右ポインタまたは下ポインタが保持されていない場合には、関数ルート８１５も消去させて実行履歴の消去を終了させる。
【０２７７】
例えば、ｍ番目の出力ノードにおける出力ノード８５５のアドレスが消去部４７３から供給された場合には、その出力ノード８５５からこの出力に関する実行履歴の消去が開始される。これにより、出力ノード８５５から１番目の出力ノード８４５まで消去ポインタを参照して抽出し、１番目の出力ノード８４５の消去ポインタが指し示すｎ番目の入力ノード８３５を参照するとともに、出力ノード８４５から８５５までの出力ノードを消去する。
【０２７８】
次に、ｎ番目の入力ノード８３５が出力ノード８４５以外への右ポインタあるいは下ポインタを含んでいるか否か検出される。この場合においては、ｎ番目の入力ノード８３５は右ポインタにより１番目の出力ノード８４５を指し示しているので、ｎ番目の入力ノード８３６を指し示す下ポインタがｎ番目の入力ノード８３５に含まれているか否かが検出される。
【０２７９】
この場合において、ｎ番目の入力ノード８３６が履歴メモリ４３０に保持されており、ｎ番目の入力ノード８３５に下ポインタが含まれているときには、ｎ番目の入力ノード８３５は消去しないで、ｎ番目の入力ノード８３５における右ポインタを消去する。そして、実行履歴の消去を終了させる。
【０２８０】
一方、ｎ番目の入力ノード８３６が履歴メモリ４３０に保持されていないで、ｎ番目の入力ノード８３５に下ポインタが含まれていないときには、ｎ番目の入力ノード８３５の消去ポインタが指し示す入力ノードを参照するとともに入力ノード８３５を消去する。そして、消去しない入力ノードを検出するか、入力ノードを全て消去して関数ルート８１５を消去するまで入力ノードの消去が繰り返される。
【０２８１】
［優先度テーブル４５０のデータ構造例］
図２４は、本発明の第４の実施の形態における優先度テーブル４５０のデータ構造の一例を示す概念図である。ここでは、一例として、１乃至６の優先度と、この優先度を含む再利用命令により生成された実行履歴に関するアドレスとが示されている。
【０２８２】
優先度カラム８６１には、優先度テーブル４５０に登録されている優先度が示されている。この優先度カラム８６１には、履歴メモリ４３０に登録されている実行履歴に関する全ての優先度が格納される。例えば、１乃至６の優先度を含む再利用命令により生成された実行履歴が履歴メモリ４３０に保持されている場合には、優先度カラム８６１には１乃至６の優先度が格納されている。
【０２８３】
実行履歴最終出力アドレスカラム８６２には、優先度カラム８６１に示した優先度を含む再利用命令によって生成された履歴メモリ４３０における実行履歴の最終出力アドレスが示されている。この最終出力アドレスは、例えば、図２４において示したｍ番目の出力ノード８５５乃至８５８のアドレスである。
【０２８４】
この例において、例えば、優先度が「６」である再利用区間の実行履歴が履歴メモリ４３０に新たに登録された場合には、優先度（６）および履歴メモリ４３０におけるｍ番目の出力ノードのアドレスが、履歴メモリ４３０から優先度テーブル４５０に供給される。この場合において、優先度テーブル４５０は、優先度カラム８６１に優先度（６）が既に登録されているときには、その優先度（６）に対する実行履歴最終出力アドレスカラム８６２に新たな優先度情報のｍ番目の出力ノードのアドレスを追加する。
【０２８５】
また、この場合において、優先度カラム８６１に優先度（６）が未登録の場合には、新たに登録するとともに、その優先度（６）に対応する実行履歴最終出力アドレスカラム８６２を生成して、新たな優先度情報のｍ番目の出力ノードのアドレスを登録する。
【０２８６】
［本発明の第４の実施の形態におけるプロセッサコア３００および履歴管理部４００により保存される実行履歴の一例］
図２５は、本発明の第４の実施の形態におけるプロセッサコア３００により処理されるプログラムおよび履歴管理部４００により保存される実行履歴の一例を示す概念図である。ここでは、従来技術を用いて実行履歴を保存する場合と、本発明の第４の実施の形態により実行履歴を保存する場合とが表されている。なお、ここでは、変換されたプログラムの実行は、ここで示したプログラムの上から順に実行されるものと想定する。
【０２８７】
図２５（ａ）には、従来技術によるソースプログラムの変換例を示す模式図である。ここでは、右矢印に対して左側にある枠の中には、従来技術により変換されるソースプログラムがＣ言語により示されている。また、右矢印に対して右側にある枠の中には、従来技術により変換されたプログラムの一例がアセンブリ言語により示されている。
【０２８８】
ソースプログラムには、プログラムのメインの関数（ｆｕｎｃＸ）と、そのメインの関数により呼び出される７つの関数とが示されている。この７つの関数として、ｉｎｔ型の１個の変数を引数とする関数（ｆｕｎｃＡ）と、ｂｏｏｌ型の１個の変数を引数とする関数（ｆｕｎｃＢ）と、ｉｎｔ型の１個の変数およびｂｏｏｌ型の１個の変数を引数とする関数（ｆｕｎｃＣ）とが示されている。さらに、ｂｏｏｌ型の３個の変数を引数とする関数（ｆｕｎｃＤ）と、ｃｈａｒ型の１個の変数を引数とする関数（ｆｕｎｃＥ）と、ｂｏｏｌ型の２個の変数を引数とする関数（ｆｕｎｃＦ）とが示されている。また、ｉｎｔ型の２個の変数を引数とする関数（ｆｕｎｃＧ）が示されている。
【０２８９】
このソースプログラムは、関数を再利用区間として指定する場合には全ての関数を再利用の対象とする従来技術のコンパイル処理装置により、全ての関数が再利用の対象とされるプログラムに変換される。その結果、右矢印に対して右側にある枠の中に示すように、ｆｕｎｃＡ乃至Ｇを呼出し命令（ｃａｌｌ）で呼び出し、ｆｕｎｃＡ乃至Ｇの実行結果を全て再利用するプログラムを生成する。
【０２９０】
図２５（ｂ）は、図２５（ａ）の右矢印の右側にある枠の中に示したプログラムを上から順に１回ずつ実行した場合における履歴メモリ４３０に保存される実行履歴の一例を示す模式図である。なお、ここでは、実行履歴が登録される履歴メモリは、便宜上、入力値および出力値の型や個数を問わず、３つの関数に関する実行履歴を登録できるものとする。また、図１５（ａ）と同様に、新たな実行履歴を登録する際に履歴メモリの空き容量が無い場合には、最も長い期間未使用だった実効履歴を履歴メモリから消去した後に新たな実行履歴を履歴メモリに登録するものとする。さらに図１５（ａ）と同様に、図２５（ａ）において示した変換されたプログラムの呼出し命令を、上から順に１回ずつ実行するものとする。
【０２９１】
従来技術における履歴メモリへの実行履歴の登録方法は、図１５（ｂ）において示した方法と同様のものであるので、ここでの詳細な説明を省略する。図２５（ａ）の変換されたプログラムの呼出し命令を上から順に１回ずつ実行された結果、図２５（ｂ）において示すように、ｆｕｎｃＥ乃至Ｇの３つの関数の実行履歴が履歴メモリに登録される。
【０２９２】
このように、従来技術では、常に再利用される確率が高い実行履歴が履歴メモリに登録されているわけではない。すなわち、実行するプログラムによっては、全く再利用されない関数の実行履歴が履歴メモリに登録され、再利用の効果が出ない場合が生じる。
【０２９３】
図２５（ｃ）は、本発明の第１の実施の形態によるソースプログラムの変換例を示す模式図である。ここでは、再利用度生成部６２１は、関数の入力値が採り得る値の組合せに基づいて再利用度を生成することを想定する。
【０２９４】
ここでは、右矢印に対して左側にある枠の中には、図２５（ａ）において示したソースプログラムと同様のソースプログラムがＣ言語により示されている。また、右矢印に対して右側にある枠の中には、本発明の第３の実施の形態により変換されたプログラムの一例がアセンブリ言語により示されている。
【０２９５】
このソースプログラムは、図１５（ｃ）において示したソースプログラムと同様に再利用候補区間解析部６１２により解析され、そして、再利用度生成部６２１により同様にして再利用度が生成される。
【０２９６】
その結果、ｂｏｏｌ型の１個の変数を引数とするｆｕｎｃＢに対して１番高い再利用度が生成され、ｂｏｏｌ型の２個の変数を引数とするｆｕｎｃＦに対して２番目に高い再利用度が生成される。また、ｂｏｏｌ型の３個の変数を引数とするｆｕｎｃＤに対して３番目に高い再利用度が生成され、ｃｈａｒ型の１個の変数を引数とするｆｕｎｃＥに対して４番目に高い再利用度が生成される。さらに、ｉｎｔ型の１個の変数およびｂｏｏｌ型の１個の変数を引数とするｆｕｎｃＣに対して５番目に高い再利用度が生成され、ｉｎｔ型の１個の変数を引数とするｆｕｎｃＦには６番目に高い再利用度が生成される。そして、ｉｎｔ型の２個の変数を引数とするｆｕｎｃＧには１番低い再利用度が生成される。
【０２９７】
次に、優先度生成部６２２により７つの関数（ｆｕｎｃＡ乃至Ｇ）の優先度が生成される。優先度生成部６２２は、再利用度に基づいて優先度を生成することにより、再利用度が１番高い関数（ｆｕｎｃＢ）には１番優先度が高い優先度（７）を生成し、再利用度が２番目に高い関数（ｆｕｎｃＦ）には２番目に優先度が高い優先度（６）を生成する。さらに、優先度生成部６２２は、再利用度が３番目に高い関数（ｆｕｎｃＤ）には３番目に高い優先度（５）を生成し、再利用度が４番目に高い関数（ｆｕｎｃＥ）には４番目に高い優先度（４）を生成する。また、再利用度が５番目に高い関数（ｆｕｎｃＣ）には５番目に高い優先度（３）を生成し、再利用度が６番目に高い関数（ｆｕｎｃＡ）には６番目に高い優先度（２）を生成する。そして、再利用度が１番低い関数（ｆｕｎｃＧ）には１番低い優先度（１）を生成する。
【０２９８】
そして、再利用命令変換部６２３は、実行結果を再利用させる再利用区間の呼出し命令を優先度が含まれる再利用命令に優先度に基づいて変換する。この図２５（ｃ）の場合においては、再利用命令変換部６２３は、履歴メモリの容量を考慮しないため、優先度が生成された全ての関数の呼出し命令を優先度が含まれる再利用命令に変換する。
【０２９９】
その結果、再利用命令変換部６２３は、７つの関数（ｆｕｎｃＡ乃至Ｇ）の呼出し命令（ｃａｌｌ）を優先度が含まれる再利用命令（ｍｅｍｏＣａｌｌ）に変換したプログラムを生成する。
【０３００】
図２５（ｄ）には、図２５（ｃ）の右矢印の右側にある枠の中に示したプログラムに基づいて登録される実行履歴の一例が示されている。なお、履歴メモリ４３０は、便宜上、入力値および出力値の型や個数を問わず、３つの関数に関する実行履歴を登録できるものとする。また、ここでは、図２５（ａ）において示した変換されたプログラムの命令を、上から順に１回ずつ実行するものとする。
【０３０１】
本発明の第４の実施の形態におけるプロセッサコア３００は、図２５（ａ）において示した変換されたプログラムに基づいて、優先度が含まれる再利用命令（ｍｅｍｏＣａｌｌ）により呼び出されるｆｕｎｃＡ乃至Ｇの実行履歴を履歴管理部４００に出力する。まず、最初に、ｆｕｎｃＡが再利用区間として呼び出され、ｆｕｎｃＡの実行履歴が履歴メモリ４３０に登録される。この時、図２３において示した実行履歴のｍ番目の出力ノードのアドレスおよび優先度が履歴メモリ４３０から優先度テーブル４５０に供給されて、優先度テーブル４５０に優先度情報として登録される。そして、ｆｕｎｃＡに続いて呼び出される２つの関数（ｆｕｎｃＢおよびＣ）もｆｕｎｃＡと同様に、再利用区間として呼び出された後に実行履歴が登録されるとともに、優先度テーブル４５０に優先度情報が登録される。
【０３０２】
その後、履歴メモリには空き容量が無い状態で、ｆｕｎｃＤが再利用区間として呼び出される。この時、優先度比較部４７２は、ｆｕｎｃＤの実行履歴に関する優先度（５）と、優先度テーブル４５０から最小値優先度履歴検索部４７１により検索された消去候補情報（ｆｕｎｃＡの優先度情報）の優先度（２）とを比較する。この結果、最小値優先度履歴検索部４７１は、消去候補情報（ｆｕｎｃＡの優先度情報）を消去部４７３に供給する。そして、消去部４７３は、供給された消去候補情報に基づきｆｕｎｃＡの実行履歴を消去する。この時、優先度テーブル４５０は、優先度テーブル４５０から供給されるｆｕｎｃＡの実行履歴の消去情報に従ってｆｕｎｃＡの優先度情報を消去する。そして、履歴登録部４４０は、履歴メモリ容量管理部４６０から供給される履歴メモリ４３０の空き情報に基づいて履歴メモリ４３０の空き容量を確認した後に、ｆｕｎｃＤの実行履歴を履歴メモリ４３０に登録する。また、このｆｕｎｃＤの実行履歴の登録に伴って、優先度テーブル４５０にｆｕｎｃＤの実行履歴に関する優先度情報が登録される。
【０３０３】
次に、ｆｕｎｃＥが再利用区間として呼び出される。この時、優先度比較部４７２は、ｆｕｎｃＤのときと同様に、ｆｕｎｃＥの実行履歴に関する優先度（４）と、消去候補情報（ｆｕｎｃＣの優先度情報）の優先度（３）とを比較する。この比較の結果、消去候補情報（ｆｕｎｃＣの優先度情報）の優先度（３）のほうが低いと判断され、ｆｕｎｃＤのときと同様に、ｆｕｎｃＣの実行履歴が履歴メモリ４３０から消去され、新たにｆｕｎｃＥの実行履歴が履歴メモリ４３０に登録される。
【０３０４】
そして、ｆｕｎｃＦが再利用区間として呼び出される。優先度比較部４７２による比較の結果、ｆｕｎｃＦの実行履歴に関する優先度（６）より消去候補情報（ｆｕｎｃＥの優先度情報）の優先度（４）のほうが低いと判断される。そして、ｆｕｎｃＤおよびｆｕｎｃＥのときと同様に、ｆｕｎｃＥの実行履歴が履歴メモリ４３０から消去され、新たにｆｕｎｃＦの実行履歴が履歴メモリ４３０に登録される。
【０３０５】
最後に、ｆｕｎｃＧが再利用区間として呼び出される。優先度比較部４７２による比較の結果、ｆｕｎｃＧの実行履歴に関する優先度（１）は、消去候補情報（ｆｕｎｃＤの優先度情報）の優先度（５）よりも低いと判断される。そして、優先度比較部４７２は、ｆｕｎｃＧの実行履歴の登録を中止させる情報を履歴登録部４４０に供給する。これにより、履歴登録部４４０は、履歴メモリ４３０へのｆｕｎｃＧの実行履歴の登録を中止する。
【０３０６】
このように、図２５（ｃ）の変換されたプログラムの呼出し命令を上から順に１回ずつ実行された結果、図２５（ｄ）において示すように、ｆｕｎｃＢ、ｆｕｎｃＤ、および、ｆｕｎｃＦの実行履歴が履歴メモリに登録される。
【０３０７】
このように、本発明の第４の実施の形態によれば、優先度に従って履歴メモリ４３０に実行履歴を登録することにより、常に再利用される確率が高い関数を履歴メモリ４３０に登録しておくことができる。
【０３０８】
［本発明の第４の実施の形態におけるプロセッサコア３００および履歴管理部４００の動作例］
次に、本発明の第４の実施の形態におけるプロセッサコア３００および履歴管理部４００の処理について図面を参照して説明する。
【０３０９】
図２６は、本発明の第４の実施の形態におけるプロセッサコア３００および履歴管理部４００による関数の実行処理の処理手順を示すフローチャートである。
【０３１０】
まず、フェッチ部３１０およびレジスタファイル３４０に、関数を参照する命令およびその関数の入力値が読み出される（ステップＳ９３１）。次に、命令デコーダ３２０によって、関数を参照する命令がデコードされる（ステップＳ９３２）。続いて、デコードした命令が再利用命令か否かが解析される（ステップＳ９３３）。解析の結果、デコードした命令が再利用命令でない場合には、実行部３３０によって、レジスタファイル３４０から供給される入力値に基づいてその関数が実行され、実行結果が出力される（ステップＳ９４０）。そして、関数の実行処理は終了する。
【０３１１】
一方、デコードした命令が再利用命令である場合には、検索要求入力部４２１によって、実行部３３０から供給された関数の開始アドレスおよび入力値を用いて履歴メモリ４３０から実行履歴が検索される（ステップＳ９３４）。
【０３１２】
次に、実行履歴があるか否かが判断される（ステップＳ９３５）。実行履歴が履歴メモリ４３０にある場合には、実行結果出力部４２２によって、実行結果が出力される（ステップＳ９３８）。続いて、実行部３３０は、実行結果が出力された関数の実行を中止させる（ステップＳ９３９）。そして、関数の実行は終了する。
【０３１３】
一方、実行履歴が履歴メモリ４３０にない場合には、実行部３３０によって、レジスタファイル３４０から供給される入力値に基づいてその関数が実行され、実行結果が出力される（ステップＳ９３６）。そして、履歴登録部４４０によって、履歴メモリ４３０の空き容量に応じた実行履歴の登録処理が行われる（ステップＳ９５０）。そして、関数の実行は終了する。
【０３１４】
次に、本発明の第４の実施の形態によるステップＳ９５０の処理について図面を参照して説明する。
【０３１５】
図２７は、本発明の第４の実施の形態における履歴管理部４００による実行履歴の登録処理（ステップＳ９５０）の処理手順例を示すフローチャートである。
【０３１６】
まず、履歴登録部４４０により、履歴メモリ容量管理部４６０から供給された履歴メモリ４３０の空き容量の情報に基づいて、新たな実行履歴を登録する空き容量が履歴メモリ４３０にあるか否かが判断される（ステップＳ９５１）。その空き容量が履歴メモリ４３０に有る場合には、実行履歴が履歴メモリ４３０に登録される（ステップＳ９５２）。続いて、その実行履歴の優先度および履歴メモリ４３０における最後の出力ノードのアドレスが優先度テーブル４５０に登録される（ステップＳ９５３）。そして、実行履歴の登録処理は終了する。
【０３１７】
一方、新たな実行履歴を登録する空き容量が履歴メモリ４３０にない場合には、新たな実行履歴の優先度と、最小値優先度履歴検索部４７１が検索した優先度が最小値の優先度情報の優先度とが優先度比較部４７２により比較される（ステップＳ９５４）。そして、新たな実行履歴の優先度が優先度情報の優先度よりも低い場合には、新たな実行履歴の履歴メモリ４３０への登録は中止される（ステップＳ９５５）。そして、実行履歴の登録処理は終了する。
【０３１８】
また、優先度情報の優先度よりも新たな実行履歴の優先度のほうが高い場合には、消去部４７３によりその優先度情報が指し示す実行履歴が履歴メモリ４３０から消去される（ステップＳ９５６）。そして、ステップＳ９５１に戻り、処理が繰り返される。
【０３１９】
このように、本発明の第４の実施の形態によれば、優先度に従って履歴メモリ４３０に実行履歴を登録することにより、常に再利用される確率が高い関数を履歴メモリ４３０に登録しておくことができる。
【０３２０】
このように、本発明の実施の形態によれば、再利用度に基づいて命令区間の呼び出し命令を再利用命令に変換することによって、再利用される確率の高い命令区間の実行履歴のみを履歴メモリ４３０に保持することができる。これにより、実行履歴が再利用される効率を改善することができる。
【０３２１】
なお、本発明の実施の形態は本発明を具現化するための一例を示したものであり、本発明の実施の形態において明示したように、本発明の実施の形態における事項と、特許請求の範囲における発明特定事項とはそれぞれ対応関係を有する。同様に、特許請求の範囲における発明特定事項と、これと同一名称を付した本発明の実施の形態における事項とはそれぞれ対応関係を有する。ただし、本発明は実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において実施の形態に種々の変形を施すことにより具現化することができる。
【０３２２】
また、本発明の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。この記録媒体として、例えば、ＣＤ（Compact Disc）、ＭＤ（MiniDisc）、ＤＶＤ（Digital Versatile Disk）、メモリカード、ブルーレイディスク（Blu-ray Disc（登録商標））等を用いることができる。
【符号の説明】
【０３２３】
１００  データ処理装置
１２０  バス
１３０  主記憶部
２００  一次キャッシュ
２１０  命令キャッシュ
２２０  データキャッシュ
３００  プロセッサコア
３０９、４０９  信号線
３１０  フェッチ部
３２０  命令デコーダ
３３０  実行部
３４０  レジスタファイル
４００  履歴管理部
４１０  履歴対象データ保持部
４２０  履歴検索部
４２１  検索要求入力部
４２２  実行結果出力部
４３０  履歴メモリ
４４０  履歴登録部
４５０  優先度テーブル
４６０  履歴メモリ容量管理部
４７０  低優先度履歴消去部
４７１  最小値優先度履歴検索部
４７２  優先度比較部
４７３  消去部
５００  コンパイル処理装置
５１０  ソースプログラム記憶部
５２０  再利用アシストコンパイル処理部
５２２  コード生成部
５３０  オブジェクトプログラム記憶部
６００  プログラム変換処理部
６１０  ソースプログラム解析部
６１１  再利用候補区間抽出部
６１２  再利用候補区間解析部
６２０  最適化部
６２１  再利用度生成部
６２２  優先度生成部
６２３  再利用命令変換部
【図１】
2011039857.tif 000003
【図２】
2011039857.tif 000004
【図３】
2011039857.tif 000005
【図４】
2011039857.tif 000006
【図５】
2011039857.tif 000007
【図６】
2011039857.tif 000008
【図７】
2011039857.tif 000009
【図８】
2011039857.tif 000010
【図９】
2011039857.tif 000011
【図１０】
2011039857.tif 000012
【図１１】
2011039857.tif 000013
【図１２】
2011039857.tif 000014
【図１３】
2011039857.tif 000015
【図１４】
2011039857.tif 000016
【図１５】
2011039857.tif 000017
【図１６】
2011039857.tif 000018
【図１７】
2011039857.tif 000019
【図１８】
2011039857.tif 000020
【図１９】
2011039857.tif 000021
【図２０】
2011039857.tif 000022
【図２１】
2011039857.tif 000023
【図２２】
2011039857.tif 000024
【図２３】
2011039857.tif 000025
【図２４】
2011039857.tif 000026
【図２５】
2011039857.tif 000027
【図２６】
2011039857.tif 000028
【図２７】
2011039857.tif 000029