(57)【要約】  プロセッサは、１または複数の実行ポート上にロードすべく、複数のストランドに分割された命令ストリームをフェッチし、複数の実行待ち命令を特定し、複数のストランドのどれがアクティブであるかを決定し、複数の実行待ち命令の各々のプログラム順を決定し、各実行待ち命令のプログラム順と、各ストランドがアクティブであるかどうかとに基づいて複数の実行待ち命令を複数の実行ポートにマッチングさせるロジックを含む。各実行待ち命令は、複数のストランドのうちの１つのそれぞれのヘッドにある。
2017513094.tif 000002
【特許請求の範囲】
【請求項１】
１または複数の実行ポート上にロードされるべき複数のストランドに分割された命令ストリームをフェッチする第１のロジックと、
複数の実行待ち命令を特定する第２のロジックであって、各実行待ち命令は前記複数のストランドのうちの１つのそれぞれのヘッドにある、第２のロジックと、
前記複数のストランドのどれがアクティブであるかを決定する第３のロジックと、
前記複数の実行待ち命令の各々のプログラム順を決定する第４のロジックと、
各実行待ち命令の前記プログラム順、および各ストランドがアクティブであるかどうかに基づいて、前記複数の実行待ち命令を前記複数の実行ポートにマッチングさせる第５のロジックと、
を備えるプロセッサ。
【請求項２】
前記複数の実行ポートのうちの１つへの前記複数の実行待ち命令のうちの１つのポートバインディングを決定する第６のロジックと、
各実行待ち命令の前記プログラム順と、各ストランドはアクティブであるかどうかと、前記ポートバインディングとに基づいて前記複数の実行待ち命令を前記複数の実行ポートにマッチングさせる第７のロジックと、
をさらに備える請求項１に記載のプロセッサ。
【請求項３】
前記複数の実行待ち命令を前記複数の実行ポートにマッチングさせる第５のロジックは、さらに、単一プロセッサクロックサイクル内で実行される、請求項１に記載のプロセッサ。
【請求項４】
前記複数の実行ポートのうちの所与の１つのためのワンホットベクトルを生成する第６のロジックであって、前記ベクトルは、前記所与の実行ポートに割り当てられるべき、前記複数の実行待ち命令のうちの１つの実行待ち命令のインデックスに１つの正ビットを含む、第６のロジックをさらに備える請求項１に記載のプロセッサ。
【請求項５】
第１のステージにおいて前記複数の実行待ち命令を格納する第６のロジックと、
前記複数の実行待ち命令の実行のために、必要なデータが利用可能かどうかを評価する第７のロジックと、
前記実行待ち命令の実行のために、必要なデータが利用可能であるという評価に基づいて前記複数の実行待ち命令を第２のステージに進める第８のロジックと、
前記第２のステージにおいて前記複数の実行待ち命令の各々についての有効性ビットを格納する第９のロジックであって、前記有効性ビットは、それぞれのストランドがアクティブかどうかと、それぞれの実行待ち命令の実行のために、必要なデータが利用可能であるかどうかとを示している、第９のロジックと、
をさらに備える請求項１に記載のプロセッサ。
【請求項６】
前記複数の実行待ち命令の各々の前記プログラム順と、その他の複数の実行待ち命令の前記プログラム順とのマトリックス比較を実行し、その結果を論理マトリックスに格納する第６のロジックであって、前記複数の実行待ち命令の各々は、前記論理マトリックスのそれぞれの行で表されており、前記複数の実行待ち命令の各々の優先度は、前記それぞれの行内の正ビットの数量で表されている、第６のロジックと、
前記論理マトリックス内の前記それぞれの実行待ち命令の各々について複数の前記正ビットを調整して、前記複数の実行ポートのうちの１つの実行ポートに関連付けられた変更された論理マトリックスを生成する第７のロジックであって、前記調整は、それぞれのストランドがアクティブであるかどうかに基づいている、第７のロジックと、
をさらに備える請求項１に記載のプロセッサ。
【請求項７】
前記変更された論理マトリックスとポートバインディング情報とに基づいてワンホットディスパッチベクトルを生成する第８のロジックをさらに備え、前記ベクトルは、前記変更された論理マトリックスに関連付けられた前記複数の実行ポートのうちの前記１つの実行ポートに割り当てられるべき、前記複数の実行待ち命令のうちの１つの実行待ち命令のインデックスにおいて１つの正ビットを含んでいる、請求項６に記載のプロセッサ。
【請求項８】
１または複数の実行ポート上にロードすべく、複数のストランドに分割された命令ストリームをフェッチする段階と、
複数の実行待ち命令を特定する段階であって、各実行待ち命令は、前記複数のストランドのうちの１つのそれぞれのヘッドにある、段階と、
前記複数のストランドのどれがアクティブであるかを決定する段階と、
前記複数の実行待ち命令の各々のプログラム順を決定する段階と、
各実行待ち命令の前記プログラム順と、各ストランドがアクティブであるかどうかとに基づいて前記複数の実行待ち命令を前記複数の実行ポートにマッチングさせる段階と、
を備える、プロセッサ内における方法。
【請求項９】
前記複数の実行ポートのうちの１つへの前記複数の実行待ち命令のうちの１つのポートバインディングを決定する段階と、
各実行待ち命令の前記プログラム順と、各ストランドがアクティブであるかどうかと、前記ポートバインディングとに基づいて、前記複数の実行待ち命令を前記複数の実行ポートにマッチングさせる段階と、
をさらに備える請求項８に記載の方法。
【請求項１０】
前記複数の実行待ち命令を前記複数の実行ポートにマッチングさせる段階は、単一プロセッサクロックサイクル内で実行される、請求項８に記載の方法。
【請求項１１】
前記複数の実行ポートのうちの所与の１つのためのワンホットベクトルを生成する段階をさらに備え、前記ベクトルは、前記所与の実行ポートに割り当てられるべき、前記複数の実行待ち命令のうちの１つの実行待ち命令のインデックスにおいて１つの正ビットを含んでいる、請求項８に記載の方法。
【請求項１２】
第１のステージにおいて前記複数の実行待ち命令を格納する段階と、
前記複数の実行待ち命令の実行のために、必要なデータが利用可能かどうかを評価する段階と、
前記複数の実行待ち命令の実行のために、必要なデータが利用可能であるという評価に基づいて、前記複数の実行待ち命令を第２のステージに進める段階と、
前記第２のステージにおいて前記複数の実行待ち命令の各々についての有効性ビットを格納する段階と、
をさらに備え、
前記有効性ビットは、それぞれのストランドがアクティブかどうかと、それぞれの実行待ち命令の実行のために、必要なデータが利用可能であるかどうかとを示している、請求項８に記載の方法。
【請求項１３】
前記複数の実行待ち命令の各々の前記プログラム順と、その他の複数の実行待ち命令の前記プログラム順とのマトリックス比較を実行して、その結果を論理マトリックスに格納する段階であって、前記複数の実行待ち命令の各々は前記論理マトリックスのそれぞれの行で表されており、前記複数の実行待ち命令の各々の優先度は前記それぞれの行内の正ビットの数量で表されている、段階と、
前記論理マトリックス内の前記それぞれの実行待ち命令の各々について複数の前記正ビットを調整して、前記複数の実行ポートのうちの１つに関連付けられた変更された論理マトリックスを生成する段階であって、前記調整は、それぞれのストランドがアクティブかどうかに基づいている、段階と、
をさらに備える請求項８に記載の方法。
【請求項１４】
１または複数の実行ポート上にロードすべく、複数のストランドに分割された命令ストリームをフェッチする第１のロジックと、
複数の実行待ち命令を特定する第２のロジックであって、各実行待ち命令は、前記複数のストランドのうちの１つのそれぞれのヘッドにある、第２のロジックと、
前記複数のストランドのどれがアクティブであるかを決定する第３のロジックと、
前記複数の実行待ち命令の各々のプログラム順を決定する第４のロジックと、
各実行待ち命令の前記プログラム順と、各ストランドがアクティブかどうかとに基づいて、前記複数の実行待ち命令を前記複数の実行ポートにマッチングさせる第５のロジックと、
を備えるシステム。
【請求項１５】
前記複数の実行ポートのうちの１つへの前記複数の実行待ち命令のうちの１つのポートバインディングを決定する第６のロジックと、
各実行待ち命令の前記プログラム順と、各ストランドがアクティブかどうかと、前記ポートバインディングとに基づいて、前記複数の実行待ち命令を前記複数の実行ポートにマッチングさせる第７のロジックと、
をさらに備える請求項１４に記載のシステム。
【請求項１６】
前記複数の実行待ち命令を前記複数の実行ポートにマッチングさせる前記第５のロジックは、さらに、単一プロセッサクロックサイクル内で実行される、請求項１４に記載のシステム。
【請求項１７】
前記複数の実行ポートのうちの所与の１つのためのワンホットベクトルを生成する第６のロジックをさらに備え、前記ベクトルは、前記所与の実行ポートに割り当てられるべき、前記複数の実行待ち命令のうちの１つの実行待ち命令のインデックスにおいて１つの正ビットを含んでいる、請求項１４に記載のシステム。
【請求項１８】
第１のステージにおいて前記複数の実行待ち命令を格納する第６のロジックと、
前記複数の実行待ち命令の実行のために、必要なデータが利用可能かどうかを評価する第７のロジックと、
前記複数の実行待ち命令の実行のために、必要なデータが利用可能であるという評価に基づいて、前記複数の実行待ち命令を第２のステージに進める第８のロジックと、
前記第２のステージにおいて前記複数の実行待ち命令の各々についての有効性ビットを格納する第９のロジックと、
をさらに備え、
前記有効性ビットは、それぞれのストランドがアクティブかどうかと、それぞれの実行待ち命令の実行のために、必要なデータが利用可能かどうかとを示している、請求項１４に記載のシステム。
【請求項１９】
前記複数の実行待ち命令の各々の前記プログラム順と、その他の複数の実行待ち命令の前記プログラム順とのマトリックス比較を実行し、その結果を論理マトリックスに格納する第６のロジックであって、前記複数の実行待ち命令の各々は、前記論理マトリックスのそれぞれの行で表されており、前記複数の実行待ち命令の各々の優先度は、前記それぞれの行内の正ビットの数量で表されている、第６のロジックと、
前記論理マトリックス内の前記それぞれの実行待ち命令の各々について複数の前記正ビットを調整して、前記複数の実行ポートのうちの１つに関連付けられた変更された論理マトリックスを生成する第７のロジックであって、前記調整は、それぞれのストランドがアクティブかどうかに基づいている、第７のロジックと、
をさらに備える請求項１４に記載のシステム。
【請求項２０】
前記変更された論理マトリックスとポートバインディング情報とに基づいてワンホットディスパッチベクトルを生成する第８のロジックをさらに備え、前記ベクトルは、前記変更された論理マトリックスに関連付けられた前記複数の実行ポートのうちの前記１つの実行ポートに割り当てられるべき、前記複数の実行待ち命令のうちの１つの実行待ち命令のインデックスにおいて１つの正ビットを含んでいる、請求項１４に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、プロセッサまたは他の処理ロジックによって実行されると、論理的、数学的、または他の機能的なオペレーションを実行する処理ロジック、マイクロプロセッサ、および関連付けられた命令セットアーキテクチャの分野に関する。
【背景技術】
【０００２】
マルチプロセッサシステムはますます一般的になってきている。マルチプロセッサシステムの用途は、動的なドメイン区分けからデスクトップコンピューティングに至る用途を含む。マルチプロセッサシステムを活用すべく、実行されるコードは、様々な処理エンティティによる実行のための複数のスレッドに分割されてよい。各スレッドは互いに並列に実行されてよい。さらに、処理エンティティの実用性を向上させるべく、アウトオブオーダ実行が用いられてよい。アウトオブオーダ実行は、複数の命令に対する必要な入力が利用可能となる場合にそのような複数の命令を実行してよい。従って、コードシーケンス内で後に現われる命令がコードシーケンス内で先に現われる命令の前に実行されることがある。
【図面の簡単な説明】
【０００３】
複数の添付図面の図において、複数の実施形態が、例として、かつ限定しないものとして示される。
【０００４】
【図１Ａ】本開示の複数の実施形態に係る、命令を実行するための複数の実行ユニットを含んでよいプロセッサで形成された例示的コンピュータシステムのブロック図である。
【０００５】
【図１Ｂ】本開示の複数の実施形態に係るデータ処理システムを示す。
【０００６】
【図１Ｃ】複数の文字列比較オペレーションを実行するためのデータ処理システムの他の複数の実施形態を示す。
【０００７】
【図２】本開示の複数の実施形態に係る、複数の命令を実行するための複数のロジック回路を含んでよいプロセッサのためのマイクロアーキテクチャのブロック図である。
【０００８】
【図３Ａ】本開示の複数の実施形態に係る、マルチメディアレジスタ内の様々なパックドデータ型の表現を示す。
【０００９】
【図３Ｂ】本開示の複数の実施形態に係る、可能なレジスタ内データストレージフォーマットを示す。
【００１０】
【図３Ｃ】本開示の複数の実施形態に係る、マルチメディアレジスタ内の様々な符号付きおよび符号なしパックドデータ型の表現を示す。
【００１１】
【図３Ｄ】オペレーション符号化フォーマットの実施形態を示す。
【００１２】
【図３Ｅ】本開示の複数の実施形態に係る、４０またはそれより多くのビットを有する別の可能なオペレーション符号化フォーマットを示す。
【００１３】
【図３Ｆ】本開示の複数の実施形態に係る、さらに別の可能なオペレーション符号化フォーマットを示す。
【００１４】
【図４Ａ】本開示の複数の実施形態に係る、インオーダパイプラインと、レジスタリネーミングステージ、アウトオブオーダ発行／実行パイプラインとを示すブロック図である。
【００１５】
【図４Ｂ】本開示の複数の実施形態に係る、プロセッサに含まれるべき、インオーダアーキテクチャコアと、レジスタリネーミングロジック、アウトオブオーダ発行／実行ロジックとを示すブロック図である。
【００１６】
【図５Ａ】本開示の複数の実施形態に係るプロセッサのブロック図である。
【００１７】
【図５Ｂ】本開示の複数の実施形態に係るコアの実装例のブロック図である。
【００１８】
【図６】本開示の複数の実施形態に係るシステムのブロック図である。
【００１９】
【図７】本開示の複数の実施形態に係る第２のシステムのブロック図である。
【００２０】
【図８】本開示の複数の実施形態に係る第３のシステムのブロック図である。
【００２１】
【図９】本開示の複数の実施形態に係るシステムオンチップのブロック図である。
【００２２】
【図１０】本開示の複数の実施形態に係る、少なくとも１つの命令を実行してよい中央処理装置およびグラフィック処理ユニットを含むプロセッサを示す。
【００２３】
【図１１】本開示の複数の実施形態に係るＩＰコアの開発を示すブロック図である。
【００２４】
【図１２】本開示の複数の実施形態に従って、第１のタイプの命令が異なるタイプのプロセッサによってどのようにエミュレートされ得るかを示す。
【００２５】
【図１３】本開示の複数の実施形態に係る、ソース命令セット内の複数のバイナリ命令をターゲット命令セット内の複数のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図を示す。
【００２６】
【図１４】本開示の複数の実施形態に係るプロセッサの命令セットアーキテクチャのブロック図である。
【００２７】
【図１５】本開示の複数の実施形態に係る、プロセッサの命令セットアーキテクチャのより詳細なブロック図である。
【００２８】
【図１６】本開示の複数の実施形態に係る、プロセッサのための実行パイプラインのブロック図である。
【００２９】
【図１７】本開示の複数の実施形態に係る、プロセッサを利用するための電子デバイスのブロック図である。
【００３０】
【図１８】本開示の複数の実施形態に係る、複数の命令をディスパッチするための例示的システムを示す。
【００３１】
【図１９】本開示の複数の実施形態に係る命令スケジューリングユニットの例示的実施形態の図である。
【００３２】
【図２０】本開示の複数の実施形態に係る命令スケジューリングユニットのさらなる図である。
【００３３】
【図２１】本開示の複数の実施形態に係る、論理マトリックスの例示的実施形態、および論理マトリックスモジュールの例示的オペレーションの図である。
【００３４】
【図２２】本開示の複数の実施形態に係る、マトリックスマニピュレータの変更された論理マトリックスおよび例示的オペレーションを示す。
【００３５】
【図２３】本開示の複数の実施形態に係る、別のマトリックスマニピュレータの別の変更された論理マトリックスおよび例示的オペレーションを示す。
【００３６】
【図２４】本開示の複数の実施形態に係る、さらに別のマトリックスマニピュレータの例示的オペレーションを示す。
【００３７】
【図２５】本開示の複数の実施形態に係る、複数の命令をディスパッチするための方法の例示的実施形態を示す。
【００３８】
【発明を実施するための形態】
【００３９】
以下の説明では、プロセッサ、仮想プロセッサ、パッケージ、コンピュータシステム、または他の処理装置内の、またはそれと関連付けられる複数の命令をディスパッチするための命令および処理ロジックを説明する。そのような処理装置はアウトオブオーダプロセッサを含んでよい。さらに、そのような処理装置はマルチストランド・アウトオブオーダプロセッサを含んでよい。本開示の複数の実施形態に対するより完全な理解を提供すべく、以下の説明では、処理ロジック、複数のプロセッサタイプ、複数のマイクロアーキテクチャ条件、複数のイベント、複数の実施可能化メカニズムなどといった多数の具体的な詳細が述べられている。しかしながら、当業者ならば、そのような具体的な詳細なしに当該複数の実施形態が実施され得ることを理解するであろう。さらに、本開示の複数の実施形態を不必要に不明瞭にすることを避けるべく、いくつかの周知の構造、回路等は詳細には示されていない。
【００４０】
以下の複数の実施形態はプロセッサに関して説明されるが、他の複数のタイプの集積回路およびロジックデバイスに対して他の複数の実施形態が適用可能である。本開示の複数の実施形態の同様の複数の技術および教示が、より高いパイプラインスループットおよび改善された性能から恩恵を受け得る他の複数のタイプの回路または半導体デバイスに対して適用されてよい。本開示の複数の実施形態の教示は、データ操作を実行する任意のプロセッサまたは機械に対して適用可能である。しかしながら、それらの実施形態は、５１２ビット、２５６ビット、１２８ビット、６４ビット、３２ビット、または１６ビットのデータオペレーションを実行するプロセッサまたは機械に限定されず、データの操作または管理が実行されてよい任意のプロセッサおよび機械に対して適用されてもよい。加えて、以下の説明は複数の例を提供し、複数の添付図面は例示目的のために様々な例を示す。しかしながら、これらの例は、本開示の複数の実施形態の全ての可能な実装の網羅的リストを提供するものではなく、単に本開示の複数の実施形態の複数の例を提供するよう意図されているのであるから、限定的な意味に解釈されるべきではない。
【００４１】
以下の複数の例は、複数の実行ユニットおよび複数のロジック回路との関連で命令の処理および分散を説明するが、本開示の他の複数の実施形態は、機械によって実行されると、機械に本開示の少なくとも１つの実施形態と合致した複数の機能を実行させる機械可読有形媒体に格納されたデータまたは命令によって実現されてよい。一実施形態において、本開示の複数の実施形態に関連付けられる複数の機能は、機械で実行可能な複数の命令において具現化される。複数の命令は、複数の命令でプログラミングされてよい汎用プロセッサまたは専用プロセッサに本開示の複数の段階を実行させるべく使用されてよい。本開示の複数の実施形態は、本開示の複数の実施形態に従って１または複数のオペレーションを実行するようコンピュータ（または他の電子デバイス）をプログラミングすべく使用されてよい複数の命令が格納された機械またはコンピュータ可読媒体を含んでよいコンピュータプログラム製品またはソフトウェアとして提供されてよい。さらに、本開示の複数の実施形態の複数の段階は、それらの段階を実行するための固定機能ロジックを含む特定の複数のハードウェアコンポーネントによって、または、プログラミングされた複数のコンピュータコンポーネントと複数の固定機能ハードウェアコンポーネントとの任意の組み合わせによって実行されてよい。
【００４２】
本開示の複数の実施形態を実行するようロジックをプログラミングすべく使用される複数の命令は、システムのＤＲＡＭ、キャッシュ、フラッシュメモリ、または他のストレージなどのメモリ内に格納されてよい。さらに、それらの命令は、ネットワークを介して、または他のコンピュータ可読媒体によって分散されてよい。従って、機械可読媒体は、機械（例えばコンピュータ）が可読な形式の情報を格納または送信するための任意のメカニズムを含んでよい。そのようなものとして、フロッピー（登録商標）ディスケット、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、および磁気光ディスク、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、磁気カードまたは光カード、フラッシュメモリ、または、電気、光、音波または他の形態の複数の伝搬信号（例えば、搬送波、赤外線信号、デジタル信号等）を介したインターネット上での情報の送信に使用される有形の機械可読ストレージが挙げられるが、それらに限定されるものではない。従って、コンピュータ可読媒体は、機械（例えばコンピュータ）が可読な形式の複数の電子命令または情報を格納または送信するのに適した任意のタイプの有形の機械可読媒体を含んでよい。
【００４３】
設計は、作成からシミュレーション、製造に至る様々なステージを経てよい。設計を表すデータは、いくつかの態様で設計を表わしてよい。まず、シミュレーションにおいて有用であり得るが、ハードウェアはハードウェア記述言語または別の機能記述言語を使用して表されてよい。さらに、ロジックおよび／または複数のトランジスタゲートを有する回路レベルのモデルは設計過程のいくつかステージにおいて生成されてよい。さらに、複数の設計は、いくつかステージにおいて、ハードウェアモデルでの様々なデバイスの物理的配置を表すデータのレベルに到達してよい。いくつかの半導体製造技術が使用される複数の場合では、ハードウェアモデルを表わすデータは、集積回路を生成すべく使用される複数のマスクの異なるマスクレイヤ上に様々な特徴の有無を指定するデータであってよい。設計の任意の表現では、データは任意の形態の機械可読媒体に格納されてよい。ディスクなどのメモリまたは磁気ストレージもしくは光ストレージは、情報を送信すべく変調、またはそうでなければ生成された光波または電波を介して送信されるそのような情報を格納するための機械可読媒体であってよい。コードまたは設計を示すまたは搬送する電気搬送波が送信されたとき、電気信号のコピー、バッファリング、または再送信が実行される限りは、新たなコピーが作成されてよい。従って、通信プロバイダまたはネットワークプロバイダは、本開示の複数の実施形態の技術を具現化して、搬送波に符号化された情報などの項目を有形の機械可読媒体に少なくとも一時的に格納してよい。
【００４４】
最新のプロセッサでは、様々なコードおよび命令を処理および実行すべく、いくつかの異なる実行ユニットが使用されてよい。いくつかの命令は、他の複数の命令が完了に複数のクロックサイクルを必要とするのに対し、完了までがより迅速であり得る。複数の命令のスループットがより高速になるほど、プロセッサの全体的な性能はより良好になる。従って、多数の命令をできる限り高速に実行させることが有利であろう。しかしながら、浮動小数点命令、ロード／ストアオペレーション、データ移動等といった、より複雑性が高く、実行時間およびプロセッサリソースに関してより多くを要求する特定の複数の命令が存在し得る。
【００４５】
インターネットアプリケーション、テキストアプリケーション、およびマルチメディアアプリケーションにおいてより多くのコンピュータシステムが使用されるにつれ、追加のプロセッサのサポートが時間とともに導入されてきた。一実施形態において、命令セットは、複数のデータ型、複数の命令、レジスタアーキテクチャ、複数のアドレス指定モード、メモリアーキテクチャ、割り込みおよび例外処理、ならびに外部入出力（Ｉ／Ｏ）を含む１または複数のコンピュータアーキテクチャに関連付けられてよい。
【００４６】
一実施形態において、命令セットアーキテクチャ（ＩＳＡ）は、１または複数の命令セットを実装すべく使用されるプロセッサロジックおよび複数のプロセッサ回路を含んでよい１または複数のマイクロ−アーキテクチャによって実装されてよい。従って、異なるマイクロアーキテクチャを備える複数のプロセッサは、共通の命令セットの少なくとも一部分を共有してよい。例えば、インテル（登録商標）Ｐｅｎｔｉｕｍ（登録商標）４プロセッサ、インテル（登録商標）Ｃｏｒｅ（商標）プロセッサ、およびカリフォルニア州サニーベールのアドバンストマイクロデバイセズ社のプロセッサは、（複数のより新たなバージョンが追加されたいくつかの拡張を伴う）ｘ８６命令セットのほぼ同一の複数のバージョンを実装するが、複数の異なる内部設計を有する。 同様に、ＡＲＭホールディングス社、ＭＩＰＳ、またはこれらのライセンシ若しくは採用者などの他のプロセッサ開発企業によって設計された複数のプロセッサは、共通の命令セットの少なくとも一部分を共有してよいが、複数の異なるプロセッサ設計を含んでよい。例えば、同じＩＳＡレジスタアーキテクチャが、複数の専用物理レジスタ、レジスタリネーミングメカニズムを使用する（例えば、レジスタエイリアステーブル（ＲＡＴ）の使用）１または複数の動的に割り当てられた物理レジスタ、リオーダバッファ（ＲＯＢ）、およびリタイアメントレジスタファイルを含む新たなまたは周知の複数の技術を使用して、複数の異なるマイクロアーキテクチャにおいて異なる様式で実装されてよい。一実施形態において、複数のレジスタは、ソフトウェアプログラマによってアドレス指定可能であってもなくてもよい１または複数のレジスタ、レジスタアーキテクチャ、レジスタファイル、または他のレジスタセットを含んでよい。
【００４７】
命令は、１または複数の命令フォーマットを含んでよい。 一実施形態において、命令フォーマットは、とりわけ、実行されるべきオペレーション、およびそのオペレーションが実行されるであろう複数のオペランドを指定する様々なフィールド（ビット数、ビット位置等）を示してよい。さらなる実施形態において、いくつか命令フォーマットは、さらに、複数の命令テンプレート（またはサブフォーマット）によって定義されてよい。例えば、所与の命令フォーマットの複数の命令テンプレートは、その命令フォーマットの複数のフィールドの異なる複数のサブセットを有すると定義されてよく、および／または、異なる様に解釈された所与のフィールドを有すると定義されてもよい。一実施形態において、命令は、命令フォーマットを使用して（および、定義された場合、その命令フォーマットの複数の命令テンプレートのうちの１つにおいて）表されてよく、オペレーションと、そのオペレーションが動作する複数のオペランドとを指定する、または示す。
【００４８】
科学アプリケーション、財務アプリケーション、自動ベクトル化された汎用アプリケーション、ＲＭＳアプリケーション（認識、マイニング、および合成）、ならびに視覚およびマルチメディアアプリケーション（例えば、２Ｄ／３Ｄグラフィック、画像処理、ビデオ圧縮／圧縮解除、音声認識のアルゴリズム、およびオーディオ操作）は、多数のデータ項目に対して実行されるべき同じオペレーションを要求することがある。一実施形態において、単一命令多重データ（ＳＩＭＤ）は、プロセッサに、複数のデータ要素に対してオペレーションを実行させる命令のタイプを指す。ＳＩＭＤ技術は複数のプロセッサにおいて使用されてよい。ＳＩＭＤ技術はレジスタ内の複数のビットを、いくつかの固定サイズの、または可変サイズのデータ要素に論理的に分割してよい。データ要素の各々は別個の値を表している。例えば、一実施形態において、６４ビットレジスタ内の複数のビットは、各々が別個の１６ビット値を表す４つの別個の１６ビットデータ要素を含むソースオペランドとして編成されてよい。このタイプのデータは、「パックド」データ型または「ベクトル」データ型と称されてよく、このデータ型の複数のオペランドは、パックドデータオペランドまたはベクトルオペランドと称されてよい。一実施形態において、パックドデータ項目またはベクトルは、単一のレジスタ内に格納された一連のパックドデータ要素であってよく、パックドデータオペランドまたはベクトルオペランドは、ＳＩＭＤ命令（または「パックドデータ命令」または「ベクトル命令」）のソースオペランドまたはデスティネーションオペランドであってよい。一実施形態において、ＳＩＭＤ命令は、２つのソースベクトルオペランドに対して実行されるべき単一のベクトルオペレーションを指定して、同じまたは異なるサイズの（結果ベクトルオペランド（ｒｅｓｕｌｔ  ｖｅｃｔｏｒ  ｏｐｅｒａｎｄ）とも称される）デスティネーションベクトルオペランドを生成する。デスティネーションベクトルオペランドは、同じまたは異なる数のデータ要素を有し、同じまたは異なるデータ要素順序となっている。
【００４９】
ｘ８６命令、ＭＭＸ（商標）命令、ストリーミングＳＩＭＤ拡張（ＳＳＥ）命令、ＳＳＥ２命令、ＳＳＥ３命令、ＳＳＥ４．１命令、ＳＳＥ４．２命令を含む命令セットを有するインテル（登録商標）Ｃｏｒｅ（商標）プロセッサと、ベクトル浮動小数点（ＶＦＰ）命令および／またはＮＥＯＮ命令を含む命令セットを有するＡＲＭ  Ｃｏｒｔｅｘ（登録商標）ファミリのプロセッサなどのＡＲＭプロセッサと、中国科学院のコンピューティング技術研究所（ＩＣＴ）によって開発された龍芯（Ｌｏｏｎｇｓｏｎ）ファミリのプロセッサなどのＭＩＰＳプロセッサとによって用いられるものなどのＳＩＭＤ技術は、アプリケーション性能の顕著な改善を可能にした。（Ｃｏｒｅ（商標）およびＭＭＸ（商標）は、カリフォルニア州サンタクララのインテルコーポレーションの登録商標または商標である。）
【００５０】
一実施形態において、デスティネーションおよびソースのレジスタ／データは、対応するデータまたはオペレーションのソースおよびデスティネーションを表すための一般的用語であってよい。いくつかの実施形態において、それらは、複数のレジスタ、メモリ、または示されたもの以外の名称または機能を有する他の複数のストレージ領域によって実装されてよい。例えば、一実施形態において、「ＤＥＳＴ１」が一時的なストレージレジスタまたは他のストレージ領域である一方で、「ＳＲＣ１」および「ＳＲＣ２」は、第１および第２のソースストレージレジスタまたは他のストレージ領域であってよい、といった具合である。他の実施形態において、ＳＲＣおよびＤＥＳＴのストレージ領域のうちの２またはそれより多くは、同じストレージ領域（例えば、ＳＩＭＤレジスタ）内で異なるデータストレージ要素に対応していてよい。一実施形態において、ソースレジスタのうちの１つは、例えば、第１および第２のソースデータに対して実行されたオペレーションの結果を、デスティネーションレジスタとして機能する２つのソースレジスタのうちの１つにライトバックすることによってデスティネーションレジスタとして動作してもよい。
【００５１】
図１Ａは、本開示の複数の実施形態に係る、命令を実行するための複数の実行ユニットを含んでよいプロセッサで形成された例示的コンピュータシステムのブロック図である。システム１００は、本明細書において説明される実施形態などにおける、本開示に係る、複数のデータ処理アルゴリズムを実行するためのロジックを含む複数の実行ユニットを用いるための、プロセッサ１０２などのコンポーネントを含んでよい。システム１００は、カリフォルニア州サンタクララのインテルコーポレーションから入手可能なＰＥＮＴＩＵＭ（登録商標）ＩＩＩ、ＰＥＮＴＩＵＭ（登録商標）４、Ｘｅｏｎ（商標）、Ｉｔａｎｉｕｍ（登録商標）、ＸＳｃａｌｅ（商標）、および／またはＳｔｒｏｎｇＡＲＭ（商標）のマイクロプロセッサに基づく処理システムを代表するものであってよいが、（他のマイクロプロセッサ、エンジニアリングワークステーション、セットトップボックス等を有するＰＣを含む）複数の他のシステムもまた使用されてよい。一実施形態において、サンプルシステム１００は、ワシントン州レドモンド市のマイクロソフトコーポレーションから入手可能なＷＩＮＤＯＷＳ（登録商標）オペレーティングシステムのあるバージョンを実行してよいが、他のオペレーティングシステム（例えばＵＮＩＸ（登録商標）およびＬｉｎｕｘ（登録商標））、組み込みソフトウェア、および／またはグラフィカルユーザインタフェースもまた使用されてよい。従って、本開示の複数の実施形態は、ハードウェア回路およびソフトウェアの任意の特定の組み合わせに限定されるものではない。
【００５２】
複数の実施形態はコンピュータシステムに限定されるものではない。本開示の複数の実施形態は、ハンドヘルドデバイスおよび組み込みアプリケーションなどの他の複数のデバイスで使用されてよい。ハンドヘルドデバイスのいくつか例には、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、パーソナルデジタルアシスタント（ＰＤＡ）、およびハンドヘルドＰＣが挙げられる。組み込みアプリケーションは、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、システムオンチップ、ネットワークコンピュータ（ＮｅｔＰＣ）セットトップボックス、ネットワークハブ、ワイドエリアネットワーク（ＷＡＮ）スイッチ、または、少なくとも１つの実施形態に係る１または複数の命令を実行してよい任意の他のシステムを含んでよい。
【００５３】
コンピュータシステム１００は、本開示の一実施形態に係る少なくとも１つの命令を実行するためのアルゴリズムを実行する１または複数の実行ユニット１０８を含んでよいプロセッサ１０２を含んでよい。単一プロセッサのデスクトップまたはサーバシステムとの関連で一実施形態が説明されてよいが、他の複数の実施形態はマルチプロセッサシステムに含まれてよい。システム１００は「ハブ」システムアーキテクチャの例であってよい。システム１００はデータ信号を処理するためのプロセッサ１０２を含んでよい。プロセッサ１０２は、複合命令セットコンピュータ（ＣＩＳＣ）マイクロプロセッサ、縮小命令セットコンピューティング（ＲＩＳＣ）マイクロプロセッサ、超長命令語（ＶＬＩＷ）マイクロプロセッサ、複数の命令セットの組み合わせを実装するプロセッサ、または、例えばデジタル信号プロセッサといった任意の他のプロセッサデバイスを含んでよい。一実施形態において、プロセッサ１０２は、プロセッサ１０２とシステム１００内の他の複数のコンポーネントとの間で複数のデータ信号を送信してよいプロセッサバス１１０に連結されてよい。システム１００の複数の要素は、当業者に周知の従来の複数の機能を実行してよい。
【００５４】
一実施形態において、プロセッサ１０２はレベル１（Ｌ１）内部キャッシュメモリ１０４を含んでよい。アーキテクチャに応じて、プロセッサ１０２は、単一の内部キャッシュまたは複数のレベルの内部キャッシュを有してよい。別の実施形態において、キャッシュメモリはプロセッサ１０２の外部に存在してよい。他の複数の実施形態は、特定の実装および必要性に応じて、内部キャッシュおよび外部キャッシュの両方の組み合わせも含んでよい。レジスタファイル１０６は、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、および命令ポインタレジスタを含む様々なレジスタ内に複数の異なるタイプのデータを格納してよい。
【００５５】
整数オペレーションおよび浮動小数点オペレーションを実行するためのロジックを含む実行ユニット１０８はまた、プロセッサ１０２にも存在してよい。プロセッサ１０２はまた、特定の複数のマクロ命令のマイクロコードを格納するマイクロコード（μコード）ＲＯＭを含んでよい。一実施形態において、実行ユニット１０８は、パックド命令セット１０９を処理するためのロジックを含んでよい。汎用プロセッサ１０２の命令セット内にパックド命令セット１０９を、それらの命令を実行する関連回路と共に含むことによって、多くのマルチメディアアプリケーションによって使用される複数のオペレーションは、汎用プロセッサ１０２内のパックドデータを使用して実行されてよい。従って、多くのマルチメディアアプリケーションは、パックドデータに対して複数のオペレーションを実行すべくプロセッサのデータバスの全幅を使用することで高速化され、より効率的に実行され得る。このことは、プロセッサのデータバス間で複数のより小さな単位のデータを転送する必要性をなくし、一データ要素に対して同時に１または複数のオペレーションを実行することができる。
【００５６】
実行ユニット１０８の複数の実施形態は、複数のマイクロコントローラ、複数の組み込みプロセッサ、複数のグラフィックデバイス、複数のＤＳＰ、および他の複数のタイプのロジック回路においてもまた使用されてよい。システム１００はメモリ１２０を含んでよい。メモリ１２０は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）デバイス、スタティックランダムアクセスメモリ（ＳＲＡＭ）デバイス、フラッシュメモリデバイス、または他のメモリデバイスとして実装されてよい。メモリ１２０は、プロセッサ１０２によって実行されてよい複数のデータ信号によって表された複数の命令および／またはデータを格納してよい。
【００５７】
システムロジックチップ１１６は、プロセッサバス１１０およびメモリ１２０に連結されてよい。システムロジックチップ１１６は、メモリコントローラハブ（ＭＣＨ）を含んでよい。プロセッサ１０２はプロセッサバス１１０を介してＭＣＨ１１６と通信してよい。ＭＣＨ１１６は、命令およびデータの格納のための、ならびにグラフィックコマンド、グラフィックデータ、およびグラフィックテクスチャの格納のためのメモリ１２０に対して高帯域幅のメモリパス１１８を提供してよい。ＭＣＨ１１６は、プロセッサ１０２、メモリ１２０、およびシステム１００内の他の複数のコンポーネントの間で複数のデータ信号を方向付けし、プロセッサバス１１０、メモリ１２０、およびシステムＩ／Ｏ１２２の間でそれらのデータ信号を橋渡ししてよい。いくつかの実施形態では、システムロジックチップ１１６は、グラフィックコントローラ１１２に連結するためのグラフィックポートを提供してよい。ＭＣＨ１１６は、メモリインタフェース１１８を通してメモリ１２０に連結されてよい。グラフィックカード１１２は、アクセラレーテッドグラフィックポート（Ａｃｃｅｌｅｒａｔｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ：ＡＧＰ）インターコネクト１１４を通してＭＣＨ１１６に連結されてよい。
【００５８】
システム１００は、プロプライエタリなハブインタフェースバス１２２を使用してＭＣＨ１１６をＩ／Ｏコントローラハブ（ＩＣＨ）１３０に連結してよい。一実施形態において、ＩＣＨ１３０は、ローカルＩ／Ｏバスを介していくつかのＩ／Ｏデバイスへの直接接続を提供してよい。ローカルＩ／Ｏバスは、複数の周辺装置をメモリ１２０、チップセット、およびプロセッサ１０２に接続するための高速Ｉ／Ｏバスを含んでよい。複数の例は、オーディオコントローラ、ファームウェアハブ（フラッシュＢＩＯＳ）１２８、無線送受信機１２６、データストレージ１２４、ユーザ入力インタフェースおよびキーボードインタフェースを含むレガシＩ／Ｏコントローラ、ユニバーサルシリアルバス（ＵＳＢ）などのシリアル拡張ポート、およびネットワークコントローラ１３４を含んでよい。データストレージデバイス１２４は、ハードディスクドライブ、フロッピー（登録商標）ディスクドライブ、ＣＤ−ＲＯＭデバイス、フラッシュメモリデバイス、または他の大容量ストレージデバイスを備えてよい。
【００５９】
システムの別の実施形態では、一実施形態に係る命令はシステムオンチップで使用されてよい。システムオンチップの一実施形態は、プロセッサおよびメモリを備える。そのような一システムのメモリはフラッシュメモリを含んでよい。フラッシュメモリは、プロセッサおよびシステムの他の複数のコンポーネントと同じダイ上に位置してよい。さらに、メモリコントローラまたはグラフィックコントローラなどの他の複数のロジックブロックはまた、システムオンチップ上に位置してもよい。
【００６０】
図１Ｂは、本開示の複数の実施形態の複数の原理を実装するデータ処理システム１４０を示している。本明細書において説明される複数の実施形態が、本開示の複数の実施形態の範囲から逸脱することなく、代替的な複数の処理システムで動作してよいことが当業者には容易に理解されよう。
【００６１】
コンピュータシステム１４０は一実施形態に係る少なくとも１つの命令を実行するための処理コア１５９を備える。一実施形態において、処理コア１５９は、限定はされないが、ＣＩＳＣ型、ＲＩＳＣ型、またはＶＬＩＷ型のアーキテクチャを含む任意のタイプのアーキテクチャの処理ユニットを表している。処理コア１５９はまた、１または複数のプロセス技術での製造に適していると考えられ、機械可読媒体上で十分詳細に表されることによって、上記製造を容易にするのに適していると考えられる。
【００６２】
処理コア１５９は、実行ユニット１４２、１セットのレジスタファイル１４５、デコーダ１４４を備える。処理コア１５９は、本開示の複数の実施形態を理解する上で不要と思われる追加の回路（不図示）もまた含んでよい。実行ユニット１４２は、処理コア１５９によって受信された複数の命令を実行してよい。実行ユニット１４２は、典型的な複数のプロセッサ命令の実行に加えて、複数のパックドデータフォーマット上の複数のオペレーションを実行するためのパックド命令セット１４３内の複数の命令を実行してよい。パックド命令セット１４３は、本開示の複数の実施形態および他の複数のパックド命令を実行するための複数の命令を含んでよい。実行ユニット１４２は、内部バスによってレジスタファイル１４５に連結されてよい。レジスタファイル１４５は、データを含む情報を格納するための、処理コア１５９上のストレージ領域を表してよい。前述したように、パックドデータを格納してよいストレージ領域は、重要ではないと考えられることが理解されよう。実行ユニット１４２は、デコーダ１４４に連結されてよい。デコーダ１４４は、処理コア１５９によって受信された複数の命令を複数の制御信号および／またはマイクロコードエントリポイントに復号してよい。これらの制御信号および／またはマイクロコードエントリポイントに応答して、実行ユニット１４２は適切な複数のオペレーションを実行する。一実施形態において、デコーダは、命令のオペコードを解釈してよい。オペコードは、命令内で示された対応するデータ上でどのオペレーションが実行されるべきかを示しているであろう。
【００６３】
処理コア１５９は、システムの様々な他のデバイスと通信するためにバス１４１で連結されてよい。そのようなデバイスは、例えば、シンクロナスダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）制御部１４６、スタティックランダムアクセスメモリ（ＳＲＡＭ）制御部１４７、バーストフラッシュメモリインタフェース１４８、パーソナルコンピュータメモリカード国際協会（ＰＣＭＣＩＡ）／コンパクトフラッシュ（登録商標）（ＣＦ）カード制御部１４９、液晶ディスプレイ（ＬＣＤ）制御部１５０、ダイレクトメモリアクセス（ＤＭＡ）コントローラ１５１、および代替バスマスタインタフェース１５２を含んでよいが、それらに限定されるものではない。一実施形態において、データ処理システム１４０は、Ｉ／Ｏバス１５３を介して様々なＩ／Ｏデバイスと通信するためのＩ／Ｏブリッジ１５４もまた備えてよい。そのようなＩ／Ｏデバイスは、例えば、汎用非同期送受信機（ＵＡＲＴ）１５５、ユニバーサルシリアルバス（ＵＳＢ）１５６、Ｂｌｕｅｔｏｏｔｈ（登録商標）無線ＵＡＲＴ１５７、およびＩ／Ｏ拡張インタフェース１５８を含んでよいが、それらの限定されるものではない。
【００６４】
データ処理システム１４０の一実施形態は、モバイル通信、ネットワーク通信、および／または無線通信、ならびに文字列比較オペレーションを含む複数のＳＩＭＤオペレーションを実行し得る処理コア１５９を提供する。処理コア１５９は、様々なオーディオアルゴリズム、ビデオアルゴリズム、撮像アルゴリズム、および通信アルゴリズムでプログラミングされてよい。それらのアルゴリズムは、ウォルシュアダマール変換、高速フーリエ変換（ＦＦＴ）、離散コサイン変換（ＤＣＴ）、およびこれらのそれぞれの逆変換などの離散変換と、色空間変換、ビデオ符号化動き推定（ｖｉｄｅｏ  ｅｎｃｏｄｅ  ｍｏｔｉｏｎ  ｅｓｔｉｍａｔｉｏｎ）またはビデオ復号動き補償（ｖｉｄｅｏ  ｄｅｃｏｄｅ  ｍｏｔｉｏｎ  ｃｏｍｐｅｎｓａｔｉｏｎ）などの圧縮／圧縮解除技術と、パルス符号変調（ＰＣＭ）などの変調／復調（ＭＯＤＥＭ）機能とを含む。
【００６５】
図１Ｃは、複数のＳＩＭＤ文字列比較オペレーションを実行するデータ処理システムの他の複数の実施形態を示している。一実施形態において、データ処理システム１６０は、メインプロセッサ１６６、ＳＩＭＤコプロセッサ１６１、キャッシュメモリ１６７、および入出力システム１６８を含んでよい。入出力システム１６８は、任意で、無線インタフェース１６９に連結されてよい。ＳＩＭＤコプロセッサ１６１は一実施形態に係る複数の命令を含む複数のオペレーションを実行してよい。一実施形態において、処理コア１７０は、１または複数のプロセス技術での製造に適していると考えられ、機械可読媒体上で十分詳細に表されることによって、処理コア１７０を含む、データ処理システム１６０の全部または一部の製造を容易にするのに適していると考えられる。
【００６６】
一実施形態において、ＳＩＭＤコプロセッサ１６１は、実行ユニット１６２および１セットのレジスタファイル１６４を備える。メインプロセッサ１６５の一実施形態は、実行ユニット１６２による実行のための、一実施形態に係る複数の命令を含む命令セット１６３の複数の命令を認識するデコーダ１６５を備える。他の実施形態において、ＳＩＭＤコプロセッサ１６１は、命令セット１６３の複数の命令を復号するデコーダ１６５の少なくとも一部もまた備える。処理コア１７０は、また、本開示の複数の実施形態を理解する上で不要と思われる追加の回路（不図示）を含んでよい。
【００６７】
オペレーション中、メインプロセッサ１６６は、キャッシュメモリ１６７および入出力システム１６８とのインタラクションを含む一般型の複数のデータ処理オペレーションを制御する複数のデータ処理命令のストリームを実行する。複数のＳＩＭＤコプロセッサ命令が、複数のデータ処理命令のストリーム内に組み込まれている。メインプロセッサ１６６のデコーダ１６５は、これらのＳＩＭＤコプロセッサ命令を、付属のＳＩＭＤコプロセッサ１６１によって実行されるべきタイプのものであると認識する。従って、メインプロセッサ１６６は、これらのＳＩＭＤコプロセッサ命令（または、複数のＳＩＭＤコプロセッサ命令を表す複数の制御信号）をコプロセッサバス１６６に発行する。コプロセッサバス１６６から、これら命令は、任意の付属のＳＩＭＤコプロセッサによって受信されてよい。この場合、ＳＩＭＤコプロセッサ１６１は、ＳＩＭＤコプロセッサ１６１を対象とした、受信された任意の複数のＳＩＭＤコプロセッサ命令を受け取り実行してよい。
【００６８】
データは、複数のＳＩＭＤコプロセッサ命令による処理のために無線インタフェース１６９を介して受信されてよい。一例として、音声通信がデジタル信号の形で受信されてよく、デジタル信号は複数のＳＩＭＤコプロセッサ命令によって処理されて、音声通信を代表するデジタルオーディオサンプルを再生成してよい。別の例では、圧縮されたオーディオおよび／またはビデオがデジタルビットストリームの形で受信されてよく、デジタルビットストリームは複数のＳＩＭＤコプロセッサ命令によって処理されて、複数のデジタルオーディオサンプルおよび／または複数の動画ビデオフレームを再生成してよい。処理コア１７０の一実施形態において、メインプロセッサ１６６およびＳＩＭＤコプロセッサ１６１は、一実施形態に係る複数の命令を含む命令セット１６３の複数の命令を認識すべく、実行ユニット１６２、１セットのレジスタファイル１６４、およびデコーダ１６５を備える単一処理コア１７０の中に統合されてよい。
【００６９】
図２は、本開示の複数の実施形態に係る、複数の命令を実行するための複数のロジック回路を含んでよいプロセッサ２００のマイクロアーキテクチャのブロック図である。いくつかの実施形態において、一実施形態に係る命令は、バイト、ワード、ダブルワード、クワッドワード等のサイズと、単精度整数および倍精度整数などのデータ型ならびに浮動小数点データ型とを有する複数のデータ要素に対して動作すべく実装されてよい。一実施形態において、インオーダフロントエンド２０１は、実行されるべき複数の命令をフェッチしてよいプロセッサ２００の一部を実装してよく、プロセッサパイプラインにおいてそれらの命令が後に使用されるよう準備する。フロントエンド２０１はいくつかのユニットを含んでよい。一実施形態において、命令プリフェッチャ２２６は、メモリから複数の命令をフェッチし、命令デコーダ２２８にそれらの命令を供給し、命令デコーダ２２８は次にそれらの命令を復号または解釈する。例えば、一実施形態において、デコーダは、受信された命令を、機械が実行してよい「マイクロ−命令」または「マイクロ−オペレーション」と称される（マイクロｏｐまたはμｏｐとも称される）１または複数のオペレーションへと復号する。複数の他の実施形態において、デコーダは、命令を、一実施形態に係る複数のオペレーションを実行するマイクロアーキテクチャによって使用されてよいオペコードおよび対応するデータ、ならびに複数の制御フィールドにパースする。一実施形態において、実行のためにトレースキャッシュ２３０は、μｏｐキュー２３４において、復号された複数のμｏｐを、プログラム順の複数のシーケンスまたは複数のトレースに組み立ててよい。トレースキャッシュ２３０が複合命令に出会ったとき、マイクロコードＲＯＭ２３２は、オペレーションを完了するために必要な複数のμｏｐを提供する。
【００７０】
いくつかの命令が単一のマイクロｏｐに変換されてよい一方で、他の複数の命令は、オペレーション全体を完了するために、いくつかのマイクロｏｐを必要とする。一実施形態において、命令を完了するために４つより多いマイクロｏｐが必要である場合、デコーダ２２８はマイクロコードＲＯＭ２３２にアクセスしてその命令を実行してよい。一実施形態において、命令デコーダ２２８における処理のために、命令は少数のマイクロｏｐに復号されてよい。別の実施形態において、オペレーションを実現するためにいくつかのマイクロｏｐが必要な場合は、命令はマイクロコードＲＯＭ２３２内に格納されてよい。トレースキャッシュ２３０は、一実施形態に係る１または複数の命令を完了するためにマイクロコードＲＯＭ２３２から複数のマイクロコードシーケンスを読み出すための正確なマイクロ命令ポインタを決定するエントリポイントプログラマブルロジックアレイ（ＰＬＡ）を指す。マイクロコードＲＯＭ２３２が命令の複数のマイクロｏｐをシーケンス処理し終えた後、機械のフロントエンド２０１は、トレースキャッシュ２３０からの複数のマイクロｏｐのフェッチを再開してよい。
【００７１】
アウトオブオーダ実行エンジン２０３は、実行のために複数の命令を準備してよい。アウトオブオーダ実行ロジックは、実行のためにパイプラインに入り、スケジューリングされるとき、複数の命令のフローを円滑にし、再度順序付けて性能を最適化するためのいくつかのバッファを有する。アロケータロジックは、実行のために各μｏｐが必要とする複数のバッファおよび複数のリソースを機械に割り当てる。レジスタリネーミングロジックは、レジスタファイル内の複数のエントリに複数のロジックレジスタをリネームする。アロケータは、また、命令スケジューラである、メモリスケジューラ、高速スケジューラ２０２、低速／一般浮動小数点スケジューラ２０４、および単純浮動小数点スケジューラ２０６の前に、２つのμｏｐキューのうちの１つにおいてμｏｐ毎にエントリを割り当てる。２つのμｏｐキューとは、１つはメモリオペレーション用、もう１つは非メモリオペレーション用である。μｏｐスケジューラ２０２、２０４、２０６は、それらの従属する入力レジスタオペランドソースの準備状況と、複数のμｏｐがそれらのオペレーションを完了するのに必要な複数の実行リソースの可用性とに基づいて、いつμｏｐが実行できるかを決定する。一実施形態の高速スケジューラ２０２が、メインクロックサイクルの半サイクル毎にスケジューリングできる一方で、その他の複数のスケジューラはメインプロセッサのクロックサイクルにつき１回しかスケジューリングできない。これらのスケジューラは、実行のために複数のμｏｐをスケジューリングすべく複数のディスパッチポートを仲裁する。
【００７２】
レジスタファイル２０８、２１０は、スケジューラ２０２、２０４、２０６と、実行ブロック２１１内の実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４との間に配置されてよい。レジスタファイル２０８、２１０の各々は、それぞれ整数オペレーションおよび浮動小数点オペレーションを実行する。レジスタファイル２０８、２１０の各々は、バイパスネットワークを含んでよい。バイパスネットワークは、まだレジスタファイルに書き込まれていない完了したばかりの結果を新たな複数の従属μｏｐにバイパスまたは転送する。整数レジスタファイル２０８および浮動小数点レジスタファイル２１０は、互いにデータを通信し合ってよい。一実施形態において、整数レジスタファイル２０８は２つの別個のレジスタファイルに分割されてよい。そのうちの１つのレジスタファイルはデータの下位３２ビット用であり、２つ目のレジスタファイルはデータの上位３２ビット用である。浮動小数点レジスタファイル２１０は１２８ビット幅のエントリを含んでよい。なぜなら、浮動小数点命令は、典型的には６４ビット幅から１２８ビット幅の複数のオペランドを有するからである。
【００７３】
実行ブロック２１１は、実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４を含んでよい。実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４は複数の命令を実行してよい。実行ブロック２１１は、複数のマイクロ命令が実行のために必要とする整数データオペランド値および浮動小数点データオペランド値を格納するレジスタファイル２０８、２１０を含んでよい。一実施形態において、プロセッサ２００はいくつかの実行ユニットを備えてよい。それらは、アドレス生成ユニット（ＡＧＵ）２１２、ＡＧＵ２１４、高速ＡＬＵ２１６、高速ＡＬＵ２１８、低速ＡＬＵ２２０、浮動小数点ＡＬＵ２２２、浮動小数点移動ユニット２２４である。別の実施形態において、浮動小数点実行ブロック２２２、２２４は、浮動小数点、ＭＭＸ、ＳＩＭＤ、およびＳＳＥのオペレーション、または他の複数のオペレーションを実行してよい。さらに別の実施形態では、浮動小数点ＡＬＵ２２２は、除算、平方根、および残りの複数のマイクロｏｐを実行するための６４ビット×６４ビットの浮動小数点除算器を含んでよい。様々な実施形態において、浮動小数点値を含む複数の命令は、浮動小数点ハードウェアで処理されてよい。一実施形態において、複数のＡＬＵオペレーションは、高速ＡＬＵ実行ユニット２１６、２１８に渡されてよい。高速ＡＬＵ２１６、２１８は、半クロックサイクルという効果的なレイテンシで複数の高速オペレーションを実行してよい。一実施形態において、ほとんどの複雑な整数オペレーションは低速ＡＬＵ２２０に向かう。なぜなら、低速ＡＬＵ２２０は、乗算器、シフト、フラグロジック、および分岐の処理などの長レイテンシ型のオペレーションのための整数実行ハードウェアを含んでよいからである。メモリロード／ストアオペレーションは、ＡＧＵ２１２、２１４によって実行されてよい。一実施形態において、整数ＡＬＵ２１６、２１８、２２０は６４ビットの複数のデータオペランドに対して整数オペレーションを実行してよい。複数の他の実施形態において、ＡＬＵ２１６、２１８、２２０は、１６、３２、１２８、２５６等を含む様々なデータビットサイズをサポートするよう実装されてよい。同様に、浮動小数点ユニット２２２、２２４は、様々なビット幅を有する様々なオペランドをサポートするよう実装されてよい。一実施形態において、浮動小数点ユニット２２２、２２４は、ＳＩＭＤ命令およびマルチメディア命令と併せて、１２８ビット幅のパックドデータオペランドに対して動作してよい。
【００７４】
一実施形態において、μｏｐスケジューラ２０２、２０４、２０６は、親ロードが実行を終了してしまう前に複数の従属オペレーションをディスパッチする。複数のμｏｐは、プロセッサ２００内で推測的にスケジューリングされ実行されてよいので、プロセッサ２００はメモリミスを処理するためのロジックもまた含んでよい。データキャッシュにおいてデータロードが失敗した場合、パイプライン中にインフライト（ｉｎ  ｆｌｉｇｈｔ）の複数の従属オペレーションが存在することが考えられる。それらの従属オペレーションは、スケジューラに一時的に誤ったデータを残している。リプレイメカニズムは、誤ったデータを使用する複数の命令を追跡し、再実行する。当該複数の従属オペレーションのみが再実行される必要があり、独立オペレーションは完了が許されてよい。プロセッサの一実施形態の複数のスケジューラおよびリプレイメカニズムは、また、文字列比較オペレーションの複数の命令シーケンスを捕捉するよう設計されてよい。
【００７５】
「レジスタ」という用語は、    複数のオペランドを特定するための複数の命令の一部として使用されてよいオンボードのプロセッサの複数の記憶位置を指してよい。換言すると、複数のレジスタはプロセッサ外から（プログラマの視点から）使用可能であってよいものである。しかしながら、いくつかの実施形態では、複数のレジスタは特定のタイプの回路に限定されなくてよい。むしろ、レジスタはデータを格納し、データを提供し、本明細書において説明される複数の機能を実行してよい。本明細書において説明される複数のレジスタは、専用物理レジスタ、レジスタリネーミングを使用した動的に割り当てられた物理レジスタ、専用物理レジスタおよび動的に割り当てられた物理レジスタの複数の組み合わせ等といった任意の数の異なる技術を使用してプロセッサ内で回路で実装されてよい。一実施形態において、複数の整数レジスタは３２ビットの整数データを格納する。一実施形態のレジスタファイルはまた、パックドデータ用の８つのマルチメディアＳＩＭＤレジスタも含む。以下の説明では、複数のレジスタは、カリフォルニア州サンタクララのインテルコーポレーションによるＭＭＸ技術により可能となった複数のマイクロプロセッサにおける６４ビット幅ＭＭＸ（商標）レジスタ（いくつかの例では「ｍｍ」レジスタとも称される）などの、パックドデータを保持するよう設計されたデータレジスタであると理解されてよい。整数の形および浮動小数点の形の両方で利用可能なこれらのＭＭＸレジスタは、ＳＩＭＤ命令およびＳＳＥ命令を伴う複数のパックドデータ要素で動作してよい。同様に、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４、またはそれ以降の（一般的に「ＳＳＥｘ」と称される）技術に関連する１２８ビット幅のＸＭＭレジスタは、そのような複数のパックドデータオペランドを保持してよい。一実施形態において、パックドデータおよび整数データを格納することにおいて、複数のレジスタはその２つのデータ型を区別する必要がない。一実施形態において、整数および浮動小数点は、同じレジスタファイルに含まれてよく、または、異なるレジスタファイルに含まれてもよい。さらに、一実施形態においては、浮動小数点データおよび整数データは異なるレジスタにおいて格納されてよく、または、同じレジスタに格納されてもよい。
【００７６】
以下の複数の図の例では、いくつかのデータオペランドが説明されてよい。図３Ａは、本開示の複数の実施形態に係る、複数のマルチメディアレジスタ内の様々なパックドデータ型の表現を示している。図３Ａは、１２８ビット幅オペランドのための、パックドバイト３１０、パックドワード３２０、およびパックドダブルワード（ｄｗｏｒｄ）３３０のデータ型を示している。この例のパックドバイトフォーマット３１０は１２８ビット長であってよく、１６個のパックドバイトデータ要素を含む。バイトは、例えば、８ビットデータと定義されてよい。各バイトデータ要素の情報は、バイト０についてはビット７からビット０、バイト１についてはビット１５からビット８、バイト２についてはビット２３からビット１６、および、最終的にはバイト１５についてビット１２０からビット１２７に格納されてよい。従って、全ての利用可能なビットはレジスタ内で使用されてよい。このストレージ構成は、プロセッサのストレージ効率を向上させる。その上、これにより、１６個のデータ要素がアクセスされると、１つのオペレーションが１６個のデータ要素に対して並列に実行されてよい。
【００７７】
概して、データ要素は、同じ長さの他の複数のデータ要素と共に単一のレジスタまたはメモリ位置に格納される個々の１つのデータを含んでよい。ＳＳＥｘ技術に関連する複数のパックドデータシーケンスにおいて、ＸＭＭレジスタに格納されたデータ要素数は、１２８ビットを個々のデータ要素のビット長で除算したものであってよい。同様に、ＭＭＸ技術及びＳＳＥ技術に関連する複数のパックドデータシーケンスにおいて、ＭＭＸレジスタに格納されたデータ要素数は、６４ビットを個々のデータ要素のビット長で除算したものであってよい。図３Ａに示された複数のデータ型は１２８ビット長であってよいが、本開示の複数の実施形態は６４ビット幅または他のサイズの複数のオペランドでもまた動作してよい。この例のパックドワードフォーマット３２０は１２８ビット長であってよく、８つのパックドワードデータ要素を含む。各パックドワードは１６ビットの情報を含む。図３Ａのパックドダブルワードフォーマット３３０は１２８ビット長であってよく、４つのパックドダブルワードデータ要素を含む。各パックドダブルワードデータ要素は３２ビットの情報を含む。パックドクワッドワードは１２８ビット長であってよく、２つのパックドクワッドワードデータ要素を含む。
【００７８】
図３Ｂは、本開示の複数の実施形態に係る、可能なレジスタ内データストレージフォーマットを示している。各パックドデータは１より多い数の独立データ要素を含んでよい。３つのパックドデータフォーマットが示されており、それらは、パックドハーフ３４１、パックドシングル３４２、およびパックドダブル３４３である。パックドハーフ３４１、パックドシングル３４２、およびパックドダブル３４３の一実施形態は、複数の固定小数点データ要素を含む。別の実施形態では、パックドハーフ３４１、パックドシングル３４２、およびパックドダブル３４３の１または複数は、複数の浮動小数点データ要素を含んでよい。パックドハーフ３４１の一実施形態は、８つの１６ビットデータ要素を含む１２８ビット長であってよい。パックドシングル３４２の一実施形態は１２８ビット長であってよく、４つの３２ビットデータ要素を含む。パックドダブル３４３の一実施形態は１２８ビット長であってよく、２つの６４ビットデータ要素を含む。そのような複数のパックドデータフォーマットが、さらに他のレジスタ長、例えば、９６ビット、１６０ビット、１９２ビット、２２４ビット、２５６ビット、またはそれより長いビットに拡張されてよいことが理解されよう。
【００７９】
図３Ｃは、本開示の複数の実施形態に係る、複数のマルチメディアレジスタ内の様々な符号付きおよび符号なしパックドデータ型の表現を示している。符号なしパックドバイト表現３４４は、ＳＩＭＤレジスタにおける符号なしパックドバイトの格納を示している。各バイトデータ要素の情報は、バイト０についてはビット７からビット０、バイト１についてはビット１５からビット８、バイト２についてはビット２３からビット１６、および、最終的にはバイト１５についてビット１２０からビット１２７に格納されてよい。従って、全ての利用可能なビットはレジスタ内で使用されてよい。このストレージ構成は、プロセッサのストレージ効率を向上させる。その上、これにより、１６個のデータ要素がアクセスされると、１つのオペレーションが１６個のデータ要素に対して並列に実行されてよい。符号付きパックドバイト表現３４５は、符号付きパックドバイトの格納を示している。各バイトデータ要素の第８番目のビットが符号インジケータであってよいことに留意されたい。符号なしパックドワード表現３４６は、ワード７からワード０がＳＩＭＤレジスタにおいてどのように格納され得るかを示している。符号付きパックドワード表現３４７は、符号なしパックドワードレジスタ内表現３４６と同様であってよい。各ワードデータ要素の第１６番目のビットは符号インジケータであってよいことに留意されたい。符号なしパックドダブルワード表現３４８は、複数のダブルワードデータ要素がどのように格納されるかを示している。符号付きパックドダブルワード表現３４９は、符号なしパックドダブルワードレジスタ内表現３４８と同様であってよい。必要な符号ビットは、各ダブルワードデータ要素の第３２番目のビットであってよいことに留意されたい。
【００８０】
図３Ｄは、オペレーション符号化（オペコード）の実施形態を示している。さらに、フォーマット３６０は、「ＩＡ−３２  Ｉｎｔｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ'ｓ  Ｍａｎｕａｌ  Ｖｏｌｕｍｅ  ２：  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｒｅｆｅｒｅｎｃｅ」に説明されたオペコードフォーマットのタイプに対応するレジスタ／メモリオペランドアドレス指定モードを含んでよい。当該マニュアルは、ワールドワイドウェブ（ｗｗｗ）上のｉｎｔｅｌ．ｃｏｍ／ｄｅｓｉｇｎ／ｌｉｔｃｅｎｔｒにおいて、カリフォルニア州サンタクララのインテルコーポレーションから入手可能である。一実施形態において、命令はフィールド３６１および３６２のうちの１または複数によって符号化されてよい。一命令につき、２つまでのソースオペランド識別子３６４および３６５を含む２つまでのオペランド位置が特定されてよい。一実施形態において、デスティネーションオペランド識別子３６６は、ソースオペランド識別子３６４と同じであってよい一方で、複数の他の実施形態においては異なっていてもよい。別の実施形態において、デスティネーションオペランド識別子３６６は、ソースオペランド識別子３６５と同じであってよい一方で、複数の他の実施形態においては異なっていてもよい。一実施形態において、ソースオペランド識別子３６４および３６５によって特定された複数のソースオペランドのうちの１つは、文字列比較オペレーションの結果によって上書きされてよい一方で、複数の他の実施形態においては、識別子３６４はソースレジスタ要素に対応し、識別子３６５はデスティネーションレジスタ要素に対応する。一実施形態において、オペランド識別子３６４および３６５は、３２ビットまたは６４ビットのソースオペランドおよびデスティネーションオペランドを特定してよい。
【００８１】
図３Ｅは、本開示の複数の実施形態に係る、４０またはそれより多くのビットを有する別の可能なオペレーション符号化（オペコード）フォーマット３７０を示している。オペコードフォーマット３７０は、オペコードフォーマット３６０に対応しており、任意のプレフィックスバイト３７８を備える。一実施形態に係る命令は、フィールド３７８、３７１および３７２のうちの１または複数によって符号化されてよい。一命令につき２つまでのオペランド位置が、ソースオペランド識別子３７４および３７５によって、ならびにプレフィックスバイト３７８によって特定されてよい。一実施形態において、プレフィックスバイト３７８は、３２ビットまたは６４ビットのソースオペランドおよびデスティネーションオペランドを特定すべく使用されてよい。一実施形態において、デスティネーションオペランド識別子３７６は、ソースオペランド識別子３７４と同じであってよい一方で、複数の他の実施形態においては異なっていてよい。別の実施形態では、デスティネーションオペランド識別子３７６は、ソースオペランド識別子３７５と同じであってよい一方で、複数の他の実施形態においては異なっていてよい。一実施形態において、命令が、オペランド識別子３７４および３７５によって特定された複数のオペランドのうちの１または複数に対して動作し、オペランド識別子３７４および３７５によって特定された１または複数のオペランドが、命令の結果によって上書きされてよい一方で、複数の他の実施形態においては、識別子３７４および３７５によって特定された複数のオペランドは、別のレジスタに別のデータ要素を書き込んでよい。オペコードフォーマット３６０および３７０は、部分的には、ＭＯＤフィールド３６３および３７３によって、ならびに、任意的なスケール−インデックス−ベース（ｓｃａｌｅ−ｉｎｄｅｘ−ｂａｓｅ）バイトおよびディスプレースメント（ｄｉｓｐｌａｃｅｍｅｎｔ）バイトによって指定された、レジスタからレジスタへの、メモリからレジスタへの、メモリによるレジスタの、レジスタによるレジスタの、即値によるレジスタの、レジスタからメモリへのアドレス指定を可能にする。
【００８２】
図３Ｆは、本開示の複数の実施形態に係るさらに別の可能なオペレーション符号化（オペコード）フォーマットを示している。６４ビットの単一命令多重データ（ＳＩＭＤ）演算オペレーションは、コプロセッサデータ処理（ＣＤＰ）命令を通して実行されてよい。オペレーション符号化（オペコード）フォーマット３８０は、ＣＤＰオペコードフィールド３８２および３８９を有する１つのそのようなＣＤＰ命令を示す。ＣＤＰ命令のタイプ、別の実施形態では、複数のオペレーションはフィールド３８３、３８４、３８７および３８８のうちの１または複数によって符号化されてよい。２つのソースオペランド識別子３８５および３９０ならびに１つのデスティネーションオペランド識別子３８６までを含む、一命令につき３つまでのオペランド位置が特定されてよい。コプロセッサの一実施形態は、８ビット値、１６ビット値、３２ビット値、および６４ビット値に対して動作してよい。一実施形態において、命令は、複数の整数データ要素に対して実行されてよい。いくつかの実施形態において、命令は、条件フィールド３８１を使用して、条件付きで実行されてよい。いくつかの実施形態では、ソースデータサイズはフィールド３８３によって符号化されてよい。いくつか実施形態において、ゼロ（Ｚ）、負（Ｎ）、キャリー（Ｃ）、およびオーバーフロー（ｖ）の検出は複数のＳＩＭＤフィールド上で行われてよい。いくつかの命令について、サチュレーションタイプはフィールド３８４によって符号化されてよい。
【００８３】
図４Ａは、本開示の複数の実施形態に係る、インオーダパイプラインと、レジスタリネーミングステージ、アウトオブオーダ発行／実行パイプラインとを示すブロック図である。図４Ｂは、本開示の複数の実施形態に係る、プロセッサに含まれるべき、インオーダアーキテクチャコアと、レジスタリネーミングロジック、アウトオブオーダ発行／実行ロジックとを示すブロック図である。図４Ａの実線の複数のボックスはインオーダパイプラインを示し、一方、破線の複数のボックスは、レジスタリネーミング、アウトオブオーダ発行／実行パイプラインを示している。同様に、図４Ｂの実線の複数のボックスは、インオーダアーキテクチャロジックを示し、一方、破線のボックスはレジスタリネーミングロジックおよびアウトオブオーダ発行／実行ロジックを示している。
【００８４】
図４Ａにおいて、プロセッサパイプライン４００は、フェッチステージ４０２、レングス復号ステージ４０４、復号ステージ４０６、割り当てステージ４０８、リネーミングステージ４１０、スケジューリング（ディスパッチ若しくは発行としても知られる）ステージ４１２、レジスタ読み出し／メモリ読み出しステージ４１４、実行ステージ４１６、ライトバック／メモリ書き込みステージ４１８、例外処理ステージ４２２、およびコミットステージ４２４を含んでよい。
【００８５】
図４Ｂにおいて、複数の矢印は、２またはそれより多いユニットの間の連結を示し、矢印の方向は、それらユニットの間でのデータの流れる方向を示している。図４Ｂは、実行エンジンユニット４５０に連結されたフロントエンドユニット４３０を含むプロセッサコア４９０を示し、その両方はメモリユニット４７０に連結されてよい。
【００８６】
コア４９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、またはハイブリッド若しくは代替のコアタイプであってよい。一実施形態において、コア４９０は、例えば、ネットワークコアまたは通信コア、圧縮エンジン、グラフィックコア等といった専用コアであってよい。
【００８７】
フロントエンドユニット４３０は、命令キャッシュユニット４３４に連結された分岐予測ユニット４３２を含んでよい。命令キャッシュユニット４３４は命令変換ルックアサイドバッファ（ＴＬＢ）４３６に連結されてよい。ＴＬＢ４３６は、復号ユニット４４０に連結されている命令フェッチユニット４３８に連結されてよい。復号ユニット４４０は、複数の命令を復号し、元の複数の命令から復号されてよい、または元の複数の命令を他の方法で反映する、または元の複数の命令から導出されてよい１または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号を出力として生成する。デコーダは様々な異なるメカニズムを使用して実装されてよい。適切な複数のメカニズムの例としては、限定はされないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコードリードオンリメモリ（ＲＯＭ）等が挙げられる。一実施形態において、命令キャッシュユニット４３４は、さらに、メモリユニット４７０内のレベル２（Ｌ２）キャッシュユニット４７６に連結されてよい。復号ユニット４４０は、実行エンジンユニット４５０内のリネーム／アロケータユニット４５２に連結されてよい。
【００８８】
実行エンジンユニット４５０は、リタイアメントユニット４５４および１セットの１または複数のスケジューラユニット４５６に連結されたリネーム／アロケータユニット４５２を含んでよい。複数のスケジューラユニット４５６は、リザベーションステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表している。複数のスケジューラユニット４５６は、複数の物理レジスタファイルユニット４５８に連結されてよい。複数の物理レジスタファイルユニット４５８の各々は、１または複数の物理レジスタファイルを表しており、それらのうちの異なる物理レジスタファイルは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点等といった１または複数の異なるデータ型、ステータス（例えば、実行されるべき次の命令のアドレスである命令ポインタ）等を格納する。物理レジスタファイルユニット４５８は、（例えば、１または複数のリオーダバッファおよび１または複数のリタイアメントレジスタファイルを使用して、１または複数のフューチャファイル、１または複数の履歴バッファ、および１または複数のリタイアメントレジスタファイルを使用して、複数のレジスタマップおよび複数のレジスタのプールを使用して等により）レジスタリネーミングおよびアウトオブオーダ実行が実装されてよい様々な態様を示すべくリタイアメントユニット４５４によってオーバーラップされてよい。通常、複数のアーキテクチャレジスタは、プロセッサ外から、またはプログラマの視点から可視であってよい。複数のレジスタは、任意の既知の特定のタイプの回路に限定されなくてよい。本明細書において説明されるようなデータを格納し提供する限り、様々な異なるタイプのレジスタが適していると考えられる。適切なレジスタの例としては、限定はされ得ないが、専用物理レジスタ、レジスタリネーミングを使用した動的に割り当てられた物理レジスタ、専用物理レジスタと動的に割り当てられた物理レジスタの複数との組み合わせ等が挙げられる。リタイアメントユニット４５４および物理レジスタファイルユニット４５８は、複数の実行クラスタ４６０に連結されてよい。複数の実行クラスタ４６０は、１セットの１または複数の実行ユニット１６２および１セットの１または複数のメモリアクセスユニット４６４を含んでよい。複数の実行ユニット４６２は、様々なオペレーション（例えば、シフト、加算、減算、乗算）を様々なデータ型（例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して実行してよい。いくつかの実施形態が複数の特定の機能または複数セットの機能に専用のいくつかの実行ユニットを含んでよい一方で、他の複数の実施形態は、ただ１つの実行ユニット、または全ての機能を全てが実行する複数の実行ユニットを含んでよい。スケジューラユニット４５６、物理レジスタファイルユニット４５８、および実行クラスタ４６０は複数の可能性があるものとして示されている。なぜなら、複数の特定の実施形態は、特定の複数のデータ／オペレーション型用に複数の別個のパイプライン（例えば、スカラ整数パイプライン、各々がそれら自身のスケジューラユニット、物理レジスタファイルユニット、および／または実行クラスタを有するスカラ浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、および／またはメモリアクセスパイプライン、ならびに、別個のメモリアクセスパイプラインの場合は、このパイプラインの実行クラスタのみがメモリアクセスユニット４６４を有する複数の特定の実施形態が実装されてよい）を作成するからである。複数の別個のパイプラインが使用される場合、これらのパイプラインの１または複数がアウトオブオーダ発行／実行であってよく、残りはインオーダであってよいこともまた理解されるべきである。
【００８９】
１セットのメモリアクセスユニット４６４は、メモリユニット４７０に連結されてよい。メモリユニット４７０は、レベル２（Ｌ２）キャッシュユニット４７６に連結されたデータキャッシュユニット４７４に連結されたデータＴＬＢユニット４７２を含んでよい。一例示的実施形態では、複数のメモリアクセスユニット４６４は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含んでよく、これらの各々はメモリユニット４７０内のデータＴＬＢユニット４７２に連結されてよい。Ｌ２キャッシュユニット４７６は、１または複数の他のレベルのキャッシュと、最終的にはメインメモリとに連結されてよい。
【００９０】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは、以下のようにパイプライン４００を実施してよい。１）命令フェッチ４３８がフェッチステージ４０２およびレングス復号ステージ４０４を実行してよい。２）復号ユニット４４０が復号ステージ４０６を実行してよい。３）リネーム／アロケータユニット４５２が、割り当てステージ４０８およびリネーミングステージ４１０を実行してよい。４）複数のスケジューラユニット４５６がスケジューリングステージ４１２を実行してよい。５）複数の物理レジスタファイルユニット４５８およびメモリユニット４７０がレジスタ読み出し／メモリ読み出しステージ４１４を実行してよく、実行クラスタ４６０が実行ステージ４１６を実行してよい。６）メモリユニット４７０および複数の物理レジスタファイルユニット４５８がライトバック／メモリ書き込みステージ４１８を実行してよい。７）様々なユニットが例外処理ステージ４２２の実行に含まれてよい。８）リタイアメントユニット４５４および複数の物理レジスタファイルユニット４５８がコミットステージ４２４を実行してよい。
【００９１】
コア４９０は、１または複数の命令セット（例えば、（複数のより新たなバージョンが追加されたいくつか拡張を伴う）ｘ８６命令セット；カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令セット；カリフォルニア州サニーベールのＡＲＭホールディングスの（ＮＥＯＮなどの任意の複数の追加の拡張を伴う）ＡＲＭ命令セット）をサポートしてよい。
【００９２】
コアは、様々な態様で（オペレーションまたはスレッドの２またはそれより多くの並列セットを実行する）マルチスレッディングをサポートしてよいことが理解されるべきである。マルチスレッディングサポートは、例えば、タイムスライスド（ｔｉｍｅ  ｓｌｉｃｅｄ）マルチスレッディング、（１つの物理コアが、その物理コアが同時にマルチスレッディングを行っている複数のスレッドの各々に論理コアを提供する）同時マルチスレッディング、または、それらの組み合わせを含むことによって実行されてよい。そのような組み合わせは、例えば、タイムスライスドフェッチおよび復号、ならびに、インテル（登録商標）のハイパースレッディング技術などにおけるその後の同時マルチスレッディングを含んでよい。
【００９３】
レジスタリネーミングはアウトオブオーダ実行との関連で説明されているが、レジスタリネーミングがインオーダアーキテクチャにおいて使用されてよいことが理解されるべきである。示されたプロセッサの実施形態がまた、別個の命令キャッシュユニット４３４およびデータキャッシュユニット４７４と共有のＬ２キャッシュユニット４７６とを含む一方で、他の複数の実施形態は、例えば、レベル１（Ｌ１）内部キャッシュ、または複数のレベルの内部キャッシュなどの、複数の命令およびデータの両方のための単一の内部キャッシュを有してよい。いくつかの実施形態では、システムは、内部キャッシュと、コアおよび／またはプロセッサの外部にあってよい外部キャッシュとの組み合わせを含んでよい。複数の他の実施形態において、キャッシュの全ては、コアおよび／またはプロセッサの外部にあってよい。
【００９４】
図５Ａは、本開示の複数の実施形態に係るプロセッサ５００のブロック図である。一実施形態において、プロセッサ５００はマルチコアプロセッサを含んでよい。プロセッサ５００は、１または複数のコア５０２に通信可能に連結されたシステムエージェント５１０を含んでよい。さらに、コア５０２およびシステムエージェント５１０は、１または複数のキャッシュ５０６に通信可能に連結されてよい。コア５０２、システムエージェント５１０、およびキャッシュ５０６は、１または複数のメモリ制御ユニット５５２を介して通信可能に連結されてよい。さらに、コア５０２、システムエージェント５１０、およびキャッシュ５０６は、複数のメモリ制御ユニット５５２を介してグラフィックモジュール５６０に通信可能に連結されてよい。
【００９５】
プロセッサ５００は、コア５０２、システムエージェント５１０、およびキャッシュ５０６と、グラフィックモジュール５６０とを相互接続するための任意の適したメカニズムを含んでよい。一実施形態において、プロセッサ５００は、コア５０２、システムエージェント５１０、およびキャッシュ５０６とグラフィックモジュール５６０とを相互接続するリングベース相互接続ユニット５０８を含んでよい。複数の他の実施形態において、プロセッサ５００は、そのような複数のユニットを相互接続するための任意の数の周知技術を含んでよい。リングベース相互接続ユニット５０８は、複数の相互接続を容易にすべく複数のメモリ制御ユニット５５２を利用してよい。
【００９６】
プロセッサ５００は、複数のコア内の１または複数のレベルのキャッシュ、複数のキャッシュ５０６などの１または複数の共有キャッシュユニット、または、１セットの統合されたメモリコントローラユニット５５２に連結された外部メモリ（不図示）を備えるメモリ階層を含んでよい。キャッシュ５０６は、任意の適したキャッシュを含んでよい。一実施形態において、キャッシュ５０６は、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、または他のレベルのキャッシュなどの１または複数の中間レベルキャッシュ、ラストレベルキャッシュ（ＬＬＣ）、および／またはそれらの複数の組み合わせを含んでよい。
【００９７】
様々な実施形態では、複数のコア５０２の１または複数は、マルチスレッディングを実行してよい。システムエージェント５１０は、複数のコア５０２を調整し、動作させる複数のコンポーネントを含んでよい。システムエージェントユニット５１０は、例えば、電力制御ユニット（ＰＣＵ）を含んでよい。ＰＣＵは、複数のコア５０２の電力状態を調節するために必要なロジックおよび複数のコンポーネントであってよく、またはそれらを含むものであってよい。システムエージェント５１０は、１または複数の外部接続のディスプレイまたはグラフィックモジュール５６０を駆動するためのディスプレイエンジン５１２を含んでよい。システムエージェント５１０は、グラフィックのための複数の通信バス用インタフェース５１４を含んでよい。一実施形態において、インタフェース５１４は、ＰＣＩエクスプレス（ＰＣＩｅ）によって実装されてよい。さらなる実施形態では、インタフェース５１４は、ＰＣＩエクスプレスグラフィック（ＰＥＧ）によって実装されてよい。システムエージェント５１０は、ダイレクトメディアインタフェース（ＤＭＩ）５１６を含んでよい。ＤＭＩ５１６は、マザーボードまたはコンピュータシステムの他の部分上の異なる複数のブリッジの間にリンクを提供してよい。システムエージェント５１０は、コンピューティングシステムの他の複数の要素に複数のＰＣＩｅリンクを提供するためのＰＣＩｅブリッジ５１８を含んでよい。ＰＣＩｅブリッジ５１８は、メモリコントローラ５２０およびコヒーレンスロジック５２２を使用して実装されてよい。
【００９８】
複数のコア５０２は、任意の適した態様で実装されてよい。複数のコア５０２は、アーキテクチャおよび／または命令セットに関して同種または異種のものであってよい。一実施形態において、複数のコア５０２のいくつかがインオーダであってよい一方で、他のものはアウトオブオーダであってよい。別の実施形態において、複数のコア５０２の２またはそれより多くのものが同じ命令セットを実行してよい一方で、他のものは、その命令セットまたは異なる命令セットのサブセットのみを実行してよい。
【００９９】
プロセッサ５００は、カリフォルニア州サンタクララのインテルコーポレーションから入手可能であり得るＣｏｒｅ（商標）ｉ３、ｉ５、ｉ７、２ＤｕｏおよびＱｕａｄ、Ｘｅｏｎ（商標）、Ｉｔａｎｉｕｍ（商標）、ＸＳｃａｌｅ（商標）、またはＳｔｒｏｎｇＡＲＭ（商標）のプロセッサなどの汎用プロセッサを含んでよい。プロセッサ５００は、ＡＲＭホールディングス社、ＭＩＰＳ等といった別の会社から提供されてもよい。プロセッサ５００は、例えば、ネットワークまたは通信のプロセッサ、圧縮エンジン、グラフィックプロセッサ、コプロセッサ、組み込みプロセッサ等といった専用プロセッサであってよい。プロセッサ５００は、１または複数のチップ上に実装されてよい。プロセッサ５００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳなどのいくつかのプロセス技術の何れかを使用して、１または複数の基板の一部であってよく、および／または、それらの基板上に実装されてもよい。
【０１００】
一実施形態において、複数のキャッシュ５０６のうちの所与の１つは、複数のコア５０２のうちの複数のものによって共有されてよい。別の実施形態において、複数のキャッシュ５０６のうちの所与の１つは、複数のコア５０２のうちの１つに専用であってよい。複数のキャッシュ５０６の複数のコア５０２への割り当ては、キャッシュコントローラまたは他の適切なメカニズムによって処理されてよい。複数のキャッシュ５０６のうちの所与の１つは、所与のキャッシュ５０６の複数のタイムスライスを実装することにより、２またはそれより多くのコア５０２によって共有されてよい。
【０１０１】
グラフィックモジュール５６０は、統合されたグラフィック処理サブシステムを実装してよい。一実施形態において、グラフィックモジュール５６０は、グラフィックプロセッサを含んでよい。さらに、グラフィックモジュール５６０は、メディアエンジン５６５を含んでよい。メディアエンジン５６５は、メディア符号化およびビデオ復号を提供してよい。
【０１０２】
図５Ｂは、本開示の複数の実施形態に係るコア５０２の実装例のブロック図である。コア５０２は、アウトオブオーダエンジン５８０に通信可能に連結されたフロントエンド５７０を含んでよい。コア５０２は、キャッシュ階層５０３を通してプロセッサ５００の他の複数の部分に通信可能に連結されてよい。
【０１０３】
フロントエンド５７０は、完全にまたは部分的に、上述したようなフロントエンド２０１などによって、任意の適した態様で実装されてよい。一実施形態において、フロントエンド５７０は、キャッシュ階層５０３を通してプロセッサ５００の他の複数の部分と通信してよい。さらなる実施形態では、フロントエンド５７０は、プロセッサ５００の複数の部分から複数の命令をフェッチし、当該複数の命令がアウトオブオーダ実行エンジン５８０に渡されるとき、プロセッサパイプラインにおいて後に使用されるようにそれらの命令を準備してよい。
【０１０４】
アウトオブオーダ実行エンジン５８０は、完全にまたは部分的に、上述したようなアウトオブオーダ実行エンジン２０３などによって、任意の適した態様で実装されてよい。アウトオブオーダ実行エンジン５８０は、実行のためにフロントエンド５７０から受信された複数の命令を準備してよい。アウトオブオーダ実行エンジン５８０は、割り当てモジュール５８２を含んでよい。一実施形態において、割り当てモジュール５８２は、所与の命令を実行すべく、複数のレジスタ若しくは複数のバッファなどの、プロセッサ５００の複数のリソースまたは他の複数のリソースを割り当ててよい。割り当てモジュール５８２は、メモリスケジューラ、高速スケジューラ、または浮動小数点スケジューラなどの複数のスケジューラにおいて割り当てを行ってよい。そのような複数のスケジューラが、複数のリソーススケジューラ５８４によって図５Ｂに表されてよい。割り当てモジュール５８２は、完全にまたは部分的に、図２と併せて説明された割り当てロジックによって実装されてよい。複数のリソーススケジューラ５８４は、所与のリソースの複数のソースの準備状況と、命令を実行するために必要な複数の実行リソースの可用性とに基づいて、いつ命令が実行できるかを決定してよい。複数のリソーススケジューラ５８４は、例えば、上述されたスケジューラ２０２、２０４、２０６によって実装されてよい。複数のリソーススケジューラ５８４は、１または複数のリソースに応じて複数の命令の実行をスケジューリングしてよい。一実施形態において、そのような複数のリソースは、コア５０２の内部にあってよく、例えば、複数のリソース５８６として示されてよい。別の実施形態において、そのような複数のリソースは、コア５０２の外部にあってよく、例えば、キャッシュ階層５０３によってアクセス可能であってよい。複数のリソースは、例えば、メモリ、複数のキャッシュ、複数のレジスタファイル、または複数のレジスタを含んでよい。コア５０２の内部にある複数のリソースは、図５Ｂでは複数のリソース５８６によって表されてよい。必要に応じて、複数のリソース５８６に書き込まれた、または複数のリソース５８６から読み出された複数の値は、例えば、キャッシュ階層５０３を通してプロセッサ５００の他の複数の部分と調整されてよい。複数の命令が複数のリソースに割り当てられるとき、それらはリオーダバッファ５８８の中に配置されてよい。リオーダバッファ５８８は、複数の命令が実行されるときそれらを追跡してよく、プロセッサ５００に任意の適した基準に基づいて、選択的にそれらの実行の順序を変更してよい。一実施形態において、リオーダバッファ５８８は、独立して実行され得る複数の命令または一連の命令を特定してよい。そのような複数の命令または一連の命令は、他のそのような複数の命令と並列して実行されてよい。コア５０２における並列実行は、任意の適切な数の別個の複数の実行ブロックまたは複数の仮想プロセッサによって実行されてよい。一実施形態において、メモリ、複数のレジスタ、および複数のキャッシュなどの共有リソースは、所与のコア５０２内の複数の仮想プロセッサにとってアクセス可能であってよい。複数の他の実施形態において、共有リソースは、プロセッサ５００内の複数の処理エンティティにとってアクセス可能であってよい。
【０１０５】
キャッシュ階層５０３は、任意の適した態様で実装されてよい。例えば、キャッシュ階層５０３は、キャッシュ５７２、５７４などの１または複数の下位レベルまたは中間レベルのキャッシュを含んでよい。一実施形態において、キャッシュ階層５０３は、キャッシュ５７２、５７４に通信可能に連結されたＬＬＣ５９５を含んでよい。別の実施形態において、ＬＬＣ５９５は、プロセッサ５００の全ての処理エンティティにとってアクセス可能なモジュール５９０において実装されてよい。さらなる実施形態では、モジュール５９０は、インテル社から入手可能な複数のプロセッサのアンコアのモジュールにおいて実装されてよい。モジュール５９０は、コア５０２の実行に必要なプロセッサ５００の複数の部分または複数のサブシステムを含んでよいが、コア５０２内に実装されなくてもよい。ＬＬＣ５９５に加え、モジュール５９０は、例えば、複数のハードウェアインタフェース、複数のメモリコヒーレンシコーディネータ、複数のプロセッサ間相互接続、複数の命令パイプライン、または複数のメモリコントローラを含んでよい。プロセッサ５００にとって利用可能なＲＡＭ５９９へのアクセスは、モジュール５９０、より具体的にはＬＬＣ５９５、を通して成されてよい。さらに、コア５０２の他の複数のインスタンスが、同様にモジュール５９０にアクセスしてよい。コア５０２の複数のインスタンスの調整は、部分的にはモジュール５９０を通して促進されてよい。
【０１０６】
図６−８は、プロセッサ５００を含むのに適した例示的システムを示してよく、一方、図９は、複数のコア５０２の１または複数を含んでよい例示的なシステムオンチップ（ＳｏＣ）を示してよい。ラップトップ、デスクトップ、ハンドヘルドＰＣ、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスのための当該技術分野において既知の他の複数のシステム設計および実装もまた適していると考えられる。概して、本明細書において開示されたような、プロセッサおよび／または他の実行ロジックを組み込む多様なシステムまたは電子デバイスが概して適していると考えられる。
【０１０７】
図６は、本開示の複数の実施形態に係るシステム６００のブロック図を示している。システム６００は、１または複数のプロセッサ６１０、６１５を含んでよい。プロセッサ６１０、６１５は、グラフィックメモリコントローラハブ（ＧＭＣＨ）６２０に連結されてよい。追加の複数のプロセッサ６１５の任意性は図６において破線によって示されている。
【０１０８】
各プロセッサ６１０、６１５はプロセッサ５００のいくつかのバージョンであってよい。しかしながら、プロセッサ６１０、６１５には、統合されたグラフィックロジックおよび統合されたメモリ制御ユニットは存在し得ないことが留意されるべきである。図６は、ＧＭＣＨ６２０が、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）であってよいメモリ６４０に連結されてよいことが示されている。ＤＲＡＭは、少なくとも１つの実施形態では、不揮発性キャッシュと関連付けられてよい。
【０１０９】
ＧＭＣＨ６２０は、チップセットであってよく、またはチップセットの一部であってよい。ＧＭＣＨ６２０は、プロセッサ６１０、６１５と通信し、プロセッサ６１０、６１５とメモリ６４０との間のインタラクションを制御してよい。ＧＭＣＨ６２０は、また、プロセッサ６１０、６１５とシステム６００の他の複数の要素との間の加速バスインタフェース（ａｃｃｅｌｅｒａｔｅｄ  ｂｕｓ  ｉｎｔｅｒｆａｃｅ）として動作してよい。一実施形態において、ＧＭＣＨ６２０はフロントサイドバス（ＦＳＢ）６９５などのマルチドロップバスを介してプロセッサ６１０、６１５と通信する。
【０１１０】
さらに、ＧＭＣＨ６２０は、（フラットパネルディスプレイなどの）ディスプレイ６４５に連結されてよい。一実施形態において、ＧＭＣＨ６２０は統合グラフィックアクセラレータを含んでよい。ＧＭＣＨ６２０は、さらに、入出力（Ｉ／Ｏ）コントローラハブ（ＩＣＨ）６５０に連結されてよく、ＩＣＨ６５０は、様々な周辺デバイスをシステム６００に連結すべく使用されてよい。外部グラフィックデバイス６６０は、別の周辺デバイス６７０と共にＩＣＨ６５０に連結された個別のグラフィックデバイスを含んでよい。
【０１１１】
他の実施形態において、追加のまたは異なる複数のプロセッサがまた、システム６００内に存在してもよい。例えば、追加のプロセッサ６１０、６１５は、プロセッサ６１０と同じであってよい複数の追加のプロセッサ、プロセッサ６１０とは異種若しくは非対称であってよい複数の追加のプロセッサ、（例えば、複数のグラフィックアクセラレータ若しくは複数のデジタル信号処理（ＤＳＰ）ユニットなどの）複数のアクセラレータ、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサを含んでよい。物理リソース６１０、６１５の間には、アーキテクチャ特性、マイクロアーキテクチャ特性、熱特性、電力消費特性等を含むメリットメトリクス（ｍｅｔｒｉｃｓ  ｏｆ  ｍｅｒｉｔ）の範囲に関して、様々な差異があると考えられる。これらの差異は、プロセッサ６１０、６１５の間の非対称性および多様性として効果的に現れてよい。少なくとも１つの実施形態では、様々なプロセッサ６１０、６１５は同じダイパッケージ内に存在してよい。
【０１１２】
図７は、本開示の複数の実施形態に係る第２のシステム７００のブロック図を示している。図７に示されるように、マルチプロセッサシステム７００はポイントツーポイント相互接続システムを含んでよく、ポイントツーポイント相互接続７５０を介して連結された第１のプロセッサ７７０および第２のプロセッサ７８０を含んでよい。プロセッサ７７０および７８０の各々は、プロセッサ６１０、６１５のうちの１または複数として、プロセッサ５００のいくつかのバージョンであってよい。
【０１１３】
図７は２つのプロセッサ７７０、７８０を示していてよいが、本開示の範囲はそのように限定されてはいないことが理解されよう。複数の他の実施形態において、所与のプロセッサ内に１または複数の追加のプロセッサが存在してよい。
【０１１４】
プロセッサ７７０および７８０は、それぞれ統合メモリコントローラユニット７７２および７８２を含むものとして示されている。プロセッサ７７０はまた、それのバスコントローラユニットの一部としてポイントツーポイント（Ｐ−Ｐ）インタフェース７７６および７７８を含んでよく、同様に、第２のプロセッサ７８０は、Ｐ−Ｐインタフェース７８６および７８８を含んでよい。プロセッサ７７０、７８０は、ポイントツーポイント（Ｐ−Ｐ）インタフェース７５０を介し、Ｐ−Ｐインタフェース回路７７８、７８８を使用して、情報を交換してよい。図７において示されるように、ＩＭＣＳ７７２および７８２は、それらのプロセッサをそれぞれのメモリ、すなわちメモリ７３２およびメモリ７３４に連結してよく、一実施形態において、メモリ７３２およびメモリ７３４はそれぞれのプロセッサにローカルに取り付けられたメインメモリの複数の部分であってよい。
【０１１５】
プロセッサ７７０、７８０は、各々、ポイントツーポイントインタフェース回路７７６、７９４、７８６、７９８を使用して、個々のＰ−Ｐインタフェース７５２、７５４を介してチップセット７９０と情報を交換してよい。一実施形態において、チップセット７９０は、また、高性能グラフィックインタフェース７３９を介して高性能グラフィック回路７３８と情報を交換してよい。
【０１１６】
共有キャッシュ（不図示）が何れかのプロセッサ内に含まれるか、または両方のプロセッサの外部にあってもよいが、Ｐ−Ｐ相互接続を介してそれらのプロセッサと接続されてよい。それにより、プロセッサが低電力モードに入った場合、何れかの若しくは両方のプロセッサのローカルキャッシュ情報が、共有キャッシュに格納され得る。
【０１１７】
チップセット７９０は、インタフェース７９６を介して第１のバス７１６に連結されてよい。一実施形態において、第１のバス７１６は、周辺コンポーネント相互接続（ＰＣＩ）バス、または、ＰＣＩエクスプレスバス若しくは別の第３世代Ｉ／Ｏ相互接続バスなどのバスであってよいが、本開示の範囲はそのように限定されるものではない。
【０１１８】
図７に示されるように、第１のバス７１６を第２のバス７２０に連結するバスブリッジ７１８と共に、様々なＩ／Ｏデバイス７１４が第１のバス７１６に連結されてよい。一実施形態において、第２のバス７２０はローピンカウント（ＬＰＣ）バスであってよい。一実施形態において、例えば、キーボードおよび／またはマウス７２２と、複数の通信デバイス７２７と、複数の命令／コードおよびデータ７３０を含んでよいディスクドライブまたは他の大容量ストレージデバイスなどのストレージユニット７２８とを含む様々なデバイスが、第２のバス７２０に連結されてよい。さらに、オーディオＩ／Ｏ７２４が第２のバス７２０に連結されてよい。他の複数のアーキテクチャが可能であることに留意されたい。例えば、図７のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバス、または他のそのようなアーキテクチャを実装してよい。
【０１１９】
図８は、本開示の複数の実施形態に係る第３のシステム８００のブロック図を示している。図７および図８の同様の要素には同様の参照番号が付されており、図７の特定の態様は、図８の他の態様を不明瞭にすることを避けるべく図８から省略されている。
【０１２０】
図８は、プロセッサ８７０、８８０がそれぞれ統合メモリと、Ｉ／Ｏ制御ロジック（「ＣＬ」）８７２および８８２とを含んでよいことが示されている。少なくとも１つの実施形態では、ＣＬ８７２、８８２は、図５および図７に関連して上述されたものなどの複数の統合メモリコントローラユニットを含んでよい。加えて、ＣＬ８７２、８８２はまた、Ｉ／Ｏ制御ロジックを含んでよい。図８は、メモリ８３２、８３４がＣＬ８７２、８８２に連結されてよいのみならず、ロジック８７２、８８２を制御すべく複数のＩ／Ｏデバイス８１４も連結されてよいことを示している。レガシＩ／Ｏデバイス８１５がチップセット８９０に連結されてよい。
【０１２１】
図９は、本開示の複数の実施形態に係るＳｏＣ９００のブロック図を示している。図５の複数の同様の要素には同様の参照番号が付されている。また、複数の破線のボックスは、より高度なＳｏＣにおける任意的な複数の特徴を表わしていてよい。複数の相互接続ユニット９０２は、１セットの１または複数のコア９０２Ａ−Ｎおよび複数の共有キャッシュユニット９０６を含んでよいアプリケーションプロセッサ９１０と、システムエージェントユニット９１０と、複数のバスコントローラユニット９１６と、複数の統合メモリコントローラユニット９１４と、統合グラフィックロジック９０８、スチールおよび／またはビデオカメラ機能を提供するための画像プロセッサ９２４、ハードウェアオーディオアクセラレーションを提供するためのオーディオプロセッサ９２６、およびビデオ符号化／復号アクセラレーションを提供するためのビデオプロセッサ９２８を含んでよい１セットの若しくは１または複数のメディアプロセッサ９２０と、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット９３０と、ダイレクトメモリアクセス（ＤＭＡ）ユニット９３２と、１または複数の外部ディスプレイに連結するためのディスプレイユニット９４０とに連結されてよい。
【０１２２】
図１０は、本開示の複数の実施形態に係る、少なくとも１つの命令を実行し得る中央処理装置（ＣＰＵ）およびグラフィック処理ユニット（ＧＰＵ）を含むプロセッサを示している。一実施形態において、少なくとも１つの実施形態に係る複数のオペレーションを実行する命令は、ＣＰＵによって実行され得る。別の実施形態において、当該命令はＧＰＵによって実行され得る。さらに別の実施形態では、当該命令は、ＧＰＵおよびＣＰＵによって実行される複数のオペレーションの組み合わせを通して実行されてよい。例えば、一実施形態において、一実施形態に係る命令は、ＧＰＵにおける実行のために受信され復号されてよい。しかしながら、復号された命令内の１または複数のオペレーションはＣＰＵによって実行されてよく、その結果は当該命令の最終的なリタイアのためにＧＰＵに戻されてよい。その逆に、いくつかの実施形態においては、ＣＰＵは主プロセッサとして動作し、ＧＰＵはコプロセッサとして動作してよい。
【０１２３】
いくつか実施形態では、高並列高スループットの複数のプロセッサから恩恵を受ける複数の命令は、ＧＰＵによって実行されてよく、一方で、深いパイプラインのアーキテクチャから恩恵を受ける複数のプロセッサの性能から恩恵を受ける複数の命令は、ＣＰＵによって実行されてよい。例えば、グラフィック、科学アプリケーション、財務アプリケーション、および他の複数の並列のワークロードは、ＧＰＵの性能から恩恵を受け、適宜実行されてよく、一方で、オペレーティングシステムカーネルまたはアプリケーションコードなどのよりシーケンシャルなアプリケーションは、ＣＰＵにより適していると考えられる。
【０１２４】
図１０において、プロセッサ１０００は、ＣＰＵ１００５、ＧＰＵ１０１０、画像プロセッサ１０１５、ビデオプロセッサ１０２０、ＵＳＢコントローラ１０２５、ＵＡＲＴコントローラ１０３０、ＳＰＩ／ＳＤＩＯコントローラ１０３５、ディスプレイデバイス１０４０、メモリインタフェースコントローラ１０４５、ＭＩＰＩコントローラ１０５０、フラッシュメモリコントローラ１０５５、デュアルデータレート（ＤＤＲ）コントローラ１０６０、セキュリティエンジン１０６５、およびＩ２Ｓ／Ｉ２Ｃコントローラ１０７０を含む。より多くのＣＰＵまたはＧＰＵ、および他の複数の周辺インタフェースコントローラを含む他のロジックおよび他の複数の回路が、図１０のプロセッサ内に含まれてよい。
【０１２５】
少なくとも１つの実施形態の１または複数の態様は、プロセッサ内の様々なロジックを表す、機械可読媒体上に格納された代表的なデータによって実装されてよい。当該データは、機械によって読み出されると、本明細書において説明される複数の技術を実行するロジックを機械に組み立てさせる。「ＩＰコア」として既知のそのような表現は、有形の機械可読媒体（「テープ」）上に格納され、実際にロジックまたはプロセッサを作成する複数の製造機械にロードすべく、様々な顧客または製造設備に供給されてよい。例えば、ＡＲＭホールディングス社によって開発されたＣｏｒｔｅｘ（商標）ファミリの複数のプロセッサ、および、中国科学院のコンピューティング技術研究所（ＩＣＴ）によって開発された複数の龍芯（Ｌｏｏｎｇｓｏｎ）ＩＰコアなどの複数のＩＰコアは、テキサスインスツルメンツ、クアルコム、アップル、若しくはサムスンなどの様々な顧客またはライセンシにライセンスが与えられ、または販売され、これらの顧客またはライセンシによって生成された複数のプロセッサに実装されてよい。
【０１２６】
図１１は、本開示の複数の実施形態に係る複数のＩＰコアの開発を示すブロック図を示している。ストレージ１１３０は、シミュレーションソフトウェア１１２０、および／またはハードウェアモデル若しくはソフトウェアモデル１１１０を含んでよい。一実施形態において、ＩＰコア設計を表すデータは、メモリ１１４０（例えば、ハードディスク）、有線接続（例えば、インターネット）１１５０、または無線接続１１６０を介してストレージ１１３０に提供されてよい。次に、シミュレーションツールおよびモデルによって生成されたＩＰコア情報は、製造設備に送信されてよい。製造設備では、それは少なくとも１つの実施形態に係る少なくとも１つの命令を実行するようサードパーティによって製造されてよい。
【０１２７】
いくつかの実施形態では、１または複数の命令は、第１のタイプまたはアーキテクチャ（例えば、ｘ８６）に対応していてよく、異なるタイプまたはアーキテクチャ（例えば、ＡＲＭ）のプロセッサ上で変換またはエミュレートされてよい。従って、一実施形態に係る命令は、ＡＲＭ、ｘ８６、ＭＩＰＳ、ＧＰＵ、または他のプロセッサタイプ若しくはアーキテクチャを含む、任意のプロセッサ若しくはプロセッサタイプ上で実行されてよい。
【０１２８】
図１２は、本開示の複数の実施形態に従って、第１のタイプの命令が異なるタイプのプロセッサによってどのようにエミュレートされ得るかを示している。図１２において、プログラム１２０５は、一実施形態に係る命令と同じまたは実質的に同じ機能を実行し得るいくつかの命令を含む。しかしながら、プログラム１２０５の複数の命令は、プロセッサ１２１５とは異なる、若しくは互換性のないタイプおよび／またはフォーマットである場合がある。それは、プログラム１２０５のタイプの複数の命令がプロセッサ１２１５によってネイティブに実行され得ない可能性があることを意味する。しかしながら、エミュレーションロジック１２１０の助けを借りて、プログラム１２０５の複数の命令は、プロセッサ１２１５によってネイティブに実行され得る複数の命令に変換されてよい。一実施形態において、エミュレーションロジックはハードウェアにおいて具現化されてよい。別の実施形態において、エミュレーションロジックは、プログラム１２０５のタイプの複数の命令を、プロセッサ１２１５によってネイティブに実行可能なタイプに変換するソフトウェアを含む有形の機械可読媒体において具現化されてよい。複数の他の実施形態において、エミュレーションロジックは、固定機能の若しくはプログラマブルなハードウェアと有形の機械可読媒体上に格納されたプログラムとの組み合わせであってよい。一実施形態において、プロセッサはエミュレーションロジックを含み、一方で、複数の他の実施形態においては、エミュレーションロジックは、プロセッサ外部に存在し、サードパーティによって提供されてよい。一実施形態において、プロセッサは、プロセッサに含まれるか、またはプロセッサに関連付けられたマイクロコードまたはファームウェアを実行することで、ソフトウェアを含む有形の機械可読媒体において具現化されたエミュレーションロジックをロードしてよい。
【０１２９】
図１３は、本開示の複数の実施形態に係る、ソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図を示している。示された実施形態では、命令コンバータはソフトウェア命令コンバータであってよいが、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせにおいて実装されてよい。図１３は、高水準言語１３０２のプログラムがｘ８６コンパイラ１３０４を使用してコンパイルされてｘ８６バイナリコード１３０６が生成されてよく、ｘ８６バイナリコード１３０６は、少なくとも１つのｘ８６命令セットコアを備えるプロセッサ１３１６によってネイティブに実行され得ることを示している。少なくとも１つのｘ８６命令セットコアを備えるプロセッサ１３１６は、少なくとも１つのｘ８６命令セットコアを備えるインテルのプロセッサと実質的に同じ結果を得るべく、（１）インテルｘ８６命令セットコアの命令セットの大部分、または（２）少なくとも１つのｘ８６命令セットコアを備えるインテルのプロセッサ上で動作することを目的とした複数のアプリケーション若しくは他のソフトウェアの複数のオブジェクトコードバージョンを互換的に実行若しくは他の方法で処理することで、少なくとも１つのｘ８６命令セットコアを備えるインテルのプロセッサと実質的に同じ複数の機能を実行し得る任意のプロセッサを表している。ｘ８６コンパイラ１３０４は、少なくとも１つのｘ８６命令セットコアを備えるプロセッサ１３１６上で、追加のリンケージ処理あり、またはなしで実行され得るｘ８６バイナリコード１３０６（例えば、オブジェクトコード）を生成するよう動作可能であってよいコンパイラを表す。同様に、図１３は、高水準言語１３０２のプログラムが代替的な命令セットコンパイラ１３０８を使用してコンパイルされて代替的な命令セットバイナリコード１３１０が生成されてよく、代替的な命令セットバイナリコード１３１０は、少なくとも１つのｘ８６命令セットコアを備えないプロセッサ１３１４（例えば、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令セットを実行する、および／または、カリフォルニア州サニーベールのＡＲＭホールディングスのＡＲＭ命令セットを実行する複数のコアを有するプロセッサ）によってネイティブに実行され得ることを示している。命令コンバータ１３１２は、ｘ８６バイナリコード１３０６を、ｘ８６命令セットコアを備えないプロセッサ１３１４によってネイティブに実行され得るコードに変換すべく使用されてよい。この変換されたコードは、代替的な命令セットバイナリコード１３１０と同じではあり得ない。しかしながら変換されたコードは、全般的なオペレーションを実現し、代替的な命令セットの複数の命令から構成されるであろう。従って、命令コンバータ１３１２は、エミュレーション、シミュレーション、または任意の他の処理を通して、プロセッサ、またはｘ８６命令セットのプロセッサ若しくはコアを有しない他の電子デバイスがｘ８６バイナリコード１３０６を実行できるようにするソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。
【０１３０】
図１４は、本開示の複数の実施形態に係るプロセッサの命令セットアーキテクチャ１４００のブロック図である。命令セットアーキテクチャ１４００は、任意の適した数または種類のコンポーネントを含んでよい。
【０１３１】
例えば、命令セットアーキテクチャ１４００は、１または複数のコア１４０６、１４０７、およびグラフィック処理ユニット１４１５などの複数の処理エンティティを含んでよい。コア１４０６、１４０７は、バスまたはキャッシュを通してなど、任意の適したメカニズムを通して命令セットアーキテクチャ１４００の残りのものに通信可能に連結されてよい。一実施形態において、コア１４０６、１４０７は、Ｌ２キャッシュ制御部１４０８を通して通信可能に連結されてよい。Ｌ２キャッシュ制御部１４０８は、バスインタフェースユニット１４０９およびＬ２キャッシュ１４１０を含んでよい。コア１４０６、１４０７およびグラフィック処理ユニット１４１５は、互いに通信可能に連結され、かつ、相互接続１４１０を通して、命令セットアーキテクチャ１４００の残りのものに通信可能に連結されてよい。一実施形態において、グラフィック処理ユニット１４１５は、特定の複数のビデオ信号が出力用に符号化および復号される態様を定義するビデオコーデック１４２０を使用してよい。
【０１３２】
命令セットアーキテクチャ１４００は、また、任意の数若しくは種類の、インタフェース、コントローラ、または、電子デバイス若しくはシステムの他の複数の部分とインタフェース接続若しくは通信するための他の複数のメカニズムを含む。そのような複数のメカニズムは、例えば、複数の周辺機器、複数の通信デバイス、他の複数のプロセッサ、またはメモリとのインタラクションを容易にし得る。図１４の例では、命令セットアーキテクチャ１４００は、液晶ディスプレイ（ＬＣＤ）ビデオインタフェース１４２５、加入者インタフェースモジュール（ＳＩＭ）インタフェース１４３０、ブートＲＯＭインタフェース１４３５、シンクロナスダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）コントローラ１４４０、フラッシュコントローラ１４４５、およびシリアルペリフェラルインタフェース（ＳＰＩ）マスタユニット１４５０を含んでよい。ＬＣＤビデオインタフェース１４２５は、例えば、ＧＰＵ１４１５からの複数のビデオ信号の出力を、例えばｍｏｂｉｌｅ  ｉｎｄｕｓｔｒｙ  ｐｒｏｃｅｓｓｏｒ  ｉｎｔｅｒｆａｃｅ（ＭＩＰＩ）１４９０、または高精細度マルチメディアインタフェース（ＨＤＭＩ（登録商標））１４９５を通してディスプレイに提供してよい。そのようなディスプレイは、例えば、ＬＣＤを含んでよい。ＳＩＭインタフェース１４３０は、ＳＩＭカードまたはデバイスへの、またはそこからのアクセスを提供してよい。ＳＤＲＡＭコントローラ１４４０は、ＳＤＲＡＭのチップまたはモジュールなどのメモリへの、またはそこからのアクセスを提供してよい。フラッシュコントローラ１４４５は、フラッシュメモリまたはＲＡＭの他の複数の例などのメモリへの、またはそこからのアクセスを提供してよい。ＳＰＩマスタユニット１４５０は、８０２．１１などの通信規格を実装するＢｌｕｅｔｏｏｔｈ（登録商標）モジュール１４７０、高速３Ｇモデム１４７５、全地球測位システムモジュール１４８０、または無線モジュール１４８５などの通信モジュールへの、またはそこからのアクセスを提供してよい。
【０１３３】
図１５は、本開示の複数の実施形態に係る、命令セットアーキテクチャを実装するプロセッサの命令アーキテクチャ１５００のより詳細なブロック図である。命令アーキテクチャ１５００はマイクロアーキテクチャであってよい。命令アーキテクチャ１５００は、命令セットアーキテクチャ１４００の１または複数の態様を実装してよい。さらに、命令アーキテクチャ１５００は、プロセッサ内の複数の命令を実行するための複数のモジュールおよび複数のメカニズムを示していてよい。
【０１３４】
命令アーキテクチャ１５００は、１または複数の実行エンティティ１５６５に通信可能に連結されたメモリシステム１５４０を含んでよい。さらに、命令アーキテクチャ１５００は、複数の実行エンティティ１５６５およびメモリシステム１５４０に通信可能に連結されたユニット１５１０などのキャッシングユニットおよびバスインタフェースユニットを含んでよい。一実施形態において、複数の実行エンティティ１５６５への複数の命令のロードは、実行の１または複数のステージで実行されてよい。そのような複数のステージは、例えば、命令プリフェッチステージ１５３０、デュアル命令復号ステージ１５５０、レジスタリネームステージ１５５５、発行ステージ１５６０、およびライトバックステージ１５７０を含んでよい。
【０１３５】
一実施形態において、メモリシステム１５４０は実行済み命令ポインタ１５８０を含んでよい。実行済み命令ポインタ１５８０は、複数のストランドによって表されたスレッド内のアウトオブオーダ発行ステージ１５６０において、複数の命令のバッチ内の最も古くディスパッチされていない命令を特定する値を格納してよい。実行済み命令ポインタ１５８０は、発行ステージ１５６０で算出され、複数のロードユニットに伝搬されてよい。命令は、複数の命令のバッチ内に格納されてよい。複数の命令のバッチは、複数のストランドによって表されたスレッド内にあってよい。最も古い命令は、最小のＰＯ（プログラム順）値に対応していてよい。ＰＯは、命令の固有番号を含んでよい。ＰＯは、コードの正しい実行セマンティクスを保証すべく、複数の命令の順序付けにおいて使用されてよい。ＰＯは、絶対値ではなく、命令内で符号化されたＰＯへのインクリメントを評価するものなどの複数のメカニズムによって再構成されてよい。そのような再構成されたＰＯは、ＲＰＯとして知られているだろう。本明細書においてはＰＯが言及されてよいが、そのようなＰＯは、ＲＰＯと相互交換可能に使用されてよい。ストランドは、互いに依存し合うデータである一連の命令を含んでよい。ストランドは、コンパイル時にバイナリ変換器によって構成されてよい。ストランドを実行するハードウェアは、様々な命令のＰＯに従って所与のストランドの複数の命令を順番に実行してよい。スレッドは、複数のストランドを含んでよい。それにより、異なる複数のストランドの複数の命令は、互いに依存し合ってよい。所与のストランドのＰＯは、発行ステージから実行にまだディスパッチされていないストランド内の最も古い命令のＰＯであってよい。従って、ＰＯによって順序付けられた複数の命令を各々が含む複数のストランドのスレッドを考えると、実行済み命令ポインタ１５８０は、アウトオブオーダ発行ステージ１５６０内のスレッドの複数のストランド中で最も古い−最小番号によって示された−ＰＯを格納してよい。
【０１３６】
別の実施形態において、メモリシステム１５４０はリタイアメントポインタ１５８２を含んでよい。リタイアメントポインタ１５８２は、最後にリタイアされた命令のＰＯを特定する値を格納してよい。リタイアメントポインタ１５８２は、例えば、リタイアメントユニット４５４によって設定されてよい。どの命令もリタイアされていない場合、リタイアメントポインタ１５８２はヌル値を含んでよい。
【０１３７】
複数の実行エンティティ１５６５は、任意の適した数および種類のメカニズムを含んでよく、そのメカニズムによってプロセッサは複数の命令を実行し得る。図１５の例では、複数の実行エンティティ１５６５は、複数のＡＬＵ／乗算ユニット（ＭＵＬ）１５６６、複数のＡＬＵ１５６７、および複数の浮動小数点ユニット（ＦＰＵ）１５６８を含んでよい。一実施形態において、そのような複数のエンティティは、所与のアドレス１５６９内に含まれる情報を使用してよい。複数の実行エンティティ１５６５は、ステージ１５３０、１５５０、１５５５、１５６０、１５７０との組み合わせで集合的に実行ユニットを形成してよい。
【０１３８】
ユニット１５１０は、任意の適した態様で実装されてよい。一実施形態において、ユニット１５１０はキャッシュ制御を実行してよい。従って、そのような実施形態では、ユニット１５１０はキャッシュ１５２５を含んでよい。さらなる実施形態において、キャッシュ１５２５は、０、１２８ｋ、２５６ｋ、５１２ｋ、１Ｍ、または２Ｍバイトのメモリなどの任意の適したサイズのＬ２統一キャッシュとして実装されてよい。別のさらなる実施形態では、キャッシュ１５２５は、エラー修正コードメモリ内に実装されてよい。別の実施形態において、ユニット１５１０は、プロセッサまたは電子デバイスの他の複数の部分へのバスインタフェース接続を実行してよい。従って、そのような実施形態では、ユニット１５１０は、インターコネクト、イントラプロセッサバス、プロセッサ間バス、または他の通信バス、通信ポート、若しくは通信ライン上で通信するためのバスインタフェースユニット１５２０を含んでよい。バスインタフェースユニット１５２０は、例えば、メモリの生成、および、複数の実行エンティティ１５６５と、命令アーキテクチャ１５００の外部のシステムの複数の部分との間でのデータの転送のための入出力アドレスの生成を実行すべくインタフェース接続を提供してよい。
【０１３９】
その複数の機能をさらに促進すべく、バスインタフェースユニット１５２０は、プロセッサまたは電子デバイスの他の複数の部分に対する割り込みおよび他の通信を生成するための割り込み制御および分散ユニット１５１１を含んでよい。一実施形態において、バスインタフェースユニット１５２０は、複数の処理コアのためのキャッシュのアクセスおよびコヒーレンシを処理するスヌープ制御ユニット１５１２を含んでよい。さらなる実施形態では、そのような機能を提供すべく、スヌープ制御ユニット１５１２は、異なる複数のキャッシュの間での情報交換を処理するキャッシュツーキャッシュ転送ユニットを含んでよい。別のさらなる実施形態では、スヌープ制御ユニット１５１２は、他の複数のキャッシュ（不図示）のコヒーレンシを監視する１または複数のスヌープフィルタ１５１４を含んでよい。これにより、ユニット１５１０などのキャッシュコントローラが、直接そのような監視を実行する必要がなくなる。ユニット１５１０は、命令アーキテクチャ１５００の複数の動作を同期させるための任意の適切な数のタイマ１５１５を含んでよい。また、ユニット１５１０はＡＣポート１５１６を含んでよい。
【０１４０】
メモリシステム１５４０は、命令アーキテクチャ１５００の処理上必要とするものの情報を格納するための任意の適した数および種類のメカニズムを含んでよい。一実施形態において、メモリシステム１５４０は、メモリまたは複数のレジスタへ書き込む、またはそれらからリードバックする複数の命令に関わる情報を格納するためのロードストアユニット１５３０を含んでよい。別の実施形態において、メモリシステム１５４０は、物理アドレスと仮想アドレスとの間の複数のアドレス値のルックアップを提供する変換ルックアサイドバッファ（ＴＬＢ）１５４５を含んでよい。さらに別の実施形態では、メモリシステム１５４０は、仮想メモリへのアクセスを容易にするためのメモリ管理ユニット（ＭＭＵ）１５４４を含んでよい。またさらに別の実施形態では、メモリシステム１５４０は、レイテンシを低減すべく、複数の命令が実行のために実際に必要となる前に、そのような複数の命令をメモリから要求するためのプリフェッチャ１５４３を含んでよい。
【０１４１】
命令を実行する命令アーキテクチャ１５００のオペレーションは、異なる複数のステージを通して実行されてよい。例えば、命令プリフェッチステージ１５３０は、ユニット１５１０を使用して、プリフェッチャ１５４３を通し命令にアクセスしてよい。取得された複数の命令は、命令キャッシュ１５３２に格納されてよい。プリフェッチステージ１５３０は、高速ループモードのためのオプション１５３１を有効にしてよい。ここで、所与のキャッシュ内に収めるのに十分な小ささであるループを形成する一連の命令が実行される。一実施形態において、そのような実行は、例えば、命令キャッシュ１５３２からの追加の複数の命令にアクセスする必要なく実行されてよい。どの複数の命令をプリフェッチするかの決定は、例えば分岐予測ユニット１５３５によって成されてよい。分岐予測ユニット１５３５は、グローバル履歴１５３６内の実行の複数のインジケーション、ターゲットアドレス１５３７の複数のインジケーション、または、リターンスタック１５３８の内容にアクセスして、コードの複数の分岐１５５７のどれが次に実行されるのかを決定してよい。そのような複数の分岐は、場合により結果としてプリフェッチされることがある。複数の分岐１５５７は、以下に説明されるように、オペレーションの他の複数のステージを通して生成されてよい。命令プリフェッチステージ１５３０は、複数の命令、および、今後行われる複数の命令についてのあらゆる予測をデュアル命令復号ステージに提供してよい。
【０１４２】
デュアル命令復号ステージ１５５０は、受信された命令を、実行され得るマイクロコードベースの複数の命令に変換してよい。デュアル命令復号ステージ１５５０は、一クロックサイクルにつき２つの命令を同時に復号してよい。さらに、デュアル命令復号ステージ１５５０は、その結果をレジスタリネームステージ１５５５に渡してよい。加えて、デュアル命令復号ステージ１５５０は、その復号、および最終的なマイクロコードの実行から、結果として生じるあらゆる分岐を決定してよい。そのような結果は、複数の分岐１５５７に入力されてよい。
【０１４３】
レジスタリネームステージ１５５５は、複数の仮想レジスタまたは他の複数のリソースへの参照を、複数の物理レジスタまたは複数のリソースへの参照へと変換してよい。レジスタリネームステージ１５５５は、レジスタプール１５５６内にそのようなマッピングの複数のインジケーションを含んでよい。レジスタリネームステージ１５５５は、受信されたままの複数の命令を変更し、その結果を発行ステージ１５６０に送信してよい。
【０１４４】
発行ステージ１５６０は、複数のコマンドを複数の実行エンティティ１５６５に発行またはディスパッチしてよい。そのような発行は、アウトオブオーダ方式で実行されてよい。一実施形態において、複数の命令は、実行前に発行ステージ１５６０において保持されてよい。発行ステージ１５６０は、そのような複数のコマンドを保持するための命令キュー１５６１を含んでよい。所与の命令の実行のための複数のリソースの可用性または適切性などの任意の許容可能な基準に基づいて、特定の処理エンティティ１５６５に、複数の命令は発行ステージ１５６０によって発行されてよい。一実施形態において、発行ステージ１５６０は、命令キュー１５６１内の複数の命令の順序を変更してよい。それにより、受信された第１番目の複数の命令が、実行された第１番目の複数の命令にならないことがある。命令キュー１５６１の順序付けに基づいて、追加の分岐情報が分岐１５５７に提供されてよい。発行ステージ１５６０は、実行のために、複数の実行エンティティ１５６５に複数の命令を渡してよい。
【０１４５】
実行されると、ライトバックステージ１５７０は、命令アーキテクチャ１５００の複数のレジスタ、複数のキュー、または他の複数の構造体にデータを書き込んで、所与のコマンドの完了を通信してよい。発行ステージ１５６０内で構成された複数の命令の順序に応じて、ライトバックステージ１５７０のオペレーションは、追加の複数の命令が実行されることを可能にしてよい。命令アーキテクチャ１５００の実行は、トレースユニット１５７５によって監視またはデバッグされてよい。
【０１４６】
図１６は、本開示の複数の実施形態に係る、プロセッサのための実行パイプライン１６００のブロック図である。実行パイプライン１６００は、例えば、図１５の命令アーキテクチャ１５００のオペレーションを示していてよい。
【０１４７】
実行パイプライン１６００は、複数の段階または複数のオペレーションの任意の適した組み合わせを含んでよい。１６０５において、次に実行されるべき分岐の複数の予測が成されてよい。一実施形態において、そのような複数の予測は、前の複数の命令の実行とそれらの結果とに基づいていてよい。１６１０において、実行の予測された分岐に対応する複数の命令が、命令キャッシュにロードされてよい。１６１５において、命令キャッシュ内のそのような１または複数の命令が、実行のためにフェッチされてよい。１６２０において、フェッチされた複数の命令は、マイクロコード、またはより具体的な機械言語へと復号されてよい。一実施形態において、複数の命令は同時に復号されてよい。１６２５において、復号された複数の命令内の複数のレジスタまたは他の複数のリソースへの参照が再割り当てされてよい。例えば、複数の仮想レジスタへの参照は、対応する複数の物理レジスタへの参照で置換されてよい。１６３０において、複数の命令は、実行のために複数のキューにディスパッチされてよい。１６４０において、複数の命令は実行されてよい。そのような実行は、任意の適した態様で実行されてよい。１６５０において、複数の命令は、適切な実行エンティティに発行されてよい。命令が実行される態様は、その命令を実行する特定のエンティティに依存していてよい。例えば、１６５５において、ＡＬＵは複数の演算機能を実行してよい。ＡＬＵは、そのオペレーションのために単一のクロックサイクルおよび２つのシフタを利用してよい。一実施形態においては２つのＡＬＵが用いられてよく、従って、１６５５において２つの命令が実行されてよい。１６６０において、結果として生じる分岐の決定が成される。分岐が成されるデスティネーションを指定すべく、プログラムカウンタが使用されてよい。１６６０は、単一クロックサイクル内で実行されてよい。１６６５において、１または複数のＦＰＵによって浮動小数点演算が実行されてよい。浮動小数点オペレーションは、実行のために２から１０サイクルなどの複数のクロックサイクルを必要としてよい。１６７０において、乗算および除算のオペレーションが実行されてよい。そのような複数のオペレーションは、４クロックサイクルなどの複数のクロックサイクルで実行されてよい。１６７５において、複数のレジスタ、または、パイプライン１６００の他の部分へのロードおよびストアのオペレーションが実行されてよい。それらのオペレーションは、複数のアドレスのロードおよびストアを含んでよい。そのような複数のオペレーションは、４クロックサイクルで実行されてよい。１６８０において、複数のライトバックオペレーションが、１６５５−１６７５の結果のオペレーションによって要求される通りに実行されてよい。
【０１４８】
図１７は、本開示の複数の実施形態に係る、プロセッサ１７１０を利用するための電子デバイス１７００のブロック図である。電子デバイス１７００は、例えば、ノートブック、ウルトラブック、コンピュータ、タワーサーバ、ラックサーバ、ブレードサーバ、ラップトップ、デスクトップ、タブレット、モバイルデバイス、電話、組み込みコンピュータ、または任意の他の適切な電子デバイスを含んでよい。
【０１４９】
電子デバイス１７００は、任意の適した数若しくは種類のコンポーネント、周辺機器、モジュール、またはデバイスに通信可能に連結されたプロセッサ１７１０を含んでよい。そのような連結は、Ｉ２Ｃバス、システム管理バス（ＳＭバス）、ローピンカウント（ＬＰＣ）バス、ＳＰＩ、高品位オーディオ（ＨＤＡ）バス、シリアルアドバンステクノロジアタッチメント（ＳＡＴＡ）バス、ＵＳＢバス（バージョン１、２、３）、または汎用非同期送受信機（ＵＡＲＴ）バスなどの任意の適した種類のバスまたはインタフェースによって実現されてよい。
【０１５０】
そのような複数のコンポーネントは、例えば、ディスプレイ１７２４、タッチスクリーン１７２５、タッチパッド１７３０、ニアフィールド通信（ＮＦＣ）ユニット１７４５、センサハブ１７４０、熱センサ１７４６、エクスプレスチップセット（ＥＣ）１７３５、トラステッドプラットフォームモジュール（ＴＰＭ）１７３８、ＢＩＯＳ／ファームウェア／フラッシュメモリ１７２２、デジタル信号プロセッサ１７６０、ソリッドステートディスク（ＳＳＤ）若しくはハードディスクドライブ（ＨＤＤ）などのドライブ１７２０、無線ローカルエリアネットワーク（ＷＬＡＮ）ユニット１７５０、Ｂｌｕｅｔｏｏｔｈ（登録商標）ユニット１７５２、無線ワイドエリアネットワーク（ＷＷＡＮ）ユニット１７５６、全地球測位システム（ＧＰＳ）、ＵＳＢ３．０カメラなどのカメラ１７５４、または、例えばＬＰＤＤＲ３規格で実装された低電力ダブルデータレート（ＬＰＤＤＲ）メモリユニット１７１５を含んでよい。これらのコンポーネントは、各々、任意の適した態様で実装されてよい。
【０１５１】
さらに、様々な実施形態では、他の複数のコンポーネントが上述された複数のコンポーネントを通してプロセッサ１７１０に通信可能に連結されてよい。例えば、加速度計１７４１、周辺光センサ（ＡＬＳ）１７４２、コンパス１７４３、およびジャイロスコープ１７４４がセンサハブ１７４０に通信可能に連結されてよい。熱センサ１７３９、ファン１７３７、キーボード１７４６、およびタッチパッド１７３０がＥＣ１７３５に通信可能に連結されてよい。スピーカ１７６３、ヘッドフォン１７６４、およびマイクロフォン１７６５がオーディオユニット１７６２に通信可能に連結されてよく、オーディオユニット１７６２は次にＤＳＰ１７６０に通信可能に連結されてよい。オーディオユニット１７６２は、例えば、オーディオコーデックおよびＤ級増幅器を含んでよい。ＳＩＭカード１７５７は、ＷＷＡＮユニット１７５６に通信可能に連結されてよい。ＷＬＡＮユニット１７５０およびＢｌｕｅｔｏｏｔｈ（登録商標）ユニット１７５２、ならびにＷＷＡＮユニット１７５６などの複数のコンポーネントは、次世代フォームファクタ（ＮＧＦＦ）で実装されてよい。
【０１５２】
本開示の複数の実施形態は、複数の命令をディスパッチするための命令およびロジックを含む。複数の命令およびロジックは、プロセッサ、仮想プロセッサ、パッケージ、コンピュータシステム、または他の処理装置と関連して実行されてよい。一実施形態において、そのような処理装置はアウトオブオーダプロセッサを含んでよい。さらなる実施形態では、そのような処理装置はマルチストランド・アウトオブオーダプロセッサを含んでよい。図１８は、本開示の複数の実施形態に係る、複数の命令をディスパッチするための例示的システム１８００を示している。図１８においては特定の複数の要素が説明された複数の動作を実行するように示されてよいが、システム１８００の任意の適した部分が本明細書において説明される機能または複数の動作を実行してよい。
【０１５３】
システム１８００は、実行待ち中の複数の命令を１または複数の実行ユニットにディスパッチしてよい。一実施形態において、システム１８００は、複数の実行ユニットポートの可能な使用量を評価することで複数の命令をディスパッチしてよい。さらなる実施形態では、実行待ち命令が、利用可能な実行ユニットポート数より多いことを考慮して、システム１８００は、複数の実行ユニットポートの利用を最大化するまたは最適化することによって複数の命令をディスパッチしてよい。従って、システム１８００は、各サイクルに実行される命令の数を多くすることによって並列処理を向上させるよう試みてよい。同じ実行ポートの使用を待機している複数の命令がある場合、いくつかの命令が他の複数の命令より先に選択される。一実施形態において、システム１８００は、複数の命令の優先順位を付けるスキームをチェックすることを含んでよい。当該複数の命令は、そうでなければ、同じ実行ポートを待ち続けてよい。様々な実施形態では、システム１８００は単一クロックサイクル内でそのような複数の選択を実行してよい。なぜなら、ディスパッチのための複数の命令の選択の遅延は、複数の実行パイプライン内の複数の空セグメントを引き起こし得るからである。
【０１５４】
システム１８００は、複数のストランドを並列に実行し、どの複数の命令１８０６をＩＳＵ１８０２から複数の実行ユニット１８１２にディスパッチするべきかを決定する、任意の適した複数のエンティティを備えるマルチストランド・アウトオブオーダプロセッサ１８０８を含んでよい。複数の命令１８０６はストランド１８２４においてグループ化されてよい。プロセッサ１８０８は、複数の命令がプログラム順とは異なってフェッチ、発行、および実行されるように、各ストランド１８２４の複数の命令を他の複数のストランド１８２４の複数の命令に対して実行してよい。上述したように、複数の命令１８０６は、プログラム順を示すＰＯ値またはＲＰＯ値を含んでよい。インオーダ実行は、連続的なＰＯ値に従った実行を含んでよい。アウトオブオーダ実行は、必ずしも連続的なＰＯ値には従わない実行を含んでよい。あるストランド１８２４内の複数の実行待ち命令は、他の複数のストランド１８２４の複数の命令に対して順序付けられていない。従って、プロセッサ１８０８は、実行中、複数のストランド１８２４内の全命令の互いに対する順序を知らない場合がある。システム１８００は、プロセッサ１８０４のいくつかの要素を示してよい。プロセッサ１８０４は、任意のプロセッサコア、論理プロセッサ、プロセッサ、または、図１−図１７において示されたものなどの他の複数の処理エンティティまたは複数の要素を含んでよい。一実施形態において、プロセッサ１８０４は、複数の命令をディスパッチし、それらの順序を決定する命令スケジューリングユニット（ＩＳＵ）１８０２を含んでよい。
【０１５５】
プロセッサ１８０４は、ＩＳＵ１８０２に通信可能に連結されたフロントエンドユニット１８０８および複数の実行ユニット１８１２を含んでよい。フロントエンドユニット１８０８は、フェッチされた複数の命令１８０６を複数のストランド１８２４に分割する複数の命令バッファを含んでよい。複数の命令バッファは、キュー（例えば、ＦＩＦＯキュー）または任意の他のコンテナタイプのデータ構造を使用して実装されてよい。フロントエンドユニットは、複数のストランド１８２４に複数の命令１８０６を配置してよく、それにより、所与のストランドがそれ自体内でデータ依存性があり、ＰＯまたはＲＰＯに従って順序付けられる。所与のストランド１８２４の第１の命令の実行結果は、ストランド１８２４の次の命令の評価をもたらしてよい。図１８の例において、複数のストランド１８２４が存在することがある。
【０１５６】
フロントエンドユニット１８０８は、任意の適した態様で実装されてよい。例えば、フロントエンドユニット１８０８は、フェッチユニット１８１６、命令キャッシュ１８１８、および命令デコーダ１８２０を含んでよい。フェッチユニット１８０８は、複数の命令１８０６が格納されている命令キャッシュ１８１８、メモリ、または他の複数の場所から複数の命令をフェッチしてよい。フェッチユニット１８０８は、複数の命令を命令デコーダ１８２０に渡してよい。命令デコーダ１８２０は、実行のために複数の命令を複数のプリミティブに分解する。
【０１５７】
ＩＳＵ１８０２は、プロセッサ１８０２の任意の適した複数の部分において実装されてよい。一実施形態において、ＩＳＵ１８０２はアウトオブオーダエンジン１８１０内に実装されてよい。フロントエンドユニット１８０８は、アウトオブオーダエンジン１８１０に通信可能に連結されて、復号された複数の命令を渡してよい。アウトオブオーダエンジン１８１０は、アウトオブオーダ方式で複数の命令の順序を変更し、実行のために複数のリソースを割り当てる任意の適した他の複数のコンポーネントを含んでよい。アウトオブオーダエンジン１８１０は、複数の論理リソースをリネームし、それらを複数の物理リソースにマッピングしてよい。そのようなデータは、レジスタファイル１８２６に格納されてよい。ＩＳＵ１８０２は、複数の命令を複数のストランド１８２４から様々な実行ユニット１８１２に発行してよい。
【０１５８】
複数の実行ユニット１８１２は、ＩＳＵ１８０２から受信される複数の命令を実行し、それらをリオーダバッファ１８２８に格納された複数の要素およびロジックに従ってリタイアさせてよい。そのようなリタイアメントは、アウトオブオーダ実行に起因するデータ依存性エラーを防ぐことを保証する複数のルールに従ってよい。複数の命令が実行されて、リタイアまたはコミットされ得る場合、その結果は、キャッシュ１８３０、システム１８００のメモリ、または任意の他の適切な場所に書き込まれてよい。
【０１５９】
ＩＳＵ１８０２は、それぞれのストランド１８２４の各末尾から命令を受信してよい。従って、そのような複数の命令は、複数の実行待ち命令１８３４であってよい。Ｘ個の異なるストランド１８２４または他の複数の命令のバッファがあってよい。従って、Ｘ個の異なる実行待ち命令１８３４があってよい。ＩＳＵ１８０２は、複数の命令をＹ個の異なる実行ポート１８３２のうちの１つに発行してよい。複数の実行ポート１８３２は、プロセッサ１８０４の１または複数の実行ユニット１８１２の任意の適した組み合わせから成ってよい。一実施形態において、ＸはＹより大きくてよく、故に、ＩＳＵ１８０２は複数の実行待ち命令１８３４のうちのどれが複数の実行ポート１８３２にルーティングされるかを決定してよい。
【０１６０】
一実施形態において、ＩＳＵ１８０２は、複数の実行待ち命令１８３４のうちのどれが最小のＰＯまたはＲＰＯを有し、従って、最も古い命令であるかを選択してよい。様々な実施形態では、ＰＯまたはＲＰＯは、遅らせたＲＰＯ値を使用するなどして元のプログラム順の値から調整されてよい。例えば、前に実行が見送られた命令は、当該命令により高い優先度を与えるよう、そのＲＰＯ値が調整されてよい。別の例では、実行のために選択された命令は、同じストランド内に他の複数の命令を有してよく、それらにより低い優先度を与えるよう、それらのＲＰＯ値が調整されてよい。ＩＳＵ１８０２は、実行のためのそのような複数の最も古い命令を、より新しい複数の命令よりも優先させてよい。しかしながら、そのような選択は、実行の準備が整っていない様々な命令を考慮に入れていないことがある。そのような状況は、例えば、命令を実行するためにソースデータの準備が整っていない、デスティネーションが利用可能でない、若しくはコンフリクトしている、ストランドがキャンセルされた、またはストランドがキルされた場合に起こり得る。そのような複数の例において、より低いＲＰＯを有する実行待ち命令が、実行ポートのための空間を占有するが実行されないことがあり、より高いＲＰＯを有していた別の実行待ち命令の機会を失う結果になる。従って、複数の実行ポート１８３２は十分に利用されず、ＩＳＵ１８０２のスループットは低減する。
【０１６１】
一実施形態において、ＩＳＵ１８０２は、複数の実行ポート１８３２に割り当てるべく、どのように複数の実行待ち命令１８３４の優先順位を付けるかを決定するとき、所与の実行待ち命令１８３４または関連付けられたストランド１８２４の有効性情報を考慮してよい。ＩＳＵ１８０２は、複数の所与の命令が有効であり、且つ複数の実行ポート１８３２へのディスパッチの準備ができているかどうかを特定してよい。さらに、有効性情報は、優先度情報に基づいて複数のコンフリクトを解決すべく使用されてよい。
【０１６２】
別の実施形態において、ＩＳＵ１８０２は、そのような優先順位付け内で使用される有効性情報を生成してよい。ＩＳＵ１８０２は、以下に説明される、第２のステージの分析エンジン内で有効性情報を使用して、複数の命令のディスパッチを処理してよい。有効性情報は、バックツーバック依存命令のウェイクアップおよび使用のタイミング要件、ならびに、現在のサイクル内の命令のディスパッチのタイミング要件を満たすよう使用されてよい。
【０１６３】
さらに別の実施形態では、ＩＳＵ１８０２は、ポート固有の「ワンホット」ディスパッチベクトルを生成して、複数の実行待ち命令１８３４のうちのどれが所与の実行ポート１８３２に割り当てられるかを具体的に特定してよい。ディスパッチベクトルまたは結果として得られた命令は、複数の実行ポート１８３２の各々に提供され、同時に、他の複数のディスパッチベクトルまたは複数の結果として得られた命令は、他の複数の実行ポート１８３２に提供されてよい。従って、利用可能な実行ポート１８３２よりも多い実行待ち命令１８３４がある場合、複数の実行待ち命令１８３４のうちの１つの最良の候補が所与の実行ポート１８３２に送られてよい。
【０１６４】
様々な実施形態において、ＩＳＵ１８０２は単一クロックサイクル内でこれらのオペレーションを実行してよい。
【０１６５】
図１９は、本開示の複数の実施形態に係るＩＳＵ１８０２の例示的実施形態の図である。ＩＳＵ１８０２は、本開示において説明される機能を実行する任意の適した態様で実装されてよい。一実施形態において、ＩＳＵ１８０２は複数の分析エンジンの状態を含んでよい。そのような複数のエンジンは、例えば、複数のストランドスケジューリングフロップ（ＳＳＦ）を含んでよい。ＳＳＦは、ＩＳＵによって割り当てられ処理された場合、複数の実行待ち命令を保持する、複数の実行待ち命令１８３４を含む複数のストランド１８２４のヘッドなどのハードウェア構造を含んでよい。ＳＳＦは、待機バッファまたはリザベーションステーションによって完全にまたは部分的に実装されてよい。ＳＳＦは、さらに、そのような複数の命令に対して特定の複数のオペレーションまたは分析を実行してよい。
【０１６６】
図１９の例では、ＩＳＵ１８０２は、第１のＳＳＦであるＳＳＦ１  １９０４、および第２のＳＳＦであるＳＳＦ２  １９０６を含んでよい。ＳＳＦの２つのステージは、ＳＳＦ１  １９０４、ＳＳＦ２  １９０６において複数の実行待ち命令が連続的に積み重なるようにさせてよい。ＳＳＦ１９０４、１９０６の各々は、以下に説明されるように分析を実行してよい。さらに、ＩＳＵ１８０２はＳＳＦ１  １９０４とＳＳＦ２  １９０６との間で通信可能に連結されたチェックモジュール１９０８を含んでよい。ＳＳＦ１  １９０４、ＳＳＦ２  １９０６、およびチェックモジュール１９０８の各々のインスタンスは、複数のストランド１８２４のヘッドのＸ個の実行待ち命令１８３４の各々につき存在してよい。考慮されるべきそのような各命令の論理位置は、それがＩＳＵ１８０２のオペレーションを通して操作されるので、「ウェイ（ｗａｙ）」と称されてよい。一実施形態において、ＳＳＦ２  １９０６は、ＩＳＵ１８０２の代わりに優先順位付けの分析を実行してよい。
【０１６７】
ＳＳＦ１  １９０４は、所与の命令のためのオペランドの準備状況を決定してよい。ＳＳＦ１は、ウェイクアップロジックなどの任意の適切な分析を実行してよい。さらに、ＳＳＦ１は、あらゆるデータ依存性の問題を解決してよい。従って、異なる複数のストランドからの複数の命令がアウトオブオーダで実行されることを可能にする。
【０１６８】
一実施形態において、チェックモジュール１９０８は、命令がＳＳＦ２  １９０６に書き込まれる準備ができているかどうか、または、命令がＳＳＦ２  １９０６によって優先順位付けされる準備ができているかどうかを決定すべく、適切な分析を実行してよい。チェックモジュール１９０８のいくつかの部分がＳＳＦ１  １９０４によって代わりに実行されてよい。チェックモジュール１９０８は、所与の命令のための全てのオペランドが準備完了であるかどうかを決定するロジック１９１０を含んでよい。例えば、チェックモジュール１９０８は、デスティネーションが準備完了であるかどうか、命令のためのデータの第１のソースが準備完了であるかどうか、および、必要な場合、命令のためのデータの第２のソースが準備完了であるかどうかを決定してよい。全てのそのようなコンポーネントが準備完了である場合、ロジック１９１０は真値をもたらし得る。
【０１６９】
一実施形態において、チェックモジュール１９０８は、命令が、当該命令のアクティブであるストランド１８２４に対して有効かどうかを決定するロジック１９１２を含んでよい。例えば、ロジック１９１２は、当該命令のそれぞれのストランド１８２４がキルまたはキャンセルされていないかどうかを決定してよい。そのようなイベントは、アウトオブオペレーションにおける誤った予測または推論の結果であることが考えられる。この場合、実行はロールバックされてよい。ストランドが依然としてアクティブである場合、ロジック１９１２は真値をもたらし得る。
【０１７０】
別の実施形態において、チェックモジュール１９０８は、ロジック１９１２およびロジック１９１０の結果を組み合わせて、現在の命令の有効性ビット１９１８を決定してよい。従って、当該命令が、両方とも首尾よくウェイクアップされた場合、有効性ビット１９１８は１に設定され得る。この場合、全オペランドパラメータは準備完了であり、命令のストランドは依然としてアクティブである。有効性ビット１９１８は、それぞれのＳＳＦ２  １９０６に出力されてよい。たとえ準備完了であっても、複数の命令はＩＳＵ１８０２によって実行が見送られることがある。従って、さらなる実施形態において、有効性ビット１９１８は、前の命令のディスパッチが成功するまでマルチプレクサ１９１６によって保持されてよい。そのような時間まで、マルチプレクサ１９１６は前の有効性ビット１９２２を出力し続けてよい。有効性ビット１９２２は、命令が前は準備完了でなかったが、後に準備完了になった場合、更新されてよい。
【０１７１】
各ＳＳＦ２  １９０６は、そのそれぞれの命令を処理して、他の複数の実行待ち命令に対する優先順位付けを促進してよい。ＳＳＦ２  １９０６は、受信された有効性ビット１９２２に基づいて任意の適した情報を他の複数のコンポーネントに出力して命令を選択してよい。図２０は、本開示の複数の実施形態による、ＳＳＦ２  １９０６と、実行のために複数の命令の優先順位付けを行い、それらを選択する追加の複数のコンポーネントとを含むＩＳＵ１８０２のさらなる図である。図２０のオペレーションは、単一クロックサイクル内で実行されてよい選択ロジックを示していてよい。
【０１７２】
一実施形態において、第１クロックサイクルでＳＳＦ１  １９０４およびチェックモジュール１９０８から、命令、および関連付けられた有効性ビット１９２０を受信した後、次の単一クロックサイクル中に、ＳＳＦ２  １９０６は、１または複数の処理マトリックスに情報をルーティングして、複数の実行ポート１８３２に提供されるべき１セットの命令を選択してよい。ＩＳＵ１８０２は、各実行ポート１８３２のための処理マトリックス２００２を含んでよい。図２０の例では、ＩＳＵ１８０２はＹ個の異なる処理マトリックス２００２を含んでよい。Ｘ個の異なるＳＳＦ２  １９０６モジュールの各々は、Ｙ個の異なる処理マトリックス２００２の各々にルーティングされてよい。Ｙ個の異なる処理マトリックス２００２の出力は、Ｙ個の異なる実行ポート１８３２のうちのそれぞれ１つにルーティングされてよい。
【０１７３】
任意の適した情報は、Ｘ個の異なるＳＳＦ２  １９０６モジュールからＹ個の異なる処理マトリックス２００２の各々にルーティングされてよい。一実施形態において、Ｘ個の異なるＳＳＦ２  １９０６モジュールの各々の有効性ビット１９２０は、Ｙ個の異なる処理マトリックス２００２の各々にルーティングされてよい。別の実施形態において、Ｘ個の異なるＳＳＦ２  １９０６モジュールの各々からのポートバインディング（ＰＢ）情報は、Ｙ個の異なる処理マトリックス２００２の各々にルーティングされてよい。さらなる実施形態において、関連付けられたポートのＰＢ情報のみが、所与のＳＳＦ２  １９０６モジュールから所与の処理マトリックス２００２にルーティングされてよい。
【０１７４】
ＰＢ情報は、例えば、特定の実行ポート１８３２上で実行されるべき特定のウェイまたはストランド１８２４からの複数の重要な命令を指定すべく使用されてよい。ＰＢを用いれば、命令がＩＳＵ１８０２に割り当てられるとき、命令はＹ個の異なる実行ポート１８３２のうちの１つに結び付けられる。従って、ＳＳＦ２  １９０６は、命令が結び付けられたポート１８３２についての情報を、そのような結び付けが成された場合、転送してよい。ＳＳＦ２  １９０６は、ＰＢスキームを指定する任意の適した情報を含んでよい。一実施形態において、ＳＳＦ２  １９０６は、各実行待ち命令のためのＰＢベクトル２００６含んでよい。ＰＢベクトル２００６は、各可能な実行ポート１８３２に対応する複数のビットを有する情報の「ワンホット」ベクトルを含んでよい。従って、ＰＢベクトル２００６はＹ個のビットを含んでよい。「ワンホット」ベクトルは、「１」値を１つだけ含んでよく、残りはゼロであってよい。これは、Ｙ個の実行ポート１８３２のうちのただ１つを示している。示されたポートは、もしあれば、Ｙ個の実行ポート１８３２のうちのどれに当該命令が結び付けられているかを特定してよい。ＳＳＦ２  １９０６は、ＰＢベクトル２００６の所与ポートのビットを、関連付けられた処理マトリックス２００２に出力してよい。
【０１７５】
一実施形態において、ＳＳＦ２  １９０６は、命令のＰＯ値またはＲＰＯ値２００８を含んでよく、それをＹ個の異なる処理マトリックス２００２の各々にルーティングしてよい。別の実施形態において、Ｙ個の異なる処理マトリックス２００２の各々は、ＲＰＯ２００８に格納された値を既に有してよい。さらに別の実施形態では、Ｙ個の異なる処理マトリックス２００２の各々は、複数のＳＳＦ２  １９０６モジュールに亘ってＲＰＯ２００８を分析した結果を既に有してよい。そのような実施形態において、当該分析は前のクロックサイクルで既に実行されていてよい。
【０１７６】
従って、Ｙ個の実行ポート１８３２Ｎのうちの関連付けられた１つに対する所与の処理マトリックス２００２Ｎは、Ｘ個の異なるＳＳＦ２  １９０６モジュールの各々からの、そのような各モジュールの実行待ち命令に関する入力を有してよい。一実施形態において、当該情報はＸ個の異なる命令の各々の有効性１９２０を含んでよい。別の実施形態において、当該情報は、Ｘ個の異なる命令の各々のＰＢベクトル２００６の、関連付けられたポートＮの情報を含んでよい。さらに別の実施形態において、当該情報は、Ｘ個の異なる命令の各々のＲＰＯ値２００８を含んでよい。
【０１７７】
一実施形態において、そのような各処理マトリックス２００２は、そのようなあらゆる情報を使用して、実行のために、Ｘ個の異なるＳＳＦ２  １９０６モジュールの複数の命令のうちのどれが、Ｙ個の実行ポート１８３２Ｎのうちの関連付けられた１つにルーティングされるかを決定してよい。
【０１７８】
図２０は、さらに、所与の処理マトリックス２００２の例示的実施形態を示している。示された処理マトリックスは、複数の処理マトリックス２００２の何れかのために実装されてよく、ポートＮの処理マトリックスと称されてよい。上述したように、処理マトリックス２００２は、Ｘ個の異なるＳＳＦ２  １９０６モジュールの各々から、ＲＰＯ２００８、有効性ビット１９２０、およびＰＢ［ポートＮ］２００６を受信してよい。さらに、処理マトリックス２００２は複数の実行待ち命令１８３４にアクセスしてよい。一実施形態において、処理マトリックス２００２は、複数の実行待ち命令１８３４から選択された、関連付けられた実行ポート１８３２上で実行される命令を出力してよい。別の実施形態において、処理マトリックス２００２は関連付けられた実行ポート１８３２に適用される命令を選択するために使用される、複数の実行待ち命令１８３４のインデックスを出力してよい。
【０１７９】
処理マトリックス２００２は、説明された複数のオペレーションを実行すべく、任意の適した数または種類の要素を含んでよい。一実施形態において、複数のオペレーションは単一クロックサイクル内で実行されてよい。特定の複数のステージおよび複数のモジュールが説明されるが、様々なコンポーネントの機能は、適切に他のコンポーネントの機能と組み合わせられてよい。
【０１８０】
一実施形態において、処理マトリックス２００２は、ＲＰＯ値またはＰＯ値に基づいて、Ｘ個の異なる命令の優先順位付けを実行する論理マトリックスモジュール２０１０を含んでよい。別の実施形態において、ＲＰＯ値またはＰＯ値に基づいたＸ個の異なる命令の優先順位付けは、既に実行されていてよい。そのような優先順位付けは、任意の適したメカニズムによって前のクロックサイクルで行われてよい。例えば、論理マトリックスモジュール２０１０によるものであるそのような優先順位付けは、ＳＳＦ１  １９０４のオペレーションに対応するクロックサイクルにおいて実行されてよい。論理マトリックスモジュール２０１０は、複数の実行待ち命令の全ＲＰＯ値のマトリックス比較を実行して、どの複数の命令がそのような最も古い、または最小の値を有するかを決定してよい。論理マトリックスモジュール２０１０の出力は、サイズがＸ×Ｘのマトリックスを含んでよく、マトリックスＬと称されてよい。マトリックス要素（ｉ，ｊ）の「１」値は、ＲＰＯ決定を考慮して、命令ｉが命令ｊより高い優先度を与えられるべきであることを示してよい。論理マトリックスモジュール２０１０のオペレーションの追加の説明が、以下で図２１と併せて成される。
【０１８１】
様々な実施形態において、処理マトリックス２００２はＭＭ１  ２０１２、ＭＭ２  ２０１４、およびＭＭ３  ２０１６という一連のマトリックスマニピュレータを含んでよい。それぞれのウェイにおいて格納されたＸ個の異なる実行待ち命令の優先順位付けされたＲＰＯ値を表すマトリックスＬは、ＭＭ１  ２０１２と称される第１のマトリックスマニピュレータに入力されてよい。一実施形態において、ＭＭ１  ２０１２はまた、入力として有効性ビット１９２０と、ＰＢベクトル２００６からのポートバインディング情報とを取り込んでよい。別の実施形態において、ＭＭ１  ２０１２は、マトリックスＬの各要素について２つの値を決定してよい。第１のそのような値は、論理マトリックスＬの優先度値の、有効性ビット１９２０の準備状況情報との、およびＰＢベクトル２００６のポートバインディング情報との論理結合であってよい。従って、有効性およびＰＢがＲＰＯ優先順位付けと共に考慮されてよい。位置（ｉ，ｊ）の第１のビットの「１」値は、元のＲＰＯ決定に加え有効性およびポートバインディングを考慮して、命令ｉが命令ｊより高い優先度を与えられるべきであることを示してよい。第２のそのような値は、有効性情報およびポートバインディング情報の論理結合の逆であってよい。このことは、所与の実行ポートにポートバインディングされるはずであるそれらの有効命令のみの（「０」による）マスキングをもたらしてよい。このことは、所与の実行ポートについての、他の複数の命令より優位な複数の命令の優先順位付け情報を提供してよい。これら２つの値は後に組み合わせられて「ワンホット」ベクトルを生成し、もしあれば、どの実行ポートが所与の実行待ち命令のために使用されるべきかを特定してよい。ＭＭ１  ２０１２の出力は、Ｌ'と称されてよい。Ｌ'のサイズは、Ｘ×Ｘであってよく、ここで、各要素は、「Ａ」および「Ｂ」と称される２ビットを含む。
【０１８２】
ＭＭ２  ２０１４は、それの入力としてＬ'を受け入れてよい。一実施形態において、ＭＭ２  ２０１４は、ＭＭ１  ２０１２によって実行された分析を組み合わせてよい。Ｌの所与の優先順位付け要素について、ＭＭ２  ２０１２は、Ｌの要素の有効性、ＰＢバインディング、および正の優先順位付け値を要求することで優先順位付けを訂正し、その結果をビットＡとして格納していてよい。さらに、Ｌの所与の優先順位付け要素について、ＭＭ２  ２０１２は、（Ｌの要素の正の優先順位付け値とは独立した）有効性およびＰＢバインディングを要求することで優先順位付けを訂正し、その結果をＢとして格納していてよい。ＭＭ２  ２０１４は、ビットＡまたはビットＢの下に優先順位付けが存在するかどうかを決定し、従って、論理和演算を組み合わせに適用してよい。ＭＭ２  ２０１４は、その結果をＬ''として出力してよい。Ｌ''は、複数の１ビット要素を含み、Ｘ×Ｘのサイズを有してよい。
【０１８３】
一実施形態において、ＭＭ２  ２０１４の複数のオペレーションは、全て「１」であるかまたは「１」を含まない、Ｘ個の実行待ち命令のうちの関連付けられた１つを表す、Ｌ''の所与の行をもたらしてよい。別の実施形態において、Ｌ''の全て「１」である行は、その行に関連付けられた実行待ち命令が、処理マトリックス２００２に関連付けられた実行ポート１８３２で使用されるべきであることを意味している。さらに別の実施形態において、Ｌ''の全て「０」である行は、その行に関連付けられた実行待ち命令が、処理マトリックス２００２に関連付けられた実行ポート１８３２で使用されるべきでないことを意味している。またさらに別の実施形態では、ただ１つの実行待ち命令が所与の実行ポート１８３２にルーティングされてよいとき、Ｌ''の複数の行のうちのただ１つの行が全て「１」を有してよい。
【０１８４】
ＭＭ３  ２０１６は、それの入力としてＬ''を受け入れてよい。一実施形態において、ＭＭ２２０１６は、Ｌ''内の行として表された所与のウェイまたは実行待ち命令について、そのようなウェイまたは実行待ち命令が、Ｙ個の実行ポートの何れかにとっての最良のマッチングであるかどうかを決定してよい。論理マトリックスモジュール２０１０による、および、次にＭＭ１  ２０１２とＭＭ２  ２０１４とによって変更された、有効性およびＰＢを考慮する所与の行内の優先度についてのビットセットは、的確な実行待ち命令のインデックスを特定して所与の実行ポートＮに割り当ててよい。ＭＭ３  ２０１６の出力は、「ワンホット」ベクトルとして実装されたディスパッチベクトルＤであってよい。ディスパッチベクトル内の「１」だけが、所与の実行ポートＮにルーティングされるべき命令のインデックスに対応していてよい。一実施形態において、ディスパッチベクトルＤは、命令セレクタ２０１８に出力されてよい。命令セレクタ２０１８は、インデックスを複数の実行待ち命令１８２４と突き合わせ、選択された命令を実行ポート１８３２に出力してよい。別の実施形態において、ディスパッチベクトルＤは、その命令を実行ポート１８３２に適切にルーティングし得るプロセッサ１８０４の別の部分に出力されてよい。
【０１８５】
図２１は、本開示の複数の実施形態による、論理マトリックス２１００の例示的実施形態、および論理マトリックスモジュール２０１０の例示的オペレーションの図である。論理マトリックス２１００はマトリックスＬを含んでよく、それは論理マトリックスモジュール２０１０から出力される。一実施形態において、論理マトリックス２１００は、処理マトリックス２００２の他の複数のオペレーションと比べて前のクロックサイクル内で生成されてよい。別の実施形態において、論理マトリックス２１００は、処理マトリックス２００２の他の複数のオペレーションと同じクロックサイクル内で生成されてよい。様々な実施形態では、図２１内に示された複数のオペレーションは、単一クロックサイクル内で実行されてよい。
【０１８６】
複数の実行待ち命令１８３４の各々のＰＯまたはＲＰＯ１９０６値のアレイが与えられると、論理マトリックスモジュール２０１０は、複数の実行待ち命令１８３４のうちのどれが最小のＰＯ値またはＲＰＯ値を有しているかを決定すべく分析を実行してよい。さらに、論理マトリックスモジュール２０１０は、複数の実行待ち命令１８３４のうちのどれが最小のＰＯ値またはＲＰＯ値を有すると決定されたかを迅速に表示すべく、複数のインジケータで論理マトリックス２１００をポピュレートしてよい。論理マトリックス２１００の各行は、対応する実行待ち命令１８３４を指してよく、処理中の「ウェイ」と称されてよい。一実施形態において、論理マトリックスモジュール２０１０は、ウェイの、増分のより高い優先度を示すべく「１」で、および、ウェイの、増分のより低い優先度を示すべく「０」で、結果として得られる論理マトリックス２１００の各行をポピュレートしてよい。従って、論理マトリックス２１００の全て「１」であるウェイは、他の全てのウェイと比較して最高の優先度を有してよい。論理マトリックス２１００の全て「０」のウェイは、最低の優先度を有してよい。各ウェイは、その行内の「１」の数によって定義された相対的優先度を有してよい。
【０１８７】
さらに、論理マトリックス２１００内の任意の所与の位置（ｉ，ｊ）の「１」は、ウェイｉがウェイｊより高い優先度を与えられるべきであることを示してよい。一実施形態において、この関連付けは、図２３と関連してさらに詳細に説明されるタイブレーキング（ｔｉｅ−ｂｒｅａｋｉｎｇ）に使用されてよい。
【０１８８】
論理マトリックスモジュール２０１０は、そのような複数の結果を達成すべく、任意の適した複数のオペレーションを実行してよい。一実施形態において、論理マトリックスモジュール２０１０は、各関連付けられたウェイのＲＰＯ値をそれぞれの行および列にルーティングしてよく、Ｘ×Ｘのマトリックスをもたらす。従って、各ウェイのマトリックス比較は、他の全てのウェイに対して行われてよい。具体的には、各ウェイのＲＰＯは、他の各ウェイのＲＰＯと比較されてよい。行のＲＰＯが列のＲＰＯより低いまたはそれに等しいＲＰＯを有する場合、関連付けられた要素は「１」とセットされる。そうでなければ、当該要素は「０」とセットされてよい。
【０１８９】
図２１の例では、ウェイ０は２０のＲＰＯを含んでよく、ウェイ１は１５のＲＰＯを含んでよく、ウェイ２は２のＲＰＯを含んでよく、ウェイ３は３０のＲＰＯを含んでよく、他の値は示され得ず、ウェイＸは４のＲＰＯを含んでよい。マトリックス比較は、全て「１」を有するウェイ２をもたらす。なぜなら、ウェイ２は最小のＲＰＯを含むからである。それぞれの行の「１」の数に基づいて、当該複数のウェイの優先順位は、ウェイ２、ウェイＸ、ウェイ１、ウェイ０、およびウェイ３であってよい。論理マトリックス２１００はＬとして出力されてよい。各処理モジュール２００２に対して１つの論理マトリックス２１００が出力されてよい。
【０１９０】
しかしながら、上述したように、これらの優先順位付けられた値は、有効性またはポートバインディングを考慮するには不十分である場合もある。実行ポート１８３２の数が２個であり、ＩＳＵ１８０２が単にこれらのウェイの上位２つを選択した場合、ウェイ２及びウェイＸが複数の実行ポート１８３２に割り当てるべく選択されるだろう。しかしながら、ウェイ２が、そのストランドがキャンセルされたため実行不可能である場合、ＩＳＵ１８０２はウェイ２の代わりにウェイ１を別途スケジューリングし得るので、ＩＳＵ１８０２はスループットを低減させるだろう。さらに、ウェイ０は、ポート０として列挙された実行ポート１８３２上での実行に結び付けられている重要な機能を表し得る。優先順位付け分析をすることなく、ウェイ２は、ウェイＸの代わりにそのようなポート上での実行のために割り当てられ得る。従って、ＩＳＵ１８０２は追加の分析を含む。
【０１９１】
図２２は、本開示の複数の実施形態に係る、変更された論理マトリックスＬ'２２００およびＭＭ１  ２０１２の例示的オペレーションを示している。図２２の複数のオペレーションは、Ｙ個の実行ポート１８３２の各々について実行されてよい。図２２は、所与の実行ポートＮのためのこれらを示している。
【０１９２】
ＭＭ１  ２０１２は、その入力として論理マトリックスＬ２１００、およびＸ個の実行待ち命令１８３４の各々に関連付けられた複数のウェイを受け取ってよく、各ウェイは、それぞれの実行待ち命令のＰＢベクトル２００６および有効性ビット１９２０の情報を含んでよい。ＭＭ１  ２０１２は、マトリックス分析を使用して、論理マトリックスＬ２１００の各要素から、２ビットの情報を決定してよい。「Ａ」および「Ｂ」と称される当該２ビットは、結果として得られる変更された論理マトリックスＬ''２２００の各要素においてペアとして格納されてよい。
【０１９３】
出力の第１のビット「Ａ」として、ＭＭ１  ２０１２は、関連付けられたウェイまたは保留中の実行が有効かどうかを有効性ビット１９２０に従って決定し、関連付けられたウェイが、ＭＭ１  ２０１２によって表されるポートＮに加わるべきかどうかを決定してよい。そうであれば、ビット「Ａ」として、行の全ての要素は、論理マトリックスＬ２１００の対応する値を、そのような値が「１」であるか、または「０」であるかに関わらず複製する。このことは、関連付けられた命令が実行ポートＮによる選択に加わっており、論理マトリックスＬ２１００内で決定されたそれの優先度がそのような選択において考慮されてよいことを示している。関連付けられたウェイ若しくは保留中の実行が有効でない場合、または、関連付けられたウェイ若しくは保留中の実行がポートＮ以外の別のポートに加わるべきである場合、ビット「Ａ」について、行の全ての要素は「０」になる。このことは、関連付けられた命令が実行ポートＮによる選択に加わらないことを示している。
【０１９４】
一実施形態において、変更されたマトリックスＬ'２２００の各要素のビット「Ａ」は、論理積演算を、論理マトリックス２１００（Ｌｉ，ｊ）の関連付けられた要素と、ウェイのＰＢベクトル２００６のポートＮ値の情報（ウェイｉＰＢ［Ｎ］）と、関連付けられたウェイの有効性ビット１９２０（ウェイｉＶ）とに適用することで決定されてよい。
【０１９５】
様々な実施形態では、論理マトリックスＬ２１００は図２２の複数のオペレーションのサイクルより前のサイクルにおいて作成されてよい。従って、複数のＲＰＯ比較を表すマトリックス内の複数のビット値は現在のサイクル内で利用可能なデータへの可視性なしに作成されてよい。さらに、図２１に示されたような複数のビット値は、有効性、またはポートに加わるかを考慮することなく作成されたものである。
【０１９６】
一実施形態において、出力の第２のビット「Ｂ」として、ＭＭ１  ２０１２は、一命令を別の命令より優先させるための情報を決定してよい。さらなる実施形態において、そのような優先順位付け情報は、複数の命令の間のタイブレーキングのために使用されてよい。そのようなタイ（ｔｉｅ）は、「Ａ」において表されるような複数のビットに対する変更に起因することがある。さらなる実施形態において、ＭＭ１  ２０１２は、各列に１つの値を決定する。この場合、各列は、Ｘ個の保留中の実行１８３４のそれぞれのウェイまたは保留中の実行に関連付けられている。従って、ウェイ０は、全ての行の「Ｂ」の列０の値を作成し、ウェイ１は、全ての行の「Ｂ」の列１の値を作成する、といった具合である。変更された論理マトリックスＬ'２２００の各ビット「Ｂ」は、その命令がディスパッチロジックに加わるかどうかを示してよい。
【０１９７】
さらに、一実施形態において、各ビット「Ｂ」は、優先度のコンフリクトを解決すべく使用されてよい。そのような優先度のコンフリクトは、複数の値のビット「Ａ」での変更に起因することがある。ビット「Ａ」の複数の変更は、「０」にリセットされている論理マトリックスＬ２１００のいくつかの「１」値をもたらし得る。変更された論理マトリックスＬ'２２００内の所与の行の複数の値は、複数の「Ａ」ビットによる、以前の対応する論理マトリックスＬ２１００の行より少ない「１」を有してよい。さらに、変更された論理マトリックスＬ'２２００内の所与の行の複数の値は、ここで、同じ実行ポート１８３２について、変更された論理マトリックスＬ'２２００内の別の行と同数の「１」を有することがある。これらのタイを解決すべく、図２３と併せて説明されるように、論理和演算において「Ｂ」は「Ａ」と組み合わせられてよい。
【０１９８】
一実施形態において、各ビット「Ｂ」は、ウェイのＰＢベクトルのポートＮ値２００６の情報（ウェイｊＰＢ［Ｎ］）と、関連付けられたウェイの有効性ビット１９２０（ウェイｊＶ）との論理積演算を実行することで作成されてよい。その結果は、ネゲートされ、ビット「Ｂ」として格納されてよい。関連付けられたウェイ内の命令が、有効であり、かつＭＭ２  ２０１４の実行ポートＮに結び付けられている場合、関連付けられた列内の各ビット「Ｂ」は「０」にセットされる。従って、ビット「Ｂ」内の「０」は、関連付けられたウェイが、ポートＮのための命令選択に加わっていることを示してよい。そうでなければ、ビット「Ｂ」は「１」にセットされ、何にも加わらないことを示してよい。
【０１９９】
図２３は、本開示の複数の実施形態に係る、ＭＭ２  ２０１４の別の変更された論理マトリックスＬ''２３００および例示的オペレーションを示している。図２３の複数のオペレーションは、Ｙ個の実行ポート１８３２の各々について実行されてよい。図２３は、所与の実行ポートＮのためのこれらを示している。ＭＭ２  ２０１４は、タイブレーキング、およびＭＭ２  ２０１２によってコンパイルされたデータの他の複数の解釈を実行してよい。
【０２００】
ＭＭ２  ２０１４は、その入力として変更された論理マトリックスＬ'２２００を受け取ってよい。ＭＭ２  ２０１４は、マトリックス分析を使用して、変更された論理マトリックスＬ'２２００の各要素の２ビットの情報から１ビットの情報を決定してよい。結果として得られた、変更された論理マトリックスＬ''２３００内の情報の複数のビットは、所与の実行ポートＮに適用するための、マトリックス内の所与の行に関連付けられた複数の命令の優先度を示してよい。一実施形態において、もしあれば、論理マトリックスＬ''２３００の全て「１」を含む行は、複数の実行待ち命令１８３４のうちの、実行ポートＮ１８３４にルーティングされるべき命令に対応してよい。
【０２０１】
上述したように、変更された論理マトリックスＬ'２２００の位置（ｉ，ｊ）の各要素において、ビット「Ａ」は、ＲＰＯ、有効性、およびポートバインディングを考慮し、実行ポートＮについて命令ｉが命令ｊより優先されることを示す。例えば、位置（ｉ，ｊ）の所与のビット「Ａ」の「１」値は、ウェイｉがウェイｊより高い優先度を与えられるべきであることを示してよい。「０」値は、当該２つのウェイが同じ優先度を与えられるべきであることを意味している。さらに、上述したように、変更された論理マトリックスＬ'２２００の位置（ｉ，ｊ）の各要素において、ビット「Ｂ」は、当該命令またはウェイが、実行ポートＮのための命令選択に加わっていることを（「０」によって）示す。さらに、ビット「Ｂ」は、２つの命令のそれぞれの行内で「１」の数に関して優先付けられずタイである当該２つの命令の間の優先度の決定の助けとなり得る。
【０２０２】
一実施形態において、ＭＭ２  ２０１４は、変更されたマトリックスＬ'２２００の各要素に論理和演算を適用してよい。その結果は、サイズがＸ×Ｘの変更された論理マトリックスＬ''２３００を含んでよい。この場合、変更された論理マトリックスＬ''２３００の各要素（ｉ，ｊ）は、Ｌ'ｉ，ｊとＬ'ｊとのＯＲに等しい。
【０２０３】
ＭＭ２  ２０１４によって実行された優先度分析が、真理値表２３０２に示されてよい。変更された論理マトリックスＬ'２１００の複数の値を所与として、特定の複数の結果が示されている。例えば、２３０４および２３０８において、Ａｉ，ｊが０または１であり、Ｂｊが０である場合、Ｂｊが０であるという事実は、ウェイｊが実行ポートのための命令選択に加わるべきであることを示している。Ａｉ，ｊ内のどのような値も最終的な考慮のために伝搬されるべきである。従って、一実施形態において、所与の実行待ち命令１８３４が実行ポート１８３２に結び付けられており、実行待ち命令１８３４がアクティブなストランド１８２４からのものである場合、他の複数の命令に対する当該命令の優先度が考慮される。
【０２０４】
別の例では、２３０６および２３１０において、Ａｉ，ｊが０または１であり、Ｂｊが１である場合、Ｂｊが１であるという事実は、ウェイｊが実行ポートのための命令選択に加わらないことを示す。Ａｉ，ｊの値に関わらず、ウェイｊはウェイｉより低い優先度が与えられるべきである。従って、ウェイｉは「１」で伝搬されるべきである。ウェイｉの行内の「１」値は、その優先度を上げる。従って、一実施形態において、所与の実行待ち命令１８３４が実行ポート１８３２に結び付けられていない場合、または、所与の実行待ち命令１８３４がインアクティブなストランド１８２４からのものである場合、他の複数の命令に対する当該命令の優先度は下げられるべきである。
【０２０５】
結果として得られる変更されたマトリックスＬ''２３００は、全て「１」である１つの行を、その他の全ての行は全て「０」の状態で含んでよい。従って、これは、実行ポートＮ１８３２にルーティングされる、複数の実行待ち命令１８３４のうちのただ１つの命令に対応する行を特定してよい。
【０２０６】
図２４は、本開示の複数の実施形態に係るＭＭ３  ２０１６の例示的オペレーションを示している。一実施形態において、図２４はまた、指定された命令を実行ポート１８３２に出力する命令セレクタ２０１８の例示的オペレーションを示してよい。図２４の複数のオペレーションは、Ｙ個の実行ポート１８３２の各々について実行されてよい。図２４は、所与の実行ポートＮのためのこれらを示している。ＭＭ３  ２０１６および命令セレクタ２０１８は、複数の実行待ち命令１８３４から最も適切な命令を選択して実行ポート１８３２に出力してよい。
【０２０７】
ＭＭ３  ２０１６は、その入力として、変更された論理マトリックスＬ''２３００を受け取ってよい。変更された論理マトリックスＬ''２３００の各行は、どの行が全て「１」を含むかを決定すべく評価されてよい。一実施形態において、そのような評価は、論理積演算を各行の全要素に適用することで実行されてよい。その結果は、ベクトル、または１×Ｙのマトリックスを含んでよい。別の実施形態において、その結果は、選択され、実行ポート１８３２にルーティングされるべき実行待ち命令１８３４のインデックスに対応する位置において１つの「１」を含んでよい。そのような位置はＭと称されてよい。ディスパッチベクトルはＤと指定されてよく、当該ベクトルは、１つの「１」を、要素の残りのものが「０」である状態で含むので、「ワンホット」値を含んでよい。
【０２０８】
ＭＭ３  ２０１６は、指定された命令を選択し、それを実行ポート１８３２にルーティングすべく、ディスパッチベクトルＤをプロセッサ１８０４の任意の適した要素に渡してよい。一実施形態において、ＭＭ３  ２０１６は、命令セレクタ２０１８にディスパッチベクトルＤを渡してよい。命令セレクタ２０１８は、マルチプレクサまたは他の即時演算（ｉｎｓｔａｎｔ  ｏｐｅｒａｔｉｏｎ）などの任意の適したメカニズムを利用してディスパッチベクトルＤをパースし、位置Ｍを特定し、次に、複数の実行待ち命令１８３４から要素Ｍを選択してよい。結果として得られた命令は、指定された実行ポート１８３２にルーティングされてよい。
【０２０９】
複数の処理マトリックス２００２の実行は、並列に、一実行サイクル内で実行されてよい。それにより、各サイクルで複数の実行ポート１８３２の各々に１つの命令がロードされる。
【０２１０】
図２５は、本開示の複数の実施形態に係る、複数の命令をディスパッチするための方法２５００の例示的実施形態を示している。一実施形態において、方法２５００はマルチストランド・アウトオブオーダプロセッサ上で実行されてよい。方法２５００は、任意の適したポイントから開始してよく、任意の適した順序で実行してよい。一実施形態において、方法２５００は２５０５から開始してよい。
【０２１１】
２５０５において、プロセッサ上で実行されるべき複数の命令が、例えば、フロントエンドによってフェッチされてよい。複数の命令は、プロセッサの様々な実行ユニットのＹ個の異なる実行ポートによって実行されるべきＸ個の異なるストランド内の複数の命令を含んでよい。２５１０において、各ストランドのヘッドにある命令が特定されてよい。従って、Ｙ個の異なる実行ポート上で実行されるべきＸ個の異なる実行待ち命令が存在してよい。複数の実行待ち命令は、フロップなどの第１のセットのハードウェア構造に格納されてよい。２５１０およびその後の複数の段階が、ＩＳＵによって実行されてよい。
【０２１２】
一実施形態において、各命令について、それらが、準備完了であるオペランドを含むかどうかが２５１５において決定されてよい。そのような決定は、例えば、命令のためのデータのデスティネーションおよび全ソースが利用可能であるかどうかを決定することで成されてよい。別の実施形態において、命令の発信元であるストランドがアクティブであるかどうかが決定されてよい。そのような決定は、例えば、当該スレッドがキャンセルまたはキルされたかどうかを決定することで成されてよい。複数のオペランドが準備完了であり、当該ストランドが有効である場合、方法２５００は２５２０に進んでよい。複数のオペランドが準備完了ではない、または当該ストランドが有効でない場合、方法２５００は２５２５に進んでよい。
【０２１３】
２５２０において、当該命令が有効であることが決定されてよい。一実施形態において、そのような有効性についての情報は、命令と共に格納されてよい。そのような情報は格納されてよいが、例えば、有効性ビットは格納されなくてよい。方法２５００は２５３０に進んでよい。
【０２１４】
２５２５において、当該命令が無効であることが決定されてよい。一実施形態において、そのような無効性についての情報が命令と共に格納されてよい。そのような情報は格納されてよいが、例えば、有効性ビットは格納されなくてよい。方法２５００は、２５３０に進んでよい。
【０２１５】
２５３０において、一実施形態において、ＲＰＯ優先度マトリックスＬが決定されてよい。当該マトリックスは、各命令を別の命令と比較する複数のマトリックス比較を実行することで作成されてよい。例えば、マトリックス内の各位置（ｉ，ｊ）において、命令ｉのＲＰＯが、（より高い優先度を示す）命令ｊのＲＰＯより低いまたはそれに等しい場合、（ｉ，ｊ）において当該マトリックスは「１」にセットされる。
【０２１６】
以下の２５４０から２５６５の複数の要素は、各実行ポートＮについて実行されてよい。さらに、各ポートの実行は並列に行われてよい。加えて、これらは全て単一クロックサイクル内で実行されてよい。所与の実行ポートＮに適用される場合について、以下に説明される。さらに、複数の命令が、フロップなどの第２のセットのハードウェア構造に転送されてよい。
【０２１７】
２５４０において、各命令からの実行ポートＮのポートバインディング情報、および、各命令の有効性が決定されてよい。そのような情報は入力として受信されてよい。
【０２１８】
２５４５において、一実施形態において、優先度マトリックスＬ内の複数の要素のＲＰＯ優先度は、バインディング情報および有効性に基づいて下げられてよい。例えば、命令が、ＲＰＯによりマトリックスＬ内のそれの複数の要素において優先権を与えられていたが、複数の命令は複数のキルされたストランドからのものである場合、複数の命令が準備完了ではない場合、または、複数の命令が現在考慮されている実行ポートＮに結び付けられていない場合は、前に確立された優先度は削除されてよい、または下げられてよい。複数の命令が有効な複数のストランドからのものである場合、複数の命令が準備完了である場合、および、複数の命令が現在考慮されている実行ポートＮに結び付けられている場合、前のＲＰＯ優先度は維持されてよい。これらのことは、当該複数の要因に論理積を適用し、その結果を変更された論理マトリックスＬ'内に第１のビットとして格納することにより実行されてよい。
【０２１９】
２５５０において、各命令に対する他の複数の命令の相対的優先度が決定されてよい。そのような決定は、バインディング情報および有効性情報を使用して成されてよい。バインディング情報は、現在の実行ポートＮに固有のものであってよいので、実行ポートＮに結び付けられた命令は、現在の実行ポートＮに結び付けられていない別の実行より優位の優先順位付け情報を受信してよい。さらに、有効命令は無効命令よりも優先されてよい。
【０２２０】
２５５５において、複数の命令の中のタイまたはアンビギュイティが、２５４５の調整されたＲＰＯ優先度に適用された２５５０の相対的優先度を使用して解決されてよい。有効ではない、または、対象のポートに結び付けられていない複数の命令は、全て「０」を含むようにマスキングされてよい。さらに、変更された論理マトリックス内の各行は、全て「０」または全て「１」の何れかを含んでよい。
【０２２１】
２５６０において、変更された論理マトリックス内の各行（命令に対応している各行）の全ての要素に論理積を適用することで、「ワンホット」ベクトルが決定されてよい。当該ベクトルは、所与の実行ポートＮに出力されるべき命令のインデックスにおいて「１」を含んでよい。２５６５において、命令がロードされてよい。
【０２２２】
２５７０において、当該命令は実行されてよい。２５７５において、繰り返すかどうか決定されてよい。繰り返すならば、方法２５００は２５０５に進んでよい。繰り返さないならば、方法２５００は終了してよい。
【０２２３】
方法２５００は、任意の適した基準によって開始されてよい。 さらに、方法２５００は特定の複数の要素のオペレーションを説明するが、方法２５００は任意の適した組み合わせまたはタイプの要素によって実行されてよい。例えば、方法２５００は、図１−図２４に示された複数の要素、または、方法２５００を実施すべく動作可能な任意の他のシステムによって実装されてよい。故に、方法２５００の好ましい初期化ポイント、および方法２５００を備える複数の要素の順序は、選択された実装に依存していてよい。いくつかの実施形態において、いくつかの要素は、任意で省略され、再編成され、繰り返され、または組み合わせられてよい。例えば、要素２５４０−２５６５の複数の分岐は、プロセッサの各実行ポートについて並列に実行されてよい。別の例では、要素２５１５−２５２５は、各実行待ち命令について並列に実行されてよい。
【０２２４】
本明細書において開示された複数のメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような複数の実装手法の組み合わせにおいて実装されてよい。本開示の複数の実施形態は、少なくとも１つのプロセッサ、（揮発性および不揮発性のメモリおよび／または複数のストレージ要素を含む）ストレージシステム、少なくとも１つの入力デバイス、および、少なくとも１つの出力デバイスを備える複数のプログラマブルシステム上で実行する複数のコンピュータプログラムまたはプログラムコードとして実装されてよい。
【０２２５】
プログラムコードは、本明細書において説明された複数の機能を実行し、出力情報を生成すべく、複数の入力命令に適用されてよい。出力情報は、既知の方式で１または複数の出力デバイスに適用されてよい。本願の複数の目的のために、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含んでよい。
【０２２６】
プログラムコードは、処理システムと通信すべく、高水準手続き型言語またはオブジェクト指向型プログラミング言語で実装されてよい。プログラムコードはまた、望むならば、アセンブリ、または機械言語で実装されてよい。実際、本明細書において説明された複数のメカニズムは、いかなるプログラミング言語にも範囲を限定されない。何れの場合でも、言語は、コンパイルされた、または解釈された言語であってよい。
【０２２７】
少なくとも１つの実施形態の１または複数の態様は、機械によって読み出された場合、機械にロジックを組み立てさせて本明細書において説明された複数の技術を実行させる、プロセッサ内の様々なロジックを表わす機械可読媒体上に格納された代表的な複数の命令によって実装されてよい。「ＩＰコア」として知られるそのような表現は、有形の機械可読媒体上に格納され、実際にロジックまたはプロセッサを作成する複数の製造機械にロードすべく様々な顧客または製造設備に供給されてよい。そのような複数の機械可読ストレージメディアは上述されたようなものを含んでよい。
【０２２８】
従って、本開示の複数の実施形態は、また、本明細書において説明された複数の構造、回路、装置、プロセッサ、および／またはシステム機能を定義するハードウェア記述言語（ＨＤＬ）などの複数の命令を含む、または、設計データを含む非一時的な有形の機械可読媒体を含んでよい。そのような複数の実施形態は、複数のプログラム製品とも称されてよい。
【０２２９】
いくつかの場合において、命令コンバータは、ソース命令セットからターゲット命令セットに命令を変換すべく使用されてよい。例えば、命令コンバータは、命令を、コアによって処理されるべき１または複数の他の命令に（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して）トランスレート、モーフィング、エミュレート、または変換してよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせにおいて実装されてよい。命令コンバータは、プロセッサ上にあってよく、プロセッサ外にあってよく、または、一部がプロセッサ上にあり一部がプロセッサ外にあってよい。
【０２３０】
従って、少なくとも１つの実施形態に係る１または複数の命令を実行するための複数の技術が開示される。特定の複数の例示的実施形態が添付の複数の図面において説明され、示されてきたが、そのような複数の実施形態は他の複数の実施形態の単に例示であって、それらに対する限定ではないこと、および、そのような複数の実施形態は、示され説明された具体的な複数の構造および構成に限定されるものではないことが理解されよう。なぜなら、当業者ならばこの開示を研究することで様々な他の変形形態に想到し得るからである。成長が速く、さらなる進歩が容易に予見されないこのような技術分野においては、開示された複数の実施形態は、技術的進歩を可能にすることにより容易にされるように、本開示の複数の原理または添付の特許請求の範囲から逸脱することなく構成および詳細部分において容易に変更可能であろう。
【図１Ａ】
2017513094.tif 000003
【図１Ｂ】
2017513094.tif 000004
【図１Ｃ】
2017513094.tif 000005
【図２】
2017513094.tif 000006
【図３Ａ】
2017513094.tif 000007
【図３Ｂ】
2017513094.tif 000008
【図３Ｃ】
2017513094.tif 000009
【図３Ｄ】
2017513094.tif 000010
【図３Ｅ】
2017513094.tif 000011
【図３Ｆ】
2017513094.tif 000012
【図４Ａ】
2017513094.tif 000013
【図４Ｂ】
2017513094.tif 000014
【図５Ａ】
2017513094.tif 000015
【図５Ｂ】
2017513094.tif 000016
【図６】
2017513094.tif 000017
【図７】
2017513094.tif 000018
【図８】
2017513094.tif 000019
【図９】
2017513094.tif 000020
【図１０】
2017513094.tif 000021
【図１１】
2017513094.tif 000022
【図１２】
2017513094.tif 000023
【図１３】
2017513094.tif 000024
【図１４】
2017513094.tif 000025
【図１５】
2017513094.tif 000026
【図１６】
2017513094.tif 000027
【図１７】
2017513094.tif 000028
【図１８】
2017513094.tif 000029
【図１９】
2017513094.tif 000030
【図２０】
2017513094.tif 000031
【図２１】
2017513094.tif 000032
【図２２】
2017513094.tif 000033
【図２３】
2017513094.tif 000034
【図２４】
2017513094.tif 000035
【図２５】
2017513094.tif 000036
【手続補正書】
【提出日】平成28年9月28日(2016.9.28)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
１または複数の実行ポート上にロードされるべき複数のストランドに分割された命令ストリームをフェッチする第１のロジックと、
複数の実行待ち命令を特定する第２のロジックであって、各実行待ち命令は前記複数のストランドのうちの１つのそれぞれのヘッドにある、第２のロジックと、
前記複数のストランドのどれがアクティブであるかを決定する第３のロジックと、
前記複数の実行待ち命令の各々のプログラム順を決定する第４のロジックと、
各実行待ち命令の前記プログラム順、および各ストランドがアクティブであるかどうかに基づいて、前記複数の実行待ち命令を前記複数の実行ポートにマッチングさせる第５のロジックと、
を備えるプロセッサ。
【請求項２】
前記複数の実行ポートのうちの１つへの前記複数の実行待ち命令のうちの１つのポートバインディングを決定する第６のロジックと、
各実行待ち命令の前記プログラム順と、各ストランドはアクティブであるかどうかと、前記ポートバインディングとに基づいて前記複数の実行待ち命令を前記複数の実行ポートにマッチングさせる第７のロジックと、
をさらに備える請求項１に記載のプロセッサ。
【請求項３】
前記複数の実行待ち命令を前記複数の実行ポートにマッチングさせる第５のロジックは、さらに、単一プロセッサクロックサイクル内で実行される、請求項１または２に記載のプロセッサ。
【請求項４】
前記複数の実行ポートのうちの所与の１つのためのワンホットベクトルを生成する第６のロジックであって、前記ベクトルは、前記所与の実行ポートに割り当てられるべき、前記複数の実行待ち命令のうちの１つの実行待ち命令のインデックスに１つの正ビットを含む、第６のロジックをさらに備える請求項１から３の何れか一項に記載のプロセッサ。
【請求項５】
第１のステージにおいて前記複数の実行待ち命令を格納する第６のロジックと、
前記複数の実行待ち命令の実行のために、必要なデータが利用可能かどうかを評価する第７のロジックと、
前記実行待ち命令の実行のために、必要なデータが利用可能であるという評価に基づいて前記複数の実行待ち命令を第２のステージに進める第８のロジックと、
前記第２のステージにおいて前記複数の実行待ち命令の各々についての有効性ビットを格納する第９のロジックであって、前記有効性ビットは、それぞれのストランドがアクティブかどうかと、それぞれの実行待ち命令の実行のために、必要なデータが利用可能であるかどうかとを示している、第９のロジックと、
をさらに備える請求項１から４の何れか一項に記載のプロセッサ。
【請求項６】
前記複数の実行待ち命令の各々の前記プログラム順と、その他の複数の実行待ち命令の前記プログラム順とのマトリックス比較を実行し、その結果を論理マトリックスに格納する第６のロジックであって、前記複数の実行待ち命令の各々は、前記論理マトリックスのそれぞれの行で表されており、前記複数の実行待ち命令の各々の優先度は、前記それぞれの行内の正ビットの数量で表されている、第６のロジックと、
前記論理マトリックス内の前記複数の実行待ち命令の各々について複数の前記正ビットを調整して、前記複数の実行ポートのうちの１つの実行ポートに関連付けられた変更された論理マトリックスを生成する第７のロジックであって、前記調整は、それぞれのストランドがアクティブであるかどうかに基づいている、第７のロジックと、
をさらに備える請求項１から５の何れか一項に記載のプロセッサ。
【請求項７】
前記変更された論理マトリックスとポートバインディング情報とに基づいてワンホットディスパッチベクトルを生成する第８のロジックをさらに備え、前記ベクトルは、前記変更された論理マトリックスに関連付けられた前記複数の実行ポートのうちの前記１つの実行ポートに割り当てられるべき、前記複数の実行待ち命令のうちの１つの実行待ち命令のインデックスにおいて１つの正ビットを含んでいる、請求項６に記載のプロセッサ。
【請求項８】
１または複数の実行ポート上にロードすべく、複数のストランドに分割された命令ストリームをフェッチする段階と、
複数の実行待ち命令を特定する段階であって、各実行待ち命令は、前記複数のストランドのうちの１つのそれぞれのヘッドにある、段階と、
前記複数のストランドのどれがアクティブであるかを決定する段階と、
前記複数の実行待ち命令の各々のプログラム順を決定する段階と、
各実行待ち命令の前記プログラム順と、各ストランドがアクティブであるかどうかとに基づいて前記複数の実行待ち命令を前記複数の実行ポートにマッチングさせる段階と、
を備える、プロセッサ内における方法。
【請求項９】
前記複数の実行ポートのうちの１つへの前記複数の実行待ち命令のうちの１つのポートバインディングを決定する段階と、
各実行待ち命令の前記プログラム順と、各ストランドがアクティブであるかどうかと、前記ポートバインディングとに基づいて、前記複数の実行待ち命令を前記複数の実行ポートにマッチングさせる段階と、
をさらに備える請求項８に記載の方法。
【請求項１０】
前記複数の実行待ち命令を前記複数の実行ポートにマッチングさせる段階は、単一プロセッサクロックサイクル内で実行される、請求項８または９に記載の方法。
【請求項１１】
前記複数の実行ポートのうちの所与の１つのためのワンホットベクトルを生成する段階をさらに備え、前記ベクトルは、前記所与の実行ポートに割り当てられるべき、前記複数の実行待ち命令のうちの１つの実行待ち命令のインデックスにおいて１つの正ビットを含んでいる、請求項８から１０の何れか一項に記載の方法。
【請求項１２】
第１のステージにおいて前記複数の実行待ち命令を格納する段階と、
前記複数の実行待ち命令の実行のために、必要なデータが利用可能かどうかを評価する段階と、
前記複数の実行待ち命令の実行のために、必要なデータが利用可能であるという評価に基づいて、前記複数の実行待ち命令を第２のステージに進める段階と、
前記第２のステージにおいて前記複数の実行待ち命令の各々についての有効性ビットを格納する段階と、
をさらに備え、
前記有効性ビットは、それぞれのストランドがアクティブかどうかと、それぞれの実行待ち命令の実行のために、必要なデータが利用可能であるかどうかとを示している、請求項８から１１の何れか一項に記載の方法。
【請求項１３】
前記複数の実行待ち命令の各々の前記プログラム順と、その他の複数の実行待ち命令の前記プログラム順とのマトリックス比較を実行して、その結果を論理マトリックスに格納する段階であって、前記複数の実行待ち命令の各々は前記論理マトリックスのそれぞれの行で表されており、前記複数の実行待ち命令の各々の優先度は前記それぞれの行内の正ビットの数量で表されている、段階と、
前記論理マトリックス内の前記複数の実行待ち命令の各々について複数の前記正ビットを調整して、前記複数の実行ポートのうちの１つに関連付けられた変更された論理マトリックスを生成する段階であって、前記調整は、それぞれのストランドがアクティブかどうかに基づいている、段階と、
をさらに備える請求項８から１２の何れか一項に記載の方法。
【請求項１４】
前記変更された論理マトリックスとポートバインディング情報とに基づいて、ワンホットディスパッチベクトルを生成する段階、
をさらに備え、
前記ベクトルは、前記変更された論理マトリックスに関連付けられた前記複数の実行ポートのうちの前記１つの実行ポートに割り当てられるべき、前記複数の実行待ち命令のうちの１つの実行待ち命令のインデックスにおいて１つの正ビットを含んでいる、請求項１３に記載の方法。
【請求項１５】
１または複数の実行ポート上にロードすべく、複数のストランドに分割された命令ストリームをフェッチする第１のロジックと、
複数の実行待ち命令を特定する第２のロジックであって、各実行待ち命令は、前記複数のストランドのうちの１つのそれぞれのヘッドにある、第２のロジックと、
前記複数のストランドのどれがアクティブであるかを決定する第３のロジックと、
前記複数の実行待ち命令の各々のプログラム順を決定する第４のロジックと、
各実行待ち命令の前記プログラム順と、各ストランドがアクティブかどうかとに基づいて、前記複数の実行待ち命令を前記複数の実行ポートにマッチングさせる第５のロジックと、
を備えるシステム。
【請求項１６】
前記複数の実行ポートのうちの１つへの前記複数の実行待ち命令のうちの１つのポートバインディングを決定する第６のロジックと、
各実行待ち命令の前記プログラム順と、各ストランドがアクティブかどうかと、前記ポートバインディングとに基づいて、前記複数の実行待ち命令を前記複数の実行ポートにマッチングさせる第７のロジックと、
をさらに備える請求項１５に記載のシステム。
【請求項１７】
前記複数の実行待ち命令を前記複数の実行ポートにマッチングさせる前記第５のロジックは、さらに、単一プロセッサクロックサイクル内で実行される、請求項１５または１６に記載のシステム。
【請求項１８】
前記複数の実行ポートのうちの所与の１つのためのワンホットベクトルを生成する第６のロジックをさらに備え、前記ベクトルは、前記所与の実行ポートに割り当てられるべき、前記複数の実行待ち命令のうちの１つの実行待ち命令のインデックスにおいて１つの正ビットを含んでいる、請求項１５から１７の何れか一項に記載のシステム。
【請求項１９】
第１のステージにおいて前記複数の実行待ち命令を格納する第６のロジックと、
前記複数の実行待ち命令の実行のために、必要なデータが利用可能かどうかを評価する第７のロジックと、
前記複数の実行待ち命令の実行のために、必要なデータが利用可能であるという評価に基づいて、前記複数の実行待ち命令を第２のステージに進める第８のロジックと、
前記第２のステージにおいて前記複数の実行待ち命令の各々についての有効性ビットを格納する第９のロジックと、
をさらに備え、
前記有効性ビットは、それぞれのストランドがアクティブかどうかと、それぞれの実行待ち命令の実行のために、必要なデータが利用可能かどうかとを示している、請求項１５から１８の何れか一項に記載のシステム。
【請求項２０】
前記複数の実行待ち命令の各々の前記プログラム順と、その他の複数の実行待ち命令の前記プログラム順とのマトリックス比較を実行し、その結果を論理マトリックスに格納する第６のロジックであって、前記複数の実行待ち命令の各々は、前記論理マトリックスのそれぞれの行で表されており、前記複数の実行待ち命令の各々の優先度は、前記それぞれの行内の正ビットの数量で表されている、第６のロジックと、
前記論理マトリックス内の前記複数の実行待ち命令の各々について複数の前記正ビットを調整して、前記複数の実行ポートのうちの１つに関連付けられた変更された論理マトリックスを生成する第７のロジックであって、前記調整は、それぞれのストランドがアクティブかどうかに基づいている、第７のロジックと、
をさらに備える請求項１５から１９の何れか一項に記載のシステム。
【請求項２１】
前記変更された論理マトリックスとポートバインディング情報とに基づいてワンホットディスパッチベクトルを生成する第８のロジックをさらに備え、前記ベクトルは、前記変更された論理マトリックスに関連付けられた前記複数の実行ポートのうちの前記１つの実行ポートに割り当てられるべき、前記複数の実行待ち命令のうちの１つの実行待ち命令のインデックスにおいて１つの正ビットを含んでいる、請求項２０に記載のシステム。
【請求項２２】
請求項８から１４の何れか一項に記載の方法を実行するための手段を含む装置。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０２３０
【補正方法】変更
【補正の内容】
【０２３０】
従って、少なくとも１つの実施形態に係る１または複数の命令を実行するための複数の技術が開示される。特定の複数の例示的実施形態が添付の複数の図面において説明され、示されてきたが、そのような複数の実施形態は他の複数の実施形態の単に例示であって、それらに対する限定ではないこと、および、そのような複数の実施形態は、示され説明された具体的な複数の構造および構成に限定されるものではないことが理解されよう。なぜなら、当業者ならばこの開示を研究することで様々な他の変形形態に想到し得るからである。成長が速く、さらなる進歩が容易に予見されないこのような技術分野においては、開示された複数の実施形態は、技術的進歩を可能にすることにより容易にされるように、本開示の複数の原理または添付の特許請求の範囲から逸脱することなく構成および詳細部分において容易に変更可能であろう。
［項目１］
１または複数の実行ポート上にロードされるべき複数のストランドに分割された命令ストリームをフェッチする第１のロジックと、
複数の実行待ち命令を特定する第２のロジックであって、各実行待ち命令は上記複数のストランドのうちの１つのそれぞれのヘッドにある、第２のロジックと、
上記複数のストランドのどれがアクティブであるかを決定する第３のロジックと、
上記複数の実行待ち命令の各々のプログラム順を決定する第４のロジックと、
各実行待ち命令の上記プログラム順、および各ストランドがアクティブであるかどうかに基づいて、上記複数の実行待ち命令を上記複数の実行ポートにマッチングさせる第５のロジックと、
を備えるプロセッサ。
［項目２］
上記複数の実行ポートのうちの１つへの上記複数の実行待ち命令のうちの１つのポートバインディングを決定する第６のロジックと、
各実行待ち命令の上記プログラム順と、各ストランドはアクティブであるかどうかと、上記ポートバインディングとに基づいて上記複数の実行待ち命令を上記複数の実行ポートにマッチングさせる第７のロジックと、
をさらに備える項目１に記載のプロセッサ。
［項目３］
上記複数の実行待ち命令を上記複数の実行ポートにマッチングさせる第５のロジックは、さらに、単一プロセッサクロックサイクル内で実行される、項目１に記載のプロセッサ。
［項目４］
上記複数の実行ポートのうちの所与の１つのためのワンホットベクトルを生成する第６のロジックであって、上記ベクトルは、上記所与の実行ポートに割り当てられるべき、上記複数の実行待ち命令のうちの１つの実行待ち命令のインデックスに１つの正ビットを含む、第６のロジックをさらに備える項目１に記載のプロセッサ。
［項目５］
第１のステージにおいて上記複数の実行待ち命令を格納する第６のロジックと、
上記複数の実行待ち命令の実行のために、必要なデータが利用可能かどうかを評価する第７のロジックと、
上記実行待ち命令の実行のために、必要なデータが利用可能であるという評価に基づいて上記複数の実行待ち命令を第２のステージに進める第８のロジックと、
上記第２のステージにおいて上記複数の実行待ち命令の各々についての有効性ビットを格納する第９のロジックであって、上記有効性ビットは、それぞれのストランドがアクティブかどうかと、それぞれの実行待ち命令の実行のために、必要なデータが利用可能であるかどうかとを示している、第９のロジックと、
をさらに備える項目１に記載のプロセッサ。
［項目６］
上記複数の実行待ち命令の各々の上記プログラム順と、その他の複数の実行待ち命令の上記プログラム順とのマトリックス比較を実行し、その結果を論理マトリックスに格納する第６のロジックであって、上記複数の実行待ち命令の各々は、上記論理マトリックスのそれぞれの行で表されており、上記複数の実行待ち命令の各々の優先度は、上記それぞれの行内の正ビットの数量で表されている、第６のロジックと、
上記論理マトリックス内の上記それぞれの実行待ち命令の各々について複数の上記正ビットを調整して、上記複数の実行ポートのうちの１つの実行ポートに関連付けられた変更された論理マトリックスを生成する第７のロジックであって、上記調整は、それぞれのストランドがアクティブであるかどうかに基づいている、第７のロジックと、
をさらに備える項目１に記載のプロセッサ。
［項目７］
上記変更された論理マトリックスとポートバインディング情報とに基づいてワンホットディスパッチベクトルを生成する第８のロジックをさらに備え、上記ベクトルは、上記変更された論理マトリックスに関連付けられた上記複数の実行ポートのうちの上記１つの実行ポートに割り当てられるべき、上記複数の実行待ち命令のうちの１つの実行待ち命令のインデックスにおいて１つの正ビットを含んでいる、項目６に記載のプロセッサ。
［項目８］
１または複数の実行ポート上にロードすべく、複数のストランドに分割された命令ストリームをフェッチする段階と、
複数の実行待ち命令を特定する段階であって、各実行待ち命令は、上記複数のストランドのうちの１つのそれぞれのヘッドにある、段階と、
上記複数のストランドのどれがアクティブであるかを決定する段階と、
上記複数の実行待ち命令の各々のプログラム順を決定する段階と、
各実行待ち命令の上記プログラム順と、各ストランドがアクティブであるかどうかとに基づいて上記複数の実行待ち命令を上記複数の実行ポートにマッチングさせる段階と、
を備える、プロセッサ内における方法。
［項目９］
上記複数の実行ポートのうちの１つへの上記複数の実行待ち命令のうちの１つのポートバインディングを決定する段階と、
各実行待ち命令の上記プログラム順と、各ストランドがアクティブであるかどうかと、上記ポートバインディングとに基づいて、上記複数の実行待ち命令を上記複数の実行ポートにマッチングさせる段階と、
をさらに備える項目８に記載の方法。
［項目１０］
上記複数の実行待ち命令を上記複数の実行ポートにマッチングさせる段階は、単一プロセッサクロックサイクル内で実行される、項目８に記載の方法。
［項目１１］
上記複数の実行ポートのうちの所与の１つのためのワンホットベクトルを生成する段階をさらに備え、上記ベクトルは、上記所与の実行ポートに割り当てられるべき、上記複数の実行待ち命令のうちの１つの実行待ち命令のインデックスにおいて１つの正ビットを含んでいる、項目８に記載の方法。
［項目１２］
第１のステージにおいて上記複数の実行待ち命令を格納する段階と、
上記複数の実行待ち命令の実行のために、必要なデータが利用可能かどうかを評価する段階と、
上記複数の実行待ち命令の実行のために、必要なデータが利用可能であるという評価に基づいて、上記複数の実行待ち命令を第２のステージに進める段階と、
上記第２のステージにおいて上記複数の実行待ち命令の各々についての有効性ビットを格納する段階と、
をさらに備え、
上記有効性ビットは、それぞれのストランドがアクティブかどうかと、それぞれの実行待ち命令の実行のために、必要なデータが利用可能であるかどうかとを示している、項目８に記載の方法。
［項目１３］
上記複数の実行待ち命令の各々の上記プログラム順と、その他の複数の実行待ち命令の上記プログラム順とのマトリックス比較を実行して、その結果を論理マトリックスに格納する段階であって、上記複数の実行待ち命令の各々は上記論理マトリックスのそれぞれの行で表されており、上記複数の実行待ち命令の各々の優先度は上記それぞれの行内の正ビットの数量で表されている、段階と、
上記論理マトリックス内の上記それぞれの実行待ち命令の各々について複数の上記正ビットを調整して、上記複数の実行ポートのうちの１つに関連付けられた変更された論理マトリックスを生成する段階であって、上記調整は、それぞれのストランドがアクティブかどうかに基づいている、段階と、
をさらに備える項目８に記載の方法。
［項目１４］
１または複数の実行ポート上にロードすべく、複数のストランドに分割された命令ストリームをフェッチする第１のロジックと、
複数の実行待ち命令を特定する第２のロジックであって、各実行待ち命令は、上記複数のストランドのうちの１つのそれぞれのヘッドにある、第２のロジックと、
上記複数のストランドのどれがアクティブであるかを決定する第３のロジックと、
上記複数の実行待ち命令の各々のプログラム順を決定する第４のロジックと、
各実行待ち命令の上記プログラム順と、各ストランドがアクティブかどうかとに基づいて、上記複数の実行待ち命令を上記複数の実行ポートにマッチングさせる第５のロジックと、
を備えるシステム。
［項目１５］
上記複数の実行ポートのうちの１つへの上記複数の実行待ち命令のうちの１つのポートバインディングを決定する第６のロジックと、
各実行待ち命令の上記プログラム順と、各ストランドがアクティブかどうかと、上記ポートバインディングとに基づいて、上記複数の実行待ち命令を上記複数の実行ポートにマッチングさせる第７のロジックと、
をさらに備える項目１４に記載のシステム。
［項目１６］
上記複数の実行待ち命令を上記複数の実行ポートにマッチングさせる上記第５のロジックは、さらに、単一プロセッサクロックサイクル内で実行される、項目１４に記載のシステム。
［項目１７］
上記複数の実行ポートのうちの所与の１つのためのワンホットベクトルを生成する第６のロジックをさらに備え、上記ベクトルは、上記所与の実行ポートに割り当てられるべき、上記複数の実行待ち命令のうちの１つの実行待ち命令のインデックスにおいて１つの正ビットを含んでいる、項目１４に記載のシステム。
［項目１８］
第１のステージにおいて上記複数の実行待ち命令を格納する第６のロジックと、
上記複数の実行待ち命令の実行のために、必要なデータが利用可能かどうかを評価する第７のロジックと、
上記複数の実行待ち命令の実行のために、必要なデータが利用可能であるという評価に基づいて、上記複数の実行待ち命令を第２のステージに進める第８のロジックと、
上記第２のステージにおいて上記複数の実行待ち命令の各々についての有効性ビットを格納する第９のロジックと、
をさらに備え、
上記有効性ビットは、それぞれのストランドがアクティブかどうかと、それぞれの実行待ち命令の実行のために、必要なデータが利用可能かどうかとを示している、項目１４に記載のシステム。
［項目１９］
上記複数の実行待ち命令の各々の上記プログラム順と、その他の複数の実行待ち命令の上記プログラム順とのマトリックス比較を実行し、その結果を論理マトリックスに格納する第６のロジックであって、上記複数の実行待ち命令の各々は、上記論理マトリックスのそれぞれの行で表されており、上記複数の実行待ち命令の各々の優先度は、上記それぞれの行内の正ビットの数量で表されている、第６のロジックと、
上記論理マトリックス内の上記それぞれの実行待ち命令の各々について複数の上記正ビットを調整して、上記複数の実行ポートのうちの１つに関連付けられた変更された論理マトリックスを生成する第７のロジックであって、上記調整は、それぞれのストランドがアクティブかどうかに基づいている、第７のロジックと、
をさらに備える項目１４に記載のシステム。
［項目２０］
上記変更された論理マトリックスとポートバインディング情報とに基づいてワンホットディスパッチベクトルを生成する第８のロジックをさらに備え、上記ベクトルは、上記変更された論理マトリックスに関連付けられた上記複数の実行ポートのうちの上記１つの実行ポートに割り当てられるべき、上記複数の実行待ち命令のうちの１つの実行待ち命令のインデックスにおいて１つの正ビットを含んでいる、項目１４に記載のシステム。
【国際調査報告】
2017513094.tif 000037
2017513094.tif 000038
2017513094.tif 000039