(57)【要約】トレースキャッシュ(160)を含み、命令キャッシュ(106)からラベル境界上のみのトレースキャッシュ(160)へとフェッチングを遷移させるマイクロプロセッサ(100)を実現する方法およびシステムの様々な形態例が開示されている。一形態例では、マイクロプロセッサ(100)は、命令キャッシュ(106)、ブランチ予測ユニット(132)およびトレースキャッシュ(160)を備える。プリフェッチユニット(108)は、分岐予測ユニット(132)が分岐命令の予測ターゲットアドレスを出力するまで、命令キャッシュ(106)から命令をフェッチしてもよい。分岐予測ユニット(132)が予測ターゲットアドレスを出力すると、プリフェッチユニット(108)は、トレースキャッシュ(160)内で予測ターゲットアドレスにマッチするエントリ(162)を調べる。マッチするエントリ(162)が見つかると、プリフェッチユニット(108)は、命令キャッシュ(106)からのフェッチ命令に従う代わりに、トレースキャッシュ(160)から１又は複数のトレース(166)をフェッチする。
2007515715.tif 000002
【特許請求の範囲】
【請求項１】
命令を格納する命令キャッシュ（１０６）、
分岐予測ユニット（１３２）、
命令の複数のトレース（１６６）を格納するトレースキャッシュ（１６０）、および、
前記命令キャッシュ（１０６）、前記分岐予測ユニット（１３２）および前記トレースキャッシュ（１６０）に結合されたプリフェッチユニット（１０８）を備えるマイクロプロセッサ（１００）において、
前記プリフェッチユニット（１０８）は、前記分岐予測ユニット（１３２）が予測ターゲットアドレスを出力するまで、前記命令キャッシュ（１０６）から命令をフェッチし、
前記プリフェッチユニット（１０８）は、前記トレースキャッシュ（１６０）内で前記予測ターゲットアドレスのマッチを識別すると、前記トレースキャッシュ（１６０）から１又は複数の前記トレース（１６６）をフェッチする、マイクロプロセッサ。
【請求項２】
前記マイクロプロセッサ（１００）は、トレースジェネレータ（１７０）をさらに備え、このトレースジェネレータ（１７０）は、ラベル境界に対応する命令のトレース（１６６）を開始する、請求項１記載のマイクロプロセッサ（１００）。
【請求項３】
前記トレースジェネレータ（１７０）は、トレースキャッシュ（１６０）を確認し、当該トレースジェネレータ（１７０）が組み立てるトレース（１６６）の複製を調べる、請求項２記載のマイクロプロセッサ（１００）。
【請求項４】
前記トレース（１６６）の各々は、部分的にデコードされた命令を含む、請求項１記載のマイクロプロセッサ（１００）。
【請求項５】
前記トレース（１６６）の各々は、そのトレース（１６６）内に格納された命令のうち、プログラムの順序が一番初めの命令のアドレスを有するタグと関係付けられる、請求項１記載のマイクロプロセッサ（１００）。
【請求項６】
前記トレース（１６６）の各々は、フロー制御フィールド（１６８）と関係付けられており、このフロー制御フィールド（１６８）は、命令のラベルを含み、そのトレース（１６６）内の各分岐オペレーションは、制御フローによって前記命令のラベルにパスされる、請求項１記載のマイクロプロセッサ（１００）。
【請求項７】
システムメモリ（４０４）、および、
前記システムメモリ（４０４）に結合されたマイクロプロセッサ（１００）を備えるコンピュータシステム（４００）において、
前記マイクロプロセッサは、
命令を格納する命令キャッシュ（１０６）、
分岐予測ユニット（１３２）、
命令の複数のトレース（１６６）を格納するトレースキャッシュ（１６０）、および、
前記命令キャッシュ（１０６）、前記分岐予測ユニット（１３２）および前記トレースキャッシュ（１６０）に結合されたプリフェッチユニット（１０８）を備えるマイクロプロセッサ（１００）において、
前記プリフェッチユニット（１０８）は、前記分岐予測ユニット（１３２）が予測ターゲットアドレスを出力するまで、前記命令キャッシュ（１０６）から命令をフェッチし、
前記プリフェッチユニット（１０８）は、前記トレースキャッシュ（１６０）内で前記予測ターゲットアドレスのマッチを識別すると、前記トレースキャッシュ（１６０）から１又は複数の前記トレース（１６６）をフェッチする、コンピュータシステム（４００）。
【請求項８】
命令キャッシュ（１０６）から命令をフェッチするステップと、
分岐ターゲットアドレスが生成されるまで、前記命令キャッシュ（１０６）からの命令のフェッチを続けるステップと、
分岐ターゲットアドレスが生成されると、前記分岐ターゲットアドレスに対応するエントリ（１６２）をトレースキャッシュ（１６０）から探すステップとを備える方法。
【請求項９】
前記分岐ターゲットアドレスに対応するエントリ（１６２）がトレースキャッシュ（１６０）内で識別されると、前記トレースキャッシュ（１６０）から１又は複数のトレース（１６６）をフェッチするステップをさらに備える、請求項８記載の方法。
【請求項１０】
リタイアした命令を受け取るステップと、
前記受け取った命令が分岐ラベルと関係付けられていれば、新たなトレース（１６６）の組み立てを開始するステップと、
以前の組み立て中のトレース（１６６）が前記トレースキャッシュ（１６０）内でトレース（１６６）を複製すると、受け取る命令が分岐ラベルに対応するまで、新たなトレース（１６６）の組み立てを遅延するステップと
をさらに備える請求項８記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサ、より具体的には、トレースキャッシュを有するマイクロプロセッサの技術に関する。
【背景技術】
【０００２】
背景
マイクロプロセッサ内で処理される命令は、１と０の連続としてエンコードされている。あるマイクロプロセッサ・アーキテクチャでは、命令が、ある特定のバイト数のように、固定された長さでエンコードされる。ｘ８６のような他のマイクロプロセッサアーキテクチャでは、命令の長さは可変である。ｘ８６マイクロプロセッサアーキテクチャは、可変長命令セット（すなわち、様々な命令がそれぞれ異なるバイト数で指定される命令セット）を指定する。例えば、８０３８６マイクロプロセッサおよび後期型のｘ８６マイクロプロセッサは、特定の命令を指定するために１バイトから１５バイトのバイト数を用いる。命令は、１〜２バイトの操作符号を有し、かつ、実行される命令に関する、アドレッシングモード、オペランドおよび付加的な詳細を特定するための付加的なバイトが追加される。
【０００３】
あるマイクロプロセッサ・アーキテクチャでは、各命令は、実行前に、一つあるいは複数のより簡単な処理にデコードされる。命令をデコードするステップは、命令マップ内の各論理レジスタが命令の結果を格納する物理レジスタを決定するために、および／又は、命令の結果を格納する物理レジスタを割り当てるために、レジスタリネイミングマップにアクセスすることを含む。
【０００４】
典型的には、命令は、システムメモリから、このシステムメモリに隣接するブロック内の命令キャッシュにフェッチされる。これらのブロックに含まれる命令は、コンパイルされた順番で、命令キャッシュ内に格納される。プログラムの実行中は、分岐がコード内に取り込まれたときのように、異なる順序で命令が実行されることがしばしばある。このようなケースでは、分岐命令と同じサイクルの間は、概して、取り込まれた分岐命令に続く複数の命令を、命令キャッシュからフェッチすることができない。これは、これら複数の命令が互いに隣接する複数のロケーションに格納されていないためである。この命令フェッチバンド幅の制約を解決するために、多くのスーパースカラマイクロプロセッサは、トレースキャッシュを一体化している。
【０００５】
トレースキャッシュ内に格納された命令は、典型的には、コンパイルされる順番とは反対となる実行される順番で格納される点において、トレースキャッシュは、命令キャッシュとは異なる。実行する順番にオペレーションを格納することは、シングルサイクルの間に、取り込まれる分岐オペレーションを含む命令シーケンスにトレースキャッシュからアクセスすることを許容する。これに対して、命令キャッシュから同一の命令シーケンスにアクセスするには、何サイクルも必要である。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
スーパースカラマイクロプロセッサは、典型的には、クロックサイクル毎に複数の命令をデコードする。トレースキャッシュ内のトレースのスターティングアドレスとともにデコードされる一つのグループ内の各命令のアドレスにマッチさせるために必要なハードウェアの量は、多大な量である。これは、いくつかのケースにおいて、トレースキャッシュ内でのヒットを決定するための困難性を非常に増大させる。
【課題を解決するための手段】
【０００７】
トレースキャッシュを含み、命令キャッシュからラベル境界上のみのトレースキャッシュへとフェッチングを遷移させるマイクロプロセッサを実現する方法およびシステムの様々な形態例が開示されている。一形態例では、マイクロプロセッサは、命令キャッシュ、ブランチ予測ユニットおよびトレースキャッシュを備える。プリフェッチユニットは、分岐予測ユニットが分岐命令の予測ターゲットアドレスを出力するまで、命令キャッシュから命令をフェッチする。分岐予測ユニットが予測ターゲットアドレスを出力すると、プリフェッチユニットは、トレースキャッシュ内で予測ターゲットアドレスにマッチするエントリを調べる。トレースキャッシュ内で予測ターゲットアドレスにマッチするエントリが見つからない場合は、プリフェッチユニットは、命令キャッシュから命令をフェッチすることに代えて、トレースキャッシュから１又は複数のトレースをフェッチする。
【０００８】
分岐予測ユニットは、分岐が取り込まれると予測された分岐命令に遭遇すると、予測のターゲットアドレス（予測ターゲットアドレス）を出力する。例えば、これは、分岐条件が満足されると予測された、あらゆる条件付き分岐命令、または、あらゆる条件なし分岐命令のためのケースである。マイクロプロセッサのいずれかの要素が、分岐予測ミスの発生を発見すると、分岐予測ユニットは、予測ターゲットアドレスを出力する。条件付き分岐命令が実行パイプラインに入力されると、機能ユニットは、必要なデータが妥当であるときの、関係する分岐条件を評価する。いくつかの場合では、この評価は、その命令がフェッチされたときに取り込まれないと予測されていても、その命令の取り込みを生じさせる場合がある。また、これとは逆の状況が生じる場合もあるし、いずれの場合でも、分岐予測ユニットに分岐ターゲットアドレスを出力させる分岐予測ミスを生じる結果になることがある。
【０００９】
マイクロプロセッサは、トレースジェネレータ(trace generator)を含んでもよい。ある形態例では、トレースジェネレータは既に実行されてリトライされている命令からのトレースを組み立てる。他の形態例では、トレースジェネレータは、実行する前に、全体あるいは一部がデコードされた命令からトレースを組み立ててもよい。ある形態例では、トレースは、タグと関係付けられていてもよい。このタグは、一番初めの命令のアドレスを含み、プログラムの順序に従って、トレース内に格納されている。トレースは、命令のためのラベルを含むフロー制御フィールドを備えていてもよい。この命令の制御が、トレース内に含まれる各分岐命令に渡される。
【００１０】
トレースジェネレータは、新たなトレースを組み立て始める前に、分岐ターゲットアドレスに対応する命令を受信するまで待機してもよい。ひとたびトレースの組み立てが始まると、トレースジェネレータは、トレースキャッシュを確認してトレースの複製(a duplicate copy)を調べてもよいし、複製が見つかれば、トレースジェネレータは、組み立て中のトレースを破棄してもよい。ある形態例では、トレースジェネレータがトレースキャッシュ内で組み立て中のトレースの複製を識別する際に、トレースキャッシュを確認して、生成される次のトレースに対応するエントリがあるか調べてもよい。そのようなエントリが見つかった場合は、トレースジェネレータは、組み立て中のトレースを破棄するようにしてもよい。
【発明を実施するための最良の形態】
【００１１】
本発明に様々な形態の改良や変更を施すことができるが、図面を用いて以下で詳細に説明する特定の形態は一例として示すものである。従って、図面および詳細な説明は、本発明を開示した特定の形態に限定しようとするものではなく、むしろ、添付の特許請求の範囲によって規定される本発明の思想および範囲に含まれるすべての改良形態、均等形態、および、代替形態を含むように意図してある。各項目は、書誌的なものであり、詳細な説明又は特許請求の範囲を限定又は妨害するために用いられているのではない。さらに、”（何々）してもよい／でもよい (may)”なる語は、許容的な意味（すなわち、潜在性を有する(having the potential to)、または、可能性(being able to)）を表すものであり、強制的な意味（すなわち、マスト(must)）ではない。「接続される(connected)」なる語は、直接的または間接的に接続されることを意味し、「結合される(coupled)」なる語は、直接的又は間接的に結合されることを意味する。
【００１２】
図１は、一形態例によるマイクロプロセッサ１００に含まれる論理要素を示すブロック図である。このマイクロプロセッサ１００は、ラベル境界上での命令キャッシュ１０６からトレースキャッシュ１６０への遷移を行う。マイクロプロセッサ１００は、システムメモリ２００内に格納された命令を実行するように構成されている。これらの命令の殆どは、システムメモリ２００内に格納されたデータを処理（オペレート）する。システムメモリ２００は、コンピュータシステム内において物理的に分類されていてもよく、１又は複数のマイクロプロセッサ１００からアクセス可能に構成されていてもよい。ある形態例では、マイクロプロセッサ１００は、ｘ８６アーキテクチャと適合可能に設計してもよい。マイクロプロセッサ１００は、ここに示す要素以外のさらに他の多くの要素を含み、および／又は、さらに他の多くの要素に結合されていてもよい。例えば、キャッシュの付加的なレベルを（マイクロプロセッサ１００の内部および／又は外部で）マイクロプロセッサ１００およびシステムメモリ２００の間に備えていてもよい。同様に、ある形態例では、マイクロプロセッサ１００は、システムメモリ２００を制御するように構成されたメモリコントローラを含む。これに加えて、論理素子同士の間の結合は、形態例によって異なってもよい。
【００１３】
マイクロプロセッサ１００は、命令キャッシュ１０６およびデータキャッシュ１２８を含んでもよい。マイクロプロセッサ１００は、システムメモリ２００に接続されたプリフェッチユニット１０８を備えていてもよい。プリフェッチユニット１０８は、命令キャッシュ１０６内に格納するために、命令コードをシステムメモリ２００からプリフェッチする。一形態例では、プリフェッチユニット１０８は、システムメモリ２００から命令キャッシュ１０６内に、コードをバーストするように構成される。プリフェッチユニット１０８は、特定のコードをプリフェッチする様々な技術とアルゴリズムを使用する。プリフェッチユニット１０８は、命令キャッシュから命令をフェッチし、トレースキャッシュ１６０からディスパッチユニット１０４にトレースする。命令は、トレースキャッシュ１６０内で不明の所定の命令アドレスに応じて、命令キャッシュ１０６からフェッチされる。同様に、命令は、命令キャッシュ１０６内にある所定のアドレスに応じて、システムメモリ２００からフェッチされる。
【００１４】
ディスパッチユニット１０４は、命令キャッシュ１０６から命令を受け取るとともに、全体および／又は一部がデコードされたオペレーションをトレースキャッシュ１６０から受け取る。ディスパッチユニット１０４は、命令キャッシュ１０６から受け取った命令をデコードするデコードユニット１４０を備えていてもよい。ディスパッチユニット１０４は、マイクロコード化された命令を取り扱うときに用いる、マイクロコードユニットを備えていてもよい。
【００１５】
ディスパッチユニット１０４は、スケジューラ１１８への処理をディスパッチするように構成される。１又は複数のスケジューラ１１８は、ディスパッチされた処理をディスパッチユニット１０４から受け取るとともに、１又は複数の実行コア１２４に処理を発行するように結合されていてもよい。実行コア１２４は、データキャッシュ１２８にアクセスするように構成されたロード／格納ユニット１２６を備えていてもよい。実行コア１２４によって生成される結果は、リザルトバス１３０に出力される。これらの結果は、後続して発効された命令のためのオペランド値として用いられ、および／又は、レジスタファイル１１６に格納される。リタイアキュー１０２は、スケジューラ１１８およびディスパッチユニット１０４に結合されていてもよい。リタイアキューは、発行された各処理がリタイアするときに判定されるように構成してもよい。
【００１６】
命令キャッシュ１０６は、命令がディスパッチユニット１０４によって受け取られる前に、その命令を一時的に格納してもよい。命令コードは、システムメモリ２００からプリフェッチユニット１０８を介して命令キャッシュ１０６にコードをプリフェッチすることによって供給されもよい。命令キャッシュ１０６は、様々な構成（例えば、セットアソシアイティブ(set-associative)、フルアソシエイティブ(fully-associative)、または、ダイレクトマップ(direct-mapped)）で実現してもよい。
【００１７】
ディスパッチユニット１０４は、実行コア１２４が実行可能なビットエンコード処理を含む信号とともに、オペランドアドレス情報、即時データおよび／または置換データを出力してもよい。ある命令を実行コア１２４内で実行可能な１又は複数のオペレーションにデコードするためにデコードユニット１４０を用いてもよい。単純な命令は、単純な処理に対応する。より複雑な命令は、マルチ処理に対応する。レジスタのアップデートを含む処理を受け取ると、ディスパッチユニット１０４は、レジスタファイル１１６内におけるレジスタ位置を確保し、投機的レジスタ状態を格納する（これに代わる形態例では、各レジスタに１又は複数の投機的レジスタ状態を格納するためにリオーダバッファを用いる）。レジスタマップは、レジスタのリネイム処理を容易にするために、供給元(source)と宛先オペランド(destination operands)の論理レジスタ名を物理レジスタ名に翻訳する。このようなレジスタマップにより、レジスタファイル１１６内のどのレジスタが現在割り当てられていて、どのレジスタが現在割り当てられていないのかを追跡できる。
【００１８】
ディスパッチユニット１０４によって処理が行われるときに、要求されたオペランドがレジスタ位置である場合、レジスタアドレス情報は、レジスタマップ又はリオーダバッファに送られてもよい。例えば、ｘ８６アーキテクチャでは、８つの３２ビット論理レジスタ（例えば、ＥＡＸ，ＥＢＸ，ＥＣＸ，ＥＤＸ，ＥＢＰ，ＥＳＩ，ＥＤＩおよびＥＳＰ）がある。物理レジスタファイル１１６（またはリオーダバッファ）は、これらの論理レジスタの内容を変える結果のためのストレージを含み、アウト・オブ・オーダの実行を可能にする。レジスタファイル１１６内の物理レジスタは、複数の論理レジスタのうちの一つの内容を変更する各処理の結果を格納するために割り当てられている。それゆえ、特定のプログラムによる処理を実行している間の様々な時点で、レジスタファイル１１６（または、これに代わる形態例ではリオーダバッファ）は、投機的に実行される所望の論理レジスタの内容を含む１又は複数のレジスタを有する。
【００１９】
レジスタマップは、処理のための宛先オペランドとして特定の論理レジスタに物理レジスタを割り振ってもよい。レジスタファイル１１６は、１又は複数の前もって割り当てられた物理レジスタを有してもよい。この物理レジスタは、所定の処理の供給元オペランドとして特定された論理レジスタに割り振られたものであってもよい。レジスタマップは、その論理レジスタに対して最も新しく割り振られた物理レジスタにタグを供給してもよい。このタグは、レジスタファイル１１６内のオペランドのデータ値にアクセスするため、または、リザルトバス１３０上で送信される結果からデータ値を受け取るために、用いられてもよい。オペランドがメモリ位置に対応すれば、オペランド値は、ロード／格納ユニット１２６を介して（結果を送るため、および／または、レジスタファイル１１６に格納するために）リザルトバス上に供給される。（１又は複数の）スケジューラのうちのひとつによって、オペレーションが発行されると、オペランドデータ値は、実行コア１２４送られてもよい。これに代えて、オペレーションがディスパッチされたときに（オペランドが発行されたときに、対応する実行コア１２４に送られる代わりに）、オペランド値が対応するスケジューラ１１８に送られるようにしてもよい。
【００２０】
図１のマイクロプロセッサ１００は、アウト・オブ・オーダの実行が可能である。リタイアキュー１０２（又は、これに代えて、リオーダバッファ）は、レジスタの読み込み処理および書き込み処理のために元のプログラムの順序を保持してもよく、投機的命令の実行および分岐命令の予測ミスのリカバリを許容し、正確な例外処理を容易にしてもよい。いくつかの形態例では、リタイヤキュー１０２は、データ値の格納を行わない。これに代わる形態例では、リタイヤキュー１０２が、レコーダバッファのように機能し、投機的なレジスタ状態のためにデータ値を格納することにより、レジスタのリネイミングをサポートするようにしてもよい。いくつかの形態例では、リタイアキュー１０２は、オペレーションが有効にされると当該オペレーションをバッファのボトムに移動させる先入れ先出し処理を行うように実現され、キューのトップに新しいエントリのための余地を作るように構成してもよい。オペレーションがリタイアすると、リタイアキュー１０２は、レジスタファイル１１６内において投機的レジスタ状態の格納に不要となったレジスタの割り振りを解除し、どのレジスタが現在フリーであるかを示す信号をレジスタマップに送ってもよい。投機的レジスタ状態を生成したオペレーションが有効になるまで、レジスタファイル１１６内に（あるいは、これに代わる形態例では、レコーダバッファ内に）投機的レジスタ状態を保持することにより、分岐命令の予測が正しくない場合は、予測ミスされたパスに沿って投機的に実行されたオペレーションの結果は、レジスタファイル１１６内で無効にされてもよい。
【００２１】
リタイアキュー１０２は、トレースジェネレータ１７０をトレースするためのプログラムを特定するための信号も供給してもよい。トレースジェネレータ１７０は、フィルユニット(fill unit)として構成されていてもよい。トレースジェネレータ１７０は、リタイアキュー１０２によって特定されるトレースをトレースキャッシュ１６０内に格納してもよい。各トレースは、幾つもの異なる基本ブロックの一部であるオペレーションを含んでもよい。基本ブロックは、連続した命令の対として定義され、ここで、基本ブロック内のいずれかの命令が実行されると、そのブロック内のすべての命令が実行されることになるものである。一形式による基本ブロックは、分岐命令の直後に開始し、他の分岐オペレーションとともに終了する命令対であってもよい。いくつかの形態例では、トレースキャッシュ１６０内に格納されるトレースは、一部又は全体がデコードされたいくつもの命令を含んでもよい。一部又は全体がデコードされた命令をオペレーションという。ここで、「トレース」とは、命令又はオペレーションのグループであり、トレースキャッシュ１６０内の単一のトレースキャッシュエントリ内に格納される。
【００２２】
プリフェッチユニット１０８は、トレースキャッシュ１６０からディスパッチユニット１０４内にオペレーションをフェッチしてもよい。いくつかの形態例では、トレースは、リタイアキュー１０２から得る、一部又は全体がデコードされた命令によって組み立てられてもよい。このようなトレースがトレースキャッシュからフェッチされると、デコードユニット１４０は、少なくとも部分的にバイパスされ、トレースがキャッシュされたオペレーションのためのディスパッチサイクルの数が減少することになる。それゆえ、トレースキャッシュ１６０は、トレースが一度以上実行される場合に、幾度もの実行の繰り返しにわたって、キャッシュされたオペレーションを部分的に（又は全体的に）デコードするのに要する時間をディスパッチユニット１０４が償却することを可能にしてもよい。
【００２３】
ディスパッチユニット１０４の出力端に供給される、ビットがエンコードされたオペレーションおよび即時データは、１又は複数のスケジューラ１１８に送られてもよい。ここで、スケジューラとは、オペレーションがいつ実行可能であるかを検出すると、１又は複数の実行ユニットに実行可能オペレーションを発行する装置をいう。例えば、予約ステーション(reservation station)はスケジューラである。各スケジューラ１１８は、実行コア１２４への発行待ちの幾つもの保留オペレーションのためのオペレーション情報（例えば、ビットがエンコードされた実行ビット、オペランド値、オペランドタグ、および／又は、即時データ）を保持することができてもよい。いくつかの形態例では、各スケジューラ１１８は、オペランド値を格納しない。その代わり、各スケジューラは、オペランド値がいつ（レジスタファイル１１６またはリザルトバス１３０から）実行コア１２４によって読み込み可能になるかを判定するために、発行されるオペレーションおよびレジスタファイル１１６内で使用可能な結果を監視してもよい。いくつかの形態例では、各スケジューラ１１８は、専用実行コア１２４と関係付けられていてもよい。他の形態例では、単一のスケジューラは１又は複数の実行コア１２４に対してオペレーションを発行するように構成されてもよい。
【００２４】
スケジューラ１１８は、実行コア１２４によって実行されるオペレーション情報を一時的に格納するために供給されてもよい。上述したように、各スケジューラ１１８は、オペレーションを保留するために、オペレーション情報を格納してもよい。これに加えて、各スケジューラは、既に実行されたが再発行されるかも知れないオペレーションのためのオペレーション情報を格納してもよい。オペレーションは、実行に間に合うように、実行コア１２４に発行されてもよい。従って、オペレーションが実行される順番は、元のプログラム命令による順番と同一でなくてもよい。
【００２５】
一形態例では、各実行コア１２４は、加減算、桁送り、回転、論理オペレーション、および分岐オペレーションからなる整数演算オペレーションを実行するように構成された要素を含んでもよい。浮動小数点オペレーションに適応するための浮動小数点ユニットも含むように構成されていてもよい。１又は複数の実行コア１２４は、ロード／格納ユニット１２６によって行われるロードメモリオペレーションおよび格納メモリオペレーションのためのアドレス生成を行うように構成されていてもよい。
【００２６】
実行コア１２４は、条件付き分岐命令の実行に関する情報を分岐予測ユニット１３２に提供してもよい。実行コア１２４からの情報が分岐予測が正しくないことを示す場合は、分岐予測ユニット１３２は、既に命令処理パイプラインに入っている予測ミスされた分岐命令に続く命令を無視し、プリフェッチユニット１０８をリダイレクトしてもよい。リダイレクトされたプリフェッチユニット１０８は、命令キャッシュ１０６、トレースキャッシュ１６０および／又はシステムメモリ２００から正しい酩酊の対をフェッチしてもよい。このような状況では、予測ミスされた分岐命令の後に生じた元のプログラムの順番における命令の結果は破棄されてもよい。この命令の結果には、投機的に実行され、一時的にロード／格納ユニット１２６および／又はレジスタファイル１１６に格納された命令の結果が含まれてもよい。
【００２７】
レジスタ地がアップデートされると、実行コア１２４内で生成された結果は、リザルトバス１３０上にレジスタファイル１１６へと出力されてもよい。メモリ位置の内容がチャージされると、実行コア１２４内で生成される結果は、ロード／格納ユニット１２６に送られてもよい。
【００２８】
トレースキャッシュ
トレースジェネレータ１７０は、リタイアキュー１０２からリタイアオペレーションの基本ブロックを受け取るとともに、これらの基本ブロックをトレースキャッシュ１６０内に格納するように構成されていてもよい。これに代えて、トレースジェネレータ１７０は、マイクロプロセッサの前段(front-end)に（例えば、ディスパッチユニットの前あるいは後）結合されていてもよく、そのときにマイクロプロセッサ内のパイプライン内で検出された基本ブロックからトレースを生成するように構成されていてもよい。トレースを組み立てている間は、トレースジェネレータ１７０は、トレースを生成するために、リタイアキュー１０２から受け取ったオペレーションの基本ブロック上で遷移を実行してもよい。いくつかの形態例では、これらの遷移は、オペレーションのリオーダおよびオペレーションの削除を含んでもよい。
【００２９】
図２は、一形態例によるトレースキャッシュ１６０を、このトレースキャッシュに結合される、および／又は、相互作用(interact)するマイクロプロセッサ１００のいくつかの要素とともに示す。トレースキャッシュ１６０は、幾つものトレースキャッシュエントリ１６２を有していてもよい。各トレースキャッシュエントリ１６２は、トレース１６６として示すオペレーションのグループを格納してもよい。トレース１６６に加えて、各トレースキャッシュエントリ１６２は、識別タグ１６４およびフロー制御（Ｆ．Ｃ．；flow control）情報１６８を有していてもよい。トレースキャッシュエントリ１６２は、トレースに含まれる各分岐命令のためのフロー制御フィールド１６８を備えてもよい。各制御フィールド１６８は、分岐命令が取り込まれた場合、又は、取り込まれなかった場合に、どの命令を実行するかを判定するためのアドレス情報を有してもよい。例えば、フロー制御フィールド１６８Ａは、トレースキャッシュエントリ１６２に含まれる第１分岐命令に対応する。この第１分岐命令は条件付きであり、フロー制御フィールド１６８Ａは、二つのアドレスを含んでもよい。これらのアドレスのうちの一つは、条件が正しい場合の分岐命令の後に実行される命令のアドレスであってもよい。他方のアドレスは、分岐条件が誤りである場合に、次に実行される命令を示してもよい。フロー制御フィールド１６８Ｂは、トレースキャッシュ１６２内に含まれる第２分岐命令に対応してもよい。この分岐命令は条件付きではなく、それゆえ、フロー制御フィールド１６８Ｂは、いかなる環境下においても制御フローにパスされる命令のアドレスのみを含んでもよい。
【００３０】
タグ１６４は、命令タグ１０６内のタグと同様であり、与えられたオペレーションがトレースキャッシュ１６０内にあるかないかの判定をプリフェッチユニット１０８に行わせる。例えば、タグ１６４は、トレースキャッシュエントリ内でオペレーションを識別するアドレスビットのすべて又はいくつかを含んでもよい（例えば、そのトレース内で、タグは、プログラム内において順序の一番早いオペレーションのアドレスを含む）。いくつかの形態例では、タグは、いくつかのオペレーションがトレース内で独立的にアドレス可能になるように、十分な情報を有してもよい。他の形態例では、トレース内の一番目のオペレーションのみアドレス可能であってもよい。
【００３１】
いくつかの形態例では、フロー制御情報１６８は、トレース内に含まれる各分岐オペレーションのためのラベルを含んでもよい。このラベルは、制御が分岐するアドレスを識別するための指標であってもよい。例えば、アセンブリ言語コードのセクションは、実行のフローの制御を、そのコードが書き込まれた順番の分岐命令に速やかに従う命令に遷移させる分岐命令を含んでもよい。コーダに対する都合により、いくつかのコンパイラは、分岐命令とともに、１又は複数のアルファベットおよび数字のシンボルを含むことを許容してもよい。このラベルは、分岐命令によってターゲットとされる命令を即座に処理するアッセンブリコード内に含まれていてもよい。アッセンブリコードをコンパイルしている間は、コンパイラは、分岐命令によってターゲットとされる命令のアドレスを決定するとともに、このアドレスを分岐命令に含まれるアルファベットおよび数字のシンボルに置き換え、目的とされた命令のアドレスはラベルになってもよい。他の形態例では、命令のあらゆる基本ブロックを識別するためにラベルを用いてもよい。ラベルの境界は、コード内のあらゆるポイントであって、そのポイントにおいて、アドレスがラベルである命令に制御のフローが遷移されるポイントになってもよい。トレースの生成、および、トレースキャッシュのヒットの試みは、ラベル境界における命令の実行を生じさせてもよい。
【００３２】
多くの実現例において、トレースキャッシュ１６２は、複数の分岐命令(multiple branch instructions)および複数のフロー制御フィールド(multiple flow control field)１６８を含んでもよい。フロー制御情報１６８の各フィールドは、特定の分岐オペレーションと関係付けられてもよい。例えば、一形態例では、トレース内のひとつの制御情報格納位置１６８Ａは、そのトレース内の第１分岐オペレーションと関係付けられ、他のフロー制御情報格納位置１６８Ｂは、そのトレース内の第２分岐命令と関係付けられてもよい。これに代えて、フロー制御情報は、タグ、又は、そのフロー制御情報と関係付けられる分岐オペレーションを特定するその他の情報を含んでもよい。さらに、分岐予測、および／又は、どのフロー制御情報が分岐オペレーションに対応するかを特定する情報が、オペレーションストレージ１６６内のその分岐オペレーションとともに格納されてもよい。
【００３３】
プリフェッチユニット１０８は、メモリ２００から命令のラインをひとつフェッチし、そのラインを命令キャッシュ１０６内に格納してもよい。命令は、コンパイルされた順に、命令キャッシュ１０６内に格納されてもよい。ランタイムの状況次第では、命令キャッシュ１０６内の命令の実行順は、しばしば、コンパイルされた順から変わりうる。例えば、命令キャッシュ１０６からの分岐命令の実行は、フロー制御に、コンパイルされた順に従った多数の介在命令によって分岐命令から独立した命令へのジャンプを生じさせることがあってもよい。分岐命令のターゲットは、命令キャッシュ１０６内に存在しない。これにより、プリフェッチユニット１０８が、システムメモリ２００から命令の他のラインをフェッチすることを生じさせてもよい。次のラインが命令キャッシュ内にロードされる間の時間は、実行コア１２４が次のオペレーションを待つためのアイドル時間となる。
【００３４】
いくつかの形態例では、プリフェッチユニット１０８は、トレースキャッシュ１６０内に指標を付けるために分岐ターゲットアドレスの一部を用いてもよい。指標が付けられた位置に有効なトレースキャッシュエントリ１６２が存在する場合は、プリフェッチユニットはタグフィールド１６４を分岐ターゲットアドレスと比較してもよい。違うがターゲットアドレスと一致する場合は、プリフェッチユニット１０８は、実行するためにトレース１６６をディスパッチユニット１０４にフェッチする。実行コアから受け取る情報、および／又は、分岐予測ユニットによって、プリフェッチユニット１０８は、次に実行される命令のアドレスに対応するタグを有するエントリが見つからなくなるまで、トレースキャッシュ１６０からディスパッチユニット１０４にトレースをフェッチし続けてもよい。プリフェッチユニット１０８は、命令キャッシュ１０６から命令をフェッチすることを再開してもよい。
【００３５】
図３は、一形態例による、命令を命令キャッシュからフェッチする方法、または、トレースをトレースキャッシュからフェッチする方法を示すフローチャートである。ブロック３０１に示すように、１又は複数の命令が命令キャッシュからフェッチされてもよい。例えば、これは、いかなる分岐オペレーションも命令からデコードされず、または、デコードされたいかなる分岐オペレーションも取り込まれない状況において実際に生じてもよい。このような状況下では、３０３に示すように、命令キャッシュからの命令のフェッチは、続行される。
【００３６】
その他のケースでは、フェッチされた命令の処理は、分岐ターゲットアドレスを生成する結果となってもよい。例えば、条件付き分岐命令(conditional branch)の条件が充足されていると予測する場合、あるいは、条件なし分岐命令(unconditional branch)に遭遇する場合、または、分岐ターゲットの予測ミスが生じる場合は、分岐ターゲットアドレスが生成されてもよい。これらのケースでは、トレースキャッシュのサーチが実行される。３０７に示すように、生成された分岐ターゲットアドレスの一部がトレースキャッシュ内での指標付けに用いられ、また、対応する位置に有効なエントリが格納されている場合は、エントリのタグフィールドは、分岐ターゲットアドレスの他の部分と比較されてもよい。３０９に示すように、比較の結果が一致する場合は、プリフェッチユニットは、トレースをトレースキャッシュ内の対応するエントリからディスパッチユニットにフェッチしてもよい。プリフェッチユニットは、トレースキャッシュの存在しないアドレスに遭遇するまで、トレースのフェッチを続行する。この点では、フェッチは、命令キャッシュから継続してもよい。
【００３７】
上述のように、分岐命令が取り込まれると予測された命令キャッシュから分岐命令をフェッチすることは、分岐ターゲット命令を含むラインのフェッチをプリフェッチユニットに開始させる結果をもたらしてもよい。このことは、ディスパッチユニットに命令を送る際に、特に、分岐ターゲット命令を格納するラインが命令キャッシュ内に存在しない場合は、重大な遅れを生じさせることになってもよい。
【００３８】
分岐命令およびこれに続く命令がリタイアするときは、トレースジェネレータ１７０は、分岐ラベル境界をスパンするトレースを組み立ててもよい。分岐命令とターゲット命令が命令キャッシュ内の異なるラインに格納されていたとしても、その分岐命令とターゲット命令は、同時にリタイアし、トレースジェネレータ１７０は、両方の命令に対応するオペレーションを含むトレースを組み立ててもよい。
【００３９】
続いて、分岐命令を含むコードの部分が再度トラバースされると、プリフェッチユニットは、命令キャッシュ１０６から命令をフェッチするよりもむしろ、対応するトレースをトレースキャッシュ１６０からフェッチしてもよい。分岐命令によってターゲットにされる命令は、既にトレース内に組み込まれているため、トレースは、命令キャッシュ１０６から親命令を実行するよりも、かなりの高速で実行されてもよい。
【００４０】
命令キャッシュ１０６よりもむしろトレースキャッシュ１６０からフェッチすることによって得られるマイクロプロセッサのパフォーマンスの増大度は、トレースの長さ（トレースが含むオペレーションの数）に比例してもよい。従って、可能な限り多くのオペレーションを含むトレースを組み立てることが望ましい。いくつかの形態例では、トレースジェネレータ１７０は、命令キャッシュ１０６からフェッチされた、リタイアしたオペレーションからトレースを組み立ててもよい。プリフェッチユニットが、命令キャッシュから命令をフェッチすることから、トレースキャッシュからトレースをキャッシュすることに切り替えるとき、トレースジェネレータは、トレースの組み立てを終了(terminate) してもよい。従って、命令キャッシュからのフェッチからトレースキャッシュからのフェッチへのフェッチの切り替えが生じるレートを制限することが望ましい。これは、プリフェッチユニットがトレースキャッシュをヒットすることによる制限を、ラベル境界までに制限することによって実現される。
【００４１】
トレースジェネレータ１７０によって組み立てられるトレースの長さは、プリフェッチユニット１０８がトレースキャッシュをヒットする頻度に反比例してもよい。例えば、命令キャッシュからフェッチされた各命令に対して、トレースキャッシュをヒットしようとすると、プリフェッチユニットは、対応するトレースを頻繁に特定し、命令のフェッチからトレースのフェッチに切り替える。トレースジェネレータは、トレースの組み立てを終了し、前回の切り替え後からリタイアしていたオペレーションを含むトレースを生成してもよい。前回のトレースキャッシュのヒットが数個の命令のうちに生じていた場合は、暫定的にリタイアしていたオペレーションの数は少なく、少数のオペレーションを含むトレースを生成することになる。
【００４２】
上述のように生成される短いトレースのフェッチおよび実行は、プリフェッチユニット１０８が命令とトレースキャッシュを切り替える頻度をさらに上げる結果となる。例えば、トレースジェネレータ１７０が、命令キャッシュからトレースキャッシュへとフェッチを切り替えることにより、トレースの組み立てを終了(terminate)するとき、組み立ての終了したトレースに組み込まれるはずだったいくつかのオペレーションは、トランスジェネレータによる切り替えの前にリタイアしたことがないため、トレースに組み込まれない。早期に終了されたトレースの実行は、存在しない命令をフェッチすることになるために、トレースキャッシュから命令キャッシュへと切り替える結果となる。短いトレースの実行は、マイクロプロセッサの効率改善に関しては、命令キャッシュからの親命令を実行する場合に比べて、少しは利益がある。
【００４３】
いくつかの形態例では、プリフェッチユニット１０８は、分岐予測ユニット１３２がターゲット命令のアドレスを生成するまで、トレースキャッシュをヒットすることを遅延させてもよい。命令キャッシュからの分岐命令のフェッチは、分岐予測ユニット１３２に、実行時に分岐が取り込まれるか取り込まれないかを予測させてもよい。分岐命令が取り込まれないと予測した場合は、分岐予測ユニットは、分岐命令によってターゲットとされる命令のアドレスを生成してもよい。分岐予測ユニット１３２は、分岐の予測ミスが生じる場合に備えて、分岐命令の後に実行される次の命令のアドレスも生成してもよい。例えば、条件付き分岐命令がフェッチされ、分岐予測ユニット１３２が、その分岐が取り込まれると予測するが、条件の解析において、その分岐命令は取り込まれるべきではないと判定されると、プリフェッチユニット１０８は、コンパイルされた順序がその条件付き分岐命令に続く次の命令の予め生成されたアドレスを用いる。取り込まれると予測された分岐か予測ミスされた分岐のいずれかのための分岐ターゲットが有効になるまで、トレースキャッシュ１６０のヒットを遅延させることにより、より長いトレースを生成することができる。
【００４４】
トレースキャッシュをヒットする前に、プリフェッチユニットがラベル境界を待つ形態例では、マッチングに用いられるアドレスは、通常、分岐ターゲットであってもよい。上述したように、フェッチの遷移は、いかなるときも、トレースキャッシュに存在しない命令をフェッチするために、トレースキャッシュから命令キャッシュへと行われる。従って、トレースジェネレータ１７０に要求される命令のストリームは、ラベル境界に関するいかなる点においても開始可能である。ラベル境界のみにおいてトレースキャッシュをヒットしようとするいくつかの形態例では、トレースの組み立てもラベル境界と同時に生じるように遅延される。これは、トレースの第１命令のアドレスがラベルであることを保証する。
【００４５】
トレースジェネレータがトレースキャッシュをサーチするときに、存在するエントリが新たに完成したトレースのタグにマッチすることが分かると、そのマッチするエントリは無効にされ、その新たに完成されたトレースは破棄され、そして、トレースジェネレータは、新たなトレースの組み立てが始まる前に、リタイアする次の分岐境界からのオペレーションを待ってもよい。いくつかの形態例では、トレースジェネレータがトレースキャッシュ内で組み立て中のトレースの複製(duplicate copy)を識別すると、トレースジェネレータは、生成される次のトレースに対応するエントリを求めてトレースキャッシュを調べてもよい。そして、エントリが見つからないと、トレースジェネレータは、組み立て中のトレースを破棄してもよい。他の形態例では、トレースジェネレータは、トレースを破棄する前であって、ラベル境界に到達するまで新たな組み立てを遅延させる前に、２つ以上の連続して生成されたトレースエントリがトレース内に存在するエントリを複製するまで待機してもよい。さらに他の形態例では、二重に存在するエントリがトレースキャッシュ内で識別されるときに、これらのエントリを無効にする。
【００４６】
図４は、一形態例による、トレースを組み立てる方法を示すフローチャートである。ブロック３５１は、受け取る命令を示す。３５３では、ひとつのトレース、又は、組み立て中のトレースおよび／又は次に生成されるトレースを複製する複数のトレースが、トレースキャッシュ内で識別されない場合は、その命令に対応するオペレーションは、３５５に示すように、トレースのための空オペレーション位置を埋めるために用いられてもよい。一方、ひとつのまたは複数の複製トレースが３５３で識別された場合は、命令は、それが分岐ラベルに対応するものであるかを判定する。３５７において、命令が分岐ラベルに対応していないと判定した場合は、命令は破棄される。命令は、分岐ラベルに対応する命令を受け取るまで、破棄され続けてもよい。
【００４７】
３５７に示すように、受け取ったオペレーションのうちの一つが分岐ラベルにおける第１オペレーションであると判定された場合は、３５９に示すように、新しいトレース内のオペレーション位置を埋める処理を開始してもよい。ブロック３６１は、トレースが完了したときに、トレースキャッシュが検索され、３６３に示すように対応するエントリを識別してもよい。マッチするエントリが識別されると、３６７に示すように、完成したてのトレースが破棄されてもよい。３６３で複製のエントリが見つからない場合は、新しいトレースがトレースキャッシュエントリに格納されてもよい。いくつかの形態例では、複製エントリは、多数の連続する複製エントリが見つかるまで、破棄されない。
【００４８】
例示的なコンピュータシステム
図５は、一形態例のコンピュータシステム４００を示す。このコンピュータシステム４００は、バスブリッジ４０２を介して様々なシステム要素に結合されたマイクロプロセッサ１００を備える。マイクロプロセッサ１００は、この形態例では、上述したようにトレースキャッシュジェネレータ１７０を備えてもよい。コンピュータシステムは、他の形態例に構成することが可能であり、考えられるであろう。ここに示すシステムでは、メインメモリ２００はメモリバス４０６を介してバスブリッジ４０２に結合され、グラフィックコントローラ４０８はＡＧＰバス４１０を介してバスブリッジ４０２に結合されている。多数のＰＣＩデバイス４１２Ａ−４１２Ｂは、ＰＣＩバス４１４を介してバスブリッジ４０２に結合されている。セカンダリバスブリッジ４１６は、ＥＩＳＡ／ＩＳＡバス４２０を介して、電気的なインターフェイスを１又は複数のＥＩＳＡまたはＩＳＡデバイス４１８に適合させるために用いられてもよい。この形態例では、マイクロプロセッサ１００は、ＣＰＵバス４２４を介してバスブリッジ４０２に結合されるとともに、任意的なＬ２キャッシュ４２８に結合される。いくつかの形態例では、マイクロプロセッサ１００は、集積Ｌ１キャッシュ（図示せず）を備えてもよい。
【００４９】
バスブリッジ４０２は、マイクロプロセッサ１００、メインメモリ４０４、グラフィックコントローラ４０８、および、ＰＣＩバス４１４に接続されるデバイスの間にインターフェイスをもたらす。バスブリッジ４０２に接続された複数のデバイスのうちのひとつからオペレーションを受け取ると、バスブリッジ４０２は、オペレーションのターゲットを特定する（すなわち、特定のデバイス、あるいは、ＰＣＩバス４１４のケースでは、ターゲットはＰＣＩバス４１４上にある）。バスブリッジ４０２は、オペレーションをターゲットデバイスに送る。バスブリッジ４０２は、オペレーションをソースデバイス又はバスで用いられているプロトコルからターゲットデバイス又はバスで用いられているプロトコルに翻訳する。
【００５０】
ＰＣＩバス４１４のためのＩＳＡ／ＥＩＳＡにインターフェイスをもたらすことに加えて、セカンダリバスブリッジ４１６は、付加的な機能を有してもよい。バスブリッジ４１６の外部にある、または、バスブリッジ４１６に統合された、いずれかの形態例をとる入力／出力コントローラ（図示せず）が、コンピュータシステム４００内に含まれ、キーボードやマウス、および、様々なシリアルポートおよびパラレルポートに対してオペレーションに関するサポートを行ってもよい。他の形態例では、マイクロプロセッサ１００およびバスブリッジ４０２の間において、ＣＰＵバス４２４に外部キャッシュユニット（図示せず）が結合されてもよい。これに代えて、バスブリッジ４０２に外部キャッシュが結合されており、この外部キャッシュのためのキャッシュコントロールロジックがバスブリッジ４０２内に統合されている。Ｌ２キャッシュ４２８は、マイクロプロセッサ１００の裏側に示されている。Ｌ２キャッシュ４２８は、マイクロプロセッサ１００から分離されていてもよいし、マイクロプロセッサ１００のカートリッジ（すなわち、スロット１またはスロットＡ）内に統合されていてもよいし、あるいは、マイクロプロセッサ１００の半導体基板上に集積されていてもよい。
【００５１】
メインメモリ２００は、アプリケーションプログラムが格納されるメモリであって、マイクロプロセッサ１００は最初にこのアプリケーションプログラムを実行する。適当なメインメモリ２００は、ＤＲＡＭ(Dynamic Random Access Memory)を含む。例えば、複数のバンクからなるＳＤＲＡＭ(Synchronous DRAM)またはラムバス(Rambus)ＤＲＡＭ(RDRAM)が適当である。
【００５２】
ＰＣＩデバイス４１２Ａ―４１２Ｂは、例えば、ネットワークインターフェイスカード、ビデオアクセラレータ(video accelerators)、オーディオカード、ハードディスク、フロッピーディスクまたはドライブコントローラ、ＳＣＳＩ(Small Computer Systems Interface)アダプタ、および、電話カード(telephony cards)のような様々な周辺デバイスである。同様に、ＩＳＡデバイス４１８は、例えば、モデム、サウンドカード、および、ＧＰＩＢのようなデータ取得カード又はフィールドバスインターフェイスカードのような様々な周辺デバイスである。
【００５３】
グラフィックコントローラ４０８は、ディスプレイ４２６におけるテキストおよびイメージのレンダリング(rendering)を制御する。グラフィックコントローラ４０８は、効果的にメインメモリ２００内にシフトされるとともに、このメインメモリ２００からシフトされる３次元データストラクチャをレンダ(render)する技術分野において一般的に知られている、典型的なグラフィックアクセラレータで実現できる。それゆえ、グラフィックコントローラ４０８は、ＡＧＰバス４１０のマスターであってもよい。このＡＧＰバス４１０内において、グラフィックコントローラ４０８は、バスブリッジ４０２内のターゲットインターフェイスへのアクセスを要求および受領することができ、その結果、メインメモリ２００にアクセスすることができてもよい。専用グラフィックバスは、メインメモリ４０４からのデータの高速回復行うことができる。特定のオペレーションのために、グラフィックコントローラ４０８は、さらに、ＡＧＰバス４１０上でＰＣＩプロトコルトランザクションを生成するように構成されていてもよい。それゆえ、バスブリッジ４０２のＡＧＰインターフェイスは、ＡＧＰトランザクションと、ＰＣＩプロトコルターゲットおよびイニシエータトランザクションとの両方をサポートする機能を備える。ディスプレイ４２６は、電子的なディスプレイであり、イメージ又はテキストを表示することができる。適当なディスプレイ４２６としては、カソードレイチューブ（ＣＲＴ）、液晶ディスプレイ（ＬＣＤ）などがある。
【００５４】
上述の説明では、ＡＧＰ、ＰＣＩおよびＩＳＡバスまたはＥＩＳＡバスを用いることを例示したが、これらに代わりに、要望に合わせて、いかなるバスアーキテクチャを用いることもできる。コンピュータシステム４００は、付加的なマイクロプロセッサ（例えば、コンピュータシステム４００の任意的な要素として示すマイクロプロセッサ１００ａ）を含むマルチプロセッシングコンピュータシステムであってもよい。マイクロプロセッサ１００ａは、マイクロプロセッサ１００と同様のものである。一形態例では、より具体的には、マイクロプロセッサ１００ａは、マイクロプロセッサ１００と同一である。マイクロプロセッサ１００ａは、（図５に示すような）独立バスを通じてバスブリッジ４０２に接続されていてもよく、または、マイクロプロセッサ１００とＣＰＵバス２２４を共用していてもよい。さらに、マイクロプロ背差１００ａは、Ｌ２キャッシュ４２８と同様の、任意的なＬ２キャッシュ４２８ａに結合されていてもよい。
【００５５】
図６は、上述したトレースキャッシュジェネレータ１７０を含むコンピュータシステム４００の他の形態例を示す。これ以外の形態例も可能である。図６に示す例では、コンピュータシステム４００は、多数のプロセッシングノード６１２Ａ，６１２Ｂ，６１２Ｃおよび６１２Ｄを備える。各プロセッシングノードは、各プロセッシングノード６１２Ａ〜６１２Ｄに含まれるメモリコントローラ６１６Ａ〜６１６Ｄのそれぞれを介して、メモリ６１４Ａ〜６１４Ｄのそれぞれに結合されている。これに加えて、プロセッシングノード６１２Ａ〜６１２Ｄは、プロセッシングノード６１２Ａ〜６１２Ｄ間の通信に用いられるインターフェイスロジックを有する。例えば、プロセッシングノード６１２Ａは、プロセッシングノード６１２Ｂと通信するためのインターフェイスロジック６１８Ａ、プロセッシングノード６１２Ｃと通信するためのインターフェイスロジック６１８Ｂ，および、さらに他のプロセシングノード（図示せず）と通信するための第３インターフェイスロジック６１８Ｃを備える。同様に、プロセッシングノード６１２Ｂは、インターフェイスロジック６１８Ｄ，６１８Ｅおよび６１８Ｆを有し、プロセッシングノード６１２Ｃは、インターフェイスロジック６１８Ｇ，６１８Ｈおよび６１８Ｉを有し、プロセッシングノード６１２Ｄは、インターフェイスロジック６１８Ｊ，６１８Ｋおよび６１８Ｌを有する。プロセシングノード６１２Ｄは、通信を行うために、インターフェイスロジック６１８Ｌを介して複数の入力／出力デバイス（例えば、デイジーチェーン状に構成されたデバイス６２０Ａ〜６２０Ｂ）に結合されている。その他のプロセッシングノードも同様に、他のＩ／Ｏデバイスと通信することができる。
【００５６】
プロセッシングノード６１２Ａ〜６１２Ｄは、インタープロセッシングノード通信のためのパケットベースのリンクで実現することができる。この形態例では、リンクは、方向性のない複数のラインのセットとして実現される（例えば、ライン６２４Ａは、プロセッシングノード６１２Ａからプロセッシングノード６１２Ｂへとパケットを送るために用いられ、ライン６２４Ｂは、プロセッシングノード６１２Ｂからプロセッシングのーっど６１２Ａへとパケットを送るために用いられる）。他のセットのライン６２４Ｃ〜６２４Ｈは、図６に示すように他のプロセッシングノードとの間でパケットを送るために用いられる。一般的に、各セットのライン６２４は、１又は複数のデータライン、このデータラインに対応する１又は複数のクロックライン、および、伝送されるパケットのタイプを示す１又は複数のコントロールラインを含む。リンクは、複数のプロセッシングノード間での通信のためのキャッシュコヒーレント形式(cache coherent fashion)、または、プロセッシングノードとＩ／Ｏデバイス（あるいは、ＰＣＩバスまたはＩＳＡバスのようなお決まりの構成のＩ／Ｏバスへのバスブリッジ）の間の通信のためのノンコヒーレント形式でオペレートされる。さらに、リンクは、図示するような複数のＩ／Ｏデバイス間のデイジーチェーン構造を用いたノンコヒーレント形式でオペレートされてもよい。一つのプロセッシングノードから他のプロセッシングノードに送られるパケットは、１又は複数の中間ノードを通過してもよい。例えば、プロセッシングノード６１２Ａからプロセッシングノード６１２Ｄへと送られるパケットは、図６に示すプロセッシングノード６１２Ｂまたはプロセッシングノード６１２Ｃのどちらかを通る。あらゆる適切な経路設定アルゴリズムを用いることができる。コンピュータシステム４００の他の形態例は、図６に示す形態例より多くのプロセシングノード、あるいは、これより少ないプロセッシングノードを含んでもよい。
【００５７】
一般的に、パケットは、複数のノード間のライン６２４上を１又は複数のビットタイムで送られてもよい。パケットは、トランザクションを開始するためのコマンドパケット、キャッシュコヒーレンシーを保持するためのプローブパケット、および、プローブパケットおよびコマンドパケットに応答するための応答パケットを備えてもよい。
【００５８】
プロセッシングノード６１２Ａ〜６１２Ｄは、メモリコントローラおよびインターフェイスロジックに加えて、１又は複数のマイクロプロセッサを備えていてもよい。プロセッシングノードは、少なくとも一つのプロセッサを含み、必要に応じて、任意的に、メモリおよびその他のロジックと通信を行うためのメモリコントローラを含んでもよい。より具体的には、各プロセッシングノード６１２Ａ〜６１２Ｄは、マイクロプロセッサ１００の１又は複数の複製を含んでもよい。外部インターフェイスユニット１８は、ノード内のインターフェイスロジック６１８を含んでもよく、これと同様に、メモリコントローラ６１６を含んでもよい。
【００５９】
メモリ６１４Ａ〜６１４Ｄは、あらゆる適切なメモリデバイスでありうる。例えば、メモリ６１４Ａ〜６１４Ｄは、１又は複数のラムバスＤＲＡＭ(RDRAM)、シンクロナスＤＲＡＭ(SDRAM)、スタティックＲＡＭ等を含んでもよい。コンピュータ４００のアドレススペースは、メモリ６１４Ａ〜６１４Ｄの間で分割される。各プロセッシングノード６１２Ａ〜６１２Ｄは、どのアドレスに、どのメモリ６１４Ａ〜６１４Ｄがマップされているか、それゆえ、あるアドレスへのメモリリクエストがどのプロセッシングノード６１２Ａ〜６１２Ｄに経路設定されているのか、を判定するために用いるメモリマップを備えてもよい。言い換えれば、メモリコントローラ６１６Ａ〜６１６Ｄは、対応するメモリ６１４Ａ〜６１４Ｄへの各メモリアクセスがコヒーレント形式で生じることを保証する。メモリコントローラ６１６Ａ〜６１６Ｄは、メモリ６１４Ａ〜６１４Ｄへのインターフェイスとして機能するコントロール回路を備えてもよい。これに加えて、メモリコントローラ６１６Ａ〜６１６Ｄは、メモリリクエストを待つリクエストキューを含んでもよい。
【００６０】
インターフェイスロジック６１８Ａ〜６１８Ｌは、リンクからパケットを受け取るため、および、リンク上に送られるパケットをバッファするための様々なバッファを含んでもよい。コンピュータシステム４００は、パケットを送るための、あらゆる適切なフロー制御機構を含んでもよい。例えば、一形態例では、各インターフェイスロジック６１８は、そのインターフェイスロジックが接続されるリンクの他端に、レシーバ内のバッファの各形式のカウント数を格納する。インターフェイスロジックは、受けとり側のインターフェイスロジックがパケットを格納するためのフリーバッファを有するまでは、パケットを送らない。受け取り側のバッファが経路設定してパケットを放出することによってフリーになると、受け取り側インターフェイスロジックは、メッセージを送り側インターフェイスロジックに送り、バッファがフリーであることを示す。このような機構をクーポンベースシステムという。
【００６１】
Ｉ／Ｏデバイス６２０Ａ〜６２０Ｂは、あらゆる適切なＩ／Ｏデバイスで構成することができる。例えば、Ｉ／Ｏデバイス６２０Ａ〜６２０Ｂは、そのデバイスが結合される他のコンピュータシステムと通信するためのデバイス（例えば、ネットワークインターフェイスカードやモデム）を含むことができる。さらに、Ｉ／Ｏデバイス６２０Ａ〜６２０Ｂは、ビデオアクセラレータ、オーディオカード、ハードディスクドライバ、フロッピーディスクドライブ、ドライブコントローラ、ＳＣＳＩ(Small Computer System Interface)アダプタ、電話カード、サウンドカード、および、ＧＰＩＢまたはフィールドバスインターフェイスカードのような様々なデータ取得カードを含んでもよい。「Ｉ／Ｏデバイス」という語と、「周辺デバイス」という語は、ここでは類義語として扱う。
【００６２】
ここで用いるように、「クロックサイクル」という語と、「サイクル」という語は、命令プロセッシングパイプラインの様々な段階でタスクを完了する時間のインターバルをいう。命令値および計算値は、クロックサイクルを確定するクロックシグナルに従って、（レジスタ又はアレイのような）メモリ素子によって取得される。例えば、メモリ素子は、クロックシグナルのライジングエッジ(rising edge)またはフォーリングエッジ(falling edge)に従って、値を取得してもよい。
【００６３】
上記の詳細な説明を一度理解すれば、当業者にとって多くの変更形態および改変形態が自明であろう。特許請求の範囲は、そのようなすべての変更形態および改変形態を含むように解釈されるものである。
【産業上の利用可能性】
【００６４】
本発明は、概して、マイクロプロセッサに適用可能なものである。
【図面の簡単な説明】
【００６５】
【図１】一形態例によるトレースキャッシュを含むマイクロプロセッサを示す。
【図２】一形態例によるトレースキャッシュエントリを示す。
【図３】一形態例において命令を命令キャッシュからフェッチする方法またはトレースをトレースキャッシュからフェッチする方法を示すフローチャートである。
【図４】一形態例によるトレースを組み立てる方法を示すフローチャートである。
【図５】一形態例によるコンピュータシステムを示す。
【図６】他の形態例によるコンピュータシステムを示す。
【図１】
2007515715.tif 000003
【図２】
2007515715.tif 000004
【図３】
2007515715.tif 000005
【図４】
2007515715.tif 000006
【図５】
2007515715.tif 000007
【図６】
2007515715.tif 000008
【国際調査報告】
2007515715.tif 000009
2007515715.tif 000010