(57)【要約】【課題】イベントの発生回数とＰＣ値との対応の精度を簡易な構成により向上させる。【解決手段】プログラムが格納されている記憶部上のアドレスを示すアドレス情報とプログラムを実行することにより発生するイベントの発生を示すイベント発生情報とをそれぞれ時系列に入力する入力手段１５と、入力されたアドレス情報の属するアドレス領域を決定するアドレスマスク手段３１と、アドレス領域毎のプログラムの実行頻度をカウントする実行頻度カウント手段と、実行頻度のカウント結果を保持する実行頻度保持テーブルと、実行頻度が上位所定順位までのアドレス領域に対応するイベント発生情報をカウントするイベント発生情報カウント手段３５と、イベント発生情報のカウント結果を保持する保持手段３６と、所定の期間毎にプログラムの実行頻度が最も高かったアドレス領域に対応するイベント発生情報のカウント結果を記憶する記憶手段４０とを備える。【選択図】図３
2007293424.tif 000002
【特許請求の範囲】
【請求項１】
プログラムが格納されている記憶部上のアドレスを示すアドレス情報と前記プログラムを実行することにより発生するイベントの発生を示すイベント発生情報とをそれぞれ時系列に入力する入力手段と、
前記入力されたアドレス情報の属するアドレス領域を決定するアドレスマスク手段と、
前記アドレス領域毎の前記プログラムの実行頻度をカウントする実行頻度カウント手段と、
前記実行頻度のカウント結果を保持する実行頻度保持テーブルと、
前記実行頻度が上位所定順位までの前記アドレス領域に対応する前記イベント発生情報をカウントするイベント発生情報カウント手段と、
前記イベント発生情報のカウント結果を保持する保持手段と、
所定の期間毎に前記プログラムの実行頻度が最も高かったアドレス領域に対応する前記イベント発生情報のカウント結果を記憶する記憶手段と
を備えることを特徴とするパフォーマンスモニタ装置。
【請求項２】
前記記憶手段は、
前記所定の期間毎に前記プログラムの実行頻度が上位所定順位までの前記アドレス領域に対応する前記イベント発生情報のカウント結果を記憶することを特徴とする請求項１に記載のパフォーマンスモニタ装置。
【請求項３】
前記記憶手段は、
前記所定の期間毎に前記プログラムの実行頻度が所定数以上の前記アドレス領域に対応する前記イベント発生情報のカウント結果を記憶することを特徴とする請求項１に記載のパフォーマンスモニタ装置。
【請求項４】
前記入力手段を介して入力される前記イベント発生情報を前記アドレス領域に関わらず順次カウントする全領域カウント手段を備え、
前記記憶手段は、前記所定の期間毎に前記プログラムの実行頻度が最も高かった該実行頻度が所定の頻度未満であった場合に、前記最も実行頻度が高かったアドレス領域に対応する前記イベント発生情報のカウント結果に代えて、前記全領域カウント手段のカウント結果を記憶することを特徴とする請求項１に記載のパフォーマンスモニタ装置。
【請求項５】
前記入力手段を介して入力される前記イベント発生情報を前記アドレス領域に関わらず順次カウントする全領域カウント手段を備え、
前記記憶手段は、前記所定の期間毎の前記プログラムの実行頻度が上位所定順位までの前記アドレス領域に対応する前記イベント発生情報のカウント結果の合計が所定値未満であった場合に、前記プログラムの実行頻度が最も高かったアドレス領域に対応する前記イベント発生情報のカウント結果に代えて、前記全領域カウント手段のカウント結果を記憶することを特徴とする請求項１に記載のパフォーマンスモニタ装置。
【請求項６】
前記入力手段を介して入力される前記イベント発生情報を前記アドレス領域に関わらず順次カウントする全領域カウント手段と、
前記アドレスマスク手段によって決定されたアドレス領域に対応する前記イベント発生情報のカウント結果が前記保持手段に保持されてなく、かつ、前記アドレスマスク手段によって決定されたアドレス領域におけるプログラムの実行頻度が、前記保持手段に前記イベント発生情報のカウント結果が保持されている他のアドレス領域におけるプログラムの実行頻度よりも高くなった場合に、前記他のアドレス領域に対応する前記イベント発生情報のカウント結果を、前記全領域カウント手段のカウント結果に基づいて初期化すると共に、該カウント結果を前記アドレスマスク手段によって決定された前記アドレス領域に対応付ける制御手段と
を備えることを特徴とする請求項１に記載のパフォーマンスモニタ装置。
【請求項７】
前記制御部は、
前記全領域カウント手段のカウント結果に対して、前記アドレスマスク手段によって決定された前記アドレス領域の実行割合を乗じた値を初期値として前記初期化を行うことを特徴とする請求項６に記載のパフォーマンスモニタ装置。
【請求項８】
前記制御部は、
前記全領域カウント手段のカウント結果と、前記保持手段に保持されている全てのカウント結果との差分を初期値として前記初期化を行うことを特徴とする請求項６に記載のパフォーマンスモニタ装置。
【請求項９】
前記制御部は、
予め決められている値を初期値として前記初期化を行うことを特徴とする請求項６に記載のパフォーマンスモニタ装置。
【請求項１０】
プログラムが格納されている記憶部上のアドレスを示すアドレス情報と前記プログラムを実行することにより発生するイベントの発生を示すイベント発生情報とをそれぞれ時系列に入力する入力ステップと、
前記入力されたアドレス情報の属するアドレス領域を決定するアドレス領域決定ステップと、
前記アドレス領域毎の前記プログラムの実行頻度をカウントする実行頻度カウントステップと、
前記実行頻度が上位所定順位までの前記アドレス領域に対応する前記イベント発生情報をカウントするイベント発生情報カウントステップと、
所定の期間毎にプログラムの実行頻度が最も高かったアドレス領域に対応する前記イベント発生情報の前記カウント結果を記憶する記憶ステップと
を備えることを特徴とするデータ収集方法。
【請求項１１】
プログラムが格納されている記憶部上のアドレスを示すアドレス情報と前記プログラムを実行することにより発生するイベントの発生を示すイベント発生情報とをそれぞれ時系列に入力する入力ステップと、
前記入力されたアドレス情報の属するアドレス領域を決定するアドレス領域決定ステップと、
前記アドレス領域毎の前記プログラムの実行頻度をカウントする実行頻度カウントステップと、
前記実行頻度が上位所定順位までの前記アドレス領域に対応する前記イベント発生情報をカウントするイベント発生情報カウントステップと、
所定の期間毎にプログラムの実行頻度が最も高かったアドレス領域に対応する前記イベント発生情報の前記カウント結果を記憶する記憶ステップと
をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パフォーマンスモニタ装置、データ収集方法及びそのプログラムに関し、特にプロセッサの動作状況を評価するためのデータを収集するパフォーマンスモニタ装置、データ収集方法及びそのプログラムに関する。
【背景技術】
【０００２】
プロセッサで発生したイベントの発生状況に関するデータを収集するパフォーマンスモニタ装置がある。このパフォーマンスモニタ装置は、それぞれのイベント毎にカウンタを用意し、それらのイベントが発生するたびに対応するカウンタ値をインクリメントし、指定されたインターバル期間が終了した時点でこれらのカウンタ値をトレースバッファと呼ばれる内部バッファに保存するようになされている。
【０００３】
これによりトレースバッファには、指定された期間毎の各カウンタ値が保存されることになり、期間毎のイベントの発生状況を把握し得るようになされている。
【０００４】
また、プロセッサの性能低下に及ぼす影響が大きなイベントの統計データ及びその他の統計データとを別々のメモリに格納する方法も考えられている（特許文献１参照）。
【特許文献１】特開２００１−１４２７４７
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところで、従来のパフォーマンスモニタ装置においては、プロセッサにおいて発生する膨大な数のイベントの中から、予め決められた特定のイベントのみを選択してそれらの発生回数をカウントすることにより、カウンタの数を少なくしている。
【０００６】
すなわち、図１１に示すように、従来のパフォーマンスモニタ装置においては、予め決められたイベントに対応する例えば３つのカウンタＣ１〜Ｃ３を用意し、このカウンタＣ１〜Ｃ３に対応付けられたイベントの発生回数を各々のカウンタによってカウントする。これにより、カウンタＣ１に対応付けられたイベントが発生すると、このカウンタＣ１をインクリメントし、またカウンタＣ２に対応付けられたイベントが発生すると、このカウンタＣ２をインクリメントし、またカウンタＣ３に対応付けられたイベントが発生すると、このカウンタＣ３をインクリメントする。
【０００７】
これらのカウント動作は、１サイクルごとに繰り返され、予め決められた期間（インターバル期間ＩＮＴと呼ぶ）が経過した時点で、各カウンタのカウンタ値をトレースバッファに保存する。
【０００８】
すなわち図１２に示すように、インターバル期間ＩＮＴを７サイクルとし、第１のカウンタＣ１（図１１）に対応したイベントを第１のイベントＥＶＴ１、第２のカウンタＣ２（図１１）に対応したイベントを第２のイベントＥＶＴ２、第３のカウンタＣ３（図１１）に対応したイベントを第３のイベントＥＶＴ３として、例えば、第１サイクル及び第２サイクルにおいて、第２のイベントＥＶＴ２が発生し、第３サイクルにおいて、第１のイベントＥＶＴ１及び第２のイベントＥＶＴ２が発生し、第４サイクル及び第５サイクルにおいていずれのイベントも発生せず、第６サイクル及び第７において、第３のイベントＥＶＴ３が発生した場合、図１２に示したインターバル期間が経過した時点では、カウンタＣ１のカウンタ値は「１」、カウンタＣ２のカウンタ値は「３」、カウンタＣ３のカウンタ値は「２」となる。
【０００９】
これらのカウンタ値は、１インターバル期間ＩＮＴが経過した時点で、トレースバッファに保存される。そして、各カウンタＣ１〜Ｃ３のカウンタ値がトレースバッファに保存されると、各カウンタＣ１〜Ｃ３のカウンタ値をリセットし、次のインターバル期間のカウント動作を開始する。
【００１０】
かくして、トレースバッファには、各カウンタＣ１〜Ｃ３の各インターバル期間におけるカウンタ値が順次保存されていく。
【００１１】
また、パフォーマンスモニタ装置においては、各サイクル毎にＰＣ（プログラムカウント）値を測定するようになされており、１インターバル期間ＩＮＴのいずれか１サイクル（例えば最後の１サイクル）に測定されたＰＣ値をそのインターバル期間ＩＮＴの各カウンタ値に対応付けてトレースバッファに保存する。
【００１２】
図１２に示すように、トレースバッファに保存されるデータの例として、例えば、第１のインターバル期間ＩＮＴ１におけるカウンタＣ１〜Ｃ２の各カウンタ値ＣＸＴ１（＝「１」）、ＣＸＴ２（＝「３」）、ＣＸＴ３（＝「２」）と、第１のインターバル期間ＩＮＴ１の最後のサイクルにおけるＰＣ値（0x87）が保存され、また、第２のインターバル期間ＩＮＴ２におけるカウンタＣ１〜Ｃ２の各カウンタ値ＣＸＴ１（＝「４」）、ＣＸＴ２（＝「６」）、ＣＸＴ３（＝「１」）と、第２のインターバル期間ＩＮＴ２の最後のサイクルにおけるＰＣ値（0x22）が保存され、以下、連続する各インターバル期間におけるこれらのデータが順次保存される。
【００１３】
このように、トレースバッファには、各インターバル期間ＩＮＴ１、ＩＮＴ２、…、ＩＮＴｎに発生した特定のイベント毎の発生回数と、各インターバル期間ＩＮＴ１、ＩＮＴ２、…、ＩＮＴｎの最後に測定されたＰＣ値とが対応付けられて時系列に保存される。このようなデータをトレースデータと呼ぶ。
【００１４】
このようにしてパフォーマンスモニタ装置に保存されたトレースデータを用いて、ソフトウエアのチューニングを行うようになされている。
【００１５】
しかしながら、かかるトレースデータにおいては、インターバル期間ＩＮＴの各サイクルにおけるイベント発生回数をカウンタ値ＣＸＴ１〜ＣＸＴ３として保存しているのに対して、これに対応付けられたＰＣ値として、該１インターバル期間のいずれか１サイクルにおけるＰＣ値が保存されることにより、カウンタ値ＣＸＴ１〜ＣＸＴ３は、これに対応付けられたＰＣ値で示されるプログラム領域実行時の性能特性を示していることにはならない。従って、このようなトレースデータをもとにソフトウエアのチューニングを行っても、十分な性能改善効果が得られない場合があった。
【００１６】
かかる課題を解決するための一つの方策として、インターバル期間ＩＮＴを短くすることで個々のＰＣ値とカウンタ値との対応の精度を上げることができると考えられる。しかしながら、インターバル期間ＩＮＴを短くすると、トレースデータを保存するためのバッファ領域を大きくしなければならず、また、外部メモリにトレースデータを保存する構成においては、外部メモリ領域を圧迫すると共に外部メモリにトレースデータを書き出す頻度が上がってメモリバンド幅が圧迫される問題があった。
【００１７】
このような技術的課題を解決するためになされた本発明の目的は、イベントの発生回数とＰＣ値との対応の精度を簡易な構成により向上させることができるパフォーマンスモニタ装置、データ収集方法及びそのプログラムを提供することである。
【課題を解決するための手段】
【００１８】
本発明の実施の形態に係る特徴は、パフォーマンスモニタ装置において、プログラムが格納されている記憶部上のアドレスを示すアドレス情報とプログラムを実行することにより発生するイベントの発生を示すイベント発生情報とをそれぞれ時系列に入力する入力手段と、入力されたアドレス情報の属するアドレス領域を決定するアドレスマスク手段と、アドレス領域毎のプログラムの実行頻度をカウントする実行頻度カウント手段と、実行頻度のカウント結果を保持する実行頻度保持テーブルと、実行頻度が上位所定順位までのアドレス領域に対応するイベント発生情報をカウントするイベント発生情報カウント手段と、イベント発生情報のカウント結果を保持する保持手段と、所定の期間毎にプログラムの実行頻度が最も高かったアドレス領域に対応するイベント発生情報のカウント結果を記憶する記憶手段とを備えることである。
【００１９】
また本発明の実施の形態に係る特徴は、データ収集装置において、プログラムが格納されている記憶部上のアドレスを示すアドレス情報とプログラムを実行することにより発生するイベントの発生を示すイベント発生情報とをそれぞれ時系列に入力する入力ステップと、入力されたアドレス情報の属するアドレス領域を決定するアドレス領域決定ステップと、アドレス領域毎のプログラムの実行頻度をカウントする実行頻度カウントステップと、実行頻度が上位所定順位までのアドレス領域に対応するイベント発生情報をカウントするイベント発生情報カウントステップと、所定の期間毎にプログラムの実行頻度が最も高かったアドレス領域に対応するイベント発生情報のカウント結果を記憶する記憶ステップとを備えることである。
【００２０】
また本発明の実施の形態に係る特徴は、コンピュータに実行させるためのプログラムにおいて、プログラムが格納されている記憶部上のアドレスを示すアドレス情報とプログラムを実行することにより発生するイベントの発生を示すイベント発生情報とをそれぞれ時系列に入力する入力ステップと、入力されたアドレス情報の属するアドレス領域を決定するアドレス領域決定ステップと、アドレス領域毎のプログラムの実行頻度をカウントする実行頻度カウントステップと、実行頻度が上位所定順位までのアドレス領域に対応するイベント発生情報をカウントするイベント発生情報カウントステップと、所定の期間毎にプログラムの実行頻度が最も高かったアドレス領域に対応するイベント発生情報のカウント結果を記憶する記憶ステップとを備えることである。
【発明の効果】
【００２１】
本発明によれば、イベントの発生回数とＰＣ値との対応の精度を簡易な構成により向上させることができるパフォーマンスモニタ装置、データ収集方法及びそのプログラムを提供することができる。
【発明を実施するための最良の形態】
【００２２】
以下、本発明の実施の形態について図面を参照して詳細に説明する。以下の図面の記載において、同一の部分には同一の符号を付し、重複する記載は省略する。また、図面は模式的なものであり、各部の寸法等は現実のものと異なる。
【００２３】
（第１の実施の形態）
図１に示すように、本発明の第１の実施の形態に係るパフォーマンスモニタ装置２０を有するプロセッサ１０においては、バス１１、プロセッサコア１２、２次キャッシュ１３等において性能測定用のイベントＩ１〜Ｉ５等が用意されており、イベントセレクタ１４によってこれらのイベントＩ１〜Ｉ５等の中から、予め決められたイベントを選択する。
【００２４】
イベントとは、例えば、分岐予測が成功したか否か、必要なデータが２次キャッシュに格納されていたか否か、メモリへのアクセス回数、命令実行数等の情報を意味する。プロセッサ１０では、これらのイベントが発生する毎にそのイベントを表す情報をイベントセレクタ１４に出力するようになされている。
【００２５】
イベントセレクタ１４は、予め決められたイベント（この実施の形態の場合、イベントＥＶＴ１〜ＥＶＴ３）について、それらの発生の有無を表す情報を１サイクル毎にイベントバス１５を介してパフォーマンスモニタ装置２０に供給する。この情報は、例えば、イベントＥＶＴ１〜ＥＶＴ３に対してそれぞれ１ビットが割り当てられ、発生したイベントに対応するビット（イベントビット）が「１」であり、発生していないイベントに対するイベントビットが「０」である情報である。すなわち、各イベントＥＶＴ１〜ＥＶＴ３に対して、それぞれ１ビットが割り当てられた情報である。また、イベントセレクタ１４は、１サイクル毎にＰＣ（プログラムカウンタ）値をプロセッサコア１２から受け取り、これをイベントバスの一部を利用してパフォーマンスモニタ装置２０に供給する。このＰＣ値は、実行されるプログラムが格納されている主記憶装置上のアドレスを指すレジスタの値である。
【００２６】
図２に示すように、パフォーマンスモニタ装置２０は、パフォーマンスカウンタ装置３０、インターバルタイマ２２、トレースバッファ４０及び制御部２４を備える。
【００２７】
パフォーマンスカウンタ装置３０は、イベントバス１５を介して入力されるイベントの発生の有無を表す情報及びＰＣ値を受け取り、これらの情報に基づいて、プログラムの実行頻度が高いＰＣ値領域に対応して入力されるイベントＥＶＴ１〜ＥＶＴ３の発生回数（パフォーマンスカウンタ値）をインターバル期間毎にカウントする。
【００２８】
インターバルタイマ２２は、予め決められたサイクル数（例えば５０００サイクル）を計測し、そのサイクル数に達した場合に、その結果を制御部２４に出力する。制御部２４は、インターバルタイマ２２が予め決められたサイクル数に達する毎に、パフォーマンスカウンタ装置３０の後述する所定のパフォーマンスカウンタ値をトレースバッファ４０に出力する。また、インターバルタイマ２２は、予め決められたサイクル数に達すると、パフォーマンスカウンタ装置３０を初期化する。
【００２９】
トレースバッファ４０は、パフォーマンスカウンタ装置３０に保持されているパフォーマンスカウンタ値（イベントＥＶＴ１〜ＥＶＴ３の発生回数）を１インターバル期間が終了する毎に保存する。
【００３０】
図３に示すように、パフォーマンスカウンタ装置３０は、アドレスマスク３１と、アドレスカウンタ装置３２と、パフォーマンスカウンタ値保持部３４とを備える。イベントバス１５を介して入力される情報のうち、各イベントＥＶＴ１〜ＥＶＴ３の発生状況を表す情報は、１サイクル毎にパフォーマンスカウンタ値保持部３４に入力され、また、ＰＣ値は、１サイクル毎にアドレスマスク３１に入力される。
【００３１】
アドレスマスク３１は、ＰＣ値によって表されるアドレスを、所定のアドレス領域毎（例えば１２８バイト毎）に分類する。すなわち、この実施の形態の場合、１つの命令は４バイトで表されていることにより、ＰＣ値は４バイト毎のデータとなる。アドレスマスク３１では、入力されたＰＣ値とマスク値「0xffffff80」とを論理積演算することにより、入力されたＰＣ値を１２８バイト（３２命令）ごとのアドレス領域に分類する。但し、本発明においては、１２８バイト毎に限られるものではない。
【００３２】
アドレスマスク３１においてマスクされたＰＣ値は、アドレスカウンタ装置３２に供給される。アドレスカウンタ装置３２は、例えば１２８バイト毎の所定のアドレス領域ＡＲ１、ＡＲ２、…、ＡＲｘに対応した頻度カウンタＣ１１、Ｃ１２、…、Ｃｘを備え、アドレスマスク３１から供給されるマスクされたＰＣ値の領域（アドレスが連続した所定領域）に対応した頻度カウンタをインクリメントする。これにより、頻度カウンタのカウント値は、対応するアドレス領域のプログラムの実行頻度を表すことになる。このように、所定のアドレス領域にＰＣ値を分類して対応する頻度カウンタを更新することにより、全アドレスに対して頻度カウンタを設ける場合に比べて、テーブルの構成が大型化することを回避することができる。
【００３３】
かくして、アドレスカウンタ装置３２においては、各アドレス領域ＡＲ１、ＡＲ２、…、ＡＲｘ毎のプログラムの実行頻度が対応する頻度カウンタＣ１１、Ｃ１２、…、Ｃｘのカウンタ値として更新されていく。
【００３４】
なお、アドレスカウンタ装置３２は、アドレスカウンタ管理装置３３によって管理される。
【００３５】
一方、パフォーマンスカウンタ値保持部３４は、１サイクル毎に、各イベントＥＶＴ１〜ＥＶＴ３の発生の有無を表す情報をイベントバス１５から入力する演算装置３５と、ｎ個のレジスタ３６ａ〜３６ｎからなるカウンタデータアレイ３６と、１サイクル毎に入力される各イベントＥＶＴ１〜ＥＶＴ３の発生の有無を表す情報を全てカウントする全領域カウンタ３７と、カウンタデータアレイ３６を管理するカウンタデータアレイ管理装置３８とを備える。
【００３６】
カウンタデータアレイ３６のｎ個のレジスタ３６ａ〜３６ｎは、アドレスカウンタ装置３２の各アドレス領域ＡＲ１、ＡＲ２、…、ＡＲｘのうち各々に対応する頻度カウンタＣ１１〜Ｃｘのカウンタ値が最大のものから上位ｎ番目のものまでのアドレス領域に対応付けられる。すなわち、アドレスカウンタ装置３２のアドレス領域ＡＲ１、ＡＲ２、…、ＡＲｘごとのテーブル（ポインタフィールド）３２ａは、カウンタデータアレイ３６の各レジスタ３６ａ〜３６ｎのエントリを示すポインタ値（「１」〜「ｎ」）を保持する。アドレスカウンタ装置３２は、イベントバス１５から入力がある度にこのポインタ値をカウンタデータアレイ３６に送信する。但し、頻度カウンタＣ１１〜Ｃｘのうちカウント値が最大値から上位ｎ番目のものに対応したアドレス領域にのみポインタ値が有効とされ、それ以外のアドレス領域のポインタ値としては、該当するポインタがないことを示す予め決められた値（例えばオール「１」）等を持つようになされている。
【００３７】
これにより、イベントバス１５から入力がある度に、アドレスマスク３１によってマスクされた結果（アドレス領域ＡＲ１〜ＡＲｘのいずれか）に対応した頻度カウンタ（カウンタＣ１１〜Ｃｘのいずれか）がインクリメントされると共に、そのアドレス領域に対応したポインタ値がカウンタデータアレイ３６に送信される。
【００３８】
例えば図３において、イベントバス１５からの入力によりアドレス領域ＡＲ１に対応した頻度カウンタＣ１１がインクリメントされると、このアドレス領域ＡＲ１に対応したポインタ値「０」がアドレスカウンタ管理装置３３からパフォーマンスカウンタ値保持部３４のカウンタデータアレイ管理装置３８に送信される。
【００３９】
カウンタデータアレイ管理装置３８では、アドレスカウンタ装置３２から送信されたポインタ値に対応するカウンタデータアレイ３６のエントリ（レジスタ３６ａ〜３６ｎのいずれか）に対して、イベントバス１５の入力を用いた更新作業を演算装置３５に実行させる。例えば、アドレスカウンタ装置３２からポインタ値「０」が送信されると、演算装置３５は、カウンタデータアレイ３６の各レジスタ３６ａ〜３６ｎのうち、ポインタ「０」に対応した第１のレジスタ３６ａに保持されているカウンタ値（この実施の形態の場合、イベントＥＶＴ１〜ＥＶＴ３毎のカウンタ値）を、イベントバス１５の入力（各イベントＥＶＴ１〜ＥＶＴ３の発生の有無を表す情報）に基づいて更新する。例えば、イベントバス１５の入力として、イベントＥＶＴ１のみが発生している情報を受け取ると、演算装置３５は、レジスタ３６ａのイベントＥＶＴ１のカウンタ値のみをインクリメントする。カウンタデータアレイ３６に更新保持されたこれらのカウンタ値をパフォーマンスカウンタ値と呼ぶ。
【００４０】
このように、カウンタデータアレイ３６では、アドレスカウンタ装置３２のカウンタ値が上位ｎ個のアドレス領域毎のイベント発生状況が保持される。因みに、アドレスカウンタ装置３２の頻度カウンタ（Ｃ１１〜Ｃｘのいずれか）がインクリメントされた場合、そのアドレス領域（ＡＲ１〜ＡＲｘのいずれか）に対応するポインタ値が無効を示す値（例えばオール１）であった場合には、該当するレジスタがカウンタデータアレイ３６にないことを意味しており、この無効を表すポインタを受け取った演算装置３５は、カウンタデータアレイ３６の更新を行わないようになされている。また、演算装置３５は、イベントバス１５から入力がある度に、ポインタ値とは無関係に、その入力に基づいて全領域カウンタ３７を必ず更新する。これにより、全領域カウンタ３７においては、イベントＥＶＴ１〜ＥＶＴ３のうち、１サイクル毎に発生したイベントについて対応するカウンタ値がインクリメントされることになる。
【００４１】
インターバルタイマ２２は、１インターバル期間の経過を計測すると、その計測結果をパフォーマンスカウンタ装置３０のアドレスカウンタ管理装置３３及びカウンタデータアレイ管理装置３８に送信する。アドレスカウンタ管理装置３３は、この計測結果を受けると、アドレスカウンタ装置３２の各アドレス領域ＡＲ１〜ＡＲｘの頻度カウンタＣ１１〜Ｃｘのカウンタ値のうち、最も大きなカウンタ値（最も高い頻度）となっている頻度カウンタを判断し、この頻度カウンタに対応するアドレス領域（プログラムの実行頻度が最も高かったアドレス領域）に対応するポインタ値をカウンタデータアレイ管理装置３８に送信する。カウンタデータアレイ管理装置３８は、アドレスカウンタ管理装置３３から受け取ったポインタ値に基づいて、該ポインタ値に対応するカウンタデータアレイ３６のエントリ（レジスタ３６ａ〜３６ｎのいずれか）に更新保持されている各イベントＥＶＴ１〜ＥＶＴ３の発生状況を表す情報（パフォーマンスカウンタ値）を読み出して、これに対応するアドレスカウンタ装置３２のアドレス領域（ＡＲ１〜ＡＲｘのいずれか）及び対応する頻度カウンタ（Ｃ１１〜Ｃｘのいずれか）のカウンタ値（頻度情報）と共にトレースバッファ４０に出力する。
【００４２】
トレースバッファ４０は、１インターバル期間が経過する毎に、パフォーマンスカウンタ装置３０から出力されるこれらの情報を格納していく。これにより、トレースバッファ４０には、各インターバル期間毎のイベントの発生状況のうち、プログラムの実行頻度が高いアドレス領域を表す情報とそれに対応したイベント発生状況とが順次保存されていく。かくして、トレースバッファ４０を確認することにより、実行頻度の高いプログラムのアドレス領域を特定することができると共に、プログラムの実行頻度が高いアドレス領域のパフォーマンスカウンタ値（カウンタデータアレイ３６に保存されたイベント毎の発生頻度）を把握することができる。
【００４３】
ここで、インターバルタイマ２２が１インターバル期間の経過を計測して、アドレスカウンタ管理装置３３によってアドレスカウンタ装置３２の各アドレス領域ＡＲ１〜ＡＲｘのうち、プログラムの実行頻度が最も高かったアドレス領域を選択してその選択されたアドレス領域に対応するポインタ値をカウンタデータアレイ管理装置３８に送信する場合において、該ポインタ値が無効（例えばオール１）となっている場合、このことは、カウンタデータアレイ３６に対応するレジスタが設定されていないことを意味しており、この場合、イベントバス１５からの入力（各イベントＥＶＴ１〜ＥＶＴ３の発生の有無を表す情報）に基づくカウンタデータアレイ３６の更新は行われない。但し、ポインタ値が無効である場合においても、次の条件に合致する場合にはカウンタデータアレイ３６の更新を行う。
【００４４】
すなわち、第１に、未使用のエントリがカウンタデータアレイ３６に存在する場合、このことは、カウンタデータアレイ３６のすべてのレジスタ３６ａ〜３６ｎが使用されてない状態であることを意味しており、カウンタデータアレイ管理装置３８は、未使用のエントリがある旨をアドレスカウンタ管理装置３３に通知することにより、アドレスカウンタ管理装置３３において、未使用のエントリに対するポインタを無効であったポインタ値に代えて登録すると共に、対応するエントリの更新を行う。
【００４５】
また、第２に、アドレスカウンタ装置３２においてプログラムの実行頻度（カウンタ値）が上位ｎ番目のアドレス領域の該実行頻度よりも、入力されたアドレス領域の実行頻度が高くなった場合、このことは、それまで実行頻度（カウンタ値）がｎ番目であったアドレス領域は、ｎ番目よりも順位が低くなったことを意味しており、アドレスカウンタ管理装置３３は、それまでｎ番目であったアドレス領域に対応するポインタ値を無効とすると共に、入力されたアドレス領域に対応するポインタ値（無効を示すポインタ値）を、それまでｎ番目であったアドレス領域に対応するポインタ値に変更する。そして、アドレスカウンタ管理装置３３は、このポインタ値をカウンタデータアレイ管理装置３８に送信することにより、カウンタデータアレイ管理装置３８は、このポインタ値によって指定されるカウンタデータアレイ３６のエントリ（レジスタ）に初期値を設定する。この初期値としては、全領域カウンタ３７のカウンタ値（各イベントＥＶＴ１〜ＥＶＴ３毎のカウンタ値）に、新たにｎ番目となったアドレス領域の実行割合を乗じた値とする。アドレス領域の実行割合とは、新たにｎ番目となったアドレス領域に対応する頻度カウンタ（Ｃ１１〜Ｃｘのいずれか）のカウンタ値の、全頻度カウンタ（Ｃ１１〜Ｃｘ）の合計値に対する割合である。このようなカウンタデータアレイ３６の入れ替えが発生した場合、全領域カウンタ３７及びアドレス領域の実行割合から得られる予測値を初期値として更新を続けることになるが、１インターバル期間が経過した後は、全ての値が初期化されるため、これによる予測値を用いることによる誤差の影響は最小限に抑えることができる。
【００４６】
図４は、パフォーマンスモニタ装置３０における処理手順を示す。なお、イベントバス１５からの入力は毎サイクル行われることにより、この処理手順は、毎サイクル開始され、パイプライン的に処理されるものである。
【００４７】
この処理手順において、パフォーマンスモニタ装置３０は、ステップＳＴ１において、毎サイクル発生するイベントバス入力があると、ステップＳＴ２に移り、イベントバス１５に含まれるＰＣ値のアドレス領域を、アドレスマスク３１を用いて決定する。
【００４８】
そして、パフォーマンスモニタ装置３０は、ステップＳＴ３に移り、対応するアドレス領域の頻度カウンタ（Ｃ１１〜Ｃｘのいずれか）を更新する。そして、パフォーマンスモニタ装置３０は、ステップＳＴ４に移って、上述のステップＳＴ３において更新した頻度カウンタのカウンタ値が、上位ｎ番目に入っているか否かをアドレスカウンタ管理装置３３によって判断する。
【００４９】
このステップＳＴ４において否定結果が得られると、このことは、更新した頻度カウンタのカウント値が上位ｎ番目に入ってなく、対応するカウンタデータアレイ３６のエントリが設定されていないことを意味しており、パフォーマンスモニタ装置３０は、ステップＳＴ４からステップＳＴ１１に移って、全領域カウンタ３７を、イベントバス入力に基づいて更新する。
【００５０】
これに対して、ステップＳＴ４において肯定結果が得られると、このことは、更新した頻度カウンタのカウント値が上位ｎ番目に入っており、対応するカウンタデータアレイ３６のエントリが設定されていることを意味しており、パフォーマンスモニタ装置３０は、ステップＳＴ４からステップＳＴ５に移って、更新した頻度カウンタに対応するアドレス領域のポインタとして無効以外の値（「１」〜「ｎ」のいずれか）がポインタフィールド３２ａに設定されているか否かをアドレスカウンタ管理装置３３によって判断する。
【００５１】
このステップＳＴ５において肯定結果が得られると、このことは、既にカウンタデータアレイ３６にエントリ（レジスタ）が設定されていること（前回の更新において既に該アドレス領域は上位ｎ番目に入っていたこと）を意味しており、パフォーマンスモニタ装置３０は、ステップＳＴ５からステップＳＴ１０に移って、対応するパフォーマンスカウンタ（パフォーマンスデータアレイ３６のレジスタ）のパフォーマンスカウンタ値を更新する。
【００５２】
これに対してステップＳＴ５において否定結果が得られると、このことは、カウンタデータアレイ３６にエントリが設定されていないこと（前回の更新時には上位ｎ番目に入っていなかったこと）を意味しており、パフォーマンスモニタ装置３０は、ステップＳＴ５からステップＳＴ６に移って、アドレスカウンタ装置３３からカウンタデータアレイ管理装置３８に対して、カウンタデータアレイ３６に未割り当てのエントリ（レジスタ）が存在するか否かを問い合わせる。
【００５３】
このステップＳＴ６において、肯定結果が得られると、未割り当てのエントリを利用することができるので、パフォーマンスモニタ装置３０は、ステップＳＴ６からステップＳＴ７に移って、カウンタデータアレイ管理装置３８によってカウンタデータアレイ３６の未割り当てのエントリ（レジスタ）の一つを上述のステップＳＴ２において決定されたアドレス領域に割り当て、アドレスカウンタ管理装置３３に通知する。アドレスカウンタ管理装置３３は、ポインタフィールド３２ａにこのエントリへのポインタを登録した後、ステップＳＴ１０に移る。
【００５４】
これに対してステップＳＴ６において、否定結果が得られると、このことは、カウンタデータアレイ３６に未割り当てのエントリ（レジスタ）が存在しないことを意味している。すなわち、頻度カウンタを更新したアドレス領域が前回上位ｎ番目に入っていなかったことを意味しており、この場合、他のアドレス領域が利用していたエントリをこのアドレス領域用に再割り当てする必要があるため、パフォーマンスモニタ装置３０は、ステップＳＴ６からステップＳＴ８に移って、カウンタデータアレイ管理装置３８によって、対応するパフォーマンスカウンタ（カウンタデータアレイ３６のレジスタ）をクリアする。すなわち、上述のステップＳＴ２において決定されたアドレス領域が頻度上位ｎ番目になったために、カウンタデータアレイ管理装置３８は、上位ｎ＋１番目に降格することとなったアドレス領域が所有していたカウンタデータアレイ３６のエントリをクリアする。
【００５５】
そして、パフォーマンスカウンタ装置３０は、ステップＳＴ９に移って、カウンタデータアレイ管理装置３８によって、対応するパフォーマンスカウンタ（カウンタデータアレイ３６のレジスタ）を初期化する。すなわち、カウンタデータアレイ管理装置３８は、全領域カウンタ３７のカウンタ値（各イベントＥＶＴ１〜ＥＶＴ３毎のカウンタ値）に、新たにｎ番目となったアドレス領域の実行割合を乗じた値を初期値としてカウンタデータアレイ３６のパフォーマンスカウンタを初期化する。
【００５６】
そして、パフォーマンスカウンタ装置３０は、ステップＳＴ１０に移って、演算装置３５によって、上述のステップＳＴ２によって決定されたアドレス領域に対応するパフォーマンスカウンタ（パフォーマンスデータアレイ３６のレジスタ）のパフォーマンスカウンタ値を更新する。
【００５７】
また、ステップＳＴ１１において、パフォーマンスカウンタ装置３０は、演算装置３５により、全領域カウンタ３７の全領域カウンタ値を、イベントバス１５から入力された各イベントＥＶＴ１〜ＥＶＴ３の発生状況を表す情報に基づいて更新する。
【００５８】
このように、パフォーマンスカウンタ装置３０においては、イベントバス１５によって入力された各イベントＥＶＴ１〜ＥＶＴ３の発生状況を表す情報によって、アドレスカウンタ装置３２のイベント発生頻度が上位ｎ番目までのアドレス領域に対応したカウンタデータアレイ３６のレジスタ（３６ａ〜３６ｎのいずれか）のパフォーマンスカウンタ値を更新する。
【００５９】
以上説明したように、本実施の形態に係るパフォーマンスカウンタ装置３０においては、アドレス領域毎にカウンタデータアレイ３６のエントリを設け、これらの情報をトレースバッファ４０に保存するようにしたことにより、カウンタデータアレイ３６のパフォーマンスカウンタ値とアドレス領域との関連性を持たせた状態でトレースバッファ４０にデータを保存することができる。すなわち、ある連続したアドレスの範囲毎にカウンタデータアレイ３６のエントリを設けることにより、カウンタデータアレイ３６のパフォーマンスカウンタ値とアドレスとの関連性を保つことが可能となる。従って、例えば図１２に示したように各イベントＥＶＴ１〜ＥＶＴ３の発生回数に対してＰＣ値がかけ離れた値となることを防止することができる。
【００６０】
また、入力されたＰＣ値のアドレス領域をアドレスマスク３１によって決定することにより、一定のアドレス範囲に対してカウンタデータアレイ３６のエントリを設けることができ、個々のアドレス毎にエントリを設ける場合に比べて、カウンタデータアレイ３６の構成が大型化することを回避することができる。
【００６１】
また、プログラムの実行頻度が上位ｎ番目までのアドレス領域に対応したカウンタデータアレイ３６のエントリのみを設けるようにしたことにより、１インターバル期間が経過した時点で頻度カウンタのカウンタ値が最も高くなる可能性のあるアドレス領域に対応したエントリだけを設けることでカウンタデータアレイ３６の構成が大型化することを避けることができる。また、この場合、上位ｎ番目に入っていなかったアドレス領域におけるプログラムの実行頻度が上位ｎ番目に入った場合には、全領域カウンタ３７を用いて、エントリの入れ替えを行うこともできる。
【００６２】
また、トレースバッファ４０に記録されるデータは、１インターバル期間毎にプログラムの実行頻度が最も高かったアドレス領域に対応するパフォーマンスカウンタ値であり、従来に比べてトレースバッファ４０に記録されるデータ量が増加することを回避しつつ、保存されるパフォーマンスカウンタ値とアドレス領域との対応の精度を向上させることができる。これにより、パフォーマンスカウンタ値（イベントの発生回数）とアドレス領域との対応の精度を簡易な構成により向上させることができる
（第２の実施の形態）
上述の第１の実施の形態においては、アドレスマスク３１におけるアドレスマスク値を固定とする場合について述べたが、本発明はこれに限られるものではなく、動的に変化させるようにしてもよい。
【００６３】
すなわち、上述の第１の実施の形態と同様にして、カウンタデータアレイ３６のパフォーマンスカウンタ値を更新して行き、カウンタデータアレイ３６のエントリ数に不足が生じた時点で、アドレスマスク３１で表される範囲を２倍（又は２＾ｍ倍）にし、それに対応するようにアドレスカウンタ装置３２のアドレスカウンタテーブル（アドレス領域、頻度カウンタ、ポインタフィールド３２ａ）とカウンタデータアレイ３６の各エントリを更新する。これにより、連続したアドレス領域は、新たに一つのアドレス領域として融合され、より多くのアドレス領域に対応したパフォーマンスカウンタ値（カウンタデータアレイ３６に保存される各イベントＥＶＴ１〜ＥＶＴ３毎の発生回数）を保存することができる。
【００６４】
この手法により、狭いアドレス範囲の命令のみで実行されているようなプログラムに関しては、細かいアドレス領域毎にパフォーマンスデータ（各イベントＥＶＴ１〜ＥＶＴ３毎の発生回数）をカウントし、広いアドレス範囲の命令を実行しているようなプログラムに関しては、大きなアドレス領域毎にパフォーマンスデータをカウントすることが自動的に行うことができるようになる。さらに、カウンタデータアレイ３６の入れ替えによるパフォーマンスカウンタ値の損失も防ぐことができる。
【００６５】
図５及び図６は、本実施の形態に係るパフォーマンスカウンタ装置３０の処理手順を示す。なお、図５において、図４と同一の処理ステップには同一符号を付して、重複した説明は省略する。
【００６６】
図５に示す処理手順では、図４に示した処理手順のステップＳＴ２及びステップＳＴ３がステップＳＴ２２に置き換えられ、また、全てのアドレス領域がカウントの対象となるため、図４に示したステップＳＴ４を削除しており、また、カウンタデータアレイ３６のエントリの入れ替えがなくなるため、図４に示したステップＳＴ８及びステップＳＴ９を削除している。また、図５においては、後述するステップＳＴ２２において、カウンタデータアレイ３６のエントリ数の不足に対応してアドレスマスク３１で表される範囲を広く変更し、この変更されたマスク値に応じてアドレスカウンタ装置３２のアドレスカウンタテーブル（アドレス領域、頻度カウンタ、ポインタフィールド３２ａ）とカウンタデータアレイ３６の各エントリを更新しているので、このステップＳＴ２２の実行により、カウンタデータアレイ３６に未割り当てカウンタが存在していることが保証されることになる。従って、本実施の形態においては、図４に示したステップＳＴ６を省略し、ステップＳＴ５において否定結果が得られた場合に、ステップＳＴ５からステップＳＴ７に移るようにしている。
【００６７】
図６は、図５に示すステップＳ２２の詳細を示し、パフォーマンスカウンタ装置３０は、ステップＳＴ３１において、イベントバス１５に含まれるＰＣ値に対してアドレスマスク３１を適用する。これにより、ＰＣ値が属するべきアドレス領域が決定される。
【００６８】
そしてパフォーマンスカウンタ装置３０は、ステップＳＴ３２に移って、カウンタデータアレイ３６のエントリ数が十分であるか否かを判断する。すなわち、アドレスカウンタ管理装置３３は、カウンタデータアレイ管理装置３８に対して、ステップＳＴ３１において決定されたアドレス領域を記録するためのエントリがカウンタデータアレイ３６に存在するか否かを問い合わせる。
【００６９】
このステップＳＴ３２において肯定結果が得られると、このことは、既にこのアドレス領域に対応するエントリが存在しているか、又は、空きエントリが存在していることを意味しており、パフォーマンスカウンタ装置３０は、ステップＳＴ３２からステップＳＴ３５に移り、アドレスカウンタ装置３２における対応するアドレス領域の頻度カウンタを更新する。
【００７０】
これに対してステップＳＴ３２において否定結果が得られると、このことは、カウンタデータアレイ３６には、このアドレス領域に対応するエントリがなく、しかも空きエントリもないことを意味しており、パフォーマンスカウンタ装置３０は、ステップＳＴ３２からステップＳＴ３３に移って、保持していたアドレスマスク３１の値を２倍に変更する。
【００７１】
そして、パフォーマンスカウンタ装置３０は、ステップＳＴ３４において、ステップＳＴ３３において変更されたマスク値に応じて、アドレスカウンタ装置３２のテーブル（アドレス領域、頻度カウンタ、ポインタフィールド３２ａ）及びカウンタデータアレイ３６を更新する。すなわち、アドレスカウンタ管理装置３３とカウンタデータアレイ管理装置３８が、新しいアドレスマスク３１の値に対応するように、それぞれアドレスカウンタ装置３２とカウンタデータアレイ３６の内容を更新する。すなわち、アドレス領域の範囲が２倍になったことによって同じアドレス領域に属することになったアドレス領域のエントリ同士を一つにマージする。そして、入力されていたＰＣ値に対して上述したステップＳＴ３１に戻って同様の処理を繰り返す。
【００７２】
このように本実施の形態においては、カウンタデータアレイ３６にエントリの不足が生じた場合に、アドレスマスク３１で表される範囲を広げることにより、カウンタデータアレイ３６を増やすことなく、全てのアドレス領域のパフォーマンスカウンタ値を保存することができる。
【００７３】
かくして以上の構成によれば、パフォーマンスカウンタ値とアドレス領域との対応の精度を簡易な構成により向上させることができる。
【００７４】
（第３の実施の形態）
上述の第１の実施の形態においては、アドレスカウンタ装置３２に共通のアドレスマスク３１を用いる場合について述べたが、本発明はこれに限られるものではなく、アドレスカウンタ装置３２のエントリ毎にアドレスマスク３１を用意するようにしてもよい。
【００７５】
すなわち、上述の第１の実施の形態と同様にして、カウンタデータアレイ３６のパフォーマンスカウンタ値を更新して行き、カウンタデータアレイ３６のエントリ数に不足が生じた時点で、カウンタデータアレイ３６にエントリを持つアドレス領域のうち、隣接していて、かつ、合計実行頻度が最も小さいペアを見つける（又は予め見つけておく）。そして、これらのペアそれぞれが属するアドレス領域を一つのアドレス領域として融合することにより、カウンタデータアレイ３６に空きエントリを作り、これを新しいアドレス領域のパフォーマンスデータをカウントするためのエントリとする。
【００７６】
これにより、カウンタデータアレイ３６のエントリ数に不足が生じた場合に、比較的実行頻度が低いエントリのみを融合し、頻度の高かったエントリのパフォーマンスカウンタ値の精度を保ったままエントリ数の不足を解消することができる。
【００７７】
図７及び図８は、本実施の形態に係るパフォーマンスカウンタ装置３０の処理手順を示す。なお、図７において、図４と同一の処理ステップには同一符号を付して、重複した説明は省略する。
【００７８】
図７に示す処理手順では、図４に示した処理手順のステップＳＴ２及びステップＳＴ３がステップＳＴ４２に置き換えられ、また、全てのアドレス領域がカウントの対象となるため、図４に示したステップＳＴ４を削除しており、また、カウンタデータアレイ３６のエントリの入れ替えがなくなるため、図４に示したステップＳＴ８及びステップＳＴ９を削除している。また、図７においては、後述するステップＳＴ４２において、カウンタデータアレイ３６のエントリ数の不足に対応して、比較的実行頻度が低いエントリを融合するようにしており、このステップＳＴ４２の処理により、カウンタデータアレイ３６に未割り当てカウンタが存在していることが保証されることになる。従って、本実施の形態においては、図４に示したステップＳＴ６を省略し、ステップＳＴ５において否定結果が得られた場合に、ステップＳＴ５からステップＳＴ７に移るようにしている。
【００７９】
図８は、図７に示すステップＳＴ４２の詳細を示し、パフォーマンスカウンタ装置３０は、ステップＳＴ５１において、イベントバス１５に含まれるＰＣ値に対して対応するアドレス領域が既に登録されているか否かについて、アドレスカウンタ装置３２のテーブルをサーチする。
【００８０】
そしてパフォーマンスカウンタ装置３０は、ステップＳＴ５２に移って、カウンタデータアレイ３６のエントリ数が十分であるか否かを判断する。すなわち、アドレスカウンタ管理装置３３は、カウンタデータアレイ管理装置３８に対して、このアドレス領域を記録するためのエントリがカウンタデータアレイ３６に存在するか否かを問い合わせる。
【００８１】
このステップＳＴ５２において肯定結果が得られると、このことは、既にこのアドレス領域に対応するエントリが存在しているか、又は、空きエントリが存在していることを意味しており、パフォーマンスカウンタ装置３０は、ステップＳＴ５２からステップＳＴ５４に移り、アドレスカウンタ装置３２における対応するアドレス領域の頻度カウンタを更新する。
【００８２】
これに対してステップＳＴ５２において否定結果が得られると、このことは、カウンタデータアレイ３６には、このアドレス領域に対応するエントリがなく、しかも空きエントリもないことを意味しており、パフォーマンスカウンタ装置３０は、ステップＳＴ５２からステップＳＴ５３に移って、アドレスカウンタ装置３２のテーブル及びカウンタデータアレイ３６をマージする。すなわち、アドレスカウンタ管理装置３３が、隣接していて、かつ、合計実行頻度が最も小さい二つのアドレス領域を見つけ、これら二つを一つのアドレス領域としてアドレスカウンタ装置３２の対応するエントリをマージする。さらに、カウンタデータアレイ管理装置３８に同様の処理を行うように要求し、カウンタデータアレイ３６の対応するエントリについてもマージ作業を実行する。これにより、必ず１つの空きエントリが発生するので、マージ作業終了後、上述のステップＳＴ５１に戻って同様の処理を繰り返す。
【００８３】
このように本実施の形態においては、カウンタデータアレイ３６にエントリの不足が生じた場合に、プログラムの実行頻度が比較的低いエントリのみを融合することにより、プログラムの実行頻度が高かったエントリのパフォーマンスカウンタ値の精度を保ったまま、エントリ数の不足を解消することができる。
【００８４】
かくして以上の構成によれば、パフォーマンスカウンタ値とアドレス領域との対応の精度を簡易な構成により向上させることができる。
【００８５】
（第４の実施の形態）
上述の第１の実施の形態においては、アドレスカウンタ装置３２に共通のアドレスマスク３１を用いる場合について述べたが、本発明はこれに限られるものではなく、アドレスカウンタ装置３２のエントリ毎にアドレスマスク３１を用意するようにしてもよい。
【００８６】
すなわち、上述の第１の実施の形態と同様にして、カウンタデータアレイ３６のパフォーマンスカウンタ値を更新して行き、カウンタデータアレイ３６のエントリ数に不足が生じた時点で、カウンタデータアレイ３６にエントリを持つアドレス領域のうち、隣接していて、かつ、お互いの実行頻度が最も近いペアを見つける（又は予め見つけておく）。そして、これらのペアそれぞれが属するアドレス領域を一つのアドレス領域として融合することにより、カウンタデータアレイ３６に空きエントリを作り、これを新しいアドレス領域のパフォーマンスデータをカウントするためのエントリとする。
【００８７】
これにより、カウンタデータアレイ３６のエントリ数に不足が生じた場合に、連続して実行されているような比較的関連性の深いエントリのみを融合し、その他のエントリのパフォーマンスカウンタ値の精度を保ったままエントリ数の不足を解消することができる。
【００８８】
図９及び図１０は、本実施の形態に係るパフォーマンスカウンタ装置３０の処理手順を示す。なお、図９において、図４と同一の処理ステップには同一符号を付して、重複した説明は省略する。
【００８９】
図９に示す処理手順では、図４に示した処理手順のステップＳＴ２及びステップＳＴ３がステップＳＴ６２に置き換えられ、また、全てのアドレス領域がカウントの対象となるため、図４に示したステップＳＴ４を削除しており、また、カウンタデータアレイ３６のエントリの入れ替えがなくなるため、図４に示したステップＳＴ８及びステップＳＴ９を削除している。また、図９においては、後述するステップＳＴ６２により、カウンタデータアレイ３６のエントリ数の不足に対応して、カウンタデータアレイ３６に空きエントリを作るようにしており、このステップＳＴ６２の処理により、カウンタデータアレイ３６に未割り当てカウンタが存在していることが保証されることになる。従って、本実施の形態においては、図４に示したステップＳＴ６を省略し、ステップＳＴ５において否定結果が得られた場合に、ステップＳＴ５からステップＳＴ７に移るようにしている。
【００９０】
図１０は、図９に示すステップＳＴ６２の詳細を示す。但し、図８と同一の処理ステップには同一符号を付して、重複した説明は省略する。
【００９１】
パフォーマンスカウンタ装置３０は、カウンタデータアレイ３６のエントリ数が十分であるか否かを判断するステップＳＴ５２において否定結果が得られると、ステップＳＴ５２からステップＳＴ７３に移って、アドレスカウンタ装置３２のテーブル及びカウンタデータアレイ３６をマージする。すなわち、アドレスカウンタ管理装置３３が、隣接していて、かつ、お互いの実行頻度が最も近い二つのアドレス領域を見つけ、これら二つを一つのアドレス領域としてアドレスカウンタ装置３２の対応するエントリをマージする。さらに、カウンタデータアレイ管理装置３８に同様の処理を行うように要求し、カウンタデータアレイ３６の対応するエントリについてもマージ作業を実行する。これにより、必ず一つの空きエントリが発生するので、マージ作業終了後、上述のステップＳＴ５１に戻って同様の処理を繰り返す。
【００９２】
このように本実施の形態においては、カウンタデータアレイ３６にエントリの不足が生じた場合に、連続して実行されているような比較的関連性の深いエントリのみを融合することにより、その他のエントリのパフォーマンスカウンタ値の精度を保ったまま、エントリ数の不足を解消することができる。
【００９３】
かくして以上の構成によれば、パフォーマンスカウンタ値とアドレス領域との対応の精度を簡易な構成により向上させることができる。
【００９４】
（他の実施の形態）
上述のパフォーマンスカウンタ装置３０においては、上位ｎ番目のアドレス領域におけるプログラムの実行頻度よりも新しく入力されたアドレス領域におけるプログラムの実行頻度が大きくなった場合、ｎ番目のアドレス領域が使用していたカウンタデータアレイ３６のエントリを開放し、新たにｎ番目となったアドレス領域のパフォーマンスカウンタとして使用することになる。この場合のエントリ内カウンタ（レジスタ）の初期化方法として、上述の実施の形態においては、全領域カウンタ３７のカウンタ値（各イベントＥＶＴ１〜ＥＶＴ３毎のカウンタ値）に、新たにｎ番目となったアドレス領域の実行割合を乗じた値を初期値としてカウンタデータアレイ３６のパフォーマンスカウンタ値を初期化する場合について述べたが、本発明はこれに限られるものではなく、全てのアドレス領域に対するパフォーマンスカウンタ値を保持しているレジスタ（全領域カウンタ３７）の値から、カウンタデータアレイ３６の全てのエントリのパフォーマンスカウンタ値を引いた値を初期値として、新たなにｎ番目となったアドレス領域の初期値としてもよく、さらには、予め決められた値（例えばオール０）を初期値としてもよい。
【００９５】
また、上述の実施の形態においては、インターバル期間経過毎にパフォーマンスカウンタ値をトレースバッファ４０に書き込む方法として、プログラムの実行頻度が最も高かったアドレス領域のパフォーマンスカウンタ値を書き込む場合について述べたが、本発明はこれに限られるものではなく、例えば、発生頻度が上位ａ個（ａはユーザが設定、又は予め指定されたハードウエア特有の値）のアドレス領域のパフォーマンスカウンタ値及びそれぞれの頻度情報をトレースバッファ４０に書き込むようにしてもよい。このようにすれば、あるインターバル期間中に複数のアドレス領域に関するパフォーマンスカウンタ値及び頻度情報をトレースバッファ４０に記録することが可能となり、一段と詳細なパフォーマンス解析を行うことができるようになる。因みに、この場合、全てのアドレス領域に関するパフォーマンスカウンタ値（全領域カウンタ３７の値）を、個別のアドレス領域に関するパフォーマンスカウンタ値と共にトレースバッファ４０に書き込むようにすることもできる。このようにすれば、個々のアドレス領域のパフォーマンスカウンタ値及び頻度情報に加えて、全体のパフォーマンスカウンタ値及び頻度情報をトレースバッファ４０に記録することができ、一段と高度な性能解析（例えば全体の挙動と各アドレス領域固有の挙動の比較等）を行うことができるようになる。
【００９６】
また、トレースバッファ４０に書き込む方法として、発生頻度がｘ（ｘはユーザが設定、又は予め指定されたハードウエア特有の値）以上のアドレス領域のパフォーマンスカウンタ値及びそれぞれの頻度情報を全てトレースバッファ４０に書き込むようにしてもよい。このようにすれば、プログラムの実行頻度を閾値として、記録するアドレス領域を決定することにより、解析、チューニングの対象としたい高頻度のアドレス領域に関するパフォーマンスカウンタ値及び頻度情報のみをトレースバッファ４０に記録できるようになる。因みに、この場合、全てのアドレス領域に関するパフォーマンスカウンタ値（全領域カウンタ３７の値）を、個別のアドレス領域に関するパフォーマンスカウンタ値と共にトレースバッファ４０に書き込むようにすることもできる。このようにすれば、個々のアドレス領域のパフォーマンスカウンタ値及び頻度情報に加えて、全体のパフォーマンスカウンタ値及び頻度情報をトレースバッファ４０に記録することができ、一段と高度な性能解析（例えば全体の挙動と各アドレス領域固有の挙動の比較等）を行うことができるようになる。
【００９７】
また、トレースバッファ４０に書き込む方法として、プログラムの実行頻度が最上位のアドレス領域の頻度がｙ（ｙはユーザが設定、又は予め指定されたハードウエア特有の値）未満であった場合、全てのアドレス領域に関するパフォーマンスカウンタ値をトレースバッファ４０に書き込むようにしてもよい。このようにすれば、各アドレス領域が均一的に実行され、かつ、測定対象となったアドレス領域の数自体も大きかった場合、ある特定のアドレス領域に関するパフォーマンスカウンタ値よりも全アドレス領域に関するパフォーマンスカウンタ値のほうが、パフォーマンス解析をする際には有用である可能性があることに対応することが可能となる。
【００９８】
また、トレースバッファ４０に書き込む方法として、プログラムの実行頻度が上位ｎ個のアドレス領域の合計がｚ（ｚはユーザが設定、又は予め指定されたハードウエア特有の値）未満だった場合、全てのアドレス領域に関するパフォーマンスカウンタ値をトレースバッファ４０に書き込むようにしてもよい。このようにすれば、各アドレス領域が均一的に実行され、かつ、測定対象となったアドレス領域の数自体も大きかった場合、ある特定のアドレス領域に関するパフォーマンスカウンタ値よりも全アドレス領域に関するパフォーマンスカウンタ値のほうが、パフォーマンス解析をする際には有用である可能性があることに対応することができる。因みに、この方法においては、上位ｎ個のアドレス領域が集中的に実行された場合は、個々のアドレス領域に関するパフォーマンスカウンタ値及び頻度情報をトレースバッファ４０に記録することができる。
【００９９】
また、上述の実施の形態の構成において、全てのアドレス領域に関するパフォーマンスカウンタ値（全領域カウンタ３７の値）を、個別のアドレス領域に関するパフォーマンスカウンタ値と共にトレースバッファ４０に書き込むようにすることもできる。このようにすれば、個々のアドレス領域のパフォーマンスカウンタ値及び頻度情報に加えて、全体のパフォーマンスカウンタ値及び頻度情報をトレースバッファ４０に記録することができ、一段と高度な性能解析（例えば全体の挙動と各アドレス領域固有の挙動の比較等）を行うことができるようになる。
【図面の簡単な説明】
【０１００】
【図１】第１の実施の形態に係るパフォーマンスモニタ装置を有するプロセッサを示すブロック図である。
【図２】図１のプロセッサのパフォーマンスモニタ装置を示すブロック図である。
【図３】図２のパフォーマンスモニタ装置に含まれるパフォーマンスカウンタ装置を示すブロック図である。
【図４】図３のパフォーマンスカウンタ装置の処理手順を示すフローチャートである。
【図５】第２の実施の形態に係るパフォーマンスカウンタ装置の処理手順を示すフローチャートである。
【図６】図５のマスク処理の詳細を示すフローチャートである。
【図７】第３の実施の形態に係るパフォーマンスカウンタ装置の処理手順を示すフローチャートである。
【図８】図７のマスク処理の詳細を示すフローチャートである。
【図９】第４の実施の形態に係るパフォーマンスカウンタ装置の処理手順を示すフローチャートである。
【図１０】図９のマスク処理の詳細を示すフローチャートである。
【図１１】従来のカウンタの説明に供する略線図である。
【図１２】従来のトレースバッファへの書き込み方法の説明に供する略線図である。
【符号の説明】
【０１０１】
１０  プロセッサ
１１  バス
１２  プロセッサコア
１３  キャッシュ
１４  イベントセレクタ
１５  イベントバス
２０  パフォーマンスモニタ装置
２２  インターバルタイマ
２４  制御部
３０  パフォーマンスカウンタ装置
３１  アドレスマスク
３２  アドレスカウンタ装置
３３  アドレスカウンタ管理装置
３４  パフォーマンスカウンタ値保持部
３５  演算装置
３６  カウンタデータアレイ
３７  全領域カウンタ
３８  カウンタデータアレイ管理装置
４０  トレースバッファ
【図１】
2007293424.tif 000003
【図２】
2007293424.tif 000004
【図３】
2007293424.tif 000005
【図４】
2007293424.tif 000006
【図５】
2007293424.tif 000007
【図６】
2007293424.tif 000008
【図７】
2007293424.tif 000009
【図８】
2007293424.tif 000010
【図９】
2007293424.tif 000011
【図１０】
2007293424.tif 000012
【図１１】
2007293424.tif 000013
【図１２】
2007293424.tif 000014