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