(57)【要約】  プロセッサアーキテクチャの実施形態が開示される。一実施形態では、プロセッサは、デコーダと、実行ユニットと、コヒーレントキャッシュと、インターコネクトと、を備える。デコーダは、キャッシュラインをゼロ化するための命令をデコードする。実行ユニットは、キャッシュラインサイズのゼロの書き込みを開始するためのライトコマンドを発行する。コヒーレントキャッシュは、ライトコマンドを受信し、コヒーレントキャッシュにヒットがあるか否か、およびヒットしたキャッシュラインのキャッシュコヒーレンシプロトコル状態が修正状態または排他状態であるか否かを判定し、すべてゼロを示すようにキャッシュラインを構成し、インターコネクトに向けてライトコマンドを発行する。インターコネクトは、ライトコマンドの受信に応答して、ヒットがあるか否かを判定する必要がある他の複数のコヒーレントキャッシュのそれぞれにスヌープを発行する。
2020513605.tif 000002
【特許請求の範囲】
【請求項１】
キャッシュラインをゼロ化するための命令をデコードするデコーダと、
前記デコーダに結合され、前記命令の前記デコードに応答して、メモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを開始するためのライトコマンドを発行する、実行ユニットと、
コヒーレントキャッシュであって、前記実行ユニットに結合され、前記ライトコマンドを受信し、前記ライトコマンドに応答して前記コヒーレントキャッシュにおいてヒットがあるか否かを判定し、前記ヒットしたキャッシュラインのキャッシュコヒーレンシプロトコル状態が修正状態または排他状態であるか否かを判定し、前記キャッシュコヒーレンシプロトコル状態が前記修正状態または前記排他状態の場合にすべてゼロを示すようにキャッシュラインを構成し、前記ライトコマンドの受信に応答してミスの場合、インターコネクトに向けて前記ライトコマンドを発行する、コヒーレントキャッシュと、
前記インターコネクトであって、前記ライトコマンドの受信に応答して、ヒットがあるか否かを判定する必要がある他の複数のコヒーレントキャッシュのそれぞれにスヌープを発行し、前記ライトコマンドおよび前記スヌープが前記キャッシュラインサイズのゼロの書き込みを実行させなかった場合に、前記インターコネクト、または前記インターコネクトからのメッセージに応答する前記実行ユニットは、前記他の複数のコヒーレントキャッシュのうちの１つにおけるキャッシュラインをすべてゼロを示すように構成させる、前記インターコネクトと
を備えるプロセッサ。
【請求項２】
前記コヒーレントキャッシュがまた、前記キャッシュラインのキャッシュコヒーレンシプロトコル状態を無効状態にし、前記ヒットしたキャッシュラインの前記キャッシュコヒーレンシプロトコル状態が前記修正状態または前記排他状態ではない場合に前記インターコネクトに向けて前記ライトコマンドを発行する、請求項１に記載のプロセッサ。
【請求項３】
前記デコーダおよび前記実行ユニットが第１のコアの一部であり、前記他の複数のコヒーレントキャッシュが第２のコアのコヒーレントキャッシュを含む、請求項１または２に記載のプロセッサ。
【請求項４】
キャッシュラインをゼロ化するための命令をデコードするデコーダと、
前記デコーダに結合され、前記命令の前記デコードに応答して、コマンドを発行する、実行ユニットと、
インターコネクトであって、前記コマンドの受信に応答して、ヒットがあるか否かを判定する必要がある複数のコヒーレントキャッシュのそれぞれにスヌープを発行し、前記スヌープが前記キャッシュラインへのゼロの書き込みを実行させなかった場合に、前記実行ユニットが単独で、前記インターコネクトが、または前記インターコネクトからのメッセージに応答して前記実行ユニットが、前記実行ユニットに結合された前記複数のコヒーレントキャッシュのうちの１つにおけるキャッシュラインをすべてゼロを示すように構成させる、インターコネクトと
を備えるプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の分野は、一般にコンピュータに関し、より具体的には、プロセッサアーキテクチャに関する。
【背景技術】
【０００２】
プロセッサは、命令を実行し、情報を処理するために、共に機能する多くの相互に接続された回路および構造を備える。これらの回路および構造、ならびにそれらが提供する機能は、多くの異なる構成および組み合わせでプロセッサに備わり得る。
【０００３】
本発明は、添付の図面の各図において限定ではなく例として示されており、これらの図面において、同様の参照符号は同様の要素を示している。
【図面の簡単な説明】
【０００４】
【図１Ａ】本発明の実施形態による、例示的なインオーダパイプラインと、例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインと、の両方を示すブロック図である。
【０００５】
【図１Ｂ】本発明の実施形態による、プロセッサに含まれる、インオーダアーキテクチャコアの例示的な実施形態と、例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアと、の両方を示すブロック図である。
【０００６】
【０００７】
【図２Ａ】コアがチップ内の（同じタイプおよび／または異なるタイプの他のコアを含む）いくつかの論理ブロックのうちの１つである、より具体的な例示的コアアーキテクチャのブロック図であって、本発明の実施形態による、オンダイ相互接続ネットワーク２０２への接続とレベル２（Ｌ２）キャッシュ２０４のローカルサブセットとを伴う、シングルプロセッサコアのブロック図である。
【０００８】
【図２Ｂ】コアがチップ内の（同じタイプおよび／または異なるタイプの他のコアを含む）いくつかの論理ブロックのうちの１つである、より具体的な例示的コアアーキテクチャのブロック図であって、本発明の実施形態による、図２Ａのプロセッサコアの一部の拡大図である。
【０００９】
【図３】本発明の実施形態による、プロセッサに含まれ得る例示的なアウトオブオーダ発行／実行プロセッサコアのブロック図である。
【００１０】
【図４】本発明の実施形態による、図３のプロセッサコアなどのプロセッサコアおよび／またはプロセッサに含まれ得る例示的なフェッチユニットのブロック図である。
【００１１】
【図５】本発明の実施形態による、図３のプロセッサコアなどのプロセッサコアおよび／またはプロセッサに含まれ得る例示的なデコードユニットのブロック図である。
【００１２】
【図６】本発明の実施形態による、図３のプロセッサコアなどのプロセッサコアおよび／またはプロセッサに含まれ得る例示的な整数実行ユニットのブロック図である。
【００１３】
【図７】本発明の実施形態による、図３のプロセッサコアなどのプロセッサコアおよび／またはプロセッサに含まれ得る例示的な浮動小数点（ＦＰ）実行ユニットのブロック図である。
【００１４】
【図８】本発明の実施形態による、図３のプロセッサコアなどのプロセッサコアおよび／またはプロセッサに含まれ得る例示的なロード／ストアユニットのブロック図である。
【００１５】
【図９】本発明の実施形態による、プロセッサにおける同時マルチスレッディング（ＳＭＴ）をサポートする、図３のプロセッサコアなどの、例示的なアウトオブオーダ発行／実行プロセッサコアのブロック図である。
【００１６】
【図１０】一部の実施形態による、プロセッサに含まれ得るＳＭＴ静的分割機能を示すブロック図である。
【００１７】
【図１１】一部の実施形態による、プロセッサによって実行され得るＳＭＴ静的分割機能のための方法を示す流れ図である。
【００１８】
【図１２】一部の実施形態による、プロセッサに含まれ得るリソースアロケータを示すブロック図である。
【００１９】
【図１３】実施形態による、プロセッサ１３００に含まれ得るアルゴリズム的なＳＭＴ機能を示すブロック図である。
【００２０】
【図１４】実施形態による、プロセッサによって実行され得るアルゴリズム的なＳＭＴ機能のための方法を示す流れ図である。
【００２１】
【図１５】実施形態による、プロセッサに含まれ得るアルゴリズム的なＳＭＴ機能を示すブロック図である。
【００２２】
【図１６】例示的な実施形態による分岐予測優先順位アルゴリズムを実施するブロック図である。
【００２３】
【図１７】実施形態による、プロセッサに含まれ得るＳＭＴスレッド切り替え機能のための調停回路を示すブロック図である。
【００２４】
【図１８】実施形態による、プロセッサに含まれ得るデッドロック回避ハードウェア１８００を示すブロック図である。
【００２５】
【図１９】一部の実施形態による、１２８ビットμｏｐペアを使用する２５６ビットレジスタファイルへの２５６ビットロードを示す図である。
【００２６】
【図２０】一部の実施形態による、１２８ビットμｏｐペアを使用して２５６ビットレジスタファイルに２５６ビットをロードするためのプロセスを示す図である。
【００２７】
【図２１】一部の実施形態による、１２８ビットμｏｐを使用する２５６ビットレジスタファイルからの２５６ビットストアを示す図である。
【００２８】
【図２２】一部の実施形態による、１２８ビットμｏｐペアを使用して２５６ビットレジスタファイルから２５６ビットをストアするためのプロセスを示す図である。
【００２９】
【図２３】一部の実施形態による、１２８ビットマイクロオペレーションを使用する２５６ビット算術演算を可能にするための機能を示すブロック図である。
【００３０】
【図２４】一部の実施形態による、一部の結果をストアするために一時的格納領域を使用するレーン間オペレーションを示すブロック図である。
【００３１】
【図２５】実施形態による、プロセッサに含まれ得るマイクロｏｐキャッシュ機能を示すブロック図である。
【００３２】
【図２６】実施形態による、プロセッサによって実行され得るマイクロｏｐキャッシュ機能のための方法を示す流れ図である。
【００３３】
【図２７】実施形態による、プロセッサに含まれ得るマイクロｏｐキャッシュ機能を示すブロック図である。
【００３４】
【図２８】実施形態による、プロセッサに含まれ得るマイクロｏｐキャッシュ機能を示すブロック図である。
【００３５】
【図２９】実施形態によるレジスタエイリアステーブル（ＲＡＴ）を含む、レジスタリネーミングおよび依存関係追跡方式を示すブロック図である。
【００３６】
【図３０】実施形態による、ゼロイディオム、符号拡張、およびゼロ拡張を含むように拡張されたＲＡＴを示すブロック図である。
【００３７】
【図３１】実施形態による、レジスタリネーミング中に拡張ＲＡＴビットを読み取り、レジスタを読み取ったマイクロオペレーションを用いて拡張ＲＡＴビットをパイプラインに伝えることを示すブロック図である。
【００３８】
【図３２】実施形態による、プロセッサに含まれ得る仮想レジスタリネーミング機能を示すブロック図である。
【００３９】
【図３３】実施形態による、プロセッサによって実行され得る仮想レジスタリネーミング機能のための方法を示す流れ図である。
【００４０】
【図３４】本発明の実施形態による、融合積和演算（ＦＭＡ）分離／融合（ｆｉｓｓｉｏｎ／ｆｕｓｉｏｎ）機能をサポートするプロセッサコアに実装され得る発行／実行パイプラインを示すブロック図である。
【００４１】
【図３５】本発明の実施形態による、プロセッサによって実行され得るＦＭＡ分離／融合のための方法を示す流れ図である。
【００４２】
【図３６】本発明の実施形態による、複数のコアを有することができ、統合メモリコントローラを有することができ、統合グラフィックを有することができる、プロセッサのブロック図である。
【００４３】
【図３７】本発明の実施形態による、プロセッサに含まれ得る例示的な中央処理装置（ＣＰＵ）複合体のブロック図である。
【００４４】
【図３８】本発明の実施形態による、プロセッサに含まれ得る例示的なキャッシュ階層のブロック図である。
【００４５】
【図３９】実施形態による、キャッシュラインゼロ化命令を実装することができるメモリ階層を示すブロック図である。
【００４６】
【図４０】実施形態による、キャッシュラインゼロ化命令を実装するプロセッサにおけるキャッシュを示すブロック図である。
【００４７】
【図４１】スヌープを使用する前に、最初に発行元エージェントのキャッシュへの書き込みを試みる、本発明の実施形態を示す流れ図である。
【００４８】
【図４２】コヒーレントキャッシュのスヌープに依拠する、本発明の実施形態を示す流れ図である。
【００４９】
【図４３】スヌーププロセスを実施するためにライトアップデート（ｗｒｉｔｅ−ｕｐｄａｔｅ）スヌープを使用する、本発明の実施形態を示す流れ図である。
【００５０】
【図４４】スヌーププロセスを実施するためにライトインバリデート（ｗｒｉｔｅ−ｉｎｖａｌｉｄａｔｅ）スヌープを使用する、本発明の実施形態を示す流れ図である。
【００５１】
【図４５】スヌーププロセスを実施するためにインバリデートし、ライトバック（ｗｒｉｔｅ  ｂａｃｋ）するスヌープを使用する、本発明の実施形態を示す流れ図である。
【００５２】
【図４６】ヒットするが、第１のエージェントにデータを送り返さず、スヌーププロセスを実施するためにデータがダウンストリームメモリから読み出されない、あらゆるキャッシュラインを書き出すスヌープを使用する、本発明の実施形態を示す流れ図である。
【００５３】
【図４７】一部の実施形態による、プロセッサに含まれ得るページコアレッシング機能を示すブロック図である。
【００５４】
【図４８】一部の実施形態による、ページテーブルエントリを単一の有効ページにコアレッシングするための方法を示す流れ図である。
【００５５】
【００５６】
【図４９】例示的なコンピュータアーキテクチャのブロック図であって、本発明の１つの実施形態によるシステムのブロック図である。
【００５７】
【図５０】例示的なコンピュータアーキテクチャのブロック図であって、本発明の一実施形態によるより具体的な例示的な第１のシステムのブロック図である。
【００５８】
【図５１】例示的なコンピュータアーキテクチャのブロック図であって、本発明の一実施形態によるより具体的な例示的な第２のシステムのブロック図である。
【００５９】
【図５２】例示的なコンピュータアーキテクチャのブロック図であって、本発明の一実施形態によるシステムオンチップ（ＳｏＣ）のブロック図である。
【００６０】
【００６１】
【図５３Ａ】本発明の実施形態によるジェネリックベクトルフレンドリ命令フォーマットおよびそのクラスＡ命令テンプレートを示すブロック図である。
【００６２】
【図５３Ｂ】本発明の実施形態によるジェネリックベクトルフレンドリ命令フォーマットおよびそのクラスＢ命令テンプレートを示すブロック図である。
【００６３】
【図５４Ａ】本発明の実施形態による例示的な具体的なベクトルフレンドリ命令フォーマットを示すブロック図である。
【００６４】
【図５４Ｂ】本発明の１つの実施形態による、ｏｐコードフィールド全体を作り上げる具体的なベクトルフレンドリ命令フォーマットのフィールドを示すブロック図である。
【００６５】
【図５４Ｃ】本発明の１つの実施形態による、レジスタインデックスフィールドを作り上げる具体的なベクトルフレンドリ命令フォーマットのフィールドを示すブロック図である。
【００６６】
【図５４Ｄ】本発明の１つの実施形態による、拡張オペレーションフィールドを作り上げる具体的なベクトルフレンドリ命令フォーマットのフィールドを示すブロック図である。
【００６７】
【図５５】本発明の１つの実施形態によるレジスタアーキテクチャのブロック図である。
【００６８】
【図５６】本発明の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図である。
【００６９】
【図５７】システムにおける本発明の実施形態の図である。
【図５８】システムにおける本発明の実施形態の図である。
【図５９】システムにおける本発明の実施形態の図である。
【図６０】システムにおける本発明の実施形態の図である。
【図６１Ａ】図５７、図５９、および図６０の例示的なデータセンタ５７００、５９００、および６０００のいずれかなどの、データセンタの様々なスレッドの間で一部の実施形態において確立され得るリンク層接続を概して表すことができる接続スキーム６１００Ａの概要を示す。
【図６１Ｂ】一部の実施形態による、図５７〜図６０に示すラックの任意の特定の１つのアーキテクチャを表すことができるラックアーキテクチャ６１００Ｂの概要を示す。
【図６１Ｃ】図６１Ｂのラックアーキテクチャ６１００Ｂの一部の詳細図である。
【図６２】システムにおける本発明の実施形態の図である。
【図６３】システムにおける本発明の実施形態の図である。
【図６４】システムにおける本発明の実施形態の図である。
【図６５】システムにおける本発明の実施形態の図である。
【図６６】システムにおける本発明の実施形態の図である。
【発明を実施するための形態】
【００７０】
以下の説明では、多数の具体的な詳細が述べられている。しかしながら、本発明の実施形態は、これらの具体的な詳細なしに実施され得ることを理解されたい。他の例では、この説明の理解を曖昧にしないために、よく知られている回路、構造、および技法は詳細には示されていない。
【００７１】
明細書において「１つの実施形態（ｏｎｅ  ｅｍｂｏｄｉｍｅｎｔ）」、「一実施形態（ａｎ  ｅｍｂｏｄｉｍｅｎｔ）」、「例示的な実施形態（ａｎ  ｅｘａｍｐｌｅ  ｅｍｂｏｄｉｍｅｎｔ）」などに言及することは、説明された実施形態が特定の特徴、構造、または特性を含むことができるが、すべての実施形態がその特定の特徴、構造、または特性を必ずしも含まなくてもよいことを示す。さらに、そのような句は必ずしも同じ実施形態を参照しているわけではない。さらに、ある実施形態に関連して特定の特徴、構造、または特性が説明されるとき、明示的に説明されているか否かによらず、他の実施形態に関連してそのような特徴、構造、または特性に影響を与えることは、当業者の知識の範囲内であると考えられる。
【００７２】
コンピュータなどの情報を処理するための装置は、１つまたは複数のプロセッサコアを備え得る。各プロセッサコアは、様々な回路、ハードウェア、構造、および他の特徴を有することができ、それぞれ単独で、または任意の数を組み合わせて特徴と呼ぶことができる。特徴は、様々な方法で実装および／または構成され、様々な技法を使用し、パフォーマンス、電力消費、および／または他の特性（例えば、該当する基準のほんのいくつかを挙げると、パフォーマンスの向上、消費電力の削減、省電力機能の実装、公平性、最低保証パフォーマンス、スループット、クロック当たりの実行命令数（ＩＰＣ）、単位時間当たりの実行命令数、サービス品質、時間および／またはメモリ効率の向上）の様々な組み合わせで所望のレベルを達成することを試みる様々な方法の実行に関与する。
本発明の実施形態は、本明細書で説明されている特徴のうち１つまたは複数を含み得る。本明細書の図面および説明において、本発明を実施することができるアーキテクチャおよびシステムの一部の例を提供する。
【００７３】
本発明を実施することができるプロセッサコアは、異なる方法で、異なる目的で、そして異なるプロセッサで実装することができる。例えば、そのようなコアの実装形態としては、１）汎用コンピューティング向けの汎用インオーダコア、２）汎用コンピューティング向けの高性能汎用アウトオブオーダコア、３）主としてグラフィックスおよび／または科学技術（スループット）コンピューティング向けの専用コア、を挙げることができる。異なるプロセッサの実装形態としては、１）汎用コンピューティング向けの１つまたは複数の汎用インオーダコア、および／または汎用コンピューティング向けの１つまたは複数の汎用アウトオブオーダコアを備える中央処理装置（ＣＰＵ）と、２）主としてグラフィックスおよび／または科学技術（スループット）コンピューティング向けの１つまたは複数の専用コアを備えるコプロセッサと、を挙げることができる。そのような異なるプロセッサは、異なるコンピュータシステムアーキテクチャをもたらし、異なるコンピュータシステムアーキテクチャとしては、１）ＣＰＵとは別のチップ上のコプロセッサと、２）ＣＰＵと同じパッケージ内の別のダイ上のコプロセッサと、３）ＣＰＵと同じダイ上のコプロセッサ（この場合、そのようなコプロセッサは、統合グラフィックスおよび／もしくは科学技術計算（スループット）ロジックなどの専用ロジック、または専用コアと呼ばれることもある）と、４）上記のＣＰＵ（アプリケーションコア（単数または複数）またはアプリケーションプロセッサ（単数または複数）と呼ばれることもある）、上記のコプロセッサ、および追加の機能を同じダイ上に含み得るシステムオンチップ（ＳｏＣ）と、を挙げることができる。
【００７４】
例示的なコアアーキテクチャを次に説明し、その後に例示的なプロセッサおよびコンピュータアーキテクチャの説明を続ける。各プロセッサは１つまたは複数のコアを備えることができ、各コアおよび／またはコアの組み合わせは、様々なときに１つまたは複数のスレッド、プロセス、または他の命令シーケンスを実行するように設計（ａｒｃｈｉｔｅｃｔｅｄ）および設計（ｄｅｓｉｇｎｅｄ）され得る。コアアーキテクチャおよび設計技法は、同時（または対称）マルチスレッディング（ＳＭＴ）として知られる種類の手法のいずれか、または任意の他の手法に従って、複数のスレッドの同時実行を提供および／またはサポートすることができる。従って、以下に例として説明されるプロセッサコアを含む、本発明が実施され得るプロセッサコアは、後述され得るように、ＳＭＴをサポートするように設計（ａｒｃｈｉｔｅｃｔｅｄ）および設計（ｄｅｓｉｇｎｅｄ）された様々な新規な特徴、および／またはＳＭＴをサポートするように様々な新規な方法で修正された様々な既知の機能を含み得る。説明を容易にするために、本明細書におけるＳＭＴという用語の意味は、マルチスレッディングに対する他の任意の手法（例えば、タイムスライシング）と組み合わせたＳＭＴを含み得る。
【００７５】
上で言及され、以下でより詳細に説明されるように、本開示の実施形態は、例えば、該当する基準のほんのいくつかを挙げると、パフォーマンスの向上、消費電力の削減、省電力機能の実装、公平性、最低保証パフォーマンス、スループット、クロック当たりの実行命令数（ＩＰＣ）、単位時間当たりの実行命令数、サービス品質、時間および／またはメモリ効率の向上を含む、様々な理由から望ましい場合がある。上に列挙され本明細書で説明される望ましい基準は例示的なものであり、本明細書で説明するように、本開示は、個別にまたは組み合わせて、上に列挙した理由のうちのいずれかのために望ましい場合があり、上で具体的に列挙されていない追加の理由のためにさらに望ましい場合がある。
【００７６】
さらに、上で言及され、以下でより詳細に説明されるように、本開示の実施形態は、汎用プロセッサ、サーバプロセッサもしくはサーバ環境で使用するための処理要素、コプロセッサ（例えば、セキュリティコプロセッサ）、高スループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（例えば、グラフィックアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニット、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワーキングアクセラレータ、またはコンピュータビジョンアクセラレータなど）、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサもしくは処理装置を含む、任意の種類のプロセッサまたは処理要素に適用され得る。１つまたは複数のプロセッサは、１つまたは複数のチップ上に実装することができる。１つまたは複数のプロセッサ３６００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳなどのいくつかのプロセス技術のいずれかを使用して、１つまたは複数の基板の一部であってもよい、および／または１つまたは複数の基板の上に実装されてもよい。上に列挙され本明細書で説明されるプロセッサおよび処理装置は例示的なものであり、本明細書で説明するように、本開示は、任意のプロセッサまたは処理装置に適用可能である。
【００７７】
さらに、上で言及され、以下でより詳細に説明されるように、本開示の実施形態は、例えば、ｘ８６命令セット（場合により、新しいバージョンで追加された拡張を含む）、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セット（ＮＥＯＮなどの任意の追加の拡張を伴う）、ＩＢＭの「Ｐｏｗｅｒ」命令セット、またはＲＩＳＣおよびＣＩＳＣの両方の命令セットを含む他の任意の命令セットを含む、多種多様な命令セットおよび命令セットアーキテクチャを使用して、プロセッサまたは処理要素に適用できる。上に列挙され本明細書で説明される命令セットおよび命令セットアーキテクチャは例示的なものであり、本明細書で説明するように、本開示は、任意の命令セットおよび命令セットアーキテクチャに適用可能である。
【００７８】
例示的なコアアーキテクチャ
インオーダおよびアウトオブオーダコアのブロック図
図１Ａは、本発明の実施形態による、例示的なインオーダパイプラインと、例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインと、の両方を示すブロック図である。図１Ｂは、本発明の実施形態による、プロセッサに含まれる、インオーダアーキテクチャコアの例示的な実施形態と、例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアと、の両方を示すブロック図である。図１Ａ〜図１Ｂ中の実線のボックスは、インオーダパイプラインおよびインオーダコアを示すが、オプションで追加されている破線のボックスは、レジスタリネーミング、アウトオブオーダ発行／実行パイプラインおよびコアを示す。インオーダの態様はアウトオブオーダの態様のサブセットであると仮定して、アウトオブオーダの態様について説明する。
【００７９】
図１Ａでは、プロセッサパイプライン１００は、フェッチステージ１０２と、長さデコードステージ１０４と、デコードステージ１０６と、割り当てステージ１０８と、リネーミングステージ１１０と、スケジューリング（ディスパッチまたは発行としても知られる）ステージ１１２と、レジスタ読み取り／メモリ読み取りステージ１１４と、実行ステージ１１６と、ライトバック／メモリ書き込みステージ１１８と、例外処理ステージ１２２と、コミットステージ１２４と、を含む。
【００８０】
図１Ｂは、実行エンジンユニット１５０に結合されたフロントエンドユニット１３０を備えるプロセッサコア１９０を示し、フロントエンドユニット１３０および実行エンジンユニット１５０は両方ともメモリユニット１７０に結合されている。コア１９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、またはハイブリッドもしくは代替的なコアタイプであってよい。さらなる別のオプションとして、コア１９０は、例えば、ネットワークコアまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィック処理ユニット（ＧＰＧＰＵ）コア、グラフィックコアなどの専用コアであってよい。例えば、上で説明したように、コア１９０は、汎用プロセッサ、サーバプロセッサもしくはサーバ環境で使用するための処理要素、コプロセッサ（例えば、セキュリティコプロセッサ）、高スループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（例えば、グラフィックアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニット、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワーキングアクセラレータ、またはコンピュータビジョンアクセラレータなど）、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサもしくは処理装置を含むセットの任意のメンバであり得る。
【００８１】
フロントエンドユニット１３０は、マイクロｏｐキャッシュ１３３および命令キャッシュユニット１３４に結合された分岐予測ユニット１３２を有し、命令キャッシュユニット１３４は、命令トランスレーションルックアサイドバッファ（ＴＬＢ）１３６に結合され、ＴＬＢ  １３６は、命令フェッチユニット１３８に結合され、命令フェッチユニット１３８は、デコードユニット１４０に結合される。デコードユニット１４０（またはデコーダ）は、命令をデコードし、元の命令からデコードされた、または元の命令を反映する、または元の命令から導出された、１つまたは複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号を出力として生成し得る。マイクロオペレーション、マイクロコードエントリポイント、マイクロ命令などは、少なくともマイクロｏｐキャッシュ１３３に格納され得る。デコードユニット１４０は、様々な異なるメカニズムを使用して実装され得る。
好適なメカニズムの例としては、限定はされないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコード読み出し専用メモリ（ＲＯＭ）などが挙げられる。１つの実施形態では、コア１９０は、特定のマクロ命令のためのマイクロコードを（例えば、デコードユニット１４０に、またはそうでなければフロントエンドユニット１３０内部に）格納するマイクロコードＲＯＭまたは他の媒体を備える。マイクロｏｐキャッシュ１３３およびデコードユニット１４０は、実行エンジンユニット１５０内のリネーミング／アロケータユニット１５２に結合されている。様々な実施形態において、１３３などのマイクロｏｐキャッシュは、追加的または代替的に、ｏｐキャッシュ、ｕ−ｏｐキャッシュ、ｕｏｐキャッシュ、またはμｏｐキャッシュと呼ばれる場合があり、マイクロオペレーションは、マイクロｏｐ、ｕ−ｏｐ、ｕｏｐ、およびμｏｐと呼ばれる場合がある。
【００８２】
実行エンジンユニット１５０は、リタイアメントユニット１５４および１つまたは複数のスケジューラユニット（単数または複数）１５６のセットに結合されたリネーミング／アロケータユニット１５２を有する。スケジューラユニット（単数または複数）１５６は、リザベーションステーション、中央命令ウィンドウなどを含む、任意の数の異なるスケジューラを表す。スケジューラユニット（単数または複数）１５６は、物理レジスタファイル（単数または複数）ユニット（単数または複数）１５８に結合される。物理レジスタファイル（単数または複数）ユニット１５８のそれぞれは、１つまたは複数の物理レジスタファイルを表し、それらのうちの異なる１つ１つが、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、状態（例えば、次に実行される命令のアドレスである命令ポインタ）などの１つまたは複数の異なるデータタイプを格納する。１つの実施形態では、物理レジスタファイル（単数または複数）ユニット１５８は、ベクトルレジスタユニットと、書き込みマスクレジスタユニットと、スカラレジスタユニットと、を含む。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供し得る。レジスタリネーミングおよびアウトオブオーダ実行が（例えば、リオーダバッファ（単数または複数）およびリタイアメントレジスタファイル（単数または複数）を使用する、将来のファイル（単数または複数）、履歴バッファ（単数または複数）およびリタイアメントレジスタファイル（単数または複数）を使用する、レジスタマップおよびレジスタプールを使用するなどして）実装され得る様々な方法を示すために、物理レジスタファイル（単数または複数）ユニット（単数または複数）１５８には、リタイアメントユニット１５４が重なっている。リタイアメントユニット１５４および物理レジスタファイル（単数または複数）ユニット（単数または複数）１５８は、実行クラスタ（単数または複数）１６０に結合される。実行クラスタ（単数または複数）１６０は、１つまたは複数の実行ユニット１６２のセットおよび１つまたは複数のメモリアクセスユニット１６４のセットを含む。実行ユニット１６２は、様々なオペレーション（例えば、シフト、加算、減算、乗算）を様々なタイプのデータ（例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に行うことができる。一部の実施形態が特定の機能または機能のセットに専用に割り当てられたいくつかの実行ユニットを含んでもよい一方で、他の実施形態は、１つのみの実行ユニットを含んでもよいし、それらすべてがすべての機能を実行する複数の実行ユニットを含んでもよい。スケジューラユニット（単数または複数）１５６、物理レジスタファイル（単数または複数）ユニット（単数または複数）１５８、および実行クラスタ（単数または複数）１６０が複数である可能性があるものとして示されているのは、特定の実施形態が特定のタイプのデータ／オペレーションのために別個のパイプラインを形成するからである（例えば、それぞれが各自のスケジューラユニット、物理レジスタファイル（単数または複数）ユニット、および／または実行クラスタを有する、スカラ整数のパイプライン、スカラ浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点のパイプラインおよび／またはメモリアクセスパイプラインを形成し、別個のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット（単数または複数）１６４を有する特定の実施形態が実装される）。別個のパイプラインが使用される場合、これらのパイプラインのうちの１つまたは複数はアウトオブオーダ発行／実行であってよく、残りはインオーダであってよいことも理解されたい。
【００８３】
メモリアクセスユニット１６４のセットがメモリユニット１７０に結合され、メモリユニット１７０はレベル２（Ｌ２）キャッシュユニット１７６に結合されたデータキャッシュユニット１７４に結合されたデータＴＬＢユニット１７２を含む。１つの例示的な実施形態では、メモリアクセスユニット１６４は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含んでよく、これらのそれぞれが、メモリユニット１７０内のデータＴＬＢユニット１７２に結合される。命令キャッシュユニット１３４は、メモリユニット１７０内のレベル２（Ｌ２）キャッシュユニット１７６にさらに結合される。Ｌ２キャッシュユニット１７６は、１つまたは複数の他のレベルのキャッシュに結合され、最終的にメインメモリに結合される。
【００８４】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは、パイプライン１００を以下のように実装することができる。すなわち、１）命令フェッチ１３８がフェッチステージ１０２および長さデコードステージ１０４を実行する。２）デコードユニット１４０がデコードステージ１０６を実行する。３）リネーミング／アロケータユニット１５２が割り当てステージ１０８およびリネーミングステージ１１０を実行する。４）スケジューラユニット（単数または複数）１５６がスケジューリングステージ１１２を実行する。５）物理レジスタファイル（単数または複数）ユニット（単数または複数）１５８およびメモリユニット１７０がレジスタ読み取り／メモリ読み取りステージ１１４を実行する。実行クラスタ１６０が実行ステージ１１６を実行する。６）メモリユニット１７０および物理レジスタファイル（単数または複数）ユニット（単数または複数）１５８がライトバック／メモリ書き込みステージ１１８を実行する。７）様々なユニットが例外処理ステージ１２２に関与し得る。８）リタイアメントユニット１５４および物理レジスタファイル（単数または複数）ユニット（単数または複数）１５８がコミットステージ１２４を実行する。
【００８５】
コア１９０は、本明細書に記載の命令（単数または複数）を含む、１つまたは複数の命令セット（例えば、ｘ８６命令セット（新しいバージョンで追加されたなんらかの拡張を含む）、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セット（ＮＥＯＮなどの任意の追加の拡張を伴う）、ＩＢＭの「Ｐｏｗｅｒ」命令セット、またはＲＩＳＣおよびＣＩＳＣの両方の命令セットを含む他の任意の命令セット）をサポートすることができる。１つの実施形態では、コア１９０は、パックドデータ命令セット拡張（例えば、ＡＶＸ、ＡＶＸ２、ＡＶＸ−５１２）をサポートするためのロジックを備え、それにより、多くのマルチメディアアプリケーションによって使用されるオペレーションがパックドデータを使用して実行されることを可能にする。
【００８６】
コアは、マルチスレッディング（２つ以上の並列なオペレーションまたはスレッドのセットの実行）をサポートすることができ、タイムスライスマルチスレッディング、ＳＭＴ（例えば、単一の物理コアは、物理コアが同時にマルチスレッディングを行うスレッドのそれぞれに対し、論理コアを提供する）、またはこれらの組み合わせ（例えば、タイムスライスフェッチおよびデコード、ならびにインテル（登録商標）ハイパースレッディング技術などのそれら以降のＳＭＴ）を含む様々な方法でこれを実行してよいことを理解されたい。
【００８７】
レジスタリネーミングは、アウトオブオーダ実行の文脈で説明されているが、レジスタリネーミングは、インオーダアーキテクチャで使用され得ることを理解されたい。図示されたプロセッサの実施形態はまた、別個の命令キャッシュユニット１３４およびデータキャッシュユニット１７４ならびに共有Ｌ２キャッシュユニット１７６を有するが、代替的な実施形態は、命令およびデータの両方のための例えば、レベル１（Ｌ１）内部キャッシュなどの単一の内部キャッシュまたは複数のレベルの内部キャッシュを有してもよい。一部の実施形態では、システムは、内部キャッシュと、コアおよび／またはプロセッサの外部にある外部キャッシュと、の組み合わせを備えてもよい。あるいは、キャッシュ（単数または複数）のすべてが、コアおよび／またはプロセッサの外部にあってもよい。
【００８８】
具体的な例示的なコアアーキテクチャ
図２Ａおよび図２Ｂは、より具体的な例示的コアアーキテクチャのブロック図を示す。このコアは、チップ内の（同じタイプおよび／または異なるタイプの他のコアを含む）いくつかの論理ブロックのうちの１つである。論理ブロックは、用途に応じて、高帯域幅相互接続ネットワーク（例えば、リングネットワーク）を介して、一部の固定機能ロジック、メモリＩ／Ｏインターフェース、および他の必要なＩ／Ｏロジックと通信する。
【００８９】
図２Ａは、本発明の実施形態による、オンダイ相互接続ネットワーク２０２への接続とレベル２（Ｌ２）キャッシュ２０４のローカルサブセットとを伴う、シングルプロセッサコアのブロック図である。１つの実施形態では、命令デコーダ２００は、パックドデータ命令セット拡張を有するｘ８６命令セットをサポートする。Ｌ１キャッシュ２０６は、スカラユニットおよびベクトルユニットにメモリをキャッシュする低レイテンシアクセスを可能にする。（設計を簡略化するための）１つの実施形態では、スカラユニット２０８およびベクトルユニット２１０は、別個のレジスタセット（それぞれ、スカラレジスタ２１２およびベクトルレジスタ２１４）を使用し、それらの間で転送されたデータはメモリに書き込まれた後、レベル１（Ｌ１）キャッシュ２０６からリードバックされるが、本発明の代替的な実施形態は、異なる手法を使用し得る（例えば、単一のレジスタセットを使用する、またはデータが書き込みおよびリードバックされることなく、２つのレジスタファイル間で転送されることを可能にする通信パスを含む）。
【００９０】
Ｌ２キャッシュのローカルサブセット２０４は、１つのプロセッサコアにつき１つのローカルサブセットとして別個のローカルサブセットに分割される、グローバルＬ２キャッシュの一部である。各プロセッサコアは、プロセッサコア自身のＬ２キャッシュのローカルサブセット２０４へのダイレクトアクセスパスを有する。プロセッサコアによって読み出されたデータは、そのＬ２キャッシュサブセット２０４に格納され、かつ他のプロセッサコアがそれ自身のローカルＬ２キャッシュサブセットにアクセスするのと並列に迅速にアクセス可能である。プロセッサコアによって書き込まれたデータは、自身のＬ２キャッシュサブセット２０４に格納され、必要な場合、他のサブセットからフラッシュされる。リングネットワークは、共有データのためのコヒーレンシを確保する。リングネットワークは、プロセッサコア、Ｌ２キャッシュ、および他の論理ブロックなどのエージェントが、チップ内で互いに通信することを可能にするように双方向である。各リングデータパスは、一方向当たり１０１２ビット幅である。
【００９１】
図２Ｂは、本発明の実施形態による、図２Ａのプロセッサコアの一部の拡大図である。図２Ｂは、Ｌ１キャッシュ２０６のＬ１データキャッシュ２０６Ａ部分、ならびにベクトルユニット２１０およびベクトルレジスタ２１４に関するさらなる詳細を含む。具体的には、ベクトルユニット２１０は、１６ビット幅ベクトル処理ユニット（ＶＰＵ）（１６ビット幅ＡＬＵ  ２２８を参照）であり、整数命令、単精度浮動命令、および倍精度浮動命令のうちの１つまたは複数を実行する。ＶＰＵは、スウィズルユニット２２０を用いるレジスタ入力のスウィズル、数値変換ユニット２２２Ａ〜Ｂを用いる数値変換、およびメモリ入力での複製ユニット２２４を用いる複製をサポートする。書き込みマスクレジスタ２２６は、結果として得られるベクトル書き込みのプレディケートを可能にする。
【００９２】
具体的な例示的なアウトオブオーダコアアーキテクチャ
図３は、本発明の実施形態による、プロセッサに含まれ得る例示的なアウトオブオーダ発行／実行プロセッサコアのブロック図である。図３では、プロセッサコア３００は、フロントエンドユニット３１０と、整数ユニット３２０と、ＦＰユニット３３０と、ロードストアユニット３４０と、レベル２（Ｌ２）キャッシュユニット３５０と、を備える。図３は、例示の目的で提示したものであり、そのため、本発明の実施形態により可能となる多くの手法のうちの１つに従って構成および命名された様々なユニットを示す。任意の１つまたは複数の実施形態を、１つまたは複数の方法で例示することができる。図３に示される各ユニットは、実施形態の他の表現における他のユニットに含まれ得る回路および／または構造を含み得る。例えば、フロントエンドユニット３１０は、図４のフェッチユニット４００などのフェッチユニットと、図５のデコードユニット５００などのデコードユニットと、を有するものとして追加的または代替的に図示および説明されてもよいし、整数ユニット３２０、ＦＰユニット３３０、およびロードストアユニット３４０のいずれかまたはすべてが、追加的または代替的に、１つまたは複数の実行ユニットとして別々にまたはまとめて図示および説明されてもよい、などである。さらに、コア３００内の様々なユニットは様々な方法で結合することができ、従って、便宜上、異なる図では、異なるより大きなユニット内にユニットが示されることがあり、例えば、特定のユニットは、第１の図では第１のより大きいユニット内に、第２の図では第２のより大きいユニット内に示される場合がある。
【００９３】
図３では、フロントエンドユニット３１０は、分岐予測ユニット３１１と、マイクロオペレーションキャッシュ（ｏｐキャッシュ）ユニット３１２と、命令キャッシュ（ｉキャッシュ）ユニット３１３と、デコードユニット３１４と、マイクロオペレーション（マイクロｏｐ）キューユニット３１５と、を有する。分岐予測ユニット３１１は、平均分岐遅延を低減するために、分岐ターゲットバッファ（ＢＴＢ）などの分岐予測回路を含み、ｏｐキャッシュユニット３１２およびｉキャッシュユニット３１３に結合されている。ｏｐキャッシュユニット３１２は、命令に関連するマイクロｏｐをキャッシュするｏｐキャッシュを含む。ｉキャッシュ３１３ユニットは、一実施形態では６４Ｋ、４ウェイのｉキャッシュであり得る、命令をキャッシュするためのｉキャッシュを含む。ｉキャッシュユニット３１３は、デコード対象のキャッシュされた命令を提供するためにデコードユニット３１４に結合される。デコードユニット３１４は、命令デコーダなどの、命令をデコードするためのデコード回路を含む。一実施形態では、１クロックサイクルにつき最大４つの命令が、フロントエンドユニット３１０によってフェッチされ、デコードユニット３１４によってデコードされ得る。ｏｐキャッシュユニット３１２およびデコードユニット３１４は、マイクロｏｐキューユニット３１５にそれぞれ結合されて、マイクロｏｐをマイクロｏｐキューユニット３１５にロードするための２つの経路を提供する。マイクロｏｐキュー３１５はマイクロｏｐキューを含み、マイクロｏｐキューは、一実施形態では、１サイクル当たり６つのマイクロｏｐを１つまたは複数の実行ユニットにディスパッチすることができる。
【００９４】
また図３において、整数ユニット３２０は、整数リネーミングユニット３２１と、整数スケジューラユニット３２２Ａ、３２２Ｂ、３２２Ｃ、３２２Ｄ、３２２Ｅ、および３２２Ｆ（まとめて、整数スケジューラユニット３２２）と、整数物理レジスタファイル３２３と、算術論理ユニット（ＡＬＵ）３２４Ａ、３２４Ｂ、３２４Ｃ、および３２４Ｄ（まとめてＡＬＵ  ３２４）と、アドレス生成ユニット（ＡＧＵ）３２５Ａおよび３２５Ｂ（まとめて、ＡＧＵ  ３２５）と、を有する。整数リネーミングユニット３２１は、マイクロｏｐキューユニット３１５に結合されて、ＡＬＵ  ３２４および／またはＡＧＵ  ３２５のうちの１つまたは複数によって全体的または部分的に実行される１つまたは複数のマイクロｏｐを受信する。整数リネーミングユニット３２１はレジスタリネーミング回路を含み、整数スケジューラユニット３２２にも結合され、整数スケジューラユニット３２２は整数物理レジスタファイル３２３に結合されて、整数レジスタリネーミングを提供する。整数スケジューラユニット３２２は、ＡＬＵ  ３２４および／またはＡＧＵ  ３２５のうちの１つまたは複数によって全体的にまたは部分的に実行されるマイクロｏｐをスケジューリングするためのスケジューリング回路を含む。整数物理レジスタファイル３２３は、一実施形態において１６８個の物理整数レジスタを含み得る物理整数レジスタのファイルを含む。ＡＬＵ  ３２４およびＡＧＵ  ３２５のそれぞれが、マイクロｏｐの実行において入力として使用される値を受信する、および／またはマイクロｏｐの実行の出力としての値を提供するために、物理レジスタファイル３２３に結合される。
【００９５】
また図３において、ＦＰユニット３３０は、ＦＰリネーミングユニット３３１と、ＦＰスケジューラユニット３３２と、ＦＰレジスタファイル３３３と、ＦＰ乗算器３３４Ａおよび３３４Ｂ（まとめて、ＦＰ乗算器３３４）と、ＦＰ加算器３３５Ａおよび３３５Ｂ（まとめて、ＦＰ加算器３３５）と、を有する。ＦＰリネーミングユニット３３１は、マイクロｏｐキューユニット３１５に結合されて、ＦＰ乗算器３３４および／またはＦＰ加算器３３５のうちの１つまたは複数によって全体的または部分的に実行される１つまたは複数のマイクロｏｐを受信する。ＦＰリネーミングユニット３３１はレジスタリネーミング回路を含み、ＦＰスケジューラユニット３３２にも結合され、ＦＰスケジューラユニット３３２はＦＰレジスタファイル３３３に結合されて、ＦＰレジスタリネーミングを提供する。ＦＰスケジューラユニット３３２は、ＦＰ乗算器３３４および／またはＦＰ加算器３３５のうちの１つまたは複数によって全体的にまたは部分的に実行されるマイクロｏｐをスケジューリングするためのスケジューリング回路を含む。ＦＰ乗算器３３４およびＦＰ加算器３３５のそれぞれが、マイクロｏｐの実行において入力として使用される値を受信する、および／またはマイクロｏｐの実行の出力としての値を提供するために、ＦＰレジスタファイル３３３に結合される。
【００９６】
また図３において、ロードストアユニット３４０は、ロードストアキューユニット３４１と、データキャッシュ（ｄキャッシュ）ユニット３４２と、を有する。ロードストアキューユニット３４１は、ロードオペレーションおよび／またはストアオペレーションのためのメモリアドレスを受信するためにＡＧＵ  ３２５に結合された、任意の数のロードキューおよび／またはストアキューを含むことができ、一実施形態では１クロックサイクル当たり２回のロードおよび１回のストアを提供する。ｄキャッシュユニット３４２は、一実施形態において、マイクロｏｐの実行によって生成され、マイクロｏｐの実行に使用されるデータを受信して提供するために、整数物理レジスタファイル３２３、ＦＰレジスタファイル３３３、およびロードストアキューユニット３４１に結合された、一実施形態では３２Ｋ、８ウェイのレベル１（Ｌ１）ｄキャッシュであり得る、データをキャッシュするためのｄキャッシュを含む。
【００９７】
また図３において、Ｌ２キャッシュユニット３５０は、一実施形態では５１２Ｋ、８ウェイのキャッシュであり得る、命令およびデータをキャッシュするためのＬ２キャッシュを含む。
【００９８】
図４は、本発明の実施形態による、図３のコア３００などのプロセッサコアおよび／またはプロセッサに含まれ得る例示的なフェッチユニットのブロック図である。図４において、フェッチユニット４００は、次プログラムカウント（ＰＣ）ユニット４１０と、トランスレーションルックアサイドバッファ（ＴＬＢ）ユニット４２０と、ハッシュパーセプトロンユニット４３０と、ＢＴＢリターンスタック間接ターゲットアレイ（ＩＴＡ）ユニット４４０と、物理要求キューユニット４５０と、マイクロタグユニット４６０と、ｉキャッシュユニット４７０と、を含む。
【００９９】
図５は、本発明の実施形態による、図３のコア３００などのプロセッサコアおよび／またはプロセッサに含まれ得る例示的なデコードユニットのブロック図である。図５において、デコードユニット５００は、命令バイトバッファユニット５１０と、ピックユニット５２０と、デコードユニット５３０と、ｏｐキャッシュユニット５４０と、マイクロｏｐキューユニット５５０と、マイクロコード読み出し専用メモリ（ＲＯＭ）ユニット５６０と、スタックエンジンメモリファイル（ｍｅｍｆｉｌｅ）ユニット５７０と、ディスパッチユニット５８０と、を含む。
【０１００】
図６は、本発明の実施形態による、図３のコア３００などのプロセッサコアおよび／またはプロセッサに含まれ得る例示的な整数実行ユニットのブロック図である。図６において、整数実行ユニット６００は、マップユニット６１０と、リタイアキューユニット６２０と、算術論理キュー（ＡＬＱ）ユニット６３０Ａ、６３０Ｂ、６３０Ｃ、および６３０Ｄ（まとめて、ＡＬＱ  ６３０）と、アドレス生成キュー（ＡＧＱ）ユニット６４０Ａおよび６４０Ｂ（まとめて、ＡＧＱ  ６４０）と、物理レジスタファイルユニット６５０と、転送マルチプレクサ（ｍｕｘ）ユニット６６０と、ＡＬＵ  ６７０Ａ、６７０Ｂ、６７０Ｃ、および６７０Ｄ（まとめて、ＡＬＵ  ６７０）と、ＡＧＵ  ６８０Ａおよび６８０Ｂ（まとめて、ＡＧＵ  ６８０）と、ロードストアユニット６９０と、を含む。
【０１０１】
図７は、本発明の実施形態による、図３のコア３００などのプロセッサコアまたはプロセッサに含まれ得る例示的なＦＰ実行ユニットのブロック図である。図７において、ＦＰ実行ユニット７００は、非スケジューリング可能マイクロｏｐキューユニット７１０と、スケジューリング可能マイクロｏｐキューユニット７２０と、リタイアキューユニット７３０と、ＦＰ変換ユニット７４０と、ＦＰ物理レジスタファイル７５０と、転送ｍｕｘユニット７６０と、ＦＰ乗算器７７０Ａおよび７７０Ｂ（まとめて、ＦＰ乗算器７７０）と、ＦＰ加算器７８０Ａおよび７８０Ｂ（まとめて、ＦＰ加算器７８０）と、を含む。
【０１０２】
図８は、本発明の実施形態による、図３のコア３００などのプロセッサコアまたはプロセッサに含まれ得る例示的なロード／ストアユニットのブロック図である。図８において、ロード／ストアユニット８００は、ロードキューユニット８１０と、ロードパイプピックユニット８１１Ａおよび８１１Ｂ（まとめて、ロードピックユニット８１１）と、ＴＬＢユニット８１２Ａおよび８１２Ｂ（まとめて、ＴＬＢユニット８１２）と、データパイプユニット８１３Ａおよび８１３Ｂ（まとめて、データパイプユニット８１３）と、ストアキューユニット８２０と、プリフェッチユニット８２１と、ストアパイプピックユニット８２２と、ストアパイプユニット８２３と、ストアコミットユニット８２４と、Ｌ１／Ｌ２  ＴＬＢおよびデータキャッシュタグアレイ８３０と、Ｌ１データキャッシュ８４０と、メモリアドレスバッファ８５０と、書き込み結合バッファ８６０と、を含む。
【０１０３】
図９は、本発明の実施形態による、プロセッサにおけるＳＭＴをサポートする、図３のコア３００などの例示的なアウトオブオーダ発行／実行プロセッサコアのブロック図である。図９において、プロセッサコア９００は、フロントエンドユニット９１０と、整数ユニット９２０と、ＦＰユニット９３０と、ロードストアユニット９４０と、Ｌ２キャッシュユニット９５０と、リタイアユニット９６０と、を備える。フロントエンドユニット９１０は、分岐予測ユニット９１１と、ｏｐキャッシュユニット９１２と、ｉキャッシュユニット９１３と、デコードユニット９１４と、マイクロｏｐキューユニット９１５と、命令ＴＬＢユニット９１６と、を有する。整数ユニット９２０は、整数リネーミングユニット９２１と、整数スケジューラユニット９２２と、整数物理レジスタファイル９２３と、ＡＬＵ  ９２４と、ＡＧＵ  ９２５と、を有する。ＦＰユニット９３０は、ＦＰリネーミングユニット９３１と、ＦＰスケジューラユニット９３２と、ＦＰレジスタファイル９３３と、ＦＰ乗算器９３４Ａおよび９３４Ｂ（まとめて、ＦＰ乗算器９３４）と、ＦＰ加算器９３５Ａおよび９３５Ｂ（まとめて、ＦＰ加算器９３５）と、を有する。ロードストアユニット９４０は、ロードキューユニット９４１Ａおよびストアキューユニット９４１Ｂ（まとめて、ロードストアキューユニット９４１）と、データキャッシュ（ｄキャッシュ）ユニット９４２と、ＴＬＢユニット９４３と、を有する。リタイアユニット９６０はリタイアキューを有する。
【０１０４】
ＳＭＴ機能
本発明の実施形態によるプロセッサコアは、ＳＭＴをサポートするための様々な機能を含み得る。いくつかのそのような機能は、以下の非限定的な例を用いて別々に説明されるが、実施形態はそのような機能の任意の組み合わせを含み得る。
【０１０５】
リソースの静的分割
一部の例示的な実施形態によれば、プロセッサコアは、ＳＭＴ静的分割機能をサポートし得る。スレッドは、同時マルチスレッディングパイプラインにおいて静的に共有される使用可能なリソースに割り当てられ得る。一部の実施形態では、パフォーマンスおよび効率を向上させるために、パターンベースのアルゴリズムなどの技法を用いてスレッドを使用可能なリソースに割り当てることができる。一部の実施形態では、この機能は、静的に共有されたリソースについてスレッド間でより効率的なリソース共有を提供することによってコンピュータシステムを改善することができる。この機能はまた、本来であればＳＭＴ静的分割のために未使用のままである、使用可能なリソースを使用し得る。
【０１０６】
例えば、パイプライン内のリソースを、２つのスレッド間で、例えば５０％−５０％で、静的に共有して、両方のスレッドに等しいリソースを提供してもよい。一部の実施形態では、例えばワークロードパターンに基づいて、異なるパーセンテージの使用可能なリソースを各スレッドに割り当てることができる。例えば、一方のスレッドが他方のスレッドよりも長時間ストールしていて、他方のスレッドに使用可能な空のエントリがある場合は、静的に共有されたリソースにおいて使用可能なエントリを空のままにするのではなく、ストールしているスレッドに割り当てることができる。
【０１０７】
一部の実施形態では、複数のスレッドが同様のパターンを有することができる。そのような場合、スレッドどうしが同順位の場合に、優先順位方式を使用してリソースを割り当てることができる。同順位における順位付けは、例えば、ランダムな選択、低い番号のスレッドを選択すること、高い番号のスレッドを選択すること、および／または交互にスレッドを選択することによって実行されてもよい。
【０１０８】
図１０は、一部の実施形態による、プロセッサに含まれ得るＳＭＴ静的分割機能を示すブロック図である。ＳＭＴ静的分割機能は、例示的な実施形態によるパターン検出ブロック１００１を含み得る。第１のリソースおよび第２のリソースは、スレッドＴ０およびスレッドＴ１に静的に割り当てられ得る。ルックアップパターンベーステーブルが、スレッドＴ１が長いストール時間を有すると判定し得る。すると、パターン検出ブロックは、パターン入力に基づいて、静的に割り当てられたリソースを調整できる。例えば、Ｔ１に静的に割り当てられていた第２のリソースをＴ０に割り当てることができる。
【０１０９】
一部の実施形態では、動的分割が、命令トランスレーションルックアサイドバッファ（ＩＴＬＢ）などの他の静的に分割されたリソースに適用され得る。
【０１１０】
図１１は、一部の実施形態による、プロセッサによって実行され得るＳＭＴ静的分割機能のための方法を示す流れ図である。一部の実施形態では、本方法は、ボックス１１０１に示すように、パイプライン内の静的に共有されたリソースについてスレッドのストールなどのパターンを検出するステップを含み得る。本方法は、ボックス１１０２に示すように、共有を調整すること（例えば、５０−５０での共有）をさらに含み得る。本方法の調整するステップは、例えば、ストールの長さまたは他のなんらかの同様のイベントに基づき得る。
【０１１１】
一部の実施形態のまとめ
一実施形態は、第１および第２の静的に分割されたリソースのうちの少なくとも一方に関するパターンを検出し、第１および第２の静的に分割されたリソースのうちの少なくとも一方の割り当てを調整する、ように構成されたプロセッサを含み得る。
【０１１２】
一部の実施形態では、以下のうちの１つまたは複数が当てはまる。パイプラインの第１および第２の静的に分割されたリソースは、同時マルチスレッディングパイプラインのリソースであり得る。第１および第２の静的に分割されたリソースは、第１および第２のスレッドの間で割り当てられてもよい。プロセッサは、パターンベースのアルゴリズムに基づいて、第１および第２のリソースを割り当てるようにさらに構成され得る。プロセッサは、１つまたは複数のワークロードパターンに基づいて、第１および第２のリソースのうちの少なくとも一方を割り当てるようにさらに構成され得る。プロセッサは、第１および第２のスレッドのうちの少なくとも一方が他方よりも長い期間ストールしているか否かの判定に基づいて、第１および第２のリソースのうちの少なくとも一方を割り当てるようにさらに構成され得る。プロセッサは、使用可能な第１および第２のリソースのうちの少なくとも一方に関連付けられた空のエントリがあるか否かの判定に基づいて、第１および第２のリソースのうちの少なくとも一方を割り当て、使用可能な第１および第２のリソースのうちの少なくとも一方に第１および第２のスレッドのうちの少なくとも一方を割り当てる、ようにさらに構成され得る。プロセッサは、優先順位方式に基づいて、第１および第２のリソースのうちの少なくとも一方を割り当てるようにさらに構成され得る。プロセッサは、ルックアップパターンベーステーブルに基づいて、ストールが発生したか否かを判定するようにさらに構成され得る。第１および第２の静的に分割されたリソースは、命令トランスレーションルックアサイドバッファ（ＩＴＬＢ）のリソースであり得る。
【０１１３】
一実施形態は、第１および第２の静的に分割されたリソースに関するパターンのうちの少なくとも一方を検出するステップと、第１および第２の静的に分割されたリソースのうちの少なくとも一方の割り当てを調整するステップと、を含む方法を含み得る。
【０１１４】
一部の実施形態では、以下のうちの１つまたは複数が当てはまる。第１および第２の静的に分割されたリソースは、同時マルチスレッディングパイプラインのリソースであり得る。第１および第２の静的に分割されたリソースは、第１および第２のスレッドの間で割り当てられてもよい。本方法は、パターンベースのアルゴリズムに基づいて、第１および第２のリソースを割り当てるステップをさらに含み得る。本方法は、１つまたは複数のワークロードパターンに基づいて、第１および第２のリソースのうちの少なくとも一方を割り当てるステップをさらに含み得る。本方法は、第１および第２のスレッドのうちの少なくとも一方が他方よりも長い期間ストールしているか否かの判定に基づいて、第１および第２のリソースのうちの少なくとも一方を割り当てるステップをさらに含み得る。本方法は、使用可能な第１および第２のリソースのうちの少なくとも一方に関連付けられた空のエントリがあるか否かの判定に基づいて、第１および第２のリソースのうちの少なくとも一方を割り当てるステップと、使用可能な第１および第２のリソースのうちの少なくとも一方に第１および第２のスレッドのうちの少なくとも一方を割り当てるステップと、をさらに含み得る。本方法は、優先順位方式に基づいて、第１および第２のリソースのうちの少なくとも一方を割り当てるステップをさらに含み得る。本方法は、ルックアップパターンベーステーブルに基づいて、ストールが発生したか否かを判定するステップをさらに含み得る。第１および第２の静的に分割されたリソースは、命令トランスレーションルックアサイドバッファ（ＩＴＬＢ）のリソースであり得る。
【０１１５】
一実施形態は、プロセッサによって実行された場合にプロセッサに方法を実行させる少なくとも１つの命令を格納する非一時的機械可読媒体であって、方法が、第１および第２の静的に分割されたリソースに関するパターンのうちの少なくとも一方を検出するステップと、第１および第２の静的に分割されたリソースのうちの少なくとも一方の割り当てを調整するステップと、を含む、非一時的機械可読媒体を含み得る。
【０１１６】
一部の実施形態では、以下のうちの１つまたは複数が当てはまる。第１および第２の静的に分割されたリソースは、同時マルチスレッディングパイプラインのリソースであり得る。第１および第２の静的に分割されたリソースは、第１および第２のスレッドの間で割り当てられてもよい。本方法は、パターンベースのアルゴリズムに基づいて、第１および第２のリソースを割り当てるステップをさらに含み得る。本方法は、１つまたは複数のワークロードパターンに基づいて、第１および第２のリソースのうちの少なくとも一方を割り当てるステップをさらに含み得る。本方法は、第１および第２のスレッドのうちの少なくとも一方が他方よりも長い期間ストールしているか否かの判定に基づいて、第１および第２のリソースのうちの少なくとも一方を割り当てるステップをさらに含み得る。本方法は、使用可能な第１および第２のリソースのうちの少なくとも一方に関連付けられた空のエントリがあるか否かの判定に基づいて、第１および第２のリソースのうちの少なくとも一方を割り当てるステップと、使用可能な第１および第２のリソースのうちの少なくとも一方に第１および第２のスレッドのうちの少なくとも一方を割り当てるステップと、をさらに含み得る。本方法は、優先順位方式に基づいて、第１および第２のリソースのうちの少なくとも一方を割り当てるステップをさらに含み得る。本方法は、ルックアップパターンベーステーブルに基づいて、ストールが発生したか否かを判定するステップをさらに含み得る。第１および第２の静的に分割されたリソースは、命令トランスレーションルックアサイドバッファ（ＩＴＬＢ）のリソースであり得る。
【０１１７】
一実施形態は、メモリとプロセッサとを有するシステムであって、プロセッサが、第１および第２の静的に分割されたリソースのうちの少なくとも一方に関するパターンを検出し、第１および第２の静的に分割されたリソースのうちの少なくとも一方の割り当てを調整する、ように構成される、システムを含み得る。
【０１１８】
一部の実施形態では、以下のうちの１つまたは複数が当てはまる。第１および第２の静的に分割されたリソースは、同時マルチスレッディングパイプラインのリソースであり得る。第１および第２の静的に分割されたリソースは、第１および第２のスレッドの間で割り当てられてもよい。プロセッサは、パターンベースのアルゴリズムに基づいて、第１および第２のリソースを割り当てるようにさらに構成され得る。プロセッサは、１つまたは複数のワークロードパターンに基づいて、第１および第２のリソースのうちの少なくとも一方を割り当てるようにさらに構成され得る。プロセッサは、第１および第２のスレッドのうちの少なくとも一方が他方よりも長い期間ストールしているか否かの判定に基づいて、第１および第２のリソースのうちの少なくとも一方を割り当てるようにさらに構成され得る。プロセッサは、使用可能な第１および第２のリソースのうちの少なくとも一方に関連付けられた空のエントリがあるか否かの判定に基づいて、第１および第２のリソースのうちの少なくとも一方を割り当て、使用可能な第１および第２のリソースのうちの少なくとも一方に第１および第２のスレッドのうちの少なくとも一方を割り当てる、ようにさらに構成され得る。プロセッサは、優先順位方式に基づいて、第１および第２のリソースのうちの少なくとも一方を割り当てるようにさらに構成され得る。プロセッサは、ルックアップパターンベーステーブルに基づいて、ストールが発生したか否かを判定するようにさらに構成され得る。第１および第２の静的に分割されたリソースは、命令トランスレーションルックアサイドバッファ（ＩＴＬＢ）のリソースであり得る。
【０１１９】
リソースの競合的共有
本発明の実施形態によれば、プロセッサコアは、リソースの競合的共有によってＳＭＴをサポートすることができる。コア内の回路、構造、または他のリソースは、スレッドが優先順位を争うというポリシーに基づいて、複数のスレッドによって共有され得る。図９の実施形態では、競合ポリシーに基づいて、スレッドどうしまたはスレッド間で以下のリソース、すなわち、分岐予測ユニット９１１と、ｏｐキャッシュユニット９１２と、ｉキャッシュユニット９１３と、デコードユニット９１４と、命令ＴＬＢユニット９１６と、整数リネーミングユニット９２１と、整数スケジューラユニット９２２と、整数物理レジスタファイル９２３と、ＡＬＵ  ９２４と、ＡＧＵ  ９２５と、ＦＰリネーミングユニット９３１と、ＦＰスケジューラユニット９３２と、ＦＰレジスタファイル９３３と、ＦＰ乗算器９３４Ａおよび９３４Ｂと、ＦＰ加算器９３５Ａおよび９３５Ｂと、ロードキューユニット９４１Ａと、ｄキャッシュユニット９４２と、ＴＬＢユニット９４３と、のそれぞれを共有することができる。
【０１２０】
整数リネーミングユニット９２１、整数スケジューラユニット９２２、ＦＰリネーミングユニット９３１、ＦＰスケジューラユニット９３２、またはロードキューユニット９４１Ａ内のバッファなどのこれらのリソースの一部は、エントリ、サブユニット、または別々にスレッドに割り当てられ得る他の部分を有し得る。便宜上、このタイプのリソースは、分割可能リソースを呼ぶことがあり、このタイプの割り当てを部分割り当てと呼ぶことがある。ＡＬＵ  ９２４の各個々のＡＬＵ、ＡＧＵ  ９２５の各個々のＡＧＵ、ＦＰ乗算器９３４Ａ、ＦＰ乗算器９３４Ｂ、ＦＰ加算器９３５Ａ、またはＦＰ加算器９３５Ｂなどの他のものは、特定のクロックサイクル、オペレーションを完了するための連続したクロックサイクルセット、またはオペレーションの他の時間または期間に対して完全に割り当てられるだけでよい。便宜上、このタイプのリソースを分割不可能リソースと呼ぶことがあり、このタイプの割り当てを完全割り当てと呼ぶことがある。
【０１２１】
図１２は、本発明の実施形態による、プロセッサに含まれ得るリソースアロケータ１２００を示すブロック図である。リソースアロケータ１２００は、コア回路、構造、ユニット、もしくはリソース、またはそれらの任意の部分を特定のスレッドに割り当てるための回路、構造、および／またはハードウェアを含み得る。実施形態では、リソースアロケータ１２００は、単一のリソースおよび／または複数のリソースを割り当てるように実装され得る。いずれの場合も、プロセッサまたはプロセッサコアは、リソースアロケータ１２００の１つまたは複数の実施形態の複数の例を含み、それぞれが、任意の１つまたは複数のリソースを割り当てるためであり、それぞれが、図１２に示されるブロックのうちの任意の１つまたは複数を含み、それぞれが、任意の１つまたは複数のリソース割り当てポリシー、またはリソース割り当てポリシーの組み合わせを実装するためであり得る。
【０１２２】
リソースアロケータ１２００は、トラッカ回路１２１０と、ポリシー回路１２２０と、決定回路１２３０と、アロケータ回路１２４０と、を含み得る。トラッカ回路は、パフォーマンス履歴回路１２１２と、使用履歴回路１２１４と、スレッド状態回路１２１６と、のうちの１つまたは複数を含み得る。ポリシー回路１２２０は、電力ポリシー回路１２２２と、公平性ポリシー回路１２２４と、パフォーマンス保証ポリシー回路１２２６と、スループットポリシー回路１２２８と、のうちの１つまたは複数を含み得る。実施形態は、割り当てられるリソースの種類および数、ならびに所望のポリシーに従って、様々な方法でこれらの回路のそれぞれを含み、組み合わせ、および／または実装することができる。
【０１２３】
パフォーマンス履歴回路１２１２は、１つまたは複数の方法でスレッドのパフォーマンスを監視、追跡、記録、および／または報告するための回路、構造、および／またはハードウェアを含み得る。一実施形態では、パフォーマンス履歴回路１２１２は、スレッドごとに１つまたは複数のパフォーマンスの尺度、例えばある時間または期間の尺度ごとにリタイアされた命令などをカウントするために、スレッドごとに１つまたは複数のハードウェアカウンタ１２１２Ａを含み得る。例えば、時間または期間の尺度は、クロックサイクルのウィンドウであり得、（例えば、文字「Ｎ」によって表される）ウィンドウのサイズは、固定（例えば、ハードワイヤード）、（例えば、ハードウェアまたはファームウェアによって）構成可能、および／または（例えば、ソフトウェアによって）プログラム可能であり得る。一実施形態では、Ｎは１０２４であり得る。
【０１２４】
パフォーマンス履歴回路１２１２はまた、カウンタ１２１２Ａによって測定された、スレッドのパフォーマンスを１つまたは複数の他のスレッドと比較するための１つまたは複数のハードウェア比較器１２１２Ｂを含み得る。例えば、Ｎ回のクロックサイクルの各ウィンドウの終わりに、ハードウェア比較器１２１２Ｂは、ウィンドウの間に第１のスレッドによってリタイアされた命令の数を第２のスレッドによってリタイアされた命令の数と比較することができ、カウンタ１２１２Ａは、次のウィンドウのためにリセットされ得る。その次のウィンドウの間、前のウィンドウからの比較の結果は、後述するように、ポリシー回路１２２０および／または決定回路１２３０によって使用され得る。実施形態では、比較結果は、スレッドのランク付け（例えば、どのスレッドがより多くの命令をリタイアしたか）であり得、比較結果は、比率（例えば、第２のスレッドによってリタイアされた命令の数に対する、第１のスレッドによってリタイアされた命令の数の比率の計算または近似計算）、および／または他の任意の測定値または計算であり得る。
【０１２５】
実施形態は、スレッドごとに複数のカウンタを含み得る。例えば、スレッドごとに２つの別々のカウンタ、すなわち、「電力を大量消費する」と識別された命令を追跡するための第１のカウンタ（例えば、その実行は、通常、他の命令よりも多くの電力を消費する）と、他の（すなわち、電力を消費しない）命令をカウントするための第２のカウンタと、を設けることができる。例えば、ＡＶＸ−５１２  ＦＭＡ命令（下記で定義）は、電力を大量消費するものとして識別され、別のカウンタを使用して（場合によっては、他の電力を大量消費する命令と共に）追跡され得る。
【０１２６】
使用履歴回路１２１４は、スレッドによるリソースの使用を監視、追跡、記録、および／または報告するための回路、構造、および／またはハードウェアを含み得る。一実施形態では、使用履歴回路１２１４は、スレッドごとにリソースの使用量をカウントするための１つまたは複数のハードウェアカウンタ１２１４Ａと、スレッド間でリソースの使用量を比較するための１つまたは複数のハードウェア比較器１２１４Ｂと、を含み得る。カウンタ１２１４Ａおよび／または比較器１２１４Ｂからの１つまたは複数の結果は、後述するように、ポリシー回路１２２０および／または決定回路１２３０によって使用され得る。
【０１２７】
例えば、バッファなどの分割可能なリソースの場合、カウンタは、スレッドによって占有されているエントリの数をカウントすることができる。さらなる計算および／または割り当ての決定に使用されるカウントは、任意の時点で報告または直接使用される現在のカウントであり得る、および／またはウィンドウ（例えば、上記のようなサイズＮのウィンドウ）にわたって平均された平均カウントであり得る。分割不可能なリソースの場合、さらなる計算および／または割り当ての決定に使用されるカウントは、時間平均カウントまたは時間加重カウントであり得る（例えば、ある時間ウィンドウ内でスレッドがリソースを使用した回数であり、カウントが各時間ウィンドウの終わりでリセットされ得る、またはカウントが各時間ウィンドウの終わりに（２のべき乗で除算されるように）右にシフトされ得る）。これらのカウントのいずれかに基づく結果は、カウント自体、スレッドごとのカウントのランキング、および／またはスレッド間のカウントの比率などである。
【０１２８】
スレッド状態回路１２１６は、スレッドの状態を監視、追跡、記録、および／または報告するための回路、構造、および／またはハードウェアを含み得る。例えば、スレッド状態回路１２１６は、長いレイテンシのＬ２／Ｌ３または他のキャッシュミスなどに起因してスレッドが現在ストールしているか否かを報告することができる。
【０１２９】
トラッカ回路１２１０によって報告された履歴情報および現在の情報は、ポリシー回路１２２０によって指定されたポリシーに従って、リソース割り当ての計算および決定において使用され得る。これらのポリシーは、電力消費、公平性、最低保証パフォーマンス、およびスループットの考慮自己を含む、任意の優先順位による、任意の組み合わせの任意の種類のポリシーを含み得る。
【０１３０】
電力ポリシー回路１２２２は、１つまたは複数の電力ポリシーを実装するため、かつ／または１つまたは複数のポリシーに基づいてスレッドを優先もしくは選択するための回路、構造、および／またはハードウェアを含み得る。これらのポリシーは、任意の優先順位で、任意の組み合わせの任意の種類の電力ポリシーを含み得る。例えば、電力を大量消費する命令の使用が少ないスレッドまたは進行が遅いスレッドを、優先または選択することができる。
【０１３１】
公平性ポリシー回路１２２４は、１つまたは複数の公平性ポリシーを実装するため、かつ／または１つまたは複数のポリシーに基づいてスレッドを優先もしくは選択するための回路、構造、および／またはハードウェアを含み得る。例えば、最近のパフォーマンスが低い、分割可能なリソースの占有率が低い、および／または分割不可能なリソースの最近の使用量が少ないスレッドを優先または選択することができる。
【０１３２】
パフォーマンス保証ポリシー回路１２２６は、１つもしくは複数の最低保証パフォーマンスポリシーを実装するため、かつ／または１つまたは複数のポリシーに基づいてスレッドを優先もしくは選択するための回路、構造、および／またはハードウェアを含み得る。例えば、特定の最小閾値未満で進行しているスレッドは、パフォーマンス保証ポリシーに基づいて優先または選択され得る。
【０１３３】
スループットポリシー回路１２２８は、１つまたは複数のスループットポリシーを実装するため、かつ／または１つもしくは複数のポリシーに基づいてスレッドを優先もしくは選択するための回路、構造、および／またはハードウェアを含み得る。例えば、他のスレッドよりも相対的に多いまたは速い進行をしているスレッドが優先または選択され得る。
【０１３４】
電力ポリシー回路１２２２、公平性ポリシー回路１２２４、パフォーマンス保証ポリシー回路１２２６、スループットポリシー回路１２２８、および／または他の任意のポリシー回路のいずれかまたはすべては、ポリシーを有効にする、修正する（例えば、ポリシーまたはポリシーによって使用される１つまたは複数の基準もしくは尺度の重要性を強める、または弱める）、または他の方法でポリシーに動的に影響する、情報および／または基準を格納する個々の格納場所またはレジスタを含み得る。
実施形態は、追加的または代替的に、この情報のための中央または共有の格納場所またはレジスタを含み得る。個々またはグループの格納場所のうちの任意の１つまたは複数が、ポリシーレジスタ１２２０Ａとして表される。実施形態では、任意のそのような格納場所またはレジスタは、（例えば、ハードウェアまたはファームウェアによって）構成可能または（例えば、ソフトウェアによって）プログラム可能であり得る。
【０１３５】
決定回路１２３０は、トラッカ回路１２１０からの情報、結果、および／または信号、ならびにポリシー回路１２２０からの情報、基準、および／または信号を受信して、使用、重み付け、優先順位付け、フィルタリング、比較、結合、オーバーライド、または他の方法で処理して、リソースを割り当てるスレッドを選択することになり得る、および／またはその決定に関する１つまたは複数の指示または信号を選択することになり得る情報を生成するための回路、構造、および／またはハードウェアを含み得る。例えば、スループットポリシーおよび最低保証パフォーマンスを含む実施形態では、スループットポリシーは、第１のスレッドを優先することができるが、決定回路１２３０は、その優先をオーバーライドし、第２のスレッドを選択して、第２のスレッドの最低保証パフォーマンスを満たすのを助け得る。実施形態では、リソースアロケータ１２００は、決定回路１２３０の１つまたは複数の実施形態の複数の例を含むことができ、それぞれが、任意のリソースまたはリソースのグループに関し、それぞれが、任意の１つまたは複数のリソース割り当てポリシーまたはリソース割り当てポリシーの組み合わせを実装するためであり、それぞれが、後述の任意の１つまたは複数の手法または手法の組み合わせを実装するためであり、それぞれが、任意の手法または手法の組み合わせに従ってスレッドを選択するように構成またはプログラムされ得る（例えば、ポリシー回路１２２０の別個の各ポリシー回路から受信した情報に異なる重みを割り当ててもよい）。
【０１３６】
分割不可能なリソースを含む実施形態では、決定回路１２３０は、分割不可能なリソースの動的完全割り当てに関してどのスレッドを優先するかを決定し得る。分割可能なリソースを含む実施形態では、決定回路１２３０は、分割可能なリソースおよび／もしくは分割可能なリソースの一部の動的部分割り当てに関してどのスレッドを優先するか、ならびに／または分割可能なリソースのうちのどのくらいを（例えば、バッファエントリの数）スレッドに割り当てるかを決定し得る。
【０１３７】
一実施形態では、決定回路１２３０は、１つまたは複数の情報、決定結果、インジケータ、および／または信号を、例えば、アロケータ回路１２４０によってアクセス可能な１つまたは複数の格納場所に格納すること、および／またはアロケータ回路１２４０に直接送信することによって、生成または提供することができ、これにより、任意の数の他のスレッドよりも優先される単一のスレッドを識別することができる、または２つ以上のスレッドの優先順位ランキングを指定することができる。
【０１３８】
アロケータ回路１２４０は、決定回路１２３０からの情報、決定結果、インジケータ、および／または信号を受信して、例えば第１のスレッドが第２のスレッドよりも優先されるという決定回路１２３０からの決定に応答することによって、リソース割り当て決定に対して、作用、確定、および／または実施して、リソース（例えば、リソース１２５０）の割り当ての全部または一部をそのスレッドに向けるように１つまたは複数の信号を送信するための回路、構造、および／またはハードウェアを含み得る。そうするために、アロケータ回路１２４０は、特定のスレッドが分割不可能なリソースを使用することを可能にする、または分割可能なリソースの１つまたは複数の部分を使用することを可能にする、ディスパッチまたは他の回路に、１つまたは複数の信号（例えば、「ｇｏ」信号１２４０Ｃ）を送信し得る。
【０１３９】
実施形態では、アロケータ回路１２４０はまた、リソースを使用するための１つまたは複数の要求（例えば、要求１２４０Ａおよび１２４０Ｂ）を受信し得る。要求は、信号、ならびに／あるいはスレッドから、リソースから、および／またはスレッドもしくはリソースに関連する任意の種類のディスパッチ回路からの任意の他の種類の指示であり得る。実施形態では、アロケータ回路１２４０は、例えば決定回路１２３０からの情報、決定結果、インジケータ、および／または信号を使用して、スレッド要求どうしまたはスレッド要求間で選択または調停して、どのスレッドにリソースを割り当てるかを決定することができる。
【０１４０】
実施形態では、アロケータ回路１２４０は、追加の情報または制約に従うかまたはそれらに基づいて、決定回路１２３０からの割り当て決定に作用するための回路、構造、および／またはハードウェアを含み得る。例えば、アロケータ回路１２４０は、各スレッドに専用である分割可能なリソースの部分の数（例えば、バッファのエントリの数）を示す、スレッドごとに１つのレジスタを有する、固定、構成可能、またはプログラム可能な格納場所またはレジスタのセット１２４２と、各スレッドによって現在使用されている各部分の数を追跡するための、スレッドごとに１つのカウンタのセット１２４４と、スレッドがその全割り当てを使用しているか否かをチェックするための、スレッドごとに１つの比較器のセット１２４６と、を含み得る。アロケータ回路１２４０は、比較器１２４６からの結果を使用して、決定回路１２３０からの割り当て決定を受け入れるか拒否することができる。代替的または追加的に、一実施形態は、どのスレッド（または複数のスレッド）がリソースのその部分を使用することを許可されているかを示すために、分割可能なリソースの各部分（例えば、バッファ内の各エントリのビットまたはフィールド）についてインジケータのための格納場所を含むことができ、アロケータ回路１２４０は、決定回路１２３０から割り当て決定を受け入れるか拒否するために、格納されたインジケータを使用することができる。
【０１４１】
一部の実施形態のまとめ
本発明の一実施形態は、トラッカ回路、ポリシー回路、決定回路、およびアロケータ回路を含む、リソースアロケータおよびリソースを備えるプロセッサを含み得る。トラッカ回路は、リソースのパフォーマンス履歴、リソースの使用履歴、およびスレッド状態のうちの少なくとも１つを追跡することができる。ポリシー回路は、リソース割り当てポリシーを実施するためのポリシー情報を提供することができる。決定回路は、トラッカ回路の出力およびポリシー情報に基づいて、スレッドを選択することができる。アロケータ回路は、決定回路の出力を使用して、リソースをスレッドに割り当てることができる。
【０１４２】
リソースのアルゴリズム的な競合的共有
プロセッサコアは、実施形態による、アルゴリズム的なＳＭＴ機能をサポートし得る。一部の実施形態では、この機能は、パイプライン内で競合的に共有されている使用可能なリソースへのスレッド割り当ての問題を解決する。一部の実施形態では、この問題は優先順位アルゴリズムを使用して解決される。一部の実施形態では、パイプライン内の分岐予測ブロックは、競合的に共有されてもよく、効率的なエントリ割り当てのために優先順位アルゴリズムを使用することができる。一部の実施形態では、優先順位アルゴリズムは、ハードウェアおよび／またはソフトウェアで実装することができる。一部の実施形態では、スレッド割り当ては、２つ以上のスレッドを用いて実行され得る。一部の実施形態では、スレッド割り当ては、最も効率的なスレッドをパイプライン内の使用可能なリソースに割り当てて、最も高いクロック当たりの命令数（ＩＰＣ）および／またはパイプラインスループットを達成することができる。一部の実施形態では、この機能は、使用可能なリソースへのスレッド割り当てを優先順位付けするための最もよく知られているアルゴリズムを提供することができる。スレッドの数が増える、および／またはスレッド間のコンテキストの切り替わりが増えるのに伴って、リソースを効率的に割り当てることで、この機能はさらなる利益をもたらし得る。
【０１４３】
図１３は、実施形態による、プロセッサ１３００に含まれ得るアルゴリズム的なＳＭＴ機能を示すブロック図である。優先順位アルゴリズムハードウェアは、例えば、動的挙動に基づく管理を含み得る。優先順位ハードウェアは、イベント検出ブロック１３０１と、パフォーマンスカウンタフラグブロック１３０２と、デッドロック防止ブロック１３０３と、命令タイプ／クラスブロック１３０４と、のうちの少なくとも１つを含み得る。イベント検出ブロック１３０１は、例えば、削除（ｎｕｋｅ）、クリアの頻度（例えば、ＪＥＣｌｅａｒおよびＣＲＣｌｅａｒ）、ＢＲの頻度、割り込み、およびキャッシュミスなどの１つまたは複数のイベントを検出することができる。パフォーマンスカウンタフラグブロック１３０２は、例えば、以下、すなわち、リタイアされた命令、コードミス、Ｌ２／Ｌ３ミスのうちの１つまたは複数をカウントすることができる。デッドロック防止ブロック１３０３は、デッドロック状態を防止することができる。命令タイプ／クラスブロック１３０４は、例えば、浮動小数点命令をリタイアさせることを可能にし得る。一部の実施形態では、上記のうちの１つまたは複数をソフトウェアおよび／またはファームウェアで実装することができる。加えて、一部の実施形態では、ソフトウェアは、オペレーティングシステム（ＯＳ）および／または仮想マシンマネージャ（ＶＭＭ）が優先順位を設定することを可能にし得る。
【０１４４】
一部の実施形態では、優先順位アルゴリズムは、機械学習などの学習機能を有することができる。学習機能は、よりインテリジェントなスレッド選択を提供することができ、例えば収集されている履歴データおよび／またはパターンに基づいて適応的であり得る。
【０１４５】
一部の実施形態では、同様のイベントを伴う複数のスレッドがあり得る。一部の実施形態では、スレッド間で同順位がある場合に優先順位方式を使用することができる。同順位における順位付けは、例えば、ランダムな選択、低い番号のスレッドを選択すること、高い番号のスレッドを選択すること、および／または交互にスレッドを選択することによって実行されてもよい。
【０１４６】
図１４は、実施形態による、プロセッサによって実行され得るアルゴリズム的なＳＭＴ機能のための方法を示す流れ図である。本方法は、１４０１に示すように、パイプライン内の競合的共有リソースが使用可能か否かを判定するステップを含み得る。本方法は、１４０２に示すように、スレッドに優先順位付けするステップをさらに含み得る。例えば、複数のイベントがある場合、スレッドが優先順位付けされ得る。本方法は、１４０３に示すように、最も優先順位の高いイベントまたはフラグを選ぶステップをさらに含み得る。例えば、最も優先順位の高いイベントまたはフラグは、割り当てられたアルゴリズムに基づいて選択され得る。本方法は、１４０４に示すように、リソースをスレッドに割り当てるステップをさらに含み得る。例えば、優先順位アルゴリズムに基づいてリソースを最も望ましいスレッドに割り当てることができる。
【０１４７】
図１５は、実施形態による、プロセッサに含まれ得るアルゴリズム的なＳＭＴ機能を示すブロック図である。図１５は、アルゴリズム的な優先順位ブロックに基づく競合的に共有されるリソースへのスレッド、例えばスレッドＴ０の割り当てを示す。例えば、機能は、例えば図１４のボックス１４０１に従って、競合的に共有されているリソース１５０１が使用可能であると判定することができる。アルゴリズム的な優先順位ブロック１５０２は、例えば図１４のボックス１４０２に従って、複数のイベント、例えばイベントＥｖｔ１およびＥｖｔ２がある場合に、優先順位付けすることができる。アルゴリズム的な優先順位ブロック１５０２はまた、例えば図１４のボックス１４０３に従って、割り当てられたアルゴリズムに基づいて、最も優先順位の高いイベントまたはフラグを選ぶことができる。アルゴリズム的な優先順位ブロック１５０２はまた、優先順位アルゴリズムに基づいて、リソース、例えばリソース１５０１を最も無効なスレッド、例えばスレッドＴ０に割り当てることができる。
【０１４８】
一部の実施形態では、優先順位アルゴリズムは、整数リネーミングおよび／または浮動小数点リネーミングアルゴリズムを含み得る。優先順位アルゴリズムは、削除、クリア、および割り込みなどのイベントに基づくイベントベースの判定を含むことができる。優先順位アルゴリズムは、パフォーマンスカウンタを含むことができ、パフォーマンスカウンタは、リタイアされた命令およびコードミスなどの出現をカウントすることができる。優先順位アルゴリズムは、物理レジスタを制限すること、デッドロック防止を使用すること、および／またはキャッシュミスを判定することを含み得る。優先順位アルゴリズムは、命令タイプおよびクラスを判定することを含み得る。優先順位アルゴリズムは、レジスタを割り当てること、例えば、より多くの浮動小数点レジスタを浮動小数点ワード線に割り当てることを含み得る。優先順位アルゴリズムは、ソフトウェアを介して優先順位を管理することを含み得る。例えば、優先順位アルゴリズムは、オペレーティングシステムおよび／または仮想マシンマネージャが優先順位を提供することを可能にし得る。優先順位アルゴリズムは、例えば動的挙動に基づくハードウェアによって管理された優先順位を含み得る。
【０１４９】
一部の実施形態では、優先順位アルゴリズムは、分岐予測アルゴリズムを含み得る。一部の実施形態では、分岐予測アルゴリズムは、以下、すなわち、クリアの頻度（例えば、ＪＥＣｌｅａｒおよびＣＲＣｌｅａｒ）、分岐の頻度（例えば、すべて、成立、不成立）、分岐以外の特性（例えば、リタイアされた命令、Ｌ２／Ｌ３ミス）のうちの１つまたは複数に基づいて、分岐ターゲットバッファ（ＢＴＢ）の動作を制御し得る。優先順位アルゴリズムは、ソフトウェアを介して優先順位を管理することを含み得る。例えば、優先順位アルゴリズムは、オペレーティングシステムおよび／または仮想マシンマネージャが優先順位を提供することを可能にし得る。優先順位アルゴリズムは、例えば動的挙動に基づくハードウェアによって管理された優先順位を含み得る。図１６は、例示的な実施形態による分岐予測優先順位アルゴリズムを実施するブロック図を示す。分割ロジック１６０２は、クリアの頻度（例えば、ＪＥＣｌｅａｒおよびＣＲＣｌｅａｒ）、分岐の頻度（例えば、すべて、成立、不成立）、分岐以外の特性（例えば、リタイアされた命令、Ｌ２／Ｌ３ミス）などの入力１６０３を受信し得る。分割ロジック１６０２は、入力１６０３に基づいて、分岐ターゲットバッファ（ＢＴＢ）１６０１のエントリを割り当てることができる。
【０１５０】
一部の実施形態のまとめ
一実施形態は、使用可能な競合的に共有されるリソースを識別し、優先順位アルゴリズムに少なくとも部分的に基づいてスレッドを選択し、選択されたスレッドを使用可能な競合的に共有されるリソースに割り当てる、ように構成されたプロセッサを含み得る。
【０１５１】
一部の実施形態では、以下のうちの１つまたは複数が当てはまる。一部の実施形態では、プロセッサは、分岐予測を競合的に共有し、エントリ割り当てのために優先順位アルゴリズムを使用する、ようにさらに構成され得る。一部の実施形態では、プロセッサは、優先順位アルゴリズムに基づいて、第２のスレッドを割り当てるようにさらに構成され得る。一部の実施形態では、プロセッサは、１クロック当たりの命令（ＩＰＣ）およびパイプラインスループットのうちの少なくとも１つを高めるように、パイプライン内の使用可能なリソースに最も効率的なスレッドを割り当てるようにさらに構成され得る。一部の実施形態では、プロセッサは、使用可能なリソースへのスレッド割り当てを優先順位付けするための最もよく知られたアルゴリズムを提供するようにさらに構成され得る。一部の実施形態では、プロセッサは、２つ以上のイベントが検出された場合に優先順位付けするようにさらに構成され得る。一部の実施形態では、プロセッサは、割り当てられたアルゴリズムに基づいて、最も優先順位の高いイベントおよびフラグのうちの少なくとも１つを選択するようにさらに構成され得る。
【０１５２】
一部の実施形態では、プロセッサは、イベント検出ブロックと、パフォーマンスカウンタフラグブロックと、デッドロック防止ブロックと、命令タイプ／クラスブロックと、を含み得る。一部の実施形態では、イベント検出ブロックは、削除、クリアの頻度、ＢＲの頻度、割り込み、およびキャッシュミスのうちの少なくとも１つを検出することができる。一部の実施形態では、パフォーマンスカウンタフラグブロックは、リタイアされた命令、コードミス、およびＬ２／Ｌ３ミスのうちの少なくとも１つをカウントすることができる。一部の実施形態では、デッドロック防止ブロックは、デッドロック状態を防止することができる。一部の実施形態では、命令タイプ／クラスブロックは、浮動小数点命令をリタイアさせることを可能にし得る。一部の実施形態では、プロセッサは、オペレーティングシステム（ＯＳ）および仮想マシンマネージャ（ＶＭＭ）のうちの少なくとも１つが優先順位を設定することを可能にするようにさらに構成され得る。一部の実施形態では、優先順位アルゴリズムは、少なくとも１つの学習機能を有し得る。一部の実施形態では、少なくとも１つの学習機能は、履歴データおよびワークロードパターンのうちの少なくとも１つに基づいて適応的であり得る。
【０１５３】
一部の実施形態では、優先順位アルゴリズムは、整数リネーミングアルゴリズムおよび浮動小数点リネーミングアルゴリズムのうちの少なくとも一方を含み得る。優先順位アルゴリズムは、イベントベースの判定を含むことができる。イベントベースの判定は、削除、クリア、および割り込みのうちの１つまたは複数を含むことができる。優先順位アルゴリズムは、パフォーマンスカウンタを含むことができる。パフォーマンスカウンタは、出現数をカウントし得る。出現は、リタイアされた命令、およびコードミスのうちの１つまたは複数であり得る。優先順位アルゴリズムは、物理レジスタを制限することと、デッドロック防止を使用することと、キャッシュミスを判定することと、のうちの１つまたは複数を含み得る。優先順位アルゴリズムは、命令タイプおよびクラスを判定することを含み得る。優先順位アルゴリズムは、レジスタを割り当てることを含み得る。レジスタを割り当てることは、より多くの浮動小数点レジスタを浮動小数点ワード線に割り当てることを含み得る。優先順位アルゴリズムは、ソフトウェアを介して優先順位を管理することを含み得る。優先順位アルゴリズムは、オペレーティングシステムおよび仮想マシンマネージャのうちの１つまたは複数が優先順位を提供することを可能にし得る。優先順位アルゴリズムは、ハードウェアによって管理された優先順位を含み得る。ハードウェアによって管理された優先順位は、動的挙動に基づき得る。
【０１５４】
一部の実施形態では、優先順位アルゴリズムは、分岐予測アルゴリズムを含み得る。一部の実施形態では、分岐予測アルゴリズムは、以下、すなわち、クリアの頻度、分岐の頻度、分岐以外の特性のうちの１つまたは複数に少なくとも部分的に基づいて、分岐ターゲットバッファ（ＢＴＢ）の動作を制御し得る。クリアは、ＪＥＣｌｅａｒおよびＣＲＣｌｅａｒのうちの１つまたは複数を含むことができる。分岐の頻度は、すべて、成立、不成立のうちの１つまたは複数を含むことができる。分岐以外の特性は、リタイアされた命令、Ｌ２／Ｌ３ミスのうちの１つまたは複数を含むことができる。優先順位アルゴリズムは、ソフトウェアを介して優先順位を管理することを含み得る。優先順位アルゴリズムは、オペレーティングシステムおよび仮想マシンマネージャのうちの１つまたは複数が優先順位を提供することを可能にし得る。優先順位アルゴリズムは、ハードウェアによって管理された優先順位を含み得る。ハードウェアによって管理された優先順位は、動的挙動に少なくとも部分的に基づき得る。優先順位アルゴリズムは、入力を受信するために分割ロジックを使用することを含み得る。入力は、クリアの頻度、分岐の頻度、分岐以外の特性のうちの１つまたは複数を含むことができる。分割ロジックは、入力に基づいて、分岐ターゲットバッファ（ＢＴＢ）のエントリを割り当てることができる。
【０１５５】
一実施形態は、使用可能な競合的に共有されるリソースを識別するステップと、優先順位アルゴリズムに少なくとも部分的に基づいてスレッドを選択するステップと、選択されたスレッドを使用可能な競合的に共有されるリソースに割り当てるステップと、を含む方法を含み得る。
【０１５６】
一部の実施形態では、以下のうちの１つまたは複数が当てはまる。一部の実施形態では、本方法は、分岐予測を競合的に共有するステップと、エントリ割り当てのために優先順位アルゴリズムを使用するステップと、をさらに含み得る。一部の実施形態では、本方法は、優先順位アルゴリズムに基づいて、第２のスレッドを割り当てるステップをさらに含み得る。一部の実施形態では、本方法は、１クロック当たりの命令（ＩＰＣ）およびパイプラインスループットのうちの少なくとも１つを高めるように、パイプライン内の使用可能なリソースに最も効率的なスレッドを割り当てるステップをさらに含み得る。一部の実施形態では、本方法は、使用可能なリソースへのスレッド割り当てを優先順位付けするための最もよく知られたアルゴリズムを提供するステップをさらに含み得る。一部の実施形態では、本方法は、２つ以上のイベントが検出された場合に優先順位付けするステップをさらに含み得る。一部の実施形態では、本方法は、割り当てられたアルゴリズムに基づいて、最も優先順位の高いイベントおよびフラグのうちの少なくとも１つを選択するステップをさらに含み得る。
【０１５７】
一部の実施形態では、本方法は、イベント検出ブロックと、パフォーマンスカウンタフラグブロックと、デッドロック防止ブロックと、命令タイプ／クラスブロックと、を使用するステップをさらに含み得る。一部の実施形態では、本方法は、イベント検出ブロックを使用して、削除、クリアの頻度、ＢＲの頻度、割り込み、およびキャッシュミスのうちの少なくとも１つを検出する、ステップをさらに含み得る。一部の実施形態では、本方法は、パフォーマンスカウンタフラグブロックを使用して、リタイアされた命令、コードミス、およびＬ２／Ｌ３ミスのうちの少なくとも１つをカウントする、ステップをさらに含み得る。一部の実施形態では、本方法は、デッドロック防止ブロックを使用して、デッドロック状態を防止する、ステップをさらに含み得る。一部の実施形態では、本方法は、命令タイプ／クラスブロックを使用して、浮動小数点命令をリタイアさせることを可能にする、ステップをさらに含み得る。一部の実施形態では、本方法は、オペレーティングシステム（ＯＳ）および仮想マシンマネージャ（ＶＭＭ）のうちの少なくとも１つが優先順位を設定することを可能にするステップをさらに含み得る。一部の実施形態では、優先順位アルゴリズムは、少なくとも１つの学習機能を有し得る。一部の実施形態では、少なくとも１つの学習機能は、履歴データおよびワークロードパターンのうちの少なくとも１つに基づいて適応的であり得る。
【０１５８】
一部の実施形態では、優先順位アルゴリズムは、整数リネーミングアルゴリズムおよび浮動小数点リネーミングアルゴリズムのうちの少なくとも一方を含み得る。優先順位アルゴリズムは、イベントベースの判定を含むことができる。イベントベースの判定は、削除、クリア、および割り込みのうちの１つまたは複数を含むことができる。優先順位アルゴリズムは、パフォーマンスカウンタを含むことができる。パフォーマンスカウンタは、出現数をカウントし得る。出現は、リタイアされた命令、およびコードミスのうちの１つまたは複数であり得る。優先順位アルゴリズムは、物理レジスタを制限することと、デッドロック防止を使用することと、キャッシュミスを判定することと、のうちの１つまたは複数を含み得る。優先順位アルゴリズムは、命令タイプおよびクラスを判定することを含み得る。優先順位アルゴリズムは、レジスタを割り当てることを含み得る。レジスタを割り当てることは、より多くの浮動小数点レジスタを浮動小数点ワード線に割り当てることを含み得る。優先順位アルゴリズムは、ソフトウェアを介して優先順位を管理することを含み得る。優先順位アルゴリズムは、オペレーティングシステムおよび仮想マシンマネージャのうちの１つまたは複数が優先順位を提供することを可能にし得る。優先順位アルゴリズムは、ハードウェアによって管理された優先順位を含み得る。ハードウェアによって管理された優先順位は、動的挙動に基づき得る。
【０１５９】
一部の実施形態では、優先順位アルゴリズムは、分岐予測アルゴリズムを含み得る。一部の実施形態では、分岐予測アルゴリズムは、以下、すなわち、クリアの頻度、分岐の頻度、分岐以外の特性のうちの１つまたは複数に少なくとも部分的に基づいて、分岐ターゲットバッファ（ＢＴＢ）の動作を制御し得る。クリアは、ＪＥＣｌｅａｒを含むことができる。分岐の頻度は、すべて、成立、不成立のうちの１つまたは複数を含むことができる。分岐以外の特性は、リタイアされた命令、Ｌ２／Ｌ３ミスのうちの１つまたは複数を含むことができる。優先順位アルゴリズムは、ソフトウェアを介して優先順位を管理することを含み得る。優先順位アルゴリズムは、オペレーティングシステムおよび仮想マシンマネージャのうちの１つまたは複数が優先順位を提供することを可能にし得る。優先順位アルゴリズムは、ハードウェアによって管理された優先順位を含み得る。ハードウェアによって管理された優先順位は、動的挙動に少なくとも部分的に基づき得る。優先順位アルゴリズムは、入力を受信するために分割ロジックを使用することを含み得る。入力は、クリアの頻度、分岐の頻度、分岐以外の特性のうちの１つまたは複数を含むことができる。分割ロジックは、入力に基づいて、分岐ターゲットバッファ（ＢＴＢ）のエントリを割り当てることができる。
【０１６０】
一実施形態は、プロセッサによって実行された場合にプロセッサに方法を実行させる少なくとも１つの命令を格納する非一時的機械可読媒体であって、方法が、使用可能な競合的に共有されるリソースを識別するステップと、優先順位アルゴリズムに少なくとも部分的に基づいてスレッドを選択するステップと、選択されたスレッドを使用可能な競合的に共有されるリソースに割り当てるステップと、を含む、非一時的機械可読媒体を含み得る。
【０１６１】
一部の実施形態では、以下のうちの１つまたは複数が当てはまる。一部の実施形態では、本方法は、分岐予測を競合的に共有するステップと、エントリ割り当てのために優先順位アルゴリズムを使用するステップと、をさらに含み得る。一部の実施形態では、本方法は、優先順位アルゴリズムに基づいて、第２のスレッドを割り当てるステップをさらに含み得る。一部の実施形態では、本方法は、１クロック当たりの命令（ＩＰＣ）およびパイプラインスループットのうちの少なくとも１つを高めるように、パイプライン内の使用可能なリソースに最も効率的なスレッドを割り当てるステップをさらに含み得る。一部の実施形態では、本方法は、使用可能なリソースへのスレッド割り当てを優先順位付けするための最もよく知られたアルゴリズムを提供するステップをさらに含み得る。一部の実施形態では、本方法は、２つ以上のイベントが検出された場合に優先順位付けするステップをさらに含み得る。一部の実施形態では、本方法は、割り当てられたアルゴリズムに基づいて、最も優先順位の高いイベントおよびフラグのうちの少なくとも１つを選択するステップをさらに含み得る。
【０１６２】
一部の実施形態では、本方法は、イベント検出ブロックと、パフォーマンスカウンタフラグブロックと、デッドロック防止ブロックと、命令タイプ／クラスブロックと、を使用するステップをさらに含み得る。一部の実施形態では、本方法は、イベント検出ブロックを使用して、削除、クリアの頻度、ＢＲの頻度、割り込み、およびキャッシュミスのうちの少なくとも１つを検出する、ステップをさらに含み得る。一部の実施形態では、本方法は、パフォーマンスカウンタフラグブロックを使用して、リタイアされた命令、コードミス、およびＬ２／Ｌ３ミスのうちの少なくとも１つをカウントする、ステップをさらに含み得る。一部の実施形態では、本方法は、デッドロック防止ブロックを使用して、デッドロック状態を防止する、ステップをさらに含み得る。一部の実施形態では、本方法は、命令タイプ／クラスブロックを使用して、浮動小数点命令をリタイアさせることを可能にする、ステップをさらに含み得る。一部の実施形態では、本方法は、オペレーティングシステム（ＯＳ）および仮想マシンマネージャ（ＶＭＭ）のうちの少なくとも１つが優先順位を設定することを可能にするステップをさらに含み得る。一部の実施形態では、優先順位アルゴリズムは、少なくとも１つの学習機能を有し得る。一部の実施形態では、少なくとも１つの学習機能は、履歴データおよびワークロードパターンのうちの少なくとも１つに基づいて適応的であり得る。
【０１６３】
一部の実施形態では、優先順位アルゴリズムは、整数リネーミングアルゴリズムおよび浮動小数点リネーミングアルゴリズムのうちの少なくとも一方を含み得る。優先順位アルゴリズムは、イベントベースの判定を含むことができる。イベントベースの判定は、削除、クリア、および割り込みのうちの１つまたは複数を含むことができる。優先順位アルゴリズムは、パフォーマンスカウンタを含むことができる。パフォーマンスカウンタは、出現数をカウントし得る。出現は、リタイアされた命令、およびコードミスのうちの１つまたは複数であり得る。優先順位アルゴリズムは、物理レジスタを制限することと、デッドロック防止を使用することと、キャッシュミスを判定することと、のうちの１つまたは複数を含み得る。優先順位アルゴリズムは、命令タイプおよびクラスを判定することを含み得る。優先順位アルゴリズムは、レジスタを割り当てることを含み得る。レジスタを割り当てることは、より多くの浮動小数点レジスタを浮動小数点ワード線に割り当てることを含み得る。優先順位アルゴリズムは、ソフトウェアを介して優先順位を管理することを含み得る。優先順位アルゴリズムは、オペレーティングシステムおよび仮想マシンマネージャのうちの１つまたは複数が優先順位を提供することを可能にし得る。優先順位アルゴリズムは、ハードウェアによって管理された優先順位を含み得る。ハードウェアによって管理された優先順位は、動的挙動に基づき得る。
【０１６４】
一部の実施形態では、優先順位アルゴリズムは、分岐予測アルゴリズムを含み得る。一部の実施形態では、分岐予測アルゴリズムは、以下、すなわち、クリアの頻度、分岐の頻度、分岐以外の特性のうちの１つまたは複数に少なくとも部分的に基づいて、分岐ターゲットバッファ（ＢＴＢ）の動作を制御し得る。クリアは、ＪＥＣｌｅａｒおよびＣＲＣｌｅａｒのうちの１つまたは複数を含むことができる。分岐の頻度は、すべて、成立、不成立のうちの１つまたは複数を含むことができる。分岐以外の特性は、リタイアされた命令、Ｌ２／Ｌ３ミスのうちの１つまたは複数を含むことができる。優先順位アルゴリズムは、ソフトウェアを介して優先順位を管理することを含み得る。優先順位アルゴリズムは、オペレーティングシステムおよび仮想マシンマネージャのうちの１つまたは複数が優先順位を提供することを可能にし得る。優先順位アルゴリズムは、ハードウェアによって管理された優先順位を含み得る。ハードウェアによって管理された優先順位は、動的挙動に少なくとも部分的に基づき得る。優先順位アルゴリズムは、入力を受信するために分割ロジックを使用することを含み得る。入力は、クリアの頻度、分岐の頻度、分岐以外の特性のうちの１つまたは複数を含むことができる。分割ロジックは、入力に基づいて、分岐ターゲットバッファ（ＢＴＢ）のエントリを割り当てることができる。
【０１６５】
一実施形態は、メモリとプロセッサとを有するシステムであって、プロセッサが、使用可能な競合的に共有されるリソースを識別し、優先順位アルゴリズムに少なくとも部分的に基づいてスレッドを選択し、選択されたスレッドを使用可能な競合的に共有されるリソースに割り当てる、ように構成され得る、システムを備え得る。
【０１６６】
一部の実施形態では、優先順位アルゴリズムは、整数リネーミングアルゴリズムおよび浮動小数点リネーミングアルゴリズムのうちの少なくとも一方を含み得る。優先順位アルゴリズムは、イベントベースの判定を含むことができる。イベントベースの判定は、削除、クリア、および割り込みのうちの１つまたは複数を含むことができる。優先順位アルゴリズムは、パフォーマンスカウンタを含むことができる。パフォーマンスカウンタは、出現数をカウントし得る。出現は、リタイアされた命令、およびコードミスのうちの１つまたは複数であり得る。優先順位アルゴリズムは、物理レジスタを制限することと、デッドロック防止を使用することと、キャッシュミスを判定することと、のうちの１つまたは複数を含み得る。優先順位アルゴリズムは、命令タイプおよびクラスを判定することを含み得る。優先順位アルゴリズムは、レジスタを割り当てることを含み得る。レジスタを割り当てることは、より多くの浮動小数点レジスタを浮動小数点ワード線に割り当てることを含み得る。優先順位アルゴリズムは、ソフトウェアを介して優先順位を管理することを含み得る。優先順位アルゴリズムは、オペレーティングシステムおよび仮想マシンマネージャのうちの１つまたは複数が優先順位を提供することを可能にし得る。優先順位アルゴリズムは、ハードウェアによって管理された優先順位を含み得る。ハードウェアによって管理された優先順位は、動的挙動に基づき得る。
【０１６７】
一部の実施形態では、優先順位アルゴリズムは、分岐予測アルゴリズムを含み得る。一部の実施形態では、分岐予測アルゴリズムは、以下、すなわち、クリアの頻度、分岐の頻度、分岐以外の特性のうちの１つまたは複数に少なくとも部分的に基づいて、分岐ターゲットバッファ（ＢＴＢ）の動作を制御し得る。クリアは、ＪＥＣｌｅａｒおよびＣＲＣｌｅａｒのうちの１つまたは複数を含むことができる。分岐の頻度は、すべて、成立、不成立のうちの１つまたは複数を含むことができる。分岐以外の特性は、リタイアされた命令、Ｌ２／Ｌ３ミスのうちの１つまたは複数を含むことができる。優先順位アルゴリズムは、ソフトウェアを介して優先順位を管理することを含み得る。優先順位アルゴリズムは、オペレーティングシステムおよび仮想マシンマネージャのうちの１つまたは複数が優先順位を提供することを可能にし得る。優先順位アルゴリズムは、ハードウェアによって管理された優先順位を含み得る。ハードウェアによって管理された優先順位は、動的挙動に少なくとも部分的に基づき得る。優先順位アルゴリズムは、入力を受信するために分割ロジックを使用することを含み得る。入力は、クリアの頻度、分岐の頻度、分岐以外の特性のうちの１つまたは複数を含むことができる。分割ロジックは、入力に基づいて、分岐ターゲットバッファ（ＢＴＢ）のエントリを割り当てることができる。
【０１６８】
一部の実施形態では、以下のうちの１つまたは複数が当てはまる。一部の実施形態では、プロセッサは、分岐予測を競合的に共有し、エントリ割り当てのために優先順位アルゴリズムを使用する、ようにさらに構成され得る。一部の実施形態では、プロセッサは、優先順位アルゴリズムに基づいて、第２のスレッドを割り当てるようにさらに構成され得る。一部の実施形態では、プロセッサは、１クロック当たりの命令（ＩＰＣ）およびパイプラインスループットのうちの少なくとも１つを高めるように、パイプライン内の使用可能なリソースに最も効率的なスレッドを割り当てるようにさらに構成され得る。一部の実施形態では、プロセッサは、使用可能なリソースへのスレッド割り当てを優先順位付けするための最もよく知られたアルゴリズムを提供するようにさらに構成され得る。一部の実施形態では、プロセッサは、２つ以上のイベントが検出された場合に優先順位付けするようにさらに構成され得る。一部の実施形態では、プロセッサは、割り当てられたアルゴリズムに基づいて、最も優先順位の高いイベントおよびフラグのうちの少なくとも１つを選択するようにさらに構成され得る。
【０１６９】
一部の実施形態では、プロセッサは、イベント検出ブロックと、パフォーマンスカウンタフラグブロックと、デッドロック防止ブロックと、命令タイプ／クラスブロックと、を含み得る。一部の実施形態では、イベント検出ブロックは、削除、クリアの頻度、ＢＲの頻度、割り込み、およびキャッシュミスのうちの少なくとも１つを検出することができる。一部の実施形態では、パフォーマンスカウンタフラグブロックは、リタイアされた命令、コードミス、およびＬ２／Ｌ３ミスのうちの少なくとも１つをカウントすることができる。一部の実施形態では、デッドロック防止ブロックは、デッドロック状態を防止することができる。一部の実施形態では、命令タイプ／クラスブロックは、浮動小数点命令をリタイアさせることを可能にし得る。一部の実施形態では、プロセッサは、オペレーティングシステム（ＯＳ）および仮想マシンマネージャ（ＶＭＭ）のうちの少なくとも１つが優先順位を設定することを可能にするようにさらに構成され得る。一部の実施形態では、優先順位アルゴリズムは、少なくとも１つの学習機能を有し得る。一部の実施形態では、少なくとも１つの学習機能は、履歴データおよびワークロードパターンのうちの少なくとも１つに基づいて適応的であり得る。
【０１７０】
一部の実施形態では、優先順位アルゴリズムは、整数リネーミングアルゴリズムおよび浮動小数点リネーミングアルゴリズムのうちの少なくとも一方を含み得る。優先順位アルゴリズムは、イベントベースの判定を含むことができる。イベントベースの判定は、削除、クリア、および割り込みのうちの１つまたは複数を含むことができる。優先順位アルゴリズムは、パフォーマンスカウンタを含むことができる。パフォーマンスカウンタは、出現数をカウントし得る。出現は、リタイアされた命令、およびコードミスのうちの１つまたは複数であり得る。優先順位アルゴリズムは、物理レジスタを制限することと、デッドロック防止を使用することと、キャッシュミスを判定することと、のうちの１つまたは複数を含み得る。優先順位アルゴリズムは、命令タイプおよびクラスを判定することを含み得る。優先順位アルゴリズムは、レジスタを割り当てることを含み得る。レジスタを割り当てることは、より多くの浮動小数点レジスタを浮動小数点ワード線に割り当てることを含み得る。優先順位アルゴリズムは、ソフトウェアを介して優先順位を管理することを含み得る。優先順位アルゴリズムは、オペレーティングシステムおよび仮想マシンマネージャのうちの１つまたは複数が優先順位を提供することを可能にし得る。優先順位アルゴリズムは、ハードウェアによって管理された優先順位を含み得る。ハードウェアによって管理された優先順位は、動的挙動に基づき得る。
【０１７１】
一部の実施形態では、優先順位アルゴリズムは、分岐予測アルゴリズムを含み得る。一部の実施形態では、分岐予測アルゴリズムは、以下、すなわち、クリアの頻度、分岐の頻度、分岐以外の特性のうちの１つまたは複数に少なくとも部分的に基づいて、分岐ターゲットバッファ（ＢＴＢ）の動作を制御し得る。クリアは、ＪＥＣｌｅａｒおよびＣＲＣｌｅａｒのうちの１つまたは複数を含むことができる。分岐の頻度は、すべて、成立、不成立のうちの１つまたは複数を含むことができる。分岐以外の特性は、リタイアされた命令、Ｌ２／Ｌ３ミスのうちの１つまたは複数を含むことができる。優先順位アルゴリズムは、ソフトウェアを介して優先順位を管理することを含み得る。優先順位アルゴリズムは、オペレーティングシステムおよび仮想マシンマネージャのうちの１つまたは複数が優先順位を提供することを可能にし得る。優先順位アルゴリズムは、ハードウェアによって管理された優先順位を含み得る。ハードウェアによって管理された優先順位は、動的挙動に少なくとも部分的に基づき得る。優先順位アルゴリズムは、入力を受信するために分割ロジックを使用することを含み得る。入力は、クリアの頻度、分岐の頻度、分岐以外の特性のうちの１つまたは複数を含むことができる。分割ロジックは、入力に基づいて、分岐ターゲットバッファ（ＢＴＢ）のエントリを割り当てることができる。
【０１７２】
スレッド切り替え
プロセッサコアは、本発明の実施形態によるＳＭＴスレッド切り替え機能をサポートすることができる。共有リソースを用いてＳＭＴを実装するプロセッサコアでは、ＳＭＴは、プロセッサ発行／実行パイプラインの様々なステージで２つ以上のスレッドのうちのどれを選択するかを選択することを含み得る。ＳＭＴスレッド切り替え機能を含む本発明の実施形態は、パフォーマンス、公平性、および他の要因の間の優先順位によって影響されるようにこの選択を提供することが望ましい場合がある（例えば、該当する基準のほんのいくつかを挙げると、パフォーマンスの向上、消費電力の削減、省電力機能の実装、公平性、最低保証パフォーマンス、スループット、クロック当たりの実行命令数（ＩＰＣ）、単位時間当たりの実行命令数、サービス品質、時間および／またはメモリ効率の向上）。例えば、プロセッサコア９００の発行／実行パイプラインでは、分岐予測装置９１１が予測を開始するスレッド、ｉ−ＴＬＢ  ９１６で予測を検索するスレッド、ｉキャッシュ９１３でｉ−ＴＬＢ変換を検索するスレッド、デコーダ９１４内のｉキャッシュ９１３からのバイトをデコードするスレッド、ｏｐキャッシュ９１２から読み取るスレッド、マイクロｏｐキュー９１５から読み取るスレッドなどを選択するために調停を使用することができる。
【０１７３】
図１７は、本発明の実施形態による、プロセッサに含まれ得るＳＭＴスレッド切り替え機能のための調停回路１７００を示すブロック図である。調停回路１７００は、プロセッサ発行／実行パイプラインの様々なステージのうちのいずれかで、２つ以上のスレッドのうちのどれを進めるために選択するかを選択するための回路、構造、および／またはハードウェアを含み得る。プロセッサまたはプロセッサコアは、調停回路１７００の１つまたは複数の実施形態の複数の例を含み、それぞれが、任意の１つまたは複数のパイプラインステージまたはリソースのためであり、それぞれが、図１７に示されるブロックのうちの任意の１つまたは複数を含み、それぞれが、以下に説明する任意の１つまたは複数の手法または手法の組み合わせを実装し得る。さらに、調停回路１７００の任意の例の全部または一部は、リソース割り当て、スケジューリング、または共有回路など、プロセッサまたはプロセッサコアの他の回路、構造、および／またはハードウェアに含まれる、一体化される、または組み込まれ得る。
【０１７４】
調停回路１７００は、任意の他のラウンドロビンまたは他の方式（単数または複数）を実装するための任意の他の回路と共に、単純なラウンドロビン回路１７１０と、高スループットラウンドロビン回路１７２０と、動的ラウンドロビン回路１７３０と、ソフトウェア制御可能ラウンドロビン回路１７４０と、を含み得る。
【０１７５】
単純なラウンドロビン回路１７１０は、スレッドを選択するために単純なラウンドロビン方式を実行するための回路、構造、および／またはハードウェアを含み得る。例えば、単純なラウンドロビン回路１７１０は、選択が絶えず選択肢の間で交替する方式、すなわち、スレッド０、次にスレッド１、次にスレッド０、次にスレッド１というように続く、または、スレッド０、スレッド１、スレッド２、スレッド０、スレッド１、スレッド２などの方式を実装し得る。
【０１７６】
高スループットラウンドロビン回路１７２０は、他の可能性のある要因（公平性など）よりもスループットを優先したいという要望に基づいてスレッドを選択するために修正されたラウンドロビン方式を実行するための回路、構造、および／またはハードウェアを含み得る。例えば、高スループットラウンドロビン回路１７２０は、各スレッドがスレッド切り替え点で使用可能な作業を有する限り、それは（例えば、上記のような）単純なラウンドロビン方式を実装してもよく、そうでなければ、高スループットラウンドロビン回路１７２０は、使用可能な作業を有するスレッドを選択してもよい。選択すべきスレッドが３つ以上の実施形態では、高スループットラウンドロビン回路１７２０は、使用可能な作業のないあらゆるスレッドを単純なラウンドロビン方式から外すことができる。
【０１７７】
動的ラウンドロビン回路１７３０は、スレッドの動的挙動に基づいて、スレッドを選択するために動的に修正可能なラウンドロビン方式を実行するための回路、構造、および／またはハードウェアを含み得る。動的ラウンドロビン回路１７３０は、決定の基礎となる情報（例えば、ヒューリスティック）を提供するために、パフォーマンスカウンタ、他のハードウェアカウンタ、または他の構造（それらのうちのいずれかが１７３２として表される）を含み得る、および／または使用し得る。スレッドを優先するためのスレッド選択の基準となる比率または他の基準、ならびにどの動的挙動尺度が使用されるべきかの指示は、固定（例えば、ハードワイヤード）、構成可能（例えば、ハードウェアまたはファームウェアによって）、またはプログラム可能（例えば、ソフトウェアによる）であり得る。例えば、第１のスレッドは、２対１の比率で第２のスレッドよりも優先または選択され得る（例えば、スレッド０、スレッド０、スレッド１、スレッド０、スレッド０、スレッド１など）。あるスレッドが別のスレッドよりも優先されると判断するための要因または基準の例としては、予測ミス率、１サイクル当たりの命令数、キャッシュミス率などがある。
【０１７８】
ソフトウェア制御可能ラウンドロビン回路１７４０は、ソフトウェア（例えば、オペレーティングシステムまたは仮想マシンモニタ）によって提供される優先順位に基づいて、スレッドを選択するために修正されたラウンドロビン方式を実行するための回路、構造、および／またはハードウェアを含むことができ、これは、本来ソフトウェアで使用可能であるより多くの望ましいシステムの挙動についての情報を有し得る。どちらを優先するかの比率を伴う指示、および／またはどのスキームを使用するか、もしくはその実装方法に関する任意の他の情報（例えば、ソフトウェア制御可能ラウンドロビンと動的および／または修正可能ラウンドロビンを組み合わせるかどうか、またその方法はどうするか）は、調停回路１７００内、または調停回路１７００にアクセスすることができる、プログラム可能な格納場所またはレジスタ１７４２に設けられ得る。
【０１７９】
実施形態では、手法の組み合わせが可能である。例えば、ソフトウェアは（例えば、ソフトウェア制御可能ラウンドロビンのための回路および／または技法を使用して）、どのスレッドを優先するかに関するヒントを提供することができ、ハードウェア（例えば、動的ラウンドロビンの回路または技法）は、スレッドの挙動および／または発見的方法に基づいて、そのスレッドを優先するための比率を判定することができる。
【０１８０】
一部の実施形態のまとめ
本発明の一実施形態は、調停回路を備えるプロセッサを含み得る。調停回路は、第１のラウンドロビン回路と第２のラウンドロビン回路とを含むことができる。第１のラウンドロビン回路は、単純なラウンドロビンスレッド切り替え方式を実施するようにされ得る。第２のラウンドロビン回路は、動的に修正されたラウンドロビンスレッド切り替え方式を実施するようにされ得る。
【０１８１】
デッドロック回避
プロセッサコアは、本発明の実施形態によるＳＭＴデッドロック回避機能をサポートすることができる。リソースの共有は、一部の状況では、１つまたは複数のリソースが枯渇したためにスレッドの進行が遅くなり、先に進むことができないためにスレッドが進行しなくなり（例えば、命令をリタイアする）、および／または他のデッドロックタイプの状況につながる可能性があり得る。その結果、ユーザエクスペリエンスは、著しく遅いパフォーマンス、またはエラー、失敗、もしくはクラッシュが含まれる可能性があり得る。デッドロック回避機能を含む本発明の実施形態は、デッドロックタイプの状況を低減し、ユーザエクスペリエンスを向上させるために望ましい場合がある。これらの実施形態の他の利点としては、例えば、該当する基準のほんのいくつかを挙げると、パフォーマンスの向上、消費電力の削減、省電力機能の実装、公平性、最低保証パフォーマンス、スループット、クロック当たりの実行命令数（ＩＰＣ）、単位時間当たりの実行命令数、サービス品質、時間および／またはメモリ効率の向上を含み得る。
【０１８２】
図１８は、本発明の実施形態による、プロセッサに含まれ得るデッドロック回避ハードウェア１８００を示すブロック図である。デッドロック回避ハードウェア１８００は、デッドロックタイプの状況の発生を減らすために、コア回路、構造、ユニット、およびリソース、ならびにそれらの部分の割り当ておよび使用に影響を及ぼすための回路、構造、および／またはハードウェアを含み得る。実施形態では、デッドロック回避ハードウェア１８００は、単一のリソースおよび／または複数のリソース含むデッドロックを回避するように実装され得る。いずれの場合も、プロセッサまたはプロセッサコアは、デッドロック回避ハードウェア１８００の１つまたは複数の実施形態の複数の例を含み、それぞれが、任意の１つまたは複数のリソースのためであり、それぞれが、図１８に示されるブロックのうちの任意の１つまたは複数を含み、それぞれが、任意の１つまたは複数の手法、または手法の組み合わせを実装し得る。さらに、デッドロック回避ハードウェア１８００の任意の例の全部または一部は、リソース割り当て、スケジューリング、または共有回路など、プロセッサまたはプロセッサコアの他の回路、構造、および／またはハードウェアに含まれる、一体化される、または組み込まれ得る。
【０１８３】
デッドロック回避ハードウェア１８００は、リソースをスレッドに割り当てるための回路、構造、および／またはハードウェアを含み得るアロケータ回路１８１０を含み得る。アロケータ回路１８１０の一実施形態または一実施形態の例は、図１２のアロケータ回路１２４０の一実施形態または一実施形態の例を表し得る、またはこれに対応し得る。
【０１８４】
デッドロック回避ハードウェア１８００、アロケータ回路１８１０、および／またはプロセッサもしくはプロセッサコアの任意の他の部分は、アロケータ回路１８１０が、任意の１つまたは複数の特定のスレッドにリソースまたは分割可能なリソースの一部を割り当てることを動的に無効にする、ブロックする、または防止するための回路、構造、および／またはハードウェアを含み得る。例えば、スレッド要求どうしまたはスレッド要求間で選択または調停するための、上述したものなどの任意の種類のラウンドロビン方式を含む実施形態では、特定のスレッドがリソースを使用しないようにブロックすることは、そのスレッドをラウンドロビン方式から一時的にドロップすることによって達成され得る。実施形態は、１つの入力としてスレッド要求信号（例えば、１２４０Ａ、１２４０Ｂ）と、スレッドブロック信号（例えば、後述するようにリソース使用量カウンタ１８２０に基づいて回路によって生成されるスレッドブロック信号、または任意の他の情報、状態、もしくは信号）の補数と、を有して、ＡＮＤゲートの出力が、スレッドにリソースが割り当てられるべきか、リソースが割り当てられるべき候補とみなされるべきかを示すことができるようにする、ＡＮＤゲートを含み得る。
【０１８５】
デッドロック回避ハードウェア１８００はまた、リソース使用量カウンタ１８２０を含み得る。一実施形態では、リソース使用量カウンタ１８２０は、特定のスレッドによって占有または使用されている分割可能なリソース（例えば、バッファ、キュー、スケジューラ、リザベーションステーション）の部分（例えば、エントリ）の数をカウントするためのスレッドごとのハードウェアカウンタであり得る。特定のリソースについて、特定のスレッドに関するリソース使用量カウンタ１８２０の例は、アロケータ回路１８１０がそのスレッドにエントリを割り当てるのに応じてインクリメントされ、エントリが割り当て解除または削除されるのに応じてデクリメントされ、リソースがフラッシュされるのに応じてクリアされ得る。アロケータ回路１８１０は、（例えば、上述のように）そのスレッドのカウントが閾値に達するかそれを超えることに応じて、そのエントリをそのスレッドに割り当てることを動的に無効にするかまたはブロックすることができる。
【０１８６】
閾値は、デッドロックタイプの状況になり得る、単一スレッドがすべてのエントリを同時に使用することを防ぐように、リソース内のエントリの総数より少なくなるように選択され得る。閾値はまた、デッドロックタイプの状況に近づくことに対する許容度および／またはスループットもしくは他のパフォーマンスの尺度もしくは要因を優先順位付けしたいという要求を含む他の要因もしくは基準に基づいて選択または調整されてもよい。閾値は、固定（例えば、ハードワイヤード）、（例えば、ハードウェアまたはファームウェアによって）構成可能または（例えば、ソフトウェアによって）プログラム可能であり得る。
【０１８７】
一実施形態では、分割可能なリソースは、特定のスレッドおよびスレッドのグループに対して論理的に分割されてもよい。例えば、Ｎ個のエントリのセットを有する分割可能なリソースでは、Ｎ１個のエントリのサブセット（Ｎ１はＮより小さい）は、第１のスレッドのみによる使用のために予約することができ、Ｎ２個のエントリのサブセット（Ｎ２はＮより小さい）は、第２のスレッドのみによる使用のために予約することができ、残りのＮ−（Ｎ１＋Ｎ２）個のエントリのサブセットは、いずれかのスレッドに割り当てられてもよい。実施形態では、この手法は、アロケータ回路１８１０の１つまたは複数の例によって実施され得る。
【０１８８】
ロードの完了がキャッシュからデータを読み取ることに依存する実施形態では、各キャッシュエントリは、そのエントリからのロードを含むスレッドによってそのエントリがロックされていることを示すためのビットを含むことができる。そのインジケータビットが設定されたエントリの置換は、ロードの完了に関連してビットがクリアされるか、またはスレッドがパイプラインフラッシュイベント（例えば、予測ミス分岐）を経験するまで防止され得る。実施形態では、この手法は、アロケータ回路１８１０の１つまたは複数の例によって実施され得る。
【０１８９】
一実施形態では、リソース使用量カウンタ１８２０は、特定のスレッドに関するリタイアキュー内の最も古いエントリについて、そのスレッド（ストールされたスレッド）が分割不可能なリソースへの対応するディスパッチを待機していた、クロックサイクルの数をカウントするためのスレッドごとのハードウェアカウンタであり得る（スレッドにはディスパッチスロットおよびライトバックスロットが必要であるため、この条件にはリタイアキューが含まれる）。アロケータ回路１８１０は、ストールされたスレッドのカウントが閾値に達するかそれを超えると、分割不可能のリソースのためのスケジューラに異なるスレッドからのオペレーションを割り当てることを（例えば、上述のように）動的に無効にするかブロックすることができる。あるいは、分割不可能なリソースへのあらゆるオペレーションのディスパッチは、所与の数のクロックサイクルの間無効にされるかまたはブロックされ得る。
【０１９０】
これらの手法は、ある範囲のクロックサイクルを消費する異なるオペレーションを実行し得る実行ユニットなどの分割不可能なリソースの使用に関するデッドロックタイプの状況を防ぐことができる。例えば、単一サイクルで完了することができるオペレーションが、本来連続した複数サイクルのオペレーションを完了することによってビジー状態に保たれ得るリソースを使用することを可能にすることができる。
【０１９１】
閾値は、固定（例えば、ハードワイヤード）、（例えば、ハードウェアまたはファームウェアによって）構成可能または（例えば、ソフトウェアによって）プログラム可能であり得る。閾値は、スループットに関連するものや公平性に関連するものなどを含む、様々な要因または基準に基づいて選択および／または動的に調整され得る。例えば、公平性が優先される場合は、閾値を徐々に下げて、各スレッドをより積極的に進行させることができ、スループットが優先される場合は、閾値を徐々に上げて、進行中のスレッドを中断することなく継続的に続行できるようにすることができる。
【０１９２】
一部の実施形態のまとめ
本発明の一実施形態は、デッドロック回避ハードウェアおよびリソースを備えるプロセッサを含み得る。デッドロック回避ハードウェアは、アロケータ回路とリソース使用量カウンタとを含み得る。アロケータ回路は、リソース使用量カウンタからの出力に基づいて、リソースをスレッドに割り当てるべきか否かを判定することができる。
【０１９３】
データパス機能
本発明の実施形態によるプロセッサコアは、命令セットアーキテクチャ（ＩＳＡ）によって提供されるよりも狭いデータパスを有するＩＳＡをサポートするための様々な機能を含み得る。いくつかのそのような機能は、以下の非限定的な例を用いて別々に説明されるが、実施形態はそのような機能の任意の組み合わせを含み得る。
【０１９４】
プロセッサコアは、より大きなサイズのオペランドに対するオペレーション（例えば、サイズが２５６ビットのオペランドに対するロード／ストア／算術演算）を可能にする機能を、より小さいオペランドを操作する複数のマイクロオペレーション（μｏｐ）（例えば、サイズが１２８ビットの値を操作する複数のμｏｐ）に分割することによって、これらのオペレーションをサポートし得る。そのような機能は、様々な理由で望ましい場合があり、例えば、プロセッサは、より大きいオペランドサイズを含む命令セットアーキテクチャをサポートし得るが、より小さいオペランドサイズに基づくマイクロアーキテクチャを使用し得る。追加的または代替的に、プロセッサは、より大きいオペランドサイズを含む命令セットアーキテクチャをサポートし、かつこのより大きいサイズのレジスタを含むレジスタファイルを有し得るが、より小さいチャンクのデータしか処理できない実行ユニットを含む場合がある。追加的または代替的に、プロセッサは、より大きなサイズのレジスタファイル、実行ユニット、およびロード／ストアポートを有することができるが、より小さいサイズのオペランドを使用してμｏｐを実行することが、例えば節電またはスケジューリング目的のために望ましい場合がある。下記の機能を含むプロセッサの他の潜在的な利点には、限定するものではないが、該当する基準のほんのいくつかを挙げると、パフォーマンスの向上、消費電力の削減、省電力機能の実装、公平性、最低保証パフォーマンス、スループット、クロック当たりの実行命令数（ＩＰＣ）、単位時間当たりの実行命令数、サービス品質、ならびに時間および／またはメモリ効率の向上を含む。
【０１９５】
２５６〜１２８ビットデータパスのロードおよびストア
本発明の実施形態によれば、プロセッサコアは、１２８ビットマイクロオペレーション（μｏｐ）を使用して２５６ビットロードおよびストアを可能にする機能をサポートすることができる。一部の実施形態では、プロセッサは、２５６ビット命令セットアーキテクチャをサポートし得るが、１２８ビットレジスタファイルを含む１２８ビットマイクロアーキテクチャを使用し得る。他の実施形態では、プロセッサは、２５６ビット命令セットアーキテクチャおよび２５６ビットレジスタファイルを有することができるが、１２８ビットチャンクのデータしか処理できないロードポートおよび／またはストアポートを含み得る。
【０１９６】
図１９は、一部の実施形態による、１２８ビットμｏｐペアを使用する２５６ビットレジスタファイルへの２５６ビットロードを示す図である。メモリ１９０１は、メモリロケーション１９０２に格納されている値などの一連の２５６ビット値を含む。第１のマイクロｏｐ１９０３は、メモリロケーション１９０２に格納されている値の下半分を読み出し、第２のマイクロｏｐ１９０４は、メモリロケーション１９０２に格納されている値の上半分を読み出す。メモリロケーション１９０２に格納された値の２つの半分が一緒にブレンドされ（１９０５）、ブレンドオペレーションの結果が２５６ビットレジスタファイル１９０６に入れられる。
【０１９７】
図２０は、一部の実施形態による、図１９を参照して上述したプロセスを表す流れ図である。命令をデコードするプロセス（２００１）の間に２５６ビットロードが検出された場合に、第１のロードμｏｐ、第２のロードμｏｐ、およびブレンドμｏｐを含む３つのμｏｐが生成される（ボックス２００２）。μｏｐは実行されるようにスケジューリングされ、各μｏｐについて、プロセッサは、ロード／ブレンドされるデータが準備されるまで待機し得る（２００３）。第１のロードμｏｐが実行されると、ボックス２００４に示すように、プロセッサは、メモリロケーション１９０２に格納されている値の下半分を読み出すことができる。第２のロードμｏｐが実行されると、ボックス２００４に示すように、プロセッサは、メモリロケーション１９０２に格納されている値の上半分を読み出すことができる。ブレンドμｏｐが実行されると、ボックス２００４に示されるように、メモリロケーション１９０２に格納された値の読み出された２つの半分が結合されて２５６ビットレジスタファイルに入れられる。最後に、ボックス２００５に示すように、デコードされた命令は完了時にリタイアされる。
【０１９８】
一部の実施形態では、値は、１２８ビットμｏｐを使用して２５６ビットレジスタファイルからメモリに格納され得る。図２１は、このプロセスを説明する図である。２５６ビットレジスタファイル２１０１は、レジスタ２１０２などの２５６ビット幅のレジスタを含む。第１のストアμｏｐ  ２１０３は、レジスタ２１０２に格納されている値の下半分を読み出し、これをメモリロケーション２１０４の下半分に格納する。第２のストアμｏｐ  ２１０５は、レジスタ２１０２に格納されている値の上半分を読み出し、これをメモリロケーション２１０４の上半分に格納する。
【０１９９】
図２２は、一部の実施形態による、図２１を参照して上述したプロセスを表す流れ図である。命令をデコードするプロセス（２２０１）の間に２５６ビットストアが検出された場合に、第１のストアμｏｐおよび第２のストアμｏｐを含む２つのμｏｐが生成される（ボックス２２０２）。μｏｐは実行されるようにスケジューリングされ、各μｏｐについて、プロセッサは、ストアされるデータが準備されるまで待機し得る（２２０３）。第１のストアμｏｐが実行されると、ボックス２２０４に示すように、プロセッサは、レジスタ２１０２に格納されている値の下半分を読み出し、これをメモリロケーション２１０４の下半分に書き込むことができる。第２のストアμｏｐが実行されると、ボックス２２０４に示すように、プロセッサは、レジスタ２１０２に格納されている値の上半分を読み出し、これをメモリロケーション２１０４の上半分に書き込むことができる。最後に、ボックス２２０５に示すように、デコードされた命令は完了時にリタイアされる。
【０２００】
一部の実施形態では、２５６ビットロード命令は、２つのμｏｐ、すなわち、２５６ビット値の下半分を第１の１２８ビットレジスタにロードするための第１のμｏｐと、２５６ビット値の上半分を第２の１２８ビットレジスタにロードするための第２のμｏｐと、を実行することによって、２５６ビット値を２つの１２８ビットレジスタにロードすることができる。
【０２０１】
一部の実施形態では、ロードは、「ダブルパンプト（ｄｏｕｂｌｅ−ｐｕｍｐｅｄ）」される、すなわち２回実行される、すなわち、メモリから値の下半分をロードするのが１回目であり、メモリから値の上半分をロードするのが２回目である、単一のμｏｐを用いて達成される。一部の実施形態では、ストアは、「ダブルパンプト（ｄｏｕｂｌｅ−ｐｕｍｐｅｄ）」される、すなわち、レジスタの下半分をメモリにストアするために１回実行され、レジスタの上半分をメモリにストアするために１回実行される、単一のμｏｐを用いて達成される。一部の実施形態では、２５６ビットロードおよび／またはストアを実装するために使用されるμｏｐは、ベクトルスケジューリングアルゴリズムに従ってスケジューリングされ得る。一部の実施形態では、ギャングスケジューリング技法を使用して、ロードおよび／またはストアに含まれる複数のμｏｐを別々の実行ユニットで実行するようにスケジューリングすることができる。
【０２０２】
上記のロード／ストア機能は、いかなる特定のサイズのメモリ、ロードポート、またはレジスタファイルを使用してロードおよび／またはストアを実行することにも限定されない。例えば、上記の技法は、一度に２５６ビットで動作する基礎となるハードウェアを使用して、５１２ビットロードおよび／またはストアを実行するために使用されてもよい。
【０２０３】
２５６〜１２８ビットデータパスのレーン内実行
本発明の実施形態によれば、プロセッサコアは、１２８ビットマイクロオペレーション（μｏｐ）を使用して２５６ビット算術演算を可能にする機能をサポートすることができる。一部の実施形態では、プロセッサは、２５６ビット命令セットアーキテクチャをサポートし得るが、１２８ビットレジスタファイルを含む１２８ビットマイクロアーキテクチャを使用し得る。他の実施形態では、プロセッサは、２５６ビット命令セットアーキテクチャおよび２５６ビットレジスタファイルを有することができるが、１２８ビットチャンクのデータしか処理できない実行ユニットを含み得る。一部の実施形態では、プロセッサは、２５６ビットレジスタファイル、実行ユニット、およびロード／ストアポートを有することができるが、複数の１２８ビットμｏｐを使用して２５６ビット算術演算を実施することが、例えば節電またはスケジューリング目的のために望ましい場合がある。
【０２０４】
図２３は、一部の実施形態によるこのプロセスを示す。２５６ビット命令２３０１は、これを２つの１２８ビット命令２３０２および２３０３に分割することによってデコードされ、これらは次に、１つまたは複数の１２８ビット実行ユニット２３０４、２３０５上での実行のために独立してスケジューリングされる。図２３に示す実施形態によれば、第１の１２８ビットμｏｐ  ２３０２は、２５６ビット算術命令に提供された２５６ビットオペランドの下半分を使用して、命令を実行することができ、次いで、プロセッサは、その結果を２５６ビットデスティネーションレジスタの下半分に格納することができる。第２の１２８ビットμｏｐ  ２３０３は、２５６ビット算術命令に提供された２５６ビットオペランドの上半分を使用して、命令を実行することができ、次いで、プロセッサは、その結果を２５６ビットデスティネーションレジスタの上半分に格納することができる。
【０２０５】
一部の実施形態によれば、２５６ビット命令を１対の１２８ビットμｏｐに分割することは、結果の下半分が２５６ビット命令のオペランドの下半分にのみ基づいており、結果の上半分が２５６ビット命令のオペランドの上半分にのみ基づいている（すなわち、「レーン内」オペレーション）。これらのレーン内シナリオでは、２５６ビット命令の結果は２つの別々の１２８ビットμｏｐの２つの独立した結果として表すことができるため、２つの１２８ビットμｏｐは互いに独立してスケジューリングされ得る。
【０２０６】
一部の実施形態では、１２８ビットμｏｐのそれぞれは、同じ命令（例えば、ＡＤＤ命令）を表し、２５６ビット命令は、「ダブルパンプト（ｄｏｕｂｌｅ−ｐｕｍｐｅｄ）」される、すなわち、結果の下半分を計算するために１回実行され、結果の上半分を計算するために１回実行される、単一の１２８ビットのμｏｐを用いて実装され得る。一部の実施形態では、２５６ビット命令は、２つの異なるμｏｐに「分割」することができ、２つの異なるμｏｐは、独立してスケジューリングされ、１つまたは複数の実行ユニット上で実行される。一部の実施形態では、２５６ビット命令は、それぞれが１２８ビットμｏｐを実行する２つの実行ユニットを同時に使用して実行することができる（この手順は、場合によっては「ギャングスケジューリング」として当技術分野で知られている）。
【０２０７】
上記のレーン内実行機能は、いかなる特定のサイズのメモリ値、ロードポート、実行ユニット、またはレジスタファイルを使用して命令を実行することにも限定されない。例えば、上記の技法は、一度に２５６ビットで動作する基礎となるハードウェアを使用して、５１２ビットオペレーションを実行するために使用されてもよいし、一度に５１２ビットで動作する基礎となるハードウェアを使用して、１０２４ビットオペレーションを実行するために使用されてもよい。
【０２０８】
２５６〜１２８ビットデータパスのレーン間実行
一部の実施形態では、実行される２５６ビット命令は、結果の下半分がオペランドの上半分に格納された値に依存する、および／または結果の上半分がオペランドの下半分に格納された値に依存する（つまり、「レーン間」オペレーション）ため、２つの完全に独立した１２８ビットμｏｐに分割することができない。
【０２０９】
一時的格納領域を使用して部分的な結果を格納し、それを次に最終的な結果に結合してデスティネーションレジスタに格納することによって、レーン間オペレーションを実施することができる。図２４は、この機能の一部の実施形態によるこのプロセスを示す。レーン間２５６ビット命令２４０１は、これを２つの１２８ビット命令２４０２および２４０３に分割することによってデコードされ、これらは次に、１つまたは複数の１２８ビット実行ユニット２４０６、２４０７上での実行のために独立してスケジューリングされる。一時的格納領域２４０４は、μｏｐ  ２４０２および２４０３によって生成された一部の結果をストアするために使用される。これらの一時的な結果は、最終結果を生成するために第３のμｏｐ  ２４０５によって使用される。
【０２１０】
一部の実施形態では、１２８ビットμｏｐ  ２４０２および２４０３のそれぞれは、同じ命令を表し、「ダブルパンプト（ｄｏｕｂｌｅ−ｐｕｍｐｅｄ）」される、すなわち、一時的格納領域２４０４に格納される第１の部分的な結果を計算するために１回実行され、一時的格納領域２４０４に格納される第２の部分的な結果を計算するために１回実行される、単一の１２８ビットμｏｐを用いて実装され得る。一部の実施形態では、２５６ビット命令は、２つの異なるμｏｐに「分割」することができ、２つの異なるμｏｐは、独立してスケジューリングされ、１つまたは複数の実行ユニット上で実行され、その結果の一部は一時的格納領域に格納される。一部の実施形態では、２５６ビット命令は、それぞれが１２８ビットμｏｐを実行する２つの実行ユニットを同時に使用して実行することができる（この手順は、場合によっては「ギャングスケジューリング」として当技術分野で知られている）。一部の実施形態では、２５６ビットμｏｐは、２５６ビットの能力を有する「特別な」実行ユニットを使用して実行されて、一時的格納領域（例えば一時的格納領域２４０４）の必要性を排除することができる。
【０２１１】
上記のレーン間実行機能は、いかなる特定のサイズのメモリ値、ロードポート、実行ユニット、またはレジスタファイルを使用して命令を実行することにも限定されない。例えば、上記の技法は、一度に２５６ビットで動作する基礎となるハードウェアを使用して、５１２ビットオペレーションを実行するために使用されてもよいし、一度に５１２ビットで動作する基礎となるハードウェアを使用して、１０２４ビットオペレーションを実行するために使用されてもよい。
【０２１２】
追加の独立した組み合わせ可能な機能
本発明の実施形態によるプロセッサコアは、性能の向上および／または電力消費の低減をサポートするための様々な追加の機能を含み得る。いくつかのそのような機能は、以下の非限定的な例を用いて別々に説明されるが、実施形態はそのような機能の任意の組み合わせを含み得る。
【０２１３】
マイクロｏｐキャッシュ
実施形態によれば、プロセッサコアは、マイクロｏｐキャッシュ機能をサポートし得る。一部の実施形態では、マイクロｏｐキャッシュ機能は、割り当て、置き換えポリシー、および異なる構造タイプ（例えば、物理的、仮想的など）を含み得る。マイクロｏｐキャッシュ機能におけるインテリジェントな割り当ては、単純な命令に対して、ループストリームまたはマイクロコードシーケンサ（ＭＳ）フローを伴う複合命令などのタイプの命令を検出し、それに従って割り当てることができる。マイクロｏｐキャッシュ機能はまた、将来の潜在的な再使用のために、および／またはキャッシュラインごとに割り当てるマイクロオペレーションの数を判定するために、犠牲キャッシュを追加することを含み得る。一部の実施形態では、マイクロｏｐキャッシュは、後でデコードされた命令を再利用するために、マイクロｏｐバッファ内にデコードされた命令（マイクロｏｐ）を保存するために使用されてもよい。一部の実施形態では、マイクロｏｐバッファの使用は、命令キャッシュルックアップおよびデコードステージの複数（例えば、少なくとも２つ）のサイクルを回避することによってパイプラインを短くすることができる。既に使用可能であり、マイクロｏｐバッファにおいてデコードされたマイクロｏｐバッファを使用することによって電力の節約もできる。一部の実施形態では、類似のイベント（例えば、マイクロｏｐタイプ、マイクロｏｐデコードの困難さ、マイクロｏｐ使用パターン）を有する複数のスレッドが存在する可能性があり、優先順位方式は、マイクロｏｐキャッシュにリソースを割り当てるために、スレッド間で同順位がある場合に使用され得る。一部の実施形態では、マイクロｏｐキャッシュ機能は、パイプラインにおいて最高のＩＰＣおよび／または命令スループットを達成するために、マイクロｏｐキャッシュのためのインテリジェントな割り当て、置換ポリシー、および／または構成を提供することができる。
【０２１４】
図２５は、実施形態による、プロセッサに含まれ得るマイクロｏｐキャッシュ機能を示すブロック図である。マイクロｏｐキャッシュ機能は、命令デコーダ２５０１と、インテリジェントアロケーションおよび置換ブロック２５０２と、マイクロｏｐキャッシュ２５０３と、のうちの１つまたは複数を含み得る。インテリジェントアロケーションおよび置換ブロック２５０２は、命令デコーダ２５０１からの命令を受信することができる。命令デコーダ２５０１は省略することもでき、インテリジェントアロケーションおよび置換ブロック２５０２は、既にデコードされた命令を受信することができる。インテリジェントアロケーションおよび置換ブロック２５０２は、複合命令（例えば、ＭＳフローを伴う）、ループストリームなど、どのタイプの命令を割り当てるべきかをアルゴリズム的に判定することができる。インテリジェントアロケーションおよび置換ブロック２５０２は、マイクロｏｐキャッシュ２５０３内のどこに命令を割り当てるべきかを判定し、判定された場所にその命令を割り当てることができる。一部の実施形態では、インテリジェントアロケーションおよび置換ブロック２５０２は、例えば、命令の使用パターン履歴、使用の頻度、デコードの困難さ、およびデコード時間のうちの１つまたは複数に基づいて、どのタイプの命令を割り当てるかをアルゴリズム的に判定することができる。インテリジェントアロケーションおよび置換ブロックは、例えば、以下のパラメータ、すなわち、最も長い間使われていない命令情報、命令の使用パターン履歴、使用の頻度、デコードの困難さ、命令はループの一部であるか否か、ループからの他の命令が格納されているか否か、およびマイクロｏｐキャッシュに格納されている命令のデコード時間のうちの１つまたは複数に基づいて、命令をマイクロｏｐキャッシュのどこに格納するかを判定することができる。これらのパラメータは、例えば、インテリジェントアロケーションおよび置換ブロック内、マイクロｏｐキャッシュ内、および／または他の場所（例えば、別のテーブル内）に格納することができる。
【０２１５】
図２６は、実施形態による、プロセッサによって実行され得るマイクロｏｐキャッシュ機能のための方法を示す流れ図である。本方法は、ボックス２６０１に示すように、命令を受信するステップを含み得る。本方法は、ボックス２６０２に示すように、複合命令、ループストリームなどのどのタイプの命令を割り当てるべきかをアルゴリズム的に判定するステップをさらに含み得る。本方法は、ボックス２６０３に示すように、マイクロｏｐキャッシュのどこに命令を割り当てるべきかを判定するステップをさらに含み得る。本方法は、ボックス２６０４に示すように、マイクロｏｐキャッシュの判定された場所に命令を割り当てるステップをさらに含み得る。
【０２１６】
図２７は、実施形態による、プロセッサに含まれ得るマイクロｏｐキャッシュ機能を示すブロック図である。マイクロｏｐキャッシュ機能は、分岐予測ユニット（ＢＰＵ）２７０１と、命令キャッシュタグ２７０２と、マイクロｏｐタグ２７０３と、命令キャッシュ２７０４と、マイクロｏｐキャッシュ２７０５と、デコーダ２７０６と、マイクロｏｐキュー２７０７のうちの１つまたは複数を含み得る。ＢＰＵ  ２７０１は、（例えば、条件付きオペレーションを実行するか否かを判定するために）分岐予測を実行することができる。図２７の左側に示すように、命令キャッシュタグ２７０２は、例えば、ＢＰＵ  ２７０１からの命令タグを受信し、その命令タグに関連する命令を判定することができる。命令は、命令キャッシュ２７０４から読み出され、デコーダ２７０６によってデコードされてもよい。次いで、マイクロｏｐキュー２７０７は、デコーダ２７０６からのデコードされた命令を受信することができる。図２８の右側に示すように、マイクロｏｐタグ２７０３は、ＢＰＵ  ２７０１からの命令タグを受信し、関連するマイクロｏｐタグを判定することができる。次いで、マイクロｏｐ２７０５をチェックして、マイクロｏｐタグに関連付けられたマイクロｏｐがマイクロｏｐキャッシュ２７０５に格納されているか否かを判定し、マイクロｏｐ２７０５からマイクロｏｐを取り出すことができる。マイクロｏｐは、例えば、図２５および図２６に関連して上述したように、デコードされ、マイクロｏｐキャッシュ２７０５に格納され得る。マイクロｏｐキャッシュ機能は、物理的および／または仮想的であり得る。マイクロｏｐキャッシュ機能は、パイプラインを短縮することを含み得る。例えば、図２７に示されるように、マイクロｏｐが以前にデコードされてマイクロｏｐキャッシュに格納されている場合、デコードオペレーションは、マイクロｏｐがマイクロｏｐキャッシュに既に格納されている場合に実行される必要がない場合があるため、右側のパイプラインは左側のパイプラインより短い。マイクロｏｐキャッシュ機能は、マイクロｏｐキャッシュ２７０５内の次ライン予測を含み得る。マイクロｏｐキャッシュ機能は、マイクロｏｐキャッシュ２７０５にＭＳフローを格納し得る。マイクロｏｐキャッシュ機能は、どのマイクロｏｐをキャッシュに格納するか、およびどのマイクロｏｐを新しいマイクロｏｐと交換するかを判定するために置換ポリシーを使用することができる。マイクロｏｐキャッシュ機能は、ループストリームおよび／または複合命令など、マイクロｏｐキャッシュ２７０５に割り当てる命令の種類を判定することができる。マイクロｏｐキャッシュ機能は、マイクロオペレーションを優先順位付けし得る。マイクロｏｐキャッシュ機能は、犠牲キャッシュ（図示せず）を含むことができる。犠牲キャッシュは、デコードするのが困難であった命令など、潜在的な再使用のための命令を格納することができる。
【０２１７】
図２８は、実施形態による、プロセッサに含まれ得るマイクロｏｐキャッシュ機能を示すブロック図である。マイクロｏｐキャッシュ機能は、物理マイクロｏｐキャッシュ２８０１および仮想マイクロｏｐキャッシュ２８０２のうちの１つまたは複数を含み得る。物理マイクロｏｐキャッシュ２８０１は、例えば、物理アドレス空間を使用してマイクロｏｐを物理メモリに格納することができる。仮想マイクロｏｐキャッシュは、例えば、仮想アドレス空間を使用して仮想メモリにマイクロｏｐを格納することができる。物理マイクロｏｐキャッシュ２８０１および／または仮想マイクロｏｐキャッシュ２８０２は、例えばコンテキストおよび／またはモード切り替え時にフラッシュされてもよい。物理マイクロｏｐキャッシュ２８０１および／または仮想マイクロｏｐキャッシュ２８０２は競合的に共有されてもよい。
【０２１８】
一部の実施形態のまとめ
一実施形態は、マイクロｏｐキャッシュに割り当てる命令のタイプをアルゴリズム的に判定し、判定されたタイプの命令をマイクロｏｐキャッシュに割り当てる場所を判定し、判定された場所に命令を割り当てる、ように構成されたプロセッサを含み得る。
【０２１９】
一部の実施形態では、以下のうちの１つまたは複数が当てはまる。一部の実施形態では、プロセッサは、インテリジェントアロケーションおよび置換ブロックに、命令デコーダからの命令を受信させるようにさらに構成される。一部の実施形態では、判定された命令タイプは、複合命令およびループストリームのうちの少なくとも１つである。一部の実施形態では、プロセッサは、分岐予測ユニット（ＢＰＵ）と、命令キャッシュタグと、マイクロｏｐタグと、命令キャッシュと、マイクロｏｐキャッシュと、デコーダと、マイクロｏｐキューのうちの１つまたは複数を含み得る。一部の実施形態では、マイクロｏｐキャッシュ機能は、次ライン予測を含み得る。一部の実施形態では、プロセッサは、マイクロｏｐキャッシュにＭＳフローを格納するように構成される。一部の実施形態では、プロセッサは、マイクロオペレーションを優先順位付けするように構成される。一部の実施形態では、プロセッサは、犠牲キャッシュを含む。一部の実施形態では、マイクロｏｐキャッシュは、物理マイクロｏｐキャッシュおよび仮想マイクロｏｐキャッシュのうちの少なくとも１つを含む。一部の実施形態では、物理マイクロｏｐキャッシュおよび仮想マイクロｏｐキャッシュのうちの少なくとも１つは競合的に共有されてもよい。一部の実施形態では、マイクロｏｐキャッシュにどのタイプの命令を割り当てるかの判定は、使用パターン履歴、使用の頻度、デコードの困難さ、およびデコード時間のうちの１つまたは複数に少なくとも部分的に基づき得る。一部の実施形態では、判定されたタイプの命令をマイクロｏｐキャッシュに格納する場所の判定は、最も長い間使われていない命令情報、命令の使用パターン履歴、使用の頻度、デコードの困難さ、ループステータス情報、およびマイクロｏｐキャッシュに格納された命令のデコード時間のうちの１つまたは複数に基づき得る。
【０２２０】
一実施形態は、マイクロｏｐキャッシュに割り当てる命令のタイプをアルゴリズム的に判定するステップと、判定されたタイプの命令をマイクロｏｐキャッシュに割り当てる場所を判定するステップと、判定された場所に命令を割り当てるステップと、を含む方法を含み得る。
【０２２１】
一部の実施形態では、以下のうちの１つまたは複数が当てはまる。一部の実施形態では、本方法は、インテリジェントアロケーションおよび置換ブロックに、命令デコーダからの命令を受信させるステップをさらに含み得る。一部の実施形態では、判定された命令タイプは、複合命令およびループストリームのうちの少なくとも１つである。一部の実施形態では、本方法は、分岐予測ユニット（ＢＰＵ）と、命令キャッシュタグと、マイクロｏｐタグと、命令キャッシュと、マイクロｏｐキャッシュと、デコーダと、マイクロｏｐキューのうちの１つまたは複数を使用するステップをさらに含み得る。一部の実施形態では、マイクロｏｐキャッシュ機能は、次ライン予測を含み得る。一部の実施形態では、本方法は、マイクロｏｐキャッシュにＭＳフローを格納するステップをさらに含み得る。一部の実施形態では、本方法は、マイクロオペレーションを優先順位付けするステップをさらに含み得る。一部の実施形態では、方法は、犠牲キャッシュを使用するステップをさらに含み得る。一部の実施形態では、マイクロｏｐキャッシュを使用するステップは、物理マイクロｏｐキャッシュおよび仮想マイクロｏｐキャッシュのうちの少なくとも１つを使用するステップを含む。一部の実施形態では、本方法は、物理マイクロｏｐキャッシュおよび仮想マイクロｏｐキャッシュのうちの少なくとも１つを競合的に共有するステップをさらに含み得る。一部の実施形態では、マイクロｏｐキャッシュにどのタイプの命令を割り当てるかの判定は、使用パターン履歴、使用の頻度、デコードの困難さ、およびデコード時間のうちの１つまたは複数に少なくとも部分的に基づき得る。一部の実施形態では、判定されたタイプの命令をマイクロｏｐキャッシュに格納する場所の判定は、最も長い間使われていない命令情報、命令の使用パターン履歴、使用の頻度、デコードの困難さ、ループステータス情報、およびマイクロｏｐキャッシュに格納された命令のデコード時間のうちの１つまたは複数に基づき得る。
【０２２２】
一実施形態は、プロセッサによって実行された場合にプロセッサに方法を実行させる少なくとも１つの命令を格納する非一時的機械可読媒体を含み得、本方法は、マイクロｏｐキャッシュに割り当てる命令のタイプをアルゴリズム的に判定するステップと、判定されたタイプの命令をマイクロｏｐキャッシュに割り当てる場所を判定するステップと、判定された場所に命令を割り当てるステップと、を含む。
【０２２３】
一部の実施形態では、以下のうちの１つまたは複数が当てはまる。一部の実施形態では、本方法は、インテリジェントアロケーションおよび置換ブロックに、命令デコーダからの命令を受信させるステップをさらに含み得る。一部の実施形態では、判定された命令タイプは、複合命令およびループストリームのうちの少なくとも１つである。一部の実施形態では、本方法は、分岐予測ユニット（ＢＰＵ）と、命令キャッシュタグと、マイクロｏｐタグと、命令キャッシュと、マイクロｏｐキャッシュと、デコーダと、マイクロｏｐキューのうちの１つまたは複数を使用するステップをさらに含み得る。一部の実施形態では、マイクロｏｐキャッシュ機能は、次ライン予測を含み得る。一部の実施形態では、本方法は、マイクロｏｐキャッシュにＭＳフローを格納するステップをさらに含み得る。一部の実施形態では、本方法は、マイクロオペレーションを優先順位付けするステップをさらに含み得る。一部の実施形態では、方法は、犠牲キャッシュを使用するステップをさらに含み得る。一部の実施形態では、マイクロｏｐキャッシュを使用するステップは、物理マイクロｏｐキャッシュおよび仮想マイクロｏｐキャッシュのうちの少なくとも１つを使用するステップを含む。一部の実施形態では、本方法は、物理マイクロｏｐキャッシュおよび仮想マイクロｏｐキャッシュのうちの少なくとも１つを競合的に共有するステップをさらに含み得る。一部の実施形態では、マイクロｏｐキャッシュにどのタイプの命令を割り当てるかの判定は、使用パターン履歴、使用の頻度、デコードの困難さ、およびデコード時間のうちの１つまたは複数に少なくとも部分的に基づき得る。一部の実施形態では、判定されたタイプの命令をマイクロｏｐキャッシュに格納する場所の判定は、最も長い間使われていない命令情報、命令の使用パターン履歴、使用の頻度、デコードの困難さ、ループステータス情報、およびマイクロｏｐキャッシュに格納された命令のデコード時間のうちの１つまたは複数に基づき得る。
【０２２４】
一実施形態は、メモリとプロセッサとを有するシステムを備え、プロセッサが、マイクロｏｐキャッシュに割り当てる命令のタイプをアルゴリズム的に判定し、判定されたタイプの命令をマイクロｏｐキャッシュに割り当てる場所を判定し、判定された場所に命令を割り当てる、ように構成される。
【０２２５】
一部の実施形態では、以下のうちの１つまたは複数が当てはまる。一部の実施形態では、プロセッサは、インテリジェントアロケーションおよび置換ブロックに、命令デコーダからの命令を受信させるようにさらに構成される。一部の実施形態では、判定された命令タイプは、複合命令およびループストリームのうちの少なくとも１つである。一部の実施形態では、プロセッサは、分岐予測ユニット（ＢＰＵ）と、命令キャッシュタグと、マイクロｏｐタグと、命令キャッシュと、マイクロｏｐキャッシュと、デコーダと、マイクロｏｐキューのうちの１つまたは複数を含み得る。一部の実施形態では、マイクロｏｐキャッシュ機能は、次ライン予測を含み得る。一部の実施形態では、プロセッサは、マイクロｏｐキャッシュにＭＳフローを格納するように構成される。一部の実施形態では、プロセッサは、マイクロオペレーションを優先順位付けするように構成される。一部の実施形態では、プロセッサは、犠牲キャッシュを含む。一部の実施形態では、マイクロｏｐキャッシュは、物理マイクロｏｐキャッシュおよび仮想マイクロｏｐキャッシュのうちの少なくとも１つを含む。一部の実施形態では、物理マイクロｏｐキャッシュおよび仮想マイクロｏｐキャッシュのうちの少なくとも１つは競合的に共有されてもよい。一部の実施形態では、マイクロｏｐキャッシュにどのタイプの命令を割り当てるかの判定は、使用パターン履歴、使用の頻度、デコードの困難さ、およびデコード時間のうちの１つまたは複数に少なくとも部分的に基づき得る。一部の実施形態では、判定されたタイプの命令をマイクロｏｐキャッシュに格納する場所の判定は、最も長い間使われていない命令情報、命令の使用パターン履歴、使用の頻度、デコードの困難さ、ループステータス情報、およびマイクロｏｐキャッシュに格納された命令のデコード時間のうちの１つまたは複数に基づき得る。
【０２２６】
ムーブの排除
プロセッサコアは、本発明の実施形態によるムーブの排除機能をサポートすることができる。多くのプロセッサにおいて、ムーブ命令を実行することは、通常、あるレジスタから別のレジスタへ値を移動すること、または即値をレジスタへ移動することを含む。そのようなムーブ命令の頻度のために、ムーブ命令が効率的に処理される場合、プロセッサのパフォーマンスは向上し得る。
【０２２７】
ほとんどの命令は、いくつかのソースオペランドを操作し、結果を生成する。命令は、明示的に、または間接的に、値の読み書きが行われる、読み出し元の場所および書き込み先の場所を指定する（ｎａｍｅ）。指定先（ｎａｍｅ）は、論理（アーキテクチャ）レジスタまたはメモリ内の場所のいずれかであり得る。
【０２２８】
通常、プロセッサに使用可能な物理レジスタの数は論理レジスタの数を超えているので、レジスタリネーミングを利用してパフォーマンスを向上させることができる。特に、アウトオブオーダプロセッサの場合、レジスタリネーミングにより、元のプログラムの順序から外れて命令を実行することができる。よって、多くのアウトオブオーダプロセッサでは、元のムーブ命令で指定されている論理レジスタが物理レジスタにリネーミングされるようにムーブ命令がリネーミングされる。
【０２２９】
論理レジスタをリネーミングすることは、論理レジスタを物理レジスタにマッピングすることを含む。これらのマッピングは、レジスタエイリアステーブル（ＲＡＴ）に格納され得る。ＲＡＴは、各論理レジスタの最新のマッピングを維持する。ＲＡＴは、論理レジスタによってインデックス付けされ、対応する物理レジスタへのマッピングを提供する。
【０２３０】
図２９に示すのは、３つの構造、すなわち、ＲＡＴ  ２９００、アクティブリスト（ＡＬ）２９０２、およびフリーリスト（ＦＬ）２９０４を含むレジスタリネーミングおよび依存関係追跡方式である。リネーミングされた命令によって指定された各論理レジスタに対して、ＦＬ  ２９０４からの未使用の物理レジスタが割り当てられ、ＲＡＴ  ２９００は、この新しいマッピングで更新される。物理レジスタは、現在の命令ウィンドウ内の命令によって参照されなくなると、再び自由に使用（つまり、再生）できる。
【０２３１】
図２９に示すデータ構造に基づいて、レジスタ再生のための１つの方法は、ＲＡＴ  ２９００からそれを追い出した命令、すなわち、物理レジスタへの新しいマッピングを作成した命令がリタイアしたときにのみ物理レジスタを再生することである。その結果、新しいマッピングがＲＡＴ  ２９００を更新するたびに、追い出された古いマッピングがＡＬ  ２９０２にプッシュされる。（ＡＬエントリは、命令ウィンドウ内の各命令に関連付けられている。）  命令がリタイアすると、もしあれば、ＡＬ  ２９０２に記録された古いマッピングの物理レジスタが再生され、ＦＬ  ２９０４にプッシュされる。このサイクルが図２９に示されている。
【０２３２】
多くの命令では、ソースレジスタの１つがデスティネーションレジスタとしても使用される。このソースレジスタに格納された値が（プログラムの順序で）後続の命令によって必要とされる場合、レジスタムーブ命令を後続の命令の前に挿入して、ソースレジスタ内のソースオペランドを別の論理位置にコピーして、後続の命令がアクセスできるようにすることができる。
【０２３３】
レジスタ−ムーブ命令を挿入するもう１つの理由は、手続き呼び出しの前にパラメータ値を適切なレジスタに設定するためである。
【０２３４】
その結果、レジスタムーブ命令の数がかなり多くなり得る。従って、効率的なレジスタリネーミングおよび再生方式を用いてレジスタムーブ命令の効率的な実行を提供することが望ましい場合がある。
【０２３５】
図１Ｂでは、レジスタリネーミング機能ユニットは、リネーミング／アロケータユニット１５２として示され、物理レジスタは、物理レジスタファイルユニット１５８として示されている。図３では、レジスタリネーミング機能ユニットは、整数リネーミングユニット３２１およびＦＰリネーミングユニット３３１として示され、物理レジスタは、整数物理レジスタファイル３２３およびＦＰレジスタファイル３３３によって示されている。すべての論理レジスタは、物理レジスタへのマッピングを有し、マッピングはエントリとしてＲＡＴ  ２９００に格納される。ＲＡＴ  ２９００内のエントリは、論理レジスタによってインデックス付けされ、物理レジスタへのポインタを含む。
【０２３６】
命令のリネーミング中に、ＲＡＴ内の現在のエントリは、命令のソース論理レジスタ（単数または複数）をリネーミングするために必要なマッピングを提供し、新しいマッピングが命令のデスティネーション論理レジスタに対して作成される。この新しいマッピングは、ＲＡＴ内の古いマッピングを追い出し、ＲＡＴは、新しいマッピングで更新される。
【０２３７】
表１は、レジスタリネーミングの一例を示す。表１では、元のプログラムの順序の４つの命令が第１列に提供されている。リネーミングされた命令が第２列に示されている。各リネーミングされた命令の隣には、命令のリネーミング後のＲＡＴ内の現在のエントリがある。最後の列は、命令のリネーミングによって追い出されたマッピングを提供している。簡単のために、３つの論理レジスタ、ＬＲａ、ＬＲｂ、およびＬＲｂのみを考える。物理レジスタはＰＲｉで表され、ｉは整数である。表１の最初のエントリは、最初にリストされている命令がリネーミングされる前のＲＡＴの現在の状態を提供している。
【０２３８】
例えば、表１では、第１の命令ＬＲａ＋２→ＬＲａ（即値２が論理レジスタＬＲａの値に加算され、その結果が論理レジスタＬＲａに格納されることを示している）がＰＲ１＋２→ＰＲ２にリネーミングされ、物理レジスタＰＲ２が使用可能であると仮定している。この命令では、新しいマッピングＬＲａ→ＰＲ２が作成され、古いマッピングＬＲａ→ＰＲ１がＲＡＴから追い出される。
【０２３９】
第１の命令に対する第２および第４の命令の真の依存関係、および第２の命令に対する第３の命令の真の依存関係があることに留意されたい。しかしながら、レジスタリネーミングにより、第２の命令と第４の命令との間の出力依存関係、ならびに第３の命令と第４の命令と間の反依存関係が取り除かれ、その結果、実行順序が様々な真の依存関係に従うという条件で、第２、第３、および第４の命令が順不同で実行され得る。
【表１】
2020513605.tif 000003
【０２４０】
リネーミングされた命令は、命令ウィンドウバッファに配置される。命令ウィンドウバッファ内のエントリは、リネーミングされた命令のオペコード、および後述する他のフィールドを含む。この実施形態では、命令の結果は命令ウィンドウバッファに格納されず、物理レジスタファイルに存在する。
【０２４１】
命令ウィンドウバッファは、元のプログラムの順序で命令をリタイアすることを可能にする。複合命令セットコンピュータ（ＣＩＳＣ）アーキテクチャの場合、複合命令を構成するすべてのマイクロ命令が一緒にリタイアされると、複合命令はリタイアされる。命令ウィンドウバッファは循環バッファとして作用し、第１のポインタはリタイアされる次の命令を指し、第２のポインタは新たにデコードされた命令に対して次に使用可能なエントリを指す。ポインタのインクリメントは、モジュロＮ演算で行われ、Ｎはバッファ内の使用可能なエントリの数である。命令がリタイアすると、第１のポインタがインクリメントされる。ポインタは、縮小命令セットコンピュータ（ＲＩＳＣ）アーキテクチャにおいてデコードされた各命令に対して１つずつインクリメントされ、ＣＩＳＣアーキテクチャに対しては２つ以上でインクリメントされ得る。
【０２４２】
結果をメモリロケーションに書き込むストア命令の場合、データキャッシュは命令のリタイアに更新される。結果を論理レジスタに書き込む命令では、論理レジスタ専用のレジスタがないため、リタイア時に書き込みを行う必要はない。そのような命令の場合、物理レジスタファイルは、命令のリネーミングされたときにデスティネーション論理レジスタがマッピングされていた物理レジスタ内にリタイア命令の結果を有する。
【０２４３】
スケジューラは、実行のために実行ユニットに対して命令をスケジューリングする。スケジューリング機能は、例えば、Ｔｏｍａｓｕｌｏのアルゴリズム（またはその変形）を実施するリザベーションステーションによって実現することができる。実行ユニットは、実行される命令（またはマイクロ命令）に応じて、データキャッシュまたは物理レジスタファイルからデータを取り出し、またはデータキャッシュまたは物理レジスタファイルにデータを送信することができる。
【０２４４】
本発明の他の実施形態では、物理レジスタファイルおよび命令ウィンドウバッファのデータ構造に含まれる情報内容は、異なる機能ユニットによって実現され得る。例えば、リオーダバッファは、命令ウィンドウバッファと物理レジスタファイルとを置き換えることができ、それにより、結果は、リオーダバッファに格納され、さらに、レジスタファイル内のレジスタは論理レジスタとして専用にされる。このタイプの実施形態では、論理レジスタへの書き込みを指定する命令の結果は、命令のリタイア時に論理レジスタに書き込まれる。
【０２４５】
ここで、２つのタイプのムーブ命令、すなわち、レジスタ間ムーブと、即値−レジスタ間ムーブと、を識別する。レジスタ間ムーブでは、あるレジスタ、すなわちソース論理レジスタから別のレジスタ、すなわちデスティネーション論理レジスタに値が移動される。即値−レジスタ間ムーブでは、即値が論理レジスタに移動される。
【０２４６】
本発明の実施形態では、ムーブ命令は、複数の論理レジスタを同じ物理レジスタにマッピングすることによって実行される。レジスタ間ムーブ命令の実行は、ムーブ命令のデスティネーション論理レジスタを、ムーブ命令のソース論理レジスタによってマッピングされた物理レジスタにマッピングすることによって実行される。
【０２４７】
即値−レジスタ間ムーブ命令の実行は、値照合キャッシュにアクセスすることによって実行することができる。値照合キャッシュ内のエントリは値によってインデックス付けされ、キャッシュエントリは、値を、その値を格納する物理レジスタに関連付ける。値照合キャッシュは、物理レジスタの数よりも少ないエントリを有し得る。値照合キャッシュにヒットがある場合、ムーブ命令のデスティネーション論理レジスタは、値照合キャッシュによって示される物理レジスタにマッピングされる。ヒットがなければ、ムーブの実行は従来技術のアーキテクチャにおけるように実行され、値照合キャッシュが更新される。
【０２４８】
物理レジスタファイルはそれ自体、値照合キャッシュが不要であるように、値照合キャッシュの機能を果たすことができる。この場合、レジスタファイルは、並列なタグ照合を実行するために追加のポートを必要とし、タグは物理レジスタに格納されている値である。
【０２４９】
上述のように、レジスタ間ムーブ命令および即値−レジスタ間ムーブ命令（後者のタイプのムーブについては値照合キャッシュにヒットした場合）は、複数の論理レジスタが同じ物理レジスタにマッピングされる複数のマッピングを作成することによって実行される。実質的に、そのようなムーブ命令は、それらがもはや実行ユニットによって実行されないという意味で「排除」される。代わりに、ムーブの排除がリネーミングステージにおいて実行される。これらの命令は、命令バッファウィンドウに残り、リタイアされる準備ができている。このようなムーブ命令に依存する命令は実際の製作者に直接依存するようにされるため（依存関係はリダイレクトされるため）、依存グラフは破綻する。また、物理レジスタの要件が減り、レジスタファイルへの書き込みが少なくなる可能性がある。
【０２５０】
イディオム排除メカニズムも同様に、命令操作を従来のアウトオブオーダパイプラインに渡さずに命令操作に影響を与える。イディオムは、多くの場合、明示的な命令と比較してより最適化された方法で、特定の効果を達成するためにコーディングされた汎用命令の例である。ムーブイディオムは、Ｒ１＝ＡＤＤ  Ｒ０、＃０などの、他の効果なしにソースレジスタの内容をデスティネーションレジスタに入れるように構成された任意の命令を含む。ゼロイディオムも同様に、Ｒ０＝ＸＯＲ  Ｒ０、Ｒ０などの、レジスタをゼロに設定するようにコード化された汎用命令である。Ｎｏ−ｏｐ（ＮＯＰ）は、明示的なＮＯＰオペコードおよびＲ０＝ＡＤＤ  Ｒ０、＃０などのＮＯＰイディオムを含む、アーキテクチャの状態に影響を与えないように定義された命令である。
【０２５１】
本発明の実施形態は、マイクロｏｐのリネーミング／割り当て帯域幅の節約、パフォーマンスの向上、消費電力の削減、省電力機能の実装、公平性、最低保証パフォーマンス、スループット、クロック当たりの実行命令数（ＩＰＣ）、単位時間当たりの実行命令数、サービス品質、時間および／またはメモリ効率の向上、ならびにムーブ排除の範囲のさらなる命令タイプへの拡大によって、既存のムーブ排除およびイディオム排除技法を改善することが望ましい場合がある。
【０２５２】
実施形態では、命令ストリーム上でのオンザフライムーブ排除およびイディオム排除オペレーションの結果は、マイクロｏｐキャッシュ１３３または３１２などのデコードされたマイクロｏｐキャッシュにキャッシュされてもよい。従って、必要な条件を再発見し、元の命令をパイプラインから削除するオペレーションを繰り返すことを避けることができる。
【０２５３】
排除された命令は、排除された命令と同じ効果を達成するマイクロｏｐキャッシュに格納されたメタデータと置き換えられてもよい。マイクロｏｐキャッシュが書き込まれる場合、マイクロｏｐがマイクロｏｐキャッシュから削除され、従って配信されたマイクロｏｐストリームから最適化されるように、ムーブ排除またはイディオム排除の結果がメタデータに変換される。オンザフライ命令排除メカニズムが機会を識別するための作業を既に行っているため、マイクロｏｐキャッシュビルドは、影響を受けたマイクロｏｐをスキャンして除去するように修正されてもよい。メタデータには、リネーミングオペレーションの実行に必要な情報に加えて、イベントバウンダリの存在やパフォーマンス監視カウンタの影響など、関連するアーキテクチャ情報が含まれている。例えば、メタデータは、いくつの命令が排除されたかを示し得る、および／または、ＣＩＳＣアーキテクチャの場合に、各命令ごとにいくつのマイクロｏｐが排除されたかを示し得る、および／または排除された命令の後にマクロ終了命令が発生したことを示し得る。メタデータは、排除されたマイクロｏｐの前および／または後にマイクロｏｐのためのエントリ内のフィールドに格納されてもよい。
【０２５４】
一実施形態では、ムーブの排除は、ゼロ拡張および符号拡張オペレーションを含むように拡張することができる。例えば、Ｒ０＝ＭＯＶ．ＺＥ  Ｒ１は、単純なムーブではなくてもムーブを排除することができる。
【０２５５】
一実施形態では、ＲＡＴ  ３０００は、図３０に示すように、ゼロイディオム、符号拡張、およびゼロ拡張を含むように拡張することができる。ＲＡＴは、次の３つのビットで拡張される、すなわち、設定時、ＲＡＴエントリの残りの部分は無視され、論理レジスタはゼロとして扱われるＺと、設定時、論理レジスタの値がエントリに格納されている物理レジスタファイル識別子（ＰＲＦ  ＩＤ）の符号拡張バージョンである、ＳＥと、設定時、論理レジスタの値がエントリに格納されているＰＲＦ  ＩＤのゼロ拡張バージョンである、ＺＥと、で拡張される。
【０２５６】
次いで、図３１に示すように、Ｚ、ＳＥ、およびＺＥビットは、レジスタリネーミング中に読み出され、レジスタを読み出したマイクロｏｐによりパイプラインに渡される。ビットは、正しい結果を生成するためにＡＬＵ  ３１２０の動作の前に解釈される。図３１において、左側のソース経路は、マルチプレクサ３１１０によるＺ、ＳＥ、およびＺＥビットの解釈を含むように概念的に拡張されている。これらのビットに基づいて、ソースは、バイパスネットワークまたは物理レジスタファイルから修正されずに使用される、またはゼロに置き換えられる、または符号拡張後に使用される、またはゼロ拡張後に使用される。
【０２５７】
一部の実施形態のまとめ
本発明の一実施形態は、複数のエントリ位置を有するマイクロオペレーションキャッシュを備えるプロセッサを含み得る。少なくとも１つのエントリ位置が、第１のフィールドと第２のフィールドとを含み得る。第１のフィールドは、第１のマイクロオペレーションを格納するためであり得る。第２のフィールドは、命令のストリームからデコードされるべきマイクロオペレーションのストリームからの第２のマイクロオペレーションの排除を示すメタデータを格納するためのものであり、第２のマイクロオペレーションは、ムーブ命令のデコードから生じ得る。
【０２５８】
本発明の一実施形態は、複数のエントリを有するレジスタエイリアステーブルを備えるプロセッサを含み得る。少なくとも１つのエントリが、ゼロインジケータ、符号拡張インジケータ、およびゼロ拡張インジケータのうちの１つを格納するためのフィールドを含み得る。ゼロインジケータは、ソースオペランドがゼロに置き換えられることを示すためのものである。符号拡張インジケータは、ソースオペランドが符号拡張の後に使用されることを示すためのものである。ゼロ拡張インジケータは、ソースオペランドがゼロ拡張の後に使用されることを示すためのものである。
【０２５９】
仮想レジスタリネーミング
実施形態によれば、プロセッサコアは、仮想レジスタリネーミング機能をサポートし得る。一部の実施形態では、２５６ビットオペランドｙｍｍｉを１２８ビットレジスタファイルに格納することができる。２５６ビットオペランドの上半分は、１２８ビットオペランドｙｍｍｉｈｉｇｈとして１２８ビットレジスタファイルに格納されてもよい。２５６ビットオペランドの下半分を仮想的にリネーミングすることによって、２５６ビットオペランドの下半分を１２８ビットオペランドｘｍｍｉ（ｙｍｍｉｌｏｗ）として１２８ビットレジスタファイルに格納することができる。一部の実施形態において、この機能は、好都合にも、命令の半分をリネーミングすることによって、より広いＩＳＡをより小さな物理レジスタに実装することを可能にする。一部の実施形態では、より小さな物理レジスタの使用は、例えば命令の一部に個別にアクセスすることができるので、より高い柔軟性、省電力、およびより良いパフォーマンスを提供することによってコンピュータシステムを改善する。一部の実施形態では、他のサイズの命令およびレジスタを（例えば、５１２ビットオペランドを２５６ビットレジスタで）使用することができる。一部の実施形態では、オペランドは、より小さな断片、例えば３分の１、４分の１、８分の１、１６分の１に分割されてもよい。例えば、仮想レジスタリネーミング機能は、例えば、６４ビットレジスタファイルに格納される８つの部分として５１２ビットオペランドを維持するために使用され得る。
【０２６０】
図３２は、実施形態による、プロセッサに含まれ得る仮想レジスタリネーミング機能を示すブロック図である。仮想レジスタリネーミング機能は、２５６ビットオペランドｙｍｍｉなどのオペランド３２０１を含むことができる。仮想レジスタリネーミング機能は、１２８ビットレジスタファイル３２０１をさらに含むことができる。２５６ビットオペランドｙｍｍｉ  ３２０１は、１２８ビットレジスタファイル３２０２に格納することができる。２５６ビットオペランド３２０１の上半分は、１２８ビットオペランドｙｍｍｉｈｉｇｈとして１２８ビットレジスタファイル３２０２に格納されてもよい。２５６ビットオペランドの下半分を仮想的にリネーミングすることによって、２５６ビットオペランド３２０１の下半分を１２８ビットオペランドｘｍｍｉ（ｙｍｍｉｌｏｗ）として１２８ビットレジスタファイル３２０２に格納することができる。
【０２６１】
図３３は、実施形態による、プロセッサによって実行され得る仮想レジスタリネーミング機能のための方法を示す流れ図である。本方法は、３３０１に示すように、オペランドの下半分をレジスタファイルに格納するステップを含む。本方法は、３３０２に示すように、オペランドの上半分を仮想的にリネーミングするステップをさらに含む。本方法は、仮想的にリネーミングされたオペランドの上半分をレジスタファイルに格納するステップをさらに含む。さらなる実施形態では、他の修正が可能である。例えば、仮想的に上半分をリネーミングする代わりに、またはそれに加えて、オペランドの下半分を仮想的にリネーミングすることができる。加えて、オペレーションは異なる順序で実行されてもよい。例えば、仮想的にリネーミングされていない半分の格納は、仮想的にリネーミングするステップ、および／または仮想的にリネーミングされた半分を格納するステップの前または後に実行されてもよい。加えて、仮想的にリネーミングされた半分は、仮想的にリネーミングされてから格納されてもよいし、またはその逆であってもよい。
【０２６２】
一部の実施形態のまとめ
一実施形態は、オペランドの第１の半分をレジスタファイルに格納し、オペランドの第２の半分を仮想的にリネーミングし、仮想的にリネーミングされたオペランドの第２の半分をレジスタファイルに格納する、ように構成されたプロセッサを含み得る。一部の実施形態では、以下のうちの１つまたは複数が当てはまる。オペランドは、２５６ビットオペランドであり得る。レジスタファイルは１２８ビットレジスタファイルであり得る。
【０２６３】
一実施形態は、オペランドの第１の半分をレジスタファイルに格納するステップと、オペランドの第２の半分を仮想的にリネーミングするステップと、仮想的にリネーミングされたオペランドの第２の半分をレジスタファイルに格納するステップと、を含む方法を含み得る。一部の実施形態では、以下のうちの１つまたは複数が当てはまる。オペランドは、２５６ビットオペランドであり得る。レジスタファイルは１２８ビットレジスタファイルであり得る。
【０２６４】
一実施形態は、プロセッサによって実行された場合にプロセッサに方法を実行させる少なくとも１つの命令を格納する非一時的機械可読媒体を含み得、本方法は、オペランドの第１の半分をレジスタファイルに格納するステップと、オペランドの第２の半分を仮想的にリネーミングするステップと、仮想的にリネーミングされたオペランドの第２の半分をレジスタファイルに格納するステップと、を含む。一部の実施形態では、以下のうちの１つまたは複数が当てはまる。オペランドは、２５６ビットオペランドであり得る。レジスタファイルは１２８ビットレジスタファイルであり得る。
【０２６５】
一実施形態は、メモリとプロセッサとを有するシステムを備え、プロセッサが、オペランドの第１の半分をレジスタファイルに格納し、オペランドの第２の半分を仮想的にリネーミングし、仮想的にリネーミングされたオペランドの第２の半分をレジスタファイルに格納する、ように構成される。一部の実施形態では、以下のうちの１つまたは複数が当てはまる。オペランドは、２５６ビットオペランドであり得る。レジスタファイルは１２８ビットレジスタファイルであり得る。
【０２６６】
ＦＭＡ分離および融合
プロセッサコアは、本発明の実施形態による、乗算加算命令および演算の分離および融合をサポートすることができる。様々な実施形態において、プロセッサコアは、ＦＰ値を操作するために、任意の１つまたは複数の加算命令、乗算命令、融合乗算加算（ＦＭＡＤ）命令、および／または融合積和（ＦＭＡＣ）命令（ＦＭＡＤおよび／またはＦＭＡＣはＦＭＡと呼ばれ得る）を有する命令セットをサポートし得る。そのようなコアは、これらの命令に応じＦＰ加算演算、乗算演算、および／またはＦＭＡ演算を実行するための加算器回路、乗算器回路、および／またはＦＭＡ回路のうちの任意の１つまたは複数を備え得る。整数値（例えば、ＦＭＡＣ）およびＦＰ値（例えば、ＦＭＡＤ）を操作するために別々の命令および／または回路を設けることができ、実施形態は、一方または他方（整数またはＦＰ）に関して説明され得るが、本発明の様々な実施形態は、一方または両方を含み得る。
【０２６７】
本発明の実施形態は、命令発行／実行パイプライン内の様々なステージ間において、および／または命令発行／実行パイプライン内の様々なステージ内において、ＦＭＡ命令／演算を加算命令／演算と乗算命令／演算との対に変換すること（分離）、ならびに／または加算命令／演算と乗算命令／演算との対をＦＭＡ命令／演算に変換することを提供する。この機能は、一般に、ＦＭＡ分離／融合または動的ＦＭＡ分離／融合と呼ばれ得る。
【０２６８】
ＦＭＡの分離／融合を含む本発明の実施形態は、加算器回路および乗算器回路を有するがＦＭＡ回路は持たないコアにおいて、ＦＭＡ命令を実行および／またはＦＭＡ演算を実行する能力を提供することと、１つまたは複数のコアリソースを介してスループットを向上させるために、ＦＭＡ演算を使用して、乗算命令および加算命令を実行する能力を提供することと、ループ内のクリティカルパスを減らし、サイクル当たりの命令を増やすために、ＦＭＡ命令または演算を乗算演算と加算演算とに動的に分割する能力を提供することと、パフォーマンス、複雑性、および電力の所望の組み合わせ（例えば、該当する基準のほんのいくつかを挙げると、パフォーマンスの向上、消費電力の削減、省電力機能の実装、公平性、最低保証パフォーマンス、スループット、クロック当たりの実行命令数（ＩＰＣ）、単位時間当たりの実行命令数、サービス品質、時間および／またはメモリ効率の向上）に関して、ＦＭＡ対応パイプラインをステージ単位で最適化する可能性を提供することと、を含む多くの理由で望ましい場合がある。
【０２６９】
図３４は、本発明の実施形態による、ＦＭＡ分離／融合機能をサポートするプロセッサコアに実装され得る発行／実行パイプライン３４００を示すブロック図である。図３４では、パイプライン３４００は、命令フェッチステージ３４０１と、命令デコードステージ３４０２と、リネーミング／割り当てステージ３４０３と、スケジューリングステージ３４０４と、実行ステージ３４０５と、リタイア／コミットステージ３４０６と、を含む。パイプライン３４００は、例示目的で提供されており、本発明の様々な実施形態において様々な方法で実装および／または修正することができる。従って、パイプライン３４００の以下の説明は、本明細書で説明されている他の図に示されている様々なブロックを参照することがある。
【０２７０】
例えば、命令フェッチステージ３４０１は、（例えば、次ＰＣレジスタ４１０を使用して）フェッチされる命令または命令のメモリロケーションを識別し、ｉキャッシュ（例えば、１３４、３１３、４７０、９１３）または他のメモリロケーションからその命令をフェッチするために、命令フェッチ回路（例えば、１３８、４００）を使用することを含むことができ、命令デコードステージ３４０２は、（例えば、デコーダ５３０を使用して）命令をデコードするために、命令デコード回路（例えば１４０、３１４、５００、９１４）を使用することを含むことができ、リネーミング／割り当てステージ３４０３は、レジスタオペランドをリネーミングし、かつ／またはレジスタリネーミングのために格納場所および／またはタグを割り当てるために、リネーミング／アロケータ回路（例えば、１５２、３３１、９３１）を使用することを含むことができ、スケジューリングステージ３４０４は、（例えば、デコーダ１４０、３１４、５３０、もしくは６１４、またはマイクロｏｐキャッシュ１３３、３１２、５４０、もしくは９１２からの）実行のための命令に関連するオペレーションおよび／またはマイクロｏｐをスケジューリングするために、スケジューラ回路（例えば、１５６、３３２、９３２）を使用することを含むことができ、実行ステージ３４０５は、（例えば、デコーダ１４０、３１４、５３０、もしくは６１４、またはマイクロｏｐキャッシュ１３３、３１２、５４０、もしくは９１２からの）実行のための命令に関連するオペレーションおよび／またはマイクロｏｐ実行するために、実行回路（例えば、１６２、３３４、３３５、７７０、７８０、９３４、９３５）を使用することを含むことができ、リタイア／コミットステージ３４０６は、命令をリタイアし、かつ／またはその結果を物理レジスタファイル（例えば、１５８、３３３、７５０、９３３）またはメモリにコミットするために、リタイアメント回路（例えば、１５４、７３０、９６０）を使用することを含むことができる。図３４に示す各ステージは、様々な実施形態において、１つまたは複数のステージおよび／またはクロックサイクルを表すことができる。
【０２７１】
図３４はまた、融合経路３４１０および分割経路３４２０を示し、それぞれがパイプライン３４００を通る経路の一実施形態を表す。例示的な実施形態を使用して後述するように、融合経路３４１０は、ＦＭＡ命令、オペレーション、および／またはマイクロｏｐを、融合命令、演算、および／またはマイクロｏｐとして処理、実行（ｐｅｒｆｏｒｍ）、および／または実行（ｅｘｅｃｕｔｅ）するための回路、構造、および／またはハードウェアを含み得る。例示的な実施形態を使用して後述するように、分割経路３４２０は、乗算および加算の命令、演算、および／またはマイクロｏｐを、別々の命令、演算、および／またはマイクロｏｐとして処理、実行（ｐｅｒｆｏｒｍ）、および／または実行（ｅｘｅｃｕｔｅ）するための回路、構造、および／またはハードウェアを含み得る。さらに、分割経路３４２０は、ＦＭＡ命令、演算、および／またはマイクロｏｐを、乗算および加算の命令、演算、および／またはマイクロｏｐとして処理、実行（ｐｅｒｆｏｒｍ）、および／または実行（ｅｘｅｃｕｔｅ）するための回路、構造、および／またはハードウェアを含むことができ、融合経路３４１０は、乗算および加算の命令、演算、および／またはマイクロｏｐを、融合命令、演算、および／またはマイクロｏｐとして処理、実行（ｐｅｒｆｏｒｍ）、および／または実行（ｅｘｅｃｕｔｅ）するための回路、構造、および／またはハードウェアを含むことができる。
【０２７２】
従って、図３４は、融合された、および／または別々の乗算および加算の命令、演算、およびマイクロオペレーションを処理、実行（ｐｅｒｆｏｒｍ）、および／または実行（ｅｘｅｃｕｔｅ）するために使用され得るコアリソースのセットを概念的に示している。以下でさらに説明されるように、様々な実施形態は、様々な機能をサポートするためにこれらのリソースの様々なサブセットを含み得る。また、実装形態は、本発明の様々な実施形態を実施するために提供および／または構成され得る、図３４に示されていない様々な追加のリソースを含み得る。
【０２７３】
図３４はまた、ＦＭＡ分離／融合コントローラ３４３０を示し、ＦＭＡ分離／融合コントローラ３４３０は、融合経路３４１０および／または分割経路３４２０を介して、および／または融合経路３４１０および／または分割経路３４２０の間において、命令、演算、マイクロｏｐ、オペランド、値、および／または他のデータを、方向付けるための制御信号を生成するために、１つまたは複数の制御回路および／またはソフトウェアプログラム可能またはハードウェア構成レジスタを含む、プログラム可能、構成可能、またはハードワイヤードコントローラまたは制御構造を表し得る。これらの制御信号は、融合経路３４１０および分割経路３４２０内のリソースの組み合わせを含む、パイプライン３４００を通る１つまたは複数の経路を提供することができる。これらの制御信号は、ＦＭＡ命令、演算、および／もしくはマイクロｏｐを、第１の条件に応じて、融合命令、演算、および／もしくはマイクロｏｐとして、第２の条件に応じて、別々の乗算および加算の命令、演算、および／もしくはマイクロｏｐとして、処理、実行、および／もしくは実行させることによって、ならびに／または別々の乗算および加算の命令、演算、および／もしくはマイクロｏｐを、第３の条件に応じて、融合した命令、演算、および／もしくはマイクロｏｐとして、第４の条件に応じて、別々の乗算および加算の命令、演算、および／もしくはマイクロｏｐとして、処理、実行、および／もしくは実行させることによって、動的ＦＭＡ分離／融合を提供し得る。
【０２７４】
例えば、ＦＭＡ命令は、融合経路３４１０内のハードウェアによってフェッチされてもよく、コントローラ３４３０は、命令を２つの別々のマイクロｏｐ、すなわち乗算マイクロｏｐおよび加算マイクロｏｐにデコードするために、分割経路３４２０内のハードウェアに命令を送るための１つまたは複数の制御信号を生成してもよい。コントローラ３４３０は、図３４では独立したブロックとして示されているが様々な実施形態において、プロセッサコア内の別の制御構造内に一体化される、または含まれる場合もあるし、（例えば、例を後述する、コアが可能な経路を１つのみ提供する実施形態では）完全に省略される場合もある。
【０２７５】
図３４では、融合経路３４１０は、フェッチャ３４１１と、デコーダ３４１２と、リネーマ３４１３と、スケジューラ３４１４と、融合乗算加算器３４１５と、リオーダバッファ／リタイアキュー（ＲＯＢ／ＲＱ）３４１６と、を含み、分割経路３４２０は、フェッチャ３４２１と、デコーダ３４２２と、リネーマ３４２３と、スケジューラ３４２４と、乗算器３４２５Ａおよび加算器３４２５Ｂと、リオーダバッファ／リタイアキュー（ＲＯＢ／ＲＱ）３４２６と、を含む。
【０２７６】
フェッチャ３４１１は、ＦＭＡ命令（例えば、ＶＦＭＡＤＤ１３２ＰＳ、ＶＦＭＡＤＤ２１３ＰＳ、ＶＦＭＡＤＤ２３１ＰＳ、ＶＦＭＡＤＤ１３２ＰＤ、ＶＦＭＡＤＤ２１３ＰＤ、ＶＦＭＡＤＤ２３１ＰＤ、ＶＦＭＡＤＤ１３２ＳＳ、ＶＦＭＡＤＤ２１３ＳＳ、ＶＦＭＡＤＤ２３１ＳＳ、ＶＦＭＡＤＤ１３２ＳＤ、ＶＦＭＡＤＤ２１３ＳＤ、ＶＦＭＡＤＤ２３１ＳＤ、ＶＦＭＳＵＢ１３２ＰＳ、ＶＦＭＳＵＢ２１３ＰＳ、ＶＦＭＳＵＢ２３１ＰＳ、ＶＦＭＳＵＢ１３２ＰＤ、ＶＦＭＳＵＢ２１３ＰＤ、ＶＦＭＳＵＢ２３１ＰＤ、ＶＦＭＳＵＢ１３２ＳＳ、ＶＦＭＳＵＢ２１３ＳＳ、ＶＦＭＳＵＢ２３１ＳＳ、ＶＦＭＳＵＢ１３２ＳＤ、ＶＦＭＳＵＢ２１３ＳＤ、ＶＦＭＳＵＢ２３１ＳＤ、ＶＦＮＭＡＤＤ１３２ＰＳ、ＶＦＮＭＡＤＤ２１３ＰＳ、ＶＦＮＭＡＤＤ２３１ＰＳ、ＶＦＮＭＡＤＤ１３２ＰＤ、ＶＦＮＭＡＤＤ２１３ＰＤ、ＶＦＮＭＡＤＤ２３１ＰＤ、ＶＦＮＭＡＤＤ１３２ＳＳ、ＶＦＮＭＡＤＤ２１３ＳＳ、ＶＦＮＭＡＤＤ２３１ＳＳ、ＶＦＮＭＡＤＤ１３２ＳＤ、ＶＦＮＭＡＤＤ２１３ＳＤ、ＶＦＮＭＡＤＤ２３１ＳＤ、ＶＦＮＭＳＵＢ１３２ＰＳ、ＶＦＮＭＳＵＢ２１３ＰＳ、ＶＦＮＭＳＵＢ２３１ＰＳ、ＶＦＮＭＳＵＢ１３２ＰＤ、ＶＦＮＭＳＵＢ２１３ＰＤ、ＶＦＮＭＳＵＢ２３１ＰＤ、ＶＦＮＭＳＵＢ１３２ＳＳ、ＶＦＮＭＳＵＢ２１３ＳＳ、ＶＦＮＭＳＵＢ２３１ＳＳ、ＶＦＮＭＳＵＢ１３２ＳＤ、ＶＦＮＭＳＵＢ２１３ＳＤ、ＶＦＮＭＳＵＢ２３１ＳＤ，ＶＦＭＡＤＤＳＵＢ１３２ＰＳ、ＶＦＭＡＤＤＳＵＢ２１３ＰＳ、ＶＦＭＡＤＤＳＵＢ２３１ＰＳ、ＶＦＭＡＤＤＳＵＢ１３２ＰＤ、ＶＦＭＡＤＤＳＵＢ２１３ＰＤ、ＶＦＭＡＤＤＳＵＢ２３１ＰＤ、ＶＦＭＳＵＢＡＤＤ１３２ＰＳ、ＶＦＭＳＵＢＡＤＤ２１３ＰＳ、ＶＦＭＳＵＢＡＤＤ２３１ＰＳ、ＶＦＭＳＵＢＡＤＤ１３２ＰＤ、ＶＦＭＳＵＢＡＤＤ２１３ＰＤ、またはＶＦＭＳＵＢＡＤＤ２３１ＰＤなどの（以下に定義される）ＡＶＸ命令）をフェッチするための回路および／または構造を含むことができる。
【０２７７】
フェッチャ３４１１によってフェッチされたＦＭＡ命令は、３つのオペランドを有し得る。例えば、ＶＦＭＡＤＤ２３１ＰＳ命令には、第１のオペランド（ｘｍｍ１またはｙｍｍ１）と、第２のオペランド（ｘｍｍ２またはｙｍｍ２）と、第３のオペランド（ｘｍｍ３またはｙｍｍ３）とを有することができ、これらのオペランドによって指定され得るｘｍｍレジスタおよびｙｍｍレジスタについては以下で説明する。これらのレジスタは、スカラ値またはパックド値を保持することができ、一実施形態の便宜上の説明のために、文字「ｄ」を使用して、ソース／デスティネーションレジスタもしくはｘｍｍｌオペランドによって指定されるレジスタの一部、および／またはこのレジスタもしくはこのレジスタの一部に格納された、もしくは格納される値を指す場合があり、文字「ａ」を使用して、ソースレジスタもしくはｘｍｍ２オペランドによって指定されるレジスタの一部、および／またはこのレジスタもしくはこのレジスタの一部に格納された、もしくは格納される値を指す場合があり、文字「ｂ」を使用して、ソースレジスタもしくはｘｍｍ３オペランドによって指定されるレジスタの一部、および／またはこのレジスタもしくはこのレジスタの一部に格納された、もしくは格納される値を指す場合がある。従って、ａ、ｂ、およびｄはオペランドとも呼ばれ得る、ＶＦＭＡＤＤ２３１ＰＳ命令に応じて実行される演算の概念的な表現は、ｄ＝ａ＊ｂ＋ｄとなる。さらに、この説明はオペランドをレジスタとして言及しているが、実施形態は、任意のまたはすべてのオペランドについてレジスタの代わりにメモリロケーションを使用することができる。
【０２７８】
フェッチャ３４２１は、乗算命令（例えば、ＭＵＬＰＳ、ＭＵＬＰＤ、ＭＵＬＳＳ、またはＭＵＬＳＤなどのＳＳＥ（ストリーミング単一命令−複数データ拡張）命令）および加算命令（例えば、ＡＤＤＰＳ、ＡＤＤＰＤ、ＡＤＤＳＳ、またはＡＤＤＳＤなどのＳＳＥ命令）であって、乗算命令と加算命令とのそれぞれが２つのオペランドを有する命令をフェッチするための回路、構造、および／またはハードウェアを含み得る。例えば、ＭＵＬＰＳ命令は、第１のオペランド（ｘｍｍ１）と第２のオペランド（ｘｍｍ２）とを有することができ、ＡＤＤＰＳ命令は、第１のオペランド（ｘｍｍ１）と第２のオペランド（ｘｍｍ２）と、を有することができ、一般に、ＭＵＬＰＳ  ｘｍｍ１、ＭＵＬＰＳ  ｘｍｍ２、ＡＤＤＰＳ  ｘｍｍ１、およびＡＤＤＰＳ  ｘｍｍ２の各オペランドは異なるレジスタであり得る。しかしながら、本発明の一実施形態では、フェッチャ３４２１は、ＡＤＤＰＳ命令がＭＵＬＰＳ命令に依存すると判定された場合（すなわち、ＭＵＬＰＳの結果がＡＤＤＰＳへの入力である場合）、ＭＵＬＰＳ命令をＡＤＤＰＳ命令とペアにすることができる。例えば、ＭＵＬＰＳ  ｘｍｍｌオペランドとして「ａ」、ＭＵＬＰＳ  ｘｍｍ２オペランドとして「ｂ」を使用すると、対応する乗算演算ａ＝ａ＊ｂであり、次にａがＡＤＤＰＳ  ｘｍｍ２オペランドとして使用される場合に、ＡＤＤＰＳ  ｘｍｍｌオペランドとして「ｄ」を使用すると、対応する加算演算はｄ＝ｄ＋ａであり、フェッチャ３４２１は、ＭＵＬＰＳ命令とＡＤＤＰＳ命令をペアにすることができる。実施形態では、ペアリングすること、および／またはペアリングの条件が満たされるか否かを判定することは、コントローラ３４３０からの制御信号に応じて実行され得る。
【０２７９】
フェッチャ３４１１は、矢印３４３２Ａによって表されるように、デコーダ３４１２に、および／または矢印３４３２Ｂによって表されるように、デコーダ３４２２に結合または接続され得る。フェッチャ３４２１は、矢印３４３２Ｃによって表されるように、デコーダ３４１２に、および／または矢印３４３２Ｄによって表されるように、デコーダ３４２２に結合または接続され得る。様々な実施形態において、結合もしくは接続、および／またはデコーダ動作は、静的（例えば、ハードワイヤード）または動的（例えば、３４３０からの制御信号に応じて）であり得る。
【０２８０】
デコーダ３４１２は、フェッチャ３４１１から受信したＦＭＡ命令を、３つのオペランド（例えば、ｄ、ａ、およびｂ）を有するＦＭＡマイクロｏｐにデコードするための回路、構造、および／またはハードウェアを含み得る。代替的または追加的に、デコーダ３４１２は、フェッチャ３４２１から受信したペアにされた乗算および加算命令を、３つのオペランド（例えば、ｄ、ａ、およびｂ）を有するＦＭＡマイクロｏｐにデコードするための回路、構造、および／またはハードウェアを含み得る。
【０２８１】
デコーダ３４２２は、フェッチャ３４１１から受信したＦＭＡ命令を、２つのオペランドを有する乗算マイクロｏｐと２つのオペランドを有する加算マイクロｏｐとにデコードするための回路、構造、および／またはハードウェアを含み得る。代替的または追加的に、デコーダ３４２２は、フェッチャ３４２１からのペアにされた乗算および加算命令を、２つのオペランドを有する乗算マイクロｏｐと２つのオペランドを有する加算マイクロｏｐとにデコードするための回路、構造、および／またはハードウェアを含み得る。例えば、乗算マイクロｏｐはｔ＝ａ＊ｂとして表すことができ、加算マイクロｏｐはｄ＝ｄ＋ｔとして表すことができ、新しいオペランド「ｔ」が乗算演算のデスティネーションおよび加算演算のソースとして働くために導入され得る。
【０２８２】
デコーダ３４１２は、矢印３４３３Ａによって表されるように、リネーマ３４１３に、および／または矢印３４３３Ｂによって表されるように、リネーマ３４２３に結合または接続され得る。デコーダ３４２２は、矢印３４３３Ｃによって表されるように、リネーマ３４１３に、および／または矢印３４３３Ｄによって表されるように、リネーマ３４２３に結合または接続され得る。様々な実施形態において、結合もしくは接続、および／またはリネーマ動作は、静的（例えば、ハードワイヤード）または動的（例えば、３４３０からの制御信号に応じて）であり得る。
【０２８３】
リネーマ３４１３および／または３４２３は、レジスタオペランドをリネーミングするために、ならびに／またはレジスタリネーミングのために記憶場所および／もしくはタグを割り当てるために、リオーダバッファなどの回路、構造、および／またはハードウェアを含み得る。実施形態では、レジスタの競合（例えば、ａ、ｂ、ｔ、および／またはｄについて）を排除するために、リネーマ３４１３は、ＦＭＡ演算についてのオペランドを（例えば、ａ'、ｂ'、および／またはｄ'として）リネーミングし得る、および／またはリネーマ３４２３は、乗算演算についてのオペランドを（例えばａ'および／またはｂ'として）リネーミングし、加算演算についてのオペランドを（例えばｔ'および／またはｄ'として）リネーミングし得る。
【０２８４】
リネーマ３４１３は、矢印３４３４Ａによって表されるように、スケジューラ３４１４に、および／または矢印３４３４Ｂによって表されるように、スケジューラ３４２４に結合または接続され得る。リネーマ３４２３は、矢印３４３４Ｃによって表されるように、スケジューラ３４１４に、および／または矢印３４３４Ｄによって表されるように、スケジューラ３４２４に結合または接続され得る。様々な実施形態において、結合もしくは接続、および／またはスケジューラ動作は、静的（例えば、ハードワイヤード）または動的（例えば、３４３０からの制御信号に応じて）であり得る。
【０２８５】
スケジューラ３４１４および／または３４２４は、実行のためにオペレーションおよび／またはマイクロｏｐをスケジューリングするために、リザベーションステーションなどの回路、構造、および／またはハードウェアを含み得る。実施形態では、スケジューラ３４１４は、ＦＰ実行回路のためのリザベーションステーションにおいて、オペランドａ、ｂ、およびｄにより実行されるＦＭＡ演算をスケジューリングすることができる、および／またはスケジューラ３４２４は、ＦＰ実行回路のためのリザベーションステーションにおいて、オペランドａ、ｂにより実行される乗算演算と、オペランドｔ、ｄにより実行される加算演算と、をスケジューリングすることができる。
【０２８６】
スケジューラ３４１４は、矢印３４３５Ａによって表されるように、融合乗算／加算器３４１５に、および／または矢印３４３５Ｂによって表されるように、乗算器３４２５Ａもしくは乗算器３４２５Ａと加算器３４２５Ｂとの両方に結合または接続され得る。スケジューラ３４２４は、矢印３４３４Ｃによって表されるように、融合乗算／加算器３４１５に、および／または矢印３４３４Ｄによって表されるように、乗算器３４２５Ａもしくは乗算器３４２５Ａと加算器３４２５Ｂとの両方に結合または接続され得る。様々な実施形態において、結合もしくは接続、および／またはスケジューラ動作は、静的（例えば、ハードワイヤード）または動的（例えば、３４３０からの制御信号に応じて）であり得る。
【０２８７】
融合乗算／加算器３４１５、乗算器３４２５Ａ、および加算器３４２５Ｂは、それぞれ、融合乗算加算演算、乗算演算、および加算演算を実行するための回路、構造、および／またはハードウェアを含み得る。一実施形態では、乗算器３４２５Ａは、乗算演算のために２つの入力（例えば、ａおよびｂ）を受信するためにリザベーションステーションに結合され、その出力（例えばｔ）を、加算演算のための２つの入力（例えば、ｔおよびｄ）のうちの１つとして使用されるように提供するために加算器３４２５Ｂに結合され得る。この実施形態では、（例えば、ＩＥＥＥ規格７５４による）専用の融合乗算加算器の精度は、丸めていない乗算結果を加算器に送信することによって得ることができる。別の実施形態では、乗算器３４２５Ａは、出力（例えば、ｔ）を生成する乗算演算のために２つの入力（例えば、ａおよびｂ）を受信するためにリザベーションステーションに結合され、加算器３４２５Ａは、加算演算のための２つの入力（例えば、ｔおよびｄ）を受信するためにリザベーションステーションに結合され得る。この実施形態では、専用の融合乗算加算器の精度は、中間結果（例えば、ｔ）の内部記憶場所の幅を広げることによって、または特別な処理を提供するためにマイクロコードアシストまたはトラップを使用することによって得ることができる。
【０２８８】
融合乗算加算器３４１５は、矢印３４３６Ａによって表されるように、ＲＯＢ／ＲＱ  ３４１６に、および／または矢印３４３６Ｂによって表されるように、ＲＯＢ／ＲＱ  ３４２６に結合または接続され得る。加算器３４２５Ｂは、矢印３４３６Ｃによって表されるように、ＲＯＢ／ＲＱ  ３４１６に結合または接続され得る、および／または、加算器３４２５Ｂ、または乗算器３４２５Ａと加算器３４２５Ｂとの両方は、矢印３４３６Ｄによって表されるように、ＲＯＢ／ＲＱ  ３４２６に結合または接続され得る。様々な実施形態において、結合もしくは接続、および／またはスケジューラ動作は、静的（例えば、ハードワイヤード）または動的（例えば、３４３０からの制御信号に応じて）であり得る。
【０２８９】
ＲＯＢ／ＲＱ  ３４１６および／またはＲＯＢ／ＲＱ  ３４２６は、命令をリタイアする、および／または結果をコミットするために、リオーダバッファおよび／またはリタイアメントキューなどの回路、構造、および／またはハードウェアを含み得る。一実施形態では、ＲＯＢ／ＲＱ  ３４１６は、ＦＭＡ命令をリタイアし、その結果（例えば、ｘｍｍ１）をコミットすることができる。一実施形態では、ＲＯＢ／ＲＱ  ３４２６は、乗算命令および加算命令をリタイアし、それらの結果をコミットすることができる（例えば、それぞれＭＵＬＰＳ  ｘｍｍ１、ＡＤＤＰＳ  ｘｍｍ１）。一実施形態では、ＲＯＢ／ＲＱ  ３４１６は、別個の乗算演算の結果が望まれない限り（例えば、命令セットアーキテクチャに従って予想される）、別個の乗算命令と別個の加算命令との融合によって作成されたＦＭＡ演算の結果をコミットすることができる。一実施形態では、ＲＯＢ／ＲＱ  ３４２６は、ＦＭＡ命令の結果として、ＦＭＡ命令の分離によって作成された加算演算の結果をコミットすることができる。本発明の実施形態によるプロセッサコアでは、加算命令の結果は、対応するＦＭＡ命令の結果と同じになる。
【０２９０】
図３４に示すように、実施形態は、発行／実行パイプラインの様々なステージでＦＭＡの分離または融合を提供することができる。一実施形態では、デコードステージ３４０２での分離は、専用の融合乗算加算器なしでコアで実行される融合乗算加算命令を提供することができる。一実施形態では、デコードステージ３４０２、リネーミング／割り当てステージ３４０３、スケジューリングステージ３４０４、実行ステージ３４０５、および／またはリタイアステージ３４０６における融合は、ハードウェアリソース（２つの命令／演算／マイクロｏｐではなく１つの命令／演算／マイクロｏｐ）を通してより大きなスループットを提供し得る。一実施形態では、リネーミング／割り当てステージ３４０３での分離は、オペランドの数を３つではなく２つに制限することによって、リネーミングハードウェアの複雑さを軽減することができる。一実施形態では、リネーミング／割り当てステージ３４０３および／またはスケジューリングステージ３４０４での融合は、リネーミング、リオーダリング、および／またはスケジューリングのストレージにおいて使用されるエントリをより少なくして、より深いアウトオブオーダ実行ウィンドウおよび／またはより大きな命令レベルの並列処理の発見を可能にし得る。一実施形態では、スケジューリングステージ３４０４での分離は、アウトオブオーダウェイクアップソースの数をエントリごとに３つではなく２つに制限することによって、ハードウェアの複雑さを軽減することができる。一実施形態では、スケジューリングステージ３４０４および／または実行ステージ３４０５での分離は、ＦＭＡ演算の別々の部分を異なる時間に実行して、クリティカルパスを２つの部分の合計ではなく最も遅い部分のクリティカルパスに制限できるようにすることによって、レイテンシの短縮をもたらす。一実施形態では、実行ステージ３４０５での融合は、専用の融合乗算加算器を使用することによって、パフォーマンスの向上、精度の向上、および／または電力の低減をもたらすことができる。
【０２９１】
図３５は、本発明の実施形態による、プロセッサによって実行され得るＦＭＡ分離／融合のための方法を示す流れ図である。図３５の方法３５００のブロック３５１０において、命令フェッチ回路（例えば、１３８、４００）は、ｉキャッシュ（例えば、１３４、３１３、４７０、９１３）または他のメモリロケーションから命令をフェッチすることができる。例えば、命令は、第１のオペランド（「ｄ」）、第２のオペランド（「ａ」）、および第３のオペランド（「ｂ」）を有する、ＶＦＭＡＤＤ２３１ＰＳなどのＦＭＡ命令の例であり得、これに応じて、プロセッサは、ＦＭＡ演算を実行する（例えば、ｄ＝ａ＊ｂ＋ｄ）。
【０２９２】
ブロック３５２０において、ＦＭＡ命令の分離を実行するようにハードワイヤード、構成、またはプログラムされている命令デコード回路またはデコーダ（例えば、１４０、３１４、５００、９１４）は、命令を複数の別々のマイクロｏｐ、すなわち乗算マイクロｏｐおよび加算マイクロｏｐにデコードすることができる。デコーダは、ＦＭＡ命令および／もしくは別のマイクロｏｐからの特定のオペランドを選択すること、それらのうちの１つまたは複数を別々のマイクロｏｐのうちの１つまたは複数に割り当てること、ならびに／または別々のマイクロｏｐのうちの１つまたは複数のための新しいオペランドを作成することを行い得る。例えば、ＦＭＡ命令の「ａ」および「ｂ」のオペランドを、デコーダは、乗算マイクロｏｐのためのソースオペランドとして選択し、乗算マイクロｏｐのためのデスティネーションオペランドとして「ｔ」のオペランドを作成し、これに応じて、プロセッサは、乗算演算ｔ＝ａ＊ｂを実行することができ、デコーダは、ＦＭＡ命令の「ｄ」のオペランドおよび乗算マイクロｏｐの「ｔ」オペランドを、加算マイクロｏｐのためのソースオペランドとして選択し、ＦＭＡ命令の「ｄ」のオペランドを、加算マイクロｏｐのためのデスティネーションオペランドとして選択し、これに応じて、プロセッサは、加算演算ｄ＝ｄ＊ｔを実行することができる。
【０２９３】
ブロック３５３０において、レジスタリネーミング回路（例えば、１５２、３３１、９３１）は、オペランドのいずれかをリネーミングすること、（例えば、リオーダバッファにおける）レジスタリネーミングのために記憶場所および／もしくはタグを割り当てること、ならびに／または乗算マイクロｏｐの出力（例えば、「ｔ」）を加算マイクロｏｐ入力として割り当てることを実施すること、を行うことができる。
【０２９４】
ブロック３５４０において、スケジューラ回路（例えば、１５６、３３２、９３２）は、例えばＦＰユニットのためのリザベーションステーションにおいて、実行のために別々のマイクロｏｐをスケジューリングすることができる。一実施形態では、命令の同じインスタンスからデコードされた複数の別々のマイクロｏｐ（例えば、ＦＭＡ命令からデコードされた乗算および加算マイクロｏｐ）は、指定された順序でディスパッチするためにリザベーションステーションでスケジューリングルされる（例えば、加算マイクロｏｐは、複数のマイクロｏｐのディスパッチおよび／または完了の後にのみ、ディスパッチのためにスケジューリングされ得る）。
【０２９５】
ブロック３５５０において、実行回路（例えば、１６２、３３４、７７０、９３４）は、別々のマイクロｏｐのうちの一方を実行することができる。例えば、ＦＰ乗算器３３４Ａ、３３４Ｂ、７７０Ａ、７７０Ｂ、９３４Ａ、または９３４Ｂが乗算マイクロｏｐを実行してもよい。
【０２９６】
ブロック３５５２において、実行回路（例えば、１６２、３３５、７８０、９３５）は、別々のマイクロｏｐのうちの他方を実行することができる。例えば、ＦＰ加算器３３５Ａ、３３５Ｂ、７８０Ａ、７８０Ｂ、９３５Ａ、または９３５Ｂが加算マイクロｏｐを実行してもよい。
【０２９７】
ブロック３５６０において、リタイア回路（例えば、１５４、７３０、９６０）は、命令をリタイアし、かつ／またはその結果を物理レジスタファイル（例えば、１５８、３３３、７５０、９３３）またはメモリにコミットすることができる。一実施形態では、ブロック３５６０は、命令からデコードされた別々のマイクロｏｐのうちの１つのみのリタイアを含むことができる。例えば、ＦＭＡ命令は、リオーダバッファから対応する加算マイクロｏｐをリタイアし、その結果（例えば、ｄ）をコミットすることにより、リタイアおよび／またはその結果がコミットされてもよい。
【０２９８】
一部の実施形態のまとめ
本発明の一実施形態は、パイプラインに配置された複数の回路を備えるプロセッサを含み得る。複数の回路は、融合乗算加算命令を少なくとも２つの別々のマイクロオペレーションにデコードするためのデコーダを有し得る。複数の回路はまた、２つの別々のマイクロオペレーションのうちの第１のマイクロオペレーションに対して動作する乗算器と、２つの別々のマイクロオペレーションのうちの第２のマイクロオペレーションに対してで動作する加算器と、を有し得る。
【０２９９】
具体的なプロセッサアーキテクチャ
図３６は、本発明の実施形態による、複数のコアを有することができ、統合メモリコントローラを有することができ、統合グラフィックを有することができる、プロセッサ３６００のブロック図である。図３６の実線のボックスは、シングルコア３６０２Ａ、システムエージェント３６１０、１つまたは複数のバスコントローラユニット３６１６のセットを有するプロセッサ３６００を示すが、任意の追加される破線のボックスは、複数のコア３６０２Ａ〜Ｎ、システムエージェントユニット３６１０における１つまたは複数の統合メモリコントローラユニット（単数または複数）３６１４のセット、および専用ロジック３６０８を有する代替的なプロセッサ３６００を示す。
【０３００】
よって、プロセッサ３６００の異なる実装は、１）統合グラフィックおよび／または科学技術計算（スループット）ロジック（１つまたは複数のコアを含み得る）である専用ロジック３６０８と、１つまたは複数の汎用コア（例えば、汎用インオーダコア、汎用アウトオブオーダコア、これら２つの組み合わせ）であるコア３６０２Ａ〜Ｎと、を有するＣＰＵ、２）主にグラフィックおよび／または科学技術計算（スループット）のための多数の専用コアであるコア３６０２Ａ〜Ｎを有するコプロセッサ、ならびに３）多数の汎用インオーダコアであるコア３６０２Ａ〜Ｎを用いるコプロセッサを含み得る。よって、プロセッサ３６００は、汎用プロセッサ、サーバプロセッサもしくはサーバ環境で使用するための処理要素、コプロセッサ（例えば、セキュリティコプロセッサ）、高スループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（例えば、グラフィックアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニット、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワークアクセラレータ、またはコンピュータビジョンアクセラレータなど）、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサもしくは処理装置であり得る。プロセッサは、１つまたは複数のチップ上に実装することができる。プロセッサ３６００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、またはＭＯＳなどのいくつかのプロセス技術のいずれかを使用して、１つまたは複数の基板の一部であってもよい、および／または１つまたは複数の基板の上に実装されてもよい。
【０３０１】
メモリ階層は、コア内の１つまたは複数のレベルのキャッシュ、１セットもしくは１つまたは複数の共有キャッシュユニット３６０６、および統合メモリコントローラユニット３６１４のセットに結合された外部メモリ（図示せず）を含む。共有キャッシュユニット３６０６のセットは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）などの１つまたは複数の中間レベルのキャッシュ、または他のレベルのキャッシュ、ラストレベルキャッシュ（ＬＬＣ）、および／またはこれらの組み合わせを含み得る。１つの実施形態では、リングベースの相互接続ユニット３６１２は、統合グラフィックロジック３６０８（統合グラフィックロジック３６０８は、専用ロジック一例であり、本明細書で専用ロジックとも呼ばれる）、共有キャッシュユニット３６０６のセット、およびシステムエージェントユニット３６１０／統合メモリコントローラユニット（単数または複数）３６１４を相互接続するが、代替的な実施形態は、そのようなユニットを相互接続するための任意の数の周知の技法を用いることができる。１つの実施形態では、コヒーレンシは、１つまたは複数のキャッシュユニット３６０６とコア３６０２Ａ〜Ｎとの間で保持される。
【０３０２】
いくつかの実施形態では、コア３６０２Ａ〜Ｎのうちの１つまたは複数はマルチスレッディング可能である。システムエージェント３６１０は、コア３６０２Ａ〜Ｎを調整および動作させるコンポーネントを含む。システムエージェントユニット３６１０は、例えば、電力制御ユニット（ＰＣＵ）およびディスプレイユニットを含み得る。ＰＣＵは、コア３６０２Ａ〜Ｎおよび統合グラフィックロジック３６０８の電力状態を調整するのに必要とされるロジックおよびコンポーネントであるか、またはこれらを含み得る。ディスプレイユニットは、１つまたは複数の外部接続ディスプレイを駆動するためのものである。
【０３０３】
コア３６０２Ａ〜Ｎは、アーキテクチャ命令セットの観点からは同種または異種であり得る。すなわち、コア３６０２Ａ〜Ｎのうちの２つ以上が、同じ命令セットを実行することができる場合があるが、他のものは、この命令セットまたは異なる命令セットのサブセットのみを実行することができる場合がある。
【０３０４】
図３７は、本発明の実施形態による、プロセッサに含まれ得る例示的な中央処理装置（ＣＰＵ）複合体のブロック図である。一実施形態では、Ｌ３キャッシュは、４コアモジュール（ＣＰＵ複合体またはＣＣＸと呼ばれる）上に分割された８ＭＢの１６ウェイキャッシュであり、コア当たり２ＭＢの「スライス」のＬ３キャッシュを提供する。しかしながら、ＣＣＸにおけるＬ３キャッシュスライスは、Ｌ３キャッシュが共有キャッシュになるように実装されている。複数のＣＣＸを単一のプロセッサに含めることができる（例えば、２つのＣＣＸが１６ＭＢのＬ３キャッシュを形成する）。各ＣＣＸの８ＭＢキャッシュは別々のものであるため、データが必要か否かを判定するために他のＬ３キャッシュへの適切なフックと共に４コアモジュールごとの最終レベルのキャッシュとして機能する（Ｌ３キャッシュ設計に含まれるプロトコルにより、各コアが他の各コアのＬ３キャッシュにアクセスできる）。従って、これらのＬ１、Ｌ２、およびＬ３キャッシュはコヒーレントキャッシュであり、ＣＣＸ内およびＣＣＸ間のＬ３キャッシュスライスはキャッシュコヒーレントインターコネクト（キャッシュコヒーレントファブリックとも呼ばれる）によって接続されている。
【０３０５】
図３８は、本発明の実施形態による、プロセッサに含まれ得る例示的なキャッシュ階層のブロック図である。図３８では、キャッシュ階層３８００は、Ｌ１  ｉキャッシュ３８１０ＡおよびＬ１  ｄキャッシュ３８１０Ｂ（まとめてＬ１キャッシュ３８１０）と、Ｌ２命令およびデータキャッシュ３８２０と、レベル３（Ｌ３）の命令およびデータキャッシュ３８３０と、を含む。一実施形態では、Ｌ１キャッシュ３８１０とＬ２キャッシュ３８２０との両方がプライベート／ローカルライトバックキャッシュである一方、Ｌ３キャッシュ３８３０は犠牲キャッシュである。一実施形態では、Ｌ１  ｉキャッシュ３８１０Ａは６４ＫＢの４ウェイキャッシュであり、Ｌ１  ｄキャッシュ３８１０Ｂは３２ＫＢの８ウェイキャッシュであり、Ｌ２キャッシュ３８２０は５１２ＫＢの８ウェイキャッシュであり、レベル３（Ｌ３）キャッシュ３８３０は、８ＭＢの１６ウェイキャッシュである。
【０３０６】
メモリ構成機能
本発明の実施形態によるプロセッサコア、プロセッサ、およびシステムは、メモリの構成および使用に関連する様々な機能を含み得る。いくつかのそのような機能は、以下の非限定的な例を用いて別々に説明されるが、実施形態はそのような機能の任意の組み合わせを含み得る。
【０３０７】
キャッシュラインゼロ化
一部の実施形態は、実行することにより、メモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを引き起こす命令を含む。そのような命令は、キャッシュラインゼロ化命令、ＣＬＺＥＲＯ命令、ＣＬＺＥＲＯＩＮＧ命令、キャッシュライン初期化命令、ＣＬＩＮＩＴ命令などと呼ばれ得る。１つの実施形態では、キャッシュラインゼロ化命令は、コア１９０および／またはコア５３００などのコアによって実行されるマクロ命令である。具体的には、デコーダ１４０および／またはデコーダ５３１４は、そのようなマクロ命令を、メモリアクセスユニット（単数または複数）１６４および／またはアドレス生成ユニット（単数または複数）３２５／ロードストアユニット３４０にそれぞれオペレーションを実行させる１つまたは複数の比較的低レベルの命令または制御信号（例えば、１つまたは複数のマイクロ命令、マイクロオペレーション（マイクロｏｐ）、マイクロコードエントリポイント、デコードされた命令または制御信号）にデコードするように実装される。
【０３０８】
キャッシュラインゼロ化命令は、オーナーシップ要求（ｒｅｑｕｅｓｔ  ｆｏｒ  ｏｗｎｅｒｓｈｉｐ）（ＲＦＯ）オペレーションを使用する必要がない、または少なくともデータを返送または戻す必要がないので、キャッシュラインをゼロ化するためのより速くより決定的な方法であるという利点を有する。ＲＦＯオペレーションは、キャッシュコヒーレンシプロトコルにおける、読み出しとインバリデートブロードキャストとを組み合わせたオペレーション（そのメモリアドレスへの書き込みを目的とした読み取りオペレーション）であり、従って、他のすべてのコヒーレントキャッシュに、そのようなキャッシュラインの状態を「無効」のキャッシュコヒーレンシプロトコル状態へ設定させる。例えば、ＲＦＯオペレーションは、典型的には、ＭＥＳＩプロトコルの共有状態（Ｓ）または無効状態（Ｉ）にあるキャッシュラインに書き込もうとしているプロセッサによって発行される。ＭＥＳＩプロトコルは、「修正状態」、「排他状態」、「共有状態」、および「無効状態」のキャッシュコヒーレンシプロトコル状態を使用する。対照的に、キャッシュラインゼロ化命令の実装は、キャッシュラインゼロ化命令がデータをゼロ化しているため、ラインが読み出されて発行エージェントに返されることを必要とせず、実際、一部の実施形態では、発行エージェントはデータのオーナーシップを有する必要はない。
【０３０９】
異なる実施形態は、異なる方法でメモリアドレスを示すようにキャッシュラインゼロ化命令を実装し得る。例えば、キャッシュラインゼロ化命令は、アドレス情報を明示的に（例えば、即値を介しての１つまたは複数のフィールド）、間接的に（例えば、アドレス情報が格納される１つまたは複数のレジスタを指定することにより）、および／または黙示的に（例えば、１つまたは複数の指定されたレジスタ）示すように実装され得る。メモリアドレス情報は、メモリアドレスであり得る、またはメモリアドレスを生成するために他の情報（例えば、セグメントレジスタからの情報など）と組み合わせて使用される情報であり得る。一部の実施形態ではメモリアドレスがキャッシュライン境界上にアラインされているが、代替的な実施形態はまた、キャッシュライン境界間にあり、それらの境界間のキャッシュラインを示すものとして扱われるメモリアドレスをサポートし得る。アドレス情報は、絶対メモリアドレス情報または相対メモリアドレス情報のいずれかを表すことができ、相対メモリアドレス情報は、ベースメモリアドレスまたは他のメモリロケーションに対するメモリロケーションを示し得る。加えて、異なる間接メモリアドレッシングモードを場合により使用することができる。１つの具体的な例として、命令は、メモリアドレスを識別するために使用される最終メモリアドレスを生成するために、別の黙示的なレジスタに格納された追加のメモリアドレス情報（例えば、コード、データ、または拡張セグメントレジスタ）と組み合わされ得る相対的なメモリアドレス情報を格納するために使用されるレジスタ（例えば、汎用レジスタ）を黙示的に示し得る。これはほんの一例である。他の形式のアドレス情報も可能である。
【０３１０】
異なる実施形態は異なるサイズのキャッシュライン（例えば、３２バイト、６４バイト）を実装してもよい、および／または所与の実施形態が複数のキャッシュラインサイズを実装してもよい。例えば、実施形態は、１）特定のキャッシュラインサイズに対して実施される（従って、キャッシュラインサイズを指定する必要がない）か、２）異なる種類のコアが異なるキャッシュラインサイズを有する場合、現在のキャッシュサイズを使用するように実装される（例えば、現在のキャッシュサイズはレジスタ内の値を介して示され得る）か、３）キャッシュラインサイズを示すフィールドを持つように実装される、キャッシュラインゼロ化命令をサポートすることができる。一部の実施形態では、命令は、１つまたは複数のキャッシュライン（すなわち、キャッシュラインサイズの倍数）を示すサイズパラメータの指示を可能にする。一部の実施形態では、追加的または代替的に、ゼロ命令があり、ゼロ命令は、ソフトウェアがキャッシュラインサイズを知らないようにできるため、キャッシュラインサイズに結び付けられないサイズパラメータ（例えば、単にバイト数を示す）の指示を可能にする（サイズがキャッシュラインサイズの倍数でない場合（例えば、キャッシュラインサイズが６４バイトであってもバイト数で指定され、バイト数は１１２である）、実施形態は、キャッシュラインまでゼロにするか、その最後のラインの残りのデータだけにＲＦＯを発行することができる）。
【０３１１】
一部の実施形態では、キャッシュラインゼロ化命令はアトミックである。よって、ゼロのキャッシュライン全体がその全体で格納されるか、その一部だけではなくそのどれも格納されないかのいずれかである（すなわち、完了アトミック性保証）。アトミック性はまた、キャッシュラインゼロ化命令によって書き込まれたゼロが他のストアによって格納されたデータとインターリーブされないことを保証することもできる。アトミック性は、他のアクセスに関して、そのようなアクセスが、全体が格納されているデータのすべてを観察するか、格納されているデータを一部分だけではなくどれも観察しないかのいずれかであるようであり得る。アトミック性は、停電、システムクラッシュ、再起動、または他のそのようなイベントに関して、たとえそのようなイベントに際したとしても、すべてのゼロが格納されるか、一部分だけではなくなんらゼロを格納しないかのいずれかであるようであり得る。このようなアトミック操作には様々な可能な使用法がある。そのような使用法の１つの例は、データベース内のデータを自動的に更新することである。そのような使用法の別の例は、マルチプロセッシング環境で共有データを自動的に更新することである。そのような使用法のさらに別の例は、ロック、セマフォを置き換えるため、共有変数を更新するため、同期するため、調整するなどのための場所にデータを自動的に格納することである。そのようなアトミックストア操作のさらに他の使用法が企図されており、本開示の利益を有する当業者には明らかであるはずである。
【０３１２】
例示的なメモリ階層
図３９は、本発明の実施形態による、キャッシュラインゼロ化命令を実装することができるメモリ階層を示すブロック図である。図示のメモリ階層は、様々なプロセッサコア、コアクラスタ、ＣＣＸ、プロセッサ、コンピュータアーキテクチャなどと共に実施することができる。具体的な実施形態として、図３、図８、図３８、および図３７のコア／ＣＣＸと共に図３９のメモリ階層を参照してキャッシュゼロ化命令の実装を説明する。これは例示を目的としたものであり、キャッシュゼロ化命令は、異なるメモリ階層で、および／または異なるコア、コアクラスタなどと共に、実施することができる。
【０３１３】
図３９は、コヒーレントエージェント３９００およびコヒーレントエージェント３９０１、ならびに「…」および破線のボックスを使用したコヒーレントエージェント３９０２によって表される他のコヒーレントエージェントの可能性を示す。図３９のメモリ階層は、コヒーレントキャッシュ３９０４Ａと、インターコネクト３９２０と、ダウンストリームメモリ３９３０と、を含む。異なる実施形態は、コヒーレントキャッシュ３９０４Ａの一部として異なる数のキャッシュおよびキャッシュレベルを実装し得る。コヒーレントエージェントおよびコヒーレントキャッシュは、キャッシュコヒーレンシがキャッシュコヒーレンシプロトコル（例えば、「修正状態」、「排他状態」、「共有状態」、および「無効状態」のキャッシュコヒーレンシプロトコル状態を使用するＭＥＳＩプロトコル、「転送状態」のキャッシュコヒーレンシプロトコル状態を追加したＭＥＳＩＦプロトコル、「転送状態」ではなく「所有状態」のキャッシュコヒーレンシプロトコル状態を追加したＭＯＥＳＩプロトコル、および他のそのようなキャッシュコヒーレンシプロトコル）を使用して維持されるキャッシュコヒーレンスドメインの一部である。
【０３１４】
コヒーレントエージェント３９００は、１つまたは複数のキャッシュを介して引き続くより下位レベルのキャッシュ階層でインターコネクト３９２０に結合される。キャッシュ階層は、キャッシュ階層の最上位レベルにあり、コヒーレントエージェント３９００に結合されているキャッシュと、キャッシュ階層の最下位レベルにあり、インターコネクト３９２０に結合されているキャッシュ（例えば、Ｌ３キャッシュ３９１５）（従って、このキャッシュは、最下位レベルキャッシュまたは最終レベルキャッシュ（ＬＬＣ）と呼ばれる）と、より上位レベルのキャッシュのうちの１つおよびより下位レベルのキャッシュのうちの１つに結合された、キャッシュ階層の中間レベル（単数または複数）にある０個以上のキャッシュ（例えば、Ｌ２キャッシュ３９１０）と、を含む（例えば、図３９は、Ｌ１キャッシュ３９０５に結合されたコヒーレントエージェント３９００を示しており、Ｌ１キャッシュ３９０５はＬ２キャッシュ３９１０に結合され、Ｌ２キャッシュ３９１０はＬ３キャッシュ３９１５に結合され、Ｌ３キャッシュ３９１５はインターコネクト３９２０に結合されている）。
【０３１５】
コヒーレントエージェント３９０１もまた、１つまたは複数のレベルのキャッシュを介してインターコネクトに結合される。図３９は、任意のＬ１キャッシュ３９０６に結合されたコヒーレントエージェント３９０１を示しており、任意のＬ１キャッシュ３９０６は任意のＬ２キャッシュ３９１１に結合され、任意のＬ２キャッシュ３９１１はＬ３キャッシュ３９１５に結合されている。加えて、図３９はまた、任意のコヒーレントエージェント３９０２がインターコネクト３９２０に直接結合され得ることを示している（すなわち、いかなるコヒーレントキャッシュも持たない）。
【０３１６】
連続するレベルのキャッシュを介してインターコネクト３９２０に結合されているコヒーレントエージェントを含む接続に加えて、またはその代わりに、特定の実施形態は、直接的またはより直接的な通信を可能にする他の接続を実装する（例えば、それぞれ破線３９３５、３９３６、３９３７、および３９３８によって示すように、コヒーレントエージェント３９００をインターコネクト３９２０に直接結合する、コヒーレントエージェント３９００をＬ２キャッシュ３９１０に直接結合する、Ｌ１キャッシュ３９０５をインターコネクト３９２０に直接結合する、および／またはＬ２キャッシュ３９１０をインターコネクト３９２０に直接結合する）。
【０３１７】
インターコネクト３９２０は、（例えば、１つまたは複数のメモリコントローラ（図示せず）のセットを介して）ダウンストリームメモリ３９３０に結合される。ダウンストリームメモリ３９３０は、コヒーレントキャッシュ３９０４よりも下位レベルのメモリ階層にあり、１つまたは複数のタイプのメモリおよび／またはメモリの階層を含むことができる（例えば、揮発性メモリおよび／または不揮発性メモリ、メインメモリ、メモリマップ入出力（ＭＭＩＯ）、メモリサイドキャッシュ、２レベルメモリ（２ＬＭ）、ＤＲＡＭ、フラッシュ、相変化メモリ、３Ｄ  Ｘｐｏｉｎｔ（登録商標））。
【０３１８】
インターコネクト３９２０（キャッシュコヒーレントインターコネクト、ファブリック、インターコネクト、アンコア、相互接続ネットワークの一部、相互接続ユニット（単数または複数）とも呼ばれる）は、コヒーレントキャッシュ３９０４にスヌープを発行し、そこからの任意の応答を受信するための、スヌープコントローラ３９２５を含む。スヌープコントローラ３９２５は、スヌープを発行するためのスヌープジェネレータ３９２６と、一部の実施形態において、任意の応答を受信するためのスヌープレスポンダ３９２７と、を含む。加えて、特定の実施形態におけるスヌープコントローラ３９２５は、（キャッシュラインサイズのオールゼロの書き込みを実質的に生成するための）ライトジェネレータ３９２９および／または（スヌープに応答して受信されたデータのキャッシュラインを実質的にすべてゼロへ変換するための）ライトコンバータ３９２８を含む。加えて、１つの実施形態では、インターコネクト３９２０は、Ｌ３キャッシュ３９１５とダウンストリームメモリ３９３０との間にあるとして示されているが、代替的な実施形態は、インターコネクト３９２０を別の場所に実装することができる（例えば、ダウンストリームメモリ３９３０に対する１つまたは複数のメモリコントローラのセットが（例えば、ホームエージェントとして）インターコネクト３９２０から離れた状態、または１つまたは複数のメモリコントローラのセットがＬ３キャッシュ３９１５とダウンストリームメモリ３９３０との間にある状態のいずれかで、Ｌ２キャッシュとＬ３キャッシュとの間に実装することができる）。（例えば、スヌープコントローラ３９２５の一部としての）インターコネクト３９２０は、スヌープフィルタ（図示せず）などの他のアイテムを含み得る。
【０３１９】
異なる実施形態が、異なる数のコヒーレントエージェントを用いて、汎用コア（中央処理装置（ＣＰＵ）としても知られる）として実施され得る。例えば、一部の実施形態では、コヒーレントエージェント３９００はコアであり、コヒーレントエージェント３９０１はコアであり、コアであるゼロ以上の追加のコヒーレントエージェントがあり、他の種類のエージェントであるゼロ以上の追加のコヒーレントエージェントがある（例えば、いくつか例を挙げると、汎用プロセッサ、サーバプロセッサもしくはサーバ環境で使用するための処理要素、セキュリティコプロセッサなどのコプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵのコプロセッサ、アクセラレータ（例えば、グラフィックアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニット、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワークアクセラレータ、またはコンピュータビジョンアクセラレータなど）、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサもしくは処理装置）。
【０３２０】
一部の実施形態では、コヒーレントエージェントおよびコヒーレントキャッシュ３９０４は、図３８および図３７のように実装される。例えば、ＣＣＸには、コアである４つのコヒーレントエージェント、コアごとのプライベート／ローカルＬ１キャッシュ、コアごとのプライベート／ローカルＬ２キャッシュ、および共有Ｌ３キャッシュがあり、単一のプロセッサに複数のＣＣＸを結合することもできる。Ｌ１キャッシュおよびＬ２キャッシュはライトバックキャッシュであり、Ｌ２キャッシュは包括的キャッシュであり、Ｌ３キャッシュは犠牲キャッシュである。加えて、Ｌ３キャッシュ３９１５は、モジュール（ＣＣＸ）内の複数のコヒーレントエージェント（例えば、４コアにわたってコア当たり２ＭＢ、合計８ＭＢ）間、また場合により１つまたは複数のそのようなモジュール（例えば、１６ＭＢのＬ３キャッシュを形成する、各８ＭＢの２つのＣＣＸ）間でスライスに分割される。図３９は、コヒーレントエージェント３９００のＬ３キャッシュスライス３９１６とコヒーレントエージェント３９０１のＬ３キャッシュスライス３９１７とを用いてこれを示している。インターコネクト３９２０は、例えば、１）ＣＣＸ内のインターコネクトのみ、２）ＣＣＸ内およびＣＣＸ間のインターコネクト、３）異なるＣＣＸ内の別個のインターコネクト、およびＣＣＸ間のインターコネクト（単数または複数）を表すことができる。異なる実施形態は、リング、複数のリング、ポイントツーポイントリンク、共有バス（単数または複数）などのうちの１つまたは複数を含み、インターコネクト３９２０を異なるように実装することができる。ホームエージェントおよびキャッシュエージェントを実装する実施形態では、インターコネクト３９２０はキャッシュエージェントを含むと考えられる。
【０３２１】
図３９の１つまたは複数の、またはすべてのコヒーレントエージェントは、キャッシュラインゼロ化命令を実行するように実装され得る（コヒーレントエージェント３９００、３９０１、および３９０２のいずれかとして識別される、可能なキャッシュラインゼロ化命令発行エージェント３９０３を参照）。キャッシュラインゼロ化命令を現在実行しているコヒーレントエージェントは、「発行エージェント」、「発行コヒーレントエージェント」、または「第１のエージェント」であり、そのキャッシュは、発行エージェントのＬｘキャッシュと呼ばれる（ｘは、１、２、または３であり得る。Ｌ３キャッシュは、これがスライスで実装されている場合、発行エージェントのＬ３キャッシュスライスである）。以下の説明では、これはコヒーレントエージェント３９００となる。キャッシュラインゼロ化命令を現在実行していないコヒーレントエージェントは、「コヒーレントだが発行していないエージェント」、「非発行エージェント」、「非発行コヒーレントエージェント」、または「第２のエージェント」と呼ばれ（上述のように、複数の第２のエージェントがあってもよいが、簡単にするために１つが以下に説明される）、そのキャッシュは、第２のエージェントのＬｘキャッシュと呼ばれる（ｘは、１、２、または３であり得る。Ｌ３キャッシュは、これがスライスで実装されている場合、第２のエージェントのＬ３キャッシュスライスである）。以下の説明では、これはコヒーレントエージェント３９０１となる。
【０３２２】
例示的なキャッシュアーキテクチャ
図４０は、本発明の実施形態による、キャッシュラインゼロ化命令を実装するプロセッサにおけるキャッシュを示すブロック図である。図４０は、Ｌｘキャッシュ４０５０を含み、ｘはキャッシュ階層のレベル（例えば、１、２、３）を示す。Ｌｘキャッシュ４０５０は、ヒット／ミスを検出すること、キャッシュラインに書き込み／読み出しさせること、スヌープを受信することなどを含む、キャッシュのオペレーションを制御するためのキャッシュコントローラ４０５１を含む（従って、一部の実施形態では、キャッシュコントローラ４０５１は、スヌープインターフェースを含み、一部の実施形態、スヌープコントローラ４０４３を含む）。キャッシュコントローラは、（「タグ状態」とも呼ばれる場合があるものを含む）エントリ４０６０を有するタグアレイ４０５５を含み、Ｌｘキャッシュ４０５０は、対応するキャッシュライン４０７０を有するデータアレイ４０５６を含む。エントリ４０６０のそれぞれは、所与のアドレスが、キャッシュライン４０７０のうちの対応する１つのキャッシュライン４０７０におけるデータにヒットするかミスするかを判定するために使用されるタグを格納するためのタグフィールド４０６１を含む。加えて、エントリ４０６０のそれぞれは、キャッシュライン４０７０のうちの対応する１つのキャッシュライン４０７０に格納されているデータの属性を格納するための１つまたは複数の属性フィールド（単数または複数）４０６２（「タグ状態」と呼ばれることもある）のセットを含む。属性フィールド（単数または複数）４０６２は、キャッシュライン４０７０のうちの対応する１つのキャッシュライン４０７０に格納されているデータの現在のキャッシュコヒーレンシプロトコル状態を示す値を格納するためのキャッシュコヒーレンシプロトコル状態フィールド４０６５を含む。属性フィールド（単数または複数）４０６２は、場合により、ゼロラインフィールド４０６６、ポイズンフィールド４０６７、誤り訂正符号フィールド（図示せず）などの他のフィールドを含み得る。図４０は、タグアレイである属性フィールド（単数または複数）４０６２を示しているが、代替的な実施形態は、これらのフィールド（単数または複数）を別個の状態アレイ（図示せず）で実装してもよい。１つの実施形態では、所与のキャッシュラインは、ポイズンフィールド４０６７内に複数のポイズン指示（例えば、６４バイトのキャッシュラインの２つの３２バイトチャンクについて１つ）を有することができる。図４０は別個のポイズンフィールド４０６７を示しているが、代替的な実施形態は、ポイズン指示を別のフィールド（例えば、誤り訂正符号（ＥＣＣ）フィールドまたはキャッシュコヒーレンシプロトコル状態フィールド）に符号化してもよい。
【０３２３】
キャッシュにおけるヒットに応答して（例えば、タグフィールド４０６１内のタグに基づいて）、キャッシュコントローラ４０５１は、そのヒットに対して、キャッシュコヒーレンシプロトコル状態フィールド４０５６（例えば、タグが照合されたタグフィールド４０６１に対応するキャッシュコヒーレンシプロトコル状態フィールド４０５６）におけるキャッシュコヒーレンシプロトコル状態に応答するための回路（例えば、キャッシュコヒーレンシプロトコル状態回路または他の回路）を含む。この応答は、実施形態間で異なり、様々な要因（例えば、ライトコマンド、リードコマンド、スヌープ（および場合によりスヌープのタイプ）に応答してキャッシュルックアップが開始されたか否か）に基づいて異なる。例えば、一部の実施形態では、以下でより詳細に説明するように、応答は、キャッシュコヒーレンシプロトコル状態が、ライトコマンドおよび／または特定のタイプのスヌープに応答してキャッシュラインを修正するキャッシュ権限（例えば、「修正状態」または「排他状態」）を与えるものであるか否かを判定するためのものである。一部の実施形態では、キャッシュコントローラ４０５１は、１）コマンド（例えば、ライトコマンド、リードコマンド、スヌープコマンド）に応答してキャッシュにヒットまたはミスがあるか否かを判定するためのヒットミス回路（図示せず）と、２）スヌープを受信し、スヌープに対する応答メッセージを送信する、スヌープインターフェース（図示せず）に結合されたスヌープコントローラ４０４３と、３）キャッシュライン読み出し回路（図示せず）およびキャッシュライン書き込み回路（図示せず）と、を含む。
【０３２４】
すべてゼロを示すようにキャッシュラインを構成する技法
一部の実施形態は、ゼロでキャッシュライン内のデータを上書きすることによってすべてゼロを示すようにキャッシュラインを構成するように実施されるが（第１の技法）、代替的な実施形態は、他の技法を用いてすべてゼロを示すようにキャッシュラインを構成し得る（以下に説明する第２〜第４の技法は例である）。そのような他の技法は、キャッシュラインのサイズがコア内のいくつかのバス／構造の幅（例えば、ロードキュー８１０、ストアキュー８２０、書き込み結合バッファ（ＷＣＢ）８６０などの中間バッファのうちの１つまたは複数）の幅よりも一般に大きい、および／またはゼロでキャッシュライン内のデータを上書きすることは、電力を消費し、キャッシュの複雑さを増大させる、などの様々な理由で実施され得る。
【０３２５】
第２の技法は、キャッシュラインが現在存在しているキャッシュのウェイにあるキャッシュラインを無効化し、そのキャッシュの異なるウェイにゼロのキャッシュラインを書き込むことである。
【０３２６】
第３および第４の技法は、データアレイ４０５６内のデータではなくタグ状態を変更することを含み、これらは、キャッシュレベルのうちの１つまたは複数のレベルにおいて、および／またはインターコネクトにおいて使用され得る。第３の技法は、（例えば、属性フィールド（単数または複数）４０６２内の）キャッシュラインのそれぞれについてフィールド（ゼロラインフィールド４０６６と呼ばれる）を実装することであり、このフィールド内の値（１ビットであり得る）は、１）キャッシュラインが、そのキャッシュラインに格納されているデータの値を有するものとして扱われるべきであるか、２）キャッシュラインが、（そのキャッシュラインに格納されている実際のデータに関係なく）すべてゼロであるとして扱われるべきであるかを示す。そのような実施形態では、そのキャッシュラインの読み出し（エビクションを含む）は、そのようなゼロラインフィールドをサポートする別の構造にゼロラインフィールド４０６６の値を渡すか、データをゼロに変換するかのいずれかを行う。データはまた、読み出し時にコヒーレントエージェントのうちの１つ（例えば、コヒーレントエージェント３９００）によって使用される前に変換される。一部のそのような実施形態では、データはダウンストリームメモリ３９３０に書き込まれる前にも変換されるが、代替的な実施形態はまた、ダウンストリームメモリ３９３０またはメモリコントローラによって管理される代替的なメモリ構造におけるゼロラインフィールドを実施する。
【０３２７】
第４の技法は、第３の技法と似ているが、別個のフィールドを実装するのではなく、属性フィールド（単数または複数）のうちの既存の１つの属性フィールドに新しいエンコーディングを実装する（例えば、キャッシュコヒーレンシプロトコル状態フィールドまたは誤り訂正符号（ＥＣＣ）シンドロームフィールドの新しいエンコーディング）。
【０３２８】
特定の実施形態は、すべてゼロを示すようにキャッシュラインを構成することの一部として、キャッシュラインのキャッシュコヒーレンシプロトコル状態を「修正状態」または「所有状態」に修正し（またはキャッシュコヒーレンシ状態フィールドに新しいエンコーディングを使用する場合、ゼロライン、次いでゼロライン状態を示し）、ポイズン指示（単数または複数）を無視（データがポイズニングされなくなった）またはクリアさせる、ようにキャッシュを実装し得る。よって、キャッシュラインゼロ化命令の別の利点は、それがポイズニングされたラインを一貫してクリアするために使用され得ることである。
【０３２９】
関連する留意事項として、キャッシュラインをゼロにさせるメカニズムは、特定のキャッシュレベル（例えば、Ｌ１キャッシュのみでありＬ２またはＬ３キャッシュではないなど、Ｌ１キャッシュ、Ｌ２キャッシュ、およびＬ３キャッシュのサブセット）でのみ実装することができ、そのようなメカニズムを欠く所与のキャッシュレベルは、このメカニズムを有する異なるキャッシュレベルに送ることによって、すべてゼロを示すようにこのキャッシュラインを構成するように実装され得る（例えば、ゼロ化を行うことができるより下位のキャッシュレベル（例えば、Ｌ２キャッシュ）にデータを追い出すことによって、より上位のキャッシュレベル（例えば、Ｌ１キャッシュ）がすべてゼロを示すようにキャッシュラインを構成するように実装され、ゼロ化を行うことができるより上位レベルのキャッシュ（例えば、Ｌ１キャッシュ）に転送することによって、より下位のキャッシュレベル（例えば、Ｌ２キャッシュ）がすべてゼロを示すようにキャッシュラインを構成するように実装される）。以下により詳細に説明されるように、異なる実施形態は、書き込みおよび／またはスヌープに応答してキャッシュラインのゼロ化を実施することができる。書き込みおよびスヌープの両方に応答してキャッシュラインのゼロ化を実装する実施形態では、所与のキャッシュレベルを書き込みまたはスヌープの一方のみに（ただし両方ではない）応答してゼロ化を行うように実装でき、書き込みおよびスヌープのどちらか他方に応答してゼロ化を行うことができる下位または上位レベルのキャッシュに、データをプッシュ／追い出す、または転送することができる。
【０３３０】
すべてゼロを示すようにキャッシュラインを構成するようにキャッシュをトリガする
すべてゼロを示すようにキャッシュラインを構成するためにキャッシュに実装される技法に関係なく（上記参照）、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュをトリガすることは、発行エージェント単独で、またはインターコネクトから送信されたメッセージに応答する発行エージェントによって、インターコネクトからキャッシュのうちの１つに送信されるメッセージに応答し得る。
【０３３１】
発行エージェントが（単独で、またはインターコネクトからのメッセージに応答して）、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュをトリガする場合、異なる実施形態は、キャッシュラインが、発行エージェントのネイティブにサポートされているデータ幅（例えば、３２ビット、６４ビット、１２８ビット、２５６ビット、５１２ビット、１０２４ビット）よりも広い（例えば、３２バイト、６４バイト）場合に、アトミックであるキャッシュラインゼロ化命令を実装する技法を含む異なる技法を使用し得る。ネイティブにサポートされているデータ幅は、異なる実施形態においては異なる方法で現れ得る。一部の実施形態では、ネイティブにサポートされているデータ幅は、最も広いレジスタのセットのビット幅、および／または命令によって操作されるオペランド（単数または複数）の幅を表し得る。一部の実施形態では、ネイティブにサポートされているデータ幅は、算術演算ユニットおよび／または論理実行ユニットの幅を表し得る（例えば、オペランドの複数の部分が順次引き出され（ダブルパンプトまたはそれ以上）ないように命令によって示されるオペランドの幅が同じである場合）。一部の実施形態では、ネイティブにサポートされているデータ幅は、バス（例えば、ロードパイプ）の幅を表し得る。アトミックに格納することができるデータ量は、発行エージェントの１つまたは複数の内部構造（例えば、バス、中間バッファ）の幅によって制限され得る。
【０３３２】
よって、（単独で、またはインターコネクトからのメッセージに応答して）発行エージェントが（すべてゼロを示すようにキャッシュラインを構成するようにキャッシュの）トリガを行う一部の実施形態では、発行エージェントは、１）中間バッファのうちの１つまたは複数の中間バッファ（例えば、ストアキュー８２０および書き込み結合バッファ（ＷＣＢ）８６０）などの他の構造内のゼロラインフィールドを実装すること、または２）ゼロのキャッシュラインを運ばないが、中間バッファ（例えば、ストアキュー８２０および書き込み結合バッファ（ＷＣＢ）８６０）を通過することができる、キャッシュラインサイズのゼロの書き込みを示す、新しいコマンド（例えば、マイクロｏｐ、制御信号、マイクロ命令）を実装することのいずれかを実行する。そのため、キャッシュラインサイズが発行エージェントのネイティブにサポートされているデータ幅よりも広い場合（例えば、３２バイト、６４バイト）、ゼロのキャッシュラインをこれらのより狭い構造で表すことができる。ゼロのラインへの変換は、（ゼロラインフィールドまたは新しいコマンド／マイクロｏｐで示される）ゼロのラインが、メモリ階層の下位であり、かつゼロラインフィールドまたは新しいコマンドをサポートしていない構造に送信されている場合に実行される（例えば、ゼロのラインへの変換は、ゼロラインが、（上記の技法のうちの別のものを行い得る）データキャッシュ８４０に送信される、書き込み結合バッファ８６００から送信される、Ｌ３キャッシュによってインターコネクトに送信される、またはインターコネクトによって（例えば、メモリコントローラを介して）ダウンストリームメモリに送信される、場合に実行され得る）。
【０３３３】
別の例として、（単独で、またはインターコネクトからのメッセージに応答して）発行エージェントが（すべてゼロを示すようにキャッシュラインを構成するようにキャッシュの）トリガを行う一部の実施形態では、発行エージェントは、スヌープに応答せず（またはチャンクが書き込まれている間はスヌープに応答せず）、かつチャンクが同時に書き込まれるように（それ以前ではなく）キャッシュラインのサイズに等しい十分なチャンクが書き込まれたことに応答してエビクションされる中間バッファ（例えば、ストアキュー８２０、書き込み結合バッファ（ＷＣＢ）８６０、別個のステージングバッファ（図示せず））に、より小さいチャンク（例えば、一度に１６バイト、一度に３２バイト）のゼロを順次書き込み、それにより、キャッシュラインゼロ化命令をアトミックに実施する。
【０３３４】
他の態様
異なる実施形態は、異なるオーダリング（例えば、弱いオーダリング、強いオーダリング、弱いオーダリングより弱いオーダリング、強いオーダリングより強いオーダリング）でキャッシュラインゼロ化命令を実装することができる。弱いオーダリングのキャッシュラインゼロ化命令の場合、実施形態は、命令が自動エビクションされるように命令を実装することができる。
【０３３５】
キャッシュラインゼロ化命令は、その命令のリタイアの前に、すべてゼロを示すようにキャッシュラインを構成しないように実施されてもよい。そのような実施形態では、キャッシュラインゼロ命令が完了し、キャッシュラインがすべてのリーダに対してすべてゼロを示すように構成されていることを確保するメカニズムがある（例えば、フェンス命令、ロック命令、アーキテクチャ的な直列化（ｓｅｒｉａｌｉｚｉｎｇ）命令、より新しいストアがＧＯである（強くオーダリングされている）、より新しいロードがＧＯである（強くオーダリングされているよりも厳密である）のうちの１つまたは複数）。
【０３３６】
キャッシュラインゼロ化命令は、ページテーブルウォーク（仮想化テーブル（例えば、拡張ページテーブル（ＥＰＴ）（ここではＡビットおよびＤビットが更新される）、シャドーページテーブル）を含む）の目的でストアのように扱われることができ、書き込み不可の場合は機能しない。
【０３３７】
スヌープを使用する前に最初に発行エージェントのキャッシュへの書き込みを試みる実施形態  図４１は、スヌープを使用する前に、最初に発行元エージェントのキャッシュへの書き込みを試みる、本発明の実施形態を示す流れ図である。上述のように、第１のエージェント３９００は、実行するとメモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを引き起こすためのものである命令をデコードして実行する（ブロック４１１０）。命令のデコードおよび実行に応答して、第１のエージェントは、第１のエージェントに結合されたコヒーレントキャッシュのうちの１つ（例えば、Ｌ１キャッシュ３９０５）に、メモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを開始するためのライトコマンドを発行する（この場合、第１のエージェントは発行エージェントとも呼ばれる）（ブロック４１１２）。一部の実施形態では、第１のエージェントは、実行するとメモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを引き起こすためのものである命令をデコードするためのデコードユニット（例えば、デコーダ１４０、デコーダ３１４）を含む。第１のエージェントはまた、デコーダユニットに応答して、メモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを開始するコマンドを発行するための実行ユニット（例えば、メモリアクセスユニット（単数または複数）１６４、ロードストアユニット３４０）を含む。
【０３３８】
コマンドが発行されたキャッシュ（例えば、Ｌ１キャッシュ３９０５）のキャッシュラインについてヒットがあり（ブロック４１１４）、そのキャッシュラインのキャッシュコヒーレンシプロトコル状態が、他のキャッシュにブロードキャストせずにキャッシュラインを修正する権限をキャッシュに与えるもの（例えば、「修正状態」または「排他状態」）である（ブロック４１１６）場合、そのキャッシュは、すべてゼロを示すようにキャッシュラインを構成し、スヌープを抑制する（ブロック４１１８）。異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる。一部の実施形態では、コマンドが発行されたキャッシュ（例えば、Ｌ１キャッシュ３９０５）のキャッシュラインについてヒットがある（ブロック４１１４）場合、キャッシュラインは、１つまたは複数の他のキャッシュコヒーレンシプロトコル状態（例えば、「所有状態」、「転送状態」、または「共有状態」のうちの１つまたは複数）に対して依然としてゼロにされる。これが行われるあらゆる状態において、制御はブロック４１１９へ進み、これが行われないあらゆる状態において、制御はブロック４１２０に進む。よって、「修正状態」、「排他状態」、および「無効状態」ではないあらゆる状態において制御がブロック４１１９に進む実施形態では、ブロック４１２０は実施されず、その逆も同様である。ただし、状態に応じて制御がブロック４１１９または４１２０に進む実施形態を実施することができる。ブロック４１１９において、そのキャッシュは、すべてゼロを示すようにキャッシュラインを構成し、ブロック４１１９から、制御は（本明細書において後でより詳細に説明される）ブロック４１２２に進み、そこでキャッシュは、インターコネクトに向けて（実施形態に応じて、次のキャッシュレベルに、またはスヌープ（例えば、ライトアップデートスヌープ（ライトゼロスヌープまたはライトアンドゼロスヌープとも呼ばれる）、ライトインバリデートスヌープ（インバリデートイーブンイフモディファイドスヌープとも呼ばれる）、または無効化してライトバックすることを示すスヌープ（ライトバックアンドインバリデートスヌープとも呼ばれる））を発行するためにインターコネクトに）ライトコマンドを発行する。次のキャッシュレベルまたはインターコネクトに進んだライトコマンドが、「修正状態」または「排他状態」以外の状態のラインがすべてゼロを示すように構成されたことを示すことが可能である。この修正されたライトコマンドの１つの使用法は、「共有状態」のラインがすべてゼロに構成され、その状態が「修正状態」または「所有状態」に変更された場合、ライトアップデートスヌープが送信されないようにすることである。その状況では、インターコネクトは、異なるスヌープタイプ（例えば、ライトインバリデートスヌープまたはライトバックアンドインバリデートスヌープ）を発行し得る。ブロック４１２０において、キャッシュは、そのキャッシュラインのキャッシュコヒーレンシプロトコル状態を「無効状態」に変更し、制御はブロック４１２２に進む。キャッシュミスがある（ブロック４１１４）場合、制御はブロック４１２２に進む。
【０３３９】
転送状態または所有状態に関する具体的な例として、発行エージェントのキャッシュが転送状態または所有状態のキャッシュラインを有する場合、そのキャッシュラインは共有状態の他のキャッシュにあり得る。そのため、キャッシュラインがブロック４１１９でゼロ化されると、スヌープが送信されて、共有状態にある他のキャッシュラインを無効にする、または共有状態にある他のキャッシュラインをすべてゼロを示すように構成する。あるいは、転送状態または所有状態のキャッシュラインを無効化（またはクリーンエビクションおよび無効化）（ブロック４１２０）し、修正状態かつゼロ化状態、または所有状態かつゼロ化状態の新しいラインを作成することができる。ゼロ化されたその新しいラインは、転送状態または所有状態（例えば、そのキャッシュの異なるセットまたはウェイ）で見出されたキャッシュラインと同じキャッシュに挿入（書き込み）され得る、または異なるキャッシュに挿入され得る（例えば、キャッシュラインが転送状態または所有状態でＬ２キャッシュまたはＬ３キャッシュ内で見出された場合、キャッシュラインは無効化され、修正状態かつゼロ化状態または所有状態かつゼロ化状態の新しいラインがＬ１キャッシュ内に作成され得る）。
【０３４０】
ブロック４１２２において、キャッシュは、インターコネクトに向けてライトコマンドを発行する。このライトコマンドは、インターコネクト３９２０に直接発行されてもよいし、第１のエージェントの１つまたは複数の下位レベルキャッシュに送信されてもよい。例として、１）一部の実施形態では、ライトコマンドは、インターコネクトに直接発行され（すなわち、例えば、Ｌ１キャッシュ３９０５から直接インターコネクト３９２０まで、キャッシュ階層の下位レベルにある任意のキャッシュをスキップする。あらゆる下位レベルのキャッシュ（例えば、Ｌ２キャッシュ３９１０、Ｌ３キャッシュ３９１５）をスキップする。この場合、ライトコマンドは、第１のエージェントのデータＬ１キャッシュに使用され、一方、スヌープ（次に説明する）が、第１のエージェントの命令Ｌ１キャッシュ、Ｌ２キャッシュ、およびＬ３キャッシュ（より具体的には、実装されている場合はＬ３キャッシュスライス３９１６）、ならびに第２のエージェントのキャッシュに使用される）、２）一部の実施形態では、ライトコマンドは、上記を繰り返すＬ２キャッシュ３９１０に発行され、それがすべてゼロを示すようにキャッシュラインを構成しない場合、ライトコマンドをインターコネクト３９２０に直接発行し、この場合、ライトコマンドは、第１のエージェントのＬ１キャッシュおよびＬ２キャッシュに使用され、その際、スヌープ（次に説明する）が、第１のエージェントのＬ３キャッシュ（より具体的には実装されている場合はＬ３キャッシュスライス３９１６）、および第２のエージェントのキャッシュに使用され、３）一部の実施形態では、ライトコマンドは、上記を繰り返すＬ２キャッシュ３９１０に発行され、すべてゼロを示すようにキャッシュラインを構成しない場合、ライトコマンドをＬ３キャッシュ３９１５（より具体的には、実装されている場合はＬ３キャッシュスライス３９１６）に発行し、すべてゼロを示すようにキャッシュラインを構成しない場合、ライトコマンドをインターコネクト３９２０に発行し、この場合、ライトコマンドは、第１のエージェントのキャッシュに使用され、その際、スヌープ（次に説明する）が第２のエージェントのキャッシュに使用される。特定の実施形態では、ライトコマンドが発行されるキャッシュは、上述のライトコマンドに応答して、キャッシュヒットがあるか否かを判定し、すべてゼロを示すようにキャッシュラインを構成し（異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる）、キャッシュミスの場合、インターコネクトに向けてライトコマンドを発行するように実装されたキャッシュコントローラを含む。１つの具体的な例では、修正状態、排他状態、および／または所有状態である、（発行エージェントの）Ｌ２キャッシュ３９１０において、キャッシュラインヒットに応答して、Ｌ２キャッシュは、タスクをＬ１キャッシュに転送することによって、すべてゼロを示すようにキャッシュラインを構成するように実装される。
【０３４１】
インターコネクト３９２０のスヌープコントローラ３９２５は、ライトコマンドに応答して、キャッシュラインを格納している可能性がある任意のキャッシュを見つけるためにスヌーピングプロセス（ブロック４１９０）を開始するように実装される。スヌーピングプロセス４１９０を実施するために、（例えば、スヌープジェネレータ３９２６を介して）スヌープコントローラ３９２５が実装されて、キャッシュラインを格納している可能性があるコヒーレントキャッシュ（換言すれば、ヒットがあるか否かを決定する必要があるコヒーレントキャッシュ）にスヌープを発行する（ブロック４１２６）。一部の実施形態では、キャッシュラインを格納している可能性があるコヒーレントキャッシュは、１）ライトコマンドが以前に発行されていないコヒーレントキャッシュ、および２）キャッシュがラインを含む可能性がある（すなわち、スヌープフィルタがスヌープを抑制しない）ことを示すスヌープフィルタ（図示せず）をインターコネクト３９２０内に実装する実施形態におけるコヒーレントキャッシュである。これは、第２のエージェント３９０１をインターコネクト３９２０に結合する１つまたは複数のレベルのキャッシュ（例えば、Ｌ１キャッシュ３９０６、Ｌ２キャッシュ３９１１、Ｌ３キャッシュ３９１５）、ならびに第１のエージェント３９００（発行エージェント）をインターコネクト３９２０に結合し、ライトコマンドを受け取らず（すなわち、スキップされたキャッシュ）、インターコネクト３９２０内にスヌープフィルタ（図示せず）を実装する実施形態において、ラインを含むことができるとスヌープフィルタが示す（すなわち、スヌープフィルタがスヌープを抑制しない）キャッシュのうちのいずれか（例えば、Ｌ２キャッシュ３９１０、Ｌ３キャッシュ３９１５）を含み得る。第１のエージェントをインターコネクトに結合するキャッシュのうちの１つまたは複数のキャッシュにスヌープが発行される実施形態では、そのような各スヌープはまた、バックスヌープと呼ばれ得る。スヌーピングプロセス４１９０の一部として、状況に応じて異なる複数のタイプのスヌープを発行するか、またはただ１つのタイプのスヌープを発行するために、異なる実施形態を実装することができる。本明細書で後により詳細に説明するように、使用され得る様々な可能なスヌープタイプがある（例えば、ライトアップデートスヌープ（ライトゼロスヌープまたはライトアンドゼロスヌープとも呼ばれる）、ライトインバリデートスヌープ（インバリデートイーブンイフモディファイドスヌープとも呼ばれる）、無効化してライトバックすることを示すスヌープ（ライトバックアンドインバリデートスヌープとも呼ばれる）、ヒットしたキャッシュラインを書き出すが、第１のエージェントにデータを返送せず、データがダウンストリームメモリから読み出されることにならないスヌープ、すなわち従来技術のスヌープ（例えば、ＲＦＯ））。  具体的には、ライトアップデートスヌープが使用される場合、スヌープコントローラ３９２５はまた、スヌーピングプロセス４１９０の一部としてライトアップデートスヌープのうちの１つに応答して、キャッシュのうちの１つによって、キャッシュラインサイズの書き���みが実行されたか否かを判定する（破線のブロック４１２８として示す）ために実装され、書き込みが実行された場合、プロセスは完了し（ブロック４１３０）、そうでなければ、制御はブロック４１３２に進む。ブロック４１２８は、他の種類のスヌープがスヌープ処理４１９０に使用されるときには使用されないので破線で示されている。
【０３４２】
ライトコマンドおよびスヌープは、キャッシュのうちの１つまたは複数にゼロ化されるべきデータを含むキャッシュラインがある場合を処理するように動作する。キャッシュラインサイズのゼロの書き込みは、（上述のように）ライトコマンドに応答してキャッシュのうちの１つによって実行されていてもよいし、ライトアップデートスヌープを発行する実施形態では、以下で詳しく説明するように、ライトアップデートスヌープのうちの１つに応答してキャッシュのうちの１つによって実行されていてもよい。キャッシュラインサイズのゼロの書き込みがキャッシュのいずれによっても実行されていない場合、ブロック４１３２において、（例えば、スヌープコントローラ３９２５のライトジェネレータ３９２９を介して）インターコネクト３９２０、またはインターコネクト３９２０からのメッセージに応答して第１のエージェント（発行エージェント）は、コヒーレントキャッシュ（例えば、Ｌ１キャッシュ３９０５、Ｌ２キャッシュ３９１０、Ｌ３キャッシュ３９１５）のうちの１つまたは複数におけるキャッシュラインをすべてゼロを示すように構成させる（異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる）、またはメモリアドレスにおいてダウンストリームメモリへキャッシュラインサイズのゼロを書き込ませる。上記のように、また下記でさらに詳細に示されるように、特定の実施形態では、スヌープコントローラ３９２５は、この動作を担当するスヌープレスポンダ３９２７（および場合によりライトコンバータ３９２８およびライトジェネレータ３９２９）を含む。特定の実施形態では、（例えば、実行ユニット（例えば、メモリアクセスユニット（単数または複数）１６４、ロードストアユニット３４０）または他のハードウェア構造を介して）第１のエージェントは、この動作においてその役割を（もしあれば）実行する。代替的な実施形態では、インターコネクト３９２０は、ダウンストリームメモリへゼロの書き込みをするようにメモリコントローラに命令する。
【０３４３】
「すべてゼロを示すようにキャッシュラインを構成するようにキャッシュをトリガする」と題するセクションで既に述べたように、異なる実施形態は、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュをトリガさせる発行エージェントを別様に実装し得る（例えば、キャッシュラインが発行エージェントのネイティブにサポートされているデータ幅より広い場合（例えば、３２バイト、６４バイト）に、アトミック性を確保するために、他の構造（例えば、中間バッファ）にゼロラインフィールドを実装する、中間バッファを通過することができる（ゼロのキャッシュラインを運ばないが、キャッシュラインサイズのゼロの書き込みを示す）新しいコマンドを実装する、またはスヌープに応答せず（またはチャンクが書き込まれている間はスヌープに応答せず）、かつチャンクが同時に書き込まれるように（それ以前ではなく）キャッシュラインのサイズに等しい十分なチャンクが書き込まれたことに応答してエビクションされる中間バッファ（例えば、ストアキュー８２００、書き込み結合バッファ（ＷＣＢ）８６００、別個のステージングバッファ（図示せず））に、より小さいチャンク（例えば、一度に１６バイト、一度に３２バイト）のゼロの順次書き込みを実装する）。
【０３４４】
コヒーレントキャッシュのスヌープに依拠する実施形態  図４２は、コヒーレントキャッシュのスヌープに依存する、本発明の実施形態を示す流れ図である（最初に発行エージェントのキャッシュへの書き込みを試みることはしない）。上述のように、第１のエージェント３９００は、実行することにより、メモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを引き起こすためのものである命令をデコードして実行する（ブロック４２１０）。命令のデコードおよび実行に応答して、第１のエージェントは、メモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを開始するコマンドを、インターコネクト３９２０に発行する（この場合、第１のエージェントは、発行エージェントとも呼ばれる）（ブロック４２１２）。一部の実施形態では、第１のエージェントは、実行するとメモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを引き起こすためのものである命令をデコードするためのデコードユニット（例えば、デコーダ１４０、デコーダ３１４）を含む。第１のエージェントはまた、デコーダユニットに応答して、メモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを開始するコマンドを発行するための実行ユニット（例えば、メモリアクセスユニット（単数または複数）１６４、ロードストアユニット３４０）を含む。
【０３４５】
第１のエージェント／発行エージェント３９００からのコマンドは、インターコネクト３９２０に発行され（ブロック４２１２）、インターコネクト３９２０は、コマンドに応答して、キャッシュラインを格納している可能性がある任意のキャッシュを見つけるためにスヌーピングプロセス（ブロック４２９０）を開始するように実装される。スヌーピングプロセス４２９０を実施するために、（例えば、スヌープコントローラ３９２５を介して）インターコネクト３９２０が（例えば、スヌープジェネレータ３９２６を介して）実装されて、キャッシュラインを格納している可能性があるコヒーレントキャッシュ（換言すれば、ヒットがあるか否かを決定する必要があるコヒーレントキャッシュ）にスヌープを発行する（ブロック４２２６）。一部の実施形態では、キャッシュラインを格納している可能性があるコヒーレントキャッシュは、１）インターコネクト３９２０内にスヌープフィルタ（図示せず）を実装しない実施形態におけるコヒーレントキャッシュのいずれか（例えば、Ｌ１キャッシュ３９０５、Ｌ２キャッシュ３９１０、Ｌ１キャッシュ３９０６、Ｌ２キャッシュ３９１１、Ｌ３キャッシュ３９１５）、または２）インターコネクト３９２０内のスヌープフィルタ（図示せず）が、そのようなスヌープフィルタを実装する実施形態においてキャッシュがラインを含む可能性がある（すなわち、スヌープフィルタがスヌープを抑制しない）ことを示すコヒーレントキャッシュである。第１のエージェントをインターコネクトに結合するキャッシュのうちの１つまたは複数のキャッシュにスヌープが発行される実施形態では、そのような各スヌープはまた、バックスヌープと呼ばれ得る。上述のように、スヌーピングプロセス４２９０の一部として、異なる実施形態が、状況に応じて異なるタイプのスヌープを発行するか、またはただ１つのタイプのスヌープを発行することができる。本明細書で後により詳細に説明するように、使用され得る様々な可能なスヌープタイプがある（例えば、ライトアップデートスヌープ（ライトゼロスヌープまたはライトアンドゼロスヌープとも呼ばれる）、ライトインバリデートスヌープ（インバリデートイーブンイフモディファイドスヌープとも呼ばれる）、無効化してライトバックすることを示すスヌープ（ライトバックアンドインバリデートスヌープとも呼ばれる）、ヒットしたキャッシュラインを書き出すが、第１のエージェントにデータを返送せず、データがダウンストリームメモリから読み出されることにならないスヌープ、すなわち従来技術のスヌープ（例えば、ＲＦＯ））。具体的には、ライトアップデートスヌープが使用される場合、スヌープコントローラ３９２５はまた、スヌーピングプロセス４２９０の一部として、ライトアップデートスヌープのうちの１つに応答して、キャッシュのうちの１つによって、キャッシュラインサイズの書き込みが実行されたか否かを判定する（破線のブロック４２２８として示す）ために実装され、書き込みが実行された場合、プロセスは完了し（ブロック４２３０）、そうでなければ、制御はブロック４２３２に進む。ブロック４２２８は、他の種類のスヌープがスヌープ処理４２９０に使用されるときには使用されないので破線で示されている。
【０３４６】
代替的な実施形態では、ブロック４２１２は、キャッシュラインを格納している可能性があるコヒーレントキャッシュにスヌープコマンドを発行するように実装されている第１のエージェントに置き換えられる（この場合、ブロック４２２６は存在せず、フローは、ライトアップデートスヌープを使用する実施形態ではブロック４２２８に進み、そうでなければブロック４２３２に進む）。
【０３４７】
スヌープは、キャッシュのうちの１つまたは複数にゼロ化されるべきデータを含むキャッシュラインがある場合を処理するように動作する。ライトアップデートスヌープを発行する実施形態では、キャッシュラインサイズのゼロの書き込みは、キャッシュのうちの１つまたは複数によって実行されている場合がある。キャッシュラインサイズのゼロの書き込みがキャッシュのいずれによっても実行されていない場合、ブロック４２３２において、（例えば、ライトジェネレータ３９２９を介して）第１のエージェント単独、インターコネクト３９２０、またはインターコネクト３９２０からのメッセージに応答して第１のエージェントは、キャッシュ（例えば、Ｌ１キャッシュ３９０５、Ｌ２キャッシュ３９１０、Ｌ３キャッシュ３９１５）のうちの１つまたは複数におけるキャッシュラインをすべてゼロを示すように構成させる（異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる）、またはアドレスにおいてダウンストリームメモリにキャッシュラインサイズのゼロを書き込ませる。上記のように、また下記でさらに詳細に示されるように、特定の実施形態では、スヌープコントローラ３９２５は、この動作においてその役割を（もしあれば）を実行するスヌープレスポンダ３９２７（および場合によりライトコンバータ３９２８およびライトジェネレータ３９２９）を含む。特定の実施形態では、（例えば、実行ユニット（例えば、メモリアクセスユニット（単数または複数）１６４、ロードストアユニット３４０）または他のハードウェア構造を介して）第１のエージェントは、この動作においてその役割を（もしあれば）実行する。代替的な実施形態では、インターコネクト３９２０は、ダウンストリームメモリへゼロの書き込みをするようにメモリコントローラに命令する。
【０３４８】
「すべてゼロを示すようにキャッシュラインを構成するようにキャッシュをトリガする」と題するセクションで既に述べたように、異なる実施形態は、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュをトリガさせる発行エージェントを別様に実装し得る（例えば、キャッシュラインが発行エージェントのネイティブにサポートされているデータ幅より広い場合（例えば、３２バイト、６４バイト）に、アトミック性を確保するために、他の構造（例えば、中間バッファ）にゼロラインフィールドを実装する、中間バッファを通過することができる（ゼロのキャッシュラインを運ばないが、キャッシュラインサイズのゼロの書き込みを示す）新しいコマンドを実装する、またはスヌープに応答せず（またはチャンクが書き込まれている間はスヌープに応答せず）、かつチャンクが同時に書き込まれるように（それ以前ではなく）キャッシュラインのサイズに等しい十分なチャンクが書き込まれたことに応答してエビクションされる中間バッファ（例えば、ストアキュー８２００、書き込み結合バッファ（ＷＣＢ）８６００、別個のステージングバッファ（図示せず））に、より小さいチャンク（例えば、一度に１６バイト、一度に３２バイト）のゼロの順次書き込みを実装する）。
【０３４９】
異なるタイプのスヌープ  上述のように、スヌーピングプロセス４１９０またはスヌーピングプロセス４２９０の一部として、異なる実施形態が、状況に応じて異なる複数のタイプのスヌープを発行するか、またはただ１つのタイプのスヌープを発行することができる。使用され得る様々な可能なスヌープタイプがある（例えば、ライトアップデートスヌープ（ライトゼロスヌープまたはライトアンドゼロスヌープとも呼ばれる）、ライトインバリデートスヌープ、無効化してライトバックすることを示すスヌープ（インバリデートイーブンイフモディファイドスヌープとも呼ばれる）、ヒットしたキャッシュラインを書き出すが、第１のエージェントにデータを返送せず、データがダウンストリームメモリから読み出されることにならないスヌープ、従来技術のスヌープ（例えば、ＲＦＯ））。上述のように、これらの異なる種類のスヌープのうちのいずれか１つを、図４１および図４２に関して説明した上記の実施形態のいずれかと共に使用することができる。ここで、異なる種類のスヌープに関するさらなる詳細を説明する。
【０３５０】
ライトアップデートスヌープ。図４３は、スヌーププロセス４１９０または４２９０を実施するためにライトアップデートスヌープ（ライトゼロスヌープまたはライトアンドゼロスヌープとも呼ばれる）を使用する、本発明の実施形態を示す流れ図である。図４１および図４２に関連して、フローは、それぞれブロック４１２４またはブロック４２１２からブロック４３２６に進み、ブロック４３２６は、ライトアップデートスヌープを用いてブロック４１２６または４２２６を実行する。（例えば、スヌープコントローラ３９２５のスヌープジェネレータ３９２６を介して）インターコネクト３９２０は、キャッシュラインを格納している可能性があるコヒーレントキャッシュ（換言すれば、ヒットがあるか否かを決定する必要があるコヒーレントキャッシュ）にライトアップデートスヌープを発行するように実装される（ブロック４３２６）。ライトアップデートスヌープが発行されるキャッシュ（例えば、第１のエージェントのＬ１キャッシュ、Ｌ２キャッシュ、および／またはＬ３キャッシュスライス、ならびに第２のエージェントのＬ１キャッシュ、Ｌ２キャッシュ、およびＬ３キャッシュスライス）のキャッシュラインについてヒットがあった場合（ブロック４３４０）、そのキャッシュは、１）ヒットするキャッシュラインのキャッシュコヒーレンシプロトコル状態が「修正状態」（および一部の実施形態では、「転送状態」、「排他状態」、「所有状態」、および／または「共有状態」のうちの１つまたは複数）である場合（ブロック４３４２）、すべてゼロを示すようにキャッシュラインを構成し（ブロック４３４４）（異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる）、ゼロ化を示す応答メッセージをインターコネクト３９２０に発行し（共有状態にあるヒットするキャッシュラインのゼロ化をサポートする一部の実施形態では、応答メッセージは、修正状態かつゼロ化状態または所有状態かつゼロ化状態対共有状態かつゼロ化状態（後者は、元の状態が「共有状態」であり、キャッシュがすべてゼロを示すようにキャッシュラインを構成したが、その状態は依然として「共有状態」であることを示す）など、キャッシュラインの状態も識別し、共有状態のキャッシュラインのゼロ化をサポートする代替的な実施形態では、元の状態が「共有状態」であり、キャッシュがすべてゼロを示すようにキャッシュラインを構成したが、その状態は依然として「共有状態」である場合に、（ブロック４３５０のように）ゼロ化されてないことを示す応答メッセージが送信される）（４３４６）、２）そうでなければ、そのキャッシュラインのキャッシュコヒーレンシプロトコル状態を「無効状態」に構成し（ブロック４３２８）、インターコネクトに対してゼロ化されていないことを示す応答メッセージを発行する（ブロック４３５０）。ライトアップデートスヌープが発行されたキャッシュのキャッシュラインについてヒットがない場合（ブロック４３４０）、キャッシュは、インターコネクトに対してゼロ化にされていないことを示す応答メッセージを発行する（ブロック４３５０）。よって、一部の実施形態では、コヒーレントキャッシュは、修正状態、所有状態、排他状態、および転送状態のいずれかのキャッシュラインにヒットするライトコマンドまたはライトアンドゼロスヌープがキャッシュにキャッシュラインをゼロにするように構成させる（そしてその状態を修正状態（修正状態かつゼロ化状態）または所有状態（所有状態かつゼロ化状態）に修正させる）ように実装され得る。代替的な実施形態では、そのようなキャッシュがそのように実装されるのは、修正状態、所有状態、排他状態、および転送状態のサブセットについてのみであり得る。その場合、修正状態、所有状態、排他状態、または転送状態にあり、修正状態かつゼロ化状態または所有状態かつゼロ化状態に変更されていないヒットしたキャッシュラインは、ライトアンドゼロスヌープに応答して、無効状態に変更される。そのため、一部の実施形態では、コヒーレントキャッシュのすべてまたはサブセットは、修正状態、排他状態、所有状態、または転送状態のすべてまたはサブセットについて、そのキャッシュ内でヒットするライトコマンドまたはライトアンドアップデート（別称ライトアンドゼロ）スヌープに応答して、キャッシュラインをゼロにする（かつその状態が修正状態（修正状態かつゼロ状態）または所有状態（所有状態かつゼロ化状態）に変わる）ように実装される。共有状態にあるヒットするキャッシュラインのゼロ化およびそれを共有状態のままにすることをサポートする実施形態は、他のキャッシュでヒットした修正状態、排他状態、所有状態、または転送状態のラインが、修正状態かつゼロ化状態に変更されるのではなく、所有状態かつゼロ化状態に変更されるか、または無効化されたときにのみ行われる。特定の実施形態では、ライトアップデートスヌープに応答するように実装されたキャッシュは、ライトアップデートスヌープに応答してキャッシュヒットがあるか否かを判定し、すべてゼロを示すようにヒットしたキャッシュラインを構成し（異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる）、応答メッセージをインターコネクト３９２０に発行するための、（例えば、スヌープコントローラ４０５３を介して）キャッシュコントローラ４０５１を含む。
【０３５１】
ライトアップデートスヌープを発行した後、（例えば、スヌープコントローラ３９２５のスヌープレスポンダ３９２７を介して）インターコネクト３９２０は、それぞれの応答メッセージの受信を追跡するように実施される（ブロック４３５２）（例えば、１つの実施形態では、スヌープジェネレータ３９２６は、スヌープレスポンダ３９２７に、スヌープレスポンダ３９２７がそれぞれの応答メッセージの受信を追跡するための情報を示す）。ブロック４３５２から、図４１の実施形態が実施されているか図４２の実施形態が実施されているかに応じて、制御はブロック４１２８またはブロック４２２８のいずれかに進む。キャッシュラインサイズのゼロの書き込みは、ライトアップデートスヌープのうちの１つに応答してキャッシュのうちの１つによって実行された可能性がある（しかしながら、「共有状態」のキャッシュラインのゼロ化を実装し、所有状態かつゼロ化状態または修正状態かつゼロ化状態であるキャッシュラインのうちの１つを応答メッセージのどれも反映しない実施形態では、キャッシュラインのゼロの書き込みは、ライトアップデートスヌープのうちの１つに応答してキャッシュのうちの１つによって実行されたとは考えられない）。キャッシュラインサイズのゼロの書き込みがキャッシュのいずれによっても実行されていない場合（ブロック４１２８およびブロック４２２８）（すべての応答メッセージがゼロ化されていないと示す、または「共有状態」にあるキャッシュラインのゼロ化を実装し、所有状態かつゼロ化状態または修正状態かつゼロ化状態であるキャッシュラインの１つを応答メッセージのどれも反映しない実施形態では）、ブロック４１３２またはブロック４２３２が実行される、すなわち、（例えば、スヌープコントローラ３９２５のライトジェネレータ３９２９を介して）インターコネクト３９２０、またはインターコネクト３９２０からのメッセージに応答して（例えば、実行ユニット（例えば、メモリアクセスユニット（単数または複数）１６４、ロードストアユニット３４０）または他のハードウェア構造を通して）第１のエージェントは、キャッシュ（例えば、Ｌ１キャッシュ、Ｌ２キャッシュ、Ｌ３キャッシュ）のうちの１つにおけるキャッシュラインをすべてゼロを示すように構成させる（異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる）、またはアドレスにおいてダウンストリームメモリへキャッシュラインサイズのゼロを書き込ませる。
【０３５２】
上述のように、ＲＦＯオペレーションの使用とは対照的に、ライトアップデートスヌープの使用は、ラインが読み取られて発行エージェントに戻されることを必要とせず、データのオーナーシップを発行エージェントに与えることが要求されるという点で有利である（４３４０および４３４２の条件が満たされると、ライトアップデートスヌープにより、別のコヒーレントエージェントのキャッシュ内のキャッシュラインがゼロにされる）。よって、ライトアップデートスヌープを使用する実施形態の利点は、それらが別のエージェント（例えば、第２のエージェント／非発行エージェント）のローカルキャッシュを直接更新できることである。例えば、これにより、他のエージェントが操作している変数を更新することなど、比較的高速な通信が可能になる。
【０３５３】
上述のように、ライトアップデートスヌープは、図４１および図４２の実施形態と併せて使用することができる。例として、図４１からの実施形態のうちの１つにおいてライトアップデートスヌープを実施する１つの具体的な実施形態が説明される。この具体的な実施形態では、発行エージェント３９００は最初に発行エージェント３９００のＬ１キャッシュ３９０５への書き込みを試み、スヌープが要求される場合、インターコネクト３９２０は、上述のようにキャッシュラインを格納している可能性があるコヒーレントキャッシュにライトアップデートスヌープを発行する。よって、Ｌ１キャッシュは、上述のようにライトコマンドに応答するように実装され、Ｌ１キャッシュ、Ｌ２キャッシュ、およびＬ３キャッシュ（より具体的には、実装されている場合はＬ３キャッシュスライス）は、上述のようにライトアップデートスヌープに応答するように実装され、インターコネクト３９２０は、上述のように、（例えば、スヌープコントローラ３９２５のスヌープジェネレータ３９２６を介して）ライトコマンドに応答してライトアップデートスヌープを発行し、（例えば、スヌープコントローラ３９２５のスヌープレスポンダ３９２７を介して）応答メッセージに応答するように実装され、（例えば、スヌープコントローラ３９２５のライトジェネレータ３９２９を介して）インターコネクト３９２０、またはインターコネクトからのメッセージに応答して（例えば、実行ユニット（例えば、メモリアクセスユニット（単数または複数）１６４、ロードストアユニット３４０）または他のハードウェア構造を通して）第１のエージェントは、キャッシュ（例えば、第１のエージェントのＬ１キャッシュ３９０５、Ｌ２キャッシュ３９１０、またはＬ３キャッシュ３９１５（より具体的には、実装されている場合はＬ３キャッシュスライス３９１６））のうちの１つにおけるキャッシュラインをすべてゼロを示すように構成させる（異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる）、またはメモリアドレスにおいてダウンストリームメモリにキャッシュラインサイズのゼロを書き込ませるように実装される。
【０３５４】
ライトインバリデートスヌープ。図４４は、スヌーププロセス４１９０または４２９０を実施するためにライトインバリデートスヌープ（インバリデートイーブンイフモディファイドスヌープとも呼ばれる）を使用する、本発明の実施形態を示す流れ図である。図４１および図４２に関連して、フローは、それぞれブロック４１２４またはブロック４２１２からブロック４４２６に進み、ブロック４４２６は、ライトインバリデートスヌープを用いてブロック４１２６または４２２６を実行する。（例えば、スヌープコントローラ３９２５のスヌープジェネレータ３９２６を介して）インターコネクト３９２０は、キャッシュラインを格納している可能性があるコヒーレントキャッシュ（換言すれば、ヒットがあるか否かを決定する必要があるコヒーレントキャッシュ）にライトインバリデートスヌープを発行するように実装される（ブロック４４２６）。ライトインバリデートスヌープが発行されたキャッシュ（例えば、第１のエージェントのＬ１キャッシュ、Ｌ２キャッシュ、および／またはＬ３キャッシュスライス、ならびに第２のエージェントのＬ１キャッシュ、Ｌ２キャッシュ、およびＬ３キャッシュスライス）のキャッシュラインについてヒットがある（ブロック４４４０）場合、そのキャッシュは、キャッシュコヒーレンシプロトコル状態を「無効状態」を示すようにし（現在の状態では「修正状態」であっても）（ブロック４４４８）、キャッシュは、すべてゼロを示すようにキャッシュラインを構成する必要はない（異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる）、またはインバリデートが一定時間内に完了した場合、インターコネクトへ応答メッセージを発行する必要はない（インバリデートが一定時間内に完了しない場合、１つの実施形態は、スヌープが完了したことを示す応答メッセージをスヌープされたキャッシュに送信させる）。ライトインバリデートスヌープが発行されたキャッシュのキャッシュラインについてヒットがない場合（４４４０）、そのキャッシュは、１つの実施形態では、何もしない（ブロック４４３０）。
【０３５５】
加えて、図４１および図４２に関連して、フローは、それぞれブロック４１２４またはブロック４２１２からブロック４１３２または４２３２に進む（ブロック４１２８および４２２８は、ライトインバリデートスヌープが使用されるときは実施されない）。ブロック４１３２または４２３２において、第１のエージェント（例えば、実行ユニット（例えば、メモリアクセスユニット（単数または複数）１６４、ロードストアユニット３４０）または他のハードウェア構造を介して）単独、（例えば、スヌープコントローラ３９２５のライトジェネレータ３９２９を介して）インターコネクト３９２０、またはインターコネクトからのメッセージに応答して（例えば、実行ユニット（例えば、メモリアクセスユニット（単数または複数）１６４、ロードストアユニット３４０）または他のハードウェア構造を介して）第１のエージェントは、キャッシュ（例えば、第１のエージェントのＬ１キャッシュ３９０５、Ｌ２キャッシュ３９１０、またはＬ３キャッシュ３９１５（より具体的には、実装される場合Ｌ３キャッシュスライス３９１６））のうちの１つにおけるキャッシュラインをすべてゼロを示すように構成させる（異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる）、またはアドレスにおいてダウンストリームメモリにキャッシュラインサイズのゼロを書き込ませる。
【０３５６】
上述のように、ＲＦＯオペレーションの使用とは対照的に、ライトインバリデートスヌープの使用は、発行エージェントがデータをゼロ化するため、キャッシュラインが読み取られて発行エージェントに戻されることを必要としないという点で有利である。
【０３５７】
上述のように、ライトインバリデートスヌープは、図４１および図４２の実施形態と併せて使用することができる。例として、図４１からの実施形態のうちの１つにおいてライトインバリデートスヌープを実施する１つの具体的な実施形態が説明される。この具体的な実施形態では、発行エージェント３９００は最初に発行エージェント３９００のＬ１キャッシュ３９０５への書き込みを試み、スヌープが要求される場合、インターコネクト３９２０は、上述のようにキャッシュラインを格納している可能性があるコヒーレントキャッシュにライトインバリデートスヌープを発行する。よって、Ｌ１キャッシュは、上述のようにライトコマンドに応答するように実装され、Ｌ１キャッシュ、Ｌ２キャッシュ、およびＬ３キャッシュ（より具体的には、実装されている場合はＬ３キャッシュスライス）は、上述のようにライトインバリデートスヌープに応答するように実装され、インターコネクト３９２０は、ライトコマンドに応答してライトインバリデートスヌープを発行するように実装され、第１のエージェント（例えば、実行ユニット（例えば、メモリアクセスユニット（単数または複数）１６４、ロードストアユニット３４０）または他のハードウェア構造を介して）単独、（例えば、スヌープコントローラＱＯ２５のライトジェネレータ３９２９を介して）インターコネクト３９２０、またはインターコネクトからのメッセージに応答して（例えば、実行ユニット（例えば、メモリアクセスユニット（単数または複数）１６４、ロードストアユニット３４０）または他のハードウェア構造を通して）第１のエージェントは、キャッシュ（例えば、第１のエージェントのＬ１キャッシュ３９０５、Ｌ２キャッシュ３９１０、またはＬ３キャッシュ３９１５（より具体的には、実装されている場合はＬ３キャッシュスライス３９１６））のうちの１つにおけるキャッシュラインをすべてゼロを示すように構成させる（異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる）、またはメモリアドレスにおいてダウンストリームメモリにキャッシュラインサイズのゼロを書き込ませるように実装される。
【０３５８】
無効化およびライトバックするスヌープ。
図４５は、スヌーププロセス４１９０または４２９０を実施するために、無効化およびライトバックするスヌープ（「ライトバックアンドインバリデートスヌープ」とも呼ばれる）を使用する、本発明の実施形態を示す流れ図である。図４１および図４２に関連して、フローは、それぞれブロック４１２４またはブロック４２１２からブロック４５２６に進み、ブロック４５２６は、ライトバックアンドインバリデートスヌープ（無効化およびライトバックするスヌープ）を用いてブロック４１２６または４２２６を実行する。（例えば、スヌープコントローラ３９２５のスヌープジェネレータを介して）インターコネクト３９２０は、キャッシュラインを格納している可能性があるコヒーレントキャッシュ（換言すれば、ヒットがあるか否かを決定する必要があるコヒーレントキャッシュ）にライトバックアンドインバリデートスヌープを発行するように実装される（ブロック４５２６）。そのようなスヌープが発行されるキャッシュ（例えば、第１のエージェントのＬ１キャッシュ、Ｌ２キャッシュ、および／またはＬ３キャッシュスライス、ならびに第２のエージェントのＬ１キャッシュ、Ｌ２キャッシュ、およびＬ３キャッシュスライス）のキャッシュラインについてヒットがあった場合（ブロック４５４０）、そのキャッシュは、１）キャッシュラインのキャッシュコヒーレンシプロトコル状態が「修正状態」（および一部の実施形態では「クリーンエビクト状態」）である場合（ブロック４５４２）、キャッシュラインをインターコネクト３９２０にライトバックし（ブロック４５４４）、ともかく２）キャッシュラインのキャッシュコヒーレンシプロトコル状態を「無効状態」を示すようにする（ブロック４５４８）（キャッシュはキャッシュラインをすべてゼロを示すように構成する必要はない）。スヌープが発行されたキャッシュのキャッシュラインについてヒットがない場合（ブロック４５４０）、キャッシュは、１つの実施形態では、何もしない（制御はブロック４５５２に進む）。特定の実施形態では、そのようなスヌープに応答するように実装されたキャッシュは、そのようなスヌープに応答して、キャッシュヒットがあるか否かを判定し、修正されたキャッシュライン（例えば、ヒットして「修正状態」のキャッシュコヒーレンシプロトコル状態を有するもの）をインターコネクト３９２０にライトバックし、キャッシュラインのキャッシュコヒーレンシプロトコル状態を「無効状態」に修正するためのキャッシュコントローラ４０５１を含む。
【０３５９】
ライトアップデートスヌープを発行した後、（例えば、スヌープコントローラ３９２５のスヌープレスポンダ３９２７を介して）インターコネクト３９２０は、あらゆるそれぞれの応答メッセージの受信を追跡するように実施される（ブロック４５５２）（例えば、１つの実施形態では、スヌープジェネレータ３９２６は、スヌープレスポンダ３９２７に、スヌープレスポンダ３９２７があらゆるそれぞれの応答メッセージの受信を追跡するための情報を示す）。応答メッセージがデータ（すなわち、修正されたキャッシュラインからのデータ）と共に受信された場合（ブロック４５６０）、インターコネクト３９２０は、場合により、（例えば、スヌープコントローラ３９２５のライトコンバータ３９２８を介して）データをゼロに実質的に変換するように実装される（ブロック４５６２）。そうでなければ、インターコネクト３９２０は、場合により、（例えば、スヌープコントローラ３９２５のライトジェネレータ３９２９を介して）ゼロラインを実質的に生成するようめに実装される（ブロック４５６４）。図４１の実施形態が実施されているか図４２の実施形態が実施されているかに応じて、制御はブロック４５６２および４５６４からブロック４１３２またはブロック４２３２のいずれかに進む（ブロック４１２８および４２２８は無効化およびライトバックするスヌープが使用される場合は実施されない）。ブロック４１３２または４２３２において、第１のエージェント（例えば、実行ユニット（例えば、メモリアクセスユニット（単数または複数）１６４、ロードストアユニット３４０）または他のハードウェア構造を介して）単独、（例えば、スヌープコントローラ３９２５を介して）インターコネクト３９２０、またはインターコネクト３９２０からのメッセージに応答して（例えば、実行ユニット（例えば、メモリアクセスユニット（単数または複数）１６４、ロードストアユニット３４０）または他のハードウェア構造を介して）第１のエージェントは、キャッシュ（例えば、Ｌ１キャッシュ、Ｌ２キャッシュ、Ｌ３キャッシュ）のうちの１つにおけるキャッシュラインをすべてゼロを示すように構成させる（異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる）、またはアドレスにおいてダウンストリームメモリへキャッシュラインサイズのゼロを書き込ませる。１つの実施形態では、ブロック４５６０および４５６２は実施されず、ブロック４５６４は常に実行される。別の実施形態では、ブロック４５６２は実行されず、ライトバックされたデータが第１のエージェントに送信され、第１のエージェントはデータをゼロ化する。別の実施形態では、ブロック４５６０、４５６２、および４５６４は実行されず、第１のエージェントはデータをゼロ化する。
【０３６０】
上述のように、ＲＦＯオペレーションの使用とは対照的に、無効化およびライトバックするスヌープの使用は、発行エージェントがデータをゼロ化するため、キャッシュラインが読み取られて発行エージェントに戻されることを必要としないという点で有利である。
【０３６１】
上述のように、キャッシュライン境界にアラインされたアドレスにおいてキャッシュラインサイズのゼロの書き込みを開始するコマンドを発行する第１のエージェントに応答して上記が開始される（例えば、ブロック４１１２または４２１２）。上述のように、このコマンドは、ライトコマンドの形をとることができる（例えば、ブロック４１１２または４２１２）。他の実施形態では、このコマンドはリードコマンドであり得る（例えば、ブロック４２１２）。この場合、キャッシュのうちの１つ（例えば、Ｌ１キャッシュ、Ｌ２キャッシュ、Ｌ３キャッシュ）におけるキャッシュラインは、１）インターコネクト３９２０（例えば、スヌープコントローラ３９２５）が、ゼロライン（そのラインのそのキャッシュコヒーレンシプロトコル状態が修正状態または排他状態に設定される）を示す第１のエージェントに応答して、第１のエージェントからのリードコマンドに応答するように実装されていることと、２）第１のエージェントが、そのリードコマンドの結果をキャッシュに入れて、キャッシュ（例えば、Ｌ１キャッシュ３９０５）に、すべてゼロを示すようにキャッシュラインを構成させるが（異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる）、第１のエージェントのアーキテクチャレジスタファイルには入れないように実装されていることと、によってすべてゼロを示すように構成させられる。
【０３６２】
上述のように、無効化およびライトバックするように示すスヌープは、図４１および図４２の実施形態と併せて使用することができる。例として、図４１からの実施形態のうちの１つにおいてそのようなスヌープを実施する１つの具体的な実施形態が説明される。この具体的な実施形態では、発行エージェント３９００は最初に発行エージェント３９００のＬ１キャッシュ３９０５への書き込みを試み、スヌープが要求される場合、インターコネクト３９２０は、上述のようにキャッシュラインを格納している可能性があるコヒーレントキャッシュにスヌープを発行する。よって、Ｌ１キャッシュは、上述のようにライトコマンドに応答するように実装され、Ｌ１キャッシュ、Ｌ２キャッシュ、およびＬ３キャッシュ（より具体的には、実装されている場合はＬ３キャッシュスライス）は、上述のようにスヌープに応答するように実装され、インターコネクト３９２０は、ライトコマンドに応答してスヌープを発行するように実装され、場合により、（例えば、スヌープコントローラ３９２５のライトコンバータ３９２８を介して）スヌープに応答してあらゆる受信データをゼロに実質的に変換するように実装され、場合により、スヌープに応答してデータが（例えば、スヌープコントローラ３９２５の書き込みジェネレータ３９２９）受信されない場合、ゼロラインを実質的に生成するように実装され、第１のエージェント（例えば、実行ユニット（例えば、メモリアクセスユニット（単数または複数）１６４、ロードストアユニット３４０）または他のハードウェア構造を介して）単独、（例えば、スヌープコントローラ３９２５を介して）インターコネクト３９２０、またはインターコネクトからのメッセージに応答して（例えば、実行ユニット（例えば、メモリアクセスユニット（単数または複数）１６４、ロードストアユニット３４０）または他のハードウェア構造を通して）第１のエージェントは、キャッシュ（例えば、第１のエージェントのＬ１キャッシュ３９０５、Ｌ２キャッシュ３９１０、またはＬ３キャッシュ３９１５（より具体的には、実装されている場合はＬ３キャッシュスライス３９１６））のうちの１つにおけるキャッシュラインをすべてゼロを示すように構成させる（異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる）、またはメモリアドレスにおいてダウンストリームメモリへキャッシュラインサイズのゼロを書き込ませるように実装される。
【０３６３】
ヒットしたキャッシュラインを書き出すが、第１のエージェントにデータを返送せず、データがダウンストリームメモリから読み出されることにならないスヌープ、すなわち従来技術のスヌープ（例えば、ＲＦＯ）。図４６は、ヒットするが、第１のエージェントにデータを送り返さず、スヌーププロセス４１９０または４２９０を実施するためにデータがダウンストリームメモリから読み出されることにならない、あらゆるキャッシュラインを書き出すスヌープ（すなわちラインを正常に書き出す従来技術のスヌープ、例えばＲＦＯオペレーション）を使用する、本発明の実施形態を示す流れ図である。図４１および図４２に関連して、フローは、それぞれブロック４１２４またはブロック４２１２からブロック４５２６に進み、ブロック４５２６は、そのようなスヌープを用いてブロック４１２６または４２２６を実行する。（例えば、スヌープコントローラ３９２５のスヌープジェネレータを介して）インターコネクト３９２０は、キャッシュラインを格納している可能性があるコヒーレントキャッシュ（換言すれば、ヒットがあるか否かを決定する必要があるコヒーレントキャッシュ）にそのようなスヌープを発行するように実装される（ブロック４６２６）。そのようなスヌープが発行されるキャッシュ（例えば、第１のエージェントのＬ１キャッシュ、Ｌ２キャッシュ、および／またはＬ３キャッシュスライス、ならびに第２のエージェントのＬ１キャッシュ、Ｌ２キャッシュ、およびＬ３キャッシュスライス）のキャッシュラインについてヒットがあった場合（ブロック４６４０）、そのキャッシュは、スヌープに応答する（４６４４）。一部の実施形態では、キャッシュは、従来技術のキャッシュが通常応答するように、実装されたキャッシュコヒーレンシプロトコルに従って、そのようなスヌープに応答するように実装される。一部の実施形態では新しいタイプのスヌープが使用されるが、他の実施形態では、従来技術のスヌープ（例えば、ＲＦＯオペレーション）が使用され、その場合、既存のプロセッサ設計にキャッシュラインゼロ化命令を組み込むことは、依存するキャッシュになんら修正を必要としない、またはわずかな修正しか必要としない（上記の「すべてゼロを示すようにキャッシュラインを構成するようにキャッシュをトリガする」と題するセクションを参照）。スヌープが発行されたキャッシュのキャッシュラインについてヒットがない場合（４６４０）、キャッシュは、１つの実施形態では、何もしない（制御はブロック４６５２に進む）。
【０３６４】
ライトアップデートスヌープを発行した後、（例えば、スヌープコントローラ３９２５のスヌープレスポンダ３９２７を介して）インターコネクト３９２０は、あらゆるそれぞれの応答メッセージの受信を追跡するように実施される（例えば、１つの実施形態では、スヌープジェネレータ３９２６は、スヌープレスポンダ３９２７に、スヌープレスポンダ３９２７があらゆるそれぞれの応答メッセージの受信を追跡するための情報を示す）。応答メッセージがデータ（例えば、修正されたキャッシュラインからのデータ）と共に受信された場合（ブロック４６６０）、インターコネクト３９２０は、（例えば、スヌープコントローラ３９２５のスヌープレスポンダ３９２７を介して）発行エージェントまたは発行エージェントのいずれのキャッシュにもデータを送信しないように実装される（ブロック４６６２）。データを伴う応答メッセージが受信されない場合（４６６０）、インターコネクト３９２０は、（例えば、スヌープコントローラ３９２５のスヌープレスポンダ３９２７を介して）必要がないため、ダウンストリームメモリからのデータを読み出さないように実装される（ブロック４６６４）。
【０３６５】
図４１の実施形態が実施されているか図４２の実施形態が実施されているかに応じて、制御はブロック４６６２および４６６４からブロック４１３２または４２３２のいずれかに進む（ブロック４１２８および４２２８はそのようなスヌープが使用される場合は実施されない）。ブロック４１３２または４２３２において、第１のエージェント（例えば、実行ユニット（例えば、メモリアクセスユニット（単数または複数）１６４、ロードストアユニット３４０）を介して）単独（ブロック４２３２のみ）、（例えば、スヌープコントローラＱＯ２５を介して）インターコネクト３９２０、またはインターコネクト３９２０からのメッセージに応答して（例えば、実行ユニット（例えば、メモリアクセスユニット（単数または複数）１６４、ロードストアユニット３４０）または他のハードウェア構造を介して）第１のエージェントは、キャッシュ（例えば、Ｌ１キャッシュ、Ｌ２キャッシュ、Ｌ３キャッシュ）のうちの１つにおけるキャッシュラインをすべてゼロを示すように構成させる（異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる）、またはアドレスにおいてダウンストリームメモリへキャッシュラインサイズのゼロを書き込ませる。ブロック４６６２が実行されない（データが第１のエージェントに返送される）および／またはブロック４６６４が実行されない（ダウンストリームメモリがアクセスされ、データが第１のエージェントに返される）実施形態では、第１のエージェントはデータをゼロ化する。
【０３６６】
上述のように、たとえＲＦＯオペレーションが使用されたとしても、例示された実施形態は、それらがＲＦＯオペレーションをサポートする既存のキャッシュ設計と共に、修正をまったくまたはほとんど伴わずに動作するという点で有利である。
【０３６７】
上述のように、これらのタイプのスヌープは、図４１および図４２の実施形態と併せて使用することができる。例として、図４２からの実施形態のうちの１つにおいてそのようなスヌープを実施する１つの具体的な実施形態が説明される。この具体的な実施形態では、発行エージェント３９００は、（発行エージェント／第１のエージェントのキャッシュをスキップして）直接インターコネクト３９２０にメモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを開始するコマンドを発行し、（例えば、スヌープコントローラ３９２５のスヌープジェネレータ３９２６を介して）インターコネクト３９２０は、上述したようにキャッシュラインを格納している可能性があるコヒーレントキャッシュにスヌープを発行するように実施され、応答メッセージがデータ（すなわち、修正されたキャッシュラインからのデータ）と共に受信された場合、インターコネクト３９２０は、場合により、発行エージェントまたは発行エージェントのいかなるキャッシュにもデータを送信しないように（例えば、スヌープコントローラ３９２５のスヌープレスポンダ３９２７を介して）実装され、データを有する応答メッセージが受信されない場合、（例えば、スヌープコントローラ３９２５のスヌープレスポンダ３９２７を介して）インターコネクト３９２０は、場合により、必要ではないため、ダウンストリームメモリからのデータを読み出さないように実施され、発行エージェント（第１のエージェント）単独、またはインターコネクトからのメッセージに応答して第１のエージェントは、キャッシュ（例えば、Ｌ１キャッシュ、Ｌ２キャッシュ、Ｌ３キャッシュ）のうちの１つにおけるキャッシュラインをすべてゼロを示すように構成させる（異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる）、またはアドレスにおいてダウンストリームメモリへキャッシュラインサイズのゼロを書き込ませる。よって、特定の実施形態では、Ｌ１キャッシュ、Ｌ２キャッシュ、およびＬ３キャッシュ（より具体的には、実装されている場合はＬ３キャッシュスライス）は、上述のようにスヌープに応答するように実装され、インターコネクト３９２０は、上述のように、（例えば、スヌープコントローラ３９２５のスヌープジェネレータ３９２６を介して）コマンドに応答してスヌープを発行し、（例えば、スヌープコントローラ３９２５のスヌープレスポンダ３９２７を介して）キャッシュからの応答メッセージに応答するように実装され、発行エージェントは、直接インターコネクト３９２０にメモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを開始するコマンドを送信するように実装され、発行エージェント（第１のエージェント）単独、またはインターコネクトからのメッセージに応答して第１のエージェントは、キャッシュ（例えば、Ｌ１キャッシュ、Ｌ２キャッシュ、Ｌ３キャッシュ）のうちの１つにおけるキャッシュラインをすべてゼロを示すように構成させる（異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる）、またはアドレスにおいてダウンストリームメモリへキャッシュラインサイズのゼロを書き込ませる。１つの実施形態では、発行エージェント（第１のエージェント）単独が、キャッシュ（例えば、Ｌ１キャッシュ、Ｌ２キャッシュ、Ｌ３キャッシュ）のうちの１つにおけるキャッシュラインをすべてゼロを示すように構成させる。
【０３６８】
複数のソケット
上述のように、インターコネクト３９２０は、例えば、１）ＣＣＸ内のインターコネクトのみ、２）ＣＣＸ内およびＣＣＸ間のインターコネクト、３）異なるＣＣＸ内の別個のインターコネクト、およびＣＣＸ間のインターコネクト（単数または複数）を表すことができる。本明細書で論じるように、システムは、（それぞれ１つまたは複数のＣＣＸを含む）上記プロセッサのうちの１つまたは複数で実装され得る（以下の「例示的なコンピュータアーキテクチャ」と題するセクションを参照）。そのようなシステムは、機械的接続および電気的接続を提供する１つまたは複数の機械的コンポーネントをそれぞれ有する１つまたは複数のソケット（ＣＰＵソケットまたはＣＰＵスロットとして知られる）を備え得る。複数のソケットを有するシステム（例えば、サーバ）では、ソケットは、１つまたは複数のインターコネクトのセット（ソケット間インターコネクトとも呼ばれる）によって接続される。異なる実施形態は、リング、複数のリング、ポイントツーポイントリンク（例えば、クイックパスインターコネクト（ＱＰＩ）、ウルトラパスインターコネクト（ＵＰＩ）、ハイパートランスポート（ＨＰ）などのポイントツーポイントリンク）、共有バス（単数または複数）などのうちの１つまたは複数を含み、ソケット間インターコネクトのセットを異なるように実装することができる。このソケット間インターコネクトのセットは、実施形態に応じて、インターコネクト３９２０の一部として、または別々のものとして見ることができる。一部の実施形態では、このインターコネクトのセットは、インターコネクト３９２０に関して上述したのと同じ通信（ライトコマンド、スヌープ、応答メッセージなど）をサポートするように実装され、ソケット間インターコネクトを介して送信される場合、これらの通信のそれぞれが、同じフォーマットを有してもよいし異なるフォーマットを有してもよい。他の実施形態では、これらの通信のうちの１つまたは複数（例えば、スヌープタイプおよび／または応答メッセージのうちの１つまたは複数）は、ソケット間で送信されるときに変換される。例えば、一部の実施形態は、単一ソケット内のプロセッサ（単数または複数）内でライトアップデートスヌープを使用することができるが、そのようなスヌープが別のソケットに送信される場合、ライトインバリデートまたはライトバックアンドインバリデートスヌープに変換することができる。そのような実施形態の利点は、新しいゼロ化キャッシュラインを生成するか否かの決定がソケット内のみであることである（従って、他のソケットからの「ゼロ化」または「ゼロ化しない」指示の必要がない）。
【０３６９】
一部の実施形態のまとめ
本発明の１つの実施形態は、第１のコヒーレントエージェントと、第２のコヒーレントエージェントと、およびインターコネクトと、を備えるプロセッサを含み得る。第１のエージェントは、第１のエージェントのキャッシュを介してインターコネクトに結合されている。第２のエージェントは、第２のエージェントのキャッシュを介してインターコネクトに結合されている。第１のエージェントは、実行することにより、メモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを引き起こす命令をデコードして実行する。
第１のエージェントは、第１のエージェントのキャッシュに対して、メモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを開始するためのライトコマンドを発行する。第１のエージェントのキャッシュは、ライトコマンドの受信に応答してキャッシュラインについてヒットがあり、そのキャッシュラインのキャッシュコヒーレンシプロトコル状態が修正状態または排他状態である場合、すべてゼロを示すようにそのキャッシュラインを構成する。第１のエージェントのキャッシュは、ライトコマンドの受信に応答してキャッシュミスがある場合、インターコネクトにライトコマンドを発行する。インターコネクトは、ライトコマンドの受信に応答して、第２のエージェントのキャッシュにスヌープを発行する。インターコネクト、またはインターコネクトからのメッセージに応答する第１のエージェントは、ライトコマンドおよびスヌープがキャッシュラインにゼロの書き込みを実行させなかった場合に、第１のエージェントのキャッシュ内のキャッシュラインをすべてゼロを示すように構成させる。
【０３７０】
加えて、以下が適用され得る。一部の実施形態では、第１のエージェントのキャッシュは、ライトコマンドの受信に応答してキャッシュラインについてヒットがあり、そのキャッシュラインのキャッシュコヒーレンシプロトコル状態が修正状態または排他状態ではない場合、そのキャッシュラインのキャッシュコヒーレンシプロトコル状態を無効状態にし、インターコネクトに向けてライトコマンドを発行する。
【０３７１】
本発明の別の実施形態は、キャッシュラインをゼロ化するための命令をデコードするためのデコーダを備えるプロセッサを含み得る。プロセッサはまた、デコーダに結合され、命令のデコードに応答して、メモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを開始するためのライトコマンドを発行する、実行ユニットを備える。プロセッサはまた、実行ユニットに結合され、ライトコマンドを受信し、ライトコマンドに応答してコヒーレントキャッシュにヒットがあるか否かを判定し、ヒットしたキャッシュラインのキャッシュコヒーレンシプロトコル状態が修正状態または排他状態であるか否かを判定し、キャッシュコヒーレンシプロトコル状態が修正状態または排他状態の場合にすべてゼロを示すようにキャッシュラインを構成し、ライトコマンドの受信に応答してミスがある場合、インターコネクトに向けてライトコマンドを発行する、コヒーレントキャッシュを備える。インターコネクトは、ライトコマンドの受信に応答して、ヒットがあるか否かを判定する必要がある他の複数のコヒーレントキャッシュのそれぞれにスヌープを発行する。インターコネクト、またはインターコネクトからのメッセージに応答する実行ユニットは、ライトコマンドおよびスヌープがキャッシュラインにゼロの書き込みを実行させなかった場合に、コヒーレントキャッシュのうちの１つのキャッシュラインをすべてゼロを示すように構成させる。
【０３７２】
加えて、以下が適用され得る。一部の実施形態では、コヒーレントキャッシュはまた、そのキャッシュラインのキャッシュコヒーレンシプロトコル状態を無効状態にし、ヒットしたキャッシュラインのキャッシュコヒーレンシプロトコル状態が修正状態または排他状態ではない場合にインターコネクトに向けてライトコマンドを発行する。一部の実施形態では、デコーダおよび実行ユニットは第１のコアの一部であり、複数のコヒーレントキャッシュは第２のコアのコヒーレントキャッシュを含む。
【０３７３】
本発明の別の実施形態は、キャッシュラインゼロ化命令の実行に応答してライトコマンドを発行するための第１のコアを備えるプロセッサを含み得る。第１のコアはまた、ライトコマンドを受信し、ライトコマンドに応答してキャッシュにヒットがあるかミスがあるかを判定し、ヒットに応答して、ヒットしたキャッシュラインのキャッシュコヒーレンシプロトコル状態が、他のキャッシュにブロードキャストせずにキャッシュラインを修正する権限をキャッシュに与えるものであるか否かを判定する、結合されたレベル１（Ｌ１）キャッシュを備える。Ｌ１キャッシュはまた、ヒットしたキャッシュラインのキャッシュコヒーレンシプロトコル状態が、他のキャッシュにブロードキャストせずにキャッシュラインを修正する権限をキャッシュに与えるものである場合、ヒットに応答して、すべてゼロを示すようにキャッシュラインを構成する。Ｌ１キャッシュは、ミスに応答してインターコネクトに向けてライトコマンドを発行する。インターコネクトは、第１のコアに結合され、ライトコマンドに応答して、ヒットがあるか否かを判定する必要がある他の複数のキャッシュにスヌープを発行する。第１のコア、インターコネクト、またはインターコネクトからのメッセージに応答する第１のコアは、ライトコマンドおよびスヌープがキャッシュラインにゼロの書き込みを実行させなかった場合に、キャッシュまたは複数の他のキャッシュのうちの１つにおけるキャッシュラインをすべてゼロを示すように構成させる。
【０３７４】
加えて、以下が適用され得る。一部の実施形態では、Ｌ１キャッシュはまた、キャッシュコヒーレンシプロトコル状態を無効状態にし、ヒットに応答して、ヒットしたキャッシュラインのキャッシュコヒーレンシプロトコル状態が他のキャッシュにブロードキャストせずにキャッシュラインを修正する権限をキャッシュに与えるものではない場合に、インターコネクトに向けてライトコマンドを発行する。一部の実施形態では、複数の他のキャッシュのうちのそれぞれが、スヌープに応答して、その他のキャッシュにヒットがあるかミスがあるかを判定し、ヒットに応答して、その他のキャッシュにおけるヒットしたキャッシュラインのキャッシュコヒーレンシプロトコル状態が、他のキャッシュにブロードキャストせずにキャッシュラインを修正する権限をキャッシュに与えるものであるか否かを判定するように実装され得る。複数の他のキャッシュのそれぞれは、そのキャッシュにおいてヒットしたキャッシュラインのキャッシュコヒーレンシプロトコル状態が、他のキャッシュにブロードキャストせずにそのキャッシュにおいてヒットしたキャッシュラインを修正する権限をキャッシュに与えるものである場合、ヒットに応答して、すべてゼロを示すようにそのキャッシュにおけるキャッシュラインを構成し、ゼロ化を示す応答メッセージを発行し、ミスに応答して、またはそのキャッシュにおけるヒットしたキャッシュラインのキャッシュコヒーレンシプロトコル状態が、そのキャッシュにおけるヒットしたキャッシュラインを修正する権限をキャッシュに与えるものではない場合、ヒットに応答して、ゼロ化されていないことを示す応答メッセージを発行する。インターコネクトは、スヌープによって複数の他のキャッシュのうちの１つがすべてゼロを示すように構成されたか否かを判定するために、応答メッセージの受信を追跡する。
【０３７５】
本発明の別の実施形態は、第１のコヒーレントエージェントと、第２のコヒーレントエージェントと、およびインターコネクトと、を備えるプロセッサを含み得る。第１のエージェントは、第１のエージェントのキャッシュを介してインターコネクトに結合されている。第２のエージェントは、第２のエージェントのキャッシュを介してインターコネクトに結合されている。第１のエージェントは、実行することにより、メモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを引き起こす命令をデコードして実行する。第１のエージェントは、インターコネクトに対してコマンドを発行する。インターコネクトは、コマンドの受信に応答して、第１のエージェントのキャッシュおよび第２のエージェントのキャッシュにスヌープを発行する。第１のエージェント、インターコネクト、またはインターコネクトからのメッセージに応答する第１のエージェントは、スヌープがキャッシュラインにゼロの書き込みを実行させなかった場合に、第１のエージェントのキャッシュ内のキャッシュラインをすべてゼロを示すように構成させる。
【０３７６】
本発明の別の実施形態は、キャッシュラインをゼロ化するための命令をデコードするためのデコーダを備えるプロセッサを含み得る。プロセッサはまた、デコーダに結合され、命令のデコードに応答して、コマンドを発行する、実行ユニットを備える。インターコネクトは、コマンドの受信に応答して、ヒットがあるか否かを判定する必要がある複数のコヒーレントキャッシュのそれぞれにスヌープを発行する。実行ユニット単独、インターコネクト、またはインターコネクトからのメッセージに応答する実行ユニットは、スヌープがキャッシュラインにゼロの書き込みを実行させなかった場合に、実行ユニットに結合された複数のコヒーレントキャッシュのうちの１つのキャッシュラインをすべてゼロを示すように構成させる。
【０３７７】
本発明の別の実施形態は、キャッシュラインゼロ化命令の実行に応答してコマンドを発行するための第１のコアを備えるプロセッサを含み得る。プロセッサはまた、共有されるレベル３（Ｌ３）キャッシュに結合されたインターコネクトと、第１のコアのレベル２（Ｌ２）キャッシュと、第１のコアのレベル１（Ｌ１）キャッシュと、を備えて、コマンドに応答して、ヒットがあるか否かを決定しなければならない複数のコヒーレントキャッシュのスヌープを発行する。一部の実施形態では、複数のコヒーレントキャッシュは、第１のコアのＬ１キャッシュと、第１のコアのＬ２キャッシュと、Ｌ３キャッシュと、第２のコアのＬ１キャッシュと、第２のコアのＬ２と、を含む。第１のコア単独、インターコネクト、またはインターコネクトからのメッセージに応答する第１のコアは、第１のコアに結合された複数のコヒーレントキャッシュのうちの１つのキャッシュラインをすべてゼロを示すように構成させる。
【０３７８】
ＰＴＥコアレッシング
プロセッサコアは、一部の例示的な実施形態によるページテーブルコアレッシング機能をサポートすることができ、これにより、複数のより小さいメモリページを単一のより大きい有効メモリページにコアレッシングすることができる。一部の実施形態では、例えば、８つの４ＫＢのメモリページを単一の３２ＫＢのメモリページにコアレッシングさせることができる。他の実施形態では、１６個の４ＫＢのメモリページを単一の６４ＫＢのメモリページにコアレッシングさせることができる。
【０３７９】
現在のコンピュータアーキテクチャは、様々なサイズの仮想メモリページを可能にする。例えば、ｘ８６アーキテクチャは、４ＫＢ、２ＭＢ、および１ＧＢのページを可能にし得る。このようなアーキテクチャを実装するプロセッサは、これらのページサイズのそれぞれに対してトランスレーションルックアサイドバッファ（ＴＬＢ）を提供して、仮想アドレスから物理アドレスへのマッピングを提供することができる。仮想アドレスを物理アドレスに変換しようと試みる場合、プロセッサは、適用可能なＴＬＢのそれぞれを検索して、それらのいずれかが仮想アドレスに対応するエントリを含むか否かを判定することができる。エントリが見つかった場合（すなわち、「ＴＬＢヒット」）、エントリは、それが見つかったＴＬＢから読み出され、仮想アドレスから物理アドレスへの変換が進行する。
【０３８０】
仮想アドレスに対応するエントリがプロセッサ上に存在するＴＬＢのいずれにも見つからない場合（すなわち、「ＴＬＢミス」）、プロセッサは、仮想アドレスに対応するページテーブル内のエントリを見つけようと試みることができる。エントリが見つかると（すなわち、「ページテーブルヒット」）、そのエントリは、ページテーブルから読み出され、適切なＴＬＢに挿入される。次いで、仮想アドレスから物理アドレスへの変換が再試行され、ＴＬＢヒットを得る。
【０３８１】
仮想アドレスに対応するエントリがページテーブルに見つからない場合（すなわち、「ページテーブルミス」）、提供された仮想アドレスに対応する物理アドレスがメモリ内に現在存在しないことを示し得る。この場合、プロセッサは、仮想アドレスに対応するページを他の記憶装置（例えば、ディスク）から特定の物理アドレスにおいてメモリにロードさせることができ、提供された仮想アドレスからこの物理アドレスへのマッピングをページテーブルに挿入することができる。その後、提供された仮想アドレスを変換しようと試みると、ページテーブルヒットとなり、それによって、対応するエントリが適切なＴＬＢに追加される。
【０３８２】
現在の一部のプロセッサアーキテクチャの問題点は、許容ページサイズの粒度が不足していることである。例えば、上で説明したように、一部のプロセッサアーキテクチャは、４ＫＢ、２ＭＢ、および１ＧＢのページを可能にし、ページサイズ間で比較的「粗い」広がりを提供する。
【０３８３】
一部の実施形態によれば、この問題には、複数のより小さいページをコアレッシングして、例えば４ＫＢより大きく２ＭＢより小さい中間のページサイズをもたらすことによって対処することができる。一部の実施形態では、これは、特定の条件下で、例えば８つの４ＫＢのページを、可能な範囲でコアレッシングして単一の３２ＫＢの有効ページを作成することによって達成することができる。一部の実施形態では、８つの４ＫＢのページは３２ＫＢのアドレス境界にアラインされなければならない。
【０３８４】
一部の実施形態では、８つの４ＫＢのページは、（ａ）仮想アドレス空間または（ｂ）物理アドレス空間の一方または両方において連続していなければならない。例えば、一部の実施形態は、仮想アドレスＶＡおよび物理アドレスＰＡのビット１２〜１４が互いに等しいことを要求し得る。すなわち、一部の実施形態では、小さいページのそれぞれについて、ＶＡ［１４：１２］＝＝ＰＡ［１４：１２］の場合に限り、小さいページが大きいページにコアレッシングされる。
【０３８５】
一部の実施形態では、小さいページのそれぞれが同じ許可ビットを有する場合にのみ、小さいページが大きいページにコアレッシングされる。一部の実施形態では、より小さいページがより大きいページにコアレッシングされる場合、オペレーティングシステムは、例えばすべての小さいページのアクセスされたビット／ダーティビットに対して論理ＯＲ演算を実行することによって、より小さいページのそれぞれに対応するアクセスされたビット／ダーティビットを単一の値に組み合わせることができる。一部の実施形態では、より小さいページがより大きいページにコアレッシングされる場合、オペレーティングシステムは、適切な４ＫＢのページのダーティビット／アクセスされたビットのみを設定し、それにより、より大きいページのどの部分がアクセスされた、および／またはダーティであるかを追跡する。
【０３８６】
図４７は、一部の実施形態による、プロセッサに含まれ得るページコアレッシング機能を示すブロック図である。ブロック４７００は、８つのエントリ４７０１〜４７０８を含むページテーブルの一部を表し、それぞれ、４ＫＢのサイズのページに対応する。図４７に示すように、８つのエントリ４７０１〜０８は連続したアドレスを有し、８つのアドレスのビット１２〜１４は連続した値０００、００１、０１０、０１１、１００、１０１、１１０、および１１１をとる。一部の実施形態によれば、図４７に示すように、これらの８つの４ＫＢのページは３２ＫＢの有効ページ４７０９に結合され得る。
【０３８７】
一部の実施形態では、３２ＫＢの有効ページ４７０９は、各ページテーブルエントリ（ＰＴＥ）に追加のビットを含めることによって示され、８個の４ＫＢのページが３２ＫＢの有効ページとして扱われるべきであることを示し得る。一部の実施形態では、３２ＫＢの有効ページ４７０９は、ページテーブルエントリ４７０１〜０８に対応するページディレクトリエントリにおける追加のビットによって示され、８個の４ＫＢのページが３２ＫＢの有効ページとして扱われるべきであることを示し得る。一部の実施形態では、８つの４ＫＢのページのうちの１つにアクセスするたびに、８つの４ＫＢのページの連続してアラインされたアドレスがハードウェアによって検出され、３２ＫＢの有効ページとして扱われ得る。
【０３８８】
複数のより小さいページがより大きい有効ページにコアレッシングするための基準を満たすか否かを検出することは、様々な方法を使用して達成され得る。例えば、図４８は、ページテーブルエントリを単一の有効ページにコアレッシングするための方法を示す流れ図である。ボックス４８０１に示すように、全ＴＬＢ（例えば、すべての４ＫＢ、３２ＫＢ、２ＭＢ、および１ＧＢのＴＬＢ）におけるＴＬＢミスの場合、プロセッサは、ボックス４８０２に示すように、ページディレクトリの階層構造に従ってページテーブルをウォークすることができる（例えば、ｘ８６ページテーブル定義を使用）。適切なページテーブルエントリの位置を判定すると、プロセッサは、複数のページテーブルエントリを含むキャッシュラインを読み出すことができる（ボックス４８０３）。例えば、一部の実施形態では、プロセッサは、キャッシュライン内の８つのページテーブルエントリを読み出すことができる。
【０３８９】
キャッシュライン内の複数のページテーブルエントリを読み出すと、プロセッサは、４８０４に示すように、ページテーブルエントリがコアレッシングの要件を満たすページに対応するか否かをテストすることができる。例えば、プロセッサは、ページのアドレスが仮想メモリおよび／または物理メモリ内で連続しているか否かをテストすることができる。一部の実施形態では、プロセッサは、ページの許可ビットの値が同じであるか否かをさらにテストすることができる。一部の実施形態では、プロセッサは、ページのアドレスが３２ＫＢの境界にアラインされているか否かを判定することができる。
【０３９０】
キャッシュライン内の複数ページテーブルエントリが、単一の結合ページ（例えば、３２ＫＢの有効ページ）へコアレッシングするための基準を満たす場合、ボックス４８０５に示されるように、結合ページに対応するエントリは、適切なＴＬＢ（例えば、３２ＫＢ  ＴＬＢ）に配置されてもよく、単一のエントリに結合されたキャッシュライン内のエントリは無効化される。複数のページテーブルエントリが単一の結合ページにコアレッシングするための基準を満たさない場合、ボックス４８０６に示すように、仮想−物理アドレス変換は、より小さい（例えば、４ＫＢ）ＴＬＢに対応するＴＬＢ内にエントリを割り当てることによって通常通り継続することができる。
【０３９１】
一部の実施形態では、プロセッサは、関連するＴＬＢの内容に基づいて複数のより小さいページをコアレッシングするか否かを判定することができる。例えば、４ＫＢのＴＬＢミスの後、プロセッサは、対応する４ＫＢのページが、ＴＬＢに存在する追加のエントリ（例えば、４ＫＢのページに対応する他の７つのＴＬＢエントリ）とコアレッシングすることができるか否かを検出することができる。提供されたアドレスに対応するエントリを他のものと結合してより大きい有効なページ（例えば、３２ＫＢの有効ページ）を作成することができる場合、結合される既存のＴＬＢエントリは無効化され、より大きい有効ページに対応するエントリが適切なＴＬＢ（例えば、３２ＫＢのページに対応するＴＬＢ）に作成される。一部の実施形態では、結合された有効ページサイズに対応する別個のＴＬＢは使用されず、代わりに、結合ページに対する仮想−物理アドレス変換に関する情報が、より小さいページサイズに対応するＴＬＢに格納される（例えば、４ＫＢのページＴＬＢ）。一部の実施形態では、この情報は、その目的のために予約された追加のビットを使用して、より小さいページサイズに対応するＴＬＢ内に符号化され得る。
【０３９２】
一部の実施形態では、上記の機能は、上記のようにページコアレッシングのために最適化されたアルゴリズムを使用してページを割り当てるオペレーティングシステムと併せて使用され得る。既存のオペレーティングシステムは、例えば、４ＫＢ、２ＭＢ、および／または１ＧＢのページを割り当てるために設計されたアルゴリズムを有する。一部の実施形態と共に使用され得るオペレーティングシステムは、結合ページ（例えば、３２ＫＢの有効ページ）を割り当てるように設計されている追加のアルゴリズムを使用することができる。
【０３９３】
上述のページコアレッシング機能は、特定のサイズの特定の数のページを結合することに限定されず、様々なサイズの異なる数のページをコアレッシングさせるために使用されてもよい。例えば、一部の実施形態は、１６個の４ＫＢのページをコアレッシングして、６４ＫＢの有効結合ページを形成することができる。一部の実施形態は、複数のサイズの有効結合ページ（例えば、３２ＫＢおよび６４ＫＢの結合ページ）をさらにサポートすることができる。一部の実施形態では、複数のサイズのページ（例えば、４ＫＢおよび３２ＫＢのページ）を単一の有効ページ（例えば、６４ＫＢの有効ページ）に結合することができる。
【０３９４】
例示的なコンピュータアーキテクチャ
図４９〜図５２は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、汎用プロセッサ、サーバ用の当技術分野で知られている他のシステム設計および構成。サーバ環境で使用するためのプロセッサまたは処理要素、コプロセッサ（例えば、セキュリティコプロセッサ）ハイスループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（例えば、グラフィックスアクセラレータ、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワークアクセラレータなど）（またはコンピュータビジョンアクセラレータ）、フィールドプログラマブルゲートアレイ、または他の任意のプロセッサまたは処理装置、グラフィック装置、ビデオゲーム装置、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルド装置、および他の様々な電子デバイスも適している。一般に、本明細書で開示されているプロセッサおよび／または他の実行ロジックを組み込むことができる多種多様なシステムまたは電子デバイスが、概ね好適である。
【０３９５】
ここで図４９を参照すると、本発明の１つの実施形態によるシステム４９００のブロック図が示されている。システム４９００は、１つまたは複数のプロセッサ４９１０、４９１５を含み得、これらは、コントローラハブ４９２０に結合される。１つの実施形態では、コントローラハブ４９２０は、グラフィックメモリコントローラハブ（ＧＭＣＨ）４９９０および入出力ハブ（ＩＯＨ）４９５０（別個のチップ上にあり得る）を含み、ＧＭＣＨ  ４９９０は、メモリコントローラおよびグラフィックコントローラを含み、これらにメモリ４９４０およびコプロセッサ４９４５が結合され、ＩＯＨ  ４９５０は、入出力（Ｉ／Ｏ）デバイス４９６０をＧＭＣＨ  ４９９０に結合する。
あるいは、メモリおよびグラフィックコントローラの一方または両方が（本明細書に説明される）プロセッサ内に集積され、メモリ４９４０およびコプロセッサ４９４５は、プロセッサ４９１０と、ＩＯＨ  ４９５０を有する単一のチップのコントローラハブ４９２０とに直接に結合される。
【０３９６】
追加のプロセッサ４９１５の任意の性質が図４９に破線で示されている。各プロセッサ４９１０、４９１５は、本明細書で説明される処理コアのうちの１つまたは複数を含み得、プロセッサ３６００の一部の変形であり得る。
【０３９７】
メモリ４９４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、またはこれら２つの組み合わせであってもよい。少なくとも１つの実施形態では、コントローラハブ４９２０は、フロントサイドバス（ＦＳＢ）などのマルチドロップバス、ＱｕｉｃｋＰａｔｈインターコネクト（ＱＰＩ）などのポイントツーポイントインターフェース、または類似の接続４９９５を介してプロセッサ４９１０、４９１５と通信する。
【０３９８】
１つの実施形態では、コプロセッサ４９４５は、（例えば、汎用プロセッサ、サーバプロセッサもしくはサーバ環境で使用するための処理要素、セキュリティコプロセッサなどのコプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵのコプロセッサ、アクセラレータ（例えば、グラフィックアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニット、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワークアクセラレータ、またはコンピュータビジョンアクセラレータなど）、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサもしくは処理装置を含む）専用プロセッサである。１つの実施形態では、コントローラハブ４９２０は、統合グラフィックアクセラレータを含み得る。
【０３９９】
物理リソース４９１０と物理リソース４９１５との間には、アーキテクチャ、マイクロアーキテクチャ、熱、電力消費の特性などを含む幅広い価値基準に関して様々な違いが存在し得る。
【０４００】
１つの実施形態では、プロセッサ４９１０は、一般なタイプのデータ処理オペレーションを制御する命令を実行する。コプロセッサ命令は、命令中に埋め込まれ得る。プロセッサ４９１０は、取り付けられたコプロセッサ４９４５によって実行されるべきタイプとしてこれらのコプロセッサ命令を認識する。従って、プロセッサ４９１０は、コプロセッサバスまたは他のインターコネクト上でこれらのコプロセッサ命令（またはコプロセッサ命令を表す制御信号）をコプロセッサ４９４５に発行する。コプロセッサ（単数または複数）４９４５は、受信したコプロセッサ命令を受け入れて実行する。
【０４０１】
ここで図５０を参照すると、本発明の一実施形態によるより具体的な例示的な第１のシステム５０００のブロック図が示されている。図５０に示すように、マルチプロセッサシステム５０００はポイントツーポイント相互接続システムであり、ポイントツーポイントインターコネクト５０５０を介して結合される第１のプロセッサ５０７０および第２のプロセッサ５０８０を含む。プロセッサ５０７０および５０８０のそれぞれは、プロセッサ３６００の一部の変形であり得る。本発明の１つの実施形態では、プロセッサ５０７０および５０８０はそれぞれ、プロセッサ４９１０および４９１５であるが、コプロセッサ５０３８は、コプロセッサ４９４５である。別の実施形態では、プロセッサ５０７０および５０８０はそれぞれ、プロセッサ４９１０およびコプロセッサ４９４５である。
【０４０２】
統合メモリコントローラ（ＩＭＣ）ユニット５０７２および５０８２をそれぞれ含むプロセッサ５０７０および５０８０が示されている。プロセッサ５０７０は、そのバスコントローラユニットの一部としてポイントツーポイント（Ｐ−Ｐ）インターフェース５０７６および５０７８も含む。同様に、第２のプロセッサ５０８０は、Ｐ−Ｐインターフェース５０８６および５０８８を含む。プロセッサ５０７０、５０８０は、ポイントツーポイント（Ｐ−Ｐ）インターフェース回路５０７８、５０８８を用いて、Ｐ−Ｐインターフェース５０５０を介して情報を交換し得る。図５０に示すように、ＩＭＣ  ５０７２および５０８２は、プロセッサをそれぞれのメモリ、すなわち、メモリ５０３２およびメモリ５０３４に結合し、それぞれのメモリは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であり得る。
【０４０３】
プロセッサ５０７０、５０８０はそれぞれ、ポイントツーポイントインターフェース回路５０７６、５０９４、５０８６、５０９８を用いて、個々のＰ−Ｐインターフェース５０５２、５０５４を介してチップセット５０９０と情報を交換し得る。チップセット５０９０は、場合により、高性能インターフェース５０９２を介してコプロセッサ５０３８と情報を交換し得る。一実施形態では、コプロセッサ５０３８は、例えば高スループットＭＩＣプロセッサ、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、ＧＰＧＰＵ、組み込みプロセッサなどの専用プロセッサである。
【０４０４】
共有キャッシュ（図示せず）は、どちらかのプロセッサに含まれ得る、または両方のプロセッサの外部にあり得るが、プロセッサが低電力モードにされた場合に、どちらかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得るように、Ｐ−Ｐインターコネクトを介してプロセッサと依然として接続され得る。
【０４０５】
チップセット５０９０は、インターフェース５０９６を介して第１のバス５０１６に結合され得る。１つの実施形態では、第１のバス５０１６は、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）バス、またはＰＣＩ  Ｅｘｐｒｅｓｓバスなそのバス、または別の第３世代Ｉ／Ｏ相互接続バスであり得るが、本発明の範囲はそのように限定されない。
【０４０６】
図５０に示すように、様々なＩ／Ｏデバイス５０１４が、第１のバス５０１６を第２のバス５０２０に結合するバスブリッジ５０１８と共に、第１のバス５０１６に結合され得る。１つの実施形態では、汎用プロセッサ、サーバプロセッサもしくはサーバ環境で使用するための処理要素、セキュリティコプロセッサなどのコプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵのコプロセッサ、アクセラレータ（例えば、グラフィックアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニット、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワークアクセラレータ、またはコンピュータビジョンアクセラレータなど）、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサもしくは処理装置などの、１つまたは複数の追加のプロセッサ（単数または複数）５０１５は、第１のバス５０１６に結合されている。１つの実施形態では、第２のバス５０２０は、低ピンカウント（ＬＰＣ）バスであり得る。１つの実施形態では、例えば、キーボードおよび／またはマウス５０２２、通信デバイス５０２７、ならびに命令／コードおよびデータ５０３０を含み得るディスクドライブもしくは他の大容量ストレージデバイスなどのストレージユニット５０２８を含む、様々なデバイスが第２のバス５０２０に結合され得る。さらに、オーディオＩ／Ｏ  ５０２４が、第２のバス５０２０に結合され得る。他のアーキテクチャが可能であることに留意されたい。例えば、図５０のポイントツーポイントアーキテクチャに代えて、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装してもよい。
【０４０７】
ここで図５１を参照すると、本発明の一実施形態によるより具体的な例示的な第２のシステム５１００のブロック図が示されている。図５０および図５１の同様の要素は、同一の参照符合を有し、図５１の他の態様を不明瞭にするのを避けるために、図５０の特定の態様は、図５１から省略されている。
【０４０８】
図５１は、プロセッサ５０７０、５０８０が統合メモリおよびＩ／Ｏ制御ロジック（「ＣＬ」）５０７２および５０８２をそれぞれ含み得ることを示す。よって、ＣＬ  ５０７２、５０８２は、統合メモリコントローラユニットを含み、Ｉ／Ｏ制御ロジックを含む。図５１は、メモリ５０３２、５０３４のみがＣＬ  ５０７２、５０８２に結合されているのではなく、Ｉ／Ｏデバイス５１１４も制御ロジック５０７２、５０８２に結合されていることを示す。レガシＩ／Ｏデバイス５１１５は、チップセット５０９０に結合される。
【０４０９】
ここで図５２を参照すると、本発明の一実施形態によるＳｏＣ５２００のブロック図が示されている。図３６における類似の要素は、同一の参照符合を有する。また、破線のボックスは、より高度なＳｏＣの任意の特徴である。図５２において、相互接続ユニット（単数または複数）５２０２は、キャッシュユニット３６０４Ａ〜Ｎを含む１つまたは複数のコア３６０２Ａ〜Ｎのセットおよび共有キャッシュユニット３６０６を含むアプリケーションプロセッサ５２１０と、システムエージェントユニット３６１０と、バスコントローラユニット（単数または複数）３６１６と、統合メモリコントローラユニット（単数または複数）３６１４と、統合グラフィックロジック、画像プロセッサ、オーディオプロセッサ、およびビデオプロセッサ、汎用プロセッサ、サーバプロセッサもしくはサーバ環境で使用するための処理要素、セキュリティコプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵのコプロセッサ、アクセラレータ（例えば、グラフィックアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニット、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワークアクセラレータ、またはコンピュータビジョンアクセラレータなど）、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサもしくは処理装置を含み得る１つまたは複数のコプロセッサ５２２０のセットと、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット５２３０と、ダイレクトメモリアクセス（ＤＭＡ）ユニット５２３２と、１つまたは複数の外部ディスプレイに結合するためのディスプレイユニット５２４０と、に結合される。１つの実施形態では、コプロセッサ（単数または複数）５２２０は、例えば、ネットワークプロセッサもしくは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、組み込みプロセッサなどの専用プロセッサを含む。
【０４１０】
本明細書に開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装手法の組み合わせで実装され得る。
本発明の実施形態は、例えば、汎用プロセッサ、サーバプロセッサもしくはサーバ環境で使用するための処理要素、コプロセッサ（例えば、セキュリティコプロセッサ）、高スループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（例えば、グラフィックアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニット、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワーキングアクセラレータ、またはコンピュータビジョンアクセラレータなど）、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサもしくは処理装置を含む少なくとも１つのプロセッサと、ストレージシステム（揮発性および不揮発性メモリ、ならびに／またはストレージ要素を含む）と、少なくとも１つの入力デバイスと、少なくとも１つの出力デバイスと、を備える、プログラマブルシステム上で実行するコンピュータプログラムまたはプログラムコードとして実装され得る。
【０４１１】
図５０に示されるコード５０３０などのプログラムコードは、本明細書で説明される機能を実行して出力情報を生成するために、入力命令に適用され得る。出力情報は、既知の様式で１つまたは複数の出力装置に適用され得る。本出願の目的のために、処理システムは、例えば、デジタルシグナルプロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【０４１２】
プログラムコードは、高水準手続き型プログラミング言語またはオブジェクト指向プログラミング言語で実装されて、処理システムと通信し得る。所望であれば、プログラムコードは、アセンブリ言語または機械語でも実装され得る。実際には、本明細書で説明されるメカニズムは、範囲においていずれの特定のプログラミング言語にも限定されない。いずれの場合においても、言語は、コンパイル型言語またはインタープリタ型言語であってもよい。
【０４１３】
少なくとも１つの実施形態の１つまたは複数の態様は、プロセッサ内の様々なロジックを表す、機械可読媒体上に格納された表現する命令により実装され得、命令は、機械により読み出されると、その機械に本明細書で説明される技法を実行するためのロジックを生成させる。「ＩＰコア」として知られるそのような表現は、有形の機械可読媒体上に格納され、様々な顧客または製造設備に供給され、ロジックまたはプロセッサを実際に作成する製造機械にロードされ得る。
【０４１４】
そのような機械可読記憶媒体としては、ハードディスクなどのストレージ媒体、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、コンパクトディスクリライタブル（ＣＤ−ＲＷ）、および光磁気ディスクを含む任意の他のタイプのディスク、読み出し専用メモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブル読み出し専用メモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブル読み出し専用メモリ（ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）などの半導体デバイス、磁気もしくは光カード、または電子命令を格納するのに好適な任意の他のタイプの媒体を含む、機械またはデバイスにより製造または形成される、非一時的で有形な構成の物品を挙げることができるが、これらに限定されない。
【０４１５】
従って、本発明の実施形態は、命令を含む、または本明細書で説明される構造、回路、装置、プロセッサ、および／またはシステム機能を定義するハードウェア記述言語（ＨＤＬ）などの設計データを含む、非一時的で有形の機械可読媒体も含む。そのような実施形態は、プログラム製品とも呼ばれ得る。
【０４１６】
本発明の実施形態によるプロセッサコアによって実行される命令は、以下に詳述する「汎用ベクトルフレンドリ命令フォーマット」で実施され得る。他の実施形態では、そのようなフォーマットは利用されず、別の命令フォーマットが使用されるが、書き込みマスクレジスタ、様々なデータ変換（スウィズル、ブロードキャストなど）、アドレッシングなどの以下の説明は、一般に上記の命令（単数または複数）の実施形態の説明に適用され得る。加えて、例示的なシステム、アーキテクチャ、およびパイプラインを以下に詳述する。命令は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行することができるが、詳述されるものに限定されない。
【０４１７】
命令セット
命令セットは、１つまたは複数の命令フォーマットを含み得る。特定の命令フォーマットは、とりわけ、実行されるオペレーション（例えば、オペコード）ならびにその演算が実行されるオペランド（単数または複数）および／または他のデータフィールド（単数または複数）（例えば、マスク）を指定するための様々なフィールド（例えば、ビット数、ビット位置）を定義し得る。一部の命令フォーマットは、命令テンプレート（またはサブフォーマット）の定義を通して、さらに細分化されている。例えば、特定の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義されてもよく（含まれるフィールドは、典型的には、同一順序であるが、少なくとも一部は、含まれるフィールドの数がより少ないために、異なるビット位置を有する）、および／または、異なって解釈される特定のフィールドを有するように定義されてもよい。よって、ＩＳＡの各命令は、特定の命令フォーマットを使用して（また、定義される場合には、その命令フォーマットの命令テンプレートのうちの特定の１つにおいて）表現され、オペレーションおよびオペランドを指定するためのフィールドを含む。例えば、例示的なＡＤＤ命令は、特定のオペコードならびにそのオペコードを指定するためのオペコードフィールドおよびオペランド（ソース１／デスティネーションおよびソース２）を選択するためのオペランドフィールドを含む命令フォーマットを有し、命令ストリーム内にこのＡＤＤ命令が発生すると、特定のオペランドを選択するオペランドフィールド内に特定の内容を有することになる。アドバンストベクトル拡張（ＡＶＸ、ＡＶＸ２、およびＡＶＸ−５１２）と称され、ベクトル拡張（ＶＥＸ）コーディングスキームを使用する、ＳＩＭＤ拡張のセットが、リリースおよび／または公開されている（例えば、２０１４年９月のインテル（登録商標）６４  ａｎｄ  ＩＡ−３２  Ａｒｃｈｉｔｅｃｔｕｒｅｓ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ'ｓ  Ｍａｎｕａｌ、２０１４年１０月のインテル（登録商標）Ａｄｖａｎｃｅｄ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｒｅｆｅｒｅｎｃｅ、ならびに２０１６年１０月のインテル（登録商標）Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｅｘｔｅｎｓｉｏｎｓ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｒｅｆｅｒｅｎｃｅを参照）。
【０４１８】
例示的な命令フォーマット
本明細書で説明される命令（単数または複数）の実施形態は、異なるフォーマットで実施され得る。加えて、例示的なシステム、アーキテクチャ、およびパイプラインを以下に詳述する。命令（単数または複数）の実施形態は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行することができるが、詳述されるものに限定されない。
【０４１９】
汎用ベクトルフレンドリ命令フォーマット
ベクトルフレンドリ命令フォーマットは、ベクトル命令に適した命令フォーマットである（例えば、ベクトル演算に特有の特定のフィールドが存在する）。ベクトルフレンドリ命令フォーマットを介してベクトル演算とスカラ演算との双方がサポートされる実施形態を説明するが、代替的な実施形態はベクトルフレンドリ命令フォーマットを介してベクトル演算のみを使用する。
【０４２０】
図５３Ａ〜図５３Ｂは、本発明の実施形態によるジェネリックベクトルフレンドリ命令フォーマットおよびその命令テンプレートを示すブロック図である。図５３Ａは、本発明の実施形態によるジェネリックベクトルフレンドリ命令フォーマットおよびそのクラスＡ命令テンプレートを示すブロック図であり、図５３Ｂは、本発明の実施形態によるジェネリックベクトルフレンドリ命令フォーマットおよびそのクラスＢ命令テンプレートを示すブロック図である。
具体的には、汎用ベクトルフレンドリ命令フォーマット５３００に対し、クラスＡ命令テンプレートおよびクラスＢ命令テンプレートが定義され、クラスＡ命令テンプレートおよびクラスＢ命令テンプレートは両方とも、メモリアクセスなし５３０５命令テンプレートおよびメモリアクセス５３２０命令テンプレートを含む。ベクトルフレンドリ命令フォーマットの文脈における汎用（ｇｅｎｅｒｉｃ）いう用語は、いかなる具体的な命令セットにも関連付けられない命令フォーマットを指す。
【０４２１】
以下に説明する本発明の実施形態において、ベクトルフレンドリ命令フォーマットがサポートするのは、３２ビット（４バイト）もしくは６４ビット（８バイト）のデータ要素幅（すなわちサイズ）を有する６４バイトのベクトルオペランド長（すなわちサイズ）（従って、６４バイトのベクトルは１６個の２倍長ワードサイズの要素もしくは８個の４倍長ワードサイズの要素で構成される）と、１６ビット（２バイト）もしくは８ビット（１バイト）のデータ要素幅（すなわちサイズ）を有する６４バイトのベクトルオペランド長（すなわちサイズ）と、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）もしくは８ビット（１バイト）のデータ要素幅（すなわちサイズ）を有する３２バイトのベクトルオペランド長（すなわちサイズ）と、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）もしくは８ビット（１バイト）のデータ要素幅（すなわちサイズ）を有する１６バイトのベクトルオペランド長（すなわちサイズ）と、であるが、代替的な実施形態が、より大きい、小さい、あるいは異なるデータ要素幅（例えば、１２８ビット（１６バイト）データ要素幅）を有した、より大きい、小さい、かつ／または異なるベクトルオペランドサイズ（例えば、２５６バイトのベクトルオペランド）をサポートしてもよい。
【０４２２】
図５３ＡのクラスＡ命令テンプレートは、１）メモリアクセスなし５３０５命令テンプレート内に示された、メモリアクセスなし全丸め制御型オペレーション５３１０命令テンプレートおよびメモリアクセスなしデータ変換型オペレーション５３１５命令テンプレートと、２）メモリアクセス５３２０命令テンプレート内に示された、メモリアクセス一時５３２５命令テンプレートおよびメモリアクセス非一時５３３０命令テンプレートと、を含んでいる。図５３ＢのクラスＢ命令テンプレートは、１）メモリアクセスなし５３０５命令テンプレート内に示された、メモリアクセスなし書き込みマスク制御部分丸め制御型オペレーション５３１２命令テンプレートおよびメモリアクセスなし書き込みマスク制御ｖサイズ（ｖｓｉｚｅ）型オペレーション５３１７命令テンプレートと、２）メモリアクセス５３２０命令テンプレート内に示された、メモリアクセス書き込みマスク制御５３２７命令テンプレートと、を含んでいる。
【０４２３】
汎用ベクトルフレンドリ命令フォーマット５３００は、図５３Ａ〜図５３Ｂに示す順序で以下に挙げるフィールドを含む。
【０４２４】
フォーマットフィールド５３４０−このフィールド内の具体的な値（命令フォーマット識別子の値）は、ベクトルフレンドリ命令フォーマット、ひいては、命令ストリーム内でのベクトルフレンドリ命令フォーマットの命令の出現を一意に識別する。そのため、このフィールドは、汎用ベクトルフレンドリ命令フォーマットのみを有する命令セットには不要であるという意味において任意である。
【０４２５】
ベースオペレーションフィールド５３４２−その内容が、異なるベースオペレーションを識別する。
【０４２６】
レジスタインデックスフィールド５３４４−その内容が、直接またはアドレス生成を介して、レジスタ内であってもメモリ内であってもソースオペランドおよびデスティネーションオペランドの場所を指定する。これらは、Ｐ×Ｑ（例えば、３２×５１２、１６×１２８、３２×１０２４、６４×１０２４）レジスタファイルからＮ個のレジスタを選択するための十分なビット数を含む。１つの実施形態において、Ｎは最大３つのソースレジスタおよび１つのデスティネーションレジスタであり得るが、代替的な実施形態は、それより多いまたは少ないソースレジスタおよびデスティネーションレジスタをサポートし得る（例えば、最大２つのソースをサポートし、これらのソースのうちの１つがデスティネーションとしても動作してもよいし、最大３つのソースをサポートし、これらのソースのうちの１つがデスティネーションとしても動作してもよいし、最大２つのソースおよび１つのデスティネーションをサポートしてもよい）。
【０４２７】
修飾子フィールド５３４６−その内容が、汎用ベクトル命令フォーマットにおける、メモリアクセスを指定する命令の出現を、メモリアクセスを指定しないものから識別する、すなわち、メモリアクセスなし５３０５命令テンプレートとメモリアクセス５３２０命令テンプレートとを識別する。メモリアクセスオペレーションはメモリ階層に対し、読み出しおよび／または書き込みを行う（場合によっては、レジスタ内の値を使用してソースアドレスおよび／またはデスティネーションアドレスを指定する）が、メモリアクセスなしオペレーションはそれを行わない（例えば、ソースおよびデスティネーションはレジスタである）。１つの実施形態では、このフィールドはまた、メモリアドレス計算を実行するための３つの異なる方法の中で選択をする一方で、代替的な実施形態は、メモリアドレス計算を実行するためのより多い、より少ないまたは異なる方法をサポートしてもよい。
【０４２８】
拡張オペレーションフィールド５３５０−その内容が、ベース演算に加え、様々な異なるオペレーションのうちどれが実行されるべきかを識別する。このフィールドは、コンテキスト固有である。本発明の１つの実施形態において、このフィールドは、クラスフィールド５３６８、アルファフィールド５３５２およびベータフィールド５３５４に分割される。拡張オペレーションフィールド５３５０は、２つ、３つ、または４つの命令ではなく、単一の命令において共通のオペレーショングループが実行されることを可能にする。
【０４２９】
スケールフィールド５３６０−その内容が、メモリアドレス生成（例えば、２スケール＊インデックス＋ベースを使用するアドレス生成について）のためのインデックスフィールドの内容のスケーリングを可能にする。
【０４３０】
変位フィールド５３６２Ａ−その内容が、メモリアドレス生成（例えば、２スケール＊インデックス＋ベース＋変位を使用するアドレス生成について）の一部として使用される。
【０４３１】
変位係数フィールド５３６２Ｂ（変位係数フィールド５３６２Ｂ上に直接、変位フィールド５３６２Ａが並置されていることで、一方または他方が使用されることを示すことに留意されたい）−その内容が、アドレス生成の一部として使用され、メモリアクセスのサイズ（Ｎ）によってスケーリングされるべき変位係数を指定し、Ｎは、メモリアクセス（例えば、２スケール＊インデックス＋ベース＋スケールされた変位を使用するアドレス生成について）におけるバイト数である。冗長下位ビットは無視され、従って、変位係数フィールドの内容は、有効アドレスの計算に使用される最終的な変位を生成するために、メモリオペランドの合計サイズ（Ｎ）によって乗算される。Ｎの値は、フルオペコードフィールド５３７４（本明細書で後述）およびデータ操作フィールド５３５４Ｃに基づいて、ランタイムでプロセッサハードウェアによって判定される。変位フィールド５３６２Ａおよび変位係数フィールド５３６２Ｂは、それらがメモリアクセスなし５３０５命令テンプレートには使用されない、および／または、異なる実施形態がそれら２つのうちの一方のみを実装してよい、またはいずれも実装しなくてよいという意味において任意である。
【０４３２】
データ要素幅フィールド５３６４−その内容が、（一部の実施形態では、すべての命令に対し、他の実施形態では、命令の一部のみに対し）複数のデータ要素幅のうちどれが使用されるべきかを識別する。１つのデータ要素幅のみがサポートされる、および／または、オペコードのいくつかの態様を使用して複数のデータ要素幅がサポートされる場合、このフィールドは不要であるという意味において、このフィールドは任意である。
【０４３３】
書き込みマスクフィールド５３７０−その内容が、データ要素位置単位で、デスティネーションベクトルオペランド内のそのデータ要素位置が、ベースオペレーションおよび拡張オペレーションの結果を反映するか否かを制御する。クラスＡ命令テンプレートは、マージ−書き込みマスクをサポートする一方で、クラスＢ命令テンプレートは、マージ−書き込みマスクおよびゼロ化−書き込みマスクの両方をサポートする。マージの場合、ベクトルマスクは、（ベースオペレーションおよび拡張オペレーションによって指定される）任意のオペレーションの実行中、デスティネーション内のあらゆる要素セットが更新されないように保護されることを可能にし、他の１つの実施形態では、対応するマスクビットが０を有する場合、デスティネーションの各要素の古い値が保持される。これとは対照的に、ゼロ化の場合、ベクトルマスクは、（ベースオペレーションおよび拡張オペレーションによって指定される）任意のオペレーションの実行中、デスティネーション内のあらゆる要素セットがゼロ化されることを可能にし、１つの実施形態では、対応するマスクビットが０値を有する場合、デスティネーションの要素は０に設定される。この機能のサブセットは、実行されるオペレーションのベクトル長（すなわち、要素のスパンが第１のものから最後のものへと修正される）を制御できるが、修正される要素が連続的である必要はない。よって、書き込みマスクフィールド５３７０は、ロード、ストア、算術、論理等を含む部分的なベクトル演算を可能にする。書き込みマスクフィールド５３７０の内容が、複数の書き込みマスクレジスタのうち使用されるべき書き込みマスクを含むものを選択（従って、書き込みマスクフィールド５３７０の内容は、実行されるべきマスキングを間接的に識別する）する、本発明の実施形態が説明されているが、代替的な実施形態は、代替的または追加的に、マスク書き込みフィールド５３７０の内容が、実行されるべきマスキングを直接指定することを可能にする。
【０４３４】
即値フィールド５３７２−その内容が、即値の指定を可能にする。このフィールドは即値をサポートしない汎用ベクトルフレンドリフォーマットの実装には存在せず、このフィールドは即値を使用しない命令内には存在しないという意味において、このフィールドは、任意である。
【０４３５】
クラスフィールド５３６８−その内容が、異なるクラスの命令間を識別する。図５３Ａおよび図５３Ｂを参照すると、このフィールドの内容が、クラスＡ命令とクラスＢ命令との間で選択する。図５３Ａおよび図５３Ｂ中、特定値がフィールド内に存在することを示すために、隅が丸められた四角が使用されている（例えば、図５３Ａおよび図５３Ｂ中、クラスフィールド５３６８に対し、それぞれクラスＡ  ５３６８ＡおよびクラスＢ  ５３６８Ｂ）。
【０４３６】
クラスＡの命令テンプレート
クラスＡのメモリアクセスなし５３０５命令テンプレートの場合、アルファフィールド５３５２はＲＳフィールド５３５２Ａとして解釈され、ＲＳフィールド５３５２Ａの内容が、異なる拡張オペレーションタイプのうちどれが実行されるべきか（例えば、丸め５３５２Ａ．１およびデータ変換５３５２Ａ．２がそれぞれ、メモリアクセスなし丸め型オペレーション５３１０命令テンプレートおよびメモリアクセスなしデータ変換型オペレーション５３１５命令テンプレートに対し指定される）を識別する一方で、ベータフィールド５３５４は指定されるタイプのオペレーションのうちどれが実行されるべきかを識別する。メモリアクセスなし５３０５命令テンプレートには、スケールフィールド５３６０、変位フィールド５３６２Ａ、および変位スケールフィールド５３６２Ｂは存在しない。
【０４３７】
メモリアクセスなし命令テンプレート−全丸め制御型オペレーション
メモリアクセスなしの全丸め制御型オペレーション５３１０命令テンプレートでは、ベータフィールド５３５４は、丸め制御フィールド５３５４Ａとして解釈され、丸め制御フィールド５３５４Ａの内容は静的丸めを提供する。説明されている本発明の実施形態では、丸め制御フィールド５３５４Ａは、全浮動小数点例外抑制（ｓｕｐｐｒｅｓｓ  ａｌｌ  ｆｌｏａｔｉｎｇ  ｐｏｉｎｔ  ｅｘｃｅｐｔｉｏｎｓ、ＳＡＥ）フィールド５３５６および丸め演算制御フィールド５３５８を含むが、代替的な実施形態は、これらのコンセプトの両方を同じフィールドに符号化することができる、またはこれらのコンセプト／フィールドのうちの一方もしくは他方のみを有することができる（例えば、丸め演算制御フィールド５３５８のみを有することができる）。
【０４３８】
ＳＡＥフィールド５３５６−その内容は例外イベント報告を無効にするか否かを識別する。ＳＡＥフィールド５３５６の内容が、抑制が有効であることを示す場合、所与の命令は、いかなる種類の浮動小数点例外フラグも報告せず、かついかなる浮動小数点例外ハンドラも起動させない。
【０４３９】
丸め演算制御フィールド５３５８−その内容は、丸め演算のグループのうちのどれ（例えば、切り上げ、切り捨て、ゼロへの丸め、最近接への丸め）を実行するかを識別する。よって、丸め演算制御フィールド５３５８は、命令ごとの丸めモードの変更を可能にする。プロセッサが丸めモードを指定する制御レジスタを含む本発明の１つの実施形態では、丸め演算制御フィールドの５３５０の内容はそのレジスタ値をオーバーライドする。
【０４４０】
メモリアクセスなし命令テンプレート−データ変換型オペレーション
メモリアクセスなしデータ変換型オペレーション５３１５命令テンプレートでは、ベータフィールド５３５４は、データ変換フィールド５３５４Ｂとして解釈され、データ変換フィールド５３５４Ｂの内容は、複数のデータ変換（例えば、データ変換なし、スウィズル（ｓｗｉｚｚｌｅ）、ブロードキャスト）のうちのどれが実行されるべきかを識別する。
【０４４１】
クラスＡのメモリアクセス５３２０命令テンプレートでは、アルファフィールド５３５２は、エビクションヒント（ｅｖｉｃｔｉｏｎ  ｈｉｎｔ）フィールド５３５２Ｂとして解釈され、その内容は、エビクションヒントのうちのどれが使用されるべきかを識別する（図５３Ａでは、一時５３５２Ｂ．１および非一時５３５２Ｂ．２がそれぞれ、メモリアクセス、一時５３２５命令テンプレートおよびメモリアクセス、非一時５３３０命令テンプレートに対して指定される）。一方で、ベータフィールド５３５４は、データ操作フィールド５３５４Ｃとして解釈され、その内容は、複数のデータ操作オペレーション（プリミティブとしても知られる）のうちのどれ（例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、およびデスティネーションのダウンコンバージョン）が実行されるべきかを識別する。メモリアクセス５３２０命令テンプレートは、スケールフィールド５３６０、ならびに場合により、変位フィールド５３６２Ａまたは変位スケールフィールド５３６２Ｂを含む。
【０４４２】
ベクトルメモリ命令は、変換サポートを使用して、メモリからのベクトルロードおよびメモリへのベクトルストアを実行する。通常のベクトル命令と同様に、ベクトルメモリ命令は、データ要素単位の様式でメモリからのデータ／メモリへのデータを転送し、実際に転送される要素は、書き込みマスクとして選択されるベクトルマスクの内容により規定される。
【０４４３】
メモリアクセス命令テンプレート−一時
一時データは、キャッシュすることから恩恵を得るのに十分に速やかに再利用される可能性が高いデータである。しかしながら、これはヒントであり、様々なプロセッサが、そのヒントを完全に無視することを含めて、それを様々な方法で実装することができる。
【０４４４】
メモリアクセス命令テンプレート−非一時
非一時データは、第１のレベルのキャッシュにおいて、キャッシュすることから恩恵を得るのに十分に速やかに再利用される可能性が低いデータであり、エビクションが優先されるべきである。しかしながら、これはヒントであり、様々なプロセッサが、そのヒントを完全に無視することを含めて、それを様々な方法で実装することができる。
【０４４５】
クラスＢの命令テンプレート
クラスＢの命令テンプレートの場合、アルファフィールド５３５２は、書き込みマスク制御（Ｚ）フィールド５３５２Ｃとして解釈され、その内容は、書き込みマスクフィールド５３７０により制御される書き込みマスキングがマージであるべきかまたはゼロ化であるべきかを識別する。
【０４４６】
クラスＢのメモリアクセスなし５３０５命令テンプレートの場合、ベータフィールド５３５４の一部はＲＬフィールド５３５７Ａとして解釈され、その内容は、様々な拡張オペレーション型のうちのどれが実行されるべきかを識別する（例えば、丸め５３５７Ａ．１およびベクトル長（ＶＳＩＺＥ）５３５７Ａ．２がそれぞれ、メモリアクセスなし書き込みマスク制御、部分丸め制御型オペレーション５３１２命令テンプレートおよびメモリアクセスなし書き込みマスク制御、ＶＳＩＺＥ型オペレーション５３１７命令テンプレートに対して指定される）一方で、ベータフィールド５３５４の残りは、指定された型のオペレーションのうちのどれが実行されるべきかを識別する。メモリアクセスなし５３０５命令テンプレートには、スケールフィールド５３６０、変位フィールド５３６２Ａ、および変位スケールフィールド５３６２Ｂは存在しない。
【０４４７】
メモリアクセスなし書き込みマスク制御、部分丸め制御型オペレーション５３１０命令テンプレートでは、残りのベータフィールド５３５４は、丸め演算フィールド５３５９Ａとして解釈され、例外イベント報告が無効化される（所与の命令がいかなる種類の浮動小数点例外フラグも報告せず、かついかなる浮動小数点例外ハンドラも起動させない）。
【０４４８】
丸め演算制御フィールド５３５９Ａ−丸め演算制御フィールド５３５８と同様に、その内容は、丸め演算のグループのうちのどれ（例えば、切り上げ、切り捨て、ゼロへの丸め、最近接への丸め）を実行するかを識別する。よって、丸め演算制御フィールド５３５９Ａは、命令ごとの丸めモードの変更を可能にする。プロセッサが丸めモードを指定する制御レジスタを含む本発明の１つの実施形態では、丸め演算制御フィールドの５３５０の内容はそのレジスタ値をオーバーライドする。
【０４４９】
メモリアクセスなし書き込みマスク制御、ＶＳＩＺＥ型オペレーション５３１７命令テンプレートでは、残りのベータフィールド５３５４は、ベクトル長フィールド５３５９Ｂとして解釈され、その内容は、複数のデータベクトル長のうちのどれ（例えば、１２８、２５６、または５１２バイト）が実行されるべきかを識別する。
【０４５０】
クラスＢのメモリアクセス５３２０命令テンプレートの場合、ベータフィールド５３５４の一部は、ブロードキャストフィールド５３５７Ｂとして解釈され、その内容は、ブロードキャスト型データ操作オペレーションが実行されるべきか否かを識別するが、残りのベータフィールド５３５４は、ベクトル長フィールド５３５９Ｂとして解釈される。メモリアクセス５３２０命令テンプレートは、スケールフィールド５３６０、ならびに場合により、変位フィールド５３６２Ａまたは変位スケールフィールド５３６２Ｂを含む。
【０４５１】
汎用ベクトルフレンドリ命令フォーマット５３００に関連して、フォーマットフィールド５３４０、基本オペレーションフィールド５３４２、およびデータ要素幅フィールド５３６４を含むフルオペコードフィールド５３７４が示される。フルオペコードフィールド５３７４がこれらのフィールドのすべてを含む１つの実施形態が示されているが、それらのすべてをサポートしない実施形態では、フルオペコードフィールド５３７４は、これらのフィールドのうち、すべてより少ないフィールドを含む。フルオペコードフィールド５３７４はオペレーションコード（オペコード）を提供する。
【０４５２】
拡張オペレーションフィールド５３５０、データ要素幅フィールド５３６４、および書き込みマスクフィールド５３７０は、汎用ベクトルフレンドリ命令フォーマットにおいてこれらの機能が命令ごとに指定されることを可能にする。
【０４５３】
書き込みマスクフィールドとデータ要素幅フィールドとの組み合わせは、それらが様々なデータ要素幅に基づいてマスクが適用されることを可能にするという点で、型付き命令を生成する。
【０４５４】
クラスＡおよびクラスＢ内に見られる様々な命令テンプレートは様々な状況で有益である。本発明の一部の実施形態では、様々なプロセッサまたはプロセッサ内の様々なコアは、クラスＡのみ、クラスＢのみ、または両方のクラスをサポートすることができる。例えば、汎用計算向けの高性能汎用アウトオブオーダコアは、クラスＢのみをサポートすることができ、主にグラフィックおよび／または科学技術計算（スループット）計算向けのコアはクラスＡのみをサポートすることができ、両方向けのコアは両方をサポートすることができる（当然のことながら、両方のクラスからのテンプレートおよび命令の一部の混合を有しているが、両方のクラスからのすべてのテンプレートおよび命令を有するわけではないコアは、本発明の範囲内である）。また、単一のプロセッサは複数のコアを含むことができ、コアのすべては同じクラスをサポートする、または、異なるコアは異なるクラスをサポートする。例えば、別個のグラフィックコアおよび汎用コアを有するプロセッサにおいて、主にグラフィックおよび／または科学技術計算向けのグラフィックコアのうちの１つは、クラスＡのみをサポートすることができるが、汎用コアのうちの１つまたは複数は、クラスＢのみをサポートする汎用計算向けの、アウトオブオーダ実行およびレジスタリネーミングを有する高性能汎用コアとすることができる。別個のグラフィックスコアを持たない別のプロセッサは、クラスＡおよびクラスＢの両方をサポートするもう１つの汎用インオーダまたはアウトオブオーダコアを含むことができる。当然のことながら、１つのクラスからの機能はまた、本発明の様々な実施形態において、他のクラスに実装され得る。高級言語で記述されるプログラムは、１）実行のために対象プロセッサによってサポートされるクラス（単数または複数）の命令のみを有する形式、または２）全クラスの命令の様々な組み合わせを使用して記述される代替的なルーチンを有し、コードを現在実行しているプロセッサによってサポートされる命令に基づいて実行するためにルーチンを選択する制御フローコードを有する形式を含む、様々な異なる実行可能な形式にされる（例えば、ジャストインタイムでコンパイルされるまたは静的にコンパイルされる）。
【０４５５】
例示的な具体的なベクトルフレンドリ命令フォーマット
図５４Ａは、本発明の実施形態による例示的な具体的なベクトルフレンドリ命令フォーマットを示すブロック図である。図５４Ａは、フィールドの場所、サイズ、解釈、および順序、ならびにそれらのフィールドのうちの一部の値を指定するという意味で具体的である具体的なベクトルフレンドリ命令フォーマット５４００を示す。具体的なベクトルフレンドリ命令フォーマット５４００は、ｘ８６命令セットを拡張するのに使用することができ、従って、フィールドの一部は、既存のｘ８６命令セットおよびそれらの拡張（例えば、ＡＶＸ）に使用されるものと同様または同じである。このフォーマットは、拡張を有する既存のｘ８６命令セットのプレフィックス符号化フィールド、リアルオペコードバイトフィールド、ＭＯＤ  Ｒ／Ｍフィールド、ＳＩＢフィールド、変位フィールド、および即値フィールドとの一貫性を維持する。図５４Ａのフィールドが対応付ける図５３Ａ〜図５３Ｂのフィールドが示されている。
【０４５６】
本発明の実施形態が、例示的な目的で汎用ベクトルフレンドリ命令フォーマット５３００の文脈で、具体的なベクトルフレンドリ命令フォーマット５４００に関連して説明されているが、本発明は、特許請求の範囲を除き、具体的なベクトルフレンドリ命令フォーマット５４００に限定されるものではないことを理解されたい。例えば、汎用ベクトルフレンドリ命令フォーマット５３００は、様々なフィールドについて様々な可能なサイズを意図しているが、具体的なベクトルフレンドリ命令フォーマット５４００は特定のサイズのフィールドを有するものとして示されている。具体的な例として、データ要素幅フィールド５３６４は具体的なベクトルフレンドリ命令フォーマット５４００で１ビットフィールドとして示されるが、本発明はそのように限定されるものではない（つまり、汎用ベクトルフレンドリ命令フォーマット５３００はデータ要素幅フィールド５３６４の他のサイズを企図している）。
【０４５７】
汎用ベクトルフレンドリ命令フォーマット５３００は、図５４Ａに示す順序で以下に挙げるフィールドを含む。
【０４５８】
ＥＶＥＸプレフィックス（バイト０〜３）５４０２−４バイトの形式で符号化される。
【０４５９】
フォーマットフィールド５３４０（ＥＶＥＸバイト０、ビット［７：０］）−  第１のバイト（ＥＶＥＸバイト０）はフォーマットフィールド５３４０であり、０ｘ６２（本発明の１つの実施形態では、ベクトルフレンドリ命令フォーマットを識別するために使用される固有の値）を保持する。
【０４６０】
第２〜第４のバイト（ＥＶＥＸバイト１〜３）は、特定の機能を提供する複数のビットフィールドを含む。
【０４６１】
ＲＥＸフィールド５４０５（ＥＶＥＸバイト１、ビット［７〜５］）−ＥＶＥＸ．Ｒビットフィールド（ＥＶＥＸバイト１、ビット［７］−Ｒ）、ＥＶＥＸ．Ｘビットフィールド（ＥＶＥＸバイト１、ビット［６］−Ｘ）、および５３５７ＢＥＸバイト１、ビット［５］−Ｂ）から構成される。ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、およびＥＶＥＸ．Ｂビットフィールドは、対応するＶＥＸビットフィールドと同じ機能を提供し、１の補数の形式を使用して符号化される、すなわち、ＺＭＭ０が１１１１Ｂと符号化され、ＺＭＭ１５が００００Ｂと符号化される。命令の他のフィールドは、当技術分野では知られているように、レジスタインデックスの下位３ビット（ｒｒｒ、ｘｘｘ、ｂｂｂ）を符号化し、これにより、Ｒｒｒｒ、Ｘｘｘｘ、およびＢｂｂｂが、ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、およびＥＶＥＸ．Ｂを加算することによって形成され得る。
【０４６２】
ＲＥＸ'フィールド５３１０−これは、ＲＥＸ'フィールド５３１０の第１の部分であり、拡張３２レジスタセットの上位１６または下位１６のいずれかを符号化するのに使用されるＥＶＥＸ．Ｒ'ビットフィールド（ＥＶＥＸバイト１、ビット［４］−Ｒ'）である。本発明の１つの実施形態では、このビットは、以下に示されるように他のものと共に、ＢＯＵＮＤ命令から（周知のｘ８６の３２ビットモードで）区別するために、ビット反転形式で格納され、そのリアルオペコードバイトは、６２であるが、（以下に説明される）ＭＯＤ  Ｒ／ＭフィールドにおいてＭＯＤフィールドにおける１１の値を受け入れず、本発明の代替的な実施形態は、これおよび以下に示される他のビットを反転形式で格納しない。１の値は下位１６のレジスタを符号化するのに使用される。換言すれば、Ｒ'Ｒｒｒｒは、ＥＶＥＸ．Ｒ'、ＥＶＥＸ．Ｒ、および他のフィールドからの他のＲＲＲを組み合わせて形成される。
【０４６３】
オペコードマップフィールド５４１５（ＥＶＥＸバイト１、ビット［３：０］−ｍｍｍｍ）−その内容は、黙示される先頭のオペコードバイト（０Ｆ、０Ｆ  ３８、または０Ｆ  ３）を符号化する。
【０４６４】
データ要素幅フィールド５３６４（ＥＶＥＸバイト２、ビット［７］−Ｗ）−ＥＶＥＸ．Ｗという表記によって表される。ＥＶＥＸ．Ｗは、データ型（３２ビットのデータ要素または６４ビットのデータ要素のいずれか）の粒度（サイズ）を定義するのに使用される。
【０４６５】
ＥＶＥＸ．ｖｖｖｖ  ５４２０（ＥＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）−ＥＶＥＸ．ｖｖｖｖの役割は、１）ＥＶＥＸ．ｖｖｖｖは、反転（１の補数）の形式で指定される第１のソースレジスタオペランドを符号化し、２つ以上のソースオペランドを有する命令に有効であること、２）ＥＶＥＸ．ｖｖｖｖは、特定のベクトルシフトに対して１の補数形式で指定されるデスティネーションレジスタオペランドを符号化すること、または、３）ＥＶＥＸ．ｖｖｖｖはいかなるオペランドも符号化せず、フィールドはリザーブされ、１１１１ｂを保持すべきであること、を含むことができる。よって、ＥＶＥＸ．ｖｖｖｖフィールド５４２０は、反転（１の補数）形式で格納される第１のソースレジスタ指定子の４つの下位ビットを符号化する。命令に応じて、追加の異なるＥＶＥＸビットフィールドが指定子サイズを３２レジスタに拡張するのに使用される。
【０４６６】
ＥＶＥＸ．Ｕ  ５３６８クラスフィールド（ＥＶＥＸバイト２、ビット［２］−Ｕ）−ＥＶＥＸ．Ｕ＝０の場合、クラスＡまたはＥＶＥＸ．Ｕ０を示し、ＥＶＥＸ．Ｕ＝１の場合、クラスＢまたはＥＶＥＸ．Ｕ１を示す。
【０４６７】
プレフィックス符号化フィールド５４２５（ＥＶＥＸバイト２、ビット［１：０］−ｐｐ）−基本オペレーションフィールドに対して追加のビットを提供する。ＥＶＥＸプレフィックスフォーマットでのレガシＳＳＥ命令に対するサポートを提供することに加えて、これは、ＳＩＭＤプレフィックスをコンパクトにするという利点も有する（ＳＩＭＤプレフィックスを表すのに１バイトを必要とするのではなく、ＥＶＥＸプレフィックスは、２ビットのみを必要とする）。１つの実施形態では、レガシフォーマットおよびＥＶＥＸプレフィックスフォーマットの両方でのＳＩＭＤプレフィックス（６６Ｈ、Ｆ２Ｈ、Ｆ３Ｈ）を使用するレガシＳＳＥ命令をサポートするために、これらのレガシＳＩＭＤプレフィックスは、ＳＩＭＤプレフィックス符号化フィールドに符号化され、デコーダのＰＬＡに提供される前にランタイム時にレガシＳＩＭＤプレフィックスに拡張される（それにより、ＰＬＡは、修正せずにこれらのレガシ命令のレガシおよびＥＶＥＸフォーマットの両方を実行することができる）。より新たな命令は、ＥＶＥＸプレフィックス符号化フィールドの内容をオペコード拡張として直接使用することができるが、特定の実施形態は、一貫性のために同様の様式で拡張されるが、これらのレガシＳＩＭＤプレフィックスにより異なる意味が指定されることを可能にする。代替的な実施形態は、２ビットＳＩＭＤプレフィックス符号化をサポートし、従って、拡張を必要としないようにＰＬＡを再設計することができる。
【０４６８】
アルファフィールド５３５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ、また、ＥＶＥＸ．ＥＨ、ＥＶＥＸ．ｒｓ、ＥＶＥＸ．ＲＬ、ＥＶＥＸ．書き込みマスク制御、およびＥＶＥＸ．Ｎとしても知られ、αで示される）−前述のように、このフィールドは、コンテキスト固有である。
【０４６９】
ベータフィールド５３５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ、また、ＥＶＥＸ．ｓ２−０、ＥＶＥＸ．ｒ２−０、ＥＶＥＸ．ｒｒｌ、ＥＶＥＸ．ＬＬ０、ＥＶＥＸ．ＬＬＢとしても知られ、βββで示される）−前述のように、このフィールドはコンテキスト固有である。
【０４７０】
ＲＥＸ'フィールド５３１０−これは、ＲＥＸ'フィールドの残りの部分であり、拡張３２レジスタセットの上位１６または下位１６のいずれかを符号化するのに使用され得るＥＶＥＸ．Ｖビットフィールド（ＥＶＥＸバイト３、ビット［３］−Ｖ）である。このビットはビット反転形式で格納される。１の値は下位１６のレジスタを符号化するのに使用される。換言すれば、Ｖ'ＶＶＶＶは、ＥＶＥＸ．Ｖ'、ＥＶＥＸ．ｖｖｖｖを組み合わせることによって形成される。
【０４７１】
書き込みマスクフィールド５３７０（ＥＶＥＸバイト３、ビット［２：０］−ｋｋｋ）−前述のように、その内容は、書き込みマスクレジスタにおけるレジスタのインデックスを指定する。本発明の１つの実施形態では、特定の値ＥＶＥＸ．ｋｋｋ＝０００は、書き込みマスクが特定の命令に対して使用されないことを示唆する特定の動作を有する（これは、すべて１に配線された書き込みマスクまたはマスクするハードウェアを迂回するハードウェアの使用を含む様々な方式で実装され得る）。
【０４７２】
リアルオペコードフィールド５４３０（バイト４）は、オペコードバイトとしても知られている。オペコードの一部はこのフィールドにおいて指定される。
【０４７３】
ＭＯＤ  Ｒ／Ｍフィールド５４４０（バイト５）は、ＭＯＤフィールド５４４２、Ｒｅｇフィールド５４４４、およびＲ／Ｍフィールド５４４６を含む。上述のように、ＭＯＤフィールド５４４２の内容は、メモリアクセスオペレーションとメモリアクセスなしオペレーションとを区別する。Ｒｅｇフィールド５４４４の役割は、デスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかを符号化すること、または、オペコード拡張として扱われ、いずれの命令オペランドを符号化するのにも使用されないことという２つの状況に要約され得る。Ｒ／Ｍフィールド５４４６の役割は、メモリアドレスを参照する命令オペランドを符号化すること、または、デスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかを符号化することを含むことができる。
【０４７４】
スケール、インデックス、ベース（ＳＩＢ）バイト（バイト６）−上述のように、スケールフィールド５３５０の内容は、メモリアドレス生成に使用される。ＳＩＢ．ｘｘｘ  ５４５４およびＳＩＢ．ｂｂｂ  ５４５６−これらのフィールドの内容は、レジスタインデックスＸｘｘｘおよびＢｂｂｂに関連して以前に言及されている。
【０４７５】
変位フィールド５３６２Ａ（バイト７〜１０）−ＭＯＤフィールド５４４２が１０を保持する場合、バイト７〜１０は変位フィールド５３６２Ａであり、レガシ３２ビット変位（ｄｉｓｐ３２）と同じように機能し、バイト粒度で機能する。
【０４７６】
変位係数フィールド５３６２Ｂ（バイト７）−ＭＯＤフィールド５４４２が０１を保持する場合、バイト７は変位係数フィールド５３６２Ｂである。このフィールドの場所は、バイト粒度で機能するレガシｘ８６命令セット８ビット変位（ｄｉｓｐ８）の場所と同じである。ｄｉｓｐ８は符号拡張されているので、−１２８から１２７バイトのオフセットの間のみでアドレス指定することができる。６４バイトのキャッシュラインに関して、ｄｉｓｐ８は、実際に有用な４つの値、すなわち、−１２８、−６４、０、および６４のみに設定可能な８ビットを使用する。より広い範囲が必要とされることが多いので、ｄｉｓｐ３２が使用される。しかしながら、ｄｉｓｐ３２は、４バイトを必要とする。ｄｉｓｐ８およびｄｉｓｐ３２とは対照的に、変位係数フィールド５３６２Ｂは、ｄｉｓｐ８の再解釈であり、変位係数フィールド５３６２Ｂを使用する場合、実際の変位は、変位係数フィールドの内容にメモリオペランドアクセスのサイズ（Ｎ）を乗算することにより決定される。このタイプの変位は、ｄｉｓｐ８＊Ｎと呼ばれる。これは、平均命令長（変位に使用されるが、はるかに大きい範囲を有する単一のバイト）を低減させる。そのような圧縮された変位は、有効変位がメモリアクセスの粒度の倍数であるという前提に基づくものであり、従って、アドレスオフセットの冗長下位ビットは符号化される必要はない。換言すれば、変位係数フィールド５３６２Ｂは、レガシｘ８６命令セット８ビット変位の代わりとなる。よって、変位係数フィールド５３６２Ｂは、ｄｉｓｐ８がｄｉｓｐ８＊Ｎに多重定義されることを唯一の例外として、ｘ８６命令セット８ビット変位と同じ方式で符号化される（そのため、ＭｏｄＲＭ／ＳＩＢ符号化規則において変更はない）。換言すれば、符号化規則または符号化長に変更はないが、ハードウェアによる変位値の解釈にのみ変更がある（ハードウェアは、バイト単位のアドレスオフセットを得るために、メモリオペランドのサイズにより変位をスケーリングする必要がある）。即値フィールド５３７２は上述のように作用する。
【０４７７】
フルオペコードフィールド
図５４Ｂは、本発明の１つの実施形態による、ｏｐコードフィールド全体５３７４を作り上げる具体的なベクトルフレンドリ命令フォーマット５４００のフィールドを示すブロック図である。具体的には、フルオペコードフィールド５３７４は、フォーマットフィールド５３４０、基本オペレーションフィールド５３４２、およびデータ要素幅（Ｗ）フィールド５３６４を含む。基本オペレーションフィールド５３４２は、プレフィックス符号化フィールド５４２５、オペコードマップフィールド５４１５、およびリアルオペコードフィールド５４３０を含む。
【０４７８】
レジスタインデックスフィールド
図５４Ｃは、本発明の１つの実施形態による、レジスタインデックスフィールド５３４４を作り上げる具体的なベクトルフレンドリ命令フォーマット５４００のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド５３４４は、ＲＥＸフィールド５４０５、ＲＥＸ'フィールド５４１０、ＭＯＤＲ／Ｍ．ｒｅｇフィールド５４４４、ＭＯＤＲ／Ｍ．ｒ／ｍフィールド５４４６、ＶＶＶＶフィールド５４２０、ｘｘｘフィールド５４５４、およびｂｂｂフィールド５４５６を含む。
【０４７９】
拡張オペレーションフィールド
図５４Ｄは、本発明の１つの実施形態による、拡張オペレーションフィールド５３５０を作り上げる具体的なベクトルフレンドリ命令フォーマット５４００のフィールドを示すブロック図である。クラス（Ｕ）フィールド５３６８は、０を含む場合、ＥＶＥＸ．Ｕ０（クラスＡ  ５３６８Ａ）を表し、１を含む場合、ＥＶＥＸ．Ｕ１（クラスＢ  ５３６８Ｂ）を表す。
Ｕ＝０であり、ＭＯＤフィールド５４４２が１１を含む（メモリアクセスなしオペレーションを表す）場合、アルファフィールド５３５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）はｒｓフィールド５３５２Ａとして解釈される。ｒｓフィールド５３５２Ａが１を含む場合（丸め５３５２Ａ．１）、ベータフィールド５３５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、丸め制御フィールド５３５４Ａとして解釈される。丸め制御フィールド５３５４Ａは、１ビットのＳＡＥフィールド５３５６および２ビットの丸め演算フィールド５３５８を含む。ｒｓフィールド５３５２Ａが０を含む場合（データ変換５３５２Ａ．２）、ベータフィールド５３５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットのデータ変換フィールド５３５４Ｂとして解釈される。Ｕ＝０であり、ＭＯＤフィールド５４４２が００、０１、または１０を含む（メモリアクセスオペレーションを表す）場合、アルファフィールド５３５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、エビクションヒント（ＥＨ）フィールド５３５２Ｂとして解釈され、ベータフィールド５３５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットのデータ操作フィールド５３５４Ｃとして解釈される。
【０４８０】
Ｕ＝１の場合、アルファフィールド５３５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は書き込みマスク制御（Ｚ）フィールド５３５２Ｃとして解釈される。Ｕ＝１であり、ＭＯＤフィールド５４４２が１１を含む（メモリアクセスなしオペレーションを表す）場合、ベータフィールド５３５４（ＥＶＥＸバイト３、ビット［４］−Ｓ０）の一部は、ＲＬフィールド５３５７Ａとして解釈され、フィールド５３５７Ａが１を含む場合（丸め５３５７Ａ．１）、残りのベータフィールド５３５４（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）は丸め演算フィールド５３５９Ａとして解釈される一方で、ＲＬフィールド５３５７Ａが０を含む場合（ＶＳＩＺＥ  ５３５７．Ａ２）、残りのベータフィールド５３５４（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）は、ベクトル長フィールド５３５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）として解釈される。Ｕ＝１であり、ＭＯＤフィールド５４４２が００、０１、または１０を含む（メモリアクセスオペレーションを表す）場合、ベータフィールド５３５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、ベクトル長フィールド５３５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）およびブロードキャストフィールド５３５７Ｂ（ＥＶＥＸバイト３、ビット［４］−Ｂ）として解釈される。
【０４８１】
例示的なレジスタアーキテクチャ
図５５は、本発明の１つの実施形態によるレジスタアーキテクチャ５５００のブロック図である。図示の実施形態では、５１２ビット幅の３２個のベクトルレジスタ５５１０が存在し、これらのレジスタは、ｚｍｍ０からｚｍｍ３１（ｚｍｍレジスタセット）として参照される。他の実施形態は、ｚｍｍレジスタセットの代わりに、２５６ビット幅の１６個のベクトルレジスタのセットを含み得る。これらのレジスタは、ｙｍｍ０からｙｍｍ１５（ｙｍｍレジスタセット）として参照される。他の実施形態は、ｚｍｍレジスタセットまたはｙｍｍレジスタセットの代わりに、１２８ビット幅の１６個のベクトルレジスタのセットを含み得る。これらのレジスタは、ｘｍｍ０からｘｍｍ１５（ｘｍｍレジスタセット）として参照される。図５５では、下位１６個のｚｍｍレジスタの下位２５６ビットは、レジスタｙｍｍ０〜１５上に重ね合わされ、下位１６個のｚｍｍレジスタの下位１２８ビット（ｙｍｍレジスタの下位１２８ビット）は、レジスタｘｍｍ０〜１５上に重ね合わされている。
【０４８２】
具体的なベクトルフレンドリ命令フォーマット５４００は、以下の表に示されるように、重ね合わされたこれらのレジスタファイルを操作する。
【表２】
2020513605.tif 000004
【０４８３】
換言すれば、ベクトル長フィールド５３５９Ｂは、最大長と、１つまたは複数の他のより短い長さとの間で選択し、そのようなより短い長さのそれぞれは、直前の長さの半分の長さであり、ベクトル長フィールド５３５９Ｂを持たない命令テンプレートは、最大のベクトル長を操作する。さらに、１つの実施形態では、具体的なベクトルフレンドリ命令フォーマット５４００のクラスＢの命令テンプレートは、パックドまたはスカラ単精度／倍精度浮動小数点データおよびパックドまたはスカラ整数データを操作する。スカラ演算は、ｚｍｍ／ｙｍｍ／ｘｍｍレジスタ内の最下位のデータ要素位置に対して実行されるオペレーションであり、それより上位のデータ要素位置は、実施形態に応じて、命令前に存在したもののままにされるかまたはゼロ化されるかのいずれかである。
【０４８４】
書き込みマスクレジスタ５５１５−図示の実施形態では、それぞれサイズが６４ビットの８個の書き込みマスクレジスタ（ｋ０〜ｋ７）が存在する。代替的な実施形態では、書き込みマスクレジスタ５５１５は、サイズが１６ビットである。本発明の１つの実施形態では、ベクトルマスクレジスタｋ０は、書き込みマスクとして使用できない。通常ｋ０を示す符号化が書き込みマスクに対して使用される場合、符号化は、０ｘＦＦＦＦに配線された書き込みマスクを選択し、その命令に対して書き込みマスクを実際上無効にする。
【０４８５】
汎用レジスタ５５２５−図示の実施形態では、メモリオペランドをアドレス指定するために既存のｘ８６アドレスモードと共に使用される１６個の６４ビットの汎用レジスタが存在する。これらのレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ、およびＲ８〜Ｒ１５という名称により参照される。
【０４８６】
ＭＭＸパックド整数フラットレジスタファイル５５５０がエイリアスされるスカラ浮動小数点スタックレジスタファイル（ｘ８７スタック）５５４５−図示の実施形態では、ｘ８７スタックは、ｘ８７命令セット拡張を使用して３２／６４／８０ビットの浮動小数点データに対してスカラ浮動小数点オペレーションを実行するのに使用される８要素スタックである一方、ＭＭＸレジスタは、６４ビットのパックド整数データに対してオペレーションを実行すると共に、ＭＭＸレジスタとＸＭＭレジスタとの間で実行される一部のオペレーション用のオペランドを保持するのに使用される。
【０４８７】
本発明の代替的な複数の実施形態は、より広いまたはより狭いレジスタを使用することができる。加えて、本発明の代替的な実施形態は、より多くの、より少ない、または異なるレジスタファイルおよびレジスタを使用することができる。
【０４８８】
エミュレーション（バイナリ変換、コードモーフィングなどを含む）
場合によっては、命令変換器は、ソース命令セットからターゲット命令セットへと命令を変換するために用いられ得る。例えば、命令変換器は、命令をコアによって処理されるべき１つまたは複数の他の命令へ、（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて）変換、モーフィング、エミュレート、または他の方法で変換してもよい。命令変換器は、ソフトウェア、ハードウェア、ファームウェアまたはこれらの組み合わせで実装されてもよい。命令変換器は、プロセッサ上にあってもよく、プロセッサ外にあってもよく、または一部がプロセッサ上かつ一部がプロセッサ外にあってもよい。
【０４８９】
図５６は、本発明の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図である。図示の実施形態では、命令変換器は、ソフトウェア命令変換器であるが、代替的に、命令変換器は、ソフトウェア、ファームウェア、ハードウェアまたはこれらの様々な複数の組み合わせで実装されてもよい。図５６は、少なくとも１つのｘ８６命令セットコアを有するプロセッサ５６１６によって本来的に実行され得るｘ８６バイナリコード５６０６を生成するために、ｘ８６コンパイラ５６０４を用いてコンパイルされ得る高水準言語５６０２のプログラムを示す。少なくとも１つのｘ８６命令セットコアを有するプロセッサ５６１６は、少なくとも１つのｘ８６命令セットコアを有するインテル社製プロセッサと実質的に同じ結果を出すために、（１）インテル社製ｘ８６命令セットコアの命令セットの大部分、または（２）複数のアプリケーションの複数のオブジェクトコードバージョン、もしくは少なくとも１つのｘ８６命令セットコアを有するインテル社製プロセッサ上で実行することが想定された他のソフトウェアを互換可能に実行または他の方法で処理することにより、少なくとも１つのｘ８６命令セットコアを有するインテル社製プロセッサと実質的に同じ複数の機能を実行可能な任意のプロセッサを表す。ｘ８６コンパイラ５６０４は、さらなるリンク処理の有無に関わらず、少なくとも１つのｘ８６命令セットコアを有するプロセッサ５６１６上で実行可能なｘ８６バイナリコード５６０６（例えば、オブジェクトコード）を生成するように動作可能なコンパイラを表す。同様に、図５６は、少なくとも１つのｘ８６命令セットコアを持たないプロセッサ５６１４（例えば、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セットを実行する、および／またはカリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セットを実行する複数のコアを有するプロセッサ）によって本来的に実行され得る代替的な命令セットバイナリコード５６１０を生成するために、代替的な命令セットコンパイラ５６０８を用いてコンパイルされ得る高水準言語５６０２のプログラムを示す。命令変換器５６１２は、ｘ８６バイナリコード５６０６を、ｘ８６命令セットコアを持たないプロセッサ５６１４によって本来的に実行され得るコードに変換するために用いられる。この変換されたコードは、これが可能な命令変換器の製造が難しいため、代替的な命令セットバイナリコード５６１０と同じとなる可能性は低いが、変換されたコードは、全般的なオペレーションを達成し、代替的な命令セットからの複数の命令により補完される。よって、命令変換器５６１２は、エミュレーション、シミュレーションまたは任意の他のプロセスを介して、プロセッサまたはｘ８６命令セットプロセッサまたはコアを持たない他の電子デバイスに、ｘ８６バイナリコード５６０６を実行可能とするソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせを表す。
【０４９０】
図５７は、様々な実施形態による、本明細書で説明される１つまたは複数の技法を実装し得る、データセンタまたは他のタイプのコンピューティングネットワークを概して表すことができるデータセンタ５７００の概念的概要を示す。図５７に示すように、データセンタ５７００は、一般に、複数のラックを備えることができ、各ラックは、それぞれの物理リソースのセットを含むコンピューティング機器を収容することができる。図５７に示す特定の非限定的な例では、データセンタ５７００は、４つのラック５７０２Ａ〜５７０２Ｄを備え、ラックは、それぞれの物理リソース（ＰＣＲ）のセット５７０５Ａ〜５７０５Ｄを含むコンピューティング機器を収容している。この例によれば、データセンタ５７００の物理リソースセット全部５７０６が、ラック５７０２Ａ〜５７０２Ｄの間で分散された様々な物理リソースのセット５７０５Ａ〜５７０５Ｄを含む。物理リソース５７０６は、例えば、プロセッサ、コプロセッサ、アクセラレータ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、メモリ、および記憶装置などの複数のタイプのリソースを含み得る。実施形態はこれらの例に限定されない。
【０４９１】
例示的なデータセンタ５７００は、多くの点で典型的なデータセンタとは異なる。例えば、例示的な実施形態では、ＣＰＵ、メモリ、および他のコンポーネントなどのコンポーネントが配置される回路基板（「スレッド（ｓｌｅｄ）」）は、熱的性能を向上させるように設計されている。特に、例示的な実施形態では、スレッドは、典型的な基板よりも浅い。換言すれば、スレッドは、前面から背面に向かって背が低くなっており、背面に冷却ファンが配置されている。これにより、空気が基板上のコンポーネントを横切って移動しなければならない経路の長さが短くなる。さらに、スレッド上のコンポーネントは、典型的な回路基板よりもさらに間隔を空けて配置され、コンポーネントは、通気の妨げ（ｓｈａｄｏｗｉｎｇ）（すなわち、あるコンポーネントが別のコンポーネントの空気流路内にあること）を低減または排除するように配置される。例示的な実施形態では、プロセッサなどの処理コンポーネントは、スレッドの上面に配置される一方で、ＤＩＭＭなどのニアメモリは、スレッドの下面に配置される。この設計によって提供される強化された空気流の結果として、コンポーネントは、典型的なシステム内よりも高い周波数および電力レベルで動作することができ、それによってパフォーマンスが向上する。
さらに、スレッドは、各ラック５７０２Ａ、５７０２Ｂ、５７０２Ｃ、５７０２Ｄ内の電力ケーブルおよびデータ通信ケーブルとブラインド嵌合するように構成されており、迅速に取り外し、アップグレード、再取り付け、および／または交換する能力が強化されている。同様に、プロセッサ、アクセラレータ、メモリ、データストレージドライブなどの、スレッド上に配置される個々のコンポーネントは、互いの間隔が広がるため、アップグレードが容易になるように構成されている。例示的な実施形態では、コンポーネントは、それらの真正性を証明するためのハードウェア認証機能をさらに含む。
【０４９２】
さらに、例示的な実施形態では、データセンタ５７００は、イーサネット（登録商標）およびＯｍｎｉ−Ｐａｔｈを含む複数の他のネットワークアーキテクチャをサポートする単一のネットワークアーキテクチャ（「ファブリック」）を利用する。例示的な実施形態では、スレッドは光ファイバを介してスイッチに結合され、これにより、典型的なツイストペアケーブル（例えば、カテゴリ５、カテゴリ５ｅ、カテゴリ６など）よりも高い帯域幅および低いレイテンシが提供される。高帯域幅、低レイテンシのインターコネクト、およびネットワークアーキテクチャのおかげで、データセンタ５７００は、使用中に、メモリ、アクセラレータ（例えば、グラフィックアクセラレータ、ＦＰＧＡ、ＡＳＩＣなど）、およびデータストレージドライブなどの、物理的にはばらばらのリソースをプールすることができ、必要に応じてそれらをコンピューティングリソース（例えば、プロセッサ）に提供し、コンピューティングリソースが、プールされたリソースがあたかもローカルであるかのように、プールされたリソースにアクセスできるようにする。例示的なデータセンタ５７００は、さらに、様々なリソースの使用情報を受信し、過去のリソース使用量に基づいて異なるタイプのワークロードのリソース使用量を予測し、この情報に基づいてリソースを動的に再割り当てする。
【０４９３】
データセンタ５７００のラック５７０２Ａ、５７０２Ｂ、５７０２Ｃ、５７０２Ｄは、様々な種類のメンテナンス作業の自動化を容易にする物理的設計機能を含むことができる。例えば、データセンタ５７００は、ロボットによってアクセスされるように、そしてロボットによって操作可能なリソーススレッドを受け入れて収容するように設計されているラックを使用して実装され得る。
さらに、例示的な実施形態では、ラック５７０２Ａ、５７０２Ｂ、５７０２Ｃ、５７０２Ｄは、電源に典型的なものよりも大きい電圧を受ける統合電源を含む。電圧を大きくすることにより、電源は各スレッド上のコンポーネントに追加の電力を供給することが可能となり、コンポーネントは典型的な周波数よりも高い周波数で動作することが可能となる。図５８は、データセンタ５７００のラック５８０２の例示的な論理構成を示す。図５８に示すように、ラック５８０２は、一般に、複数のスレッドを収容することができ、各スレッドは、それぞれ物理リソースのセットを含むことができる。図５８に示される特定の非限定的な例では、ラック５８０２は、それぞれの物理リソースのセット５８０５−１〜５８０５−４を含むスレッド５８０４−１〜５８０４−４を収容し、物理リソースのセット５８０５−１〜５８０５−４のそれぞれが、ラック５８０２に含まれる物理リソースのセット全体５８０６の一部を構成する。図５８に関して、ラック５８０２が、例えばラック５７０２Ａを表す場合、物理リソース５８０６はラック５７０２Ａに含まれる物理リソース５７０５Ａに対応し得る。よって、この例の文脈では、物理リソース５７０５Ａは、ラック５８０２のスレッド５８０４−１〜５８０４−４に含まれる、物理ストレージリソース５８０５−１、物理アクセラレータリソース５８０５−２、物理メモリリソース５８０５−３、および物理コンピューティングリソース５８０５−４を含む、物理リソースのそれぞれのセットから構成され得る。実施形態はこの例に限定されない。各スレッドは、物理リソースの様々なタイプ（例えば、コンピューティング、メモリ、アクセラレータ、記憶装置）のそれぞれのプールを含むことができる。ばらばらのリソースを有する、ロボットでアクセス可能でありロボットで操作可能なスレッドを持つことにより、リソースの各タイプは互いに独立に、自らの最適化されたリフレッシュレートでアップグレードされ得る。
【０４９４】
図５９は、様々な実施形態による、本明細書で説明される１つまたは複数の技法が実装され得るものを概して表すことができるデータセンタ５９００の例である。図５９に示す特定の非限定的な例では、データセンタ５９００はラック５９０２−１〜５９０２−３２を有する。様々な実施形態において、データセンタ５９００のラックは、様々なアクセス経路を画定する、および／または受け入れるような仕方で構成され得る。例えば、図５９に示すように、データセンタ５９００のラックは、アクセス経路５９１１Ａ、５９１１Ｂ、５９１１Ｃ、および５９１１Ｄを画定する、および／または受け入れるような仕方で構成され得る。一部の実施形態では、そのようなアクセス経路の存在は、一般に、ロボットメンテナンス機器などの自動化されたメンテナンス機器が、データセンタ５９００の様々なラックに収容されたコンピューティング機器に物理的にアクセスし、自動化されたメンテナンス作業を実行する（例えば、故障したスレッドを交換する、スレッドをアップグレードする）ことを可能にし得る。様々な実施形態において、アクセス経路５９１１Ａ、５９１１Ｂ、５９１１Ｃ、および５９１１Ｄの寸法、ラック５９０２−１〜５９０２−３２の寸法、ならびに／またはデータセンタ５９００の物理的なレイアウトの１つまたは複数の他の態様は、そのような自動化されたオペレーションを容易にするように選択され得る。実施形態はこの文脈に限定されない。
【０４９５】
図６０は、様々な実施形態による、本明細書で説明される１つまたは複数の技法が実装され得るものを概して表すことができるデータセンタ６０００の例である。図６０に示すように、データセンタ６０００は光ファブリック６０１２を備え得る。光ファブリック６０１２は、一般に、（光ケーブルなどの）光学的信号伝達媒体と、光学的スイッチングインフラストラクチャと、を有することができ、これらを介して、データセンタ６０００における任意の特定のスレッドが、データセンタ６０００における他のスレッドのそれぞれに信号を送信し、データセンタ６０００における他のスレッドのそれぞれから信号を受信できる。光ファブリック６０１２が任意の所与のスレッドに提供する信号伝達接続は、同じラック内の他のスレッドと他のラック内のスレッドとの両方への接続を含み得る。図６０に示す特定の非限定的な例では、データセンタ６０００は、４つのラック６００２Ａ〜６００２Ｄを有する。ラック６００２Ａ〜６００２Ｄは、それぞれのスレッドのペア６００４Ａ−１および６００４Ａ−２、６００４Ｂ−１および６００４Ｂ−２、６００４Ｃ−１および６００４Ｃ−２、ならびに６００４Ｄ−１および６００４Ｄ−２を収容する。よって、この例では、データセンタ６０００は、全部で８つのスレッドを有する。光ファブリック６０１２を介して、そのような各スレッドが、データセンタ６０００における他の７つのスレッドのそれぞれとの信号伝達接続を有し得る。例えば、光ファブリック６０１２を介して、ラック６００２Ａにおけるスレッド６００４Ａ−１は、ラック６００２Ａにおけるスレッド６００４Ａ−２、ならびにデータセンタ６０００の他のラック６００２Ｂ、６００２Ｃ、および６００２Ｄの間で分散されている６つの他のスレッド６００４Ｂ−１、６００４Ｂ−２、６００４Ｃ−１、６００４Ｃ−２、６００４Ｄ−１、および６００４Ｄ−２と信号伝達接続を有し得る。実施形態はこの例に限定されない。
【０４９６】
図６１Ａは、図５７、図５９、および図６０の例示的なデータセンタ５７００、５９００、および６０００のいずれかなどの、データセンタの様々なスレッドの間で一部の実施形態において確立され得るリンク層接続を概して表すことができる接続スキーム６１００Ａの概要を示す。接続スキーム６１００Ａは、デュアルモード光スイッチングインフラストラクチャ６１１４を備える光ファブリックを使って実装され得る。デュアルモード光スイッチングインフラストラクチャ６１１４は、一般に、光学的信号伝達媒体の同じ統一されたセットを介して複数のリンク層プロトコルに従って通信を受信し、そのような通信を適正にスイッチングすることができるスイッチングインフラストラクチャを有し得る。様々な実施形態において、デュアルモード光スイッチングインフラストラクチャ６１１４は、１つまたは複数のデュアルモード光スイッチ６１１５を用いて実装され得る。様々な実施形態において、デュアルモード光スイッチ６１１５は、一般に、高基数（ｈｉｇｈ−ｒａｄｉｘ）スイッチを有し得る。一部の実施形態では、デュアルモード光スイッチ６１１５は、４層（ｆｏｕｒ−ｐｌｙ）スイッチなどの多層（ｍｕｌｔｉ−ｐｌｙ）スイッチを有し得る。様々な実施形態において、デュアルモード光スイッチ６１１５は、従来のスイッチングデバイスに比べて著しく短縮されたレイテンシで通信をスイッチできるようにする集積シリコンフォトニクスを備え得る。一部の実施形態では、デュアルモード光スイッチ６１１５は、１つまたは複数のデュアルモード光スパインスイッチ６１２０をさらに含む、リーフ−スパインアーキテクチャのリーフスイッチ６１３０を構成し得る。
【０４９７】
様々な実施形態において、デュアルモード光スイッチは、インターネットプロトコル（ＩＰパケット）を運ぶイーサネット（登録商標）プロトコル通信と、第２の高性能コンピューティング（ＨＰＣ）リンク層プロトコル（例えば、インテル（登録商標）のＯｍｎｉ−Ｐａｔｈアーキテクチャ、Ｉｎｆｉｎｉｂａｎｄ）による通信と、の両方を、光ファブリックの光学的信号伝達媒体を介して受信可能であり得る。よって、図６１Ａに反映されているように、光ファブリックへの光学的信号伝達接続を有する任意の特定のスレッドのペア６１０４Ａおよび６１０４Ｂに関し、接続スキーム６１００は、イーサネット（登録商標）リンクおよびＨＰＣリンクの両方を介したリンク層接続のサポートを提供し得る。よって、イーサネット（登録商標）通信およびＨＰＣ通信の両方が、単一の高帯域幅、低レイテンシのスイッチファブリックによってサポートされ得る。実施形態はこの例に限定されない。
【０４９８】
図６１Ｂは、一部の実施形態による、図５７〜図６０に示すラックの任意の特定の１つのアーキテクチャを表すことができるラックアーキテクチャ６１００Ｂの概要を示す。図６１Ｂに反映されているように、ラックアーキテクチャ６１００Ｂは、一般に、スレッドが挿入され得る複数のスレッドスペースを備えることができ、そのそれぞれがラックアクセス領域６１０１を介してロボットでアクセス可能であり得る。図６１Ｂに示す特定の非限定的な例では、ラックアーキテクチャ６１００Ｂは、５つのスレッドスペース６１０３−１〜６１０３−５を備える。スレッドスペース６１０３−１〜６１０３−５は、それぞれの多目的コネクタモジュール（ＭＰＣＭ）６１１６−１〜６１１６−５を備える。図６１Ｃは、図６１Ｂのラックアーキテクチャ６１００Ｂの一部の詳細図である。図６１Ｃに示すように、スレッドがスレッドスペース６１０３−１〜６１０３−５のうちの任意の所与の１つに挿入されると、対応するＭＰＣＭ（例えば、ＭＰＣＭ  ６１１６−３）は、挿入されたスレッドの相手側ＭＰＣＭ  ６１２０と結合し得る。この結合は、挿入されたスレッドに、それが収容されているラックの信号伝達インフラストラクチャと電力インフラストラクチャとの両方への接続を提供することができる。
【０４９９】
ラックアーキテクチャ６１００Ｂによって収容されるタイプのスレッドに含まれるのは、拡張機能を備える１つまたは複数のタイプのスレッドであり得る。図６２は、そのようなタイプのスレッドを表すことができるスレッド６２０４の例を示している。図６２に示すように、スレッド６２０４は、物理リソース６２０５のセット、およびスレッド６２０４が図６１Ｂのスレッドスペース６１０３−１〜６１０３−５のいずれかなどのスレッドスペースに挿入されるときに相手側ＭＰＣＭと結合するよう設計されたＭＰＣＭ  ６２１６を有し得る。
スレッド６２０４はまた、拡張コネクタ６２１７を備え得る。拡張コネクタ６２１７は、一般に、拡張スレッド６２１８などの１つまたは複数のタイプの拡張モジュールを受け入れることのできるソケット、スロットまたは他のタイプの接続要素を有し得る。拡張スレッド６２１８上の相手方コネクタと結合することによって、拡張コネクタ６２１７は、物理リソース６２０５に、拡張スレッド６２１８にある補足コンピューティングリソース６２０５Ｂへのアクセスを提供し得る。実施形態はこの文脈に限定されない。
【０５００】
図６３は、図６２のスレッド６２０４などの拡張機能を備えるスレッドのサポートを提供するために実装され得るラックアーキテクチャを表すことができるラックアーキテクチャ６３００の例を示す。図６３に示す特定の非限定的な例では、ラックアーキテクチャ６３００は、７つのスレッドスペース６３０３−１〜６３０３−７を備え、これはそれぞれＭＰＣＭ  ６３１６−１〜６３１６−７を備える。スレッドスペース６３０３−１〜６３０３−７は、それぞれの主要領域６３０３−１Ａ〜６３０３−７Ａおよびそれぞれの拡張領域６３０３−１Ｂ〜６３０３−７Ｂを含む。そのような各スレッドスペースに関し、対応するＭＰＣＭが、挿入されたスレッドの、相手側ＭＰＣＭと結合されたる場合、主要領域は、一般に、挿入されたスレッドを物理的に受け入れるスレッドスペースの領域を構成し得る。拡張領域は、一般に、挿入されたスレッドが図６２の拡張スレッド６２１８のような拡張モジュールにより構成される場合に、図６２の拡張スレッド６２１８などの拡張モジュールを物理的に受け入れることのできるスレッドスペースの領域を構成し得る。
【０５０１】
図６４は、一部の実施形態による、図６３のラックアーキテクチャ６３００により実装されるラックを表すことができるラック６４０２の例を示す。図６４に示す特定の非限定的な例では、ラック６４０２は７つのスレッドスペース６４０３−１〜６４０３−７を含み、これらは、それぞれの主要領域６４０３−１Ａ〜６４０３−７Ａおよびそれぞれの拡張領域６４０３−１Ｂ〜６４０３−７Ｂを含む。様々な実施形態において、ラック６４０２における温度制御は、空気冷却システムを使用して実装され得る。例えば、図６４に反映されているように、ラック６４０２は、一般に様々なスレッドスペース６４０３−１〜６４０３−７内の空気冷却を提供するよう構成される複数のファン６４１９を備え得る。一部の実施形態では、スレッドスペースの高さは、従来の「１Ｕ」サーバの高さより高い。そのような実施形態では、ファン６４１９は、一般に、従来のラック構成で使われるファンに比べて、比較的遅い、大きな直径の冷却ファンを有し得る。より低速でより大きな直径の冷却ファンを稼働させることは、より高速で稼働するより小さな直径の冷却ファンに比べて、同じ程度の冷却を提供しながら、ファン寿命を延ばすことができる。スレッドは、従来のラック寸法より物理的に浅い。さらに、各コンポーネントは、熱的遮蔽を低減するように各スレッド上に配置される（すなわち、空気流の方向に直列に配置されない）。結果として、より幅広く、より浅いスレッドは、冷却が改善されたこと（すなわち、熱的遮蔽なし、装置間のスペースがより広い、より大きなヒートシンクのためのより多くの余地など）により、より高い熱設計枠（例えば、２５０Ｗ）で装置を動作させることができるため、装置パフォーマンスを高めることができる。
【０５０２】
ＭＰＣＭ  ６４１６−１〜６４１６−７は、挿入されたスレッドに、それぞれの電力モジュール６４２０−１〜６４２０−７を電源とする電力へのアクセスを提供するよう構成され得る。各電源は外部電源６４２１から電力を引き出してもよい。様々な実施形態において、外部電源６４２１は、交流（ＡＣ）電力をラック６４０２に送達してもよく、電力モジュール６４２０−１〜６４２０−７は、そのようなＡＣ電力を、挿入されたスレッドに提供される直流（ＤＣ）電力に変換するよう構成されてもよい。一部の実施形態では、例えば、電力モジュール６４２０−１〜６４２０−７は、２７７ボルトのＡＣ電力を、それぞれのＭＰＣＭ  ６４１６−１〜６４１６−７を介して、挿入されたスレッドに提供するための、１２ボルトのＤＣ電力に変換するよう構成されてもよい。実施形態はこの例に限定されない。
【０５０３】
ＭＰＣＭ  ６４１６−１〜６４１６−７はまた、挿入されたスレッドに、図６１Ａのデュアルモード光スイッチングインフラストラクチャ６１１４と同じまたは同様であり得るデュアルモード光スイッチングインフラストラクチャ６４１４への光学的信号伝達接続を提供するように構成され得る。様々な実施形態において、ＭＰＣＭ  ６４１６−１〜６４１６−７に含まれる光コネクタは、挿入されたスレッドのＭＰＣＭに含まれる相手側光コネクタと結合して、そのようなスレッドに、それぞれの長さの光ケーブル６４２２−１〜６４２２−７を介したデュアルモード光スイッチングインフラストラクチャ６４１４への光学的信号伝達接続を提供するように設計され得る。一部の実施形態では、そのような各長さの光ケーブルは、その対応するＭＰＣＭから、ラック６４０２のスレッドスペースの外部である光相互接続ルーム（ｌｏｏｍ）６４２３まで延びてもよい。様々な実施形態において、光相互接続ルーム６４２３は、ラック６４０２の支柱または他のタイプの荷重支持要素を通って配置され得る。実施形態はこの文脈に限定されない。挿入されたスレッドがＭＰＣＭを介して光スイッチングインフラストラクチャに接続するため、新たに挿入されたスレッドを受け入れるためにラックケーブルを手動で構成することに典型的に費やされるリソースが節約できる。
【０５０４】
図６５は、一部の実施形態による、図６４のラック６４０２と併せて使うために設計されたスレッドを表すことができるスレッド６５０４の例を示す。スレッド６５０４は、光コネクタ６５１６Ａおよび電源コネクタ６５１６Ｂを含み、スレッドスペースへのＭＰＣＭ  ６５１６の挿入と共に、スレッドスペースの、相手側ＭＰＣＭと結合するように設計されている、ＭＰＣＭ  ６５１６を備え得る。そのような相手側ＭＰＣＭとのＭＰＣＭ  ６５１６との結合により、電力コネクタ６５１６を相手側ＭＰＣＭに含まれる電力コネクタと結合させることができる。これにより、一般に、スレッド６５０４の物理リソース６５０５が、電力コネクタ６５１６と電力コネクタ６５１６を物理リソース６５０５に導電結合する電力伝送媒体６５２４とを介して、外部電源から電力供給を受けることが可能になり得る。
【０５０５】
スレッド６５０４はまた、デュアルモード光ネットワークインターフェース回路６５２６を含み得る。デュアルモード光ネットワークインターフェース回路６５２６は、一般に、図６４のデュアルモード光スイッチングインフラストラクチャ６４１４によってサポートされる複数のリンク層プロトコルのそれぞれに従って、光学的信号伝達媒体を通じて通信することのできる回路を含み得る。一部の実施形態では、デュアルモード光ネットワークインターフェース回路６５２６は、イーサネット（登録商標）プロトコル通信と、第２の高性能プロトコルによる通信との両方が可能であり得る。様々な実施形態において、デュアルモード光ネットワークインターフェース回路６５２６は、１つまたは複数の光送受信機モジュール６５２７を含んでいてもよく、そのそれぞれが、１つまたは複数の光チャネルのそれぞれを通じて光信号を送受信可能であり得る。実施形態はこの文脈に限定されない。
【０５０６】
ＭＰＣＭ  ６５１６を所与のラックにあるスレッドスペースの相手側ＭＰＣＭと結合することにより、光コネクタ６５１６Ａを、相手側ＭＰＣＭに含まれる光コネクタと結合させ得る。これは、一般に、光チャネルのセット６５２５のそれぞれを介した、スレッドの光ケーブルとデュアルモード光ネットワークインターフェース回路６５２６との間の光接続を確立し得る。デュアルモード光ネットワークインターフェース回路６５２６は、電気的信号伝達媒体６５２８を介して、スレッド６５０４の物理リソース６５０５と通信し得る。図６４を参照して上述したような、冷却を改善し、比較的より高い熱設計枠（例えば、２５０Ｗ）での動作を可能にするためのスレッドの寸法およびスレッド上でのコンポーネントの配置に加えて、一部の実施形態では、スレッドは、物理リソース６５０５によって生成される熱を散逸させるように構成されたヒートパイプおよび／またはヒートシンクなどの、空気冷却を容易にするための１つまたは複数の追加の特徴を含み得る。図６５に示す例示的なスレッド６５０４は拡張コネクタを備えていないが、スレッド６５０４の設計要素を備える任意の所与のスレッドはまた、一部の実施形態による拡張コネクタを備えていてもよいことに留意されたい。実施形態はこの文脈に限定されない。
【０５０７】
図６６は、様々な実施形態による、本明細書で説明される１つまたは複数の技法が実装され得るものを概して表すことができるデータセンタ６６００の例である。図６６に反映されているように、物理インフラストラクチャ管理フレームワーク６６５０Ａは、データセンタ６６００の物理インフラストラクチャ６６００Ａの管理を容易にするように実装され得る。様々な実施形態において、物理インフラストラクチャ管理フレームワーク６６５０Ａの１つの機能は、物理インフラストラクチャ６６００Ａ内のコンピューティング機器にサービスするロボットメンテナンス機器の使用などの、データセンタ６６００内での自動メンテナンス機能を管理することであり得る。一部の実施形態では、物理インフラストラクチャ６６００Ａは、物理インフラストラクチャ６６００Ａのリモートの自動管理をサポートするために十分なロバスト性を有するテレメトリ報告を実行する高度なテレメトリシステムを備え得る。様々な実施形態において、そのような高度なテレメトリシステムによって提供されるテレメトリ情報は、障害予測／防止機能および容量計画機能などの機能をサポートし得る。一部の実施形態では、物理インフラストラクチャ管理フレームワーク６６５０Ａは、ハードウェア認証技法を使って物理インフラストラクチャコンポーネントの真正性確認を管理するよう構成され得る。例えば、設置される各コンポーネントに関連付けられている無線周波数識別（ＲＦＩＤ）タグから収集された情報を解析することによって、設置前にコンポーネントの真正性をロボットが検証してもよい。実施形態はこの文脈に限定されない。
【０５０８】
図６６に示されるように、データセンタ６６００の物理インフラストラクチャ６６００Ａは、デュアルモード光スイッチングインフラストラクチャ６６１４を含み得る光ファブリック６６１２を有し得る。光ファブリック６６１２およびデュアルモード光スイッチングインフラストラクチャ６６１４は、図６０の光ファブリック６０１２および図６１Ａのデュアルモード光スイッチングインフラストラクチャ６１１４とそれぞれ同じまたは同様であってもよく、データセンタ６６００のスレッドの間で、高帯域幅、低レイテンシの複数プロトコル接続を提供し得る。上で論じたように、図５７を参照すると、様々な実施形態において、そのような接続を使用できることにより、アクセラレータ、メモリ、および記憶装置などのリソースをばらばらにし、動的にプールすることを実現可能にし得る。一部の実施形態では、例えば、１つまたは複数のプールされたアクセラレータスレッド６６３０がデータセンタ６６００の物理インフラストラクチャ６６００Ａのうちに含められてもよく、そのそれぞれが、光ファブリック６６１２およびデュアルモード光スイッチングインフラストラクチャ６６１４を介して、他のスレッドにグローバルにアクセス可能であるアクセラレータリソース、例えばコプロセッサおよび／またはＦＰＧＡなどのプールを含み得る。
【０５０９】
別の例では、様々な実施形態において、１つまたは複数のプールされた記憶装置スレッド６６３２がデータセンタ６６００の物理インフラストラクチャ６６００Ａのうちに含められてもよく、そのそれぞれが、光ファブリック６６１２およびデュアルモード光スイッチングインフラストラクチャ６６１４を介して、他のスレッドにグローバルにアクセス可能である記憶装置リソースのプールを含み得る。一部の実施形態では、そのようなプールされた記憶装置スレッド６６３２は、ソリッドステートドライブ（ＳＳＤ）などのソリッドステート記憶装置のプールを含み得る。様々な実施形態において、１つまたは複数の高性能処理スレッド６６３４がデータセンタ６６００の物理インフラストラクチャ６６００Ａのうちに含められてもよい。一部の実施形態では、高性能処理スレッド６６３４は、高性能プロセッサのプールおよび最大２５０Ｗまたはそれ以上のより高い熱設計枠を与えるよう空気冷却を高める冷却機能を含み得る。様々な実施形態において、任意の所与の高性能処理スレッド６６３４は、その高性能処理スレッド６６３４にローカルに利用可能なファーメモリがプロセッサから分離され、ニアメモリがそのスレッド上に備わるように、ファーメモリ拡張スレッドを受け入れることのできる拡張コネクタ６６１７を備えていてもよい。一部の実施形態では、そのような高性能処理スレッド６６３４は、低レイテンシのＳＳＤ記憶装置を有する拡張スレッドを使用してファーメモリにより構成されてもよい。光インフラストラクチャは、あるスレッド上のコンピューティングリソースが、同じラックまたはデータセンタ内の他の任意のラックに位置するスレッド上に分離されているリモートのアクセラレータ／ＦＰＧＡ、メモリおよび／またはＳＳＤリソースを利用することを可能にする。リモートのリソースは、図６１Ａ〜図６１Ｃを参照して上述したスパイン−リーフ型ネットワークアーキテクチャにおいて１スイッチジャンプまたは２スイッチジャンプ離れて配置され得る。実施形態はこの文脈に限定されない。
【０５１０】
様々な実施形態において、ソフトウェア定義インフラストラクチャ６６００Ｂなどの仮想インフラストラクチャを定義するために、抽象化の１つまたは複数の層が、物理インフラストラクチャ６６００Ａの物理リソースに適用され得る。一部の実施形態では、ソフトウェア定義インフラストラクチャ６６００Ｂの仮想コンピューティングリソース６６３６は、クラウドサービス６６４０の提供をサポートするために割り当てられ得る。様々な実施形態において、仮想コンピューティングリソース６６３６の特定のセットは、ＳＤＩサービス６６３８の形でクラウドサービス６６４０に提供するためにグループ化され得る。クラウドサービス６６４０の例としては、限定するものではないが、ＳａａＳ（ｓｏｆｔｗａｒｅ  ａｓ  ａ  ｓｅｒｖｉｃｅ）サービス６６４２、ＰａａＳ（ｐｌａｔｆｏｒｍ  ａｓ  ａ  ｓｅｒｖｉｃｅ）サービス６６４４およびＩａａＳ（ｉｎｆｒａｓｔｒｕｃｔｕｒｅ  ａｓ  ａ  ｓｅｒｖｉｃｅ）サービス６６４６を挙げることができる。
【０５１１】
一部の実施形態では、ソフトウェア定義インフラストラクチャ６６００Ｂの管理は、仮想インフラストラクチャ管理フレームワーク６６５０Ｂを使用して実施され得る。様々な実施形態において、仮想インフラストラクチャ管理フレームワーク６６５０Ｂは、仮想コンピューティングリソース６６３６および／またはＳＤＩサービス６６３８のクラウドサービス６６４０への割り当てを管理するのと併せて、ワークロードフィンガープリンティング技法および／または機械学習技法を実装するよう設計され得る。一部の実施形態では、仮想インフラストラクチャ管理フレームワーク６６５０Ｂは、そのようなリソース割り当ての実行に併せて、テレメトリデータを使用／参照し得る。様々な実施形態において、クラウドサービス６６４０についてのＱｏＳ管理機能を提供するために、アプリケーション／サービス管理フレームワーク６６５０Ｃが実装され得る。実施形態はこの文脈に限定されない。
【０５１２】
流れ図におけるオペレーションは、他の図の例示的な実施形態を参照して説明されている場合がある。しかしながら、流れ図のオペレーションは、他の図を参照して説明された以外の本発明の実施形態により実行可能であり得、他の図を参照して説明される本発明の実施形態は、流れ図を参照して説明されたものとは異なるオペレーションを実行可能であり得ることを理解されたい。さらに、図中の流れ図は、本発明の特定の実施形態によって実行される特定のオペレーション順序を示しているが、そのような順序は例示であることを理解されたい（例えば代替的な実施形態は異なる順序でオペレーションを実行したり、特定のオペレーションを組み合わせたり、特定のオペレーションを重ねたりできる）。
【０５１３】
本発明の実施形態の１つまたは複数の部分は、ソフトウェア、ファームウェア、および／またはハードウェアの異なる組み合わせを使用して実施することができる。実施形態は、機械可読記憶媒体（例えば、磁気ディスク、光ディスク、読み出し専用メモリ（ＲＯＭ）、フラッシュメモリ装置、相変化メモリ）および機械可読伝送媒体（搬送波とも呼ばれる）など（例えば、電気、光、無線、音響、または搬送波、赤外線信号などの他の形式の伝播信号）の機械可読媒体（コンピュータ可読媒体とも呼ばれる）を用いて、（ソフトウェア命令で構成され、コンピュータプログラムコードまたはコンピュータプログラムと呼ばれることもある）コードおよび／またはデータを（内部的におよび／またはネットワークを介して他の電子デバイスと共に）格納および伝送する電子デバイスを使用して実装され得る。よって、電子デバイス（例えば、コンピュータ）は、プロセッサのセット上で実行するためのコードを格納する、および／またはデータを格納するために、１つまたは複数の機械可読記憶媒体に結合された１つまたは複数のプロセッサのセットなどのハードウェアおよびソフトウェアを含むことができる。例えば、電子デバイスは、不揮発性メモリは、電子デバイスがオフにされたとき（電源が切られたとき）でもコード／データを持続させることができるため、コードを含む不揮発性メモリを含むことができ、電子デバイスがオンにされている間、その電子デバイスのプロセッサ（単数または複数）によって実行されるコードの一部は、典型的には、電子デバイスの低速の不揮発性メモリから揮発性メモリ（例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ））にコピーされる。典型的な電子デバイスはまた、（伝播信号を使用してコードおよび／またはデータを送信および／または受信するために）他の電子デバイスとのネットワーク接続を確立するための１つまたは複数の物理ネットワークインターフェース（単数または複数）のセットを含む。
【０５１４】
本発明をいくつかの実施形態に関して説明してきたが、当業者であれば、本発明が説明した実施形態に限定されず、添付の特許請求の範囲の趣旨および範囲内で修正および変更を加えて実施できることを認識するはずである。従って、説明は限定的ではなく例示的とみなされるべきである。
【図１Ａ】
2020513605.tif 000005
【図１Ｂ】
2020513605.tif 000006
【図２Ａ】
2020513605.tif 000007
【図２Ｂ】
2020513605.tif 000008
【図３】
2020513605.tif 000009
【図４】
2020513605.tif 000010
【図５】
2020513605.tif 000011
【図６】
2020513605.tif 000012
【図７】
2020513605.tif 000013
【図８】
2020513605.tif 000014
【図９】
2020513605.tif 000015
【図１０】
2020513605.tif 000016
【図１１】
2020513605.tif 000017
【図１２】
2020513605.tif 000018
【図１３】
2020513605.tif 000019
【図１４】
2020513605.tif 000020
【図１５】
2020513605.tif 000021
【図１６】
2020513605.tif 000022
【図１７】
2020513605.tif 000023
【図１８】
2020513605.tif 000024
【図１９】
2020513605.tif 000025
【図２０】
2020513605.tif 000026
【図２１】
2020513605.tif 000027
【図２２】
2020513605.tif 000028
【図２３】
2020513605.tif 000029
【図２４】
2020513605.tif 000030
【図２５】
2020513605.tif 000031
【図２６】
2020513605.tif 000032
【図２７】
2020513605.tif 000033
【図２８】
2020513605.tif 000034
【図２９】
2020513605.tif 000035
【図３０】
2020513605.tif 000036
【図３１】
2020513605.tif 000037
【図３２】
2020513605.tif 000038
【図３３】
2020513605.tif 000039
【図３４】
2020513605.tif 000040
【図３５】
2020513605.tif 000041
【図３６】
2020513605.tif 000042
【図３７】
2020513605.tif 000043
【図３８】
2020513605.tif 000044
【図３９】
2020513605.tif 000045
【図４０】
2020513605.tif 000046
【図４１】
2020513605.tif 000047
【図４２】
2020513605.tif 000048
【図４３】
2020513605.tif 000049
【図４４】
2020513605.tif 000050
【図４５】
2020513605.tif 000051
【図４６】
2020513605.tif 000052
【図４７】
2020513605.tif 000053
【図４８】
2020513605.tif 000054
【図４９】
2020513605.tif 000055
【図５０】
2020513605.tif 000056
【図５１】
2020513605.tif 000057
【図５２】
2020513605.tif 000058
【図５３Ａ】
2020513605.tif 000059
【図５３Ｂ】
2020513605.tif 000060
【図５４Ａ】
2020513605.tif 000061
【図５４Ｂ】
2020513605.tif 000062
【図５４Ｃ】
2020513605.tif 000063
【図５４Ｄ】
2020513605.tif 000064
【図５５】
2020513605.tif 000065
【図５６】
2020513605.tif 000066
【図５７】
2020513605.tif 000067
【図５８】
2020513605.tif 000068
【図５９】
2020513605.tif 000069
【図６０】
2020513605.tif 000070
【図６１Ａ】
2020513605.tif 000071
【図６１Ｂ】
2020513605.tif 000072
【図６１Ｃ】
2020513605.tif 000073
【図６２】
2020513605.tif 000074
【図６３】
2020513605.tif 000075
【図６４】
2020513605.tif 000076
【図６５】
2020513605.tif 000077
【図６６】
2020513605.tif 000078
【手続補正書】
【提出日】令和1年12月5日(2019.12.5)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
キャッシュラインをゼロ化するための命令をデコードするデコーダと、
前記デコーダに結合され、前記命令の前記デコードに応答して、メモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを開始するためのライトコマンドを発行する、実行ユニットと、
コヒーレントキャッシュであって、前記実行ユニットに結合され、前記ライトコマンドを受信し、前記ライトコマンドに応答して前記コヒーレントキャッシュにおいてヒットがあるか否かを判定し、前記ヒットしたキャッシュラインのキャッシュコヒーレンシプロトコル状態が修正状態または排他状態であるか否かを判定し、前記キャッシュコヒーレンシプロトコル状態が前記修正状態または前記排他状態の場合にすべてゼロを示すようにキャッシュラインを構成し、前記ライトコマンドの受信に応答して、ミスの場合にインターコネクトに向けて前記ライトコマンドを発行する、コヒーレントキャッシュと、
前記インターコネクトであって、前記ライトコマンドの受信に応答して、ヒットがあるか否かを判定する必要がある他の複数のコヒーレントキャッシュのそれぞれにスヌープを発行し、前記ライトコマンドおよび前記スヌープが前記キャッシュラインサイズのゼロの書き込みを実行させなかった場合に、前記インターコネクトが、または前記インターコネクトからのメッセージに応答する前記実行ユニットが、前記他の複数のコヒーレントキャッシュのうちの１つにおけるキャッシュラインをすべてゼロを示すように構成させる、前記インターコネクトと、
を備えるプロセッサ。
【請求項２】
前記コヒーレントキャッシュはまた、前記ヒットしたキャッシュラインの前記キャッシュコヒーレンシプロトコル状態が前記修正状態または前記排他状態ではない場合に、前記キャッシュラインのキャッシュコヒーレンシプロトコル状態を無効状態にし、前記インターコネクトに向けて前記ライトコマンドを発行する、請求項１に記載のプロセッサ。
【請求項３】
前記デコーダおよび前記実行ユニットが第１のコアの一部であり、前記他の複数のコヒーレントキャッシュが第２のコアのコヒーレントキャッシュを含む、請求項１または２に記載のプロセッサ。
【請求項４】
前記キャッシュラインは、前記キャッシュライン内のデータをゼロで上書きすることによってすべてゼロを示すように構成される、請求項１から３のいずれか一項に記載のプロセッサ。
【請求項５】
前記キャッシュラインは、前記キャッシュラインが現在存在している前記コヒーレントキャッシュのウェイにある前記キャッシュラインを無効化することによってすべてゼロを示し、前記コヒーレントキャッシュの異なるウェイにゼロのキャッシュラインを書き込むように構成される、請求項１から４のいずれか一項に記載のプロセッサ。
【請求項６】
前記キャッシュラインは、データではなくタグ状態を変更することによってすべてゼロを示すように構成される、請求項１から５のいずれか一項に記載のプロセッサ。
【請求項７】
前記キャッシュラインは、ゼロラインを中間バッファに送ることによってすべてゼロを示すように構成されるようにトリガされる、請求項１から６のいずれか一項に記載のプロセッサ。
【請求項８】
前記キャッシュラインは、前記キャッシュラインより小さいゼロのチャンクを中間バッファに書き込み、それと並行して前記チャンクを前記キャッシュラインに書き込むことによって、すべてゼロを示すように構成されるようにトリガされる、請求項１から７のいずれか一項に記載のプロセッサ。
【請求項９】
前記命令の実行は、弱くオーダリングされる、
請求項１に記載のプロセッサ。
【請求項１０】
キャッシュラインをゼロ化するための命令をデコードするデコーダと、
前記デコーダに結合され、前記命令の前記デコードに応答して、コマンドを発行する、実行ユニットと、
インターコネクトであって、前記コマンドの受信に応答して、ヒットがあるか否かを判定する必要がある複数のコヒーレントキャッシュのそれぞれにスヌープを発行し、前記スヌープが前記キャッシュラインへのゼロの書き込みを実行させなかった場合に、前記実行ユニットが単独で、前記インターコネクトが、または前記インターコネクトからのメッセージに応答して前記実行ユニットが、前記実行ユニットに結合された前記複数のコヒーレントキャッシュのうちの１つにおけるキャッシュラインをすべてゼロを示すように構成させる、インターコネクトと
を備えるプロセッサ。
【請求項１１】
前記実行ユニットは、ヒットしたキャッシュラインのキャッシュコヒーレンシプロトコル状態が修正状態または排他状態ではない場合に、前記ヒットしたキャッシュラインの前記キャッシュコヒーレンシプロトコル状態を無効状態にする、
請求項１０に記載のプロセッサ。
【請求項１２】
第１のエージェントが、キャッシュラインをゼロ化するための命令をデコードする段階と、
前記第１のエージェントが、前記命令を実行する段階であって、前記命令を実行する段階は、メモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを引き起こすライトコマンドを、前記第１のエージェントに結合された第１のコヒーレントキャッシュに発行する段階を含む、実行する段階と、
前記第１のエージェントが、前記第１のコヒーレントキャッシュのキャッシュラインにおいてヒットがあるか否かを判定する段階と、
ヒットがあると判定したことに応答して前記第１のエージェントが、前記ヒットしたキャッシュラインのコヒーレンシプロトコル状態が修正または排他であるか否かを判定する段階と、
前記ヒットしたキャッシュラインの前記コヒーレンシプロトコル状態が修正または排他のキャッシュラインであると判定したことに応答して前記第１のエージェントが、すべてゼロを示すように前記キャッシュラインを構成する段階と、
ヒットがないと判定したことに応答して前記第１のエージェントが、インターコネクトに向けて前記ライトコマンドを発行する段階と、
前記ライトコマンドに応答して前記インターコネクトが、ヒットがあるか否かを判定する必要がある他の複数のコヒーレントキャッシュのそれぞれにスヌープを発行する段階と
を備える方法。
【請求項１３】
前記ライトコマンドに応答して前記インターコネクトがヒットがあるか否かを判定する必要がある他の複数のコヒーレントキャッシュのそれぞれにスヌープを発行したことに応答して、前記ライトコマンドおよび前記スヌープのうちの１つが前記キャッシュラインサイズのゼロの書き込みを実行させたか否かを判定する段階をさらに備える、
請求項１２に記載の方法。
【請求項１４】
前記ヒットしたキャッシュラインの前記コヒーレンシプロトコル状態が修正または排他のキャッシュラインであると判定したことに応答して前記第１のエージェントが構成する段階は、スヌープを抑制する段階も含む、
請求項１２または１３に記載の方法。
【請求項１５】
前記ヒットしたキャッシュラインの前記コヒーレンシプロトコル状態が修正または排他のキャッシュラインではないと判定したことに応答して前記第１のエージェントが、前記キャッシュラインのキャッシュコヒーレンシプロトコル状態を無効にすると決定する段階をさらに備える、
請求項１２から１４のいずれか一項に記載の方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０３７２
【補正方法】変更
【補正の内容】
【０３７２】
加えて、以下が適用され得る。一部の実施形態では、コヒーレントキャッシュはまた、ヒットしたキャッシュラインのキャッシュコヒーレンシプロトコル状態が修正状態または排他状態ではない場合に、そのキャッシュラインのキャッシュコヒーレンシプロトコル状態を無効状態にし、インターコネクトに向けてライトコマンドを発行する。一部の実施形態では、デコーダおよび実行ユニットは第１のコアの一部であり、複数のコヒーレントキャッシュは第２のコアのコヒーレントキャッシュを含む。
【国際調査報告】
2020513605.tif 000079
2020513605.tif 000080