(57)【特許請求の範囲】
【請求項１】
メモリからプログラム順序で複数の超長命令語（複数のＶＬＩＷ）をフェッチする命令フェッチユニットであり、前記複数のＶＬＩＷのそれぞれは、縮小命令セットコンピュータ（ＲＩＳＣ）命令の複数のシラブルの間の複数のデータフローの依存性および複数の偽出力の依存性を削除する順序で、前記複数のＶＬＩＷにグループ化される前記複数のシラブルを含む、命令フェッチユニットと、
プログラム順序で前記複数のＶＬＩＷをデコードし、デコードされた各ＶＬＩＷの前記複数のシラブルを並行して出力するデコードユニットと、
他の複数のシラブルと並行して前記複数のシラブルのうちの少なくとも幾つかを実行するアウトオブオーダ実行エンジンと、を備え、
前記複数のシラブルのうちの少なくとも幾つかは、それらが前記デコードユニットから受信される前記順序と異なる順番で実行され、前記アウトオブオーダ実行エンジンは、複数のオペレーションを実行する際に、前記複数のシラブルの間の複数のデータフローの依存性および複数の偽出力の依存性のチェックをしない１または複数の処理ステージを有し、
前記アウトオブオーダ実行エンジンは、マルチプレクサおよび複数の論理レジスタオペランドコンパレータの少なくとも一方を用いないで、複数の論理レジスタオペランドを読み取るための読み取りフェーズを実装するレジスタリネーミングロジックを含む、
装置。
【請求項２】
前記アウトオブオーダ実行エンジンは、さらに、複数の機能ユニットによる実行のための前記複数のシラブルのスケジューリングに先立って複数のシラブルの間の複数の依存性を評価するスケジューラセットアップロジックを含み、前記スケジューラセットアップロジックは、前記レジスタリネーミングロジックの前記読み取りフェーズと並行して実行される、請求項１に記載の装置。
【請求項３】
前記スケジューラセットアップロジックは、さらに、特定のディスパッチされた複数のシラブルの複数の効果をキャンセルするのに前記アウトオブオーダ実行エンジンにより利用可能なキャンセルセットアップロジックと並行して各シラブル上で動作する、請求項２に記載の装置。
【請求項４】
プログラムコードを高級プログラミング言語またはパブリック命令セットアーキテクチャ（パブリックＩＳＡ）フォーマットから前記複数のＶＬＩＷおよび複数のシラブルを含むプライベートＩＳＡフォーマットに翻訳するトランスレータをさらに備える、請求項１から３のいずれか一項に記載の装置。
【請求項５】
前記トランスレータは、最適化コンパイラまたは動的バイナリトランスレータを含むバイナリトランスレータを含む、請求項４に記載の装置。
【請求項６】
前記トランスレータは、メモリから順番にフェッチされる複数のＶＬＩＷのそれぞれに含まれる前記複数のシラブルが複数のデータフローの依存性および複数の偽出力の依存性を有さないように、前記プライベートＩＳＡフォーマットに翻訳する際に複数のデータフローの依存性および複数の偽出力の依存性を取り除く、請求項５に記載の装置。
【請求項７】
前記複数のデータフローの依存性は、複数のリードアフタライト（「Ｒ−Ａ−Ｗ」）依存性を含み、前記複数の偽出力の依存性は、複数のライトアフタライト（「Ｗ−Ａ−Ｗ」）依存性を含む、請求項６に記載の装置。
【請求項８】
前記トランスレータは、ＶＬＩＷ内で複数の偽のアンチデータフロー依存性を受け入れる、請求項７に記載の装置。
【請求項９】
前記複数の偽のアンチデータフロー依存性は、ライトアフタリード（「Ｗ−Ａ−Ｒ」）依存性を含む、請求項８に記載の装置。
【請求項１０】
前記複数のシラブルは、１または複数の制御シラブル、１または複数の浮動小数点ベクトルシラブル、１または複数のメモリシラブル、および１または複数の整数ＡＬＵシラブルの任意の組み合わせを含む複数のタイプであり、各シラブルは、対応タイプのＲＩＳＣ命令により表される、請求項１から９のいずれか一項に記載の装置。
【請求項１１】
前記複数のシラブルのタイプは、ＶＬＩＷにおけるシラブルの許可された相対位置として規定される、請求項１０に記載の装置。
【請求項１２】
前記アウトオブオーダ実行エンジンは、複数のシラブルの非投機的早期ディスパッチを実行するディスパッチロジックを含む、請求項１から１１のいずれか一項に記載の装置。
【請求項１３】
前記アウトオブオーダ実行エンジンは、Ｎのパーティションを有するレジスタリネーム／割り当てユニットおよびＮのパーティションを有するスケジューラユニットを含んで、完全に仕切られる、請求項１から１２のいずれか一項に記載の装置。
【請求項１４】
前記Ｎのパーティションは、物理的に配置されて、複数の命令のうちの複数の特定のタイプを処理する、請求項１３に記載の装置。
【請求項１５】
前記スケジューラユニット内の第１パーティションは、第１タイプの実行ユニットに関連し、前記スケジューラユニット内の第２パーティションは、第２タイプの実行ユニットに関連する、請求項１４に記載の装置。
【請求項１６】
前記複数のシラブルは、複数のタイプを有し、
１つのＶＬＩＷにおける第１のタイプのシラブルの最大数は、前記アウトオブオーダ実行エンジンとロードバッファおよびストアバッファを含むメモリオーダリングバッファとの少なくとも一方のライトポートの数を減らすように制限される、請求項１３から１５のいずれか一項に記載の装置。
【請求項１７】
前記パブリックＩＳＡは、インテルアーキテクチャ（ＩＡ）を含む、請求項４に記載の装置。
【請求項１８】
プログラムコードをパブリック命令セットアーキテクチャ（ＩＳＡ）フォーマットから複数の超長命令語（複数のＶＬＩＷ）を含むプライベートＩＳＡフォーマットに翻訳するトランスレータであり、前記複数のＶＬＩＷのそれぞれは、複数のシラブルの間の複数のデータフローの依存性および複数の偽出力の依存性を削除する順序で、前記複数のＶＬＩＷにグループ化される前記複数のシラブルを含む、トランスレータと、
他の複数のシラブルと並行して前記複数のシラブルのうちの少なくとも幾つかを実行するアウトオブオーダ実行エンジンと、を備え、
前記複数のシラブルのうちの少なくとも幾つかは、それらが前記アウトオブオーダ実行エンジンにより受信される前記順序と異なる順番で実行され、前記アウトオブオーダ実行エンジンは、前記複数のシラブルを処理する際に、前記複数のシラブルの間の複数のデータフローの依存性および複数の偽出力の依存性のチェックをしない１または複数の処理ステージを有し、
前記１または複数の処理ステージのうちの少なくとも１つは、マルチプレクサまたは複数の論理レジスタオペランドコンパレータを用いないで、複数のシラブルの複数の物理レジスタオペランドを読み取るための読み取りフェーズを実装するレジスタリネーミングロジックを含む、
装置。
【請求項１９】
前記アウトオブオーダ実行エンジンは、さらに、複数の実行ユニットによる実行のための前記複数のシラブルのスケジューリングに先立って複数のシラブルの間の複数のデータフローの依存性を評価するスケジューラセットアップロジックを含み、前記スケジューラセットアップロジックは、前記レジスタリネーミングロジックの前記読み取りフェーズと並行して実行される、請求項１８に記載の装置。
【請求項２０】
前記スケジューラセットアップロジックは、さらに、特定のディスパッチされた複数のシラブルの複数の効果をキャンセルするのに前記アウトオブオーダ実行エンジンにより利用可能なキャンセルセットアップロジックと並行して各シラブル上で動作する、請求項１９に記載の装置。
【請求項２１】
前記トランスレータは、最適化コンパイラまたはバイナリトランスレータを含む、請求項１７から２０のいずれか一項に記載の装置。
【請求項２２】
前記複数のデータフローの依存性は、複数のリードアフタライト（「Ｒ−Ａ−Ｗ」）依存性を含み、前記複数の偽出力の依存性は、複数のライトアフタライト（「Ｗ−Ａ−Ｗ」）依存性を含む、請求項１７から２１のいずれか一項に記載の装置。
【請求項２３】
プログラムコードをパブリック命令セットアーキテクチャ（ＩＳＡ）フォーマットから複数の超長命令語（複数のＶＬＩＷ）を含むプライベートＩＳＡフォーマットに翻訳する段階であり、前記複数のＶＬＩＷのそれぞれは、複数のシラブルの間の複数のデータフローの依存性および複数の偽出力の依存性を削除する順序で、前記複数のＶＬＩＷにグループ化される前記複数のシラブルを含む、段階と、
他の複数のシラブルと並行して前記複数のシラブルのうちの少なくとも幾つかをアウトオブオーダ実行エンジンにより実行する段階と、を備え、
前記複数のシラブルのうちの少なくとも幾つかは、それらが前記アウトオブオーダ実行エンジンにより受信される前記順序と異なる順番で実行され、前記アウトオブオーダ実行エンジンは、前記複数のシラブルを処理する際に、前記複数のシラブルの間の複数のデータフローの依存性および複数の偽出力の依存性のチェックをしない１または複数の処理ステージを有し、
前記１または複数の処理ステージのうちの少なくとも１つは、マルチプレクサまたは複数の論理レジスタオペランドコンパレータを用いないで、複数のシラブルの複数の物理レジスタオペランドを読み取るための読み取りフェーズを実装するレジスタリネーミングロジックを含む、
方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、該して、コンピュータプロセッサの分野に関する。より詳細には、この発明は、動的アウトオブオーダプロセッサパイプラインを実装する装置および方法に関する。
【背景技術】
【０００２】
多くの主流のプロセッサは、現在、アウトオブオーダパイプライン実装のほぼ同じ高レベルの原理を共有する動的アウトオブオーダマイクロアーキテクチャに基づく。これらのプロセッサの性能、電力効率性、領域密度、及びハードウェアの拡張性の改善は、ハードウェアのみのアウトオブオーダの設計の各世代とともに、ますますより難しくなっている。
【図面の簡単な説明】
【０００３】
本発明のより良い理解は、次の図面と併せて次の詳細な説明から得られることができる。
【図１Ａ】発明の実施形態に係る典型的なインオーダパイプラインおよび典型的なレジスタリネーミングアウトオブオーダ発行／実行パイプラインを示すブロック図である。
【図１Ｂ】発明の実施形態に係るインオーダアーキテクチャコアの典型的な実施形態およびプロセッサ内に含まれる典型的なレジスタリネーミングアウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。
【図２】発明の実施形態に係るシングルコアプロセッサおよび統合メモリコントローラおよびグラフィックを有するマルチコアプロセッサのブロック図である。
【図３】本発明の一実施形態によるシステムのブロック図を示す。
【図４】本発明の実施形態による第２システムのブロック図を示す。
【図５】本発明の実施形態による第３システムのブロック図を示す。
【図６】本発明の実施形態によるシステムオンチップ（ＳｏＣ）のブロック図を示す。
【図７】発明の実施形態に係る、ソース命令セットにおけるバイナリ命令をターゲット命令セットにおけるバイナリ命令に変換するソフトウェア命令コンバータの使用を対比するブロック図を示す。
【図８】超長命令語（ＶＬＩＷ）シラブルに用いられる命令フォーマットの一実施形態を示す。
【図９】複数のシラブルを含む超長命令語（ＶＬＩＷ）の一実施形態を示す。
【図１０Ａ】従来のアウトオブオーダ（ＯＯＯ）パイプラインを示す。
【図１０Ｂ】発明の一実施形態によるＯＯＯパイプラインを示す。
【図１１Ａ】バイナリコードに隣接する複数の従来のマイクロ命令（μｏｐ）と複数のシラブルとの間の依存性を示す。
【図１１Ｂ】バイナリコードに隣接する複数の従来のマイクロ命令（μｏｐ）と複数のシラブルとの間の依存性を示す。
【図１２Ａ】従来のプロセッサにおけるレジスタリネーミングを示す。
【図１２Ｂ】発明の一実施形態において採用されるレジスタリネーミングを示す。
【図１３Ａ】従来のＯＯＯプロセッサにおけるレジスタリネーミング、スケジューラロジック、およびキャンセルロジックを示す。
【図１３Ｂ】発明の一実施形態によるＯＯＯプロセッサにおけるレジスタリネーミング、スケジューラロジック、およびキャンセルロジックを示す。
【図１４Ａ】リネーム／割り当て、スケジュール、およびディスパッチステージ間の複数のクロスバースイッチを含む従来のパイプラインを示す。
【図１４Ｂ】リネーム／割り当てステージ、スケジュールステージ、およびディスパッチステージを含む、本発明の一実施形態によるパイプラインを示す。
【図１５】デコードステージに続くプロセッサパイプラインの一実施形態を示す。
【図１６】命令の依存性に基づく命令のシーケンスの並べ替えの一実施形態を示す。
【発明を実施するための形態】
【０００４】
次の説明では、説明の目的のために、多くの特定の詳細が、以下に記載される発明の複数の実施形態の完全な理解を提供するために明らかにされる。しかし、発明の複数の実施形態はこれらの特定の詳細の一部がなくても実施されてよいことは、当業者には明らかであろう。他の複数の例において、既知の構造およびデバイスは、発明の実施形態の基礎となる原理を分かりにくくしないようにブロック図形式で示される。
【０００５】
典型的なプロセッサアーキテクチャおよびデータタイプ
図１Ａは、発明の実施形態に係る典型的なインオーダパイプラインおよび典型的なレジスタリネーミングアウトオブオーダ発行／実行パイプラインを示すブロック図である。図１Ｂは、発明の実施形態に係るインオーダアーキテクチャコアの典型的な実施形態およびプロセッサ内に含まれる典型的なレジスタリネーミングアウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。  図１Ａ及び図１Ｂ内の実線のボックスはインオーダパイプラインおよびインオーダコアを示すとともに、破線のボックスの任意の追加は、レジスタリネーミングアウトオブオーダ発行／実行パイプラインおよびコアを示す。インオーダの態様がアウトオブオーダの態様のサブセットであるとすると、アウトオブオーダの態様が記載されるであろう。
【０００６】
図１Ａにおいて、プロセッサパイプライン１００は、フェッチステージ１０２、レングスデコードステージ１０４、デコードステージ１０６、割り当てステージ１０８、リネーミングステージ１１０、スケジューリング（ディスパッチ又は発行としても知られる）ステージ１１２、レジスタ読み出し／メモリ読み出しステージ１１４、実行ステージ１１６、ライトバック／メモリ書き込みステージ１１８、例外ハンドリングステージ１２２、およびコミットステージ１２４を含む。
【０００７】
図１Ｂは、実行エンジンユニット１５０に連結されるフロントエンドユニット１３０を含むプロセッサコア１９０を示し、両方がメモリユニット１７０に連結される。コア１９０は、縮小命令セットコンピュータ（ＲＩＳＣ）コア、複合命令セットコンピュータ（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、又はハイブリッドまたは代替例コアタイプであってよい。さらに別のオプションとして、コア１９０は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピュータグラフィックプロセッシングユニット（ＧＰＧＰＵ）コア、グラフィックコアなどのような特定の目的のコアであってよい。
【０００８】
フロントエンドユニット１３０は、命令キャッシュユニット１３４に連結される分岐予測ユニット１３２を含む。命令キャッシュユニット１３４は、命令変換索引バッファ（ＴＬＢ）１３６に連結される。ＴＬＢ１３６は、命令フェッチユニット１３８に連結される。命令フェッチユニット１３８は、デコードユニット１４０に連結される。デコードユニット１４０（またはデコーダ）は、複数の命令をデコードし、出力として、１または複数のマイクロオペレーション、複数のマイクロコードエントリポイント、複数のマイクロ命令、その他の複数の命令、または元の複数の命令からデコードされる、そうでなければそれらを反映する、またはそれらから導出されるその他の複数の制御信号を生成してよい。デコードユニット１４０は、様々な異なるメカニズムを用いて実装されてよい。適当なメカニズムの例は、これに限定されるものではないが、複数のルックアップテーブル、複数のハードウェア実装、複数のプログラマブルロジックアレイ（ＰＬＡ）、複数のマイクロコードリードオンリメモリ（ＲＯＭ）などを含む。一実施形態では、コア１９０は、特定の複数のマイクロ命令のマイクロコードを（例えば、デコードユニット１４０内に、そうでなければフロントエンドユニット１３０内に）格納するマイクロコードＲＯＭまたは他のメディアを含む。デコードユニット１４０は、実行エンジンユニット１５０内でリネーム／割り当てユニット１５２に連結される。
【０００９】
実行エンジンユニット１５０は、リタイアメントユニット１５４および１または複数のスケジューラユニット１５６のセットに連結されたリネーム／割り当てユニット１５２を含む。スケジューラユニット１５６は、複数の予約ステーション、中央の命令ウィンドウなどを含む任意の数の異なるスケジューラを表す。スケジューラユニット１５６は、物理レジスタファイルユニット１５８に連結される。複数の物理レジスタファイルユニット１５８のそれぞれは、１または複数の物理レジスタファイル、スカラー整数、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行される次の命令のアドレスである命令ポインタ）などのような１または複数の異なるデータタイプを格納する異なるものを表す。一実施形態では、物理レジスタファイルユニット１５８は、ベクトルレジスタユニット、ライトマスクレジスタユニット、およびスカラーレジスタユニットを備える。これらのレジスタユニットは、複数のアーキテクチャベクトルレジスタ、複数のベクトルマスクレジスタ、及び複数の汎用レジスタを提供してよい。物理レジスタファイルユニット１５８は、リタイアメントユニット１５４により重ねられて、（例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いて、将来のファイル、ヒストリバッファ、及びリタイアメントレジスタファイルを用いて、レジスタマップおよび複数のレジスタのプールを用いるなど）レジスタリネーミングおよびアウトオブオーダ実行が実装されてよい様々な方法を示す。リタイアメントユニット１５４および物理レジスタファイルユニット１５８は、実行クラスタ１６０に連結される。実行クラスタ１６０は、１または複数の実行ユニット１６２のセットおよび１または複数のメモリアクセスユニット１６４のセットを含む。実行ユニット１６２は、様々なオペレーション（例えば、シフト、加算、減算、乗算）を様々なタイプのデータ（例えば、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）について実行してよい。幾つかの実施形態は、特定の複数の機能または複数の機能の複数のセットに専用の多くの実行ユニットを含んでよいとともに、他の実施形態は、すべての機能をすべて実行する実行ユニットの１つのみ又は複数の実行ユニットを含んでよい。特定の実施形態は、特定のタイプのデータ／複数のオペレーションに対する別個のパイプラインを生成するので（例えば、それら自体のスケジューラユニットをそれぞれ有するスカラー整数パイプライン、スカラー浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、および／またはメモリアクセスパイプライン、物理レジスタファイルユニット、および／または実行クラスタ。別個のメモリアクセスパイプラインの場合、特定の実施形態は、このパイプラインの実行クラスタのみがメモリアクセスユニット１６４を有するように実装される。）、スケジューラユニット１５６、物理レジスタファイルユニット１５８、及び実行クラスタ１６０は、場合により、複数あるように示される。別個のパイプラインが用いられる場合、これらのパイプラインのうちの１または複数がアウトオブオーダ発行／実行され、残りがインオーダ発行／実行されてよいことは、理解されるべきでもある。
【００１０】
複数のメモリアクセスユニット１６４のセットは、メモリユニット１７０に連結される。メモリユニット１７０は、データＴＬＢユニット１７２を含む。データＴＬＢユニット１７２は、データキャッシュユニット１７４に連結される。データキャッシュユニット１７４は、レベル２（Ｌ２）キャッシュユニット１７６に連結される。一例示的な実施形態では、複数のメモリアクセスユニット１６４は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含んでよく、それぞれがメモリユニット１７０内のデータＴＬＢユニット１７２に連結される。命令キャッシュユニット１３４は、さらに、メモリユニット１７０内のレベル２（Ｌ２）キャッシュユニット１７６に連結される。Ｌ２キャッシュユニット１７６は、１または複数の他のレベルのキャッシュおよび最終的にはメインメモリに連結される。
【００１１】
例として、典型的なレジスタリネーミングアウトオブオーダ発行／実行コアアーキテクチャは、次のようにパイプライン１００を実装してよい。１）命令フェッチ１３８が、フェッチおよびレングスデコーディングステージ１０２および１０４を実行する。２）デコードユニット１４０が、デコードステージ１０６を実行する。３）リネーム／割り当てユニット１５２が、割り当てステージ１０８およびリネーミングステージ１１０を実行する。４）スケジューラユニット１５６が、スケジュールステージ１１２を実行する。５）物理レジスタファイルユニット１５８およびメモリユニット１７０が、レジスタ読み出し／メモリ読み出しステージ１１４を実行する。実行クラスタ１６０が、実行ステージ１１６を実行する。６）メモリユニット１７０および物理レジスタファイルユニット１５８が、ライトバック／メモリ書き込みステージ１１８を実行する。７）様々なユニットが、例外ハンドリングステージ１２２に関与されてよい。８）リタイアメントユニット１５４および物理レジスタファイルユニット１５８が、コミットステージ１２４を実行する。
【００１２】
コア１９０は、ここに記載される命令を含め、１または複数の命令セット（例えば、ｘ８６命令セット（より新しい複数のバージョンに追加された幾つかの拡張を有する））、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令、カリフォルニア州サニーベールのＡＲＭホールディングスのＡＲＭ命令セット（ＮＥＯＮのようなオプション追加の複数の拡張を有する））をサポートしてよい。一実施形態では、コア１９０は、パックドデータ命令セットの拡張（例えば、ＡＶＸ１、ＡＶＸ２、および／または後述する一般的なベクトルフレンドリな命令フォーマット（Ｕ＝０および／またはＵ＝１）の幾つかの形式）をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションにより用いられる複数のオペレーションをパックドデータを用いて実行されるようにする。
【００１３】
コアは、マルチスレッド（オペレーション又はスレッドの２またはそれより多いパラレルセットを実行）をサポートしてよいし、時間スライスされたマルチスレッド、同時マルチスレッド（ただし、単一物理コアは、物理コアが同時にマルチスレッドする複数のスレッドのそれぞれに対してロジックコアを提供する）、またはそれらの組み合わせ（例えば、インテルハイパースレッド技術におけるような時間スライスされたフェッチおよびデコードおよびそのあとの同時マルチスレッド）を含む様々な方法においてそうしてよいことが理解されるべきである。
【００１４】
レジスタリネーミングがアウトオブオーダ実行の状況において記載される限り、レジスタリネーミングがインオーダアーキテクチャにおいて用いられてよいことが理解されるべきである。プロセッサの示された実施形態が、別個の命令およびデータキャッシュユニット１３４／１７４および共有Ｌ２キャッシュユニット１７６も含むのに対して、代替的な実施形態は、例えばレベル１（Ｌ１）内部キャッシュまたは複数レベルの内部キャッシュのような命令およびデータの両方に対する単一の内部キャッシュを有してよい。幾つかの実施形態では、システムは、内部キャッシュおよびコアおよび／またはプロセッサの外部にある外部キャッシュの組み合わせを含んでよい。代わりに、キャッシュのすべては、コアおよび／またはプロセッサの外部にあってよい。
【００１５】
図２は、発明の実施形態に係る、１より多いコアを有してよく、統合メモリコントローラを有してよく、また統合グラフィクスを有してよいプロセッサ２００のブロック図である。図２における実線のボックスは、シングルコア２０２Ａ、システムエージェント２１０、および１または複数のバスコントローラユニット２１６のセットを有するプロセッサ２００を示すとともに、任意に追加の破線のボックスは、複数のコア２０２Ａ−Ｎ、システムエージェントユニット２１０内の１または複数の統合メモリコントローラユニット２１４のセット、および専用ロジック２０８を有する代替例のプロセッサ２００を示す。
【００１６】
従って、プロセッサ２００の異なる実装は、１）統合グラフィクスおよび／または科学（スループット）ロジックである専用ロジック２０８を有するＣＰＵ（１または複数のコアを含んでよい）、および１または複数の汎用コアであるコア２０２Ａ−Ｎ（例えば、汎用インオーダコア、汎用アウトオブオーダコア、２つの組み合わせ）、２）グラフィックおよび／または科学（スループット）を主に意図する多数の専用コアであるコア２０２Ａ−Ｎを有するコプロセッサ、および３）多数の汎用インオーダコアであるコア２０２Ａ−Ｎを有するコプロセッサを含んでよい。従って、プロセッサ２００は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ（汎用グラフィック処理ユニット）、高スループット多集積コア（ＭＩＣ）コプロセッサ（３０またはそれより多いコアを含む）、組み込みプロセッサなどのような汎用プロセッサ、コプロセッサ、または専用プロセッサであってよい。プロセッサは、１または複数のチップ上に実装されてよい。プロセッサ２００は、１または複数の基板の一部であってよいし、および／または、例えばＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳのような多くの処理技術のうちのいずれを用いてそれらの上に実装されてよい。
【００１７】
メモリ階層は、複数の統合メモリコントローラユニット２１４のセットに連結される複数のコア、セットまたは１または複数の共有キャッシュユニット２０６、および外部メモリ（不図示）内に１または複数のレベルのキャッシュを含む。共有キャッシュユニット２０６のセットは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、または他のレベルのキャッシュ、最後のレベルのキャッシュ（ＬＬＣ）、および／またはそれらの組み合わせのような１または複数の中間レベルキャッシュを含んでよい。一実施形態では、リングベースの相互接続ユニット２１２は、統合グラフィクスロジック２０８、共有キャッシュユニット２０６のセット、およびシステムエージェントユニット２１０／統合メモリコントローラユニット２１４を相互接続するのに対して、代替的な実施形態は、そのような複数のユニットを相互接続する任意の数の既知の技術を用いてよい。一実施形態では、一貫性が、１または複数のキャッシュユニット２０６および複数のコア２０２Ａ−Ｎの間で維持される。
【００１８】
幾つかの実施形態では、１または複数のコア２０２Ａ−Ｎはマルチスレッドすることができる。システムエージェント２１０は、コア２０２Ａ−Ｎを調整および操作するそれらの複数のコンポーネントを含む。システムエージェントユニット２１０は、例えば、電力制御ユニット（ＰＣＵ）および表示ユニットを含んでよい。ＰＣＵは、コア２０２Ａ−Ｎおよび統合グラフィクスロジック２０８の電力状態をレギュレートするのに必要なロジックおよび複数のコンポーネントであってもまたは含んでもよい。表示ユニットは、１または複数の外部接続されたディスプレイを駆動するためのものである。
【００１９】
複数のコア２０２Ａ−Ｎは、アーキテクチャ命令セットの面で同種または異種であってよい。すなわち、コア２０２Ａ−Ｎのうちの２またはそれより多いコアは同じ命令セットを実行できてよく、その他はその命令セットまたは異なる命令セットのサブセットのみを実行できてよい。一実施形態では、複数のコア２０２Ａ−Ｎは、異種であり、後述する複数の「小さい」コアおよび複数の「大きい」コアの両方を含む。
【００２０】
図３から図６は、典型的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、携帯用情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスの技術分野において既知の他のシステム設計及び構成も適当である。一般的に、ここに開示されるようなプロセッサおよび／または他の実行ロジックを組み込むことができる様々なシステムまたは電子デバイスが一般に適当である。
【００２１】
ここで図３を参照すると、本発明の一実施形態によるシステム３００のブロック図が示される。システム３００は、コントローラハブ３２０に連結される１または複数のプロセッサ３１０、３１５を含んでよい。一実施形態では、コントローラハブ３２０は、グラフィックスメモリコントローラハブ（ＧＭＣＨ）３９０および入出力ハブ（ＩＯＨ）３５０（別個の複数のチップ上にあってよい）を含む。ＧＭＣＨ３９０は、メモリ３４０およびコプロセッサ３４５に連結されるメモリおよびグラフィクスコントローラを含む。ＩＯＨ３５０は、入出力（Ｉ／Ｏ）デバイス３６０をＧＭＣＨ３９０に接続する。代わりに、メモリおよびグラフィクスコントローラのうちの１つまたは両方は、プロセッサに（ここに記載されるように）集積され、メモリ３４０およびコプロセッサ３４５は、ＩＯＨ３５０を有する単一チップ内でプロセッサ３１０およびコントローラハブ３２０に直接連結される。
【００２２】
複数の追加のプロセッサ３１５の任意の特性は、破線を用いて図３内に示される。各プロセッサ３１０、３１５は、ここに記載される処理コアの１または複数を含んでよく、またプロセッサ２００の幾つかのバージョンであってよい。
【００２３】
メモリ３４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、または２つの組み合わせであってよい。少なくとも一実施形態に対して、コントローラハブ３２０は、フロントサイドバス（ＦＳＢ）のようなマルチドロップバス、ＱｕｉｃｋＰａｔｈインターコネクト（ＱＰＩ）のようなポイントツーポイントインターフェース、または同様の接続３９５を介してプロセッサ３１０、３１５と通信する。
【００２４】
一実施形態では、コプロセッサ３４５は、例えば、高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサなどのような専用プロセッサである。一実施形態では、コントローラハブ３２０は、統合グラフィクスアクセラレータを含んでよい。
【００２５】
アーキテクチャ、マイクロアーキテクチャ、熱、電力消費特性などを含むメリットメトリクスの範囲の観点において、物理リソース３１０、３１５の間に様々な差があるはずである。
【００２６】
一実施形態では、プロセッサ３１０は、一般タイプのデータ処理オペレーションを制御する複数の命令を実行する。複数のコプロセッサ命令は、複数の命令内に組み込まれてよい。プロセッサ３１０は、これらのコプロセッサ命令を、付属のコプロセッサ３４５により実行されるべきタイプとして認識する。従って、プロセッサ３１０は、これらのコプロセッサ命令（または複数のコプロセッサ命令を表す複数の制御信号）を、コプロセッサバスまたは他の相互接続上でコプロセッサ３４５に発する。コプロセッサ３４５は、受信した複数のコプロセッサ命令を受け入れて実行する。
【００２７】
ここで図４を参照すると、本発明の実施形態による、第１のより具体的な典型的なシステム４００のブロック図を示す。図４に示されるように、マイクロプロセッサシステム４００は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続４５０を介して連結された第１のプロセッサ４７０および第２のプロセッサ４８０を含む。プロセッサ４７０および４８０のそれぞれは、プロセッサ２００の幾つかのバージョンであってよい。発明の一実施形態では、プロセッサ４７０および４８０はそれぞれプロセッサ３１０および３１５であり、コプロセッサ４３８はコプロセッサ３４５である。別の実施形態では、プロセッサ４７０および４８０は、それぞれ、プロセッサ３１０およびコプロセッサ３４５である。
【００２８】
プロセッサ４７０および４８０は、それぞれ統合メモリコントローラ（ＩＭＣ）ユニット４７２および４８２を含めて示されている。プロセッサ４７０は、その複数のバスコントローラユニットの一部として、ポイントツーポイント（Ｐ−Ｐ）インターフェース４７６および４７８も含む。同様に、第２のプロセッサ４８０は、Ｐ−Ｐインターフェース４８６および４８８を含む。プロセッサ４７０、４８０は、ポイントツーポイント（Ｐ−Ｐ）インターフェース４５０を介して、Ｐ−Ｐインターフェース回路４７８、４８８を用いて情報を交換してよい。図４に示されるように、ＩＭＣ４７２および４８２は、複数のプロセッサをそれぞれメモリ、すなわちそれぞれのプロセッサにローカルに付属するメインメモリの一部であってよいメモリ４３２およびメモリ４３４に接続する。
【００２９】
プロセッサ４７０、４８０は、それぞれ、ポイントツーポイントインターフェース回路４７６、４９４、４８６、４９８を用いて、個々のＰ−Ｐインターフェース４５２、４５４を介してチップセット４９０と情報を交換してよい。チップセット４９０は、必要に応じて、高性能インターフェース４３９を介してコプロセッサ４３８と情報を交換してよい。一実施形態では、例えば、高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサなどのようなコプロセッサ４３８は、専用プロセッサである。
【００３０】
共有キャッシュ（不図示）は、どちらかのプロセッサまたは両方のプロセッサの外部に含まれ、さらにＰ−Ｐ相互接続を介して複数のプロセッサに接続され、それにより、プロセッサが低電力モードに配置されると、どちらかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納されてよい。
【００３１】
チップセット４９０は、インターフェース４９６を介して、第１のバス４１６に連結されてよい。一実施形態では、第１のバス４１６は、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）バス、またはＰＣＩエクスプレスバスまたは別の第３世代Ｉ／Ｏ相互接続バスのようなバス、であってよいが、本発明の範囲はこれに限定されるものではない。
【００３２】
図４に示すように、様々なＩ／Ｏデバイス４１４は、第１のバス４１６を第２のバス４２０に接続するバスブリッジ４１８とともに、第１のバス４１６に連結されてよい。一実施形態では、複数のコプロセッサ、複数の高スループットＭＩＣプロセッサ、ＧＰＧＰＵの複数のアクセラレータ（例えば、複数のグラフィックアクセラレータまたは複数のデジタル信号処理（ＤＳＰ）ユニット）、複数のフィールドプログラマブルゲートアレイ、またはいずれの他のプロセッサのような１または複数の追加のプロセッサ４１５は、第１のバス４１６に連結される。一実施形態では、第２のバス４２０は、ローピンカウント（ＬＰＣ）バスであってよい。一実施形態では、様々なデバイスは、例えば、キーボードおよび／またはマウス４２２、複数の通信デバイス４２７、および命令／コードおよびデータ４３０を含んでよいディスクドライブまたは他の大容量ストレージデバイスのようなストレージユニット４２８を含めて、第２のバス４２０に連結されてよい。さらに、オーディオＩ／Ｏ  ４２４は、第２のバス４２０に連結されてよい。なお、他のアーキテクチャも可能である。例えば、図４のポイントツーポイントアーキテクチャに代えて、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装してよい。
【００３３】
ここで図５を参照すると、本発明の実施形態による第２のより具体的な典型的なシステム５００のブロック図が示される。図４および図５における同じ要素は同じ参照番号を与え、図４の特定の態様は、図５の他の態様を分かりにくくしないように図５から省略されている。
【００３４】
図５は、プロセッサ４７０、４８０が、統合メモリおよびそれぞれＩ／Ｏの制御ロジック（「ＣＬ」）４７２および４８２を含んでよいことを示す。従って、ＣＬ４７２、４８２は、複数の統合メモリコントローラユニットを含み、Ｉ／Ｏの制御ロジックを含む。図５は、メモリ４３２、４３４がＣＬ４７２、４８２に連結されるだけでなく、Ｉ／Ｏデバイス５１４も制御ロジック４７２、４８２に連結されることも示す。複数のレガシＩ／Ｏデバイス５１５は、チップセット４９０に連結される。
【００３５】
ここで図６を参照すると、本発明の実施形態によるＳｏＣ６００のブロック図が示される。図２内の同様の要素は、同じ参照番号を与える。また、破線のボックスは、より高度なＳｏＣの任意の特徴である。図６において、相互接続ユニット６０２は、１または複数のコア５０２Ａ−Ｎおよび共有キャッシュユニット５０６のセットを含むアプリケーションプロセッサ６１０、システムエージェントユニット５１０、バスコントローラユニット５１６、統合メモリコントローラユニット５１４、統合グラフィクスロジックを含んでよい１または複数のコプロセッサ６２０のセット、イメージプロセッサ、オーディオプロセッサ、およびビデオプロセッサ、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット６３０、ダイレクトメモリアクセス（ＤＭＡ）ユニット６３２、および１または複数の外部ディスプレイに連結するための表示ユニット６４０、に連結される。一実施形態では、コプロセッサ６２０は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、組み込みプロセッサなどのような専用プロセッサを含む。
【００３６】
ここに開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような複数の実装アプローチの組み合わせにおいて実装されてよい。発明の実施形態は、少なくとも１つのプロセッサ、ストレージシステム（揮発性および不揮発性メモリおよび／またはストレージ要素を含む）、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを備える複数のプログラマブルシステム上で実行する複数のコンピュータプログラムまたはプログラムコードとして実装されてよい。
【００３７】
図４に示されるコード４３０のようなプログラムコードは、ここに記載の複数の機能を実行し、出力情報を生成する複数の命令を入力するために適用されてよい。出力情報は、１または複数の出力デバイスに既知の方法で適用されてよい。このアプリケーションの目的のために、処理システムは、例えば、デジタルシグナルプロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、またはマイクロプロセッサのようなプロセッサを有するいずれのシステムを含む。
【００３８】
プログラムコードは、処理システムと通信するために、高級手続型またはオブジェクト指向型プログラミング言語において実装されてよい。プログラムコードは、必要に応じて、アセンブリまたは機械言語において実装されてもよい。実際、ここに記載の複数のメカニズムは、いずれの特定のプログラミング言語の範囲に限定されるものではない。いずれの場合において、言語は、コンパイル型またはインタプリタ型言語であってよい。
【００３９】
少なくとも１つの実施形態の１または複数の態様は、機械により読み込まれると、機械に、ここに記載の技術を実行するロジックを組み立てさせるプロセッサ内の様々なロジックを表す、機械可読媒体上に格納された典型的な複数の命令により実装されてよい。「ＩＰコア」として知られるそのような表現は、実際にロジックまたはプロセッサを製造する複数の製造機械にロードするために、有形の機械可読媒体上に格納されて、様々な顧客または製造施設に供給されてよい。
【００４０】
そのような機械可読記憶媒体は、これらに限定されないが、ハードディスク、フロッピー（登録商標）ディスクを含む他のタイプのディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、コンパクトディスクリライタブル（ＣＤ−ＲＷ）、及び磁気光ディスクのようなストレージメディア、リードオンリメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）のようなランダムアクセスメモリ（ＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）、磁気または光カードのような半導体デバイス、または電子命令を格納するのに好適ないずれの他のタイプのメディアを含む、機械またはデバイスにより製造または形成される複数の物品の非一時的で有形の装置を含んでよい。
【００４１】
従って、発明の実施形態は、複数の命令を含む、またはここに記載の構造、回路、装置、プロセッサ、および／またはシステム特徴を規定するハードウェア記述言語（ＨＤＬ）のような設計データを含む非一時的な有形の機械可読メディアも含む。そのような実施形態は、プログラム製品と呼ばれてもよい。
【００４２】
幾つかの場合では、命令コンバータは、ソース命令セットからの命令をターゲット命令セットに変換するために用いられてよい。例えば、命令コンバータは、命令を、コアにより処理される１または複数の他の命令に翻訳（例えば、静的バイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを用いて）、モーフィング、エミュレート、そうでなければ変換してよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせにおいて実装されてよい。命令コンバータは、プロセッサ上に、プロセッサ外に、または一部がプロセッサ上に、一部がプロセッサ外にあってよい。
【００４３】
図７は、発明の実施形態に係る、ソース命令セットにおけるバイナリ命令をターゲット命令セットにおけるバイナリ命令に変換するソフトウェア命令コンバータの使用を対比するブロック図である。示された実施形態では、命令コンバータは、ソフトウェア命令コンバータであるが、代わりに、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはそれらの様々な組み合わせにおいて実装されてよい。図７は、高級言語７０２におけるプログラムが、ｘ８６コンパイラ７０４を用いてコンパイルされて、少なくとも１つのｘ８６命令セットコア７１６を用いて、プロセッサにより、本来的に実行されてよいｘ８６バイナリコード７０６を生成してよいことを示す。少なくとも１つのｘ８６命令セットコア７１６を有するプロセッサは、互換実行する、そうでなければ、少なくとも１つのｘ８６命令セットコアを用いるＩｎｔｅｌプロセッサと実質的に同じ結果を達成するよう、（１）インテルｘ８６命令セットコアの命令セットの相当の部分、または（２）少なくとも１つのｘ８６命令セットコアを用いてＩｎｔｅｌプロセッサ上で実行することを目標とされたアプリケーションまたは他のソフトウェアのオブジェクトコードのバージョンを処理することにより、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサと同じ機能を実質的に実行できるいずれのプロセッサを表す。ｘ８６コンパイラ７０４は、追加のリンケージ処理を用いてまたは用いないで、少なくとも１つのｘ８６命令セットコア７１６を有するプロセッサ上で実行されることができるｘ８６バイナリコード７０６（例えば、オブジェクトコード）を生成するよう動作可能なコンパイラを表す。同様に、図７は、高級言語７０２におけるプログラムが、代替の命令セットコンパイラ７０８を用いてコンパイルされて、少なくとも１つのｘ８６命令セットコア７１４を用いないでプロセッサ（例えば、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令セットを実行する、および／またはカリフォルニア州サニーベールのＡＲＭホールディングスのＡＲＭ命令セットを実行する複数のコアを有するプロセッサ）により本来的に実行されてよい代替の命令セットバイナリコード７１０を生成してよいことを示す。
【００４４】
命令コンバータ７１２は、ｘ８６バイナリコード７０６を、ｘ８６命令セットコア７１４を用いないで、プロセッサにより本来的に実行されてよい代替の命令セットバイナリコード７１１に変換するために用いられる。この変換されたコードは、代替の命令セットコンパイラ７０８から得られる代替の命令セットバイナリコード７１０と同じであってもなくてもよい。しかし、変換されたコードは、同じ一般的なオペレーションを遂行し、代替の命令セットからの複数の命令から構成される。従って、命令コンバータ７１２は、エミュレーション、シミュレーション、またはいずれの他の処理を通じて、プロセッサまたはｘ８６命令セットプロセッサまたはコアを有さない他の電子デバイスに、ｘ８６バイナリコード７０６を実行させるソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表す。
【００４５】
実装するための装置および方法
動的アウトオブオーダプロセッサパイプライン
発明の一実施形態は、数々の方法で、既存のアウトオブオーダおよびインオーダＶＬＩＷプロセッサ実装の制限に取り組む動的アウトオブオーダパイプラインの最適化された実装を含む。ハードウェアの改善は、特別に規定された（例えば、プライベート）命令セットアーキテクチャ（ＩＳＡ）特徴およびＩＳＡ（図７参照）の最適化コンパイラ７０８またはバイナリトランスレータ（例えば、コンバータ７１２）であってよいコデザインソフトウェアオプティマイザの助けを借りて実現される。意味深いことに、新しい最適化ハードウェアパイプラインは、ハードウェアにおける動的アウトオブオーダ実行の基本原理のすべてを維持および増進する。発明の実施形態が可能にする１つの使いの価値ある特徴は、ワイド発行アウトオブオーダプロセッサの設計に対して十分に改善されたハードウェアの拡張性である。
【００４６】
後述の幾つかの実施形態は、あらゆる従来のＩＳＡ（例えば、インテルアーキテクチャ（ＩＡ）のような）をサポートする従来のアウトオブオーダパイプラインが、ＩＳＡにおけるすべての有効なコードシーケンスのハードウェアによる正しいスーパースカラ実行を保証しなければならないという所見に基づいて設計される。しかし、アウトオブオーダマイクロアーキテクチャが、超長命令語（ＶＬＩＷ）ＩＳＡにおける複数の制限の幾つかと同様の、ハードウェア実行に対して許可された複数のコードシーケンス上の特定の複数の制限を規定する新しい縮小命令セットコンピュータ（ＲＩＳＣ）のようなＩＳＡに対して設計されると、アウトオブオーダパイプラインハードウェアの実装が多くの方法において実質的に最適化されることができる。
【００４７】
特定の最適化は、密接に関連するＩＳＡ依存またはＩＳＡ派生発明のパッケージとして、この特許出願に記載される。新しいＩＳＡは、プライベートまたはパブリックのいずれかであり得る。動的バイナリトランスレーション（ｄＢＴ）技術は、任意に、既存の複数のバイナリコード（例えば、ＩＡ）から新しいプライベートＩＳＡに翻訳するために使われ、既存のソフトウェアを用いて完全なバイナリ互換性を可能にする。図７において、例えば、ｄＢＴ技術は、命令コンバータ７１２により実装されて、ｘ８６バイナリコード７０６をここに記載のプロセッサアーキテクチャ上で実行するのに適した本来のバイナリコードに変換してよい。代わりに、図７内のコンパイラ７０８のような新しいパブリックＩＳＡへの最適化コンパイラは、複数の実行可能なバイナリ７１０を生成するために用いられてよい。
【００４８】
意味深いことに、一実施形態では、新しい複数のハードウェア最適化は、アウトオブオーダパイプラインの複数の基本原理を、その実装のみを除いて変えない。そのように、最適化パイプラインは、複数の命令の従来の概念的フロー（複数の命令のインオーダスーパースカラフェッチおよび割り当て、動的データフロースケジューリングエンジン（アウトオブオーダ）、および複数の命令のインオーダスーパースカラリタイアメント）を反映する。この両方は、ハードウェア実現可能性を保証し、広範な汎用ソフトウェアアプリケーションにわたる高性能の期待にマッチするのに役立つ。
【００４９】
発明の記載された実施形態は、スーパースカラアウトオブオーダパイプライン実装における十分な数のハードウェア最適化（簡素化、低減、増進）を考慮する。次の特徴は、これらの実施形態により実装される。
インオーダプロセッサのフロントエンドにおけるそれらと同様の動的フロントエンドハードウェア最適化。
アウトオブオーダエンジン割り当て、スケジューラセットアップ、およびリタイアメントユニットの簡素化およびサイズの低減、アウトオブオーダパイプラインのダウンストリーム。
アウトオブオーダパイプラインのセグメントをより並列に作ることで、割り当てパイプラインにおける幾つかの重要なステージ間の依存性の除去および幾つかのパイプラインステージの低減。
アウトオブオーダプロセッサのより広い動的動作周波数／電圧範囲を可能にする幾つかの重要なパイプラインステージに対するレイテンシの低減。
パイプラインに沿った多くのハードウェア構造の区切られた設計、および従来の複数のアウトオブオーダプロセッサにおいて実現可能または実際的なものを越えたそれらのリード／ライトポートの低減。
アウトオブオーダパイプラインの幾つかのステージでの大きなクロスバー（多重化）構造の除去、およびデータパスおよび制御バスの一部におけるより高い並列、より緩いパーティション化構成。
従来のアウトオブオーダ設計と比較して、所与のサイズの高価なアウトオブオーダのハードウェア構造（例えば、リザベーションステーション、バッファなど）の改善された利用。
【００５０】
一実施形態では、上述の改善された利用は、アウトオブオーダ命令フェッチ、バックエンドへの割り当て、および元のプログラム順序に対するリタイアメントの効果のインオーダ構成の複雑性のハードウェアにおける利己的な利用によるアウトオブオーダパイプラインの残りにおいて有効である。すべての特徴は、同様に、ワイド発行アウトオブオーダプロセッサの設計に対するより良いハードウェアの拡張性を可能にする。
【００５１】
（０）イントロダクション
ハードウェア／ソフトウェアがコデザインされたプロセッサのアーキテクチャを規定するための伝統的なパラダイムは、ソフトウェアコードオプティマイザを用いたコデザインの複数の方法は、現代の主流のアウトオブオーダパイプラインから、構成および／またはＩＬＰの利己的な利用の原理において劇的に異ならなければならないハードウェアにおける幾つかの新しい命令レベルの並列処理（ＩＬＰ）のコンセプトを可能にする特別に規定された複数のＩＳＡ特徴を通じて適用されることを想定する。しかし、先の複数の試みは、従来のハードウェアのみの複数のアウトオブオーダパイプラインと比較すると、性能および／または効率性において競争に耐えられなかった。
【００５２】
発明の実施形態は、代わりにアウトオブオーダパイプラインの実装を目標とするハードウェア／ソフトウェアコデザインに対する新しいパラダイムに基づく。ハードウェアパイプラインの実装における最適化は、以下を含む。
ＶＬＩＷフロントエンドおよびリタイアメント／コミットユニットを用いるＩＳＡ最適化アウトオブオーダパイプライン
ＩＳＡ最適化ハードウェアレジスタリネーミング
ＩＳＡ最適化スケジューラセットアップロジックおよびパイプライン
ＩＳＡ最適化命令キャンセルセットアップロジックおよびパイプライン
スケジューラセットアップおよびキャンセルセットアップロジックの組み合わせ
スケジューラウェイクアップおよびキャンセルロジック組み合わせ
遅延ハードウェアレジスタリネーミング
命令の非投機的早期ディスパッチ
最適化アウトオブオーダパイプラインの完全にパーティション化された構成
パーティション化命令割り当てユニット
最適化アウトオブオーダパイプラインにおける割り当て（書き込み）ポートの低減
最適化パイプラインにおけるアウトオブオーダエンジンのアウトオブオーダ割り当て
最適化アウトオブオーダパイプラインのハードウェア強化型のＶＬＩＷコードのスケジュール
ＩＳＡ最適化命令リタイアメントユニット
アウトオブオーダパイプラインのＩＳＡ最適化クラスタ化構成
【００５３】
アウトオブオーダパイプラインの最適化のほとんどは、新しい、特別に規定された複数のＩＳＡ特徴に直接的に基づく。新しいＩＳＡは、プライベートまたはパブリックのいずれかであることができる。前述のように、ｄＢＴ技術は、既存（例えば、ＩＡ）の複数のバイナリコードから新しいプライベートＩＳＡに翻訳するために用いられて、既存のソフトウェアとの完全なバイナリ互換性を与える。代わりに、新しいパブリックＩＳＡへの最適化コンパイラは、複数の実行可能なバイナリを生成するために要求される。
【００５４】
一般性を失うことなく、以下に記載の実施形態は、最適化アウトオブオーダパイプラインを用いるｄＢＴ技術の使用を想定する。発明の実施形態は、いずれの特別な必要条件をｄＢＴ実装に適用せず、ｄＢＴオペレーションの具体的詳細は、発明の基礎となる原理を分かりにくくしないように以下では議論されない。
【００５５】
（１）最適化アウトオブオーダパイプラインに対する特別なＩＳＡ必要条件
図８に示されるように、一実施形態では、最適化アウトオブオーダパイプラインに対するプライベートＩＳＡは、ＲＩＳＣ型の固定長命令フォーマット８００である。特に、ロード・ストアＩＳＡは、各固定長命令が、３アドレスのレジスタ／オペコード／オペランドフォーマット８０１（例えば、ｄｓｔ、ｓｒｃ１、ｓｒｃ２）および明示的な命令型情報８０２（例えば、メモリ、ＡＬＵ、コントロール）を含むように、採用されてよい。さらに、各命令は、セットされると、明示的にプライベートＩＳＡにおいて用いられる複数の超長命令語（ＶＬＩＷ）の複数の境界をマークするストップビット８０３を含む。
【００５６】
プライベートＩＳＡの１つの特徴は、それが、以下を含んでよい命令のグループ化の複数の制限のセットを規定することである。
【００５７】
個々のＲＩＳＣ命令（図８に示されるような）は、一例が図９に示される、超長命令語（ＶＬＩＷ）と通常呼ばれる複数のグループのインオーダシーケンスに組み合わされなければならない。特に、図９は、唯一のＶＬＩＷフォーマットにグループ化された複数の個別の命令９０１−９０７を示す。従って、一実施形態では、プライベートＩＳＡバイナリコードは、複数のＶＬＩＷのインオーダシーケンスを備える。ＶＬＩＷにおける個別のＲＩＳＣ命令は、時々、「シラブル」と呼ばれる。
【００５８】
複数のＶＬＩＷは、幾つかのアーキテクチャ的に規定された最大値まで可変の数のシラブルを含むことができる。従って、各ＶＬＩＷの長さは、その中の複数の固定長ＲＩＳＣシラブルの粒度で可変である。各シラブルエンコード内にあるストップビット８０３のセット値は、複数のＶＬＩＷの境界を明示的にマークし、別個のＶＬＩＷを特定するハードウェアパイプラインにより用いられる。制限は、各ＶＬＩＷ内の特定のタイプのシンボルの数（例えば、ＶＬＩＷあたり１以下の制御命令）に対して指定されてよい。
【００５９】
一実施形態では、ＶＬＩＷ内の複数のシラブルは、互いの間で、真のデータフロー（リードアフタライト（「Ｒ−Ａ−Ｗ」）または偽出力（ライトアフタライト（Ｗ−Ａ−Ｗ））データフローのレジスタオペランド依存性を有さない。複数の偽アンチデータフローの依存性（例えば、ライトアフタリード（「Ｗ−Ａ−Ｒ」））は、ＶＬＩＷ内で与えられてよい（例えば、図１１Ａおよび図１１Ｂならびに以下の関連する本文を見よ）。これらの制限は、複数のメモリオペレーションを除いて、ＶＬＩＷにおいて複数のシラブルの間でプログラム順序の関係がないことを、有効に意味する。
【００６０】
一実施形態では、複数のＶＬＩＷは、プログラム順序に従う。すなわち、与えられたＶＬＩＷ内のシラブルは、複数のＶＬＩＷのプログラム順序でより古い（すなわち、より先にフェッチされた）別の先のＶＬＩＷ内のシラブルに対して、いずれのデータフロー依存性（Ｒ−Ａ−Ｗ、Ｗ−Ａ−Ｒ、またはＷ−Ａ−Ｗ）を有してよい。
【００６１】
プライベートＩＳＡの幾つかの実施形態では、ＶＬＩＷ内のシラブルの相対位置がシラブルのタイプを規定できる。例えば、与えられたタイプの複数の命令は、同じタイプの複数の命令に対して、および他の複数のタイプの複数の命令に対して、ＶＬＩＷ内で厳格に順序づけられてよい。さらに、シンボルの位置は、シラブルがハードウェアにより導かれなければならないスーパースカラパイプライン（例えば、ＡＬＵ０、ＡＬＵ１など）における特定の命令ディスパッチポート（すなわち、ハードウェアパイプ）を規定してよい。例えば、図９において、命令９０１は、その位置に基づいてａｌｕ０に向けられてよい加算オペレーションである。幾つかの実施形態では、複数の制御命令（例えば、図９に示される分岐ＢＲＣのような）は、ＶＬＩＷコードにおける特定の許可された複数の相対位置のみをコピーできる。
【００６２】
特定のＶＬＩＷは、７のシラブルまで含む図９に示される。１つの制御シラブル９０７、（最大）２つの浮動小数点ベクトルシラブル９０５−９０６、（最大）２つのメモリ（ロード、ストア）シラブル９０３−９０４、（最大）２つの整数ＡＬＵシラブル９０１―９０２を有することが示される。制御（ＢＲＣ）シラブル内のセットストップビット８０３は、ＶＬＩＷインスタンスの境界をマークする。
【００６３】
（２）ＶＬＩＷフロントエンドおよびリタイアメント／コミットユニットを用いるＩＳＡ最適化アウトオブオーダパイプライン
発明の一実施形態において採用される複数のハードウェア最適化は、以下で、従来のアウトオブオーダパイプライン実装と比較される。最適化アウトオブオーダパイプラインの高レベル構造は、図１０Ａおよび図１０Ｂに従来のアウトオブオーダパイプラインと並んで与えられる。２つのパイプラインの間の１つの違いは、最適化パイプラインが、従来のパイプラインにおける複数のインオーダスーパースカラフロントエンドユニット１００１および複数のインオーダスーパースカラリタイアメントユニット１００３に代えて、それぞれ、複数のインオーダＶＬＩＷフロントエンドユニット１０１１および複数のリタイアメント／コミットユニット１０１３を用いることである。一実施形態では、最適化アウトオブオーダパイプラインの複数のユニットは、クロックサイクルあたり１つのＶＬＩＷで動作する。
【００６４】
図１Ｂに戻って参照すると、フロントエンドユニット１００１および１０１１は、フロントエンドユニット１３０内に示される複数のコンポーネントを含んでよい。データフローエンジン１００２および１０１２は、実行エンジンユニット１５０およびメモリユニット１７０から複数のコンポーネント（例えば、一実施形態におけるリタイアメントユニット１５４を除く）を含んでよい。リタイアメントユニット１００３および１０１３は、リタイアメントユニット１５４から複数のコンポーネントを含んでよい。
【００６５】
一実施形態では、最適化パイプラインは、クロックサイクルあたり１以下のＶＬＩＷから複数のアウトオブオーダシラブルを割り当てる。従来のパイプラインにおける複数のμｏｐの動的に生成される割り当て「ライン」と異なり、ＶＬＩＷは、ｄＢＴオプティマイザにより静的に前規定され、複数のＲＩＳＣ命令シラブルのＶＬＩＷへのグループ化の間、複数のＩＳＡ制限が適用されたことを保証して、ハードウェアに明示的に提供されてよい。
【００６６】
最適化パイプラインにおける動的データフローアウトオブオーダエンジン１０１２への割り当ての後、ＶＬＩＷは、その別個のシラブルに分解され、それにより、エンジンは、従来のアウトオブオーダパイプラインにおいて、データフローエンジン１００２が別個のμｏｐをスケジュールするのと同様（しかし、同一ではない）の方法において、それらを独立にスケジュールしてよい。
【００６７】
（３）最適化パイプラインにおけるアウトオブオーダエンジン割り当ての基本構成
図１１Ａは、図１１Ｂ内の最適化アウトオブオーダパイプライン、ＶＬＩＷにおける対応するエンティティと並べて、従来のアウトオブオーダプロセッサにおける複数のマイクロ命令（μｏｐ）のスーパースカラ割り当てラインの例を示す。
【００６８】
複数のμｏｐのスーパースカラ割り当てラインは、プロセッサフロントエンド内の有効なマイクロ命令（ＩＳＡ）シーケンスのマイクロコードへの変換から生じる複数のμｏｐの間のＲ−Ａ−Ｗ（μｏｐ０の出力をμｏｐ１の入力に接続する点線の矢印１１０１として示される）、Ｗ−Ａ−Ｒ（μｏｐ２の出力をμｏｐ１の入力に接続する破線の矢印１１０２として示される）、およびＷ−Ａ−Ｗ（μｏｐ０を出てμｏｐ３の出力に到達する一点鎖線の矢印１１０３として示される）レジスタ依存性のいずれのほとんどを含むことができる。従って、従来のアウトオブオーダパイプラインは、複数のμｏｐの割り当てラインのそれぞれおよびすべてにおける可能なライン間（またはライン内）の依存性のすべてをチェックし、正しく処理しなければならない。さらに、従来の割り当てハードウェアは、ライン内の複数のμｏｐの間の元のプログラム順序の関係を追跡し続けて、適切に適用しなければならない。必要条件は、従来のアウトオブオーダパイプラインにおける割り当てハードウェアの実装を実質的に複雑にし、より広いアウトオブオーダプロセッサの設計に対するハードウェアの拡張性を厳しく妨げる。
【００６９】
対照的に、ＶＬＩＷ実装を用いて、図１１Ｂに示されるように、最適化アウトオブオーダパイプライン内の対応する割り当てエンティティは、ＶＬＩＷ内で複数のシラブル命令の間の許容された複数の依存性上で、先述の複数のプライベートＩＳＡ制限に従わなければならない。複数の制限は、従来のＶＬＩＷの複数のＩＳＡに対して典型的であり、ＶＬＩＷ内の複数のシラブルの間の真のデータフロー（Ｒ−Ａ−Ｗ）依存性および偽出力（Ｗ−Ａ−Ｗ）依存性を禁止する。図１１ＢにおいてＩ２の出力をＩ１の入力に接続する破線の矢印１１１２により示されるように、複数のシラブルの間の複数の偽アンチ依存性（Ｗ−Ａ−Ｒ）が許容される。複数のプライベートＩＳＡ規定は、複数のメモリ命令を除いて、ＶＬＩＷ内の異なる複数のシラブルの間のプログラム順序の関係がないことも意味する。そのように、１つのＶＬＩＷからの複数のシラブルは、互いに対して任意の順序で、それらのアウトオブオーダ処理の正確さを複雑にすることなく、アウトオブオーダパイプラインハードウェアにより処理されることができる。最適化アウトオブオーダパイプラインに対する複数の制限のすべてに従うことで、元のバイナリコードを完全に意味的に等価で、有効なプライベートＩＳＡコードに翻訳することが、ｄＢＴソフトウェアの責任である。
【００７０】
（４）ＩＳＡ最適化ハードウェアレジスタリネーミング
図１２Ｂに示されるように、従来のアウトオブオーダパイプラインと同様に、ここに記載の最適化パイプラインは、ハードウェアレジスタリネーミングユニット１２１３に依存し、プライベートＩＳＡの複数の論理レジスタオペランドを、マイクロアーキテクチャにおいて利用できる多くの物理レジスタにマップする。レジスタリネーミングの１つの目的は、偽Ｗ−Ａ−ＲおよびＷ−Ａ−Ｗレジスタ依存性を除去し、それにより、実行中のコードにおける利用可能な並列処理のレベルを増大することである。
【００７１】
図１２Ａおよび図１２Ｂは、従来のパイプライン（図１２Ａ）および最適化アウトオブオーダパイプライン（図１２Ｂ）におけるレジスタリネーミングの比較を提供する。示されるように、相当な量の追加の回路が、従来のパイプラインにおいて、オペランド比較回路１２０１およびオペランド上書き回路１２０２（大型マルチプレクサとして典型的に実装される）を含む複数の依存性を取り除くために要求される。図１２Ａと対比して、複数のレジスタリネーミングテーブル１２１３のみが、図１２Ｂに示される最適化パイプラインにおいて要求される。簡素化および改善は、ＶＬＩＷ内の複数のシラブルの間のＲ−Ａ−ＷおよびＷ−Ａ−Ｗ依存性がないという事実に基づく。従って、リネーミングユニットは、複数の依存性をチェックし、それらを適用する必要はない（それらは存在しないので）。この簡素化は、レジスタリネーミングの読み取りフェーズにおいて複数のマルチプレクサ１２０２をインライン化する複数の論理レジスタオペランドコンパレータ１２０１および対応する物理レジスタオペランドを除去する。この後者のハードウェアの削減は、複数のマルチプレクサ１２０２が大きいワイヤ支配領域を占め、レジスタリネーミングステージの全体的なレイテンシを増大するので、特に重要である。取り除かれた複数のマルチプレクサは、ワイド発行プロセッサの設計におけるリネーミングユニットの最悪の拡張性の部分でもある。
【００７２】
一実施形態では、ＶＬＩＷにおいて許容される偽Ｗ−Ａ−Ｒの複数のアンチ依存性は、従来のアウトオブオーダパイプラインと同様に、レジスタリネーミングの書き込みフェーズを、レジスタリネーミングの読み取りフェーズに対してクロックサイクルの２分の１だけ遅延させることにより、最適化パイプラインにおいて取り除かれる。
【００７３】
最適化アウトオブオーダパイプラインにおけるレジスタリネーミングの書き込みフェーズのハードウェア実装は、割り当てているＶＬＩＷ内の複数のシラブルの間の偽Ｗ−Ａ−Ｗ出力依存性がないことが保証されていることにより、簡素化され、それにより、レジスタリネーミングハードウェアは、複数のレジスタリネーミングテーブル１２１３を更新する前に、複数の依存性をチェックし、それらを正しく処理する必要がない。
【００７４】
（５）ＩＳＡ最適化スケジューラセットアップロジックおよびパイプライン
最適化アウトオブオーダパイプラインがその割り当てセグメントにおいて可能にする次の改善は、データフロースケジューラのセットアップロジックに関連する。図１３Ａおよび図１３Ｂは、従来のパイプライン（図１３Ａ）および最適化アウトオブオーダパイプライン（図１３Ｂ）における割り当ておよびセットアップロジックの比較を提供する。特に、図１３Ａは、レジスタリネーミングロジック１３０１、スケジューラセットアップロジック１３０２、およびスケジューラロジック１３０３、同様にキャンセルセットアップロジック１３０４およびキャンセルロジック１３０５の連続配置を示す。図１３Ｂは、レジスタリネーミングロジック１３１１、スケジューラセットアップロジック１３１２、およびキャンセルセットアップロジック１３１４、同様にスケジューラロジック１３１３およびキャンセルロジック１３１５に対する改善された並列配置を示す。
【００７５】
上述のように、すべてのアウトオブオーダパイプラインは、その利用可能な並列処理を増大するために、割り当てコードから偽Ｗ−Ａ−ＲおよびＷ−Ａ−Ｗを除去し、真のデータフローの依存性（Ｒ−Ａ−Ｗ）のみを考える。しかし、従来のアウトオブオーダパイプラインにおける複数のμｏｐの割り当てライン内の複数の偽依存性を検出および除去することの複雑性および時間重要度は、それに、レジスタリネーミングロジック１３０１に対してスケジューラセットアップロジック１３０２を順番に並べさせる。レジスタリネーミングロジック１３０１は、複数の偽依存性を除去し、スケジューラセットアップロジック１３０２はその結果を用いて複数の真のＲ−Ａ−Ｗデータフローの依存性のみを考える（セットアップする）。しかし、この簡素化は、割り当て命令がディスパッチされることができると、割り当てパイプラインの長さを増大し、最先の時間を遅延する。
【００７６】
対照的に、図１３Ｂに示される最適化アウトオブオーダパイプラインの実施形態は、いずれのイントラＶＬＩＷレジスタ依存性を処理する必要がなく、それにより、スケジューラセットアップロジック１３１２は、レジスタリネーミングロジック１３１１により実行されるレジスタリネーミングと並行してスケジューリングセットアップを実行する。この実装は、割り当てパイプラインの全体的な長さを減らし（ステージを除去し）、分岐予測ミスのリカバリの後および命令キャッシュミスの後の性能を改善する、複数の命令のより早いディスパッチングを可能にする。一方、より短い割り当てパイプラインは、最小限のリソースのターンアラウンドレイテンシを低減することを介して、アウトオブオーダエンジンの複数のリソースの利用を改善する。
【００７７】
最適化割り当てパイプラインの一実施形態では、スケジューラセットアップロジック１３１２は、より大きな物理レジスタ識別子ではなく、シラブルの複数のオペランドの論理ＩＳＡレジスタ識別子を入力情報（例えば、論理レジスタオペランドによりインデキシングされた）として用いる。さらに、スケジューラセットアップロジック１３１２は、割り当てているＶＬＩＷ内の複数のシラブルの間の真のＲ−Ａ−Ｗデータフローの依存性さえチェックする必要がない。これらの特徴は、スケジューラセットアップにおいて用いられる典型的な内容参照可能メモリ（ＣＡＭ）を、より簡素で且つより小さいテーブルベース型のスケジューラセットアップロジック１３１２と置き換えられることを可能にする。一実施形態では、セットアップテーブルは、各スケジューラエントリを、論理レジスタに対する最新の割り当て順序プロデューサ命令を用いて、対応する論理レジスタにマップする。論理レジスタに対する最新のプロデューサ命令が既に実行されていると、セットアップテーブルは、レジスタを、スケジューラで任意の命令への依存性を有していないと報告する。改善されたスケジューラセットアップロジック１３１２は、まだ、スケジューラセットアップロジックの書き込みフェーズをスケジューラセットアップロジックの読み取りフェーズに対してクロックサイクルの２分の１だけ遅延させることにより実装されてよい複数の割り当てられているシラブルの間の複数の偽のＷ−Ａ−Ｒアンチ依存性を処理する必要がある。さらに、レジスタリネーミング（図１２Ｂ）と同様に、スケジューラセットアップロジック１３１２は、書き込みフェーズの間、複数の偽のＷ−Ａ−Ｗ出力依存性を処理する必要はない。それ故に、複数の偽出力の依存性は、記載されたプライベートＩＳＡにおいて制限される。
【００７８】
（６）ＩＳＡ最適化命令キャンセルセットアップロジックおよびパイプライン
多くの現代のアウトオブオーダパイプラインは、ロードの実行に対して統計的に最も頻発するケースであるデータキャッシュ内でロードがヒットすると想定して、複数のロードオペレーションに依存する命令の投機的なディスパッチングを実装する。この最適化は、コンシューマの複数のオペレーションが、それらが非投機的にディスパッチされる場合よりも早くロードされたデータを受信することができるようにする。稀な場合では、ロードがデータキャッシュ内でミスすると、すべての投機的にディスパッチ依存のオペレーションが、アウトオブオーダパイプラインにおいて選択的にキャンセルされなければならない。ミスされたロードがより低いレベルのプロセッサのメモリ階層からデータを提供すると、複数のオペレーションは、後に、アウトオブオーダエンジンにより、非投機的に再ディスパッチ（再プレイ）される。
【００７９】
複数のロードコンシューマの投機的ディスパッチは、スケジューラ上の他の複数の非ロードμｏｐを通じてのそれらの複数の間接的依存性を含めて、アウトオブオーダエンジンにロード時に割り当てられる複数のμｏｐの複数の依存性を追跡する命令キャンセルロジック１３０５により可能になる。依存性情報は、データキャッシュ内でロードがミスする場合に、影響する複数のディスパッチ命令を選択的にキャンセルするために用いられる。データフロースケジューラセットアップと同様に、従来のアウトオブオーダパイプラインは、レジスタリネーミング１３０１の後に、キャンセルロジックセットアップ１３０４を実行し、１３０１からのリネームされたレジスタ情報および１３０２からのデータフロースケジューラセットアップ情報の両方および１３０５からの先のキャンセルセットアップ情報を、キャンセルセットアップロジック１３０４の機能を簡素化するために用いる。セットアップ機能は、複数のハードウェア構造への連続するアクセスおよび中間セットアップ情報の複雑な差し込みを含む、複数のμｏｐの割り当てラインを通じて複数のロード上の複数の間接的依存性を判断し、追跡する必要のため、まだ複雑である。
【００８０】
スケジューラセットアップロジック１３１２の改善と同様に、最適化アウトオブオーダパイプラインは、レジスタリネーミング１３１１およびスケジューラセットアップ１３１２と並行し、複数の論理レジスタオペランドによりインデキシングされたテーブルベースの方法（すなわち、１３１２に対して上述したようなＣＡＭフリー）において実装されるキャンセルロジックセットアップ１３１４を改善する。改善は、同様に、割り当てているＶＬＩＷ内の複数のシラブルの間でＲ−Ａ−ＷおよびＷ−Ａ−Ｗ依存性が無いことの保証に基づく。
【００８１】
キャンセル固有の識別および複数のロード命令の間接的依存性の追跡は、ＶＬＩＷにＲ−Ａ−ＷおよびＷ−Ａ−Ｗ依存性が無いことにより、最適化パイプラインにおいてまた大いに簡素化され、それにより、キャンセルロジック１３１４のセットアップの全体的な複雑性およびレイテンシがスケジューラセットアップロジック１３１２に対するそれらと等しくなる。複数のＷ−Ａ−Ｒ依存性は、同様に、キャンセルロジックセットアップ１３１４の書き込みフェーズを、その読み取りフェーズに対してクロックサイクルの２分の１だけ遅延させることにより、処理される。一実施形態では、キャンセルロジックセットアップ１３１４の書き込みフェーズは、キャンセルロジックセットアップ１３１４の読み取りフェーズの複数の結果を複数の入力のうちの１つとして用いることができる。
【００８２】
（７）スケジューラセットアップおよびキャンセルセットアップロジックの組み合わせ
キャンセルセットアップロジック１３１４の全体的な最適化は、それを、スケジューラセットアップロジック１３１２を有する最適化アウトオブオーダパイプラインにおいて、シラブルの複数のオペランドの複数の論理レジスタ識別子によりアドレス可能な（インデキシングされる）単一テーブルに組み合わされることができるようにする。組み合わせは、さらに、命令キャンセル情報に含まれる複数のロードへの複数の間接的依存性に適用されるように、すべての間接的データフロー依存性が、常に、直接的データフロー依存性の前に除去されるという一般的事実に基づく。
【００８３】
（８）スケジューラウェイクアップおよびキャンセルロジックの組み合わせ
さらに、命令キャンセル情報は、ここで、従来の複数のアウトオブオーダパイプラインのように、別個のハードウェア構造より、複数の命令に対する複数の真のデータフロー（Ｒ−Ａ−Ｗ）依存性情報とともに、データフロースケジューラ１３１３のウェイクアップロジック上に保たれることができる。最適化は、さらに、命令キャンセル情報に含まれる複数のロードへの複数の間接的依存性に適用されるように、すべての間接的データフロー依存性が、常に、直接的データフロー依存性の前に除去されるという一般的事実に基づく。
【００８４】
これは、ひとえに、最適化アウトオブオーダパイプラインが、完全に、別個の命令キャンセルセットアップおよび従来のアウトオブオーダエンジンにおける相当の電力および領域フットプリントを有するロジックハードウェアの追跡の必要を除去するとともに、まだ完全に、複数の選択的命令キャンセル機能を実行できることを意味する。
【００８５】
（９）遅延ハードウェアレジスタリネーミング
割り当てパイプラインの実装の別の最適化は、上述のスケジューラ１３１２−１３１３およびキャンセルセットアップロジック１３１４の複数の改善が、アウトオブオーダパイプラインにおけるレジスタリネーミングステージの重要度を除去するという事実に基づく。
【００８６】
参考として、従来の複数のアウトオブオーダパイプラインは、可能な限り早く完了されるレジスタリネーミング１３０１を要求する。これは、連続するスケジューラセットアップ１３０２およびキャンセルロジックセットアップ１３０４の機能が、リネーミングステージからの情報に依存するために、要求される。
【００８７】
新しい最適化アウトオブオーダパイプラインでは、レジスタリネーミングフェーズ１３１１は、リネームされたレジスタ情報が最初に必要となるまで、すなわち、命令がパイプライン内のデータフロースケジューラから最初にディスパッチされることができるまで、遅延されてよい。遅延されたレジスタリネーミング１３１１は、後に、従来のパイプラインと比較される複数の空き物理宛先レジスタの割り当てができるようにし、それにより、最小の物理レジスタのターンアラウンドレイテンシが短縮され、与えられたサイズの物理レジスタファイルがより良好に利用される。レジスタリネーミングの重要度の除去は、アウトオブオーダエンジンの物理的レイアウトを最適化するために用いられることもできるとともに、割り当てパイプラインにおける他のハードウェア構造に対する複数のレジスタリネーミングテーブルの配置の複数の必要条件がここで緩和されることができる。
【００８８】
（１０）複数の命令の非投機的早期ディスパッチ
現代の複数のアウトオブオーダプロセッサは、それらのパイプラインのスケジューラセットアップおよび複数の命令スケジューリングステージと並行して実行される複数の割り当て命令の早期ディスパッチを実装してよい。複数の命令の早期ディスパッチは、特に分岐予測ミスのリカバリの後または命令キャッシュミスの後の多くの割り当て命令は、実際に、それらの割り当て時間でディスパッチされる準備ができているので、プロセッサの性能を改善する。しかし、命令の準備に関する情報は、この早期のステージでの従来のパイプラインでは利用できない。その結果、パイプラインは、あらゆる割り当て命令はその割り当て時間にて準備できるものと想定することにより、投機的に早期ディスパッチをする。
【００８９】
その後、従来のパイプラインにおいて、プロセッサは、投機的ディスパッチ命令が実際に準備されているかどうかを判断するためにチェックし、されていない場合、命令をキャンセルする。消し損ねた早期ディスパッチ命令のキャンセルは、特別なハードウェアサポートを要し、追加の電力オーバーヘッドを招く。
【００９０】
上述のスケジューラセットアップロジック１３１２および割り当てパイプラインの最適化は、十分早期に、命令の準備情報を容易に利用できるようにし、それにより、最適化アウトオブオーダパイプラインは、複数のキャンセルの電力オーバーヘッドおよび関連するキャンセルハードウェアをそうして除去する複数の準備命令のみの非投機的早期ディスパッチを実行することができる。
【００９１】
（１１）最適化アウトオブオーダパイプラインの完全にパーティション化された構成
アウトオブオーダパイプラインの最適化ハードウェア実装における別の重要な改善は、ＶＬＩＷ（例えば、ＡＬＵ、メモリ、制御などのような）における異なるタイプの複数の命令（複数のシラブル）の間のＩＳＡ規定の厳格な相対順序の利己的な利用に、および複数のメモリオペレーションを除く、ＶＬＩＷ内の複数のシラブルの間の特定のプログラム順序の複数の関係が定義されないことに基づく。
【００９２】
さらに、プライベートＩＳＡの一実施形態は、ＶＬＩＷ内の同じタイプの複数の命令の厳格な相対順序を規定する。すなわち、同じタイプの幾つかの命令（例えば、２つのＡＬＵ命令）がＶＬＩＷ内にあると、ＩＳＡの一実施形態は、複数の命令のそれぞれがハードウェアにより導かれなければならない特定の複数のディスパッチポートを規定する。
【００９３】
ＶＬＩＷにおける複数のメモリ命令に対して、ＩＳＡの一実施形態は、それらが導かれなければならないメモリディスパッチポートに依存して、複数のメモリアクセスのそれらの相対的プログラム順序を規定する。例えば、一実施形態では、メモリディスパッチポート０（ＭＥＭ０）に関連するＶＬＩＷシラブルは、必ず、メモリディスパッチポート１（ＭＥＭ１）に関連するＶＬＩＷシラブルに対してプログラム順序においてより古いメモリ命令を含む。
【００９４】
プライベートＩＳＡの一実施形態は、図１４Ｂに示されるように、最適化アウトオブオーダパイプラインの完全にパーティション化された実装を可能にする。各パイプラインパーティションまたはハードウェアパイプは、特定のハードウェアディスパッチポート、例えば、ＡＬＵ０、ＡＬＵ１、ＭＥＭ０、ＭＥＭ１、ＣＯＮＴＲＯＬ等に関連する。パイプラインパーティション機能は、独立にまたは緩く互いに連結され、実質的にプロセッサハードウェア設計、検証、および製造を簡素化する。複数のパーティションは、また、アウトオブオーダエンジン実装に対して簡素であり、合理化され、およびより並列な複数の物理レイアウトを可能にする。
【００９５】
一実施形態では、エンコードされたＶＬＩＷは、プライベートＩＳＡにおいて規定されるように、圧縮型のメモリ内に表される。すなわち、ＶＬＩＷは、すべての可能なシラブルタイプを含まなくてよく、または複数の命令のタイプに対して複数のハードウェアディスパッチポートと同じタイプの多くのシラブルがなくてよい。しかし、これらの欠けている複数のシラブルは、命令メモリ内の任意のスペースを占有しない。一実施形態では、フロントエンドパイプライン１０１１は、圧縮されたＶＬＩＷを拡張し、その現在の複数のシラブル（複数の命令）をすべて、対応する複数のパイプラインパーティションに入れる。最適化アウトオブオーダパイプラインにおけるこの点から、複数の命令は、それらが複数のプライベートＩＳＡ規定に応じて導かれた複数のパイプラインパーティションによってのみ処理される。
【００９６】
一実施形態では、そのようなパイプラインパーティショニングは、従来のものと比較して、最適化パイプラインにおいて大型マルチプレクサおよびクロスバースイッチの除去を可能にする。ＶＬＩＷのプライベートＩＳＡにおいて規定される複数の命令の相対順序が、厳密に、アウトオブオーダプロセッサのレイアウトにおける複数のハードウェア構造およびそれらのリード／ライトポートの相対的トポロジに一致するので、これが起こり、それにより、特定の複数のハードウェア構造への追加のマルチプレクシング、または複数の命令のステアリング、またはそれらの複数の制御フィールドは、パイプラインを通す必要がない。
【００９７】
デコードされた命令キューの読み込みステージから実行ステージへの従来と最適化アウトオブオーダパイプラインとの比較が、図１４Ａおよび図１４Ｂに示される。特に、図１４Ａは、第１クロスバースイッチ１４０１を介してリネーム／割り当てステージ１４０４に切り替えられたμｏｐ０−３のシーケンスを示す。第２クロスバースイッチ１４０２は、複数のμｏｐを、リネーム／割り当てステージ１４０４からモノリシックのリザベーションステーション（ＲＳ）を含むスケジューリングステージ１４０５に接続する。ディスパッチステージ内の第３クロスバースイッチ１４０３は、スケジューリングステージ１４０５を、ディスパッチされた複数のμｏｐの複数のオペランドを読み込む複数の物理レジスタファイル１４０６および複数のμｏｐがディスパッチされる複数の実行ポート１４０７に接続する。
【００９８】
対照的に、図１４Ｂでは、幾つかのクロスバースイッチおよびマルチプレクサが取り除かれる。特に、クロスバー１４０１が、それらのプログラム順序で配置された複数の命令の複数の論理レジスタオペランドフィールドを特定の複数のタイプのレジスタリネーミングテーブル（またはＲＡＴ）および複数のテーブルにおける特定のリードまたはライトポートにルートするレジスタリネーミングステージ１４０４にて取り除かれている。このクロスバーは、ＶＬＩＷにおける複数のシラブルの順序がＲＡＴハードウェアトポロジに一致するので、最適化パイプラインにおいて冗長になる。従って、図１４Ｂでは、命令０−３は、リネーム／割り当てステージ１４１４に直接供給される。幾つかの実施形態では、複数のアウトオブオーダプロセッサの従来の複数のＩＳＡと比較して複数のより少ない順序制限は、要求されると、プライベートＩＳＡにおいて規定されることができ、それにより、クロスバーは完全に取り除かれないが、その複雑性、電力、レイテンシ、および領域は相当に縮小される。
【００９９】
図１４Ｂにおいて、それらのプログラム順序で配置された複数の命令を、データフロースケジューラ１４０５（または複数のリザベーションステーションＲＳ）の特定の複数のパーティション（または複数の論理セクション）にルートするスケジューラ割り当てステージにて、クロスバー１４０２も取り除かれている。このクロスバー１４０２は、図１４Ｂにおいて、ＶＬＩＷにおける複数のシラブルの順序が直接的にデータフロースケジューラの複数のパーティション１４１５のハードウェアトポロジに一致するので、最適化パイプラインにおいて冗長になる。幾つかの実施形態では、複数のアウトオブオーダプロセッサの従来の複数のＩＳＡと比較して複数のより少ない順序制限は、要求されると、プライベートＩＳＡにおいて規定されることができ、それにより、クロスバーは完全に取り除かれないが、その複雑性、電力、レイテンシ、および領域は相当に縮小される。
【０１００】
また、ディスパッチされた複数の命令を、データフロースケジューラ（ＲＳ）１４０５におけるそれらの複数の位置（複数のパーティション）から特定の複数の物理レジスタファイル１４０６およびそれらの特定の複数のリードポート、および特定の複数の命令実行ポート１４０７にルートする命令ディスパッチステージにて、クロスバー１４０３が取り除かれる。このクロスバーは、データフロースケジューラ１４１５の複数のパーティションの相対配置が、厳密に、複数のレジスタファイル１４１６のハードウェアトポロジおよびそれらのリードポート、および複数の命令実行ポート１４１７に一致するので、最適化パイプラインにおいて冗長になる。
【０１０１】
現代の従来のアウトオブオーダプロセッサパイプラインの幾つかも、データフロースケジューラ（ＲＳ）のパーティション化された構成を実装する。しかし、この特徴は、それらを、任意の他のクロスバーではなく、命令ディスパッチステージにて後のクロスバー１４０６のみを除去することができるようにする。一方、パーティション化されたＲＳを有する従来の複数のアウトオブオーダパイプラインは、複数の割り当て命令を適当な複数のパーティションに導く特別の複数のハードウェアユニットを実装しなければならず、また、複数のパーティションのそれぞれに関連する異なる複数の命令実行ポートの利用が均衡を保たれることを確かめなければならない。一実施形態では、最適化アウトオブオーダパイプラインは、特別のパーティションロードバランシングハードウェアユニットを必要とせず、それが生成するバイナリコードにおいて実行ポートロードバランシングを実行するコードオプティマイザソフトウェアに依存する。後のロードバランシング情報は、暗に、先述のプライベートＩＳＡにおけるＶＬＩＷのシラブル順序の複数の規定を介して最適化ハードウェアパイプラインに伝達される。
【０１０２】
取り除かれマルチプレクサおよびクロスバースイッチは、最適化アウトオブオーダパイプラインにおけるレイテンシ（すなわち、より高いクロック周波数を可能にする）、電力、および領域の相当の低減を導く。プラス効果は、マルチプレクサおよびスイッチはワイヤ優位のハードウェア構造であり、複数のワイヤはより微細なプロセスにおいてシリコンデバイスよりスケールダウンが相対的に悪いので、将来のより微細なシリコン製造プロセスに一層重要になる。
【０１０３】
クロスバースイッチ型の複数のハードウェア構造の領域およびレイテンシは、それらの入力／出力の数における線形増大に不十分（およそ２次的）に比例するので、クロスバーの除去は、より広範なプロセッサ設計のための最適化アウトオブオーダパイプラインのハードウェア実装のより良い拡張性を可能にする。最適化アウトオブオーダパイプラインは、まだ、デコードされた複数の命令を拡張されたＶＬＩＷから適当な複数のパイプラインパーティションにルートするフロントエンドパイプラインにおいて複数のマルチプレクサを採用してよいことを記すことは重要である。パイプラインのディスパッチ、実行、ライトバックステージ（図１５参照）にて、オペランドをバイパスするために複数のマルチプレクサをまだ使用してもよい。残りのステージでは、最適化アウトオブオーダパイプラインは、マルチプレクサおよびクロスバースイッチを除去する。
【０１０４】
図１５は、幾つかの４ｘパーティション化パイプラインステージを含むｎエントリのデータフロースケジューラを有する最適化４―ｗｉｄｅアウトオブオーダエンジンの一実施形態を示す。特に、示された実施形態は、４つのデコードされた命令（例えば、ＶＬＩＷからの複数のシラブル）を格納するための４ｘパーティション化され、デコードされた命令キュー１５０１、複数の命令を複数のプロセッサリソースに割り当てるための４ｘパーティション化割り当てユニット１５０２、４ｘパーティション化ｎエントリスケジューラウェイクアップロジックおよび（ｎ／４）：１命令選択ロジック１５０４の４ｘパーティション化セットを有する複数のリザベーションステーション１５０３、複数の物理レジスタファイル１５０５のセット、オペランドバイパスロジック１５０６、および複数の機能ユニット１５０７を含む。一実施形態では、スケジューラウェイクアップロジックおよび複数のリザベーションステーション１５０３の４つのパーティションのすべてに対して、実行を待つｎの命令を格納するための全ｎのエントリがあり、複数のパーティションのそれぞれはｎの命令のｎ／４を格納する。例として、ｎ＝３２の値に対して、複数のパーティション１５０３のそれぞれは、３２／４または８の命令（８のエントリにおける）を格納し、複数の選択ロジックパーティション１５０４のそれぞれは、パイプラインにおけるそれに関連する８エントリウェイクアップロジックパーティション１５０３から最大８の準備命令の１つを選択できる。
【０１０５】
一実施形態では、スケジューラウェイクアップロジック１５０３の各パーティションは、それらの命令の複数の実行ユニット１５０７へのルーティングを簡素化するために、特定のタイプの命令のみを格納するよう構成されてよい。例えば、図１５において、（これらの命令は、容易に、複数のパーティションからそれらのそれぞれの実行ユニットにルートされるので、）パーティション＃２および＃３は、複数のＡＬＵ命令を格納し、パーティション＃０および＃１は複数のメモリ命令を格納してよい。
【０１０６】
割り当てロジック１５０２は、スケジューラウェイクアップロジックにおける４つのパーティションのそれぞれへの唯一のライトポートを含む。さらに、４ｘパーティション化選択ロジック１５０４は、複数のパーティション１５０３のそれぞれへの１つのリードポートを含み、サイクルあたり４つの命令、複数のパーティション１５０３のそれぞれから１つ、を選択できる（例えば、一実施形態では、４つの８：１マルチプレクサのセットを用いて）。従って、スケジューラウェイクアップロジック１５０３における各パーティションは、１つのリードポートおよび１つのライトポートのみを必要とするので、パイプラインの４ｘパーティショニングは、劇的に、スケジューラウェイクアップロジック１５０３および選択ロジック１５０４を実装することが要求されるシリコン領域を減らす。すなわち、（ｎ：４の全選択複雑性を有する、非パーティション化実装をもたらすｎの命令とは対照的に、）選択ロジック１５０４の各パーティションは、４ｘ（（ｎ／４）：１）の全選択複雑性を有する４つのパーティションのそれぞれからｎ／４の命令の１つを選択できる必要があるだけである。一実施形態では、選択ロジック１５０４は、実行（すなわち、それらのオペランドを準備）されてよいすべての可能な命令を観測し、複数の命令の割り当て世代および割り当てられた実行ユニットの複数の命令ディスパッチスロットの有用性のような複数の変数に基づいて各パーティションからディスパッチする１つの命令を選択する。
【０１０７】
図１５に示される特定の実施形態では、２つのメモリ実行チャネル（例えば、物理レジスタファイル１５０５に入力されるロードおよび／またはストアアドレス命令、オペランド値のバイパスユニット１５０６、およびメモリアドレス生成ユニットＭＥＭ０およびＭＥＭ１  １５０７に対して）および２つのＡＬＵチャネルがある。
【０１０８】
他のレイテンシ、電力、および領域の利益の間で、スケジューラパーティショニングは、ワイド発行プロセッサの設計のより良いハードウェアの拡張性を提供する。スケジューラの拡張性の種類は、最適化アウトオブオーダパイプラインに特有ではなく、幾つかの従来のパイプラインにおいて見られることができるが、最適化パイプラインにおいて、能力により、プライベートＩＳＡにおける複数のより長いＶＬＩＷフォーマットを規定し、ｄＢＴオプティマイザソフトウェアによる複数の命令を用いて複数のより長いＶＬＩＷを満たすことが実質的に促進される。
【０１０９】
（１２）パーティション化命令割り当てユニット
最適化アウトオブオーダパイプラインの完全にパーティション化された構成の結果である別のハードウェア実装の改善は、命令割り当てユニット１５０２の実装に関連する。命令割り当てユニット１５０２は、アウトオブオーダパイプラインの複数の割り当てステージの間、機能し、またパーティション化され、それにより、そのパーティションのそれぞれは、正確に、最適化パイプラインの１つのパーティションを提供し、それを、クロックサイクルあたり１以下のパーティションタイプの命令（例えば、ＡＬＵまたはメモリなど）のみに割り当てる。パーティション化された割り当てユニット１５０２は、ハードウェアの複雑性および全体的な領域を減らし、それに加えて、より広範なアウトオブオーダプロセッサの設計のさらにより良い拡張性を有する。
【０１１０】
（１３）最適化アウトオブオーダパイプラインにおける割り当て（書き込み）ポートの低減
一実施形態では、プライベートＩＳＡは、ＶＬＩＷにおいて許容される特定のタイプの命令の最大数を制限してよい。複数の制限は、最適化アウトオブオーダパイプラインにおける複数の割り当てハードウェアユニット（上述のような）および幾つかの関連するハードウェア構造の追加の低減および簡素化のために用いられてよい。
【０１１１】
例えば、図９に示されるように、ＶＬＩＷが３以上のメモリオペレーション（２つのロード、または１つのロードおよび１つのストア、または２つのストア）を含まなくてよい場合、ロードバッファ（ＬＢ）およびストアバッファ（ＳＢ）のような１７４（図１Ｂ参照）におけるメモリオーダリングバッファ（ＭＯＢ）内のそのような重要であり且つ大きな複数の構造は、同様の従来のアウトオブオーダパイプラインにおける複数のＭＯＢと比較して、少数の割り当て（書き込み）ポートを有することができる。このレートは現代の従来の複数のＩＳＡ（例えば、ＩＡ）により制限されないので、従来の複数のパイプラインは、同じタイプの複数の命令の最高の可能な割り当てレートのハードウェアにおいて供給しなければならない。例えば、既存の複数のアーキテクチャは、ＬＢに最大４のロードを同時に割り当てる（書き込む）ことができる必要がある。ここに記載の最適化パイプラインにおける複数のＭＯＢ構造への少数のライトポートは、十分な領域および電力低減をもたらす。
【０１１２】
（１４）最適化パイプラインにおけるアウトオブオーダエンジンのアウトオブオーダ割り当て
一実施形態では、複数のハードウェアリソースのより良い利用は、アウトオブオーダエンジンのアウトオブオーダ割り当ての結果のように、最適化アウトオブオーダパイプラインにおいて実現される。アウトオブオーダ割り当ての効果は、当然に、ｄＢＴオプティマイザに対する必要条件から得られ、複数のＶＬＩＷに配置されている複数のシラブルで複数のプライベートＩＳＡ制限に従う。具体的には、ＶＬＩＷにおける複数のシラブルの間の真のデータフロー（Ｒ−Ａ−Ｗ）および／または偽出力（Ｗ−Ａ−Ｗ）依存性は存在できない。ｄＢＴオプティマイザは、それらを複数のプライベートＲＩＳＣシラブルに翻訳した後、ただしそれらを複数のＶＬＩＷにグループ化する前に、例えば複数のＩＡ入力命令の適当な再順序により、複数の制限を満たす。静的コード再順序の結果として、複数のコンシューマ（依存）命令は、それらのプロデューサ命令に対して続くＶＬＩＷ（複数可）に配置され、最適化アウトオブオーダパイプラインにおける複数のコンシューマ命令は、それらのプロデューサの割り当ての時間に対して次の複数のクロックサイクルの１つにおいてのみ、アウトオブオーダエンジンに割り当てられる。
【０１１３】
図１６は、複数の命令（例えば、翻訳された複数のシラブル）の典型的なシーケンスを示し、アウトオブオーダコードの前スケジューリング（例えば、ｄＢＴオプティマイザによる）の有益な効果を示す。特に、アウトオブオーダ命令「ウィンドウ」１６００は、与えられたハードウェア容量に対して利用される。複数のシラブルは、複数の依存性に基づいて、ウィンドウ内にまたは外に移動される。例えば、幾つかの依存命令１６０２が、ウィンドウの前に移動されているのが示され（すなわち、より後の実行時間に対して）、他の複数の独立命令１６０１がウィンドウ内に移動されているのが示される（より先の実行時間に対して）。
【０１１４】
依存命令は、最新のそのプロデューサ命令がディスパッチされた後、次（最先）のクロックサイクルにおいてディスパッチされることができるだけなので、複数のコンシューマ命令の遅延された（アウトオブオーダ）割り当ては、最適化アウトオブオーダパイプラインにおいて、データフロースケジューラの複数のエントリのおよび他のハードウェアの複数のバッファリソースの利用についてプラス効果を有する。より早い割り当ては、複数のハードウェアリソースを無駄にするだけである。
【０１１５】
対照的に、従来のアウトオブオーダパイプラインは、同じクロックサイクルにおいて生成およびコンシューミング命令の両方を決まって割り当てなければならず、それにより複数のコンシューマ命令に対して割り当てられた複数のハードウェアリソースは、少なくとも１クロックサイクルの間、無駄になる。そのフロントエンドユニット１００１が、デコードされた命令ストリーム（例えば、ＩＡストリーム）から生成されるマイクロコードにおいて複数のμｏｐを再順序できないので、これが起こる。一方、命令ストリームに対するマイクロコードが、当然に、それらのプロデューサ命令に隣接する複数のコンシューマ命令を有する。例えば、マイクロコード内の複数のμｏｐのロード＋ＡＬＵの複数の組み合わせは、複数のプログラムコードに対して典型的であり、同じクロックサイクル内でアウトオブオーダエンジンに頻繁に割り当てられる。従って、コンシューマＡＬＵ命令は、生成ロードオペレーションのレイテンシに依存して、少なくとも３−４クロックサイクルの間、従来のパイプラインにおける複数のハードウェアリソースを無駄にしてよい。
【０１１６】
プロデューサおよびコンシューマ命令の相対的割り当てにおける複数の差の結果として、最適化アウトオブオーダパイプラインにおいて与えられたサイズのハードウェアデータフロースケジューラは、従来のパイプラインにおける同様のスケジューラより平均でより多い準備命令を観測する。従って、スケジューラの複数のエントリは、最適化パイプラインにおいてより良好に利用されるので、スケジュールのサイズが性能ペナルティを伴うことなく減らされることができる、または与えられたサイズのスケジューラがその性能を制限することなくより大きく／より広いアウトオブオーダプロセッサを提供することができる。すなわち、アウトオブオーダ割り当ての効果は最適化アウトオブオーダパイプラインのハードウェアの拡張性を改善する。
【０１１７】
ｄＢＴソフトウェアオプティマイザにより実行される複数のＶＬＩＷへのコード前スケジューリング副産物が複数のプライベートＩＳＡ制限に従うので、最適化アウトオブオーダパイプラインは、いずれの追加のハードウェアを用いることなくアウトオブオーダ割り当てを可能にすることを記すことは重要である。
【０１１８】
同様に、最適化アウトオブオーダパイプラインは、効率的に、例えばIA入力アプリケーションにおけるそれらの元のプログラム順序から複数の命令をフェッチし、デコードし、さらにリタイアする。それにもかかわらず、最適化アウトオブオーダパイプラインにおけるフロントエンド、割り当て、およびリタイアメントユニットは、まだ、それらの簡素な複数のインオーダ機能を実行する。複数のユニットのハードウェアサイズおよび複雑性は、フロントエンドハードウェアの顕著な増大のないアウトオブオーダフェッチおよび割り当ての同様のプラス効果およびフロントエンドにおけるマルチスレッドフェッチ、フロントエンドにおける命令前スケジューリング／再順序ユニット等のようなその複雑性を利用できない従来のアウトオブオーダパイプラインのように実質的に小さいまたは少なくとも同じである。
【０１１９】
（１５）最適化アウトオブオーダパイプラインのハードウェア強化型のＶＬＩＷコードのスケジュール
最適化アウトオブオーダパイプラインに対してｄＢＴソフトウェアオプティマイザにより実行される複数のＶＬＩＷへのコード前スケジューリングを考えると、従来のインオーダＶＬＩＷパイプラインの複数のプロセッサの同様のＶＬＩＷコードスケジュールに対するＶＬＩＷコードスケジュールをもたらす幾つかの重要な複数の改善を指摘することは重要である。従来のインオーダＶＬＩＷパイプラインでは、各ＶＬＩＷは、フェッチ、デコード、割り当て（またはバックエンドパイプラインへの転送）、ディスパッチング、およびリタイア／コミットのアトミックユニットである。すなわち、インオーダパイプラインの対応する複数のステージは、ＶＬＩＷの全体、すなわちその複数のシラブルのすべてに同時に従う。
【０１２０】
対照的に、最適化アウトオブオーダパイプラインでは、ＶＬＩＷは、ディスパッチングを除き、フェッチ、デコード、割り当て、およびリタイア／コミットのアトミックユニットとして提供する。バックエンド割り当てステージの間、ハードウェアデータフロースケジューラによるそれらの独立の動的スケジューリングおよびディスパッチング、潜在的にアウトオブオーダの目的のために、ＶＬＩＷは、個々のシラブル（ＲＩＳＣ命令）に分かれる。最適化アウトオブオーダパイプラインにおけるハードウェアデータフロースケジューラの存在は、後述するように、それに対する強化型ＶＬＩＷコードスケジュールを可能にする。
【０１２１】
従来のインオーダＶＬＩＷパイプラインに対するソフトウェアコードオプティマイザは、複数の命令の正確な（およびスーパースカラ、すなわち並列）ディスパッチシーケンスを生成することを担当する。ディスパッチシーケンスは、インオーダパイプラインに正確に続く。従って、複数の依存命令は、従来のＶＬＩＷスケジュールにおけるそれらの生成命令に、少なくとも、複数の生成命令の正確なレイテンシまでに、続かなくてはならない。複数のシングルサイクルプロデューサに対し、コンシューマは、スケジュールにおける次のＶＬＩＷに配置されることができる。一方、複数のマルチサイクルロードの複数のコンシューマに対して、（インオーダパイプラインにおける最大ディスパッチレートがクロックサイクルあたり１のＶＬＩＷであるので、ＶＬＩＷの数における）フルロードレイテンシが、複数のコンシューマがＶＬＩＷコードに配置されることができる前に、スキップされなければならない。
【０１２２】
これは、複数のマルチサイクルプロデューサおよびそれらの複数のコンシューマの間の複数のＶＬＩＷにおけるすべての空のシラブルが、他の複数の独立命令を用いるソフトウェアオプティマイザにより容易に満たされることができるので、高いトリップカウントを有する複数の最内ループのような本質的に高い命令レベルの並列処理および静的に予測可能な制御フローを用いる複数のスケジューリングコードの大きな問題を提示しない。
【０１２３】
しかし、ハードウェアパイプラインが、コードスケジュールにおいてすべてのマルチサイクルプロデューサおよびそれらの複数のコンシューマの間の正しい複数のレイテンシを知ることを保証することのみのために、低い固有の並列処理および多くの条件分岐を有するスケジューリングコードに対して、従来のＶＬＩＷソフトウェアオプティマイザは、多くのノーオペレーション命令をコードスケジュールに入れなければならない。複数のノーオペレーション命令は、Ｉｔａｎｉｕｍプロセッサファミリ（ＩＰＦ）におけるそれらのように、インオーダハードウェアパイプラインにおける複数のバブルをもたらし、従来の複数のＶＬＩＷプロセッサにおける複数のハードウェアリソースの割り当て過少（すなわち、未活用）の原因となる。
【０１２４】
最適化アウトオブオーダパイプラインの一実施形態は、従来のＶＬＩＷコードスケジュールにおいて見られた非能率を軽減する複数のハードウェアメカニズムを含む。特に、低い並列処理を有する複数のコードに対して、ｄＢＴオプティマイザは、ハードウェアにおける複数の命令全体の長いレイテンシに動的に適応するアウトオブオーダエンジンの能力に依存し、それが生成する強化型ＶＬＩＷコードスケジュールにおいて、すべての命令が、実際の命令レイテンシを強制するよりむしろ、単位（１クロックサイクル）レイテンシを有するものと想定する。単位レイテンシの想定は、バックエンド割り当てレートを増大する従来のＶＬＩＷスケジュールと比較して、スケジュールをより一層、高密度（小型）およびノーオペレーション命令のないものにするが、まだ、複数の命令の間の正しい複数の依存性の十分な情報を用いて最適化アウトオブオーダパイプラインを提供する。
【０１２５】
より高い並列処理を有する複数のコードに対して、最適化アウトオブオーダパイプラインに対するｄＢＴソフトウェアオプティマイザの一実施形態は、複数の命令、主に複数のロード命令の実際のレイテンシおよびそのより速い実行の目的のための翻訳されたコード領域における特定の複数の命令の重要度の相対次数の両方を考慮する。結果として、高い並列処理を有する複数のコードに対して、強化型ＶＬＩＷコードスケジュールは、従来のＶＬＩＷコードスケジュールの複数の特徴のほとんどを取得する。プロデューサおよびコンシューマ命令は、プロデューサのレイテンシを少なくとも部分的に考慮するスケジュールにおいて分けられ、高い重要度の複数の命令は、それらのより早いＶＬＩＷコードスケジュールへの配置を介して低い重要度の複数の命令の前にアウトオブオーダエンジンに割り当てられる。すなわち、高い並列処理を有する複数のコードにおけるマルチサイクル命令のレイテンシは、アウトオブオーダエンジンのハードウェアにより完全にではなく、ＶＬＩＷコードスケジュールを介して（部分的に）適応される。強化型ＶＬＩＷコードスケジュールは、まだ、高密度（小型）であり、ノーオペレーション命令がない。最適化アウトオブオーダパイプラインによるコードスケジュールの実行は、高い命令レベル並列処理（ＩＬＰ）を有する複数のコードに対してより良い性能を導き、先述のように、従来のアウトオブオーダパイプラインと比較してアウトオブオーダのハードウェアリソースのより良い利用を可能にもする。
【０１２６】
一実施形態では、最適化アウトオブオーダパイプラインに対する強化型ＶＬＩＷコードスケジュールは、好機を狙って生成される。コードスケジュールは、複数の命令の間の複数の依存性を正確に反映しなければならないが（複数の依存命令が別個のＶＬＩＷに配置される）、それらの複数のコンシューミング命令の配置における複数の生成命令の最小レイテンシに正確に従わなくてよい。この強化は、同様のＶＬＩＷ  ＩＳＡ特性（例えば、ＩＰＦプロセッサにおけるような）に依存する従来のインオーダハードウェアパイプラインと比較して、最適化アウトオブオーダパイプラインにおいて、より良いコードスケジュール密度および命令割り当てレートを可能にする。
【０１２７】
さらに、最適化アウトオブオーダパイプラインに対する強化型ＶＬＩＷコードスケジュールは、プロデューサおよびコンシューマ命令を同じＶＬＩＷに配置しないこと、および、それにより、同じクロックサイクル内でアウトオブオーダエンジンに割り当てられることからそれらを防ぐことにより、従来のアウトオブオーダパイプラインにおいて典型的なアウトオブオーダエンジンの複数のハードウェアリソースの過度の割り当てを減らす。
【０１２８】
（１６）ＩＳＡ最適化命令リタイアメントユニット
一実施形態では、最適化アウトオブオーダパイプラインのリタイア／コミット領域１０１３に配置されるリタイアメントユニットは、複数の命令を、最大でクロックサイクルあたり１ＶＬＩＷのＶＬＩＷ粒度（ｄＢＴオプティマイザにより静的に前規定される）で厳密にリタイアする。対照的に、従来のアウトオブオーダパイプラインは、ハードウェア内で、リタイアメントに対して複数のμｏｐのスーパースカラグループ（「ライン」）を動的に選択し、選択の間、起こり得る懸案の中断および／または例外、および複数のμｏｐのリタイヤリングストリームの「ライン」における元の複数のマクロ命令（ＩＳＡ）の間の複数の境界を考慮しなければならない。
【０１２９】
一実施形態では、割り当てパイプラインセグメント１５０２と同様に、１０１３におけるリタイアメントパイプラインセグメントのハードウェア実装は、それがコードを生成する際にｄＢＴソフトウェアオプティマイザが従うプライベートＩＳＡにおいて規定されるＶＬＩＷにおける複数のシラブルの複数の制限のため、最適化される。特に、一実施形態では、ＶＬＩＷにおいて複数のシラブルの間に偽出力の依存性（Ｗ−Ａ−Ｗ）はなく、ＶＬＩＷにおいてプログラム順序はなく（メモリオペレーションを除く）、それにより、リタイアメントユニットハードウェアは、従来のアウトオブオーダパイプラインにおける同様のユニットと異なり、リタイアメントの間、依存性のチェックを実行しなくてよく、順序を無視することができる。取り除かれた依存性および順序のチェックロジックは、典型的に、ワイド発行アウトオブオーダプロセッサの設計に対して、従来のリタイアメントユニットにおいて最悪の拡張可能なハードウェアである。さらに、一実施形態において唯一のＶＬＩＷがクロックサイクルあたりにリタイアされるので、最適化リタイアメントパイプラインにおける例外検出およびプログラムカウンタアップデートメカニズムは、スーパースカラ（すなわち、並列）リタイアメントに対して複製される必要はない。ところが、従来のアウトオブオーダパイプラインにおける複数のμｏｐのスーパースカラリタイアメントに対して、複数のμｏｐレベルの「ライン」で複数のマクロ命令（ＩＳＡ）の間の複数の境界を慎重に処理することが一般的に行われる。
【０１３０】
これらの特徴のすべては、非常に高いピークスループットを有するＩＳＡ最適化リタイアメントユニットの簡素化および緩く連結されてパーティション化されたハードウェア実装を可能にする。
【０１３１】
完全を期するため、最適化アウトオブオーダパイプラインにおける再順序バッファ（ＲＯＢ）は、最適化されパーティション化された割り当ておよびリタイアメントユニットとの改善された統合を可能にし、ワイド発行アウトオブオーダプロセッサの設計に対してより大きいハードウェアの拡張性をサポートするために、完全にまたは部分的にパーティション化された方法において実装されることもできることを記すことは重要である。
【０１３２】
リタイアメントユニットのこれらの最適化は、最適化アウトオブオーダパイプラインにおける正確に構成されたレジスタおよびメモリ状態が、（例えば、隣接するＶＬＩＷの間の複数の境界で、ｄＢＴオプティマイザソフトウェアにより静的に生成される）各ＶＬＩＷの精度でサポートされることを暗示する。正確な状態は、ハードウェアの中断、実行例外、失敗等の処理のために、一実施形態において用いられる。
【０１３３】
最適化アウトオブオーダパイプラインの一実施形態は、明示的に、構成されたレジスタおよびメモリ状態に対してプライベートＩＳＡ規定をサポートする。それがソフトウェアアプリケーションの実行に対して要求され、元のバイナリコード（例えば、ＩＡ）のＩＳＡにより暗示された際に、正確なプライベートＩＳＡ状態の対応する正確な元のバイナリコード（例えば、ＩＡ）状態への確かなマッピングを確立すること、および続く正確なレジスタおよびメモリ状態を再構築できるようにすることは、ｄＢＴソフトウェアの責任である。
【０１３４】
（１７）アウトオブオーダパイプラインのＩＳＡ最適化クラスタ化構成
最適化アウトオブオーダパイプラインの一実施形態は、プライベートＩＳＡの複数の特徴およびｄＢＴオプティマイザソフトウェアのサポートを介して、クラスタ化されたアウトオブオーダの複数のマイクロアーキテクチャの効率的な実装を可能にする。複数のクラスタ化マイクロアーキテクチャは、他のモノリシックであり大きな複数のハードウェア構造および複数のリソースをより小さい複数の部分（複数のクラスタ）に分割し、それにより、複数の部分のそれぞれがより低いレイテンシを有し、対応するモノリシックなハードウェア構造より高いクロック周波数で実行することができるので、それらの物理的実装はより簡素になり、ハードウェアの拡張性が改善される。
【０１３５】
クラスタ化マイクロアーキテクチャの典型的なアプリケーションは、物理レジスタファイルおよび／またはオペランドバイパスネットワークを、２またはそれより多いより小さいクラスタ、例えば、２つの４−ワイドモノリシック実行クラスタとして実装され、４−ワイドプロセッサのクロック周波数で実行する８−ワイドアウトオブオーダプロセッサに分割するワイド発行プロセッサの設計にある。このクラスタ化されたハードウェア実装は、固有の性能オーバーヘッドを有するが、複数の別個のクラスタの間のデータアクセスおよび転送の複数のレイテンシは、複数のクラスタ内、またはより小さいモノリシックアウトオブオーダのマイクロアーキテクチャに対するそれらより大きくなる。
【０１３６】
実行しているコードにおける重要なデータ依存が複数のクラスタを介してスケジュールされ、従って、複数のハードウェア構造の同様の論理サイズおよび／または容量を有する仮定的な（しかし、実現可能である必要はない）大きなモノリシックアウトオブオーダマイクロアーキテクチャに関する性能を下げるクラスタ間通信のレイテンシを取り込むと、クラスタ間通信の余分のレイテンシは、一般的に、全体の実行時間において露呈される。
【０１３７】
従って、クラスタ化アウトオブオーダマイクロアーキテクチャの効率性は、実行の実効重要パスがクラスタの境界を越える（性能低下の主な原因）レートを最小化するために、正しいクラスタへの割り当て命令のステアリングを介して、クラスタ間レイテンシの露呈が、如何に良く軽減されるかに依存する。
【０１３８】
複数のクラスタ化マイクロアーキテクチャにおける最適命令ステアリングメカニズムの実装は、挑戦的なタスクとしてより広く考えられている。単純な複数の命令ステアリング技術は、クラスタ化ワイド発行アウトオブオーダプロセッサのハードウェア効率性を損なう、同じ発行幅のモノリシックアウトオブオーダパイプラインのベースラインに対して大きな（例えば、２０％−３０％）の性能低下をもたらす。
【０１３９】
ハードウェアが、最適なステアリング決定をするために、複数の割り当て命令についての十分および／または信頼できるコンテキスト情報を有さないと、ステアリング決定は、アウトオブオーダバックエンドへの命令割り当ての前に、フロントエンドパイプラインにおいて実行されなければならないので、より洗練された命令ステアリングの発見的方法は、フェッチされたコードの重要パスの解析を実行し、正しいステアリング決定を生成するための余分のハードウェアを要求しないだけでなく、解析の範囲において非常に限定される。固有の複数の困難により、従来のアウトオブオーダパイプラインの実際的なサウンドクラスタ化の実装は開発されていない。
【０１４０】
対照的に、最適化アウトオブオーダパイプラインの一実施形態では、ｄＢＴソフトウェアオプティマイザは、正規のコードスケジューリングプロセスの一部として、その翻訳時間で、コードの重要パスの複数の特性を解析する。ｄＢＴオプティマイザは、当然に、十分なコンテキスト情報を有し、コードの実行中に続く最適化アウトオブオーダパイプラインに対して静的に（コード翻訳時に）十分に最適なステアリング決定を行うことを可能にするコードの大きな複数の領域における複数の命令の依存性の重要度を考慮する。
【０１４１】
最適化されクラスタ化されたアウトオブオーダパイプラインにおける命令ステアリングに対するこれらのｄＢＴ有効化技術は、市販製品の観点からそれらを実現可能にする、ハイエンドで非常に広いアウトオブオーダプロセッサの設計に対するハードウェアの拡張性を劇的に改善するクラスタ化およびモノリシックアウトオブオーダマイクロアーキテクチャの複数の構成の間の効率性および性能のギャップを十分に（１％−３％まで）埋める。
【０１４２】
一実施形態では、複数のクラスタに命令ステアリングを示す情報は、ＩＳＡにより規定されるＶＬＩＷにおける複数のシラブルに対する全体的な複数の順序制限の必須部分として実装されてよいプライベートＩＳＡにおいて規定される複数のステアリング制御機能を介して、最適化アウトオブオーダパイプラインに明示的に配信される。これは、例えば、複数の位置が、先述のように最適化アウトオブオーダパイプラインにおける特定の複数の実行ユニットポートにマップされることができるのと同様に、ＶＬＩＷ内の特定の複数のシラブル位置の特定の複数のハードウェアクラスタへの静的マッピングを用いて、またはデュアルクラスタマイクロアーキテクチャの構成に対するシラブルエンコードにおける１ビットのクラスタステアリングのヒントを介して（より多くのビットが、より大きい数のクラスタに対して複数のステアリングヒントをエンコードするのに必要とされる）、達成されてよい。
【０１４３】
（１８）最適化アウトオブオーダパイプラインについての種々の備考
最適化アウトオブオーダパイプラインの複数の実施形態は、多くの知られた、または「クラシック」な、既存のバイナリコード（例えば、ＩＡ）の複数のｄＢＴ最適化の効率的な複数の実装を可能にする。そのような最適化の例は、これらに限定されるものではないが、投機的なループ不変コード移動、投機的なレジスタ値のスピルおよびフィルコードの最適化（レジスタプロモーションとしても知られる）、投機的な制御フローの最適化（唯一のパス条件付きおよび／または間接分岐、ＩＦ変換、コード矯正へのバイアスの除去）等を含む。加えて、現代のアウトオブオーダプロセッサにおいて利用できる多くのハードウェアのみのアウトオブオーダパイプライン最適化は、「そのまま」実装、または最適化アウトオブオーダパイプラインにおいてコデザインされたハードウェア／ソフトウェアとしてそれらを実装することにより簡素化および強化されることもできる。そのような最適化の例は、これらに限定されるものではないが、命令統合、移動命令の除去、ゼロイディオム命令の除去、初期の物理レジスタの再利用、投機的ロックの省略等を含む。
【０１４４】
発明の複数の実施形態は、上述した様々なステップを含む。複数のステップは、汎用または専用プロセッサに複数のステップを実行させるために用いられてよい複数の機械実行可能命令において実装されてよい。代わりに、これらのステップは、複数のステップを実行するためのハードワイヤードロジックを含む特定の複数のハードウェアコンポーネントにより、またはプログラムされたコンピュータコンポーネントおよびカスタムハードウェアコンポーネントの任意の組み合わせにより、実行されてよい。
【０１４５】
ここに記載されたように、複数の命令は、特定の複数のオペレーションを実行するよう構成された、または所定の機能性または非一時的コンピュータ可読媒体に実装されるメモリに格納された複数のソフトウェア命令を有する特定用途向け集積回路（ＡＳＩＣ）のようなハードウェアの特定の複数の構成を参照してよい。従って、複数の図に示された複数の技術は、１または複数の電子デバイス（例えば、エンドステーション、ネットワークエレメント等）上で格納および実行されるコードおよびデータを用いて実装されることができる。そのような電子デバイスは、非一時的コンピュータ機械可読記憶媒体（例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、リードオンリメモリ、フラッシュメモリデバイス、相変化メモリ）および一時的コンピュータ機械可読通信媒体（例えば、搬送波、赤外線信号、デジタル信号などのような伝搬信号の電気、光、音、又は他の形体）のような、コンピュータ機械可読媒体を用いてコードおよびデータを（内部で、および／またはネットワークを介して他の電子デバイスを用いて）格納および通信する。さらに、そのような電子デバイスは、一般的に、１または複数のストレージデバイス（非一時的機械可読記憶媒体）、ユーザ入力／出力デバイス（例えば、キーボード、タッチスクリーン、および／またはディスプレイ）、およびネットワーク接続のような１または複数の他のコンポーネントと連結された１または複数のプロセッサのセットを含む。複数のプロセッサのセットおよび他の複数のコンポーネントの連結は、一般的に、１または複数のバスおよびブリッジ（バスコントローラとも呼ばれる）を介される。ストレージデバイスおよびネットワークトラフィックを搬送する複数の信号は、それぞれ、１または複数の機械可読記憶媒体および機械可読通信媒体を表す。従って、所与の電子デバイスのストレージデバイスは、一般的に、その電子デバイスの１または複数のプロセッサのセット上で実行するためのコードおよび／またはデータを格納する。もちろん、発明の実施形態の１または複数の部分は、ソフトウェア、ファームウェア、および／またはハードウェアの異なる複数の組み合わせを用いて実装されてよい。この発明の詳細な説明を通じて、説明の目的のために、多くの特定の詳細が、本発明の完全な理解を提供するために説明された。しかし、これらの特定の複数の詳細の幾つかが無くても本発明が実施されてよいことは、当業者に明らかである。特定の例において、周知の構造及び機能は、本発明の主題を分かりにくくしないよう精巧に詳細に記載されなかった。従って、発明の範囲および精神は、次の特許請求の範囲の観点から判断されるべきである。
本実施形態の例を下記の各項目として示す。
［項目１］
メモリからプログラム順序で複数の超長命令語（複数のＶＬＩＷ）をフェッチする命令フェッチユニットであり、前記複数のＶＬＩＷのそれぞれは、縮小命令セットコンピュータ（ＲＩＳＣ）命令の複数のシラブルの間の複数のデータフローの依存性および複数の偽出力の依存性を削除する順序で、前記複数のＶＬＩＷにグループ化される前記複数のシラブルを含む、命令フェッチユニットと、
プログラム順序で前記複数のＶＬＩＷをデコードし、デコードされた各ＶＬＩＷの前記複数のシラブルを並行して出力するデコードユニットと、
他の複数のシラブルと並行して前記複数のシラブルのうちの少なくとも幾つかを実行するアウトオブオーダ実行エンジンと、を備え、
前記複数のシラブルのうちの少なくとも幾つかは、それらが前記デコードユニットから受信される前記順序と異なる順番で実行され、前記アウトオブオーダ実行エンジンは、複数のオペレーションを実行する際に、前記複数のシラブルの間の複数のデータフローの依存性および複数の偽出力の依存性のチェックをしない１または複数の処理ステージを有する、
装置。
［項目２］
前記アウトオブオーダ実行エンジンは、マルチプレクサおよび複数の論理レジスタオペランドコンパレータの少なくとも一方を用いないで、複数の論理レジスタオペランドを読み取るための読み取りフェーズを実装するレジスタリネーミングロジックを含む、項目１に記載の装置。
［項目３］
前記アウトオブオーダ実行エンジンは、さらに、複数の機能ユニットによる実行のための前記複数のシラブルのスケジューリングに先立って複数のシラブルの間の複数の依存性を評価するスケジューラセットアップロジックを含み、前記スケジューラセットアップロジックは、前記レジスタリネーミングロジックの前記読み取りフェーズと並行して実行される、項目２に記載の装置。
［項目４］
前記スケジューラセットアップロジックは、さらに、特定のディスパッチされた複数のシラブルの複数の効果をキャンセルするのに前記アウトオブオーダ実行エンジンにより利用可能なキャンセルセットアップロジックと並行して各シラブル上で動作する、項目３に記載の装置。
［項目５］
プログラムコードを高級プログラミング言語またはパブリック命令セットアーキテクチャ（パブリックＩＳＡ）フォーマットから前記複数のＶＬＩＷおよび複数のシラブルを含むプライベートＩＳＡフォーマットに翻訳するトランスレータをさらに備える、項目１から４のいずれか一項に記載の装置。
［項目６］
前記トランスレータは、最適化コンパイラまたは動的バイナリトランスレータを含むバイナリトランスレータを含む、項目５に記載の装置。
［項目７］
前記トランスレータは、メモリから順番にフェッチされる複数のＶＬＩＷのそれぞれに含まれる前記複数のシラブルが複数のデータフローの依存性および複数の偽出力の依存性を有さないように、前記プライベートＩＳＡフォーマットに翻訳する際に複数のデータフローの依存性および複数の偽出力の依存性を取り除く、項目６に記載の装置。
［項目８］
前記複数のデータフローの依存性は、複数のリードアフタライト（「Ｒ−Ａ−Ｗ」）依存性を含み、前記複数の偽出力の依存性は、複数のライトアフタライト（「Ｗ−Ａ−Ｗ」）依存性を含む、項目７に記載の装置。
［項目９］
前記トランスレータは、ＶＬＩＷ内で複数の偽のアンチデータフロー依存性を受け入れる、項目８に記載の装置。
［項目１０］
前記複数の偽のアンチデータフロー依存性は、ライトアフタリード（「Ｗ−Ａ−Ｒ」）依存性を含む、項目９に記載の装置。
［項目１１］
前記複数のシラブルは、１または複数の制御シラブル、１または複数の浮動小数点ベクトルシラブル、１または複数のメモリシラブル、および１または複数の整数ＡＬＵシラブルの任意の組み合わせを含む複数のタイプであり、各シラブルは、対応タイプのＲＩＳＣ命令により表される、項目１から１０のいずれか一項に記載の装置。
［項目１２］
前記複数のシラブルのタイプは、ＶＬＩＷにおけるシラブルの許可された相対位置として規定される、項目１１に記載の装置。
［項目１３］
前記アウトオブオーダ実行エンジンは、複数のシラブルの非投機的早期ディスパッチを実行するディスパッチロジックを含む、項目１から１２のいずれか一項に記載の装置。
［項目１４］
前記アウトオブオーダ実行エンジンは、Ｎのパーティションを有するレジスタリネーム／割り当てユニットおよびＮのパーティションを有するスケジューラユニットを含んで、完全に仕切られる、項目１から１３のいずれか一項に記載の装置。
［項目１５］
前記Ｎのパーティションは、物理的に配置されて、複数の命令のうちの複数の特定のタイプを処理する、項目１４に記載の装置。
［項目１６］
前記スケジューラユニット内の第１パーティションは、第１タイプの実行ユニットに関連し、前記スケジューラユニット内の第２パーティションは、第２タイプの実行ユニットに関連する、項目１５に記載の装置。
［項目１７］
前記レジスタリネーム／割り当てユニットおよび前記スケジューラユニットの仕切りは、前記アウトオブオーダ実行エンジンおよびそのロードおよび複数のバッファのストアを含むメモリオーダリングバッファの少なくとも一方のライトポートの数を減らす、項目１４から１６のいずれか一項に記載の装置。
［項目１８］
前記パブリックＩＳＡは、インテルアーキテクチャ（ＩＡ）を含む、項目５に記載の装置。
［項目１９］
プログラムコードをパブリック命令セットアーキテクチャ（ＩＳＡ）フォーマットから複数の超長命令語（複数のＶＬＩＷ）を含むプライベートＩＳＡフォーマットに翻訳するトランスレータであり、前記複数のＶＬＩＷのそれぞれは、複数のシラブルの間の複数のデータフローの依存性および複数の偽出力の依存性を削除する順序で、前記複数のＶＬＩＷにグループ化される前記複数のシラブルを含む、トランスレータと、
他の複数のシラブルと並行して前記複数のシラブルのうちの少なくとも幾つかを実行するアウトオブオーダ実行エンジンと、を備え、
前記複数のシラブルのうちの少なくとも幾つかは、それらが前記アウトオブオーダ実行エンジンにより受信される前記順序と異なる順番で実行され、前記アウトオブオーダ実行エンジンは、前記複数のシラブルを処理する際に、前記複数のシラブルの間の複数のデータフローの依存性および複数の偽出力の依存性のチェックをしない１または複数の処理ステージを有する、
装置。
［項目２０］
前記１または複数の処理ステージのうちの少なくとも１つは、マルチプレクサまたは複数の論理レジスタオペランドコンパレータを用いないで、複数のシラブルの複数の物理レジスタオペランドを読み取るための読み取りフェーズを実装するレジスタリネーミングロジックを含む、項目１９に記載の装置。
［項目２１］
前記アウトオブオーダ実行エンジンは、さらに、複数の実行ユニットによる実行のための前記複数のシラブルのスケジューリングに先立って複数のシラブルの間の複数のデータフローの依存性を評価するスケジューラセットアップロジックを含み、前記スケジューラセットアップロジックは、前記レジスタリネーミングロジックの前記読み取りフェーズと並行して実行される、項目２０に記載の装置。
［項目２２］
前記スケジューラセットアップロジックは、さらに、特定のディスパッチされた複数のシラブルの複数の効果をキャンセルするのに前記アウトオブオーダ実行エンジンにより利用可能なキャンセルセットアップロジックと並行して各シラブル上で動作する、項目２１に記載の装置。
［項目２３］
前記トランスレータは、最適化コンパイラまたはバイナリトランスレータを含む、項目１９から２２のいずれか一項に記載の装置。
［項目２４］
前記複数のデータフローの依存性は、複数のリードアフタライト（「Ｒ−Ａ−Ｗ」）依存性を含み、前記複数の偽出力の依存性は、複数のライトアフタライト（「Ｗ−Ａ−Ｗ」）依存性を含む、項目１９から２３のいずれか一項に記載の装置。
［項目２５］
プログラムコードをパブリック命令セットアーキテクチャ（ＩＳＡ）フォーマットから複数の超長命令語（複数のＶＬＩＷ）を含むプライベートＩＳＡフォーマットに翻訳する段階であり、前記複数のＶＬＩＷのそれぞれは、複数のシラブルの間の複数のデータフローの依存性および複数の偽出力の依存性を削除する順序で、前記複数のＶＬＩＷにグループ化される前記複数のシラブルを含む、段階と、
他の複数のシラブルと並行して前記複数のシラブルのうちの少なくとも幾つかをアウトオブオーダ実行エンジンにより実行する段階と、を備え、
前記複数のシラブルのうちの少なくとも幾つかは、それらが前記アウトオブオーダ実行エンジンにより受信される前記順序と異なる順番で実行され、前記アウトオブオーダ実行エンジンは、前記複数のシラブルを処理する際に、前記複数のシラブルの間の複数のデータフローの依存性および複数の偽出力の依存性のチェックをしない１または複数の処理ステージを有する、
方法。
【図１Ａ】
0006043374.tif 000002
【図１Ｂ】
0006043374.tif 000003
【図２】
0006043374.tif 000004
【図３】
0006043374.tif 000005
【図４】
0006043374.tif 000006
【図５】
0006043374.tif 000007
【図６】
0006043374.tif 000008
【図７】
0006043374.tif 000009
【図８】
0006043374.tif 000010
【図９】
0006043374.tif 000011
【図１０Ａ】
0006043374.tif 000012
【図１０Ｂ】
0006043374.tif 000013
【図１１Ａ】
0006043374.tif 000014
【図１１Ｂ】
0006043374.tif 000015
【図１２Ａ】
0006043374.tif 000016
【図１２Ｂ】
0006043374.tif 000017
【図１３Ａ】
0006043374.tif 000018
【図１３Ｂ】
0006043374.tif 000019
【図１４Ａ】
0006043374.tif 000020
【図１４Ｂ】
0006043374.tif 000021
【図１５】
0006043374.tif 000022
【図１６】
0006043374.tif 000023