(57)【要約】システムは、命令キャッシュ（１０６）、複数のトレースキャッシュエントリ（１６２）を含むトレースキャッシュ（１６０）、及び命令キャッシュ（１０６）とトレースキャッシュ（１６０）とに結合されたトレースジェネレータ（１７０）を含み得る。トレースジェネレータ（１７０）は、複数のトレースキャッシュエントリ（１６２）のうちの１つに記録するために、命令キャッシュ（１０６）によって出力された命令グループを受信するように構成されている。トレースジェネレータ（１７０）は、命令グループ内の例外命令を検出し、且つ例外命令がいずれかの非例外命令と同じ、複数のトレースキャッシュエントリ（１６２）のうちの１つに記録されるのを阻止するように構成され得る。
2007507791.tif 000002
【特許請求の範囲】
【請求項１】
命令キャッシュ（１０６）と、
複数のトレースキャッシュエントリ（１６２）を含むトレースキャッシュ（１６０）と、
前記命令キャッシュ（１０６）及び前記トレースキャッシュ（１６０）に結合されたトレースジェネレータ（１７０）と、を備え、
前記トレースジェネレータ（１７０）は、前記複数のトレースキャッシュエントリ（１６２）のいずれか１つに記録するために、前記命令キャッシュ（１０６）によって出力された命令グループを受信するとともに、前記命令グループ内の例外命令を検出して、前記例外命令が、いずれかの非例外命令と同じ、前記複数のトレースキャッシュエントリ（１６２）のうちの１つに記録されることを阻止するように構成される、
システム。
【請求項２】
前記トレースジェネレータ（１７０）は、少なくとも一部がデコードされた形式で、命令を前記トレースキャッシュ（１６０）に記録するように構成される、
請求項１に記載のシステム。
【請求項３】
実行された命令を中止するために結合されたリタイアキュー（１０２）を更に備えており、
前記リタイアキュー（１０２）は、前記トレースキャッシュ（１６０）からフェッチされたいずれかの命令が、その命令と同じトレースキャッシュエントリ（１６２）に含まれるすべての命令が中止可能となるまで、中止を阻止するように構成される、
請求項２に記載のシステム。
【請求項４】
前記命令キャッシュ（１０６）から受信した命令をディスパッチするように構成されたディスパッチユニット（１０４）を更に備えており、
前記ディスパッチユニット（１０４）は、前記命令キャッシュ（１０６）から受信した命令グループ内の例外命令を検出して、前記トレースジェネレータ（１７０）に前記例外命令の表示を与えるように構成されており、
前記トレースジェネレータ（１７０）は、前記ディスパッチユニット（１０４）からの表示に応答して、前記例外命令を検出するように構成される、
請求項２に記載のシステム。
【請求項５】
前記トレースジェネレータ（１７０）は、前記１又は複数の命令とは異なるトレースキャッシュエントリ（１６２）に前記例外命令を記録するように構成されており、
前記トレースジェネレータ（１７０）は、前記例外命令とともに他の命令を前記異なるトレースキャッシュエントリ（１６２）に記録しないように構成される、
請求項２に記載のシステム。
【請求項６】
トレースキャッシュ（１６０）内のトレースキャッシュエントリ（１６２）に記録するために命令グループを受信するステップと、
前記トレースキャッシュエントリ（１６２）の前記命令グループに含まれる１又は複数の命令を記録するステップと、
前記命令グループ内の例外命令を検出するステップと、
前記検出するステップに応答して、前記トレースキャッシュエントリ（１６２）内の前記例外命令を、前記１又は複数の命令とともに記録しないステップと、
を含む方法。
【請求項７】
前記記録するステップは、少なくとも一部がデコードされた形式で、前記トレースキャッシュエントリ（１６２）に、前記１又は複数の命令を記録するステップを含む、
請求項６に記載の方法。
【請求項８】
前記トレースキャッシュ（１６０）からフェッチされたいずれの命令も、その命令と同じトレースキャッシュエントリ（１６２）に含まれるすべての命令が中止の準備ができるまで、中止を阻止するステップを更に含む、
請求項７に記載の方法。
【請求項９】
すべての命令を中止してから経過したサイクル数を監視するステップ、及び、
前記サイクル数が閾値数を超過した場合に、前記トレースキャッシュ（１６０）からフェッチした命令を実行するプロセッシングパイプラインをフラッシュするとともに、前記命令キャッシュ（１０６）から実行を再起動するステップ、を更に含む、
請求項８に記載の方法。
【請求項１０】
システムメモリ（４０４）と、
前記システムメモリ（４０４）に結合されたプロセッサ（１０）と、を備え、
前記プロセッサ（１０）は、
命令キャッシュ（１０６）と、
複数のトレースキャッシュエントリ（１６２）を含むトレースキャッシュ（１６０）と、
前記命令キャッシュ（１０６）及び前記トレースキャッシュ（１６０）に結合されたトレースジェネレータ（１７０）と、を有し、
前記トレースジェネレータ（１７０）は、前記複数のトレースキャッシュエントリ（１６２）のいずれか１つに記録するために、前記命令キャッシュ（１０６）によって出力された命令グループを受信するように構成されており、
前記トレースジェネレータ（１７０）は、前記命令グループ内の例外命令を検出して、前記例外命令が、いずれの非例外命令と同じ前記複数のトレースキャッシュエントリ（１６２）のうちの１つに記録されるのを阻止するように構成される、
コンピュータシステム（４００）。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ技術、特に、トレースキャッシュを有するプロセッサの技術に関する。
【背景技術】
【０００２】
プロセッサで処理される命令は、「１」及び「０」の列として符号化される。各命令は、あるプロセッサアーキテクチャに対して一定のバイト数などの固定長で符号化され得る。ｘ８６アーキテクチャなどのその他のアーキテクチャに対して、命令の長さは変動してもよい。ｘ８６プロセッサアーキテクチャは可変長の命令セット（つまり、異なるバイト数によって、様々な命令がそれぞれ指定される命令セット）を指定する。例えば、ｘ８６プロセッサの８０３８６以降のバージョンは、１〜１５バイトまでを用いて特定の命令を指定する。各命令はオペレーションコードを有しており、該コードは１〜２バイトであり、また、更にバイトを追加して、アドレス指定モード、オペランド、及び実行される命令に関する更なる詳細を特定してよい。
【０００３】
あるプロセッサアーキテクチャでは、各命令が、実行の前に１又は複数の単純なオペレーションにデコードされ得る。命令をデコードする場合は、各命令マップの各論理レジスタへの物理レジスタの決定のために、及び／又は命令の結果を記録する物理レジスタを割り当てるために、レジスタリネームマップにもアクセスされ得る。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
各命令は、プロセッサ内で行われた分岐予測に部分的に基づいて、プロセッサのデコード部にフェッチされ得る。一般的に、実行コアが各実行サイクル中に十分に利用されているかどうかについては、命令フェッチの帯域幅とプロセッサのデコード部によって判断され得る。従って、命令フェッチ及びプロセッサのデコード部に帯域幅を十分に提供し、可能な限り十分にワーク（work）を供給した状態に実行コアを維持することが望ましい。
【課題を解決するための手段】
【０００５】
トレースキャッシュベースのプロセッサにより例外命令（exceptional instructions）を処理するための方法及びシステムの様々な実施形態が開示されている。ある実施形態では、システムが、命令キャッシュ、複数のトレースキャッシュエントリを有するトレースキャッシュ、及び命令キャッシュとトレースキャッシュとに結合されたトレースジェネレータ、を備え得る。トレースジェネレータは、複数のトレースキャッシュエントリのうちの１つに記録するために、命令キャッシュによって出力された命令グループを受信するように構成され得る。トレースジェネレータは、命令グループ内の例外命令を検出し、且つこの例外命令がいずれの非例外命令とも同じトレースキャッシュエントリに記録されないように構成され得る。一実施形態では、トレースジェネレータは、トレースキャッシュに例外命令をまったく記録しないように構成されてもよい。別の実施形態では、トレースジェネレータが、１又は複数のその他の命令とは別のトレースキャッシュエントリに例外命令を記録するとともに、この例外命令とともにあらゆる命令を別のトレースキャッシュエントリに記録しないように構成され得る。トレースジェネレータは、少なくとも部分的にデコードされた形態でトレースキャッシュに命令を記録するように構成されてもよい。
【０００６】
システムには、実行した命令を中止するように結合されたリタイアキューも含む。リタイアキューは、トレースキャッシュからフェッチされたあらゆる命令を、その命令と同じトレースキャッシュエントリに含まれるすべての命令が中止可能となるまで中止しないように構成され得る。他の形態では、リタイアキューが、トレースキャッシュからフェッチされたあらゆる命令を、その命令と同じトレースキャッシュエントリ内の同じ必要度グループ(liveness group)に含まれる命令が中止可能となるまで中止しないように構成され得る。
【０００７】
システムは、リタイアキューが最後に命令を中止してから経過したサイクル数を監視するように構成された再起動ロジック(restart logic)を含んでもよい。サイクル数が閾値数を超過すると、この再起動ロジックは、トレースキャッシュからフェッチされた命令を実行中のプロセッシングパイプライン(a processing pipeline executing instructions)をフラッシュして、命令キャッシュから実行を再起動するように構成され得る。
【０００８】
システムに含まれるディスパッチユニットは、トレースキャッシュから受信した命令をディスパッチ（発送）するように構成され得る。ディスパッチユニットは、トレースキャッシュから受信した命令グループ中の再実行が不可能な命令を検出して、検出した再実行不可能命令を再起動ロジックに表示（indication）するように構成され得る。その表示に応答して再起動ロジックは、プロセッシングパイプラインをフラッシュして、再実行不可能命令を実行する前に、命令キャッシュから実行を再起動するように構成され得る。
【０００９】
ディスパッチユニットは、命令キャッシュから受信した命令グループ内の例外命令を検出し、トレースジェネレータに例外命令を検出させるために、例外命令をトレースジェネレータに表示するように構成され得る。トレースジェネレータは、例外命令の１以上の特徴（例えば、オペレーションコード、アドレッシングモードなど）に応答して、例外命令を検出するようにも構成され得る。
【００１０】
ある実施形態では、方法が、トレースキャッシュ内のトレースキャッシュエントリに記録するために命令グループを受信するステップ、トレースキャッシュエントリの各命令グループに含まれる１又は複数の命令を記録するステップ、各命令グループ内の例外命令を検出するステップ、及びその検出に応答して、トレースキャッシュエントリ内に、１又は複数の命令とともに例外命令を記録しないステップ、を含み得る。
【発明を実施するための最良の形態】
【００１１】
本発明は、添付の図面に関連した以下の詳細な説明を参照することによって、よりよく理解することができる。
本発明は様々な変更や代替形態が可能であるが、本発明の個別の実施形態は、各図面において例示として示されたものであり、ここでは詳細に説明されている。しかしながら、ここで行われている実施形態の説明は、本発明を開示された特定の形態に限定することを意図するものではなく、逆に、本発明は、添付の特許請求の範囲により定義されるような本発明の精神や範囲の範疇であるすべての変更、等価物、及び代替物を含むものであることを理解すべきである。本明細書中の見出しは文章構成のためのものに過ぎず、本明細書の説明又は特許請求の範囲を限定或いは解釈のために用いるべきものではないことに注意されたい。さらに、本明細書において用いられる「できる“may”」という用語は、許可的な意味合い（つまり、そのような「可能性を持つ」、又は「可能である」）に用いられ、強制的な意味合いではない（つまり、must；しなければいけない）ことに注意すべきである。「include;含む」という用語及びその派生語は「含むが、それに限定されない」ことを意味する。「接続される」という用語は「直接的又は間接的に接続される」ことを意味し、「結合される」という用語は「直接的又は間接的に結合される」ことを意味する。
【００１２】
図１は、プロセッサ１００の一実施形態に含まれるロジカルコンポーネントのブロック図である。プロセッサ１００は、システムメモリ２００に記録された命令を実行するように構成される。これらの命令の多くは、システムメモリ２００に記録されたデータ上で動作するものである。システムメモリ２００は、コンピュータシステム全体に物理的に配置可能であり、１又は複数のマイクロプロセッサ１００によってアクセスされる。いくつかの実施形態では、プロセッサ１００がｘ８６アーキテクチャと互換性を持つように設計することができる。
【００１３】
プロセッサ１００は、命令（instruction）キャッシュ１０６及びデータキャッシュ１２８を含む。プロセッサ１００は、システムメモリ２００に結合されたプリフェッチユニット１０８を含む。プリフェッチユニット１０８は、命令キャッシュ１０６に記録するためにシステムメモリ２００から命令コードをプリフェッチすることができる。一実施形態では、プリフェッチユニット１０８が、システムメモリ２００から命令キャッシュ１０６へコードをバースト転送するように構成される。プリフェッチユニット１０８は、様々な特定のコードプリフェッチ技術及びアルゴリズムを採用することができる。プリフェッチユニット１０８は、命令キャッシュ１０６から命令をフェッチし、トレースキャッシュ１６０からディスパッチユニット１０４へトレースすることができる。命令は、トレースキャッシュ１６０でミスした所定の命令アドレスに応じて、命令キャッシュ１０６からフェッチされる。同様に命令は、命令キャッシュ１０６でミスした所定のアドレスに応じて、システムメモリ２００からフェッチされる。
【００１４】
ディスパッチユニット１０４は、命令キャッシュか１０６から命令を受信して、デコードされた命令及び／又は部分的にデコードされた命令をトレースキャッシュ１６０から受信するように構成され得る。ディスパッチユニット１０４は、命令キャッシュ１０６から受信した命令をデコードするためのデコードユニット１４０を含み得る。ディスパッチユニット１０４は、また、マイクロコード命令を処理する場合に用いるマイクロコードユニットも含み得る。
【００１５】
ディスパッチユニット１０４は、スケジューラ１１８にデコードした命令のディスパッチを行うように構成される。１又は複数のスケジューラ１１８は、ディスパッチユニット１０４からディスパッチされた命令を受信して、１以上の実行コア１２４に命令を発行するように結合される。実行コア１２４は、データキャッシュ１２８へのアクセスを実行するように構成された読出／書込ユニット１２６を含む。実行コア１２４によって生成された結果は、結果バス１３０に出力される。これらの結果は続いて発行される命令のためのオペランド値として使用可能であり、及び／又はレジスタファイル１１６に記録することができる。リタイアキュー１０２は、スケジューラ１１８及びディスパッチユニット１０４に結合される。このリタイアキュー１０２は、発行された命令のそれぞれがいつ中止可能であるかを決定するように構成される。
【００１６】
命令キャッシュ１０６は、各命令を、ディスパッチユニット１０４がそれらを受信する前に、一時的に記録することができる。命令コードは、システムメモリ２００からプリフェッチユニット１０８を介してコードをプリフェッチすることにより、命令キャッシュ１０６に供給される。命令キャッシュ１０６は、様々な構成で実装可能である（例えば、セットアソシアティブ、フルアソシアティブ、又はダイレクトマッピング）。
【００１７】
本明細書中で使用されているように、一般的に、用語“命令”は、デコードされていない、部分的にデコードされた、及び完全にデコードされた、命令を称する。部分的に及び完全にデコードされた命令は“オペレーション”とも称する。例えば、デコードされていない命令は、デコードユニット１４０によって、実行コア１２４において直接的に実行可能な、１又は複数のコンポーネントオペレーションにデコードされる、と説明され得る。ディスパッチユニット１０４は、オペランドアドレス情報、即値データ、及び／又は変位データとともに、実行コア１２４によって実行可能なビット符号化されたオペレーションを含む信号を出力することができる。レジスタの最新版（update）を含む命令を受信すると、ディスパッチユニット１０４は、レジスタファイル１１６内のレジスタ位置を、推測レジスタ状態を記録するために予約する（別の実施形態では、各レジスタに対する１又は複数の推測レジスタ状態を記録するために、リオーダバッファが用いられる）。レジスタマップは、レジスタのリネームを容易にするために、ソース及び目的オペランドの論理レジスタ名を物理レジスタ名に変換することができる。そのようなレジスタマップは、レジスタファイル１１６内のどのレジスタが現在割り当てられているか、及び割り当てられていないか、を追跡できる。
【００１８】
命令がディスパッチユニット１０４によって処理される場合に、要求されているオペランドがレジスタの位置であるときは、レジスタアドレス情報がレジスタマップ又はリオーダバッファに送られる。例えば、ｘ８６アーキテクチャにおいては、８つの３２ビット論理レジスタがある（例えば、ＥＡＸ、ＥＢＸ、ＥＣＸ、ＥＤＸ、ＥＢＰ、ＥＳＩ、ＥＤＩ、及びＥＳＰ）。物理レジスタファイル１１６（又はリオーダバッファ）は、これらの論理レジスタの内容を変更する結果用の記録装置を含み、アウトオブオーダ実行を許可する。レジスタファイル１１６内の物理レジスタは、各論理レジスタのうちの一つの内容を修正する各命令の結果を記録するために割り当てられる。従って、特定のプログラムを実行している間の任意の時点において、レジスタファイル１１６（或いは他の実施形態では、リオーダバッファ）は、与えられた論理レジスタの投機的（speculatively）に実行された内容を含む、１又は複数のレジスタを持つ。
【００１９】
レジスタマップは、ある命令の目的オペランドとして指定された特定の論理レジスタに物理レジスタを割り当てる。レジスタファイル１１６は、所定の命令においてソースオペランドとして指定され論理レジスタに割り当てられた、既に割り当てられた物理レジスタを１又は複数有し得る。このレジスタマップは、その論理レジスタに最近に割り当てられた物理レジスタのためのタグを供給することができる。このタグは、レジスタファイル１１６内のオペランドのデータ値にアクセスするために、また、結果バス１３０において転送される結果からデータ値を受信するために、用いることができる。オペランドがメモリ位置に対応する場合、そのオペランド値は、読出／書込ユニット１２６を介して結果バス１３０に（結果転送及び／又はレジスタファイル１１６への記録のため）供給される。スケジューラ１１８の１つから命令が発行されると、オペランドデータ値が実行コア１２４に供給される。他の実施形態においては、命令がディスパッチされると、（その命令が発行されたときに対応する実行コア１２４に供給する代わりに）、オペランド値が対応するスケジューラ１１８に供給される。
【００２０】
図１のマイクロプロセッサ１００はアウトオブオーダ実行をサポートする。リタイアキュー１０２（或いは他の形態では、リオーダバッファ）は、レジスタの読み出し及び書き込みオペレーションのために、元のプログラムシーケンスの経過を追い、投機的命令実行及び分岐予測ミスからの復帰を許可し、精密な例外処理を容易にする。多くの実施形態では、リタイアキュー１０２がリオーダバッファと同様に機能する。しかし、一般的なリオーダバッファと違って、リタイアキュー１０２はどのようなデータ値の記録も行わない。別の実施形態では、リタイアキュー１０２が、リオーダバッファのように機能して、推測レジスタ状態のデータ値の記録を行うことによって、レジスタリネームも支援する。ある実施形態では、リタイアキュー１０２が有効になったオペレーションがバッファのボトムに移動して、それにより待ち行列のトップに新しいエントリのための空きを作る、先入れ先出し構造として実装される。命令が中止されると、リタイアキュー１０２は、レジスタファイル１１６の推測レジスタ状態を記録する必要がなくなった各レジスタの割り当てを解除して、どのレジスタが現在空いているかを示すレジスタマップに信号を送る。レジスタファイル１１６内（もしくは他の実施形態では、リオーダバッファ内）の推測レジスタ状態を、このような状態を生成した各命令が有効になるまで維持することにより、分岐予測が間違っていた場合、予測ミスされたパスに従った、投機的に実行されたオペレーションの結果は、レジスタファイル１１６内で無効化される。
【００２１】
ディスパッチユニット１０４の出力で与えられたビット符号化されたオペレーション及び即値データは、１又は複数のスケジューラ１１８に送信され得る。本明細書に記載されたように、スケジューラは、命令実行の準備ができたことを検出し、１又は複数の実行ユニットに準備命令を発行するデバイスである。例えば、予約ステーションはスケジューラである。各スケジューラ１１８は、実行コア１２４への発行を待つ幾つかのペンディング中の命令に関する命令情報（例、オペランド値、オペランドタグ、及び／又は即値データと同様のビット符号化された実行ビット）を保持することができる。ある種の実施形態では、各スケジューラ１１８が、オペランド値を記録することはできない。その代わりに、オペランド値が実行コア１２４によって（レジスタファイル１１６又は結果バス１３０から）読み出し可能となる時点を判定するために、レジスタファイル１１６において利用可能な発行された命令及び結果を各スケジューラが監視し得る。ある種の実施形態では、各スケジューラ１１８は専用の関数ユニット（例えば、整数ユニット、浮動小数点ユニット、読出／書込ユニットなど）及び／又は実行コア１２４に関連付けられ得る。他の実施形態では、シングルスケジューラ１１８が、１又は複数のレシピエント(recipient)に命令を発行し得る。
【００２２】
各スケジューラ１１８は、実行コア１２４によって実行されるオペレーション情報を一時的に記録するために提供され得る。各命令は、実行コア１２４に対して発行されて、実行時に利用可能となった所要のオペランド値に応答して実行される。従って、オペレーションが実行される順序は、元のプログラム命令シーケンスの順序とは同じでない可能性がある。
【００２３】
一実施形態では、実行コア１２４の各々が、シフト、ローテート、論理演算、及び分岐オペレーションと同様に、加算及び減算の整数演算オペレーションも実行するように構成された、整数ユニットなどの関数ユニットを含み得る。浮動小数点演算を行うように、浮動小数点ユニットを含めてもよい。１又は複数の実行コア１２４は、読出／書込ユニット１２６によって実施される読み出し及び書き込みメモリオペレーション用のアドレス生成を行うように、構成され得る。
【００２４】
実行コア１２４は、分岐予測ユニット１３２に条件付き分岐命令の実行に関する情報も与えることができる。実行コア１２４からの情報が分岐予測が誤っていることを示す場合に、分岐予測ユニット１３２は、命令プロセッシングパイプラインに入力済みの予測を誤った分岐に後続する命令をフラッシュして、プリフェッチユニット１０８をリダイレクトできる。リダイレクトされたプリフェッチユニット１０８は、次に、命令キャッシュ１０６、トレースキャッシュ１６０、及び／又はシステムメモリ２００から、正しい命令セットのフェッチを開始する。そのような状況では、予測を誤った分岐命令の後に発生した元のプログラムシーケンスにおける命令の結果は廃棄される。これには、投機的に実行されて、読出／書込ユニット１２６及び／又はレジスタファイル１１６に一時的に記録されたものを含む。
【００２５】
実行コア１２４内のコンポーネントによって生成された結果は、レジスタ値が更新されていれば、結果バス１３０でレジスタファイル１１６に出力され得る。メモリ位置の内容が変更されていれば、実行コア１２４内で生成された結果は、読出／書込ユニット１２６に与えられる。
【００２６】
読出／書込ユニット１２６は、実行コア１２４とデータキャッシュ１２８との間にインタフェースを提供する。一実施形態では、読出／書込ユニット１２６が、ペンディング中の読み出し又は書き込みに関するデータ及びアドレス情報のために、いくつかの記録のための場所を備えた読出／書込バッファを含んで構成され得る。読出／書込ユニット１２６は、ペンディング中の書き込み命令に対するロード命令の依存性チェックも行い、データのコヒーレンシが確実に維持されるようにする。
【００２７】
データキャッシュ１２８は、読出／書込ユニット１２６とシステムメモリ２００との間で転送されるデータを一時的に記録するために提供されるキャッシュメモリである。上述の命令キャッシュ１０６と同様に、データキャッシュ１２８は、セットアソシアティブ構成（set associative configuration）を含む、様々な特定のメモリ構成において実装可能である。さらに、ある実施形態において、データキャッシュ１０６及び命令キャッシュ１２８は、一つにまとめられたキャッシュとして実装可能である。
【００２８】
リタイアキュー１０２は、プログラムトレースを識別する信号をトレースジェネレータ１７０に送る。トレースジェネレータ１７０は、フィルユニット(fill unit)としても説明される。トレースジェネレータ１７０は、トレースキャッシュ１６０にリタイアキュー１０２が識別したトレースを記録する。各トレースは、プログラムの順序以外の順序で記録され、いくつかの異なる基本ブロックの一部である命令を含む。基本ブロックとは、すべてが実行される、もしくはすべてが実行されない、命令セットである。言い換えれば、ある基本ブロックにおいていずれかの命令が実行されると、その基本ブロックにおけるあらゆる命令も実行される。分岐命令の直後に開始し、別の分岐命令とともに終了する命令セットは、基本ブロックの一例である。ある実施形態において、トレースキャッシュ１６０に記録されたトレースは、デコードされた、若しくは部分的にデコードされた命令を含み得る。本明細書で使用されるように、“トレース”は、トレースキャッシュ１６０において単一のトレースキャッシュエントリ（例えば、単一の列或いはライン）内に記録される命令グループである。エントリのすべての情報は（例えば、トレースキャッシュの読み出しサイクルのアサーションに応答して）同時にアクセスされ得る。他の実施形態では、トレースジェネレータ１７０はプロセッサのフロントエンドに結合され（例えば、ディスパッチユニットの前又は後）、フェッチ及び／又はディスパッチされた命令に応答してトレースを生成するように構成され得る。
【００２９】
プリフェッチユニット１０８は、トレースキャッシュ１６０からディスパッチユニット１０４に命令をフェッチし得る。トレースキャッシュ１６０から命令をフェッチすることによって、命令キャッシュ１０６からのフェッチと比較すると、分岐の境界にわたってフェッチパフォーマンスが向上する。例えば、分岐が予測通りであった場合、予測されたとおりのパスにおける命令は、トレースキャッシュ１６０内の分岐と同じトレースに既に記録済であり得る。更に、命令が少なくとも部分的にデコードされた形態でトレースキャッシュ１６０に記録される実施形態では、トレースキャッシュから命令をフェッチすることによって、デコードユニット１４０を少なくとも部分的にバイパスする。その結果、キャッシュした命令に対してディスパッチサイクル数が減少する。従って、トレースキャッシュ１６０は、トレースが１回以上実行される場合に、実行を何回も繰り返して、キャッシュした命令を部分的に（又は完全に）デコードするのに使う時間を償却する(amortize)ことができる。
【００３０】
プロセッサ１００は、本明細書に示しているものに加えて、多くのその他のコンポーネントを含み及び／又は多くのその他のコンポーネントに結合され得る。例えば、プロセッサ１００とシステムメモリ２００との間に、（プロセッサ１００の内部及び／又は外部に）付加的なキャッシュのレベルを含むことができる。同様にある実施形態では、プロセッサ１００が、システムメモリ２００を制御するように構成された、統合されたメモリコントローラを含み得る。更に、各ロジカルコンポーネント間の相互接続は、各実施形態間で変化し得る。
【００３１】
トレースキャッシュ
図２は、一実施形態による典型的なトレースキャッシュ１６０を例示している。トレースキャッシュ１６０は、いくつかのエントリ１６２を含み得る。各エントリ１６２は、いくつかの命令１６５を含むトレースを記録する。トレースの各命令１６５はプログラムの順序で記録され得ない。例えばエントリ１６２は、分岐命令と、分岐が選択される場合にその分岐の宛先(destination)となる命令（プログラムの順序で分岐に従う命令とは対称的に）と、の両方を記録し得る。ある実施形態では、各トレースキャッシュエントリ１６２の各命令１６５が、少なくとも部分的にデコードされた形態で記録され得る。本明細書中で使用されているように、用語“トレース”は、単一のトレースキャッシュエントリ１６２に記録された１又は複数の命令のグループを称する。
【００３２】
図１において、トレースキャッシュ１６０からフェッチされた命令ストリームの処理と、命令キャッシュ１０６からフェッチされた命令ストリームの処理とは異なる。命令キャッシュ１０６からの命令ストリームは、各命令が１又は複数のコンポーネントオペレーションにデコードされた後であっても、各命令の境界を識別する情報を含み得る。この境界情報は、特定の命令に対応するオペレーションがいつ中止可能であるかを判断するために、リタイアキュー１０２によって使用され得る。通常、リタイアキュー１０２は、元のプログラムの順序でオペレーションを中止するように動作する。同じ命令に対応するオペレーションは同時に中止される。
【００３３】
これに対して、トレースキャッシュ１６０からの命令ストリームは、トレースキャッシュ１６０に記録される前に、既に命令がデコード済み及び／又は（例えば、トレースキャッシュ１６０内の記録効率を高めるために、命令を組み合わせることによって）変更済みの場合は、命令の境界を識別する情報を含み得ない。その結果、リタイアキュー１０２は、そのような命令ストリームなどに含まれる命令をまとめて（on courser granularity）中止する必要があり得る。例えばある実施形態においてリタイアキュー１０２は、トレースに含まれるどのような命令も、そのトレースのすべての命令が中止可能となるまで中止することができない。
【００３４】
あるトレースキャッシュベースのプロセッサに生じる１つの問題とは、本明細書中で“例外”命令と称されている特定の命令が、それらの命令が中止される場合に影響を及ぼす特定の処理を要求する点である。例外命令と同じトレースにあるその他の命令（プログラム順で以前に発生したものを含む）は、中止の準備ができた例外命令に依存して中止され得るので、そのような例外命令によって、そのトレースにあるその他の命令の中止が阻止され得る。ある状況では、例外命令を中止しないことによって、同じトレースに含まれるより古いオペレーションの中止が阻止されると、プロセッサはデッドロック状態となり得る。更に、そのトレースキャッシュから与えられる命令の境界情報不足によって、例外命令が同じトレースにあるその他の命令の中止を阻止する場合は、そのトレースにある中止できないすべての命令（及び、プログラムの順序で既にディスパッチされた、あらゆる新しい命令）は、命令キャッシュから再フェッチされて、再実行される必要がある。
【００３５】
例外命令には、例外若しくは割込みを生成する命令を含む。例外命令は、非例外命令と比べて、完了までに非常に時間がかかる可能性がある。例えば実行コア１２４は、一般的な非例外命令を１〜３の実行サイクルで完了する。それに対して例外命令は、実行するのに１０倍（或いは１０倍以上）の実行サイクルを必要とする割り込みを生成し得る。少なくともいくつかの例外命令とともに、特定の例外命令よりも（プログラムの順序で）古いすべての命令が、その例外命令とは関係なく中止できる点は有益であり、且つ要求される。上述のように、あるトレースで命令の境界情報が不足すると、同じトレースの別の命令が単独で中止する機能を低下、若しくはなくす。従って、あるトレースに、その他の命令とともに例外命令を含むことによって、そのトレースキャッシュのすべての命令が、境界情報を得るために命令キャッシュから再フェッチされる必要がある、ということになり得る。
【００３６】
トレースジェネレータ１７０は、その他の命令の中止の阻止、及び／又は、その他の命令の破棄、再フェッチ、及び再実行、の例外命令の可能性を低減するために、例外命令を検出して、あらゆる命令を含むトレースにそのような例外命令を記録しないように構成され得る。ある実施形態では、トレースジェネレータ１７０が、検出された例外命令を、その例外命令だけを含むトレースに記録し得る。このような構成によって、トレースキャッシュの記録効率が低下し得るが、この構成により、命令キャッシュ１０６とトレースキャッシュ１６０間を切り替えてフェッチするのではなく、トレースキャッシュから継続してフェッチすることができる。その他の実施形態では、トレースジェネレータ１７０が、検出した例外命令をトレースキャッシュ１６０にまったく記録せず、そのために、その例外命令は常に命令キャッシュ１０６からフェッチされる。トレースジェネレータ１７０は、あるトレースキャッシュ内のあるトレースキャッシュエントリにおいて、命令のグループを記録する手段の一例である。
【００３７】
トレースジェネレータ１７０は、特定のオペレーションコード、オペランド、アドレッシングモード、及びその他の特徴に対して、トレースキャッシュに記録されるそれぞれの候補となる命令を検査することによって、例外命令を検出し得る。一実施形態では、トレースジェネレータ１７０に、例外命令の可能性がある特徴を識別するステップがプログラムされ得る。そのような実施形態では、トレースジェネレータ１７０が、特定の形式の命令を、そのような形式のオペレーション(命令)がある特定の状況下で特定の処理を行うことなく実行可能な場合であっても、例外命令として常に識別するように構成され得る。ある実施形態では、デコードユニット１４０は、命令のデコード中に例外命令を識別するタグを生成し得る。各タグは、そのタグにより例外であると識別されデコードされた命令とともに、プロセッサ１００を通過し得る。従って、デコードされた命令が例外であるかを単独で判断するのではなく（若しくは単独で判断することに加えて）、トレースジェネレータ１７０は、デコードユニット１４０により生成されたタグに依存して、例外命令を識別し得る。従って、トレースジェネレータ１７０とデコードユニット１４０とは、ともに命令グループ内の例外命令の検出を行う手段の一例である。
【００３８】
トレースキャッシュ１６０に記録された命令ストリームにおける例外命令の検出に応答して、トレースジェネレータ１７０は、（そのトレース内に更なる命令を記録するスペースを利用できる場合であっても）現在のトレースへの命令の記録を終了する。トレースジェネレータがトレースキャッシュ１６０内のスタンドアローントレースに例外命令を記録するように構成される場合、そのトレースジェネレータは、例外命令を記録するための新たなトレースキャッシュエントリを割り当てる。トレースジェネレータ１７０は、例外命令の直後に発生する次の命令を、プログラムの順序で、更に別のトレースキャッシュエントリに記録し得る。そうではなく、トレースジェネレータ１７０がトレースキャッシュ１６０から例外命令を完全に排除するように構成されている場合、そのトレースジェネレータ１７０は、例外命令が検出されると現在のトレースを終了して（その現在のトレースに、その他の古い命令が記録済みでない場合を除いて）、次の非例外命令をプログラムの順序で記録開始する。この非例外命令は、次のトレースの、次のトレースキャッシュに記録される候補である。このトレースジェネレータ１７０は、現在のトレースにフロー情報をセットして、その例外命令がフェッチすべき次の命令であることを示す。従って、フェッチされるトレースに応答して、プリフェッチユニット１７０は、命令キャッシュ１０６から、フロー情報において識別された命令をプリフェッチするように構成され得る。従って、実行ストリームは、例外命令がトレースキャッシュ１６０から除外されることで、トレースキャッシュ１６０から命令キャッシュ１０６に切り替える。 
【００３９】
トレースジェネレータ１７０によって検出されない例外命令もある。例えばいくつかの命令は、それらの命令が実行される度に違った動作をし得る。そのような命令（例えば、そのような命令が例外であることはほとんどない）の性質(nature)のために、トレースジェネレータ１７０は、それらの命令が例外であると自動的に識別しないように構成され得る。その結果、このような例外命令は、トレースジェネレータ１７０によってその他の命令とともにトレースに記録され得る。同じトレースのその他の命令の中止が阻止されたことによって、そのような例外命令を含むことにより問題を引き起こさないようにするために、再起動ロジック１９０は、リタイアキュー１０２が最後に全オペレーションを中止してから、いくつのクロックサイクルが経過したかを監視する。所定のクロックサイクル数において中止されたオペレーションがない場合、再起動ロジック１９０は、命令キャッシュ１０６からプロセッサ１００の実行を再起動し得る。一実施形態では、再起動ロジック１９０が、プロセッシングパイプラインをフラッシュして、プロセッサ１００内の最も古い未処理の中止されていない命令から各命令の再フェッチを行い、実行を再起動する。各命令が命令キャッシュ１０６からフェッチされると、命令境界に関する情報は、リタイアキュー１０２で利用可能になる。従って、あるトレースの中止を阻止した例外命令によって、中止されない命令が再起動ロジック１９０によって検出される場合、命令キャッシュ１０６から命令をフェッチすることによって、リタイアキュー１０２は、その他の命令の中止を不必要に阻止することなく問題のある例外命令を単独で中止することができる。
【００４０】
特定の命令は再実行不可能であるので、そのような命令がトレースキャッシュ１６０から実行され、同じトレースに含まれる例外命令によって中止が阻止され、再起動ロジック１９０のオペレーションにより再実行される場合に、それらの命令は誤りであり得る。例えば、特定のロード（例えば、Ｉ／Ｏロード）のパフォーマンスは、読み出された値を変更し得る。そのような命令が再実行される場合に生じる問題を回避するために、トレースジェネレータ１７０は、このような命令をその他の命令とともに各トレースには記録されていない別の種類の例外命令として識別するように構成され得る。従って、トレースジェネレータ１７０は、トレースキャッシュ１６０からこのような例外命令を排除、若しくはあらゆる命令を含まないスタンドアローントレース（例えば、一般的な例外命令に関して上述しているような）へのこのような例外命令の記録、のいずれかを行う。
【００４１】
いくつかの再実行不可能命令は、特定のその他の例外命令と同様に、トレースジェネレータ１７０によって検出され得ない。例えばあるロードは、１つのプログラムを繰り返す間、システムメモリ２００にアクセスし、また次のプログラムを繰り返す間、Ｉ／Ｏレジスタにアクセスし得る。第１の繰り返し後に、このロードはあるトレースに記録され得る。次の繰り返しの間、このロードは、Ｉ／Ｏレジスタ読み出し特性のために、再実行が不可能になり得る。従って、このロードと同じトレースの別の命令は例外となり（例えば、別の命令がページフォールトを生成する場合）、トレースの中止が、再起動ロジック１９０がトリガ（trigger）するのに十分な期間遅延される。しかしこのことによって、受入れられない（unacceptably）ほどのロードが再実行される。この状況を回避するために、ディスパッチユニット１０４若しくはプロセッサ１００内のその他のコンポーネントは、ロードが実際に実行される前に、ある時点において、再実行が不可能になったとして、ロードを識別するように構成され得る。トレースキャッシュ１６０からフェッチされた命令グループ内の再実行が不可能な命令の検出に応答して、再起動ロジック１９０は、（再実行不可能命令を実行する前に）プロセッサパイプラインをフラッシュさせ、命令キャッシュ１０６から命令を再起動させる。
【００４２】
一般的トレース
図３Ａは、少なくとも部分的にデコードされた命令を記録するように構成された、トレースキャッシュエントリ１６２の一実施形態を例示している。図３Ａの実施形態では、トレースキャッシュエントリ１６２が、デコード及び／又は部分的にデコードされた命令のグループに含まれる８のコンポーネントオペレーションを、オペレーション記録ユニット１６６Ａ〜１６６Ｈに記録し得る。その他の実施形態は、８以下若しくは８以上のオペレーション記録ユニット１６６を含むことができ、各トレースキャッシュエントリ１６２内に異なる数のオペレーションを記録することができる。
【００４３】
トレースキャッシュエントリ１６２内の特定のオペレーション記録ユニット１６６は、特定の形式のオペレーション用に予約され得る。例えば一実施形態では、オペレーション記録ユニット１６６Ａ〜１６６Ｄは、各メモリオペレーションを記録するために使用され得る。同様に、各オペレーション記録ユニット１６６Ｅ〜１６６Ｈは、各データオペレーションを記録するために使用され得る。その他の実施形態は、特定の形式のオペレーションを、特定のオペレーション記録ユニットにそれぞれ関連付ける（若しくは、まったく関連づけない：or not al all）。
【００４４】
いくつかのオペレーション記録ユニット１６６の他に、各トレースキャッシュエントリ１６２は、識別タグ１６４及びフローコントロール情報１６８も含む。タグ１６４は、命令キャッシュ１０６のタグと同じであり、所定のオペレーションがトレースキャッシュ１６０でヒットするか或いはミスするかを、プリフェッチユニット１０８に判断させる。例えばタグ１６４は、トレースキャッシュエントリ内の命令を識別するすべての或いは一部のアドレスビットを含み得る（例えばタグは、プログラムの順序で、そのトレース内に記録された最も早い命令のアドレスを含み得る）。ある実施形態では、タグには、トレースに記録された情報を使用して各命令（若しくは、各必要度グループ内の少なくとも最も早い命令であり、以下に更に詳細を説明する）のアドレスが単独での識別が可能なほど十分な情報が含まれ得る。その他の実施形態では、トレース内の最も早い命令のアドレスだけが利用可能となり得る。
【００４５】
例示の実施形態において、各トレースは２つまでの分岐命令を含み得る。その他の実施形態は、各トレース内に２つ以下若しくは２つ以上の分岐命令を含み得る。フローコントロール情報１６８は、トレース内に含まれる各分岐命令用のラベルを含み得る。このラベルは、それぞれの分岐の決定(resolution)に応じてコントロールの分岐先となるアドレスを識別する表示となり得る。従ってフローコントロール情報１６８の各アイテムは、特定の分岐オペレーションに関連づけられ得る。例えば一実施形態では、トレース内の１つのフローコントロール情報を記録する位置は、そのトレースの第１の分岐オペレーションに関連づけられ、その他のフローコントロール情報を記録する位置は、そのトレースの第２分岐オペレーションに関連づけられる。その他の形態では、フローコントロール情報は、タグ又はそのフローコントロール情報が関連づけられる分岐オペレーションを識別するその他の情報を含み得る。更にその他の実施形態では、分岐予測及び／又はどのフローコントロール情報が分岐オペレーションに対応するかを識別する情報は、その分岐オペレーションとともにオペレーション記録ユニット１６６内に記録され得る。
【００４６】
トレース内の中止の頻度を高める（Providing increased retirement granularity within traces）
先に述べたように、トレース内の命令境界に関して制限された情報があり得る。例えば、各命令があるトレースに記録される前にそれぞれのコンポーネントオペレーションに部分的にデコードされると、そのトレースには、そのトレースの別の命令を説明(delineate)したどのような情報も含まれない。更に、デコードされた後、異なる命令の各コンポーネントオペレーションが、組み合わせられ、リオーダされ、及び／又は修正されると、命令の境界を識別することは更に一層困難になる。
【００４７】
更なる命令境界情報をトレース内に提供するために、トレース内のデコードされた命令は、異なる必要度グループにさらに分割され得る。トレースジェネレータ１７０は、特定のトレースキャッシュエントリ内に記録されたそれぞれのデコードされた命令を、そのトレース内の特定の必要度グループに属するものとしてタグ付けし得る。各必要度グループ内のデコードされた命令の命令境界についての情報は、得ることができない。しかし、デコードされた命令が必要度グループの境界で中止されるように、必要度グループ自体が生成され得る。
【００４８】
トレース内の各オペレーション１６６は、関連する必要度表示を有することができる。各オペレーションの必要度表示は、それに関連づけられたオペレーションとともに、オペレーション記録ユニット１６６の１つに記録され得る。必要度表示は、各オペレーションが属する必要度グループを識別する。各必要度グループはトレース内の各オペレーションのグループであり、各オペレーションは同じ基本ブロックの一部である。例えば、トレース内のプログラムの順序で第１分岐オペレーション以下の各オペレーションは、１つの必要度グループに含まれる。第１分岐オペレーションの決定に実行を依存するオペレーションは、別の必要度グループに含まれ得る。従ってある必要度グループは、同じ必要度グループの各オペレーションがすべて実行される、若しくはすべて実行されない点で、基本ブロックと同じである。ある必要度グループは、同じ基本ブロックの各オペレーションが別の各トレースに含まれる点で、基本ブロックとは異なる（例えば、基本ブロック内のいくつかのオペレーションは、１つのトレース内の最終の必要度グループに含まれるとともに、その基本ブロックの残りの各オペレーションは、別のトレースの第１必要度グループに含まれ得る）。従って、同じ必要度グループ内の各オペレーションは、同じ基本ブロックには必要な部分であるが、同じ基本ブロック内の各オペレーションは、同じ必要度グループに必ずしも必要な部分ではない（つまり、その基本ブロックが１以上のトレースキャッシュエントリに及ぶ場合）。
【００４９】
必要度表示は、同じトレースキャッシュエントリに含まれる分岐オペレーションに対して、各オペレーションのプログラムの順序を識別する。第１必要度グループの各オペレーションは、トレース内の第１分岐オペレーションの結果に依存しない。第１分岐オペレーションは条件付きで実行されないので、第１分岐オペレーションは、第１必要度グループの一部である。第１必要度グループのこれらのオペレーションは、第１分岐オペレーション後に発生するオペレーションの第２必要度グループを識別するために使用される必要度表示とは別の必要度表示として識別され得る。同様に、第１分岐オペレーションと第２分岐オペレーションの両方の結果に依存する第３必要度グループの各命令（つまり、第２必要度グループに含まれる最終オペレーション）は、更に別の必要度表示として識別され得る。必要度表示によって、各オペレーションはトレースキャッシュエントリ１６２内に、それらのプログラムの順序とは異なる順序での記録することができ、一方で、（各分岐オペレーションに対する）各オペレーションのプログラムの順序も決定することができる。
【００５０】
更に、各必要度表示によって、ディスパッチユニット１０４は、特定のトレース内のどのオペレーションが実行されるかを予測することができる。第１必要度グループのオペレーション（つまり、あるトレースに含まれる第１分岐に依存しない各オペレーション）は、常に実行される（そのトレース内の、いかなるオペレーションも実行すると推測する）。しかし、第２必要度グループにおけるオペレーションの実行（つまり、第１分岐に依存する各オペレーション）は、第１分岐の結果に依存する。例えば、トレースジェネレータ１７０がプロセッサ１００のプロセッシングパイプラインのバックエンドにおいて含まれる実施形態において、各オペレーションは、各オペレーションが引き続き再度実行される場合に、それらのオペレーションが命令キャッシュからではなく、トレースキャッシュからアクセスされるように、各オペレーションが実行した順序に従って各トレースに記録され得る。従って、トレース内に記録された第１分岐が、その分岐を実行したときに初めて選択された場合、第２必要度グループに記録された各オペレーションは、第１分岐が行われた場合に実行される必要があるオペレーションであり得る。従って、トレースが遅れてディスパッチユニット１０４に提供され、その第１分岐に対して現在の分岐予測が“予測どおりでない”場合に、ディスパッチユニット１０４は、第２必要度グループの各オペレーションは実行されるべきではないと予測し得る。第１分岐オペレーションに関連づけられたフローコントロール情報１６８は、第１分岐が予測どおりでない場合に実行される必要のある命令若しくはトレースのプリフェッチを開始するためにも使用され得る。
【００５１】
図３Bは、一実施形態で使用され得る、一般的な必要度エンコーディング（必要度を符号化したもの）(liveness encoding)を示す。第１必要度エンコーディング（無条件に必要：unconditionally live）は、トレース内の第１の（プログラムの順序で）必要度グループを識別するために使用され得る。この必要度グループの各オペレーションは、トレースが実行される場合、これらのオペレーションが常に実行されるという点で、無条件の存在（live）である。この第１必要度グループは、その必要度グループ内に、最終オペレーション（プログラムの順序で）として分岐オペレーションを含み得る。これらのオペレーションは、同じトレース内に含まれるいずれの分岐オペレーションにも依存しない。多くの実施形態では、これらのオペレーションが、そのトレース内に相互に関連のある順序で記録され得る。
【００５２】
次の必要度エンコーディング（第１分岐に続く:subsequent to first branch）は、そのトレース内の第２の（プログラムの順序で）必要度グループを識別するために使用される。これらのオペレーションは、以前の必要度グループに含まれる第１分岐オペレーションの結果に依存する。この必要度グループ内のいずれかのオペレーションが非投機的に実行される場合、この必要度グループ内のすべてのオペレーションは実行される。
【００５３】
第３必要度エンコーディング（第２分岐に続く:subsequent to second branch）は、そのトレース内の第３の（プログラムの順序で）基本ブロックを識別するために使用される。これらのオペレーションは、トレース内の第１及び第２分岐オペレーションの両方の結果に依存する。従って、第２必要度エンコーディングを有するオペレーションを実行する場合であっても、これらのオペレーションは実行し得ない。上述したように、この必要度グループ内のいずれのオペレーションが非投機的に実行される場合、この必要度グループ内のすべてのオペレーションは実行される。
【００５４】
“無条件に不要:unconditionally dead”な必要度エンコーディングは、未使用のオペレーション記録ユニット１６６を識別するために使用され得る。各オペレーション記録ユニット１６６は、一連のオペレーション内に最大数を超える分岐オペレーションが発生する場合には、未使用となり得る。例えば、あるトレースに８つまでのオペレーションを記録し、あるトレースには分岐オペレーションを２つだけ記録できる場合に、所定の一連の８つのオペレーションが分岐オペレーションを３つ含む場合には、８つ未満のオペレーションがあるトレースに記録され得る。従って、あるトレース内に記録可能な各分岐オペレーションの第Ｎ番目に最大限度を定めると、そのトレースの第Ｎ番目の分岐オペレーションの記録により、そのトレースを終了させる。更にある実施形態では、あるトレース内にある特定のオペレーションが記録されると、（プログラムの順序で）次のオペレーションは、オペレーションの記録を利用することができる場合であっても、トレース内には記録され得ない。例えば、サブルーチンコールオペレーションは、あるトレースを終了させる（例えば、サブルーチン内の第１オペレーションが別のトレース内の第１オペレーションとして記録され、その結果、そのオペレーションのタグがトレースタグとして使用される）。同様に、サブルーチンリターンオペレーションは、あるトレースを終了させる。
【００５５】
図１を参照すると、トレースジェネレータ１７０は、各オペレーション用に適切な必要度エンコーディングを生成するとともに、トレースキャッシュ１６０のトレースキャッシュエントリ１６２内のオペレーションと同じオペレーション記録ユニット１６６内に、その必要度エンコーディングを記録するように構成されている。トレースジェネレータ１７０は、各分岐オペレーションが初めて実行されたときに、各分岐の結果に関する情報に基づいて、各オペレーション用の必要度エンコーディングを生成し得る。この情報は、リタイアキュー１０２から提供され得る。付加的情報は、分岐予測ユニット１３２から提供され、１又は複数の前の実行において予測した結果及び／又は各分岐に対する各予測の成功を識別する。
【００５６】
命令がトレースキャッシュ１６０からフェッチされると、各オペレーションに関連づけられた必要度エンコーディング(liveness encoding)は、プロセッサを介して命令とともに広められる。リタイアキュー１０２は、各オペレーション用の必要度エンコーディングを使用して、各オペレーションを中止するための境界を定める。例えば、リタイアキュー１０２は、あるトレース（そのトレースのあらゆるオペレーションは中止の準備ができている）において各オペレーションの中止を阻止するのではなく、そのトレース内の同じ必要度グループの全オペレーションが中止可能になるとすぐに、各オペレーションのサブセットを中止し得る。ある実施形態では、中止の頻度(granularity)が高められると、中止が阻止されるために、再起動ロジック１９０が実行の再起動を必要とする可能性を低減する。
【００５７】
図４は、あるトレースキャッシュに記録するために各トレースを生成する方法の一実施形態を例示している。１又は複数の命令は、記録のためにトレースキャッシュに受信される（１０）。いずれかの命令が例外である場合（例えば、いずれかの命令が例外を引き起こす可能性がある、若しくはどの命令も再実行できない場合）、各例外命令は、どのような他の命令とも同じトレースには記録され得ない（１２、１４）。（１０）で受信した命令がどれも例外でない場合、これらの命令は同じトレースに記録され得、及び／又は付加的な非例外命令と同じトレースに含まれ得る（１２、１６）。
【００５８】
図５は、トレースキャッシュ内のトレースに偶然に含まれた、未検出の例外命令を処理する方法の一実施形態のフローチャートである。命令ストリームは、トレースキャッシュからフェッチされる（２０）。フェッチされた命令ストリームから例外命令が検出されると（２２）、パイプラインはフラッシュされ、命令キャッシュからプロセッサの実行が再起動され得る（２４）。
【００５９】
命令ストリーム内の例外命令には、（２２）で検出されないものもあり得る。そのような命令が例外を引き起こす場合、該命令は、例外命令と同じトレースにあるその他の命令の中止を阻止し、プロセッサパイプラインはフラッシュされるとともに、命令キャッシュから実行が再起動され得る（２６、２８）。命令の中止が阻止されているかを判断するステップにおいて、命令の中止が監視され得る。所定のサイクル数に対して中止される命令がない場合、中止は阻止されたものとして識別される。命令の中止が阻止されない場合、トレースキャッシュからフェッチされた命令ストリームによって、実行及び中止が可能になる（２６、３０）。
【００６０】
例示的コンピュータシステム
図６は、バスブリッジ４０２を介して様々なシステムコンポーネントに結合されたプロセッサ１００を含む、コンピュータシステム４００の一実施形態のブロック図を示す。プロセッサ１００は、上述したように、ディスパッチユニット１０４、トレースキャッシュ１６０、リタイアキュー１０２、再起動ロジック１９０、及び／又はトレースキャッシュジェネレータ１７０を含む。コンピュータシステムの他の実施形態が、可能であり考えられる。図示されたシステムにおいて、メインメモリ２００はメモリバス４０６を介してバスブリッジ４０２に結合され、グラフィクスコントローラ４０８はＡＧＰバス４１０を介してバスブリッジ４０２に結合される。いくつかのＰＣＩデバイス４１２Ａ〜４１２Ｂは、ＰＣＩバス４１４を介してバスブリッジ４０２に結合される。第２バスブリッジ４１６も、ＩＳＡ／ＥＩＳＡバス４２０を介して、ＥＩＳＡ又はＩＳＡデバイス４１８のうちの１又は複数に電気的インタフェースを適用するように提供することが可能である。この実施例では、プロセッサ１００が、ＣＰＵバス４２４を介してバスブリッジ４０２に結合されるとともに、Ｌ２キャッシュ４２８に結合される。ある実施形態では、プロセッサ１００が統合されたＬ１キャッシュ（図示せず）を含むことが可能である。
【００６１】
バスブリッジ４０２は、プロセッサ１００、メインメモリ４０４、グラフィクスコントローラ４０８、及びＰＣＩバス４１４に接合されたデバイス、の各々の間のインタフェースを提供する。バスブリッジ４０２に接続されたデバイスの１つからオペレーションが受信されると、バスブリッジ４０２は、このオペレーションの目標（例えば、特定のデバイス若しくはＰＣＩバス９１４の場合、目標がＰＣＩバス４１４上にあるデバイス）を識別する。バスブリッジ４０２は、目標となるデバイスにオペレーションを伝送する。バスブリッジ４０２は、通常、ソースデバイス又はバスによって使用されるプロトコル、或いはターゲットデバイス又はバスによって使用されるプロトコルからのオペレーションを変換する。
【００６２】
ＰＣＩバス４１４のためにＩＳＡ／ＥＩＳＡバスにインタフェースを提供することに加えて、第２バスブリッジ４１６は、更なる機能性を内蔵し得る。第２バスブリッジ４１６の外部或いは第２バスブリッジに統合されているうちの何れかである入出力コントローラ（図示せず）は、コンピュータシステム４００内に含むことができ、キーボード及びマウス４２２と様々なシリアル及びパラレルポートに関するオペレーショナルサポートを提供する。他の実施形態では、外部キャッシュユニット（図示せず）が、プロセッサ１００とバスブリッジ４０２との間のＣＰＵバス４２４にも結合され得る。他の形態では、外部キャッシュがバスブリッジ４０２に結合され、この外部キャッシュのキャッシュコントロールロジックが、バスブリッジ４０２に統合可能である。Ｌ２キャッシュ４２８は、プロセッサ１００の後方の構成に示される。Ｌ２キャッシュ４２８は、プロセッサ１００から分離してもよく、プロセッサ１００とともにカートリッジ（例、スロット１又はスロットＡ）内に統合してもよく、或いはプロセッサ１００とともに半導体基板上に統合されてもよい。
【００６３】
メインメモリ２００はアプリケーションプログラムが記録され、プロセッサ１００が主に実行するメモリである。適当なメインメモリ２００としては、ＤＲＡＭ（Dynamic Random Access Memory）がある。例えば、複数のＳＤＲＡＭ（Synchronous ＤＲＡＭ）或いはラムバスＤＲＡＭ （Ramubs ＤＲＡＭ；Rambus 社開発のＤＲＡＭ）バンクが適当であり得る。
【００６４】
ＰＣＩデバイス４１２Ａ〜４１２Ｂは、ネットワークインタフェースカード、ビデオアクセラレータ、オーディオカード、ハードディスクドライブ、フレキシブルディスクドライブ、これらディスクドライブのドライブコントローラ、ＳＣＳＩ（Small Computer System Interface）アダプタ、及びテレフォニーカードのような多様な周辺デバイスを示す。同様に、ＩＳＡデバイス４１８は、モデム、サウンドカード、及びＧＰＩＢ若しくはフィールドバスインタフェースカードなどの多様なデータ入手カード、といった様々な形式の周辺デバイスを示す。
【００６５】
グラフィクスコントローラ４０８は、ディスプレイ４２６へのテキスト及び画像のレンダリングをコントロールするよう提供される。グラフィクスコントローラ４０８は、メインメモリ２００及びメインメモリ２００から実効的にシフト可能である３次元データ構造を表現する技術分野で周知の一般的なグラフィクスアクセラレータを具体化できる。そのためにグラフィクスコントローラ４０８は、バスブリッジ４０２内のターゲットインタフェースへのアクセスを要求、受信可能であり、それによってメインメモリ２００へのアクセスを入手するＡＧＰバス４１０のマスタ（master）であり得る。専用のグラフィクスバスは、メインメモリ４０４からのデータの高速検索に対応する。ある種のオペレーションに関してグラフィクスコントローラ４０８は、ＡＧＰバス４１０上にＰＣＩプロトコルトランザクションを生成するように、更に構成可能である。そのためにバスブリッジ４０２のＡＧＰインタフェースは、ＰＣＩプロトコルターゲット及びイニシエータトランザクション同様に、ＡＧＰプロトコルトランザクションの双方を支援する機能を含み得る。ディスプレイ４２６は、画像或いはテキストが表示可能なあらゆる電子ディスプレイである。適切なディスプレイ４２６は、ＣＲＴ（Cathode Ray Tube）、ＬＣＤ（Liquid Crystal Display）等を含む。
【００６６】
ＡＧＰ、ＰＣＩ及びＩＳＡ又はＥＩＳＡバスは上記の例として用いられており、所望に応じてすべてのバスアーキテクチャが置き換えられることが注目される。コンピュータシステム４００は、追加のプロセッサ（例えば、コンピュータシステム４００の任意のコンポーネントとして示されるプロセッサ１００ａ）を含むマルチプロセッシングコンピュータシステムであり得ることに更に注目される。プロセッサ１００ａは、プロセッサ１００と同様であり得る。より具体的に、一実施形態では、プロセッサ１００ａが、プロセッサ１００の同一のコピーであり得る。プロセッサ１００ａは、独立したバスを介して（図６に示されるように）バスブリッジ４０２に接続されるか、或いはプロセッサ１００とＣＰＵバス４２４を共有することができる。更に、プロセッサ１００ａは、Ｌ２キャッシュ４２８と同様の任意のＬ２キャッシュ４２８ａに結合することができる。
【００６７】
図７を参照すると、コンピュータシステム４００の他の実施形態が示される。他の実施形態が可能であり、考えられる。図７の実施形態においては、コンピュータシステム４００はいくつかのプロセッシングノード６１２Ａ、６１２Ｂ、６１２Ｃ、及び６１２Ｄを含む。各プロセッシングノードは、各プロセッシングノード６１２Ａ〜６１２Ｄ内に含まれるメモリコントローラ６１６Ａ〜６１６Ｄを介して、各メモリ６１４Ａ〜６１４Ｄに結合される。加えてプロセッシングノード６１２Ａ〜６１２Ｄは、プロセッシングノード６１２Ａ〜６１２Ｄ間で通信に使用するためのインタフェースロジックを含む。例えば、プロセッシングノード６１２Ａは、プロセッシングノード６１２Ｂと通信するためのインタフェースロジック６１８Ａ、プロセッシングノード６１２Ｃと通信するためのインタフェースロジック６１８Ｂ、及び更なる他のプロセッシングノード（図示せず）と通信するための第３インタフェースロジック６１８Ｃを含む。同様に、プロセッシングノード６１２Ｂは、インタフェースロジック６１８Ｄ、６１８Ｅ、及び６１８Ｆを含む。プロセッシングノード６１２Ｃは、インタフェースロジック６１８Ｇ、６１８Ｈ、及び６１８Ｉを含む。プロセッシングノード６１２Ｄは、インタフェースロジック６１８Ｊ、６１８Ｋ、及び６１８Ｌを含む。プロセッシングノード６１２Ｄは、インタフェースロジック６１８Ｌを介して複数の入出力デバイス（例、デイジーチェーン構成におけるデバイス６２０Ａ〜６２０Ｂ）と通信するよう結合される。他のプロセッシングノードは、同様の方法で他のＩ／Ｏデバイスと通信し得る。
【００６８】
プロセッシングノード６１２Ａ〜６１２Ｄは、インタープロセッシングノード通信用にパケットベースのリンクを実装する。本実施形態において、このリンクは単方向ライン（unidirectional line）のセット（例えば、ライン６２４Ａがプロセッシングノード６１２Ａからプロセッシングノード６１２Ｂへパケットを伝送するように使用され、ライン６２４Ｂは、プロセッシングノード６１２Ｂからプロセッシングノード６１２Ａにパケットを伝送するように使用される）として実装される。その他のライン６２４Ｃ〜６２４Ｈのセットは、図７に例示しているように、その他のプロセッシングノード間にパケットを伝送するように使用される。一般的に、ライン６２４の各セットは、１又は複数のデータラインと、このデータラインに応じた１又は複数のクロックラインと、伝送されるパケット形式を示す１又は複数のコントロールラインと、を含む。リンクは、プロセッシングノード間の通信用にキャッシュコヒーレント、或いはプロセッシングノードとＩ／Ｏデバイス（或いはＰＣＩバス又はＩＳＡバスのような従来の構造のＩ／Ｏバスへのバスブリッジ）間の通信用に非コヒーレント、に動作させてもよい。更に、リンクは、図示されるように、Ｉ／Ｏデバイス間のデイジーチェーン構造を使用して非コヒーレントに動作され得る。１つのプロセッシングノードから別のプロセッシングノードに伝送されるパケットは、１又は複数の中間ノードを通じて伝送し得る。例えば、プロセッシングノード６１２Ａによってプロセッシングノード６１２Ｄまで伝送されたパケットは、図７に示すプロセッシングノード６１２Ｂ或いはプロセッシングノード６１２Ｃの何れかを介して伝送される。すべての適当なルーティングアルゴリズムが使用され得る。コンピュータシステム４００の他の実施形態は、図７に示す実施形態より多い或いは少ないプロセッシングノードを含み得る。
【００６９】
通常、各パケットは、ノード間のライン６２４に１又は複数のビット時間として伝送され得る。ビット時間は、対応するクロックラインのクロック信号の立ち上がり又は立ち下がりのエッジであり得る。パケットは、トランザクションを開始するためのコマンドパケット、キャッシュコヒーレンシを維持するためのプローブパケット、及びプローブ、コマンドに応答するための応答パケットを含み得る。
【００７０】
メモリコントローラ及びインタフェースロジックに加えて、プロセッシングノード６１２Ａ〜６１２Ｄは、１又は複数のプロセッサを含み得る。大まかに言って、プロセッシングノードは、少なくとも１プロセッサを含み、所要に応じて任意的にメモリと他のロジックと通信するためのメモリコントローラとを含み得る。より具体的には、各プロセッシングノード６１２Ａ〜６１２Ｄは、１又は複数のプロセッサ１００のコピーを含み得る。上述したように、プロセッシングノード６１２はそれぞれ、ディスパッチユニット１０４、トレースキャッシュ１６０、リタイアキュー１０２、再起動ロジック１９０、及び／又はトレースキャッシュジェネレータ１７０を含むプロセッサ１００を、含み得る。外部のインタフェースユニット１８は、メモリコントローラ６１６Dと同様に、ノード内にインタフェースロジック６１８を含み得る。
【００７１】
メモリ６１４Ａ〜６１４Ｄは、適当なすべてのメモリデバイスを含み得る。例えば、メモリ６１４Ａ〜６１４Ｄは、１又は複数のラムバスＤＲＡＭ（ＲＤＲＡＭ）、同期ＤＲＡＭ（ＳＤＲＡＭ）、スタティックＲＡＭ等を含み得る。コンピュータシステム４００のアドレススペースは、メモリ６１４Ａ〜６１４Ｄ間に分割される。各プロセッシングノード６１２Ａ〜６１２Ｄは、何れのアドレスが何れのメモリ６１４Ａ〜６１４Ｄにマッピングされるかを決定し、プロセッシングノード６１２Ａ〜６１２Ｄの何れに特定のアドレスのメモリ要求が送信されるかを決定するために用いられるメモリマップを含み得る。一実施形態において、コンピュータシステム４００におけるアドレスのコヒーレンシポイントは、このアドレスに対応するバイトを記録するメモリに結合されたメモリコントローラ６１６Ａ〜６１６Ｄである。言い換えれば、メモリコントローラ６１６Ａ〜６１６Ｄは、対応するメモリ６１４Ａ〜６１４Ｄへの各アクセスが、キャッシュコヒーレントにおいて生じることを確実にする役目を担う。メモリコントローラ６１６Ａ〜６１６Ｄは、メモリ６１４Ａ〜６１４Ｄへインタフェースするためのコントロール回路を含み得る。加えて、メモリメモリコントローラ６１６Ａ〜６１６Ｄは、メモリ要求をキュー（queuing）するための要求キューを含み得る。
【００７２】
インタフェースロジック６１８Ａ〜６１８Ｌは、リンクからのパケットを受信するとともにリンク上に伝送されるパケットをバッファリングする、様々なバッファを含み得る。コンピュータシステム４００は、パケットを伝送する適当なフローコントロール機構のすべてを使用し得る。例えば一実施形態において、各インタフェースロジック６１８は、インタフェースロジックが接続されるリンクの他の末端におけるレシーバ内のバッファの各形式数を記録する。インタフェースロジックは、受信するインタフェースロジックがパケットを記録するための空いているバッファを有さない場合に、パケットを伝送しない。受信バッファが伝送されるパケットを送信することによって解除されるので、受信インタフェースロジックが、メッセージを送信インタフェースロジックに伝送し、バッファが解除されたことを示す。そのような機構は、“クーポンベース（coupon-based）”システムと称される。
【００７３】
Ｉ／Ｏデバイス６２０Ａ〜６２０Ｂは、すべての適当なＩ／Ｏデバイスであり得る。例えば、Ｉ／Ｏデバイス６２０Ａ〜６２０Ｂは、これらのデバイスが結合され得る他のコンピュータシステム（例えば、ネットワークインタフェースカード又はモデム）と通信するデバイスを含み得る。更に、Ｉ／Ｏデバイス６２０Ａ〜６２０Ｂは、ビデオアクセラレータ、オーディオカード、ハードディスクドライブ、フレキシブルディスクドライブ、これらディスクドライブのドライブコントローラ、ＳＣＳＩ（Small Computer System Interface）アダプタ、テレフォニーカード、サウンドカード、及びＧＰＩＢ又はフィールドバスインタフェースカードのような様々なデータ入手カードを含み得る。用語“Ｉ／Ｏデバイス”及び“周辺デバイス”は、本明細書で同義語として意図される。
【００７４】
ここで使用されるように、用語“クロックサイクル”又は“サイクル”は、命令プロセッシングパイプラインの様々なステージがタスクを完了する時間間隔を意味する。命令及び計算された値は、クロックサイクルを定義するクロック信号に従ってメモリ素子（レジスタ或いはアレイ等）によって取得される。例えばメモリ素子は、クロック信号の立ち上がり又は立ち下がりのエッジに従って値を取得することができる。
【００７５】
これまでの開示を完全に理解したならば、当業者には様々な変形及び変更が可能であることが明白であろう。添付の特許請求の範囲はそのような変形及び変更の全てを包含するように解釈されることを意図したものである。
【産業上の利用可能性】
【００７６】
本発明は、概して、マイクロプロセッサの技術分野に適用可能である。
【図面の簡単な説明】
【００７７】
【図１】プロセッサの一実施形態を示す図。
【図２】一実施形態による、トレースキャッシュのブロック図。
【図３Ａ】一実施形態による、一般的なトレースキャッシュエントリの例示図。
【図３Ｂ】一実施形態による、トレースが属する各オペレーションの必要度グループを識別するために使用される必要度エンコーディングのテーブルを示す図。
【図４】一実施形態による、トレースキャッシュに記録するためのトレースを生成する方法のフローチャート。
【図５】一実施形態による、例外命令を含むトレースを実行する方法のフローチャート。
【図６】一実施形態による、コンピュータシステムのブロック図。
【図７】別の実施形態による、コンピュータシステムのブロック図。
【図１】
2007507791.tif 000003
【図２】
2007507791.tif 000004
【図３Ａ】
2007507791.tif 000005
【図３Ｂ】
2007507791.tif 000006
【図４】
2007507791.tif 000007
【図５】
2007507791.tif 000008
【図６】
2007507791.tif 000009
【図７】
2007507791.tif 000010
【国際調査報告】
2007507791.tif 000011
2007507791.tif 000012