(57)【要約】【課題】実行するプログラムの特徴にあわせて動的に記憶するイベントを決定することで、プログラム性能に影響を及ぼすイベントを効率的に記憶することができる情報処理装置を提供する。【解決手段】本発明の情報処理装置は、プログラム実行中にハードウェア内で発生したイベント信号を時系列に受信する受信手段２００と、プログラムの特徴を判断するための特徴イベントの発生回数をカウントする特徴イベントカウンタ３００と、発生回数の最も大きい特徴イベントから決定される記憶イベントの発生回数をカウントする記憶イベントカウンタ５００と、記憶イベントの発生回数のカウンタ結果を記憶する記憶手段７０とを備える。【選択図】  図３
2008186080.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを実行することによりハードウェア内で発生した１つ又は複数種のイベントを示す複数ビットのイベント信号を時系列に受信し、そのイベント信号の中から特徴イベントを抽出する特徴イベント抽出手段と、
前記プログラムを実行するアドレス信号の少なくとも一部と前記特徴イベント抽出手段から前記特徴イベントとを受信し、そのアドレス信号に対応して前記特徴イベント毎の発生回数をカウントして更新記憶すると共に、特徴とするイベントを特徴識別子として出力する特徴選択手段と、
前記イベント信号を受信し、内部記憶する複数の記憶イベント番号に基づいて前記イベント信号から複数の記憶イベント候補を選択すると共に、前記特徴識別子によって前記複数の記憶イベント候補の１つを記憶イベントとして出力する記憶イベント抽出手段と、
記憶イベント抽出手段からの前記記憶イベントと、前記少なくとも一部のアドレス信号とを受信し、そのアドレス信号に対応して前記記憶イベントの発生回数をカウントして更新記憶するイベント記憶制御手段と、
を備えることを特徴とするパフォーマンスモニタ装置。
【請求項２】
前記イベント記憶制御手段に記憶した前記記憶イベントの発生回数を所定の期間毎に外部バッファに出力することを特徴とする請求項１に記載のパフォーマンスモニタ装置。
【請求項３】
特徴イベント抽出手段は、前記イベント信号と複数の特徴イベントマスク値との論理演算によって、特徴イベントを抽出することを特徴とする請求項１に記載のパフォーマンスモニタ装置。
【請求項４】
前記特徴選択手段は、前記特徴イベント毎の発生回数をカウントする際の重み付けを設定した特徴別重付値が前記特徴イベント毎に予め設定されていることを特徴とする請求項１に記載のパフォーマンスモニタ装置。
【請求項５】
前記特徴選択手段は、前記アドレス信号に対応してカウントした前記特徴イベント毎の発生回数を記憶する特徴イベントテーブルを有し、
前記特徴イベントの信号が有効である場合、前記特徴イベントテーブルに記憶する当該特徴イベントの発生回数と対応する前記特徴別重付値とを加算して更新記憶し、前記特徴イベントの信号が有効でない場合、前記特徴イベントテーブルに記憶する当該特徴イベントの発生回数を減じて更新記憶することを特徴とする請求項４に記載のパフォーマンスモニタ装置。
【請求項６】
前記特徴別重付値が、それぞれの前記特徴イベントのストール数に基づいて決定されていることを特徴とする請求項４に記載のパフォーマンスモニタ装置。
【請求項７】
前記特徴選択手段は、前記特徴イベントテーブルの前記アドレス信号で指定された前記特徴イベント毎の発生回数の中から最大値を示す特徴イベントを前記特徴識別子として出力することを特徴とする請求項５に記載のパフォーマンスモニタ装置。
【請求項８】
前記特徴選択手段は、前記特徴イベント毎の発生回数がすべて０の場合、例外処理を示す特徴イベントを前記特徴識別子として出力することを特徴とする請求項７に記載のパフォーマンスモニタ装置。
【請求項９】
前記イベント記憶制御手段は、前記アドレス信号に対応してカウントした前記記憶イベントの発生回数を記憶する記憶イベントテーブルを有し、
前記記憶イベントの信号が有効である時、前記記憶イベントテーブルに記憶する当該記憶イベントの発生回数を更新して記憶することを特徴とする請求項１に記載のパフォーマンスモニタ装置。
【請求項１０】
前記イベント記憶制御手段は、前記記憶イベントテーブルの前記アドレス信号に対応して前記特徴識別子が設定可能になっていることを特徴とする請求項９に記載のパフォーマンスモニタ装置。
【請求項１１】
前記イベント記憶制御手段は、前記記憶イベントテーブルに前記特徴識別子が設定されている場合、当該特徴識別子を前記記憶イベント抽出手段に出力し、前記記憶イベントテーブルに前記特徴識別子が設定されていない場合、前記特徴選択手段からの前記特徴識別子を前記記憶イベントテーブルに設定し、当該特徴識別子を記憶イベント抽出手段に送信することを特徴とする請求項１０に記載のパフォーマンスモニタ装置。
【請求項１２】
請求項１に記載のパフォーマンスモニタ装置と、
前記パフォーマンスモニタ装置に対して前記アドレス信号と前記イベント信号とを送信する、演算ユニットおよび１次キャッシュメモリ装置とを内蔵するプロセッサコアとを備えることを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パフォーマンスモニタ装置および情報処理装置に関するものである。
【背景技術】
【０００２】
プログラムの性能解析などの用途に、パフォーマンスモニタ装置は広く使用されている。パフォーマンスモニタ装置は、プログラム実行中にハードウェアで発生したイベントを記憶して、性能解析の補助とするものである。しかし、プログラム実行中に発生するイベント全てを記憶することはハードウェアコストの観点から不可能であり、パフォーマンスモニタ装置の操作者が記憶するイベントを選択・設定する必要がある。そのため、設定したイベントによっては、プログラムの性能解析に関与しないイベントをも記憶することから、解析時間を増大させるという問題点があった。
【０００３】
このような問題を解決する手法として、プロセッサからの命令に対する一連の処理の際に発生するイベント群であるトランザクション単位で、操作者が記憶するイベントを選択できるパフォーマンスモニタ装置が報告されている（例えば、特許文献１参照。）。
【特許文献１】特開平１１−２７２５１９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
パフォーマンスモニタ装置では、プログラム性能の評価に大きな影響をもたらすイベントの記憶が行われることが望ましい。しかしながら、上記特許文献１で開示されている手法では、記憶するイベントをトランザクション単位で設定できるものの、トランザクションの設定によっては、プログラムの性能評価に関与しないイベントをも記憶することから、解析時間を増大させるという問題点があった。
【０００５】
また、プログラム実行中に、その性質に応じて記憶するイベントを変化させることは困難であるという問題点があった。
【０００６】
本発明は、上記従来技術の問題点を解決するためになされたものであって、プログラムの性能を効率的に解析できるパフォーマンスモニタ装置およびパフォーマンスモニタ装置を備える情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するために、本発明の実施形態に係るパフォーマンスモニタ装置は、プログラムを実行することによりハードウェア内で発生した１つ又は複数種のイベントを示す複数ビットのイベント信号を時系列に受信し、そのイベント信号の中から特徴イベントを抽出する特徴イベント抽出手段と、前記プログラムを実行するアドレス信号の少なくとも一部と前記特徴イベント抽出手段から前記特徴イベントとを受信し、そのアドレス信号に対応して前記特徴イベント毎の発生回数をカウントして更新記憶すると共に、特徴とするイベントを特徴識別子として出力する特徴選択手段と、前記イベント信号を受信し、内部記憶する複数の記憶イベント番号に基づいて前記イベント信号から複数の記憶イベント候補を選択すると共に、前記特徴識別子によって前記複数の記憶イベント候補の１つを記憶イベントとして出力する記憶イベント抽出手段と、記憶イベント抽出手段からの前記記憶イベントと、前記少なくとも一部のアドレス信号とを受信し、そのアドレス信号に対応して前記記憶イベントの発生回数をカウントして更新記憶するイベント記憶制御手段とを備えることを特徴とする。
【発明の効果】
【０００８】
本発明は、プログラムの性能を効率的に解析できるパフォーマンスモニタ装置およびパフォーマンスモニタ装置を備える情報処理装置を提供することが可能となる。
【発明を実施するための最良の形態】
【０００９】
以下、本発明の実施形態について説明する。
【００１０】
（第１の実施形態）
図１は、本発明の実施形態に係る情報処理装置を示すブロック図である。
【００１１】
この情報処理装置は、演算処理を行う演算ユニット１１と分岐予測を行う分岐ユニット１２と１次キャッシュメモリ装置１３とを内蔵するプロセッサコア１０と、データを記憶するメインメモリ３１と、メインメモリ３１のコントローラであるメモリＩ／Ｆ（インターフェース）３０と、メインメモリ３１とプロセッサコア１０の間に介在する２次キャッシュメモリ装置２０と、入力操作を行う入力装置４１と、大容量のデータを記憶する補助記憶装置４２と、入力装置４１および補助記憶装置４２を制御するＩ／ＯＩ／Ｆ（インターフェース）４０と、アドレス信号およびイベント信号を時系列に受信することによりイベントを記憶するパフォーマンスモニタ装置５０と、一定期間ごとにパフォーマンスモニタ装置５０にトリガを送信するインターバルタイマ６０と、パフォーマンスモニタ装置５０に記憶されたイベントの内容が書き出されるトレースバッファ７０とを備える。
【００１２】
なお、演算ユニット１１、分岐ユニット１２、１次キャッシュメモリ装置１３、２次キャッシュメモリ装置２０、メモリＩ／Ｆ３０、およびＩ／ＯＩ／Ｆ４０（以後、これらを纏めてイベント対象ハードウェアと呼ぶ）は、イベント発生時にアドレス信号線８０とイベント信号線９０を介してパフォーマンスモニタ装置５０にアドレス信号およびイベント信号を送信する。パフォーマンスモニタ装置５０は、アドレス信号とイベント信号を時系列に受信し、イベントサンプリングを行う。また、２次キャッシュメモリ装置２０、メモリＩ／Ｆ３０、およびＩ／ＯＩ／Ｆ４０はバス９５に接続されている。
【００１３】
アドレス信号は、プロセッサコア１０で実行しているプログラムの命令アドレスである。イベント信号は、イベント対象ハードウェア内で発生したイベントを示す。ここで、例えば、アドレス信号線８０の信号幅を３２ｂｉｔ、イベント信号線９０の信号幅を１２ｂｉｔとする。
【００１４】
図２は、イベント信号線９０に出力されるイベント信号の一例を示す。イベント信号は、１２ｂｉｔのビット列で構成され、１２個のイベントが設定される。各ビットは、Ｅｖ０、Ｅｖ１・・・Ｅｖ１１なるイベント番号が付され、各イベント番号に以下のイベントが設定される。Ｅｖ０、Ｅｖ１・・・Ｅｖ１１のそれぞれビットについて、対応するイベントが発生した場合「１」が、対応するイベントが発生していない場合「０」が設定される。
【００１５】
Ｅｖ０（命令コミット）は、命令の実行完了を示す。即ち、プロセッサにおいて命令がパイプライン処理され、すべてのステージの実行が完了したときＥｖ０は「１」となり、それ以外ではＥｖ０は「０」となる。
【００１６】
Ｅｖ１（分岐命令実行）は、分岐命令の実行が完了したとき「１」となり、それ以外では「０」となる。
【００１７】
Ｅｖ２（メモリアクセス命令実行）は、ロード命令あるいはストア命令の実行が完了したとき「１」となり、それ以外では「０」となる。
【００１８】
Ｅｖ３（分岐予測ミス）は、分岐命令における分岐予測ミスが発生したとき「１」となり、それ以外では「０」となる。
【００１９】
Ｅｖ４（条件分岐命令予測ミス）は、条件分岐命令における分岐予測ミスが発生したとき「１」となり、それ以外では「０」となる。条件分岐命令とは、命令中で指定された条件（例：指定されたレジスタの値が０のとき）に分岐する命令であり、分岐命令の一種である。
【００２０】
Ｅｖ５（間接分岐予測ミス）は、次に実行する命令のアドレスがレジスタにより指定される分岐命令において、分岐予測ミスが発生したとき「１」となり、それ以外では「０」となる。
【００２１】
Ｅｖ６（Ｌ１命令キャッシュミス）は、１次キャッシュメモリ装置１３に対して命令アクセスを行いキャッシュミスとなったとき「１」となり、それ以外では「０」となる。
【００２２】
Ｅｖ７（Ｌ１データキャッシュミス）は、１次キャッシュメモリ装置１３に対してデータアクセスを行いキャッシュミスとなったとき「１」となり、それ以外では「０」となる。
【００２３】
Ｅｖ８（Ｌ２キャッシュミス）は、２次キャッシュメモリ装置２０に対してアクセスを行いキャッシュミスとなったとき「１」となり、それ以外では「０」となる。
【００２４】
Ｅｖ９（ＩＴＬＢミス）は、命令アクセス時にＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋ−ａｓｉｄｅ  Ｂｕｆｆｅｒ）ミスが発生したとき「１」となり、それ以外では「０」となる。
【００２５】
Ｅｖ１０（ＤＴＬＢミス（Ｌｏａｄ））は、Ｌｏａｄ命令によるデータアクセス時にＴＬＢミスが発生したとき「１」となり、それ以外では「０」となる。
【００２６】
Ｅｖ１１（ＤＴＬＢミス（Ｓｔｏｒｅ））は、Ｓｔｏｒｅ命令によるデータアクセス時にＴＬＢミスが発生したとき「１」となり、それ以外では「０」となる。
【００２７】
図３は、パフォーマンスモニタ装置５０のブロック図を示す。パフォーマンスモニタ装置５０は、アドレス信号線８０からアドレス信号を受信しアドレス領域を決定するアドレスマスク１００と、イベント信号線９０からイベント信号を受信し特徴イベントを抽出する特徴イベント抽出装置２００と、アドレスマスク１００からのアドレス領域および特徴イベント抽出装置２００からの特徴イベントを受信し、それらから実行しているプログラムの特徴を選択する特徴選択装置３００と、イベント信号線９０からイベント信号を受信し内部に記憶する複数の記憶イベントの中から１種類を抽出する記憶イベント抽出装置４００と、アドレスマスク１００からのアドレス領域および特徴選択装置３００からの特徴識別子を受信して記憶イベント抽出装置４００を制御し、記憶イベントをカウントするイベント記憶制御装置５００とを備える。
【００２８】
アドレスマスク１００は、アドレス信号を受信すると、そのアドレス信号の属するアドレス領域を出力とする。アドレス領域は、例えば、上位８ｂｉｔが「１」その他の２４ｂｉｔが「０」である３２ｂｉｔのマスク用ビット列と３２ｂｉｔのアドレス信号とを論理積演算することにより得られたビット列の上位８ｂｉｔである。よって、アドレス領域は、２５６個存在する。このアドレスマスク１００から出力されるアドレス領域は、特徴選択装置３００とイベント記憶制御装置５００に供給される。ここで、アドレス領域を作成したのは、パフォーマンスモニタ装置５０の記憶イベント抽出装置４００が記憶するイベントをアドレス領域ごとに決定するからである。
【００２９】
図４は、特徴イベント抽出装置２００のブロック図の一例を示す。特徴イベント抽出装置２００は、１２ｂｉｔのイベント信号を記憶する３つのイベントレジスタ２０５Ａ〜２０５Ｃと、１２ｂｉｔの特徴イベントマスクを記憶する３つの特徴イベントマスクレジスタ２２０Ａ〜２２０Ｃと、イベントレジスタ２０５Ａ〜２０５Ｃからの１２ｂｉｔのイベント信号と特徴イベントマスクレジスタ２２０Ａ〜２２０Ｃからの１２ｂｉｔの特徴イベントマスクの対応するそれぞれのビットに対して論理積演算を行う論理積演算器２３０Ａ０〜２３０Ａ１１、２３０Ｂ０〜２３０Ｂ１１、２３０Ｃ０〜２３０Ｃ１１と、論理積演算器２３０Ａ０〜２３０Ａ１１の出力群の論理和演算を行う論理和演算器２４０Ａと、論理積演算器２３０Ｂ０〜２３０Ｂ１１の出力群の論理和演算を行う論理和演算器２４０Ｂと、論理積演算器２３０Ｃ０〜２３０Ｃ１１の出力群の論理和演算を行う論理和演算器２４０Ｃとを有する３グループの特徴イベント抽出ユニット２１０Ａ〜２１０Ｃからなる。なお、特徴イベント抽出ユニット２１０Ａ〜２１０Ｃの数は３つに限らない。
【００３０】
それぞれの特徴イベント抽出ユニット２１０Ａ〜２１０Ｃの出力（１ｂｉｔ）が、特徴イベントＣ１、Ｃ２、Ｃ３である。ここで、特徴イベント抽出装置２００の出力である特徴イベント（３ｂｉｔ）は、特徴イベントＣ１、Ｃ２、Ｃ３を結合したものである。即ち、特徴イベント抽出装置２００は、イベント信号を入力とし、プログラムの特徴を判断するための代表的なイベントである特徴イベント（３ｂｉｔ）を出力とする。
【００３１】
図５は、特徴イベントマスク２２０Ａ〜２２０Ｃの設定例を示す。操作者は、特徴イベント抽出装置２００が有する特徴イベント抽出ユニット２１０Ａ〜２１０Ｃに対して異なる特徴イベントマスク（Ｍ１、Ｍ２、Ｍ３）を予め設定できる。
【００３２】
特徴イベントマスクＭ１は、Ｅｖ３（分岐予測ミス）に対応するビットだけ「１」であり、その他のビットは「０」である。即ち、特徴イベントマスクＭ１を保持する特徴イベント抽出ユニット２１０Ａは、Ｅｖ３（分岐予測ミス）が「１」であるイベント信号を受信したときのみ特徴イベントＣ１（分岐予測ミス）を「１」と出力し、その他の場合は「０」と出力する。
【００３３】
特徴イベントマスクＭ２は、Ｅｖ６（Ｌ１命令キャッシュミス）、Ｅｖ７（Ｌ１データキャッシュミス）、Ｅｖ８（Ｌ２キャッシュミス）に対応するビットが「１」であり、その他のビットは「０」である。即ち、特徴イベントマスクＭ２を保持する特徴イベント抽出ユニット２１０Ｂは、Ｅｖ６（Ｌ１命令キャッシュミス）、Ｅｖ７（Ｌ１データキャッシュミス）、あるいはＥｖ８（Ｌ２キャッシュミス）の少なくとも１つが「１」であるイベント信号を受信したときのみ特徴イベントＣ２（キャッシュミス）を「１」と出力し、その他の場合は「０」と出力する。
【００３４】
特徴イベントマスクＭ３は、Ｅｖ９（ＩＴＬＢミス）、Ｅｖ１０（ＤＴＬＢミス（Ｌｏａｄ））、Ｅｖ１１（ＤＴＬＢミス（Ｓｔｏｒｅ））に対応するビットが「１」であり、その他のビットは「０」である。即ち、特徴イベントマスクＭ３を保持する特徴イベント抽出ユニット２１０Ｃは、Ｅｖ９（ＩＴＬＢミス）、Ｅｖ１０（ＤＴＬＢミス（Ｌｏａｄ））、Ｅｖ１１（ＤＴＬＢミス（Ｓｔｏｒｅ））の少なくとも１つが「１」であるイベント信号を受信したときのみ特徴イベントＣ３（ＴＬＢミス）を「１」と出力し、その他の場合は「０」と出力する。
【００３５】
ここで、特徴イベントＣ１は、プログラム実行中において分岐予測ミスの発生時に「１」と設定される。また、特徴イベントＣ２はプログラム実行中におけるキャッシュミスの発生時、特徴イベントマスクＣ３はプログラム実行中におけるＴＬＢミスの発生時に、それぞれ「１」と設定される。そのため、特徴イベントＣ１、Ｃ２、Ｃ３の発生回数をカウントすることにより、プログラム実行中における分岐予測ミス、キャッシュミス、ＴＬＢミスの発生頻度を調査することができる。
【００３６】
図６は、特徴選択装置３００のブロック図の一例を示す。特徴選択装置３００は、特徴イベントＣ１、Ｃ２、Ｃ３ごとに特徴別重付値を記憶する特徴別重付値レジスタ３１０と、特徴イベント抽出装置２００からの特徴イベントＣ１、Ｃ２、Ｃ３を受信し、特徴別重付値レジスタ３１０に設定された特徴別重付値に応じて特徴イベントＣ１、Ｃ２、Ｃ３の発生回数をカウントする特徴イベントカウンタ３２０と、アドレス領域ごとに、特徴イベントカウンタ３２０のカウント結果を記憶する記憶領域を有する特徴イベントテーブル３３０と、特徴イベントテーブル３３０から読み出された特徴イベントＣ１、Ｃ２、Ｃ３の値が最大の特徴イベントを特徴識別子として出力する選択回路３４０とを備える。この特徴選択装置３００により実行中のプログラムの特徴を示す特徴識別子が出力される。
【００３７】
なお、特徴別重付値レジスタ３１０に記憶される特徴別重付値は、特徴イベントの発生回数をカウントする際に加算する値である。例えば図６に示すように、特徴イベントＣ１（分岐予測ミス）の特徴別重付値は「１２」、Ｃ２（キャッシュミス）の特徴別重付値は「２０」、Ｃ３（ＴＬＢミス）の特徴別重付値は「１００」と設定される。ここで、特徴重付値は、それぞれの特徴イベントが発生したときのストール数に基づき算出されている。この場合、プログラム実行中に発生する特徴イベントＣ１（分岐予測ミス）、Ｃ２（キャッシュミス）、Ｃ３（ＴＬＢミス）それぞれのストール数の合計が特徴イベントテーブル３３０に保持される。ここで、特徴イベントテーブル３３０のあるアドレス領域に保持された特徴イベントのカウント結果（ストール数）において、特徴イベントＣ１（分岐予測ミス）のカウント結果（ストール数）が最大であれば、分岐予測ミスによる処理時間の増大が大きいという特徴を持つプログラムと判定され、選択回路３４０からの特徴識別子は、特徴イベントＣ１を示す値とされる。即ち、処理時間の増大を招くプログラムの特徴が特徴識別子に示される。この処理は、特徴イベントＣ２（キャッシュミス）、Ｃ３（ＴＬＢミス）のカウント結果が最大であった場合も同様である。
【００３８】
また、特徴重付値は、それぞれの特徴イベントＣ１（分岐予測ミス）、Ｃ２（キャッシュミス）、Ｃ３（ＴＬＢミス）が発生したときの電力消費量と設定することができる。このような設定をすることにより、プログラムの特徴として、どのようなイベントの発生による消費電力が大きいのかを判定できる。
【００３９】
図７は、記憶イベント抽出装置４００のブロック図の一例を示す。記憶イベント抽出装置４００は、４種類の特徴識別子ごとに定められた記憶イベント番号を記憶する記憶イベント番号レジスタ４１０Ａ〜４１０Ｄと、イベント信号の中から、記憶イベント番号レジスタ４１０Ａ〜４１０Ｄがそれぞれ記憶する記憶イベント番号に指定されたイベントのみを抽出して記憶イベント候補として出力するセレクタ４２０Ａ〜４２０Ｄと、特徴識別子に基づいて、セレクタ４２０Ａ〜４２０Ｄの出力のいずれかを記憶イベントとして出力する記憶イベント出力用セレクタ４３０とを備える。
【００４０】
イベント記憶制御装置５００から送信された特徴識別子および記憶イベント抽出装置４００に設定された記憶イベント番号により、イベント信号が保持する１２種類のイベントの中から４種類の記憶イベントが選択される。そして、記憶イベント抽出装置４００から出力された記憶イベント（４ｂｉｔ）は、イベント記憶制御装置５００に記憶される。
【００４１】
記憶イベント番号レジスタ４１０Ａ〜４１０Ｄの記憶イベント番号は、特徴識別子ごとに記憶イベントを指定する。なお、本発明において記憶イベント番号は４種類（４ｂｉｔ）に限られない。
【００４２】
図８は、記憶イベント番号の設定例を示す。なお、記憶イベント番号は操作者が設定するものであり、この設定例に限られるものではない。
【００４３】
特徴識別子が特徴イベントＣ０（例外処理）を示す場合は、特徴選択装置３００により、プログラムの特徴がまだ選択されていないことを意味する。そのため、汎用的なイベントを記憶するように、記憶イベント番号Ｃ０を、Ｅｖ０（命令コミット）、Ｅｖ１（分岐命令実行）、Ｅｖ２（メモリアクセス実行）、Ｅｖ３（分岐予測ミス）と設定する。
【００４４】
特徴識別子が特徴イベントＣ１（分岐予測ミス）を示す場合は、実行中のプログラムにおいて、分岐予測ミスが頻発するあるいは分岐予測ミスによる性能低下が大きいことを意味する。そこで、どの種類の分岐命令で予測ミスが発生するのかを調査するために、記憶イベント番号Ｃ１を、Ｅｖ１（分岐命令実行）、Ｅｖ３（分岐予測ミス）、Ｅｖ４（条件分岐予測ミス）、Ｅｖ５（間接分岐予測ミス）と設定する。
【００４５】
特徴識別子が特徴イベントＣ２（キャッシュミス）を示す場合は、実行中のプログラムにおいて、キャッシュミスが頻発する、あるいはキャッシュミスによる性能低下が大きいことを意味する。そこで、どの階層でキャッシュミスが発生するか、あるいはキャッシュミスが発生するのはＬｏａｄ命令かＳｔｏｒｅ命令かを調査するため、記憶イベント番号Ｃ２を、Ｅｖ２（メモリアクセス実行）、Ｅｖ６（Ｌ１命令キャッシュミス）、Ｅｖ７（Ｌ１データキャッシュミス）、Ｅｖ８（Ｌ２キャッシュミス）と設定する。
【００４６】
特徴識別子が特徴イベントＣ３（ＴＬＢミス）を示す場合は、実行中のプログラムにおいて、ＴＬＢミスが頻発する、あるいはＴＬＢミスによる性能低下が大きいことを意味する。そこで、どのＴＬＢでミスが発生するか、あるいはＴＬＢミスが発生したのはＬｏａｄ命令かＳｔｏｒｅ命令かを調査するため、記憶イベント番号Ｃ３を、Ｅｖ２（メモリアクセス実行）、Ｅｖ９（ＩＴＬＢミス）、Ｅｖ１０（ＤＴＬＢミス（Ｌｏａｄ））、Ｅｖ１１（ＤＴＬＢミス（Ｓｔｏｒｅ））と設定する。
【００４７】
上記の通り設定された記憶イベント番号Ｃ０〜Ｃ３は、記憶イベント番号レジスタ４１０Ａ〜４１０Ｄに保持される。記憶イベント番号レジスタ４１０Ａ〜４１０Ｄに保持された記憶イベント番号Ｃ０〜Ｃ３は、セレクタ４２０Ａ〜４２０Ｄの動作を制御する。
【００４８】
以下、図７に示すように、１２種類のイベントの発生の有無を示すイベント信号が例えば「１０１０００００００００」である場合の記憶イベント抽出装置４００の動作を説明する。
【００４９】
セレクタ４２０Ａは、イベント信号と記憶イベント番号Ｃ０（Ｅｖ０、Ｅｖ１、Ｅｖ２、Ｅｖ３）とを受信する。セレクタ４２０Ａは、記憶イベント番号レジスタ４１０Ａの信号によってＥｖ０、Ｅｖ１、Ｅｖ２、Ｅｖ３についてのイベントの発生の有無を示す４ｂｉｔのビット列「１０１０」を記憶イベント候補として出力する。なお、同様の処理を行い、セレクタ４２０Ｂは記憶イベント番号レジスタ４１０Ｂの信号によって「００００」を、セレクタ４２０Ｃは記憶イベント番号レジスタ４１０Ｃの信号によって「１０００」を、セレクタ４２０Ｄは記憶イベント番号レジスタ４１０Ｄの信号によって「１０００」を記憶イベント候補として出力する。
【００５０】
記憶イベント出力用セレクタ４３０は、セレクタ４２０Ａ〜４２０Ｄから出力された４つの記憶イベント候補と、イベント記憶制御装置５００が保持する特徴識別子（この例では、「Ｃ０」とする）を受信し、特徴識別子「Ｃ０」によって記憶イベント候補「１０１０」を記憶イベントとして出力する。
【００５１】
図９は、イベント記憶制御装置５００のブロック図の一例を示す。イベント記憶制御装置５００は、記憶イベント抽出装置４００から受信した記憶イベントの発生回数をカウントする記憶イベントカウンタ５１０と、記憶イベントカウンタ５１０のカウント値をアドレス領域ごとに記憶する記憶イベントテーブル５２０とを備える。記憶イベントテーブル５２０の入力は、アドレスマスク１００からのアドレス領域と特徴選択装置３００からの特徴識別子である。またイベント記憶制御装置５００は、一定期間ごとにインターバルタイマ６０からトリガを受信するたびに、記憶イベントテーブル５２０に記憶した情報をトレースバッファ７０に書き出す。
【００５２】
次に、図３および図１０を用いて、本発明の実施形態に係るパフォーマンスモニタ装置５０の動作について説明する。なお、図１０は、本発明の実施形態に係るパフォーマンスモニタ装置５０の動作を示すフローチャートである。
【００５３】
パフォーマンスモニタ装置５０を使用する前の初期設定として、操作者は特徴別重付値、特徴イベントマスク、記憶イベント番号を予め設定する（ステップＳ１０１）。また、パフォーマンスモニタ装置５０の初期動作として、特徴イベントテーブル３３０、記憶イベントテーブル５２０は初期化される（ステップＳ１０２）。即ち、特徴イベントテーブル３３０、記憶イベントテーブル５２０が保持するカウント結果は「０」とされ、記憶イベントテーブル５２０が保持する特徴識別子は「特徴イベントＣ０」を示す値とされる。
【００５４】
操作者は、所望するプログラムを起動してプログラムの実行を開始する（ステップＳ１０３）。プログラムを実行すると、図１のイベント対象ハードウェアは、イベント信号線８０とアドレス信号線９０を介してイベント信号とアドレス信号をパフォーマンスモニタ装置５０に送信する。
【００５５】
パフォーマンスモニタ装置５０は、イベント信号とアドレス信号とを受信する（ステップＳ１０４）。そしてイベント信号は、特徴イベント抽出装置２００と記憶イベント抽出装置４００に入力される。また、アドレス信号は、アドレスマスク１００に入力される。
【００５６】
アドレスマスク１００は、受信した３２ｂｉｔのアドレス信号をマスクして８ｂｉｔの属するアドレス領域を決定し、そのアドレス領域を特徴選択装置３００とイベント記憶制御装置５００に送信する（ステップＳ１０５）。また、特徴イベント抽出装置２００は、受信した１２ｂｉｔのイベント信号から３ｂｉｔの特徴イベントを抽出し、その特徴イベントを特徴選択装置３００に送信する（ステップＳ１０６）。
【００５７】
特徴選択装置３００は、アドレスマスク１００から受信した８ｂｉｔのアドレス領域と特徴イベント抽出装置２００から受信した３ｂｉｔの特徴イベントとを用いて、実行中のプログラムの特徴を選択する（ステップＳ１０７）。なお、特徴選択装置３００が実行中のプログラムの特徴を選択する方法の詳細は後述する。その後、特徴選択装置３００は、実行中のプログラムの特徴を示す特徴識別子をイベント記憶制御装置５００に送信する。
【００５８】
イベント記憶制御装置５００および記憶イベント抽出装置４００は、特徴選択装置３００から受信した特徴識別子を用いて、プログラムの特徴に対応する記憶イベントをカウントする（ステップＳ１０８）。なお、イベント記憶制御装置５００がプログラムの特徴に対応するイベントをカウントする方法の詳細は後述する。
【００５９】
ここで、アドレス信号とイベント信号を１組受信した際のパフォーマンスモニタ装置５０の動作は終了である。この後、イベント記憶制御装置５００がインターバルタイマ６０からのトリガを受信していない場合（ステップＳ１０９の無）は、アドレス信号とイベント信号を受信する度にステップＳ１０４からステップＳ１０８までの動作を繰り返し行う。
【００６０】
一方、イベント記憶制御装置５００がインターバルタイマ６０からのトリガを受信した場合（ステップＳ１０９の有）は、記憶イベントテーブル５２０の内容をトレースバッファ７０に書き出し、記憶イベントテーブル５２０の内容を初期化する（ステップＳ１１０）。
【００６１】
その後、プログラムの実行が終了していない場合（ステップＳ１１１のＮｏ）は、パフォーマンスモニタ装置５０は、アドレス信号とイベント信号を受信する度にステップＳ１０４からステップＳ１１０までの動作を繰り返し行う。一方、プログラムの実行が終了していた場合（ステップＳ１１１のＹｅｓ）は、パフォーマンスモニタ装置５０は、動作を終了する。
【００６２】
次に、図６および図１１を用いて、本発明の実施形態に係るパフォーマンスモニタ装置５０の特徴選択装置３００の動作について説明する。なお、図１１は、本発明の実施形態に係るパフォーマンスモニタ装置５０の特徴選択装置３００の動作を示すフローチャートである。
【００６３】
特徴選択装置３００は、アドレスマスク１００から受信したアドレス領域を特徴イベントテーブル３３０に供給し、特徴イベント抽出装置２００から受信した特徴イベントを特徴イベントカウンタ３２０に供給する（ステップＳ２０１）。
【００６４】
特徴イベントテーブル３３０は、２５６個のアドレス領域ごとに、それぞれの特徴イベントＣ１、Ｃ２、Ｃ３のカウント結果を記憶する記憶領域を有する。特徴イベントテーブル３３０は、アドレス領域を受信し、当該アドレス領域における特徴イベントＣ１、Ｃ２、Ｃ３のカウント値を特徴イベントカウンタ３２０に送信する。
【００６５】
特徴イベントカウンタ３２０は、８ｂｉｔの飽和カウンタで構成される。特徴イベントカウンタ３２０は、特徴イベントＣ１、Ｃ２、Ｃ３と、ステップＳ１０１で特徴別重付値レジスタ３１０に設定された特徴イベントＣ１、Ｃ２、Ｃ３に対応する特徴別重付値と、特徴イベントテーブル３３０からの特徴イベントＣ１、Ｃ２、Ｃ３に対応するカウント値とを受信する。そして、特徴イベントカウンタ３２０は、「１」の値を有する特徴イベントに対応するカウント値に、対応する特徴別重付値を加算する。一方、特徴イベントＣ１、Ｃ２、Ｃ３のうち「０」の値を有する特徴イベントのカウント値（発生回数）から「１」を減算する。なお、減算する値は「１」に限らない。特徴イベントカウンタ３２０は、上記演算結果を特徴イベントテーブル３３０に送信する。特徴イベントテーブル３３０は、同じアドレス領域に特徴イベントカウンタ３２０から受信した特徴イベントＣ１、Ｃ２、Ｃ３のカウント値を記憶して、カウント値を更新する（ステップＳ２０２）。
【００６６】
特徴イベントテーブル３３０が更新された後、当該特徴イベントＣ１、Ｃ２、Ｃ３のカウント値（発生回数）がすべて「０」でなければ（ステップＳ２０４のＹｅｓ）、選択回路３４０はカウント値（発生回数）が最大である特徴イベント（Ｃ１又はＣ２又はＣ３）を選択し、特徴識別子としてイベント記憶制御装置５００に送信して動作を終了する（ステップＳ２０５）。なお、カウント値が同じ値の場合は、その中で特徴イベント番号の小さいものから選択してよい。特徴識別子は、イベント記憶制御装置５００において記憶するイベントを指定するために用いられる。一方、特徴イベントＣ１、Ｃ２、Ｃ３のカウント値（発生回数）がすべて「０」の場合（ステップＳ２０４のＮｏ）には、選択回路３４０は例外処理を示す特徴イベント「Ｃ０」を選択し、特徴識別子としてイベント記憶制御装置５００に送信して動作を終了する（ステップＳ２０６）。
【００６７】
次に、図１２乃至図１４を用いて、ステップＳ２０２〜ステップＳ２０６について一例を挙げて説明する。ここで、特徴別重付値レジスタ３１０に設定された特徴イベントＣ１、Ｃ２、Ｃ３に対応する特徴別重付値はそれぞれ１２、２０、１００であるとする。
【００６８】
図１２に、特徴イベントテーブル３３０の保持する値を示す。アドレス領域「０ｘ１２ｘｘｘｘｘｘ」の特徴イベントＣ１、Ｃ２、Ｃ３のカウント値は、それぞれ「２０」、「３０」、「１０」であるとする。また、アドレス領域「０ｘ１３ｘｘｘｘｘｘ」の特徴イベントＣ１、Ｃ２、Ｃ３のカウント値は、それぞれ「１２」、「０」、「０」であるとする。さらにアドレス領域「０ｘ１４ｘｘｘｘｘｘ」の特徴イベントＣ１、Ｃ２、Ｃ３のカウント値は、それぞれ「０」、「１」、「０」であるとする。
【００６９】
ここで、特徴選択装置３００が、アドレスマスク１００からアドレス領域「０ｘ１２ｘｘｘｘｘｘ」と、特徴イベント抽出装置２００から特徴イベント「１００」（Ｃ１＝“１”、Ｃ２＝“０”、Ｃ３＝”０”の意味）を受信したとする。
【００７０】
特徴イベントＣ１＝“１”であることから、アドレス領域「０ｘ１２ｘｘｘｘｘｘ」の特徴イベントＣ１のカウント値「２０」と、特徴イベントＣ１の特徴別重付値「１２」とが加算され、特徴イベントＣ１のカウント値は「３２」となる。また、特徴イベントＣ２＝“０”、Ｃ３＝“０”であることから、アドレス領域「０ｘ１２ｘｘｘｘｘｘ」の特徴イベントＣ２、Ｃ３のカウント値「３０」、「１０」は、「１」ずつ減算され、それぞれ「２９」、「９」となる。その結果、図１３に示すように、特徴イベントテーブル３３０のアドレス領域「０ｘ１２ｘｘｘｘｘｘ」には更新値「３２」「２９」「９」が記憶される。
【００７１】
このとき、アドレス領域「０ｘ１２ｘｘｘｘｘｘ」において、最大のカウント値を保持する特徴イベントはＣ１であるため、選択回路３４０は特徴イベントＣ１を示す特徴識別子「Ｃ１」を出力する。
【００７２】
次に、特徴選択装置３００が、アドレスマスク１００からアドレス領域「０ｘ１４ｘｘｘｘｘｘ」と、特徴イベント抽出装置２００から特徴イベント「０００」を受信したとする。
【００７３】
アドレス領域「０ｘ１４ｘｘｘｘｘｘ」の各特徴イベントのカウント値が「０」「１」「０」で、かつ特徴イベント抽出装置２００からの特徴イベントの各ビットがすべて「０」であるため、アドレス領域「０ｘ１４ｘｘｘｘｘｘ」の特徴イベントＣ１、Ｃ２、Ｃ３のカウント値は、「１」ずつ減算され、図１４に示すように、特徴イベントテーブル３３０のアドレス領域「０ｘ１４ｘｘｘｘｘｘ」には更新値「０」、「０」、「０」が記憶される。
【００７４】
このとき、アドレス領域「０ｘ１４ｘｘｘｘｘｘ」において、特徴イベントＣ１、Ｃ２、Ｃ３のカウント値はすべて「０」であるため、選択回路３４０は例外処理として特徴イベントＣ０を示す特徴識別子「Ｃ０」を出力する。
【００７５】
ここで、特徴イベントカウンタ３２０が特徴イベントＣ１、Ｃ２、Ｃ３のカウントを行う際に、特徴イベントが「０」である場合にカウント値から「１」を減算する理由について述べる。
【００７６】
まず、特徴イベントカウンタ３２０は８ｂｉｔの飽和カウンタであるため、取りうる値は０以上２５５以下である。ここで、特徴イベントテーブル３３０は、パフォーマンスモニタ装置５０の動作開始の直後にしか「０」に初期化されない。
【００７７】
もし、特徴イベントが「０」である場合にカウント値から「１」を減算しないとすると、プログラム実行中において、特徴イベントテーブル３３０に記憶される値は加算される一方となり、いずれ飽和する（２５５の値をとる）こととなる。その結果、特徴イベントＣ１、Ｃ２、Ｃ３のカウント値が全て同じ値となり、特徴選択装置３００はプログラムの特徴を選択できない。そのため、特徴イベントカウンタ３２０が特徴イベントＣ１、Ｃ２、Ｃ３のカウントを行う際に、特徴イベントが「０」である場合にはカウント値から「１」を減算することとした。
【００７８】
また、減算する値が大きすぎると、特徴イベントイベントテーブル３３０に記憶される値が「０」ばかりとなり、同様にプログラムの特徴を選択できない。そこで、減算する値は、特徴別重付値やプログラムの特徴、飽和カウンタのビット数などを考慮して設定する必要がある。
【００７９】
次に、図７および図１５を用いて、本発明の実施形態に係るパフォーマンスモニタ装置５０のイベント記憶制御装置５００の動作について説明する。なお、図１５は、本発明の実施形態に係るパフォーマンスモニタ装置５０のイベント記憶制御装置５００の動作を示すフローチャートである。
【００８０】
イベント記憶制御装置５００は、アドレスマスク１００から受信したアドレス領域と特徴選択装置３００から受信した特徴識別子とを記憶イベントテーブル５２０に供給し、記憶イベント抽出装置４００から受信した記憶イベントを記憶イベントカウンタ５１０に供給する（ステップＳ３０１）。
【００８１】
記憶イベントテーブル５２０は、２５６個のアドレス領域ごとに、特徴識別子に対応する記憶イベント（４種類のイベント）のカウント値を記憶する記憶領域を有する。なお、特徴識別子に対応するイベントは４種類に限られない。
【００８２】
記憶イベントテーブル５２０がアドレス領域と特徴識別子を受信した際、記憶イベントテーブル５２０の当該アドレス領域に特徴識別子が初期状態であれば（ステップＳ３０２のＹｅｓ）、特徴選択装置３００から受信した特徴識別子を記憶する（ステップＳ３０３）。一方、記憶イベントテーブル５２０の当該アドレス領域に特徴識別子が初期状態でなければ（ステップＳ３０２のＮｏ）、特徴選択装置３００から受信した特徴識別子を無視する（ステップＳ３０４）。このようにすることで、記憶イベントテーブル５２０の記憶イベントのカウント結果がトレースバッファ７０に書き出される（図１０のステップS１１０）まで、記憶イベントを指定する特徴識別子は更新されることは泣く、同じ種類の記録イベントを記録しつづけることができる。その後、当該アドレス領域に保持されている特徴識別子を記憶イベント抽出装置４００に送信する。記憶イベント抽出装置４００は、上記の通りイベント記憶制御装置５００から受信した特徴識別子により記憶イベントを抽出し、イベント記憶制御装置５００に送信する（ステップＳ３０６）。
【００８３】
イベント記憶制御装置５００は、記憶イベント抽出装置４００から記憶イベントを受信し、記憶イベントカウンタ５１０に供給する。また記憶イベントテーブル５２０の受信したアドレス領域における各記憶イベントに対応するカウント値（発生回数）を記憶イベントカウンタ５１０に送信する。
【００８４】
記憶イベントカウンタ５１０は、記憶イベントと記憶イベントのカウント値とを受信すると、「１」の値を有する記憶イベントのカウント値に「１」を加算する。そして、記憶イベントカウンタ５１０は、上記演算結果を記憶イベントテーブル５２０に送信する。記憶イベントテーブル５２０は、記憶イベントカウンタ５１０から受信した上記演算結果により記憶イベントのカウント値を更新する（ステップＳ３０７）。
【００８５】
このように、本発明の実施形態に係わる情報処理装置によれば、実行するプログラムの特徴にあわせて動的に記憶するイベントを決定することで、プログラム性能に影響を及ぼすイベントを効率的に記憶することが可能となる。よって、プログラムの性能解析を効率的に行える。
【００８６】
なお、アドレスマスク１００により作成されたアドレス領域を用いて、パフォーマンスモニタ装置５０は記憶するイベントをアドレス領域ごとに決定する。このため、操作者はイベントの発生回数とともに、イベントが発生した際にプロセッサ内部で実行されていた命令のアドレスを特定することができる。よって、プログラムの性能解析を効率的に行うことができる。
【００８７】
なお、本発明は上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【００８８】
【図１】本発明の実施形態に係る情報処理装置の構成を示すブロック図。
【図２】本発明の実施形態に係るイベント信号の構成例。
【図３】本発明の実施形態に係るパフォーマンスモニタ装置５０の構成を示すブロック図。
【図４】本発明の実施形態に係る特徴イベント抽出装置２００の構成を示すブロック図。
【図５】本発明の実施形態に係る特徴イベントマスクの設定例。
【図６】本発明の実施形態に係る特徴選択装置３００の構成を示すブロック図。
【図７】本発明の実施形態に係る記憶イベント抽出装置４００の構成を示すブロック図。
【図８】本発明の実施形態に係る記憶イベント番号の設定例。
【図９】本発明の実施形態に係るイベント記憶制御装置５００の構成を示すブロック図。
【図１０】本発明の実施形態に係るパフォーマンスモニタ装置５０の動作を示すフローチャート。
【図１１】本発明の実施形態に係る特徴選択装置３００の動作を示すフローチャート。
【図１２】本発明の実施形態に係る記憶イベントテーブル５２０の保持する値と選択回路３４０の出力を示す図。
【図１３】本発明の実施形態に係る記憶イベントテーブル５２０の保持する値と選択回路３４０の出力を示す図。
【図１４】本発明の実施形態に係る記憶イベントテーブル５２０の保持する値と選択回路３４０の出力を示す図。
【図１５】本発明の実施形態に係るイベント記憶制御装置５００の動作を示すフローチャート。
【符号の説明】
【００８９】
１０  プロセッサコア
１１  演算ユニット
１２  分岐ユニット
１３  １次キャッシュメモリ装置
２０  ２次キャッシュメモリ装置
３０  メモリＩ／Ｆ
３１  メインメモリ
４０  Ｉ／ＯＩ／Ｆ
４１  入力装置
４２  補助記憶装置
５０  パフォーマンスモニタ装置
６０  インターバルタイマ
７０  トレースバッファ
１００  アドレスマスク
２００  特徴イベント抽出装置
２０５Ａ、２０５Ｂ、２０５Ｃ  イベントレジスタ
２１０Ａ、２１０Ｂ、２１０Ｃ  特徴イベント抽出ユニット
２２０Ａ、２２０Ｂ、２２０Ｃ  特徴イベントマスクレジスタ
２３０Ａ０〜２３０Ａ１１、２３０Ｂ０〜２３０Ｂ１１、２３０Ｃ０〜２３０Ｃ１１  論理積演算器
２４０Ａ、２４０Ｂ、２４０Ｃ  論理和演算器
３００  特徴選択装置
３１０  特徴別重付値レジスタ
３２０  特徴イベントカウンタ
３３０  特徴イベントテーブル
３４０  選択回路
４００  記憶イベント抽出装置
４１０Ａ、４１０Ｂ、４１０Ｃ、４１０Ｄ  記憶イベント番号レジスタ
４２０Ａ、４２０Ｂ、４２０Ｃ、４２０Ｄ  セレクタ
４３０  記憶イベント出力用セレクタ
５００  イベント記憶制御装置
５１０  記憶イベントカウンタ
５２０  記憶イベントテーブル
【図１】
2008186080.tif 000003
【図２】
2008186080.tif 000004
【図３】
2008186080.tif 000005
【図４】
2008186080.tif 000006
【図５】
2008186080.tif 000007
【図６】
2008186080.tif 000008
【図７】
2008186080.tif 000009
【図８】
2008186080.tif 000010
【図９】
2008186080.tif 000011
【図１０】
2008186080.tif 000012
【図１１】
2008186080.tif 000013
【図１２】
2008186080.tif 000014
【図１３】
2008186080.tif 000015
【図１４】
2008186080.tif 000016
【図１５】
2008186080.tif 000017