(57)【特許請求の範囲】
【請求項１】
コンピュータシステムの処理ユニットにおいて被ロックオペレーションを実行するための方法であって、
被ロック命令と、複数の無ロック命令とを含み、前記無ロック命令の１つ以上が前記被ロック命令の前にディスパッチされ、前記無ロック命令の１つ以上が、前記被ロック命令の後にディスパッチされ、前記無ロック命令の少なくとも１つはプログラム順序に関して前記被ロック命令に先行する複数の命令をディスパッチするステップと、
前記無ロック命令と前記被ロック命令とを含む前記複数の命令を同時に実行するステップと、
前記被ロック命令の実行後に、前記被ロック命令をリタイアさせるステップと、
前記被ロック命令のリタイア中に、前記被ロック命令にアクセスされたキャッシュラインのロックの実行を始めるステップと、
前記被ロック命令のリタイア後に、前記被ロック命令に関連するライトバックオペレーションを実行するステップと、
前記ライトバックオペレーションが完了するまで、前記ロックの実行を維持するステップと、
前記被ロック命令に関連する前記ライトバックオペレーションが完了するまで、前記被ロック命令よりもプログラム順序に関して新しい前記１つ以上の無ロック命令のリタイアをストールさせるステップと、
前記被ロック命令にアクセスされた前記キャッシュラインへのアクセスを他の処理ユニットが取得しようとするのを監視するステップと、
前記処理ユニットが前記キャッシュラインの所有権を前記他の処理ユニットに解放したのに応じて、前記処理ユニットに、部分的に実行した被ロック命令を破棄させて前記被ロック命令の実行を再開させるステップと、
を含む方法。
【請求項２】
前記被ロック命令の実行中に、前記被ロック命令がアクセスするキャッシュラインの排他的所有権を取得するステップと、前記被ロック命令のリタイア中に前記キャッシュラインに対する取得済みの前記排他的所有権を行使するステップとを更に含み、前記キャッシュラインの前記排他的所有権の前記行使は前記被ロック命令に関連する前記ライトバックオペレーションが完了するまで維持される、請求項１に記載の方法。
【請求項３】
前記被ロック命令がアクセスする前記キャッシュラインの前記排他的所有権の行使の前に、前記所有権が前記コンピュータシステムの別の処理ユニットに解放された場合には、前記被ロック命令の前記処理を、命令を破棄して再開するステップを更に含み、前記被ロック命令の前記処理を、命令を破棄して再開する前記ステップは前記被ロック命令の実行中に前記被ロック命令がアクセスするキャッシュラインの排他的所有権の取得と行使の両方を行う、請求項２に記載の方法。
【請求項４】
前記被ロック命令のリタイア前に、前記被ロック命令の前にディスパッチされた前記１つ以上の無ロック命令をリタイアさせるステップを更に含む、請求項１に記載の方法。
【請求項５】
処理ユニットであって、
被ロック命令と、複数の無ロック命令とを含み、前記無ロック命令の１つ以上が前記被ロック命令の前にディスパッチされ、前記無ロック命令の１つ以上が、前記被ロック命令の後にディスパッチされ、前記無ロック命令の少なくとも１つはプログラム順序に関して前記被ロック命令に先行する複数の命令をディスパッチするように構成されたディスパッチユニットと、
前記無ロック命令と前記被ロック命令とを含む前記複数の命令を同時に実行するように構成された実行ユニットと、
前記被ロック命令の実行後に、前記被ロック命令をリタイアさせるように構成されたリタイアユニットであって、前記処理ユニットは、前記被ロック命令のリタイア中に、前記被ロック命令にアクセスされたキャッシュラインのロックの実行を始めるように構成されている、リタイアユニットと、
前記被ロック命令のリタイア後に、前記被ロック命令に関連するライトバックオペレーションを実行するように構成されたライトバックユニットであって、前記処理ユニットは、前記ライトバックオペレーションが完了するまで、前記ロックの実行を維持するように構成されている、ライトバックユニットと、
前記被ロック命令にアクセスされた前記キャッシュラインへのアクセスを他の処理ユニットが取得しようとするのを監視するように構成されたロード監視ユニットであって、前記処理ユニットが前記キャッシュラインの所有権を前記他の処理ユニットに解放したのに応じて、前記処理ユニットに、部分的に実行した被ロック命令を破棄させて前記被ロック命令の実行を再開させるように構成されたロード監視ユニットと、を備え、
前記処理ユニットは、前記被ロック命令に関連する前記ライトバックオペレーションが完了するまで、前記被ロック命令よりもプログラム順序に関して新しい前記１つ以上の無ロック命令のリタイアをストールさせるように構成されている、処理ユニット。
【請求項６】
前記実行ユニットは、前記被ロック命令を、前記被ロック命令の前にディスパッチされた前記無ロック命令と前記被ロック命令の後にディスパッチされた前記無ロック命令の両方と同時に実行するように構成されている、請求項５に記載の処理ユニット。
【請求項７】
前記処理ユニットは、前記被ロック命令を、前記被ロック命令の前にディスパッチされた前記１つ以上の無ロック命令の処理と同時に処理するように構成されている、請求項５に記載の処理ユニット。
【請求項８】
前記実行ユニットは、前記無ロック命令の処理のステージを考慮せずに、前記被ロック命令を実行するように構成されている、請求項５に記載の処理ユニット。
【請求項９】
前記被ロック命令の実行中に前記処理ユニットは前記被ロック命令がアクセスするキャッシュラインの排他的所有権を取得するように構成され、前記被ロック命令のリタイア中に前記処理ユニットは前記キャッシュラインに対する取得済みの前記排他的所有権を行使するように構成され、前記処理ユニットは前記キャッシュラインの前記排他的所有権の前記行使を前記被ロック命令に関連する前記ライトバックオペレーションが完了するまで維持するように構成されている、請求項５に記載の処理ユニット。
【請求項１０】
前記処理ユニットが前記被ロック命令がアクセスする前記キャッシュラインの前記排他的所有権を行使する前に、前記所有権が対応するコンピュータシステムの別の処理ユニットに解放された場合には、前記処理ユニットは前記被ロック命令の前記処理を、命令を破棄して再開するように構成され、前記被ロック命令の前記処理を、命令を破棄して再開後に、前記処理ユニットは前記被ロック命令の実行中に前記被ロック命令がアクセスするキャッシュラインの排他的所有権の取得と行使の両方を行うように構成されている、請求項９に記載の処理ユニット。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はマイクロプロセッサのアーキテクチャに関し、より詳細には、ロックされたオペレーション（locked operations）を実行するための機構に関する。
【背景技術】
【０００２】
ｘ８６命令セットは、ロックされた（被ロック）オペレーションを実行可能な命令をいくつか提供している。ロックされた（被ロック）命令はアトミックに動作する。すなわち、被ロック命令は、メモリ位置を読み出してから書き込むまでの間に、関連するメモリ位置の内容が、他のプロセッサ（またはシステムメモリにアクセスできる他のエージェント）によって変更されないことを保証する。被ロックオペレーションは、通常、マルチプロセッサシステムの共有データ構造を読み出して更新する複数のエンティティを同期するために、ソフトウェアによって使用される。
【０００３】
各種プロセッサアーキテクチャでは、被ロック命令は、一般に、古い命令がすべてリタイアされて、この古い命令に関連するメモリへのライトバックオペレーションが実行されるまで、プロセッサパイプラインのディスパッチステージでストールされる。古い命令のすべてのライトバックオペレーションが完了した後に、被ロック命令がディスパッチされる。この時点で、被ロック命令より新しい命令のディスパッチも許可される。プロセッサは、通常、被ロック命令を実行する前に、被ロック命令がアクセスするメモリ位置を含むキャッシュラインの排他的所有権を取得して、排他的所有権を行使する。被ロック命令の実行が開始してから、この被ロック命令に関連するライトバックオペレーションが完了するまで、他のプロセッサによるこのキャッシュラインへの読み出しまたは書き込みは禁止される。被ロック命令より新しい命令のうち、被ロック命令とは異なるメモリにアクセスするか、メモリに一切アクセスしない命令は、通常、制約されずに同時実行が許される。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
このようなシステムでは、被ロック命令とすべての新しい命令が、ディスパッチステージでストールされ、古いオペレーションが完了するのを待機するため、プロセッサは、通常、ディスパッチからストール終了事象（すなわち、古い命令のライトバックオペレーション）までのパイプライン深さに等しい時間、有用な作業を実行しない。このような命令のディスパッチと実行のストールが、プロセッサのパフォーマンスに大きく影響することがある。
【課題を解決するための手段】
【０００５】
コンピュータシステムの処理ユニットにおいて被ロックオペレーションを実行するための装置および方法の各種実施形態が開示される。前記処理ユニットは、ディスパッチユニット、実行ユニット、リタイアユニット、およびライトバックユニットを有しうる。動作中に、前記ディスパッチユニットは、被ロック命令と複数の無ロック（non-locked）命令とを含む複数の命令をディスパッチしうる。前記無ロック命令の１つ以上が前記被ロック命令の前にディスパッチされ、前記無ロック命令の１つ以上が前記被ロック命令の後にディスパッチされうる。
【０００６】
前記実行ユニットは、前記無ロック命令と前記被ロック命令とを含む前記複数の命令を実行しうる。一実施形態では、前記実行ユニットは、前記被ロック命令を、前記被ロック命令の前にディスパッチされた前記無ロック命令と前記被ロック命令の後にディスパッチされた前記無ロック命令の両方と同時に実行しうる。前記リタイアユニットは、前記被ロック命令の実行後に、前記被ロック命令をリタイアさせうる。前記被ロック命令のリタイア中に、前記処理ユニットは、前記被ロック命令がアクセスするキャッシュラインに対する取得済みの排他的所有権の行使を開始しうる。前記処理ユニットは、前記キャッシュラインの前記排他的所有権の前記行使を、前記被ロック命令に関連する前記ライトバックオペレーションが完了するまで維持しうる。更に、前記処理ユニットは、前記被ロック命令の前記ライトバックオペレーションが完了するまで、前記被ロック命令の後にディスパッチされた前記１つ以上の無ロック命令のリタイアをストールさせうる。前記被ロック命令のリタイア後の任意の時点で、前記ライトバックユニットは、前記被ロック命令に関連するライトバックオペレーションを実行しうる。
【図面の簡単な説明】
【０００７】
【図１】一実施形態による、例示的なプロセッサコアの各種処理コンポーネントのブロック図。
【図２】一実施形態による、命令のシーケンスの実行における主要なイベントを示すタイミングチャート。
【図３】一実施形態による、被ロックオペレーションを実行するための方法を示すフローチャート。
【図４】一実施形態による、被ロックオペレーションを実行するための方法を示す別のフローチャート。
【図５】プロセッサコアの一実施形態のブロック図。
【図６】複数の処理コアを備えるプロセッサの一実施形態のブロック図。
【発明を実施するための形態】
【０００８】
本発明は、さまざまに変形されたり代替形態を取りうるが、その特定の実施形態が、例として図面に図示され、かつ本明細書に詳細に記載される。しかし、図面および詳細な説明は、本発明を開示の実施形態に限定することを意図するものではなく、添付の特許請求の範囲によって規定される本発明の趣旨ならびに範囲に含まれるすべての変形例、均等物および代替例を含むことを意図したものであることが理解されるべきである。
【０００９】
図1を参照すると、一実施形態による、例示的なプロセッサコア１００の各種処理コンポーネントのブロック図が示される。図に示すように、プロセッサコア１００は、命令キャッシュ１１０、フェッチユニット１２０、命令デコードユニット（ＤＥＣ）１４０、ディスパッチユニット１５０、実行ユニット１６０、ロード監視ユニット１６５、リタイアユニット１７０、ライトバックユニット１８０、およびコアインタフェースユニット１９０を備える。
【００１０】
動作中に、フェッチユニット１２０は、命令キャッシュ１１０（例えば、プロセッサコア１００内に設けられたＬ１キャッシュ）から命令をフェッチする。フェッチユニット１２０は、フェッチした命令をＤＥＣ１４０に提供する。ＤＥＣ１４０は命令をデコードし、実行ユニット１６０にデコードした命令をディスパッチできるようになるまで、当該命令をバッファに記憶しうる。ＤＥＣ１４０については、図５を参照して下で更に詳しく説明する。
【００１１】
ディスパッチユニット１５０は、実行のために命令を実行ユニット１６０に提供する。特定の一実装では、ディスパッチユニット１５０は、オンオーダーまたはアウトオブオーダーの実行を待機するプログラム順序で、実行ユニット１６０に命令をディスパッチしうる。実行ユニット１６０は、ロードオペレーションを実行してメモリから必要なデータを取得し、取得したデータを使用して演算を実行し、結果を、未処理のストアの内部ストアキューに記憶することによって命令を実行し、キューイングされた結果が、最終的にシステムのメモリ階層（例えば、プロセッサコア１００内に設けられたＬ２キャッシュ（図５参照）、Ｌ３キャッシュまたはシステムメモリ（図６参照）など）に書き込まれうる。実行ユニット１６０については、図５を参照して下で更に詳しく説明する。
【００１２】
実行ユニット１６０が、命令のロードオペレーションを実行してから、ロードがリタイアされるまで、ロード監視ユニット１６５は、ロードがアクセスするメモリ位置の内容を継続的に監視しうる。ロードがアクセスするメモリ位置において、データを変更するイベント（例えば、マルチプロセッサシステムの別のプロセッサによる同じメモリ位置へのストアオペレーション）が発生した場合、ロード監視ユニット１６５は、このようなイベントを検出し、プロセッサに、データを廃棄させ、ロードオペレーションを再実行させうる。
【００１３】
実行ユニット１６０が実行オペレーションを完了すると、リタイアユニット１７０は命令をリタイアさせる。リタイア前であれば、プロセッサコア１００は、いつの時点でも、命令を破棄して再開することができる。しかし、リタイア後は、プロセッサコア１００は、命令が指定するレジスタおよびメモリの更新をコミットされる。リタイアの後の任意の時点で、ライトバックユニット１８０は、ライトバックオペレーションを実行し、内部ストアキューの内容を取り出し、コアインタフェースユニット１９０を使用して、実行結果をシステムのメモリ階層に書き込む。ライトバックステージ後は、結果が、システムの他のプロセッサに対して公開される。
【００１４】
各種実施形態では、処理コア１００は、各種のコンピューティングシステムまたは処理システムのいずれに搭載されてもよく、この例としては、例えば、ワークステーション、パーソナルコンピュータ（ＰＣ）、サーバブレード、ポータブルコンピューティングデバイス、ゲームコンソール、システムオンチップ（ＳｏＣ）、テレビジョンシステム、オーディオシステムなどが挙げられる。例えば、一実施形態では、処理コア１００は、コンピューティングシステムの回路基板またはマザーボードに接続されたプロセッサに搭載されてもよい。図５を参照して下で説明するように、プロセッサコア１００はｘ８６命令セットアーキテクチャ（ＩＳＡ）の一種を実装するように構成されてもよい。しかし、別の実施形態では、コア１００が、異なるＩＳＡまたはＩＳＡの組み合わせを実装してもよい点に留意されたい。一部の実施形態では、図６を参照して下で更に詳しく説明するように、プロセッサコア１００は、コンピューティングシステムのプロセッサ内部に含まれる複数のプロセッサコアの１つでもよい。
【００１５】
図１を参照して記載した構成要素は例示に過ぎず、本発明を任意の構成要素または構成の特定の組に限定することを意図するものではない。例えば、各種実施形態では、記載した構成要素の１つ以上を、必要に応じて、省略したり組み合わせても、追加の構成要素が含まれもよい。例えば、一部の実施形態では、ディスパッチユニット１５０が、ＤＥＣ１４０内部に物理的に配置され、リタイアユニット１７０とライトバックユニット１８０が、実行ユニット１６０内部または実行コンポーネントのクラスタ（例えば、図５のクラスタ５５０ａ〜ｂ）内部に物理的に配置されてもよい。
【００１６】
図２は、一実施形態による、無ロックのロード命令（Ｌ）、無ロックのストア命令（Ｓ）、および被ロックの命令（Ｘ）を含む命令のシーケンスの実行における主要なイベントのタイミングチャートである。図２では、論理的な実行が上から下に進み、時間が左から右に進む。また、命令のシーケンスの実行における主要なイベントは大文字で表され、「Ｄ」はディスパッチステージの始点を表し、「Ｅ」は実行ステージの始点を表し、「Ｒ」はリタイアステージの始点を表し、「Ｗ」はライトバックステージの始点を表す。更に、小文字の「ｒ」は命令のリタイアがストールされる期間を表し、等号「＝」は、被ロック命令がアクセスするキャッシュラインに対する取得済みの排他的所有権をプロセッサコア１００が行使する期間を表す。
【００１７】
図３は、一実施形態による、被ロックオペレーションを実行するための方法を示すフローチャートである。さまざまな実施形態では、図に示すステップの一部が、同時に実行されても、図とは異なる順序で実行されても、あるいは省略されてもよい点に留意すべきである。また、必要に応じて追加のステップが実行されてもよい。
【００１８】
図１〜３を合わせて参照すると、オペレーション中に、複数の命令がフェッチされ、デコードされた後、実行のためにディスパッチされる（ブロック３１０）。ディスパッチされる命令には、被ロック命令と、複数の無ロック命令とが含まれうる。図２に示すように、無ロック命令の１つ以上が被ロック命令の前にディスパッチされ、無ロック命令の１つ以上が被ロック命令の後にディスパッチされうる。複数の命令は、プログラム順序で実行するためにディスパッチされ、被ロック命令は、プログラムシーケンスにおける前の命令の直後にディスパッチされうる。つまり、一部のプロセッサアーキテクチャとは異なり、被ロック命令がディスパッチステージでストールされず、命令が同時または実質的に並列にディスパッチされうる。
【００１９】
古い命令が全てリタイアされ、これらの命令に関連するメモリへのライトバックオペレーションが実行されるまで、被ロック命令を、プロセッサパイプラインのディスパッチステージでストールさせるプロセッサアーキテクチャでは、被ロック命令と全ての古い命令は、通常、例えば、図２の点Ａ〜点Ｂに示す期間ストールしてしまう。図１〜３を参照して記載する機構は、命令をディスパッチステージでストールさせない。命令をディスパッチステージでストールさせないことにより、命令をプロセッサパイプラインのディスパッチステージでストールさせるプロセッサアーキテクチャに固有の遅延の一部を低減することにより、パフォーマンスを向上させることができる。
【００２０】
ディスパッチステージののち、実行ユニット１６０は、複数の命令を実行する（ブロック３２０）。実行ユニット１６０は、被ロック命令を、被ロック命令の前にディスパッチされた無ロック命令と被ロック命令の後にディスパッチされた無ロック命令の両方と同時または実質的に並列に実行しうる。詳細には、実行中に、実行ユニット１６０は、ロードオペレーションを実行してメモリから必要なデータを取得し、取得したデータを使用して演算を実行し、結果を、未処理のストアの内部ストアキューに記憶して、キューイングされた結果が、システムのメモリ階層に書き込まれる。各種実装では、被ロック命令がディスパッチステージでストールされないため、無ロック命令の処理のステージまたは状態を考慮せずに、被ロック命令の実行が進行することができる。
【００２１】
被ロック命令の実行中に、プロセッサコア１００は、被ロック命令がアクセスするキャッシュラインの排他的所有権を取得しうる（ブロック３３０）。キャッシュラインの排他的所有権は、被ロック命令に関連するライトバックオペレーションの完了まで保持されうる。
【００２２】
実行ユニット１６０が被ロック命令を実行したら、リタイアユニット１７０は被ロック命令をリタイアさせる（ブロック３４０）。リタイア前であれば、プロセッサコア１００は、いつの時点でも、命令を破棄して再開することができる。しかし、リタイア後は、プロセッサコア１００は、被ロック命令が指定するレジスタおよびメモリの更新をコミットされる。
【００２３】
各種実装では、リタイアユニット１７０は、プログラム順序で複数の命令をリタイアさせうる。このため、被ロック命令の前にディスパッチされた１つ以上の無ロック命令を、被ロック命令がリタイアされる前にリタイアさせることができる。
【００２４】
被ロック命令のリタイア中に、図２に示すように、プロセッサコア１００は、被ロック命令がアクセスするキャッシュラインに対する取得済みの排他的所有権の行使を開始しうる（ブロック３５０）。つまり、プロセッサコア１００がキャッシュラインの排他的所有権の行使を開始すると、プロセッサコア１００は、このキャッシュラインへの読み出しまたは書き込みを行おうとする他のプロセッサ（または他のエンティティ）に、キャッシュラインの所有権を解放するのを拒否する。リタイア前に、プロセッサコア１００がキャッシュラインの排他的所有権を実行時に取得していた場合でも、プロセッサコア１００は、アクセスを要求している他のプロセッサに所有権を解放しうる。しかし、リタイア前にプロセッサコア１００がキャッシュラインの所有権を解放すると、プロセッサコア１００は、被ロック命令の処理を再開しなければならない。図２に示すように、キャッシュラインの排他的所有権の行使が、リタイアの開始から、被ロック命令に関連するライトバックオペレーションの完了まで継続されうる。
【００２５】
更に、図２に示すように、被ロック命令に関連するライトバックオペレーションが完了するまで、プロセッサコア１００は、被ロック命令の後にディスパッチされた１つ以上の無ロック命令のリタイアをストールさせうる（ブロック３６０）。つまり、実行ユニット１６０が、被ロック命令の後にディスパッチされた１つ以上の命令の実行を完了した場合、ライトバックユニット１８０が被ロック命令のライトバックオペレーションを実行するまで、プロセッサコア１００はこのような命令のリタイアをストールさせる。図２に示す１つの具体例では、ロード命令（Ｌ４）のリタイアステージは、点Ｂから点Ｃまでの間ストールされる。なお、この例では、時点Ｂから時点Ｃまでの時間が、時点Ａから時点Ｂまでの時間よりも実質的に短い。
【００２６】
被ロック命令より新しい命令のリタイアを、ライトバックの後まで遅らせることにより、例えば、被ロック命令のライトバックオペレーションの前に、例えば他のプロセッサの活動によってメモリシステムの状態が変化する過渡的な状態を、新しいロード命令が見られないように保証するために、ロード監視ユニット１６５は、新しいロード命令から見える結果を監視することができるようになる。
【００２７】
前述のように、図１〜３の実施形態に記載した機構の、命令の実行に関する他のプロセッサアーキテクチャとの差異の１つは、被ロック命令と新しい命令がディスパッチステージでストールされるのではなく、被ロックオペレーションより新しい命令がリタイアステージでストールされる点にある。
【００２８】
被ロック命令とすべての新しい命令が、古いオペレーションが完了するのを待機してディスパッチステージでストールされるプロセッサアーキテクチャでは、プロセッサは、通常、ディスパッチからストール終了事象（すなわち、古い命令のライトバックオペレーション）までのパイプライン深さに等しい時間、有用な作業を実行しない。その後、ストール終了事象後に、プロセッサは、有用な作業の実行を再開することができる。しかし、一般に、実行速度が、ストールが発生しなかったと仮定した場合よりも遅くなり、このため、プロセッサは、通常は遅延を埋め合わせることができない。これがプロセッサのパフォーマンスに大きく影響することがある。
【００２９】
図１〜３の実施形態では、新しい命令がリタイアステージでストールされるため、システムが割り当て可能なリソース（リネームレジスタ、ロード／ストアバッファのスロット、リオーダバッファのスロットなど）を使い果たさない限り、プロセッサコア１００は有用な命令を継続的にディスパッチして実行することができる。このような実施形態では、ストールの終了時に、さまざまな命令がリタイアを待っている場合でも、プロセッサコア１００は、これらの命令を、通常の実行帯域幅を実質的に超える最大リタイア帯域幅でバースト方式でリタイアさせることができる。また、リタイアからライトバックまでのパイプライン深さが、ディスパッチからライトバックまでのパイプライン深さよりも実質的に浅い。この手法は、実際の命令のディスパッチと実行の流れを遅延させることを回避するために、リタイアの帯域幅が高いという点と、割り当て可能なリソースが利用可能である点とを利用している。
【００３０】
被ロック命令のリタイアの後の任意の時点で、ライトバックユニット１８０は、被ロック命令のライトバックオペレーションを実行し、内部ストアキューの内容を取り出し、コアインタフェースユニット１９０を介して、実行結果をシステムのメモリ階層に書き込む（ブロック３７０）。ライトバックステージ後に、被ロック命令の結果がシステムの他のプロセッサに対して公開され、キャッシュラインの排他的所有権が解放される。
【００３１】
各種実装では、ライトバックユニット１８０は、複数の命令にプログラム順にライトバックオペレーションを実行しうる。このため、被ロックオペレーションの前にディスパッチされた１つ以上の無ロック命令に関連するライトバックオペレーションが、被ロック命令に関連するライトバックオペレーションの実行前に実行されうる。
【００３２】
被ロック命令がディスパッチステージでストールしないため、被ロック命令に関連するディスパッチ、実行、リタイア、およびライトバックの各オペレーションが、被ロック命令の前にディスパッチされた１つ以上の無ロック命令に関連する、ディスパッチ、実行、リタイア、およびライトバックの各オペレーションと、同時または実質的に並列に実行される。つまり、被ロック命令に関連する各ステージの実行が、無ロック命令の処理のステージまたは実行状態のために遅延することがない。
【００３３】
図１〜３の実施形態に記載した機構の、命令の実行に関して他のプロセッサアーキテクチャと異なる別の差異は、キャッシュラインの排他的所有権の行使が、実行ステージからライトバックステージまでではなく、リタイアステージからライトバックステージまで行われる点にある。このような実施形態では、キャッシュラインの排他的所有権が、実行ステージからリタイアステージの間はプロセッサコア１００によって行使されないため、アクセスを要求している他のプロセッサが、この期間にキャッシュラインを利用できるようになる。
【００３４】
被ロック命令の処理中に、ロード監視ユニット１６５は、他のプロセッサが、対応するキャッシュラインへのアクセスを取得しようとするのを監視しうる。プロセッサコア１００がキャッシュラインに排他的所有権を行使する前（すなわちリタイア前）に、あるプロセッサが、キャッシュラインへのアクセスを取得した場合、ロード監視ユニット１６５は、所有権の解放を検出して、プロセッサコア１００に、部分的に実行した被ロック命令を放棄させてから、この被ロック命令の処理を再開させうる。ロード監視ユニット１６５の監視機能は、被ロックオペレーションのアトミック性を保証するのを支援する。
【００３５】
上で説明したように、キャッシュラインの排他的所有権が解放され、キャッシュラインが、アクセスを要求している他のプロセッサに利用可能となると、プロセッサコア１００は、被ロック命令の処理を再開する。一部の実装では、この状況が再度発生して被ロック命令の処理がループするのを回避するために、キャッシュラインが、アクセスを要求している他のプロセッサに解放されると、被ロック命令の処理が再開されるが、今回は、キャッシュラインの排他的所有権の取得と行使の両方が実行ステージで行われる。今回は、プロセッサコア１００が、実行ステージからライトバックステージまでキャッシュラインの排他的所有権を行使するため、この間は、キャッシュラインが、アクセスを要求している他のプロセッサに解放されることがなく、被ロック命令の処理が、プロセスが再びループすることなく完了し、先に進むことが保証される。
【００３６】
一部の実装では、ディスパッチされる複数の命令に、第１の被ロック命令の後にディスパッチされた１つ以上の追加の被ロック命令が含まれることがある。このような実装では、追加の被ロック命令が、ディスパッチされ実行されうるが、第１の被ロック命令に関連するライトバックオペレーションが完了するまで、シーケンス内の第２の被ロック命令のリタイアがストールされうる。つまり、図４のフローチャートを参照して下で更に詳しく説明するように、古い被ロック命令が全てライトバックステージを完了するまで、ディスパッチされ実行された被ロック命令がリタイアステージでストールされうる。
【００３７】
図４は、一実施形態による、被ロックオペレーションを実行するための方法を示す別のフローチャートである。さまざまな実施形態では、図に示すステップの一部が、同時に実行されても、図とは異なる順序で実行されても、あるいは省略されてもよい点に留意すべきである。また、必要に応じて追加のステップが実行されてもよい。
【００３８】
図１〜４を合わせて参照すると、オペレーション中に、複数の命令がフェッチされ、デコードされた後、実行のためにディスパッチされる（ブロック４１０）。ディスパッチされる命令には、無ロック命令と、第１の被ロック命令と、第２の無ロック命令とが含まれうる。第１の被ロック命令は、第２の被ロック命令の前にディスパッチされる。ディスパッチステージののち、実行ユニット１６０は、複数の命令を実行する（ブロック４２０）。実行ユニット１６０は、第１の被ロック命令および第２の被ロック命令を、無ロック命令と同時または実質的に並列に実行しうる。被ロック命令の実行中に、プロセッサコア１００は、第１の被ロック命令と第２の被ロック命令がアクセスするキャッシュラインの排他的所有権を取得しうる。キャッシュラインの排他的所有権は、対応するライトバックオペレーションの完了まで保持されうる。
【００３９】
実行ユニット１６０が第１の被ロック命令を実行したあとに、リタイアユニット１７０は第１の被ロック命令をリタイアさせる（ブロック４３０）。また、第１の被ロック命令のリタイア中に、プロセッサコア１００は、第１の被ロック命令がアクセスするキャッシュラインに対する取得済みの排他的所有権の行使を開始しうる（ブロック４４０）。つまり、プロセッサコア１００がキャッシュラインの排他的所有権の行使を開始すると、プロセッサコア１００は、このキャッシュラインの読み出しまたは書き込みを行おうとしている他のプロセッサ（または他のエンティティ）に、キャッシュラインの所有権を解放するのを拒否する。
【００４０】
更に、プロセッサコア１００は、第１の被ロック命令に関連するライトバックオペレーションが完了するまで、第１の被ロック命令の後にディスパッチされた第２の被ロック命令と無ロック命令のリタイアをストールさせうる（ブロック４５０）。詳細には、第２の被ロック命令と、第１の被ロック命令の後であるが第２の被ロック命令の前にディスパッチされた無ロック命令とは、第１の被ロック命令に関連するライトバックオペレーションが完了するまでストールされる。第２の被ロック命令の後にディスパッチされた無ロック命令は、第２の被ロック命令に関連するライトバックオペレーションが完了するまでストールされる。この同じ手法を、この後に続く別の被ロック命令と無ロック命令とに実装することができる点に留意されたい。
【００４１】
第１の被ロック命令のリタイアの後の任意の時点で、ライトバックユニット１８０は、第１の被ロック命令のライトバックオペレーションを実行し、内部ストアキューの内容を取り出し、コアインタフェースユニット１９０を介して、実行結果をシステムのメモリ階層に書き込む（ブロック４６０）。ライトバックステージ後に、第１の被ロック命令の結果がシステムの他のプロセッサに対して公開され、キャッシュラインの排他的所有権が解放される。第１の被ロック命令のライトバックステージの完了後に、第２の被ロック命令がリタイアされる（ブロック４７０）。第２の被ロック命令のリタイア中に、プロセッサコア１００は、第２の被ロック命令がアクセスするキャッシュラインに対する取得済みの排他的所有権の行使を開始しうる（ブロック４８０）。次に、第２の被ロック命令のリタイア後の任意の時点で、第２の被ロック命令のライトバックオペレーションが実行される（ブロック４９０）。
【００４２】
図５は、プロセッサコア１００の一実施形態のブロック図である。一般に、コア１００は、コア１００に直接または間接的に結合されたシステムメモリに保存されうる命令を実行するように構成されうる。このような命令は、特定の命令セットアーキテクチャ（ＩＳＡ）に従って定義されうる。例えば、コア１００は、ｘ８６  ＩＳＡの一種を実装するように構成されうるが、別の実施形態では、コア１００は異なるＩＳＡまたはＩＳＡの組み合わせを実装してもよい。
【００４３】
図に示した実施形態では、コア１００は、命令フェッチユニット（ＩＦＵ）５２０に命令を提供するように結合された命令キャッシュ（ＩＣ）５１０を備えうる。ＩＦＵ５２０は、分岐予測ユニット（ＢＰＵ）５３０と、命令デコードユニット（ＤＥＣ）５４０とに結合されうる。ＤＥＣ５４０は、複数の整数実行クラスタ５５０ａ〜ｂと、浮動小数点ユニット（ＦＰＵ）５６０とにオペレーションを提供するように結合されうる。各クラスタ５５０ａ〜ｂは、各々の複数の整数実行ユニット５５４ａ〜ｂに結合された個々のクラスタスケジューラ５５２ａ〜ｂを備えうる。クラスタ５５０ａ〜ｂは、実行ユニット５５４ａ〜ｂにデータを提供するために結合された各々のデータキャッシュ５５６ａ〜ｂを備えうる。図に示した実施形態では、データキャッシュ５５６ａ〜ｂはＦＰＵ５６０の浮動小数点実行ユニット５６４にもデータを提供し、浮動小数点実行ユニット５６４は、ＦＰスケジューラ５６２からオペレーションを受け取るために結合されうる。データキャッシュ５５６ａ〜ｂと命令キャッシュ５１０とは、コアインタフェースユニット５７０にも結合され、コアインタフェースユニット５７０は、一元化されたＬ２キャッシュ５８０のほか、図６に示し、下で説明するコア１００の外部にあるシステムインタフェースユニット（ＳＩＵ）にも結合されうる。図５は、各ユニット間の特定の命令とデータの流れの経路を示しているが、図５には特に図示しないデータまたは命令の流れの追加の経路または向きが提供されてもよい点に留意されたい。図５を参照して記載する構成要素も同様に、被ロック命令を含む命令を実行するために、図１〜４を参照して上で説明した機構を実装しうる。
【００４４】
下で更に詳細に説明するように、コア１００は、別個の実行スレッドに含まれる命令が同時に実行されうるマルチスレッド実行のために構成されうる。一実施形態では、各クラスタ５５０ａ〜ｂは、２つのスレッドのそれぞれ一方に対応する命令の実行に占有的に使用されるが、ＦＰＵ５６０と上りの命令フェッチユニットおよびデコードロジックとは、複数のスレッドで共有されうる。別の実施形態では、同時実行がサポートされるスレッド数が異なっていてもよく、設けられるクラスタ５５０とＦＰＵ５６０の個数も異なっていてもよい。
【００４５】
命令キャッシュ５１０は、取得、デコード、および実行のために発行される前の命令を記憶するように構成されうる。各種実施形態では、命令キャッシュ５１０は、例えば、８ウェイ６４キロバイト（ＫＢ）のキャッシュなど、特定のサイズのダイレクトマップ、セットアソシエティブまたはフルアソシエティブのキャッシュとして構成されうる。命令キャッシュ５１０は、物理アドレッシングされても、仮想アドレッシングされても、この両者の組み合わせ（例えば、仮想インデックスビットと物理タグビット）でもよい。一部の実施形態では、命令キャッシュ５１０は、命令フェッチアドレスのために仮想−物理変換をキャッシュするように構成された変換ルックアサイドバッファ（ＴＬＢ）論理を有してもよいが、ＴＬＢと変換論理が、コア１００の他の構成要素に含まれていてもよい。
【００４６】
命令キャッシュ５１０への命令フェッチアクセスは、ＩＦＵ５２０によって調整されうる。例えば、ＩＦＵ５２０は、各実行スレッドの現在のプログラムカウンタ状態をトラッキングし、実行する後続の命令を取得するために、命令キャッシュ５１０にフェッチを発行しうる。命令キャッシュミスの場合、命令キャッシュ５１０またはＩＦＵ５２０のいずれかが、Ｌ２キャッシュ５８０からの命令データの取得を調整しうる。一部の実施形態では、ＩＦＵ５２０は、メモリレーテンシの影響を軽減するために、予想される命令が使用される前に、メモリ階層の他のレベルからの、その命令のプリフェッチを調整しうる。例えば、精度の高い命令のプリフェッチにより、命令が必要となったときに、その命令が命令キャッシュ５１０に存在する確率が高くなり、これにより、おそらくメモリ階層の複数のレベルでのキャッシュミスのレーテンシの影響が回避される。
【００４７】
各種の分岐（例えば、条件付きの分岐または無条件の分岐、呼び出し／戻り命令など）により、特定のスレッドの実行の流れが変わりうる。分岐予測ユニット５３０は、通常、ＩＦＵ５２０のために、今後フェッチするアドレスを予測するように構成されうる。一部の実施形態では、ＢＰＵ５３０は、命令の流れにおいて可能な分岐に関するさまざまな情報を記憶するように構成されうる分岐先バッファ（ＢＴＢ）を備えうる。例えば、ＢＴＢは、分岐の種類（例えば、静的、条件付き、直接、間接など）、予測される分岐先アドレス、命令キャッシュ５１０の、分岐先が存在しうると予測されるウェイに関する情報、あるいは他の任意の適切な分岐情報を記憶するように構成されうる。一部の実施形態では、ＢＰＵ５３０は、キャッシュのような階層方式に構成された複数のＢＴＢを有しうる。また、一部の実施形態では、ＢＰＵ５３０は、条件付きの分岐の結果を予測するように構成された１つ以上の種類の異なる予測器（例えば、ローカル予測器、グローバル予測器またはハイブリッド予測器）を備えうる。一実施形態では、分岐予測が命令のフェッチに先行し、ＩＦＵ５２０が命令をフェッチ可能となるまでに、今後フェッチする複数のアドレスを予測してキューイングできるように、ＩＦＵ５２０の実行パイプラインとＢＰＵ５３０の実行パイプラインが分離されてもよい。マルチスレッドオペレーション中に、予測のパイプラインとフェッチのパイプラインが、異なるスレッドに同時に操作するように構成されてもよい点が考察される。
【００４８】
ＩＦＵ５２０は、フェッチを行った結果、「フェッチパケット」と呼ばれる命令バイトのシーケンスを生成するように構成されうる。例えば、フェッチパケットは、３２バイト長または別の適切な値でもよい。一部の実施形態では、特に、可変長命令を実装するＩＳＡでは、所定のフェッチパケット内の任意の境界に配列される有効な命令数が変わり、場合によっては、命令が異なるフェッチパケットにまたがることがある。一般に、ＤＥＣ５４０は、フェッチパケット内で命令の境界を特定して、この命令を、デコードするか、あるいはまたはほかの方法で、クラスタ５５０またはＦＰＵ５６０が実行可能なオペレーションに変換して、このようなオペレーションを実行のためにディスパッチするように構成されうる。
【００４９】
一実施形態では、ＤＥＣ５４０は、最初に、１つ以上のフェッチパケットから抽出した所定のバイトのウィンドウ内で、可能な命令の長さを決定するように構成されうる。例えば、ＤＥＣ５４０は、ｘ８６互換ＩＳＡの場合、所定のフェッチパケット内の各バイト位置を始点とする、プレフィックス、オペコード、「ｍｏｄ／ｒｍ」、および「ＳＩＢ」の各バイトの有効なシーケンスを特定するように構成されうる。一実施形態では、ＤＥＣ５４０内の抽出論理は、次に、ウィンドウ内で最大４つの有効な命令の境界を特定するように構成されうる。一実施形態では、複数のフェッチパケットと、命令の境界を特定する複数の命令ポインタ群が、ＤＥＣ５４０内にキューイングされ、ＩＦＵ５２０が時としてデコードよりも「先にフェッチ」できるように、デコードプロセスをフェッチから分離することが可能となる。
【００５０】
次に、命令が、フェッチパケット記憶域からＤＥＣ５４０内のいくつかの命令デコーダの１つに送られうる。一実施形態では、ＤＥＣ５４０は、１サイクルにつき最大４つの命令を実行のためにディスパッチするように構成されており、これに対応して４つの別個の命令デコーダが設けられるが、他の構成も可能であり、考察される。コア１００がマイクロコード命令をサポートしている実施形態では、各命令デコーダは、所定の命令がマイクロコード化されているかどうかを判定し、マイクロコード化されている場合は、命令をオペレーションのシーケンスに変換するために、マイクロコードエンジンの動作を起動するように構成されうる。マイクロコード化されていない場合、命令デコーダは、命令を、クラスタ５５０またはＦＰＵ５６０が実行するのに適した１つのオペレーション（あるいは、一部の実施形態では複数のオペレーション）に変換しうる。得られたオペレーションは、「マイクロオペレーション」、「マイクロオペ」または「ＵＯＰ」とも呼ばれ、１つ以上のキューに格納され、実行のためにディスパッチされるのを待機しうる。一部の実施形態では、マイクロコードオペレーションと、非マイクロコード（または「高速パス」）オペレーションとは、別のキューに格納されうる。
【００５１】
ＤＥＣ５４０内のディスパッチ論理は、ディスパッチパーセルを組み立てるために、ディスパッチ待機中のキューイングされたオペレーションの状態を、実行リソースの状態およびディスパッチルールと併せて調べるように構成されうる。例えば、ＤＥＣ５４０は、キューイングされたオペレーションをディスパッチ可能かどうか、キューイングされてクラスタ５５０および／またはＦＰＵ５６０内での実行を待機しているオペレーションの数、ならびにディスパッチするオペレーションに適用されうるリソース制約を考慮しうる。一実施形態では、ＤＥＣ５４０は、所定の実行サイクル中に、クラスタ５５０またはＦＰＵ５６０の１つに、最大４オペレーションのパーセルをディスパッチするように構成されうる。
【００５２】
一実施形態では、ＤＥＣ５４０は、所定の実行サイクル中に１つのスレッドのオペレーションのみをデコードし、ディスパッチするように構成されてもよい。しかし、ＩＦＵ５２０とＤＥＣ５４０が、同時に同じスレッドを操作する必要はない点に留意されたい。命令のフェッチおよびデコード中に各種のスレッド切替ポリシーを使用することが考察される。例えば、ＩＦＵ５２０とＤＥＣ５４０は、Ｎサイクル（Ｎは最小で１）おきに、ラウンドロビン方式で、処理する異なるスレッドを選択するように構成されうる。あるいは、スレッド切替が、キューの占有率などの動的な条件によって変更されてもよい。例えば、ＤＥＣ５４０内の特定のスレッドのキューイングされているデコード済みのオペレーション、または特定のクラスタ５５０のキューイングされているディスパッチ済みのオペレーションの深さが、しきい値を下回ると、異なるスレッドのキューイングされているオペレーションが不足するまで、デコード処理はそのスレッドに切り換えうる。一部の実施形態では、コア１００は、複数の異なるスレッド切替ポリシーをサポートすることができ、そのうちのいずれかが、ソフトウェアによって、あるいは製造時（例えば、製造マスクオプションとして）選択されてもよい。
【００５３】
一般に、クラスタ５５０は、ロード／ストアオペレーションのほかに、整数演算オペレーションと論理オペレーションも実装するように構成されうる。一実施形態では、クラスタ５５０ａ〜ｂのそれぞれは、個々のスレッドのオペレーションの実行のみに使用され、コア１００がシングルスレッドモードで動作するように構成されている場合、オペレーションが、クラスタ５５０の１つのみにディスパッチされうる。各クラスタ５５０は、独自のスケジューラ５５２を有し、このスケジューラ５５２は、クラスタに既にディスパッチされているオペレーションを実行するための発行を管理するように構成されうる。各クラスタ５５０は、独自の整数物理レジスタファイルのコピーのほか、独自の終了論理（例えば、オペレーションの終了とリタイアを管理するためのリオーダバッファまたは他の構造体）も有しうる。
【００５４】
各クラスタ５５０内の実行ユニット５５４は、異なるタイプのオペレーションの同時実行をサポートすることができる。例えば、一実施形態では、実行ユニット５５４は、２つの並列ロード／ストアアドレス生成（ＡＧＵ）オペレーションと、２つの同時数値／論理演算（ＡＬＵ）オペレーションとをサポートし、クラスタ当たり合計４つの同時整数オペレーションをサポートすることができる。実行ユニット５５４は、整数の乗算、除算などの追加のオペレーションをサポートしてもよいが、各種実施形態では、クラスタ５５０は、スループットに対するスケジューリングの制約、ならびにこのような追加のオペレーションの他のＡＬＵ／ＡＧＵオペレーションとの同時実行を実装してもよい。また、各クラスタ５５０は、命令キャッシュ５１０と同様に、さまざまなキャッシュ構成のいずれかを使用して実装されうる独自のデータキャッシュ５５６を備えてもよい。データキャッシュ５５６が命令キャッシュ５１０とは異なる構造で編成されてもよい点に留意されたい。
【００５５】
図に示した実施形態では、クラスタ５５０とは異なり、ＦＰＵ５６０は異なるスレッドの浮動小数点演算を実行するように構成され、場合によってはこれらを同時に実行するように構成されうる。ＦＰＵ５６０は、クラスタスケジューラ５５２と同様に、オペレーションを受け取り、キューイングし、ＦＰ実行ユニット５６４内で実行するために発行するように構成されうるＦＰスケジューラ５６２を備えうる。また、ＦＰＵ５６０は、浮動小数点オペランドを管理するように構成された浮動小数点物理レジスタファイルを備えうる。ＦＰ実行ユニット５６４は、加算、乗算、除算、乗算累算などの各種の浮動小数点演算のほか、ＩＳＡによって規定されうる他の浮動小数点、マルチメディアまたはその他のオペレーションを実装するように構成されうる。各種実施形態では、ＦＰＵ５６０は、特定の異なる種類の浮動小数点演算の同時実行をサポートし、異なる精度（例えば、６４ビットオペランド、１２８ビットオペランドなど）もサポートすることができる。図に示すように、ＦＰＵ５６０はデータキャッシュを有さないが、代わりに、クラスタ５５０内部に設けられたデータキャッシュ５５６にアクセスするように構成されうる。一部の実施形態では、ＦＰＵ５６０は、浮動小数点のロード命令とストア命令を実行するように構成されうるが、別の実施形態では、ＦＰＵ５６０の代わりにクラスタ５５０が上記命令を実行してもよい。
【００５６】
命令キャッシュ５１０とデータキャッシュ５５６とは、コアインタフェースユニット５７０を介してＬ２キャッシュ５８０にアクセスするように構成されうる。一実施形態では、ＣＩＵ５７０は、システム内のコア１００と他のコア１０１間のほか、外部システムメモリ、周辺機器との間でも一般的にインタフェースさせうる。一実施形態では、Ｌ２キャッシュ５８０は、任意の適切なキャッシュ構成を使用する一元的なキャッシュとして構成されうる。通常に、Ｌ２キャッシュ５８０は、１次命令キャッシュおよびデータキャッシュよりも実質的に大容量である。
【００５７】
一部の実施形態では、コア１００は、ロードオペレーションとストアオペレーションを含むオペレーションのアウトオブオーダー実行をサポートすることができる。すなわち、クラスタ５５０とＦＰＵ５６０内でのオペレーションの実行の順序が、オペレーションに対応する命令の元のプログラムの順序と変わることがある。このように実行の順序を柔軟に設定できることにより、実行リソースをより効率的にスケジューリングできるようになり、全体的な実行パフォーマンスを向上させることができる。
【００５８】
また、コア１００は、各種の制御手法とデータ投機手法とを実装してもよい。前述のように、コア１００は、スレッドの実行制御の流れの進行方向を予測するために、各種の分岐予測手法と投機的プリフェッチ手法を実装しうる。このような制御投機手法は、一般に、命令が使用可能となるか、（例えば、分岐予測ミスのため）投機ミスが発生するかどうかが確定する前に、矛盾のないような命令の流れを与えようとする手法である。コア１００は、制御投機ミスが発生すると、投機ミスの経路に沿ってオペレーションとデータを廃棄し、実行制御を正しい経路に導くように構成されうる。例えば、一実施形態では、クラスタ５５０は、条件付きの分岐命令を実行して、分岐結果が予測された結果と一致するかどうかを判定するように構成されうる。一致しない場合、クラスタ５５０は、ＩＦＵ５２０に、正しい経路に沿ったフェッチを開始させるように構成されうる。
【００５９】
これとは別に、コア１００は、値の正誤が判明する前に、その後の実行で使用するデータ値を提供しようとする各種データ投機手法を実装しうる。例えば、セットアソシエティブキャッシュでは、データがキャッシュに存在する場合、キャッシュ内のどのウェイにデータが実際にヒットするかが判明する前に、データを、キャッシュの複数のウェイから取得することが可能である。一実施形態では、コア１００は、ウェイのヒット／ミス状態が判明する前に、キャッシュ結果を提供するために、命令キャッシュ５１０、データキャッシュ５５６および／またはＬ２キャッシュ５８０において、一種のデータ投機としてウェイ予測を実行するように構成されうる。データ投機の誤りが発生した場合、投機ミスとなったデータに依存するオペレーションが、「再生」すなわち再実行のために再発行されうる。例えば、ウェイ予測が外れたロードオペレーションが再生されうる。実施形態によっては、再実行時に、ロードオペレーションが、以前の投機ミスの結果に基づいて、再投機される（例えば、先に判定された正しいウェイを使用して投機される）か、あるいはデータ投機を行わずに実行されうる（例えば、結果の生成前に、ウェイのヒット／ミスチェックが終了まで実行の進行が許容される）。各種実施形態では、コア１００は、アドレス予測、アドレスまたはアドレスオペランドのパターンに基づくロード／ストア依存関係の検出、投機的なストア−ロード結果の転送、データコヒーレンスの投機、または他の適切な手法、あるいはその組み合わせなど、数多くの他の種類のデータ投機を実装してもよい。
【００６０】
各種実施形態では、プロセッサ実装は、ほかの構造と共に、１つの集積回路に一体化して形成されたコア１００を複数有してもよい。このようなプロセッサの一実施形態が図６に示される。図に示すように、プロセッサ６００は、それぞれが前述のように構成されうる４つのコア１００ａ〜ｄを有する。図に示した実施形態では、各コア１００は、システムインタフェースユニット（ＳＩＵ）６１０を介して、Ｌ３キャッシュ６２０、およびメモリコントローラ／周辺機器インタフェースユニット（ＭＣＵ）６３０に結合されうる。一実施形態では、Ｌ３キャッシュ６２０は、任意の適切な構成を使用して実装され、コア１００のＬ２キャッシュ５８０と、比較的低速のシステムメモリ６４０との間の中間キャッシュとして動作する一元的なキャッシュとして構成されうる。
【００６１】
ＭＣＵ６３０は、プロセッサ６００をシステムメモリ６４０と直接インタフェースするように構成されうる。例えば、ＭＣＵ６３０は、１種類以上の種類の異なるランダムアクセスメモリ（ＲＡＭ）をサポートするために必要な信号を生成するように構成され、このようなＲＡＭには、デュアルデータレートシンクロナスダイナミックＲＡＭ（ＤＤＲ  ＳＤＲＡＭ）、ＤＤＲ−２  ＳＤＲＡＭ、フルバッファデュアルインラインメモリ（ＦＢ−ＤＩＭＭ）、あるいはシステムメモリ６４０を実装するために使用されうる別の適切なタイプのメモリが挙げられる。システムメモリ６４０は、プロセッサ６００の各種コア１００によって操作されうる命令およびデータを保存するように構成され、システムメモリ６４０の内容が、上で説明した各種キャッシュによってキャッシュされうる。
【００６２】
また、ＭＣＵ６３０は、プロセッサ６００への他のタイプのインタフェースもサポートすることができる。例えば、ＭＣＵ６３０は、プロセッサ６００を、グラフィック処理サブシステム（別個のグラフィックプロセッサ、グラフィックメモリおよび／または他のコンポーネントなどを含む）にインタフェースするために使用されうるアクセラレィティッド／アドバンスドグラフィックスポート（ＡＧＰ）インタフェースの一種などの専用のグラフィックプロセッサインタフェースを実装しうる。ＭＣＵ６３０は、１種類以上の周辺機器インタフェース（例えば、ＰＣＩ  Ｅｘｐｒｅｓｓバス規格の一種）を実装するように構成され、プロセッサ６００は、このインタフェースを使用して、ストレージデバイス、グラフィックデバイス、ネットワークデバイスなどの周辺機器とインタフェースすることができる。一部の実施形態では、他の種類のバスまたは相互接続を介して、プロセッサ６００を他の周辺機器に結合するために、プロセッサ６００の外部の２次バスブリッジ（例えば、「サウスブリッジ」）が使用されうる。メモリコントローラと周辺機器インタフェースの機能が、ＭＣＵ６３０を介してプロセッサ６００内に統合されて図示されているが、別の実施形態では、これらの機能が、従来の「ノースブリッジ」構成を介してプロセッサ６００の外部に実装されてもよい点に留意されたい。例えば、ＭＣＵ６３０の各種機能が、プロセッサ６００内に一体化されるのではなく、別個のチップセットを介して実装されてもよい。
【００６３】
上の実施形態についてかなり詳細に記載したが、上記の開示を完全に理解できれば、数多くの変形例および変更例が当業者にとって明らかであろう。下記の特許請求の範囲は、このような変形例および変更例を全て包含するものと解釈されることが意図される。
【産業上の利用可能性】
【００６４】
本発明は、一般にマイクロプロセッサアーキテクチャに利用可能である。
【図１】
0005543366.tif 000002
【図２】
0005543366.tif 000003
【図３】
0005543366.tif 000004
【図４】
0005543366.tif 000005
【図５】
0005543366.tif 000006
【図６】
0005543366.tif 000007