(57)【要約】  「ホスト」であるシミュレーション装置（１００）は、プログラムの命令の読み込みにキャッシュを用いる「ゲスト」でのプログラムの実行を模擬する。このシミュレーション装置（１００）において、実行部（１３０）は、バッファ（１２０）に格納されたホストコード（２０２）に記述された命令を実行する。処理部（１４０）は、実行部（１３０）により次に実行される命令である次命令が記述されたホストコード（２０２）がバッファ（１２０）に格納されていない場合、当該次命令が記述されたゲストコード（２０１）を含む、キャッシュラインのサイズ分のゲストコード群を記憶媒体１１０から読み取り、読み取ったゲストコード群を変換して、当該次命令が記述されたホストコード（２０２）を含むホストコード群を生成し、生成したホストコード群をホストコードブロックとしてまとめてバッファ（１２０）に書き込む。
2016189725.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの命令の読み込みにキャッシュを用いるシステムでの前記プログラムの実行を模擬するシミュレーション装置であって、
前記プログラムの命令が前記システムでの実行形式で記述されたゲストコードを記憶する記憶媒体と、
前記プログラムの命令が前記シミュレーション装置での実行形式で記述されたホストコードを格納するためのバッファと、
前記バッファに格納されたホストコードに記述された命令を実行する実行部と、
前記実行部により次に実行される命令である次命令が記述されたホストコードが前記バッファに格納されていない場合、当該次命令が記述されたゲストコードを含む、前記プログラムの命令が前記キャッシュに格納される単位であるキャッシュラインのサイズ分のゲストコード群を前記記憶媒体から読み取り、読み取ったゲストコード群を変換して、当該次命令が記述されたホストコードを含むホストコード群を生成し、生成したホストコード群をホストコードブロックとしてまとめて前記バッファに書き込む処理部と
を備えるシミュレーション装置。
【請求項２】
前記処理部は、前記バッファに格納されたホストコードブロックに対応するゲストコードの合計サイズと前記キャッシュのサイズとを比較することで、生成したホストコード群を格納するための空き領域が前記バッファにあるかどうかを判定し、前記空き領域がない場合、いずれかのホストコードブロックを前記バッファから削除する請求項１に記載のシミュレーション装置。
【請求項３】
前記処理部は、前記キャッシュのミスの発生時に前記システムが一部の命令を前記キャッシュから削除するアルゴリズムと同じアルゴリズムを用いて、いずれかのホストコードブロックを前記バッファから削除する請求項２に記載のシミュレーション装置。
【請求項４】
前記システムでの前記プログラムの実行時間の推定値を計算する計算部
をさらに備え、
前記記憶媒体は、前記キャッシュのミスの発生時における前記システムでの前記プログラムの命令の読み込み時間を示すペナルティ情報を記憶し、
前記計算部は、新たなホストコードブロックが前記バッファに書き込まれる度に、前記記憶媒体に記憶されたペナルティ情報が示す読み込み時間を前記推定値に加算する請求項１から３のいずれか１項に記載のシミュレーション装置。
【請求項５】
前記ペナルティ情報は、前記キャッシュのミスの発生時に前記システムで前記プログラムの命令の読み込みにかかる時間を、前記プログラムの命令の読み込み元であるメモリのアドレス範囲ごとに示す情報である請求項４に記載のシミュレーション装置。
【請求項６】
前記記憶媒体は、前記システムで前記プログラムの命令の実行にかかる時間を示す時間情報を記憶し、
前記計算部は、前記バッファに格納されたホストコードに記述された命令が前記実行部により実行される度に、前記記憶媒体に記憶された時間情報が示す時間を前記推定値に加算する請求項４又は５に記載のシミュレーション装置。
【請求項７】
プログラムの命令の読み込みにキャッシュを用いるシステムでの前記プログラムの実行を模擬するシミュレーション方法であって、
前記プログラムの命令が前記システムでの実行形式で記述されたゲストコードを記憶する記憶媒体と、前記プログラムの命令がコンピュータでの実行形式で記述されたホストコードを格納するためのバッファとを備える前記コンピュータが、前記バッファに格納されたホストコードに記述された命令を実行し、
前記コンピュータが、次に実行する命令である次命令が記述されたホストコードが前記バッファに格納されていない場合、当該次命令が記述されたゲストコードを含む、前記プログラムの命令が前記キャッシュに格納される単位であるキャッシュラインのサイズ分のゲストコード群を前記記憶媒体から読み取り、読み取ったゲストコード群を変換して、当該次命令が記述されたホストコードを含むホストコード群を生成し、生成したホストコード群をホストコードブロックとしてまとめて前記バッファに書き込むシミュレーション方法。
【請求項８】
プログラムの命令の読み込みにキャッシュを用いるシステムでの前記プログラムの実行を模擬するシミュレーションプログラムであって、
前記プログラムの命令が前記システムでの実行形式で記述されたゲストコードを記憶する記憶媒体と、前記プログラムの命令がコンピュータでの実行形式で記述されたホストコードを格納するためのバッファとを備える前記コンピュータに、
前記バッファに格納されたホストコードに記述された命令を実行する処理と、
次に実行される命令である次命令が記述されたホストコードが前記バッファに格納されていない場合、当該次命令が記述されたゲストコードを含む、前記プログラムの命令が前記キャッシュに格納される単位であるキャッシュラインのサイズ分のゲストコード群を前記記憶媒体から読み取り、読み取ったゲストコード群を変換して、当該次命令が記述されたホストコードを含むホストコード群を生成し、生成したホストコード群をホストコードブロックとしてまとめて前記バッファに書き込む処理と
を実行させるシミュレーションプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シミュレーション装置及びシミュレーション方法及びシミュレーションプログラムに関するものである。
【背景技術】
【０００２】
電子デバイスを用いたシステム、特に組み込みシステムの開発では、ハードウェア及びソフトウェアの両方の開発が必要となる。しかしながら、一般的には、ソフトウェアは、ソフトウェアを実行するハードウェアが完成しないと動作させることができない。そのため、従来は、ソフトウェア及びハードウェアの両方の開発が伴うシステム開発を行う場合、システムを構成するハードウェアの設計を先に完了させて、次に、完成したハードウェア上でソフトウェアを動かしてシステム全体の動作確認を行う手法がとられていた。【０００３】
このような従来の開発フローでは、ソフトウェアを含めたシステム全体の動作検証が開発工程の最後の方になる。よって、不具合が発覚した場合の手戻りによるリスクが大きいという課題が潜在的に存在する。この潜在的なリスクは、システムが大きく、複雑になるに従って、システムの品質並びに開発コストに強く影響するようになる。【０００４】
近年、電子技術の発展により電子部品が小型化、高性能化する一方で、電子部品を用いて構成されるシステムは大きく、複雑化している。そのため、上記のような従来の開発フローの潜在的なリスクが無視できなくなってきている。このリスクを回避するため、近年では、ＩＳＳ（Ｉｎｓｔｒｕｃｔｉｏｎ・Ｓｅｔ・Ｓｉｍｕｌａｔｏｒ）を用いたエミュレーション技術が注目されている。ＩＳＳは、任意のプロセッサ及び周辺装置の動作をコンピュータ上で模擬し、コンピュータ上で模擬したプロセッサ及び周辺装置により任意のソフトウェアを実行することができる。よって、システムを構成するハードウェアの完成前に、システムに載せるソフトウェアの動作確認を行うことができる。つまり、ＩＳＳを用いることで、従来の開発フローでは不可能であったハードウェアの完成前におけるソフトウェアの検証が可能となる。また、ソフトウェアの動作検証だけでなく、開発の初期段階で決定されるハードウェアアーキテクチャの動作確認及び性能計測も可能となる。これによって、従来の開発フローに潜在的に存在していた後工程での不具合の発生リスクをフロントローディングにより回避できる。【０００５】
ＩＳＳは、任意のプログラムであるゲストコードの実行を模擬する際、任意のコンピュータであるホスト上で動作するソフトウェアとして実現される。そのため、巨大なシステムのプログラムの実行をＩＳＳで模擬する場合には、実行速度が課題となる。【０００６】
実行速度を改善するための方法がいくつか提案されている。【０００７】
特許文献１には、ＩＳＳを動的バイナリ変換により実行する際のレジスタマッピングを効率化することで、ＩＳＳの実行を高速化する方法が記載されている。【０００８】
特許文献２には、ＩＳＳをソフトウェアの動作検証だけでなく、システムの性能分析にも活用するために、周辺装置、特にバスの調停を模擬する方法が記載されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１２−３７６１号公報
【特許文献２】特開２０１４−１９４７４６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
プロセッサは、キャッシュを備えることにより、キャッシュを備えない場合と比較してソフトウェアの実行速度を数倍から１０倍程度に改善している。したがって、ＩＳＳの実行を高速化しつつ、システムの性能を精度良く計測するには、キャッシュを用いた動作を精度良く、かつ、高速に模擬する必要がある。しかしながら、特許文献１に記載された方法では、システムの性能を計測することができない。特許文献２に記載された方法では、システムの性能を計測することはできるが、キャッシュのシミュレーションを高速に実行することは考慮されていない。【００１１】
本発明は、キャッシュを用いた動作を精度良く、かつ、高速に模擬することを目的とする。
【課題を解決するための手段】
【００１２】
本発明の一の態様に係るシミュレーション装置は、
プログラムの命令の読み込みにキャッシュを用いるシステムでの前記プログラムの実行を模擬するシミュレーション装置であって、
前記プログラムの命令が前記システムでの実行形式で記述されたゲストコードを記憶する記憶媒体と、
前記プログラムの命令が前記シミュレーション装置での実行形式で記述されたホストコードを格納するためのバッファと、
前記バッファに格納されたホストコードに記述された命令を実行する実行部と、
前記実行部により次に実行される命令である次命令が記述されたホストコードが前記バッファに格納されていない場合、当該次命令が記述されたゲストコードを含む、前記プログラムの命令が前記キャッシュに格納される単位であるキャッシュラインのサイズ分のゲストコード群を前記記憶媒体から読み取り、読み取ったゲストコード群を変換して、当該次命令が記述されたホストコードを含むホストコード群を生成し、生成したホストコード群をホストコードブロックとしてまとめて前記バッファに書き込む処理部とを備える。
【発明の効果】
【００１３】
本発明では、ゲストコードをホストコードに変換する際に、キャッシュラインのサイズ分のゲストコード群をホストコード群に変換し、当該ホストコード群をホストコードブロックとしてまとめてバッファに書き込むことで、キャッシュを用いた動作を精度良く、かつ、高速に模擬することが可能となる。
【図面の簡単な説明】
【００１４】
【図１】実施の形態１に係るシミュレーション装置の構成を示すブロック図。
【図２】実施の形態１に係るシミュレーション装置の動作を示すフローチャート。
【図３】実施の形態１に係るシミュレーション装置の動作を示すフローチャート。
【図４】実施の形態１に係るシミュレーション装置の動作を示すフローチャート。
【図５】本発明の実施の形態に係るシミュレーション装置のハードウェア構成例を示す図。
【発明を実施するための形態】
【００１５】
以下、本発明の実施の形態について、図を用いて説明する。なお、各図中、同一又は相当する部分には、同一符号を付している。実施の形態の説明において、同一又は相当する部分については、その説明を適宜省略又は簡略化する。
【００１６】
実施の形態１．
本実施の形態に係る装置の構成、本実施の形態に係る装置の動作、本実施の形態の効果を順番に説明する。
【００１７】
＊＊＊構成の説明＊＊＊
図１を参照して、本実施の形態に係る装置であるシミュレーション装置１００の構成を説明する。
【００１８】
シミュレーション装置１００は、ＩＳＳを実行することで、システムの性能を計測するコンピュータである。即ち、シミュレーション装置１００は、「ホスト」に相当する。シミュレーション装置１００によって性能が計測されるシステムは、「ゲスト」に相当する。
【００１９】
「ゲスト」であるシステムでは、プロセッサが、プログラムの命令をメモリから読み込み、読み込んだ命令を実行することで、プログラムを実行する。プロセッサにより命令が読み込まれる際には、キャッシュが用いられる。即ち、「ゲスト」は、プログラムの命令の読み込みにキャッシュを用いるシステムである。
【００２０】
プログラムは、複数のゲストコード２０１からなる。ゲストコード２０１は、プログラムの命令が「ゲスト」で実行可能な形式、即ち、「ゲスト」での実行形式で記述されたコードである。
【００２１】
「ホスト」であるシミュレーション装置１００は、「ゲスト」でのプログラムの実行を模擬して、「ゲスト」でのプログラムの実行時間の推定値３０１を計算する。シミュレーション装置１００は、複数のゲストコード２０１からなるプログラムの実行を模擬するために、それぞれのゲストコード２０１をホストコード２０２に変換する。ホストコード２０２は、プログラムの命令が「ホスト」で実行可能な形式、即ち、「ホスト」での実行形式で記述されたコードである。本実施の形態において、ホストコード２０２は、バイナリコードである。
【００２２】
本実施の形態では、「ホスト」であるシミュレーション装置１００が、ゲストコード２０１をホストコード２０２に変換する際に、キャッシュラインのサイズ分のゲストコード群をホストコード群に変換し、当該ホストコード群をホストコードブロックとしてまとめてバッファ１２０に書き込む。これにより、キャッシュを用いた動作を精度良く、かつ、高速に模擬することが可能となる。
【００２３】
図１に示すように、シミュレーション装置１００は、記憶媒体１１０と、バッファ１２０とを備える。
【００２４】
記憶媒体１１０は、ゲストコード２０１と、ペナルティ情報２１１とを記憶する。ゲストコード２０１は、前述したように、プログラムの命令が、「ゲスト」であるシステムでの実行形式で記述されたコードである。ペナルティ情報２１１は、キャッシュのミスの発生時における「ゲスト」でのプログラムの命令の読み込み時間を示す情報である。即ち、ペナルティ情報２１１は、キャッシュペナルティを示す情報である。
【００２５】
記憶媒体１１０は、さらに、時間情報２１２を記憶する。時間情報２１２は、「ゲスト」であるシステムでプログラムの命令の実行にかかる時間を示す情報である。即ち、時間情報２１２は、命令実行時間を示す情報である。
【００２６】
記憶媒体１１０は、さらに、コード長情報２２１と、ライン情報２２２と、ブロック情報２３１と、アドレス対応表２３２と、サイズ情報２４１と、アルゴリズム情報２４２と、構造情報２４３とを記憶する。コード長情報２２１は、ゲストコード２０１のサイズを示す情報である。ライン情報２２２は、キャッシュラインのサイズを示す情報である。キャッシュラインとは、プログラムの命令がキャッシュに格納される単位のことである。ブロック情報２３１は、後述するゲストコードブロックの属性を示す情報である。アドレス対応表２３２は、後述するホストコードブロックがバッファ１２０のどのアドレスに格納されているかを記録した表である。サイズ情報２４１は、キャッシュのサイズを示す情報である。アルゴリズム情報２４２は、キャッシュラインの入れ替えアルゴリズムとして、どのようなアルゴリズムが「ゲスト」で使用されるかを示す情報である。構造情報２４３は、キャッシュのデータ格納構造として、どのような構造が「ゲスト」で使用されるかを示す情報である。
【００２７】
バッファ１２０は、ホストコード２０２を格納するためのメモリである。ホストコード２０２は、前述したように、プログラムの命令が、「ホスト」であるシミュレーション装置１００での実行形式で記述されたコードである。
【００２８】
本実施の形態では、「ホスト」であるシミュレーション装置１００のバッファ１２０、ホストコード２０２、ホストコードブロックが、それぞれ「ゲスト」であるシステムのキャッシュ、ゲストコード２０１、ゲストコードブロックに対応している。本実施の形態では、バッファ１２０に関連する動作を、キャッシュに関連する動作に近づけることで、シミュレーションの精度を向上させている。
【００２９】
シミュレーション装置１００は、さらに、実行部１３０と、処理部１４０と、計算部１５０とを備える。
【００３０】
実行部１３０は、バッファ１２０に格納されたホストコード２０２に記述された命令を実行する。
【００３１】
具体的には、実行部１３０は、次に実行する命令が記述されたホストコードブロックのバッファ１２０内のアドレスを、記憶媒体１１０に記憶されたアドレス対応表２３２から取得する。実行部１３０は、取得したアドレスを指定して、バッファ１２０からホストコードブロックを取得する。実行部１３０は、取得したホストコードブロックを実行する。「ホストコードブロックを実行する」とは、ホストコードブロックに含まれる各ホストコード２０２に記述された命令を実行するということである。
【００３２】
処理部１４０は、実行部１３０により次に実行される命令である次命令が記述されたホストコード２０２がバッファ１２０に格納されていない場合、当該次命令が記述されたゲストコード２０１を含む、キャッシュラインのサイズ分のゲストコード群を記憶媒体１１０から読み取る。処理部１４０は、読み取ったゲストコード群を変換して、当該次命令が記述されたホストコード２０２を含むホストコード群を生成する。処理部１４０は、生成したホストコード群をホストコードブロックとしてまとめてバッファ１２０に書き込む。
【００３３】
このように、バッファ１２０にホストコード２０２を格納する単位をキャッシュラインに合わせることで、キャッシュの動作を精度良く模擬することが可能となる。また、次に実行される命令が記述されたホストコード２０２がバッファ１２０に格納されている場合は、そのホストコード２０２を利用することで、ホストコード２０２を生成する処理を省略できるため、シミュレーションを高速化することができる。
【００３４】
なお、処理部１４０は、ゲストコード２０１を１つずつホストコード２０２に変換してもよいが、本実施の形態では、キャッシュラインのサイズと同じ数量のゲストコード２０１からゲストコードブロックを生成し、ゲストコードブロックを一括してホストコードブロックに変換する。
【００３５】
本実施の形態において、処理部１４０は、バッファ１２０に格納されたホストコードブロックに対応するゲストコードの合計サイズと（ゲストシステムの）キャッシュのサイズとを比較することで、生成したホストコード群を格納するための空き領域がバッファ１２０にあるかどうかを判定する。空き領域がない場合、処理部１４０は、いずれかのホストコードブロックをバッファ１２０から削除する。このように、バッファ１２０の実際の容量ではなく、「ゲスト」のキャッシュの容量を基準に、空き領域の有無を判定することで、キャッシュの動作を精度良く模擬することが可能となる。なお、「ホストコードブロックに対応するゲストコード」とは、ホストコードブロックの元となったゲストコードのことである。
【００３６】
処理部１４０は、上記のようにいずれかのホストコードブロックをバッファ１２０から削除する際には、キャッシュのミスの発生時に「ゲスト」であるシステムが一部の命令をキャッシュから削除するアルゴリズムと同じアルゴリズムを用いる。これにより、キャッシュの動作をさらに精度良く模擬することが可能となる。
【００３７】
本実施の形態において、処理部１４０は、ブロック生成部１４１と、バッファ検索部１４２と、ブロック変換部１４３とを有する。
【００３８】
ブロック生成部１４１は、アドレスを指定して、記憶媒体１１０からゲストコード２０１を取得する。ブロック生成部１４１は、記憶媒体１１０に記憶されたコード長情報２２１を参照して、ゲストコード２０１のサイズの数値を取得する。ブロック生成部１４１は、記憶媒体１１０に記憶されたライン情報２２２を参照して、キャッシュラインのサイズの数値を取得する。ブロック生成部１４１は、取得した数値を用いて、ゲストコード２０１からゲストコードブロックを生成する。ブロック生成部１４１は、生成したゲストコードブロックをブロック変換部１４３に対して出力する。ブロック生成部１４１は、生成したゲストコードブロックに関するブロック情報２３１をバッファ検索部１４２に対して出力する。
【００３９】
バッファ検索部１４２は、ブロック生成部１４１からブロック情報２３１を取得する。バッファ検索部１４２は、ブロック情報２３１を記憶媒体１１０に書き込む。バッファ検索部１４２は、ブロック変換部１４３からホストコードブロックを取得する。バッファ検索部１４２は、取得したホストコードブロックをバッファ１２０に格納する。バッファ検索部１４２は、バッファ１２０でホストコードブロックが格納されたアドレスをアドレス対応表２３２に記録する。ホストコードブロックを格納するための空き領域がバッファ１２０に存在しない場合、バッファ検索部１４２は、空き領域の作り方を決定するため、記憶媒体１１０に記憶されたサイズ情報２４１とアルゴリズム情報２４２と構造情報２４３とを参照する。
【００４０】
ブロック変換部１４３は、ブロック生成部１４１からゲストコードブロックを取得する。ブロック変換部１４３は、ゲストコードブロックをホストコードブロックに変換し、ホストコードブロックをバッファ検索部１４２に対して出力する。
【００４１】
計算部１５０は、「ゲスト」でのプログラムの実行時間の推定値３０１を計算する。その際に、計算部１５０は、新たなホストコードブロックがバッファ１２０に書き込まれる度に、記憶媒体１１０に記憶されたペナルティ情報２１１が示す読み込み時間を推定値３０１に加算する。
【００４２】
なお、計算部１５０によって読み込み時間が加算されるタイミングは、新たなホストコードブロックがバッファ１２０に書き込まれる前でもよいし、新たなホストコードブロックがバッファ１２０に書き込まれるのと同時でもよいし、新たなホストコードブロックがバッファ１２０に書き込まれた後でもよい。いずれの場合でも、「新たなホストコードブロックがバッファ１２０に書き込まれる度に」読み込み時間が加算されることになる。即ち、処理部１４０により新たなホストコードブロックがバッファ１２０に書き込まれるのは、実行部１３０により次に実行される命令が記述されたホストコード２０２がバッファ１２０に格納されていないという状況が発生した場合であるから、計算部１５０は、そのような状況が発生したことを検知した時点以降であれば、いつ読み込み時間を加算してもよい。そのため、本実施の形態では、計算部１５０が、新たなホストコードブロックがバッファ１２０に書き込まれるのを待たず、処理部１４０によって記憶媒体１１０からキャッシュラインのサイズ分のゲストコード群が取得されたことを検知した時点で、読み込み時間を加算する。
【００４３】
前述したように、本実施の形態では、キャッシュラインのサイズと同じ数量のゲストコード群に対応するホストコード群がホストコードブロックとしてまとめてバッファ１２０に書き込まれる。そのため、計算部１５０は、ホストコードブロックがバッファ１２０に書き込まれる度に、ペナルティ情報２１１が示す読み込み時間を推定値３０１に加算する。
【００４４】
ペナルティ情報２１１は、望ましくは、キャッシュのミスの発生時に「ゲスト」であるシステムでプログラムの命令の読み込みにかかる時間を、プログラムの命令の読み込み元であるメモリのアドレス範囲ごとに示す情報である。このような情報を用いることで、計算部１５０により推定値３０１に加算される時間が、一律の時間ではなく、より現実に即した時間になるため、より精確な推定値３０１が得られる。
【００４５】
計算部１５０は、さらに、バッファ１２０に格納されたホストコード２０２に記述された命令が実行部１３０により実行される度に、記憶媒体１１０に記憶された時間情報２１２が示す時間を推定値３０１に加算する。
【００４６】
本実施の形態において、計算部１５０は、ペナルティ計算部１５１と、時間計算部１５２とを有する。
【００４７】
ペナルティ計算部１５１は、ブロック生成部１４１の動作を監視する。ペナルティ計算部１５１は、ブロック生成部１４１が記憶媒体１１０からキャッシュラインのサイズ分のゲストコード群を取得した場合に、記憶媒体１１０に記憶されたペナルティ情報２１１を参照して、キャッシュペナルティを推定値３０１に加算する。
【００４８】
時間計算部１５２は、実行部１３０の動作を監視する。時間計算部１５２は、実行部１３０がホストコードブロックを実行した場合に、記憶媒体１１０に記憶された時間情報２１２を参照して、命令実行時間を推定値３０１に加算する。
【００４９】
＊＊＊動作の説明＊＊＊
図２及び図３及び図４を参照して、シミュレーション装置１００の動作を説明する。シミュレーション装置１００の動作は、本実施の形態に係るシミュレーション方法に相当する。シミュレーション装置１００の動作は、本実施の形態に係るシミュレーションプログラムの処理手順に相当する。
【００５０】
図２は、シミュレーション装置１００がゲストコードブロックを生成する手順を示している。図１に示した構成要素の中では、特に、記憶媒体１１０と、処理部１４０のブロック生成部１４１とが、この手順に関連する。
【００５１】
ステップＳ１１の実施に先立ち、記憶媒体１１０にはゲストコード２０１が格納される。ブロック生成部１４１が外部からの開始アドレスの指示を受けると、ステップＳ１１からフローが開始される。
【００５２】
ステップＳ１１において、ブロック生成部１４１は、指示されたアドレスに従って、記憶媒体１１０に対し、ゲストコード２０１の読み出しのためのアドレスを指定する。記憶媒体１１０は、指定されたアドレスに格納されているゲストコード２０１を返す。ブロック生成部１４１は、返されたゲストコード２０１のコード長を、コード長情報２２１を参照してチェックし、図示していない一時バッファにゲストコード２０１を保持する。
【００５３】
ステップＳ１２において、ブロック生成部１４１は、ライン情報２２２を参照し、一時バッファに保持されているゲストコード２０１の総コード長が、キャッシュラインのサイズと同じになっているかどうかをチェックする。キャッシュラインのサイズとは、「ゲスト」であるシステムに備えられているキャッシュのキャッシュラインのサイズのことである。
【００５４】
ステップＳ１２のチェックの結果、一時バッファに保持されているゲストコード２０１の総コード長が、キャッシュラインのサイズと同じになっていない場合、フローはステップＳ１１に戻る。同じになっている場合、フローはステップＳ１３に進む。
【００５５】
ステップＳ１３において、ブロック生成部１４１は、一時バッファ内のゲストコード２０１群を１つのゲストコードブロックとしてまとめて出力する。同時に、ブロック生成部１４１は、ゲストコードブロックに関する情報をブロック情報２３１として出力する。ブロック情報２３１には、ゲストコードブロックに含まれるゲストコード２０１の数及び総コード長、各ゲストコード２０１のアドレス情報等が含まれる。
【００５６】
図３は、シミュレーション装置１００が、図２のフローで行われたゲストコードの読み出しが実ハードウェアで実行された場合の処理時間を計算する手順、及び、シミュレーション装置１００が、ゲストコードブロックをホストコードブロックに変換し、ホストコードブロックをバッファ１２０に格納する手順を示している。図１に示した構成要素の中では、特に、記憶媒体１１０と、バッファ１２０と、処理部１４０のバッファ検索部１４２と、処理部１４０のブロック変換部１４３と、計算部１５０のペナルティ計算部１５１とが、この手順に関連する。
【００５７】
ステップＳ２１において、ペナルティ計算部１５１は、ブロック生成部１４１が生成したブロック情報２３１と、ペナルティ情報２１１とを参照して、キャッシュペナルティを計算する。キャッシュペナルティとは、ゲストコードブロックに含まれる複数のゲストコード２０１が実ハードウェア上で読み出される場合に必要となる読み出し時間のことである。実ハードウェアでは、ゲストコード２０１はメモリ上に置かれている。メモリからゲストコード２０１を読み出すには、メモリ性能によって異なる読み出しレイテンシが必要となる。読み出しレイテンシとは、読み出し時間のことである。ペナルティ情報２１１は、読み出しレイテンシを、実ハードウェアで定義されるアドレスマップと関連付けてデータベース化したものである。よって、ペナルティ計算部１５１は、ブロック情報２３１に含まれるゲストコード２０１のアドレス情報をキーとして、ペナルティ情報２１１に含まれる、アドレスに対応する読み出しレイテンシを抽出する。ペナルティ計算部１５１は、抽出した読み出しレイテンシから、ゲストコードブロックに含まれる複数のゲストコード２０１が実ハードウェア上で読み出される場合の読み出し時間を計算する。
【００５８】
ステップＳ２１に並行して、ステップＳ２２において、ブロック変換部１４３は、ゲストコードブロックの形式を「ホスト」が実行可能な形式に変換して、ホストコードブロックを生成する。
【００５９】
ステップＳ２３において、バッファ検索部１４２は、ブロック変換部１４３が生成したホストコードブロックを格納するためのバッファ１２０の空き領域を検索する。検索にあたって、バッファ検索部１４２は、バッファ１２０そのものの空き領域があるかどうかではなく、現在バッファ１２０に記録されているホストコードブロックに対応するゲストコードの総サイズと、サイズ情報２４１で示されたキャッシュのサイズとの差である空きがあるかどうかを判定する。ホストコードブロックに対応するゲストコードの総サイズがキャッシュのサイズよりも小さければ、空きがあることになる。なお、バッファ１２０そのもののサイズは、キャッシュのサイズよりも大きければ、どのような大きさであってもよい。
【００６０】
バッファ１２０に空き領域がない場合、フローはステップＳ２４に進む。バッファ１２０に空き領域がある場合、フローはステップＳ２５に進む。
【００６１】
ステップＳ２４において、バッファ検索部１４２は、アルゴリズム情報２４２及び構造情報２４３を参照して、バッファ１２０からホストコードブロックを追い出して空き領域を作る。アルゴリズム情報２４２は、「ゲスト」で使用されるキャッシュのライン入れ替え方式が、ＬＲＵ（Ｌｅａｓｔ・Ｒｅｃｅｎｔｌｙ・Ｕｓｅｄ）アルゴリズム、ＬＦＵ（Ｌｅａｓｔ・Ｆｒｅｑｕｅｎｔｌｙ・Ｕｓｅｄ）アルゴリズム等のいずれかであるかを示す情報である。構造情報２４３は、「ゲスト」で使用されるキャッシュのデータ格納構造が、ダイレクトマップ方式、セットアソシアティブ方式、フルアソシアティブ方式等のいずれであるかを示す情報である。構造情報２４３には、方式によってはｗａｙ数、バンク数等の情報も含まれる。
【００６２】
ステップＳ２４の後、フローはステップＳ２５に進む。
【００６３】
ステップＳ２５において、バッファ検索部１４２は、ブロック変換部１４３が生成したホストコードブロックをバッファ１２０の空き領域に格納する。バッファ検索部１４２は、ホストコードブロックの変換元であるゲストコードブロックのブロック情報２３１と、バッファ１２０でホストコードブロックを格納したアドレスとを対にして、アドレス対応表２３２に記録する。ここで記録された情報は図４のフローで使用される。
【００６４】
図４は、シミュレーション装置１００がホストコードブロックを実行し、ゲストコードが実ハードウェアで実行された場合の処理時間を計算する手順を示している。図１に示した構成要素の中では、特に、記憶媒体１１０と、バッファ１２０と、実行部１３０と、処理部１４０のバッファ検索部１４２と、計算部１５０の時間計算部１５２とが、この手順に関連する。
【００６５】
ステップＳ３１において、バッファ検索部１４２は、バッファ１２０に格納したホストコードブロックを実行部１３０に出力する。実行部１３０は、入力されたホストコードブロックを、「ホスト」のＣＰＵ（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ）により実行して、ホストコードブロックの変換元であるゲストコードブロックが実ハードウェア上で実行された場合の動作のシミュレーション結果を出力する。なお、実行部１３０は、現在実行中のホストコードブロックに含まれる最後のホストコード２０２まで実行するか、又は、分岐命令或いはジャンプ命令により、現在実行中のホストコードブロック外のアドレスに飛ぶ直前のホストコード２０２まで実行する。
【００６６】
ステップＳ３２において、時間計算部１５２は、実行部１３０が実行したホストコードブロックに対応するゲストコードブロックのブロック情報２３１と、時間情報２１２とを参照して、ゲストコードブロックが実ハードウェアで実行された場合の命令実行時間を計算する。なお、ステップＳ３１とステップＳ３２は、並行して実施されることが望ましい。
【００６７】
実行部１３０は、ステップＳ３１で実行したホストコードブロックが終端に達しているかどうかをチェックする。終端に達していた場合、フローは終了する。即ち、シミュレーションが完了する。終端に達しておらず、シミュレーションの実行継続が必要である場合、フローはステップＳ３３に進む。
【００６８】
ステップＳ３３において、実行部１３０は、現在のホストコードブロックの実行完了通知とともに、次に実行するホストコードのアドレスをジャンプ先アドレスとしてバッファ検索部１４２に通知する。
【００６９】
ステップＳ３４において、バッファ検索部１４２は、アドレス対応表２３２を参照して、バッファ１２０内で、実行部１３０から通知されたジャンプ先アドレスに対応するホストコードブロックを検索する。
【００７０】
検索の結果、バッファ１２０内に該当するホストコードブロックが存在する場合、フローはステップＳ３４に進む。この場合、キャッシュヒットが発生したとみなすことができる。検索の結果、バッファ１２０内に該当するホストコードブロックが存在しない場合、フローはステップＳ１１に戻る。この場合、キャッシュミスが発生したとみなすことができる。
【００７１】
ステップＳ３４において、バッファ検索部１４２は、そのホストコードブロックをバッファ１２０から読み出して実行部１３０に出力する。
【００７２】
ステップＳ３４の後、フローはステップＳ３１に戻る。
【００７３】
＊＊＊効果の説明＊＊＊
本実施の形態では、ゲストコード２０１をホストコード２０２に変換する際に、キャッシュラインのサイズ分のゲストコード群をホストコード群に変換し、当該ホストコード群をホストコードブロックとしてまとめてバッファ１２０に書き込むことで、キャッシュを用いた動作を精度良く、かつ、高速に模擬することが可能となる。
【００７４】
本実施の形態では、バッファ１２０に次に実行するホストコードブロックが存在する場合は、図２及び図３のフローをスキップすることができる。よって、高速にシミュレーションを実行することが可能である。さらに、バッファ１２０の空き検索の動作が実ハードウェアのキャッシュ検索の動作と等価となる。また、図２のフローにおけるゲストコード２０１の読み出しの動作が実ハードウェアでのキャッシュミス発生時の外部メモリアクセスの動作と等価となる。そのため、これらの動作を監視し、実ハードウェアでの動作に置き換えて時間を計算するだけで、キャッシュヒット及びキャッシュミスの動作を含むシステムの性能の計測が高速に精度良く行える。
【００７５】
実ハードウェアでは、キャッシュにラインサイズ単位で命令が置かれる。仮にゲストコード２０１からホストコード２０２への変換がラインサイズとは異なる単位で行われるとすると、キャッシュのヒット及びミスを判定するためには、次のような煩雑な動作が必要となる。
（１）変換済コード群に対応する変換前コード群にどれだけのサイズのゲストコード２０１が含まれていたかを計算する。変換済コード群とは、ホストコード群のことである。変換前コード群とは、ゲストコード群のことである。
（２）（１）の結果をキャッシュのラインサイズと比較して、変換前コード群がキャッシュのどのラインに格納されているかを計算する。
（３）（２）の結果からキャッシュのヒット及びミスを判定する。
【００７６】
本実施の形態では、ゲストコード２０１からホストコード２０２への変換がラインサイズ単位で行われるため、上記のような煩雑な動作は不要となり、バッファの検索を行うだけで、キャッシュのヒット及びミスを判定することができる。即ち、変換済コード群がバッファにあれば、キャッシュのヒットが生じ、変換済コード群がバッファになければ、キャッシュのミスが生じたと判定できる。よって、動作が簡単かつ正確になる。
【００７７】
以下では、図５を参照して、本発明の実施の形態に係るシミュレーション装置１００のハードウェア構成例を説明する。
【００７８】
シミュレーション装置１００は、コンピュータである。シミュレーション装置１００は、プロセッサ９０１、補助記憶装置９０２、メモリ９０３、通信装置９０４、入力インタフェース９０５、ディスプレイインタフェース９０６といったハードウェアを備える。プロセッサ９０１は、信号線９１０を介して他のハードウェアと接続され、これら他のハードウェアを制御する。入力インタフェース９０５は、入力装置９０７に接続されている。ディスプレイインタフェース９０６は、ディスプレイ９０８に接続されている。
【００７９】
プロセッサ９０１は、プロセッシングを行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ・Ｃｉｒｃｕｉｔ）である。プロセッサ９０１は、例えば、ＣＰＵ、ＤＳＰ（Ｄｉｇｉｔａｌ・Ｓｉｇｎａｌ・Ｐｒｏｃｅｓｓｏｒ）、又は、ＧＰＵ（Ｇｒａｐｈｉｃｓ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ）である。
【００８０】
補助記憶装置９０２は、例えば、ＲＯＭ（Ｒｅａｄ・Ｏｎｌｙ・Ｍｅｍｏｒｙ）、フラッシュメモリ、又は、ＨＤＤ（Ｈａｒｄ・Ｄｉｓｋ・Ｄｒｉｖｅ）である。
【００８１】
メモリ９０３は、例えば、ＲＡＭ（Ｒａｎｄｏｍ・Ａｃｃｅｓｓ・Ｍｅｍｏｒｙ）である。記憶媒体１１０及びバッファ１２０は、メモリ９０３により実現することができる。なお、記憶媒体１１０は、補助記憶装置９０２とメモリ９０３との組み合わせにより実現してもよい。例えば、ゲストコード２０１がメモリ９０３に記憶され、ペナルティ情報２１１等、ゲストコード２０１以外の情報が補助記憶装置９０２に記憶されてもよい。
【００８２】
通信装置９０４は、データを受信するレシーバ９２１及びデータを送信するトランスミッタ９２２を含む。通信装置９０４は、例えば、通信チップ又はＮＩＣ（Ｎｅｔｗｏｒｋ・Ｉｎｔｅｒｆａｃｅ・Ｃａｒｄ）である。
【００８３】
入力インタフェース９０５は、入力装置９０７のケーブル９１１が接続されるポートである。入力インタフェース９０５は、例えば、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ・Ｓｅｒｉａｌ・Ｂｕｓ）端子である。
【００８４】
ディスプレイインタフェース９０６は、ディスプレイ９０８のケーブル９１２が接続されるポートである。ディスプレイインタフェース９０６は、例えば、ＵＳＢ端子又はＨＤＭＩ（登録商標）（Ｈｉｇｈ・Ｄｅｆｉｎｉｔｉｏｎ・Ｍｕｌｔｉｍｅｄｉａ・Ｉｎｔｅｒｆａｃｅ）端子である。
【００８５】
入力装置９０７は、例えば、マウス、タッチペン、キーボード、又は、タッチパネルである。
【００８６】
ディスプレイ９０８は、例えば、ＬＣＤ（Ｌｉｑｕｉｄ・Ｃｒｙｓｔａｌ・Ｄｉｓｐｌａｙ）である。
【００８７】
補助記憶装置９０２には、実行部１３０、処理部１４０、計算部１５０といった「部」の機能を実現するプログラムが記憶されている。このプログラムは、メモリ９０３にロードされ、プロセッサ９０１に読み込まれ、プロセッサ９０１によって実行される。補助記憶装置９０２には、ＯＳ（Ｏｐｅｒａｔｉｎｇ・Ｓｙｓｔｅｍ）も記憶されている。ＯＳの少なくとも一部がメモリ９０３にロードされ、プロセッサ９０１はＯＳを実行しながら、「部」の機能を実現するプログラムを実行する。
【００８８】
図５では、１つのプロセッサ９０１が示されているが、シミュレーション装置１００が複数のプロセッサ９０１を備えていてもよい。そして、複数のプロセッサ９０１が「部」の機能を実現するプログラムを連携して実行してもよい。
【００８９】
「部」の処理の結果を示す情報やデータや信号値や変数値は、補助記憶装置９０２、メモリ９０３、又は、プロセッサ９０１内のレジスタ又はキャッシュメモリに記憶される。
【００９０】
「部」を「サーキットリ」で提供してもよい。また、「部」を「回路」又は「工程」又は「手順」又は「処理」に読み替えてもよい。「回路」及び「サーキットリ」は、プロセッサ９０１だけでなく、ロジックＩＣ、ＧＡ（Ｇａｔｅ・Ａｒｒａｙ）、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ・Ｓｐｅｃｉｆｉｃ・Ｉｎｔｅｇｒａｔｅｄ・Ｃｉｒｃｕｉｔ）、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ・Ｇａｔｅ・Ａｒｒａｙ）といった他の種類の処理回路をも包含する概念である。
【００９１】
以上、本発明の実施の形態について説明したが、この実施の形態を部分的に実施しても構わない。例えば、この実施の形態の説明において「部」として説明するもののうち、いずれか１つのみを採用してもよいし、いくつかの任意の組み合わせを採用してもよい。なお、本発明は、この実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。
【符号の説明】
【００９２】
１００  シミュレーション装置、１１０  記憶媒体、１２０  バッファ、１３０  実行部、１４０  処理部、１４１  ブロック生成部、１４２  バッファ検索部、１４３  ブロック変換部、１５０  計算部、１５１  ペナルティ計算部、１５２  時間計算部、２０１  ゲストコード、２０２  ホストコード、２１１  ペナルティ情報、２１２  時間情報、２２１  コード長情報、２２２  ライン情報、２３１  ブロック情報、２３２  アドレス対応表、２４１  サイズ情報、２４２  アルゴリズム情報、２４３  構造情報、３０１  推定値、９０１  プロセッサ、９０２  補助記憶装置、９０３  メモリ、９０４  通信装置、９０５  入力インタフェース、９０６  ディスプレイインタフェース、９０７  入力装置、９０８  ディスプレイ、９１０  信号線、９１１  ケーブル、９１２  ケーブル、９２１  レシーバ、９２２  トランスミッタ。
【図１】
2016189725.tif 000003
【図２】
2016189725.tif 000004
【図３】
2016189725.tif 000005
【図４】
2016189725.tif 000006
【図５】
2016189725.tif 000007
【国際調査報告】
2016189725.tif 000008
2016189725.tif 000009