(57)【特許請求の範囲】
【請求項１】
第１のスレッド内の命令および第２のスレッド内の命令に応答するプロセッサと、
前記第１のスレッドに応答して前記プロセッサによって生成された第１のイベント・オカレンス、および前記第２のスレッドに応答して前記プロセッサによって生成された第２のイベント・オカレンスを別々に記録するパフォーマンス・モニタとを含み、
前記第１のイベント・オカレンスと前記第２のイベント・オカレンスが同じイベントの２つのオカレンスであることを特徴とする、マルチスレッド・プロセッサ内でパフォーマンスを監視するシステム。
【請求項２】
前記プロセッサと前記パフォーマンス・モニタがどちらも単一の半導体基板内に形成されることを特徴とする、請求項１に記載のシステム。
【請求項３】
前記パフォーマンス・モニタが、第１のカウンタおよび第２のカウンタを含み、かつ第１の動作モードを有し、前記パフォーマンス・モニタが前記第１の動作モードで動作しているときに、前記第１のカウンタが前記第１のイベント・オカレンスに応答して増分し、前記第２のカウンタが前記第２のイベント・オカレンスに応答して増分することを特徴とする、請求項１に記載のシステム。
【請求項４】
前記パフォーマンス・モニタが第２の動作モードを有し、前記パフォーマンス・モニタが前記第２の動作モードで動作しているときに、前記第１のカウンタが前記第１のイベント・オカレンスならびに前記第２のイベント・オカレンスに応答して増分することを特徴とする、請求項３に記載のシステム。
【請求項５】
前記プロセッサが前記第１のスレッドおよび前記第２のスレッドに応答して、複数の様々なイベントのオカレンスを生成し、前記パフォーマンス・モニタが、そのオカレンスが記録される前記複数の様々なイベントのサブセットを選択的に決定する制御装置を含むことを特徴とする、請求項１に記載のシステム。
【請求項６】
前記マルチスレッド・プロセッサが前記第１のスレッドと前記第２のスレッドを一時に１つ実行し、前記第２のスレッド内の少なくとも１つの命令が、前記第１のイベント・オカレンスの生成と、前記第１のスレッドに応答して生成された第３のイベント・オカレンスの生成との間に前記プロセッサによって実行され、前記パフォーマンス・モニタが前記第１のイベント・オカレンスと前記第３のイベント・オカレンスを一緒に記録することを特徴とする、請求項１に記載のシステム。
【請求項７】
前記プロセッサが、前記第１のスレッドが非活動状態である間に前記第１のイベント・オカレンスを生成することを特徴とする、請求項１に記載のシステム。
【請求項８】
前記パフォーマンス・モニタが、イベント・オカレンスを記録する複数のカウンタを含み、前記複数のカウンタの第１のサブセットが前記第１のスレッドに割り振られ、前記複数のカウンタの第２のサブセットが前記第２のスレッドに割り振られ、特定のイベントに対して、前記第１のサブセットに属するカウンタのみが、前記第１のスレッドが活動状態である間に生成された前記特定のイベントのオカレンスに応答して増分することができ、前記第２のサブセットに属するカウンタのみが、前記第２のスレッドが活動状態である間に生成された前記特定のイベントのオカレンスに応答して増分することができることを特徴とする、請求項１に記載のシステム。
【請求項９】
アドレス指定論理をさらに含み、前記第１のスレッドおよび前記第２のスレッドのうちの一方からの読取り要求に応答して、前記アドレス指定論理が、前記カウンタの第１のサブセットおよび前記カウンタの第２のサブセットのうち対応する一方のサブセット中の特定のカウンタに前記読取り要求をマッピングすることを特徴とする、請求項８に記載のシステム。
【請求項１０】
割込み発生回路をさらに含み、前記割込み発生回路が、前記第１のスレッドが活動状態であるときにのみ前記第１のサブセット中のカウンタの状態に応答して割込みを発生し、かつ前記第２のスレッドが活動状態であるときにのみ前記第２のサブセット中のカウンタの状態に応答して割込みを発生することを特徴とする、請求項８に記載のシステム。
【請求項１１】
マルチスレッド・プロセッサ内で、第１のスレッドおよび第２のスレッドを処理するステップと、
前記第１のスレッドを処理するステップに応答して前記マルチスレッド・プロセッサ内で第１のイベント・オカレンスを生成し、かつ前記第２のスレッドを処理するステップに応答して前記マルチスレッド・プロセッサ内で第２のイベント・オカレンスを生成するステップと、
前記第１のイベント・オカレンスおよび前記第２のイベント・オカレンスを別々に記録するステップとを含み、
前記第１のイベント・オカレンスと前記第２のイベント・オカレンスが同じイベントの２つのオカレンスであることを特徴とする、マルチスレッド・プロセッサ内でパフォーマンスを監視する方法。
【請求項１２】
前記マルチスレッド・プロセッサが、第１のカウンタおよび第２のカウンタを含むパフォーマンス・モニタを有し、前記パフォーマンス・モニタが第１の動作モードを有し、前記第１のイベント・オカレンスおよび前記第２のイベント・オカレンスを別々に記録する前記ステップが、前記第１のモードで動作している前記パフォーマンス・モニタに応答して実施され、前記記録ステップが、
前記第１のイベント・オカレンスに応答して前記第１のカウンタを増分し、かつ前記第２のイベント・オカレンスに応答して前記第２のカウンタを増分するステップを含むことを特徴とする、請求項１１に記載の方法。
【請求項１３】
前記パフォーマンス・モニタが第２の動作モードを有し、
前記パフォーマンス・モニタが前記第２のモードで動作するのに応答して、前記第１のイベント・オカレンスならびに前記第２のイベント・オカレンスに応答して前記第１のカウンタを増分するステップをさらに含むことを特徴とする、請求項１２に記載の方法。
【請求項１４】
前記マルチスレッド・プロセッサが前記第１のスレッドおよび前記第２のスレッドを処理するステップに応答して、複数の様々なイベントのオカレンスを生成し、そのオカレンスが記録される前記複数の様々なイベントのサブセットを選択的に決定するステップをさらに含むことを特徴とする、請求項１１に記載の方法。
【請求項１５】
前記マルチスレッド・プロセッサが前記第１のスレッドと前記第２のスレッドを一時に１つ実行し、前記第２のスレッド内の少なくとも１つの命令が、前記第１のイベント・オカレンスの生成と、前記第１のスレッドに応答して生成された第３のイベント・オカレンスの生成との間に前記プロセッサによって実行され、この方法が前記第１のイベント・オカレンスと前記第３のイベント・オカレンスを一緒に記録するステップをさらに含むことを特徴とする、請求項１１に記載の方法。
【請求項１６】
前記第１のイベント・オカレンスを生成する前記ステップが、前記第１のスレッドが非活動状態である間に前記第１のイベント・オカレンスを生成するステップをさらに含むことを特徴とする、請求項１１に記載の方法。
【請求項１７】
前記マルチスレッド・プロセッサが、イベント・オカレンスを記録する複数のカウンタを含み、前記複数のカウンタの第１のサブセットが前記第１のスレッドに割り振られ、前記複数のカウンタの第２のサブセットが前記第２のスレッドに割り振られ、前記第１のイベント・オカレンスおよび前記第２のイベント・オカレンスが特定のイベントの２つのオカレンスであり、前記第１のイベント・オカレンスおよび前記第２のイベント・オカレンスを別々に記録する前記ステップが、
前記第１のスレッドが活動状態である間に生成された前記特定のイベントのオカレンスに応答して、前記第１のサブセットに属するカウンタを増分するステップと、
前記第２のスレッドが活動状態である間に生成された前記特定のイベントのオカレンスに応答して、前記第２のサブセットに属するカウンタを増分するステップとを含むことを特徴とする、請求項１１に記載の方法。
【請求項１８】
前記第１のスレッドおよび前記第２のスレッドの１つによる読取り要求に応答して、前記カウンタの第１のサブセットおよび前記カウンタの第２のサブセットのうちの対応する一方のサブセット中の特定のカウンタに前記読取り要求をマッピングするステップをさらに含むことを特徴とする、請求項１７に記載の方法。
【請求項１９】
前記第１のスレッドが活動状態であるときにのみ前記第１のサブセット中のカウンタの状態に応答して割込みを発生し、かつ前記第２のスレッドが活動状態であるときにのみ前記第２のサブセット中のカウンタの状態に応答して割込みを発生することを特徴とする、請求項１７に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般にデータ処理、特にデータ処理システム内でパフォーマンスを監視する方法に関する。さらに詳細には、本発明は、マルチスレッド・プロセッサ内でパフォーマンスをスレッド単位で監視する方法に関する。
【０００２】
【従来の技術】
プロセッサから最適なパフォーマンスを引き出すために、ハードウェアおよびソフトウェア・エンジニアは、プロセッサの動的挙動を検出し、分析する。過去には、そのようなプロセッサ分析において有用なプロセッサ状態のほとんどは、外部装置からアクセスすることができた。例えば、低い集積レベルでは、大部分の機械状態、バス・トランザクション、および他の有用な信号が、モジュール相互接続、エッジ・コネクタ、およびチップ・バックプレーン上で検出することができた。したがって、プロセッサ・パフォーマンス分析に使用するためにデータを容易に収集し、事後に処理することができた。
【０００３】
しかしながら、集積レベルが高まり、それによりプロセッサ状態が外部装置からアクセスすることができなくなるにつれて、ハードウェアならびにソフトウェアを最適化するために必要な実験データを収集するためにプロセッサ内にパフォーマンス監視回路を組み込むことが必要になってきた。オンボード・パフォーマンス・モニタは、一般に、プロセッサ・サイクル、実行された命令、キャッシュ・ミスなど、プロセッサ・パフォーマンスを示す選択されたイベントのオカレンスをそれぞれカウントする１つまたは複数のカウンタを含んでいる。現在入手できるパフォーマンス・モニタは、従来のプロセッサの動的挙動を分析するのに十分なデータを提供することができるが、単一のカウンタを使用して、選択されたイベントのすべてのオカレンスを記録する従来のパフォーマンス・モニタは、複数の並行スレッドにハードウェア・サポートを提供するマルチスレッド・プロセッサに十分なパフォーマンス・データを提供することができない。例えば、従来のパフォーマンス・モニタは、各スレッドに起因するキャッシュ・ミスの数、または有意義な数のサイクルにわたって各スレッドによって使用されるプロセッサ・サイクルの数を示す情報を提供することができない。
【０００４】
したがって、プロセッサ内の複数の各スレッドを独立して監視するハードウェア・パフォーマンス・モニタを含むマルチスレッド・プロセッサを提供することが望ましい。
【０００５】
【発明が解決しようとする課題】
したがって、本発明の一目的は、改善されたデータ処理の方法およびシステムを提供することである。
【０００６】
本発明の他の目的は、データ処理システム内でパフォーマンスを監視する改善された方法およびシステムを提供することである。
【０００７】
本発明の他の目的は、マルチスレッド・プロセッサ内でパフォーマンスをスレッド単位で監視する方法およびシステムを提供することである。
【０００８】
【課題を解決するための手段】
上記の目的は、以下で説明するようにして達成される。マルチスレッド・プロセッサ内でパフォーマンスを監視する方法およびシステムが提供される。このシステムは、第１のスレッド内の命令および第２のスレッド内の命令に応答するプロセッサと、第１のスレッドに応答してプロセッサによって生成された第１のイベント、および第２のスレッドに応答してプロセッサによって生成された第２のイベントを別々に記録するパフォーマンス・モニタとを含んでいる。一実施形態では、プロセッサは、第１の動作モードおよび第２の動作モードを含んでいる。この実施形態では、パフォーマンス・モニタが第１のモードで動作しているとき、パフォーマンス・モニタ内の第１のカウンタは、第１のイベントの各オカレンスに応答して増分し、パフォーマンス・モニタ内の第２のカウンタは、第２のイベントの各オカレンスに応答して増分する。あるいは、パフォーマンス・モニタが第２のモードで動作しているとき、第１のカウンタは、第１のイベントの各オカレンスおよび第２のイベントの各オカレンスに応答して増分する。
【０００９】
【発明の実施の形態】
次に、図面、特に図１を参照すると、首記の請求の範囲に記載されている本発明によるデータ処理システムの例示的な実施形態のブロック図が示されている。記載の例示的な実施形態では、データ処理回路ならびにオンボード・パフォーマンス・モニタ５０を含んでいるプロセッサ１０は、単一の集積回路スーパスカラ・マイクロプロセッサを含んでいる。したがって、以下で詳細に論じるように、様々な実行ユニット、レジスタ、バッファ、メモリ、およびプロセッサ１０の他の機能ユニットはすべて集積回路によって形成される。プロセッサ１０は、インターナショナル・ビジネス・マシーンズ・コーポレイションから市販されている縮小命令セット・コンピューティング（ＲＩＳＣ）プロセッサのラインの１つを含んでいることが好ましい。ただし、他の適切なプロセッサを代わりに使用して、本発明を実施することができることが当業者には以下の説明から理解できよう。
【００１０】
図１に示すように、プロセッサ１０は、バス・インタフェース・ユニット（ＢＩＵ）１２を介してシステム・バス１１に結合される。バス・インタフェース・ユニット１２は、バス・アービトレーションに関与することによって、プロセッサ１０と、システム・バス１１に結合された主メモリ５２および不揮発性大容量記憶装置５４など、他のデバイスとの間の情報の転送を制御する。図１に示すデータ処理システムは、システム・バス１１に結合された図示されていない他のデバイスを含んでいることが好ましい。これらは、以下の説明の理解にとって不要であり、したがって説明を簡潔にするために省略する。
【００１１】
ＢＩＵ１２は、メモリ管理ユニット１４（ＭＭＵ）に接続される。メモリ管理ユニット１４は、プロセッサ１０のメモリ階層の様々な構成要素内に記憶されたデータおよび命令へのプロセッサ１０によるアクセスを管理する。例示的な実施形態では、プロセッサ１０のメモリ階層は、不揮発性大容量記憶装置５４および主メモリ５２だけでなく、統一レベル２（Ｌ２）キャッシュ５６を含んでいる。Ｌ２キャッシュ５６には、Ｌ２キャッシュ・インタフェース５８、レベル１（Ｌ１）命令キャッシュ１４、およびＬ１データ・キャッシュ１６を介してアクセスする。したがって、ＭＭＵ１４の管理機能には、例えば、トランスレーション・ルックアサイド・バッファ（ＴＬＢ、変換索引緩衝機構）１３を使用して、論理対実アドレス変換を実施すること、記憶制御（ＳＣ）回路２３を使用して、Ｌ１データ・キャッシュ１６およびＬ２キャッシュ５６内のデータにアクセスすること、ライン・バッファ（ＬＢ）１５とＢＩＵ１２の間でデータのラインを転送することが含まれる。当業者なら理解できるように、速度が徐々に高くなるメモリ内でデータおよび命令をこのような形でステージングすることにより、プロセッサ１０は、より高いレベルのメモリ階層内に記憶されたデータに比較的速いアクセスを行うことができ、したがってデータ処理システムの全体的なパフォーマンスが向上する。
【００１２】
Ｌ１命令キャッシュ１４はさらに、順次バッファ１７、スレッド・スイッチ・バッファ１８、分岐バッファ１９、および分岐ユニット２０に結合される。これらは、ディスパッチ・ユニット２１とともに、プロセッサ１０の命令ユニット（ＩＵ）論理パーティション２５を形成する。ＩＵ２５は、プロセッサ１０の浮動小数点（ＦＰ）論理パーティション２６および固定小数点（ＦＸ）論理パーティション３０内の複数の可能な並行ハードウェア・スレッドのうちの１つの実行を制御する。本発明の開示では、「ハードウェア・スレッド」または単に「スレッド」なる語は、その状態がプロセッサ・ハードウェア内で他の１つまたは複数のハードウェア・スレッドのそれと同時に維持され、かつその実行がプロセッサ・ハードウェアによって支配される（他の並行スレッドと同じプログラムに属することもあり、属しないこともある）命令のグループを表すために使用する。したがって、プロセッサ１０によってサポートされる密マルチスレッディングは、多数の現況技術のオペレーティング・システムによってサポートされるソフトウェア管理マルチタスキングと異なることが当業者には明らかであろう。さらに、以下では、プロセッサ１０については、２つの並行スレッド（すなわち、活動スレッドと非活動スレッド）のみをサポートするものとして説明するが、本発明は、追加の活動スレッドおよび非活動スレッドをサポートするマルチスレッド・プロセッサにも同じく適用できることを理解されたい。
【００１３】
動作に際して、順次バッファ１７は、命令をＬ１命令キャッシュ１４から活動スレッド内にフェッチし、それらの命令を一時的にバッファする。順次バッファ１７は、フェッチした命令を受け取った順にディスパッチ・ユニット２１に送る。ディスパッチ・ユニット２１は、各命令を一部復号し、その後分岐命令を分岐処理ユニット（ＢＰＵ）２０に送り、順次命令を実行のためにＦＰ２６およびＦＸ３０のうちの適切な１つに送る。分岐命令の受取りに応答して、分岐ユニット２０は、分岐がとられた場合に実行が続行されるターゲット・アドレスを決定し、ターゲット・アドレスをＬ１命令キャッシュ１４に供給する。順次実行パス内の命令をまだ順次バッファ１７に供給している間に、Ｌ１命令キャッシュ１４は、ターゲット・アドレスに応答して、ターゲット実行パス内の命令を分岐バッファ１９にロードする。その結果、分岐がその後とられるものと決定された場合、分岐バッファ１９は、ターゲット実行パス内の命令を待ち時間なしでディスパッチ・ユニット２１に供給することができる。その後、順次バッファ１７は、命令を新しい実行パス内にフェッチし始める。
【００１４】
ＩＵ２５は、同様にしてスレッド・スイッチを実施する。スレッド・スイッチ・バッファ１８は、実行すべき次の命令を非活動スレッド内にフェッチし、バッファする。選択されたイベント、例えば、活動スレッドに対するＬ２キャッシュ・ミスまたはＴＬＢミスのオカレンスに応答して、非活動スレッドが、活動スレッドに指定され、スレッド・スイッチ・バッファ１８内の命令が、分岐バッファ１９内に転送される。次いで、ディスパッチ・ユニット２１は、新たに活動状態になったスレッドからの命令をＢＰＵ２０、ＦＰ２６、およびＦＸ３０に送達し始める。一方、順次バッファ１７は、命令を新たに活動状態になったスレッド内にフェッチし始め、スレッド・スイッチ・バッファ１８は、命令を非活動状態になったスレッド内にフェッチし始める。
【００１５】
次に、ＦＰ２６およびＦＸ３０を参照すると、分岐ユニット２０の他に、プロセッサ１０の実行回路は、倍精度浮動小数点ユニット（ＦＰＵ）２７、ロード・ストア・ユニット（ＬＳＵ）３２、単複整数ユニット３４、および単整数ユニット３６を含んでいる。各実行ユニット２７、３２、３４、および３６は、各プロセッサ・サイクル中に関連するタイプの１つまたは複数の順次命令のうちの１つまたは複数の命令を実行することができる。例えば、単整数ユニット３６は、固定小数点算術演算（例えば、加算および減算）を実行し、指定された整数レジスタ３８からロードされたソース・オペランドを使用して、演算を比較する。固定小数点命令を実行した後、単整数ユニット３６は、命令の結果データを１つまたは複数の指定された整数レジスタ３８内に記憶する。同様に、倍精度ＦＰＵ２７は、浮動小数点乗算や除算など、倍精度浮動小数点算術演算および論理演算を浮動小数点レジスタ（ＦＰＲ）２８からロードされたソース・オペランドに対して実行し、結果データを指定されたＦＰＲ２８内に記憶する。プロセッサ１０の各順次命令実行ユニットは、パイプラインを使用して、プロセッサ１０のスーパスカラ・アーキテクチャのパフォーマンスをさらに向上させる。図示のように、各ＦＰＲ２８および整数レジスタ３８は、複数の複製レジスタ・セットまたは「ウェイ」を有する。これらは、プロセッサ１０によってサポートされる複数の並行スレッドの各スレッドにそれぞれ関連する。
【００１６】
本発明によれば、プロセッサ１０は、以下で詳細に説明するように、プロセッサ１０によってサポートされる複数の各並行スレッドごとに独立したパフォーマンス監視をサポートするパフォーマンス・モニタ５０を含んでいる。図示のように、パフォーマンス・モニタ５０は、ＩＵ２５、ＦＰ２６、ＦＸ３０、ＳＣ２３、ＢＩＵ１２、およびＬ２キャッシュ・インタフェース５８の動作によって生成されたイベント・オカレンスを入力として受け取る。パフォーマンス・モニタ５０によって受け取られた多数のイベント・オカレンスの中から選択されたイベント・オカレンスが、パフォーマンス・モニタ５０内のソフトウェア読取り可能／書込み可能パフォーマンス・モニタ・カウンタ（ＰＭＣ）内に記録される。ＰＭＣ「アドレス」を指定するアーキテクチャ定義命令の実行に応答して、パフォーマンス・モニタ５０は、例えば、指定されたＰＭＣの値を整数レジスタ３８の選択された１つに記憶することによって、指定されたＰＭＣの値を出力する。パフォーマンス・モニタ５０はまた、ＰＭＣの１つのオーバフローに応答してアサートされるパフォーマンス・モニタ割込み出力を有する。
【００１７】
本発明の重要な一態様によれば、パフォーマンス・モニタ５０は、次の２つの動作モードを有する。（１）同じイベントのオカレンスがすべて同じスレッドを処理するステップに応答して生成されてもされなくてもオカレンスがすべて一緒に記録されるグローバル・モード、（２）各スレッドに関連するイベントのオカレンスが別々に記録されるマルチスレッド・モード。
【００１８】
次に、図２を参照すると、グローバル・モードで動作しているときのパフォーマンス・モニタ５０の概念図が示されている。図示のように、グローバル・モードでは、プロセッサ１０のすべての論理パーティションによって生成されたイベント・オカレンスが、マルチプレクサ８２内に入力される。次いで、マルチプレクサ８２は、選択入力８６に応答して、イベント・オカレンスをＰＭＣ８４のうちの特定のカウンタに送る。選択入力８６は、ソフトウェア・アクセス可能制御レジスタ８０内のビット・フィールドの設定に応答して生成される。制御レジスタ８０内のビット・フィールドは、イベント・オカレンス、各ＰＭＣ８４のレコードがあればそれを指定するだけでなく、パフォーマンス・モニタ５０が動作するモード（グローバル・モードまたはマルチスレッド・モード）および各ＰＭＣ８４ごとにカウントをいつ可能にし、またいつ不能にするかを指定する。イベント・オカレンスの受取りに応答して、可能になったＰＭＣが増分する。図２に示すように、いずれかのＰＭＣ８４のビット０が１にセットされた場合、パフォーマンス・モニタ割込みがＯＲゲート８８によって生成される。
【００１９】
次に、図３を参照すると、マルチスレッド・モードで動作しているときのパフォーマンス・モニタ５０の概念図が示されている。図示の例示的な実施形態では、プロセッサ１０は、それぞれＰＭＣ８４の半分に割り振られた最大２つの並行スレッドをサポートする。したがって、参照番号８４ａによって識別されたＰＭＣ１〜ＰＭＣ４が、スレッド０に割り振られ、参照番号８４ｂによって識別されたＰＭＣ５〜ＰＭＣ８が、スレッド１に割り振られる。図示のように、選択入力８６ａに応答して、イベント・オカレンスがマルチプレクサ８２ａによってＰＭＣ１〜ＰＭＣ４に送られ、選択入力８６ｂに応答して、イベント・オカレンスがマルチプレクサ８２ｂによってＰＭＣ５〜ＰＭＣ８に送られる。選択入力８６ａおよび選択入力８６ｂは、図２に関して上述したようにして制御レジスタ８０内のビット・フィールドの値に応答して生成される。
【００２０】
パフォーマンス・モニタ５０がグローバル・モードで動作している場合とは異なり、パフォーマンス・モニタ５０がマルチスレッド・モードで動作している場合は、イベント・オカレンスがすべて同様に処理されるわけではない。そうではなく、イベント・オカレンスは、そのイベント・オカレンスが属するイベント・グループに依存する形で処理される。第１のグループのイベントは、活動スレッドのみに関連するイベントを含んでいる。これらのイベントのオカレンスは、ＩＵ２５、ＦＸ３０、およびＦＰ２６によって生成され、次のものを含んでいる。
（１）完了した命令
（２）プロセッサ・サイクル
（３）記憶装置待ち時間のサイクル
（４）分岐データ
（５）データ依存度
（６）不整合アクセス
（７）Ｌ１命令キャッシュ・ミス・カウント
（８）浮動小数点演算
（９）スレッド・スイッチ・カウント
【００２１】
第２のグループのイベントは、活動スレッドまたは非活動スレッドに関連するイベントである。これらのイベントのオカレンスは、ＳＣ２３によって生成され、次のものを含んでいる。
（１）合計カウント、待ち時間、ミス・タイプなど、Ｌ１データ・キャッシュ・ミス・イベント
（２）変換ミス・イベント（例えば、ＴＬＢミス・イベント）
（３）Ｌ２キャッシュ・ミス・イベント
【００２２】
第３の（最後の）グループのイベントは、特定のスレッドに関連しないイベントである。これらのイベントのオカレンスは、ＢＩＵ１２、ＬＢ１５、またはＬ２キャッシュ・インタフェース５８によって生成され、次のものを含んでいる。
（１）Ｌ２キャッシュ・ライン遷移
（２）Ｌ２キャッシュ・キャストアウト
（３）Ｌ２キャッシュ・スヌープ・カウント
（４）ライン・バッファ使用
（５）システム・バス使用率
（６）システム・バス再試行
【００２３】
図３に示すように、第１のイベント・グループ内のイベント・オカレンスは、ＡＮＤゲート１００および１０２によって入力として受け取られる。第１のイベント・グループ内のイベント・オカレンスは、スレッド０が活動状態の場合にのみマルチプレクサ８２ａに入力され、スレッド１が活動状態の場合にのみマルチプレクサ８２６に入力される。第１のイベント・グループに属するイベント・オカレンスと異なり、第２のグループ内のイベントは、上述のように例示的な実施形態ではＭＭＵ１４内のＳＣ２３によって生成され、イベント・オカレンスに関連するスレッドが活動スレッドであるか、それとも非活動スレッドであるかに関わらず、可能な選択のためにマルチプレクサ８２ａと２ｂの適切な一方に送られる。第３のイベント・グループに属するイベント・オカレンスは、可能な選択のためにマルチプレクサ８２ａと８２ｂの両方に送られる。
【００２４】
次に、図４を参照すると、パフォーマンス・モニタ５０がイベント・オカレンスを処理する方法をそれぞれグローバル動作モードおよびマルチスレッド動作モードについて要約した論理流れ図が示されている。図示のように、プロセスは、ブロック１７０から始まり、その後ブロック１７２に進む。ブロック１７２では、パフォーマンス・モニタ５０がマルチスレッド・モードで動作しているか否か判定する。パフォーマンス・モニタ５０がマルチスレッド・モードで動作しているのではなく、グローバル・モードで動作しているとの判定に応答して、プロセスはブロック１７４に進む。ブロック１７４では、マルチプレクサ８２が選択入力８６によって選択されたイベント・オカレンスをＰＭＣ８４の適切な１つに送る。上述のように、様々なスレッドによって生成された同じイベントのオカレンスは、ＰＭＣ８４内でマージされ、単一のイベント・カウントが各選択されたイベントごとに維持される。
【００２５】
再びブロック１７２を参照すると、パフォーマンス・モニタ５０がマルチスレッド・モードで動作しているとの判定に応答して、プロセスはブロック１７６に進む。ブロック１７６では、検出されたイベント・オカレンスがＩＵ２５、ＦＸ３０、またはＦＰ２６によって生成されたか否か（すなわち、イベント・オカレンスが第１のイベント・グループに属するかどうか）判定する。検出されたイベント・オカレンスがＩＵ２５、ＦＸ３０、またはＦＰ２６によって生成された場合、ブロック１７８で、スレッド０が活動スレッドであるか否かを判定する。スレッド０が活動スレッドである場合、プロセスはブロック１８０に進む。ブロック１８０では、イベント・オカレンスが選択された場合、それがＰＭＣ１〜ＰＭＣ４の適切な１つに送られる。しかし、スレッド１が活動スレッドであるとの判定に応答して、プロセスはブロック１７８からブロック１８２に進む。ブロック１８２では、イベント・オカレンスが選択された場合、それがＰＭＣ５〜ＰＭＣ８の適切な１つに送られる。
【００２６】
ブロック１７６に戻ると、検出されたイベント・オカレンスがＩＵ２５、ＦＸ３０、またはＦＰ２６によって生成されなかったとの判定に応答して、プロセスはブロック１８４に進む。ブロック１８４は、イベント・オカレンスがＳＣ２３によって生成されたか否かを判定する。イベント・オカレンスがＳＣ２３によって生成された場合、プロセスはブロック１８４からブロック１８６に進む。ブロック１８６で、イベント・オカレンスがスレッド０またはスレッド１を処理するステップに応答して生成されたと判定する。イベント・オカレンスがスレッド０を処理するステップに応答して生成されたとの判定に応答して、プロセスはブロック１８８に進む。ブロック１８８では、イベント・オカレンスが選択された場合、イベント・オカレンスがＰＭＣ１〜ＰＭＣ４の１つに送られる。あるいは、イベント・オカレンスがスレッド１を処理するステップに応答して生成されたとのブロック１８６での判定に応答して、プロセスはブロック１９０に進む。ブロック１９０では、イベント・オカレンスが選択された場合、イベント・オカレンスをＰＭＣ５〜ＰＭＣ８の１つに送る。
【００２７】
再びブロック１８４を参照すると、イベント・オカレンスがＳＣ２３によって生成されたとの判定に応答して、プロセスはブロック１９２に進む。ブロック１９２では、イベント・オカレンスがＢＩＵ１２、ＬＢ１５、またはＬ２キャッシュ・インタフェース５８によって生成されたと判定する。この判定に応答して、イベント・オカレンスが選択された場合、イベント・オカレンスがＰＭＣ１〜ＰＭＣ８の適切な１つに送られる。
【００２８】
次いで、図５を参照すると、パフォーマンス・モニタ５０の割込み挙動を要約した論理流れ図が示されている。図示のように、プロセスは、ブロック１３０から始まり、その後ブロック１３２に進む。ブロック１３２では、パフォーマンス・モニタ５０がマルチスレッド・モードで動作しているか否か判定する。ブロック１３２での判定は、例えば、制御レジスタ８０内の所定のビット・フィールドの値を検査することによって行われる。パフォーマンス・モニタ５０がマルチスレッド・モードで動作しているのではなく、グローバル・モードで動作しているとの判定に応答して、プロセスはブロック１３４に進む。ブロック１３４では、いずれかのＰＭＣ１〜ＰＭＣ８のビット０が値１を有するか否か判定する。いずれかのＰＭＣ１〜ＰＭＣ８のビット０が値１を有していない場合、プロセスはブロック１３２に戻る。しかし、少なくとも１つのＰＭＣ８４のビット０が１にセットされているとの判定に応答して、図５のブロック１５０でパフォーマンス・モニタ割込みが発生される。
【００２９】
グローバル・モードとは異なり、パフォーマンス・モニタ５０がマルチスレッド・モードで動作している場合は、活動スレッドに関連する割込みのみがソフトウェアに与えられる。したがって、図５のブロック１３６および１３８を参照すると、スレッド０が活動状態の場合、ＰＭＣ８４ａに関連する割込みのみが与えられる。ＰＭＣ８４ｂに関連する割込みは、スレッド１が再び活動状態になるまで保管される。あるいは、ブロック１４０および１５０に示すように、スレッド１が活動状態の場合、ＰＭＣ８４ｂに関連する割込みがソフトウェアに与えられ、ＰＭＣ８４ａに関連する割込みは、スレッド０が再び活動状態になるまで保管される。図３において、この割込み挙動は、ＯＲゲート１０４および１０８およびＡＮＤゲート１０６および１１０によって実施される。
【００３０】
次いで、図６を参照すると、パフォーマンス・モニタ５０内のＰＭＣ１〜ＰＭＣ８にアクセスする方法を要約した論理流れ図が示されている。図示のように、プロセスは、ＬＳＵ３２が、読み取るべき特定のＰＭＣを指定する命令をディスパッチ・ユニット２１から受け取ったことに応答して、ブロック２００から始まる。この命令に応答して、ＬＳＵ３２は、ＰＭＣ数をパフォーマンス・モニタ５０に与える。ＰＭＣ数は、ブロック２０２で、パフォーマンス・モニタ５０がマルチスレッド・モードで動作しているか、それともグローバル・モードで動作しているかを判定する。ブロック２０４でパフォーマンス・モニタ５０がグローバル・モードで動作しているとの判定に応答して、パフォーマンス・モニタ５０は、指定されたＰＭＣの値を整数レジスタ３８の指定された１つに出力する。
【００３１】
再びブロック２０２を参照すると、パフォーマンス・モニタ５０がマルチスレッド・モードで動作しているとの判定に応答して、プロセスはブロック２０６に進む。ブロック２０６では、スレッド０またはスレッド１が活動スレッドであるか否か判定する。スレッド１が活動スレッドである場合、１〜４の有効範囲を有する指定されたＰＭＣアドレスが、ブロック２０８で、ＰＭＣ５〜ＰＭＣ８のそれぞれ１つにマッピングされる。あるいは、スレッド０が活動スレッドである場合、指定されたＰＭＣアドレスは、ブロック２１０で、各ＰＭＣ１〜ＰＭＣ４の対応する１つにアクセスするために使用される。図３に示すように、このＰＭＣアドレス・マッピングは、論理９０をアドレス指定することによって実施される。
【００３２】
上述のように、本発明は、第１のモードで動作しているときに複数の並行スレッドのパフォーマンスを個々に監視することができるパフォーマンス・モニタを含むマルチスレッド・プロセッサを提供する。さらに、パフォーマンス・モニタは、プロセッサによって生成されたすべてのイベント・オカレンスを集合的に監視する第２のモードで動作するようにソフトウェアによって構成することができる。
【００３３】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００３４】
（１）第１のスレッド内の命令および第２のスレッド内の命令に応答するプロセッサと、
前記第１のスレッドに応答して前記プロセッサによって生成された第１のイベント・オカレンス、および前記第２のスレッドに応答して前記プロセッサによって生成された第２のイベント・オカレンスを別々に記録するパフォーマンス・モニタとを含む、マルチスレッド・プロセッサ内でパフォーマンスを監視するシステム。
（２）前記プロセッサと前記パフォーマンス・モニタがどちらも単一の半導体基板内に形成されることを特徴とする、上記（１）に記載のシステム。
（３）前記パフォーマンス・モニタが、第１のカウンタおよび第２のカウンタを含み、かつ第１の動作モードを有し、前記パフォーマンス・モニタが前記第１の動作モードで動作しているときに、前記第１のカウンタが前記第１のイベント・オカレンスに応答して増分し、前記第２のカウンタが前記第２のイベント・オカレンスに応答して増分することを特徴とする、上記（１）に記載のシステム。
（４）前記第１のイベント・オカレンスと前記第２のイベント・オカレンスが同じイベントの２つのオカレンスであることを特徴とする、上記（３）に記載のシステム。
（５）前記パフォーマンス・モニタが第２の動作モードを有し、前記パフォーマンス・モニタが前記第２の動作モードで動作しているときに、前記第１のカウンタが前記第１のイベント・オカレンスならびに前記第２のイベント・オカレンスに応答して増分することを特徴とする、上記（３）に記載のシステム。
（６）前記プロセッサが前記第１のスレッドおよび前記第２のスレッドに応答して、複数の様々なイベントのオカレンスを生成し、前記パフォーマンス・モニタが、そのオカレンスが記録される前記複数の様々なイベントのサブセットを選択的に決定する制御装置を含むことを特徴とする、上記（１）に記載のシステム。
（７）前記マルチスレッド・プロセッサが前記第１のスレッドと前記第２のスレッドを一時に１つ実行し、前記第２のスレッド内の少なくとも１つの命令が、前記第１のイベント・オカレンスの生成と、前記第１のスレッドに応答して生成された第３のイベント・オカレンスの生成との間に前記プロセッサによって実行され、前記パフォーマンス・モニタが前記第１のイベント・オカレンスと前記第３のイベント・オカレンスを一緒に記録することを特徴とする、上記（１）に記載のシステム。
（８）前記プロセッサが、前記第１のスレッドが非活動状態である間に前記第１のイベント・オカレンスを生成することを特徴とする、上記（１）に記載のシステム。
（９）前記パフォーマンス・モニタが、イベント・オカレンスを記録する複数のカウンタを含み、前記複数のカウンタの第１のサブセットが前記第１のスレッドに割り振られ、前記複数のカウンタの第２のサブセットが前記第２のスレッドに割り振られ、特定のイベントに対して、前記第１のサブセットに属するカウンタのみが、前記第１のスレッドが活動状態である間に生成された前記特定のイベントのオカレンスに応答して増分することができ、前記第２のサブセットに属するカウンタのみが、前記第２のスレッドが活動状態である間に生成された前記特定のイベントのオカレンスに応答して増分することができることを特徴とする、上記（１）に記載のシステム。
（１０）アドレス指定論理をさらに含み、前記第１のスレッドおよび前記第２のスレッドのうちの一方からの読取り要求に応答して、前記アドレス指定論理が、前記カウンタの第１のサブセットおよび前記カウンタの第２のサブセットのうち対応する一方のサブセット中の特定のカウンタに前記読取り要求をマッピングすることを特徴とする、上記（９）に記載のシステム。
（１１）割込み発生回路をさらに含み、前記割込み発生回路が、前記第１のスレッドが活動状態であるときにのみ前記第１のサブセット中のカウンタの状態に応答して割込みを発生し、かつ前記第２のスレッドが活動状態であるときにのみ前記第２のサブセット中のカウンタの状態に応答して割込みを発生することを特徴とする、上記（９）に記載のシステム。
（１２）マルチスレッド・プロセッサ内で、第１のスレッドおよび第２のスレッドを処理するステップと、
前記第１のスレッドを処理するステップに応答して前記マルチスレッド・プロセッサ内で第１のイベント・オカレンスを生成し、かつ前記第２のスレッドを処理するステップに応答して前記マルチスレッド・プロセッサ内で第２のイベント・オカレンスを生成するステップと、
前記第１のイベント・オカレンスおよび前記第２のイベント・オカレンスを別々に記録するステップとを含む、マルチスレッド・プロセッサ内でパフォーマンスを監視する方法。
（１３）前記マルチスレッド・プロセッサが、第１のカウンタおよび第２のカウンタを含むパフォーマンス・モニタを有し、前記パフォーマンス・モニタが第１の動作モードを有し、前記第１のイベント・オカレンスおよび前記第２のイベント・オカレンスを別々に記録する前記ステップが、前記第１のモードで動作している前記パフォーマンス・モニタに応答して実施され、前記記録ステップが、
前記第１のイベント・オカレンスに応答して前記第１のカウンタを増分し、かつ前記第２のイベント・オカレンスに応答して前記第２のカウンタを増分するステップを含むことを特徴とする、上記（１２）に記載の方法。
（１４）前記第１のイベント・オカレンスと前記第２のイベント・オカレンスが同じイベントの２つのオカレンスであることを特徴とする、上記（１３）に記載の方法。
（１５）前記パフォーマンス・モニタが第２の動作モードを有し、
前記パフォーマンス・モニタが前記第２のモードで動作するのに応答して、前記第１のイベント・オカレンスならびに前記第２のイベント・オカレンスに応答して前記第１のカウンタを増分するステップをさらに含むことを特徴とする、上記（１４）に記載の方法。
（１６）前記マルチスレッド・プロセッサが前記第１のスレッドおよび前記第２のスレッドを処理するステップに応答して、複数の様々なイベントのオカレンスを生成し、そのオカレンスが記録される前記複数の様々なイベントのサブセットを選択的に決定するステップをさらに含むことを特徴とする、上記（１２）に記載の方法。
（１７）前記マルチスレッド・プロセッサが前記第１のスレッドと前記第２のスレッドを一時に１つ実行し、前記第２のスレッド内の少なくとも１つの命令が、前記第１のイベント・オカレンスの生成と、前記第１のスレッドに応答して生成された第３のイベント・オカレンスの生成との間に前記プロセッサによって実行され、この方法が前記第１のイベント・オカレンスと前記第３のイベント・オカレンスを一緒に記録するステップをさらに含むことを特徴とする、上記（１２）に記載の方法。
（１８）前記第１のイベント・オカレンスを生成する前記ステップが、前記第１のスレッドが非活動状態である間に前記第１のイベント・オカレンスを生成するステップをさらに含むことを特徴とする、上記（１２）に記載の方法。
（１９）前記マルチスレッド・プロセッサが、イベント・オカレンスを記録する複数のカウンタを含み、前記複数のカウンタの第１のサブセットが前記第１のスレッドに割り振られ、前記複数のカウンタの第２のサブセットが前記第２のスレッドに割り振られ、前記第１のイベント・オカレンスおよび前記第２のイベント・オカレンスが特定のイベントの２つのオカレンスであり、前記第１のイベント・オカレンスおよび前記第２のイベント・オカレンスを別々に記録する前記ステップが、
前記第１のスレッドが活動状態である間に生成された前記特定のイベントのオカレンスに応答して、前記第１のサブセットに属するカウンタを増分するステップと、
前記第２のスレッドが活動状態である間に生成された前記特定のイベントのオカレンスに応答して、前記第２のサブセットに属するカウンタを増分するステップとを含むことを特徴とする、上記（１２）に記載の方法。
（２０）前記第１のスレッドおよび前記第２のスレッドの１つによる読取り要求に応答して、前記カウンタの第１のサブセットおよび前記カウンタの第２のサブセットのうちの対応する一方のサブセット中の特定のカウンタに前記読取り要求をマッピングするステップをさらに含むことを特徴とする、上記（１９）に記載の方法。
（２１）前記第１のスレッドが活動状態であるときにのみ前記第１のサブセット中のカウンタの状態に応答して割込みを発生し、かつ前記第２のスレッドが活動状態であるときにのみ前記第２のサブセット中のカウンタの状態に応答して割込みを発生することを特徴とする、上記（１９）に記載の方法。
以上
【図面の簡単な説明】
【図１】本発明によるパフォーマンス・モニタを含むデータ処理システムの例示的な実施形態を示す図である。
【図２】グローバル・モードで動作しているときの図１のパフォーマンス・モニタを示す図である。
【図３】マルチスレッド・モードで動作しているときの図１のパフォーマンス・モニタを示す図である。
【図４】パフォーマンス・モニタがグローバル・モードおよびマルチスレッド・モードで動作しているときにイベントがどのようにしてパフォーマンス・モニタ・カウンタへ送られるかを示す論理流れ図である。
【図５】パフォーマンス・モニタがそれぞれグローバル・モードおよびマルチスレッド・モードで動作しているときにパフォーマンス・モニタ割込みがどのようにして発生されるかを示す論理流れ図である。
【図６】パフォーマンス・モニタがグローバル・モードおよびマルチスレッド・モードで動作しているときにパフォーマンス・モニタ・カウンタにどのようにしてアクセスするかを示す論理流れ図である。
【符号の説明】
１０  プロセッサ
１１  システム・バス
１２  バス・インタフェース・ユニット（ＢＩＵ）
１３  トランザクション・ルックアサイド・バッファ
１４  Ｌ１命令キャッシュ
１５  ライン・バッファ
１６  Ｌ１データ・キャッシュ
１７  順次バッファ
１８  スレッド・スイッチ・バッファ
１９  分岐バッファ
２０  分岐処理ユニット（ＢＰＵ）
２１  ディスパッチ・ユニット
２３  記憶制御回路
２５  命令ユニット（ＩＵ）論理パーティション
２６  浮動小数点（ＦＰ）論理パーティション
２７  倍精度浮動小数点ユニット（ＦＰＵ）
２８  浮動小数点レジスタ（ＦＰＲ）
３０  固定小数点（ＦＸ）論理パーティション
３２  ロード・ストア・ユニット（ＬＳＵ）
３４  単複整数ユニット
３６  単整数ユニット
３８  整数レジスタ
５０  パフォーマンス・モニタ
５２  主メモリ
５４  不揮発性大容量記憶装置
５６  Ｌ２キャッシュ
５８  Ｌ２キャッシュ・インタフェース
８２  マルチプレクサ
８２ａ  マルチプレクサ
８２ｂ  マルチプレクサ
８４  ＰＭＣ
８６  選択入力
８６ａ  選択入力
８６ｂ  選択入力
８８  ＯＲゲート
９０  論理
１００  ＡＮＤゲート
１０２  ＡＮＤゲート
【図１】
0003609603.tif 000002
【図２】
0003609603.tif 000003
【図３】
0003609603.tif 000004
【図４】
0003609603.tif 000005
【図５】
0003609603.tif 000006
【図６】
0003609603.tif 000007