(57)【要約】【課題】マルチプロセッサシステムなどの高速プロセッサのプロセッサとソフトウェアのパフォーマンス情報を取得するための新たな方法と装置を提供する。【解決手段】少なくとも１つのプロセッサから受信したプログラムステータスデータから追跡データを生成する方法及び装置１００が提供され、この少なくとも１つのプロセッサは、プログラムカウンタから取得したアドレスによるアドレッシング命令によりソフトウェアを実行するように動作できる。また、追跡バッファに追跡データを記録する方法及び装置１００が提供され、この追跡データは、(i)各々のプログラム実行イベントの総カウント数、(ii)任意の時点でプログラムカウンタから取得したアドレス、及び(iii)プログラムのパフォーマンス情報を含むブックマークデータ、が含まれる。【選択図】図１
2006146921.tif 000002
【特許請求の範囲】
【請求項１】
各々がプログラムカウンタから取得したアドレスによるアドレッシング命令によってソフトウェアを実行するように動作可能な複数のプロセッサと、
前記プロセッサから受信したプログラムステータスデータから追跡データを生成し、かつ記録するように動作可能なパフォーマンスモニタ回路とを含み、前記追跡データは、（ｉ）各々のプログラム実行イベントの総カウント数、（ｉｉ）任意の時点で前記プログラムカウンタから取得したアドレス、及び（ｉｉｉ）プログラムのパフォーマンス情報を含むブックマークデータ、とを含む、システム。
【請求項２】
前記パフォーマンスモニタ回路は前記追跡データを記録する追跡バッファを備えている、請求項１記載のシステム。
【請求項３】
前記プロセッサ及び前記パフォーマンスモニタ回路は共通の集積回路内に配置されている、請求項１又は２記載のシステム。
【請求項４】
前記集積回路はデータポートを備えており、前記追跡データは前記データポートを通じて前記追跡バッファから抽出されうる、請求項３記載のシステム。
【請求項５】
前記追跡データは一定時間毎に生成され、かつ記録される、請求項１〜４のいずれか１項に記載のシステム。
【請求項６】
各々のプログラム実行イベントの前記総カウント数及び前記アドレスの少なくとも一方は、一定時間毎に生成され、かつ記録される、請求項５記載のシステム。
【請求項７】
前記プログラム実行イベントは、キャッシュミスイベント、特定のソフトウェア命令の実行、及びプログラムのストール、のうちの少なくとも１つを含む、
前記特定のソフトウェア命令はロード命令である、
前記プログラムのストールは分岐ミスのストール及びダイレクトメモリアクセスのストールのうちの少なくとも１つを含む、あるいは、
前記ブックマークデータは少なくとも１つのプログラムスレッド情報を含む、の条件のうち少なくともいずれか一つが満たされる、請求項１〜６のいずれか１項に記載のシステム。
【請求項８】
前記パフォーマンスモニタ回路は、
前記プログラム実行イベントの発生を表示する前記プロセッサから各々の信号を受信するように動作可能な少なくとも１つのマルチプレクサと、
前記マルチプレクサから出力を受信し、かつ前記各々のプログラム実行イベントの総カウント数を生成するように動作可能な少なくとも１つのデジタルカウンタ、を含む、請求項１〜７のいずれか１項に記載のシステム。
【請求項９】
前記マルチプレクサと前記デジタルカウンタとのうちの少なくとも一方は、各プロセッサに対応付けられている、請求項８記載のシステム。
【請求項１０】
前記パフォーマンスモニタ回路は前記総カウント数、前記アドレス、及び前記ブックマークデータを、各種類の追跡データに割当てられた順序に従い各々のストリングにパッキングするように動作でき、前記ブックマークデータの前記順序はその他の種類の追跡データよりも優先される、請求項１記載のシステム。
【請求項１１】
プログラムカウンタから取得したアドレスによるアドレッシング命令によりソフトウェアを実行するように動作可能な少なくとも１つのプロセッサと、
前記少なくとも１つのプロセッサから受信したプログラムステータスデータから追跡データを生成し、かつ記録するように動作可能なパフォーマンスモニタ回路を含み、前記追跡データは、（ｉ）各々のプログラム実行イベントの総カウント数、（ｉｉ）任意の時点で前記プログラムカウンタから取得したアドレス、及び（ｉｉｉ）プログラムのパフォーマンス情報を含むブックマークデータを含む、システム。
【請求項１２】
各々が第１プログラムカウンタから取得したアドレスによるアドレッシング命令によりソフトウェアを実行するように動作可能な複数のプロセッサと、
第２プログラムカウンタから取得したアドレスによるアドレッシング命令によりソフトウェアを実行するように動作可能なメインプロセッシングユニットと、
前記プロセッサから受信したプログラムステータスデータから追跡データを生成かつ記録するように動作可能なパフォーマンスモニタ回路とを含み、前記追跡データは、（ｉ）各々のプログラム実行イベントの総カウント数、（ｉｉ）任意の時点で前記第１及び第２プログラムカウンタの少なくとも１つから取得したアドレス、及び（ｉｉｉ）プログラムのパフォーマンス情報を含むブックマークデータを含み、
前記メインプロセッシングユニットは更に管理ソフトウェアプログラムを実行し、１つ以上の条件が合う場合に、前記総カウント数、前記アドレス、及び前記ブックマークデータのうちの少なくとも１つを前記追跡データに導入させるように動作することができる、
システム。
【請求項１３】
前記１つ以上の条件には、（ｉ）ｂｃｌｒ（ｌ）  ｗ／ｔａｋｅｎ、（ｉｉ）ｂｃｃｔｒ（ｌ）ｗ／ｔａｋｅｎ、（ｉｉｉ）ｒｆｉｄ、のうちの少なくとも１つのアセンブリ言語命令の発生が含まれる、請求項１〜９、１１、１２のいずれか１項に記載のシステム。
【請求項１４】
前記パフォーマンスモニタ回路は前記総カウント数、前記アドレス、及び前記ブックマークデータを、長さがＮビットの各々のストリングにパッキングし、それらを追跡バッファに記録するように動作可能な、請求項１〜９、１１、１２のいずれか１項に記載のシステム。
【請求項１５】
前記パフォーマンスモニタ回路は前記総カウント数の少なくとも一部と前記アドレスの少なくとも一部とを前記同じストリングにパッキングするように動作可能な請求項１〜９、１１、１２のいずれか１項に記載のシステム。
【請求項１６】
前記パフォーマンスモニタ回路は前記ブックマークデータを前記総カウント数と前記アドレスを含まないストリングにパッキングするよう動作可能な、請求項１〜９、１１、１２のいずれか１項に記載のシステム。
【請求項１７】
前記パフォーマンスモニタ回路は１つ以上の前記プロセッサからの前記アドレスを前記同じストリングにパッキングするように動作可能な、請求項１〜９、１１、１２のいずれか１項に記載のシステム。
【請求項１８】
前記パフォーマンスモニタ回路は前記メインプロセッシングユニットからの前記アドレスを、前記総カウント数、１つ以上のプロセッサからの前記アドレス、前記メインプロセッシングユニットからの前記アドレス、及び前記ブックマークデータから分離されたストリングにパッキングするように動作可能な、請求項１２記載のシステム。
【請求項１９】
プロセッサのパフォーマンスを監視する装置であって、
少なくとも１つのプロセッサから受信したプログラムステータスデータから追跡データを生成するように動作可能なフォーマッティング回路を含み、前記少なくとも１つのプロセッサはプログラムカウンタから取得したアドレスによるアドレッシング命令によりソフトウェアを実行するように動作可能なものであって、
前記追跡データを記録するように動作可能な追跡バッファと、
前記追跡データの前記追跡バッファへの書込みと、前記追跡データの前記追跡バッファからの読出しを管理するように動作可能なコントローラとを含み、
前記追跡データは、（ｉ）各々のプログラム実行イベントの総カウント数、（ｉｉ）任意の時点で前記プログラムカウンタから取得したアドレス、（ｉｉｉ）プログラムのパフォーマンス情報を含むブックマークデータ、を含む、装置。
【請求項２０】
前記コントローラは、
前記追跡データが一定時間毎に生成され、かつ記録される、
各々のプログラム実行イベントの前記総カウント数が一定時間毎に生成され記録される、
前記プログラムカウンタから取得した前記アドレスが一定時間毎に記録される、又は、
前記ブックマークデータが一定時間毎には生成及び記録されない、の条件のうち少なくとも一つが満たされるように動作可能である、請求項１９記載の装置。
【請求項２１】
前記コントローラは、タイミング信号に応じて前記追跡データを生成し、記録するように動作可能な書込み制御回路を含む、請求項１９又は２０記載の装置。
【請求項２２】
前記タイミング信号は、前記追跡データの少なくとも一部が生成され、かつ記録されるタイムインターバルを制御するようにプログラムできる、請求項２１記載の装置。
【請求項２３】
前記コントローラはタイミング信号に応答して前記追跡バッファから前記追跡データを抽出させ、前記プロセッサのパフォーマンスを監視する装置から出力させるように動作可能な読出し制御回路を含む、請求項１９又は２０記載の装置。
【請求項２４】
前記タイミング信号は前記追跡データが前記追跡バッファから抽出されるタイムインターバルを制御するようにプログラムできる、請求項１９〜２１のいずれか１項に記載の装置。
【請求項２５】
前記コントローラは、
前記追跡データを書込みタイミング信号に応答して生成させ、かつ記録させるように動作可能な書込み制御回路と、
前記追跡データを読出しタイミング信号に応答して前記追跡バッファから抽出させ、前記パフォーマンスモニタから出力させるように動作可能な読出し制御回路とを含み、
前記コントローラは前記追跡バッファ内の追跡データの総数をモニタリングし、前記書込み制御回路を操作して追跡データが上書きされないようにするよう動作可能な、請求項１９記載の装置。
【請求項２６】
少なくとも１つのプロセッサから受信したプログラムステータスデータから追跡データを生成するステップを含み、前記少なくとも１つのプロセッサはプログラムカウンタから取得したアドレスによるアドレッシング命令によりソフトウェアを実行するように動作可能な方法であって、かつ、
追跡バッファに前記追跡データを記録するステップを含み、
前記追跡データは、（ｉ）各々のプログラム実行イベントの総カウント数、（ｉｉ）任意の時点で前記プログラムカウンタから取得した前記アドレス、（ｉｉｉ）プログラムのパフォーマンス情報を含むブックマークデータ、を含む、方法。
【請求項２７】
前記プログラム実行イベントは、キャッシュミスイベント、特定のソフトウェア命令の実行、及びプログラムのストール、のうちの少なくとも１つを含む、
前記特定のソフトウェア命令はロード命令である、
前記プログラムのストールの少なくとも１つは分岐ミスのストール及びダイレクトメモリアクセスのストールのうちの少なくとも１つを含む、又は、
前記ブックマークデータはプログラムスレッド情報のうちの少なくとも１つを含む、の条件のうち少なくとも一つを満たす、請求項２６記載の方法。
【請求項２８】
前記プログラム実行イベントの前記発生を表示する前記プロセッサから各々の信号を受信するステップと、
前記総カウント数を生成するために前記各々のプログラム実行イベントをカウントするステップ、とを更に含む、請求項２６又は２７記載の方法。
【請求項２９】
コンピュータを、
プログラムカウンタから取得したアドレスによるアドレッシング命令によりソフトウェアを実行できるように動作可能な少なくとも１つのプロセッサから受信したプログラムステータスデータから追跡データを生成する手段、及び、
追跡バッファに前記追跡データを記録する手段、として機能させるためのプログラムが記録されたコンピュータ読み取り可能な記録媒体であって、
前記追跡データは、（ｉ）各々のプログラム実行イベントの総カウント数、（ｉｉ）任意の時点で前記プログラムカウンタから取得したアドレス、及び（ｉｉｉ）プログラムのパフォーマンス情報を含むブックマークデータ、を含むものである、
コンピュータ読み取り可能な記録媒体。
【請求項３０】
コンピュータを、
プログラムカウンタから取得したアドレスによるアドレッシング命令によりソフトウェアを実行できるように動作可能な少なくとも１つのプロセッサから受信したプログラムステータスデータから追跡データを生成する手段、及び、
追跡バッファに前記追跡データを記録する手段、として機能させるためのプログラムであって、
前記追跡データは、（ｉ）各々のプログラム実行イベントの総カウント数、（ｉｉ）任意の時点で前記プログラムカウンタから取得したアドレス、及び（ｉｉｉ）プログラムのパフォーマンス情報を含むブックマークデータ、を含むものである、
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、トレースバッファとも称される、追跡バッファに含まれるどの種類のプロセッサ情報も挿入することができる技術に関する。
【背景技術】
【０００２】
最先端のコンピュータアプリケーションは、リアルタイムのマルチメディア機能を伴っているために、近年はデータスループットが高くより高速なコンピュータが常に望まれている。グラフィックアプリケーションは処理システムへの要求が大きいアプリケーションの１つであり、その理由は、グラフィックアプリケーションが所望の映像的な処理結果を実現するために、比較的短時間で非常に多くのデータアクセス、データの演算処理、及びデータ操作を要求するからである。これらのアプリケーションは、１秒間に数千メガビットのデータ処理等の非常に高速な処理速度を要求する。シングルプロセッサを採用し、高速の処理速度を実現している処理システムもある一方で、マルチプロセッサアーキテクチャを利用して実装されている処理システムもある。マルチプロセッサシステムでは、複数のプロセッサが並列に（あるいは少なくとも協調して）動作し、所望の処理結果を実現することができる。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかし、最新の処理システムから、具体的にはマルチプロセッサシステムからプロセッサのパフォーマンス及び／又はソフトウェアのパフォーマンスデータを取得するのは困難である。処理システムからパフォーマンスデータを取得するための手法の幾つかの詳細は米国特許出願第１０／８８１，９７１（２００４年６月３０日出願）において知ることができ、該出願は本明細書中に参考のために組み込まれている。
【０００４】
プロセッサパフォーマンスとソフトウェアパフォーマンスのデータを取得する従来技術の手法では、プロセッサが配置される半導体パッケージ上の非常に多くの信号ピン上の信号伝達をモニタリングすることが必要とされる。一般に、そのようなピンは約１０から２０あり、キャッシュミス、データのロード、分岐の発生、アドレス情報、（アドレス追跡）などの信号を運んでいる。この手法は多くのプロセッサチップにとっては実用的であるが、超高速のインターフェース、超高速の処理スピードなどを有す最新のプロセッサには実用的でない。実際に、データが非常に高速に出現し、また、データ量が非常に多く、専用のピンにデータを展開することは困難である。高速のデータ転送率とデータ量に対応するようにピンの数を増やすことも可能であるが、評価目的のためだけに使用される外部ピンを多数設けるには多くの費用がかかる。
【０００５】
従って、マルチプロセッサシステムなどの高速プロセッサのプロセッサとソフトウェアのパフォーマンス情報を取得するための新たな方法と装置が求められている。評価プロセスを向上するために用いられうる、その他の種類のパフォーマンス情報（従来技術のキャッシュミス、データのロード、分岐の発生、及びアドレス情報以外に）を取得することもまた望ましい。
【課題を解決するための手段】
【０００６】
本発明の一形態によれば、プロセッサに対してオンチップに、又はチップ外に配置された追跡バッファに含まれる（プロセッサ及び／又はソフトウェアのパフォーマンス情報など）、どの種類の情報も挿入できる方法及び装置が提供される。
【０００７】
本発明の一形態では、キャッシュミス、データのロード、分岐の発生、分岐ミスのストール、ＤＭＡストールなどの信号の発生を蓄積する多くのオンチップカウンタを採用している。その蓄積した総数はオンチップの又はチップ外の追跡バッファに記録され、後でダウンロードと評価が行われる。相異なる信号毎に単一のカウンタが用いられ得るように、カウンタと信号の間に多くのマルチプレクサを配置し得る。更に、ブックマークレジスタは実際にプロセッサから（スレッドナンバーなどの）どのデータでも受信することができ、追跡バッファへ送信することができる。スレッドナンバーは追跡バッファに記録されたデータの一部が取得され記録された場合に、“プログラムがどこにあったか(where the program was)”を表示するために用いられることもできる。その後、ブックマークデータを含むプロセッサ情報が追跡バッファから読み出され解析されることもできる。
【０００８】
本発明の１つ以上の形態によれば、少なくとも１つのプロセッサから受信したプログラムステータスデータから追跡データを生成する方法とシステムが提供される。この少なくとも１つのプロセッサは、プログラムカウンタから取得したアドレスによるアドレッシング命令によってソフトウェアを実行するように動作できる。また本発明の１つ以上の態様によれば、追跡データを追跡バッファに記録する方法とシステムも提供され、追跡データには、（ｉ）各々のプログラム実行イベントの総カウント数、（ｉｉ）任意の時点でプログラムカウンタから取得したアドレス（あるいは、プログラムカウンタから少なくとも２回以上の時点で取得したアドレス）、及び（ｉｉｉ）プログラムのパフォーマンス情報を含むブックマークデータ、が含まれる。
【０００９】
本発明の１つ以上の態様によれば、複数のプロセッサ（プロセッサの各々は第１プログラムカウンタから取得したアドレスによるアドレッシング命令によってソフトウェアを実行するように動作できる）、メインプロセッシングユニット（第２プログラムカウンタから取得したアドレスによるアドレッシング命令によってソフトウェアを実行するように動作できる）、及びパフォーマンスモニタ回路（プロセッサから受信したプログラムステータスデータから追跡データを生成し記録するように動作できる）、を含むシステムが提供される。このシステムにおいて、追跡データに、（ｉ）各々のプログラム実行イベントの総カウント数、（ｉｉ）第１及び第２プログラムカウンタのうちの少なくとも一つから任意の時点で取得したアドレス、（ｉｉｉ）プログラムのパフォーマンス情報を含むブックマークデータ、が含まれるシステムが提供される。
メインプロセッシングユニットは更に管理ソフトウェアプログラムを実行し、これにより、１つ以上の条件が合う場合に、総カウント数、アドレス、ブックマークデータのうちの少なくとも１つを追跡データに導入させるように動作することができる。
【００１０】
本発明の１つ以上の態様によれば、フォーマッティング回路と、追跡バッファとコントローラとを備えた、プロセッサのパフォーマンスを監視する（モニタする）装置が提供される。フォーマッティング回路は、少なくとも１つのプロセッサから受信したプログラムステータスデータから追跡データを生成するように動作でき、この少なくとも１つのプロセッサは、プログラムカウンタから取得したアドレスによるアドレッシング命令によりソフトウェアを実行するように動作できる。追跡バッファは追跡データを記録するように動作できる。コントローラは追跡データの追跡バッファへの書込みと、追跡データの追跡バッファからの読出しを管理するように動作できる。追跡データには、（ｉ）各々のプログラム実行イベントの総カウント数、（ｉｉ）任意の時点でプログラムカウンタから取得したアドレス、及び（ｉｉｉ）プログラムのパフォーマンス情報を含むブックマークデータ、が含まれる。
【００１１】
添付の図面を参照しつつ、ここに記載する本発明の説明を読めば、他の態様、機能および利点などは当業者に自明となるであろう。
【００１２】
本発明の様々な態様を例示するために、図面には現在のところ好まれる形状を示しているが、本発明、以下に開示される配置そのものや手段に限定されるものではないことを理解されたい。
【発明を実施するための最良の形態】
【００１３】
図面において、同一の要素には同じ参照符号を付して参照する。図１に、本発明の１つ以上の特徴を実行するために適しうる処理システム１００を例示した。簡潔を期すと共に明確になるように、図１のブロック図を装置１００を例示するものとして本明細書において参照かつ記載する。しかし、この記載は同等の効力を有する方法のさまざまな態様に容易に適用できることを理解されたい。処理システム１００は好ましくは複数のプロセッサ１０２−Ｄと、バス配線、専用の信号線及び／又は双方の組合せであってよい、１つ以上の配線により相互接続されたパフォーマンスモニタ１０４を備えている。
【００１４】
プロセッサ１０２−Ｄは好ましくは並列に（あるいは少なくとも協調して）動作し、所望の処理結果を実現することができる。一例では４台のプロセッサ１０２が例示されているが、本発明の趣旨及び範囲から逸脱せずに、いずれの数のプロセッサでも利用し得る。プロセッサ１０２Ａ−Ｄは同様の構造又は別の構造によって実装されることができる。例えば、プロセッサ１０２は標準マイクロプロセッサ、分散型マイクロプロセッサなどを含む、ソフトウェア及び／又はファームウェアを実行できる、どの周知のマイクロプロセッサを用いて実装されることができる。一例としては、プロセッサ１０２は、データ（ピクセルデータなどであり、グレースケール情報、色情報、テキスチャデータ、ポリゴナル情報、ビデオフレーム情報などを含む）の要求と操作が可能な、グラフィックスプロセッサであることができる。
【００１５】
本発明の１つ以上の実施形態によれば、プロセッサ１０２Ａなどのプロセッサ１０２の１つは、好ましくはメインプロセッサの役割を果たす。例えば、メインプロセッサ１０２Ａは、その他のプロセッサ１０２上で実行されているアプリケーションプログラムやデータをモニタリングし、メインプロセッサ１０２Ａが処理の変更を呼び出しできるようにすることもできる。このような処理の変更には、プロセッサ１０２などの間にデータを割り当るために、１つのプロセッサ１０２から別のプロセッサ１０２へタスクを移動することが含まれうる。
【００１６】
好ましくは、メインプロセッサ１０２Ａは、追跡データを生成して記録するように、パフォーマンスモニタ１０４と合わせて動作する管理プログラムを実行するように動作することもできる。本発明の別の実施形態では、アプリケーションプログラムはパフォーマンスデータを追跡するために、パフォーマンスモニタ回路１０４とともに動作することもできる。図示されているように、パフォーマンスモニタ回路１０４には、データフォーマッティング及び制御回路１０６と追跡バッファ１０８とが含まれる。データフォーマッティング及び制御回路１０６は好ましくは、プロセッサ１０２から受信したプログラムステータスデータから追跡データを生成し、該データを追跡バッファ１０８へ記録するように動作できる。追跡データには、キャッシュミスイベント、特定のソフトウェア命令の実行（ロード命令など）、及びプログラムのストール（分岐ミスのストール、ダイレクトメモリアクセスのストールなど）などの、各々のプログラム実行イベントの総カウント数を含めることもできる。追跡データにはまた、プログラム実行中の様々な時点で、プロセッサのプログラムカウンタから取得したプログラムアドレスも含めることもできる。更にまた、追跡データには、プログラムスレッドＩＤ、フレームＩＤ（画像処理用などの）などのプログラムパフォーマンス情報を有するブックマークデータ、又は、総カウント数やプログラムアドレス以外のその他のいずれのプログラム情報も有するブックマークデータを含めることもできる。
【００１７】
以下に議論しているように、ブックマークデータはブックマークデータを生成させるトリガイベントに応じて、不定期に生成され記録されうるが、好ましくは、データフォーマッティング及び制御回路１０６は追跡データを生成し、その追跡データを一定時間毎に追跡バッファ１０８へ記録させる。十分な量の追跡データが追跡バッファ１０８に記録されると、そのようなデータは（例えばデータポートなどを通って）追跡バッファ１０８から読み出され、外部処理を行うこともできる。そのような外部処理としては、追跡データをソートする、つまり分類することが挙げられ、１つ以上のソフトウェアプログラムの実行時に、処理システム１００がいかに上手く又は下手にプログラムを実行したかが判断される。そのような解析はプログラム実行イベント、プログラムアドレス、及び、ある種のイベントがプログラム実行中に発生した場合に、“プログラムがどこにあったか”を判断することができるブックマークデータ、に基づいて行われるのが便利である。これにより解析処理を大幅に改善することができ、また、処理システム１００の処理パフォーマンスをより一層理解することができる。
【００１８】
図２に、図１のマルチプロセッシングシステム１００の更に詳しいブロック図が示されている。好ましくは、データフォーマッティング及び制御回路１０６は１つ以上のマルチプレクサ１１０Ａ−Ｄと、１つ以上のデジタルカウンタ１１２Ａ−Ｄを備えている。マルチプレクサ１１０Ａ−Ｄは各々のプロセッサ１０２Ａ−Ｄから信号を受信するように動作できる。このような信号はプログラム実行イベントの発生を表示している。例えば、マルチプレクサ１１０Ａに入る信号は、キャッシュミス、ロード命令の実行、分岐ミスのストール、分岐アドレス発生イベント(branch address taken events)、ＤＭＡのストールなどの発生を各々表わし得る。同様に、その他のマルチプレクサ１１０Ｂ−Ｄはそのような信号をその他のプロセッサ１０２Ｂ−Ｄから受信する。上記のイベントは論議を目的として提供されているが、システム１００の１つのプロセッサ１０２、バスシステム、Ｉ／Ｏインターフェース、メモリインターフェース、メモリアクセスコントローラ（ダイレクトメモリアクセスコントローラなど）などのいずれのイベント／条件がデータフォーマッティング及び制御回路１０６へ入力されうることは理解されよう。信号多重化技術で周知のように、マルチプレクサ１１０Ａ−Ｄは、特定の時間における入力信号の各々を表わす信号を出力するように制御されることもできる。
【００１９】
マルチプレクサ１１０Ａ−Ｄからの各々の出力は各々のデジタルカウンタ１１２Ａ−Ｄへの入力であり、特定のプログラム実行イベントが発生するたびにインクリメントされてその値が増加する。従って、各々のカウンタ１１２Ａ−Ｄからの値は、特定のタイムインターバルの終了時に追跡バッファ１０８に記録され、後で解析が行われうる。一例として、各々のカウンタ１１２Ａ−Ｄは最大２５５カウントを与えるように動作できる８ビットカウンタであることができる。従って、プログラム実行イベントをカウントする間の適切なタイムインターバルは約２００プロセッササイクルであり、各サイクルは４ＧＨｚ速度で起こりうる。しかし、カウンタ１１２は特定のアプリケーションによって決定されうるように、１６ビット以上のキャパシティを利用して実装されることもできる。
【００２０】
なお、ここでは、説明のために、各プロセッサ１０２に対し、１つのマルチプレクサ１１０と１つのカウンタ１１２が例示している。しかし、実際には、いずれの数のマルチプレクサ１１０及び／又はカウンタ１１２が本発明の趣旨と範囲から逸脱することなく採用されることもできる。好ましい実施形態では、２つの６４ビットの信号グループが各アイランドから取得されうるように、各カウンタ１１２に対し、６４対１マルチプレクサ１１０が存在する。いずれのサイズのいずれの数のカウンタを採用することもできる。
【００２１】
追跡バッファ１０８に記録される追跡データはグループ又はブロック１１４にまとめられることもでき、各ブロック１１４は特定のタイムインターバル中に取得したデータを表す。他の実施形態では、データのブロック１１４は、キャッシュミス、ロード命令の実行などの、各々の種類の追跡データを表わすこともでき、追跡バッファ１０８内のデータの特定のまとまりは、特定のアプリケーションに基づいて容易に調整されうる。
【００２２】
図３はデータフォーマッティング及び制御回路１０６の他の構成のブロック図であり、ブックマークデータは追跡データに導入され、追跡バッファ１０８に記録されることもできる。理論上は、ブックマークデータは特殊用途のレジスタ１１６Ａにより導入されることもできる。該レジスタ１１６Ａによって、そのようなデータの導入を正当化する特定のイベント発生時にはいつでもブックマークデータが受信される。例えば、スレッドＩＤは特殊用途のレジスタ１１６ＡにスレッドＩＤを書込み、そのようなデータと総カウント数とを更なるマルチプレクサ１１８Ａによって多重化することにより、追跡データに導入することもできる。特定用途のレジスタ１１６Ａはパフォーマンスモニタ１０４内に配置することもでき、又は１つ以上のプロセッサ１０２Ａ−Ｄ内に配置することもできる。
【００２３】
好ましい実施形態では、プロセッサ１０２Ａはメインプロセッサの役割を果たし、その中に特殊用途のレジスタ１１６Ａを備えている。好ましくは、１つ以上の条件が合う場合には、メインプロセッサ１０２Ａで実行中の管理プログラムは、ブックマークデータを特殊用途のレジスタ１１６Ａへ書込みさせることができる。管理プログラムが特殊用途のレジスタ１１６Aへブックマークデータを開始できる特定の条件は非常に多数存在するが、そのような条件の例としては、各プログラムスレッドの開始（又は終了）、画像処理のおける所定のフレームの開始又は終了、などが挙げられる。
【００２４】
総カウント数やブックマークデータに加え、プロセッサ１０２のプログラムカウンタから取得したプログラムアドレスも追跡データ間に含まれ、かつ、追跡バッファ１０８に記録されるのが好ましい。好ましくは、プロセッサ１０２のプログラムアドレスがキャプチャされ、特定の条件に応じて追跡データに導入される。例えば、プロセッサ１０２がメインプロセッサとして機能している場合、プログラムアドレスを捕獲させる条件は、特定の種類のプログラム命令（分岐命令など）の実行としてもよい。ある種のアセンブリ言語プログラム命令セットでは、このような分岐命令として、bclr(l)w/taken,  bcctr(l)w/taken、及び／又はrfidイベントを含むことができる。
【００２５】
メインプロセッサ１０２Ａに関連するアドレスキャプチャイベントとは対照的に、その他のプロセッサ１０２Ｂに関連するアドレスキャプチャイベントは、特定の時間間隔で行われるものであり得る。例えば、アドレスキャプチャイベントは１６プロセッシングサイクルの倍数でありうる。プログラム実行イベントの総カウント数に関連するインターバルが約２００プロセッシングサイクルで発生すると仮定すると、その他のプロセッサ１０２Ｂ−Ｄのプログラムアドレスにおける速度が極めて高速であることは明らかである。総カウント数とプロセッサ１０２のプログラムカウンタから取得したアドレスが追跡データに導入される周波数を比較すると、ブックマークデータは具体的にはブックマークデータがスレッドＩＤである場合に、大幅に低い周波数で導入されよう。
【００２６】
本発明の具体的な実施形態によれば、プロセッサ１０２Ｂ−Ｄに関連するアドレスの長さは、メインプロセッサ１０２Ａに関連するアドレスの長さよりも短い。このことはプロセッサ１０２Ｂ−Ｄによってアクセス可能なアドレススペースが、メインプロセッサ１０２Ａによってアクセス可能なアドレススペースよりも小さい場合に起こりうる。
【００２７】
図４を参照すると、パフォーマンスモニタ回路１０４、具体的にはデータフォーマッティング及び制御回路１０６は、好ましくは長さがＮビットの各々のストリング、例えばビットやビット列の中に追跡データをパッキングし、該データを追跡バッファ１０８に記録するように動作できる。好ましい実施形態では、ストリングは長さが１２８ビットである。しかし、当業者であればいずれの長さのストリングが本発明の精神と範囲から逸脱することなく採用されうることは理解されよう。Ｏとラベル付けされている、第１ビットのストリングはオーバーフロー条件を示す。Ｒとラベル付けされている、次の２ビットのストリングはレコードタイプを示す。ｔｈとラベル付けられている次のビットのストリングはプログラム可能ビットであり、このビット値に基づいて捕獲イベントを開始又は中止する。ｃｎｔとラベル付けされている次の３ビットのストリングは取得イベントを表わすように用いられうる。ｒｅｓとラベル付けされている次の５７ビットのストリングはリザーブされる。メインプロセッサ１０２Ａのプログラムカウンタから取得されるプログラムアドレスは、残りの６４ビットのストリングに記録される。
【００２８】
図５を参照すると、その他のプロセッサ１０２Ｂ−Ｄのプログラムカウンタから捕獲された１６ビットのプログラムアドレスは、ａｄｄとラベル付けされた１６ビットロケーションに記録されうる。図５には、ｃｔとラベル付けされた多数の８ビットのロケーションも示されており、各々のカウンタ１１２のサイズが８ビットであると仮定すると、このような８ビットの場所は、プログラム実行イベントの総カウント数を記録するために用いられうる。図６を参照すると、１６ビットのプログラムアドレスとその他の１６ビットの総カウント数は各々のストリングにパッキングされ、追跡バッファ１０８に記録されうる。更にまた、図７に例示しているように、特定のストリングは長さが８ビット又は１６ビットなどの、総カウント数だけを含むこともできる。図８を参照すると、ブックマークデータは６２ビットまでの長さであり、Ｔとラベル付けされた２ビットのセグメントがブックマークデータに対する開始／終了のレコードトリガーを示すために用いられうる。
【００２９】
上述のように、データフォーマッティング及び制御回路１０６は、好ましくは各々のＮビットのストリングに追跡データをパッキングし、該データを追跡バッファ１０８に、所定のタイムインターバルで、又は特定の条件に応答して、記録するように動作することができる。これに関連して、図９−１０を参照する。図９は、メインプロセッサ１０２Ａ上に実行している管理プログラムに応答して、追跡バッファ１０８に記録されうる追跡データの一例を例示した概念図である。図１０はパフォーマンスモニタ１０４の具体的な実装品を例示したブロック図である。
【００３０】
パフォーマンスモニタ１０４、具体的にはデータフォーマッティング及び制御回路１０６は、好ましくはタイマー１２０、書込み制御回路１２２、タイマー１２４、読出し制御回路１２６、及びマルチプレクサ／ラッチ回路１２８を備えている。好ましくは、書込み制御回路１２２は、タイマー１２０からのタイミング信号に応答して、また、プロセッサ１０２Ａ−Ｄのうちの１つにより及び／又はブックマークデータが存在することにより、分岐命令が実行されるといった、特定のイベントの発生に応答して、追跡データが生成され、記録されるように動作できる。タイマー１２０は好ましくは、上述しているような、あるプログラムアドレスキャプチャに対しては１６プロセッシングサイクル、及びプログラム実行イベントの総カウント数に対しては２００プロセッシングサイクルなど、特定のタイムインターバルで追跡データが生成され記録される必要があることを示す信号を生成するように動作できる。好ましくは、ブックマークデータが最優先され、また、追跡データが生成され、追跡バッファ１０８に書込まれる必要があることを示す、どのその他の信号伝達イベントよりも早くサービスされるように、書込み制御回路１２２への信号伝達が優先されるのが望ましい。好ましくは、読出し制御回路は、タイマー１２４からの読出しタイミング信号に応答して、追跡バッファ１０８から追跡データが抽出され、パフォーマンスモニタ１０４から出力されるように動作可能である。
【００３１】
図９に示すように、書込み制御回路１２２によって、タイムインターバルｔ０中にブックマークデータが追跡バッファ１０８の中に書込まれ、タイムインターバルｔ１中に１６ビットのプログラムアドレスと総カウント数が追跡バッファ１０８に記録され、タイムインターバルｔ２中に６４ビットのプログラムアドレスが追跡バッファ１０８に記録される。好ましくは、追跡データが追跡バッファ１０８に記録される速度と、追跡データが追跡バッファ１０８から抽出される速度が制御され、追跡データが追跡バッファ１０８内で決して上書きされないように、管理プログラムに応答してタイマー１２０と１２４をプログラムすることができる。好ましくは、追跡バッファ１０８は先入れ先出し（ＦＩＦＯ）デバイスとして実装される。
【００３２】
上述しているように、好ましくは、装置１００はデータポートを備えており、該データポートを通じて追跡データが追跡バッファから移動されて、外部に記録され解析されることもできる。このデータポートは追跡バッファ１０８と外部メモリ（ダブルデータライト（ＤＤＲ）メモリなど）との間に結合されているサウスブリッジを備えうる。好ましくは、ＤＤＲ上のデータサイズは変更可能であり、変更されたサイズに達すると、サウスブリッジは抽出した追跡データのＤＤＲへの書込みをストップする。これに関連して、好ましくは、読出し制御回路１２６が追跡バッファ１０８から追跡データの抽出をストップするように、サウスブリッジは好ましくは割込みを開始し、この割り込みはパフォーマンスモニタ１０４へと返送される。この機能がサポートされない場合、追跡データがＤＤＲでラップアラウンド、つまり、最新の追跡データが最初に書き込まれた追跡データを上書きすることになり、重要な追跡データが損失されうる。別の構造では、データをＧＢ速度で、ＹＤＲＡＭなどの特殊用途のＤＲＡＭへ送信できる、専門化したサウスブリッジが用いられてもよい。
【００３３】
図１１を参照し、かつ、本発明の好ましい実施形態によれば、上述した本発明の態様を実施するのに適した他の形態の構造のコンピューティング装置は、複数のプロセッサ２０２Ａ−Ｄ、関連するローカルメモリ２０４Ａ−Ｄ、及びバス２０８により相互接続されているメインメモリ（又は共有メモリ）を備えている。一例としては４台のプロセッサ２０２が例示されているが、本発明の精神と範囲を逸脱することなく、いずれの台数のプロセッサを用いることができる。図示していないが、装置２００は、上述したパフォーマンスモニタ１０４も備えている。
【００３４】
プロセッサ２０２は、システムメモリ２０６からデータを要求し、所望の結果を得るためにそのデータを操作することができる、従来のいずれの技術を用いて実装されうる。好ましくは、ローカルメモリ２０４は対応のプロセッサ２０２と同じチップに配置される。しかし、ハードウェアキャッシュメモリ機能を実装するため、好ましくはオンチップの又はチップ外のハードウェアキャッシュ回路、キャッシュレジスタ、キャッシュメモリコントローラなどがないことが好ましいために、ローカルメモリ２０４は好ましくはハードウェアキャッシュメモリではない。他の実施形態では、ローカルメモリ２０４はキャッシュメモリ及び／又は採用されうる追加のキャッシュメモリであってよい。チップ上のスペースには限りがある場合があるため、ローカルメモリ２０４はシステムメモリ２０６よりも相当サイズが小さいことがある。プロセッサ１０２は、好ましくは、プログラムを実行したりデータを操作するために、データアクセスリクエストを出して、バス２０８経由でシステムメモリ２０６からローカルメモリ２０４にデータ（プログラムデータを含みうる）をコピーする。データアクセスを容易にするためのメカニズムは、好ましくはメモリインターフェース１１０にあるダイレクトメモリアクセスコントローラ（ＤＭＡＣ）を用いて実装される。
【００３５】
以下に本明細書で説明している1つ以上の特徴を実行するのに適した、マルチプロセッサシステムのための好ましいコンピュータアーキテクチャを説明する。1つ以上の実施形態によれば、マルチプロセッサシステムは、ゲームシステム、家庭用端末、ＰＣシステム、サーバーシステム、及びワークステーションなどのメディアリッチアプリケーションを、スタンドアローン処理、及び／又は分散処理するために動作することができる、シングルチップソリューションとして実装されうる。ゲームシステムや家庭用端末などのいくつかのアプリケーションでは、リアルタイムの演算処理は必須である。例えば、リアルタイムの分散ゲームアプリケーションでは、ユーザーにリアルタイムの経験をしていると思わせる程速く、１つ以上のネットワークイメージの復元、３Ｄコンピュータグラフィック、オーディオ生成、ネットワーク通信、物理的シミュレーション、及び人工知能処理が実行される必要がある。従って、マルチプロセッサシステムの各プロセッサは、短時間で、かつ予測可能時間でタスクを完了する必要がある。
【００３６】
このために、また、本コンピュータアーキテクチャによれば、マルチプロセッシングコンピュータシステムの全プロセッサは、共通の演算モジュール（あるいはセル）から構成される。この共通の演算モジュールは、構造が一貫しており、また好ましくは、同じ命令セットアーキテクチャを採用している。マルチプロセッシングコンピュータシステムは、１つ以上のクライアント、サーバー、ＰＣ、モバイルコンピュータ、ゲームマシン、ＰＤＡ、セットトップボックス、電気器具、デジタルテレビ、及びコンピュータプロセッサを使用する他のデバイスから形成されうる。
【００３７】
複数のコンピュータシステムもまた、所望に応じてネットワークのメンバーとなりうる。一貫モジュール構造により、マルチプロセッシングコンピュータシステムによるアプリケーション及びデータの効率的高速処理が可能になる。 またネットワークが採用される場合は、ネットワーク上にアプリケーション及びデータの高速送信が可能にする。この構造はまた、大きさや処理能力が様々なネットワークのメンバーの構築を単純化し、また、これらのメンバーが処理するアプリケーションの準備を単純化する。
【００３８】
図１２を参照すると、基本的な処理モジュールはプロセッサエレメント（ＰＥ）５００である。ＰＥ５００はＩ／Ｏインターフェース５０２、プロセッシングユニット（ＰＵ）５０４、及び複数のサブプロセッシングユニット５０８、すなわち、サブプロセッシングユニット５０８Ａ、サブプロセッシングユニット５０８Ｂ、サブプロセッシングユニット５０８Ｃ、及びサブプロセッシングユニット５０８Ｄを備えている。ローカル（あるいは内部）ＰＥバス５１２は、データ及びアプリケーションを、ＰＵ５０４、サブプロセッシングユニット５０８、及びメモリインターフェース５１１間に送信する。ローカルＰＥバス５１２は、例えば従来のアーキテクチャを備えることができ、又は、パケット−スイッチネットワークとして実装されうる。パケットスイッチネットワークとして実装される場合は、更なるハードウェアが必要であるものの、利用可能な帯域幅を増やす。
【００３９】
ＰＥ５００はデジタル論理回路を実装するよう様々な方法を用いて構成されうる。しかしながら、好ましくは、ＰＥ５００はシリコン基板に相補性金属酸化膜半導体（ＣＭＯＳ：Complementary Metal Oxide Semiconductor）を用いた単一の集積回路として好適に構成される。基板の他の材料には、ガリウムヒ素、ガリウムアルミウムヒ素、及び、様々なドーパントを採用している他の、いわゆる、ＩＩＩ−Ｂ化合物を含む。ＰＥ５００はまた、高速単一磁束量子（ＲＳＦＱ：Rapid Single-flux-Quantum）論理回路などの超電導材料を用いて実装されうる。
【００４０】
ＰＥ５００は高帯域のメモリ接続５１６を介して、共有（メイン）メモリ５１４と密接に結合するよう構成できる。好ましくは、メモリ５１４はダイナミックランダムアクセスメモリ（ＤＲＡＭ：Dynamic Random Access Memory）であるが、メモリ５１４は例えば、スタティックランダムアクセスメモリ（ＳＲＡＭ：Static Random Access Memory）、磁気ランダムアクセスメモリ（ＭＲＡＭ：Magnetic Random Access Memory）、光メモリ、ホログラフィックメモリなどとして、他の方法を用いて実装されうる。
【００４１】
ＰＵ５０４とサブプロセッシングユニット５０８は好ましくは、それぞれダイレクトメモリアクセス（ＤＭＡ）の機能を備えたメモリフローコントローラ（ＭＦＣ：Memory Flow Controller）と結合されており、該コントローラはメモリインターフェース５１１と共に、ＰＥ５００のＤＲＡＭ５１４とサブプロセッシングユニット５０８、ＰＵ５０４間のデータ転送を促進する。ＤＭＡＣ及び／又はメモリインターフェース５１１は、サブプロセッシングユニット５０８及びＰＵ５０４に一体化して、別個に配置されうる。更に、ＤＭＡＣの機能及び／又はメモリインターフェース５１１の機能は、１つ以上の（好ましくは全ての）サブプロセッシングユニット５０８及びＰＵ５０４に統合することができる。また、ＤＲＡＭ５１４はＰＥ５００と統合されていても、別個に配置されていてもよいことに留意されたい。例えば、ＤＲＡＭ５１４は、実例で示しているように、チップ外に配置しても、あるいは一体化してオンチップ配置としてもよい。
【００４２】
ＰＵ５０４はデータ及びアプリケーションをスタンドアローン処理できる標準プロセッサなどでありうる。作動時、ＰＵ５０４は、好ましくは、サブプロセッシングユニットによるデータ及びアプリケーション処理をスケジューリングし、調整を行う。サブプロセッシングユニットは好ましくは、単一命令複数データ（ＳＩＭＤ：Single Instruction Multiple Data）プロセッサである。ＰＵ５０４の管理下、サブプロセッシングユニットは並列で、かつ独立して、これらのデータ及びアプリケーション処理を行う。ＰＵ５０４は好ましくは、ＲＩＳＣ（Reduced Instruction Set Computing）技術を採用しているマイクロプロセッサアーキテクチャであるパワーＰＣ（ＰｏｗｅｒＰＣ）コアを用いて実装される。ＲＩＳＣは、単純な命令の組合せを用いて、より複雑な命令を実行する。従って、プロセッサのタイミングは、単純で高速の動作に基づくものであり、マイクロプロセッサがより多くの命令を所定のクロック速度で実行できるようにする。
【００４３】
ＰＵ５０４はサブプロセッシングユニット５０８により、データ及びアプリケーション処理をスケジューリングし調整を行う、メインプロセッシングユニットの役割を果たしているサブプロセッシングユニット５０８のうちの、１つのサブプロセッシングユニットにより実装されうる。更に、プロセッサエレメント５００内には１つ以上の実装されたＰＵが存在しうる。
【００４４】
本モジュール構造によれば、特定のコンピュータシステムにおけるＰＥ５００の数は、そのシステムが要求する処理能力に基づく。例えば、サーバーにおけるＰＥ５００の数は４、ワークステーションにおけるＰＥ５００の数は２、ＰＤＡにおけるＰＥ５００の数は１とすることができる。特定のソフトウェアセルの処理に割当てられるＰＥ５００のサブプロセッシングユニット数は、セル内のプログラムやデータの複雑度や規模により決定される。
【００４５】
図１３は、サブプロセッシングユニット（ＳＰＵ）５０８の好ましい構造および機能を例示している。ＳＰＵ５０８アーキテクチャは好ましくは、多目的プロセッサ（平均して高性能を広範なアプリケーションに実現するように設計されているもの）と、特殊目的プロセッサ（高性能を単一のアプリケーションに実現するように設計されているもの）間の間隙を埋める。ＳＰＵ５０８は、ゲームアプリケーション、メディアアプリケーション、ブロードバンドシステムなどに高性能を実現するように、また、リアルタイムアプリケーションのプログラマーに高度な制御を提供するように設計される。ＳＰＵ５０８は、グラフィックジオメトリーパイプライン、サーフェースサブディビジョン、高速フーリエ変換、画像処理キーワード、ストリームプロセッシング、ＭＰＥＧのエンコード／デコード、エンクリプション、デクリプション、デバイスドライバの拡張、モデリング、ゲーム物理学、コンテンツ制作、音響合成及び処理が可能である。
【００４６】
サブプロセッシングユニット５０８は２つの基本機能ユニットを有し、それらはＳＰＵコア５１０Ａ及びメモリフローコントローラ（ＭＦＣ）５１０Ｂである。ＳＰＵコア５１０Ａはプログラムの実行、データ操作、などを行い、一方でＭＦＣ５１０ＢはシステムのＳＰＵコア５１０ＡとＤＲＡＭ５１４の間のデータ転送に関連する関数を実施する。
【００４７】
ＳＰＵコア５１０Ａはローカルメモリ５５０、命令ユニット（ＩＵ：Instruction Unit）５５２、レジスタ５５４、１つ以上の浮動小数点実行ステージ５５６、及び１つ以上の固定小数点実行ステージ５５８を有している。ローカルメモリ５５０は好ましくは、ＳＲＡＭなどの、シングルポートのランダムメモリアクセスを用いて実装される。殆どのプロセッサはキャッシュの導入により、メモリへのレイテンシを小さくする一方で、ＳＰＵコア５１０Ａはキャッシュより小さいローカルメモリ５５０を実装している。更に、リアルタイムアプリケーション（及び本明細書に述べているように、他のアプリケーション）のプログラマーたちに一貫した、予測可能なメモリアクセスレイテンシを提供するため、ＳＰＵ５０８Ａ内のキャッシュメモリアーキテクチャは好ましくない。キャッシュメモリのキャッシュヒット／ミスという特徴のために、数サイクルから数百サイクルまでの、予測困難なメモリアクセス時間が生じる。そのような予測困難性により、例えばリアルタイムアプリケーションのプログラミングに望ましい、アクセス時間の予測可能性が低下する。ＤＭＡ転送をデータの演算処理にオーバーラップさせることで、ローカルメモリＳＲＡＭ５５０においてレイテンシの隠蔽を実現しうる。これにより、リアルタイムアプリケーションのプログラミングが制御しやすくなる。ＤＭＡの転送に関連するレイテンシと命令のオーバーヘッドが、キャッシュミスにサービスしているレイテンシのオーバーヘッドを超過していることから、ＤＭＡの転送サイズが十分に大きく、十分に予測可能な場合（例えば、データが必要とされる前にＤＭＡコマンドが発行される場合）に、このＳＲＡＭのローカルメモリ手法による利点が得られる。
【００４８】
サブプロセッシングユニット５０８のうちの、所定の１つのサブプロセッシングユニット上で実行しているプログラムは、ローカルアドレスを使用している関連のローカルメモリ５５０を参照する。しかしながら、ローカルメモリ５５０のそれぞれの場所はまた、システムのメモリマップ全体内に実アドレス（ＲＡ：Real Address）も割当てられる。これにより、特権ソフトウェア（あるいはプリビレッジソフトウェア：Privilege Software）はローカルメモリ５５０をプロセスの有効アドレス（ＥＡ：Effective Address）にマッピングする、ローカルメモリ５５０と別のローカルメモリ５５０間のＤＭＡ転送を促進する。ＰＵ５０４はまた、有効アドレスを用いてローカルメモリ５５０に直接アクセスすることができる。好ましい実施形態では、ローカルメモリ５５０は５５６キロバイトのストレージを有し、またレジスタ５５２の容量は１２８×１２８ビットである。
【００４９】
ＳＰＵコア５０４Ａは、好ましくは、論理命令がパイプライン式で処理される、プロセッシングパイプラインを用いて実装される。パイプラインは命令が処理される任意の数のステージに分けられうるが、一般にパイプラインは１つ以上の命令のフェッチ、命令のデコード、命令間の依存性チェック、命令の発行、及び、命令の実行ステップを有している。これに関連して、ＩＵ５５２は命令バッファ、命令デコード回路、依存性チェック回路、及び命令発行回路、を有する。
【００５０】
命令バッファは、好ましくは、ローカルメモリ５５０と結合され、また、フェッチされる際に一時的に命令を記録するよう動作可能な複数のレジスタを備えている。命令バッファは好ましくは、全ての命令が一つのグループとしてレジスタから出て行く、つまり、実質的に同時に出て行くように動作する。命令バッファはいずれの大きさでありうるが、好ましくは、２あるいは３レジスタよりは大きくないサイズである。
【００５１】
一般に、デコード回路は命令を壊し、対応する命令の関数を実施する論理的マイクロオペレーションを生成する。例えば、論理的マイクロオペレーションは、算術論理演算、ローカルメモリ５５０へのロード及びストアオペレーション、レジスタソースオペランド、及び／又は即値データオペランドを特定しうる。デコード回路はまた、ターゲットレジスタアドレス、構造リソース、機能ユニット、及び／又はバスなど、命令がどのリソースを使用するかを示しうる。デコード回路はまた、リソースが要求される命令パイプラインステージを例示した情報を与えることができる。命令デコード回路は好ましくは、命令バッファのレジスタ数に等しい数の命令を実質的に同時にデコードするように動作する。
【００５２】
依存性チェック回路は、所定の命令のオペランドがパイプラインの他の命令のオペランドに依存しているかどうかを判断するために試験を行う、デジタル論理回路を含む。その場合、所定の命令はそのような他のオペランドが（例えば、他の命令が実行の完了を許容することにより）アップデートされるまで、実行されることができない。依存性チェック回路は好ましくは、デコーダー回路１１２から同時に送られる複数の命令の依存性を判断する。
【００５３】
命令発行回路は浮動小数点実行ステージ５５６、及び／または固定小数点実行ステージ５５８へ命令を発行するように動作することができる。
【００５４】
レジスタ５５４は好ましくは、１２８エントリのレジスタファイルなどの、相対的に大きな統一レジスタファイルとして実装される。これにより、レジスタが足りなくなる状態を回避するよう、レジスタリネーミングを必要としない、深くパイプライン化された高周波数の実装品が可能になる。一般に、リネーミング用ハードウェアは、処理システムのかなりの割合の領域と電力を消費する。その結果、ソフトウェアのループ展開、又は他のインターリーブ技術によりレイテンシがカバーされると、最新のオペレーションが実現されうる。
【００５５】
好ましくは、ＳＰＵコア５１０Ａはスーパースカラアーキテクチャであり、これにより１つ以上の命令がクロックサイクル毎に発行される。ＳＰＵコア５１０Ａは好ましくは、命令バッファから送られる同時命令の数、例えば２〜３命令（各クロックサイクル毎に２命令あるいは３命令が発行されることを意味する）に対応する程度まで、スーパースカラとして動作する。所望の処理能力に応じて、多数の、あるいは少数の浮動小数点実行ステージ５５６と、固定小数点実行ステージ５５８が採用される。好ましい実施形態では、浮動小数点実行ステージ５５６は１秒あたり３２０億の浮動小数点演算速度で演算し（３２ＧＦＬＯＰＳ）、また、固定小数点実行ステージ５５８は演算速度が１秒あたり３２０億回（３２ＧＯＰＳ）となっている。
【００５６】
ＭＦＣ５１０Ｂは、好ましくは、バスインターフェースユニット（ＢＩＵ：Bus Interface Unit）５６４、メモリ管理ユニット（ＭＭＵ：Memory Management Unit）５６２、及びダイレクトメモリアクセスコントローラ（ＤＭＡＣ：Direct Memory Access Controller）５６０を備えている。ＤＭＡＣ５６０は例外として、ＭＦＣ５１０Ｂは好ましくは、低電力化設計とするため、ＳＰＵコア５１０Ａやバス５１２と比べて半分の周波数で（半分の速度で）実行する。ＭＦＣ５１０Ｂはバス５１２からＳＰＵ５０８に入力されるデータや命令を処理するように動作することができ、ＤＭＡＣに対しアドレス変換を行い、また、データコヒーレンシーに対しスヌープオペレーションを提供する。ＢＩＵ５６４はバス５１２とＭＭＵ５６２及びＤＭＡＣ５６０間にインターフェースを提供する。従って、ＳＰＵ５０８（ＳＰＵコア５１０Ａ及びＭＦＣ５１０Ｂを含む）及びＤＭＡＣ５６０は、バス５１２と物理的に、及び／又は論理的に結合されている。
【００５７】
ＭＭＵ５６２は、好ましくは、メモリアクセスのために、実アドレスに有効アドレスを変換するように動作することができる。例えば、ＭＭＵ５６２は、有効アドレスの上位ビットを実アドレスビットに変換しうる。しかしながら下位のアドレスビットは好ましくは変換不能であり、また、実アドレスの形成及びメモリへのアクセスリクエストに使用する場合には、ともに論理的及び物理的なものと考えられる。１つ以上の実施形態では、ＭＭＵ５６２は、６４ビットのメモリ管理モデルに基づいて実装され、また、４Ｋ−、６４Ｋ−、１Ｍ−、及び１６Ｍ−バイトのページサイズを有する２６４バイトの有効アドレススペースと、２５６ＭＢのセグメントサイズを提供しうる。ＭＭＵ５６２は好ましくは、ＤＭＡコマンドに対し、２６５バイトまでの仮想メモリ、２４２バイト（４テラバイト）までの物理メモリをサポートするように動作することができる。ＭＭＵ５６２のハードウェアは、８−エントリでフルアソシエイティブのＳＬＢと、２５６−エントリと、４ウエイセットアソシエイティブのＴＬＢと、ＴＬＢに対してハードウェアＴＬＢのミスハンドリングに使用される４×４リプレースメント管理テーブル（ＲＭＴ：Replacement Management Table）と、を含む。
【００５８】
ＤＭＡＣ５６０は、好ましくは、ＳＰＵコア５１０Ａや、ＰＵ５０４、及び／又は他のＳＰＵなどの、１つ以上の他のデバイスからのＤＭＡコマンドを管理するように動作することができる。ＤＭＡコマンドには３つのカテゴリが存在し、それらは、プットコマンド、ゲットコマンド、及びストレージ制御コマンドである。プットコマンドは、ローカルメモリ５５０から共有メモリ５１４へデータを移動させるよう動作する。ゲットコマンドは、共有メモリ５１４からローカルメモリ５５０へデータを移動させるよう動作する。また、ストレージ制御コマンドには、ＳＬＩコマンドと同期化コマンドが含まれる。この同期化コマンドは、アトミックコマンド(atomic command)、信号送信コマンド、及び専用バリアコマンドを有しうる。ＤＭＡコマンドに応答して、ＭＭＵ５６２は有効アドレスを実アドレスに変換し、実アドレスはＢＩＵ５６４へ送られる。
【００５９】
ＳＰＵコア５１０Ａは、好ましくは、ＤＭＡＣ５６０内のインターフェースと通信（ＤＭＡコマンド、ステータスなどを送る）するために、チャネルインターフェース及びデータインターフェースを使用する。ＳＰＵコア５１０Ａはチャネルインターフェースを介して、ＤＭＡＣ５６０のＤＭＡキューへＤＭＡコマンドを送る。ＤＭＡコマンドがＤＭＡキューに存在すると、そのコマンドはＤＭＡＣ５６０内の発行及び完了論理により処理される。ＤＭＡコマンドに対する全てのバストランザクションが終了すると、完了信号がチャネルインターフェースを越えて、ＳＰＵコア５１０Ａへ送られる。
【００６０】
図１４はＰＵ５０４の一般的な構造及び機能を例示している。ＰＵ５０４は２つの基本的な機能ユニットを有しており、それらはＰＵコア５０４Ａとメモリフローコントローラ（ＭＦＣ）５０４Ｂである。ＰＵコア５０４Ａは、プログラム実行、データ操作、マルチプロセッサマネージメント関数などを実施し、一方でＭＦＣ５０４Ｂはシステム１００のＰＵコア５０４Ａとメモリスペース間のデータ転送に関連する機能を実行する。
【００６１】
ＰＵコア５０４ＡはＬ１キャッシュ５７０、命令ユニット５７２、レジスタ５７４、１つ以上の浮動小数点実行ステージ５７６、及び１つ以上の固定小数点実行ステージ５７８を有することができる。Ｌ１キャッシュは、共有メモリ１０６、プロセッサ１０２、又はＭＦＣ５０４Ｂを介してメモリスペースの他の部分、から受信したデータに対するデータキャッシングの機能を提供する。ＰＵコア５０４Ａが好ましくはスーパーパイプラインとして実装されるので、命令ユニット５７２は好ましくは、フェッチ、デコード、依存性チェック、発行、などを含む、多くのステージを備えた命令パイプラインとして実装される。ＰＵコア５０４はまた好ましくは、スーパースカラ構成であり、一方で１つ以上の命令がクロックサイクル毎に命令ユニット５７２から発行される。高度な処理（演算）能力を実現するために、浮動小数点実行ステージ５７６と固定小数点実行ステージ５７８は、パイプライン構成で複数のステージを有する。所望の処理能力に応じて、多数の、あるいは少数の浮動小数点実行ステージ５７６と、固定小数点実行ステージ５７８が採用される。
【００６２】
ＭＦＣ５０４Ｂは、バスインターフェースユニット（ＢＩＵ）５８０、Ｌ２キャッシュメモリ、キャッシュ不可能なユニット（ＮＣＵ：Non-Cachable Unit）５８４、コアインターフェースユニット（ＣＩＵ：Core Interface Unit）５８６、及びメモリ管理ユニット（ＭＭＵ）５８８を備えている。殆どのＭＦＣ５０４Ｂは、低電力化設計とするために、ＰＵコア５０４Ａとバス１０８と比べて、半分の周波数（半分の速度）で実行する。
【００６３】
ＢＩＵ５８０はバス１０８とＬ２キャッシュ５８２とＮＣＵ５８４論理ブロック間にインターフェースを提供する。このために、ＢＩＵ５８０はバス１０８上で、十分にコヒーレントなメモリオペレーションを実施するために、マスタデバイスとして、また同様にスレーブデバイスとして機能する。マスタデバイスとして、ＢＩＵ５８０はＬ２キャッシュ５８２とＮＣＵ５８４のために機能するため、バス１０８へロード／ストアリクエストを供給する。ＢＩＵ５８０はまた、バス１０８へ送信されうるコマンドの合計数を制限するコマンドに対し、フロー制御機構を実装しうる。バス１０８のデータオペレーションは、８ビート要するように設計され、そのために、ＢＩＵ５８０は好ましくは１２８バイトキャッシュラインを有するように設計され、また、コヒーレンシーと同期化の粒度単位は１２８ＫＢである。
【００６４】
Ｌ２キャッシュメモリ５８２（及びサポートハードウェア論理回路）は、好ましくは、５１２ＫＢのデータをキャッシュするように設計されている。例えば、Ｌ２キャッシュ５８２はキャッシュ可能なロード／ストア、データプリフェッチ、命令フェッチ、命令プリフェッチ、キャッシュオペレーション、及びバリアオペレーションを処理しうる。Ｌ２キャッシュ５８２は好ましくは８ウエイのセットアソシエイティブシステムである。Ｌ２キャッシュ５８２は６つのキャストアウトキュー（６つのＲＣマシンなど）と一致する６つのリロードキューと、８つ（６４バイト幅）のストアキューを備えうる。Ｌ２キャッシュ５８２はＬ１キャッシュ５７０において、一部の、あるいは全てのデータのコピーをバックアップするように動作しうる。この点は、処理ノードがホットスワップである場合に状態を回復するのに便利である。この構成により、Ｌ１キャッシュ５７０が少ないポート数でより速く動作することができ、また、より速くキャッシュツーキャッシュ転送ができる（リクエストがＬ２キャッシュ５８２でストップしうるため）。この構成はまた、キャッシュコヒーレンシー管理をＬ２キャッシュメモリ５８２へ送るための機構も提供しうる。
【００６５】
ＮＣＵ５８４は、ＣＩＵ５８６、Ｌ２キャッシュメモリ５８２、及びＢＩＵ５８０と連動しており、通常は、ＰＵコア５０４Ａとメモリシステム間のキャッシュ不可能なオペレーションに対して、キューイング／バッファリング回路として機能する。ＮＣＵ５８４は好ましくは、キャッシュ抑制ロード／ストア、バリアオペレーション、及びキャッシュコヒーレンシーオペレーションなどの、Ｌ２キャッシュ５８２により処理されないＰＵコア５０４Ａとの全ての通信を処理する。ＮＣＵ５８４は好ましくは、上述の低電力化目的を満たすように、半分の速度で実行されうる。
【００６６】
ＣＩＵ５８６は、ＭＦＣ５０４ＢとＰＵコア５０４Ａの境界に配置され、実行ステージ５７６、５７８、命令ユニット５７２、及びＭＭＵユニット５８８からのリクエストに対し、また、Ｌ２キャッシュ５８２及びＮＣＵ５８４へのリクエストに対し、ルーティング、アービトレーション、及びフロー制御ポイントして機能する。ＰＵコア５０４Ａ及びＭＭＵ５８８は好ましくはフルスピードで実行され、一方でＬ２キャッシュ５８２及びＮＣＵ５８４は２：１の速度比で動作することができる。従って、周波数の境界がＣＩＵ５８６に存在し、その機能の一つは、２つの周波数ドメイン間でリクエストの送信及びデータのリロードを行いながら、周波数の差を適切に処理することである。
【００６７】
ＣＩＵ５８６は３つの機能ブロックを有しており、それらは、ロードユニット、ストアユニット、及びリロードユニットである。更に、データプリフェッチ関数がＣＩＵ５８６により実施され、また好ましくは、ロードユニットの機能部である。ＣＩＵ５８６は、好ましくは、（ｉ）ＰＵコア５０４ＡとＭＭＵ５８８からのロード及びストアリクエストを受ける、（ｉｉ）フルスピードのクロック周波数をハーフスピードに変換する（２：１のクロック周波数変換）、（ｉｉｉ）キャッシュ可能なリクエストをＬ２キャッシュ５８２へ送り、キャッシュ不可能なリクエストをＮＣＵ５８４へ送る、（ｉｖ）Ｌ２キャッシュ５８２に対するリクエストとＮＣＵ５８４に対するリクエストを公正に調停する、（ｖ）ターゲットウインドウでリクエストが受信されてオーバーフローが回避されるように、Ｌ２キャッシュ５８２とＮＣＵ５８４に対する転送のフロー制御を提供する、（ｖｉ）ロードリターンデータを受信し、そのデータを実行ステージ５７６、５７８、命令ユニット５７２、又はＭＭＵ５８８へ送る、（ｖｉｉ）スヌープリクエストを実行ステージ５７６、５７８、命令ユニット５７２、又はＭＭＵ５８８へ送る、（ｖｉｉｉ）ロードリターンデータとスヌープトラフィックを、ハーフスピードからフルスピードへ変換する、ように動作可能である。
【００６８】
ＭＭＵ５８８は、好ましくはＰＵコア５４０Ａに対して、第２レベルのアドレス変換機能などによりアドレス変換を行う。第１レベルの変換は好ましくは、ＭＭＵ５８８よりも小型で高速でありうる、別々の命令及びデータＥＲＡＴ（Effective to Real Address Translation）アレイにより、ＰＵコア５０４Ａにおいて提供されうる。
【００６９】
好ましい実施形態では、ＰＵコア５０４は、６４ビットの実装品で、４−６ＧＨｚ、１０Ｆ０４で動作する。レジスタは好ましくは６４ビット長（１つ以上の特殊用途のレジスタは小型でありうるが）であり、また、有効アドレスは６４ビット長である。命令ユニット５７０、レジスタ５７２、及び実行ステージ５７４と５７６は好ましくは、（ＲＩＳＣ）演算技術を実現するために、ＰｏｗｅｒＰＣステージ技術を用いて実装される。
【００７０】
本コンピュータシステムのモジュール構造に関する更なる詳細は、米国特許第６，５２６，４９１号に解説されており、該特許は参照として本願に組込まれる。
【００７１】
本発明の少なくとも１つの更なる態様によれば、上述の方法及び装置は、図面において例示しているような、適切なハードウェアを利用して実現されうる。そのようなハードウェアは標準デジタル回路などのいずれの従来技術、ソフトウェア、及び／又はファームウエアプログラムを実行するよう動作可能ないずれの従来のプロセッサ、プログラム可能なＲＯＭ（ＰＲＯＭ）、プログラム可能なアレイ論理デバイス（ＰＡＬ：Programmable Array Logic）などの、１つ以上のプログラム可能なデジタルデバイスあるいはシステム、を用いて実装されうる。更に、図示している装置は、特定の機能ブロックに分割されて示されているが、そのようなブロックは別々の回路を用いて、及び／あるいは１つ以上の機能ユニットに組み合わせて実装されうる。更に、本発明の様々な態様は、輸送及び／又は配布のために、（フロッピーディスク、メモリチップ、などの）適切な記憶媒体に記録されうる、ソフトウェア、及び／又はファームウエアプログラムを通じて実装されうる。
【００７２】
以上のように、本発明によれば、少なくとも１つのプロセッサから受信したプログラムステータスデータから追跡データを生成する方法及び装置１００が提供され、この少なくとも１つのプロセッサは、プログラムカウンタから取得したアドレスによるアドレッシング命令によりソフトウェアを実行するように動作できる。また、追跡バッファに追跡データを記録する方法及び装置１００が提供され、この追跡データは、（ｉ）各々のプログラム実行イベントの総カウント数、（ｉｉ）様々な時点でプログラムカウンタから取得したアドレス、及び（ｉｉｉ）総カウント数もアドレスも含まないプログラムのパフォーマンス情報を含むブックマークデータ、が含まれる。
本明細書において、具体的な実施形態を用いて本発明を記載したが、これらの実施形態は本発明の原理及び用途の例を例示したものに過ぎないことを理解されたい。このため、添付の請求の範囲に記載した本発明の趣旨及び範囲から逸脱することなく、これら例示的な実施形態を種々に変更したり、上記以外の構成を考案し得ることが理解されよう。
【図面の簡単な説明】
【００７３】
【図１】本発明の１つ以上の態様による複数のサブプロセッサとパフォーマンスモニタを備えたマルチプロセッシングシステムの構造を例示したブロック図。
【図２】本発明の１つ以上の態様による図１のマルチプロセッシングシステムのより詳細なブロック図。
【図３】本発明の１つ以上の態様による図１のプロセッシングシステムのパフォーマンスモニタの一部の他の構成のブロック図。
【図４】本発明の１つ以上の態様による図１のプロセッシングシステムのパフォーマンスモニタのバッファに記録されるプログラムデータをパッキングするデータフォーマッティング構造の概念図。
【図５】本発明の１つ以上の態様によるパフォーマンスモニタのバッファに記録されるプログラムデータをパッキングする他のデータフォーマッティング構造の概念図。
【図６】本発明の１つ以上の態様によるパフォーマンスモニタのバッファに記録されるプログラムデータをパッキングする更に他のデータフォーマッティング構造の概念図。
【図７】本発明の１つ以上の態様によるパフォーマンスモニタのバッファに記録されるプログラムデータをパッキングする更に他のデータフォーマッティング構造の概念図。
【図８】本発明の１つ以上の態様によるパフォーマンスモニタのバッファに記録されるプログラムデータをパッキングする更に他のデータフォーマッティング構造の概念図。
【図９】本発明の１つ以上の更なる態様によりパフォーマンスモニタのバッファに記録されうる追跡データの一例を例示した概念図。
【図１０】本発明の１つ以上の更なる態様により図１のパフォーマンスモニタの一般的な実装品を例示したブロック図。
【図１１】本発明の１つ以上の更なる態様により他のマルチプロセッシングシステムの構造を例示したブロック図。
【図１２】本発明の１つ以上の更なる態様によりマルチプロセッサシステムの実装に使用されうる好適なプロセッサエレメント（ＰＥ）を例示した説明図。
【図１３】本発明の１つ以上の更なる態様により、図１２のシステムの一般的なサブプロセッシングユニット（ＳＰＵ）の構造を例示した説明図。
【図１４】本発明の１つ以上の更なる態様により、図１２のシステムのプロセッシングユニット（ＰＵ）の構造を例示した説明図。
【符号の説明】
【００７４】
１００      処理システム
１０２      プロセッサ
１０２      各プロセッサ
１０４      パフォーマンスモニタ回路
１０６      共有メモリ
１０８      追跡バッファ
１１０      マルチプレクサ
１１２      カウンタ
１１４      ブロック
１１６Ａ    レジスタ
１２０      タイマー
１２２      書込み制御回路
１２４      タイマー
１２６      読出し制御回路
２０２      プロセッサ
２０６      システムメモリ
２０８      バス
５００      プロセッサエレメント
５０８      サブプロセッシングユニット
５１４      共有メモリ
５５０      ローカルメモリ
【図１】
2006146921.tif 000003
【図２】
2006146921.tif 000004
【図３】
2006146921.tif 000005
【図４】
2006146921.tif 000006
【図５】
2006146921.tif 000007
【図６】
2006146921.tif 000008
【図７】
2006146921.tif 000009
【図８】
2006146921.tif 000010
【図９】
2006146921.tif 000011
【図１０】
2006146921.tif 000012
【図１１】
2006146921.tif 000013
【図１２】
2006146921.tif 000014
【図１３】
2006146921.tif 000015
【図１４】
2006146921.tif 000016