(57)【要約】【課題】実行結果の再利用による再利用区間の処理時間を短縮させる。【解決手段】履歴メモリ４３０は、関数の区間識別情報ごとに、その関数の入力値および実行結果を保持する。入力値設定命令アドレステーブル５２０は、関数の呼出し命令の前に実行される入力値設定命令のアドレスを、その関数の区間識別情報ごとに保持する。アドレス判定部５１０は、プログラムカウンタ３５０からの命令アドレスが、入力値設定命令アドレステーブル５２０における命令アドレスと一致するときに、その命令アドレスに対応する区間識別情報を実行データ保持部４４０に出力する。これとともに、アドレス判定部５１０は、実行部３３０から出力される入力値を実行データ保持部４４０に保持させる。実行履歴検索部４１０は、実行データ保持部４４０における区間識別情報および入力値に基づいて履歴メモリ４３０における実行結果を検索する。【選択図】図２
2011039858.tif 000002
【特許請求の範囲】
【請求項１】
複数の命令区間が含まれる命令列に基づく処理を実行部と、
前記命令区間を呼び出すための呼出し命令が実行される前に前記命令区間の入力値を設定するための入力値設定命令のアドレスである入力値設定命令アドレスを前記命令区間の区間識別情報ごとに保持する入力値設定命令アドレステーブルと、
前記区間識別情報ごとに前記命令区間における入力値および実行結果を関連付けて実行履歴として保持する履歴メモリと、
前記入力値設定命令アドレスにより特定された前記入力値設定命令から前記呼出し命令までの命令群のうちの前記入力値設定命令に基づいて前記実行部から出力された入力値と前記入力値設定命令アドレスに対応する前記区間識別情報とを用いて前記実行履歴における前記実行結果を検索する実行履歴検索部と、
前記入力値設定命令アドレスによって特定される前記呼出し命令が実行されるときに前記実行履歴検索部により前記実行結果が抽出された場合には前記抽出された実行結果を前記実行部に出力する実行結果出力部と
を具備するデータ処理装置。
【請求項２】
前記入力値設定命令アドレステーブルは、前記複数の命令区間のうち複数回実行される命令区間である再利用区間の入力値を設定するための前記入力値設定命令の前記入力値設定命令アドレスを前記再利用区間の前記区間識別情報ごとに保持し、
実行履歴検索部は、前記再利用区間における前記命令群のうちの前記入力値設定命令に基づいて前記実行部から出力された前記入力値と前記入力値設定命令アドレスに対応する前記区間識別情報とを用いて前記再利用区間における前記実行結果を検索し、
実行結果出力部は、前記入力値設定命令アドレスによって特定される前記再利用区間の前記呼出し命令が実行されるときに前記実行履歴検索部により前記実行履歴における前記再利用区間の前記実行結果が抽出された場合には前記抽出された実行結果を前記実行部に出力する
請求項１記載のデータ処理装置。
【請求項３】
前記入力値設定命令に基づいて設定された入力値のうち前記呼出し命令により呼び出された前記命令区間において参照された入力値に対応する前記入力値設定命令アドレスと前記区間識別情報とを前記入力値設定命令アドレステーブルに出力する入力値設定命令アドレス出力部をさらに具備する請求項１記載のデータ処理装置。
【請求項４】
前記入力値設定命令アドレス出力部は、前記命令区間において参照された複数の入力値に対応する前記入力値設定命令のうち最先の前記入力値設定命令の前記入力値設定命令アドレスと前記区間識別情報である前記命令区間の先頭アドレスとを出力する請求項３記載のデータ処理装置。
【請求項５】
前記入力値設定命令アドレステーブルは、前記命令区間における複数の入力値を設定するための入力値設定命令のうち最先の前記入力値設定命令の前記入力値設定命令アドレスを前記区間識別情報ごとに保持する請求項１記載のデータ処理装置。
【請求項６】
前記実行部は、前記実行履歴検索部により前記実行履歴における前記実行結果が前記履歴メモリから抽出されない場合には前記入力値設定命令アドレスによって特定された前記命令区間における処理を実行し、
前記実行履歴検索部は、前記入力値設定命令に基づいて前記実行部から出力された入力値と前記実行部により実行された実行結果と前記入力値設定命令アドレスに対応する前記区間識別情報とを前記履歴メモリに保持させる
請求項１記載のデータ処理装置。
【請求項７】
前記入力値設定命令アドレステーブルは、前記命令区間である関数の前記入力値設定命令の前記入力値設定命令アドレスを前記区間識別情報である前記関数の先頭アドレスごとに保持し、
前記履歴メモリは、前記関数の先頭アドレスごとに前記関数における入力値および実行結果を関連付けて前記実行履歴として保持し、
前記実行履歴検索部は、前記命令群のうちの前記入力値設定命令に基づいて前記実行部から出力された前記関数の前記入力値と前記入力値設定命令アドレスに対応する前記関数の先頭アドレスとを用いて前記実行結果を検索し、
前記実行結果出力部は、前記入力値設定命令アドレスによって特定される前記関数の前記呼出し命令が実行されるときに前記実行履歴検索部により前記関数の前記実行結果が抽出された場合には前記抽出された実行結果を前記実行部に出力する
請求項１記載のデータ処理装置。
【請求項８】
プログラムのうち複数回実行される命令区間における処理の実行ごとの入力値が互いに一致する度合いを示す再利用度を前記命令区間の使用態様に基づいて前記命令区間ごとに生成する再利用度生成部と、
前記複数の命令区間のうち前記再利用度に基づいて抽出された再利用区間における入力値を設定するための入力値設定命令の入力値設定命令アドレスと前記再利用区間を識別するための区間識別情報とが関連付けられた再利用区間情報を生成する再利用区間情報生成部と
を具備するプログラム解析処理装置。
【請求項９】
複数の命令区間が含まれる命令列に基づく処理を実行する実行部と、前記命令区間を呼び出すための呼出し命令の実行前に前記命令区間の入力値を設定するための入力値設定命令の入力値設定命令アドレスを前記命令区間の区間識別情報ごとに保持する入力値設定命令アドレステーブルと、前記区間識別情報ごとに前記命令区間における入力値および実行結果を関連付けて実行履歴として保持する履歴メモリとを備えるデータ処理装置におけるデータ処理方法であって、
前記入力値設定命令アドレスにより特定された前記入力値設定命令から前記呼出し命令までの命令群のうちの前記入力値設定命令に基づいて前記実行部から出力された入力値と前記入力値設定命令アドレスに対応する前記区間識別情報とを用いて前記実行履歴における前記実行結果を検索する実行履歴検索手順と、
前記入力値設定命令アドレスによって特定される前記呼出し命令が実行されるときに前記実行履歴検索手順により前記実行結果が抽出された場合には前記抽出された実行結果を前記実行部に出力する実行結果出力手順と
を具備するデータ処理方法。
【請求項１０】
プログラムのうち複数回実行される命令区間の各々の実行結果が互いに一致する度合いを示す再利用度を前記命令区間の使用態様に基づいて前記命令区間ごとに生成する再利用度生成手順と、
前記複数の命令区間のうち前記再利用度に基づいて抽出された再利用区間における入力値を設定するための入力値設定命令の入力値設定命令アドレスと前記再利用区間を識別するための区間識別情報とが関連付けられた再利用区間情報を生成する再利用区間情報生成手順と
を具備するプログラム解析処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置に関し、特に複数回実行される命令区間の実行結果を再利用するデータ処理装置およびその処理方法、ならびに、このデータ処理装置に対応するプログラムに変換するデータ変換処理装置およびその処理方法に関する。
【背景技術】
【０００２】
従来からＣＰＵ（Central Processing Unit）などのマイクロプロセッサにおいて、演算処理の高速化技術に関する研究開発が盛んに行われている。この演算処理の高速化技術として、値再利用技術という手法が考案されている。例えば、この値再利用技術をループの命令区間に適用したデータ処理装置が提案されている（例えば、特許文献１参照。）。
【０００３】
この値再利用技術では、プログラムの一部分である命令区間のうち、その命令区間における入力値が同じであれば実行結果も同一となる命令区間における入力値と、その実行結果である出力値とを関連付けて再利用表に登録する。そして、同じ命令区間を再度実行する場合に、同一の入力値が再利用表に登録されていれば、その入力値に対応する出力値を再利用表から出力することによって、過去に実行された命令区間の実行結果を再利用する。このように、複数回実行される命令区間のうち、過去に実行された命令区間の実行結果を再利用することができる命令区間をここでは再利用区間という。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第３８５５０７６号公報（図１）
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述の従来技術では、再利用区間における処理が再度実行されたときに、その再利用区間の入力値が再利用表に登録されていれば、その再利用区間の処理を省略することができるため、再利用区間の実行に要する実行時間を短縮することができる。しかしながら、この場合、再利用区間の呼出し命令の実行後において入力値を参照する命令が実行されるまでは、その再利用区間の入力値が再利用表に登録されているか否かの判断を行うことができない。このように、入力値が使用されるまで再利用表の検索を行うことができないことから、実行結果の再利用によって短縮することができる期間が制限されてしまう。
【０００６】
本発明はこのような状況に鑑みてなされたものであり、実行結果の再利用による再利用区間の処理時間を短縮させることを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、上記課題を解決するためになされたものであり、その第１の側面は、複数の命令区間が含まれる命令列に基づく処理を実行部と、上記命令区間を呼び出すための呼出し命令が実行される前に上記命令区間の入力値を設定するための入力値設定命令のアドレスである入力値設定命令アドレスを上記命令区間の区間識別情報ごとに保持する入力値設定命令アドレステーブルと、上記区間識別情報ごとに上記命令区間における入力値および実行結果を関連付けて実行履歴として保持する履歴メモリと、上記入力値設定命令アドレスにより特定された上記入力値設定命令から上記呼出し命令までの命令群のうちの上記入力値設定命令に基づいて上記実行部から出力された入力値と上記入力値設定命令アドレスに対応する上記区間識別情報とを用いて上記実行履歴における上記実行結果を検索する実行履歴検索部と、上記入力値設定命令アドレスによって特定される上記呼出し命令が実行されるときに上記実行履歴検索部により上記実行結果が抽出された場合には上記抽出された実行結果を上記実行部に出力する実行結果出力部とを具備するデータ処理装置およびその処理方法である。これにより、命令区間の実行前までに、入力値設定命令アドレステーブルにおける入力値設定命令アドレスにより特定された入力値設定命令に基づく入力値と、その入力値設定命令アドレスに関連付けられた区間識別情報とを用いて履歴メモリにおける実行結果を検索し、入力値設定命令アドレスによって特定される呼出し命令が実行されるときに、実行履歴検索部により実行結果が抽出された場合には、その実行結果を実行部に出力させるという作用をもたらす。
【０００８】
また、この第１の側面において、上記入力値設定命令アドレステーブルは、上記複数の命令区間のうち複数回実行される命令区間である再利用区間の入力値を設定するための上記入力値設定命令の上記入力値設定命令アドレスを上記再利用区間の上記区間識別情報ごとに保持し、実行履歴検索部は、上記再利用区間における上記命令群のうちの上記入力値設定命令に基づいて上記実行部から出力された上記入力値と上記入力値設定命令アドレスに対応する上記区間識別情報とを用いて上記再利用区間における上記実行結果を検索し、実行結果出力部は、上記入力値設定命令アドレスによって特定される上記再利用区間の上記呼出し命令が実行されるときに上記実行履歴検索部により上記実行履歴における上記再利用区間の上記実行結果が抽出された場合には上記抽出された実行結果を上記実行部に出力するようにしてもよい。これにより、複数回実行される命令区間である再利用区間の呼出し命令の実行前までに、入力値設定命令アドレスにより特定される入力値設定命令により取得される入力値と、その入力値設定命令アドレスに対応する区間識別情報とを用いて履歴メモリにおける実行結果を検索し、入力値設定命令アドレスによって特定される再利用区間の呼出し命令が実行されるときに、実行履歴検索部により実行結果が抽出された場合には、その実行結果を実行部に出力させるという作用をもたらす。
【０００９】
また、この第１の側面において、上記入力値設定命令に基づいて設定された入力値のうち上記呼出し命令により呼び出された上記命令区間において参照された入力値に対応する上記入力値設定命令アドレスと上記区間識別情報とを上記入力値設定命令アドレステーブルに出力する入力値設定命令アドレス出力部をさらに具備するようにしてもよい。これにより、入力値設定命令アドレス出力部により、呼出し命令前までの入力値設定命令により設定された入力値のうち、その呼出し命令の命令区間において参照された入力値が設定された入力値設定命令の入力値設定命令アドレスと区間識別情報とを出力させるという作用をもたらす。この場合において、上記入力値設定命令アドレス出力部は、上記命令区間において参照された複数の入力値に対応する上記入力値設定命令のうち最先の上記入力値設定命令の上記入力値設定命令アドレスと上記区間識別情報である上記命令区間の先頭アドレスとを出力するようにしてもよい。これにより、入力値設定命令アドレス出力部により、関数の命令区間において参照された複数の入力値を設定する入力値設定命令のうち、最先の入力値設定命令の入力値設定命令アドレスとその命令区間の先頭アドレスとを出力させるという作用をもたらす。
【００１０】
また、この第１の側面において、上記入力値設定命令アドレステーブルは、上記命令区間における複数の入力値を設定するための入力値設定命令のうち最先の上記入力値設定命令の上記入力値設定命令アドレスを上記区間識別情報ごとに保持するようにしてもよい。これにより、入力値設定命令アドレステーブルにより、命令区間における複数の入力値設定命令のうち、最先に実行された入力値設定命令の入力値設定命令アドレスを、区間識別情報ごとに保持させるという作用をもたらす。
【００１１】
また、この第１の側面において、上記実行部は、上記実行履歴検索部により上記実行履歴における上記実行結果が上記履歴メモリから抽出されない場合には上記入力値設定命令アドレスによって特定された上記命令区間における処理を実行し、上記実行履歴検索部は、上記入力値設定命令に基づいて上記実行部から出力された入力値と上記実行部により実行された実行結果と上記入力値設定命令アドレスに対応する上記区間識別情報とを上記履歴メモリに保持させるようにしてもよい。これにより、実行履歴検索部において実行結果が履歴メモリから抽出されない場合には、入力値設定命令アドレスによって特定された命令区間における処理を実行部により実行して、実行履歴検索部により、入力値設定命令に基づいて取得された入力値と、実行部により実行された命令区間における処理の実行結果と、入力値設定命令アドレステーブルにおける入力値設定命令アドレスに対応する区間識別情報とを履歴メモリに保持させるという作用をもたらす。
【００１２】
また、この第１の側面において、上記入力値設定命令アドレステーブルは、上記命令区間である関数の上記入力値設定命令の上記入力値設定命令アドレスを上記区間識別情報である上記関数の先頭アドレスごとに保持し、上記履歴メモリは、上記関数の先頭アドレスごとに上記関数における入力値および実行結果を関連付けて上記実行履歴として保持し、上記実行履歴検索部は、上記命令群のうちの上記入力値設定命令に基づいて上記実行部から出力された上記関数の上記入力値と上記入力値設定命令アドレスに対応する上記関数の先頭アドレスとを用いて上記実行結果を検索し、上記実行結果出力部は、上記入力値設定命令アドレスによって特定される上記関数の上記呼出し命令が実行されるときに上記実行履歴検索部により上記関数の上記実行結果が抽出された場合には上記抽出された実行結果を上記実行部に出力するようにしてもよい。これにより、関数の呼出し命令の実行前までに、入力値設定命令アドレスにより特定された入力値設定命令に基づいて設定された入力値と、その入力値設定命令アドレスに関連付けられた区間識別情報とを用いて履歴メモリにおける関数の実行結果を検索し、入力値設定命令アドレスによって特定される呼出し命令が実行されるときに、実行履歴検索部により実行結果が抽出された場合には、その関数の実行結果を実行部に出力させるという作用をもたらす。
【００１３】
また、本発明の第２の側面は、プログラムのうち複数回実行される命令区間における処理の実行ごとの入力値が互いに一致する度合いを示す再利用度を上記命令区間の使用態様に基づいて上記命令区間ごとに生成する再利用度生成部と、上記複数の命令区間のうち上記再利用度に基づいて抽出された再利用区間における入力値を設定するための入力値設定命令の入力値設定命令アドレスと上記再利用区間を識別するための区間識別情報とが関連付けられた再利用区間情報を生成する再利用区間情報生成部とを具備するプログラム解析処理装置およびその処理方法である。これにより、複数回実行される命令区間の各々の実行結果が互いに一致する度合いを示す再利用度に基づいて複数の命令区間のうち再利用区間が抽出されて、再利用区間情報生成部により、その再利用区間における入力値設定命令の入力値設定命令アドレスと、再利用区間の区間識別情報とが関連付けられた再利用区間情報を生成させるという作用をもたらす。
【発明の効果】
【００１４】
本発明によれば、実行結果の再利用による再利用区間の処理時間を短縮させることができるという優れた効果を奏し得る。
【図面の簡単な説明】
【００１５】
【図１】本発明の第１の実施の形態におけるデータ処理装置の一構成例を示すブロック図である。
【図２】本発明の第１の実施の形態におけるデータ処理部３００および実行結果再利用処理部４００の一構成例を示すブロック図である。
【図３】本発明の第１の実施の形態における履歴メモリ４３０のデータ構造の一例を示す概念図である。
【図４】本発明の第１の実施の形態におけるデータ処理装置１００による１回目の関数の実行における区間識別情報および実行履歴の登録手法を示す概念図である。
【図５】本発明の第１の実施の形態におけるデータ処理装置１００による実行結果再利用処理に関する手法の一例を示す概念図である。
【図６】実行結果再利用処理により関数の処理時間が短縮される例を示す概念図である。
【図７】本発明の第１の実施の形態におけるデータ処理装置１００による２回目以降の関数の実行における実行履歴の登録手法を示す概念図である。
【図８】本発明の第１の実施の形態におけるデータ処理装置１００による実行結果再利用方法の処理手順の一例を示すフローチャートである。
【図９】本発明の第２の実施の形態におけるプログラム解析処理装置の機能構成例を示すブロック図である。
【図１０】本発明の第２の実施の形態におけるプログラム解析処理装置６００のプログラム解析処理方法の処理手順の一例を示すフローチャートである。
【図１１】本発明の第３の実施の形態におけるデータ処理装置１００の一構成例を示すブロック図である。
【図１２】本発明の第３の実施の形態におけるデータ処理装置１００による入力値設定命令アドレステーブル８２０に対する入力値設定命令アドレスおよび区間識別情報の登録例を示す概念図である。
【図１３】本発明の第３の実施の形態におけるデータ処理装置１００による実行結果再利用方法の処理手順の一例を示すフローチャートである。
【図１４】本発明の第３の実施形態におけるデータ処理装置１００による実行履歴検索処理（ステップＳ９６０）の処理手順例を示すフローチャートである。
【図１５】本発明の第４の実施の形態におけるデータ処理装置１００の外部に履歴データ記憶部を設けた場合における集積回路の一構成例を示すブロック図である。
【図１６】本発明の第４の実施の形態におけるデータ処理装置１００による履歴データ転送方法の処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１６】
以下、本発明を実施するための形態（以下、実施の形態と称する）について説明する。説明は以下の順序により行う。
１．第１の実施の形態（データ処理制御：入力値設定命令アドレスの事前登録の例）
２．第２の実施の形態（プログラム解析処理：入力値設定命令アドレスの抽出例）
３．第３の実施の形態（データ処理制御：プログラムの実行中における入力値設定命令アドレスの登録例）
４．第４の実施の形態（履歴データ転送制御：プログラム実行ごとにデータ処理装置の外部から履歴データを履歴メモリに読み出す例）
【００１７】
＜１．第１の実施の形態＞
［データ処理装置の構成例］
図１は、本発明の第１の実施の形態におけるデータ処理装置の一構成例を示すブロック図である。ここでは、集積回路を構成するデータ処理装置１００と、バス１２０と、主記憶部１３０とが示されている。この集積回路は、データ処理装置１００において、バス１２０を介して読み出される主記憶部１３０からの命令列に従って、処理を実行するものである。
【００１８】
データ処理装置１００は、一次キャッシュ２００と、データ処理部３００と、実行結果再利用処理部４００と、検索開始命令アドレス管理部５００とを備える。なお、データ処理装置１００は、特許請求の範囲に記載のデータ処理装置の一例である。
【００１９】
一次キャッシュ２００は、バス１２０を介して主記憶部１３０から命令およびデータを読み出す際、または、書き込む際の処理により生じる遅延時間を軽減するためのメモリである。この一次キャッシュ２００は、例えば、ＤＲＡＭ（Dynamic Random Access Memory）により実現される。
【００２０】
この一次キャッシュ２００は、命令キャッシュ２１０およびデータキャッシュ２２０を備える。命令キャッシュ２１０は、主記憶部１３０から読み出された過去の命令を一時的に保持するものである。この命令キャッシュ２１０は、データ処理部３００からの要求に従って、その保持された命令を、命令線２１９を介してデータ処理部３００に出力する。
【００２１】
この命令キャッシュ２１０は、データ処理部３００から要求された命令を保持している場合には、その保持されている複数の命令のうち、その要求された命令をデータ処理部３００に出力する。一方、データ処理部３００から要求された命令を保持していない場合には、命令キャッシュ２１０は、データ処理部３００によって主記憶部１３０から読み出された命令を保持する。
【００２２】
データキャッシュ２２０は、主記憶部１３０から読み出された過去のデータを一時的に保持するものである。このデータキャッシュ２２０は、データ処理部３００からの要求に従って、その保持されたデータを、データ線２２９を介してデータ処理部３００に出力する。
【００２３】
このデータキャッシュ２２０は、データ処理部３００から要求されたデータが保持されている場合には、その保持されている複数のデータのうち、その要求されたデータをデータ処理部３００に出力する。一方、データ処理部３００から要求されたデータが保持されていない場合には、データキャッシュ２２０は、データ処理部３００により主記憶部１３０から読み出されたデータを保持する。また、データキャッシュ２２０は、主記憶部１３０に書き戻すためのデータがデータ処理部３００から供給された場合には、そのデータを保持する。
【００２４】
データ処理部３００は、主記憶部１３０から読み出された命令に基づく処理を実行するものである。このデータ処理部３００は、例えば、命令キャッシュ２１０を介して主記憶部１３０から命令を読み出して、その読み出された命令に従って、データキャッシュ２２０を介して主記憶部１３０に記憶されたデータを読み出す。また、データ処理部３００は、例えば、その読み出されたデータを用いて、演算命令に基づく演算処理を実行する。
【００２５】
また、データ処理部３００は、例えば、関数の命令区間における処理を実行する場合には、データキャッシュ２２０からの関数における引数の入力値を用いて、その関数の演算処理を実行して、その演算処理の結果である実行結果をデータキャッシュ２２０に出力する。このとき、データ処理部３００は、その関数における入力値および実行結果を実行結果再利用処理部４００に出力する。このデータ処理部３００は、例えば、プロセッサコアにより実現される。
【００２６】
実行結果再利用処理部４００は、過去に実行された命令区間の入力値と、再び実行される命令区間の入力値とが一致した場合には、その過去に実行された命令区間の実行結果を再利用する実行結果再利用処理を実行するものである。ここでは、複数回実行される命令区間のうち、過去に実行された命令区間の実行結果を再利用することができる命令区間を再利用区間という。すなわち、この再利用区間とは、複数回実行される命令区間のうち、命令区間における入力値が同じであれば実行結果も同じとなる命令区間のことをいう。
【００２７】
この実行結果再利用処理部４００は、複数回実行される再利用区間における入力値および実行結果を実行履歴として保持する。また、実行結果再利用処理部４００は、再び実行される再利用区間の入力値と、その保持された実行履歴における入力値とが同一である場合には、その保持された実行履歴における実行結果をデータ処理部３００に出力する。これとともに、実行結果再利用処理部４００は、その再利用区間における処理を省略（スキップ）するための指示をデータ処理部３００に通知する。
【００２８】
この実行結果再利用処理部４００は、例えば、再利用区間である関数の引数の入力値と、その保持された実行履歴における入力値とが同一である場合には、その保持された実行履歴における実行結果をデータ処理部３００に出力する。これとともに、実行結果再利用処理部４００は、その関数における処理をスキップするための指示をデータ処理部３００に通知する。
【００２９】
検索開始命令アドレス管理部５００は、実行結果再利用処理部４００における実行履歴の検索を開始する基準となる命令アドレスを管理するものである。この検索開始命令アドレス管理部５００は、実行結果再利用処理部４００において保持された実行履歴における入力値と、再利用区間の実行のために設定された入力値との比較を開始するタイミングを示す基準として命令アドレスを再利用区間ごとに管理する。また、検索開始命令アドレス管理部５００は、その管理された命令アドレスに基づいて、実行結果再利用処理部４００に実行履歴の検索の開始を指示する。
【００３０】
バス１２０は、データ処理装置１００と主記憶部１３０との間の通信を行うものである。このバス１２０は、主記憶部１３０に記憶されているプログラムをデータ処理装置１００に転送する。また、このバス１２０は、データ処理装置１００から出力されたデータを主記憶部１３０に転送する。
【００３１】
主記憶部１３０は、データ処理装置１００に処理を実行させるためのプログラムを記憶するものである。ここでは、このプログラムは、ＡＢＩ（Application Binary Interface）の規定に基づいて生成されたプログラムであることを想定する。このプログラムは、例えば、ＳＰＡＲＣ（Scalable Processor Architecture）＿ＡＢＩに基づいて生成されるものである。このようなプログラムにおいては、データ処理装置１００によって、関数における入力値および実行結果が格納される場所を特定することができるため、実行結果の再利用を実現することができる。
【００３２】
［データ処理部３００および実行結果再利用処理部４００の構成例］
図２は、本発明の第１の実施の形態におけるデータ処理部３００および実行結果再利用処理部４００の一構成例を示すブロック図である。
【００３３】
データ処理部３００は、フェッチ部３１０と、命令デコーダ３２０と、実行部３３０と、レジスタファイル３４０とを備える。この実行部３３０は、ロードユニット３３１と、入力選択部３３２と、演算回路３３３と、ストアユニット３３４と、プログラムカウンタ３５０とを備える。
【００３４】
また、実行結果再利用処理部４００は、実行履歴検索部４１０と、実行結果出力部４２０と、履歴メモリ４３０とを備える。さらに、検索開始命令アドレス管理部５００は、アドレス判定部５１０および入力値設定命令アドレステーブル５２０を備える。
【００３５】
フェッチ部３１０は、命令キャッシュ２１０に保持されている命令、または、主記憶部１３０に記憶されている命令を、命令線２１９を介して読み出すものである。このフェッチ部３１０は、プログラムカウンタ３５０から出力される命令アドレスに従って、命令キャッシュ２１０から命令を読み出す。
【００３６】
このフェッチ部３１０は、例えば、再利用区間である関数を呼び出すための呼出し命令の前に、その関数における引数の入力値を設定するための入力値設定命令を読み出す。そして、その入力値設定命令が読み出された後に、フェッチ部３１０は、その関数の呼出し命令を読み出す。
【００３７】
また、フェッチ部３１０は、読み出された命令を命令デコーダ３２０に供給する。また、履歴メモリ４３０における実行結果を再利用するための関数省略信号が実行履歴検索部４１０から供給された場合には、フェッチ部３１０は、例えば、その実行結果を設定するための命令を命令デコーダ３２０に供給する。
【００３８】
命令デコーダ３２０は、フェッチ部３１０から供給された命令を解読（デコード）して、その解読内容に基づいて、実行部３３０、レジスタファイル３４０およびアドレス判定部５１０を制御するものである。
【００３９】
この命令デコーダ３２０は、フェッチ部３１０から入力値設定命令が供給された場合には、実行データ保持部４４０に関数の引数の入力値を保持させるために、入力値設定信号をアドレス判定部５１０に供給する。この場合において、命令デコーダ３２０は、フェッチ部３１０から供給された命令が、関数における引数の入力値を設定するための入力値設定命令であるか否かを判断する。この命令デコーダ３２０は、例えば、ＡＢＩの規定に基づいて、フェッチ部３１０からの命令が入力値設定命令であるか否かを判断する。ここで、ＭＩＰＳ（Microprocessor without Interlocked Pipeline Stages）のＡＢＩの規定に基づく判断例について簡単に説明する。
【００４０】
ＭＩＰＳの規定では、例えば、引数の入力値が全て整数である場合において、引数が４個以下のときには、レジスタファイル３４０におけるレジスタ４番乃至７番に入力値が格納される。また、引数が５個以上のときには、５番目以上の引数の入力値が主記憶部１３０におけるスタック領域にスタックされる。具体的には、５番目以上の引数の入力値は、レジスタファイル３４０のレジスタ２９番に格納されたスタックポイント値に１６以上の値が加算された値に対応する主記憶部１３０のスタック領域にスタックされる。
【００４１】
したがって、命令デコーダ３２０は、例えば、ロードワード命令（ｌｗ）に示された転送先レジスタがレジスタ４番乃至７番である場合には、入力値設定命令と判断する。また、命令デコーダ３２０は、引数が５個以上であり、かつ、その全ての引数が整数である場合には、ストアワード命令（ｓｗ）に示された転送先レジスタがレジスタ２９番であり、かつ、そのオフセット値が「１６」以上となるため、入力値設定命令と判断する。
【００４２】
このようにして、命令デコーダ３２０は、フェッチ部３１０から供給された命令に示されるデータの格納先に基づいて、その命令が入力値設定命令であるか否かを判断する。そして、入力値設定命令と判断された場合には、命令デコーダ３２０は、入力選択部３３２から出力されるデータを引数の入力値として実行データ保持部４４０に保持させるために、入力値設定信号をアドレス判定部５１０に供給する。
【００４３】
この命令デコーダ３２０は、例えば、主記憶部１３０から読み出された関数の入力値を設定するための入力値設定命令を受け付けた場合には、ロードユニット３３１から読み出された入力値をレジスタファイル３４０に格納するように制御する。これとともに、命令デコーダ３２０は、アドレス判定部５１０に対し入力値設定信号を供給する。
【００４４】
また、命令デコーダ３２０は、例えば、レジスタファイル３４０に格納されているデータを関数の入力値として設定するための入力値設定命令を受け付けた場合には、レジスタファイル３４０における１つのレジスタに格納された入力値を他のレジスタに転送させる。これとともに、命令デコーダ３２０は、アドレス判定部５１０に対し入力値設定信号を供給する。
【００４５】
また、命令デコーダ３２０は、入力値設定命令の後に、関数を呼び出すための呼出し命令を受け付けた場合には、関数の先頭アドレスにジャンプする旨を示す関数呼出し信号をアドレス判定部５１０に供給する。すなわち、この命令デコーダ３２０は、関数の呼出し命令を受け付けた場合には、履歴メモリ４３０における実行結果の再利用処理を実行するタイミングを通知するために、関数呼出し信号をアドレス判定部５１０に供給する。
【００４６】
また、命令デコーダ３２０は、例えば、ＭＩＰＳの規定に基づいて、フェッチ部３１０からの命令に示されるデータの格納場所により、その命令が、関数の引数である入力値を参照するための入力値参照命令か否かを判断する。この命令デコーダ３２０は、入力値参照命令を受け付けた場合には、入力値参照信号をアドレス判定部５１０に供給する。また、命令デコーダ３２０は、関数の戻り命令を受け付けた場合には、アドレス判定部５１０に関数戻り信号を供給する。
【００４７】
また、命令デコーダ３２０は、ＭＩＰＳの規定に基づいて、フェッチ部３１０からの命令に示される格納場所によってその命令が、関数の実行による実行結果を設定するための実行結果設定命令か否かを判断する。この命令デコーダ３２０は、実行結果設定命令を受け付けた場合には、実行データ保持部４４０に保持させるために、実行結果設定信号をアドレス判定部５１０に供給する。
【００４８】
また、命令デコーダ３２０は、関数の戻り命令を受け付けた場合には、アドレス判定部５１０に関数戻り信号を供給する。また、命令デコーダ３２０は、フェッチ部３１０から供給された命令に基づいて、プログラムカウンタ３５０の値を設定する。
【００４９】
実行部３３０は、命令デコーダ３２０からの制御に従って処理を実行するものである。この実行部３３０は、複数の命令区間を含む命令列に基づく処理を実行する。すなわち、この実行部３３０は、複数回実行される命令区間である再利用区間が含まれる命令列に基づく処理を実行する。この実行部３３０は、再利用区間である関数の入力値および実行結果を、レジスタファイル３４０または主記憶部１３０に出力するとともに、実行データ保持部４４０に供給する。
【００５０】
この実行部３３０は、例えば、入力値設定命令の実行により、関数の呼出し命令の前にその関数の入力値を、レジスタファイル３４０または主記憶部１３０に設定するとともに、実行データ保持部４４０に出力する。この実行部３３０は、例えば、入力値設定命令により設定された入力値を、入力値参照命令の実行によって参照するとともに、実行データ保持部４４０にその参照した入力値を出力する。この実行部３３０は、例えば、関数における引数の数値、引数の型および引数の格納場所を入力値として実行データ保持部４４０に出力する。なお、実行部３３０は、特許請求の範囲に記載の実行部の一例である。
【００５１】
ロードユニット３３１は、命令デコーダ３２０からの制御に従って、主記憶部１３０またはデータキャッシュ２２０からデータを読み出して、その読み出されたデータを入力選択部３３２に供給するものである。このロードユニット３３１は、例えば、命令デコーダ３２０からの制御に従って、主記憶部１３０またはデータキャッシュ２２０から関数における引数の入力値を読み出して、その読み出された入力値を入力選択部３３２に供給する。
【００５２】
入力選択部３３２は、命令デコーダ３２０からの制御に従って、実行結果出力部４２０、演算回路３３３、レジスタファイル３４０および実行結果出力部４２０から出力されたデータのうちいずれか１つのデータを選択するものである。
【００５３】
この入力選択部３３２は、その選択されたデータを、レジスタファイル３４０および実行データ保持部４４０に出力する。すなわち、この入力選択部３３２は、命令デコーダ３２０の制御に従って、実行結果出力部４２０、演算回路３３３、レジスタファイル３４０および実行結果出力部４２０の出力のうち、いずれかをレジスタファイル３４０および実行データ保持部４４０に出力する。
【００５４】
この入力選択部３３２は、例えば、入力値設定命令としてロードワード命令が命令デコーダ３２０に供給された場合には、命令デコーダ３２０の制御に従って、ロードユニット３３１からのデータを、レジスタファイル３４０および実行データ保持部４４０に出力する。
【００５５】
また、この入力選択部３３２は、例えば、入力値設定命令としてムーブ命令が供給された場合には、命令デコーダ３２０の制御に従って、レジスタファイル３４０におけるデータを、レジスタファイル３４０および実行データ保持部４４０に出力する。
【００５６】
また、入力選択部３３２は、演算処理を実行するための演算命令が命令デコーダ３２０に供給された場合には、命令デコーダ３２０の制御に従って、演算回路３３３から出力された演算結果を実行結果として、レジスタファイル３４０に出力する。また、この入力選択部３３２は、実行履歴検索部４１０により実行結果が抽出された場合には、命令デコーダ３２０からの制御に従って、実行結果出力部４２０から出力された実行結果をレジスタファイル３４０に出力する。
【００５７】
演算回路３３３は、命令デコーダ３２０からの制御に従って、演算処理を実行するものである。この演算回路３３３は、例えば、乗算、除算または積和などの演算処理を実行するための演算命令が命令デコーダ３２０に供給された場合には、命令デコーダ３２０の制御に従って、レジスタファイル３４０に格納されたデータを用いて演算処理を実行する。また、演算回路３３３は、その演算処理による演算結果を実行結果として、入力選択部３３２を介してレジスタファイル３４０に格納する。
【００５８】
ストアユニット３３４は、命令デコーダ３２０からの制御に従って、レジスタファイル３４０に格納されたデータ、または、実行結果出力部４２０から出力された実行結果を主記憶部１３０に書き戻すためのものである。このストアユニット３３４は、主記憶部１３０にデータを書き戻すためのストアワード命令が命令デコーダ３２０に供給された場合には、命令デコーダ３２０からの制御に従って、書き戻すべきデータを、データ線２２９を介してデータキャッシュ２２０に出力する。
【００５９】
また、このストアユニット３３４は、実行履歴検索部４１０により履歴メモリ４３０から実行結果が抽出された場合には、実行結果出力部４２０から出力された実行結果を、データ線２２９を介して主記憶部１３０およびデータキャッシュ２２０に書き戻す。
【００６０】
レジスタファイル３４０は、実行部３３０から出力されたデータを格納するものである。このレジスタファイル３４０は、複数のレジスタ、例えば、レジスタ０番乃至３１番の３２個のレジスタにより構成される。このレジスタファイル３４０は、命令デコーダ３２０からの制御に従って、実行部３３０から出力されたデータを、複数のレジスタのうち１つのレジスタに格納する。
【００６１】
また、このレジスタファイル３４０は、例えば、命令デコーダ３２０からの制御に従って、複数のレジスタのうち１つのレジスタに格納された実行結果を実行部３３０に、または実行部３３０を介して実行履歴検索部４１０に出力する。
【００６２】
プログラムカウンタ３５０は、命令デコーダ３２０からの制御によってカウント値が設定されるものである。このプログラムカウンタ３５０は、例えば、命令デコーダ３２０からの制御によって、１つの命令が実行されるたびにカウント値を１つ増加させる。また、このプログラムカウンタ３５０は、命令デコーダ３２０からの制御によって、関数の呼出し命令が実行された場合には、レジスタファイル３４０に格納された関数の先頭アドレスが設定される。このプログラムカウンタ３５０は、そのカウント値を、主記憶部１３０のメモリアドレスを示す命令アドレスとしてアドレス判定部５１０に出力する。
【００６３】
アドレス判定部５１０は、入力値設定命令アドレステーブル５２０に登録された入力値設定命令アドレスに基づいて、履歴メモリ４３０における実行履歴を検索させるために、実行履歴検索部４１０および実行データ保持部４４０を制御するものである。すなわち、アドレス判定部５１０は、プログラムカウンタ３５０から出力された命令アドレスが、入力値設定命令アドレステーブル５２０に保持された入力値設定命令アドレスと一致した場合には、実行履歴の検索を開始させるものである。
【００６４】
このアドレス判定部５１０は、プログラムカウンタ３５０から出力された命令アドレスと、入力値設定命令アドレステーブル５２０に登録された入力値設定命令アドレスとが一致したか否かを判定する。そして、双方の命令アドレスが一致した場合には、アドレス判定部５１０は、入力値設定命令アドレスにより特定された入力値設定命令に基づいて、実行部３３０から出力された入力値を実行データ保持部４４０に保持させる。
【００６５】
これとともに、アドレス判定部５１０は、入力値設定命令アドレステーブル５２０におけるその一致した入力値設定命令アドレスと関連付けられた区間識別情報を実行データ保持部４４０に保持させる。ここにいう区間識別情報とは、複数の再利用区間を互いに識別するための識別情報である。この区間識別情報として、例えば、再利用区間である関数の先頭アドレスを用いるようにしてもよい。
【００６６】
また、双方の命令アドレスが一致した場合において、命令デコーダ３２０から、関数呼出し信号が供給されるまでの間に入力値設定信号が供給されたときは、アドレス判定部５１０は、実行部３３０から出力された入力値を実行データ保持部４４０に保持させる。すなわち、アドレス判定部５１０は、関数呼出し信号が供給されるまでの間、命令デコーダ３２０から供給された入力値設定信号に基づいて、関数における引数の入力値として実行部３３０からの出力を実行データ保持部４４０に保持させる。
【００６７】
また、アドレス判定部５１０は、命令デコーダ３２０から関数呼出し信号が供給された場合には、履歴メモリ４３０における実行結果の再利用処理を実行履歴検索部４１０に指示する。また、アドレス判定部５１０は、命令デコーダ３２０から供給される実行結果設定信号に基づいて、関数の実行結果として実行部３３０からの出力を実行データ保持部４４０に保持させる。
【００６８】
また、アドレス判定部５１０は、命令デコーダ３２０から供給される関数戻り信号に基づいて、実行データ保持部４４０における区間識別情報、入力値および実行結果を履歴メモリ４３０に新たに登録させるために、実行履歴検索部４１０に登録の指示を行う。
【００６９】
入力値設定命令アドレステーブル５２０は、複数回実行される再利用区間である関数を識別するための区間識別情報ごとに、その関数における入力値を設定するための入力値設定命令のアドレスである入力値設定命令アドレスを保持するものである。ここにいうアドレスとは、入力値設定命令が、主記憶部１３０に記憶されているメモリアドレスを示す。
【００７０】
ここでは、入力値設定命令アドレステーブル５２０には、例えば、コンパイラ装置またはプログラムの事前実行により、主記憶部１３０に記憶されるプログラムを解析することによって抽出された再利用区間に関するデータが保持されていることを想定する。すなわち、入力値設定命令アドレステーブル５２０には、実行結果が再利用される度合いが高い関数の入力設定命令アドレスと、その関数を識別するための区間識別情報とが関連付けて保持されている。
【００７１】
この入力値設定命令アドレステーブル５２０は、例えば、関数における入力値を設定するための入力値設定命令のうち、最初に入力値を設定する入力値設定命令の入力値設定命令アドレスを区間識別情報ごとに保持する。すなわち、この入力値設定命令アドレステーブル５２０は、再利用区間の区間識別情報ごとに、その再利用区間における最先の入力値設定命令アドレスを保持する。このように、最先の入力値設定命令のみを保持させることによって、入力値設定命令アドレステーブル５２０の容量を低減することができる。
【００７２】
また、入力値設定命令アドレステーブル５２０は、その保持されたデータをアドレス判定部５１０に出力する。なお、入力値設定命令アドレステーブル５２０に、再利用区間である関数が複数の引数を持つ場合には、区間識別情報ごとに、複数の入力値設定命令アドレスを保持させるようにしてもよい。また、入力値設定命令アドレステーブル５２０は、特許請求の範囲に記載の入力値設定命令アドレステーブルの一例である。
【００７３】
なお、入力値設定命令アドレステーブル５２０に、区間識別情報ごとに実行履歴を削除する際の優先度をさらに保持させるようにしてもよい。この場合には、実行履歴検索部４１０は、アドレス判定部５１０からの優先度を履歴メモリ４３０に登録する。そして、履歴メモリ４３０の容量が一定の条件を超えた場合には、実行履歴検索部４１０は、履歴メモリ４３０に保持された優先度に基づいて、履歴メモリ４３０における実行履歴を削除する。
【００７４】
実行データ保持部４４０は、アドレス判定部５１０からの指示に従って、アドレス判定部５１０からの区間識別情報と、実行部３３０からの関数における入力値および実行結果とを保持するものである。この実行データ保持部４４０は、その保持された区間識別情報と、関数における入力値および実行結果とを実行履歴検索部４１０に出力する。
【００７５】
実行履歴検索部４１０は、実行データ保持部４４０から出力された識別情報および関数の入力値に基づいて、履歴メモリ４３０における実行履歴を検索するものである。この実行履歴検索部４１０は、履歴メモリ４３０において区間識別情報ごとに保持された再利用区間における入力値および実行結果である実行履歴のうち、実行データ保持部４４０に保持された区間識別情報および入力値と同一の実行履歴における実行結果を抽出する。
【００７６】
実行履歴検索部４１０は、履歴メモリ４３０から実行結果が抽出された場合において、アドレス判定部５１０からの再利用処理の指示を受け付けたときは、その実行結果を実行結果出力部４２０に出力する。これとともに、実行履歴検索部４１０は、関数の処理を省略するための関数省略信号として、その抽出された実行結果における格納場所に関する情報をフェッチ部３１０に供給する。
【００７７】
一方、履歴メモリ４３０から実行結果が抽出されない場合において、アドレス判定部５１０からの再利用処理の指示を受け付けたときは、実行履歴検索部４１０は、関数省略信号をフェッチ部３１０に出力しない。そして、実行部３３０における関数の実行によって、新たに生成された実行結果が実行データ保持部４４０に保持された後に、実行履歴検索部４１０は、実行データ保持部４４０からの出力を履歴メモリ４３０に登録する。
【００７８】
すなわち、この実行履歴検索部４１０は、アドレス判定部５１０からの登録指示に基づいて、実行データ保持部４４０に保持された区間識別情報、入力値および実行結果を履歴メモリ４３０に保持させる。
【００７９】
実行結果出力部４２０は、実行履歴検索部４１０によって履歴メモリ４３０から実行結果が抽出された場合には、その実行結果を、入力選択部３３２を介してレジスタファイル３４０に、または、ストアユニット３３４に出力するものである。この実行結果出力部４２０は、履歴メモリ４３０からの実行結果におけるデータの格納場所に従って、ストアユニット３３４または入力選択部３３２にその実行結果におけるデータを出力する。なお、実行結果出力部４２０は、特許請求の範囲に記載の実行結果出力部の一例である。
【００８０】
履歴メモリ４３０は、区間識別情報ごとに、区間識別情報により識別される関数における入力値および実行結果を関連付けて実行履歴として保持するものである。この履歴メモリ４３０は、例えば、連想メモリ（ＣＡＭ：Content Addressable Memory）により実現される。この例において、履歴メモリ４３０は、実行結果を検索するための検索キーである区間識別情報が実行履歴検索部４１０から入力されることによって、その区間識別情報に関連付けられた実行履歴の検索を開始する。
【００８１】
また、履歴メモリ４３０は、実行履歴検索部４１０から順次供給された入力値と、履歴メモリ４３０に保持されている入力値とが全て一致する場合には、その履歴メモリ４３０における入力値に関連付けられた実行結果を実行履歴検索部４１０に出力する。すなわち、実行履歴検索部４１０から入力された区間識別情報および入力値と同一の実行履歴が履歴メモリ４３０から検出されることによって、実行履歴検索部４１０により履歴メモリ４３０から実行結果が抽出される。
【００８２】
また、この連想メモリにより実現される履歴メモリ４３０は、例えば、実行履歴における入力値のパターンを木構造により保持する。なお、履歴メモリ４３０は、特許請求の範囲に記載の履歴メモリの一例である。
【００８３】
このように、アドレス判定部５１０および入力値設定命令アドレステーブル５２０を設けることによって、再利用区間の最先の入力値設定命令を特定することができるため、再利用区間の実行前に、履歴メモリ４３０における実行履歴の検索を行うことができる。次に、履歴メモリ４３０におけるデータ構造の例について図面を参照して以下に説明する。
【００８４】
［履歴メモリ４３０のデータ構造例］
図３は、本発明の第１の実施の形態における履歴メモリ４３０のデータ構造の一例を示す概念図である。ここでは、履歴メモリ４３０により、区間識別情報ごとに保持された実行履歴のうち、１つの区間識別情報における複数の実行履歴を木構造により保持する構成が示されている。この例では、引数がｎ個の関数であって、実行結果である出力をｍ個の格納先に返す関数を想定する。また、ここでは、関数の先頭アドレスである関数アドレスを区間識別情報とする。
【００８５】
この例では、木構造における関数ルート４６０と、第１の引数ノード４６１および４６２と、第ｎの引数ノード４７１乃至４７４と、第１の出力ノード４８１乃至４８４と、第ｍの出力ノード４９１乃至４９４とが示されている。
【００８６】
関数ルート４６０には、区間識別情報である関数アドレスと、第１の引数ノード４６１を指し示すポインタとが示されている。
【００８７】
第１および第ｎの引数ノード４６１、４６２および４７１乃至４７４には、履歴メモリ４３０に保持されている実行履歴における引数の入力値として、引数の値を示す入力データと、その引数の型と、その引数の格納場所を示す種類とが示されている。ここにいう格納場所とは、レジスタファイル３４０のレジスタ番号または主記憶部１３０のメモリアドレスのことをいう。
【００８８】
さらに、第１および第ｎの引数ノード４６１、４６２および４７１乃至４７４には、比較対象の入力値が互いに一致するときに、次の引数における引数ノードを指し示す右ポインタが示されている。一方、第１および第ｎの引数ノード４６１、４６２および４７１乃至４７４には、比較対象の入力値が不一致のときに、同一の引数における他の引数ノードを指し示す下ポインタが示されている。また、第ｎの引数ノード４７１乃至４７４の各々に、第１および第ｍの出力ノード４８１乃至４８４および４９１乃至４９４がそれぞれ連結されている。
【００８９】
第１および第ｍの出力ノード４８１乃至４８４および４９１乃至４９４には、履歴メモリ４３０に保持されている実行履歴における実行結果として、実行結果の値を示す出力データと、その実行結果の格納場所を示す種類と、その実行結果の型とが示されている。さらに、第１の出力ノード４８１乃至４８４には、次の出力における出力ノードを指し示す右ポインタが示されている。この第１および第ｍの出力ノード４８１乃至４８４および４９１乃至４９４は、連結リストを構成している。また、第ｍの出力ノード４９１乃至４９４の右ポインタには、出力ノードの終端を表わすヌルが示されている。
【００９０】
このような木構造において、関数ルート４６０に示された関数アドレスと一致する関数アドレスが実行履歴検索部４１０から入力されると、関数ルート４６０のポインタによって指し示された第１の引数ノード４６１において入力値の比較処理が実行される。ここにいう入力値の比較処理とは、第１の引数ノード４６１に示された入力データ、種類および型である入力値と、実行履歴検索部４１０からの入力値とを比較することである。
【００９１】
このとき、例えば、第１の引数ノード４６１に示された入力値と、実行履歴検索部４１０からの入力値とが一致した場合には、第１の引数ノード４６１の右ポインタにより指し示された次の引数ノードにおいて入力値の比較処理が実行される。一方、第１の引数ノード４６１に示された入力値と、実行履歴検索部４１０からの入力値とが一致しない場合には、第１の引数ノード４６１の下ポインタにより指し示された第１の引数ノード４６２において入力値の比較処理が実行される。
【００９２】
このようにして、各引数ノードにおける比較処理による比較結果に基づいて右または下ポインタの指し示す引数ノードが選択され、その選択された引数ノードにおいて入力値の比較処理が順次実行される。そして、第ｎの引数ノード４７１に示された入力値と、実行履歴検索部４１０からの入力値とが互いに一致した場合には、第ｎの引数ノード４７１の右ポインタにより第１の出力ノード４８１が指し示される。これにより、第１の出力ノード４８１に保持された出力データ、種類および型を示す実行結果から順番に、第ｍ番の出力ノード４９１に保持された実行結果までが実行履歴検索部４１０に順次出力される。
【００９３】
このように、履歴メモリ４３０を区間識別情報ごとに木構造により構成することによって、同じ引数の入力値を重複して保持する必要が無いため、履歴メモリ４３０の記憶領域を節約することができる。また、区間識別情報ごとにデータ構造を分けることによって、検索速度の低下を抑制することができる。次に、この履歴メモリ４３０に対する登録手法として、再利用区間である関数の１回目の実行における履歴メモリ４３０に対する登録処理例について図面を参照して以下に説明する。
【００９４】
［再利用区間の１回目の実行による履歴メモリ４３０に対する登録例］
図４は、本発明の第１の実施の形態におけるデータ処理装置１００による１回目の関数の実行における区間識別情報および実行履歴の登録手法を示す概念図である。図４（ａ）は、入力値設定命令アドレステーブル５２０のデータフォーマットの一例を示す図である。入力値設定命令アドレステーブル５２０には、関数における最先の入力値設定命令アドレス５２１と、その関数を識別するための区間識別情報である関数アドレス５２２との対応関係が示されている。
【００９５】
図４（ｂ）は、上位ルーチンにおいて２つの引数を持つ関数が呼出し命令（ｃａｌｌ）によって呼び出された後に、その関数の命令区間である下位ルーチンにおいて戻り命令（ｒｅｔｕｒｎ）によって上位ルーチンに復帰する処理例を示す概念図である。ここでは、上位ルーチンにおける入力値Ａ設定３２１および入力値Ｂ設定３２２と、下位ルーチンにおける入力値Ａ参照３２３、入力値Ｂ参照３２４および実行結果Ｃ設定３２５とが示されている。また、ここでは、左から右に時間が経過することとする。
【００９６】
入力値Ａ設定３２１および入力値Ｂ設定３２２は、２つの入力値設定命令に基づいて、再利用区間である関数における入力値Ａおよび入力値Ｂが設定されるタイミングを示す。ここでは、入力値Ａ設定命令アドレスに対応する入力値Ａ設定命令に基づいて入力値Ａが設定される。また、入力値Ｂ設定命令アドレスに対応する入力値Ｂ設定命令に基づいて入力値Ｂが設定される。このように、関数の呼出し命令（ｃａｌｌ）の前に、入力値設定命令によってその関数の引数の入力値が設定されるのは、図１で述べたとおり、主記憶部１３０に記憶されたプログラムがＡＢＩの規定に基づいて生成されるからである。
【００９７】
入力値Ａ参照３２３および入力値Ｂ参照３２４は、下位ルーチンによる関数の処理において、入力値参照命令の実行によって関数の入力値が参照されるタイミングを示す。ここでは、入力値Ａ設定命令および入力値Ｂ設定命令により設定された入力値Ａおよび入力値Ｂが、２つの入力値参照命令に基づいてそれぞれ参照される。すなわち、関数の処理において、入力値参照命令の実行により、入力値Ａおよび入力値Ｂが設定されたレジスタファイル３４０におけるレジスタに格納された引数の数値が使用される。
【００９８】
実行結果Ｃ設定３２５は、関数の処理により生成された実行結果Ｃが主記憶部１３０またはレジスタファイル３４０に設定されるタイミングを示す。ここでは、実行結果設定命令に基づいて実行結果Ｃが設定される。
【００９９】
図４（ｃ）は、履歴メモリ４３０におけるデータフォーマットの一例を示す概念図である。ここでは、関数の区間識別情報である関数アドレス４３１と、実行履歴検索データ４３２との対応関係が示されている。実行履歴検索データ４３２は、図３に示した木構造により構成される検索データであって、実行履歴における入力値および実行結果が関連付けられた情報を含む検索データである。
【０１００】
このような場合において、入力値Ａ設定３２１では、アドレス判定部５１０により、プログラムカウンタ３５０から出力された命令アドレスが、入力値設定命令アドレステーブル５２０における「入力値Ａ設定命令アドレス」と一致したと判定される。
【０１０１】
これにより、その一致した入力値設定命令アドレス（入力値Ａ設定命令アドレス）に対応する区間識別情報（関数アドレス１）が、履歴メモリ４３０に入力される。すなわち、アドレス判定部５１０により、区間識別情報（関数アドレス１）を実行データ保持部４４０に保持させて、その保持された「関数アドレス１」が実行履歴検索部４１０によって履歴メモリ４３０に入力される。
【０１０２】
このとき、履歴メモリ４３０において、アドレス判定部５１０からの区間識別情報（関数アドレス１）と一致する区間識別情報が保持されていないため、その区間識別情報（関数アドレス１）が履歴メモリ４３０に登録される。
【０１０３】
この後、入力値設定命令により設定された入力値Ａおよび入力値Ｂと、実行結果設定命令により設定された実行結果Ｃが、区間識別情報（関数アドレス１）に関連付けられて履歴メモリ４３０に登録される。すなわち、入力設定命令の実行による命令デコーダ３２０からの入力値設定信号に基づいて、アドレス判定部５１０によって、入力値Ａおよび入力値Ｂが、実行データ保持部４４０に保持される。その後、実行結果設定命令の実行による命令デコーダ３２０からの実行結果設定信号に基づいて、実行結果Ｃが実行データ保持部４４０に保持される。
【０１０４】
そして、戻り命令（ｒｅｔｕｒｎ）による命令デコーダ３２０からの関数戻り信号に基づいて、アドレス判定部５１０から実行履歴検索部４１０に実行履歴の登録が指示される。これにより、実行履歴検索部４１０によって、実行データ保持部４４０におけるデータ（入力値Ａ、入力値Ｂおよび実行結果Ｃ）が履歴メモリ４３０に登録される。
【０１０５】
このように、入力値設定命令アドレステーブル５２０を設けることによって、入力値設定命令アドレステーブル５２０に保持された入力値設定命令アドレスに対応する関数の実行履歴だけを履歴メモリ４３０に登録することができる。これにより、再利用区間の入力値設定命令アドレスを事前に登録しておくことによって、実行結果が再利用される可能性の高い実行履歴だけを履歴メモリ４３０に保持させることができる。このため、履歴メモリ４３０の容量を有効に利用することができる。次に、履歴メモリ４３０に保持された実行履歴における実行結果を再利用する例について次図を参照して簡単に説明する。
【０１０６】
［実行結果再利用処理の例］
図５は、本発明の第１の実施の形態におけるデータ処理装置１００による実行結果再利用処理に関する手法の一例を示す概念図である。ここでは、図５（ａ）および（ｃ）は、図４（ａ）および（ｃ）に対応するため、ここでの説明を省略する。
【０１０７】
図５（ｂ）は、上位ルーチンにおいて２つの引数を持つ関数が呼出し命令（ｃａｌｌ）によって呼び出された後に、その関数の命令区間である下位ルーチンにおいて戻り命令（ｒｅｔｕｒｎ）によって上位ルーチンに復帰する処理例を示す概念図である。
【０１０８】
ここでは、上位ルーチンにおける入力値Ａ設定３２１および入力値Ｂ設定３２２と、関数の命令区間である下位ルーチンにおける入力値Ａ参照３２３、入力値Ｂ参照３２４および実行結果Ｃ設定３２５とが示されている。これらは図４に示したものと同様であるため、同一符号を付してここでの説明を省略する。また、ここでは、左から右に時間が経過することとする。
【０１０９】
このような場合において、入力値Ａ設定３２１では、アドレス判定部５１０により、プログラムカウンタ３５０から出力された命令アドレスが、入力値設定命令アドレステーブル５２０における「入力値Ａ設定命令アドレス」と一致したと判定される。これにより、その一致した入力値設定命令アドレス（入力値Ａ設定命令アドレス）に対応する区間識別情報（関数アドレス１）が、履歴メモリ４３０に入力される。すなわち、アドレス判定部５１０により、区間識別情報（関数アドレス１）を実行データ保持部４４０に保持させて、その保持された関数アドレス１が実行履歴検索部４１０によって履歴メモリ４３０に入力される。
【０１１０】
このとき、履歴メモリ４３０には、アドレス判定部５１０からの区間識別情報（関数アドレス１）と同一の「関数アドレス１」が既に保持されているため、これに関連付けられた「実行履歴検索データ１」による実行結果の検索が行われる。
【０１１１】
また、入力値Ａ設定３２１では、入力値Ａ設定命令により設定された入力値Ａが、履歴メモリ４３０に入力される。そして、入力値Ｂ設定３２２では、入力値Ｂ設定命令により設定された入力値Ｂが、履歴メモリ４３０に入力される。すなわち、アドレス判定部５１０からの指示により、命令デコーダ３２０からの入力値設定信号に基づいて、入力値Ａおよび入力値Ｂが、実行データ保持部４４０に順次保持される。そして、実行履歴検索部４１０により、実行データ保持部４４０における入力値Ａおよび入力値Ｂが実行履歴検索部４１０に順次入力される。
【０１１２】
これにより、実行履歴検索部４１０からの入力値Ａおよび入力値Ｂと、履歴メモリ４３０における「関数アドレス１」に対応する「実行履歴検索データ１」に保持された入力値との比較が順次行われる。ここでは、双方の入力値（入力値ＡおよびＢ）が一致するため、区間識別情報（関数アドレス１）および入力値（入力値Ａおよび入力値Ｂ）に関連付けられた実行結果（実行結果Ｃ）が実行履歴検索部４１０に供給される。すなわち、履歴メモリ４３０に入力された区間識別情報（関数アドレス１）および入力値（入力値Ａおよび入力値Ｂ）に関連付けられた実行結果（実行結果Ｃ）が履歴メモリ４３０から出力される。
【０１１３】
この後、呼出し命令（ｃａｌｌ）による命令デコーダ３２０からの関数呼出し信号に基づいて、アドレス判定部５１０から実行履歴検索部４１０に実行結果の再利用指示が通知されることによって、実行結果Ｃの再利用処理が実行される。すなわち、実行結果出力部４２０により、入力値設定命令アドレスにより特定される呼出し命令が実行されるときに、実行履歴検索部４１０により実行結果が抽出された場合には、その抽出された実行結果が実行部３３０に出力される。
【０１１４】
このように、入力値設定命令アドレステーブル５２０を設けることによって、関数アドレス１の関数に対する最初に実行される最先の入力値Ａ設定命令を特定することができる。このため、入力値Ａ設定命令から呼出し命令（ｃａｌｌ）までの命令群のうちの入力値Ａ設定命令および入力値Ｂ設定命令に基づいて設定される入力値（入力値Ａおよび入力値Ｂ）を特定することができる。これにより、入力値Ａ設定命令アドレスにより特定される呼出し命令（ｃａｌｌ）の実行までの実行履歴検索期間Ｔｓにおいて、履歴メモリ４３０における区間識別情報（関数アドレス１）に対応する実行履歴の検索を行うことができる。
【０１１５】
また、実行履歴検索期間Ｔｓにおいて関数アドレス１の実行履歴検索データ１により、実行履歴検索部４１０からの入力値Ａおよび入力値Ｂに関連付けられた実行結果Ｃが抽出されることによって、関数の実行に要する時間（短縮期間Ｔ１）を削減することができる。ここで、本発明の第１の実施の形態における短縮期間Ｔ１と、従来の実行結果再利用処理による短縮期間との差異について以下に図面を参照して簡単に説明する。
【０１１６】
［実行結果再利用処理によって短縮される短縮期間の例］
図６は、実行結果再利用処理により関数の実行時間が短縮される例を示す概念図である。図６（ａ）は、入力値設定命令アドレステーブル５２０を設けない従来のデータ処理装置における実行結果の再利用による短縮期間を示す概念図である。図６（ｂ）は、本発明の第１の実施の形態におけるデータ処理装置１００における実行結果の再利用による短縮期間を示す概念図である。図６（ａ）および（ｂ）は、図５（ｂ）に示したものと同様であるため、同一符号を付してここでの説明を省略する。
【０１１７】
図６（ａ）に示す従来技術の場合には、関数の命令区間である下位ルーチンにおいて２つの引数が入力値参照命令の実行によって全て参照（入力値Ａ参照３２３および入力値Ｂ参照３２４）されるまで、関数の引数である入力値ＡおよびＢを特定することができない。このため、関数の入力値ＡおよびＢが、履歴メモリ４３０における入力値と全て一致したときであっても、入力値Ｂ参照３２４から戻り命令（ｒｅｔｕｒｎ）までの短縮期間Ｔ２だけしか関数の実行期間を削減することができない。
【０１１８】
一方、図６（ｂ）に示す本発明の第１の実施の形態では、図５で述べたとおり、入力値設定命令アドレステーブル５２０に基づいて特定された入力値Ａ設定３２１によって、入力値Ａおよび入力値Ｂを特定することができる。すなわち、入力値Ａ設定命令から呼出し命令（ｃａｌｌ）までの実行履歴検索期間Ｔｓにおける入力値設定命令に基づいて、関数における引数の入力値を特定することができる。
【０１１９】
これにより、実行履歴検索期間Ｔｓにおいて履歴メモリ４３０における実行結果の検索を終了させることができるため、実行結果を再利用することができる場合には、関数の実行に要する全ての期間（短縮期間Ｔ１）を削減することができる。したがって、本発明の第１の実施の形態では、データ処理装置１００における実行結果再利用処理により、従来の短縮期間Ｔ２よりも長い短縮期間Ｔ１を削減することができる。次に、実行履歴検索部４１０および履歴メモリ４３０における両者の区間識別情報が一致した場合において、実行履歴検索部４１０からの入力値と、履歴メモリ４３０における入力値とが一致しないときの実行履歴の登録例について次図を参照して説明する。
【０１２０】
［再利用区間の２回目以降の実行による履歴メモリ４３０に対する実行履歴の登録例］
図７は、本発明の第１の実施の形態におけるデータ処理装置１００による２回目以降の関数の実行における実行履歴の登録手法を示す概念図である。ここでは、図７（ａ）乃至（ｃ）は、図４（ａ）乃至（ｃ）に対応するため、ここでの詳細な説明を省略する。
【０１２１】
図７（ｂ）は、図４（ｂ）に示した関数の処理例を示す概念図である。ここでは、関数の引数である入力値が変数であり、履歴メモリ４３０に保持されていない入力値が設定された場合を想定する。例えば、履歴メモリ４３０における入力値Ａの示す値が「３」であり、ここでの関数の実行により設定された入力値Ａの示す値が「５」である場合が該当する。
【０１２２】
このような場合において、入力値Ａ設定３２１では、アドレス判定部５１０により、プログラムカウンタ３５０から出力された命令アドレスが、入力値設定命令アドレステーブル５２０における「入力値Ａ設定命令アドレス」と一致したと判定される。
【０１２３】
これにより、その一致した入力値設定命令アドレス（入力値Ａ設定命令アドレス）に対応する区間識別情報（関数アドレス１）が、履歴メモリ４３０に入力される。すなわち、アドレス判定部５１０により、区間識別情報（関数アドレス１）を実行データ保持部４４０に保持させて、その保持された「関数アドレス１」が実行履歴検索部４１０によって履歴メモリ４３０に入力される。
【０１２４】
このとき、履歴メモリ４３０において、アドレス判定部５１０からの区間識別情報（関数アドレス１）と一致する区間識別情報が既に保持されているため、これに関連付けられた「実行履歴検索データ１」による実行結果の検索が行われる。
【０１２５】
また、入力値Ａ設定３２１では、入力値Ａ設定命令により設定された入力値Ａが、履歴メモリ４３０に入力される。このとき、実行履歴検索部４１０からの入力値Ａと、履歴メモリ４３０における「実行履歴検索データ１」に保持された入力値とが一致しないため、実行履歴検索部４１０からの入力値Ａが「実行履歴検索データ１」に新たに登録される。
【０１２６】
また、入力値Ｂ設定３２２では、入力値Ｂ設定命令により設定された入力値Ｂが、実行履歴検索部４１０によって履歴メモリ４３０に登録される。すなわち、入力値Ａおよび入力値Ｂが関連付けられた「実行履歴検索データ１」が生成される。
【０１２７】
この後、下位ルーチンにおいて関数の処理が実行され、実行結果Ｃ設定３２５において、実行結果設定命令により設定された実行結果Ｃが、実行履歴検索部４１０によって履歴メモリ４３０に登録される。すなわち、入力値Ａ、入力値Ｂおよび実行結果Ｃが関連付けられた「実行履歴検索データ１」が生成される。
【０１２８】
このように、同一の関数に対する２回目以降の処理において、入力値設定命令によって設定された入力値が、履歴メモリ４３０における入力値と一致しない場合には、関数が実行されて、その実行結果および入力値が履歴メモリ４３０に新たに登録される。なお、ここでは、入力値設定命令によって特定された入力値を登録する例について説明したが、入力値参照命令の実行によって特定された入力値を履歴メモリ４３０に登録するようにしてもよい。
【０１２９】
［データ処理装置１００の動作例］
次に本発明の第１の実施の形態におけるデータ処理装置１００の動作について図面を参照して説明する。
【０１３０】
図８は、本発明の第１の実施の形態におけるデータ処理装置１００による実行結果再利用方法の処理手順の一例を示すフローチャートである。
【０１３１】
まず、フェッチ部３１０により、主記憶部１３０または命令キャッシュ２１０から命令が読み出される（ステップＳ９１１）。このとき、アドレス判定部５１０により、プログラムカウンタ３５０から出力される命令アドレスが、入力値設定命令アドレステーブル５２０に登録された入力値設定命令アドレスと一致するか否かが判断される（ステップＳ９１２）。そして、入力値設定命令アドレスと一致しない場合には、ステップＳ９１１に戻り、入力値設定命令アドレスと一致するまで繰り返される。
【０１３２】
一方、入力値設定命令アドレスと一致した場合には、アドレス判定部５１０により、その一致した入力値設定命令アドレスに関連付けられた区間識別情報を入力値設定命令アドレステーブル５２０から取得される。そして、アドレス判定部５１０により、その取得された区間識別情報が、実行データ保持部４４０に保持される（ステップＳ９１３）。
【０１３３】
続いて、実行履歴検索部４１０により、履歴メモリ４３０の検索キーとして、実行データ保持部４４０に保持された区間識別情報が履歴メモリ４３０に入力される（ステップＳ９１４）。これにより、履歴メモリ４３０における区間識別情報に対応する複数の実行履歴の検索が開始される。
【０１３４】
次に、命令デコーダ３２０により、フェッチ部３１０から読み出された命令が入力値設定命令であるか否かが判断される（ステップＳ９１５）。そして、入力値設定命令であると判断された場合には、命令デコーダ３２０からの入力値設定信号に基づいて、入力値設定命令により設定された入力値が、アドレス判定部５１０の指示によって実行データ保持部４４０に保持される。
【０１３５】
この後、実行履歴検索部４１０により、実行データ保持部４４０に保持された入力値が、履歴メモリ４３０に入力される（ステップＳ９２１）。なお、１回目のステップＳ９１５の判断については、ここでは、必ず入力値設定命令と判断されるため、その判断を省略して、ステップＳ９２１に進むようにしてもよい。
【０１３６】
続いて、実行履歴検索部４１０からの区間識別情報に対応する履歴メモリ４３０における実行履歴について、履歴メモリ４３０により、実行履歴検索部４１０からの入力値と、その実行履歴における入力値とが一致するか否かが判断される（ステップＳ９２２）。そして、両者の入力値が一致しない場合には、ステップＳ９２４の処理に進む。
【０１３７】
一方、両者の入力値が一致した場合には、履歴メモリ４３０において、実行履歴における次の引数の入力値を比較するために、次の引数における引数ノードにポインタが進められる（ステップＳ９２３）。すなわち、実行履歴検索部４１０からの入力値と一致する引数ノードがあれば、その引数ノードの右ポインタによって、次の引数ノードが指し示される。次に、フェッチ部３１０により、主記憶部１３０または命令キャッシュ２１０から命令が読み出され（ステップＳ９２４）、ステップＳ９１５の処理に戻る。
【０１３８】
一方、ステップＳ９１５の処理において、入力値設定命令でないと判断された場合において、フェッチ部３１０により読み出された命令が関数の呼出し命令であるか否かが判断される（ステップＳ９１６）。そして、呼出し命令でない場合には、ステップＳ９２４に進む。
【０１３９】
このようにして、関数における全ての引数の入力値が設定されるまで、ステップＳ９１５、Ｓ９１６およびＳ９２１乃至Ｓ９２４における一連の処理が繰り返し実行される。すなわち、入力値設定命令アドレステーブル５２０により特定された入力値設定命令から呼出し命令までの関数の入力値設定命令に基づいて設定された入力値が実行データ保持部４４０に保持されて、その保持された入力値が履歴メモリ４３０に入力される。
【０１４０】
このように、プログラムカウンタ３５０から出力される命令アドレスと一致する入力値設定命令アドレスに対応する区間識別情報が実行データ保持部４４０に保持される。そして、その入力値設定命令アドレスにより特定された入力値設定命令から呼出し命令までの命令群のうちの入力値設定命令に基づいて、実行部から出力された入力値が実行データ保持部４４０に保持される。これにより、実行履歴検索部４１０によって、実行データ保持部４４０における区間識別情報および入力値を用いて、履歴メモリ４３０における実行履歴に関連付けられた実行結果が検索される。なお、ステップＳ９１１乃至Ｓ９１６およびＳ９２１乃至Ｓ９２４は、特許請求の範囲に記載の実行履歴検索手順の一例である。
【０１４１】
一方、ステップＳ９１６において関数の呼出し命令と判断された場合には、実行データ保持部４４０からの区間識別情報および入力値が、履歴メモリ４３０における区間識別情報に関連付けられた入力値と全て一致したか否かが判断される（ステップＳ９１７）。
【０１４２】
そして、実行履歴検索部４１０からの区間識別情報および入力値が全て一致した場合には、実行結果再利用処理が実行される（ステップＳ９２５）。すなわち、実行履歴検索部４１０からの区間識別情報および入力値に対応する履歴メモリ４３０における実行結果が、実行結果出力部４２０から出力される。そして、主記憶部１３０またはレジスタファイル３４０に書き戻されて、関数の処理をスキップする。なお、Ｓ９２５は、特許請求の範囲に記載の実行結果出力手順の一例である。
【０１４３】
一方、実行履歴検索部４１０からの区間識別情報および入力値が全て一致しない場合には、呼出し命令により呼び出された関数が実行されて、その実行結果が実行データ保持部４４０に保持される（ステップＳ９１８）。そして、実行履歴検索部４１０により、実行データ保持部４４０に保持された実行結果と、ステップＳ９１３およびＳ９２１の処理によって保持された区間識別情報および入力値とが履歴メモリ４３０に登録される（ステップＳ９１９）。
【０１４４】
このように、本発明の第１の実施の形態では、入力値設定命令アドレステーブル５２０によって、再利用区間である関数の呼出し命令前に、実行データ保持部４４０に再利用区間の区間識別情報およびその入力値を保持させることができる。これにより、関数が呼び出される前に、実行履歴検索部４１０によって、その実行データ保持部４４０に保持された区間識別情報および入力値に基づいて、履歴メモリ４３０における実行履歴を検索することができる。
【０１４５】
このため、実行履歴検索部４１０からの区間識別情報および入力値と一致する履歴メモリ４３０における実行履歴に関連付けられた実行結果が抽出された場合には、呼出し命令により呼び出される関数の実行を省略することができる。これにより、実行結果の再利用による関数の処理時間を大幅に削減することができる。
【０１４６】
＜２．第２の実施の形態＞
［プログラム解析処理装置の構成例］
図９は、本発明の第２の実施の形態におけるプログラム解析処理装置の機能構成例を示すブロック図である。プログラム解析処理装置６００は、ソースプログラム記憶部６１０と、コンパイル処理部６２０と、オブジェクトプログラム記憶部６６０と、再利用区間情報記憶部６７０とを備える。なお、プログラム解析処理装置６００は、特許請求の範囲に記載のプログラム解析処理装置の一例である。
【０１４７】
ソースプログラム記憶部６１０は、コンパイル処理の対象となるソースプログラムを記憶するものである。このソースプログラムは、実行結果が再び利用される再利用区間が含まれるソースプログラムである。このソースプログラム記憶部６１０は、その記憶されたソースプログラムをコンパイル処理部６２０に供給する。
【０１４８】
コンパイル処理部６２０は、ソースプログラム記憶部６１０からのソースプログラムをコンパイルすることによって、機械語プログラムであるオブジェクトプログラムと、再利用区間情報とを生成するものである。ここにいう再利用区間情報とは、再利用区間ごとに、再利用区間における１番目の入力値設定命令の入力値設定命令アドレスと、その再利用区間を識別するための区間識別情報とが関連付けられた情報である。この再利用区間情報は、図２に示した検索開始命令アドレス管理部５００における入力値設定命令アドレステーブル５２０に格納される。
【０１４９】
このコンパイル処理部６２０は、生成されたオブジェクトプログラムをオブジェクトプログラム記憶部６６０に、生成された再利用区間情報を再利用区間情報記憶部６７０に記憶させる。このコンパイル処理部６２０は、プログラム解析部６３０と、プログラム最適化処理部６４０と、コード生成部６５０とを備える。
【０１５０】
プログラム解析部６３０は、ソースプログラム記憶部６１０から読み出されたソースプログラムに基づいて、形態素解析や構文解析などの解析処理を実行するものである。このプログラム解析部６３０は、解析または最適化に適した形式の中間コードとして表現された中間表現によるプログラムを生成して、その生成された中間表現によるプログラムに対して解析処理を実行する。
【０１５１】
このプログラム解析部６３０は、再利用候補区間抽出部６３１および再利用候補区間解析部６３２を備える。再利用候補区間抽出部６３１は、プログラムに含まれる複数の命令区間のうち、実行結果が再利用される再利用区間の候補となる再利用候補区間を、そのプログラムから抽出するものである。この再利用候補区間抽出部６３１は、再利用候補区間として関数の命令区間を抽出する。
【０１５２】
この再利用候補区間抽出部６３１は、実行結果が再利用できない関数を再利用候補区間の対象から除外する。この再利用候補区間抽出部６３１は、命令区間の入力値が全て同じであっても異なる実行結果になる関数、例えば、命令区間に分岐命令を含むような関数を再利用候補区間の対象から除外する。この再利用候補区間抽出部６３１は、例えば、第１の関数の実行直後に第２の関数が実行されるため、第１の関数の呼出し命令の前に、第２の入力値設定命令が実行されるような第１および第２の関数を再利用候補区間の対象から除外する。また、再利用候補区間抽出部６３１は、抽出された再利用候補区間を識別するための区間識別情報を、プログラムとともに再利用候補区間解析部６３２に供給する。
【０１５３】
再利用候補区間解析部６３２は、再利用候補区間抽出部６３１により抽出された再利用候補区間の使用態様を解析するものである。この再利用候補区間解析部６３２は、例えば、関数における引数の個数および型と、１つの関数が実行される回数とを使用態様として関数ごとに解析する。
【０１５４】
この再利用候補区間解析部６３２は、例えば、関数における引数が採り得る範囲を使用態様の解析結果として出力する。この再利用候補区間解析部６３２は、その解析結果を、再利用候補区間の区間識別情報およびプログラムとともにプログラム最適化処理部６４０に供給する。
【０１５５】
プログラム最適化処理部６４０は、再利用候補区間解析部６３２から供給されたプログラムに基づいて、プログラムの実行速度を向上させるための最適化や、コードサイズを削減するための最適化などのプログラム最適化処理を実行するものである。このプログラム最適化処理部６４０は、再利用度生成部６４１と、再利用区間抽出部６４２と、再利用区間情報生成部６４３とを備える。
【０１５６】
再利用度生成部６４１は、再利用候補区間解析部６３２から供給された解析結果に基づいて、再利用候補区間の実行結果が再び利用される度合いを示す再利用度を生成するものである。すなわち、再利用度生成部６４１は、複数回実行される命令区間における処理の実行ごとの入力値が互いに一致する度合いを示す再利用度を、命令区間の使用態様に基づいて命令区間ごとに生成する。
【０１５７】
この再利用度生成部６４１は、例えば、１つの再利用候補区間が実行される実行回数に応じて再利用度を生成する。この場合において、再利用度生成部６４１は、例えば、実行回数が大きいほど、再利用度を大きく設定する。また、再利用度生成部６４１は、例えば、再利用候補区間の入力値が採り得る範囲に応じて、その再利用候補区間に対する再利用度を生成する。この場合には、再利用度は、例えば、その採り得る範囲の数の逆数に定数を乗算することによって算出される。これにより、再利用候補区間の再利用度が大きいほど、その再利用候補区間の実行結果は再利用される確率が高いことを示す。
【０１５８】
また、再利用度生成部６４１は、生成された再利用候補区間に関する再利用度を、プログラムおよび再利用候補区間の区間識別情報とともに再利用区間抽出部６４２に供給する。なお、再利用度生成部６４１は、特許請求の範囲に記載の再利用度生成部の一例である。
【０１５９】
再利用区間抽出部６４２は、再利用候補区間解析部６３２により抽出された複数の再利用候補区間のうち、再利用度生成部６４１からの各再利用候補区間に関する再利用度に基づいて、再利用区間を抽出するものである。この再利用区間抽出部６４２は、例えば、再利用度に関する一定の閾値（再利用閾値）以上である再利用候補区間を再利用区間として抽出する。
【０１６０】
また、再利用区間抽出部６４２は、その抽出された再利用区間に関する区間識別情報を、プログラムとともに再利用区間情報生成部６４３に供給する。なお、再利用区間抽出部６４２は、例えば、図２に示した履歴メモリ４３０における区間識別情報ごとの実行履歴を削除する際の優先度を再利用度に基づいて生成するようにしてもよい。この場合、再利用区間抽出部６４２は、再利用度が高いほど優先度が低くなるように優先度を生成する。
【０１６１】
再利用区間情報生成部６４３は、再利用区間抽出部６４２により抽出された再利用区間の区間識別情報と、その再利用区間における最先の入力値設定命令アドレスとを関連付けて再利用区間情報として生成するものである。この再利用区間情報生成部６４３は、再利用区間抽出部６４２により抽出された再利用区間における入力値設定命令のうち、時間軸上において最初に実行される最先の入力値設定命令のメモリアドレスである入力値設定命令アドレスを再利用区間ごとに抽出する。
【０１６２】
また、再利用区間情報生成部６４３は、その抽出された最先の入力値設定命令アドレスおよび区間識別情報を再利用区間ごとに関連付けた再利用区間識別情報を生成する。また、再利用区間情報生成部６４３は、その生成された再利用区間識別情報を再利用区間情報記憶部６７０に記憶させる。なお、ここでは、再利用区間情報として、区間識別情報ごとに最先の入力値設定命令アドレスを関連付けて生成する例について説明したが、区間識別情報ごとに、全ての入力値設定命令アドレスを関連付けて生成するようにしてもよい。
【０１６３】
また、再利用区間情報生成部６４３は、例えば、再利用区間抽出部６４２から供給されたプログラムに対して、再利用区間における最先の入力値設定命令からその再利用区間の呼出し命令までの命令群の数が極力少なくなるように、命令コードを並び替える。これにより、図２に示した履歴メモリ４３０における実行履歴の検索期間を短縮することができるため、データ処理装置１００における履歴メモリ４３０による消費電力を低減することができる。
【０１６４】
また、再利用区間情報生成部６４３は、その命令コードが並び替えられたプログラムをコード生成部６５０に供給する。なお、再利用区間情報生成部６４３は、特許請求の範囲に記載の再利用区間情報生成部の一例である。
【０１６５】
なお、再利用区間情報生成部６４３は、再利用度生成部６４１からの再利用度に基づいて、履歴メモリ４３０の実行履歴を削除する際の優先度と、区間識別情報と、最先の入力値設定命令アドレスとを関連付けて再利用区間情報を生成するようにしてもよい。
【０１６６】
これにより、履歴メモリ４３０の容量が一定の条件を超えた場合には、実行履歴検索部４１０により、その優先度に従って履歴メモリ４３０の実行履歴を削除させることができる。このため、再利用度の高い実行履歴を優先的に履歴メモリ４３０に保持させることができる。
【０１６７】
コード生成部６５０は、再利用区間情報生成部６４３から供給されたプログラムに基づいて、機械語プログラムのコードであるオブジェクトプログラムを生成するものである。このコード生成部６５０は、その生成されたオブジェクトプログラムをオブジェクトプログラム記憶部６６０に記憶させる。
【０１６８】
オブジェクトプログラム記憶部６６０は、コード生成部６５０から出力されたオブジェクトプログラムを記憶するものである。このオブジェクトプログラム記憶部６６０に記憶されたオブジェクトプログラムが、図１に示した主記憶部１３０に記憶される。
【０１６９】
再利用区間情報記憶部６７０は、再利用区間情報生成部６４３から出力された再利用区間情報を記憶するものである。この再利用区間情報記憶部６７０に記憶された再利用区間情報が図２に示した入力値設定命令アドレステーブル５２０に転送される。
【０１７０】
このように、再利用度生成部６４１を設けることによって、複数回実行される命令区間の使用態様に基づいて再利用度が生成されるため、複数の命令区間のうち、実行結果が再利用される確率の高い命令区間を再利用区間として抽出することができる。また、再利用区間情報生成部６４３を設けることによって、その抽出された再利用区間ごとに再利用区間における入力値設定命令アドレスおよび区間識別情報が関連付けられた再利用区間情報を生成することができる。
【０１７１】
［プログラム解析処理装置６００の動作例］
次に本発明の第２の実施の形態におけるプログラム解析処理装置６００の動作について図面を参照して説明する。
【０１７２】
図１０は、本発明の第２の実施の形態におけるプログラム解析処理装置６００のプログラム解析処理方法の処理手順の一例を示すフローチャートである。
【０１７３】
まず、再利用候補区間抽出部６３１により、ソースプログラム記憶部６１０からソースプログラムが読み出される（ステップＳ９３１）。そして、再利用候補区間抽出部６３１により、プログラムに含まれる複数の関数である命令区間のうち、再利用候補区間となる関数が抽出される（ステップＳ９３２）。
【０１７４】
続いて、再利用候補区間解析部６３２により、再利用候補区間抽出部６３１において抽出された再利用候補区間に関する使用態様が解析される（ステップＳ９３３）。この後、再利用度生成部６４１により、再利用候補区間解析部６３２により解析された再利用候補区間の使用態様に基づいて、再利用候補区間ごとに再利用度が生成される（ステップＳ９３４）。なお、ステップＳ９３４は、特許請求の範囲に記載の再利用度生成手順の一例である。
【０１７５】
そして、再利用区間抽出部６４２により、再利用候補区間ごとの再利用度に基づいて、再利用区間が抽出される（ステップＳ９３５）。次に、再利用区間情報生成部６４３により、再利用区間における最先の入力値設定命令アドレスと、その再利用区間の区間識別情報とが再利用区間ごとに関連付けられた再利用区間情報が生成される（ステップＳ９３６）。そして、再利用区間情報生成部６４３により、その生成された再利用区間情報が再利用区間情報記憶部６７０に記憶される。なお、ステップＳ９３６は、特許請求の範囲に記載の再利用区間情報生成手順の一例である。
【０１７６】
その後、コード生成部６５０により、再利用区間情報生成部６４３から供給されたプログラムに基づいてオブジェクトプログラムが生成されて、その生成されたオブジェクトプログラムがオブジェクトプログラム記憶部６６０に記憶される（ステップＳ９３７）。
【０１７７】
このように、本発明の第２の実施の形態では、再利用度の高い再利用区間である関数における入力値設定命令アドレスおよびその区間識別情報が関連付けられた再利用区間情報を生成することができる。これにより、図２に示した履歴メモリ４３０において実行結果が再利用される可能性の高い関数に対する実行履歴が保持されるため、実行結果の再利用処理による実行時間の削減を向上させることができる。
【０１７８】
なお、本発明の第１および第２の実施の形態では、プログラム解析処理装置６００によって生成された再利用区間情報を、データ処理装置１００における入力値設定命令アドレステーブル５２０に登録する例について説明したが、これに限られるものではない。例えば、データ処理装置１００において、主記憶部１３０に記憶されたプログラムを実行しているときに、入力値設定命令アドレステーブル５２０に再利用区間情報を登録するようにしてもよい。そこで、プログラムの実行中に入力値設定命令アドレステーブル５２０に入力値設定命令アドレスおよび区間識別情報を登録するように改良したデータ処理装置１００を、第３の実施の形態として以下に説明する。
【０１７９】
＜３．第３の実施の形態＞
［データ処理装置１００の構成例］
図１１は、本発明の第３の実施の形態におけるデータ処理装置１００の一構成例を示すブロック図である。ここでは、図１に示したデータ処理装置１００のうち、データ処理部３００、実行結果再利用処理部７００および検索開始命令アドレス管理部８００が示されている。ここでは、データ処理部３００は、図２と同じものであるため、図２と同一符号を付してここでの説明を省略する。
【０１８０】
実行結果再利用処理部７００は、実行履歴検索部７１０と、実行結果出力部７２０と、履歴メモリ７３０と、実行データ保持部７４０とを備える。実行履歴検索部７１０、実行結果出力部７２０、履歴メモリ７３０および実行データ保持部７４０は、図２に示した実行履歴検索部４１０、実行結果出力部４２０、履歴メモリ４３０および実行データ保持部４４０に対応する。また、実行結果出力部７２０および履歴メモリ７３０の構成は、図２に示した実行結果出力部４２０および履歴メモリ４３０と同様のものであるため、ここでの説明を省略する。
【０１８１】
検索開始命令アドレス管理部８００は、アドレス判定部８１０と、入力値設定命令アドレステーブル８２０と、入力値設定命令アドレス出力部８３０と、設定入力値保持部８４０と、検索開始命令決定部８５０とを備える。アドレス判定部８１０および入力値設定命令アドレステーブル８２０は、図２に示したアドレス判定部５１０および入力値設定命令アドレステーブル５２０に対応する。
【０１８２】
ここでは、入力値設定命令アドレスおよび区間識別情報を入力値設定命令アドレステーブル８２０に登録する機能を中心に説明する。また、入力値設定命令アドレステーブル８２０に登録された入力値設定命令アドレスに基づいて、履歴メモリ７３０における実行結果を検索する手法については、図２と同様の構成により実現されるため、ここでの説明を省略する。
【０１８３】
実行データ保持部７４０は、アドレス判定部８１０からの指示に従って、実行結果再利用処理に用いるデータを保持して、その保持されたデータを実行履歴検索部７１０、設定入力値保持部８４０および検索開始命令決定部８５０に出力するものである。この実行データ保持部７４０は、アドレス判定部８１０からの入力値設定信号に基づく指示に従って、実行部３３０からの出力を、設定入力値として保持する。
【０１８４】
この実行データ保持部７４０は、時間軸上においてその設定入力値を保持した順番を、入力値設定命令により入力値が設定された設定順番として、その設定入力値とともに保持する。この実行データ保持部７４０は、例えば、アドレス判定部８１０からの入力値設定信号に基づく指示に従って、最初に保持した設定入力値を、１番目の設定入力値として保持する。
【０１８５】
また、実行データ保持部７４０は、アドレス判定部８１０からの関数呼出し信号に基づく指示に従って、その保持された設定入力値およびその設定順番を、設定入力値保持部８４０に出力する。この実行データ保持部７４０は、例えば、設定入力値に含まれる格納場所およびその設定順番を、設定入力値保持部８４０に出力する。ここにいう格納場所とは、レジスタファイル３４０のレジスタ番号または主記憶部１３０のメモリアドレスのことをいう。
【０１８６】
このとき、実行データ保持部７４０は、同一の格納場所を示す複数の設定入力値がある場合には、その複数の設定入力値のうち、最も大きい数（最大）の設定順番の設定入力値およびその設定順番だけを設定入力値保持部８４０に出力する。すなわち、実行データ保持部７４０は、同一の格納場所を示す複数の設定入力値がある場合には、その複数の設定入力値のうち、最後に設定された設定入力値およびその設定順番を出力する。あるいは、実行データ保持部７４０は、同一の格納場所を示す設定入力値を設定入力値保持部８４０に新たに保持させる場合には、その新たな設定入力値の設定順番を、既に保持されている設定入力値の設定順番の保持領域に重ねて保持させる（上書きする）。
【０１８７】
このように、同一の格納場所を示す複数の設定入力値のうち、最大の設定順番の設定入力値のみを設定入力値保持部８４０に保持させることによって、関数の入力値として参照されなかった入力値設定命令を登録の対象から除外することができる。これは、命令デコーダ３２０では、命令に示されたデータの格納先によってその命令が入力値設定命令か否かを判断するが、関数の命令区間以外では、関数の入力値が格納されるレジスタは、他の処理によっても参照される。このため、同一の格納場所を示す設定入力値のうち、関数の呼出し命令の直前に設定された設定入力値以外は、関数の入力値の設定ではないと判断できるからである。
【０１８８】
また、実行データ保持部７４０は、アドレス判定部８１０からの関数呼出し信号に基づく指示に従って、例えば、実行部３３０からの出力を、関数の区間識別情報として保持する。この実行データ保持部７４０は、アドレス判定部８１０からの関数呼出し信号に基づく指示に従って、例えば、プログラムカウンタ３５０からの命令アドレスを、関数の区間識別情報として保持する。
【０１８９】
また、実行データ保持部７４０は、アドレス判定部８１０からの入力値参照信号に基づく指示に従って、実行部３３０からの出力を、参照入力値として保持する。また、実行データ保持部７４０は、アドレス判定部８１０からの実行結果設定信号に基づく指示に従って、実行部３３０からの出力を、関数の実行結果として保持する。
【０１９０】
また、実行データ保持部７４０は、アドレス判定部８１０からの関数戻り信号に基づく指示に従って、その保持された区間識別情報および参照入力値を、検索開始命令決定部８５０に出力する。この実行データ保持部７４０は、例えば、アドレス判定部８１０からの関数戻り信号に基づく指示に従って、参照入力値に示される格納場所を検索開始命令決定部８５０に出力する。
【０１９１】
また、実行データ保持部７４０は、アドレス判定部８１０からの関数戻り信号に基づく指示に従って、その保持された区間識別情報、参照入力値および実行結果を、実行履歴検索部７１０に出力する。
【０１９２】
また、実行データ保持部７４０は、アドレス判定部８１０からの関数戻り信号に基づく指示に従って、その保持されたデータを実行履歴検索部７１０に出力した後に、実行データ保持部７４０に保持されたデータを消去する。
【０１９３】
アドレス判定部８１０は、プログラムに含まれる複数の命令区間である関数の入力値設定命令アドレスを入力値設定命令アドレス出力部８３０に保持させるものである。このアドレス判定部８１０は、命令デコーダ３２０から供給される入力値設定信号に基づいて、プログラムカウンタ３５０から出力された命令アドレスを、入力値命令アドレスとして入力値設定命令アドレス出力部８３０に保持させる。これとともに、このアドレス判定部８１０は、命令デコーダ３２０からの入力値設定信号に基づいて、実行部３３０から出力される入力値を、設定入力値として実行データ保持部７４０に保持させる。
【０１９４】
また、アドレス判定部８１０は、例えば、命令デコーダ３２０から供給される関数呼出し信号に基づいて、関数の命令区間である先頭アドレスを区間識別情報として実行データ保持部７４０に保持させる。このアドレス判定部８１０は、例えば、命令デコーダ３２０からの関数呼出し信号に基づいて、プログラムカウンタ３５０からの命令アドレスを区間識別情報として実行データ保持部７４０に保持させる。あるいは、このアドレス判定部８１０は、例えば、命令デコーダ３２０からの関数呼出し信号に基づいて、実行部３３０から出力される関数の先頭アドレスを区間識別情報として実行データ保持部４４０に保持させる。
【０１９５】
また、アドレス判定部８１０は、命令デコーダ３２０から供給される入力値参照信号に基づいて、実行部３３０から出力される入力値を、参照入力値として実行データ保持部７４０に保持させる。また、アドレス判定部８１０は、命令デコーダ３２０から供給される実行結果設定信号に基づいて、実行部３３０から出力された実行結果を実行データ保持部７４０に保持させる。
【０１９６】
入力値設定命令アドレステーブル８２０は、命令区間である関数を識別するための区間識別情報ごとに、その関数における入力値を設定するための入力値設定命令のアドレスである入力値設定命令アドレスを保持するものである。この入力値設定命令アドレステーブル８２０は、例えば、関数における入力値を設定するための入力値設定命令のうち、最初に入力値を設定する最先の入力値設定命令のアドレスを入力値設定命令アドレスとして区間識別情報ごとに保持する。
【０１９７】
また、入力値設定命令アドレステーブル８２０は、その保持されたデータをアドレス判定部８１０に出力する。なお、入力値設定命令アドレステーブル８２０には、関数が複数の引数を持つ場合には、その関数の区間識別情報ごとに、複数の引数に対応する入力値設定命令アドレスを複数保持させるようにしてもよい。また、入力値設定命令アドレステーブル８２０は、特許請求の範囲に記載の入力値設定命令アドレステーブルの一例である。
【０１９８】
入力値設定命令アドレス出力部８３０は、アドレス判定部８１０から供給された入力値設定命令アドレスと、検索開始命令決定部８５０から供給された区間識別情報とを関連付けて入力値設定命令アドレステーブル８２０に出力するものである。この入力値設定命令アドレス出力部８３０は、アドレス判定部８１０から供給された入力値設定命令アドレスを保持する。
【０１９９】
この入力値設定命令アドレス出力部８３０は、時間軸上においてその入力値設定命令アドレスを保持した順番である設定順番を、その入力値設定命令アドレスとともに保持する。この実行データ保持部７４０は、例えば、アドレス判定部８１０から供給された最初の入力値設定命令アドレスを１番目の入力値設定命令アドレスとして保持する。
【０２００】
また、入力値設定命令アドレス出力部８３０は、その保持された入力値設定命令アドレスのうち、検索開始命令決定部８５０により決定された設定順番の入力値設定命令アドレスと、検索開始命令決定部８５０からの区間識別情報とを関連付けて出力する。すなわち、入力値設定命令アドレス出力部８３０は、関数における入力値設定命令アドレスと、その関数の区間識別情報である関数の先頭アドレスとを関連付けて、関数ごとに入力値設定命令アドレステーブル８２０に登録する。
【０２０１】
また、入力値設定命令アドレス出力部８３０は、アドレス判定部８１０からの関数戻り信号に基づく指示に従って、その保持されたデータを登録した後に、入力値設定命令アドレス出力部８３０に保持されたデータを消去する。
【０２０２】
設定入力値保持部８４０は、実行データ保持部７４０から出力された設定入力値およびその設定順番を関連付けて保持するものである。この設定入力値保持部８４０は、その保持された設定入力値およびその設定順番を検索開始命令決定部８５０に出力する。
【０２０３】
検索開始命令決定部８５０は、関数の実行における入力値参照命令の実行により参照された参照入力値に含まれる格納場所に基づいて、検索開始命令としてその関数における最先の入力値設定命令を決定するためのものである。この検索開始命令決定部８５０は、関数の呼出し命令前の入力値設定命令に基づく設定入力値に含まれる格納場所と、呼出し命令後の入力値参照命令に基づく参照入力値に含まれる格納場所とに基づいて、最先の入力値設定命令の設定順番を特定する。
【０２０４】
この検索開始命令決定部８５０は、例えば、設定入力値保持部８４０における設定入力値のうち、実行データ保持部７４０からの参照入力値の格納場所に基づいて、関数の命令区間において参照された設定入力値の設定順番が抽出される。そして、この検索開始命令決定部８５０は、その抽出された設定入力値の設定順番のうち、最も小さい設定順番を特定する。
【０２０５】
すなわち、検索開始命令決定部８５０は、命令デコーダ３２０において入力値設定命令と判断された命令のうち、関数の命令区間において参照された入力値の格納場所に、最初に入力値を設定した入力値設定命令を、最先の入力値設定命令として特定する。
【０２０６】
また、検索開始命令決定部８５０は、その特定された最も小さい設定順番を入力値設定命令アドレス出力部８３０に通知する。これとともに、検索開始命令決定部８５０は、実行データ保持部７４０から出力された区間識別情報を入力値設定命令アドレス出力部８３０に出力する。
【０２０７】
また、検索開始命令決定部８５０は、実行データ保持部７４０から参照入力値の格納場所が出力され場合には、入力値設定命令アドレス出力部８３０に入力値設定命令アドレステーブル８２０に対する入力値設定命令アドレスの登録を抑制する。これにより、入力値設定命令アドレステーブル８２０に対する無駄な入力値設定命令アドレスの登録を低減することができる。
【０２０８】
実行履歴検索部７１０は、アドレス判定部８１０からの関数戻り信号に基づく登録指示に従って、実行データ保持部７４０からの区間識別情報、参照入力値および実行結果を履歴メモリ７３０に登録するものである。この実行履歴検索部７１０の他の機能は、図２に示した実行履歴検索部４１０と同様のものであるため、ここでの説明を省略する。
【０２０９】
このように、入力値設定命令アドレス出力部８３０を設けることによって、主記憶部１３０からのプログラムを実行している間において、入力値設定命令アドレステーブル８２０に、入力値設定命令アドレスおよび区間識情報を登録することができる。すなわち、入力値設定命令アドレス出力部８３０を設けることによって、入力値設定命令により保持された入力値設定命令アドレスと、その入力値設定命令により特定された命令区間の区間識別情報とを入力値設定命令アドレステーブル８２０に出力することができる。
【０２１０】
また、入力値設定命令アドレス出力部８３０は、検索開始命令決定部８５０によって、入力値設定命令により設定された入力値のうち、呼出し命令により呼び出された命令区間において参照された入力値に対応する入力値設定命令アドレスを出力することができる。すなわち、入力値設定命令アドレス出力部８３０は、命令区間において参照された複数の入力値に対応する入力値設定命令のうち、最先の入力値設定命令の入力値設定命令アドレスと区間識別情報である命令区間の先頭アドレスとを出力することができる。次に、入力値設定命令アドレステーブル８２０に入力値設定命令アドレスおよび区間識別情報を登録する例について以下に図面を参照して説明する。
【０２１１】
［入力値設定命令アドレステーブル８２０への登録例］
図１２は、本発明の第３の実施の形態におけるデータ処理装置１００による入力値設定命令アドレステーブル８２０に対する入力値設定命令アドレスおよび区間識別情報の登録例を示す概念図である。図１２（ａ）は、入力値設定命令アドレステーブル８２０のデータフォーマットの一例を示す図である。入力値設定命令アドレステーブル８２０には、関数である命令区間における最先の入力値設定命令アドレス８２１と、その関数を識別するための区間識別情報である関数アドレス８２２との対応関係が示されている。
【０２１２】
図１２（ｂ）は、入力値設定命令の実行のたびに保持された入力値設定命令アドレスおよび設定入力値との対応関係を示す図である。図１２（ｂ）には、設定順番８１１と、入力値設定命令アドレス８３１と、設定入力値８４１とが示されている。
【０２１３】
設定順番８１１は、入力値設定命令が実行された順番を示す。入力値設定命令アドレス８３１は、入力値設定命令に基づいて、入力値設定命令アドレス出力部８３０に保持された、プログラムカウンタ３５０からの命令アドレスを示す。設定入力値８４１は、入力値設定命令に基づいて、設定入力値保持部８４０に保持された入力値を示す。なお、この入力値は、入力値の格納場所を示す情報だけでもよい。入力値の格納場所が分かれば、関数における入力値が参照されたか否かを判断することができるからである。
【０２１４】
図１２（ｃ）は、上位ルーチンにおいて２つの引数を持つ関数が呼出し命令（ｃａｌｌ）によって呼び出された後に、その関数の命令区間である下位ルーチンにおいて戻り命令（ｒｅｔｕｒｎ）によって上位ルーチンに復帰する一連の処理例を示す概念図である。
【０２１５】
ここでは、関数の呼出し命令（ｃａｌｌ）３１１および戻り命令（ｒｅｔｕｅｎ）３１２が示されている。また、上位ルーチンにおける入力値Ａ設定３２１および入力値Ｂ設定３２２と、下位ルーチンにおける入力値Ａ参照３２３、入力値Ｂ参照３２４および実行結果Ｃ設定３２５とが示されている。これらは、図４（ｂ）に示したものと同様であるため、ここでの説明を省略する。
【０２１６】
図１２（ｄ）は、履歴メモリ７３０におけるデータフォーマットの一例を示す概念図である。ここでは、関数の区間識別情報である関数アドレス７３１と、実行履歴検索データ７３２との対応関係が示されている。実行履歴検索データ７３２は、図３に示した木構造により構成される検索データであって、実行履歴における入力値および実行結果が関連付けられた情報を含む検索データである。
【０２１７】
このような場合において、入力値Ａ設定３２１では、アドレス判定部８１０からの指示により、プログラムカウンタ３５０から出力された命令アドレス（入力値Ａ設定命令アドレス）が、入力値設定命令アドレス出力部８３０に保持される。このとき、アドレス判定部８１０からの指示により、実行データ保持部７４０に保持された１番目の設定入力値（入力値Ａ）が、設定入力値保持部８４０に出力される。
【０２１８】
入力値Ｂ設定３２２では、アドレス判定部８１０の指示により、プログラムカウンタ３５０から出力された命令アドレス（入力値Ｂ設定命令アドレス）が、入力値設定命令アドレス出力部８３０に保持される。このとき、アドレス判定部８１０からの指示により、実行データ保持部７４０に保持された２番目の設定入力値（入力値Ｂ）が、設定入力値保持部８４０に出力される。
【０２１９】
呼出し命令（ｃａｌｌ）３１１では、アドレス判定部８１０からの指示により、実行データ保持部７４０に区間識別情報（関数アドレス１）が保持される。入力値Ａ参照３２３、入力値Ｂ参照３２４および実行結果Ｃ設定３２５では、アドレス判定部８１０の指示により、１番目の参照入力値（入力値Ａ）、２番目の参照入力値（入力値Ｂ）および実行結果（実行結果Ｃ）が実行データ保持部７４０に保持される。
【０２２０】
戻り命令（ｒｅｔｕｒｎ）３１２では、アドレス判定部８１０からの指示により、実行データ保持部７４０における区間識別情報（関数アドレス１）、１番目および２番目の参照入力値（入力値Ａおよび入力値Ｂ）が、検索開始命令決定部８５０に出力される。これにより、検索開始命令決定部８５０によって、１番目および２番目の参照入力値（入力値Ａおよび入力値Ｂ）に対応する設定入力値保持部８４０における１番目および２番目の設定入力値（入力値Ａおよび入力値Ｂ）が抽出される。
【０２２１】
すなわち、実行データ保持部７４０における参照入力値の格納場所に基づいて、設定入力値保持部８４０における設定入力値のうち、関数の実行により参照された入力値が特定される。これは、命令デコーダ３２０により入力値設定命令と判断された命令であっても、関数に対する入力値を設定する命令でない場合があるからである。例えば、レジスタ４番にデータを格納する命令は、命令デコーダ３２０によって入力値設定命令と判断されるが、関数の命令区間外では、他の処理によっても使用される場合がある。
【０２２２】
そして、検索開始命令決定部８５０によって、その抽出された設定入力値の設定順番（１および２）のうち、最も小さい設定順番（１）が選択される。すなわち、検索開始命令決定部８５０により、関数における最先の入力値設定命令に基づいて設定された設定入力値に対応する設定順番（１）が選択される。
【０２２３】
これにより、検索開始命令決定部８５０から設定順番（１）および区間識別情報（関数アドレス１）が、入力値設定命令アドレス出力部８３０に供給される。そして、入力値設定命令アドレス出力部８３０により、検索開始命令決定部８５０からの設定順番（１）に対応する「入力値Ａ設定命令アドレス」と、「関数アドレス１」とが関連付けられて入力値設定命令アドレステーブル８２０に出力される。
【０２２４】
また、アドレス判定部８１０からの指示により、実行データ保持部７４０における区間識別情報（関数アドレス１）、参照入力値（入力値Ａおよび入力値Ｂ）および実行結果（実行結果Ｃ）が、実行履歴検索部７１０に出力される。そして、実行履歴検索部７１０により、その出力されたデータが履歴メモリ７３０に登録される。
【０２２５】
［データ処理装置１００の動作例］
次に本発明の第３の実施の形態におけるデータ処理装置１００の動作について図面を参照して説明する。
【０２２６】
図１３は、本発明の第３の実施の形態におけるデータ処理装置１００による実行結果再利用方法の処理手順の一例を示すフローチャートである。
【０２２７】
まず、フェッチ部３１０により、主記憶部１３０または命令キャッシュ２１０から命令が読み出される（ステップＳ９４１）。続いて、アドレス判定部８１０により、プログラムカウンタ３５０から出力される命令アドレスが、入力値設定命令アドレステーブル８２０における入力値設定命令アドレスと一致するか否かが判断される（ステップＳ９４２）。
【０２２８】
そして、プログラムカウンタ３５０からの命令アドレスが入力値設定命令アドレスと一致する場合には、実行履歴検索処理（ステップＳ９６０）が実行される。一方、入力値設定命令アドレスと一致しない場合には、命令デコーダ３２０により、入力値設定命令か否かが判断される（ステップＳ９４３）。
【０２２９】
そして、入力値設定命令と判断された場合には、アドレス判定部８１０からの指示により、プログラムカウンタ３５０からの命令アドレスが、入力値設定命令アドレスとして入力値設定命令アドレス出力部８３０に保持される（ステップＳ９５４）。続いて、アドレス判定部８１０からの指示によって実行部３３０からの出力が設定入力値として実行データ保持部７４０に保持されて、その保持された設定入力値が、設定入力値保持部８４０に保持される（ステップＳ９５５）。
【０２３０】
一方、入力値設定命令でないと判断された場合には、命令デコーダ３２０により、関数の呼出し命令か否かが判断される（ステップＳ９４４）。そして、関数の呼出し命令でないと判断された場合には、ステップＳ９４１に戻る。
【０２３１】
このようにして、関数の呼出し命令が読み出されるまでの間、入力値設定命令が読み出されるたびに、プログラムカウンタ３５０からの命令が、入力値設定命令アドレス出力部８３０に、設定入力値およびその設定順番が、設定入力値保持部８４０に保持される。この場合において、設定入力値の格納場所が同一の設定入力値が、設定入力値保持部８４０に既に保持されているときは、既に保持されている設定入力値およびその設定順番の保持領域に重ねて、新たな設定入力値およびその設定順番が保持される。
【０２３２】
一方、関数の呼出し命令でないと判断された場合には、アドレス判定部８１０により、関数の先頭アドレスが、区間識別情報として実行データ保持部７４０に保持される（ステップＳ９４５）。次に、関数の命令区間において、フェッチ部３１０により、主記憶部１３０または命令キャッシュ２１０から命令が読み出される（ステップＳ９４６）。続いて、命令デコーダ３２０により、その読み出された命令が入力値参照命令であるか否かが判断される（ステップＳ９４７）。
【０２３３】
そして、入力値参照命令と判断された場合には、アドレス判定部８１０からの指示により、実行部３３０からの出力を、参照入力値としてその順番とともに実行データ保持部７４０に保持されて（ステップＳ９５６）、ステップＳ９４６の処理に戻る。一方、入力値参照命令でないと判断された場合には、命令デコーダ３２０により、読み出された命令が、実行結果設定命令か否かが判断される（ステップＳ９４８）。
【０２３４】
そして、実行結果設定命令であると判断された場合には、アドレス判定部８１０からの指示により、実行部３３０からの出力を、実行結果として実行データ保持部７４０に保持させて（ステップＳ９５７）、ステップＳ９４６の処理に戻る。一方、実行結果設定命令でないと判断された場合には、命令デコーダ３２０により、読み出された命令が、関数の戻り命令であるか否かが判断される（ステップＳ９４９）。
【０２３５】
そして、関数の戻り命令でないと判断された場合には、ステップＳ９４６に戻り、関数の呼出し命令が読み出されるまで、参照入力値および実行結果が、実行データ保持部７４０に保持される。
【０２３６】
一方、関数の呼出し命令と判断された場合には、検索開始命令決定部８５０により、設定入力値保持部８４０に保持された設定入力値のうち、実行データ保持部７４０に保持された参照入力値に基づいて、関数における最先の設定入力値の設定順番が特定される。そして、入力値設定命令アドレス出力部８３０における入力値設定命令アドレスのうち、検索開始命令決定部８５０により特定された設定順番に対応する入力値設定命令アドレスが、最先の入力値設定命令アドレスとして抽出される。
【０２３７】
これにより、入力値設定命令アドレス出力部８３０により、最先の入力値設定命令アドレスと、実行データ保持部７４０からの区間識別情報とが関連付けられて入力値設定命令アドレステーブル８２０に登録される（ステップＳ９５１）。また、アドレス判定部８１０からの登録指示により、実行履歴検索部７１０によって実行データ保持部７４０における区間識別情報、参照入力値および実行結果が、履歴メモリ７３０に登録される（ステップＳ９５２）。
【０２３８】
そして、履歴メモリ７３０および入力値設定命令アドレステーブル８２０への登録が終了した後に、実行データ保持部７４０、設定入力値保持部８４０および入力値設定命令アドレス出力部８３０におけるデータが消去される（ステップＳ９５３）。そして、実行結果再利用方法の処理を終了する。
【０２３９】
［データ処理装置１００における実行履歴検索処理の例］
図１４は、本発明の第３の実施形態におけるデータ処理装置１００による実行履歴検索処理（ステップＳ９６０）の処理手順例を示すフローチャートである。
【０２４０】
まず、アドレス判定部８１０により、プログラムカウンタ３５０からの命令アドレスと一致する入力値設定命令アドレスに対応する区間識別情報が、入力値設定命令アドレステーブル８２０から実行データ保持部７４０に出力される（ステップＳ９６３）。続いて、実行履歴検索部７１０により、履歴メモリ７３０の検索キーとして、実行データ保持部７４０に保持された区間識別情報が履歴メモリ７３０に入力される（ステップＳ９６４）。これにより、履歴メモリ７３０における区間識別情報に対応する複数の実行履歴の検索が開始される。
【０２４１】
次に、命令デコーダ３２０により、フェッチ部３１０から読み出された命令が、入力値設定命令であるか否かが判断される（ステップＳ９６５）。そして、入力値設定命令であると判断された場合には、命令デコーダ３２０からの入力値設定信号に基づいて、入力値設定命令により設定された入力値が、アドレス判定部８１０によって実行データ保持部７４０に保持される。
【０２４２】
この後、実行履歴検索部７１０により、実行データ保持部７４０に保持された入力値が、履歴メモリ７３０に入力される（ステップＳ９７１）。なお、１回目のステップＳ９６５の判断については、ここでは、必ず入力値設定命令と判断されるため、その判断を省略して、ステップＳ９７１に進むようにしてもよい。
【０２４３】
続いて、実行履歴検索部７１０からの区間識別情報に対応する履歴メモリ７３０における実行履歴について、履歴メモリ７３０により、実行履歴検索部７１０からの入力値と、その実行履歴における入力値とが一致するか否かが判断される（ステップＳ９７２）。そして、両者の入力値が一致しない場合には、ステップＳ９７４の処理に進む。
【０２４４】
一方、両者の入力値が一致した場合には、履歴メモリ７３０において、実行履歴における次の引数の入力値を比較するために、次の引数における引数ノードにポインタが進められる（ステップＳ９７３）。すなわち、実行履歴検索部７１０からの入力値と一致する引数ノードがあれば、その引数ノードの右ポインタによって、次の引数ノードが指し示される。次に、フェッチ部３１０により、主記憶部１３０または命令キャッシュ２１０から命令が読み出され（ステップＳ９７４）、ステップＳ９１５の処理に戻る。
【０２４５】
一方、ステップＳ９６５の処理において、入力値設定命令でないと判断された場合において、フェッチ部３１０により読み出された命令が関数の呼出し命令であるか否かが判断される（ステップＳ９６６）。そして、関数の呼出し命令でない場合には、ステップＳ９７４に進む。
【０２４６】
このようにして、関数における全ての入力値が設定されるまで、ステップＳ９６５、Ｓ９６６およびＳ９７１乃至Ｓ９７４における一連の処理が繰り返し実行される。すなわち、入力値設定命令アドレステーブル８２０により特定された入力値設定命令から呼出し命令までの関数の入力値設定命令に基づいて設定された入力値が、実行データ保持部７４０に保持されて、その保持された入力値が履歴メモリ７３０に入力される。
【０２４７】
このように、プログラムカウンタ３５０から出力される命令アドレスと一致する入力値設定命令アドレスに対応する区間識別情報が実行データ保持部７４０に保持される。そして、その入力値設定命令アドレスにより特定された入力値設定命令から呼出し命令までの命令群のうちの入力値設定命令に基づいて実行部から出力された入力値が、実行データ保持部７４０に保持される。
【０２４８】
これにより、実行履歴検索部７１０によって、実行データ保持部７４０における区間識別情報および入力値を用いて、履歴メモリ７３０における実行履歴に関連付けられた実行結果が検索される。なお、ステップＳ９６３乃至Ｓ９６６およびＳ９７１乃至Ｓ９７４は、特許請求の範囲に記載の実行履歴検索手順の一例である。
【０２４９】
一方、ステップＳ９６６において、関数の呼出し命令と判断された場合には、実行データ保持部７４０における区間識別情報および入力値が、履歴メモリ７３０における区間識別情報に関連付けられた入力値と全て一致したか否かが判断される（ステップＳ９６７）。
【０２５０】
そして、実行履歴検索部７１０からの区間識別情報および入力値が全て一致した場合には、実行結果再利用処理が実行される（ステップＳ９７５）。すなわち、実行履歴検索部７１０からの区間識別情報および入力値に対応する履歴メモリ７３０における実行結果が、実行結果出力部７２０から出力される。そして、主記憶部１３０またはレジスタファイル３４０に書き戻されて、関数の処理をスキップする。なお、Ｓ９７５は、特許請求の範囲に記載の実行結果出力手順の一例である。
【０２５１】
一方、実行履歴検索部７１０からの区間識別情報および入力値が全て一致しない場合には、呼出し命令により呼び出された関数が実行されて、その実行結果が実行データ保持部７４０に保持される（ステップＳ９６８）。そして、実行履歴検索部７１０により、実行データ保持部７４０に保持された実行結果と、ステップＳ９６３およびＳ９７１の処理によって保持された区間識別情報および入力値とが、履歴メモリ７３０に登録される（ステップＳ９１９）。
【０２５２】
このように、本発明の第３の実施の形態では、検索開始命令アドレス管理部８００は、プログラムの実行中において、関数における最先の入力値設定命令アドレスを入力値設定命令アドレステーブル８２０に登録することができる。
【０２５３】
このように、本発明の実施の形態によれば、命令区間の呼出し命令の実行の前に、履歴メモリ４３０または７３０における実行履歴を検索することができるため、実行結果の再利用によるプログラムの処理時間を短縮することができる。また、入力値設定命令アドレステーブル５２０および７２０を設けることによって、プログラム自体に専用命令を埋め込むことなく、関数の呼出し命令の実行前に、履歴メモリ４３０または７３０における実行履歴を検索することができる。
【０２５４】
なお、本発明の実施の形態では、履歴メモリ４３０または７３０を、ＳＲＡＭ（Static Random Access Memory）やＲＯＭ（Read Only Memory）などの不揮発メモリにより実現するようにしてもよい。これにより、データ処理装置１００の電源がオフされた場合であっても、履歴メモリ４３０または７３０に保持された実行履歴は消失しないため、データ処理装置１００の起動直後においても、過去の実行結果を有効に利用することができる。このため、データ処理装置１００の起動直後における実行結果再利用処理による実行時間の削減効果の低下を抑制することができる。
【０２５５】
また、プログラムの実行後に、データ処理装置１００の外部に設けた記憶部に履歴メモリ４３０または７３０に保持された履歴データを転送するようにしてもよい。ここで、履歴データを記憶する記憶部をデータ処理装置１００の外部に設けた場合を、第４の実施の形態として、次図を参照して簡単に説明する。
【０２５６】
＜４．第４の実施の形態＞
［データ処理装置１００の外部に履歴データ記憶部を設けた例］
図１５は、本発明の第４の実施の形態におけるデータ処理装置１００の外部に履歴データ記憶部を設けた場合における集積回路の一構成例を示すブロック図である。ここでは、図１に示した集積回路の構成に加えて履歴データ記憶部１４０が示されている。この履歴データ記憶部１４０以外の構成は、図１に示したものと同様であるため、ここでの説明を省略する。
【０２５７】
履歴データ記憶部１４０は、主記憶部１３０に記憶されたプログラムが実行された後に、データ処理装置１００から転送された履歴メモリ４３０または７３０における履歴データを記憶するものである。この履歴データ記憶部１４０は、例えば、不揮発性メモリにより実現される。
【０２５８】
このように、不揮発性メモリにより実現される履歴データ記憶部１４０をデータ処理装置１００の外部に設けて、履歴メモリ４３０または７３０の履歴データを転送することによって、電源オフによる履歴データの消失を回避することができる。次に、履歴データの転送方法について、次図を参照して簡単に説明する。
【０２５９】
図１６は、本発明の第４の実施の形態におけるデータ処理装置１００による履歴データ転送方法の処理手順を示すフローチャートである。
【０２６０】
まず、アプリケーションが起動されて（ステップＳ９９１）、データ処理部３００により、履歴データ記憶部１４０に履歴データがあるか否かが判断される（ステップＳ９９２）。
【０２６１】
そして、履歴データ記憶部１４０に履歴データが記憶されている場合には、データ処理部３００により、その記憶された履歴データが履歴メモリ４３０または７３０に転送される（ステップＳ９９３）。一方、履歴データが記憶されていない場合には、ステップＳ９９４に進む。
【０２６２】
そして、データ処理部３００により、主記憶部１３０に記憶されたプログラムであるアプリケーションが実行される（ステップＳ９９４）。このアプリケーションの実行後に、データ処理部３００により、履歴データ記憶部１４０および履歴メモリ４３０または７３０における両者の履歴データに基づいて、履歴データ記憶部１４０に記憶させる新たに履歴データが再構築される（ステップＳ９９５）。そして、その再構築された履歴データを履歴データ記憶部１４０に記憶する。
【０２６３】
このように、プログラムの実行前に、履歴データ記憶部１４０に記憶された過去の履歴データを履歴メモリ４３０または７３０に転送することによって、プログラムの起動直後における再利用処理による実行時間の短縮効果を向上させることができる。
【０２６４】
なお、本発明の実施の形態では、１つの関数の命令区間に対する実行結果に再利用の例について説明したが、関数の命令区間において、さらに複数回関数を呼び出すような多重構造の関数に対しても適用することができる。
【０２６５】
なお、本発明の実施の形態は本発明を具現化するための一例を示したものであり、本発明の実施の形態において明示したように、本発明の実施の形態における事項と、特許請求の範囲における発明特定事項とはそれぞれ対応関係を有する。同様に、特許請求の範囲における発明特定事項と、これと同一名称を付した本発明の実施の形態における事項とはそれぞれ対応関係を有する。ただし、本発明は実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において実施の形態に種々の変形を施すことにより具現化することができる。
【０２６６】
また、本発明の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。この記録媒体として、例えば、ＣＤ（Compact Disc）、ＭＤ（MiniDisc）、ＤＶＤ（Digital Versatile Disk）、メモリカード、ブルーレイディスク（Blu-ray Disc（登録商標））等を用いることができる。
【符号の説明】
【０２６７】
１００  データ処理装置
１２０  バス
１３０  主記憶部
２００  一次キャッシュ
２１０  命令キャッシュ
２２０  データキャッシュ
３００  データ処理部
３１０  フェッチ部
３２０  命令デコーダ
３３０  実行部
３３１  ロードユニット
３３２  入力選択部
３３３  演算回路
３３４  ストアユニット
３４０  レジスタファイル
３５０  プログラムカウンタ
４００、７００  実行結果再利用処理部
４１０、７１０  実行履歴検索部
４２０、７２０  実行結果出力部
４３０、７３０  履歴メモリ
４４０、７４０  実行データ保持部
５００、８００  検索開始命令アドレス管理部
５１０、８１０  アドレス判定部
５２０、８２０  入力値設定命令アドレステーブル
６００  プログラム解析処理装置
６１０  ソースプログラム記憶部
６２０  コンパイル処理部
６３０  プログラム解析部
６３１  再利用候補区間抽出部
６３２  再利用候補区間解析部
６４０  プログラム最適化処理部
６４１  再利用度生成部
６４２  再利用区間抽出部
６４３  再利用区間情報生成部
６５０  コード生成部
６６０  オブジェクトプログラム記憶部
６７０  再利用区間情報記憶部
８４０  設定入力値保持部
８５０  検索開始命令決定部
【図１】
2011039858.tif 000003
【図２】
2011039858.tif 000004
【図３】
2011039858.tif 000005
【図４】
2011039858.tif 000006
【図５】
2011039858.tif 000007
【図６】
2011039858.tif 000008
【図７】
2011039858.tif 000009
【図８】
2011039858.tif 000010
【図９】
2011039858.tif 000011
【図１０】
2011039858.tif 000012
【図１１】
2011039858.tif 000013
【図１２】
2011039858.tif 000014
【図１３】
2011039858.tif 000015
【図１４】
2011039858.tif 000016
【図１５】
2011039858.tif 000017
【図１６】
2011039858.tif 000018