(57)【特許請求の範囲】
【請求項１】
互いに類似する第１関数と第２関数を含むプログラムのシミュレーションを実行するシミュレーション装置において、
前記第１関数の命令列の開始アドレスである第１開始アドレスと、前記第１関数の命令列の終了アドレスである第１終了アドレスと、前記第２関数の命令列の開始アドレスである第２開始アドレスと、前記第２関数の命令列の終了アドレスである第２終了アドレスとを対応付けたアドレス情報を記憶するアドレス情報記憶部と、
シミュレーションを実行する命令列のアドレスをオリジナルアドレスとして取得し、前記アドレス情報を用いて、前記オリジナルアドレスが前記第１開始アドレスと前記第１終了アドレスとの間にあるかを判定し、前記オリジナルアドレスが前記第１開始アドレスと前記第１終了アドレスとの間にある場合に、前記オリジナルアドレスを前記第２開始アドレスと前記第２終了アドレスとの間に再配置し、再配置されたアドレスを処理アドレスとするアドレス再配置部と、
前記処理アドレスについてキャッシュシミュレーションを実行し、キャッシュヒットかキャッシュミスかを評価する評価部と
を備えたシミュレーション装置。
【請求項２】
前記シミュレーション装置は、
次にシミュレーションを実行する命令のアドレスを命令アドレスとして前記アドレス再配置部に出力する命令実行部を備え、
前記アドレス再配置部は、
前記命令アドレスを前記オリジナルアドレスとして取得する請求項１に記載のシミュレーション装置。
【請求項３】
前記アドレス再配置部は、
前記オリジナルアドレスが前記第１開始アドレスと前記第１終了アドレスとの間にある場合に、前記オリジナルアドレスについて前記第１開始アドレスからのオフセット値を算出し、前記第２開始アドレスに前記オフセット値を加算したアドレスを再配置アドレスとして算出し、前記再配置アドレスが前記第２終了アドレス未満の場合に、前記再配置アドレスを前記処理アドレスとする請求項１または２に記載のシミュレーション装置。
【請求項４】
前記アドレス再配置部は、
前記再配置アドレスが前記第２終了アドレス以上の場合に、前記第２終了アドレスを前記処理アドレスとする請求項３に記載のシミュレーション装置。
【請求項５】
互いに類似する第１関数と第２関数を含むプログラムのシミュレーションを実行するシミュレーション装置のシミュレーション方法において、
前記シミュレーション装置は、前記第１関数の命令列の開始アドレスである第１開始アドレスと、前記第１関数の命令列の終了アドレスである第１終了アドレスと、前記第２関数の命令列の開始アドレスである第２開始アドレスと、前記第２関数の命令列の終了アドレスである第２終了アドレスとを対応付けたアドレス情報を記憶するアドレス情報記憶部を有し、
アドレス再配置部が、シミュレーションを実行する命令列のアドレスをオリジナルアドレスとして取得し、前記アドレス情報を用いて、前記オリジナルアドレスが前記第１開始アドレスと前記第１終了アドレスとの間にあるかを判定し、前記オリジナルアドレスが前記第１開始アドレスと前記第１終了アドレスとの間にある場合に、前記オリジナルアドレスを前記第２開始アドレスと前記第２終了アドレスとの間に再配置し、再配置されたアドレスを処理アドレスとし、
評価部が、前記処理アドレスについてキャッシュシミュレーションを実行し、キャッシュヒットかキャッシュミスかを評価するシミュレーション方法。
【請求項６】
互いに類似する第１関数と第２関数を含むプログラムのシミュレーションを実行するシミュレーション装置のシミュレーションプログラムにおいて、
前記シミュレーション装置は、前記第１関数の命令列の開始アドレスである第１開始アドレスと、前記第１関数の命令列の終了アドレスである第１終了アドレスと、前記第２関数の命令列の開始アドレスである第２開始アドレスと、前記第２関数の命令列の終了アドレスである第２終了アドレスとを対応付けたアドレス情報を記憶するアドレス情報記憶部を有し、
シミュレーションを実行する命令列のアドレスをオリジナルアドレスとして取得し、前記アドレス情報を用いて、前記オリジナルアドレスが前記第１開始アドレスと前記第１終了アドレスとの間にあるかを判定し、前記オリジナルアドレスが前記第１開始アドレスと前記第１終了アドレスとの間にある場合に、前記オリジナルアドレスを前記第２開始アドレスと前記第２終了アドレスとの間に再配置し、再配置されたアドレスを処理アドレスとするアドレス再配置処理と、
前記処理アドレスについてキャッシュシミュレーションを実行し、キャッシュヒットかキャッシュミスかを評価する評価処理と
をコンピュータである前記シミュレーション装置に実行させるシミュレーションプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シミュレーション装置、シミュレーション方法およびシミュレーションプログラムに関する。特に、組み込み機器の開発におけるプログラムの実行をシミュレートするシミュレーション装置、シミュレーション方法およびシミュレーションプログラムに関する。
【背景技術】
【０００２】
近年の組み込み機器は、高性能なプロセッサを採用しているため、キャッシュあるいは条件分岐といった機能によって与えられる影響が大きい。このような機能を効率的に利用するソフトウェアを実装した場合、ユーザの想定通りのハードウェア性能を満たす。一方、このような機能を十分に利用できないソフトウェアを実装した場合、ユーザの想定通りのハードウェア性能を満たせない。このため、性能低下を引き起こすソフトウェアの処理を検出し、ハードウェアが持つ機能を効率的に利用できるソフトウェアに改善する必要がある。
特許文献１には、性能評価シミュレータを使って、メモリ上のデータを並び替えた際の性能を計測する技術が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１４−１４２６８２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１では、重複コードを共通化する際の性能評価を効率的に行うことができない。性能向上のためにソフトウェアのリファクタリングを行い、重複コードを共通化する場合、データの参照関係あるいは関数のインタフェースを変更するための工数が必要となる。重複コードとは、類似処理を行っている関数の命令コードを指す。リファクタリングによる性能向上が無い場合、リファクタリングにかかった工数が無駄となる。【０００５】
本発明は、重複コードを仮想的に共通化した際の性能を評価することができるシミュレーション装置を提供する。
【課題を解決するための手段】
【０００６】
本発明に係るシミュレーション装置は、互いに類似する第１関数と第２関数を含むプログラムのシミュレーションを実行するシミュレーション装置において、
前記第１関数の命令列の開始アドレスである第１開始アドレスと、前記第１関数の命令列の終了アドレスである第１終了アドレスと、前記第２関数の命令列の開始アドレスである第２開始アドレスと、前記第２関数の命令列の終了アドレスである第２終了アドレスとを対応付けたアドレス情報を記憶するアドレス情報記憶部と、
シミュレーションを実行する命令列のアドレスをオリジナルアドレスとして取得し、前記アドレス情報を用いて、前記オリジナルアドレスが前記第１開始アドレスと前記第１終了アドレスとの間にあるかを判定し、前記オリジナルアドレスが前記第１開始アドレスと前記第１終了アドレスとの間にある場合に、前記オリジナルアドレスを前記第２開始アドレスと前記第２終了アドレスとの間に再配置し、再配置されたアドレスを処理アドレスとするアドレス再配置部と、
前記処理アドレスについてキャッシュシミュレーションを実行し、キャッシュヒットかキャッシュミスかを評価する評価部と
を備えた。
【発明の効果】
【０００７】
本発明に係るシミュレーション装置は、互いに類似する第１関数と第２関数を含むプログラムのシミュレーションを実行する。アドレス情報記憶部は、第１関数の命令列の開始アドレスである第１開始アドレスと、第１関数の命令列の終了アドレスである第１終了アドレスと、第２関数の命令列の開始アドレスである第２開始アドレスと、第２関数の命令列の終了アドレスである第２終了アドレスとを対応付けたアドレス情報を記憶する。アドレス再配置部は、オリジナルアドレスが第１開始アドレスと第１終了アドレスとの間にある場合に、オリジナルアドレスを第２開始アドレスと前記第２終了アドレスとの間に処理アドレスとして再配置する。評価部は、処理アドレスについてキャッシュシミュレーションを実行し、キャッシュヒットかキャッシュミスかを評価する。よって、本発明に係るシミュレーション装置によれば、プログラムのリファクタリングを行う前に、重複コードを仮想的に共通化した際の性能を評価することができ、無駄なリファクタリングの発生を抑制することができる。
【図面の簡単な説明】
【０００８】
【図１】実施の形態１に係るシミュレーション装置１００の構成図。
【図２】実施の形態１に係るアドレス情報４２１の構成図。
【図３】実施の形態１に係るシミュレーション方法６１０およびシミュレーションプログラム６２０のシミュレーション処理Ｓ１００のフロー図。
【図４】実施の形態１に係るアドレス再配置処理Ｓ２０のフロー図。
【図５】実施の形態１の変形例に係るシミュレーション装置１００の構成図。
【発明を実施するための形態】
【０００９】
実施の形態１．
＊＊＊構成の説明＊＊＊
図１を用いて、本実施の形態に係るシミュレーション装置１００の構成について説明する。本実施の形態に係るシミュレーション装置１００は、互いに類似する第１関数１０と第２関数２０を含むプログラム２００のシミュレーションを実行する。互いに類似する第１関数１０と第２関数２０とを重複コードともいう。シミュレーション装置１００は、重複コードを仮想的に共通化した際の性能を評価することができる。
重複コードとは、類似処理を行っている複数の関数を指す。本実施の形態では、第１関数１０を、共通化する対象の関数である共通化関数１０１ともいう。また、第２関数２０を、共通化する先の関数である共通化先関数２０１ともいう。
仮想的に共通化した際の性能を評価するとは、共通化関数１０１を、共通化する先の１つの関数である共通化先関数２０１に共通化したと仮定して、キャッシュシミュレーションを行い、キャッシュヒットかキャッシュミスかの判定を行うことである。
【００１０】
図１に示すように、シミュレーション装置１００は、コンピュータである。
シミュレーション装置１００は、プロセッサ９１０、記憶装置９２０、入力インタフェース９３０、および出力インタフェース９４０といったハードウェアを備える。記憶装置９２０は、メモリ９２１と補助記憶装置９２２とを含む。
【００１１】
シミュレーション装置１００は、機能構成として、命令実行部１１０と、アドレス再配置部１２０と、評価部１３０と、記憶部１４０とを備える。記憶部１４０は、命令記憶部１４１と、アドレス情報記憶部１４２とを有する。アドレス情報記憶部１４２は、アドレス情報４２１を記憶する。
命令実行部１１０と、アドレス再配置部１２０と、評価部１３０のそれぞれの機能は、ソフトウェアで実現される。
記憶部１４０は、メモリ９２１により実現される。また、記憶部１４０は、補助記憶装置９２２のみ、あるいは、メモリ９２１および補助記憶装置９２２で実現されてもよい。記憶部１４０の実現方法は任意である。
【００１２】
プロセッサ９１０は、信号線を介して他のハードウェアと接続され、これら他のハードウェアを制御する。プロセッサ９１０は、演算処理を行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である。プロセッサ９１０の具体例は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。
【００１３】
メモリ９２１は、データを一時的に記憶する記憶装置である。メモリ９２１の具体例は、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
【００１４】
補助記憶装置９２２は、データを保管する記憶装置である。補助記憶装置９２２の具体例は、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）である。また、補助記憶装置９２２は、ＳＤ（登録商標）（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ）メモリカード、ＣＦ（ＣｏｍｐａｃｔＦｌａｓｈ）、ＮＡＮＤフラッシュ、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ（登録商標）ディスク、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）といった可搬記憶媒体であってもよい。
【００１５】
入力インタフェース９３０は、マウス、キーボード、タッチパネルといった入力装置と接続されるポートである。入力インタフェース９３０は、具体的には、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）端子である。なお、入力インタフェース９３０は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）と接続されるポートであってもよい。入力インタフェース９３０は、プログラム２００を取得し、命令実行部１１０に渡す。
【００１６】
出力インタフェース９４０は、ディスプレイといった表示機器のケーブルが接続されるポートである。出力インタフェース９４０は、具体的には、ＵＳＢ端子またはＨＤＭＩ（登録商標）（Ｈｉｇｈ  Ｄｅｆｉｎｉｔｉｏｎ  Ｍｕｌｔｉｍｅｄｉａ  Ｉｎｔｅｒｆａｃｅ）端子である。ディスプレイは、具体的には、ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）である。
【００１７】
補助記憶装置９２２には、命令実行部１１０と、アドレス再配置部１２０と、評価部１３０のそれぞれの機能を実現するプログラムが記憶されている。命令実行部１１０と、アドレス再配置部１２０と、評価部１３０のそれぞれの機能を実現するプログラムをシミュレーションプログラム６２０ともいう。このプログラムは、メモリ９２１にロードされ、プロセッサ９１０に読み込まれ、プロセッサ９１０によって実行される。また、補助記憶装置９２２はＯＳを記憶している。補助記憶装置９２２にされているＯＳの少なくとも一部がメモリ９２１にロードされる。プロセッサ９１０はＯＳを実行しながら、シミュレーションプログラム６２０を実行する。
【００１８】
シミュレーション装置１００は、１つのプロセッサ９１０のみを備えていてもよいし、複数のプロセッサ９１０を備えていてもよい。複数のプロセッサ９１０が、命令実行部１１０と、アドレス再配置部１２０と、評価部１３０のそれぞれの機能を実現するプログラムを連携して実行してもよい。
【００１９】
命令実行部１１０と、アドレス再配置部１２０と、評価部１３０のそれぞれの処理の結果を示す情報、データ、信号値、および変数値は、シミュレーション装置１００の補助記憶装置９２２、メモリ９２１、または、プロセッサ９１０内のレジスタまたはキャッシュメモリに記憶される。
【００２０】
命令実行部１１０と、アドレス再配置部１２０と、評価部１３０のそれぞれの機能を実現するプログラムは、可搬記録媒体に記憶されてもよい。可搬記録媒体とは、具体的には、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ（登録商標）ディスク、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）である。
なお、シミュレーションプログラムプロダクトとは、シミュレーションプログラム６２０が記録された記憶媒体および記憶装置である。シミュレーションプログラムプロダクトは、外観に関わらず、コンピュータ読み取り可能なプログラムをロードしているものを指す。
【００２１】
＊＊＊機能の説明＊＊＊
命令実行部１１０は、シミュレーション対象マシンのプロセッサの命令コードを、シミュレーションを実行するマシン、すなわちシミュレーション装置１００のプロセッサの命令コードに変換し、変換した命令コードを実行する。ここで、シミュレーション対象マシンをターゲットマシンともいう。また、シミュレーション対象マシンのプロセッサをターゲットＣＰＵともいう。また、シミュレーションを実行するマシンをホストマシンともいう。シミュレーションを実行するマシンのプロセッサをホストＣＰＵともいう。
すなわち、命令実行部１１０は、ターゲットマシンのターゲットＣＰＵの命令コードを、ホストマシンのホストＣＰＵの命令コードに変換し、変換した命令コードを実行する。命令実行部１１０は、ＩＳＳ（Ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ｓｉｍｕｌａｔｏｒ）命令実行部ともいう。
【００２２】
命令記憶部１４１は、シミュレーションで用いるソフトウェアの情報を記憶する。命令記憶部１４１は、命令実行部１１０が次に実行する命令コードのアドレスである命令アドレスを命令実行部１１０から取得し、取得した命令アドレスに記録されている命令コードを命令実行部１１０に渡す。
【００２３】
図２を用いて、本実施の形態に係るアドレス情報４２１の構成について説明する。
アドレス情報記憶部１４２は、共通化関数１０１の命令列の開始アドレスである第１開始アドレスｔ＿ｓｔａｒｔと、共通化関数１０１の命令列の終了アドレスである第１終了アドレスｔ＿ｅｎｄと、共通化先関数２０１の命令列の開始アドレスである第２開始アドレスｔｒａｎｓと、共通化先関数２０１の命令列の終了アドレスである第２終了アドレスｔｒａｎｓ＿ｅｎｄとを対応付けたアドレス情報４２１を記憶する。
アドレス情報４２１には、共通化関数１０１の第１開始アドレスｔ＿ｓｔａｒｔおよび第１終了アドレスｔ＿ｅｎｄに対応して、共通化先関数２０１の第２開始アドレスｔｒａｎｓおよび第２終了アドレスｔｒａｎｓ＿ｅｎｄが設定されている。アドレス情報４２１には、共通化関数１０１の個数分の行が設けられる。アドレス情報４２１は、アドレス再配置用テーブルともいう。
【００２４】
アドレス再配置部１２０は、命令実行部１１０から命令アドレスをオリジナルアドレス１１１として取得し、オリジナルアドレス１１１を処理アドレス１２１に再配置する。アドレス再配置部１２０は、アドレス情報４２１を基づいて、オリジナルアドレス１１１を処理アドレス１２１に再配置し、処理アドレス１２１を評価部１３０に出力する。
【００２５】
評価部１３０は、命令キャッシュの機能を模擬する。評価部１３０は、命令アドレスが入力されることで、その命令アドレスの命令コードが命令キャッシュ内に保存されているかどうかを判定する。入力された命令アドレスの命令コードが命令キャッシュ内に保存されることをキャッシュヒットと呼び、命令コードが命令キャッシュ内に保存されないことをキャッシュミスと呼ぶ。評価部１３０は、入力された命令アドレスについてキャッシュシミュレーションを行い、キャッシュヒットかキャッシュミスかを判定する。評価部１３０は、アドレス再配置部１２０から出力された処理アドレス１２１についてキャッシュシミュレーションを実行し、キャッシュヒットかキャッシュミスかを判定する。評価部１３０は、命令キャッシュモデルともいう。ここで、キャッシュシミュレーションを実行するとは、入力されたアドレスに対し、キャッシュのサイズ、ライン長、およびウェイ数を元に、対応するインデックスを計算し、計算したインデックスを元にキャッシュ内に対象のデータが存在するかを判定し、その判定結果を返す処理をいう。
【００２６】
＊＊＊動作の説明＊＊＊
図３を用いて、本実施の形態に係るシミュレーション方法６１０およびシミュレーションプログラム６２０のシミュレーション処理Ｓ１００について説明する。シミュレーション処理Ｓ１００は、命令実行処理Ｓ１０と、アドレス再配置処理Ｓ２０と、キャッシュシミュレーション処理Ｓ３０とを有する。
【００２７】
＜命令実行処理Ｓ１０＞
ステップＳ１１において、命令実行部１１０は、次にシミュレーションを実行する命令のアドレスを命令アドレス１１としてアドレス再配置部１２０に出力する。また、命令実行部１１０は、命令アドレス１１を記憶部１４０の命令記憶部１４１に出力する。
ステップＳ１２において、命令記憶部１４１は、命令実行部１１０から命令アドレスを取得し、命令アドレスの指す命令コードを命令実行部１１０に渡す。
【００２８】
＜アドレス再配置処理Ｓ２０＞
ステップＳ１３において、アドレス再配置部１２０は、命令実行部１１０から命令アドレス１１をオリジナルアドレス１１１として取得する。アドレス再配置部１２０は、記憶部１４０のアドレス情報４２１を参照し、オリジナルアドレス１１１が指す命令コードが共通化関数１０１に含まれるか否かを判定する。
オリジナルアドレス１１１が指す命令コードが共通化関数１０１に含まれる場合、アドレス再配置部１２０は、ステップＳ１４に進む。オリジナルアドレス１１１が指す命令コードが共通化関数１０１に含まれない場合、アドレス再配置部１２０は、ステップＳ１５に進む。
ステップＳ１４において、アドレス再配置部１２０は、オリジナルアドレス１１１を共通化先関数２０１の命令コードを指すアドレスに再配置し、処理アドレス１２１として出力する。
【００２９】
＜キャッシュシミュレーション処理Ｓ３０＞
ステップＳ１５において、評価部１３０は、アドレス再配置部１２０から出力された処理アドレス１２１についてキャッシュシミュレーションを行い、キャッシュヒットかキャッシュミスかを判定する。
【００３０】
図４を用いて、本実施の形態に係るアドレス再配置処理Ｓ２０について詳しく説明する。
アドレス再配置処理Ｓ２０において、アドレス再配置部１２０は、シミュレーションを実行する命令列のアドレスをオリジナルアドレス１１１として取得し、アドレス情報４２１を用いて、オリジナルアドレス１１１が第１開始アドレスｔ＿ｓｔａｒｔと第１終了アドレスｔ＿ｅｎｄとの間にあるかを判定する。アドレス再配置部１２０は、オリジナルアドレス１１１が第１開始アドレスｔ＿ｓｔａｒｔと第１終了アドレスｔ＿ｅｎｄとの間にある場合に、オリジナルアドレス１１１を第２開始アドレスｔｒａｎｓと第２終了アドレスｔｒａｎｓ＿ｅｎｄとの間に再配置し、再配置されたアドレスを処理アドレス１２１とする。
【００３１】
ステップＳ２１において、アドレス再配置部１２０は、オリジナルアドレス１１１が、共通化関数１０１のアドレスの範囲に含まれるか否かを判定する。具体的には、アドレス再配置部１２０は、アドレス情報４２１を用いて、オリジナルアドレス１１１が、共通化関数１０１の第１開始アドレスｔ＿ｓｔａｒｔであるｖ＿ｓｔａｒｔ０から、共通化関数１０１の第１終了アドレスｔ＿ｅｎｄであるｖ＿ｅｎｄ０の間のアドレスであるかを判定する。
オリジナルアドレス１１１が共通化関数１０１のアドレスの範囲に含まれる場合、アドレス再配置部１２０はステップＳ２２に進む。オリジナルアドレス１１１が共通化関数１０１のアドレスの範囲に含まれない場合、アドレス再配置部１２０は処理を終了する。
【００３２】
ステップＳ２２において、アドレス再配置部１２０は、オリジナルアドレス１１１が第１開始アドレスｔ＿ｓｔａｒｔと第１終了アドレスｔ＿ｅｎｄとの間にある場合に、オリジナルアドレス１１１について第１開始アドレスｔ＿ｓｔａｒｔからのオフセット値ｏｆｆｓｅｔを算出する。具体的には、アドレス再配置部１２０は、第１開始アドレスｔ＿ｓｔａｒｔであるｖ＿ｓｔａｒｔ０を基準として、ｖ＿ｓｔａｒｔ０からオリジナルアドレス１１１までの値をオフセット値ｏｆｆｓｅｔとして算出する。
ステップＳ２３において、アドレス再配置部１２０は、第２開始アドレスｔｒａｎｓにオフセット値ｏｆｆｓｅｔを加算したアドレスを再配置アドレスａｄｄｒ’として算出する。具体的には、アドレス再配置部１２０は、オフセット値ｏｆｆｓｅｔを第２開始アドレスｔｒａｎｓであるｓｔａｒｔ０に加算し、再配置アドレスａｄｄｒ’とする。アドレス再配置部１２０は、オフセット値ｏｆｆｓｅｔを共通化先関数２０１の第２開始アドレスｔｒａｎｓに加算することで、関数を共通化した際にオリジナルアドレス１１１が変化すると想定されるアドレスへ、オリジナルアドレス１１１を再配置する。
【００３３】
ステップＳ２４において、アドレス再配置部１２０は、再配置アドレスａｄｄｒ’が共通化先関数２０１のアドレスの範囲に含まれているかを判定する。具体的には、アドレス再配置部１２０は、再配置アドレスａｄｄｒ’が共通化先関数２０１の第２終了アドレスｔｒａｎｓ＿ｅｎｄであるｅｎｄ０未満であるかを判定する。
再配置アドレスａｄｄｒ’が第２終了アドレスｔｒａｎｓ＿ｅｎｄ未満の場合、ステップＳ２６において、アドレス再配置部１２０は、再配置アドレスａｄｄｒ’を処理アドレス１２１として出力し、処理を終了する。
再配置したアドレスａｄｄｒ’が第２終了アドレスｔｒａｎｓ＿ｅｎｄ以上の場合、ステップＳ２５において、アドレス再配置部１２０は、第２終了アドレスｔｒａｎｓ＿ｅｎｄを処理アドレス１２１とする。すなわち、アドレス再配置部１２０は、再配置アドレスａｄｄｒ’を第２終了アドレスｔｒａｎｓ＿ｅｎｄであるｅｎｄ０にクリップ、すなわち変更する。
【００３４】
＊＊＊他の構成＊＊＊
本実施の形態では、命令実行部１１０と、アドレス再配置部１２０と、評価部１３０の機能がソフトウェアで実現される。しかし、変形例として、命令実行部１１０と、アドレス再配置部１２０と、評価部１３０の機能がハードウェアで実現されてもよい。
【００３５】
図５を用いて、本実施の形態の変形例に係るシミュレーション装置１００の構成について説明する。
図５に示すように、シミュレーション装置１００は、処理回路９０９、入力インタフェース９３０、および出力インタフェース９４０といったハードウェアを備える。
【００３６】
処理回路９０９は、上述した命令実行部１１０と、アドレス再配置部１２０と、評価部１３０の機能および記憶部１４０を実現する専用の電子回路である。処理回路９０９は、具体的には、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックＩＣ、ＧＡ、ＡＳＩＣ、または、ＦＰＧＡである。ＧＡは、Ｇａｔｅ  Ａｒｒａｙの略語である。ＡＳＩＣは、Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔの略語である。ＦＰＧＡは、Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙの略語である。
【００３７】
命令実行部１１０と、アドレス再配置部１２０と、評価部１３０の機能は、１つの処理回路９０９で実現されてもよいし、複数の処理回路９０９に分散して実現されてもよい。
【００３８】
別の変形例として、命令実行部１１０と、アドレス再配置部１２０と、評価部１３０の機能がソフトウェアとハードウェアの組合せで実現されてもよい。すなわち、シミュレーション装置１００の一部の機能が専用のハードウェアで実現され、残りの機能がソフトウェアで実現されてもよい。
【００３９】
シミュレーション装置１００のプロセッサ９１０、記憶装置９２０、および、処理回路９０９を、総称して「プロセッシングサーキットリ」という。つまり、シミュレーション装置１００の構成が図１および図５のいずれに示した構成であっても、命令実行部１１０と、アドレス再配置部１２０と、評価部１３０の機能および記憶部１４０は、プロセッシングサーキットリにより実現される。
【００４０】
「部」を「工程」または「手順」または「処理」に読み替えてもよい。また、「部」の機能をファームウェアで実現してもよい。
【００４１】
＊＊＊本実施の形態の効果の説明＊＊＊
本実施の形態に係るシミュレーション装置１００では、アドレス再配置部が、入力されたオリジナルアドレスが共通化関数を指す場合、オリジナルアドレスを共通化先関数のスタートアドレスとエンドアドレスとの間に再配置する。そして、評価部が、再配置したアドレスについてキャッシュシミュレーションを行い、キャッシュヒットかキャッシュミスかを判定する。よって、本実施の形態に係るシミュレーション装置１００によれば、ソフトウェアのリファクタリングをする前に、重複コードを仮想的に共通化した際の性能を評価することができる。したがって、本実施の形態に係るシミュレーション装置１００によれば、リファクタリングにかかった工数を無駄にすることを抑制できる。
【００４２】
本実施の形態に係るシミュレーション装置１００では、ソフトウェア内の重複コードを検出する静的解析ツールの処理結果に基づき、検出された重複コードを共通化した場合の性能情報を計測する。よって、本実施の形態に係るシミュレーション装置１００によれば、より効率的に重複コードを仮想的に共通化した際の性能を評価することができる。
【００４３】
実施の形態１では、シミュレーション装置１００の各部が独立した機能ブロックとしてシミュレーション装置１００を構成している。しかし、上述した実施の形態のような構成でなくてもよく、シミュレーション装置１００の構成は任意である。シミュレーション装置１００の機能ブロックは、上述した実施の形態で説明した機能を実現することができれば、任意である。これらの機能ブロックを、他のどのような組み合わせ、あるいは任意のブロック構成で、シミュレーション装置１００を構成しても構わない。
また、シミュレーション装置１００は、１つの装置でなく、複数の装置から構成されたシステムでもよい。
【００４４】
実施の形態１について説明したが、この実施の形態のうち、複数の部分を組み合わせて実施しても構わない。あるいは、この実施の形態のうち、１つの部分を実施しても構わない。その他、この実施の形態を、全体としてあるいは部分的に、どのように組み合わせて実施しても構わない。
なお、上述した実施の形態は、本質的に好ましい例示であって、本発明の範囲、本発明の適用物の範囲、および本発明の用途の範囲を制限することを意図するものではない。上述した実施の形態は、必要に応じて種々の変更が可能である。
【符号の説明】
【００４５】
１０  第１関数、２０  第２関数、１００  シミュレーション装置、１０１  共通化関数、２０１  共通化先関数、１１０  命令実行部、１２０  アドレス再配置部、１２１  処理アドレス、１３０  評価部、１４０  記憶部、１４１  命令記憶部、１４２  アドレス情報記憶部、４２１  アドレス情報、１１  命令アドレス、１１１  オリジナルアドレス、２００  プログラム、６１０  シミュレーション方法、６２０  シミュレーションプログラム、９０９  処理回路、９１０  プロセッサ、９２０  記憶装置、９２１  メモリ、９２２  補助記憶装置、９３０  入力インタフェース、９４０  出力インタフェース、ａｄｄｒ’  再配置アドレス、ｏｆｆｓｅｔ  オフセット値、ｔ＿ｓｔａｒｔ  第１開始アドレス、ｔ＿ｅｎｄ  第１終了アドレス、ｔｒａｎｓ  第２開始アドレス、ｔｒａｎｓ＿ｅｎｄ  第２終了アドレス、Ｓ１０  命令実行処理、Ｓ２０  アドレス再配置処理、Ｓ３０  評価処理、Ｓ１００  シミュレーション処理。
【図１】
0006545417.tif 000002
【図２】
0006545417.tif 000003
【図３】
0006545417.tif 000004
【図４】
0006545417.tif 000005
【図５】
0006545417.tif 000006