(57)【要約】【課題】  動的変換方式のエミュレーション動作時の実行性能を、対象プログラムをエミュレーションで実行する前に見積もる。【解決手段】  入力されたプログラムを実行して、実行した命令数であるステップ数をカウントするプロセッサと、実行された命令のトレース情報に基づいて、プログラムの命令中、１度でも実行されたことが有る命令が格納されている連続アドレスの区間を取得する連続実行区間抽出手段と、１）ステップ数と、与えられた命令ごとのエミュレーション性能に基づいて実行性能を見積もり、２）アドレス区間内の命令数を得て、当該命令数と、与えられた命令ごとの変換性能に基づいて変換性能を見積もり、３）両者から、プログラムを動的変換方式でエミュレーションした時の実行性能見積りを算出する性能算出手段と、を備えるエミュレーション性能算出装置。【選択図】      図４
2018101233.tif 000002
【特許請求の範囲】
【請求項１】
入力されたプログラムを実行して、実行した命令数であるステップ数をカウントするプロセッサと、
実行された命令のトレース情報に基づいて、前記プログラムの命令中、１度でも実行されたことが有る命令が格納されている連続アドレスの区間を取得する連続実行区間抽出手段と、
１）前記ステップ数と、与えられた命令ごとのエミュレーション性能に基づいて実行性能を見積もり、２）前記アドレス区間内の命令数を得て、当該命令数と、与えられた命令ごとの変換性能に基づいて変換性能を見積もり、３）両者から、前記プログラムを動的変換方式でエミュレーションした時の実行性能見積りを算出する性能算出手段と、を備えるエミュレーション性能算出装置。
【請求項２】
分岐命令トレース格納手段を、さらに備え、
前記プロセッサは、分岐した分岐命令のアドレスと分岐先のアドレスを含む前記トレース情報を前記分岐命令トレース格納手段に出力し、
前記連続実行区間抽出手段は、前記分岐命令トレース格納手段に格納されている前記トレース情報の履歴に基づいて分岐と分岐の間の連続実行区間を取得し、前記連続実行区間の和集合を、前記アドレスの区間として出力する、請求項１のエミュレーション性能算出装置。
【請求項３】
前記性能算出手段は、前記プログラムの実行終了後、または、前記ステップ数が所定数増加するたびに前記実行性能見積りを算出する、請求項１乃至請求項２の何れか１項のエミュレーション性能算出装置。
【請求項４】
複数のプロセスを切替えながら並行して実行し、前記プログラムを前記プロセス上で実行するプロセススイッチ手段をさらに備え、
前記プロセッサは、ステップ数をカウントするカウンタを備え、前記トレース情報を前記プロセスに関連付けられた前記分岐命令トレース格納部に出力し、
前記プロセススイッチ手段は、前記プロセスごとに前記カウンタを退避回復し、
前記連続実行区間抽出手段は、実行中プロセスに関連付けられている前記分岐命令トレース格納部に格納されている前記トレース情報の履歴に基づいて分岐と分岐の間の連続実行区間を取得する、請求項１乃至請求項３の何れか１項のエミュレーション性能算出装置。
【請求項５】
過去データ格納手段をさらに備え、
前記性能算出手段は、前記ステップ数と前記実行性能見積りを前記過去データ格納手段に格納し、新たに入力された前記プログラムの前記ステップ数と前記過去データ格納手段に格納されている前記ステップ数と前記実行性能見積りから、新たに入力された前記プログラムの前記実行性能見積りを算出する、請求項１乃至請求項２の何れか１項のエミュレーション性能算出装置。
【請求項６】
前記性能算出手段は、前記アドレス区間のサイズを得て、当該サイズを与えられた平均命令長で除算することにより、前記命令数を得る、請求項１乃至請求項５の何れか１項のエミュレーション性能算出装置。
【請求項７】
サンプルプログラムを、前記動的変換方式でエミュレーションするエミュレーション手段と、前記命令ごとのエミュレーション性能、および、前記命令ごとの変換性能を計測する計測手段を備えた、エミュレーション装置と、
請求項１乃至請求項２の何れか１項のエミュレーション性能算出装置と、を包含するエミュレーション性能算出システム。
【請求項８】
入力されたプログラムを実行して、実行した命令数であるステップ数をカウントし、
実行された命令のトレース情報に基づいて、前記プログラムの命令中、１度でも実行されたことが有る命令が格納されている連続アドレスの区間を取得し、
１）前記ステップ数と、与えられた命令ごとのエミュレーション性能に基づいて実行性能を見積もり、２）前記アドレス区間内の命令数を得て、当該命令数と、与えられた命令ごとの変換性能に基づいて変換性能を見積もり、３）両者から、前記プログラムを動的変換方式でエミュレーションした時の実行性能見積りを算出する、エミュレーション性能算出方法。
【請求項９】
分岐した分岐命令のアドレスと分岐先のアドレスを含む前記トレース情報を前記分岐命令トレース格納手段に出力し、
前記分岐命令トレース格納手段に格納されている前記トレース情報の履歴に基づいて分岐と分岐の間の連続実行区間を取得し、前記連続実行区間の和集合を、前記アドレスの区間として出力する、請求項８のエミュレーション性能算出方法。
【請求項１０】
実行された命令のトレース情報に基づいて、実行されたプログラムの命令中、１度でも実行されたことが有る命令が格納されている連続アドレスの区間を取得する連続実行区間抽出処理と、
１）前記プログラムを実行して得られたステップ数と、与えられた命令ごとのエミュレーション性能に基づいて実行性能を見積もり、２）前記アドレス区間内の命令数を得て、当該命令数と、与えられた命令ごとの変換性能に基づいて変換性能を見積もり、３）両者から、前記プログラムを動的変換方式でエミュレーションした時の実行性能見積りを算出する性能算出処理と、をコンピュータに実行させるエミュレーション性能算出プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、エミュレーション性能算出装置、エミュレーション性能算出システム、エミュレーション性能算出方法、および、エミュレーション性能算出プログラム特に、動的変換方式でエミュレーションした時の性能に関する。
【背景技術】
【０００２】
エミュレーションは、或るコンピュータ上で動作するソフトウェアのバイナリコードを、アーキテクチャの異なる別のコンピュータ上で動作させる。エミュレーションの手法として、元のバイナリコードを、動作させたいコンピュータ上で実行中に適宜解釈し、実行可能な形式に動的変換（コンパイルともいう）しながら動作させる手法が特許文献１に開示されている。
【０００３】
図１１は、動的変換方式のエミュレーションの流れを説明する図である。動的変換方式のエミュレーションの処理の流れは、以下のようになる。
ａ）エミュレータは、初回実行時、実行開始アドレス(addr_Ａ)から数個の命令( A )を読み出す。
ｂ）エミュレータは、動的コンパイルを行ってTC(TC_A)を作成し、TC管理テーブルに登録する。ここで、TC(Translated Code)は、動的コンパイルで変換されたコードである。
ｃ）エミュレータは、アドレスを、A → B → C …と順次ずらしながら命令を取り出して、TCを作成しながら、順次実行する。
ｄ）過去に実行済みで、既にTCが作成・登録されていれば、エミュレータは、当該TCを実行する。
【０００４】
特許文献１は、動的変換方式のエミュレーション動作中に、実行頻度の高い部分との命令キャッシュ競合を避けるメモリ管理方法を開示する。
【０００５】
特許文献２は、命令シミュレート中に分岐が発生した時に出力される分岐トレースに基づき、プログラムに含まれる基本ブロックを決定し、基本ブロック単位で実行回数とサイクル数を出力するパフォーマンスアナライザを開示する。
【０００６】
特許文献３は、命令列をシミュレートし、分岐命令の分岐予測結果、および、シミュレートにおける遅延時間とから、プロセッサ方式性能の評価値を算出する、プロセッサ方式性能予測装置を開示する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開2005-202614号公報
【特許文献２】特開2004-030514号公報
【特許文献３】特開平10-320246号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
動的変換方式のエミュレーションは、一度実行され、既にコンパイルされたコードを再度実行する場合には高速な動作が期待できる。一方、このエミュレーションは、初めて命令を実行するとき、動的なコンパイル処理を行う必要があり、そのオーバヘッドが大きいため動作が低速となる。
【０００９】
動的コンパイル処理の発生割合は、プログラムを実際にエミュレーション環境で実行してみなければが分からず、事前に正しく見積もることは困難である。そのため、このエミュレーションにより実行されるプログラムの実行性能は、事前に見積もることが困難である。
【００１０】
バイナリコードやソースコードを調査することでソフトウェアの構造を解析し、定性的な性能を推定することは可能と考えられる。しかし、プログラムを実際にエミュレータで実行してみると、システムの設定やパラメータの指定など、さまざまな要因で動作が変わり、エミュレーション動作時の実行性能を高い精度で推定することは困難である。オペレーティングシステムが呼び出された場合なども考慮すると、その推定はさらに困難になる。
【００１１】
本発明は、上記課題を解決し、動的変換方式のエミュレーション動作時の実行性能を、対象プログラムをエミュレーションで実行する前に見積もることを可能とする装置等を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明の１実施の形態のエミュレーション性能算出装置は、入力されたプログラムを実行して、実行した命令数であるステップ数をカウントするプロセッサと、実行された命令のトレース情報に基づいて、前記プログラムの命令中、１度でも実行されたことが有る命令が格納されている連続アドレスの区間を取得する連続実行区間抽出手段と、１）前記ステップ数と、与えられた命令ごとのエミュレーション性能に基づいて実行性能を見積もり、２）前記アドレス区間内の命令数を得て、当該命令数と、与えられた命令ごとの変換性能に基づいて変換性能を見積もり、３）両者から、前記プログラムを動的変換方式でエミュレーションした時の実行性能見積りを算出する性能算出手段と、を備える。
【００１３】
本発明の１実施の形態のエミュレーション性能算出方法は、実行された命令のトレース情報に基づいて、前記プログラムの命令中、１度でも実行されたことが有る命令が格納されている連続アドレスの区間を取得し、１）前記ステップ数と、与えられた命令ごとのエミュレーション性能に基づいて実行性能を見積もり、２）前記アドレス区間内の命令数を得て、当該命令数と、与えられた命令ごとの変換性能に基づいて変換性能を見積もり、３）両者から、前記プログラムを動的変換方式でエミュレーションした時の実行性能見積りを算出する。
【００１４】
本発明の１実施の形態のエミュレーション性能算出プログラムは、実行された命令のトレース情報に基づいて、実行されたプログラムの命令中、１度でも実行されたことが有る命令が格納されている連続アドレスの区間を取得する連続実行区間抽出処理と、１）前記プログラムを実行して得られたステップ数と、与えられた命令ごとのエミュレーション性能に基づいて実行性能を見積もり、２）前記アドレス区間内の命令数を得て、当該命令数と、与えられた命令ごとの変換性能に基づいて変換性能を見積もり、３）両者から、前記プログラムを動的変換方式でエミュレーションした時の実行性能見積りを算出する性能算出処理と、をコンピュータに実行させる。
【発明の効果】
【００１５】
本発明にかかるエミュレーション性能算出装置は、動的変換方式のエミュレーション動作時の実行性能を事前に見積もることを可能とする。
【図面の簡単な説明】
【００１６】
【図１】図１は、プログラムの実行時に採取されるトレース情報の例を示す図である。
【図２】図２は、エミュレーション性能算出装置１００が行う連続実行区間を識別と統合の例を示す図である。
【図３】図３は、第１の実施の形態にかかるエミュレーション性能見算出システム５００の構成を示すブロック図である。
【図４】図４は、第１の実施の形態にかかるエミュレーション性能算出装置１００の構成を示すブロック図である。
【図５】図５は、ＣＰＵ／ＦＷ１０の動作フローチャートである。
【図６】図６は、連続実行区間抽出部３０の動作フローチャートである。
【図７】図７は、性能算出部５０の動作フローチャートである。
【図８】図８は、第２の実施の形態にかかるエミュレーション性能算出装置１００の構成を示すブロック図である。
【図９】図８は、第５の実施の形態にかかるエミュレーション性能算出装置１００の構成を示すブロック図である。
【図１０】図８は、第６の実施の形態にかかるエミュレーション性能算出装置１００の構成を示すブロック図である。
【図１１】図１１は、動的変換方式のエミュレーションの流れを説明する図である。
【発明を実施するための形態】
【００１７】
＜第１の実施の形態＞
＜概要＞
本実施の形態にかかるエミュレーション性能算出装置１００は、性能算出の対象のソフトウェアを「元の」（本来の）コンピュータである自装置上で実際に動作させ、分岐命令のトレースを採取する。ここで、「元の」コンピュータとは、性能算出の対象のソフトウェアの命令を、エミュレーションを必要とせず直接実行するコンピュータを意味する。
【００１８】
具体的に、エミュレーション性能算出装置１００は、分岐命令実行時、処理がジャンプする(分岐GO)場合に、当該分岐命令自身のアドレス、及び、分岐先のアドレスをセットで採取する。ここで、分岐GOは、分岐命令が格納されているアドレスの次のアドレス以外の命令にジャンプすることを意味する。
【００１９】
図１は、プログラムの実行時に採取されるトレース情報の例を示す図である。図１のＡ）に示すプログラムは、アドレス（以降、addrと略記する）ＡからaddrＢまで順次実行され、addrＢでaddrＣに分岐し（図１のＡ）中ａの分岐）、その後、addrＣからaddrＥまでのループを９回実行されている（図中ｂの分岐）。最後に、プログラムは、ループ途中のaddrＤで分岐して（図中ｃの分岐）ループを脱出している。
【００２０】
図１のＢ）は、この時取得されるトレース情報を示している。図１のＡ）のそれぞれの分岐に対し、分岐命令のアドレスと分岐先のアドレスのセットが、分岐した回数分記録されている。例えば、図１のＡ）中ｂで示す、９回実行されるループ内の戻りの分岐に対し、分岐命令のアドレスＥ（ループの終点）と分岐先のアドレスＣ（ループの始点）のセットが９回分記録されている。
【００２１】
この時、既に出力された一つ前のトレースの「分岐先のアドレス」から、今回出力されたトレースの「分岐命令のアドレス」までが、連続して実行された区間である。連続して実行された区間は、例えば、addrＣからaddrＥ、addrＣからaddrＤ、である。なお、開始点addrＡから最初の分岐命令アドレスであるaddrＢも連続して実行された区間である。
【００２２】
エミュレーション性能算出装置１００は、出力されたトレース情報から、このように連続実行区間を識別し、統合する。ここで、統合は識別された各連続実行区間の和集合を生成することである。
【００２３】
図２は、エミュレーション性能算出装置１００が行う連続実行区間を識別と統合の例を示す図である。エミュレーション性能算出装置１００は、図２に示す、図１のＡ）のプログラム実行で採取されたトレース情報のから、ａ（addrＡからaddrＢ+Δ）、ｂ（addrＣからaddrＥ+Δ）、および、ｃ（addrＣからaddrＤ＋Δ）の３区間を識別し、その和集合をとって、ａとｂの２区間からなる連続実行区間を得る。すなわち、エミュレーション性能算出装置１００は、アドレスが重複する区間ｃを区間ｂに統合する。
【００２４】
なお、ここで、Δは、連続区間の最後の命令長である。トレース情報は、命令の先頭アドレスを取得するので、区間長を得るために命令長が加算されている。命令長は、誤差範囲として無視されても良い。
【００２５】
和集合を取って得た連続実行区間は、一度でも実行されたことが有る命令が占める領域の区間である。このように得られた連続実行区間は、それぞれ、初回実行時のみ動的コンパイルが動作する。
【００２６】
そのため、トレース採取開始から終了までの動的コンパイルの発生回数は、以下の式（１）で、発生頻度は以下の式（２）で算出できる。
【００２７】
動的コンパイルの発生回数＝連続実行区間の合計サイズ／平均命令長・・・（１）
発生頻度＝動的コンパイル発生回数／実行された命令数・・・・（２）
実行された命令数（ステップ数とかダイナミックステップ数と呼ばれることも有る）や、平均命令長は計測または算出が可能であるため、連続実行区間がわかれば、動的コンパイルの発生回数や頻度も算出可能である。
【００２８】
本実施の形態のエミュレーション性能算出システム５００は、サンプルプログラム３０１を用いて、エミュレーション環境での動的コンパイル処理時間、及び、変換したコード実行時の単位実行時間を予め測定しておく。その後、エミュレーション性能算出システム５００は、性能算出の対象のソフトウェアを元の（エミュレーションを必要としない）コンピュータで実際に動作させる。そして、エミュレーション性能算出システム５００は、上記方法で、実行命令数を計測し、動的コンパイル発生回数と頻度を算出することで、エミュレーション動作時の実行性能を以下の式（３）、または、式（４）で算出する。
【００２９】
実行時間見積り＝実行命令数×変換コード実行時間＋
動的コンパイル発生回数×動的コンパイル処理時間・・・・（３）
実行時間見積り＝実行命令数×変換コード実行時間＋
実行命令数×動的コンパイル発生頻度×動的コンパイル処理時間・・・・（４）
＜構成＞
図３は、第１の実施の形態にかかるエミュレーション性能算出システム５００の構成を示すブロック図である。エミュレーション性能算出システム５００は、ネットワーク４００で接続されたエミュレーション装置３００と、エミュレーション性能算出装置１００を包含する。
【００３０】
エミュレーション装置３００は、サンプルプログラム３０１をエミュレーション部３０２でエミュレーションし、エミュレーション性能値、例えば、動的コンパイル処理時間、及び、変換したコード実行時の単位実行時間を計測部３０３で測定する。測定値は、例えば、ネットワーク４００を経由して、エミュレーション性能算出装置１００に送信される。
【００３１】
エミュレーション装置３００は、サンプルプログラム３０１とは異なる命令セットを持っている。エミュレーション部３０２は、動的変換方式のエミュレーションを行い、性能算出が行われるプログラムコード１３のサービス適用時に使用されるエミュレータと同じようにエミュレーションを行う。
【００３２】
図４は、第１の実施の形態にかかるエミュレーション性能算出装置１００の構成を示すブロック図である。なお、図中の矢印は、データ参照・更新例を示すが、データ参照・更新は、これらに限られない。
【００３３】
エミュレーション性能算出装置１００は、エミュレーション実行性能を求めるプログラムコード１３の、元の（本来の）アーキテクチャで動作するコンピュータである。
【００３４】
エミュレーション性能算出装置１００は、ＣＰＵ／ＦＷ１０（Central Processing Unit / Firmware）と、分岐命令トレース格納部２０と、連続実行区間抽出部３０と、連続実行区間格納部４０と、性能値算出部５０と、サンプル性能格納部６０と、を備える。
【００３５】
ＣＰＵ／ＦＷ１０は、分岐命令トレース採取・出力部１１と、実行命令数カウンタ１２と、を備える。ＣＰＵ／ＦＷ１０は、与えられたプログラムコード１３を実行し、その過程で計測して実行命令数カウンタ１２で実行命令数をカウントする。さらに、分岐命令トレース採取・出力部１１は、プログラムコード１３の実行中に分岐命令による分岐が実行されるとトレース情報を採取する。
【００３６】
分岐命令トレース格納部２０には、分岐命令トレース採取・出力部１１が、トレース情報として、分岐命令アドレス、及び、その分岐先アドレスのセットを格納する。
【００３７】
性能値算出部５０は、カウンタ読み出し部５１と、連続実行区間合計サイズ算出部５２と、サンプル性能読み出し部５３と、性能値計算・出力部５４と、を備える。性能値算出部５０は、所定契機、例えばプログラムコード１３の実行終了時に、性能値計算・出力部５４を用いて、エミュレーションの性能、例えば実行時間を計算する。
【００３８】
この時、性能値算出部５０は、カウンタ読み出し部５１で実行命令数カウンタ１２を読み出し、連続実行区間合計サイズ算出部５２で、収集された連続実行区間から連続実行区間合計サイズを算出する。さらに、性能値算出部５０は、サンプル性能読み出し部５３で、サンプル性能格納部６０に格納されている動的コンパイル処理時間、及び、変換したコード実行時の単位実行時間を読み出す。
【００３９】
連続実行区間格納部４０には、分岐命令トレースから割り出された連続実行区間として、区間の開始アドレス、及び、区間の終了アドレスのセットが連続実行区間抽出部３０により格納される。
【００４０】
また、サンプル性能格納部６０は、エミュレーション動作させたいアーキテクチャ、例えば、エミュレーション装置３００上で、予め測定した性能値、例えば、動的コンパイル処理実行時、及び、動的コンパイルしたコード実行時性能値を格納している。
【００４１】
ここで、エミュレーション性能算出装置１００のＣＰＵ／ＦＷ１０と、連続実行区間抽出部３０と、性能値算出部５０は、論理回路で構成される。連続実行区間抽出部３０と、性能値算出部５０は、例えば、コンピュータでもあるエミュレーション性能算出装置１００に付加的に実装される回路である。
【００４２】
分岐命令トレース格納部２０と、連続実行区間格納部４０と、サンプル性能格納部６０は、半導体メモリ、例えば、エミュレーション性能算出装置１００の主記憶装置の一部である。
【００４３】
連続実行区間抽出部３０と、性能値算出部５０は、ソフトウェアで実装されても良い。ＣＰＵ／ＦＷ１０が、図示されないエミュレーション性能算出プログラムを実行することにより、連続実行区間抽出部３０と、性能値算出部５０として機能する。すなわち、ＣＰＵ／ＦＷ１０は、エミュレーション算出プログラムを実行することにより、連続実行区間抽出部３０と、性能値算出部５０は、が行う処理を実行する。
【００４４】
＜動作＞
図５は、ＣＰＵ／ＦＷ１０の動作フローチャートである。プログラムコード１３の実行開始とともに、ＣＰＵ／ＦＷ１０が、コードの各命令を逐次実行し、実行命令数カウンタ１２が実行した命令数を計上する。ここで、実行した命令が分岐命令であり、かつ、当該分岐命令とは連続しないアドレスへ処理が分岐する場合（分岐ＧＯ）、分岐命令トレース採取・出力部１１は、当該分岐命令のアドレス、及び、分岐先のアドレスを分岐命令トレース格納部２０に格納する。
【００４５】
図６は、連続実行区間抽出部３０の動作フローチャートである。連続実行区間抽出部３０は、分岐命令トレース格納部２０を常に監視している。連続実行区間抽出部３０は、トレース情報が格納されたことを検知すると、一つ前のトレース情報の分岐先アドレスから、今回格納されたトレース情報の分岐命令アドレスまでを一つの連続実行区間として、連続実行区間格納部４０に格納し、前回トレース情報を削除する。
【００４６】
連続実行区間（仮に区間Ａとする）を格納する際、区間Ａが、連続実行区間格納部４０に既に格納されている連続実行区間（仮に区間Ｂとする）と一部、または、全部が重複している場合、両区間を、区間Ａと区間Ｂとの和の区間で置き換える。ここで、区間Ａと区間Ｂとの和の区間は、区間Ａおよび区間Ｂの少なくとも一方に含まれているアドレス集合で構成される区間である。
【００４７】
図７は、性能値算出部５０の動作フローチャートである。プログラムコード１３の実行が終わると、性能値算出部５０のカウンタ読み出し部５１が実行命令数カウンタ１２から実行された総実行命令数を読み出す。その後、連続実行区間合計サイズ算出部５２は連続実行区間格納部４０から格納された連続実行区間を読み出してその合計サイズを算出し、サンプル性能読み出し部５３は、サンプル性能格納部６０から格納されている動的コンパイル処理時間、及び、変換したコード実行時の単位実行時間を読み出す。
【００４８】
最後に、性能値計算・出力部５４が、当該プログラムコード１３のエミュレーション実行にかかる性能値を計算・出力する。この時、性能値計算・出力部５４は、前述した、式（１）、式（２）および式（４）を順次使用して計算する。なお、平均命令長は、例えば、パラメータとして、プログラムコード１３と共に、エミュレーション性能算出装置１００に与えられる。
【００４９】
＜本実施の形態の変形例＞
性能値は、実行時間以外に、ＣＰＵ使用時間など、実行／処理した命令数に比例する他の値であっても良い。
【００５０】
性能値計算・出力部５４は、前述した、式（１）、および式（３）を順次使用して、当該プログラムのエミュレーション実行にかかる性能値を計算しても良い。
【００５１】
さらに、性能値計算・出力部５４は、式（１）による計算の代わりに、連続実行区間に対応するプログラムコード１３を走査して、命令コードから命令長を判断して、連続実行区間に含まれる命令数を取得し、その値を、動的コンパイルの発生回数として出力しても良い。
【００５２】
ＣＰＵ／ＦＷ１０は、分岐命令のトレース情報の代わりに、全ての命令のアドレス情報を出力しても良い。連続実行区間抽出部３０は、プログラムコード１３の実行後、そのアドレスシーケンスから連続実行区間を抽出しても良い。
【００５３】
＜効果＞
第１の効果は、本実施の形態にかかるエミュレーション性能算出装置１００は、動的変換方式のエミュレーション動作時の実行性能を、対象プログラムをエミュレーションで実行する前に見積もることが出来ることである。それが可能な理由は、連続実行区間抽出部３０が、プログラムの命令中、１度でも実行されたことが有る命令が格納されている連続アドレスの区間を取得するからである。これに基づき、性能値算出部５０が、動的変換の発生回数を得て、動的変換の性能を計算する。
【００５４】
異なるアーキテクチャのコンピュータで作られたプログラムを、別のアーキテクチャのコンピュータ上で、一定量ずつ、当該アーキテクチャのコードに動的コンパイルしながら実行していくエミュレーション方式が存在する。本実施の形態のエミュレーション性能算出装置１００は、この方式によるエミュレーション実行時の性能を、当該プログラムを元の（本来の）アーキテクチャのコンピュータ上で実行することで、実際にエミュレーション実行することなく見積もることができるのである。
【００５５】
これは、元のコンピュータで実行する際、連続して実行されるコード区間を重複排除して収集し、実行された延べコードの内、動的コンパイルが行われる割合を算出して、動的コンパイルによる性能の揺れを高い精度で見積もることができるからである。
【００５６】
第２の効果は、性能見積もり時のオーバヘッドが小さいことである。その理由は、連続実行区間抽出部３０が、分岐命令で処理がジャンプする（分岐ＧＯの）場合のみトレース情報から連続実行区間を得ることが出来るからである。
【００５７】
第３の効果は、プログラム実行と同時に動的コンパイルの発生回数や発生頻度を算出することができることである。本実施の形態にかかるエミュレーション性能算出装置１００は、エミュレーション実行時の性能を、元のアーキテクチャのコンピュータ上で実行する時間の中で見積もるようにも出来るのである。その理由は、連続実行区間抽出部３０が、トレース採取と並行してトレース情報を分析して、連続実行区間の割り出しを行うからである。
【００５８】
＜第２の実施形態＞
図８は、第２の実施の形態にかかるエミュレーション性能算出装置１００の構成を示すブロック図である。なお、図中の矢印は、データ参照・更新例を示すが、データ参照・更新は、これらに限られない。
【００５９】
第１の実施形態のとの差は、本実施形態のエミュレーション性能算出装置１００は、プロセス８０を実行する点である。エミュレーション性能算出装置１００は、複数のプロセス８０を切替えながら並行に実行する。エミュレーション性能算出装置１００は、このプロセス８０の切り替えを行う、プロセススイッチ部７０を備えている。
【００６０】
本実施形態のエミュレーション性能算出装置１００のプログラムコード１３、分岐命令トレース格納部２０、連続実行区間格納部４０は、プロセス８０ごとに、例えば、プロセス８０ごとの固有メモリ空間に存在する。プロセス８０は、さらに、命令数カウンタ退避部８１を、例えば固有メモリ空間に備えている。
【００６１】
プロセススイッチ部７０は、第１のプロセス８０から第２のプロセス８０に実行プロセス８０を切り替えるさい、実行命令数カウンタ１２の値を第１のプロセス８０の命令数カウンタ退避部８１に退避し、第２のプロセス８０の命令数カウンタ退避部８１から回復する。また、分岐命令トレース採取・出力部１１は、分岐トレース採取時は、実行中のプロセス８０に対応する分岐命令トレース格納部２０に出力する。連続実行区間抽出部３０は、連続実行区間を、実行中のプロセス８０に対応する連続実行区間格納部４０に出力する。
【００６２】
こうすることで、分岐命令トレース格納部２０、連続実行区間格納部４０、実行命令数カウンタ１２は、各プロセス８０固有のデータを保持することになる。
【００６３】
これにより、本実施の形態のエミュレーション性能算出装置１００は、複数のプロセス８０でコンカレントに処理されるプログラムが実行された場合でも、各プロセス８０で動作した処理について矛盾なく連続実行区間を収集できる。そして、プロセス８０ごとに、第１の実施例と同様に、エミュレーション性能を算出することが可能となる。
【００６４】
＜第３の実施の形態＞
本実施の形態のエミュレーション性能算出装置１００は、分岐命令実行時以外にコンテキストスイッチ発生時にもトレース情報を採取する。
【００６５】
これにより、本実施の形態のエミュレーション性能算出装置１００は、マルチプロセッサの環境で、一つのプロセス８０が、複数のＣＰＵ／ＦＷ１０にスイッチしながら実行された場合でも、矛盾なく連続実行区間を収集でき、エミュレーション性能を算出することが可能となる。
【００６６】
＜第４の実施の形態＞
本実施の形態のエミュレーション性能算出装置１００において、性能値算出部５０は、実行命令数カウンタ１２の値が所定数、例えば１０万ステップ増加するたびに、図７に示した処理フローで性能計算を実行する。これを実現する為、実行命令数カウンタ１２は、値が所定数増加するたびに、割込みを発生して性能値算出部５０に通知しても良い。
【００６７】
動的変換方式のエミュレーションでは、実行開始直後に動的コンパイルが多く実施され、中盤以降は既にコンパイルされたコードが繰り返し実行されて、性能が安定するケースが多い。本実施の形態のエミュレーション性能算出装置１００が、プログラムコード１３の実行開始以降、一定インターバルでエミュレーション性能を算出することにより、安定するまでの性能の推移を確認が可能となり、業務への影響も確認しやすくなる。
【００６８】
＜第５の実施の形態＞
図９は、第５の実施の形態にかかるエミュレーション性能算出装置１００の構成を示すブロック図である。なお、図中の矢印は、データ参照・更新例を示すが、データ参照・更新は、これらに限られない。
【００６９】
第１の実施形態のとの差は、本実施形態のエミュレーション性能算出装置１００は、過去データ格納部９０を備える点である。
【００７０】
本実施の形態のエミュレーション性能算出装置１００において、性能値算出部５０は、実行が完了したプログラムコード１３の性能値を計算・出力した後、実行命令数と実行時間見積りを過去データ格納部９０に格納しておく。
【００７１】
その後、新たに別のプログラムコード１３が入力されると、当該別のプログラムコード１３を実行して実行命令数を計測し、実行後、性能値算出部５０は、以下の式（５）を使用して、当該別のプログラムコード１３の実行時間見積もりを算出する。
【００７２】
実行時間見積り＝過去データ格納部９０内の実行時間見積もりＸ当該別のプログラムコード１３の実行命令数／過去データ格納部９０内の実行命令数・・・（５）
エミュレーション性能算出装置１００は、動的コンパイルの発生頻度が判明したプログラムコード１３と類似し、同程度に動的コンパイルが発生すると考えられるプログラムコード１３について、簡単にエミュレーション動作時の概算性能を求めることが出来る。
【００７３】
＜第６の実施形態＞
図１０は、第６の実施の形態にかかるエミュレーション性能算出装置１００の構成を示すブロック図である。本実施の形態にかかるエミュレーション性能算出装置１００は、入力されたプログラムを実行して、実行した命令数であるステップ数をカウントするＣＰＵ／ＦＷ１０を備える。エミュレーション性能算出装置１００は、実行された命令のトレース情報に基づいて、プログラムの命令中、１度でも実行されたことが有る命令が格納されている連続アドレスの区間を取得する連続実行区間抽出部３０も備える。
【００７４】
エミュレーション性能算出装置１００は、さらに、性能値算出部５０も備える。性能値算出部５０は、１）ステップ数と、与えられた命令ごとのエミュレーション性能に基づいて実行性能を見積もり、２）アドレス区間内の命令数を得て、当該命令数と、与えられた命令ごとの変換性能に基づいて変換性能を見積もる。性能値算出部５０は、１）と２）で求めた両者から、プログラムを動的変換方式でエミュレーションした時の実行性能見積りを算出する。
【００７５】
本実施の形態において、性能値は、実行時間、ＣＰＵ使用性能など、実行／処理した命令数に比例する値である。
【００７６】
連続実行区間抽出部３０は、分岐命令で処理がジャンプする（分岐ＧＯの）場合のトレース情報から連続実行区間を得る。連続実行区間抽出部３０は、プログラムの走行で実行された全ての命令のアドレスシーケンスから連続実行区間を得ても良い。
【００７７】
本実施の形態にかかるエミュレーション性能算出装置１００は、動的変換方式のエミュレーション動作時の実行性能を、対象プログラムをエミュレーションで実行する前に見積もることが出来る。それが可能な理由は、連続実行区間抽出部３０が、プログラムの命令中、１度でも実行されたことが有る命令が格納されている連続アドレスの区間を取得するからである。これに基づき、性能値算出部５０が、動的変換の発生回数を得て、動的変換の性能を計算する。
【００７８】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【００７９】
１０    ＣＰＵ／ＦＷ
１１    分岐命令トレース採取・出力部
１２    実行命令数カウンタ
１３    プログラムコード
２０    分岐命令トレース格納部
３０    連続実行区間抽出部
４０    連続実行区間格納部
５０    性能値算出部
５１    カウンタ読み出し部
５２    連続実行区間合計サイズ算出部
５３    サンプル性能読み出し部
５４    性能値計算・出力部
６０    サンプル性能格納部
７０    プロセススイッチ部
８０    プロセス
８１    命令数カウンタ退避部
９０    過去データ格納部
１００    エミュレーション性能算出装置
３００    エミュレーション装置
３０１    サンプルプログラム
３０２    エミュレーション部
３０３    計測部
４００    ネットワーク
５００    エミュレーション性能算出システム
【図１】
2018101233.tif 000003
【図２】
2018101233.tif 000004
【図３】
2018101233.tif 000005
【図４】
2018101233.tif 000006
【図５】
2018101233.tif 000007
【図６】
2018101233.tif 000008
【図７】
2018101233.tif 000009
【図８】
2018101233.tif 000010
【図９】
2018101233.tif 000011
【図１０】
2018101233.tif 000012
【図１１】
2018101233.tif 000013