(57)【要約】      （修正有）【課題】ストールを低減することができる、ベクトル命令を実行するための装置を提供する。【解決手段】プロセッサは、多数の命令の発行グループを実行するための複数のパイプライン実行ユニット（Ｐ０、Ｐ１、Ｐ２、Ｐ３）を有する第１および第２のプロセッサ・コア１１４と、スケジューリング論理とを有する。スケジューリング論理は、プロセッサが第１の動作モードにある場合、第１の命令発行グループを第１のプロセッサ・コア１１４に発行して実行させ、第２の命令発行グループを第２のプロセッサ・コア１１４に発行して実行させる。プロセッサが第２の動作モードにある場合、第１および第２のプロセッサ・コア１１４に１つ以上のベクトル命令を発行して、同時に実行させる。【選択図】図３
2010073197.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサであって、
第１および第２のプロセッサ・コアであって、各々が、多数の命令の発行グループを実行するための複数のパイプライン実行ユニットを有する、前記プロセッサ・コアと、
前記プロセッサが第１の動作モードにある場合、第１の命令発行グループを実行のために前記第１のプロセッサ・コアに発行し、第２の命令発行グループを実行のために前記第２のプロセッサ・コアに発行するように構成され、前記プロセッサが第２の動作モードにある場合、前記第１および第２のプロセッサ・コア上で同時に実行するために１つ以上のベクトル命令を発行するように構成された、スケジューリング論理と、
を含む、プロセッサ。
【請求項２】
前記第１および第２のプロセッサ・コアが各々、Ｎ個の命令の発行グループを実行することができるＮ個のパイプライン実行ユニットを有する、請求項１に記載のプロセッサ。
【請求項３】
前記第１および第２のプロセッサ・コアは各々、前記プロセッサが前記第１の動作モードにある場合に、共通の発行グループ内の命令を相互に遅延させて実行するカスケードのパイプライン実行ユニットを含む、請求項１に記載のプロセッサ。
【請求項４】
前記プロセッサが前記第２の動作モードにある場合に、前記第１および第２のプロセッサ・コアの前記パイプライン実行ユニットが、ベクトル命令に対応する動作を並列して実行する、請求項３に記載のプロセッサ。
【請求項５】
前記第１および第２のプロセッサ・コアが、前記プロセッサが前記第１の動作モードにある場合に、共通の発行グループ内の命令を相互に遅延させて発行することができるターゲット遅延キューを含み、
前記プロセッサが前記第２の動作モードにある場合、前記ターゲット遅延キューが分流される、請求項４に記載のプロセッサ。
【請求項６】
前記第１および第２の動作モード間で選択を行うようにソフトウェア命令によって制御可能な機構を更に含む、請求項１に記載のプロセッサ。
【請求項７】
前記スケジューリング論理が、
前記第１および第２のプロセッサ・コアに前記ベクトル命令の同一のコピーを送信し、その結果、前記第１および第２のプロセッサ・コアが単一のクロック・サイクルの間に同一の命令を見るように、更に、
前記第１および第２のプロセッサ・コアにオフセット値を送信し、前記第１のプロセッサ・コアに前記ベクトル命令の第１のサブセットを効果的に割り当て、前記第２のプロセッサ・コアに前記ベクトル命令の第２のサブセットを割り当てるように構成されている、請求項１に記載のプロセッサ。
【請求項８】
コンピューティング・システムであって、
第１および第２のプロセッサであって、各々が、１つ以上のベクトル命令を実行するための複数のプロセッサ・コアを有する、前記プロセッサと、
前記コンピューティング・システムが第１の動作モードにある場合、１つ以上のベクトル命令を実行のために前記第１のプロセッサに発行し、１つ以上のベクトル命令を実行のために前記第２のプロセッサに発行するように構成され、前記コンピューティング・システムが第２の動作モードにある場合、ベクトル命令の発行グループを実行のために前記第１および第２のプロセッサに発行するように構成された、スケジューリング論理と、
を含む、コンピューティング・システム。
【請求項９】
前記第１および第２のプロセッサは、各々、前記コンピュータ・システムが前記第１の動作モードにある場合に、相互に同時にベクトル命令を実行する複数のプロセッサ・コアを含む、請求項８に記載のコンピューティング・システム。
【請求項１０】
前記コンピューティング・システムが前記第２の動作モードにある場合に、前記第１および第２のプロセッサの前記プロセッサ・コアは、ベクトル命令の共通の発行グループ内のベクトル命令を相互に遅延させて実行する、請求項９に記載のコンピューティング・システム。
【請求項１１】
前記第１および第２のプロセッサ・コアが、前記プロセッサが前記第１の動作モードにある場合に、共通の発行グループ内の命令を相互に遅延させて発行することができるターゲット遅延キューを含み、
前記プロセッサが前記第２の動作モードにある場合、前記ターゲット遅延キューが分流される、請求項１０に記載のコンピューティング・システム。
【請求項１２】
前記スケジューリング論理が前記第１のプロセッサとプリント回路基板を共有する、請求項８に記載のコンピューティング・システム。
【請求項１３】
前記第１および第２の動作モード間で選択を行うようにソフトウェア命令によって制御可能な機構を更に含む、請求項８に記載のコンピューティング・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、パイプライン・プロセッサ（pipelined processor）に関し、更に具体的には、相互に遅延させたカスケード構成（cascaded arrangement）の実行ユニットを利用するプロセッサに関する。
【背景技術】
【０００２】
コンピュータ・システムは通常、いくつかの集積回路（ＩＣ）を内蔵する。集積回路には、このコンピュータ・システムにおいて情報を処理するために用いられる１つ以上のプロセッサが含まれる。最新のプロセッサは、多くの場合、パイプライン方式で命令の処理を行い、各命令を一連のステップとして実行する。各ステップは通常、パイプライン内の異なる段（ハードウェア回路）によって実行され、各パイプライン段が所与のクロック・サイクルでパイプライン内の異なる命令に対してそのステップを実行する。この結果、パイプラインがいっぱいにロードされると、各クロック・サイクルで命令が処理され、これによってスループットが増大する。
【０００３】
簡単な例として、パイプラインは３つの段を含む場合がある。すなわち、ロード（メモリから命令を読み取る）、実行（命令を実行する）、および記憶（結果を記憶する）である。第１のクロック・サイクルにおいて、第１の命令がパイプラインのロード段に入る。第２のクロック・サイクルにおいて、第１の命令が実行段に移動し、ロード段が解放されて、第２の命令をロードする。第３のクロック・サイクルにおいて、第１の命令の実行結果を記憶段によって記憶することができ、一方では第２の命令を実行し第３の命令をロードする。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、通常の命令ストリームに固有の依存性のため、従来の命令パイプラインでは、ある命令を実行するための実行ユニットが先行する命令の実行によって発生する結果を待っている間、ストールする（パイプライン段が実行しない）。一例として、ロード命令は、先行する命令に依存して（例えば別のロード命令またはベース・アドレスに対するオフセットの追加）、ロードするデータのアドレスを供給する場合がある。別の例として、積算命令は、そのオペランドの１つについて、１つ以上の先行するロード命令の結果に依存することがある。いずれの場合であっても、従来の命令パイプラインは、先行する命令の結果が利用可能となるまでストールする。ストールは、数クロック・サイクルに及ぶことがある。これは例えば、先行する命令（これに以降の命令が依存する）のターゲットであるデータがＬ１キャッシュに常駐しておらず（結果としてＬ１「キャッシュ・ミス」が生じる）、比較的遅いＬ２キャッシュにアクセスしなければならない場合である。この結果、パイプラインを充分に活用できないため、かかるストールによって著しく性能が低下する恐れがある。
【０００５】
従って、好ましくはストールを低減するパイプライン命令処理機構の改良が必要とされている。
【課題を解決するための手段】
【０００６】
本発明の実施形態は、ベクトル命令を実行するための装置を提供する。
【０００７】
本発明の一実施形態は、プロセッサを提供する。このプロセッサは、概して、第１および第２のプロセッサ・コアであって、各々が多数の命令の発行グループを実行するための複数のパイプライン実行ユニットを有するプロセッサ・コアと、プロセッサが第１の動作モードにある場合、第１の命令発行グループを実行のために第１のプロセッサ・コアに発行し、第２の命令発行グループを実行のために第２のプロセッサ・コアに発行するように構成され、プロセッサが第２の動作モードにある場合、第１および第２のプロセッサ・コア上で同時に実行するために１つ以上のベクトル命令を発行するように構成された、スケジューリング論理と、を含む。
【０００８】
本発明の別の実施形態は、コンピューティング・システムを提供する。このコンピューティング・システムは、概して、第１および第２のプロセッサであって、各々が１つ以上のベクトル命令を実行するための複数のプロセッサ・コアを有するプロセッサと、コンピューティング・システムが第１の動作モードにある場合、１つ以上のベクトル命令を実行のために第１のプロセッサに発行し、１つ以上のベクトル命令を実行のために第２のプロセッサに発行するように構成され、コンピューティング・システムが第２の動作モードにある場合、ベクトル命令の発行グループを実行のために第１および第２のプロセッサに発行するように構成された、スケジューリング論理と、を含む。
【０００９】
本発明の上述の機構、利点、および目的を達成し、詳細に理解することができるように、添付図面に示した実施形態を参照することによって、上に簡潔にまとめた本発明のいっそう具体的な説明を行うことができる。
【００１０】
しかしながら、添付図面は、本発明の典型的な実施形態を例示するだけであり、従って、その範囲の限定として見なされないことに留意すべきである。本発明は、他の等しく有効な実施形態を許容することができるからである。
【図面の簡単な説明】
【００１１】
【図１】本発明の一実施形態に従ったシステムを示すブロック図である。
【図２】本発明の一実施形態に従ったコンピュータ・プロセッサを示すブロック図である。
【図３】本発明の一実施形態に従ったプロセッサのコアの１つを示すブロック図である。
【図４】従来のパイプライン・ユニットの性能を本発明の実施形態に従ったパイプライン・ユニットと比較した図である。
【図５】従来のパイプライン・ユニットの性能を本発明の実施形態に従ったパイプライン・ユニットと比較した図である。
【図６】本発明の実施形態に従って命令をスケジューリングおよび発行するための例示的な動作のフロー図である。
【図７】本発明の実施形態に従った例示的な整数カスケード遅延実行パイプライン・ユニットを示す。
【図８】図７に示したパイプライン・ユニットを通る命令のフローを示す。
【図９】図７に示したパイプライン・ユニットを通る命令のフローを示す。
【図１０】図７に示したパイプライン・ユニットを通る命令のフローを示す。
【図１１】図７に示したパイプライン・ユニットを通る命令のフローを示す。
【図１２】本発明の実施形態に従った例示的な浮動小数点カスケード遅延実行パイプライン・ユニットを示す。
【図１３】図７に示したパイプライン・ユニットを通る命令のフローを示す。
【図１４】図７に示したパイプライン・ユニットを通る命令のフローを示す。
【図１５】図７に示したパイプライン・ユニットを通る命令のフローを示す。
【図１６】図７に示したパイプライン・ユニットを通る命令のフローを示す。
【図１７】本発明の実施形態に従った例示的なベクトル・カスケード遅延実行パイプライン・ユニットを示す。
【図１８】異なるアプリケーションに対して異なって見えるようにプロセッサの物理コアをモーフィングする（morph）例を示す。
【図１９】本発明の実施形態に従って単一のユニットとして見えるようにモーフィングされた例示的なカスケード遅延実行パイプライン・ユニットを示す。
【図２０】本発明の実施形態に従って単一のユニットとして見えるようにモーフィングされた例示的なカスケード遅延実行パイプライン・ユニットを示す。
【図２１】異なるアプリケーションに対して異なって見えるようにプロセッサの物理コアをモーフィングする別の例を示す。
【図２２】異なるアプリケーションに対して異なって見えるようにプロセッサの物理コアをモーフィングする別の例を示す。
【図２３】本発明の一実施形態に従った例示的な物理的レイアウト（「フロアプラン」）を示す。
【図２４】本発明の一実施形態に従った別の例示的なフロアプランを示す。
【図２５】ベクトル処理のための物理コアのモーフィングの例を示す。
【図２６】ベクトル処理のための物理コアのモーフィングの別の例を示す。
【図２７】本発明の一実施形態に従ったマルチ・チップ・パッケージ（ＭＣＰ）を示す。
【図２８】共にモーフィングされた多数のＣＰＵを示す。
【図２９】様々なＣＰＵ間で適切なタイミングを維持する際に使用可能な論理を示す。
【発明を実施するための形態】
【００１２】
本発明は、概して、依存性の命令を実行する際に発生するストールを低減することができる、パイプライン方式で命令を実行するための改良された技法を提供する。相互に遅延させた実行ユニットを有するカスケード構成のパイプラインを利用することによって、ストールを低減させることができる。このカスケード遅延構成により、異なる時点で実行する異なるパイプラインにおいて実行するように依存性の命令をスケジューリングすることによって、それらの命令を共通の発行グループ内で発行することができる。
【００１３】
一例として、第１の命令を第１の「早い」すなわち「遅延の小さい」パイプライン上で実行するようにスケジューリングすることができ、第２の命令（第１の命令を実行することで得られる結果に依存する）を第２の「遅い」すなわち「遅延の大きい」パイプライン上で実行するようにスケジューリングすることができる。第１の命令に対して遅延させたパイプラインで第２の命令を実行するようにスケジューリングすることによって、第２の命令を実行する際にちょうど間に合うように、第１の命令の結果を利用可能とすることができる。第１の命令の結果が利用可能となるまで第２の命令の実行は遅延されるが、以降の発行グループは次のサイクルでカスケード・パイプラインに入ることができるので、スループットが増大する。換言すると、かかる遅延は第１の発行グループ上で「見られる」だけで、以降の発行グループにとっては「隠されている」ので、各パイプライン・サイクルで異なる発行グループ（依存性の命令を有するものであっても）を発行することができる。
【００１４】
以下で、本発明の実施形態を参照する。しかしながら、本発明は特定の記載する実施形態に限定されないことは理解されよう。以下の機構および要素のいずれの組み合わせも、異なる実施形態に関わるものであろうとなかろうと、本発明を実施し実行すると想定される。更に、様々な実施形態において、本発明は従来技術よりも優れた多くの利点を提供する。しかしながら、本発明の実施形態は他の可能な解決策または従来技術あるいはその両方よりも優れた利点を達成することができるが、所与の実施形態によって特定の利点が達成されるか否かは、本発明の限定ではない。従って、以下の態様、機構、実施形態、および利点は、単に例示に過ぎず、請求項（複数の請求項）において明示的に述べられた場合を除いて、特許請求の範囲の要素または限定として見なされない。同様に、「本発明」に対する言及は、本明細書に開示するいずれかの発明の主題の一般化として解釈されるものではなく、請求項（複数の請求項）において明示的に述べられた場合を除いて、特許請求の範囲の要素または限定として見なされるものではない。
【００１５】
以下は、添付図面に示した本発明の実施形態の詳細な説明である。実施形態は一例であり、本発明を明確に伝達するように詳細に記載する。しかしながら、記載する詳細の程度は予想される実施形態の変形を限定することを意図しておらず、逆に、本発明は、特許請求の範囲によって規定されるような本発明の精神および範囲内に該当する全ての変更、均等物、および代替物を包含する。
【００１６】
本発明の実施形態は、例えばコンピュータ・システムのようなシステムと共に用い、そういったシステムに関連付けて以下に説明することができる。本発明において用いる場合、システムとは、プロセッサおよびキャッシュ・メモリを利用するいかなるシステムも含むことができ、パーソナル・コンピュータ、インターネット機器、デジタル媒体機器、携帯情報機器（ＰＤＡ：portable digital assistant）、携帯音楽／ビデオ・プレーヤ、およびビデオ・ゲーム・コンソールが含まれる。キャッシュ・メモリは、このキャッシュ・メモリを利用するプロセッサと同じダイ上に配置することができるが、場合によっては、プロセッサおよびキャッシュ・メモリは異なるダイ上に配置されることもある（例えば別個のモジュール内の別個のチップまたは単一のモジュール上の別個のチップ）。
【００１７】
例示的なシステムの概要
図１は、本発明の一実施形態によるシステム１００を示すブロック図である。システム１００は、命令およびデータを記憶するためのシステム・メモリ１０２と、グラフィック処理のためのグラフィック処理ユニット１０４と、外部デバイスと通信を行うためのＩ／Ｏインタフェースと、命令およびデータの長期記憶のための記憶デバイス１０８と、命令およびデータを処理するためのプロセッサ１１０と、を含むことができる。
【００１８】
本発明の一実施形態によれば、プロセッサ１１０は、多数のＬ１キャッシュ１１６と共にＬ２キャッシュ１１２を有することができる。各Ｌ１キャッシュ１１６は、多数のプロセッサ・コア１１４の１つによって用いられる。一実施形態によれば、各プロセッサ・コア１１４はパイプライン化することができ、この場合、各命令は一連の小さいステップで実行され、各ステップは異なるパイプライン段によって実行される。
【００１９】
図２は、本発明の一実施形態に従ったプロセッサ１１０を示すブロック図である。簡略化のため、図２は、プロセッサ１１０の単一のコア１１４を示し、これに関連付けて説明する。一実施形態において、各コア１１４は同一とすることができる（例えば同一のパイプラインを含み、同一構成のパイプライン段を有する）。他の実施形態では、コア１１４は異なるものとすることも可能である（例えば異なるパイプラインを含み、異なる構成のパイプライン段を有する）。
【００２０】
本発明の一実施形態において、Ｌ２キャッシュは、プロセッサ１１０によって用いられている命令およびデータの一部を含むことがある。場合によっては、プロセッサ１１０は、Ｌ２キャッシュ１１２に含まれない命令およびデータを要求することがある。要求された命令およびデータがＬ２キャッシュ１１２に含まれない場合、要求された命令およびデータを（高レベルのキャッシュまたはシステム・メモリ１０２から）検索し、Ｌ２キャッシュに配置することができる。プロセッサ・コア１１４がＬ２キャッシュ１１２から命令を要求すると、この命令は最初にプリデコーダ（predecoder）およびスケジューラ２２０によって処理することができる。
【００２１】
本発明の一実施形態において、命令はＬ２キャッシュ１１２からグループ単位でフェッチすることができ、これをＩ−ラインと称する。同様に、データはＬ２キャッシュ１１２からグループ単位でフェッチすることができ、これをＤ−ラインと称する。図１に示したＬ１キャッシュ１１６は２つの部分に分割することができる。すなわち、Ｉ−ラインを記憶するためのＬ１命令キャッシュ２２２（Ｉ−キャッシュ２２２）、および、Ｄ−ラインを記憶するためのＬ１データ・キャッシュ２２４（Ｄ−キャッシュ２２４）である。Ｉ−ラインおよびＤ−ラインは、Ｌ２アクセス回路２１０を用いてＬ２キャッシュ１１２からフェッチすることができる。
【００２２】
本発明の一実施形態において、Ｌ２キャッシュ１１２から検索されたＩ−ラインは、プリデコーダおよびスケジューラ２２０によって処理することができ、Ｉ−ラインはＩ−キャッシュ２２２に配置することができる。プロセッサの性能を更に改善するために、命令はプリデコードされることが多い。例えば、Ｉ−ラインはＬ２（またはもっと高い）キャッシュから検索される。かかるプリデコードは、アドレス発生、分岐予測、およびスケジューリング（命令を発行する順序を決定する）等の様々な機能を含むことができる。スケジューリングは、命令実行を制御するディスパッチ情報（１組のフラグ）として捕捉される。いくつかの実施形態では、プリデコーダ（およびスケジューラ）２２０を、多数のコア１１４およびＬ１キャッシュ間で共有することも可能である。
【００２３】
コア１１４は、発行およびディスパッチ回路２３４から命令を受信することに加えて、様々な位置からデータを受信することができる。コア１１４がデータ・レジスタからデータを要求した場合、レジスタ・ファイル２４０を用いてデータを取得することができる。コア１１４がメモリ位置からデータを要求した場合、キャッシュ・ロードおよび記憶回路２５０を用いてＤ−キャッシュ２２４からデータをロードすることができる。かかるロードを実行する場合、必要なデータに対する要求をＤ−キャッシュ２２４に発行することができる。同時に、Ｄ−キャッシュ・ディレクトリ２２５をチェックして、所望のデータがＤ−キャッシュ２２４内に配置されているかを判定することができる。Ｄ−キャッシュ２２４が所望のデータを含む場合、Ｄ−キャッシュ・ディレクトリ２２５は、Ｄ−キャッシュ２２４が所望のデータを含むことを示し、その後しばらく経った後でＤ−キャッシュ・アクセスを完了することができる。Ｄ−キャッシュ２２４が所望のデータを含まない場合、Ｄ−キャッシュ・ディレクトリ２２５は、Ｄ−キャッシュ２２４が所望のデータを含まないと示すことができる。Ｄ−キャッシュ・ディレクトリ２２５には、Ｄ−キャッシュ２２４よりも迅速にアクセスすることができるので、Ｄ−キャッシュ・ディレクトリ２２５にアクセスした後であるがＤ−キャッシュ・アクセスが完了する前に、（例えばＬ２アクセス回路２１０を用いて）所望のデータに対する要求をＬ２キャッシュ１１２に発行することができる。
【００２４】
場合によっては、コア１１４においてデータを変更することがある。変更されたデータは、レジスタ・ファイルに書き込むことができ、またはメモリに記憶することができる。ライトバック（write back）回路２３８を用いて、レジスタ・ファイル２４０にデータをライトバックすることができる。時には、ライトバック回路２３８は、キャッシュ・ロードおよび記憶回路２５０を用いてＤ−キャッシュ２２４にデータをライトバックすることができる。任意に、コア１１４は、キャッシュ・ロードおよび記憶回路２５０に直接アクセスして記憶を実行することができる。場合によっては、以下に述べるように、ライトバック回路２３８を用いて、命令をＩ−キャッシュ２２２にライトバックすることも可能である。
【００２５】
上述したように、発行およびディスパッチ回路２３４を用いて、命令グループを形成し、形成した命令グループをコア１１４に発行することができる。また、発行およびディスパッチ回路２３４は、Ｉ−ラインにおける命令を回転させマージするための回路を含み、これによって適切な命令グループを形成することもできる。発行グループの形成においては、発行グループ内の命令間の依存性や、命令の順序付けによって達成可能な最適化等、いくつか考慮すべき点がある。これについては以下で更に詳細に述べる。いったん発行グループを形成すると、発行グループは並列にプロセッサ・コア１１４へとディスパッチすることができる。場合によっては、１つの命令グループは、コア１１４における各パイプラインごとに１つの命令を含むことがある。任意に、命令グループは、もっと小数の命令である場合もある。
【００２６】
カスケード遅延実行パイプライン
本発明の一実施形態によれば、１つ以上のプロセッサ・コア１１４は、カスケード遅延実行パイプライン構成を利用することができる。図３に示す例において、コア１１４は、カスケード構成の４つのパイプラインを含む。任意に、かかる構成において、もっと小数の（２つ以上のパイプライン）またはもっと多数の（５つ以上のパイプライン）を用いることも可能である。更に、図３に示すパイプラインの物理的レイアウトは例示的なものであり、必ずしもカスケード遅延実行パイプライン・ユニットの実際の物理的レイアウトを必ずしも示すものではない。
【００２７】
一実施形態において、カスケード遅延実行パイプライン構成における各パイプライン（Ｐ０、Ｐ１、Ｐ２、Ｐ３）は、実行ユニット３１０を含むことができる。実行ユニット３１０は、所与のパイプラインについて１つ以上の機能を実行するいくつかのパイプライン段を含むことができる。例えば、実行ユニット３１０は、命令のフェッチおよびデコードの全てまたは一部を実行することができる。実行ユニットによって実行されるデコードは、プリデコーダおよびスケジューラ２２０により共有することができる。このプリデコーダおよびスケジューラ２２３０は、多数のコア１１４によって共有されるか、または任意に単一のコア１１４によって利用される。また、実行ユニットは、レジスタ・ファイルからデータを読み取り、アドレスを計算し、（例えば演算論理機構またはＡＬＵを用いて）整数演算機能を実行し、浮動小数点演算機能を実行し、命令分岐を実行し、データ・アクセス機能を実行し（例えばメモリからロードおよび記憶する）、データをレジスタに（例えばレジスタ・ファイル２４０に）記憶することができる。場合によっては、コア１１４は、命令フェッチ回路２３６、レジスタ・ファイル２４０、キャッシュ・ロードおよび記憶回路２５０、およびライトバック回路、ならびに他のいずれかの回路を用いて、これらの機能を実行することができる。
【００２８】
一実施形態において、各実行ユニット３１０は同一の機能を実行することができる。任意に、各実行ユニット３１０（または異なる実行ユニット・グループ）は、異なる機能セットを実行することができる。また、場合によっては、各コア１１４における実行ユニット３１０は、他のコアに設けられた実行ユニット３１０と同一または異なるものとすることができる。例えば、１つのコアにおいて、実行ユニット３１００および３１０２がロード／記憶および演算機能を実行することができ、実行ユニット３１０１および３１０２が演算機能のみを実行することができる。
【００２９】
一実施形態において、図示したように、実行ユニット３１０における実行は、他の実行ユニット３１０に対して遅延させて行うことができる。また、図示した構成はカスケード遅延構成と称することができるが、図示したレイアウトは必ずしも実行ユニットの実際の物理的レイアウトを示すものではない。共通の発行グループ内の命令（例えば命令Ｉ０、Ｉ１、Ｉ２、およびＩ３）は、並列にパイプラインＰ０、Ｐ１、Ｐ２、Ｐ３に対して発行することができ、各命令は相互の命令に対して遅延させて実行することができる。例えば、命令Ｉ０は、パイプラインＰ０の実行ユニット３１００において最初に実行することができ、命令Ｉ１は、パイプラインＰ１の実行ユニット３１０１において２番目に実行することができる等である。
【００３０】
かかる構成において、並列に実行されるグループ内の命令をプログラム順序で発行する必要がない場合（例えばいずれかのパイプに発行し得る命令間に依存性が存在しない場合）、全ての命令グループは、先行する例について順序正しく（in order）実行するように想定される。しかしながら、他の例示的な実施形態では、複数のグループにわたって順不同（out of order）の実行も許容可能である。順不同の実行においても、カスケード遅延構成は同様の利点を提供することができる。しかしながら、場合によっては、先行するグループからのある命令がそのグループによって実行することができないと決定される場合もある。一例として、第１のグループが３つのロードを有し（プログラム順序：Ｌ１、Ｌ２、およびＬ３）、Ｌ３がＬ１に依存し、Ｌ２がいずれにも依存しないという場合がある。この例では、Ｌ１およびＬ３は共通のグループ内で発行することができる（Ｌ３の方が遅延の大きいパイプラインに発行される）が、Ｌ２は以降の発行グループにおいて「順不同」で発行することができる。
【００３１】
一実施形態においては、発行グループをプロセッサ・コア１１４に発行すると、実行ユニット３１０0においてＩ０をすぐに実行することができる。その後、実行ユニット３１００において命令Ｉ０の実行が終了した後、実行ユニット３１０１は命令Ｌ１の実行を開始することができる等となっており、コア１１４に対して並列に発行された命令は相互に遅延して実行されることになる。
【００３２】
一実施形態においては、実行ユニット３１０のいくつかは相互に遅延させることができるが、実行ユニット３１０の他のものは相互に遅延されない。第２の命令の実行が第１の命令の実行に依存する場合、転送経路３１２を用いて、第１の命令から第２の命令に結果を転送することができる。図示した転送経路３１２は例示に過ぎず、コア１１４は、実行ユニット３１０における異なる箇所から他の実行ユニット３１０まで、または同一の実行ユニット３１０まで、もっと多くの転送経路を含むことも可能である。
【００３３】
一実施形態においては、実行ユニット３１０によって実行されていない命令（例えば遅延されている命令）を、遅延キュー３２０またはターゲット遅延キュー３３０において保持することができる。遅延キュー３２０を用いて、実行ユニット３１０によってまだ実行されていない命令グループ内の命令を保持することができる。例えば、命令Ｉ０が実行ユニット３１０0において実行されている間、命令Ｉ１、Ｉ２、およびＩ３を遅延キュー３３０に保持することができる。いったん命令が遅延キュー３３０に移動すると、命令を適切な実行ユニット３１０に発行して実行することができる。ターゲット遅延キュー３３０を用いて、実行ユニット３１０によってすでに実行された命令の結果を保持することができる。場合によっては、ターゲット遅延キュー３３０内の結果を、適宜、処理のために実行ユニット３１０に転送するか、または無効にすることができる。同様に、状況によっては、以下に説明するように、遅延キュー３２０内の命令を無効にすることも可能である。
【００３４】
一実施形態において、命令グループ内の命令の各々が、遅延キュー３２０、実行ユニット３２０、およびターゲット遅延キュー３３０を通過した後、結果（例えばデータ、および以下に述べるように命令）を、レジスタ・ファイル、またはＬ１  Ｉ−キャッシュ２２２もしくはＤ−キャッシュ２２４あるいはその両方にライトバックすることができる。場合によっては、ライトバック回路２３８を用いて、（ターゲット遅延キュー３３０の１つから受信された）レジスタの最新の変更値をライトバックし、無効となった結果を捨てることができる。
【００３５】
カスケード遅延実行パイプラインの性能
図４および図５に示すように、カスケード遅延実行パイプラインの性能の効果を、従来の順序正しい実行パイプラインとの比較によって示すことができる。図４において、従来の「２発行」パイプライン構成２８０2の性能を、本発明の実施形態に従ったカスケード遅延パイプライン構成２００2と比較する。図５において、従来の「４発行」パイプライン構成２８０4の性能を、本発明の実施形態に従ったカスケード遅延パイプライン構成２００4と比較する。
【００３６】
単に例示的な目的のために、ロード記憶ユニット（ＬＳＵ）４１２および演算論理機構（ＡＬＵ）４１４のみを含む比較的簡単な構成を示す。しかしながら、様々な他のタイプの実行ユニットのカスケード遅延構成を用いて同様の性能改善を得られることは、当業者には認められよう。更に、各構成の性能については、例示的な命令発行グループ（Ｌ’−Ａ’−Ｌ’’−Ａ’’−ＳＴ−Ｌ）の実行に関連付けて考察する。このグループは、２つの依存性のロード−加算命令対（Ｌ’−Ａ’およびＬ’’−Ａ’’）、１つの依存性の記憶命令（ＳＴ）、および１つの依存性のロード命令（Ｌ）を含む。この例においては、各加算が先行するロードに依存するだけでなく、第２のロード（Ｌ’’）が第１の加算（Ａ’）の結果に依存する。
【００３７】
まず、図４に示した従来の２発行パイプライン構成２８０２を参照すると、第１のサイクルにおいて第１のロード（Ｌ’）が発行される。第１の加算（Ａ’）は第１のロードの結果に依存するので、この例ではサイクル７において結果が利用可能となるまで第１の加算は発行することができない。１サイクルで第１の加算が完了すると仮定すると、その結果に依存する第２のロード（Ｌ’’）は、次のサイクルで発行することができる。ここでも、この例ではサイクル１４で第２のロードの結果が利用可能となるまで、第２の加算（Ａ’’）は発行することができない。記憶命令は依存性でないので、同一サイクルで発行することができる。更に、第３のロード命令（Ｌ）は依存性でないので、次のサイクル（サイクル１５）で発行することができ、合計で発行サイクルは１５となる。
【００３８】
次に、図４に示す２発行遅延実行パイプライン２００２を参照すると、発行サイクルの合計数を著しく減らすことができる。図示するように、遅延構成のため、第２のパイプライン（Ｐ１）の演算論理機構（ＡＬＵ）４１２Ａは、第１のパイプライン（Ｐ０）のロード記憶ユニット（ＬＳＵ）４１２Ｌに対してパイプラインの深くに配置され、第１のロードおよび加算命令（Ｌ’−Ａ’）は、依存性にもかかわらず、同時に発行することができる。換言すると、Ａ’がＡＬＵ４１２Ａに到達するときまでに、Ｌ’の結果が利用可能となり、サイクル７で、Ａ’の実行に用いるために転送することができる。ここでも、Ａ’が１サイクルで完了すると仮定すると、Ｌ’’およびＡ’’は次のサイクルで発行することができる。以下の記憶およびロード命令は依存性でないので、それらは次のサイクルで発行することができる。従って、発行の幅を増すこともなく、カスケード遅延実行パイプライン２００２では、発行サイクルの合計数が９に減る。
【００３９】
次に、図５に示す従来の４発行パイプライン構成２８０４を参照すると、発行幅の増大（２倍）にもかかわらず、サイクル７において第１のロード（Ｌ’）の結果が利用可能となるまで、第１の加算（Ａ’）は発行不可能であることがわかる。しかしながら、第２のロード（Ｌ’’）の結果が利用可能となった後、発行幅の増大により、第２の加算（Ａ’’）ならびに依存性でない記憶およびロード命令（ＳＴおよびＬ）を同一のサイクルで発行することができる。しかしながら、結果としては、わずかな性能増大しか得られず、発行サイクルの合計数は１４に減る。
【００４０】
次に、図５に示す４発行カスケード遅延実行パイプライン２００４を参照すると、幅の広い発行グループをカスケード遅延構成と組み合わせた場合に、発行サイクルの合計数を著しく減らすことができる。図示するように、遅延構成のため、第４のパイプライン（Ｐ３）の第２の演算論理機構（ＡＬＵ）４１２Ａは、第３のパイプライン（Ｐ２）の第２のロード記憶ユニット（ＬＳＵ）４１２Ｌに対してパイプラインの深くに配置され、ロード加算対（Ｌ’−Ａ’およびＬ’’−Ａ’’）は双方とも、依存性にもかかわらず、同時に発行することができる。換言すると、Ｌ’’が第３のパイプライン（Ｐ２）のＬＳＵ４１２Ｌに到達するときまでに、Ａ’の結果が利用可能となり、Ａ’’が第４のパイプライン（Ｐ３）のＡＬＵ４１２Ａに到達するときまでに、Ａ’の結果が利用可能となる。このため、以降の記憶およびロード命令は次のサイクルで発行することができ、発行サイクル合計数は２に減る。
【００４１】
発行グループ内の命令のスケジューリング
図５は、カスケード遅延実行パイプラインにおいて実行するために、少なくともいくらかの依存性を有する命令をスケジューリングし発行するための例示的な動作５００を示す。いくつかの実施形態では、多数のプロセッサ・コア（各々がカスケード遅延実行パイプライン・ユニットを有する）間で共有されるプリデコード／スケジューラ回路において、実際のスケジューリング動作を実行することができ、プロセッサ・コア内の別個の回路によって命令のディスパッチ／発行を実行することができる。一例として、共有されるプリデコーダ／スケジューラは、発行する命令の「ウィンドウ」を調べて依存性についてチェックし、どのように（どのパイプラインに）ディスパッチ回路がグループ内の命令を発行するかを制御する１組の「発行フラグ」を発生することによって、１組のスケジューリング・ルールを適用することができる。
【００４２】
いずれの場合でも、ステップ５０２において、発行対象の命令グループを受信する。このグループは、第１の命令に依存する第２の命令を含む。ステップ５０４において、第１の実行ユニットを有する第１のパイプラインに発行するように、第１の命令をスケジューリングする。ステップ５０６において、第１の実行ユニットに対して遅延させた第２の実行ユニットを有する第２のパイプラインに発行するように、第２の命令をスケジューリングする。ステップ５０８（実行中）において、第１の命令の実行結果を、第２の命令の実行に用いるため、第２の実行ユニットに転送する。
【００４３】
命令を異なるパイプラインにスケジューリングする厳密な方法は、異なる実施形態によって変動する場合があり、少なくとも部分的に、対応するカスケード遅延パイプライン・ユニットの厳密な構成に応じたものとすることができる。一例として、発行パイプライン・ユニットの幅が広くなると、より多くの命令を並列に発行することができ、スケジューリングのためにより多くの選択肢を提供することができる。一方、パイプライン・ユニットの深さが増すと、より多くの依存性の命令を同時に発行することができる。
【００４４】
むろん、カスケード遅延パイプライン構成を利用することによって得られる全体的な性能の向上は、多数の要因に左右される。一例として、カスケード構成の発行幅が広くなる（パイプラインが増える）と、発行グループを大きくすることが可能となり、一般に、より多くの依存性の命令を同時に発行することができる。しかしながら、電力または空間コスト等の実際的な制約のため、パイプライン・ユニットの発行幅を管理可能な数に制限することが望ましい場合がある。いくつかの実施形態では、４〜６パイプラインのカスケード構成によって、許容可能なコストで良好な性能を提供することができる。また、全体の幅は、予想される命令のタイプに依存する場合があり、これによって構成内の具体的な実行ユニットが決定されることがある。
【００４５】
整数カスケード遅延実行パイプラインの例示的な実施形態
図７は、整数命令を実行するためのカスケード遅延実行パイプライン・ユニット６００の例示的な構成を示す。図示するように、このユニットは、２つのＬＳＵ６１２Ｌおよび２つのＡＬＵ６１４Ａを含む４つの実行ユニットを有する。ユニット６００によって、隣接するパイプライン間で結果を直接転送することが可能となる。いくつかの実施形態では、例えば非隣接パイプライン間の直接転送によって、いっそう複雑な転送を行うことができる。いくつかの実施形態では、ターゲット遅延キュー（ＴＤＱ）６３０からの選択的な転送を行うことも可能である。
【００４６】
図８から図１１は、図７に示したパイプライン・ユニット６００を通る４つの命令（Ｌ’−Ａ’−Ｌ’’−Ａ’’）の例示的な発行グループのフローを示す。図示するように、図８において、発行グループはユニット６００に入ることができる。第１のロード命令（Ｌ’）は、最小遅延の第１パイプライン（Ｐ０）にスケジューリングされている。この結果、グループ内の他の命令の前に（これらの他の命令は、Ｌ’が実行されている間に命令キュー６２０を下ることができる）、Ｌ’は実行される第１のＬＳＵ６１２Ｌに到達する。
【００４７】
図９に示すように、第１の加算Ａ’が第２のパイプライン（Ｐ１）の第１のＡＬＵ６１２Ａに到達する際（ちょうど間に合うように）、第１のロード（Ｌ’）の実行結果が利用可能となる。場合によっては、第２のロードは、第１の加算命令の結果に依存することがあり、例えば、オフセット（例えば第１のロードＬ’によってロードされる）を、ベース・アドレス（例えば第１の加算Ａ’のオペランド）に追加することによって、計算することができる。
【００４８】
いずれの場合でも、図１０に示すように、第２のロードＬ’’が第３のパイプライン（Ｐ２）の第２のＬＳＵ６１２Ｌに到達する際に、第１の加算（Ａ’）の実行結果が利用可能となる。最後に、図１１に示すように、第２の加算Ａ’’が第４のパイプライン（Ｐ３）の第２のＡＬＵ６１２Ａに到達する際に、第２のロード（Ｌ’’）の実行結果が利用可能となる。第１のグループ内の命令の実行結果は、以降の発行グループを実行する際のオペランドとして用いることができ、従って、（例えば直接またはＴＤＱ６３０を介して）フィード・バックすることができる。
【００４９】
図示していないが、各クロック・サイクルで新しい発行グループがパイプライン・ユニット６００に入ることができることは理解されよう。場合によっては、例えば、多数の依存性（Ｌ’−Ｌ’’−Ｌ’’’）を有する比較的珍しい命令ストリームのために、各新しい発行グループが最大数の命令（この例では４）を含まない場合があるが、本明細書に記載されるカスケード遅延構成は、依存性の命令を共通の発行グループにおいてストールなしで発行可能とすることによって、スループットを著しく改善することができる。
【００５０】
浮動小数点／ベクトル・カスケード遅延実行パイプラインの例示的な実施形態
発行グループ内の１つ以上の命令の実行を同一グループ内の別の命令の実行に対して遅延させるという、本明細書において提示するカスケード遅延実行パイプライン・ユニットの概念は、様々な異なるタイプの機能ユニットを利用した様々な異なる構成に適用することができる。更に、いくつかの実施形態では、カスケード遅延実行パイプライン・ユニットの多数の異なる構成を、同一のシステムまたは同一のチップあるいはその両方に含ませることも可能である。特定のデバイスまたはシステムと共に含ませる具体的な構成または１組の構成は、意図する用途に応じたものとすることができる。
【００５１】
上述の固定点実行パイプライン・ユニットは、ロード、記憶、および基本的なＡＬＵ動作等、完了するのに２〜３サイクルしか必要としない比較的簡単な動作を含む発行グループを、発行グループ内の依存性にもかかわらずストールなしで実行可能とする。しかしながら、浮動小数点積算／加算（ＭＡＤＤ）命令、ベクトル内積、ベクトル外積等、数サイクルを必要とすることがある比較的複雑な動作を実行する少なくともいくつかのパイプライン・ユニットを有することも一般的である。
【００５２】
市販のビデオ・ゲームに多く見られるもの等のグラフィック・コードにおいて、例えば、３Ｄシーン・データを処理して画素値を発生し、リアル感のあるスクリーン画像を生成する場合、高頻度でスカラ浮動小数点コードが存在する傾向がある。命令ストリームの一例として、ロード（Ｌ）を含み、この直後に入力としてロードに基づいた第１の積算／加算（ＭＡＤＤ）があり、この後に第１のＭＡＤＤの結果に基づいた第２のＭＡＤＤがある場合がある。換言すると、第１のＭＡＤＤはロードに依存し、第２のＭＡＤＤは第１のＭＡＤＤに依存する。第２のＭＡＤＤの後には、第２のＭＡＤＤによって発生した結果を記憶する記憶（store）がある場合がある。
【００５３】
図１２は、上述した例示的な命令ストリームに対処するカスケード遅延実行パイプライン・ユニット８００を示す。これによって、２つの依存性のＭＡＤＤ命令を単一の発行グループ内で同時に発行することを可能とする。図示するように、このユニットは４つの実行ユニットを有する。すなわち、第１のロード記憶ユニット（ＬＳＵ）８１２、２つの浮動小数点ユニットＦＰＵ８１４１および８１４２、ならびに第２のＬＳＵ８１６である。ユニット８００は、第１のパイプライン（Ｐ０）のロードの結果を第２のパイプライン（Ｐ１）の第１のＦＰＵ８１４１に直接転送し、第１のＭＡＤＤの結果を第２のＦＰＵ８１４２に直接転送することを可能とする。
【００５４】
図１３から図１６は、図１２に示したパイプライン・ユニット８００を通る４つの命令（Ｌ’−Ｍ’−Ｍ’’−Ｓ’’）の例示的な発行グループのフローを示す（Ｍ’は第１の依存性の積算／加算を表し、Ｍ’’は第１の結果に依存する第２の積算／加算を表す）。図示するように、図１３において、発行グループはユニット９００に入ることができる。ロード命令（Ｌ’）は、最小遅延の第１のパイプライン（Ｐ０）にスケジューリングされている。この結果、グループ内の他の命令の前に（これらの他の命令は、Ｌ’が実行されている間に命令キュー６２０を下ることができる）、Ｌ’は実行される第１のＬＳＵ８１２に到達する。
【００５５】
図１４に示すように、第１のＭＡＡＤ命令（Ｍ’）が到着する際に、第１のロード（Ｌ’）の実行の結果を第１のＦＰＵ８１４1に転送することができる。図１５に示すように、第２のＭＡＤＤ（Ｍ’’）が第３のパイプライン（Ｐ２）の第２のＦＰＵ８１４2にちょうど到達する時に、第１のＭＡＡＤ（Ｍ’）の結果が利用可能となる。最後に、図１６に示すように、記憶命令（Ｓ’）が第４のパイプライン（Ｐ３）の第２のＬＳＵ８１２に到達する際に、第２のＭＡＤＤ（Ｍ’’）の実行結果が利用可能となる。
【００５６】
第１のグループにおける命令の実行結果は、以降の発行グループを実行する際のオペランドとして用いることができ、従って、フィード・バックすることができ（例えば直接またはＴＤＱ６３０を介して）、またはレジスタ・ファイル・ライトバック回路に転送することができる。いくつかの実施形態では、第２のＭＡＤＤ命令の（浮動小数点）結果を、メモリに記憶する前に処理して、例えば結果をコンパクト化するすなわち圧縮することで、もっと効率的な記憶を行うことも可能である。
【００５７】
図１２に示した浮動小数点カスケード遅延実行パイプライン・ユニット８００を、図７に示した整数カスケード遅延実行パイプライン・ユニット６００と比較すると、多数の類似点および相違点を観察することができる。例えば、各々は、多数の命令キュー６２０を用いて、「遅延」パイプラインに発行されたいくつかの命令の実行を遅延させることができ、ターゲット遅延キュー６３０を用いて、「中間の」ターゲット結果を保持することができる。
【００５８】
ユニット８００のＦＰＵ８１４の深さは、ユニット６００のＡＬＵ６１２よりも著しく大きくし、これによってユニット８００の全体的なパイプライン深さを増すことができる。いくつかの実施形態では、この深さ増大によって、例えばＬ２キャッシュにアクセスする際に、いくらかの待ち時間を隠すことができる。一例として、いくつかの実施形態では、Ｌ２アクセスをパイプラインＰ２上で早期に開始して、第２のＭＡＤＤ命令についてのオペランドの１つを検索することができる。第１のＭＡＤＤ命令によって発生した他のオペランドは、ちょうどＬ２アクセスが完了した時に利用可能となり、従って効果的にＬ２アクセスの待ち時間を隠すことができる。
【００５９】
更に、転送相互接続は実質的に異なる場合がある。これは、部分的には、ロード命令が生成する結果はアドレスとして（別の命令によって）使用可能である場合があり、浮動小数点ＭＡＤＤ命令が生成する浮動小数点の結果はアドレスとして使用可能でないという事実による。ＦＰＵは、アドレスとして使用可能な結果を生成しないので、図１２に示すパイプライン相互接続方式は、実質的にもっと簡単なものである場合がある。
【００６０】
いくつかの実施形態では、順列命令によるベクトル処理等、対象とする目的のために、様々な他の構成のパイプライン・ユニットを生成することができる（例えば中間結果を以降の命令に対する入力として用いる場合）。図１７は、かかるベクトル動作に対処するカスケード遅延実行パイプライン・ユニット１０００を示す。
【００６１】
図１２に示した実行ユニットと同様、実行ユニット１０００は４つの実行ユニットを有する。これらは、第１および第２のロード記憶ユニット（ＬＳＵ）１０１２を含むが、２つのベクトル処理ユニットＦＰＵ１０１４１および１０１４２を有する。ベクトル処理ユニットは、様々なベクトル処理動作、および、場合によっては、図１２に示したＦＰＵ８１４と同様の動作、および追加の機能を実行するように構成することができる。
【００６２】
かかるベクトル動作の例は、内積または外積におけるもの等、多数（例えば３２ビットまたはそれ以上）の積算／加算を行い、結果を合計することを含む場合がある。場合によっては、いったん内積を発生すると、そこから別の内積を発生するか、またはその結果をメモリに記憶する準備においてコンパクト化する、あるいはその両方を行うことができる。いくつかの実施形態では、発生した内積を、浮動から固定に変換、スケーリング、および圧縮した後、それをメモリに記憶するか、または追加の処理のために他に送信することができる。かかる処理は、例えば、ベクトル処理ユニット１０１４内でまたはＬＳＵ１０１２において実行することができる。
【００６３】
ポリモフィズム（polymorphism）
いくつかの実施形態では、ポリモフィズムを利用して、フレキシビリティを与え、限られた処理コア・セットが様々な特徴を有する広範囲のアプリケーションに対応することを可能とする。本明細書において用いる場合、ポリモフィズムという言葉は概して、１つ以上の物理的処理コアを変形して、異なるアプリケーションのために様々に異なって見えるようにすることを指す。実行しているコードを変更することなく、処理コアの性能および挙動は変動する場合がある。
【００６４】
この文脈において、ポリモフィズムを、上述したもののようなカスケード・パイプライン構成を有する実行ユニットに適用することで、異なるアプリケーションのために異なるパイプライン実行ユニットを効果的に提示することができる。一例として、比較的幅の狭い２つの発行実行ユニットを組み合わせて、２倍の発行幅を有する単一の実行ユニットとして見せることができる。あるタイプのアプリケーション（例えば少数のスレッドを有するアプリケーション）では、幅の広い発行グループを有する少数の実行ユニットを用いることにメリットがあり、他のアプリケーション（例えば多数のスレッドを有するアプリケーション）では、幅の狭い発行グループを有する多数の実行ユニットを用いることにメリットがある。
【００６５】
様々な異なる技法を用いて、１つ以上の実行ユニットを変形する（「モーフィングする」）ことで様々に異なって見えるようにするか否かを制御することができる。これらの技法は、様々な論理コンポーネント（例えばプリデコード、発行／ディスパッチ、および異なる経路選択）を制御するビットを設定するためにソフトウェアによって（例えばアプリケーションまたはオペレーゲィング・システムによって）、命令ストリームのデコード／プリデコードによって、ハードウェアにおいて動的に（例えばあるタイプのフラグを設定して、監視された実行に基づいて発行幅を変更する）、またはそれらの組み合わせによって制御を行うことを含む場合がある。
【００６６】
命令レベル並列性（ＩＬＰ）モーフィング
モーフィングの一例は、命令レベル並列性（ＩＬＰ）モーフィングと称することができる。その基本的な概念は、比較的幅の狭い実行ユニットを組み合わせて同一命令ストリームについて発行幅の増大を得ることによって、並列性の増大を達成することである。変形を制御することにより、２つの実行ユニットを組み合わせて、あるアプリケーション（例えば比較的少ないスレッドを有するゲーム・アプリケーション）について発行幅の増大を得ることができ、または別々のままとして、より多くのスレッドに対処することができる（例えば多数のタスクを有するサーバについて）。
【００６７】
図１８は、プロセッサの物理コアを異なるアプリケーションに対して異なって見えるようにするＩＬＰモーフィングの一例を示す。図示するように、ベース・モードにおいて、２つの比較的幅の狭い処理コア１１１０は、別個に機能することができる。図示する例では、各コア１１１０は４つのパイプラインを有し、別個の命令ストリームから４つの命令発行グループを処理することができる。
【００６８】
しかしながら、処理コア１１１０をモーフィングして、連動モードにおいて単一の処理コア１１２０として見えるようにすることができる。図示するように、モーフィングした処理コア１１２０は、別々のコア１１１０の２倍の幅および２倍の深さを有するカスケード構成のパイプラインとして有効に機能する。この結果、処理コア１１２０は、単一の命令ストリームからの８つの命令を処理することができ、いくつかのアプリケーションでは、大幅に性能を向上させることができる。
【００６９】
追加のパイプラインに対処するようにコア１１２０の深さを効果的に増すため、いくつかの機構を形成して、別個のコア１１１０よりも遅延させた処理ユニットを有するパイプラインについて命令キュー（ＩＱ）の深さを増し、更に、別個のコア１１１０よりも遅延させた処理ユニットを有するパイプラインについてターゲット遅延キュー（ＴＤＱ）の深さを増さなければならない。
【００７０】
図１９に示すように、モーフィングしたコア１１２０においてＩＱおよびＴＤＱの深さを増すための１つの手法は、追加のハードウェアを設けることである。図示するように、モーフィングしたコア１１２０は、追加のＩＱ１２１０を用いて命令をバッファし、追加のＴＤＱ１２２０を用いて結果をバッファすることができる。コアが別個に機能している場合は、多数の経路および制御論理を設けて、ベース・モードにおいてこの追加した論理を効果的にバイパスすることができる。
【００７１】
図２０に示すように、追加のハードウェアを用いてモーフィングしたコア１１２０においてＩＱおよびＴＤＱの深さを実際に増すことの代替的な手法は、制御論理を用いて追加の深さに対処することである。一例として、プリデコードまたは発行／ディスパッチ回路あるいはその両方を、発行グループのタイミングを制御するように構成し、発行グループの全ての命令が同時にパイプラインを効果的に伝搬するようにすることができる。換言すると、図示する例において、８幅グループにおける第１の４つの命令（Ｉ０〜Ｉ３）を１サイクルで左半分のコアに発行することができ、第２の４つの命令（Ｉ４〜Ｉ７）を４サイクル後に発行する。ライトバック回路を同様に制御して、早い方の（左半分の）処理ユニットからの結果を効果的に保持して、ライトバックを適切に同期させることができる。
【００７２】
上述したように、様々な論理コンポーネントが同時に動作して、プロセッサ・コアのモーフィングを可能とする。例えば、プリデコード回路をフレキシブルに構成して、単一の４発行コアについてまたは連動した８発行コアについてのスケジューリングであるか否かを知らせ、それに応じてスケジューリング・フラグを設定することができる。これによって、命令をＩ−ライン・バッファに適切に配列することができる。実施形態によっては、多数のコアのためのリソースを連動させることができる。
【００７３】
例えば、図２１に示すように、プリデコード回路を効果的に共に連動させて、連動コアのために幅の広い発行グループを発生することができる。いくつかの実施形態では、命令ストリームをプリデコードして、各コアに供給する命令キャッシュに命令を適切に配列することができる。上述したように、場合によっては（追加の命令キューが実施されない場合）、この配列は、ある処理コアのＩ−キャッシュにおいて他のものに対して同一発行グループの命令をオフセットすることを伴う場合がある。例えば、１つのＩ−キャッシュの命令ポインタを、個々のコアの発行幅だけ（例えば＋４または＋８）オフセットするように制御することによって、このオフセットを実行することができる。
【００７４】
いくつかの実施形態では、単一または連動の発行幅についてスケジューリングを行うように、単一のプリデコーダを構成することができる。例えば、制御ビット（ソフトウェアまたは他において設定される）が、スケジュールしている発行幅をプリデコーダに示し、プリデコーダはそれに応じて機能することができる。例えば、実行中に適切なビットを制御論理に対して実施する。これによっていくぶん複雑さが増すことがあるが、いったん幅の広い発行グループについてのスケジューリングを達成すると、幅の狭い発行グループについてのスケジューリング論理は、基本的に同じ論理のサブセットである。
【００７５】
いずれの場合であっても、プリデコーダ（複数のプリデコーダ）からの命令ストリームは、連動コアによる実行のために、Ｉ−キャッシュの１つ以上に流れることができる。実施形態によっては、単一のＩ−キャッシュが多数の連動コアに供給することができ、または命令を連動コアのＩ−キャッシュ間で分割することができる。更に、以下でもっと詳細に説明するが、いくつかの実施形態では、あるタイプのモーフィングによって、単一の命令が多数コアの処理ユニットを制御することができる。かかる場合、命令を各Ｉ−キャッシュにおいて複製するか、または命令の一部を各々に含ませることができる。
【００７６】
処理コアを連動させるために、各コアが他のコアからデータを受信し他のコアのファイル・レジスタを更新すること、または他のコアのデータ・キャッシュに書き込むこと、あるいはその両方を可能とするように準備する。従って、図２１に示すように、追加のデータ経路（ワイヤ）を実装してこれらの更新を可能とする。正常動作またはベース（非連動）モードにおいてこれらの経路を単に用いないように、論理を実装することができる。最適に動作するために、あるコアが、同一コア内の更新と同じくらい迅速に他のコアのレジスタを更新することができるように、これらの経路を設計することができる。
【００７７】
図２２に示すように、モーフィングの考えは、２つのコアだけでなくそれ以上に拡張することができる。図示した例では、４つのコアを共にモーフィングして、４倍の発行幅を有する単一のコアを形成する。図示するように、各コアは他のコアの１つ以上においてレジスタ・ファイルを更新することができる。しかしながら、この更新に実際的な制約を課す（例えばホットな転送（hot forwards）をある命令幅内に制限する）ことによって、コア間配線の数を減らし、レイアウトを容易にすることができる。
【００７８】
物理的フロアプラン
所望の頻度で処理コア間の更新を達成するために、注意深い計画により処理コアおよびそれらのコンポーネントの物理的レイアウト（「フロアプラン」）を行って、高頻度の更新のために伝送経路を制限することができる。
【００７９】
モーフィングした実行ユニットのタイミング要件を満たす物理的レイアウトを達成するために使用可能な１つの手法は、基本的に、幅の広いモーフィングした（連動した）コアについてのタイミング要件を満たすように処理コアを設計することである。幅広の発行の場合のタイミング要件を満たすことができると、幅広の発行コアを幅の狭い別個の発行コアに有効に分割するように論理を実施することができる。この手法に従って、幅広の発行コアを半分に有効に分割することによって、物理的レイアウトが有するコンポーネントは、軸を通るミラー・イメージとすることができる。
【００８０】
図２３は、軸１５１０を中心として実質的に対称である「バタフライ型」フロアプランの一例を示す。このレイアウトは、ロード・ユニットとデータ・キャッシュとの間の待ち時間、および、処理ユニット（この例ではＡＬＵ）間の待ち時間を最小限に抑えるように設計することができる。浮動小数点ユニットを用いる実施形態では、タイミング要件はいくぶん緩く、ロード結果を浮動小数点ユニットに提供するために、余分の１サイクルまたは２サイクルが許されることが多い。
【００８１】
図示した例のフロアプランは、ＡＬＵ１５２０のクラスタを、フェッチ・データが供給される箇所（データ・キャッシュ１５３０）の近くに置くことによって、キャッシュ・フェッチとＡＬＵとの間の経路を最小限に抑えようと試みる。カスケード・パイプラインにおけるホットな転送を限定することによって、別個のコア間の境界を越えて実行しなければならない高速信号のルーティングは極めて少なくなり、ロード−加算の境界間のみとなる。更に、上述したように、処理コアからＴＬＢを除去することによって、アドレス変換に関連した頻繁な発行は除去される。
【００８２】
図示するように、命令キュー１５２２、Ｉ−キャッシュ１５２４、および命令バッファ１５２６等の他のコンポーネントも、軸１５１０を越えてミラーリングすることができる。ベース・モードにおいては、２つの命令キャッシュ半部分１５２４は別個に動作し、それらの各コアに対して完全な命令を供給することができる。しかしながら、一体化すなわち連動モードにおいては、一方の命令キャッシュは命令の半分を供給することができ、他方の命令キャッシュは他の半分を供給することができる。換言すると、デコード論理は、モーフィング・モードに応じて、Ｉ−キャッシュを２つの異なる方法でロードすることができる。すなわち、１つは、各Ｉ−キャッシュが発行グループの命令の半分を供給し、もう１つは、各Ｉ−キャッシュが発行グループ命令全体を供給する。
【００８３】
単一のＩ−キャッシュが全ての命令を連動コアに提供することができる場合でも双方のＩ−キャッシュを利用することの１つの利点は、各Ｉ−キャッシュに半分ずつ供給させることによって、１つのＩ−キャッシュが命令を他方側まで全距離にわたって供給する必要がないということである。しかしながら、いくつかの実施形態では、連動させたコアのために用いられない論理コンポーネントの電源を遮断することによって、省電力化を実現することができる。例えば、連動コアのために単一のＩ−キャッシュまたはＤ−キャッシュを用いた場合、未使用のキャッシュはパワーダウンすることができる。
【００８４】
図示した例では、（ＶＭＸ）ユニットを示す。具体的な実施形態によっては、ＶＭＸユニットは単一ユニットとして保つことができ、または、例えば軸１５１０を中心として分割することも可能である。
【００８５】
むろん、３つ以上のコアを１つにモーフィングすることができるフロアプランについて、同様の概念を適用することができる。例えば、図２４は、４つのコアを組み合わせたフロアプランを示す。図示するように、かかる４コア・アプリケーションにおいては、コンポーネントのレイアウトは、水平軸１６１０および垂直軸１６２０の双方について実質的にミラー・イメージが得られるように行うことができる。上述したものと同様の技法を用いて、異なるＩ−キャッシュ間で命令ロードを分配させるか、または単一のＩ−キャッシュが命令ストリーム全体を多数コアに供給することを可能とする。
【００８６】
ベクトル・モーフィング
モーフィングの別の例は、ベクトル・モーフィングと称することができる。その基本的な概念は、比較的幅の狭い実行ユニットを組み合わせて同一の命令ストリームについて発行幅の拡大を図ることによって、並列性の増大を達成することである。変形を制御することにより、２つ以上の実行ユニットを組み合わせて、あるアプリケーション（例えば比較的少ないスレッドを有するゲーム・アプリケーション）について発行幅の増大を得ることができ、または別々のままとして、より多くのスレッドに対処することができる（例えば多数のタスクを有するサーバについて）。
【００８７】
図２５は、プロセッサの物理コアを異なるアプリケーションに対して異なって見えるようにするベクトル・モーフィングの一例を示す。図示するように、ベース・モードにおいて、２つの比較的幅の狭い処理コア１７１０は、別個に機能することができる。図示する例では、各コア１７１０は４つのパイプラインを有し、別個の命令ストリームから４つの命令発行グループを処理することができる。
【００８８】
しかしながら、処理コア１７１０をモーフィングして、連動モードにおいて単一の処理コア１７２０として見えるようにすることができる。いくつかの実施形態では、図２５に示すように、命令キューおよびターゲット遅延キューを分流させて、別個のコア１７１０よりも大きい並列パイプライン構成を有効に提供することができる。この結果、図２６に示すもののような、いくつかの動作を用いた大きい命令（例えば６４ビット・ベクトル命令）を、単一の命令と並列に処理することができる。命令内で見出される動作は、ベクトル・ロード（ＶＬ）、ベクトル積算／加算（ＶＭＡＤＤ）、ベクトル記憶（ＶＳＴ）、分岐条件ターゲット（ＢＣＴ）、および当業者には既知の他の命令を含むことができる。
【００８９】
しかしながら、いくつかの実施形態においては、処理コア１７１０をモーフィングして、別個のコア１７１０よりも幅が広く深いカスケード・パイプライン構成として有効に機能することができる。この結果、処理コア１７２０は、単一の命令ストリームからの８以上の命令を処理することができ、これはアプリケーションによっては性能を大きく向上させることができる。
【００９０】
追加のパイプラインに対処するようにコア１７２０の深さを効果的に増すため、いくつかの機構を形成して、別個のコア１７１０よりも遅延させた処理ユニットを有するパイプラインについて命令キュー（ＩＱ）の深さを増し、更に、別個のコア１７１０よりも遅延させた処理ユニットを有するパイプラインについてターゲット遅延キュー（ＴＤＱ）の深さを増さなければならない。
【００９１】
上述したように、２つの処理コアをモーフィングすることに加えて、複数の処理コアを同時にモーフィングすることも可能である。例えば、１つのチップが４つの処理コアを有し、各処理コアが４つのパイプラインを有する場合がある。いくつかの実施形態では、４つの処理コア全ての４つのパイプライン全てをモーフィングして、共に機能させることができる。図２７は、本発明の実施形態に従った、共にモーフィングされた４つの処理コアを示す。
【００９２】
４つの処理コア全てを共にモーフィングすることができる１つの方法は、各Ｉ−キャッシュ１９２０に同一の命令ラインをロードして、４つのコア全てが全サイクルで同一の命令を見るようにすることである。前述の例を参照すると、この結果は、並列な同一の動作（例えばＬＭＡＤＤ）の１６インスタンスの性能である。これを可能とするために、１６の要素を一度にキャッシュに有し、余分の変位（例えば＋０、＋４、＋８、＋１２）を受信することで、取り込む４要素のサブセットを各コアに割り当てる（例えばコア０が要素０〜３を取り込み、コア１が要素４〜７を取り込む等）。制御論理１９３０によって、各処理コアに、取り込む４要素のサブセットを割り当てる。いくつかの実施形態では、制御論理は、プリデコード論理１９１０に結合することができる。
【００９３】
上述のように各Ｉ−キャッシュ１９２０に同一の命令ラインをロードすることにおける１つの懸念は、４つのコアの各々のＩ−キャッシュ１９２０、デコーダ、および他のハードウェアに電力を供給する際に消費されることがある不必要な電力である。これらのハードウェア・コンポーネントのいくつかは、動作には必要でない場合がある。なぜなら、１つのコアの命令は、他のコアの各々についての命令と同一だからである。例えば、ベクトル・モード構成においては、１６の積算／加算または１６のロードまたは１６の記憶を実行する１つの命令があり、各Ｉ−キャッシュは同一の命令のコピーを有する。
【００９４】
上述の電力の懸念を克服しながら４つの処理コア全てを共にモーフィングする別の方法は、１つの処理コアをマスタとして指定し、対応するＩ−キャッシュ１９２０に命令ラインをロードし、残りの３つの処理コアのＩ−キャッシュ１９２０、デコーダ、および他の未使用のハードウェアの電源を切ることである。例えば、連動コアのために単一のＩ−キャッシュまたはＤ−キャッシュを用いた場合、未使用のキャッシュの電源を切ることができる。そして、マスタ処理コアのＩ−キャッシュ１９２０から残りの処理コアの全てに、バスを敷設することができる。
【００９５】
いくつかの実施形態においては、多数のＣＰＵを共にモーフィングして、単一の処理コアのように見せることができる。図２８は、共にモーフィングされているＣＰＵ２０１０を示す。いくつかの実施形態では、多数のＣＰＵ２０１０が別個のチップ上に存在する場合がある。第１のＣＰＵ２０２０をマスタとして指定し、複数の６４ビット・バスを介して残りのＣＰＵ２０１０に命令を発行する。適切なタイミングを保証するように論理を実施することができ、様々なＣＰＵ間で命令分割を維持する。
【００９６】
図２９は、更に、様々なＣＰＵ間で適切なタイミングを維持する際に使用可能な論理を示す。共通のＩ−バッファ２１１０を用いて命令を検索し記憶した後に、命令を発行／ディスパッチ論理２１２０によってディスパッチし発行することができる。Ｉ−バッファ２１１０および発行／ディスパッチ論理２１２０は、物理的にマスタ・チップ２０２０上に配置することができる。次いで、発行した命令を命令キューに送信した後、マスタＣＰＵ２０２０およびスレーブＣＰＵ２０１０に送信する。次いで、命令は、各ＣＰＵ上の遅延論理２１３０を通って適切な命令の同期を確実とし、その後、各チップ上の処理コア２１５０の各々によって実行される。
【００９７】
前述のことは、本発明の実施形態を対象としているが、本発明の基本的な範囲から逸脱することなく、本発明の他の実施形態および更に別の実施形態も考案することができ、その範囲は特許請求の範囲によって決定される。
【符号の説明】
【００９８】
１００  システム
１０２  システム・メモリ
１０４  グラフィック処理ユニット
１０８  記憶デバイス
１１０  プロセッサ
１１２  Ｌ２キャッシュ
１１６  Ｌ１キャッシュ
１１４  プロセッサ・コア
２１０  Ｌ２アクセス回路
２２０  プリデコーダおよびスケジューラ
２３２  Ｉ−ライン・バッファ
２３４  発行およびディスパッチ回路
２３６  命令フェッチ回路
２３８  ライトバック回路
２４０  レジスタ・ファイル
２５０  キャッシュ・ロードおよび記憶回路
【図１】
2010073197.tif 000003
【図２】
2010073197.tif 000004
【図３】
2010073197.tif 000005
【図４】
2010073197.tif 000006
【図５】
2010073197.tif 000007
【図６】
2010073197.tif 000008
【図７】
2010073197.tif 000009
【図８】
2010073197.tif 000010
【図９】
2010073197.tif 000011
【図１０】
2010073197.tif 000012
【図１１】
2010073197.tif 000013
【図１２】
2010073197.tif 000014
【図１３】
2010073197.tif 000015
【図１４】
2010073197.tif 000016
【図１５】
2010073197.tif 000017
【図１６】
2010073197.tif 000018
【図１７】
2010073197.tif 000019
【図１８】
2010073197.tif 000020
【図１９】
2010073197.tif 000021
【図２０】
2010073197.tif 000022
【図２１】
2010073197.tif 000023
【図２２】
2010073197.tif 000024
【図２３】
2010073197.tif 000025
【図２４】
2010073197.tif 000026
【図２５】
2010073197.tif 000027
【図２６】
2010073197.tif 000028
【図２７】
2010073197.tif 000029
【図２８】
2010073197.tif 000030
【図２９】
2010073197.tif 000031