(57)【要約】  階層マイクロコードストアを有するマルチコアプロセッサ。プロセッサは、プログラマビジブル命令セットアーキテクチャ（ＩＳＡ）に従って規定された命令を独立して実行するように各々が構成された複数のプロセッサコアを含んでもよい。各コアは、マイクロコードエントリを格納するように構成されたローカルマイクロコードユニットを含んでもよい。プロセッサはまた、プロセッサコアの各々によってアクセス可能なリモートマイクロコードユニットを含んでもよい。プロセッサコアの任意の所与のコアが、所与のプロセッサコアによって実行される１つ以上の演算を含む特定のマイクロコードエントリに対応する所与のマイクロコードエントリポイントを発生し、所与のプロセッサコアのそれぞれのローカルマイクロコードユニット内に、特定のマイクロコードエントリが格納されたかを決定するように構成されてもよい。特定のマイクロコードエントリが、それぞれのローカルマイクロコードユニット内に格納されていないという決定に応答して、所与のコアは、リモートマイクロコードユニットに特定のマイクロコードエントリの要求を搬送してもよい。
2010533920.tif 000002
【特許請求の範囲】
【請求項１】
プログラマビジブル命令セットアーキテクチャ（ＩＳＡ）に従って規定された命令を独立して実行するように各々が構成され、マイクロコードエントリを格納するように構成されたローカルマイクロコードユニットを各々が含む複数のプロセッサコアと、
前記プロセッサコアの各々によってアクセス可能であり、マイクロコードエントリを格納するように構成されたリモートマイクロコードストアを含むリモートマイクロコードユニットと、を備えるプロセッサであって、
前記プロセッサコアの任意の所与のコアが、
前記所与のプロセッサコアによって実行される１つ以上の演算を含む特定のマイクロコードエントリに対応する所与のマイクロコードエントリポイントを発生し、
前記所与のプロセッサコアの前記それぞれのローカルマイクロコードユニット内に、前記特定のマイクロコードエントリが格納されたかを決定し、
前記特定のマイクロコードエントリが、前記それぞれのローカルマイクロコードユニット内に格納されていないという決定に応答して、前記リモートマイクロコードユニットに前記特定のマイクロコードエントリの要求を搬送するようにさらに構成される、プロセッサ。
【請求項２】
前記特定のマイクロコードエントリが、前記所与のプロセッサコアの前記それぞれのローカルマイクロコードユニット内に格納されるかを決定するために、前記所与のプロセッサコアが、前記所与のマイクロコードエントリポイントが、前記それぞれのローカルマイクロコードユニットに対応するマイクロコードエントリオイントアドレス空間の一部分に位置するかを決定するようにさらに構成される、請求項１に記載のプロセッサ。
【請求項３】
前記要求の受信に応答して、前記リモートマイクロコードユニットが、前記リモートマイクロコードストアから前記特定のマイクロコードエントリを取り出し、前記特定のマイクロコードエントリを前記所与のプロセッサコアに戻すようにさらに構成され、前記特定のマイクロコードエントリが、別のマイクロコードエントリが、前記特定のマイクロコードエントリの後で取り出されるかどうかを表示するように構成されたシーケンス制御フィールドを含み、前記リモートマイクロコードユニットが、前記シーケンス制御フィールドに応じて、前記リモートマイクロコードストアから前記別のマイクロコードエントリを取り出し、前記所与のプロセッサコアが前記別のマイクロコードエントリを別々に要求することなく、前記別のマイクロコードエントリを前記所与のプロセッサコアに戻すようにさらに構成される、請求１または２に記載のプロセッサ。
【請求項４】
前記プロセッサコアの各々が、前記命令のうちのいずれかの命令を格納するように構成されたそれぞれの命令キャッシュをさらに含み、前記要求の後の前記特定のマイクロコードエントリの受信に応答して、前記所与のプロセッサコアが、前記それぞれの命令キャッシュ内に前記特定のマイクロコードエントリを格納するようにさらに構成される、請求項１から３のいずれか一項に記載のプロセッサ。
【請求項５】
前記リモートマイクロコードストアの少なくとも一部分が書き込み可能なメモリを含む、請求項１から４のいずれか一項に記載のプロセッサ。
【請求項６】
前記ローカルマイクロコードユニット内に格納されたマイクロコードエントリに対応するマイクロコードルーチンの各々が、性能感度しきい値要求を満たすのに対して、前記リモートマイクロコードユニット内に格納されたマイクロコードエントリに対応する少なくともいくつかのマイクロコードルーチンの各々が前記性能感度しきい値要求を満たさない、請求項１から５のいずれか一項に記載のプロセッサ。
【請求項７】
前記性能感度しきい値要求がマイクロコードルーチン実行の頻度に依存する、請求項６に記載のプロセッサ。
【請求項８】
前記性能感度しきい値要求がマイクロコードルーチン実行のレイテンシに依存する、請求項６に記載のプロセッサ。
【請求項９】
システムメモリと、
請求項１から８のいずれか一項に記載のプロセッサとを備え、前記プロセッサが、前記システムメモリに連結される、システム。
【請求項１０】
複数のプロセッサコアの所与のプロセッサコアが、所与のプロセッサコアによって実行される１つ以上の演算を含む特定のマイクロコードエントリに対応する所与のマイクロコードエントリポイントを発生し、複数のプロセッサコアの各々が、プログラマビジブル命令セットアーキテクチャ（ＩＳＡ）に従って規定された命令を独立して実行するように構成され、マイクロコードエントリを格納するように構成されたローカルマイクロコードユニットを含み、
前記所与のプロセッサコアが、前記特定のマイクロコードエントリが、前記所与のプロセッサコアの前記それぞれのローカルマイクロコードユニット内に格納されているかを決定し、
前記特定のマイクロコードエントリが前記それぞれのローカルマイクロコードユニット内に格納されていないという決定に応答して、前記所与のプロセッサコアが、前記特定のマイクロコードエントリの要求をリモートマイクロコードユニットへ搬送し、前記リモートマイクロコードユニットが、前記プロセッサコアの各々によってアクセス可能であり、マイクロコードエントリを格納するように構成されたリモートマイクロコードストアを含む、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサに関し、より詳細には、マルチプロセッサコアを含むプロセッサ内でのマイクロコード実装に関する。
【背景技術】
【０００２】
プロセッサの実装の進歩に伴い、プロセッサ内の個々のプロセッサコアを複製することにより、プロセッサの性能を高める試みがますます広まってきている。このようなコアは、粗粒度並列処理を増大しながら独立した命令実行が可能であってもよく、この粗粒度並列処理は、細粒度並列処理または実行の頻度を上げるなど、性能を上げるための別の方法によって要求されることもあるものよりも抵抗コストおよび低デザイン複雑性で、アプリケーションの実行に利用可能である。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
しかしながら、マルチコアプロセッサの実装には、実装自体に設計上の問題がいくつかある。マイクロコードルーチンのストレージリソースのようなある特定のプロセッサコアリソースが、クリティカルタイミングパスに含まれてもよいため、所与のコアへリソースが近接すると、所与のコアの動作周波数に直接影響を及ぼすことがある。このため、このようなストレージリソースの単一インスタンスを複数のコア間で共有すると、共有インスタンスへの待ち時間が長くなり、コアの性能低下を招いてしまいかねない。しかしながら、各コアがリソースの独自のインスタンスを含むようなストレージリソースを複製すると、設計エリア、電力、および／または他の設計性能指数の面でコストがかかることにもなる。
【課題を解決するための手段】
【０００４】
階層マイクロコードストアを有するマルチコアプロセッサのさまざまな実施形態が開示される。１つの実施形態によれば、プロセッサは、プログラマビジブル命令セットアーキテクチャ（ＩＳＡ：instruction set architecture）に従って規定された命令を独立して実行するように構成された複数のプロセッサコアを含んでもよい。プロセッサコアの各々は、マイクロコードエントリを格納するように構成されたローカルマイクロコードユニットをそれぞれ含んでもよい。また、プロセッサは、プロセッサコアの各々によってアクセス可能であり、マイクロコードエントリを格納するように構成されたリモートマイクロコードストアを含むリモートマイクロコードユニットを含んでもよい。プロセッサコアの任意のコアが、所与のプロセッサコアによって実行される１つ以上の演算を含む特定のマイクロコードエントリに対応する所与のマイクロコードエントリポイントを発生し、所与のプロセッサコアのそれぞれのローカルマイクロコードユニット内に特定のマイクロコードエントリが格納されているかを決定するように構成されてもよい。特定のマイクロコードエントリが、それぞれのローカルマイクロコードユニット内に格納されていないということの決定に応答して、所のコアは、リモートマイクロコードユニットに特定のマイクロコードエントリの要求を伝えてもよい。
【０００５】
本発明はさまざまな修正例および別の形態が可能なものであるが、その具体的な実施形態は、例示的に図面に示され、本明細書に詳細に記載される。しかしながら、図面および詳細な記載は、本発明を開示された特定の形態に限定することを意図したものではなく、むしろ本発明は、添付の特許請求の範囲によって規定されているような本発明の趣旨および範囲内にあるすべての変更、等価物、および代替物を包含するということを理解されたい。
【図面の簡単な説明】
【０００６】
【図１】プロセッサコアの１つの実施形態を示すブロック図。
【図２】マルチプロセッサコアを含むプロセッサの１つの実施形態を示すブロック図。
【図３】マイクロコード制御ストアの１つの実施形態の体系を示すブロック図。
【図４】ローカルおよびリモートマイクロコードユニットを含む階層マイクロコードストアの１つの実施形態を示すブロック図。
【図５】ローカルマイクロコードユニットの１つの実施形態を示すブロック図。
【図６】リモートマイクロコードユニットの１つの実施形態を示すブロック図。
【図７】階層マイクロコードストアを有するプロセッサにおいてマイクロコードエントリを取り出す方法の１つの実施形態を示す流れ図。
【図８】例示的なコンピュータシステムの１つの実施形態を示すブロック図。
【発明を実施するための形態】
【０００７】
プロセッサコアの概要
図１に、プロセッサコア１００の１つの実施形態が示されている。一般的にいえば、コア１００は、コア１００に直接的または間接的に連結されたシステムメモリに格納されてもよい。命令を実行するように構成されてもよい。このような命令は、特定の命令セットアーキテクチャ（ＩＳＡ）に従って規定されるものであってもよい。例えば、コア１００は、ｘ８６  ＩＳＡ系を実装するように構成されてもよいが、他の実施形態において、コア１００は、異なるＩＳＡまたはＩＳＡの組み合わせを実装してもよい。
【０００８】
例示した実施形態において、コア１００は、命令フェッチユニット（ＩＦＵ：instruction fetch unit）１２０に連結された命令キャッシュ（ＩＣ：instruction cache）１１０を含んでもよい。ＩＦＵ１２０は、分岐予測ユニット（ＢＰＵ：branch prediction unit）１３０および命令デコードユニット１４０に連結されてもよい。デコードユニット１４０は、複数の整数演算実行クラスタ１５０ａ〜ｂおよび浮動小数点ユニット（ＦＰＵ： floating point unit）１６０に演算を与えるように連結されてもよい。クラスタ１５０ａ〜ｂの各々は、複数の整数演算実行ユニット１５４ａ〜ｂのそれぞれに連結されたクラスタスケジューラ１５２ａ〜ｂをそれぞれ含んでもよい。さまざまな実施形態において、コア１００は、クラスタ１５０ａ〜ｂ内のいずれか、または共有してデータキャッシュ（図示せず）を含んでもよい。例示した実施形態において、ＦＰＵ１６０は、ＦＰスケジューラ１６２から演算を受けるように連結されてもよい。クラスタ１５０ａ〜ｂ、ＦＰＵ１６０、および命令キャッシュ１１０は、コアインタフェースユニット１７０にさらに連結されてもよく、さらに、コアインタフェースユニット１７０は、Ｌ２キャッシュ１８０およびコア１００の外部にあるシステムインタフェースユニット（ＳＩＵ：system interface unit）（図２に示し、以下に記載）に連結されてもよい。図１は、さまざまなユニット間でのある特定の命令およびデータフローパスを反映させたものであるが、図１に詳細には示されていないデータまたは命令フローのさらなるパスまたは方向が与えられてもよいことに留意されたい。また、例えば、クラスタ１５０、ＦＰＵ１６０、およびＬ２キャッシュ１８０のインスタンスの数の変更、およびこのようなユニット間での相互の関わりの変更を採用したコア１００のさらなる構成も可能である。
【０００９】
以下にさらに詳細に記載するように、コア１００は、ココの実行スレッドからの命令を同時に実行しうるマルチスレッド実行用に構成されてもよい。さまざまな実施形態において、同時実行を行うためにさまざまな数のスレッドがサポートされてもよく、異なる数のクラスタ１５０およびＦＰＵ１６０が設けられてもよいことを考慮されたい。さらに、特殊メディアプロセッサまたは他のタイプのアクセラレータを含む他の共有ユニットまたはマルチスレッドユニットが追加されてもよい。
【００１０】
命令キャッシュ１１０は、命令がフェッチされ、デコードされ、および実行するために発行される前に命令を格納するように構成されてもよい。さまざまな実施形態において、命令キャッシュ１１０は、任意の適切なサイズおよび／または連想度のダイレクトマップ方式、セットアソシアティブ方式、またはフルアソシアティブ方式のキャッシュとして構成されてもよい。命令キャッシュ１１０は、物理アドレッシング、仮想アドレッシング、またはそれら２つの組み合わせが行われたものであってもよい。いくつかの実施形態において、命令キャッシュ１１０はまた、命令フェッチアドレスの仮想／物理変換をキャッシュするように構成されたトランスレーションルックアサイドバッファ（ＴＬＢ：translation lookaside buffer）ロジックを含んでもよいが、ＴＬＢおよびトランスレーションロジックが、コア１００内の他の場所にも含まれてもよい。
【００１１】
命令キャッシュ１１０への命令フェッチアクセスは、ＩＦＵ１２０によって調整されてもよい。例えば、ＩＦＵ１２０は、さまざまな実行スレッドの現在のプログラムカウンタ状態をトラッキングし、さらなる実行命令を取り出すために命令キャッシュ１１０へのフェッチを発行してもよい。命令キャッシュミスの場合、命令キャッシュ１１０またはＩＦＵ１２０のいずれかが、Ｌ２キャッシュ１８０から命令データの取り出しを調整してもよい。いくつかの実施形態において、ＩＦＵ１２０はまた、メモリレイテンシの効果を軽減するために、予測された使用の前に他のレベルのメモリ階層からの命令のプリフェッチを調整してもよい。例えば、命令プリフェッチがうまくいくと、必要なときに命令キャッシュ１１０に存在する命令の可能性を高めることがあるため、メモリ階層の可能性のある複数のレベルでキャッシュミスのレイテンシ効果が回避される。
【００１２】
さまざまなタイプの分岐（例えば、条件または無条件ジャンプ、コール／リターン命令など）が、特定のスレッドの実行フローを変更することもある。分岐予測ユニット１３０は、一般に、ＩＦＵ１２０によって使用するための将来的なフェッチアドレスを予測するように構成されてもよい。いくつかの実施形態において、ＢＰＵ１３０は、分岐命令に関する情報を格納するように構成された任意の適切な構造を含んでもよい。例えば、いくつかの実施形態において、ＢＰＵ１３０は、条件分岐の結果を予測するように構成された１つ以上の異なるタイプの予測変数（例えば、ローカル、グローバル、またはハイブリッド予測変数）を含んでもよい。
【００１３】
フェッチングの結果、ＩＦＵ１２０は、フェッチパケットと呼ばれることもある命令バイトシーケンスを生成するように構成されてもよい。フェッチパケットの長さは、任意の適切なバイト数であってもよい。いくつかの実施形態において、特に、可変長命令を実装するＩＳＡの場合、所与のフェッチパケット内に整列された可変数の有効命令が存在し、いくつかのインスタンスにおいて、命令が異なるフェッチパケットに及ぶこともある。一般的に言えば、デコードユニット１４０は、クラスタ１５０またはＦＰＵ１６０による実行に適した演算に命令をデコードまたは変換し、このような実行演算を送るために、フェッチパケット内に命令の境界を特定するように構成されてもよい。
【００１４】
１つの実施形態において、ＤＥＣ１４０は、最初に、１つ以上のフェッチパケットから抽出したバイトの所与のウィンドウ内に可能な命令の長さを決定するように構成されてもよい。例えば、ｘ８６互換ＩＳＡの場合、ＤＥＣ１４０は、所与のフェッチパケット内の各バイト位置で始まる有効なプリフィックス、オペコード、「ｍｏｄ／ｒｍ」および「ＳＩＢ］バイトの有効シーケンスを識別するように構成されてもよい。さらに、ＤＥＣ１４０内のピックロジックが、１つの実施形態において、ウィンドウ内の複数の有効な命令の境界を特定するように構成されてもよい。１つの実施形態において、複数のフェッチパケットおよび命令境界を特定する複数の命令ポインタ群が、ＤＥＣ１４０内のキューに入れられてもよい。
【００１５】
次に、フェットパケットストレージからＤＥＣ１４０内のいくつかの命令デコーダの１つに命令が向けられてもよい。１つの実施形態において、ＤＥＣ１４０は、実行サイクルごとにディスパッチされる命令と同程度に多くの独立した命令デコーダを設けるように構成されてもよいが、他の構成も可能であり考慮される。コア１００がマイクロコード化命令をサポートする実施形態において、各命令デコーダは、所与の命令がマイクロコード化されているか否かを決定するように構成されてもよく、マイクロコード化されていれば、命令を演算シーケンスに変換するためのマイクロコードエンジンの演算を呼び出してもよい。あるいは、命令デコーダは、クラスタ１５０またはＦＰＵ１６０による実行に適した１つの演算（または、いくつかの実施形態において、場合によっては、複数の演算）に命令を変換してもよい。結果的に得られる演算は、マイクロオペレーション、マイクロＯＰ、またはμＯＰと呼ばれることもあり、実行のディスパッチを待機するために１つ以上のキュー内に格納されてもよい。いくつかの実施形態において、マイクロコード演算および非マイクロコード（または「ファーストパス」）演算が、別々のキューに格納されてもよい。コア１００内でのマイクロコード実装の実施形態に関するさらなる詳細は、以下にさらに詳細に記載される。
【００１６】
ＤＥＣ１４０内のディスパッチロジックが、ディスパッチパーセルのアセンブルを試みるために、実行リソースおよびディスパッチルールの状態と組み合わせて、ディスパッチ待機中のキューに入れられた演算の状態を調べるように構成されてもよい。例えば、ＤＥＣ１４０は、ディスパッチキューに入っている演算の利用可能性、クラスタ１５０および／またはＦＰＵ１６０内でキューに入れられ実行待機中の演算数、およびディスパッチされる演算に適用してもよい任意のリソース制約を考慮に入れてもよい。１つの実施形態において、ＤＥＣ１４０は、所与の実行サイクル中、クラスタ１５０またはＦＰＵ１６０の一方に演算のパーセルをディスパッチするように構成されてもよい。
【００１７】
１つの実施形態において、ＤＥＣ１４０は、所与の実行サイクル中、１つのみのスレッドに対して演算をデコードおよびディスパッチするように構成されてもよい。しかしながら、ＩＦＵ１２０およびＤＥＣ１４０は、同じスレッドで同時に動作する必要ないことに留意されたい。命令のフェッチおよびデコード中に使用するためのさまざまなタイプのスレッドスイッチングの方法が考えられる。例えば、ＩＦＵ１２０およびＤＥＣ１４０は、ラウンドロビン式にＮサイクルごとに処理するための異なるスレッドを選択するように構成されてもよい（ここで、Ｎはわずか１であってもよい）。他の形態では、演算中に起こるダイナミック条件によってスレッドスイッチングが影響されることもある。
【００１８】
一般的に言えば、クラスタ１５０は、整数演算および論理演算を実装し、ロード／ストア演算を実行するように構成されてもよい。１つの実施形態において、クラスタ１５０ａ〜ｂの各々が、それぞれのスレッドに対する演算の実行のためのものであってもよい。各クラスタ１５０は、それ自体のスケジューラ１５２を含んでもよく、このスケジューラ１５２は、クラスタにすでにディスパッチされた演算を実行するための発行を管理するように構成されてもよい。各クラスタ１５０は、整数物理レジスタファイルのコピーおよび完了ロジック（例えば、演算の完了および退去を管理するためのリオーダバッファまたは他の構造）をさらに含んでもよい。
【００１９】
各クラスタ１５０内において、実行ユニット１５４が、さまざまな異なるタイプの演算の同時実行をサポートしてもよい。例えば、１つの実施形態において、実行ユニット１５４は、同時ロード／ストアアドレス発生（ＡＧＵ：address generation）演算および演算／論理（ＡＬＵ：arithmetic/logic）をサポートしてもよい。実行ユニット１５４は、整数乗算および除算などの追加の演算をサポートしてもよいが、さまざまな実施形態において、クラスタ１５０は、このような追加の演算とともに他のＡＬＵ／ＡＧＵ演算のスループットおよび同時並行性にスケジューリング制約を実装してもよい。さまざまな実施形態において、クラスタ１５０は、命令キャッシュ１１０とは異なるように体系化されてもよいデータキャッシュを含み、または共有してもよい。
【００２０】
ＦＰＵ１６０は、クラスタスケジューラ１５２のように、ＦＰ実行ユニット１６４内で実行の演算を受信し、キューに入れ、発行するように構成されてもよいＦＰスケジューラ１６２を含んでもよい。ＦＰＵ１６０はまた、浮動小数点オペランドを管理するように構成された浮動小数点物理レジスタファイルを含んでもよい。ＦＰ実行ユニット１６４は、ＩＳＡによって規定されてもよいようなさまざまなタイプの浮動小数点演算を実装するように構成されてもよい。さまざまな実施形態において、ＦＰＵ１６０は、ある異なるタイプの浮動小数点演算の同時実行をサポートしてもよく、異なる精度（例えば、６４ビットオペランド、１２８ビットオペランドなど）をサポートしてもよい。さまざまな実施形態において、ＦＰＵ１６０は、データキャッシュを含んでもよく、または他のユニットに位置するデータキャッシュにアクセスするように構成されてもよい。
【００２１】
命令キャッシュ１１０およびデータキャッシュ１５６は、コアインタフェースユニット１７０を介してＬ２キャッシュ１８０にアクセスするように構成されてもよい。１つの実施形態において、ＣＩＵ１７０は、システム内のコア１００と他のコア１００との間、外部システムメモリ、周辺機器などへ汎用インタフェースを与えてもよい。典型的に、Ｌ２キャッシュ１８０の容量は、第１レベル命令およびデータキャッシュより実質的に大きい。
【００２２】
いくつかの実施形態において、コア１００は、インオーダー演算をサポートしてもよい。他の実施形態において、コア１００は、ロードおよびストア演算を含む演算のアウトオブオーダー実行をサポートしてもよい。すなわち、クラスタ１５０およびＦＰＵ１６０内の演算の実行順序は、演算が対応する命令の最初のプログラム順序とは異なるものであってもよい。このような緩和演算の順序付けにより、実行リソースのより効率的なスケジューリングが行われてもよく、これにより、全体的な実行性能を高められうる。
【００２３】
さらに、コア１００は、種々の制御およびデータ投機技術を実装してもよい。上述したように、コア１００は、スレッドの実行制御フローが進む方向の予測を試みるために、さまざまな分岐予測および投機プリフェッチ技術を実装してもよい。このような制御投機技術は、一般に、命令が使用可能であるか、または（例えば、分岐誤り予測により）誤り投機が起こったかが確実にわかる前に、一貫した命令フローを与えるように試みてもよい。制御誤り投機が生じれば、コア１００は、誤り投機パスに沿って演算およびデータを廃棄し、実行制御を正確なパスに再方向付けするように構成されてもよい。例えば、１つの実施形態において、クラスタ１５０は、条件分岐命令を実行し、分岐結果が予測結果と一致するかを決定するように構成されてもよい。一致しなければ、クラスタ１５０は、正確なパスに沿ったフェッチを始めるように、ＩＦＵ１２０に再方向付けられるように構成されてもよい。
【００２４】
別に、コア１００は、データ値が正確であるかが分かる前に、さらなる実行において使用するためのデータ値を提供するように試みるさまざまなデータ投機技術を実装してもよい。このようなデータを投機的に使用することによって、データ使用前にデータの有効性に関するあらゆる条件を評価するのに必要なタイミング制約が緩和されて、コア演算の高速化が可能となる。
【００２５】
さまざまな実施形態において、プロセッサの実装は、他の構造とともに単一のモノリシック集積回路チップの一部として作製されたコア１００の多重インスタンスを含んでもよい。図２に、プロセッサの１つのこのような実施形態を示す。図示するように、プロセッサ２００は、４つのコアインスタンス１００ａ〜ｄを含み、これらのインスタンスの各々は、上述したように構成されてもよい。例示した実施形態において、コア１００の各々は、システムインタフェースユニット（ＳＩＵ）２１０を介して、Ｌ３キャッシュ２２０およびメモリコントローラ／周辺インタフェースユニット（ＭＣＵ：memory controller/peripheral interface unit）２３０へ連結されてもよい。１つの実施形態において、Ｌ３キャッシュ２２０は、コア１００のＬ２キャッシュ１８０と比較的遅いシステムメモリ２４０との間の中間キャッシュとして動作する任意の適切な体系を用いて実装された統一キャッシュとして構成されてもよい。
【００２６】
ＭＣＵ２３０は、プロセッサ２００をシステムメモリ２４０と直接連係するように構成されてもよい。例えば、ＭＣＵ２３０は、デュアルデータレート同期型ダイナミックＲＡＭ（ＤＤＲ  ＳＤＲＡＭ：Dual Data Rate Synchronous Dynamic RAM）、ＤＤＲ−２  ＳＤＲＡＭ、完全バッファ型デュアルインラインメモリモジュール（ＦＢ−ＤＩＭＭ：Fully Buffered Dual Inline Memory Module）、またはシステムメモリ２４０を実装するのに使用されてもよい別の適切なタイプのメモリなど、１つ以上の異なるタイプのランダムアクセスメモリ（ＲＡＭ）をサポートするのに必要な信号を発生させるように構成されてもよい。システムメモリ２４０は、プロセッサ２００のさまざまなコア１００によって演算されてもよい命令およびデータを格納するように構成されてもよい、システムメモリ２４０のコンテンツは、上述したキャッシュのさまざまなものによってキャッシュされてもよい。
【００２７】
さらに、ＭＣＵ２３０は、プロセッサ２００への他のタイプのインタフェースをサポートしてもよい。例えば、ＭＣＵ２３０は、別のグラフィックスプロセッサ、グラフィックスメモリ、および／または他のコンポーネントを含んでもよいプロセッサ２００をグラフィックス処理サブシステムと連係するように使用されてもよいアクセラレーテッド／アドバンストグラフィックスポート（ＡＧＰ： Accelerated/ Advanced Graphics Port）インタフェースのバージョンなど、専用のグラフィックスプロセッサを実装してもよい。ＭＣＵ２３０はまた、１つ以上のタイプの周辺インタフェース、例えば、ＰＣＩ−Ｅｘｐｒｅｓｓバス標準のバージョンを実装するように構成されてもよく、これを介して、プロセッサ２００は、ストレージデバイス、グラフィックスデバイス、ネットワーキングデバイスなどの周辺機器と連係をとってもよい。いくつかの実施形態において、プロセッサ２００の外部の二次バスブリッジ（例えば、「サウスブリッジ」）が、他のタイプのバスまたは相互接続を介してプロセッサ２００を他の周辺デバイスへ連結するように使用されてもよい。メモリコントローラおよび周辺インタフェース機能は、ＭＣＵ２３０を介してプロセッサ２００内で一体化されて示されているが、他の実施形態において、これらの機能は、従来の「ノースブリッジ」配置を介してプロセッサ２００の外部へ実装されてもよいことに留意されたい。例えば、ＭＣＵ２３０のさまざまな機能は、プロセッサ２００内に集積化されてもよいものとは別のチップセットを介して実装されてもよい。
【００２８】
ローカルおよびリモートマイクロユニット
上述したように、いくつかの実施形態において、コア１００は、マイクロコード化演算をサポートしてもよい。一般的に言えば、マイクロコードは、所与のコア１００によって実行される個々の演算が、例えば、ＩＦＵ１２０によって与えられてもよいような命令フローの一般的なプログラマブルビジブルパスから分離された制御およびデータストアからのものであり、プロセッサ実装技術を包含してもよい。一例として、ｘ８６  ＩＳＡなどの所与のＩＳＡが、複雑性が著しい命令および他の所定のプロセッサ挙動（例えば、リセット機能、割り込み／トラップ／例外機能など）を含んでもよい。レジスタオペランドを伴う単純なシフトまたはローテート命令が、実行ユニット１５４によって直接実行可能な単一の演算として実装するのに非常に単純でありうる。例えば、キャリーフラッグを通してオペランドを回転させるローテート命令が、実行ユニット１５４内で実行可能な異なる演算の組み合わせとしてより容易に実装されてもよい。ある種の複雑な制御転送命令、制御レジスタなどのシステムレジスタを修正する命令、仮想メモリを伴う命令、優先または保護モデルのコンテンツ内で実行する命令などのさらにより複雑な命令が、命令実行が調整されるプロセッサ状態（例えば、優先状態）のテストなど、追加の演算を伴うものであってもよい。
【００２９】
ＩＳＡ内のいくつかの命令は、個々の対応する演算に直接マッピングしてもよい。いくつかの実施形態において、ＩＳＡのこれらの複雑な命令が、実行ユニット１５４内で実行可能な単一の演算に直接マッピングしない場合、所与の複雑な命令を、実行するためにディスパッチされてもよいより単純な演算シーケンスに変換するために、マイクロコードが使用されてもよい。マイクロコードに利用可能な演算セットは、一般に、直接実行可能なＩＳＡ命令に対応する演算を含んでもよい。しかしながら、いくつかの実施形態において、マイクロコード演算は、プログラマビジブルでない実行ユニット１５４によって実行可能な演算を含んでもよい。さらに、実装ＩＳＡ内の特定の命令に対応しないアーキテクチャが規定されたプロセッサイベントに応答して、実行可能な演算シーケンスを発生するために、マイクロコードが使用されてもよい。例えば、リセットマイクロコードルーチンは、ソフトウェアまたはハードウェアリセットイベントの後に、一貫した演算状態にコア１００を配置するように構成された演算シーケンスを含んでもよい（例えば、キャッシュの初期化、特定のアーキテクチャおよび非アーキテクチャレジスタへの特定の値の格納、所定のアドレスから始めさせる命令フェッチなど）。いくつかの実施形態において、マイクロコードはまた、コア１００の非アーキテクチャ機能を実行するルーチンを発生するために使用されてもよい（すなわち、一般に、機能は、またはセル１００の通常演算中にプログラマによってビジブルでも、アクセス可能でもない）。例えば、製品の製造、フィールド分析、パワーオンセルフテスティング、または他の適切なアプリケーションのために、命令マイクロコード使用するためのハードウェアテストまたはデバッグルーチングを実装するように、マイクロコードが使用されてもよい。
【００３０】
マイクロコードルーチンは、典型的に、読み出し専用メモリ（ＲＯＭ）、または以下にさらに詳細に記載するような、ランダムアクセスメモリ（ＲＡＭ)のような書き込み可能なメモリなどの任意の適切なタイプの制御ストア内に格納されてもよい。図３に、マイクロコード制御ストアの１つの例示的な体系が示されている。例示した実施形態において、マイクロコード制御ストア３００は、複数のエントリ３１０を含み、エントリの各々は、多数の演算フィールド３２０およびシーケンス制御フィールド３３０を含む。１つの実施形態において、エントリ３１０の各々は、マイクロコードアドレス空間内のそれぞれのエントリポイントに対応してもよい。例えば、１２ビットマイクロコードアドレス空間は、４，０９６（４Ｋ）もの別個のエントリポイント値を許容してもよい。いくつかの実施形態において、マイクロコードアドレス空間が、例えば、密度の低いエントリポイントアドレッシングが採用される場合など、実際のエントリ３１０より可能なエントリポイント値が多く存在するように構成されてもよいことに留意されたい。
【００３１】
１つの実施形態において、エントリ３１０の各演算フィールド３２０は、実行ユニット１５４の１つによって実行可能な単一の演算を符号化する情報を格納するように構成されてもよい。例えば、演算フィールド３２０は、実行される演算のタイプを識別するように構成されたオプコードビットと、レジスタまたは既値データなどの演算によって使用されるオペランドソースを識別するように構成されたオペランドビットを含んでもよい。いくつかの実施形態において、演算フィールド３２０内のオペランド符号化は、マイクロコードエントリ３１０が実行されることに応答して、マイクロ命令（例えば、ＩＦＵ１２０によってフェッチされるプログラマビジブルＩＳＡ命令）からオペランドから取られるべきであることを規定してもよい。いくつかの実施形態において、演算フィールド３２０の異なるフィールドが、クラスタ１５０内の実行ユニット１５４のそれぞれに対応してもよい。このようにして、例えば、実行ユニット１５４が、２つのＡＬＵおよび２つのＡＧＵを含めば、演算フィールド３２０の２つは、ＡＬＵに対応してもよく、２つは、ＡＧＵに対応してもよい。すなわち、所与のエントリ３１０の各演算フィールド３２０は、クラスタのそれぞれの発行スロットに対応してもよく、したがって、所与のエントリ３１０全体が、ユニットとしてクラスタ１５０にディスパッチされてもよい。所与のエントリ３１０内の１つの演算が、同じエントリ内の別の演算に依存性を有してもよい場合もあるのに対して、エントリ３１０内の各演算が、他のものから独立したものであってもよい場合もある。他の実施形態において、マイクロコードエントリ３１０内の演算フィールド３２０に対して発行スロット制限がない場合もあることに留意されたい。例えば、１つのこのような実施形態において、任意のフィールド３２０から任意の実行ユニットへ演算が発行されてもよい。
【００３２】
シーケンス制御フィールド３３０が、マイクロコードルーチンのシーケンシング挙動を統制するように構成されてもよい。例えば、シーケンス制御フィールド３３０が、ルーチンの出口点（すなわち、特定のルーチンが終了するエントリ３１０）を示すように構成されてもよく、または異なるエントリポイントへの条件または無条件分岐またはジャンプなどのマイクロコードフロー制御の非連続な変化を示してもよい。いくつかの実施形態において、マイクロコードシーケンス制御は、所与のエントリ３１０に関係するシーケンス制御フィールド３３０が、異なる連続した先行エントリ３１０に実際に関連付けられるようにパイプラインで送られてもよい。例えば、マイクロコードエントリ３１０のフェッチと、エントリ３１０に関連付けられたシーケンス制御フィールド３３０の実行との間に１または２サイクル遅延またはバブルを有する実施形態において、エントリポイントＮでエントリ３１０の挙動に影響するシーケンス制御フィールド３３０が、エントリポイントＮ−１またはＮ−２のそれぞれでエントリ３１０に関連して格納されてもよい。
【００３３】
いくつかの実施形態において、命令デコードユニット１４０は、マイクロコードエントリ３１０のアクセシングおよびシーケンシングに関連する機能を含んでもよい。例えば、ＤＥＣ１４０は、マイクロコード実行が必要とされる命令および他のプロセッサイベントを検出し、マイクロコードストアからエントリ３１０をそれに応じて要求するように構成されてもよい。いくつかの実施形態において、ＤＥＣ１４０は、例えば、命令オプコードをマイクロコードアドレスの空間内のエントリポイント値へマッピングすることによって、マイクロコードが必要である命令または他のイベントに依存したエントリポイントを計算するように構成されてもよい。次に、ＤＥＣ１４０は、ＤＥＣ１４０内に含まれ、またはコア１００内の別個の機能ユニットとして与えられてもよいマイクロコードユニットに計算されたエントリポイントをサブミットしてもよく、その結果として、実行用の１つ以上のマイクロコードエントリ３１０に示す演算を取り出しディスパッチしてもよい。マイクロコードエントリポイントはまた、命令デコード以外のイベントに応答して発生してもよい。例えば、エントリポイントは、例外または割り込みの検出に応答して、実行クラスタまたは他のユニットによって発生してもよい。
【００３４】
複数のコア１００を含むプロセッサ２００の実施形態において、特に考慮すべであろう点はマイクロコード実装である。典型的に、各コア１００は、同一のマイクロコードコンテンツを参照することになる（例えば、エントリ３１０内に反映されている場合のような。すなわち、いくつかの実施形態において、各コア１００は、同じＩＳＡを実装してもよく、実行するコア１００に関係なく、コードは、一般に、同じ機能挙動と実行するように予測されてもよい。それに応じて、コア１００は、プロセッサ２００の実施形態に対して規定されたマイクロコードエントリ３１０のすべてを含むマイクロコードストアの単一の共通インスタンスを共有するように構成されてもよい。しかしながら、すべてのコア１００によって共有される単一のＲＯＭ構造など、単一の制御ストアインスタンスを実装することで、制御ストアからデータを要求したコア１００へ進むようにマイクロコードデータが要求される距離が長くなることで、マイクロコードを伴う演算を実行するのに要求される全体的な待ち時間が長くなりうる。これは、つまり、コア１００の実行性能の低下を招きうる。
【００３５】
さらに、複数のコア１００の間で単一の制御ストアを供給することで、複数のコア１００が共有制御ストアに同時アクセスすることを試みれば、リソースの競合問題が生じうる。制御ストアによってサポートされる同時アクセス数が増えると（例えば、リードバスの数、エントリポイントデコードロジックの量などを上げることで）、制御ストアの複雑性およびコストが上がるとともに、タイミング性能が低下することもある一方で、同時アクセス要求をシリアル化することで、各コアがサービスの順番を待機するさい、コア１００が受けるマイクロコードアクセスの待ち時間が長くなりうる。
【００３６】
対照的に、マイクロコード制御ストアのインスタンスは、各コア１００がマイクロコードの完全なコピーを含むように複製されてもよい。このような複製により、単一の制御ストアインスタンスを共有するコア１００の場合に関して、上述したルーティング、待ち時間、リソース競合の問題が改善されうる。例えば、各複製インスタンスは、それぞれのコア１００に比較的近接して配置されることで、全体的なルーティング距離が短縮される。しかしながら、このようにして制御ストアを全体的に複製すると、コア１００の各々の設計エリアおよび複雑性が増し、設計および製造コスト、さらには、プロセッサ２００の電力消費が上がりかねない。
【００３７】
いくつかの実施形態において、プロセッサ２００は、複製と共有の両方の態様を含む階層マイクロコード制御ストアのアプローチを採用するように構成されてもよい。図４に示すように、１つの実施形態において、プロセッサ２００の複数のコア１００ａ〜ｄの各々は、ローカルマイクロコードユニット４００ａ〜ｄ（または簡潔に、ローカルユニット４００ａ〜ｄ）のそれぞれのインスタンスを含み、システムインタフェースユニット２１０を介して、共有リモートマイクロコードユニット４１０（または簡潔に、リモートユニット４１０）にアクセスするように構成されてもよい。明確にするために省いているが、図２に示すプロセッサ２００の他の要素は、図４の実施形態に含まれてもよいことに留意されたい。さらに、さまざまな実施形態において、コア１００の数およびコアに含まれるそれぞれのローカルマイクロコードユニット４００は変動してもよい。いくつかの実施形態において、ローカルユニット４００は、それぞれのコア１００の他のユニット内に含まれてもよい。例えば、ローカルユニット４００は、ＤＥＣ１４０内に実装されてもよい。例示した実施形態において、コア１００の１つずつにそれぞれ、ローカルマイクロコードユニット４４０が含まれているが、いくつかの実施形態では、コア１００のうちの複数のコアにしか、ローカルマイクロコードユニット４００がそれぞれ含まれていないものも考えられる。すなわち、すべてのコア１００が、ローカルユニット４００に対して同一に構成されることが要求されるわけではないが、いくつかの実施形態において、同一の構成が要求される場合もある。
【００３８】
一般的にいえば、ローカルマイクロコードユニット４００の各インスタンスは、コア１００の演算がより高い性能感度になるように決定されたマイクロコードルーチンを格納するように構成されてもよく、一方で、マイクロコードユニット４１０は、性能感度が低くなるように決定されたマイクロコードルーチンを格納するように構成されてもよい。例えば、所与のマイクロコードルーチンは、性能感度のしきい値要求を満たせば、ローカルユニット４００内のストレージ用に選択されてもよく、満たさなければ、リモートユニット４１０内のストレージ用に割り当てられてもよい。
【００３９】
さまざまな実施形態において、所与のマイクロコードルーチンの性能感度は、異なる基準を用いて決定されてもよい。例えば、マイクロコードルーチンの長さは、性能感度の基準として使用されてもよいことにより、しきい値長さ以下の所与の長さのルーチン（例えば、単一のエントリ３１０からなるルーチン）は、ローカルユニット４００内に含まれるが、しきい値長さより長いルーチンは、リモートユニット４１０内に含まれる。場合によっては、ルーチンの実行待ち行列が、長さの代用として使用されてもよい。他の形態において、ルーチン実行の頻度が選択基準として使用されてもよいため、少なくともしきい値頻度または確率で実行されるルーチン（例えば、予測されたプログラミング仕事量のシミュレーションにより予測可能なものなど）が、ローカルユニット４００内に含まれ、実行の頻度または確率がより低いルーチンが、リモートユニット４１０内に含まれる。他の実施形態において、所与のルーチンの格納場所を決定するさいに、場合によっては、他の基準とともに、実行頻度／確率とルーチンの長さの両方が考慮されてもよい。例えば、リセットマイクロコードルーチンが非常に長く、頻繁に実行されないこともあるため、リモートマイクロコードユニット４１０内に含まれる可能性のある候補である。別の場合では、仮想メモリページミスを取り扱うマイクロコードルーチンは、リセットルーチンより実行頻度が高いこともある。しかしながら、ページミスルーチンは、ページミスにより、待ち時間の長い多数のメモリアクセスを行う可能性が高いこともある。このように、ページミスルーチンにアクセスする待ち時間は、ルーチンを実行する待ち時間により劣ることもあるため、リモートマイクロコードユニット４１０内に含まれる候補になりうる。一般的にいえば、しきい値要求に対して、所与のマイクロコードルーチンの性能感度は、上記要因（例えば、実行の長さ、待ち時間、頻度）または他の関連する要因の１つ以上の任意の適切な関数であってもよい。
【００４０】
図５に、ローカルマイクロコードユニット４００のインスタンスの１つの実施形態を示す。例示した実施形態において、ローカルユニット４００は、制御ストア５００と、シーケンサ５１０とを含む。一般的に言えば、制御ストア５００は、ローカルユニット４００内に含まれるように選択されたマイクロコードルーチンに対応する複数のマイクロコードエントリ３１０を格納するように構成されたマイクロコード制御ストア３００のインスタンスの一例であってもよい。１つの実施形態において、制御ストア５００は、任意の適切な体系により構成されたＲＯＭを含んでもよい。例えば、制御ストア５００は、単一の大きなＲＯＭバンクとして、エントリ３１０のフィールドに従って分離された複数のバンクとして、または別の適切な方法で体系化されてもよい。一般的に言えば、ＲＯＭは、入力としてインデックス値（例えば、エントリポイント）を受け取り、それに反応して、供給された入力値に対応する出力値（例えば、エントリ３１０）を出力するように構成された任意のタイプのアドレス指定可能なデータ構造を参照してもよい。このようなデータ構造は、メモリアレイおよびゲートアレイ、または他の適切なロジックデバイスの配置を含んでもよい。いくつかの実施形態において、制御ストア５００は、ＲＯＭに追加して、またはＲＯＭの代わりに、ＲＡＭまたは不揮発性メモリなど書き込み可能なメモリ要素を含んでもよい。
【００４１】
シーケンサ５１０は、１つの実施形態において、ＤＥＣ１４０から受け取ったマイクロコード要求およびエントリ３１０に含まれるシーケンス制御情報に従って、制御ストア５００にアクセスするように構成されてもよい。ＤＥＣ１４０からの特定のマイクロコードエントリポイントを受け取ると、それに応答して、シーケンサ５１０は、特定のエントリポイントに対応するエントリ３１０を取り出すために制御ストア５００にアクセスするように構成されてもよい。次に、取り出したエントリ３１０内に指定された演算が、ディスパッチおよび実行のためにＤＥＣＩ１４０に戻されてもよい。さらに、シーケンサ５１０は、先行して取り出したエントリ３１０に連続して続く別のエントリ３１０を取り出すかどうかを決定するために、不連続のエントリポイント（例えば、シーケンス制御フィールド３３０において指定されたエントリポイント）に位置する別のエントリ３１０を取り出すために、マイクロコードエントリ３１０の取り出しを終了させるために、または何らかの他の所定のアクションをとるために、取り出したエントリ３１０のシーケンス制御フィールド３３０を評価するように構成されてもよい。いくつかの実施形態において、マイクロコードエントリ３１０は、実行ユニット１５４内、あるいは、コア１００内の他の場所で予測および／または実行されてもよい分岐演算を含んでもよい。いくつかのこのような実施形態において、シーケンサ５１０は、予測または実行された分岐演算から生じるマイクロコードシーケンス制御の変化に応答するように構成されてもよい。例えば、このような分岐演算は、現在のエントリポイントから分岐演算によって指定されたエントリポイントへマイクロコードの取り出しをシーケンサ５１０に再度方向付けるようにさせてもよい。
【００４２】
いくつかの実施形態において、ローカルマイクロコードユニット４００の各々は、マイクロコードエントリポイントの同じセットをそれぞれの制御ストア５００にマッピングするように構成されることで、コア１００の各々が、ローカルエントリポイントと同じエントリポイントにアクセスするようにしてもよい。いくつかの実施形態において、制御ストア５００の各インスタンスは、プロセッサ２００のさまざまなコア１００内の互いのインスタンスと同じコンテンツを有してもよいが、他の実施形態において、各制御ストア５００のコンテンツは他のものとまったく同一のものである必要はないことが考えられる。例えば、製造欠陥により、パッチ技術によって、または所与の制御ストア５００以外の場所に格納されたエントリ３１０を参照することによって修正可能であってもよい制御ストア５００のインスタンス間で機能差が生じることもある。
【００４３】
図６は、リモートマイクロコードユニット４１０の１つの実施形態を示す。例示した実施形態において、リモートユニット４１０は、ＳＩＵ２１０を介してまたは任意の他の適切なタイプのインタフェースを介してコア１００と通信するように構成されてもよいリモートマイクロコードユニットインタフェース６１０を含む。インタフェース６１０は、要求キュー６２０および送信キュー６３０に連結されてもよい。要求キュー６２０は、制御ストア内に格納されたマイクロコードエントリに対する要求をリモート制御ストア６４０に搬送するように構成されてもよい。例示した実施形態において、リモート制御ストア６４０は、任意の数のマイクロコードＲＯＭバンク６５０ａ〜ｎを含んでもよく、任意に、マイクロコードパッチＲＡＭ６６０を含んでもよい。いくつかの実施形態において、要求キュー６２０はまた、任意のダイナミックマイクロコードＲＡＭアレイ６７０にマイクロコード要求を伝えるように搬送するように構成されてもよい。送信キュー６３０は、リモート制御ストア６４０から、およびいくつかの実施形態において、これらの要求コア１００へ送信するためのダイナミックマイクロコードＲＡＭアレイ６７０から取り出されたエントリをキューに入れるように構成されてもよい。
【００４４】
図４に関して上述したように、リモートユニット４１０は、コア１００の代わりにさまざまなマイクロコードルーチンを格納するように構成されてもよい。このようなルーチンは、例えば、長く、実行頻度が低く、またはローカルユニット４００内に含まれるために選択されたルーチンよりもプロセッサ性能へ影響する可能性が低いと考えられるルーチンを含んでもよい。一般的に言えば、リモートユニット４１０は、コア１００の異なるコアからさまざまなマイクロコードエントリポイントの要求を受け取るように構成されてもよく、１つ以上の対応するエントリとともに各要求に応答してもよい。リモートマイクロコードユニットインタフェース６１０の構成およびコア１００とリモートユニット４１０との間に採用されたインタフェースプロトコルに応じて、複数のコア１００からのマイクロコード要求は、同時並列または直列に受け取られてもよい。
【００４５】
リモート制御ストア６４０は、リモートユニット４１０内に含まれるように選択されたマイクロコードルーチンに対応する多数のマイクロコードエントリ３１０を格納するように構成されたマイクロコード制御ストア３００の例示的なインスタンスであってもよい。いくつかの実施形態において、リモート制御ストア６４０内に格納されたエントリ３１０のフォーマットは、ローカルユニット４００の制御ストア５００内に格納されたエントリ３１０のものに類似したものであってもよい。例示した実施形態において、任意の適切な分割または体系化に応じて、多数のマイクロコードＲＯＭバンク６５０にわたってエントリ３１０が分配されてもよい。他の実施形態において、ブランク６５０の数は変動してもよいことに留意されたい。また、制御ストア５００と同様に、いくつかの実施形態において、リモート制御ストア６４０は、メモリアレイ以外に書き込み可能メモリおよび／またはデータストレージ要素を含んでもよいことが考えられる。
【００４６】
一般に、リモートマイクロコードユニットインタフェース６１０、要求キュー６２０、および送信キュー６３０が、コア１００から取り出したマイクロコード要求の処理を管理するように一括して構成されてもよい。要求キュー６２０は、入力マイクロコード要求を格納するように構成されてもよく、これらの要求は、１つの実施形態において、リモート制御ストア６４０内で処理可能になるまで、エントリポイントおよび要求コア１００の表示を最小限含んでもよい。同様に、送信キュー６３０は、エントリ４１０がそれらの要求コア１００に送信可能になるまで、リモート制御ストア６４０から、またはいくつかの実施形態において、ダイナミックマイクロコードＲＡＭアレイ６７０から取り出されたエントリ３１０を格納するように構成されてもよい。１つの実施形態において、リモートマイクロコードユニットインタフェース６１０は、要求キュー６２０および送信キュー６３０の管理を含み、コア１００からの要求の受信およびコア１００への結果的に得られるエントリの送信を制御するように構成されてもよい。インタフェース６１０はまた、例えば、シーケンス制御または調停スキームに応じて処理するための特定の要求を選択し、要求処理中に取り出されたエントリの送信キュー６３０内のストレージを調整するために、要求キュー６２０に格納された個々の要求の処理を調整するように構成されたロジックを含んでもよい。他の実施形態において、要求キュー６２０からの処理するための要求の選択および送信キュー６３０内の結果の格納は、インタフェース６１０の外部のロジックによって実行されてもよい。
【００４７】
リモートユニット４１０の多数の異なる要求管理構成が可能であり考慮される。１つの実施形態において、リモートユニット４１０は、シーケンス機能を省略してもよい。このような実施形態において、リモートマイクロコードユニットインタフェース６１０は、所与のコア１００が受け取りを望む各特定のエントリポイントに対応する所与のコア１００から要求を受け取るように構成されてもよい。このように、例えば、所与のローカルユニット４００のシーケンサ５１０が、リモートユニット４１０内に格納された所与のルーチンに対して、どのエントリポイントを取り出す必要があるかを決定し、制御ストア５００にアクセスするために使用されたものと同様の方法でそれらのエントリポイントに向けられた要求を発生するように構成されてもよい。
【００４８】
リモートユニット４１０からシーケンス機能を省略すると、デザインが単純化されうるが、コア１００とリモートユニット４１０との間の要求トラフィックおよび処理の待ち時間が長くなる可能性もある。他の実施形態において、リモートユニット４１０は、さまざまな程度の自発シーケンスをサポートするものであってもよい。例えば、１つの実施形態において、受け取ったマイクロコード要求は、開始エントリポイントおよび終了エントリポイントまたは取り出されるエントリ数を指定してもよい。このような実施形態において、リモートユニット４１０は、開始エンドポイントから始まり、引き続き連続して、終了エントリポイントまたは取り出されるエントリ数に達するまで、受け取った要求に対応する複数のエントリ３１０を取り出すように構成されてもよい。このようにして取り出された複数のエントリ３１０は、取り出された順序で要求コア１００に戻されてもよい。
【００４９】
別の実施形態において、リモートユニット４１０は、より高度なシーケンス機能をサポートしてもよい。例えば、リモートユニット４１０は、シーケンサ５１０に機能面で類似したシーケンサを含むように構成されてもよい。このようなシーケンサは、シーケンサ５１０によってサポートされたシーケンス制御フィールド３３０の一部またはすべての値をサポートするように構成されてもよい。あるいは、１つの実施形態において、リモートユニット４１０内に格納されたエントリ３１０が、シーケンス制御フィールド３３０とは別個の追加のシーケンス制御フィールドを含むように構成されることで、リモートユニット４１０内のシーケンス機能によって追加のシーケンス制御フィールドが処理されてもよく、一方で、シーケンス制御フィールド３３０は、特定のローカルユニット４００内のシーケンサ５１０によって処理されてもよい。このような実施形態において、複数のエントリルーチンを順序付けるタスクは、リモートユニット４１０およびローカルユニット４００の間で適切に分割されてもよい。
【００５０】
リモートユニット４１０が、多数の異なるコア１００によって共有されてもよいため、リモートユニット４１０は、どのマイクロコード要求が供されるかを選択するとき、さまざまな異なるタイプの調停またはスケジューリング方式を採用するように構成されてもよい。例えば、リモートユニット４１０は、ラウンドロビン式に、最も古い要求を最初に選択することによって、または任意の他の適切な選択方式を使用することによって、処理するための要求キュー６２０から要求を選択するように構成されてもよい。リモートユニット４１０が要求の順序をサポートするいくつかの実施形態において、他のコア１００からの要求を除外して、特定のコア１００からの単一の要求により多数のエントリ３１０を取り出すことも可能である。それに応じて、いくつかの実施形態において、このような要求は、ある特定の数のエントリ３１０が、異なる要求を供することができるように取り出された後に中断されてもよい。他の形態において、次に供する要求を選択するためのフェアネスアルゴリズムが、コア１００の代わりに供された最新の要求だけではなく、これらの要求の持続時間も考慮してもよい。いくつかの実施形態において、２つい上のマイクロコード要求が同時に取り出されてもよいように、リモート制御ストア６４０がマルチポート式に構成されてもよいことに留意されたい。例えば、リモート制御ストア６４０は、マルチポート式のメモリセルを使用して実装されてもよい。他の形態において、異なるバンク６５０をターゲットにする複数の要求が同時に取り出されてもよいように、より小さなシングルポート式のメモリセルがバンク式に採用されてもよい。いくつかのバンク型の実施形態において、同一のバンク６５０をターゲットにする複数の要求がシリアル化されてもよい。
【００５１】
マイクロコード実装を複数のローカルマイクロコードユニット４００および共有リモートマイクロコードユニット４１０に階層的に分割すると、プロセッサ２００のタイミングおよび電力消費が改善されうる。例えば、ローカルマイクロコードユニット４００は、典型的に、リモートマイクロコードユニット４１０より面積が小さい場合があるため、ローカルマイクロコードユニット４００は、各ローカルマイクロコードユニット４００がリモートマイクロコードユニット４１０と同程度に大きい場合より高い頻度で演算できる。同様に、マイクロコードユニットが小さいと、典型的に、大きなものより電力消費量が少ない。いくつかの実施形態において、ローカルマイクロコードユニット４００とは別にリモートマイクロコードユニット４１０を実装すると、リモートマイクロコードユニット４１０は、コア１００によってアクセスされないときに電力を落とすことができる（例えば、ゲーティングクロックによって、またはリモートユニット４１０への電力グリッドの無効化によって）。これにより、プロセッサ２００の全電力消費量を下げうる。
【００５２】
図７に、個々のコア１００および共有リモートマイクロコードユニット４１０内にローカルマイクロコードユニット４００を含むプロセッサの実施形態において、マイクロコードエントリ３１０を取り出す方法の１つの実施形態を示す。例示した実施形態において、演算は、マイクロコードエントリポイントが所与のコア１００内で発生するブロック７００から始まる。１つの実施形態において、ＤＥＣ１４０は、例えば、命令のさまざまな部分をデコードし、命令がマイクロコードに対応していることを決定し、デコードされた命令から対応するエントリポイントを発生させることによって、ＩＦＵ１２０から受け取った命令に対応するマイクロコードエントリポイントを発生するように構成されてもよい。上述したように、いくつかの実施形態において、リセットイベント、割り込み、トラップ、例外、フォールト、非階層マイクロコードルーチン（例えば、テストやデバッグルーチン）を呼び出すために要求、またはマイクロコードの実行を伴う他のタイプのイベントなど、命令の実行以外のプロセッサのイベントに対して、ＤＥＣ１４０またはコア１００内の別のユニットによって、エントリポイントが発生されてもよい。
【００５３】
次に、発生したエントリポイントが、所与のコア１００内のローカルマイクロコードユニット４００に位置するか、またはリモートマイクロコードユニット４１０内に位置するエントリ３１０に対応するかが判定される（ブロック７０２）。１つの実施形態において、エントリ３１０を包含するマイクロコードアドレス空間は、１つ以上のアドレス空間部分が、ローカルマイクロコードユニット４００内のエントリ３１０に対応するが、１つ以上の他の別個のアドレス空間部分が、リモートマイクロコードユニット４１０内のエントリ３１０に対応するように分割されてもよい。例えば、１つの実施形態が、４，０９６個のエントリ３１０を包含する１２ビットマイクロコードアドレス空間をサポートしてもよく、そのうちの１，０２４個は、ローカルマイクロコードユニット４００内に位置し、残りはリモート格納されてもよい。この例において、１６進歩のエントリポイント値０ｘ０００から０ｘ３ＦＦが、ローカルユニット４００内のエントリ３１０に対応してもよく、エントリポイント値０ｘ４００から０ｘＦＦＦが、リモートユニット４１０内のエントリに対応してもよい。マイクロコードアドレス空間の不連続部分がさまざまなユニットに割り当てられたマッピングなど、他のマッピングも可能である。また、いくつかの実施形態において、エントリポイントがローカルであるかリモートであるかの決定は、エントリポイントが特定のアドレス範囲にあるかどうか以外の表示に依存してもよい。例えば、ローカル／リモート表示が、その命令に対するエントリポイントとは別のＤＥＣ１４０によって命令からデコードされてもよい。さまざまな実施形態において、エントリポイントがローカルであるか、またはリモートであるかの判定は、ＤＥＣ１４０などのコア１００内のデコードロジックによって、シーケンサ５１０などのローカルマイクロコードユニット４００によって、またはコア１００内の他のロジックによって実行されてもよい。
【００５４】
発生したエントリポイントが、ローカルユニット４００内に位置するエントリ３１０に対応すれば、エントリは、ローカルユニットから取り出される（ブロック７０４）。例えば、マイクロコード要求の表示とともにエントリポイントを取り出すと、ローカルユニット４００内のシーケンサ５１０は、対応するエントリ３１０を取り出すために制御ストア５００にアクセスするように構成されてもよい。
【００５５】
発生したエントリポイントが、リモートユニット４１０内に位置するエントリ３１０に対応すれば、リモートユニットに要求が搬送されてもよい（ブロック７０６）。例えば、ＤＥＣ１４０またはローカルユニット４００のいずれかは、宛先としてリモートユニット４１０を指定するシステムインタフェースユニット２１０を介して要求を搬送することによって、リモートユニット４１０に要求を開始してもよい。次に、リモートユニット４１０は、指定のエントリ３１０を受け取り（ブロック７０８）、所与のコア１００にエントリを戻してもよい（ブロック７１０）。例えば、リモートマイクロコードユニットインタフェース６１０は、ＳＩＵ２１０から要求を受け取り、それを要求キュー６２０に入れてもよい。選択されると、要求は、指定のエントリ３１０をリモート制御ストア６４０から取り出すように処理されてもよく、その結果は、送信キュー６３０内に配置されてもよい。引き続き、インタフェース６１０は、送信キュー６３０からエントリ３１０を選択し、そのエントリをＳＩＵ２１０を介して所与のコア１００に搬送してもよい。
【００５６】
エントリ３１０がローカルユニット４００またはリモートユニット４１０のいずれかから取り出されると、その演算が実行するためにディスパッチされてもよい（ブロック７１２）。例えば、ＤＥＣ１４０は、実行ユニット１５４によって引き続き実行するためのクラスタ１５０の１つ内のスケジューラ１５２に、エントリ３１０内で指定されたような演算をディスパッチしてもよい。いくつかの実施形態において、エントリ３１０内に指定された演算のさらなるデコードは、例えば、ＤＥＣ１４０によってディスパッチされる前に実行されてもよい。
【００５７】
いくつかの実施形態において、取り出されたマイクロコードエントリ３１０によって指定された演算は、実行するためにディスパッチされている前に格納され、またはキューに入れられてもよい。例えば、ＤＥＣ１４０は、デコーダまたはマイクロコード取り出しプロセスから演算のディスパッチを切り離すことができるキューを実装してもよく、これにより、ＤＥＣ１４０またはその上流で生じることがあるストールの性能影響が低減されうる。いくつかの実施形態において、リモートマイクロコードユニット４１０から取り出されたマイクロコードエントリ３１０に指定された演算は、コア１００が受け取ると、このような演算キューまたはストレージ内に直接挿入されてもよく、取り出されたエントリ３１０は、コア１００内に格納され、または保持されなくてもよい。しかしながら、他の実施形態において、取り出されたリモート格納エントリ３１０は、ある一定の時間、コア１００内に保持されてもよく、これは、リモートユニット４１０から再度取り出されるのを待機することなく再利用することができる。例えば、ローカルマイクロコードユニット４００は、リモートユニット４１０から取り出されたエントリ３１０が、受け取られると書き込まれてもよい書き込み可能なストレージを含んでもよい。１つの実施形態において、このようなストレージは、１つまたは鵜複数のバッファまたはレジスタを含んでもよく、エントリ３１０は、後続して取り出されたエントリ３１０によって追いやられるまで格納されてもよい。
【００５８】
別の実施形態において、ローカルユニット４００は、例えば、制御ストア５００の一環として実装されたマイクロコードキャッシュを含んでもよい。このようなキャッシュは、複数の取り出されたエントリ３１０を格納するように構成されてもよく、ダクレクトマップ方式、セットアソシアティブ方式、フルアソシアティブ方式などの任意の適切な構成を用いて体系化されてもよい。使用頻度が最も低い方針か、または長時間未使用の方針などの任意の適切な置き換え方針に従って、キャッシュの立ち退きが実行されてもよい。このような実施形態の１つの変形例において、取り出されたエントリ３１０は、専用マイクロコードキャッシュ内ではなく命令キャッシュ１１０内に格納されてもよい。リモート格納された取り出されたエントリ３１０が、コア１００内にキャッシュされるか、または格納されてもよい実施形態において、キャッシュまたは他のローカルストレージは、所与のエントリ３１０に対する要求の発生より前か、または発生と同時のいずれかで、所与のリモート格納されたエントリ３１０の存在をチェックしてもよい。所望のエントリ３１０が、ローカルキャッシュまたは他のローカルストレージ内ですでに利用可能であれば、リモートユニット４１０への要求は発生されなくてもよく、またはすでに顕著であれば、キャンセルされてもよい。マイクロコードキャッシュは、コア１００のローカルであり、所与のコア１００を実行する特定の命令ストリームに基づいて割り当てられたダイナミックマイクロコードストアを与えるように構成されてもよい。リモートマイクロコードユニット４１０の待ち時間は、典型的に、所与のローカルマイクロコードユニット４００より長いことがあるため、マイクロコードキャッシュは、シーケンスが生じたときに、リモートマイクロコードユニット４１０への高頻度アクセスを要求することもありうる低頻度命令シーケンスに関する性能問題を軽減しうる。
【００５９】
図４のような実施形態において、単一のリモートマイクロコードユニット４１０が、多数のコア１００によって共有されてもよいが、他の実施形態において、リモートマイクロコードユニット４１０が複製されてもよいことに留意されたい。例えば、リモートマイクロコードユニット４１０のいくつかのインスタンスが、全コア１００より少ない数のコアで共有されてもよい。他の形態では、リモートマイクロコードユニット４１０の完全複製が、各コア１００内に含まれてもよい。このような実施形態において、リモートマイクロコードユニット４１０の複製によって要求される増大した面積は、ルーティングおよび／またはタイミングの複雑性が低減されることにより相殺されてもよい。例えば、リモートマイクロコードユニット４１０の複製は、コア１００からリモートマイクロコードまでの平均距離を短くし、それに応じて、リモートマイクロコードアクセスの待ち時間を短縮してもよい。
【００６０】
多数のプロセッサ実装において、マイクロコードは、プロセッサ実装中に静的であることが多く、例えば、制御ストアによって要求される面積を最小限に抑えるために、読み出し専用制御ストア内に実装されてもよい。しかしながら、いくつかの実施形態において、例えば、欠陥を修正したり、機能を追加したりするために、マイクロコードが修正されてもよい技術を提供することが有用な場合もある。図６に示すように、いくつかの実施形態において、リモートマイクロコードユニット４１０は、書き込み可能な制御ストアを提供するように構成された追加の特徴を含んでもよい。
【００６１】
任意のマイクロコードパッチＲＡＭ６６０は、特定のエントリポイントが、マイクロコードＲＯＭバンク６５０から、パッチＲＡＭ６６０内の対応する書き込み可能なエントリ３１０へマッピングされてもよい機能を与えるように構成されてもよい。１つの実施形態において、パッチＲＡＭ６６０は、多数のエントリ３１０を実装するように構成された書き込み可能なストレージリソースを含んでもよい。いくつかの実施形態において、パッチＲＡＭ６６０は、ＲＯＭバンク６５０の１つと同じ数のエントリ３１０を含んでもよいが、他の実施形態において、エントリ数は増減してもよい。パッチＲＡＭ６６０はまた、各エントリ３１０が割り当て可能なエントリポイントに対応するようにリソースを与えてもよい。リモート制御ストア６４０が、各々がパッチＲＡＭ６６０と同じ数のエントリを有する多数のＲＯＭバンク６５０を含む実施形態において、パッチＲＡＭ６６０の所与のエントリ３１０が、ＲＯＭバンク６５０の任意の１つにある対応するエントリ３１０にマッピングしてもよい。パッチＲＡＭ６６０内の追加のビットセットが、任意の所与の時間で所与のパッチＲＡＭエントリがどのバンクに対応するかを指定してもよい。例えば、ある実施形態は、４つのＲＯＭバンク６５０および１つのパッチＲＡＭバンク６６０を含んでもよく、各々が１０００個のエントリを有する。パッチＲＡＭ６６０内の追加のビットが、各所与のエントリ３１０に対して、所与のエントリが任意の４つのＲＯＭバンクのいずれにマッピングされるかを指定してもよい。他の実施形態において、パッチＲＡＭ６６０の各エントリは、プログラム可能な対応するエントリポイントを有してもよい。
【００６２】
バンク６５０の１つのバンク内に所与のエントリ３１０を発送するために、１つの実施形態において、どのバンク６５０が発送されるか、またはパッチＲＡＭエントリに関連付けられた特定のエントリポイント値を示すいずれかの情報とともに、パッチＲＡＭ６６０の対応するエントリ内に、所与のエントリに対して所望の発送された値が格納されてもよい。引き続き、特定のエントリポイントにアクセスするための要求が、リモート制御ストア６４０によって受け取られると、パッチＲＡＭ６６０は、要求されたエントリポイントが発送されたかを決定するために調べられてもよい。例えば、リモート制御ストア６４０は、特定のエントリポイントがマッピングする特定のバンク６５０を決定し、次に、パッチＲＡＭ６６０内の対応するエントリ３１０の制御ビットを調べて、パッチＲＡＭ６６０内に格納されたエントリ３１０が、特定のバンク６５０内に格納されたエントリ３１０の代わりに選択されるべきであるかを決定するように構成されてもよい。あるいは、特定のエントリポイントは、特定のエントリポイントがパッチＲＡＭ６６０のエントリにヒットまたはマッチするかどうかを決定するために、アソシアティブ方式にパッチＲＡＭ６６０内のプログラミングされたエントリポイントに対して比較されてもよい。リモートマイクロコードユニット４１０の任意の特徴として、パッチＲＡＭ６６０が示されているが、いくつかの実施形態において、ローカルマイクロコードユニット４００はまた、上述したものと同様の方法で制御ストア５００内のパッチＲＡＭ特徴をサポートしてもよいことに留意されたい。
【００６３】
パッチＲＡＭ６６０は、個々のマイクロコードエントリポイントのパッチングを容易に与えてもよい。しかしながら、いくつかの実施形態において、多くのエントリポイントを包含するルーチン全体を書き換えるか、または新しいルーチンで既存のマイクロコードを増大することが望ましいこともある。それに応じて、１つの実施形態において、リモートマイクロコードユニット４１０は、任意のダイナミックマイクロコードＲＡＭアレイ６７０を含んでもよい。一般的に言えば、マイクロコードＲＡＭアレイ６７０は、任意の適切な書き込み可能または不揮発性のストレージアレイ技術に従って実装されてもよく、リモート制御ストア６４０およびローカル制御ストア５００内に格納されたものに追加して、多数のエントリ３１０を格納するように構成されてもよい。１つの実施形態において、マイクロコードＲＡＭアレイ６７０のエントリ３１０に関連付けられたマイクロコードアドレス空間の部分は、リモート制御ストア６４０およびローカル制御ストア５００内のエントリ３１０に関連付けられたマイクロコードアドレス空間の部分から別個のものであってもよく、それによって、リモートマイクロコードユニット４１０によって受け取られるマイクロコードアクセス要求は、要求されたエントリポイントに従って、リモート制御ストア６４０か、またはマイクロコードＲＡＭアレイ６７０のいずれかに向けられてもよい。
【００６４】
他の実施形態において、マイクロコードＲＡＭアレイ６７０内のあるエントリ３１０は、リモート制御ストア６４０にもマッピングするエントリポイントをシャドウイングまたはオーバーライドするように構成されてもよい。例えば、マイクロコードＲＡＭアレイ６７０が、パッチＲＡＭ６６０に対して上述したものに類似したプログラム可能なエントリポイント制御ビットまたはレジスタを含んでもよい。このような実施形態において、対応するエントリ３１０が、マイクロコードＲＡＭアレイ６７０内に規定されたかどうかを確認するために、リモートマイクロコードユニット４１０にマッピングする特定のエントリポイントがチェックされてもよい。確認できれば、リモート制御ストア６４０内の任意の対応するエントリ３１０は無視されてもよい。ある程度のシーケンシングをサポートするリモートマイクロコードユニット４１０のいくつかの実施形態において、エントリポイントが、マイクロコードＲＡＭアレイ６７０に、例えば、複数エントリのマイクロコードルーチンの開始時に最初にマッピングされると、後続の連続的な参照が、マイクロコードＲＡＭアレイ６７０に割り当てられたマイクロコードアドレス空間の一部分内に留まってもよい。これにより、リモート制御ストア６４０をさらに参照することなく、ルーチンの残りがＲＡＭアレイ６７０から実行することが可能となりうる。
【００６５】
上記実施形態は、ローカルマイクロコードユニット４００およびリモートマイクロコードユニット４１０を含む２段階の階層に関して記載してきたが、他の実施形態において、マイクロコードは、さらなる段階の階層を用いて、プロセッサ２００内、またはシステム内のプロセッサ２００の複数のインスタンスにわたって分配されてもよいことに留意されたい。
【００６６】
いくつかの実施形態において、プロセッサ２００は、他のコンポーネントとともにコンピュータシステム内に実装されてもよい。図８に、このようなシステムの１つの実施形態を示す。例示した実施形態において、コンピュータシステム８００は、いくつかの処理ノード８１２Ａ、８１２Ｂ、８１２Ｃ、および８１２Ｄを含む。各処理ノードは、各処理ノード８１２Ａ〜８１２Ｄ内のそれぞれに含まれたメモリコントローラ８１６Ａ〜８１６Ｄを介して、それぞれのメモリ８１４Ａ〜８１４Ｄに連結される。さらに、処理ノード８１２Ａ〜８１２Ｄは、処理ノード８１２Ａ〜８１２Ｄ間で通信するために使用されるインタフェースロジックを含む。例えば、処理ノード８１２Ａｈａ，処理ノード８１２Ｂと通信するためのインタフェースロジックＡと、処理ノード８１２Ｃと通信するためのインタフェースロジック８１８Ｂと、さらなる別の処理ノード（図示せず）と通信するための第３のインタフェースロジック８１８Ｃとを含む。同様に、処理ノード８１２Ｂは、インタフェースロジック８１８Ｄ、８１８Ｅ、および８１８Ｆを含み、処理ノード８１２Ｃは、インタフェースロジック８１８Ｇ、８１８Ｈ、および８１８Ｉとを含み、処理ノード８１２Ｄは、インタフェースロジック８１８Ｊ、８１８Ｋ、および８１８Ｌを含む。処理ノード８１２Ｄは、インタフェースロジック８１８Ｌを介して複数の入力／出力デバイス（例えば、デイジーチェーン構成のデバイス８２０Ａ〜８２０Ｂ）と通信するように連結される。他の処理ノードが、同様の方法で他のＩ／Ｏデバイスと通信してもよい。
【００６７】
処理ノード８１２Ａ〜８１２Ｄは、処理間のノード通信用のパケットベースリンクを実装するように構成されてもよい。例示した実施形態において、リンクは、単方向ラインのセットとして実装される（例えば、ライン８２４Ａは、処理ノード８１２Ａから処理ノード８１２Ｂへパケットを送信するように使用され、ライン８２４Ｂは、処理ノード８１２Ｂから処理ノード８１２Ａへパケットを送信するように使用される）。ライン８２４Ｃ〜８２４Ｈの他のセットは、図８に示すように、他の処理ノード間でパケットを送信するように使用される。一般に、ライン８２４の各セットは、１つ以上のデータライン、データラインに対応する１つ以上のクロックライン、および搬送されるパケットのタイプを示す１つ以上の制御ラインを含んでもよい。リンクは、処理ノード間で通信するためのキャッシュコヒーレント式か、または処理ノードとＩ／Ｏデバイス間で通信するための非コヒーレント式で動作されてもよい（または周辺機器相互接続（ＰＣＩ：Peripheral Component Interconnect）バスまたは、業界標準アーキテクチャ（ＩＳＡ：Industry Standard Architecture）バスなどの従来の構造のバスブリッジとＩ／Ｏバス）。さらに、リンクは、図示したようなＩ／Ｏデバイス間でデイジーチェーン構造を用いて非コヒーレント式に動作されてもよい。１つの処理ノードから別のものへ送信されるパケットが、１つ以上の中間ノードを通過してもよいことに留意されたい。例えば、処理ノード８１２Ａから処理ノード８１２Ｄによって送信されるパケットは、図８に示すように、処理ノード８１２Ｂまたは処理ノード８１２Ｃのいずれかを通過してもよい。任意の適切なルーティングアルゴリズムが使用されてもよい。コンピュータシステム８００の他の実施形態が、図８に示す実施形態より多いか、または少ない処理ノード数を含んでもよい。また、コンピュータシステム８００の他の実施形態は、上述したようなパケットベースのプロトコルを採用した単方向バスではなく、適切なインタフェースプロトコルを採用した双方向バスをしようして実装されてもよい。
【００６８】
一般に、パケットは、ノード間のライン８２４に１以上のビット時間として送信されてもよい。ビット時間は、対応するクロックラインでのクロック信号の立ち上がりまたは立下り縁であってもよい。パケットは、トランザクションを開始するためのコマンドパケット、キャッシュコヒーレンシーを維持するためのプローブパケット、およびプローブおよびコマンドへの応答からの応答パケットを含んでもよい。
【００６９】
処理ノード８１２Ａ〜８１２Ｄは、メモリコントローラおよびインタフェースロジックの他にも、１つ以上のプロセッサを含んでもよい。広義に言えば、処理ノードは、少なくとも１つのプロセッサを備え、任意に、必要に応じてメモリおよび他のロジックと通信するためのメモリコントローラを含んでもよい。より詳細に言えば、各処理ノード８１２Ａ〜８１２Ｄは、図２に示すように、プロセッサ２００の１つ以上のコピーを備えてもよい（例えば、図１および図３〜図７に示すさまざまな構造的および演算の詳細を含む）。１つ以上のプロセッサは、処理ノードまたは処理ノードの形成においてチップマルチプロセッシング（ＣＭＰ：chip multiprocessing）またはチップマルチスレッド（ＣＭＴ：chip
multithreaded）集積回路を備えてもよく、または、処理ノードは、任意の他の所望の内部構造を有してもよい。いくつかの実施形態において、処理ノード８１２のメモリコントローラおよび／または周辺インタフェースロジックが、図２に示すように、プロセッサ２００内に直接集積化されてもよい。例えば、メモリコントローラ８１６のインスタンスが、プロセッサ２００内のメモリコントローラ／周辺インタフェース２３０に対応してもよい。
【００７０】
メモリ８１４Ａ〜８１４Ｄは、任意の適切なメモリデバイスを備えてもよい。例えば、メモリ８１４Ａ〜８１４Ｄは、１つ以上のＲＡＭＢＵＳ  ＤＲＡＭ（ＲＤＲＡＭ）、同期ＤＲＡＭ（ＳＤＲＡＭ）、ＤＤＲ  ＳＤＲＡＭ、スタティックＲＡＭなどを備えてもよい。コンピュータシステム８００のアドレス空間は、メモリ８１４Ａ〜８１４Ｄの間で分割されてもよい。各処理ノード８１２Ａ〜８１２Ｄは、どのメモリ８１４Ａ〜８１４Ｄに対して、ひいては、特定のアドレスに対するメモリ要求がルーティングされるべきであるどの処理ノード８１２Ａ〜８１２に対して、どのアドレスがマッピングされるかを決定するために使用されたメモリマップを含んでもよい。１つの実施形態において、コンピュータシステム８００内のアドレスのコヒーレンシーポイントは、アドレスに対応するバイトを格納するメモリに連結されたメモリコントローラ８１６Ａ〜８１６Ｄである。言い換えれば、メモリコントローラ８１６Ａ〜８１６Ｄは、対応するメモリ８１４Ａ〜８１４Ｄへの各メモリアクセスがキャッシュコヒーレント式に生じるようにする役割のものであってもよい。メモリコントローラ８１６Ａ〜８１６Ｄは、メモリ８１４Ａ〜８１４Ｄへのインタフェースとなるための制御回路を備えてもよい。さらに、メモリコントローラ８１６Ａ〜８１６Ｄは、メモリ要求をキューに入れるための要求キューを含んでもよい。
【００７１】
一般に、インタフェースロジック８１８Ａ〜８１８Ｌは、リンクからパケットを受け取り、リンク上を送信されるパケットをバッファリングするための種々のバッファを備えてもよい。上述したように、いくつかの実施形態において、インタフェースロジック８１８は、プロセッサ２００内、例えば、メモリコントローラ／周辺インタフェース２３０内、または集積メモリコントローラとは別個の別々のインタフェース内で集積化されてもよい。コンピュータシステム８００は、パケットを送信するための任意の適切なフロー制御機構を採用してもよい。例えば、１つの実施形態において、各インタフェースロジック８１８は、インタフェースロジックが接続されるリンクの他端部にあるレシーバ内にあるバッファのタイプ別の数を格納する。インタフェースロジックは、受信するインタフェースロジックにパケットを格納する空きのバッファがない限り、パケットを送信しない。パケットを前方にルーティングすることで受信バッファに空きができると、受信側のインタフェースロジックは送信側のインタフェースロジックにバッファが空いたことを示すメッセージを送信する。このような機構を、「クーポンベース」システムと呼ぶこともある。
【００７２】
Ｉ／Ｏデバイス８２０Ａ〜８２０Ｂは、適切な任意のＩ／Ｏデバイスでよい。例えば、Ｉ／Ｏデバイス８２０Ａ〜８２０Ｂは、そのデバイスが連結されてもよい別のコンピュータシステムと通信するためのデバイス（例えば、ネットワークインタフェースカード、またはモデム）を含む。さらに、Ｉ／Ｏデバイス８２０Ａ〜８２０Ｂは、ビデオアクセラレータ、オーディオカード、ハードまたはフロッピーディスクドライブまたはドライブコントローラ、ＳＣＳＩ（Small Computer Systems Interface）アダプタ、および電話カード、サウンドカード、およびＧＰＩＢなどの様々なデータ取得カードまたはフィールドバスインタフェースカードを含んでもよい。さらに、カードとして実装された任意のＩ／Ｏデバイスはまた、システム８００の主要回路基板上の回路、プロセッサ２００内、および／または処理ノードで実行されるソフトウェアで回路として実装されてもよい。本明細書において、「Ｉ／Ｏデバイス」という用語、および「周辺デバイス」という用語は、同義に用いられていることに留意されたい。
【００７３】
さらに、１つ以上のＩ／Ｏ相互接続および／またはメモリへのブリッジへのプロセッサの１つ以上のインタフェースを含む、従来のパーソナルコンピュータ（ＰＣ）構造に１つ以上のプロセッサ２００が実装されてもよい。例えば、プロセッサ２００は、ノースブリッジ・サウスブリッジ階層内に実装されるように構成されてもよい。このような実施形態において、ノースブリッジ（プロセッサ２００に連結されるか、または集積されてもよい）は、システムメモリ、グラフィックデバイスインタフェース、および／または他のシステムデバイスへの高帯域接続を与えるように構成されてもよく、一方で、サウスブリッジは、さまざまなタイプの周辺バス（例えば、ユニバーサルシリアルバス（ＵＳＢ：Universal Serial Bus）、ＰＣＩ、ＩＳＡなど）を介して他の周辺機器への低帯域域接続を与えてもよい。
【００７４】
上記に実施形態を非常に詳細に記載してきたが、当業者が上記開示を十分に理解すれば、多数の変更例および修正例が明らであろう。添付の特許請求の範囲は、そのような変更例および修正例のすべてを包含するように解釈されることを意図したものである。
【産業上の利用可能性】
【００７５】
本発明は、一般に、マイクロプロセッサの分野に適用可能でありうる。
【図１】
2010533920.tif 000003
【図２】
2010533920.tif 000004
【図３】
2010533920.tif 000005
【図４】
2010533920.tif 000006
【図５】
2010533920.tif 000007
【図６】
2010533920.tif 000008
【図７】
2010533920.tif 000009
【図８】
2010533920.tif 000010
【手続補正書】
【提出日】平成21年5月8日(2009.5.8)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プログラマビジブル命令セットアーキテクチャ（ＩＳＡ）に従って規定された命令を独立して実行するように各々が構成された複数のプロセッサコア（１００）と、
前記プロセッサコア（１００）の各々によってアクセス可能であり、マイクロコードエントリを格納するように構成されたリモートマイクロコードストア（６４０）を含むリモートマイクロコードユニット（４１０）と、を備えるプロセッサ（２００）であって、
前記複数のプロセッサコア（１００）の各々が、マイクロコードエントリを格納するように構成されたローカルマイクロコードユニット（４００）を含み、
前記ローカルマイクロコードユニット（４００）内に格納されたマイクロコードエントリに対応する前記マイクロコードルーチンの各々が、性能感度しきい値要求を満たすのに対して、前記リモートマイクロコードユニット（４１０）内に格納されたマイクロコードエントリに対応する少なくともいくつかのマイクロコードルーチンの各々が、前記性能感度しきい値要求を満たさず、
前記プロセッサコア（１００）の任意の所与のコアが、
前記所与のプロセッサコア（１００）によって実行される１つ以上の演算を含む特定のマイクロコードエントリに対応する所与のマイクロコードエントリポイントを発生し、
前記所与のプロセッサコア（１００）の前記それぞれのローカルマイクロコードユニット（４００）内に、前記特定のマイクロコードエントリが格納されたかを決定し、
前記特定のマイクロコードエントリが、前記それぞれのローカルマイクロコードユニット（４００）内に格納されていないという決定に応答して、前記リモートマイクロコードユニット（４１０）に前記特定のマイクロコードエントリの要求を搬送するようにさらに構成される、プロセッサ。
【請求項２】
前記特定のマイクロコードエントリが、前記所与のプロセッサコアの前記それぞれのローカルマイクロコードユニット内に格納されるかを決定するために、前記所与のプロセッサコアが、前記所与のマイクロコードエントリポイントが、前記それぞれのローカルマイクロコードユニットに対応するマイクロコードエントリオイントアドレス空間の一部分に位置するかを決定するようにさらに構成される、請求項１に記載のプロセッサ。
【請求項３】
前記要求の受信に応答して、前記リモートマイクロコードユニットが、前記リモートマイクロコードストアから前記特定のマイクロコードエントリを取り出し、前記特定のマイクロコードエントリを前記所与のプロセッサコアに戻すようにさらに構成され、前記特定のマイクロコードエントリが、別のマイクロコードエントリが、前記特定のマイクロコードエントリの後で取り出されるかどうかを表示するように構成されたシーケンス制御フィールドを含み、前記リモートマイクロコードユニットが、前記シーケンス制御フィールドに応じて、前記リモートマイクロコードストアから前記別のマイクロコードエントリを取り出し、前記所与のプロセッサコアが前記別のマイクロコードエントリを別々に要求することなく、前記別のマイクロコードエントリを前記所与のプロセッサコアに戻すようにさらに構成される、請求１または２に記載のプロセッサ。
【請求項４】
前記プロセッサコアの各々が、前記命令のうち命令を格納するように構成されたそれぞれの命令キャッシュをさらに含み、前記要求の後の前記特定のマイクロコードエントリの受信に応答して、前記所与のプロセッサコアが、前記それぞれの命令キャッシュ内に前記特定のマイクロコードエントリを格納するようにさらに構成される、請求項１から３のいずれか一項に記載のプロセッサ。
【請求項５】
前記リモートマイクロコードストアの少なくとも一部分が書き込み可能なメモリを含む、請求項１から４のいずれか一項に記載のプロセッサ。
【請求項６】
前記性能感度しきい値要求がマイクロコードルーチン実行の頻度に依存する、請求項１から５のいずれか一項に記載のプロセッサ。
【請求項７】
前記性能感度しきい値要求がマイクロコードルーチン実行のレイテンシに依存する、請求項１から６のいずれか一項に記載のプロセッサ。
【請求項８】
前記ローカルマイクロコードユニットの１つ以上が、前記リモートマイクロコードユニットから取り出されたエントリをキャッシュに入れるように構成されたマイクロコードキャッシュを備え、前記特定のマイクロコードエントリが、前記所与のプロセッサコアの前記それぞれのローカルマイクロコードユニット内に格納されているかを決定するために、前記所与のプロセッサコアが、前記リモートマイクロコードユニットから前記特定のマイクロコードエントリを要求する前に、前記特定のマイクロコードエントリが前記マイクロコードキャッシュ内にあるかどうかを決定するように構成される、請求項１から７のいずれか一項に記載のプロセッサ。
【請求項９】
システムメモリと、
請求項１から８のいずれか一項に記載のプロセッサとを備え、前記プロセッサが前記システムメモリに連結される、システム。
【請求項１０】
所与のマイクロコードルーチンが、性能感度しきい値要求を満たしているという決定に応答して、複数のプロセッサコア（１００）内に含まれる各ローカルマイクロコードユニット（４００）内に前記所与のマイクロコードルーチンに対応する１つ以上のマイクロコードエントリを格納し、
所与のマイクロコードルーチンが、性能感度しきい値要求を満たしていないという決定に応答して、前記複数のプロセッサコア（１００）の外部のリモートマイクロコードユニット（４１０）内にある前記所与のマイクロコードルーチンに対応する１つ以上のマイクロコードエントリを格納し、
前記複数のプロセッサコア（１００）の所与のコアが、前記所与のプロセッサコア（１００）によって実行される１つ以上の演算を含む特定のマイクロコードエントリに対応する所与のマイクロコードエントリポイントを発生し、前記複数のプロセッサコア（１００）の各々が、プログラマビジブル命令セットアーキテクチャ（ＩＳＡ）に従って規定された命令を独立して実行するように各々が構成され、マイクロコードエントリを格納するように構成されたローカルマイクロコードユニット（４００）を各々が含み、
前記所与のプロセッサコア（１００）が、前記特定のマイクロコードエントリが、前記所与のプロセッサコア（１００）の前記それぞれのローカルマイクロコードユニット（４００）内に格納されているかを決定し、
前記特定のマイクロコードエントリが前記それぞれのローカルマイクロコードユニット（４００）内に格納されていないという決定に応答して、前記所与のプロセッサコア（１００）が、前記特定のマイクロコードエントリの要求をリモートマイクロコードユニット（４１０）へ搬送し、前記リモートマイクロコードユニット（４１０）が、前記プロセッサコア（１００）の各々によってアクセス可能であり、マイクロコードエントリを格納するように構成されたリモートマイクロコードストア（６４０）を含む、方法。
【国際調査報告】
2010533920.tif 000011
2010533920.tif 000012
2010533920.tif 000013