(57)【要約】【課題】プロセッサの高速化に伴い、チップ外部との転送速度の差が大きくなり、プロセッサのクロックサイクルでトレース情報を出力しようとすると、トレース端子で転送速度が間に合わず、正しくデータを取得できなくなる。【解決手段】キャッシュミス判定手段ｅ１は、複数のキャッシュエントリに分割されたキャッシュメモリ３に対するアクセス時にキャッシュミスの判定を行う。エントリ領域判定手段ｅ２は、キャッシュメモリ３における任意のキャッシュラインを選択するためのアドレスの一部分であるインデックスの一部を用いて、キャッシュアクセスがキャッシュメモリ３のどのエントリ領域へのアクセスかを判定する。キャッシュミス回数計数手段ｅ１０は、キャッシュミス判定手段ｅ１によるキャッシュミスの回数をエントリ領域判定手段ｅ２によるキャッシュエントリ領域毎に計数し、プログラム最適化に有効なデータを取得する。【選択図】図１
2007206806.tif 000002
【特許請求の範囲】
【請求項１】
複数のキャッシュエントリに分割されたキャッシュメモリに対するアクセス時にキャッシュミスの判定を行うキャッシュミス判定手段と、
前記キャッシュメモリにおける任意のキャッシュラインを選択するためのアドレスの一部分であるインデックスの一部を用いて、前記キャッシュアクセスがキャッシュメモリのどのエントリ領域へのアクセスかを判定するエントリ領域判定手段と、
前記キャッシュミス判定手段によるキャッシュミスの回数を前記エントリ領域判定手段によるキャッシュエントリ領域毎に計数するキャッシュミス回数計数手段とを備えたキャッシュ観測装置。
【請求項２】
複数のキャッシュエントリに分割されたキャッシュメモリに対するアクセス時にキャッシュミスの判定を行うキャッシュミス判定手段と、
前記キャッシュメモリにおける任意のキャッシュラインを選択するためのアドレスの一部分であるインデックスの一部を用いて、前記キャッシュアクセスがキャッシュメモリのどのエントリ領域へのアクセスかを判定するエントリ領域判定手段と、
前記キャッシュアクセスのアドレスを前記キャッシュメモリのタグアドレスに対して上位ビットで比較して、前記キャッシュアクセスが特定アドレス空間へのアクセスかを判定する特定アドレス空間判定手段と、
前記特定アドレス空間判定手段による特定アドレス空間において、前記キャッシュミス判定手段によるキャッシュミスの回数を前記エントリ領域判定手段によるキャッシュエントリ領域毎に計数するキャッシュミス回数計数手段とを備えたキャッシュ観測装置。
【請求項３】
複数のキャッシュエントリに分割されたキャッシュメモリに対するアクセス時にキャッシュミスの判定を行うキャッシュミス判定手段と、
前記キャッシュメモリにおける任意のキャッシュラインを選択するためのアドレスの一部分であるインデックスの一部を用いて、前記キャッシュアクセスがキャッシュメモリのどのエントリ領域へのアクセスかを判定するエントリ領域判定手段と、
前記キャッシュミス判定手段によるキャッシュミスの回数を前記エントリ領域判定手段によるキャッシュエントリ領域毎に計数するキャッシュミス回数計数手段と、
前記キャッシュエントリ領域毎の複数の前記キャッシュミス回数計数手段によるキャッシュミス回数に基づいてキャッシュミスが多く発生しているキャッシュエントリを判定するキャッシュミス多発エントリ判定手段と、
前記キャッシュミス多発エントリ判定手段の判定の結果に基づいて、キャッシュミスが多く発生しているキャッシュエントリに対して補完用キャッシュラインを動的に割り当てる補完用キャッシュライン割り当て手段とを備えたキャッシュ観測装置。
【請求項４】
前記キャッシュミス回数計数手段は、キャッシュエントリ全体を複数に分割したときの個々の分割領域に対応する複数のカウンタを持ち、
さらに、前記インデックスにおける最上位側の数ビットを用いて前記複数のカウンタのうち所望のカウンタを指定するカウンタ指定手段を有し、
前記キャッシュミス回数計数手段は、前記カウンタ指定手段による指定のカウンタにおいて前記キャッシュミス判定手段によるキャッシュミスの回数を個別に計数する請求項１から請求項３までのいずれかに記載のキャッシュ観測装置。
【請求項５】
前記キャッシュミス回数計数手段は、キャッシュエントリ全体を複数に分割したときの個々の分割領域に対応する複数のカウンタを持ち、
さらに、前記インデックスにおける最下位側の数ビットを用いて前記複数のカウンタのうち所望のカウンタを指定するカウンタ指定手段を有し、
前記キャッシュミス回数計数手段は、前記カウンタ指定手段による指定のカウンタにおいて前記キャッシュミス判定手段によるキャッシュミスの回数を個別に計数する請求項１から請求項３までのいずれかに記載のキャッシュ観測装置。
【請求項６】
プロセッサの解析装置に実行するプログラムを入力する工程と、
キャッシュエントリ領域毎にキャッシュミスを計数させるために、キャッシュメモリにおける任意のキャッシュラインを選択するためのアドレスの一部分であるインデックスの一部を指定する工程と、
前記プログラムを実行したときのキャッシュミス情報の分布を出力する工程とを含むプロセッサの解析方法。
【請求項７】
さらに、前記キャッシュミス情報の分布を取得するアドレス空間の指定を行う工程を含む請求項６に記載のプロセッサの解析方法。
【請求項８】
複数のキャッシュエントリに分割されて構成されるキャッシュメモリであって、
当該キャッシュメモリに対するアクセス時にキャッシュミスの判定を行うキャッシュミス判定手段と、
当該キャッシュメモリにおける任意のキャッシュラインを選択するためのアドレスの一部分であるインデックスの一部を用いて、前記キャッシュアクセスがキャッシュメモリのどのエントリ領域へのアクセスかを判定するエントリ領域判定手段と、
前記キャッシュミス判定手段によるキャッシュミスの回数を前記エントリ領域判定手段によるキャッシュエントリ領域毎に計数するキャッシュミス回数計数手段と、
前記キャッシュエントリ領域毎の複数の前記キャッシュミス回数計数手段によるキャッシュミス回数に基づいてキャッシュミスが多く発生しているキャッシュエントリを判定するキャッシュミス多発エントリ判定手段と、
前記キャッシュミス多発エントリ判定手段の判定の結果に基づいて、キャッシュミスが多く発生しているキャッシュエントリに対して補完用キャッシュラインを動的に割り当てる補完用キャッシュライン割り当て手段とを備えたキャッシュメモリ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサのキャッシュ観測装置、プロセッサの解析方法およびキャッシュメモリに関するものである。
【背景技術】
【０００２】
従来のプロセッサの性能解析では、ハードウェアトレースにより、データアクセス時のアドレス、データ等をそのまま出力して、そのデータをもとに性能向上のため改善策の検討を行っていた。また、ハードウェアトレースにより得られたトレースデータを解析して実行時におけるペナルティ分布を求めるペナルティ解析ツールと、解析結果に基づいて、改善策を提案する改善事項推奨ツールを備えたコンピュータの性能向上システムもあった（例えば、特許文献１参照。）。
【０００３】
図１０は、従来の技術における半導体集積回路および解析装置の構成を示すブロック図である。
【０００４】
半導体集積回路１０は、プロセッサ１、メモリ４およびトレース回路５等で構成されている。プロセッサ１は、命令実行部２とキャッシュメモリ３で構成されている。また、半導体集積回路１０に対する解析装置２０は、ＣＰＵ、メモリ（ＲＯＭおよびＲＡＭ）等からなるマイクロコンピュータで構成された処理装置１１と、文字キー、数字キー、機能指示キー等を備えていて各種キー入力、デバッグおよび性能解析のための指示等の入力を行うキーボード１２およびマウスカーソルの示す位置データを入力するマウス１３などの入力装置、トレース結果や解析結果および各種メッセージ等を表示するＣＲＴ、ＬＣＤ等の表示装置１４およびトレースユニット１５を備えている。処理装置１１は、このシステムの制御を司るとともに、半導体集積回路１０から出力されるデバッグのため演算、トレース情報の加工、トレース結果を記憶装置であるＨＤＤに記憶させる処理等を行う。プロセッサ１が実行した命令の実行情報やメモリアクセス情報、さらにキャッシュミス情報はトレース回路５を経由して解析装置２０に出力される。解析装置２０に入力されたトレース情報は、プロセッサ１のデバッグや性能解析等に用いられる。
【０００５】
図１１は、従来の技術におけるキャッシュメモリ３の構成を示すブロック図である。この例は、４ウェイセットアソシエイティブ方式である。キャッシュメモリ３は、タグメモリ２２とデータメモリ２３とのメモリの組で構成されていて、これらの組２４をキャッシュラインと呼ぶ。この例では、キャッシュライン２４は８ワードで構成されており、キャッシュライン２４の選択にはアドレス２１の［４：２］が使用されている。アドレス２１の［１：０］はバイトの選択に用いられる。また各アドレスに対して特定のキャッシュライン２４が選択される構造になっているが、このラインを選択するために使用されるアドレスの一部分のことをインデックスと呼び、キャッシュエントリ数によってインデックスのビット幅が決定される。この例では、キャッシュエントリは２8 ＝２５６であるので、インデックスはアドレス２１の［１２：５］となっている。
【０００６】
プロセッサ１からあるアドレスへのメモリアクセスが発生すると、インデックスによって特定のキャッシュラインが決まり、そのキャッシュラインに対応するタグメモリ２２とデータメモリ２３からデータが読み出される。そして、タグ部の内容がアドレスの上位ビットであるアドレス２１の［３１：１３］と比較器２６にて比較され、４Ｗａｙのうちのどれかでデータが一致すれば、そのキャッシュラインのデータが有効であることが分かる。これをキャッシュヒットと呼び、セレクタ２７によってデータメモリ２３から有効なデータ２８が選択されて出力され、プロセッサ１に渡される。逆に、４Ｗａｙのすべてでタグ部の内容が異なれば、そのキャッシュラインのデータは無効であることが分かる。これキャッシュミスと呼ぶ。
【０００７】
プロセッサ１の性能向上を図るためには、各メモリアクセスのアドレスおよびキャッシュミス情報が有用である。なぜなら、メモリアクセスのアドレスとキャッシュミス情報が分かれば、プログラムのどこでキャッシュミスが発生しているかを知ることが可能となるからである。その部分のプログラムを最適化することによって、プロセッサの性能向上を実現できる。プログラムの最適化法には、色々な方法があるが、一般的には、アルゴリズムの最適化や、メモリマップの最適化が知られている。
【特許文献１】特開平９−１９８２７５号公報（第３−５頁、第１−３図）
【発明の開示】
【発明が解決しようとする課題】
【０００８】
近年、プロセッサの高速化は益々進展しており、チップ外部との転送速度の差が大きくなってきている。そのため、プロセッサのクロックサイクルでトレース情報を出力しようとすると、トレース端子で転送速度が間に合わず、データを正しく取得できないという課題がある。そのため、従来の方法では、出力する情報をチップ内部のメモリ（トレースメモリ）やバッファに貯めておき、プログラム実行後に外部に出力する方法がある。しかし、キャッシュアクセスは非常に頻繁に発生するため、その情報のすべてをトレース情報として出力しようとした場合、必要となるトレースメモリ等の容量は非常に大きくなってしまう。
【０００９】
本発明は、このような事情に鑑みて創作したものであり、比較的小規模な回路追加で、プログラムの最適化に有効なデータを取得する機能をもつキャッシュ観測装置を提供することを目的としている。
【課題を解決するための手段】
【００１０】
（１）本発明によるキャッシュ観測装置は、図１に示すように、
複数のキャッシュエントリに分割されたキャッシュメモリに対するアクセス時にキャッシュミスの判定を行うキャッシュミス判定手段ｅ１と、
前記キャッシュメモリにおける任意のキャッシュラインを選択するためのアドレスの一部分であるインデックスの一部を用いて、前記キャッシュアクセスがキャッシュメモリのどのエントリ領域へのアクセスかを判定するエントリ領域判定手段ｅ２と、
前記キャッシュミス判定手段ｅ１によるキャッシュミスの回数を前記エントリ領域判定手段ｅ２によるキャッシュエントリ領域毎に計数するキャッシュミス回数計数手段ｅ１０とを備えたものである。
【００１１】
この構成によれば、トレースの速度が間に合わないぐらいにプロセッサが高速で動作する場合でも、分割されたキャッシュエントリのどの領域でどれだけのキャッシュミスが発生したかを測定することができ、しかもインデックスの分布を利用することで比較的小規模な回路追加で対応でき、性能向上のためのプログラムの最適化を有利に展開することが可能となる。
【００１２】
（２）また、本発明によるキャッシュ観測装置は、図２に示すように、
複数のキャッシュエントリに分割されたキャッシュメモリに対するアクセス時にキャッシュミスの判定を行うキャッシュミス判定手段ｅ１と、
前記キャッシュメモリにおける任意のキャッシュラインを選択するためのアドレスの一部分であるインデックスの一部を用いて、前記キャッシュアクセスがキャッシュメモリのどのエントリ領域へのアクセスかを判定するエントリ領域判定手段ｅ２と、
前記キャッシュアクセスのアドレスを前記キャッシュメモリのタグアドレスに対して上位ビットで比較して、前記キャッシュアクセスが特定アドレス空間へのアクセスかを判定する特定アドレス空間判定手段ｅ３と、
前記特定アドレス空間判定手段ｅ３による特定アドレス空間において、前記キャッシュミス判定手段ｅ１によるキャッシュミスの回数を前記エントリ領域判定手段ｅ２によるキャッシュエントリ領域毎に計数するキャッシュミス回数計数手段ｅ２０とを備えたものである。
【００１３】
この構成によれば、ある特定のアドレス空間の中で、分割されたキャッシュエントリのどの領域でどれだけキャッシュミスが発生したかを測定することができ、性能向上のためのプログラムの最適化をより高精度、より効率的に展開することが可能となる。
【００１４】
（３）また、本発明によるキャッシュ観測装置は、図３に示すように、
複数のキャッシュエントリに分割されたキャッシュメモリに対するアクセス時にキャッシュミスの判定を行うキャッシュミス判定手段ｅ１と、
前記キャッシュメモリにおける任意のキャッシュラインを選択するためのアドレスの一部分であるインデックスの一部を用いて、前記キャッシュアクセスがキャッシュメモリのどのエントリ領域へのアクセスかを判定するエントリ領域判定手段ｅ２と、
前記キャッシュミス判定手段ｅ１によるキャッシュミスの回数を前記エントリ領域判定手段ｅ２によるキャッシュエントリ領域毎に計数するキャッシュミス回数計数手段ｅ１０と、
前記キャッシュエントリ領域毎の複数の前記キャッシュミス回数計数手段ｅ１０によるキャッシュミス回数に基づいてキャッシュミスが多く発生しているキャッシュエントリを判定するキャッシュミス多発エントリ判定手段ｅ４と、
前記キャッシュミス多発エントリ判定手段ｅ４の判定の結果に基づいて、キャッシュミスが多く発生しているキャッシュエントリに対して補完用キャッシュラインを動的に割り当てる補完用キャッシュライン割り当て手段ｅ５とを備えたものである。
【００１５】
この構成によれば、キャッシュミスが多く発生しているキャッシュエントリに補完用キャッシュラインを動的に割り当てることが可能となり、そのキャッシュラインのミス率を低下させることが可能となって、プロセッサの性能向上が可能となる。
【００１６】
（４）上記いずれかのキャッシュ観測装置において、
前記キャッシュミス回数計数手段ｅ１０，ｅ２０は、キャッシュエントリ全体を複数に分割したときの個々の分割領域に対応する複数のカウンタを持ち、
さらに、前記インデックスにおける最上位側の数ビットを用いて前記複数のカウンタのうち所望のカウンタを指定するカウンタ指定手段ｅ６を有し、
前記キャッシュミス回数計数手段ｅ１０，ｅ２０は、前記カウンタ指定手段ｅ６による指定のカウンタにおいて前記キャッシュミス判定手段ｅ１によるキャッシュミスの回数を個別に計数するように構成されているという態様がある。
【００１７】
これによれば、インデックスの最上位側の数ビットを用いることで、キャッシュエントリ全体を複数に分割した個々の分割領域にどれだけのキャッシュミスが発生したかを測定でき、キャッシュエントリ全体におけるキャッシュミス情報の分布が分かるので、プログラムの最適化への展開をより効率的に進めることが可能となる。
【００１８】
（５）また、上記いずれかのキャッシュ観測装置において、
前記キャッシュミス回数計数手段ｅ１０，ｅ２０は、キャッシュエントリ全体を複数に分割したときの個々の分割領域に対応する複数のカウンタを持ち、
さらに、前記インデックスにおける最下位側の数ビットを用いて前記複数のカウンタのうち所望のカウンタを指定するカウンタ指定手段ｅ６を有し、
前記キャッシュミス回数計数手段ｅ１０，ｅ２０は、前記カウンタ指定手段ｅ６による指定のカウンタにおいて前記キャッシュミス判定手段ｅ１によるキャッシュミスの回数を個別に計数するように構成されているという態様がある。
【００１９】
これによれば、インデックスの最下位側の数ビットを用いることで、キャッシュエントリ毎にどれだけキャッシュミスが発生したかを詳しく判定でき、キャッシュエントリ毎の詳細な情報が得られるので、プログラムの最適化への展開をより高精度に進めることが可能となる。
【００２０】
（６）本発明によるプロセッサの解析方法は、
プロセッサの解析装置に実行するプログラムを入力する工程と、
キャッシュエントリ領域毎にキャッシュミスを計数させるために、キャッシュメモリにおける任意のキャッシュラインを選択するためのアドレスの一部分であるインデックスの一部を指定する工程と、
前記プログラムを実行したときのキャッシュミス情報の分布を出力する工程とを含むものである。
【００２１】
（７）上記のプロセッサの解析方法において、さらに、前記キャッシュミス情報の分布を取得するアドレス空間の指定を行う工程を含むという態様がある。
【００２２】
（８）また、次のような構成のキャッシュメモリも有用である。
【００２３】
すなわち、本発明によるキャッシュメモリは、
複数のキャッシュエントリに分割されて構成されるキャッシュメモリであって、
当該キャッシュメモリに対するアクセス時にキャッシュミスの判定を行うキャッシュミス判定手段と、
当該キャッシュメモリにおける任意のキャッシュラインを選択するためのアドレスの一部分であるインデックスの一部を用いて、前記キャッシュアクセスがキャッシュメモリのどのエントリ領域へのアクセスかを判定するエントリ領域判定手段と、
前記キャッシュミス判定手段によるキャッシュミスの回数を前記エントリ領域判定手段によるキャッシュエントリ領域毎に計数するキャッシュミス回数計数手段と、
前記キャッシュエントリ領域毎の複数の前記キャッシュミス回数計数手段によるキャッシュミス回数に基づいてキャッシュミスが多く発生しているキャッシュエントリを判定するキャッシュミス多発エントリ判定手段と、
前記キャッシュミス多発エントリ判定手段の判定の結果に基づいて、キャッシュミスが多く発生しているキャッシュエントリに対して補完用キャッシュラインを動的に割り当てる補完用キャッシュライン割り当て手段とを備えたものである。
【００２４】
この構成のキャッシュメモリによれば、キャッシュラインのミス率を自動的に低下させ、キャッシュエントリの自己割り当てを効果的に実現することができる。
【発明の効果】
【００２５】
本発明によれば、トレースの速度が間に合わないぐらいにプロセッサが高速で動作する場合でも、キャッシュメモリへのアクセスのインデックスの分布を取得することで、比較的小規模な回路追加でありながら、プログラムの最適化に有効なデータを効率良く取得することが可能になる。
【００２６】
また、取得したキャッシュメモリへのアクセスのインデックス分布をもとに、キャッシュミスが多く発生しているエントリに、補完用キャッシュラインを動的に割り当てることにより、キャッシュミスを低減し、プロセッサの高いパフォーマンスを引き出すことが可能になる。
【発明を実施するための最良の形態】
【００２７】
以下、本発明にかかわるプロセッサのキャッシュ観測装置の実施の形態を図面に基づいて詳細に説明する。
【００２８】
（実施の形態１）
図４は、本発明の実施の形態１における半導体集積回路および解析装置の構成を示すブロック図である。ここでの半導体集積回路１０は、従来技術の場合の図１０に示したものにおいて、さらにキャッシュ観測装置６が追加されている。トレース回路５は省略してもよい。解析装置２０の構成を含めて、その他の構成については従来の技術の場合の図１０と同様であるので、同一部分に同一符号を付すにとどめ、説明を省略する。
【００２９】
図５は、本発明の実施の形態１におけるキャッシュ観測装置６の構成を示すブロック図である。この例には４ウェイセットアソシエイティブ方式を用いている。
【００３０】
従来の技術の場合の図１１の構成において、さらに、否定的論理和（ＮＯＲ）ゲート３１、比較器３２、デコード回路３３、論理積ゲート３４、Ｎｏ．０〜Ｎｏ．７のカウンタ３５が追加されている。否定的論理和ゲート３１は図１におけるキャッシュミス判定手段ｅ１に対応し、比較器３２はエントリ領域判定手段ｅ２に対応し、デコード回路３３はカウンタ指定手段ｅ６に対応し、Ｎｏ．０〜Ｎｏ．７の論理積ゲート３４およびカウンタ３５はキャッシュミス回数計数手段ｅ１０に対応している。
【００３１】
従来の技術の場合と同様に、キャッシュメモリ３は、タグメモリ２２とデータメモリ２３とのメモリの組で構成されている。タグメモリ２２とデータメモリ２３はＲＡＭで構成されている。キャッシュライン２４は８ワードで構成されており、キャッシュライン２４の選択には、アドレス２１の［４：２］が使用されている。アドレス２１の［１：０］はバイトの選択に用いられる。また各アドレスに対して特定のキャッシュライン２４を選択するために使用されるアドレスの一部分であるインデックスについては、キャッシュエントリ数によって、インデックスのビット幅は決定される。この例では、キャッシュエントリは、２8 ＝２５６であるので、インデックスは、アドレス２１の［１２：５］となっている。
【００３２】
プロセッサ１からキャッシュメモリ３に対してあるアドレスへのメモリアクセスが発生すると、インデックスによって特定のキャッシュラインが決まり、そのキャッシュラインに対応するタグメモリ２２とデータメモリ２３からデータが読み出される。そして、タグ部の内容がアドレスの上位ビットであるアドレス２１の［３１：１３］と比較器２６にて比較され、４Ｗａｙのうちのどれかでデータが一致すれば、そのキャッシュラインのデータが有効であることが分かる（キャッシュヒット）。この場合、セレクタ２７によってデータメモリ２３から有効なデータ２８が選択されて出力され、プロセッサ１に渡される。逆に、４Ｗａｙのすべてでタグ部の内容が異なれば、そのキャッシュラインのデータは無効であることが分かる（キャッシュミス）。
【００３３】
比較器２６からセレクタ２７に出力されるヒット信号Ｓ１のラインに否定的論理和ゲート３１が接続され、この否定的論理和ゲート３１から出力されるキャッシュミス信号Ｓ２がＮｏ．０〜Ｎｏ．７のカウンタ３５の前段の論理積ゲート３４に入力されている。タグメモリ２２からのタグ出力２５とアドレス２１との比較器２６、否定的論理和ゲート３１等が図１におけるキャッシュミス判定手段ｅ１に対応している。
【００３４】
キャッシュメモリ３におけるキャッシュエントリが上下に２等分され、下半分がキャッシュエントリの０〜１２７に対応し、上半分がキャッシュエントリの１２８〜２５５に対応している。
【００３５】
比較器３２は、インデックスの［１２］の値をエントリ領域選択信号Ｓ３と比較することにより、プロセッサ１からのキャッシュメモリ３に対するアクセスがキャッシュエントリの下半分（０〜１２７）であるのか上半分（１２８〜２５５）であるのかのエントリ領域の判定を行う。比較器３２の出力は、Ｎｏ．０〜Ｎｏ．７のカウンタ３５の前段の論理積ゲート３４に入力されている。この部分が図１におけるエントリ領域判定手段ｅ２に対応している。
【００３６】
キャッシュエントリの下半分へのアクセス時にはインデックスの［１２］が“０”である。そこで、あらかじめエントリ領域選択信号Ｓ３に“０”が設定されていれば、比較器３２の出力がアクティブとなり、論理積ゲート３４を介していずれか１つのカウンタ３５を機能させ、キャッシュエントリの下半分へのアクセスのみをカウントすることになる。逆に、キャッシュエントリの上半分へのアクセス時にはインデックスの［１２］が“１”である。そこで、あらかじめエントリ領域選択信号Ｓ３に“１”が設定されていれば、比較器３２の出力がアクティブとなり、論理積ゲート３４を介していずれか１つのカウンタ３５を機能させ、キャッシュエントリの上半分へのアクセスのみをカウントすることになる。
【００３７】
このようにエントリ領域選択信号Ｓ３を比較器３２に入力し、比較器３２の出力を論理積ゲート３４に入力することにより、キャッシュミス情報を取得したい領域を選択することが可能になっている。
【００３８】
デコード回路３３にはインデックス［１２：５］の一部の［１１：９］のバスラインが接続されており、プロセッサ１からのキャッシュアクセスに応じて、Ｎｏ．０〜Ｎｏ．７のカウンタ３５のうちのどのカウンタ３５を指定するかを決めることが可能な構成になっている。このデコード回路３３の部分が図１におけるカウンタ指定手段ｅ６に対応している。
【００３９】
そして、Ｎｏ．０〜Ｎｏ．７のカウンタ３５およびそれぞれに対応する論理積ゲート３４は、キャッシュメモリ３のキャッシュエントリ全体を複数に等しく分割したときの個々の分割領域に対応している。これら論理積ゲート３４およびカウンタ３５が図１におけるキャッシュミス回数計数手段ｅ１０に対応している。Ｎｏ．０〜Ｎｏ．７のカウンタ３５は、キャッシュエントリの下半分のアクセスにも上半分のアクセスにも兼用される。
【００４０】
次に、上記のように構成された本実施の形態のキャッシュ観測装置６の動作を説明する。ここでは、エントリ領域選択信号Ｓ３に“０”が設定されている場合について説明する。
【００４１】
（１）まず、プロセッサ１からキャッシュメモリ３に対してアドレス“０ｘ４０００＿００００”へのキャッシュアクセスが発生すると、インデックス［１２：５］は“０ｘ００”となり、最下部のキャッシュエントリのタグメモリ２２およびデータメモリ２３への読み出しが発生する。キャッシュヒットの場合は、キャッシュミス信号Ｓ２はアサートされないため、論理積ゲート３４は導通せず、カウンタ３５はインクリメントされない。
【００４２】
逆にキャッシュミスした場合には、キャッシュミス信号Ｓ２がアサートされる。このとき、インデックスの一部の［１１：９］がデコード回路３３に入力されており、このキャッシュアクセスがＮｏ．０〜Ｎｏ．７のカウンタ３５のうちどのカウンタ３５に該当するかを判定して、対応する１つのカウンタ３５が選択される。この場合では、インデックスの一部の［１１：９］は“０ｘ０”であるので、Ｎｏ．０のカウンタ３５が選択される。さらにインデックス［１２］は“０”であるので、このキャッシュアクセスは有効となり、比較器２６で比較が行われ、キャッシュエントリ下半分へのアクセスであることが分かる。
【００４３】
以上のようにして、アドレス“０ｘ４０００＿００００”へのアクセスが「キャッシュミスである。」かつ「キャッシュエントリの下半分である。」かつ「対応するカウンタ３５は０番目のカウンタ３５である。」ことが分かり、Ｎｏ．０のカウンタ３５のキャッシュミスカウント値がインクリメントされる。
【００４４】
図６（ａ）は、上記の動作の理解を助けるための計算ダイヤグラムである。アドレス“０ｘ４０００＿００００”はａに該当する。これの値はｂのように１０進数で“０”である。１０進数“０”を２進数１６ビットに展開すると、ｃのようになる。ｃは、１６の全ビットが“０”となっている。このうち、ｄのようにインデックス［１２：５］を見ると、８ビットで“００００００００”となっている。１６進数では、“０ｘ００”である。これは、キャッシュエントリの０番目（最下位）を意味する。また、インデックスの一部［１１：９］を見ると、３ビットで“０００”となっている。１６進数では、“０ｘ０”である。これは、カウンタ３５の０番目を意味する。また、インデックス［１２］を見ると、１ビットで“０”となっている。これは、キャッシュエントリ下半分に該当する。
【００４５】
（２）また、アドレス“０ｘ５０００＿００２０”へのキャッシュアクセスが発生すると、この場合はインデックス［１２：５］が“０ｘ０１”となり、下から２番目のキャッシュエントリのタグメモリ２２およびデータメモリ２３への読み出しが発生する。ここで、キャッシュヒットの場合は、キャッシュミス信号Ｓ２はアサートされないため、論理積ゲート３４は導通せず、カウンタ３５はインクリメントされない。
【００４６】
逆にキャッシュミスの場合は、キャッシュミス信号Ｓ２がアサートされる。このとき、インデックスの［１２］は“０”であるので、キャッシュ下半分へのアクセスであることが分かる。また、インデックスの一部の［１１：９］は“０ｘ０”であるので、この場合も、Ｎｏ．０のカウンタ３５が選択され、カウント値がインクリメントされる。
【００４７】
図６（ｂ）は、上記の動作の理解を助けるための計算ダイヤグラムである。アドレス“０ｘ５０００＿００２０”はａに該当する。これの値はｂのように１０進数で“３２”である。１０進数の“３２”を２進数１６ビットに展開すると、ｃのようになる。ｃは、２5 の位のみが“１”で、ほかの１５ビットはすべて“０”となっている。このうち、ｄのようにインデックス［１２：５］を見ると、８ビットで“０００００００１”となっている。１６進数では、“０ｘ０１”である。これは、キャッシュエントリの１番目を意味する。また、インデックスの一部［１１：９］を見ると、３ビットで“０００”となっている。１６進数では、“０ｘ０”である。これは、カウンタ３５の０番目を意味する。また、インデックス［１２］を見ると、１ビットで“０”となっている。これは、キャッシュエントリ下半分に該当する。
【００４８】
（３）また、アドレス“０ｘ５０００＿ＦＦＥ０”へのキャッシュアクセスが発生すると、この場合はインデックス［１２：５］が“０ｘＦＦ”となり、最上位のエントリのタグメモリ２２およびデータメモリ２３への読み出しが発生する。ここで、キャッシュヒットの場合は、キャッシュミス信号Ｓ２はアサートされないため、論理積ゲート３４は導通せず、カウンタ３５はインクリメントされない。
【００４９】
逆にキャッシュミスの場合は、キャッシュミス信号Ｓ２がアサートされる。このとき、インデックスの［１２］が“１”であるので、このキャッシュアクセスは上半分の領域へのアクセスであり、カウント対象でないことが分かる。
【００５０】
図７（ａ）は、上記の動作の理解を助けるための計算ダイヤグラムである。アドレス“０ｘ５０００＿ＦＦＥ０”はａに該当する。これの値はｂのように１０進数で“６５５０４”である。１０進数の“６５５０４”を２進数１６ビットに展開すると、ｃのようになる。ｃは、２0 〜２4 の位が“０”であり、２5 〜２15位がすべて“１”となっている。このうち、ｄのようにインデックス［１２：５］を見ると、８ビットで“１１１１１１１１”となっている。１６進数では、“０ｘＦＦ”である。これは、キャッシュエントリの２５５番目を意味する（１６×１５＋１×１５＝２５５）。また、インデックスの一部［１１：９］を見ると、３ビットで“１１１”となっている。１６進数では、“０ｘ７”である。これは、カウンタ３５の７番目を意味する。また、インデックス［１２］を見ると、１ビットで“１”となっている。これは、キャッシュエントリ上半分に該当する。ここでの動作例では、エントリ領域選択信号Ｓ３を“０”に設定してあるので、カウント対象ではない。
【００５１】
（４）また、アドレス“０ｘ５０００＿０ＦＥ０”へのキャッシュアクセスが発生すると、この場合はインデックス［１２：５］が“０ｘ７Ｆ”となり、１２７番目のエントリのタグメモリ２２およびデータメモリ２３への読み出しが発生する。ここで、キャッシュヒットの場合は、キャッシュミス信号Ｓ２はアサートされないため、論理積ゲート３４は導通せず、カウンタ３５はインクリメントされない。
【００５２】
逆にキャッシュミスの場合は、キャッシュミス信号Ｓ２がアサートされる。このとき、インデックスの［１２］が“０”であるので、キャッシュ下半分へのアクセスであることが分かる。また、インデックスの一部の［１１：９］は“０ｘ７”であるので、この場合はＮｏ．７のカウンタ３５が選択され、Ｎｏ．７のカウンタ３５のキャッシュミスカウント値がインクリメントされる。
【００５３】
図７（ｂ）は、上記の動作の理解を助けるための計算ダイヤグラムである。アドレス“０ｘ５０００＿０ＦＥ０”はａに該当する。これの値はｂのように１０進数で“４０６４”である。１０進数の“４０６４”を２進数１６ビットに展開すると、ｃのようになる。ｃは、２0 〜２4 の位が“０”であり、２5 〜２11 位がすべて“１”であり、２12 〜２15の位が“０”となっている。このうち、ｄのようにインデックス［１２：５］を見ると、８ビットで“０１１１１１１１”となっている。１６進数では、“０ｘ７Ｆ”である。これは、キャッシュエントリの１２７番目を意味する（１６×７＋１×１５＝１２７）。また、インデックスの一部［１１：９］を見ると、３ビットで“１１１”となっている。１６進数では、“０ｘ７”である。これは、カウンタ３５の７番目を意味する。また、インデックス［１２］を見ると、１ビットで“０”となっている。これは、キャッシュエントリ下半分に該当する。
【００５４】
なお、エントリ領域選択信号Ｓ３に“１”を設定すれば、２５６エントリの上半分について、同様な計測が可能になる。
【００５５】
以上のように、エントリ領域選択信号Ｓ３に“０”を設定することで、２５６エントリの下半分である１２８エントリを選択し、その１２８エントリをインデックスの一部である［１１：９］で８分割した１６エントリが、Ｎｏ．０〜Ｎｏ．７のカウンタ３５に割り当てられることによって、８領域ごとのキャッシュミス回数を測定することが可能になる。
【００５６】
この結果をもとに、キャッシュミス回数が多いエントリへのアクセスが少なくなるようにプログラムのアドレスマップを変更することによって、プログラムのキャッシュヒット率を向上させることが可能となる。
【００５７】
（実施の形態２）
図８は、本発明の実施の形態２におけるキャッシュ観測装置６の構成を示すブロック図である。図８において、実施の形態１の図５におけるのと同じ符号は同一構成要素を指している。本実施の形態では、新しい構成要素として比較器３６が設けられている。この比較器３６は、アドレス２１の［３１：１３］の値をアドレス領域指定信号Ｓ４と比較することにより、キャッシュアクセス情報を取得したい特定のアドレス空間を指定することが可能になる。例えば、アドレス領域指定信号Ｓ４に、“０ｘ５０００＿ＸＸＸＸ”が指定された場合には、“０ｘ５０００＿００００”〜“０ｘ５０００＿ＦＦＦＦ”の領域のアクセスのみが測定対象になる。この比較器３６の部分が図２における特定アドレス空間判定手段ｅ３に対応している。比較器３６の出力は論理積ゲート３４に入力されている。ここで、論理積ゲート３４は４入力ＡＮＤとなっている。論理積ゲート３４およびＮｏ．０〜Ｎｏ．７のカウンタ３５はキャッシュミス回数計数手段ｅ２０に対応している。その他の構成については実施の形態１の場合の図５と同様であるので、同一部分に同一符号を付すにとどめ、説明を省略する。
【００５８】
次に、上記のように構成された本実施の形態のキャッシュ観測装置６の動作を説明する。ここでは、アドレス領域指定信号Ｓ４に、“０ｘ５０００＿ＸＸＸＸ”が指定され、エントリ領域選択信号Ｓ３に“０”が設定されている場合について説明する。
【００５９】
（１）まず、プロセッサ１からアドレス“０ｘ４０００＿００００”へのキャッシュアクセスが発生すると、インデックス［１２：５］は“０ｘ００”となり、最下部のキャッシュエントリ（エントリ０）のタグメモリ２２およびデータメモリ２３への読み出しが発生する。キャッシュヒットの場合は、キャッシュミス信号Ｓ２はアサートされないため、論理積ゲート３４は導通せず、カウンタ３５はインクリメントされない。
【００６０】
逆にキャッシュミスした場合には、キャッシュミス信号Ｓ２がアサートされる。このとき、インデックスの一部の［１１：９］が実施の形態１と同様にデコード回路３３に入力されており、インデックスの一部の［１１：９］が“０ｘ０”であることから、Ｎｏ．０のカウンタ３５が選択される。さらにインデックス［１２］は“０”であるので、このキャッシュアクセスは有効となり、比較器２６で比較が行われ、キャッシュエントリ下半分へのアクセスであることが分かる。さらに、アドレス領域指定信号Ｓ４には、“０ｘ５０００＿ＸＸＸＸ”が指定されているので、アドレス“０ｘ４０００＿００００”へのアクセスは、測定対象外であることが分かり、論理積ゲート３４は導通せず、カウンタ３５のキャッシュミスカウント値はインクリメントされない。
【００６１】
（２）また、アドレス“０ｘ５０００＿００２０”へのキャッシュアクセスが発生すると、この場合はインデックス［１２：５］が“０ｘ０１”となり、下から２番目のキャッシュエントリのタグメモリ２２およびデータメモリ２３への読み出しが発生する。ここで、キャッシュヒットの場合は、キャッシュミス信号Ｓ２はアサートされないため、論理積ゲート３４は導通せず、カウンタ３５はインクリメントされない。
【００６２】
逆にキャッシュミスの場合は、キャッシュミス信号Ｓ２がアサートされる。このとき、インデックスの［１２］は“０”であるので、キャッシュ下半分へのアクセスであることが分かる。また、インデックスの一部の［１１：９］は“０ｘ０”であるので、この場合は、Ｎｏ．０のカウンタ３５が選択される。そして、アドレス領域指定信号Ｓ４には“０ｘ５０００＿ＸＸＸＸ”が指定されているので、このアドレス“０ｘ５０００＿００２０”へのキャッシュアクセスは、測定対象であることが分かり、Ｎｏ．０のカウンタ３５のキャッシュミスカウント値がインクリメントされる。
【００６３】
（３）また、アドレス“０ｘ５０００＿ＦＦＥ０”へのキャッシュアクセスが発生すると、この場合はインデックス［１２：５］が“０ｘＦＦ”となり、最上位のエントリのタグメモリ２２およびデータメモリ２３への読み出しが発生する。ここで、キャッシュヒットの場合は、キャッシュミス信号Ｓ２はアサートされないため、論理積ゲート３４は導通せず、カウンタ３５はインクリメントされない。
【００６４】
逆にキャッシュミスの場合は、キャッシュミス信号Ｓ２がアサートされる。このとき、インデックスの［１２］が“１”であるので、このキャッシュアクセスは上半分の領域へのアクセスであり、カウント対象でないことが分かる。
【００６５】
（４）また、アドレス“０ｘ５０００＿０ＦＥ０”へのキャッシュアクセスが発生すると、この場合はインデックス［１２：５］が“０ｘ７Ｆ”となり、１２７番目のエントリのタグメモリ２２およびデータメモリ２３への読み出しが発生する。ここで、キャッシュヒットの場合は、キャッシュミス信号Ｓ２はアサートされないため、論理積ゲート３４は導通せず、カウンタ３５はインクリメントされない。
【００６６】
逆にキャッシュミスの場合は、キャッシュミス信号Ｓ２がアサートされる。このとき、インデックスの［１２］が“０”であるので、キャッシュ下半分へのアクセスであることが分かる。また、インデックスの一部の［１１：９］は“０ｘ７”であるので、この場合はＮｏ．７のカウンタ３５が選択される。そして、アドレス領域指定信号Ｓ４には“０ｘ５０００＿ＸＸＸＸ”が指定されているので、このアドレス“０ｘ５０００＿０ＦＥ０”へのキャッシュアクセスは、測定対象であることが分かり、Ｎｏ．７のカウンタ３５のキャッシュミスカウント値がインクリメントされる。
【００６７】
以上のように、本実施の形態によれば、アドレス領域指定信号Ｓ４に“０ｘ５０００＿ＸＸＸＸ”を指定し、エントリ領域選択信号Ｓ３に“０”を設定することで、２５６エントリの下半分である１２８エントリを選択し、その１２８エントリをインデックスの一部である［１１：９］で８分割した１６エントリが、Ｎｏ．０〜Ｎｏ．７のカウンタ３５に割り当てられることによって、アドレス領域“０ｘ５０００＿００００”〜“０ｘ５０００＿ＦＦＦＦ”のキャッシュアクセスの中で、８領域ごとのキャッシュミス回数を測定することが可能になる。
【００６８】
これにより、特定のアドレス空間（この例では、アドレス領域“０ｘ５０００＿００００”〜“０ｘ５０００＿ＦＦＦＦ”）に割り当てられているプログラムにおけるキャッシュミス回数の分布を調べることが可能となり、より高精度に、より効率的にプログラムの改善を実施することが可能になる。
【００６９】
なお、エントリ領域選択信号Ｓ３に“１”を設定すれば、２５６エントリの上半分について、同様な計測が可能になる。
【００７０】
（実施の形態３）
図９は、本発明の実施の形態３におけるキャッシュ観測装置６の構成を示すブロック図である。図９において、実施の形態１の図５におけるのと同じ符号は同一構成要素を指している。本実施の形態では、新しい構成要素としてキャッシュミス多発エントリ判定回路３７と補完用キャッシュライン割り当て回路３８が設けられている。キャッシュミス多発エントリ判定回路３７にはＮｏ．０〜Ｎｏ．７のカウンタ３５の出力がつながっており、各カウンタ３５のキャッシュミスカウント値により、どの領域でミスが多く発生しているかを判定することが可能になっている。補完用キャッシュライン割り当て回路３８は、キャッシュミス多発エントリ判定回路３７の判定結果によって、ミスの多い領域に補完用キャッシュエントリ３９を動的に割り当てるように構成されている。キャッシュミス多発エントリ判定回路３７が図３におけるキャッシュミス多発エントリ判定手段ｅ４に対応し、補完用キャッシュライン割り当て回路３８が補完用キャッシュライン割り当て手段ｅ５に対応している。その他の構成については実施の形態１の場合の図５と同様であるので、同一部分に同一符号を付すにとどめ、説明を省略する。
【００７１】
次に、上記のように構成された本実施の形態のキャッシュ観測装置６の動作を説明する。ここでは、デコード回路３３にインデックスの［１２：１０］が接続されている場合について説明する。
【００７２】
まず、プロセッサ１から様々なアドレスに対してキャッシュアクセスが発生し、キャッシュミスが発生すると、実施の形態１で説明したように、各カウンタ３５のキャッシュミスカウント値がインクリメントされる。その値は、キャッシュミス多発エントリ判定回路３７に入力されており、どの領域でミスが多く発生しているかが判定される。いま、Ｎｏ．３のカウンタ３５のキャッシュミスカウント値が一番多かったとすると、Ｎｏ．３のカウンタ３５に対応する領域でキャッシュミスが最も多く発生していることが分かる。すると、補完用キャッシュライン割り当て回路３８は、Ｎｏ．３のカウンタ３５に対応する領域に補完用キャッシュエントリ３９を割り当てる。以降、Ｎｏ．３のカウンタ３５に対応する領域に補完用キャッシュエントリ３９が割り当てられているため、５Ｗａｙの構成となり、同一のインデックスを持つデータを保存できる場所が、４箇所から５箇所に増え、キャッシュヒット率が向上する。
【００７３】
このように、キャッシュミス多発エントリ判定回路３７の判定結果をもとに補完用キャッシュライン割り当て回路３８が補完用キャッシュエントリ３９を任意の領域に動的に割り当てることによって、そのキャッシュラインのミス率を低下させることが可能となり、プロセッサの性能を向上させることが可能になる。
【００７４】
また、実施の形態３の構成をキャッシュメモリに内蔵させることによって、キャッシュラインのミス率を自動的に低下させるように、キャッシュエントリの自己割り当てを行うキャッシュメモリを実現することが可能である。
【００７５】
なお、上記のいずれの実施の形態においても、デコード回路３３に入力されるインデックスのビット幅は、キャッシュエントリを何分割して、キャッシュミス情報を取得するかによって決定される。この例では、８分割するために、３ビット（２3 ＝８）を使用しているが、インデックスを２分割するならば、１ビットだけでよい。同様に４分割する場合は、２ビットとなる。つまり、２n の領域に分割する場合には、デコード回路３３に入力されるインデックスのビット幅は、ｎビットとなる。また、この例ではエントリ領域選択信号Ｓ３に１ビットのみ使用しているが、複数ビットを用いることも可能である。
【産業上の利用可能性】
【００７６】
本発明のキャッシュ観測装置は、比較的小規模な回路追加でキャッシュに関する情報を効率良く得る機能を有し、プログラムおよびプロセッサの性能向上を実現する技術として有用である。
【図面の簡単な説明】
【００７７】
【図１】本発明によるキャッシュ観測装置の構成を示すブロック図（その１）
【図２】本発明によるキャッシュ観測装置の構成を示すブロック図（その２）
【図３】本発明によるキャッシュ観測装置の構成を示すブロック図（その３）
【図４】本発明の実施の形態１における半導体集積回路および解析装置の構成を示すブロック図
【図５】本発明の実施の形態１におけるキャッシュ観測装置の構成を示すブロック図
【図６】本発明の実施の形態１におけるキャッシュ観測装置の動作の理解を助けるための計算ダイヤグラム（その１）
【図７】本発明の実施の形態１におけるキャッシュ観測装置の動作の理解を助けるための計算ダイヤグラム（その２）
【図８】本発明の実施の形態２におけるキャッシュ観測装置の構成を示すブロック図
【図９】本発明の実施の形態３におけるキャッシュ観測装置の構成を示すブロック図
【図１０】従来の技術における半導体集積回路および解析装置の構成を示すブロック図
【図１１】従来の技術におけるキャッシュメモリの構成を示すブロック図
【符号の説明】
【００７８】
ｅ１  キャッシュミス判定手段
ｅ２  エントリ領域判定手段
ｅ３  特定アドレス空間判定手段
ｅ４  キャッシュミス多発エントリ判定手段
ｅ５  補完用キャッシュライン割り当て手段
ｅ６  カウンタ指定手段
ｅ１０，ｅ２０  キャッシュミス回数計数手段
１  プロセッサ
２  命令実行部
３  キャッシュメモリ
４  メモリ
５  トレース回路
６  キャッシュ観測装置
１０  半導体集積回路
１１  処理装置
１２  キーボード
１３  マウス
１４  表示装置
１５  トレースユニット
２０  解析装置
２１  アドレス
２２  タグメモリ
２３  データメモリ
２４  キャッシュライン
２５  タグ出力
２６  比較器
２７  セレクタ
２８  データ出力
３１  否定的論理和ゲート
３２  比較器
３３  デコード回路
３４  論理積ゲート
３５  カウンタ
３６  比較器
３７  キャッシュミス多発エントリ判定回路
３８  補完用キャッシュライン割り当て回路
３９  補完用キャッシュエントリ
Ｓ１  ヒット信号
Ｓ２  キャッシュミス信号
Ｓ３  エントリ領域選択信号
Ｓ４  アドレス領域指定信号
【図１】
2007206806.tif 000003
【図２】
2007206806.tif 000004
【図３】
2007206806.tif 000005
【図４】
2007206806.tif 000006
【図５】
2007206806.tif 000007
【図６】
2007206806.tif 000008
【図７】
2007206806.tif 000009
【図８】
2007206806.tif 000010
【図９】
2007206806.tif 000011
【図１０】
2007206806.tif 000012
【図１１】
2007206806.tif 000013