説明

データ処理装置、履歴保存装置、データ処理方法およびプログラム

【課題】値再利用(メモ化:Memoization)の際、実行結果を保存しておくメモリから実行結果を退避させることにより、値再利用の効率を改善させる。
【解決手段】履歴メモリ430は、実行結果が再び利用される再利用区間の実行結果を実行履歴として保持する。主記憶部130は、再利用区間のうち実行が反復される反復再利用区間の実行結果を退避履歴として保持する。履歴制御部510は、反復再利用区間の実行結果であるループ個別履歴に基づいて、退避履歴およびループ代表履歴を生成する。これにより、反復再利用区間の実行結果を退避履歴として主記憶部130に退避するとともに、その実行結果を含むループ個別履歴の代わりにループ代表履歴を履歴メモリ430に登録する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データ処理装置に関し、特に実行結果が再利用される命令区間を実行するデータ処理装置、履歴保存装置、および、これらにおける処理方法ならびに当該方法をコンピュータに実行させるプログラムに関する。
【背景技術】
【0002】
プログラムの処理速度を高速化するために種々の技術が開発されている。近年、その技術を用いた装置の一つとして、値再利用(メモ化:Memoization)と呼ばれる命令区間の実行結果を再利用する技法を用いた区間再利用装置が提案されている(例えば、特許文献1参照。)。この区間再利用装置は、プログラムの所定の命令区間における入力値および実行結果を保存しておくことによって、同じ命令区間を再び実行する際に入力値が一致する場合には、保存していた実行結果である出力値を出力する装置である。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2004−258905号公報(図1)
【発明の概要】
【発明が解決しようとする課題】
【0004】
上記の従来技術では、同じ命令区間を再び実行して実行結果を出力する際に、それ以前に保存していた実行結果を出力することによって、その命令区間の実行時間を削減することができる。
【0005】
しかしながら、このような区間再利用装置では、実行結果を保存しておくメモリが満杯の場合には新たな実行履歴を登録するために古い実行結果を削除することから、その削除された実行結果の再利用ができないという問題が生じる。すなわち、このような区間再利用装置では、実行結果を保存しておくメモリから実行結果が削除されることに起因する値再利用の効率の低下が生じる場合が考えられる。
【0006】
そこで、本発明はこのような状況に鑑みてなされたものであり、値再利用(メモ化)を行う際、実行結果を保存しておくメモリから実行結果を退避させることにより、値再利用の効率を改善することを目的とする。
【課題を解決するための手段】
【0007】
本発明は、上記課題を解決するためになされたものであり、その第1の側面は、命令区間を実行して実行結果を出力する実行部と、上記命令区間のうち実行結果が再び利用される再利用区間の区間識別情報と入力値と実行結果とを実行履歴として保持し、上記保持した実行結果が再び利用される場合には上記区間識別情報および上記入力値に基づいて上記実行履歴が検索される履歴メモリと、上記再利用区間のうち実行が反復される反復再利用区間の各回の上記実行結果を上記履歴メモリから退避させるための退避履歴を保持する退避履歴保持部と、上記反復再利用区間の上記実行履歴に基づいて上記退避履歴を上記退避履歴保持部に供給し、上記退避履歴の供給の際に上記退避履歴の基となった上記実行履歴を上記履歴メモリから消去して上記退避履歴を指し示す情報を含む代表履歴を上記履歴メモリに保持させる履歴制御部とを備えるデータ処理装置およびその処理方法ならびに当該方法をコンピュータに実行させるプログラムである。これにより、再利用区間の実行が反復される反復再利用区間の実行結果を履歴メモリから退避履歴保持部に退避させるという作用をもたらす。
【0008】
また、この第1の側面において、上記履歴制御部は、上記履歴メモリに保持させる新たな上記実行履歴のデータ量が上記履歴メモリの空き容量よりも大きい場合には上記退避履歴を上記退避履歴保持部に供給するようにしてもよい。これにより、実行履歴のデータ量が履歴メモリの空き容量よりも大きい場合には、反復再利用区間の実行結果を履歴メモリから退避履歴保持部に退避させるという作用をもたらす。
【0009】
また、この第1の側面において、上記退避履歴および上記代表履歴に基づいて上記実行履歴を上記履歴メモリに復元する履歴復元部と、上記区間識別情報および上記入力値に基づいて上記復元された上記実行履歴を上記履歴メモリから検索した場合には上記復元された上記実行履歴に基づいて上記実行結果を出力する履歴検索部とをさらに備えるようにしてもよい。これにより、退避履歴および代表履歴に基づいて復元した実行履歴を用いて実行結果を再利用させるという作用をもたらす。この場合において、上記履歴検索部は、上記区間識別情報および上記入力値に基づいて検索された上記実行履歴が上記代表履歴であった場合には上記復元部に上記実行履歴の復元を開始させるようにしてもよい。これにより、履歴検索部において代表履歴が検索された場合には、復元部に反復再利用区間の実行履歴を復元させるという作用をもたらす。この場合において、上記履歴制御部は、上記退避履歴の個数を示す退避カウントをさらに含む上記代表履歴を生成し、上記履歴復元部は、上記代表履歴における上記退避履歴を指し示す情報および上記退避カウントに基づいて上記退避履歴を上記退避履歴保持部から抽出して上記実行履歴を復元させるようにしてもよい。これにより、代表履歴における退避履歴を指し示す情報および退避カウントに基づいて退避履歴を退避履歴保持部から抽出させるという作用をもたらす。
【0010】
また、この第1の側面において、上記実行部は、上記再利用区間の上記実行結果を供給する場合には上記反復再利用区間の上記実行履歴と上記反復再利用区間以外の上記実行履歴と上記代表履歴とを識別するための識別子をさらに出力し、上記履歴メモリは、上記識別子を上記実行履歴としてさらに保持し、上記履歴制御部は、上記識別子を用いて識別した上記実行履歴に基づいて上記退避履歴を供給し、上記識別子をさらに含む上記代表履歴を生成させるようにしてもよい。これにより、識別子を用いて実行履歴を識別させるという作用をもたらす。
【0011】
また、この第1の側面において、上記反復再利用区間はサブルーチンであり、上記実行部は、上記サブルーチンの開始アドレスを上記区間識別情報として出力するようにしてもよい。これにより、サブルーチンの開始アドレスを区間識別情報として出力させるという作用をもたらす。
【0012】
また、この第1の側面において、上記反復再利用区間はループであり、上記実行部は、上記ループの開始アドレスを上記区間識別情報として出力するようにしてもよい。これにより、ループの開始アドレスを上記区間識別情報として出力させるという作用をもたらす。この場合において、上記実行部は、上記反復再利用区間の上記実行結果を出力する場合には何回目の実行による上記実行結果であるかを示すカウンタ値をさらに出力し、上記履歴メモリは、上記カウンタ値を上記実行履歴としてさらに保持し、上記履歴制御部は、上記カウンタ値を含む上記退避履歴を出力するようにしてもよい。これにより、カウンタ値を含む実行履歴および退避履歴を保持させるという作用をもたらす。
【0013】
また、本発明の第2の側面は、実行結果が再び利用される再利用区間の区間識別情報と入力値と実行結果とを実行履歴として保持し、上記保持した実行結果が再び利用される場合には上記区間識別情報および上記入力値に基づいて上記実行履歴が検索される履歴メモリと、上記再利用区間のうち実行が反復される反復再利用区間の各回の上記実行結果を退避履歴として上記履歴メモリから外部の記憶部に退避させ、上記退避の際に上記退避履歴の基となった上記実行履歴を上記履歴メモリから消去して上記退避履歴を指し示す情報を含む代表履歴を上記履歴メモリに保持させる履歴制御部とを備える履歴保存装置である。これにより、実行が反復される反復再利用区間の実行結果を履歴メモリから外部の記憶部に退避させるという作用をもたらす。
【発明の効果】
【0014】
本発明によれば、値再利用(メモ化)を行う際、実行結果を保存しておくメモリから実行結果を退避させることにより、値再利用の効率を改善することができるという優れた効果を奏し得る。
【図面の簡単な説明】
【0015】
【図1】本発明の実施の形態におけるデータ処理装置100の構成例を示すブロック図である。
【図2】本発明の実施の形態におけるプロセッサコア300と履歴管理部400と履歴変換部500との構成例を示すブロック図である。
【図3】本発明の実施の形態における履歴制御部510の構成例を示すブロック図である。
【図4】本発明の実施の形態における退避履歴生成部600の構成例を示すブロック図である。
【図5】本発明の実施の形態における履歴復元部520の構成例を示すブロック図である。
【図6】本発明の実施の形態における関数履歴、ループ個別履歴、ループ代表履歴および退避履歴のデータ構造例を示す模式図である。
【図7】本発明の実施の形態における入力値リンクおよび実行結果リンクのデータ構造例を示す概念図である。
【図8】本発明の実施の形態における履歴制御部510によるループ個別履歴の退避の際の、履歴メモリ430および主記憶部130における実行履歴、ループ代表履歴および退避履歴の具体例を示す図である。
【図9】本発明の実施の形態における履歴復元部520によるループ個別履歴の復元の際の、履歴メモリ430および主記憶部130における実行履歴、ループ代表履歴および退避履歴の具体例を示す図である。
【図10】本発明の実施の形態における新たな実行履歴が登録されるときの履歴メモリ430における履歴情報と主記憶部130における退避履歴との具体例を示す図である。
【図11】本発明の実施の形態における履歴制御部510によるループ個別履歴の退避処理の処理手順例を示すフローチャートである。
【図12】本発明の実施の形態における履歴制御部510によるループ個別履歴の連履歴探索退避処理(ステップS930)の処理手順例を示すフローチャートである。
【図13】本発明の実施の形態における履歴復元部520によるループ個別履歴の復元処理の処理手順例を示すフローチャートである。
【図14】本発明の実施の形態における実行結果登録処理(ステップS970)の処理手順例を示すフローチャートである。
【図15】本発明の実施の形態における実行結果出力処理(ステップS980)の処理手順例を示すフローチャートである。
【発明を実施するための形態】
【0016】
以下、本発明を実施するための形態(以下、実施の形態と称する)について説明する。説明は以下の順序により行う。
1.データ処理装置の構成例(値再利用制御:反復再利用区間の実行履歴を退避する例)
2.履歴情報のフィールド構成例(値再利用制御:関数履歴、ループ個別履歴、ループ代表履歴および退避履歴の例)
3.履歴メモリに保持される履歴情報および主記憶部に保持される退避履歴の一例(値再利用制御:ループ個別履歴例を退避および復元させる例)
4.データ処理装置の処理手順例(値再利用制御:ループ個別履歴例を退避および復元させる例)
【0017】
<1.データ処理装置の構成例>
[データ処理装置100の構成例]
図1は、本発明の実施の形態におけるデータ処理装置100の構成例を示すブロック図である。このデータ処理装置100は、バス120を介して主記憶部130と相互に接続されている。また、ここでは、データ処理装置100が処理を実行する命令区間は関数またはループであることを想定する。
【0018】
データ処理装置100は、プログラムにおける各処理を実行するものである。このデータ処理装置100は、例えば、一般的なコンピュータにおいてはCPU(Central Processing Unit)により実現される。このデータ処理装置100は、一次キャッシュ200と、プロセッサコア300と、履歴管理部400と、履歴変換部500とを備える。
【0019】
一次キャッシュ200は、プロセッサコア300がバス120を介して扱う情報を一時的に保持するものである。この一次キャッシュ200は、命令キャッシュ210およびデータキャッシュ220を備える。
【0020】
命令キャッシュ210は、プロセッサコア300において実行される命令を一時的に保持するものである。この命令キャッシュ210は、プロセッサコア300が頻繁に実行する命令を一時的に保持することによって、プロセッサコア300から主記憶部130へのアクセスを軽減させ、プロセッサコア300におけるデータの入力待ち時間を軽減させることができる。この命令キャッシュ210は、主記憶部130から供給された再利用命令をプロセッサコア300に供給する。ここにいう再利用命令とは、命令区間のうち実行結果が再び利用される再利用区間を再び利用されない区間と区別することによって、再利用区間が呼出された際に実行結果を再利用するための処理をデータ処理装置に行わせる命令である。
【0021】
データキャッシュ220は、プロセッサコア300の入力データおよび出力データを一時的に保持するものである。このデータキャッシュ220は、使用頻度の高いプロセッサコア300の入力データを一時的に保持することによりプロセッサコア300から主記憶部130へのアクセスを軽減させて、プロセッサコア300におけるデータの入力待ち時間を軽減させる。このデータキャッシュ220は、主記憶部130から供給された関数またはループの入力値および開始アドレスをプロセッサコア300に出力する。なお、ここで、入力値とは、関数またはループの実行に必要な値として渡される値の引数で構成される値であり、例えば、3つの変数を引数とする関数の場合には、この3つの変数の値およびその変数のアドレスである。
【0022】
プロセッサコア300は、プログラムの命令に従って演算を実行するものである。このプロセッサコア300は、例えば、MIPS(Microprocessor without Interlocked Pipeline Stages)プロセッサにより実現される。プロセッサコア300は、例えば、データキャッシュ220から供給される関数またはループの入力値および開始アドレスに基づいて、命令キャッシュ210から入力される関数またはループの区間における命令を実行し、その実行の結果を実行結果として出力する。このプロセッサコア300は、入力される命令が再利用区間を指定する再利用命令である場合において履歴管理部400から実行結果が供給されないときには、この命令を実行した結果である実行結果をデータキャッシュ220および履歴管理部400に出力する。
【0023】
また、プロセッサコア300は、入力される命令が再利用区間を指定する再利用命令である場合において履歴管理部400から実行結果が供給されたときには、再利用区間における処理を中止して、この再利用区間を呼び出したルーチンに戻って実行を継続する。
【0024】
履歴管理部400は、再利用区間の実行結果を保持して管理するものである。この履歴管理部400は、プロセッサコア300から供給された再利用区間の区間識別情報と入力値と実行結果とを実行履歴として保持する。ここでいう区間識別情報とは、再利用区間を特定するための情報であり、例えば、関数またはループの開始アドレスである。すなわち、この履歴管理部400は、区間識別情報、入力値、および、実行結果として、関数またはループの開始アドレス、入力値、および、実行結果を保持する。また、この履歴管理部400は、プロセッサコア300から関数またはループの開始アドレスおよび入力値が供給された場合には、この開始アドレスおよび入力値が含まれる実行履歴を検索する。
【0025】
履歴変換部500は、履歴管理部400により管理されている実行履歴を変換するものである。この履歴変換部500は、履歴管理部400に登録されている再利用区間のうち実行が反復される反復再利用区間の実行履歴を、主記憶部130において保持される退避履歴に変換する。ここで、退避履歴とは、反復再利用区間の実行履歴の実行結果を主記憶部130に退避させるためのデータである。また、この履歴変換部500は、主記憶部130において保持された退避履歴に基づいて実行履歴を復元する。この履歴変換部500は、その退避履歴を主記憶部130に保持させ、退避履歴を生成する基となった実行履歴を履歴管理部400から消去し、退避履歴を指し示す情報を保持する代表履歴を履歴管理部400に登録する。
【0026】
また、この履歴変換部500は、その退避履歴に含まれる実行結果を再利用する場合には、退避履歴から実行履歴を復元するとともに代表履歴を消去し、履歴管理部400に復元した実行履歴を登録する。
【0027】
バス120は、データ処理装置100の各部と主記憶部130との間を相互に接続するバスである。
【0028】
主記憶部130は、データ処理装置100が動作するために必要なデータを保持するものである。この主記憶部130は、履歴変換部500から供給された退避履歴を保持する。また、この主記憶部130は、データ処理装置100に処理を実行させるためのプログラムを記憶する。この主記憶部130は、例えば、RAM(Random Access Memory)などが考えられる。この主記憶部130は、記憶しているデータを、バス120を介してデータ処理装置100に出力する。なお、主記憶部130は、特許請求の範囲に記載の退避履歴保持部の一例である。
【0029】
[プロセッサコア300と履歴管理部400と履歴変換部500との構成例]
図2は、本発明の実施の形態におけるプロセッサコア300と履歴管理部400と履歴変換部500との構成例を示すブロック図である。ここでは、プロセッサコア300と履歴管理部400と履歴変換部500とに加えて、バス120を介して履歴変換部500と接続される主記憶部130も示されている。ここでは、プロセッサコア300と履歴管理部400と履歴変換部500と主記憶部130との機能は、図1と同様のものであるため、同一の符号を付してここでの詳細な説明を省略する。
【0030】
また、これ以降の説明では、便宜上、繰り返し実行される区間である反復再利用区間はループであり、反復再利用区間以外の再利用区間は関数であることを想定する。この反復再利用区間以外の再利用区間は、関数再利用区間と表現することとする。そして、ループの実行結果をループ個別履歴と表現し、関数の実行結果を関数履歴と表現することとする。さらに、退避履歴を指し示す代表履歴は、ループ代表履歴と表現する。
【0031】
プロセッサコア300は、フェッチ部310と、命令デコーダ320と、実行部330と、レジスタファイル340とを備える。
【0032】
フェッチ部310は、命令キャッシュ210または主記憶部130からの命令を読み出すものである。このフェッチ部310は、その読み出した命令を一時的に保持して、その保持されている命令のうち、実行部330に実行させるための命令を命令デコーダ320に供給する。このフェッチ部310は、例えば、一時的に保持している命令のうち、実行部330において実行される再利用命令を命令デコーダ320に供給する。このフェッチ部310は、例えば、主記憶部130に記憶された再利用命令を命令デコーダ320に供給する。
【0033】
命令デコーダ320は、フェッチ部310から供給された命令を解読(デコード)することによって、プロセッサコア300における構成部位を制御する制御信号を生成するものである。この命令デコーダ320は、例えば、命令を解読することによって実行部330およびレジスタファイル340を制御する制御信号を生成して、その生成された制御信号を実行部330およびレジスタファイル340に供給する。
【0034】
この命令デコーダ320は、フェッチ部310から再利用命令が供給された場合には、その再利用命令を解析することによって、実行部330およびレジスタファイル340の各々を制御する制御信号を実行部330およびレジスタファイル340に供給する。
【0035】
実行部330は、命令デコーダ320から供給された制御信号に基づいて、命令デコーダ320において解析した命令を実行するものである。この実行部330は、命令デコーダ320が再利用命令をデコードした場合、再利用命令が指定する再利用区間の処理を開始する。また、この再利用区間の処理の開始とともに、実行部330は、レジスタファイル340から取得した再利用区間の区間識別情報を、信号線309を介して履歴管理部400に出力する。そして、実行部330は、レジスタファイル340から供給される再利用区間の入力値に基づいて再利用区間における処理を実行するとともに、再利用区間の入力値を、信号線309を介して履歴管理部400に出力する。
【0036】
また、実行部330は、履歴管理部400から再利用区間の実行結果が供給された場合には、再利用区間の処理を中止するとともに、その実行結果を履歴管理部400から供給された旨を通知する信号をフェッチ部310に供給する。この時、実行部330は、実行結果をレジスタファイル340に出力する。
【0037】
一方、実行部330は、履歴管理部400から再利用区間の実行結果が供給されない場合には、再利用区間の処理を最後まで実行して、その実行結果を履歴管理部400およびレジスタファイル340に出力する。さらに、この実行部330は、反復再利用区間の実行結果が供給されない場合には、何回目の実行による実行結果であるのかを示すループカウンタ値を実行結果とともに履歴管理部400に出力する。なお、ループカウンタ値は、特許請求の範囲に記載のカウンタ値の一例である。
【0038】
レジスタファイル340は、データキャッシュ220から供給されたデータおよび実行部330から供給された実行結果を一時的に保持するものである。このレジスタファイル340は、例えば、命令デコーダ320から再利用命令に基づく制御信号が供給された場合には、再利用区間の入力値を実行部330に供給する。
【0039】
履歴管理部400は、再利用区間の実行結果を保持して管理するものであり、履歴対象データ保持部410と、履歴検索部420と、履歴メモリ430と、履歴登録部440と、履歴メモリ容量管理部450と、消去部460とを備える。
【0040】
履歴対象データ保持部410は、実行部330から供給されたデータを一時的に保持するものである。この履歴対象データ保持部410は、実行部330から区間識別情報および入力値が供給された際には、これらを検索要求として履歴検索部420に供給する。この履歴対象データ保持部410は、例えば、実行部330において関数再利用区間が実行された場合には、実行部330から供給された関数の開始アドレスおよび入力値を、検索要求として履歴検索部420に供給する。また、履歴対象データ保持部410は、実行部330において反復再利用区間が実行された場合には、実行部330から供給されたループの開始アドレス、入力値およびループカウンタ値を検索要求として履歴検索部420に供給する。
【0041】
また、この履歴対象データ保持部410は、実行部330から区間識別情報と、入力値と、実行結果とが供給された場合には、実行履歴を登録する条件が整うため、これらを実行履歴として履歴登録部440に供給する。例えば、履歴対象データ保持部410は、実行部330において関数再利用区間が実行された場合には、実行部330から供給された関数の開始アドレスと入力値と実行結果とを実行履歴として履歴登録部440に供給する。また、履歴対象データ保持部410は、実行部330において反復再利用区間が実行された場合には、ループの開始アドレスと入力値と実行結果とループカウンタ値とを実行履歴として履歴登録部440に供給する。
【0042】
履歴検索部420は、履歴対象データ保持部410から供給された検索要求に基づいて実行履歴を検索するものである。この履歴検索部420は、検索要求入力部421および実行結果出力部422を備える。
【0043】
検索要求入力部421は、履歴対象データ保持部410から供給された検索要求に基づいて履歴メモリ430から実行履歴を検索するものである。この検索要求入力部421は、例えば、反復再利用区間を指定する命令が命令デコーダ320において解析された場合には、この命令により指定されたループの開始アドレス、入力値およびループカウンタ値を履歴メモリ430に供給する。これにより、実行履歴の検索を開始する。
【0044】
実行結果出力部422は、履歴メモリ430において実行履歴が検索された場合に実行結果を履歴メモリ430から抽出して、その抽出した実行結果を実行部330に出力するものである。この実行結果出力部422は、その抽出した実行結果を、信号線409を介して実行部330に供給する。
【0045】
また、この実行結果出力部422は、履歴メモリ430においてループ代表履歴が実行履歴として検索された場合には、退避履歴を指し示す退避履歴位置情報を、実行結果の代わりに履歴メモリ430から抽出する。そして、その抽出した退避履歴に関する情報を履歴変換部500に出力し、実行履歴の復元を開始させる。
【0046】
履歴メモリ430は、履歴登録部440から供給された実行履歴を保持するものである。この履歴メモリ430は、例えば、履歴検索部420から検索要求が供給された場合において、この検索要求と一致する実行履歴を保持しているときは、この実行履歴の実行結果を実行結果出力部422に供給する。また、この履歴メモリ430は、履歴検索部420から検索要求が供給された場合において、この検索要求と一致するループ代表履歴を保持しているときは、このループ代表履歴の退避履歴位置情報を実行結果出力部422に供給する。さらに、この履歴メモリ430は、履歴登録部440から実行履歴が供給された場合には、この実行履歴を保持する。
【0047】
また、この履歴メモリ430は、履歴メモリ430の使用状況に関する情報を履歴メモリ容量管理部450に供給する。さらにこの履歴メモリ430は、保持している実行履歴およびループ代表履歴を履歴変換部500に供給する。この履歴メモリ430は、例えば、連想メモリ(CAM:Content Addressable Memory)により実現される。
【0048】
履歴登録部440は、履歴対象データ保持部410から供給された実行履歴を履歴メモリ430に保持させるためのデータ構造に変換して、その変換された実行履歴を履歴メモリ430に登録するものである。この履歴登録部440は、例えば、履歴検索部420により関数履歴が検索されない場合には、関数の開始アドレス、入力値および実行結果を、実行履歴として履歴メモリ430に登録する。また、この履歴登録部440は、例えば、履歴検索部420によりループ個別履歴が検索されない場合には、ループの開始アドレス、入力値、実行結果およびループカウンタ値を実行履歴として履歴メモリ430に登録する。
【0049】
また、この履歴登録部440は、履歴メモリ容量管理部450から供給される履歴メモリ430の空き容量に比べて新たに登録する実行履歴のデータ量の方が大きい場合には、登録を一時中断する。そして、この履歴登録部440は、既に登録されている実行履歴のうち、前回の使用からの未使用期間が最も長い実行履歴を消去させるための消去開始情報を消去部460に供給する。
【0050】
履歴メモリ容量管理部450は、履歴メモリ430の空き容量を管理するものである。この履歴メモリ容量管理部450は、例えば、履歴メモリ430に新たな実行履歴が登録される度に、履歴メモリ430の空き容量を測定する。さらに、この履歴メモリ容量管理部450は、履歴メモリ430から実行履歴が消去される度に、履歴メモリ430の空き容量を測定する。この履歴メモリ容量管理部450は、履歴メモリ430の空き容量に関する情報を履歴登録部440に供給する。
【0051】
消去部460は、履歴登録部440から消去開始情報が供給された場合には、前回の使用からの未使用期間が最も長い実行履歴を消去するものである。
【0052】
履歴変換部500は、履歴管理部400により管理されている実行履歴を退避履歴に変換して主記憶部130に保持させるものであり、履歴制御部510と、履歴復元部520と、退避領域管理部530とを備える。
【0053】
履歴制御部510は、履歴メモリ430に保持されているループ個別実行履歴から退避履歴を生成して、主記憶部130に退避するものである。この履歴制御部510は、例えば、履歴メモリ430から反復再利用区間の実行履歴を、信号線490を介して抽出し、その実行履歴と、退避領域管理部530から供給される主記憶部130のアドレス情報とに基づいて退避履歴を主記憶部130に退避させる。また、この履歴制御部510は、例えば、履歴メモリ430に保持させる新たな実行履歴のデータ量が履歴メモリ430の空き容量より大きい場合に退避履歴の退避を開始する。
【0054】
そして、この履歴制御部510は、退避履歴の基となったループ個別履歴を履歴メモリ430から消去し、退避履歴位置情報を含むループ代表履歴をループ個別履歴の代わりに履歴メモリ430に登録する。なお、ここでいう退避履歴位置情報とは、例えば、退避履歴の主記憶部130における格納位置を指し示す主記憶部130のアドレスである。このように、履歴制御部510は、生成した退避履歴を、信号線509を介して主記憶部130に供給する。また、履歴制御部510は、生成したループ代表履歴を、信号線590を介して履歴メモリ430に供給する。なお、履歴制御部510および履歴メモリ430から構成される装置は、特許請求の範囲に記載の履歴保存装置の一例である。
【0055】
履歴復元部520は、実行結果出力部422から供給された退避履歴位置情報に基づいて主記憶部130から退避履歴を抽出して、その退避履歴に基づいて実行履歴を復元するものである。この履歴復元部520は、例えば、主記憶部130に退避した退避履歴の実行結果を再利用する場合には、実行結果出力部422から供給された退避履歴の情報に基づいて主記憶部130から信号線139を介して退避履歴を抽出する。そして、この履歴復元部520は、履歴メモリ430から抽出したループ代表履歴と、主記憶部130から抽出した退避履歴とに基づいて実行履歴を復元する。その後、この履歴復元部520は、履歴メモリ430に保持されているループ代表履歴を消去し、さらに履歴メモリ430における退避履歴を保持する容量を確保した後に、復元した実行履歴を履歴メモリ430に登録する。
【0056】
このように、この履歴復元部520は、復元した実行履歴を、信号線580を介して履歴メモリ430に供給する。
【0057】
退避領域管理部530は、主記憶部130における退避履歴が保持される領域を管理するものである。この退避領域管理部530は、例えば、退避履歴が保持される領域を主記憶部130に確保し、履歴制御部510が退避履歴を生成した場合には、主記憶部130におけるその退避履歴の退避先のアドレスを履歴制御部510に信号線539を介して供給する。
【0058】
主記憶部130は、この構成図においては退避履歴を保持するものである。なお、主記憶部130は、特許請求の範囲に記載の退避履歴保持部の一例である。
【0059】
このように、本発明の実施の形態では、プロセッサコア300と履歴管理部400と履歴変換部500とを設けることによって、反復再利用区間の実行履歴を主記憶部130に退避させることができる。
【0060】
なお、ここでは、反復再利用区間がループである場合について説明したが、これに限定されるものではない。例えば、ループ以外の反復再利用区間として、再帰呼び出し(リカーシブコール)を伴うサブルーチンなどが考えられる。
【0061】
[履歴制御部510の構成例]
図3は、本発明の実施の形態における履歴制御部510の構成例を示すブロック図である。履歴制御部510は、退避履歴生成部600と、ループ個別履歴消去部512と、ループ代表履歴登録部513とを備える。
【0062】
退避履歴生成部600は、ループ個別履歴に基づいて退避履歴を生成するものである。この退避履歴生成部600は、例えば、ループの反復された実行による実行結果を含むループ個別履歴を履歴メモリ430から信号線490を介して取得して、その取得したループ個別履歴に基づいて退避履歴を生成する。この時、この退避履歴生成部600は、主記憶部130におけるその退避履歴の退避先のアドレスを退避領域管理部530から信号線539を介して受け取る。そして、この退避履歴生成部600は、その生成した退避履歴を、信号線509を介して主記憶部130に退避させる。
【0063】
また、この退避履歴生成部600は、退避履歴位置情報を含むループ代表履歴を生成し、信号線608を介してループ代表履歴登録部513に供給する。さらに、この退避履歴生成部600は、退避履歴の基となったループ個別履歴を、信号線609を介してループ個別履歴消去部512に供給する。
【0064】
ループ個別履歴消去部512は、退避履歴の基となった実行履歴を消去するものである。このループ個別履歴消去部512は、退避履歴生成部600から供給された退避履歴の基となったループ個別履歴に基づいて、このループ個別履歴を履歴メモリ430から信号線592を介して消去する。また、このループ個別履歴消去部512は、そのループ個別履歴の消去を通知する情報をループ代表履歴登録部513に供給する。
【0065】
ループ代表履歴登録部513は、ループ代表履歴を履歴メモリ430に登録するものである。このループ代表履歴登録部513は、例えば、退避履歴生成部600からループ代表履歴が供給された場合に、ループ個別履歴消去部からループ個別履歴の消去を通知する情報が供給されたときは、ループ代表履歴を履歴メモリ430に信号線593を介して登録する。
【0066】
[退避履歴生成部600の構成例]
図4は、本発明の実施の形態における退避履歴生成部600の構成例を示すブロック図である。退避履歴生成部600は、先頭探索部610と、連続探索部620と、ループ個別履歴取得部630と、退避履歴転送部640と、ループ代表履歴生成部650とを備える。
【0067】
先頭探索部610は、反復再利用区間の1回目の実行に関するループ個別履歴を、履歴メモリ430から信号線491を介して探索するものである。この先頭探索部610は、ループ個別履歴を探索した場合には、一旦動作を停止してその後のループ個別履歴の探索を連続探索部620に処理させる。この先頭探索部610は、その探索したループ個別履歴に関する位置情報を連続探索部620に供給する。
【0068】
連続探索部620は、先頭探索部610から供給された反復再利用区間の1回目の実行に関するループ個別履歴の位置情報に基づいて、2回目以降の実行に関するループ個別履歴を、信号線492を介して探索するものである。この連続探索部620は、例えば、50回反復されたループにおいて、1回目のループ個別履歴の位置情報が先頭探索部610から供給された場合には、2回目から50回目までのループ個別履歴を探索する。そして、この連続探索部620は、51回目の実行履歴が探索されなかったときに、その50個のループ個別履歴を取得するための位置情報をループ個別履歴取得部630に供給する。
【0069】
また、この連続探索部620は、2回目以降のループ個別履歴が探索されなかった場合には、反復再利用区間は反復して実行されなかったと判断して、退避履歴の生成を中止する。そして、この連続探索部620は、一端動作を停止して先頭探索部610に反復再利用区間の1回目の実行に関するループ個別履歴の探索を再開させる。
【0070】
ループ個別履歴取得部630は、連続探索部620から供給されたループ個別履歴を取得するための位置情報に基づいて、ループ個別履歴を、信号線493を介して履歴メモリ430から取得するものである。このループ個別履歴取得部630は、例えば、連続探索部620から50回反復された反復再利用区間における50個のループ個別履歴に関する位置情報が供給された場合には、その50個のループ個別履歴を履歴メモリ430から取得する。また、このループ個別履歴取得部630は、その取得したループ個別履歴を、信号線638および信号線609を介して退避履歴転送部640、ループ代表履歴生成部650およびループ個別履歴消去部512に供給する。
【0071】
退避履歴転送部640は、ループ個別履歴取得部630から供給されたループ個別履歴に基づいて退避履歴を生成して、その生成された退避履歴を主記憶部130に転送するものである。この退避履歴転送部640は、例えば、50回反復された反復再利用区間の50個のループ個別履歴が供給された場合には、50個の退避履歴を生成する。この退避履歴転送部640は、退避領域管理部530から信号線539を介して供給される主記憶部130のアドレスに基づいて退避履歴を主記憶部130に退避させる。この退避履歴転送部640は、生成した退避履歴を、信号線509を介して主記憶部130に転送する。
【0072】
ループ代表履歴生成部650は、ループ個別履歴取得部630から供給されたループ個別履歴に基づいてループ代表履歴を生成するものである。このループ代表履歴生成部650は、退避領域管理部530から信号線539を介して供給される主記憶部130のアドレスに基づいて、退避履歴位置情報が含まれるループ代表履歴を生成する。このループ代表履歴生成部650は、その生成したループ代表履歴を、信号線608を介してループ代表履歴登録部513に供給する。
【0073】
[履歴復元部520の構成例]
図5は、本発明の実施の形態における履歴復元部520の構成例を示すブロック図である。履歴復元部520は、退避履歴取得部521と、ループ個別履歴生成部522と、登録領域確保部523と、ループ個別履歴登録部524とを備える。
【0074】
退避履歴取得部521は、実行結果出力部422から供給された退避履歴位置情報に基づいて主記憶部130から退避履歴を取得するものである。この退避履歴取得部521は、例えば、反復して50回実行された反復再利用区間の退避履歴を取得する場合には、実行結果出力部422から信号線408を介して供給された退避履歴位置情報に基づいて、その50個の退避履歴を主記憶部130から取得する。この退避履歴取得部521は、その取得した退避履歴をループ個別履歴生成部522に供給する。
【0075】
ループ個別履歴生成部522は、退避履歴からループ個別履歴を生成するものである。このループ個別履歴生成部522は、信号線408を介して供給された退避履歴位置情報に基づいて、その退避履歴位置情報を含むループ代表履歴を履歴メモリ430から信号線480を介して取得する。そして、このループ個別履歴生成部522は、その取得したループ代表履歴と、退避履歴取得部521から供給された退避履歴とに基づいて、ループ個別履歴を生成する。
【0076】
このループ個別履歴生成部522は、その生成したループ個別履歴をループ個別履歴登録部524に供給する。また、このループ個別履歴生成部522は、ループ代表履歴と、ループ個別履歴のデータ量とを登録領域確保部523に供給する。
【0077】
登録領域確保部523は、ループ個別履歴を登録するために履歴メモリ430の空き領域を確保するものである。この登録領域確保部523は、ループ個別履歴生成部522から供給されたループ代表履歴を、履歴メモリ430から信号線583を介して消去する。そして、この登録領域確保部523は、ループ個別履歴生成部522から供給されたループ個別履歴のデータ量に基づいて、履歴メモリ430に全てのループ個別履歴を登録する空き容量があるか否か判断する。この登録領域確保部523は、履歴メモリ430にその空き容量が不足している場合には、信号線583を介して空き容量を確保する。例えば、この登録領域確保部523は、前回の使用からの未使用期間が最も長い実行履歴を消去して履歴メモリ430における必要な空き容量を確保する。
【0078】
この登録領域確保部523は、履歴メモリ430における空き容量に関する情報をループ個別履歴登録部524に供給する。
【0079】
ループ個別履歴登録部524は、ループ個別履歴生成部522から供給されたループ個別履歴を、信号線584を介して履歴メモリ430に登録するものである。このループ個別履歴登録部524は、ループ個別履歴生成部522から供給されたループ個別履歴を、登録領域確保部523から供給された情報が指し示す履歴メモリ430の空き容量に登録する。
【0080】
このように、本発明の実施の形態では、データ処理装置100に履歴管理部400および履歴変換部500を設けることによって、実行が反復される反復再利用区間の実行履歴を退避履歴として主記憶部130に退避することができる。
【0081】
<2.履歴情報のフィールド構成例>
[実行履歴、ループ個別履歴および退避履歴のフィールド構成例]
図6は、本発明の実施の形態における履歴メモリ430に保持される関数履歴、ループ個別履歴およびループ代表履歴と、主記憶部130に保持される退避履歴とのフィールド構成例を示す模式図である。
【0082】
図6(a)には、関数再利用区間の実行履歴である関数履歴710のフィールド構成例が示されている。この関数履歴710は、識別子フィールド711と、開始アドレスフィールド712と、入力値リンクフィールド713と、実行結果リンクフィールド717とから構成される。
【0083】
識別子フィールド711は、関数履歴と、ループ個別履歴と、ループ代表履歴とを識別するためのフィールドである。この識別子フィールド711には、関数履歴であることを示す2ビット(00)が格納される。また、この識別子フィールド711は、関数履歴710における先頭のフィールドであり、例えば、その関数履歴710の開始アドレスに保持されるフィールドである。
【0084】
開始アドレスフィールド712は、関数の開始アドレスを格納するためのフィールドである。この開始アドレスフィールド712に格納される関数の開始アドレスは、検索要求入力部421により実行履歴が検索される場合には、検索要求の開始アドレスと比較される。
【0085】
入力値リンクフィールド713は、リンク構造を用いて格納されている関数の入力値のアドレスを格納するためのフィールドである。この入力値リンクフィールド713には、検索要求入力部421により実行履歴が検索されて検索要求の開始アドレスが開始アドレスフィールド712の開始アドレスと一致したときに、検索要求の入力値と比較される入力値を保持するアドレスが格納される。この入力値リンクフィールド713には、例えば、3つの引数を入力値とする関数の場合には、3つの関数のうち1番目の引数の値である第1引数値が保持されているアドレスが格納される。
【0086】
実行結果リンクフィールド717は、リンク構造を用いて格納されている関数の実行結果のアドレスを格納するためのフィールドである。この実行結果リンクフィールド717には、検索要求入力部421により実行履歴が検索されて開始アドレスおよび入力値が一致したときに、実行結果として出力される関数の実行結果が保持されているアドレスが格納される。例えば、3つの変数を出力値とする関数の場合には、3つの変数のうち1番目の変数の値が保持されているアドレスが実行結果リンクフィールド717に格納される。
【0087】
図6(b)には、反復再利用区間の実行履歴であるループ個別履歴720のフィールド構成例が示されている。このループ個別履歴720は、識別子フィールド721と、開始アドレスフィールド722と、入力値リンクフィールド723と、ループカウンタ値フィールド724と、実行結果リンクフィールド727とから構成される。
【0088】
識別子フィールド721は、図6(a)において示した識別子フィールド711と同様に、関数履歴と、ループ個別履歴と、ループ代表履歴とを識別するための識別子を格納するフィールドである。この識別子フィールド721には、ループ個別履歴であることを示す2ビット(01)が格納される。また、この識別子フィールド721は、ループ個別履歴720における先頭のフィールドであり、例えば、そのループ個別履歴720の開始アドレスに保持されるフィールドである。
【0089】
開始アドレスフィールド722は、ループの開始アドレスを格納するためのフィールドである。この開始アドレスフィールド722に格納されるループの開始アドレスは、検索要求入力部421により実行履歴が検索される場合には、検索要求の開始アドレスと比較される。
【0090】
入力値リンクフィールド723は、リンク構造を用いて格納されているループの入力値のアドレスを格納するためのフィールドである。この入力値リンクフィールド723の機能は、図6(a)において示した入力値リンクフィールド713と同様のものであるので、ここでの詳細な説明を省略する。
【0091】
ループカウンタ値フィールド724は、ループの何回目の実行による実行結果であるのかを示す値を格納するためのフィールドである。このループカウンタ値フィールド724には、検索要求入力部421により実行履歴が検索されて開始アドレスおよび入力値が一致したときに、検索要求のループカウンタ値と比較されるループカウンタ値が格納される。
【0092】
実行結果リンクフィールド727は、リンク構造を用いて格納されているループの実行結果のアドレスを格納するフィールドである。この実行結果リンクフィールド727には、検索要求入力部421により実行履歴が検索されて開始アドレス、入力値、およびループカウンタ値が一致したときに、実行結果として出力されるループの実行結果が保持されているアドレスが格納される。
【0093】
図6(c)には、反復再利用区間の代表履歴であるループ代表履歴730のフィールド構成例が示されている。このループ代表履歴730は、識別子フィールド731と、開始アドレスフィールド732と、入力値リンクフィールド733と、退避カウントフィールド735と、退避履歴アドレスフィールド736とから構成される。
【0094】
識別子フィールド731は、図6(a)において示した識別子フィールド711と同様に、関数履歴と、ループ個別履歴と、ループ代表履歴とを識別するためのフィールドである。この識別子フィールド731には、ループ代表履歴であることを示す2ビット(10)が格納される。また、この識別子フィールド731は、ループ代表履歴730における先頭のフィールドであり、例えば、そのループ代表履歴730の開始アドレスに保持されるフィールドである。
【0095】
開始アドレスフィールド732は、図6(b)において示した開始アドレスフィールド722と同様に、ループの開始アドレスを格納するためのフィールドである。この開始アドレスフィールド732の機能は、図6(b)の開始アドレスフィールド722と同様のものであるのでここでの詳細な説明を省略する。
【0096】
入力値リンクフィールド733は、図6(b)において示した入力値リンクフィールド723と同様に、リンク構造を用いて格納されているループの入力値のアドレスを格納するためのフィールドである。この入力値リンクフィールド733の機能は、図6(b)において示した入力値リンクフィールド723と同様のものであるのでここでの詳細な説明を省略する。
【0097】
退避カウントフィールド735は、主記憶部130に退避された退避履歴の個数を示す値を格納するためのフィールドである。この退避カウントフィールド735には、実行履歴が検索されて検索要求の開始アドレスおよび入力値がループ代表履歴の開始アドレスおよび入力値と一致したときに、履歴復元部520に退避履歴位置情報として供給される退避履歴の個数が格納される。
【0098】
退避履歴アドレスフィールド736は、退避履歴アドレスを格納するためのフィールドである。ここでいう退避履歴アドレスとは、主記憶部130に退避された退避履歴が格納されているアドレスである。この退避履歴アドレスフィールド736には、実行履歴が検索されて検索要求の開始アドレスおよび入力値が、ループ代表履歴の開始アドレスおよび入力値と一致したときに、履歴復元部520に退避履歴位置情報として供給される退避履歴アドレスが格納される。例えば、この退避履歴アドレスフィールド736には、反復再利用区間の複数の退避履歴を連続したアドレスに保存した場合において、最初の退避履歴の開始アドレスが格納される。
【0099】
図6(d)には、反復再利用区間の退避履歴740のフィールド構成例が示されている。この退避履歴740は、ループカウンタ値フィールド744および実行結果リンクフィールド747から構成される。
【0100】
ループカウンタ値フィールド744は、図6(b)において示したループカウンタ値フィールド724と同様に、ループの何回目の実行による実行結果であるのかを示す値を格納するためのフィールドである。このループカウンタ値フィールド744には、履歴復元部520によりループ個別履歴が復元されるときに、ループカウンタ値フィールド724となる値が格納される。
【0101】
実行結果リンクフィールド747は、図6(b)において示した実行結果リンクフィールド727と同様に、リンク構造を用いて格納されているループの実行結果のアドレスを格納するフィールドである。この実行結果リンクフィールド747には、履歴復元部520によりループ個別履歴が復元されるときに、実行結果リンクフィールド727となる値が格納される。
【0102】
なお、ここでは、実行履歴およびループ代表履歴のデータ長を固定長にして履歴メモリ430における実行履歴およびループ代表履歴の登録や消去を容易にするために、また、実行履歴のデータ量を少なくするために、入力値および実行結果をリンク構造にした。しかしながら、関数履歴、ループ個別履歴、ループ代表履歴および退避履歴のデータ構造はこれに限定されるものではない。例えば、入力値および実行結果をリンク構造にしないで、関数履歴、ループ個別履歴、ループ代表履歴および退避履歴にそのまま保持させるようにしてもよい。
【0103】
[入力値リンクおよび実行結果リンクのデータ構造例]
図7は、本発明の実施の形態における入力値リンクおよび実行結果リンクのデータ構造例を示す概念図である。
【0104】
ここでは、図6(a)において示した入力値リンクフィールド713と、入力値を格納する入力値格納領域760のデータ構造とが示されている。この例では、3つの引数が入力値である関数を想定する。また、ここでは、入力値格納領域760は、関数履歴、ループ個別履歴およびループ個別履歴が保存される領域とは異なる履歴メモリ430の領域であることとする。
【0105】
入力値格納領域760は、関数履歴およびループ個別履歴の入力値を保持する領域である。この入力値格納領域760には、3つの引数として、第1引数値761、第2引数値763および第3引数値765が左側のカラムに示されている。そして、この入力値格納領域760の右側のカラムには、その3つの引数とともに保存されるリンクアドレス762、764および766が示されている。
【0106】
第1引数値761、第2引数値763および第3引数値765は、入力値リンクフィールド713が指定する入力値である3つの引数の引数値がそれぞれ保持される領域である。すなわち、第1引数値761には、第1番目とされた引数の引数値が保持され、第2引数値763には、第2番目とされた引数の引数値が保持され、第3引数値765には、第3番目とされた引数の引数値が保持される。例えば、第1引数値761には関数再利用区間において1番最初に使用された引数が保持され、第2引数値763には2番目に使用された引数が保持され、第3引数値765には3番目に使用された引数が保持される。また、第1引数値761のアドレスは、入力値リンクフィールド713に格納されるアドレスである。
【0107】
リンクアドレス762、リンクアドレス764およびリンクアドレス766は、第1引数値761、第2引数値763および第3引数値765にそれぞれ連結して保存され、次の引数のアドレスを格納する領域である。例えば、第1引数値761に連結して保存されるリンクアドレス762は、第2引数値763のアドレスを格納する。また、リンクアドレス762、リンクアドレス764およびリンクアドレス766は、次の引数が無い場合には、リンク先が無いことを示す「0」が格納される。例えば、第3引数値765に連結して保存されるリンクアドレス766は、第4番目の引数が無いため「0」が格納される。
【0108】
このように、入力値格納領域760には、実行履歴の入力値が引数毎に次の引数の保存場所を指定するリンクアドレスが保持される。実行履歴の検索のときには、検索要求の開始アドレスと関数履歴710の開始アドレスが一致した場合に入力値リンクフィールド713が参照されて、第1引数値761から順に引数毎に検索要求の入力値の引数と比較される。そして、第3引数値765まで一致するとリンクアドレス766の「0」により検索を終了し、実行結果の出力過程に移行する。
【0109】
このように、本発明の実施の形態では、実行履歴の入力値をリンク構造で保存することにより、記憶領域の無駄な領域を減少させて効率よく入力値を保持させることができる。なお、入力値リンクフィールド723および入力値リンクフィールド733に関しては、入力値リンクフィールド713と同様にリンク構造を用いて入力値が保存されるため説明を省略する。また、実行結果リンクフィールド717、実行結果リンクフィールド727および実行結果リンクフィールド747に関しても、入力値リンクフィールド713と同様にリンク構造を用いて実行結果が保存されるためh説明を省略する。
【0110】
なお、ここでは、3つの引数が入力値である関数を想定したが、引数の値が最大3つに限定されるものではない。リンクを繋げることで3つ以上の引数および変数に対応することができる。また、ここでは、入力値格納領域760は、検索を高速にするために履歴メモリ430における領域であることを想定したが、これに限定されるものではない。例えば、主記憶部130に入力値格納領域760を確保することにより、より多くの実行履歴およびループ個別履歴を履歴メモリ430に保持させることができる。
【0111】
<3.履歴メモリに保持される履歴情報および主記憶部に保持される退避履歴の一例>
[ループ個別履歴の退避の具体例]
図8は、本発明の実施の形態における履歴制御部510によるループ個別履歴の退避の際の、履歴メモリ430および主記憶部130における実行履歴、ループ代表履歴および退避履歴の具体例を示す図である。ここでは、履歴メモリ430における関数履歴、ループ個別履歴およびループ代表履歴を登録する領域は、データ量と無関係に10個の履歴が格納できる容量であることを想定する。さらにここでは、主記憶部130における退避履歴を保持させる領域は、データ量と無関係に6個の退避履歴を退避できる容量であることとする。また、これ以降の説明では、便宜上、関数再利用区間の実行履歴である関数履歴、反復再利用区間の実行履歴であるループ個別履歴、および、反復再利用区間の代表履歴であるループ代表履歴の3つの履歴を履歴情報と表現することとする。
【0112】
図8(a)は、履歴制御部510が動作する前の履歴メモリ430および主記憶部130における実行履歴、ループ代表履歴および退避履歴の一例である。ここには、実行履歴表811および退避履歴表812が示されている。
【0113】
実行履歴表811は、履歴メモリ430に登録されている履歴情報を表すものである。この実行履歴表811における左側のカラムには、履歴メモリ430に登録された順序を示す順位が「1」から「10」まで順に例示されている。この順位は、数値が小さいものほど先に履歴メモリ430に登録されたことを示すものとする。
【0114】
実行履歴表811における右側のカラムには、履歴メモリ430に登録されている履歴情報が示されている。ここには、図6(a)乃至(d)において示した識別子と、その履歴情報の基となった関数またはループとが示されている。また、ループ個別履歴の場合には、そのループ個別履歴が反復された実行において何回目の実行であるのかを示す値がさらに示されている。
【0115】
例えば、順位が「1」の履歴情報(00(funcA))は、関数A(funcA)の関数履歴(00)を示している。また、「7」の順位の履歴情報(01(loopF(1)))は、ループF(loopF)の1回目(1)の実行に関するループ個別履歴(01)を示している。また、「8」の順位の履歴情報(01(loopF(2)))は、反復して実行されたループF(loopF)の2回目(2)の実行に関するループ個別履歴(01)を示している。
【0116】
退避履歴表812は、主記憶部130に退避された退避履歴を表すものである。この退避履歴表812における順位には、主記憶部130に登録された順序を示す順位が示されており、ここでは、「1」から「6」までの順位が例示されている。この順位は、数値が少ないものほど古く、早い時点で登録されたことを意味している。
【0117】
退避履歴表812における退避履歴には、主記憶部130に退避された退避履歴が示されている。ここでは、主記憶部130に退避履歴は1つも退避されていないことが示されている。
【0118】
この様な場合において、履歴制御部510は、履歴メモリ430に新たな実行履歴を登録する空き容量が無いことを検出すると、履歴メモリ430から反復して実行された反復再利用区間のループ個別履歴の退避を開始する。
【0119】
図8(b)は、履歴制御部510が動作した後の履歴メモリ430および主記憶部130における履歴情報および退避履歴の一例である。ここには、実行履歴表821および退避履歴表822が示されている。
【0120】
実行履歴表821は、図8(a)で示した実行履歴表811におけるループ個別履歴が退避された後の履歴メモリ430における履歴情報を表すものである。
【0121】
実行履歴表821では、実行履歴表811の「7」の順位のループ個別履歴(01(loopF(1))と、「8」の順位のループ個別履歴(01(loopF(2))と、「9」の順位のループ個別履歴(01(loopF(3))とが削除されている。そして、その3つのループ個別履歴の代わりとして、ループ代表履歴(10(loopF))が「7」の順位に示されている。
【0122】
また、その3つのループ個別履歴がループ代表履歴(10(loopF))に代わったことにより、図8(a)の実行履歴表811における「10」の順位で示した関数Bの関数履歴(00(funcB))の順位が「8」に繰り上げられている。そして、実行履歴表821における順位が「9」乃至「10」の実行履歴は存在しないことを意味する。
【0123】
退避履歴表822は、履歴制御部510が動作した後の主記憶部130に退避された退避履歴を表すものである。
【0124】
この退避履歴表822の「1」の順位には、実行履歴表811の「7」の順位のループ個別履歴(01(loopF(1)))に基づいて生成された、反復して実行されたループFの1回目の実行の実行結果を含む退避履歴(loopF(1))が示されている。「2」の順位には、実行履歴表811の「8」の順位において示したループ個別履歴(01(loopF(2)))に基づいて生成された、反復して実行されたループFの2回目の実行の実行結果を含む退避履歴(loopF(2))が示されている。
【0125】
そして、「3」の順位には、実行履歴表811の「9」の順位において示したループ個別履歴(01(loopF(3)))に基づいて生成された、反復されたループFの3回目の実行の実行結果を含む退避履歴(loopF(3))が示されている。
【0126】
このように、本発明の実施の形態では、履歴制御部510を設けることによって、反復して実行されるループのループ個別履歴の実行結果を主記憶部130に退避させることができる。
【0127】
[ループ個別履歴の復元の具体例]
図9は、本発明の実施の形態における履歴復元部520によるループ個別履歴の復元の際の、履歴メモリ430および主記憶部130における実行履歴、ループ代表履歴および退避履歴の具体例を示す図である。ここでは、履歴メモリ430および主記憶部130は、図8において示した履歴メモリ430および主記憶部130と同様の機能であることを想定する。また、ここでは、空き容量が無い履歴メモリ430に新たな実行履歴を登録する場合には、前回の使用からの未使用期間が最も長い実行履歴を削除する(LRU:Least Recently Used)ことにより空き容量を確保することとする。さらに、ここでは、実行履歴は登録されてから一度も使用されていないことを想定し、LRUにより削除される実行履歴は、順序が最も若い実行履歴であることとする。
【0128】
図9(a)は、退避履歴に基づいてループ個別履歴が復元される前の履歴メモリ430および主記憶部130における履歴情報および退避履歴の一例である。ここには、実行履歴表831および退避履歴表832が示されている。
【0129】
実行履歴表831は、履歴復元部520がループ個別履歴を復元する前の履歴メモリ430に登録されている履歴情報を示すものである。この実行履歴表831には、図8(b)において示した実行履歴表821の空き容量に新たな実行履歴が格納された状態が示されている。この新たな実行履歴として、「9」の順位には関数Cの関数履歴00(funcC)が登録され、「10」の順位には関数Dの関数履歴00(funcD)が格納されている。
【0130】
退避履歴表832は、図8(b)において示した退避履歴表822と同様に、主記憶部130に退避された退避履歴を表すものである。
【0131】
この様な場合において、履歴検索部420により履歴メモリ430からループFに関するループ代表履歴が検索されると、履歴復元部520は退避履歴からループ個別履歴の復元を開始する。
【0132】
図9(b)は、履歴復元部520により退避履歴からループ個別履歴が復元された後の履歴メモリ430および主記憶部130における履歴情報および退避履歴の一例である。ここには、実行履歴表841および退避履歴表842が示されている。
【0133】
実行履歴表841は、履歴復元部520がループ個別履歴を復元した後の履歴メモリ430に登録されている履歴情報を示すものである。この実行履歴表841には、図9(a)で示した退避履歴表832の退避履歴からループ個別履歴が復元されて実行履歴表831の実行履歴に加えられた状態が示されている。
【0134】
この実行履歴表841では、実行履歴表831における順位「1」および「2」に対応する実行履歴00(funcA)および01(loopA(1))が消去されて、「3」乃至「6」の実行履歴の順序が「1」乃至「4」に繰り上がっている。
【0135】
そして、「5」の順位では、退避履歴表832の「1」の順位の退避履歴(loopF(1))の基となった実行履歴01(loopF(1))が復元されて登録されている。「6」および「7」の順位でも「5」と同様に、実行履歴01(loopF(2))および01(loopF(3))が復元されて登録されている。
【0136】
退避履歴表842は、ループ個別履歴が復元された後の主記憶部130に登録された退避履歴を示すものである。この退避履歴表842には、退避履歴表832において示した退避履歴は全て復元されて主記憶部130から削除され、退避履歴は1つも退避されていないことが示されている。
【0137】
このように、本発明の実施の形態では、履歴復元部520を設けることによって、主記憶部130に退避履歴として退避されたループ個別履歴を履歴メモリ430に復元することができる。
【0138】
[本発明の実施の形態における新たな実行履歴の登録例]
図10は、本発明の実施の形態における新たな実行履歴が登録されるときの履歴メモリ430における履歴情報と主記憶部130における退避履歴との具体例を示す図である。ここでは、履歴メモリ430は、データ量と無関係に12個の履歴情報が登録できる容量であることを想定する。
【0139】
また、ここでは、空き容量が無い履歴メモリ430に新たな実行履歴を登録したい場合には、前回の使用からの未使用期間が最も長い実行履歴を削除する(LRU)ことができることとする。さらにここでは、実行履歴は登録されてから一度も使用されていないことを想定し、LRUにより削除される実行履歴は、履歴メモリ430に最も早くに登録された実行履歴であることとする。
【0140】
図10(a)は、新たに登録される実行履歴を示した模式図である。ここには、新たに登録される実行履歴が登録履歴表861に示されている。なお、図10では、登録履歴表861に記されている実行履歴のうち、上方に記されている実行履歴から順に履歴メモリ430に登録されることを想定する。
【0141】
図10(b)は、従来技術を用いたデータ処理装置100における新たな実行履歴が登録されるときの履歴メモリ430における履歴情報と主記憶部130における退避履歴との具体例を示したものである。ここには、実行履歴表871と、実行履歴表872と、消去履歴表873とが示されている。
【0142】
実行履歴表871は、登録履歴表861において示した新たな実行履歴が登録される前の履歴メモリ430における実行履歴を表したものである。また、この実行履歴表871では、上方に記されている実行履歴から順に履歴メモリ430に登録されたことを想定する。
【0143】
実行履歴表872は、登録履歴表861において示した新たな実行履歴が登録された後の履歴メモリ430における実行履歴を示すものである。この実行履歴表872には、実行履歴表871の実行履歴に登録履歴表861で示した新たな実行履歴が登録された状態が示されている。
【0144】
この実行履歴表872では、実行履歴表871における上から1番目乃至5番目(00(funcE)、01(loopB(1))乃至01(loopB(4))の実行履歴が消去されている。そして、実行履歴表871における上から6番目乃至12番目の実行履歴が、実行履歴表872の1番目乃至7番目に示されている。さらに、この実行履歴表872では、登録履歴表861で示した新たな実行履歴が8番目乃至12番目に示されている。
【0145】
消去履歴表873は、登録履歴表861で示した新たな実行履歴の登録により履歴メモリ430から消去された実行履歴を表したものである。この消去履歴表873では、実行履歴表871における上から1番目乃至5番目の実行履歴が示されている。
【0146】
このように、従来技術を用いたデータ処理装置100では、履歴制御部510を備えていないため、実行履歴の実行結果を主記憶部130に退避させることができない。これにより、新たな実行履歴を履歴メモリ430に登録する場合には、前回の使用から最も未使用期間が長い実行履歴を履歴メモリ430から削除して、その代わりに新たな実行履歴を登録しなければならない。
【0147】
図10(c)は、本発明の実施の形態におけるデータ処理装置100において新たな実行履歴が登録されるときの履歴メモリ430における履歴情報と主記憶部130における退避履歴との具体例を示したものである。ここには、実行履歴表881と、退避履歴表882と、実行履歴表883と、退避履歴表884とが示されている。ここでは、主記憶部130の退避履歴を退避させる領域は、データ量と無関係に8個の退避履歴が退避できる容量であることを想定する。
【0148】
実行履歴表881は、登録履歴表861において示した新たな実行履歴が登録される前の履歴メモリ430における実行履歴を表したものである。この実行履歴表881は、図10(b)の実行履歴表871と同様のものを示しているため、詳細な説明を省略する。
【0149】
退避履歴表882は、登録履歴表861において示した新たな実行履歴が登録される前の主記憶部130における退避履歴を表したものである。この退避履歴表882では、主記憶部130に退避履歴は1つも退避されていないことが示されている。
【0150】
実行履歴表883は、登録履歴表861において示した新たな実行履歴が登録された後の履歴メモリ430における履歴情報を示すものである。この実行履歴表883には、実行履歴表881の実行履歴に登録履歴表861で示した新たな実行履歴が登録された状態が示されている。
【0151】
この実行履歴表883では、実行履歴表881における上から2番目乃至5番目のループBのループ個別履歴(01(loopB(1))乃至01(loopB(4))が履歴メモリ430から削除されている。そして、その削除されたループBのループ個別履歴の代わりに、ループ代表履歴(10(loopB))が実行履歴表883における上から2番目に示されている。また、実行履歴表881における上から6番目乃至9番目の実行履歴が、この実行履歴表883では3番目乃至6番目に示されている。
【0152】
さらに、この実行履歴表883では、実行履歴表881における上から10番目乃至12番目のループCのループ個別履歴(01(loopC(1))乃至01(loopC(3))が履歴メモリ430から削除されている。そして、その削除されたループCのループ個別履歴の代わりに、ループ代表履歴(10(loopC))が上から7番目に示されている。そして、この実行履歴表883では、登録履歴表861で示した新たな実行履歴が、8番目乃至12番目に記されている。
【0153】
退避履歴表884は、登録履歴表861において示した新たな実行履歴が登録された後の主記憶部130における退避履歴を示すものである。この退避履歴表884では、上から1番目乃至4番目にループBに関する退避履歴(loopB(1)乃至loopB(4))が示されている。さらに、ここでは、上から5番目乃至7番目にループCに関する退避履歴(loopC(1)乃至loopC(3))が示されている。
【0154】
このように、本発明の実施の形態におけるデータ処理装置100では、履歴制御部510を備えているため、退避履歴を主記憶部130に退避させ、退避履歴の基となったループ個別履歴の代わりにループ代表履歴を履歴メモリ430に登録することができる。これにより、新たな実行履歴を履歴メモリ430に登録する場合には、ループ個別履歴に基づいて退避履歴を退避させ、そしてループ個別履歴をループ代表履歴に置き換えることで履歴メモリ430空き容量を生成することができる。すなわち、本発明の実施の形態によれば、従来技術を用いたデータ処理装置100と比較して履歴メモリ430に保持される実行履歴の数を増やすことができる。
【0155】
<4.データ処理装置の処理手順例>
[本発明の実施の形態における履歴制御部510の動作例]
次に、本発明の実施の形態における履歴制御部510の処理について図面を参照して説明する。
【0156】
図11は、本発明の実施の形態における履歴制御部510によるループ個別履歴の退避処理の処理手順例を示すフローチャートである。なお、ここでは、関数履歴と、ループ個別履歴と、ループ代表履歴と、退避履歴とは、それぞれ固定長のデータであることを想定する。また、ここでは、履歴メモリ430では、関数履歴と、ループ個別履歴と、ループ代表履歴とは連続するアドレスに登録された順に格納されるものとする。さらに、主記憶部130では、退避履歴は連続するアドレスに退避された順に格納されるものとする。
【0157】
まず、先頭探索部610において、探索アドレス(radr)が「0」に設定される(ステップS911)。これにより、履歴メモリ430の履歴情報が登録される領域の先頭のデータから退避履歴の探索が開始されるようになる。
【0158】
次に、先頭探索部610において、探索アドレス(radr)から識別子が読み出される(ステップS912)。そして、読み出された識別子が、ループ個別履歴を指し示す「01」であるか否かが判断される(ステップS913)。そして、識別子が「01」でないと判断された場合には、識別子が関数履歴を指し示す「00」であるか否かが判断される(ステップS914)。
【0159】
そして、識別子が「00」でないと判断された場合には、解析対象の履歴情報は識別子が「10」のループ代表履歴であると判定される。続いて、ループ代表履歴のデータ長から算出されたループ代表履歴が保持されているアドレスの個数である代表履歴アドレス数(x)が探索アドレス(radr)に足されることによって、探索アドレス(radr)が更新される(ステップS915)。これにより、探索アドレス(radr)は、次に解析する履歴情報における識別子を指し示すアドレスとなる。
【0160】
一方、ステップS914の処理において、識別子が「00」であると判断された場合には、その識別子を示す履歴情報が関数履歴であると判定される。そして、関数履歴のデータ長から算出された関数履歴が保持されているアドレスの個数である関数履歴アドレス数(y)が探索アドレス(radr)に足されることによって、探索アドレス(radr)が更新される(ステップS916)。
【0161】
一方、ステップS913の処理において、識別子が「01」であると判断された場合には、その識別子を示す履歴情報がループ個別履歴であると判定される。そして、ループ個別履歴のデータ長から算出されたループ個別履歴が保持されているアドレスの個数である個別履歴アドレス数(z)が探索アドレス(radr)に足されることによって、探索アドレス(radr)が更新される(ステップS917)。
【0162】
次に、連続探索部620において、連続探索対象ループ開始アドレス(ex_adr)が、ステップS913で検出されたループ個別履歴における反復再利用区間の開始アドレスに設定される(ステップS918)。さらに、退避履歴開始アドレス(madr)が、退避領域管理部530から供給された最初の退避履歴を格納する開始アドレスである退避開始アドレスに設定される(ステップS919)。
【0163】
さらに、ループの回数をカウントするための連続カウンタ(rcnt)が「1」に設定される(ステップS920)。また、ループ個別履歴開始アドレス(start_adr)が、ステップS913で検出されたループ個別履歴の開始アドレスに設定される(ステップS921)。このステップS918乃至S921の一連の処理により、ステップS930における処理の準備が完了する。
【0164】
そして、ステップS913で検出されたループ個別履歴が、反復される反復再利用区間の1番目の実行結果なのか否かが判断され、反復されている場合にはループ個別履歴の実行結果を主記憶部130に退避される実行結果退避処理が行われる(ステップS930)。
【0165】
ステップS915、S916およびS930の後に、探索アドレス(radr)が履歴メモリ430の使用領域最終アドレスを超えたか否かが判断される(ステップS923)。ここでいう使用領域最終アドレスは、履歴メモリ430の履歴情報が登録される領域において、連続するアドレスに登録された順に格納された履歴情報のうち最後に登録された履歴情報が記録されている最後のアドレスである。
【0166】
そして、探索アドレス(radr)が、使用領域の最終アドレスを超えていない場合には、ステップS912に戻り処理が繰り返される。一方、最終アドレスを超えている場合には、ループ個別履歴の退避処理は終了する。
【0167】
図12は、本発明の実施の形態における履歴制御部510によるループ個別履歴の実行結果退避処理(ステップS930)の処理手順例を示すフローチャートである。
【0168】
まず、連続探索部620において、探索アドレス(radr)が履歴メモリ430の使用領域最終アドレスを超えたか否かが判断される(ステップS931)。そして、探索アドレス(radr)が使用領域の最終アドレスを超えていない場合には、探索アドレス(radr)から識別子が読み出される(ステップS932)。続いて、読み出された識別子が、ループ個別履歴を指し示す「01」であるか否かが判断される(ステップS933)。そして、識別子が「01」でないと判断された場合には、ステップS938に進む。
【0169】
一方、識別子が「01」であると判断された場合には、そのループ個別履歴に含まれる開始アドレスと、連続探索対象ループ開始アドレス(ex_adr)とが同一であるか否かが判断される(ステップS934)。そして、開始アドレスが同一でないと判断された場合には、ステップS938に進む。
【0170】
一方、開始アドレスが同一である場合には、ループ個別履歴のループカウンタ値が、連続カウンタ(rcnt)に「1」を加算した値(rcnt+1)と同じ値であるか否かが判断される(ステップS935)。そして、ループカウンタ値と「rcnt+1」とが同一でないと判断された場合には、ステップS938に進む。
【0171】
これらステップS934およびステップS935により、ステップS933で検出されたループ個別履歴は、図11のステップS913において検出されたループ個別履歴を1回目のループとするループ個別履歴であるか否かが判定される。
【0172】
例えば、ステップS934において、ループ個別履歴に含まれる開始アドレスと、連続探索対象ループ開始アドレス(ex_adr)とが異なる場合には、異なる反復再利用区間のループ個別履歴が連続していると判断される。
【0173】
また、ステップS935において、ループ個別履歴に含まれるループカウンタ値が「rcnt+1」とは異なっている場合には、同じ反復再利用区間が反復ではなく新たに1回目から実行されたと判断される。このステップS935の一例として、ループカウンタ値が「1」であり、「rcnt+1」が「5」である場合を説明する。この場合には、図11のステップS913で検出されたループ個別履歴の開始アドレスが指し示す反復再利用区間は、反復されて5回実行された後に、ステップS933で検出されたループ個別履歴の基となった実行から新たな反復になったと判断される。
【0174】
一方、ステップS935において、ループカウンタ値と「rcnt+1」とが同一であると判断された場合には、連続カウンタ(rcnt)に「1」が加算される(ステップS936)。そして、(個別履歴アドレス数(y)が探索アドレス(radr)に足されることによって、探索アドレス(radr)が更新される(ステップS937)。その後、ステップS937の処理が終わると、ステップS931に戻り処理が繰り返される。
【0175】
一方、ステップS931において、探索アドレス(radr)が使用領域最終アドレスよりも大きな値のアドレスであると判断された場合には、連続カウンタ(rcnt)の値が「1」より大きいか否かが判断される(ステップS938)。これにより、図11のステップS913で検出されたループ個別履歴は、反復された実行の一回目のループ個別履歴なのか、単独の実行のループ個別履歴なのかが判断される。そして、連続カウンタ(rcnt)の値が「1」以下であると判断された場合には、図11のステップS913で検出されたループ個別履歴は単独の実行のループ個別履歴と判定し、実行結果退避処理を終了する。
【0176】
一方、連続カウンタ(rcnt)の値が「1」より大きいと判断された場合には、ループ個別履歴が履歴メモリ430から取得される(ステップS939)。このステップS939では、ループ個別履歴取得部630により、ループ個別履歴開始アドレス(start_adr)を最初のループ個別履歴の登録開始始点として連続カウンタ(rcnt)個のループ個別履歴が履歴メモリ430から取得される。
【0177】
続いて、退避履歴転送部640により、ループ個別履歴に基づいて退避履歴が生成され、その生成された退避履歴が主記憶部130に退避履歴開始アドレス(madr)を始点として記憶される(ステップS940)。なお、ステップS940は、特許請求の範囲に記載の履歴制御手順の一例である。
【0178】
次に、ループ個別履歴消去部512により、退避履歴の基となったループ個別履歴が履歴メモリから消去される(ステップS941)。なお、ステップS941は、特許請求の範囲に記載の履歴制御手順の一例である。
【0179】
そして、ループ代表履歴登録部513により、ループ代表履歴がループ個別履歴開始アドレス(start_adr)に基づいて履歴メモリ430に登録される(ステップS942)。そして、実行結果退避処理は終了する。なお、ステップS942は、特許請求の範囲に記載の履歴制御手順の一例である。
【0180】
このように、本発明の実施の形態では、反復再利用区間のループ個別履歴のうち反復された実行に関するループ個別履歴のみを主記憶部130に退避させることができる。
【0181】
[本発明の実施の形態における履歴復元部520の動作例]
次に、本発明の実施の形態における履歴復元部520の処理について図面を参照して説明する。
【0182】
図13は、本発明の実施の形態における履歴復元部520によるループ個別履歴の復元処理の処理手順例を示すフローチャートである。なお、ここでは、図11および図12と同様に、関数履歴と、ループ個別履歴と、ループ代表履歴と、退避履歴とは、それぞれ固定長のデータであることを想定する。また、ここでは、図11および図12と同様に、履歴メモリ430では、関数履歴と、ループ個別履歴と、ループ代表履歴とは連続するアドレスに登録された順に格納されるものとする。さらに、主記憶部130では、退避履歴は連続するアドレスに退避された順に格納されるものとする。また、ここでは、プログラムの実行の開始をフローチャートの開始とし、プログラムの実行の終了をフローチャートの終了とする。
【0183】
まず、フェッチ部310およびレジスタファイル340に、関数を参照する命令およびその関数の入力値が読み出される(ステップS951)。次に、命令デコーダ320によって、関数を参照する命令がデコードされる(ステップS952)。続いて、解読(デコード)した命令が再利用命令か否かが判断される(ステップS953)。そして、デコードした命令が再利用命令でないと判断された場合には、実行部330によって、レジスタファイル340から供給される入力値に基づいてその再利用区間が実行されることによって、実行結果が出力される(ステップS954)。なお、ステップS954は、特許請求の範囲に記載の実行手順の一例である。
【0184】
一方、ステップS953の処理において、命令が再利用命令であると解読された場合には、検索要求入力部421によって、再利用区間の開始アドレスおよび入力値を用いて履歴メモリ430に履歴情報があるか否かが判断される(ステップS955)。このとき、再利用区間が反復再利用区間である場合には、開始アドレスおよび入力値に加えてループカウンタ値も用いて履歴メモリ430に履歴情報があるか否か探索される。
【0185】
そして、履歴情報が履歴メモリ430にないと判断された場合には、履歴登録部440によって、実行結果登録処理が行われる(ステップS970)。これにより、履歴メモリ430に実行履歴が登録される。
【0186】
一方、履歴情報が履歴メモリ430にあると判断された場合には、実行結果出力部422および履歴復元部520によって、実行結果出力処理が行われる(ステップS980)。これにより、実行している再利用区間の実行結果が履歴メモリ430から出力される。
【0187】
そして、ステップS954、S970およびS980の処理の後に、実行結果がレジスタファイル340に書き戻される(ステップS956)。続いて、プログラムの実行が終了したか否かが判断される(ステップS957)。そして、プログラムの実行が終了していないと判断された場合には、ステップS951に戻り処理が繰り返される。
【0188】
一方、プログラムの実行が終了したと判断された場合には、履歴復元部520によるループ個別履歴の復元処理が終了される。
【0189】
図14は、本発明の実施の形態における実行結果登録処理(ステップS970)の処理手順例を示すフローチャートである。
【0190】
まず、実行部330によって、レジスタファイル340から供給される入力値に基づいてその再利用区間が実行されることによって、実行結果が出力される(ステップS971)。次に、履歴登録部440によって、出力された実行結果を含む実行履歴を登録するための空き容量が履歴メモリ430にあるか否かが判断される(ステップS972)。なお、ステップS971は、特許請求の範囲に記載の実行手順の一例である。
【0191】
そして、実行履歴を登録するための空き容量が履歴メモリ430にないと判断された場合には、消去部460によって、前回の使用からの未使用期間が最も長い実行履歴が履歴メモリ430から1つ削除される(ステップS973)。そして、ステップS972に戻り処理が繰り返される。
【0192】
一方、実行履歴を登録するための空き容量が履歴メモリ430にあると判断された場合には、履歴登録部440により実行履歴が履歴メモリ430に登録される(ステップS974)、実行結果登録処理は終了する。
【0193】
図15は、本発明の実施の形態における実行結果出力処理(ステップS980)の処理手順例を示すフローチャートである。なお、ここでは、関数履歴の実行結果と、ループ個別履歴の実行結果と、ループ代表履歴の退避履歴位置情報とを検索出力情報と表現することとする。
【0194】
まず、実行結果出力部422において、履歴メモリ430から図13のステップS955で検索された履歴情報の検索出力情報が取得される(ステップS981)。次に、取得された検索出力情報がループ代表履歴の退避履歴位置情報であるか否かが判断される(ステップS982)。そして、取得された検索出力情報がループ代表履歴の退避履歴位置情報でないと判断された場合には、ステップS990に進む。
【0195】
一方、取得された検索出力情報がループ代表履歴の退避履歴位置情報であると判断された場合には、退避履歴取得部521によって、退避履歴位置情報が指し示す退避履歴が主記憶部130から取得される(ステップS983)。続いて、ループ個別履歴生成部522によって、退避履歴およびループ代表履歴に基づいてループ個別履歴が復元される(ステップS984)。次に、登録領域確保部523によって、履歴メモリ430からループ代表履歴が消去される(ステップS985)。その後、登録領域確保部523によって、ループ個別履歴を登録するための空き容量が履歴メモリ430にあるか否かが判断される(ステップS986)。そして、ループ個別履歴を登録するための空き容量が履歴メモリ430にないと判断された場合には、登録領域確保部523によって、前回の使用からの未使用期間が最も長い実行履歴が履歴メモリ430から1個削除される(ステップS987)。そして、ステップS986に戻り、処理が繰り返される。
【0196】
一方、ステップS986の処理において、ループ個別履歴を登録するための空き容量が履歴メモリ430にあると判断された場合には、ループ個別履歴登録部524によって、復元されたループ個別履歴が履歴メモリ430に登録される(ステップS988)。続いて、実行結果出力部422によって、復元されたループ個別履歴が検索される(ステップS989)。
【0197】
その後、検索された実行結果に基づいて実行結果が出力される(ステップS990)。そして、実行結果出力処理は終了する。
【0198】
このように、本発明の実施の形態では、主記憶部130に退避履歴として退避されたループ個別履歴を履歴メモリ430に復元して、その復元したループ個別履歴の実行結果を再利用することができる。
【0199】
これまでに示してきたように、本発明の実施の形態によれば、反復再利用区間のループ個別履歴の実行結果を主記憶部130に退避させることができる。これにより、実行結果を退避させない従来技術の場合と比べて履歴メモリ430に保持される履歴情報の数を増やすことができる。また、退避させた実行結果も実行結果の検索対象とすることができるため、その退避させた実行結果を用いて実行結果の再利用をすることができる。
【0200】
また、本発明の実施の形態によれば、従来技術によるデータ処理装置100と比較して、履歴メモリ430から有効な実行履歴が削除されることによる値再利用の効率の低下を防止することができる。さらに、本発明の実施の形態によれば、従来技術と比較して少ない容量の履歴メモリ430でも同等の効果が生じるため、履歴メモリ430を大きい容量とすることに伴う実行履歴の検索時間の増加による値再利用の効率の低下を防止することができる。
【0201】
また、本発明の実施の形態は、従来技術と比べて履歴メモリ430に保持される履歴情報の数を増やすことができるため、プログラムの投機実行などの場合において、特に顕著な効果が得られると考えられる。
【0202】
なお、本発明の実施の形態は本発明を具現化するための一例を示したものであり、本発明の実施の形態において明示したように、本発明の実施の形態における事項と、特許請求の範囲における発明特定事項とはそれぞれ対応関係を有する。同様に、特許請求の範囲における発明特定事項と、これと同一名称を付した本発明の実施の形態における事項とはそれぞれ対応関係を有する。ただし、本発明は実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において実施の形態に種々の変形を施すことにより具現化することができる。
【0203】
例えば、本発明の実施の形態においては、主記憶部130に退避された実行結果を再利用する際に、退避履歴からループ個別履歴を復元して履歴メモリ430に登録し、その登録されたループ個別履歴から実行結果を出力する例を説明した。しかしながら、これに限定されるものではなく、主記憶部130に退避された実行結果を再利用する際に、ループ履歴を復元しないで実行結果を再利用する場合も考えられる。
【0204】
また、本発明の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。この記録媒体として、例えば、CD(Compact Disc)、MD(MiniDisc)、DVD(Digital Versatile Disk)、メモリカード、ブルーレイディスク(Blu-ray Disc(登録商標))等を用いることができる。
【符号の説明】
【0205】
100 データ処理装置
120 バス
130 主記憶部
200 一次キャッシュ
210 命令キャッシュ
220 データキャッシュ
300 プロセッサコア
310 フェッチ部
320 命令デコーダ
330 実行部
340 レジスタファイル
400 履歴管理部
410 履歴対象データ保持部
420 履歴検索部
421 検索要求入力部
422 実行結果出力部
430 履歴メモリ
440 履歴登録部
450 履歴メモリ容量管理部
460 消去部
500 履歴変換部
510 履歴制御部
512 ループ個別履歴消去部
513 ループ代表履歴登録部
520 履歴復元部
521 退避履歴取得部
522 ループ個別履歴生成部
523 登録領域確保部
524 ループ個別履歴登録部
530 退避領域管理部
600 退避履歴生成部
610 先頭探索部
620 連続探索部
630 ループ個別履歴取得部
640 退避履歴転送部
650 ループ代表履歴生成部

【特許請求の範囲】
【請求項1】
命令区間を実行して実行結果を出力する実行部と、
前記命令区間のうち実行結果が再び利用される再利用区間の区間識別情報と入力値と実行結果とを実行履歴として保持し、前記保持した実行結果が再び利用される場合には前記区間識別情報および前記入力値に基づいて前記実行履歴が検索される履歴メモリと、
前記再利用区間のうち実行が反復される反復再利用区間の各回の前記実行結果を前記履歴メモリから退避させるための退避履歴を保持する退避履歴保持部と、
前記反復再利用区間の前記実行履歴に基づいて前記退避履歴を前記退避履歴保持部に供給し、前記退避履歴の供給の際に前記退避履歴の基となった前記実行履歴を前記履歴メモリから消去して前記退避履歴を指し示す情報を含む代表履歴を前記履歴メモリに保持させる履歴制御部と
を備えるデータ処理装置。
【請求項2】
前記履歴制御部は、前記履歴メモリに保持させる新たな前記実行履歴のデータ量が前記履歴メモリの空き容量よりも大きい場合には前記退避履歴を前記退避履歴保持部に供給する請求項1記載のデータ処理装置。
【請求項3】
前記退避履歴および前記代表履歴に基づいて前記実行履歴を前記履歴メモリに復元する履歴復元部と、
前記区間識別情報および前記入力値に基づいて前記復元された前記実行履歴を前記履歴メモリから検索した場合には前記復元された前記実行履歴に基づいて前記実行結果を出力する履歴検索部と
をさらに備える請求項1記載のデータ処理装置。
【請求項4】
前記履歴検索部は、前記区間識別情報および前記入力値に基づいて検索された前記実行履歴が前記代表履歴であった場合には前記復元部に前記実行履歴の復元を開始させる請求項3記載のデータ処理装置。
【請求項5】
前記履歴制御部は、前記退避履歴の個数を示す退避カウントをさらに含む前記代表履歴を生成し、
前記履歴復元部は、前記代表履歴における前記退避履歴を指し示す情報および前記退避カウントに基づいて前記退避履歴を前記退避履歴保持部から抽出して前記実行履歴を復元する
請求項3記載のデータ処理装置。
【請求項6】
前記実行部は、前記再利用区間の前記実行結果を供給する場合には前記反復再利用区間の前記実行履歴と前記反復再利用区間以外の前記実行履歴と前記代表履歴とを識別するための識別子をさらに出力し、
前記履歴メモリは、前記識別子を前記実行履歴としてさらに保持し、
前記履歴制御部は、前記識別子を用いて識別した前記実行履歴に基づいて前記退避履歴を供給し、前記識別子をさらに含む前記代表履歴を生成する
請求項1記載のデータ処理装置。
【請求項7】
前記反復再利用区間はサブルーチンであり、前記実行部は、前記サブルーチンの開始アドレスを前記区間識別情報として出力する請求項1記載のデータ処理装置。
【請求項8】
前記反復再利用区間はループであり、前記実行部は、前記ループの開始アドレスを前記区間識別情報として出力する請求項1記載のデータ処理装置。
【請求項9】
前記実行部は、前記反復再利用区間の前記実行結果を出力する場合には何回目の実行による前記実行結果であるかを示すカウンタ値をさらに出力し、
前記履歴メモリは、前記カウンタ値を前記実行履歴としてさらに保持し、
前記履歴制御部は、前記カウンタ値を含む前記退避履歴を出力する
請求項8記載のデータ処理装置。
【請求項10】
実行結果が再び利用される再利用区間の区間識別情報と入力値と実行結果とを実行履歴として保持し、前記保持した実行結果が再び利用される場合には前記区間識別情報および前記入力値に基づいて前記実行履歴が検索される履歴メモリと、
前記再利用区間のうち実行が反復される反復再利用区間の各回の前記実行結果を退避履歴として前記履歴メモリから外部の記憶部に退避させ、前記退避の際に前記退避履歴の基となった前記実行履歴を前記履歴メモリから消去して前記退避履歴を指し示す情報を含む代表履歴を前記履歴メモリに保持させる履歴制御部と
を備える履歴保存装置。
【請求項11】
命令区間のうち実行結果が再び利用される再利用区間の区間識別情報と入力値と実行結果とを実行履歴として保持し、前記保持した実行結果が再び利用される場合には前記区間識別情報および前記入力値に基づいて前記実行履歴が検索される履歴メモリと、
前記再利用区間のうち実行が反復される反復再利用区間の各回の前記実行結果を前記履歴メモリから退避させるための退避履歴を保持する退避履歴保持部と
を備えるコンピュータにおけるデータ処理方法であって、
前記命令区間を実行して実行結果を出力する実行手順と、
前記反復再利用区間の前記実行履歴に基づいて前記退避履歴を前記退避履歴保持部に
供給し、前記退避履歴の供給の際に前記退避履歴の基となった前記実行履歴を前記履歴メモリから消去して前記退避履歴を指し示す情報を含む代表履歴を前記履歴メモリに保持させる履歴制御手順と
を備えるデータ処理方法。
【請求項12】
命令区間のうち実行結果が再び利用される再利用区間の区間識別情報と入力値と実行結果とを実行履歴として保持し、前記保持した実行結果が再び利用される場合には前記区間識別情報および前記入力値に基づいて前記実行履歴が検索される履歴メモリと、
前記再利用区間のうち実行が反復される反復再利用区間の各回の前記実行結果を前記履歴メモリから退避させるための退避履歴を保持する退避履歴保持部と
を備えるコンピュータにおけるプログラムであって、
前記命令区間を実行して実行結果を出力する実行手順と、
前記反復再利用区間の前記実行履歴に基づいて前記退避履歴を前記退避履歴保持部に
供給し、前記退避履歴の供給の際に前記退避履歴の基となった前記実行履歴を前記履歴メモリから消去して前記退避履歴を指し示す情報を含む代表履歴を前記履歴メモリに保持させる履歴制御手順と
をコンピュータに実行させるプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate