(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-04-14
(45)【発行日】2025-04-22
(54)【発明の名称】データ依存脆弱分岐の機会主義的再誘導のための命令セットアーキテクチャベース自動負荷追跡
(51)【国際特許分類】
G06F 9/38 20180101AFI20250415BHJP
【FI】
G06F9/38 330A
G06F9/38 330D
【外国語出願】
(21)【出願番号】P 2020196087
(22)【出願日】2020-11-26
【審査請求日】2023-08-25
(31)【優先権主張番号】202041016867
(32)【優先日】2020-04-20
(33)【優先権主張国・地域又は機関】IN
(32)【優先日】2020-06-27
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】サウラブ グプタ
(72)【発明者】
【氏名】ニランジャン サウンダララジャン
(72)【発明者】
【氏名】ラガヴェンドラ ナタラジャン
(72)【発明者】
【氏名】スリーニバス サブラモニー
【審査官】田中 幸雄
(56)【参考文献】
【文献】国際公開第2008/029450(WO,A1)
【文献】特開2004-145485(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
(57)【特許請求の範囲】
【請求項1】
複数の命令を複数のデコード済みの命令へとデコードするためのデコーダと前記複数のデコード済みの命令を実行するための実行回路とを有するパイプライン回路と、
分岐命令の予測経路を生成するための分岐予測器回路と、
ロード命令からの結果に依存する前記分岐命令について、前記パイプライン回路により受信された命令が前記ロード命令であるかどうかをチェックし、前記パイプライン回路により受信された前記命令が前記ロード命令である場合、前記デコーダでの前記分岐命令のデコードと前記実行回路での前記分岐命令の実行との間の前記ロード命令からの前記結果のライトバックをチェックし、前記予測経路が前記ロード命令からの前記結果に基づく経路とは異なる場合、前記パイプライン回路内の前記分岐命令を前記経路へ再誘導し、前記ロード命令からの前記結果に基づく前記経路についての前記分岐命令の実行を生じさせるための分岐再誘導回路と
を備え
、
前記分岐再誘導回路は、前記結果の最終格納デスティネーションとは別個であるロード値テーブル内の前記結果の前記ライトバックをチェックするプロセッサ。
【請求項2】
前記分岐再誘導回路は、前記パイプライン回路により受信された前記命令が前記ロード命令である場合、前記ロード命令の前記結果の前記ロード値テーブル内のエントリのインデックス値を割り当て、前記インデックス値が前記分岐命令のフィールドとして前記パイプライン回路へ送信されるようにする、請求項
1に記載のプロセッサ。
【請求項3】
前記分岐再誘導回路は、前記パイプライン回路により受信された前記命令が前記ロード命令である場合、ロード依存分岐テーブル内の前記分岐命令のエントリを前記インデックス値で更新する、請求項
2に記載のプロセッサ。
【請求項4】
前記分岐再誘導回路は、前記ロード命令からの前記結果にも依存する第2の分岐命令のインデックス値を割り当てる、請求項
2に記載のプロセッサ。
【請求項5】
前記分岐命令の前記再誘導は、前記分岐命令の実行を前記実行回路に割り当てる前記パイプライン回路の割り当てステージにおいて生じる、請求項1に記載のプロセッサ。
【請求項6】
前記分岐命令の前記再誘導は、前記パイプライン回路から前記割り当てステージまでの前記予測経路についての前記分岐命令のデータのフラッシュを含む、請求項
5に記載のプロセッサ。
【請求項7】
1または複数のオペレーションを実行して、前記予測経路が前記ロード命令からの前記結果に基づく前記経路とは異なるかどうかを決定するための、前記パイプライン回路の前記実行回路を含む実行ステージとは別個の回路をさらに備える、請求項1から
6のいずれか一項に記載のプロセッサ。
【請求項8】
プロセッサの分岐予測器回路で分岐命令の予測経路を生成する段階と、
前記プロセッサの分岐再誘導回路が、ロード命令からの結果に依存する前記分岐命令について、複数の命令を複数のデコード済みの命令へとデコードするためのデコーダと前記複数のデコード済みの命令を実行するための実行回路とを含む前記プロセッサのパイプライン回路により受信された命令が前記ロード命令であるかどうかをチェックする段階と、
前記パイプライン回路により受信された前記命令が前記ロード命令である場合、前記分岐再誘導回路が前記デコーダでの前記分岐命令のデコードと前記実行回路での前記分岐命令の実行との間の前記ロード命令からの前記結果のライトバックをチェックする段階と、
前記予測経路が前記ロード命令からの前記結果に基づく経路とは異なる場合、前記分岐再誘導回路が前記パイプライン回路内の前記分岐命令を前記経路へ再誘導する段階と、
前記予測経路が前記ロード命令からの前記結果に基づく前記経路とは異なる場合、前記実行回路が前記ロード命令からの前記結果に基づく前記経路についての前記分岐命令を実行する段階と
を備え
、
前記ライトバックをチェックする前記段階は、前記結果の最終格納デスティネーションとは別個であるロード値テーブル内の前記結果の前記ライトバックをチェックする段階を有する方法。
【請求項9】
前記パイプライン回路により受信された前記命令が前記ロード命令である場合、前記分岐再誘導回路が前記ロード命令の前記結果の前記ロード値テーブル内のエントリのインデックス値を割り当てる段階と、
前記インデックス値が前記分岐命令のフィールドとして前記パイプライン回路へ送信されるようにする段階と
をさらに備える、請求項
8に記載の方法。
【請求項10】
前記パイプライン回路により受信された前記命令が前記ロード命令である場合、前記分岐再誘導回路がロード依存分岐テーブル内の前記分岐命令のエントリを前記インデックス値で更新する段階をさらに備える、請求項
9に記載の方法。
【請求項11】
前記分岐再誘導回路が、前記ロード命令からの前記結果にも依存する第2の分岐命令のインデックス値を割り当てる段階をさらに備える、請求項
9に記載の方法。
【請求項12】
前記分岐命令の前記再誘導は、前記分岐命令の実行を前記実行回路に割り当てる前記パイプライン回路の割り当てステージにおいて生じる、請求項
8に記載の方法。
【請求項13】
前記分岐命令の前記再誘導は、前記パイプライン回路から前記割り当てステージまでの前記予測経路についての前記分岐命令のデータのフラッシュを含む、請求項
12に記載の方法。
【請求項14】
前記パイプライン回路の前記実行回路を含む実行ステージとは別個の回路で、1または複数のオペレーションを実行して、前記予測経路が前記ロード命令からの前記結果に基づく前記経路とは異なるかどうかを決定する段階をさらに備える、請求項
8から
13のいずれか一項に記載の方法。
【請求項15】
分岐命令およびロード命令を格納するためのメモリと、
前記メモリに結合されたプロセッサコアと
を備え、
前記プロセッサコアは、
複数の命令を複数のデコード済みの命令へとデコードするためのデコーダと前記複数のデコード済みの命令を実行するための実行回路とを有するパイプライン回路と、
前記分岐命令の予測経路を生成するための分岐予測器回路と、
前記ロード命令からの結果に依存する前記分岐命令について、前記パイプライン回路により受信された命令が前記ロード命令であるかどうかをチェックし、前記パイプライン回路により受信された前記命令が前記ロード命令である場合、前記デコーダでの前記分岐命令のデコードと前記実行回路での前記分岐命令の実行との間の前記ロード命令からの前記結果のライトバックをチェックし、前記予測経路が前記ロード命令からの前記結果に基づく経路とは異なる場合、前記パイプライン回路内の前記分岐命令を前記経路へ再誘導し、前記ロード命令からの前記結果に基づく前記経路についての前記分岐命令の実行を生じさせるための分岐再誘導回路と
を有
し、
前記分岐再誘導回路は、前記結果の最終格納デスティネーションとは別個であるロード値テーブル内の前記結果の前記ライトバックをチェックする、
システム。
【請求項16】
前記分岐再誘導回路は、前記パイプライン回路により受信された前記命令が前記ロード命令である場合、前記ロード命令の前記結果の前記ロード値テーブル内のエントリのインデックス値を割り当て、前記インデックス値が前記分岐命令のフィールドとして前記パイプライン回路へ送信されるようにする、請求項
15に記載のシステム。
【請求項17】
前記分岐再誘導回路は、前記パイプライン回路により受信された前記命令が前記ロード命令である場合、ロード依存分岐テーブル内の前記分岐命令のエントリを前記インデックス値で更新する、請求項
16に記載のシステム。
【請求項18】
前記分岐再誘導回路は、前記ロード命令からの前記結果にも依存する第2の分岐命令のインデックス値を割り当てる、請求項
16に記載のシステム。
【請求項19】
前記分岐命令の前記再誘導は、前記分岐命令の実行を前記実行回路に割り当てる前記パイプライン回路の割り当てステージにおいて生じる、請求項
15に記載のシステム。
【請求項20】
前記分岐命令の前記再誘導は、前記パイプライン回路から前記割り当てステージまでの前記予測経路についての前記分岐命令のデータのフラッシュを含む、請求項
19に記載のシステム。
【請求項21】
前記プロセッサコアは、1または複数のオペレーションを実行して、前記予測経路が前記ロード命令からの前記結果に基づく前記経路とは異なるかどうかを決定するための、前記パイプライン回路の前記実行回路を含む実行ステージとは別個の回路をさらに有する、請求項
15から
20のいずれか一項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
[関連出願の相互参照]
本特許出願は、2020年4月20日に出願された、「データ依存脆弱分岐の機会主義的オーバーライドのためのISAベース自動負荷追跡」と題するインド仮特許出願第202041016867号の利益を主張する。当該出願は、参照により、その全体が本明細書に組み込まれる。
【0002】
本開示は、概して電子機器に関し、本開示の実施形態は、より具体的には、分岐命令の結果がロード命令の結果に依存する分岐命令についての予測をオーバーライドするためのハードウェアに関する。
【背景技術】
【0003】
プロセッサまたはプロセッサのセットは、例えば命令セットアーキテクチャ(ISA)といった命令セットからの命令を実行する。命令セットは、プログラミングに関連するコンピュータアーキテクチャの一部であり、概して、ネイティブデータタイプ、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込みおよび例外処理ならびに外部入力および出力(I/O)を含む。本明細書における命令という用語は、マクロ命令、例えば、実行のためにプロセッサに提供される命令、または、マイクロ命令、例えば、プロセッサのデコーダがマクロ命令をデコードした結果として得られる命令を指し得ることに留意されたい。
【図面の簡単な説明】
【0004】
本開示は、添付図面の図における限定ではなく例として示される。図内の同様の参照符号は、同様の要素を示す。
【0005】
【
図1】本開示の実施形態による、少なくとも1つの分岐予測器回路と少なくとも1つの分岐再誘導回路とを含むハードウェアプロセッサを示す。
【0006】
【
図2】本開示の実施形態による、パイプラインプロセッサ内の分岐予測器回路と分岐再誘導回路とを含むコンピュータシステムを示す。
【0007】
【
図3】本開示の実施形態による、ロード依存分岐テーブルエントリの例示的なフォーマットを示す。
【0008】
【
図4】本開示の実施形態による、1つの依存分岐命令の命令セットアーキテクチャ(ISA)拡張の例示的なフォーマットを示す。
【0009】
【
図5】本開示の実施形態による、2つの依存分岐命令の命令セットアーキテクチャ(ISA)拡張の例示的なフォーマットを示す。
【0010】
【
図6】本開示の実施形態による、分岐再誘導のためのロード依存分岐テーブル(LDBT)のポピュレートについてのフロー図を示す。
【0011】
【
図7】本開示の実施形態による、アーキテクチャレジスタファイル(ARF)拡張の例示的なフォーマットを示す。
【0012】
【
図8】本開示の実施形態による、分岐再誘導が有効化される場合にロード命令を受信することによりトリガされるフロー図を示す。
【0013】
【
図9】本開示の実施形態による、分岐再誘導が有効化される場合に分岐命令を受信することによりトリガされるフロー図を示す。
【0014】
【
図10】本開示の実施形態による、分岐再誘導が有効化される場合にロード命令のライトバックによりトリガされるフロー図を示す。
【0015】
【
図11】本開示の実施形態による分岐再誘導のフロー図を示す。
【0016】
【
図12A】本開示の実施形態による、汎用ベクトル向け命令フォーマットおよびそのクラスA命令テンプレートを示すブロック図である。
【0017】
【
図12B】本開示の実施形態による、汎用ベクトル向け命令フォーマットおよびそのクラスB命令テンプレートを示すブロック図である。
【0018】
【
図13A】本開示の実施形態による、
図12Aおよび
図12Bにおける汎用ベクトル向け命令フォーマットのフィールドを示すブロック図である。
【0019】
【
図13B】本開示の一実施形態による、フルオペコードフィールドを構成する
図13Aにおける特定ベクトル向け命令フォーマットのフィールドを示すブロック図である。
【0020】
【
図13C】本開示の一実施形態による、レジスタインデックスフィールドを構成する
図13Aにおける特定ベクトル向け命令フォーマットのフィールドを示すブロック図である。
【0021】
【
図13D】本開示の一実施形態による、拡張オペレーションフィールド1250を構成する
図13Aにおける特定ベクトル向け命令フォーマットのフィールドを示すブロック図である。
【0022】
【
図14】本開示の一実施形態によるレジスタアーキテクチャのブロック図である。
【0023】
【
図15A】本開示の実施形態による、例示的なインオーダパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。
【0024】
【
図15B】本開示の実施形態による、プロセッサに含まれるインオーダアーキテクチャコアの例示的な実施形態および例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。
【0025】
【
図16A】本開示の実施形態による、オンダイ相互接続ネットワークへの接続およびレベル2(L2)キャッシュのローカルサブセットと共に示す、シングルプロセッサコアのブロック図である。
【0026】
【
図16B】本開示の実施形態による、
図16Aにおけるプロセッサコアの一部の拡大図である。
【0027】
【
図17】本開示の実施形態による、1つよりも多くのコアを有してよく、統合メモリコントローラを有してよく、かつ、統合グラフィックスを有してよいプロセッサのブロック図である。
【0028】
【
図18】本開示の一実施形態によるシステムのブロック図である。
【0029】
【
図19】本開示の実施形態によるより具体的な例示的なシステムのブロック図である。
【0030】
【
図20】本開示の実施形態による第2のより具体的な例示的なシステムのブロック図を示す。
【0031】
【
図21】本開示の実施形態によるシステムオンチップ(SoC)のブロック図を示す。
【0032】
【
図22】本開示の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令へ変換するためのソフトウェア命令コンバータの使用を対比したブロック図である。
【発明を実施するための形態】
【0033】
以下の説明では、多数の具体的な詳細を記載する。しかしながら、本開示の実施形態は、これらの具体的な詳細がなくても実施され得ることが理解される。他の事例では、この説明の理解を曖昧にしないよう、周知の回路、構造および技術は、詳細に示されていない。
【0034】
本明細書における、「一実施形態」、「実施形態」、「例示的な実施形態」等への言及は、説明される実施形態が、特定の特徴、構造または特性を含んでよいが、全ての実施形態がそのような特定の特徴、構造または特性を必ずしも含まなくてよいことを示す。さらに、そのような文言は、必ずしも同じ実施形態を指すわけではない。さらに、特定の特徴、構造または特性をある実施形態に関連して説明する場合、明示的に説明するか否かにかかわらず、他の実施形態に関連してそのような特徴、構造または特性に影響を及ぼすことは当業者の知識の範囲内であると考えられる。
【0035】
(例えば、ハードウェア)プロセッサ(例えば、1または複数のコアを有する)は、命令(例えば、命令のスレッド)を実行して、例えば演算、ロジックまたは他の機能を実行するために、データを処理し得る。例えば、ソフトウェアは、オペレーションを要求してよく、ハードウェアプロセッサ(例えば、その1または複数のコア)は、要求に応答してオペレーションを実行してよい。特定の実施形態において、実行されるオペレーション(例えば、スレッド)は、1または複数の分岐オペレーション(例えば、分岐命令)を含む。
【0036】
特定の実施形態において、例えば分岐オペレーション(例えば、命令)は、条件無し(例えば、命令が実行される度に分岐が選択される)または条件付き(例えば、分岐について選択される方向が条件に依存する)のいずれかである。条件付き分岐(例えば、条件付きジャンプ)に続いて実行される命令は、分岐が依存する条件が解決されるまで確実には既知でない。ここで、条件が解決されるまで待機するのではなく、プロセッサの分岐予測器(例えば、分岐予測器回路)が、分岐予測を実行して(例えば、投機的に実行して)、分岐が選択されるかまたは選択されないかを予測してよく、および/または、(例えば、選択されると予測された場合)分岐についてのターゲット命令(例えば、ターゲットアドレス)を予測する。一実施形態において、分岐が選択されると予測された場合、プロセッサは、分岐の選択された方向(例えば、経路)についての命令、例えば、予測分岐ターゲットアドレスにおいて見つかった命令をフェッチして投機的に実行する。分岐予測に続いて実行される命令は、予測が正確であるかどうかをプロセッサがまだ決定していない特定の実施形態において投機的である。特定の実施形態において、プロセッサは、(例えば、実行、リタイアメントおよび/またはライトバックユニット/回路内の)パイプライン回路のバックエンドにおいて分岐命令を解決する。一実施形態において、分岐命令が選択されないことがプロセッサにより(例えば、バックエンドにより)決定された場合、選択された分岐命令の後のパイプライン回路内に現在存在している全ての命令(および、例えば、それらのデータ)がフラッシュされる(例えば、破棄される)。例えば、分岐ターゲット(例えば、分岐ターゲットの命令ポインタ)が(例えば、分岐)レジスタに格納される場合、特定の分岐命令が、間接分岐命令と称される。
【0037】
特定の(例えば、スーパースカラ)プロセッサ(例えば、プロセッサパイプラインのアウトオブオーダ(OoO)幅および深さを増したもの)において、分岐予測の精度は、分岐予測ミスから失われる作業を最小化する際に重要である。特定の実施形態において、分岐予測器(例えば、分岐予測器回路)は、分岐の過去の挙動から学習して、次の(例えば、到来する)分岐を予測する。しかしながら、データ依存分岐の場合、エントロピの値が高いと、履歴ベース分岐予測器からの不十分な予測精度をもたらし得る。
【0038】
本明細書における実施形態は、分岐の結果が(例えば、1つだけの)ロード命令の結果に依存する場合、分岐再誘導を利用して、分岐についての予測ミスのペナルティを低減する。一実施形態において、そのようなロード命令は、フィーダロード命令と称される。本明細書における特定の実施形態は、パイプラインプロセッサ(例えば、コア)内の分岐命令に対する(例えば、フィーダ)ロード命令の進行を追跡する。本明細書における特定の実施形態は、依存型分岐の情報を(例えば、パイプラインによる受信時に、例えば、デコード時に)伝達するための命令セットアーキテクチャ(ISA)の拡張を提供する。分岐がパイプラインの特定のステージ(例えば、パイプラインのアウトオブオーダ部分)に入る前にロードオペレーションの結果(例えば、ロード値)が利用可能である場合、分岐予測を算出するために、実際の結果が用いられる。特定の実施形態において、分岐予測器により与えられる元の予測(例えば、予測経路)がこのロード値ベースの予測(例えば、ロード値ベースの経路)と一致しない場合、パイプライン(例えば、パイプラインのフロントエンド)は、(例えば、正確な)経路へ再誘導され、パイプラインの早期の再誘導による予測ミスの回避または予測ミスペナルティの低減のいずれかをもたらす。本明細書における実施形態は、データ依存脆弱分岐の機会主義的再誘導のためのISAベース自動負荷追跡を利用する。
【0039】
本明細書における特定の実施形態は、(i)ISA拡張およびコンパイラヒントを含むか、または(ii)マイクロアーキテクチャ内で完全に行われる1または複数のマイクロアーキテクチャオプションを利用する。本明細書における特定の実施形態は、実際の(かつ、予測されていない)ロード値に基づいて分岐予測をオーバーライドすべくプロセッサのパイプライン内のロードを追跡するための新規のハードウェアに関する。例えば、(例えば、ベースライン)分岐予測器がそのような(例えば、単一の)ロードデータ依存分岐についての誤った予測を提供した場合、この早期のオーバーライドにより、(例えば、パイプラインのフラッシュに起因する)分岐予測ミスのペナルティが低減する。
【0040】
特定の実施形態は、命令セット(ISA)拡張を用いて、例えば、ISA拡張を用いることなく、またはデータ値ベースの予測を得るためにロード値を生成する格納命令を追跡することなく、純粋にハードウェア内のデータ依存分岐を検出して、プログラムの挙動をハードウェアへ伝達する。これらの実施形態のうちの特定のものは、格納命令ポインタ(IP)がロード命令ポインタ(IP)と強く相関している場合、よく機能し得る。しかしながら、格納ロード関係の予測に何らかの誤りがあると、不正確な分岐予測をもたらし得る。さらに、格納値を転送するためのロードIPの正確なダイナミックインスタンスの決定も課題である。これらの問題を回避するために、本明細書における特定の実施形態は、実際のロード値を用いることで、例えば、プログラムのコンパイラ分析を用いることなく、および/または予測を算出できるようロード命令および分岐命令の実行に遅延を導入することなく、予測値の代わりに分岐方向(例えば、複数の経路のうちの1つの経路)を評価する。本明細書における特定の実施形態は、分岐命令とロード命令との間の遅延がプログラムコード内に既に存在していることに依存する(例えば、プログラムコード内で連続していないか、またはそうでなければ、十分遠く離れている)プログラムの場合を対象にしている。一実施形態において、コンパイラが、ロード命令および/または分岐命令の一部としてのこの情報をエンコードし、次に、ロードの準備が整った場合、当該データを用い得る。機会主義的に、本明細書における特定の実施形態は、ロードが完了したこと(例えば、データがロードバッファにおいて受信されていること)をパイプライン内で識別し、当該値をその依存分岐に提供し得る。(例えば、コンパイラがそれらをそのようにマークしない)特定の実施形態において、プロセッサハードウェア(例えば、分岐再誘導回路)は、ロードが完了したことをパイプライン内で識別し、パイプラインフラッシュのペナルティを機会主義的に低減する。本明細書における特定の実施形態は、解決手段の必要な一部としてのコンパイラのサポートおよび/またはISAの変更(拡張)を必要としない。本明細書における特定の実施形態は、本明細書において述べるようにISAの変更を利用できる。
【0041】
ここで図面に戻ると、
図1は、本開示の実施形態による、少なくとも1つの分岐予測器回路104(1)-104(N)と少なくとも1つの(例えば、データロード依存)分岐再誘導回路102、102(1)-102(N)とを含むハードウェアプロセッサ100を示す。複数の分岐予測器回路が示されているが、単一の分岐予測器回路が、コア106(1)-106(N)についての分岐予測のために利用され得る。一実施形態において、分岐予測は、独自のローカル分岐予測器104(1)-104(N)を含む各コアで分配される。各ローカル分岐予測器104(1)-104(N)は、データ、例えば、プロセッサ100により実行される分岐命令の履歴を共有し得る。
【0042】
一実施形態において、Nは、2またはそれより大きい任意の整数である。ハードウェアプロセッサ100は、システムメモリ114に結合されて、例えば、コンピューティングシステム101を形成するものとして示されている。ハードウェアプロセッサ100のコア(例えば、各コア106(1)-106(N))は、例えばコアのパイプライン回路として、命令フェッチ回路、デコーダ実行回路またはリタイアメント回路(または、本明細書において述べる他のユニットもしくは回路)のいずれかを含み得る。
【0043】
示されるハードウェアプロセッサ100は、レジスタ108を含む。レジスタ108は、例えばメモリ114内のデータのアクセス(例えば、ロードまたは格納)に対してさらにまたは代替的に、(例えば、ロジックまたは演算)オペレーションを実行するための1または複数の汎用(例えば、データ)レジスタ110を含み得る。レジスタ108は、1または複数のアーキテクチャレジスタファイル112を含み得る。一実施形態において、プロセッサ100(例えば、その分岐予測器)は、命令、例えば分岐命令の前の実行に基づいて、分岐履歴データ(例えば、コンテキストデータ)を1または複数のレジスタ108へポピュレートする。別の実施形態において、分岐履歴は、システムメモリ114へ保存され得る。分岐履歴は、分岐命令のグローバル履歴(例えば、分岐命令に到達するよう、現在実行しているプログラムコードを通じて一連の分岐により選択される経路の履歴を含む)を分岐命令のアドレス識別子(例えば、分岐命令に関連する命令ポインタ値またはプログラムカウンタ値)と共に含み得る。特定の実施形態において、グローバル分岐(例えば、経路および/または方向)履歴は、方向情報を含む。方向情報は、例えば分岐命令の将来の事例についての予測を提供するために分岐命令の解決された方向がどれくらいの頻度で選択されたり選択されなかったりしているかを示す。特定の実施形態において、グローバル分岐(例えば、経路および/または方向)履歴は、経路情報を含む。経路情報は、特定の予測についての分岐命令に到達するための経路(例えば、実行された命令)、例えば、特定の予測についての分岐命令に到達するための実行された命令の適切なサブセットを示す。
【0044】
システムメモリ114は、以下のソフトウェア、つまり、オペレーティングシステム(OS)コード116またはアプリケーションコード118のうちの1つまたは複数(例えば、それらの任意の組み合わせ)を含み(例えば、格納し)得る。
【0045】
本明細書における図は全てのデータ通信接続を示していないことがあることに留意されたい。当業者であれば、これが図における特定の詳細を曖昧にするものではないことを理解するであろう。図における両方向矢印が、双方向通信を必要としないことがあること、例えば、(例えば、当該コンポーネントまたは当該デバイスとの間の)一方向通信を示し得ることに留意されたい。通信経路の任意のまたは全ての組み合わせが、本明細書における特定の実施形態において利用され得る。一実施形態において、プロセッサ100は、単一のコアを有する。特定の実施形態において、コンピューティングシステム101および/またはプロセッサ100は、例えば本明細書における任意の図を参照して後述するフィーチャおよび/またはコンポーネントのうちの1つまたは複数を含む。
【0046】
一例として、分岐予測器は、例えば、(例えば、条件付き)分岐命令(例えば、コード内の「IF」オペレーション)の実行予定インスタンスである、複数の経路のうちのどの経路が選択されるかについての予測を生成することにより、パイプラインプロセッサの機能を向上させる。
【0047】
プロセッサ(例えば、マイクロプロセッサ)は、性能を高めるために、パイプラインの使用を採用し得る。パイプラインプロセッサの特定の実施形態内で、命令の異なるステージを実行するための機能回路(例えば、フェッチ回路、デコード回路、実行回路、リタイアメント回路等)は、複数の命令に対して同時に動作してある並列度を実現することにより、非パイプラインプロセッサに対する性能の向上をもたらす。一実施形態において、命令フェッチユニット(例えば、回路)、命令デコーダ(例えば、デコードユニットまたはデコード回路)および命令実行ユニット(例えば、回路)が同時に動作する。特定の実施形態において、1クロックサイクル中に、命令実行ユニットは、第1の命令を実行し、一方、命令デコーダは、第2の命令をデコードし、フェッチユニットは、第3の命令をフェッチする。特定の実施形態において、次のクロックサイクル中に、実行ユニットは、新しくデコードされた命令を実行し、一方、命令デコーダは、新しくフェッチされた命令をデコードし、フェッチユニットは、さらに別の命令をフェッチする。この方式では、フェッチユニットまたはデコーダのいずれも、新しい命令を処理する前に、命令実行ユニットが最後の命令を実行するのを待機する必要がない。特定の実施形態において(例えば、ライトバックステージ中に)、実行された命令(例えば、分岐命令の後に1つの経路について行われた命令)の結果は、予測が正確だった場合には維持され(例えば、可視化され)、予測が不正確だった場合には破棄される(例えば、効果のロールバック)。
【0048】
本明細書における実施形態は、分岐再誘導回路(例えば、コア106(1)用の分岐再誘導回路102(1)およびコア106(N)用の分岐再誘導回路102(N))を利用して、不正確な予測を再誘導し、例えば、場合によっては分岐命令がコアのパイプラインへ入力された後だが(例えば、アウトオブオーダ)ステージへ送信される前に再誘導する。
【0049】
図2は、本開示の実施形態による、パイプラインプロセッサ210(例えば、パイプラインコア)内の分岐予測器回路220と分岐再誘導回路222とを含むコンピュータシステム200を示す。示されるコンピュータシステム200は、ネットワークデバイス201、入力/出力(I/O)回路203(例えば、キーボード)、ディスプレイ205およびシステムバス(例えば、相互接続)207をさらに含む。
【0050】
一実施形態において、
図1におけるプロセッサ100の各コアは、Nが任意の正の整数である場合のプロセッサコア210の事例である。示される実施形態において、単一のプロセッサの各々(例えば、各コア210)は、分岐予測器回路220および/または分岐再誘導回路222の事例を含む。分岐予測器回路220は、分岐再誘導回路222を内部に含み得る。分岐予測器回路220は、分岐ターゲットバッファ(BTB)、リターンスタックバッファ(RSB)、履歴テーブル、レジスタおよび/または他のデータストレージ構造を含み得る。これらのうちの1つまたは複数が単一の分岐予測器によってのみ用いられてよく、または、それらが維持されてよく、および/または複数の分岐予測器のうちの任意の分岐予測器によって用いられてよい。
【0051】
特定の実施形態において、分岐ターゲットバッファは、複数回実行された複数の分岐命令(例えば、コードのセクションの分岐命令)の各々に対応する予測ターゲット命令を(例えば、分岐予測器アレイに)格納する。特定の実施形態において、リターンスタックバッファは、(例えば、自らの戻りアドレスをスタックにプッシュする)任意のCALL命令の戻りアドレスを(例えば、後入れ先出し(LIFO)のスタックデータ構造で)格納する。特定の実施形態において、履歴テーブルは、プロセッサ210により実行されている複数のコード分岐の各々の履歴を格納する。特定の実施形態において、レジスタは、分岐グローバル経路履歴を格納するためのレジスタ、および/または分岐グローバル方向履歴を格納するためのレジスタを含む。
【0052】
一実施形態において、プロセッサ210は、分岐予測ステージ220と、フェッチステージ230と、デコードステージ240と、割り当てステージ250と、実行ステージ260と、ライトバック(例えば、リタイアメント)ステージ270とを含むパイプラインプロセッサコアである。プロセッサコア210内に示されるパイプラインステージの各々は、異なるレベルの回路を含み得る。代替的に、パイプラインステージは、より多くのステージへとサブ分割され得る。さらに、例えばプリフェッチステージ、命令ポインタ生成(IP生成)ステージ等の追加のパイプラインステージも含まれ得る。
【0053】
一実施形態において、パイプラインプロセッサ210は、プロセッサへ入力される次の命令を識別する命令ポインタ(IP)を(例えば、接続(例えば、ワイヤ)221を介して)受信する。例えば、IP生成ステージは、コア(例えば、論理コア)によりフェッチおよび実行されるプログラムシーケンス内の次の命令を識別する命令ポインタ(例えば、メモリアドレス)を選択し得る。一実施形態において、パイプラインプロセッサ210(例えば、IP生成ステージ)は、直近でフェッチされた命令のメモリアドレスを各クロックサイクルで予め定められた量X(例えば、1)だけインクリメントする。
【0054】
しかしながら、例外の場合、または分岐命令が選択された場合、パイプラインプロセッサ210(例えば、IP生成ステージ)は、プログラム順序において次の連続的な命令ではない命令を識別する命令ポインタを選択し得る。特定の実施形態において、パイプラインプロセッサ210(例えば、分岐予測ステージ220)は、例えば分岐ペナルティを減らすために条件付き分岐命令が選択されるかどうかを予測する。
【0055】
図2に示されるフェッチステージ230は、命令フェッチ回路234を含む。命令フェッチ回路234は、パイプラインプロセッサ内の上流から(例えば、分岐予測ステージ220から)命令ポインタを受け入れ、メモリ202または命令キャッシュ232からのそれぞれの命令をフェッチする。デコードステージ240は、デコーダ242と共にデコードオペレーションを実行して、命令をデコード済みの命令へと(例えば、マイクロオペレーションへと)デコードする。
図2に示される割り当てステージ250は、割り当て回路252と共に割り当てオペレーションを実行し、例えば、レジスタのリネーミングおよびディスパッチ(例えば、スケジューリング)を実行する。一実施形態において、ISAは、特定の(例えば、より多くの)数の物理レジスタにマッピングされる特定の数の論理レジスタ(例えば、
図2におけるレジスタ208のARFまたは
図1におけるARF112)をサポートする。例えば、ARFの各レジスタは、レジスタ208内の特定の物理レジスタファイル(PRF)を指し示す。一実施形態において、レジスタの論理識別子(例えば、「名前」)は、例えばレジスタの物理識別子(例えば、「名前」)にマッピングされ、これらのマッピングは更新され得る。一実施形態において、命令ディスパッチは、実行リソース、リオーダバッファ(ROB)内のエントリ、発行キュー、ストアバッファ274、ロードバッファ276等を含む、命令が用いる異なるリソースを予約することを含む。特定の実施形態において、リソースが利用可能ではない場合、対応する命令は、必要とされるリソースをいくつかの他の命令がリリースするまで、ストールされる。
図2に示される実行ステージ260は、デコード済みの命令により指定されるとおりに、オペレーションを実行回路262(例えば、アクセスレジスタ208、メモリ202、ストアバッファ274および/またはロードバッファ)と共に実行する。
図2に示されるライトバックステージは、実行された命令をライトバック回路272と共にリタイアさせる。例えば、実行された命令(例えば、条件付き分岐の後に選択される1つの方向についての命令)の結果は、分岐予測が正確だった場合には維持され(例えば、可視化され)、分岐予測が不正確だった場合には破棄される(例えば、効果のロールバック)。実行回路262による格納要求により、データがストアバッファ274に格納されてよく、例えば、次に、ストアバッファ274により、当該データが、最終格納デスティネーション、例えば、レジスタ208、メモリ202および/またはデータキャッシュ264内のデスティネーションに格納される。実行回路262によるロード要求により、データがロードバッファ276へロードされてよく、例えば、次に、ロードバッファ276により、当該データが、その要求されたストレージデスティネーション、例えば、レジスタ208、メモリ202および/またはデータキャッシュ264内のデスティネーションにロードされる。代替的な実施形態において、上述のパイプラインステージは、追加のオペレーションも含み得る。
【0056】
分岐予測器回路220(例えば、分岐予測器ユニット(BPU))は、パイプライン(例えば、フェッチステージ230)を提供し得る。命令は、分岐命令についての予測済みの選択された方向に対応する。特定の実施形態において、分岐予測器回路220は、1または複数のエントリを有するストレージを含むか、または当該ストレージにアクセスする。各エントリは、分岐命令を識別するデータを格納することが可能であり、対応するデータは、予測方向(例えば、選択された経路および/または選択されなかった経路)を識別する。特定の実施形態において、分岐予測器回路220は、分岐命令の分岐ターゲットを予測する。
【0057】
一実施形態において、分岐予測器回路220に格納される分岐命令は、コンパイラにより、実行されるコードから予め選択される。特定の実施形態において、
図2のメモリ202に格納されるものとして示されるコンパイラコード204は、実行された場合に高レベル言語で書き込まれたプログラムのソースコードを実行可能な機械コードへ変換するコードシーケンスを含む。一実施形態において、コンパイラコード204は、(例えば、選択された、または選択されなかった)方向、および/または分岐命令についてのターゲット命令(例えば、選択される可能性がある分岐命令(例えば、予め選択される分岐命令)の経路)を予測する追加の分岐予測器コード206をさらに含む。その後、分岐予測器回路220(例えば、そのBTB)は、方向予測で、および/または分岐命令についての予測ターゲット命令で更新される。
【0058】
示されるコア(例えば、その分岐予測器220)は、1または複数のレジスタ(例えば、レジスタ208)へのアクセスを含む。特定の実施形態において、レジスタ208は、汎用レジスタおよび/または分岐予測履歴レジスタのうちの1つまたは複数を含む。
【0059】
特定の実施形態において、分岐再誘導回路222は、分岐の結果が1または複数のモニタリングされたロード命令の結果に依存する場合に分岐についての予測ミスのペナルティを低減するために含まれる。一実施形態において、そのようなロード命令は、フィーダロード命令と称される。本明細書における特定の実施形態は、例えば本明細書において述べるように、パイプラインプロセッサ(例えば、コア)内の分岐命令に対する(例えば、フィーダ)ロード命令の進行を追跡する。特定の実施形態において、分岐再誘導回路は、例えば、分岐命令および/または結果が分岐命令に依存するロード命令を示すために、ロード依存分岐テーブル224をポピュレートおよび/または更新する。識別(例えば、検出)および/またはそのような命令のマークの例を後述する。
【0060】
特定の実施形態において、分岐再誘導は、以下の構成要素、つまり、(1)ロード(例えば、命令)データ依存(例えば、命令)分岐を検出するためのメカニズム、(2)データ依存分岐の結果を制御する値を供給する学習済みのロード命令(例えば、そのIP)を格納するためのロード依存分岐テーブル224、および(3)(ロード値テーブル226B内のロード値テーブル(LVT)の全部またはサブセットのコピーを含み得る)ロード値テーブル(LVT)226Aのうちの1つまたは複数の使用を含む。一実施形態において、ロード値テーブル226Bは、デコーダ242と割り当て回路252との間に位置する。別の実施形態において、ロード値テーブル226Bは、再誘導のチェックがモニタリングされたロードのライトバックで実行されるステージ内に位置する。特定の実施形態において、(例えば、ロード命令のためのフィールドまたは他のインジケーションにより示される)ロード命令は、ライトバックの準備が整った場合(例えば、ロード値がロードバッファ276に受信された場合)、ロード値をロード値テーブル(LVT)(例えば、226Aおよび/または226B)に提供する。特定の実施形態において、分岐が特定のステージに入る前に(例えば、限定されるものではないが、例えば予約ステーション、リオーダバッファ等のパイプラインのOoO部分の前に)ロード値が利用可能である場合、ロード値に基づいて再誘導が行われる。特定の実施形態において、ロード命令からの結果(例えば、ロード値)は、最終格納デスティネーションとは別個の(例えば、かつ、ライトバックステージにおけるロードバッファとは別個の)ロード値テーブルから読み取られる。
【0061】
特定の実施形態において、分岐再誘導回路222は、本明細書において開示される可能な再誘導についてモニタリングされる分岐命令と共に、それぞれのエントリをロード依存分岐テーブル224にポピュレートする。一実施形態において、分岐再誘導回路222は、モニタリングされる分岐命令を識別するエントリを、例えば、当該分岐命令についての命令ポインタ(IP)をエントリに含めることにより、および/またはそのフィーダロード命令についての命令ポインタ(IP)をエントリに含めることにより、ロード依存分岐テーブル224に追加する。一実施形態において、ロード依存分岐テーブルエントリのフォーマットは、
図3におけるフォーマット300である。
【0062】
特定の実施形態において、フィーダロード命令依存性を有する分岐命令が、コンパイラにより識別される。特定の実施形態において、フィーダロード命令依存性を有する分岐命令が、レジスタ(例えば、ARF)を分析することにより識別される。
【0063】
一例として、ロード命令が、プロセッサ210の(例えば、パイプライン)に入力され(例えば、分岐予測器回路および/または命令フェッチステージ230に入力され)、(例えば、当該ロード命令のIPが)ロード依存分岐テーブル224内でチェックされ、モニタリングされた分岐命令に対応しているかどうかが決定される。そうでない場合、特定の実施形態において、プロセッサ210のフローは、これらのステージを通して続く。「はい」である場合、特定の実施形態において、分岐再誘導回路222は、その結果物(例えば、結果)をモニタリングするために、ロード命令をマークする。一実施形態において、分岐再誘導回路222は、エントリをロード値テーブル(例えば、226Aおよび/または226B)に割り当て、受信時に(例えば、ロードバッファ276内での受信時に)、ロード命令の結果物がロード値テーブル内のエントリに格納されるようにする。この例では、分岐命令が、(例えば、投機的に)プロセッサ210の(例えば、パイプライン)に入力され(例えば、分岐予測器回路に入力され)、(例えば、当該分岐命令のIPが)ロード依存分岐テーブル224内でチェックされ、対応するモニタリングされたロード命令を有しているかどうかが決定される。そうでない場合、特定の実施形態において、プロセッサ210のフローは、(例えば、投機的実行に従って)これらのステージを通して続く。「はい」である場合、特定の実施形態において、分岐再誘導回路222は、(例えば、接続(例えば、ワイヤ)223を介して)1回または複数回のチェックを行わせて、ロード命令の結果物(例えば、結果)の準備が現在整っているかどうかを確かめる(例えば、当該分岐命令についてのパイプライン処理の最初のステージ中に準備が整っていない場合)。一実施形態において、ロードデータがロードバッファ276に受信されることにより、ロードデータは、(例えば、特定のロード値テーブル(LVT)インデックスへのロードIPのマッピングに基づいて)(例えば、ロード命令のライトバックステージ270から)ロード値テーブル内の対応するエントリへ送信される。例えば、ロード値は、接続(例えば、ワイヤ225)を介してロードバッファ276からLVT226Aへ、および/または、接続(例えば、ワイヤ227)を介してロードバッファ276からLVT226Bへ送信される。一実施形態において、分岐再誘導回路222は、(例えば、そのモニタリングされたフィーダロード結果がロード値テーブルに受信されると)ロード命令からの結果の(例えば、デコーダ242での分岐命令のデコードと実行回路262での分岐命令の実行との間の)比較を行わせ、予測経路がロード命令からの結果に基づく(例えば、実際の)経路とは異なる場合、分岐命令の実行を当該経路へ再誘導し、および/または、ロード命令からの結果に基づく経路についての分岐命令を(例えば、分岐命令の当該インスタンスの実行をオーバーライドすることなく)実行させる。特定の実施形態において、ロード命令は、その結果について用いられるロード値テーブル(LVT)エントリの識別子(例えば、インデックス値)を含む。例えば、当該識別子は、ロード依存分岐テーブル224内のエントリに格納される。特定の実施形態において、分岐命令は、そのフィーダロードの結果について用いられるロード値テーブル(LVT)エントリに識別子(例えば、インデックス値)を含む。例えば、当該識別子は、パイプラインを通じて当該分岐命令と共に搬送される(例えば、可能な再誘導がチェックされる最後のポイント(例えば、ステージ)まで搬送される)。特定の実施形態において、例えば、実行ステージ260の前に、割り当てステージ250が実行リソースを割り当てる前に、実行のスケジューリングの前に、可能な再誘導が(例えば、1回または複数回)チェックされる。特定の実施形態において、再誘導についての最終の(例えば、唯一の)チェックが、(例えば、分岐命令の割り当てまたは実行スケジューリングの前であるが)フェッチステージ230またはデコードステージ240の後に実行される。上記は例に過ぎず、パイプライン内の他のポイント、例えば、実行ステージ260またはライトバックステージ270の前のポイントが選択され得ることを理解されたい。特定の実施形態において、回路(例えば、演算ロジックユニット(ALU)228)は、予測経路がロード命令からの結果に基づく経路とは異なる場合を決定するためのオペレーション(例えば、「よりも大きい」比較演算、「よりも少ない」比較演算、「に等しい」比較演算等)を実行して、例えば、実行ステージ260のリソースの使用を回避する。分岐再誘導回路222は、例えば、予測経路がロード命令からの結果に基づく経路とは異なる場合、誤って予測された経路についての任意の(例えば、投機的な)データのフラッシュを行わせ得る。分岐再誘導回路222は、ロード命令からの結果に基づく実際の経路についての分岐命令の実行を(例えば、分岐命令を再誘導すると共に結果をパイプラインの開始ステージ(例えば、フロントエンド)へ戻すことを介して)行わせ得る。
図3は、本開示の実施形態による、ロード依存分岐テーブルエントリの例示的なフォーマット300を示す。示されるフォーマット300は、(例えば、フィーダロード命令により生じる誤って予測された経路を再誘導するために)モニタリングされている分岐命令のIP302と、この分岐命令についての予測ミスの(任意選択的な)回数304と、(任意選択的な)信頼性スコア306(例えば、304および306は、予測のための置換スキームにおいて用いられる)と、フィーダロードIP308(および、例えば、ロード値と(例えば、一定の)値との比較のためのオペレーションおよび値の識別などの比較情報)と、ロード命令の結果が(例えば、一時的に)格納される対応するロード値テーブル(LVT)の要素を識別するためのロード値テーブル(LVT)インデックス310とを(例えば、分岐再誘導回路により)格納するための1または複数のフィールドを含む。例えば、分岐命令が「IF」(a>100)の擬似コードに対応している場合、フィーダロード命令は、「a」の値を(例えば、メモリから)ロードし、比較フィールドは、「よりも大きい」比較というインジケーションおよび「100」という値を格納して、(例えば、ロード値テーブル(LVT)226Aまたは226Bから供給される)「a」という値と「100」との比較を(例えば、ALU228に)行わせ、ロード命令からの結果「a」に基づく、分岐命令についての実際の経路を決定し得る。
【0064】
次に、ロードデータ依存分岐を検出するための例示的なスキームを説明する。以下の擬似コードの例について、以下で言及する(do_workは、任意のオペレーションであり得る)。
【数1】
【0065】
この例は、ロードデータ依存分岐B1およびB2を含む。これらの両方ともL1(「a」)単一のロード値を用いて結果を算出し、ロードデータ依存分岐B3は、2つのロードからのデータを用いて結果を算出する。分岐B3は、2つのロード値を用いて分岐結果を算出すると共に、単一の分岐命令について複数のロードを追跡するという複雑さを回避するために本明細書における特定の実施形態によってはサポートされないが、他の実施形態が、本明細書における本開示に従って、単一の分岐命令について複数のロードを追跡することを理解すべきである。
【0066】
上述のように、ロードデータ依存分岐の識別(例えば、かつ、したがって、ロード依存分岐テーブル224のポピュレーション)は、(i)コンパイラおよび命令セットアーキテクチャ(ISA)拡張または(ii)ハードウェアベース実装を介したものであり得る。
[コンパイラ/ISA拡張を介した例示的な実装]
【0067】
特定の実施形態において、(例えば、データフローグラフを用いた)コンパイラと、本明細書において述べるISA拡張とによってロード依存分岐検出が実行され、ハードウェア内でのロードデータ依存分岐の特別な処理が可能になる。一実施形態において、ロード命令がマークされ、分岐IP(例えば、プログラムカウンタ(PC))(または分岐IP自体)に対するオフセットが、拡張ビットとしてロード命令に追加される(例えば、1または複数の他のフィールドを含み、例えば、限定されはしないが、
図12Aから
図13Dにおいて後述するものを含む)。
【0068】
本明細書における特定の実施形態は、ISA拡張を用いて(例えば、かつ、提供して)、上述のL1->B1依存およびL1->B2依存を示す(例えば、格納する)。上述の擬似コードの例では、本明細書における特定の実施形態は、コンパイラ(例えば、データフローグラフ)を用いて、分岐B1およびB2がロードL1の値(例えば、他のオペランドは即値である)に直接依存していることを検出する(例えば、決定する)。
図4は、本開示の実施形態による、1つの依存分岐命令の命令セットアーキテクチャ(ISA)拡張の例示的なフォーマット400を示す。示されるフォーマット400は、(任意選択的な)ロードオペレーション拡張402(例えば、分岐命令が1つのロードのみに依存することを示す)と、ロード命令により供給される分岐命令を識別するための分岐IP404と、例えば、ロードデータの結果(例えば、上述の[B1]if(a>100)の例における「よりも大きい」)に対して実行されるオペレーションを示すための1または複数のオペレーション406、408とを(例えば、コンパイラにより)格納するための1または複数のフィールドを含む。第1のオペレーションインジケーション406は、「よりも大きい」またはよりも少ないであり得る。第2のオペレーションインジケーション408は、「に等しい」であり得る。上述の例において、(例えば、「2」で除算された場合の残りを見つけるために)B1はロード値と「100」との直接の比較を用い、B2はモジュロオペレーション(%)を用いる。特定の実施形態において、この情報は、フィールド406(例えば、および408)としてISAロード命令拡張に追加され、ロード値から分岐結果を取得するための単純な(例えば、
図2におけるALU228を介した)(例えば、フロントエンドにおける)算出が可能になる。
【0069】
フォーマット400のISA拡張からのデータは、ロード依存分岐テーブル(LDBT)エントリを、例えばコンパイラにより生成される出力(例えば、機械コード)から当該命令を読み取った時にポピュレートするために用いられ得る。
【0070】
上述の擬似コードの例では、本明細書における特定の実施形態は、コンパイラ(例えば、データフローグラフ)を用いて、分岐B3が2つのロード値を用いて分岐結果を算出していることを検出する(例えば、決定する)。
図5は、本開示の実施形態による、2つの依存分岐命令の命令セットアーキテクチャ(ISA)拡張の例示的なフォーマット500を示す。示されるフォーマット500は、(任意選択的な)ロードオペレーション拡張502(例えば、2つの分岐命令が1つのロードのみに依存していることを示す)と、ロード命令により供給される第1の分岐命令を識別するための第1の分岐IP504と、1または複数のオペレーション506、508(例えば、第1の分岐命令についてのロードデータの結果(例えば、上述の[B1]if(a>100)の例における「よりも大きい」)に対して実行されるオペレーションを示すために)と、ロード命令により供給される第2の分岐命令を識別するための第2の分岐IP510と、1または複数のオペレーション512、514(例えば、第2の分岐命令についてのロードデータの結果(例えば、上述の[B2]if(a%2==0)の例における「モジュロ」および「に等しい」)に対して実行されるオペレーションを示すために)とを(例えば、コンパイラにより)格納するための1または複数のフィールドを含む。特定の実施形態において、このオペレーション情報は、フィールド506および512(例えば、および508および/または514)としてISAロード命令拡張に追加され、ロード値から分岐結果を取得するための単純な(例えば、
図2におけるALU228を介した)(例えば、フロントエンドにおける)算出が可能になる。
【0071】
フォーマット500のISA拡張からのデータは、ロード依存分岐テーブル(LDBT)エントリ(または複数のエントリ)を、例えばコンパイラにより生成される出力(例えば、機械コード)から当該命令を読み取った時にポピュレートするために用いられ得る。
【0072】
図6は、本開示の実施形態による、分岐再誘導のためのロード依存分岐テーブル(LDBT)の(例えば、フィーダロード命令の検出時(デコード中など)の)ポピュレートについてのフロー
図600を示す。フロー600は、命令のロードタイプを検出し(例えば、ロード命令および/またはそのIPをデコードし)(602)、当該ロード命令が分岐再誘導についてのISA拡張(例えば、ロード依存分岐テーブル(LDBT)エントリをポピュレートするために用いられるISA拡張)を含むかどうかをチェックし(604)、「いいえ」である場合、この特定のフローのあらゆるさらなる分岐再誘導動作を終了し(608)、「はい」である場合、ISA拡張からのデータ、例えば、(例えば、
図3におけるフィールド308内の)ロードIP、(例えば、
図3におけるフィールド302内の)分岐IP、(例えば、
図3におけるフィールド308内の)比較(例えば、オペレーション)情報等とのロード依存分岐テーブルのエントリのポピュレーションを生じさせ(606)、次に、この特定のフローのあらゆるさらなる分岐再誘導動作を終了する(608)ことを含む。これにより、ロード値テーブル(LVT)エントリと、(例えば、
図3におけるフィールド310内の)ロード依存分岐テーブル(LDBT)エントリに挿入されるそのそれぞれのインデックスとの割り当ても行わせ得る。
【0073】
上述の例は、ISA拡張の例示的な設計と、
図2におけるフィーダロード命令の検出(例えば、デコード)時に取られる動作についてのフロー図とを示す。特定の実施形態において、ISA拡張は、(i)ロード値に対して実行されたオペレーションをエンコードして分岐結果を算出し、(ii)ロード命令が複数の分岐を供給する場合、複数の分岐オフセットをキャプチャする。そのような異なるロードオペコード拡張(LD OP EXT1 402およびLD OP EXT2 502)の有効化が用いられ得る。
【0074】
特定の実施形態において、この情報の1または複数のフィールドが拡張としてロード命令に追加されるので、ロード命令がパイプラインにより受信された(例えば、デコードされた)場合、プロセッサ(例えば、分岐再誘導回路)は、例えば拡張ビットからのオペレーション情報(例えば、
図3におけるLBTエントリ308内のCMP情報と称される)と共に、ロードIPおよびその依存分岐をLBTに追加する。
[ハードウェアベース実装を介した例示的な実装]
【0075】
特定の実施形態において、ロード依存分岐検出がハードウェア内で(例えば、コンパイラまたは追加されたISA拡張に依存することなく)実行され、ハードウェア内でのロードデータ依存分岐の特別な処理が可能になる。特定の実施形態において、ロード依存分岐(例えば、上述の擬似コードの例におけるL1->B1およびL1->B2ロードデータ依存)を検出するために、純粋にハードウェアベースのメカニズムが用いられる。ハードウェア内のロードデータ依存分岐を検出するための一実施形態は、シャドウアーキテクチャレジスタファイル(ARF)またはARFエントリの拡張を通じてデータフローを追跡することを伴う。一実施形態において、ハードウェア(例えば、分岐再誘導回路)は、1つのロード値のみにより制御される分岐を検出する。例えば、複数のロードが(例えば、レジスタ)値を供給していることが追跡中に分かった場合、ハードウェアは、(例えば、エントリを無効化することにより)当該依存チェーンの追跡を停止する。同様に、複数のレジスタオペレーションも、依存チェーンから除外され得る(例えば、かつ、即値オペランドで実行されるオペレーションのみが許可される)。
【0076】
一実施形態において、例えば、追跡されるロードと分岐命令との間のデータ値に対してオペレーションが実行されるので、ハードウェア(例えば、分岐再誘導回路)は、ロード値から分岐結果を算出する。特定の実施形態において、ひとたびロード依存分岐が検出されると、そのフィーダロードIPおよびオペレーションシーケンスがロード依存分岐テーブル(LDBT)テーブルに記録される。
図7は、本開示の実施形態による、アーキテクチャレジスタファイル(ARF)拡張の例示的なフォーマット700を示す。示されるフォーマット700は、レジスタ702の識別子と、レジスタにアクセスしているロード704(例えば、当該ロード命令のIP)と、1または複数のオペレーション706(0), 706(1),…, 706(N)(例えば、当該オペレーションを示すために)とを(例えば、分岐再誘導回路により)格納するための1または複数のフィールドを含む。一実施形態において、1または複数のオペレーション706(0)-706(N)は、ロード値がいつ利用可能であるか、例えば、ALU(228)がどのオペレーションを実行して(例えば、デフォルト)分岐予測をオーバーライドするための分岐方向を算出するかを示す。例えば、1または複数のオペレーション706(0)-706(N)は、ロードと分岐との間の依存命令チェーンである。例えば、ロードがOP0(R1+5->R2)、OP1(R2×7->R3)のオペレーションによりR1を生成した場合において、R3>20のときは、ジャンプする。
【0077】
本明細書において開示されるパイプラインを通じた(例えば、LDBTおよびLVTを介した)ロード(例えば、およびそのロード値テーブル(LVT)インデックス)の追跡は、上述のロード依存分岐を検出する方法の両方のカテゴリに適用可能である。
図8から
図11は、分岐再誘導のために用いられ得る様々なフロー図を説明している。フローについてのオペレーション(または本明細書において説明される他の処理またはそれらの変形および/または組み合わせいくつかまたは全ては、実行可能命令で構成される1または複数のコンピュータシステムの制御下で実行されてよく、ハードウェアまたはその組み合わせにより1または複数のプロセッサ上で集合的に実行されるコード(例えば、実行可能命令、1または複数のコンピュータプログラムまたは1または複数のアプリケーション)として実装される。コードは、例えば、1または複数のプロセッサにより実行可能な命令を含むコンピュータプログラムの形式で、コンピュータ可読記憶媒体に格納され得る。コンピュータ可読記憶媒体は、非一時的なものである。いくつかの実施形態において、これらのオペレーションのうちの1つまたは複数(または全て)は、他の図の分岐再誘導回路により実行される。
【0078】
図8は、本開示の実施形態による、分岐再誘導が有効化される場合にロード命令を受信(例えば、フェッチ)することによりトリガされるフロー
図800を示す。示されるフロー800は、命令のロードタイプを検出すること(例えば、ロード命令および/またはそのIPをデコードすること)(802)と、ロード命令(例えば、IP)がロード依存分岐テーブル(LDBT)内のエントリに存在するかどうかをチェックすること(804)と、「いいえ」である場合、この特定のフローのあらゆるさらなる分岐再誘導動作を終了すること(808)と、「はい」である場合、新しいロード値テーブル(LVT)エントリを割り当てることにより、当該ロード値テーブル(LVT))エントリの識別子(例えば、インデックス)がLDBTテーブル内の対応するエントリ内に(例えば、
図3におけるフィールド310に)(例えば、各ロードイタレーションにより、対応するLDBTエントリ内で新しいLVTインデックスが用いられるように)格納されるようにすること(806)と、次に、この特定のフローのあらゆるさらなる分岐再誘導動作を終了すること(808)とを含む。
【0079】
図9は、本開示の実施形態による、分岐再誘導が有効化される場合に分岐命令を受信(例えば、フェッチ)することによりトリガされるフロー
図900を示す。示されるフロー900は、命令の分岐タイプを検出すること(例えば、分岐命令および/またはそのIPをデコードすること、または、プロセッサのパイプライン内の予測経路を選択した分岐命令を検出すること)(902)と、当該分岐命令(例えば、IP)がロード依存分岐テーブル(LDBT)内のエントリに(例えば、
図3におけるフィールド302に)存在するかどうかをチェックすること(904)と、「いいえ」である場合、この特定のフローのあらゆるさらなる分岐再誘導動作を終了すること(916)と、「はい」である場合、ロード依存分岐テーブル(LDBT)内のエントリ内のロード値テーブル(LVT)インデックスにより識別されるフィーダデータについてロード値テーブル(LVT)内でルックアップを実行すること(906)と、次に、LVTエントリが更新されている(例えば、現在のロードデータを有している)かどうかをチェックすること(908)と、「いいえ」である場合、この特定のフローのあらゆるさらなる分岐再誘導動作を終了すること(916)と、「はい」である場合、ロード命令からのデータ(例えば、現在のロードデータ)に基づく分岐経路を実行すること(910)と、次に、データに基づく分岐経路が、予測分岐経路と一致しているかどうかをチェックすること(912)と、そうでない場合、この特定のフローのあらゆるさらなる分岐再誘導動作を終了すること(916)と、「はい」である場合、再誘導インジケーションおよび/またはフラッシュインジケーションを(例えば、パイプラインのフェッチステージへ)送信することにより、データ(例えば、現在のロードデータ)に基づく経路についての(例えば、正確な)分岐命令を実行させること(例えば、かつ、予測に基づく(例えば、不正確な)経路についての分岐命令の実行をキャンセルすること)(914)と、次に、この特定のフローのあらゆるさらなる分岐再誘導動作を(例えば、ロードデータを現在は古くなっているものとしてマークすることにより)終了すること(916)とを含む。
【0080】
図10は、本開示の実施形態による、分岐再誘導が有効化される場合にロード命令のライトバックによりトリガされるフロー
図1000を示す。示されるフロー1000は、命令のロードタイプのライトバックを検出すること(1002)と、当該ロード命令(例えば、IP)がロード依存分岐テーブル(LDBT)内のエントリに存在する(例えば、当該ロードIPのLDBTエントリが有効なLVTインデックスを含む)かどうかをチェックすること(1004)と、「いいえ」である場合、この特定のフローのあらゆるさらなる分岐再誘導動作を終了すること(1010)と、「はい」である場合、ロード命令のライトバックからの結果データを(例えば、LVTインデックスと共に)LVT(または複数のLVT)へ送信すること(1006)と、当該LVTエントリを結果データで更新すること(1008)と、次に、この特定のフローのあらゆるさらなる分岐再誘導動作を終了すること(1010)とを含む。一実施形態において、(例えば、
図8における806)およびその後にLVTインデックスがロード命令に割り当てられ、ロードがライトバックを行っている場合、(例えば、有効な)LVTインデックスを有するロード命令のみが、(例えば、
図10における1006において)データ値をLVTへ送信する。
【0081】
図11は、本開示の実施形態による分岐再誘導についてのフロー
図1100を示す。示されるフロー1100は、プロセッサの分岐予測器回路で分岐命令についての予測経路を生成すること(1102)と、プロセッサの分岐再誘導回路が、ロード命令からの結果に依存する分岐命令について、命令をデコード済みの命令へとデコードするためのデコーダとデコード済みの命令を実行するための実行回路とを備えるプロセッサのパイプライン回路により受信された命令がロード命令であるかどうかをチェックすること(1104)と、パイプライン回路により受信された命令がロード命令である場合、分岐再誘導回路がデコーダでの分岐命令のデコードと実行回路での分岐命令の実行との間のロード命令からの結果のライトバックをチェックすること(1106)と、予測経路がロード命令からの結果に基づく経路とは異なる場合、分岐再誘導回路がパイプライン回路(例えば、パイプライン回路のフロントエンド)内の分岐命令をある経路へ再誘導すること(1108)と、予測経路がロード命令からの結果に基づく実際の経路とは異なる場合、(任意選択で)実行回路がロード命令からの結果に基づく実際の経路についての分岐命令を実行すること(1110)(例えば、分岐命令は、パイプライン回路の下へ続き、パイプライン回路のバックエンド内の実行回路において実行される)とを含む。
【0082】
特定の実施形態において、命令がパイプライン(例えば、パイプラインのフロントエンド)に入った場合、そのIPがLDBT内のロードIPに対して一致しているかがチェックされ、一致があるときは、ロード命令は、LVTインデックスでマークされる。LVTインデックスは、ラウンドロビン方式で、または利用可能性に基づいて選択され得る。特定の実施形態において、割り当てられたLVTインデックスも、対応するエントリ内のLDBTに格納される。特定の実施形態において、ロード命令がメモリパイプラインからの(例えば、かつ、ロードバッファへの)ロード値を得た場合、当該値は、LVTテーブルのLVTインデックススロットにおいて(例えば、フロントエンド内で)更新される。
【0083】
特定の実施形態において、分岐命令フェッチ時に、分岐IPがLBT内で検索され、ヒットがある場合、LVTインデックスは、例えば当該テーブルから読み取られ、次に、LVTは、ロード値についてLVTインデックスにおいてルックアップされる。特定の実施形態において、ロード命令がLVTに値をライトバックした場合、ロード値および分岐比較条件に基づく算出により、例えば予想分岐結果が生成され、この結果が、分岐予測器が予測したものとは異なるときは、再誘導が行われ、フロントエンド(例えば、
図15Bにおけるフロントエンドユニット1530)が再誘導される。したがって、特定の実施形態において、再誘導が、実際のロードデータ値を有する分岐を解決する。本明細書における特定の実施形態は、パイプライン(例えば、パイプラインのOoOセクション)内での分岐の実行を排除しないが、この精度が高いことに起因して、フロントエンドの後半部分内での再誘導が可能になる。これによりカバレッジが増加する。なぜなら、ロードおよび分岐がプログラムフローに(例えば、わずかに)近いか、または、例えばアウトオブオーダ効果またはキャッシュミスに起因して、ロードのライトバックが(例えば、少し)遅延した場合でも、再誘導が可能だからである。例えば、分岐予測ミスのペナルティ(例えば、時間の長さ)(例えば、時間再誘導におけるBPポイントおよび/または時間再誘導における割り当てポイント)対フロントエンドでの再誘導のペナルティが前者よりも著しく低い場合、この後者の再誘導は、分岐の実行よりも前にフロントエンドでの再誘導を行うことにより、予測ミスのペナルティを低減する。本明細書における特定の実施形態は、ロード値ベース予測(例えば、ロード値に基づくのでより正確であることが知られている)での(例えば、デフォルト)分岐予測のオーバーライドに重点を置いている。本明細書における特定の実施形態は、例えばパイプライン(例えば、パイプラインのバックエンド)内での分岐の実行を排除しない。なぜなら、これは正確さのために必要とされるからである。例えば、ストレージに保存するために、分岐IPまたはロードIPを一致させるよう、より少ない数のタグビットがLDBT内で用いられ得ることにより、エイリアシングヒットおよび偽ビットがもたらされ得る。それらの実施形態のうちの特定のものは、ヒットがあるので、予測のオーバーライドを依然として実行する。例えば、当該オーバーライドは、エイリアシングがLDBT内で許可されるいくつかの実装において正確ではないことがある。
【0084】
特定の実施形態において、分岐がパイプライン(例えば、パイプラインのOoOセクション)の特定のステージに入る前に、ロード値が利用可能であるかどうか、および、分岐結果が再誘導について算出され得るかどうかを確かめるために、LVTは、(例えば、再び)ルックアップされ得る。より速いルックアップを可能にするために、複数のLVTが(例えば、一方がフロントエンドで、他方が割り当てステージの直前で)維持され得る。特定の実施形態において、LVTインデックスは、パイプラインを通じて、例えば最終チェックポイント(例えば、上述の例における割り当てステージ)まで、分岐命令と共に送信される(例えば、搬送される)。特定の実施形態において、割り当てステージ(例えば、
図2におけるLVT226B)において維持されるLVTは、オーバーライド結果のみを維持するという点で、最小である。特定の実施形態において、対応するLVTエントリがロードのライトバック時に更新されている場合、オーバーライド結果は、算出され、このLVTへ送信され得る。設計上の選択として、(例えば、
図2におけるALU228による)算出は、分岐予測時に、またはロード値が利用可能になると速やかに、ジャストインタイムで行われ得る。特定の実施形態において、LVTを用いて、当該結果が算出され、LDBTからLVTへ送信されることで、例えば、算出回路(例えば、
図2におけるALU228)の複製オーバーヘッドが回避される。
【0085】
上記で用いられ得る例示的なアーキテクチャ、システム等を以下で詳述する。
【0086】
開示される技術のうちの少なくともいくつかの実施形態は、以下の例に照らして説明できる。
[例1]
複数の命令を複数のデコード済みの命令へとデコードするためのデコーダと上記複数のデコード済みの命令を実行するための実行回路とを有するパイプライン回路と、
分岐命令の予測経路を生成するための分岐予測器回路と、
ロード命令からの結果に依存する上記分岐命令について、上記パイプライン回路により受信された命令が上記ロード命令であるかどうかをチェックし、上記パイプライン回路により受信された上記命令が上記ロード命令である場合、上記デコーダでの上記分岐命令のデコードと上記実行回路での上記分岐命令の実行との間の上記ロード命令からの上記結果のライトバックをチェックし、上記予測経路が上記ロード命令からの上記結果に基づく経路とは異なる場合、上記パイプライン回路内の上記分岐命令を上記経路へ再誘導し、上記ロード命令からの上記結果に基づく上記経路についての上記分岐命令の実行を生じさせるための分岐再誘導回路と
を備えるプロセッサ。
[例2]
上記分岐再誘導回路は、上記結果の最終格納デスティネーションとは別個であるロード値テーブル内の上記結果の上記ライトバックをチェックする、例1に記載のプロセッサ。
[例3]
上記分岐再誘導回路は、上記パイプライン回路により受信された上記命令が上記ロード命令である場合、上記ロード命令の上記結果の上記ロード値テーブル内のエントリのインデックス値を割り当て、上記インデックス値が上記分岐命令のフィールドとして上記パイプライン回路へ送信されるようにする、例2に記載のプロセッサ。
[例4]
上記分岐再誘導回路は、上記パイプライン回路により受信された上記命令が上記ロード命令である場合、ロード依存分岐テーブル内の上記分岐命令のエントリを上記インデックス値で更新する、例3に記載のプロセッサ。
[例5]
上記分岐再誘導回路は、上記ロード命令からの上記結果にも依存する第2の分岐命令のインデックス値を割り当てる、例3に記載のプロセッサ。
[例6]
上記分岐命令の上記再誘導は、上記分岐命令の実行を上記実行回路に割り当てる上記パイプライン回路の割り当てステージにおいて生じる、例1に記載のプロセッサ。
[例7]
上記分岐命令の上記再誘導は、上記パイプライン回路から上記割り当てステージまでの上記予測経路についての上記分岐命令のデータのフラッシュを含む、例6に記載のプロセッサ。
[例8]
1または複数のオペレーションを実行して、上記予測経路が上記ロード命令からの上記結果に基づく上記経路とは異なるかどうかを決定するための、上記パイプライン回路の上記実行回路を含む実行ステージとは別個の回路をさらに備える、例1に記載のプロセッサ。
[例9]
プロセッサの分岐予測器回路で分岐命令の予測経路を生成する段階と、
上記プロセッサの分岐再誘導回路が、ロード命令からの結果に依存する上記分岐命令について、複数の命令を複数のデコード済みの命令へとデコードするためのデコーダと上記複数のデコード済みの命令を実行するための実行回路とを含む上記プロセッサのパイプライン回路により受信された命令が上記ロード命令であるかどうかをチェックする段階と、
上記パイプライン回路により受信された上記命令が上記ロード命令である場合、上記分岐再誘導回路が上記デコーダでの上記分岐命令のデコードと上記実行回路での上記分岐命令の実行との間の上記ロード命令からの上記結果のライトバックをチェックする段階と、
上記予測経路が上記ロード命令からの上記結果に基づく経路とは異なる場合、上記分岐再誘導回路が上記パイプライン回路内の上記分岐命令を上記経路へ再誘導する段階と、
上記予測経路が上記ロード命令からの上記結果に基づく上記経路とは異なる場合、上記実行回路が上記ロード命令からの上記結果に基づく上記経路についての上記分岐命令を実行する段階と
を備える方法。
[例10]
上記ライトバックをチェックする上記段階は、上記結果の最終格納デスティネーションとは別個であるロード値テーブル内の上記結果の上記ライトバックをチェックする段階を有する、例9に記載の方法。
[例11]
上記パイプライン回路により受信された上記命令が上記ロード命令である場合、上記分岐再誘導回路が上記ロード命令の上記結果の上記ロード値テーブル内のエントリのインデックス値を割り当てる段階と、
上記インデックス値が上記分岐命令のフィールドとして上記パイプライン回路へ送信されるようにする段階と
をさらに備える、例10に記載の方法。
[例12]
上記パイプライン回路により受信された上記命令が上記ロード命令である場合、上記分岐再誘導回路がロード依存分岐テーブル内の上記分岐命令のエントリを上記インデックス値で更新する段階をさらに備える、例11に記載の方法。
[例13]
上記分岐再誘導回路が、上記ロード命令からの上記結果にも依存する第2の分岐命令のインデックス値を割り当てる段階をさらに備える、例11に記載の方法。
[例14]
上記分岐命令の上記再誘導は、上記分岐命令の実行を上記実行回路に割り当てる上記パイプライン回路の割り当てステージにおいて生じる、例9に記載の方法。
[例15]
上記分岐命令の上記再誘導は、上記パイプライン回路から上記割り当てステージまでの上記予測経路についての上記分岐命令のデータのフラッシュを含む、例14に記載の方法。
[例16]
上記パイプライン回路の上記実行回路を含む実行ステージとは別個の回路で、1または複数のオペレーションを実行して、上記予測経路が上記ロード命令からの上記結果に基づく上記経路とは異なるかどうかを決定する段階をさらに備える、例9に記載の方法。
[例17]
機械により実行された場合、
プロセッサの分岐予測器回路で分岐命令の予測経路を生成する段階と、
上記プロセッサの分岐再誘導回路が、ロード命令からの結果に依存する上記分岐命令について、複数の命令を複数のデコード済みの命令へとデコードするためのデコーダと上記複数のデコード済みの命令を実行するための実行回路とを含む上記プロセッサのパイプライン回路により受信された命令が上記ロード命令であるかどうかをチェックする段階と、
上記パイプライン回路により受信された上記命令が上記ロード命令である場合、上記分岐再誘導回路が上記デコーダでの上記分岐命令のデコードと上記実行回路での上記分岐命令の実行との間の上記ロード命令からの上記結果のライトバックをチェックする段階と、
上記予測経路が上記ロード命令からの上記結果に基づく経路とは異なる場合、上記分岐再誘導回路が上記パイプライン回路内の上記分岐命令を上記経路へ再誘導する段階と、
上記予測経路が上記ロード命令からの上記結果に基づく上記経路とは異なる場合、上記実行回路が上記ロード命令からの上記結果に基づく上記経路についての上記分岐命令を実行する段階と
を備える方法
を上記機械に実行させるコードを格納した非一時的機械可読媒体。
[例18]
上記ライトバックをチェックする上記段階は、上記結果の最終格納デスティネーションとは別個であるロード値テーブル内の上記結果の上記ライトバックをチェックする段階を有する、例17に記載の非一時的機械可読媒体。
[例19]
上記方法は、
上記パイプライン回路により受信された上記命令が上記ロード命令である場合、上記分岐再誘導回路が上記ロード命令の上記結果の上記ロード値テーブル内のエントリのインデックス値を割り当てる段階と、
上記インデックス値が上記分岐命令のフィールドとして上記パイプライン回路へ送信されるようにする段階と
をさらに備える、
例18に記載の非一時的機械可読媒体。
[例20]
上記方法は、上記パイプライン回路により受信された上記命令が上記ロード命令である場合、上記分岐再誘導回路がロード依存分岐テーブル内の上記分岐命令のエントリを上記インデックス値で更新する段階をさらに備える、例19に記載の非一時的機械可読媒体。
[例21]
上記方法は、上記分岐再誘導回路が、上記ロード命令からの上記結果にも依存する第2の分岐命令のインデックス値を割り当てる段階をさらに備える、例19に記載の非一時的機械可読媒体。
[例22]
上記分岐命令の上記再誘導は、上記分岐命令の実行を上記実行回路に割り当てる上記パイプライン回路の割り当てステージにおいて生じる、例17に記載の非一時的機械可読媒体。
[例23]
上記分岐命令の上記再誘導は、上記パイプライン回路から上記割り当てステージまでの上記予測経路についての上記分岐命令のデータのフラッシュを含む、例22に記載の非一時的機械可読媒体。
[例24]
上記方法は、上記パイプライン回路の上記実行回路を含む実行ステージとは別個の回路で、1または複数のオペレーションを実行して、上記予測経路が上記ロード命令からの上記結果に基づく上記経路とは異なるかどうかを決定する段階をさらに備える、例17に記載の非一時的機械可読媒体。
[例25]
分岐命令およびロード命令を格納するためのメモリと、
上記メモリに結合されたプロセッサコアと
を備え、
上記プロセッサコアは、
複数の命令を複数のデコード済みの命令へとデコードするためのデコーダと上記複数のデコード済みの命令を実行するための実行回路とを有するパイプライン回路と、
上記分岐命令の予測経路を生成するための分岐予測器回路と、
上記ロード命令からの結果に依存する上記分岐命令について、上記パイプライン回路により受信された命令が上記ロード命令であるかどうかをチェックし、上記パイプライン回路により受信された上記命令が上記ロード命令である場合、上記デコーダでの上記分岐命令のデコードと上記実行回路での上記分岐命令の実行との間の上記ロード命令からの上記結果のライトバックをチェックし、上記予測経路が上記ロード命令からの上記結果に基づく経路とは異なる場合、上記パイプライン回路内の上記分岐命令を上記経路へ再誘導し、上記ロード命令からの上記結果に基づく上記経路についての上記分岐命令の実行を生じさせるための分岐再誘導回路と
を有する、
システム。
[例26]
上記分岐再誘導回路は、上記結果の最終格納デスティネーションとは別個であるロード値テーブル内の上記結果の上記ライトバックをチェックする、例25に記載のシステム。
[例27]
上記分岐再誘導回路は、上記パイプライン回路により受信された上記命令が上記ロード命令である場合、上記ロード命令の上記結果の上記ロード値テーブル内のエントリのインデックス値を割り当て、上記インデックス値が上記分岐命令のフィールドとして上記パイプライン回路へ送信されるようにする、例26に記載のシステム。
[例28]
上記分岐再誘導回路は、上記パイプライン回路により受信された上記命令が上記ロード命令である場合、ロード依存分岐テーブル内の上記分岐命令のエントリを上記インデックス値で更新する、例27に記載のシステム。
[例29]
上記分岐再誘導回路は、上記ロード命令からの上記結果にも依存する第2の分岐命令のインデックス値を割り当てる、例27に記載のシステム。
[例30]
上記分岐命令の上記再誘導は、上記分岐命令の実行を上記実行回路に割り当てる上記パイプライン回路の割り当てステージにおいて生じる、例25に記載のシステム。
[例31]
上記分岐命令の上記再誘導は、上記パイプライン回路から上記割り当てステージまでの上記予測経路についての上記分岐命令のデータのフラッシュを含む、例30に記載のシステム。
[例32]
上記プロセッサコアは、1または複数のオペレーションを実行して、上記予測経路が上記ロード命令からの上記結果に基づく上記経路とは異なるかどうかを決定するための、上記パイプライン回路の上記実行回路を含む実行ステージとは別個の回路をさらに有する、例25に記載のシステム。
【0087】
さらに別の実施形態において、装置は、ハードウェアプロセッサにより実行された場合に、本明細書において開示される任意の方法をハードウェアプロセッサに実行させるコードを格納するデータストレージデバイスを備える。装置は、詳細な説明において説明されたようなものであってよい。方法は、詳細な説明において説明されたようなものであってよい。
【0088】
命令セットは、条件付き分岐命令を含んでよい。命令セットは、1または複数の命令フォーマットを含んでよい。所与の命令フォーマットは、とりわけ、実行されるオペレーション(例えば、オペコード)および当該オペレーションが実行されるオペランドおよび/または他のデータフィールド(例えば、マスク)を指定する様々なフィールド(例えば、ビットの数、ビットの位置)を定義してよい。いくつかの命令フォーマットは、命令テンプレート(またはサブフォーマット)の定義を通じてさらに細分化される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義されてよく(含まれるフィールドは、典型的には同じ順序であるが、少なくともいくつかは、含まれるフィールドが少ないので、異なるビット位置を有する)、および/または、異なって解釈される所与のフィールドを有するように定義されてよい。したがって、ISAの各命令は、所与の命令フォーマット(および、定義されている場合には、当該命令フォーマットの命令テンプレートのうちの所与の1つ)を用いて表され、オペレーションおよびオペランドを指定するためのフィールドを含む。例えば、例示的なADD命令は、特定のオペコードならびに当該オペコードを指定するオペコードフィールドおよびオペランド(ソース1/デスティネーションおよびソース2)を選択するオペランドフィールドを含む命令フォーマットを有する。命令ストリーム内でこのADD命令が生じると、特定のオペランドを選択するオペランドフィールド内に特定のコンテンツを有することになる。高度ベクトル拡張(AVX)(AVX1およびAVX2)と称されるSIMD拡張のセットおよびVector Extensions(VEX)コーディングスキームの使用が、公表および/または公開されている(例えば、2018年5月のIntel(登録商標)64およびIA-32アーキテクチャソフトウェア開発者のマニュアル、および2018年5月のIntel(登録商標)アーキテクチャ命令セット拡張プログラミングリファレンスを参照されたい)。
[例示的な命令フォーマット]
【0089】
本明細書において説明される命令の実施形態は、異なるフォーマットで具現化され得る。さらに、例示的なシステム、アーキテクチャおよびパイプラインを以下で詳述する。命令の実施形態は、そのようなシステム、アーキテクチャおよびパイプライン上で実行され得るが、詳述されるものに限定されない。
[汎用ベクトル向け命令フォーマット]
【0090】
ベクトル向け命令フォーマットは、ベクトル命令に適した命令フォーマットである(例えば、ベクトル演算に固有の特定のフィールドがある)。ベクトル演算およびスカラ演算の両方がベクトル向け命令フォーマットを通じてサポートされる実施形態を説明するが、代替的な実施形態は、ベクトル向け命令フォーマットによるベクトル演算のみを用いる。
【0091】
図12Aおよび
図12Bは、本開示の実施形態による、汎用ベクトル向け命令フォーマットおよびその命令テンプレートを示すブロック図である。
図12Aは、本開示の実施形態による、汎用ベクトル向け命令フォーマットおよびそのクラスA命令テンプレートを示すブロック図であり、一方、
図12Bは、本開示の実施形態による、汎用ベクトル向け命令フォーマットおよびそのクラスB命令テンプレートを示すブロック図である。具体的には、汎用ベクトル向け命令フォーマット1200には、クラスA命令テンプレートおよびクラスB命令テンプレートが定義され、これらの両方が、非メモリアクセス1205命令テンプレートおよびメモリアクセス1220命令テンプレートを含む。ベクトル向け命令フォーマットの文脈における汎用という用語は、任意の特定の命令セットに結び付けられていない命令フォーマットを指す。
【0092】
本開示の実施形態では、ベクトル向け命令フォーマットが、32ビット(4バイト)または64ビット(8バイト)データ要素幅(またはサイズ)を有する64バイトのベクトルオペランド長(またはサイズ)(したがって、64バイトのベクトルは、16個のダブルワードサイズの要素または代替的に8クワッドワードサイズの要素のいずれかから成る)、16ビット(2バイト)または8ビット(1バイト)データ要素幅(またはサイズ)を有する64バイトのベクトルオペランド長(またはサイズ)、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)または8ビット(1バイト)データ要素幅(またはサイズ)を有する32バイトのベクトルオペランド長(またはサイズ)、および、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)または8ビット(1バイト)データ要素幅(またはサイズ)を有する16バイトのベクトルオペランド長(またはサイズ)をサポートすることが説明され、一方、代替的な実施形態は、より多い、より少ないまたは異なるデータ要素幅(例えば、128ビット(16バイト)のデータ要素幅)を有する、より多い、より少ないおよび/または異なるベクトルオペランドサイズ(例えば、256バイトのベクトルオペランド)をサポートしてよい。
【0093】
図12AにおけるクラスA命令テンプレートは、1)非メモリアクセス1205命令テンプレート内に示される非メモリアクセス・フルラウンド制御型オペレーション1210命令テンプレートおよび非メモリアクセス・データ変換型オペレーション1215命令テンプレート、ならびに、2)メモリアクセス1220命令テンプレート内に示されるメモリアクセス・一時的1225命令テンプレートおよびメモリアクセス・非一時的1230命令テンプレートを含む。
図12BにおけるクラスB命令テンプレートは、1)非メモリアクセス1205命令テンプレート内に示される非メモリアクセス・書き込みマスク制御・部分的ラウンド制御型オペレーション1212命令テンプレートおよび非メモリアクセス・書き込みマスク制御・VSIZE型オペレーション1217命令テンプレート、ならびに、2)メモリアクセス1220命令テンプレート内に示されるメモリアクセス・書き込みマスク制御1227命令テンプレートを含む。
【0094】
汎用ベクトル向け命令フォーマット1200は、
図12Aおよび
図12Bに示される順序で、下記に列挙される以下のフィールドを含む。
【0095】
フォーマットフィールド1240-このフィールド内の特定の値(命令フォーマット識別子値)は、ベクトル向け命令フォーマット、したがって、命令ストリーム内のベクトル向け命令フォーマットにおける命令の出現を一意に識別する。そのため、このフィールドは、汎用ベクトル向け命令フォーマットのみを有する命令セットには必要ではないという意味において任意選択的である。
【0096】
ベースオペレーションフィールド1242-そのコンテンツは、異なるベースオペレーションを区別する。
【0097】
レジスタインデックスフィールド1244-そのコンテンツは、直接またはアドレス生成を通じて、ソースオペランドおよびデスティネーションオペランドがレジスタ内にあるか、またはメモリ内にあるかを問わず、それらの位置を指定する。これらは、P×Q(例えば、32×512、16×128、32×1024、64×1024)のレジスタファイルからN個のレジスタを選択するのに十分な数のビットを含む。一実施形態において、Nは、最大で3つのソースおよび1つのデスティネーションレジスタであってよく、代替的な実施形態は、より多くのまたはより少ないソースおよびデスティネーションレジスタをサポートしてよい(例えば、最大で2つのソースをサポートしてよく、この場合、これらのソースのうちの1つは、デスティネーションとしても機能し、最大で3つのソースをサポートしてよく、この場合、これらのソースのうちの1つは、デスティネーションとしても機能し、最大で2つのソースおよび1つのデスティネーションをサポートしてよい)。
【0098】
修飾子フィールド1246-そのコンテンツは、メモリアクセスを指定する汎用ベクトル命令フォーマット内の命令の出現を、メモリアクセスを指定しない命令と区別する。すなわち、非メモリアクセス1205命令テンプレートとメモリアクセス1220命令テンプレートとを区別する。メモリアクセスオペレーションは、メモリ階層に対して読み取りおよび/または書き込みを行い(場合によっては、レジスタ内の値を用いて、ソースおよび/またはデスティネーションアドレスを指定する)、一方、非メモリアクセスオペレーションは、これを行わない(例えば、ソースおよびデスティネーションはレジスタである)。一実施形態において、このフィールドはまた、メモリアドレス計算を実行するために、3つの異なる態様の中から選択し、一方、代替的な実施形態は、メモリアドレス計算を実行するために、より多い、より少ないまたは異なる態様をサポートしてよい。
【0099】
拡張オペレーションフィールド1250-そのコンテンツは、様々な異なるオペレーションのうちのどれがベースオペレーションに加えて実行されるかを区別する。このフィールドは、コンテキストに固有のものである。本開示の一実施形態において、このフィールドは、クラスフィールド1268、アルファフィールド1252およびベータフィールド1254に分割される。拡張オペレーションフィールド1250は、共通のオペレーションのグループが、2個、3個または4個の命令ではなく、単一の命令内で実行されることを可能にする。
【0100】
スケールフィールド1260-そのコンテンツは、メモリアドレス生成のための(例えば、2スケール×インデックス+ベースを用いるアドレス生成のための)インデックスフィールドのコンテンツのスケーリングを可能にする。
【0101】
変位フィールド1262A-そのコンテンツは、(例えば、2スケール×インデックス+ベース+変位を用いるアドレス生成のための)メモリアドレス生成の一部として用いられる。
【0102】
変位係数フィールド1262B(変位係数フィールド1262Bの真上に変位フィールド1262Aの並置は、一方または他方が用いられることを示すことに留意されたい)-そのコンテンツは、アドレス生成の一部として用いられ、それは、メモリアクセス(N)のサイズによりスケーリングされる変位係数を指定する-Nは、(例えば、2スケール×インデックス+ベース+スケーリングされた変位を用いるアドレス生成用の)メモリアクセス内のバイト数である。冗長下位ビットが無視されるので、有効なアドレスの計算に用いられる最終的な変位を生成すべく、変位係数フィールドのコンテンツは、メモリオペランドの合計のサイズ(N)で乗算される。Nの値は、(本明細書で後述される)フルオペコードフィールド1274およびデータ操作フィールド1254Cに基づいて、ランタイムにおいてプロセッサハードウェアにより決定される。変位フィールド1262Aおよび変位係数フィールド1262Bは、それらが非メモリアクセス1205命令テンプレートに用いられない、および/または異なる実施形態が、2つのうちの一方のみを実装してもよく、いずれも実装しなくてもよいという意味において任意選択的である。
【0103】
データ要素幅フィールド1264-そのコンテンツは、(いくつかの実施形態では、全ての命令に対して、他の実施形態では、いくつかの命令のみに対して)多数のデータ要素幅のうちのどれが用いられるかを区別する。1つのデータ要素幅のみがサポートされる場合、および/またはオペコードのいくつかの態様を用いてデータ要素幅がサポートされる場合に必要とされないという意味において、このフィールドは任意選択的である。
【0104】
書き込みマスクフィールド1270-そのコンテンツは、データ要素位置ごとに、デスティネーションベクトルオペランド内のデータ要素位置がベースオペレーションおよび拡張オペレーションの結果を反映するかどうかを制御する。クラスAの命令テンプレートは、マージングング-書き込みマスキングをサポートし、一方、クラスBの命令テンプレートは、マージング書き込みマスキングおよびゼロ書き込みマスキングの両方をサポートする。マージングする場合、ベクトルマスクは、デスティネーションにおける要素の任意のセットが(ベースオペレーションおよび拡張オペレーションにより指定された)任意のオペレーションの実行中に更新から保護されることを可能にする。他の一実施形態において、対応するマスクビットが0を有する場合、デスティネーションの各要素の古い値を保持する。対照的に、ゼロ化する場合、ベクトルマスクは、デスティネーションにおける要素の任意のセットが、(ベースオペレーションおよび拡張オペレーションにおいて指定された)任意のオペレーションの実行中にゼロにされることを可能にする。一実施形態において、対応するマスクビットが0値を有する場合、デスティネーションの要素は、0に設定される。この機能のサブセットは、実行されるオペレーションのベクトル長(すなわち、修正される要素のうち、最初の要素から最後の要素までのスパン)を制御する能力である。しかしながら、修正される要素が連続している必要はない。したがって、書き込みマスクフィールド1270は、ロード、格納、演算、論理等を含む部分的ベクトル演算を可能にする。書き込みマスクフィールド1270のコンテンツが用いられる書き込みマスクを含む多数の書き込みマスクレジスタのうちの1つを選択する(したがって、書き込みマスクフィールド1270のコンテンツは、実行されるマスキングを間接的に識別する)本開示の実施形態を説明するが、代替的な実施形態は、代わりにまたは追加的に、実行されるマスキングをマスク書き込みフィールド1270のコンテンツが直接指定することを可能にする。
【0105】
即値フィールド1272-そのコンテンツは、即値の指定を可能にする。このフィールドは、即値をサポートしない汎用ベクトル向けフォーマットの実装において存在せず、かつ、即値を用いない命令にも存在しないという意味において任意選択的である。
【0106】
クラスフィールド1268-そのコンテンツは、異なるクラスの命令を区別する。
図12Aおよび
図12Bを参照すると、このフィールドのコンテンツは、クラスA命令とクラスB命令との間で選択する。
図12Aおよび
図12Bでは、特定の値がフィールド内に存在することを示すために、角が丸められた四角形が用いられている(例えば、
図12Aおよび
図12Bにおけるクラスフィールド1268のクラスA 1268AおよびクラスB 1268Bのそれぞれ)。
[クラスAの命令テンプレート]
【0107】
クラスAの非メモリアクセス1205命令テンプレートの場合、アルファフィールド1252はRSフィールド1252Aとして解釈され、そのコンテンツは、異なる拡張オペレーションタイプのうちのどれが実行されるかを区別し(例えば、非メモリアクセス・ラウンド型オペレーション1210および非メモリアクセス・データ変換型オペレーション1215命令テンプレートに対し、ラウンド1252A.1およびデータ変換1252A.2がそれぞれ指定される)、ベータフィールド1254は、指定されるタイプのオペレーションのうちのどれが実行されるかを区別する。非メモリアクセス1205命令テンプレートには、スケールフィールド1260、変位フィールド1262Aおよび変位スケールフィールド1262Bは存在しない。
[非メモリアクセス命令テンプレート-フルラウンド制御型オペレーション]
【0108】
非メモリアクセス・フルラウンド制御型オペレーション1210命令テンプレートでは、ベータフィールド1254は、ラウンド制御フィールド1254Aとして解釈され、そのコンテンツは、静的ラウンドを提供する。説明される本開示の実施形態では、ラウンド制御フィールド1254Aは、全浮動小数点例外抑制(SAE)フィールド1256およびラウンドオペレーション制御フィールド1258を含むが、代替的な実施形態は、これらの概念の両方を同じフィールドにエンコードすることをサポートしてもよく、これらの概念/フィールドの一方または他方のみを有してもよい(例えば、ラウンドオペレーション制御フィールド1258のみを有してよい)。
【0109】
SAEフィールド1256-そのコンテンツは、例外イベント報告を無効化するか否かを区別し、SAEフィールド1256のコンテンツが、抑制が有効化されていることを示す場合、所与の命令は、いかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも発生させない。
【0110】
ラウンドオペレーション制御フィールド1258-そのコンテンツは、ラウンドオペレーションのグループのうちのどれが実行するかを区別する(例えば、切り上げ、切り捨て、ゼロへの丸めおよび最も近い値への丸め)。したがって、ラウンドオペレーション制御フィールド1258は、命令ごとにラウンドモードを変更することを可能にする。プロセッサがラウンドモードを指定するための制御レジスタを含む本開示の一実施形態において、ラウンドオペレーション制御フィールド1250のコンテンツは、そのレジスタ値をオーバーライドする。
[非メモリアクセス命令テンプレート-データ変換型オペレーション]
【0111】
非メモリアクセス・データ変換型オペレーション1215命令テンプレートでは、ベータフィールド1254は、データ変換フィールド1254Bとして解釈され、そのコンテンツは、多数のデータ変換のうちのどれが実行されるかを区別する(例えば、データ変換なし、スウィズル、ブロードキャスト)。
【0112】
クラスAのメモリアクセス1220命令テンプレートの場合、アルファフィールド1252はエビクションヒントフィールド1252Bとして解釈され、そのコンテンツは、エビクションヒントのうちのどれが用いられるべきかを区別する(
図12Aにおいて、一時的1252B.1および非一時的1252B.2はそれぞれ、メモリアクセス・一時的1225命令テンプレートおよびメモリアクセス・非一時的1230命令テンプレートに指定される)。ベータフィールド1254はデータ操作フィールド1254Cとして解釈され、そのコンテンツは、(プリミティブとしても知られる)多数のデータ操作オペレーションのうちのどれが実行されるべきかを区別する(例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、デスティネーションのダウンコンバージョン)。メモリアクセス1220命令テンプレートは、スケールフィールド1260を含み、変位フィールド1262Aまたは変位スケールフィールド1262Bを任意選択で含む。
【0113】
ベクトルメモリ命令は、変換サポートを用いて、メモリからのベクトルロードおよびメモリへのベクトルストアを実行する。通常のベクトル命令と同様に、ベクトルメモリ命令は、実際に転送される要素を書き込みマスクとして選択されたベクトルマスクのコンテンツにより指示して、データ要素ごとにメモリとの間でデータを転送する。
[メモリアクセス命令テンプレート-一時的]
【0114】
一時的データは、キャッシュから利益を得るのに十分なほど速やかに再使用される可能性が高いデータである。しかしながら、これはヒントであり、異なるプロセッサが、ヒントを完全に無視することを含む異なる態様でこれを実装し得る。
[メモリアクセス命令テンプレート-非一時的]
【0115】
非一時的データは、第1レベルキャッシュにキャッシュする利益を得るのに十分なほど速やかに再使用される可能性が低いデータであり、エビクションが優先されるべきである。しかしながら、これはヒントであり、異なるプロセッサが、ヒントを完全に無視することを含む異なる態様でこれを実装し得る。
[クラスBの命令テンプレート]
【0116】
クラスBの命令テンプレートの場合、アルファフィールド1252は、書き込みマスク制御(Z)フィールド1252Cとして解釈され、そのコンテンツは、書き込みマスクフィールド1270により制御される書き込みマスキングがマージングであるべきか、またはゼロ化であるべきかを区別する。
【0117】
クラスBの非メモリアクセス1205の命令テンプレートの場合、ベータフィールド1254一部はRLフィールド1257Aとして解釈され、そのコンテンツは、異なる拡張オペレーションタイプのうちのどれが実行されるかを区別し(例えば、ラウンド1257A.1およびベクトル長(VSIZE)1257A.2は、非メモリアクセス・書き込みマスク制御・部分的ラウンド制御型オペレーション1212命令テンプレートおよび非メモリアクセス、書き込みマスク制御・VSIZE型オペレーション1217命令テンプレートに対してそれぞれ指定される)、ベータフィールド1254の残りは、指定されたタイプのオペレーションのうちのどれが実行されるかを区別する。非メモリアクセス1205命令テンプレートには、スケールフィールド1260、変位フィールド1262Aおよび変位スケールフィールド1262Bは存在しない。
【0118】
非メモリアクセス・書き込みマスク制御・部分的ラウンド制御型オペレーション1210の命令テンプレートでは、ベータフィールド1254の残りは、ラウンドオペレーションフィールド1259Aとして解釈され、例外イベント報告が無効化される(所与の命令は、いかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも発生させない)。
【0119】
ラウンドオペレーション制御フィールド1259A-ラウンドオペレーション制御フィールド1258と同じように、そのコンテンツは、ラウンドオペレーションのグループのうちのどれが実行するかを区別する(例えば、切り上げ、切り捨て、ゼロへの丸めおよび最も近い値への丸め)。したがって、ラウンドオペレーション制御フィールド1259Aは、命令ごとにラウンドモードを変更することを可能にする。プロセッサがラウンドモードを指定するための制御レジスタを含む本開示の一実施形態において、ラウンドオペレーション制御フィールド1250のコンテンツは、そのレジスタ値をオーバーライドする。
【0120】
非メモリアクセス・書き込みマスク制御・VSIZE型オペレーション1217の命令テンプレートでは、ベータフィールド1254の残りは、ベクトル長フィールド1259Bとして解釈され、そのコンテンツは、多数のデータベクトル長のうちのどれが実行されるかを区別する(例えば、128バイト、256バイトまたは512バイト)。
【0121】
クラスBのメモリアクセス1220命令テンプレートの場合、ベータフィールド1254の一部は、ブロードキャストフィールド1257Bとして解釈され、そのコンテンツは、ブロードキャスト型データ操作オペレーションが実行されるか否かを区別し、ベータフィールド1254の残りは、ベクトル長フィールド1259Bとして解釈される。メモリアクセス1220命令テンプレートは、スケールフィールド1260を含み、変位フィールド1262Aまたは変位スケールフィールド1262Bを任意選択で含む。
【0122】
汎用ベクトル向け命令フォーマット1200に関して、フルオペコードフィールド1274は、フォーマットフィールド1240、ベースオペレーションフィールド1242およびデータ要素幅フィールド1264を含むように示されている。フルオペコードフィールド1274がこれらのフィールドの全てを含む一実施形態が示されているが、これらのフィールドの全てをサポートしない実施形態では、フルオペコードフィールド1274は、これらのフィールドの全てよりも少ないフィールドを含む。フルオペコードフィールド1274は、オペレーションコード(オペコード)を提供する。
【0123】
拡張オペレーションフィールド1250、データ要素幅フィールド1264および書き込みマスクフィールド1270は、これらの機能が汎用ベクトル向け命令フォーマットにおいて命令ごとに指定されることを可能にする。
【0124】
書き込みマスクフィールドおよびデータ要素幅フィールドの組み合わせは、異なるデータ要素幅に基づいてマスクを適用することを可能にするという点で、型付き命令を作成する。
【0125】
クラスAおよびクラスB内で見つかる様々な命令テンプレートは、異なる状況において有益である。本開示のいくつかの実施形態において、異なるプロセッサまたはプロセッサ内の異なるコアは、クラスAのみ、クラスBのみ、または両方のクラスをサポートしてよい。例えば、汎用コンピューティング向けの高性能汎用アウトオブオーダコアは、クラスBのみをサポートしてよく、主にグラフィックスおよび/または科学(スループット)コンピューティング向けのコアは、クラスAのみをサポートしてよく、両方向けのコアは、両方をサポートしてよい(もちろん、両方のクラスからの全てのテンプレートおよび命令ではなく、両方のクラスからのテンプレートおよび命令のいくつかの組み合わせを有するコアは、本開示の範囲内にある)。また、単一のプロセッサは、複数のコアを含んでよく、その全てが同じクラスをサポートするか、または、異なるコアが異なるクラスをサポートする。例えば、別個のグラフィックスおよび汎用コアを有するプロセッサでは、主にグラフィックスおよび/または科学コンピューティング向けの複数のグラフィックスコアのうちの1つがクラスAのみをサポートしてよく、複数の汎用コアのうちの1つまたは複数が、クラスBのみをサポートする汎用コンピューティング向けのアウトオブオーダ実行およびレジスタリネーミングを有する高性能汎用コアであってよい。別個のグラフィックスコアを有していない別のプロセッサは、クラスAおよびクラスBの両方をサポートするもう1つの汎用のインオーダコアまたはアウトオブオーダコアを含んでよい。もちろん、1つのクラスからの機能は、本開示の異なる実施形態における他のクラスに実装されてもよい。高水準言語で書き込まれたプログラムは、1)実行用のターゲットプロセッサによってサポートされるクラスの命令のみを有する形式、または2)全てのクラスの命令の異なる組み合わせを用いて書き込まれた代替ルーチンを有し、現在コードを実行しているプロセッサによってサポートされる命令に基づいて実行するようにルーチンを選択する制御フローコードを有する形式を含む様々な異なる実行可能な形式に変換される(例えば、ジャストインタイムコンパイルされるか、または静的コンパイルされる)はずである。
[例示的な特定ベクトル向け命令フォーマット]
【0126】
図13Aから
図13Dは、本開示の実施形態による例示的な特定ベクトル向け命令フォーマットを示すブロック図である。
図13Aから
図13Dは、フィールドの位置、サイズ、解釈および順序ならびにそれらのフィールドのいくつかの値を指定するという意味において固有である特定ベクトル向け命令フォーマット1300を示す。特定ベクトル向け命令フォーマット1300は、x86命令セットを拡張するために用いられ得る。したがって、フィールドのうちのいくつかは、既存のx86命令セットおよびその拡張(例えば、AVX)において用いられるフィールドと同様または同じである。このフォーマットは、拡張を伴う既存のx86命令セットのプレフィックスエンコーディングフィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールドおよび即値フィールドと整合したままである。
図12Aおよび
図12Bからのフィールドが
図13Aから
図13Dのどのフィールドにマッピングされるかが示される。
【0127】
本開示の実施形態は、例示の目的で汎用ベクトル向け命令フォーマット1300の文脈で特定ベクトル向け命令フォーマット1200を参照して説明されているが、本開示は、特許請求の範囲に記載される場合を除き、特定ベクトル向け命令フォーマット1300に限定されるものではないことを理解されたい。例えば、汎用ベクトル向け命令フォーマット1200は、様々なフィールド用の様々な可能なサイズを想定しているが、特定ベクトル向け命令フォーマット1300は、特定のサイズのフィールドを有するものとして示されている。具体的な例として、データ要素幅フィールド1264は、特定ベクトル向け命令フォーマット1300において、1ビットフィールドとして示されているが、本開示は、そのようには限定されない(すなわち、汎用ベクトル向け命令フォーマット1200は、他のサイズのデータ要素幅フィールド1264を想定している)。
【0128】
汎用ベクトル向け命令フォーマット1200は、
図13Aに示される順序で、下記に列挙される以下のフィールドを含む。
【0129】
EVEXプレフィックス(バイト0-3)1302は、4バイト形式でエンコードされる。
【0130】
フォーマットフィールド1240(EVEXバイト0、ビット[7:0])-第1のバイト(EVEXバイト0)は、フォーマットフィールド1240であり、0x62(本開示の一実施形態においてベクトル向け命令フォーマットを区別するために用いられる固有値)を含む。
【0131】
2番目から4番目のバイト(EVEXバイト1-3)は、特定の機能を提供する多数のビットフィールドを含む。
【0132】
REXフィールド1305(EVEXバイト1、ビット[7-5])は、EVEX.Rビットフィールド(EVEXバイト1、ビット[7]-R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]-X)および1257BEXバイト1、ビット[5]‐B)から成る。EVEX.Rビットフィールド、EVEX.XビットフィールドおよびEVEX.Bビットフィールドは、対応するVEXビットフィールドと同じ機能を提供し、1の補数形式を用いてエンコードされる。すなわち、ZMM0は、1111Bとしてエンコードされ、ZMM15は、0000Bとしてエンコードされる。命令の他のフィールドは、当技術分野において知られているように、レジスタインデックスの下位3ビット(rrr、xxxおよびbbb)をエンコードし、その結果、EVEX.R、EVEX.XおよびEVEX.Bを加えることにより、Rrrr、XxxxおよびBbbbが形成され得る。
【0133】
REX'フィールド1210-これは、REX'フィールド1210の第1の部分であり、拡張32レジスタセットの上位16個または下位16個のいずれかをエンコードするために用いられるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]-R')である。本開示の一実施形態において、このビットは、リアルオペコードバイトが62であるBOUND命令と(周知のx86 32ビットモードにおいて)区別するために、以下に示されるような他のものと共にビット反転フォーマットに格納されるが、(以下で説明する)MOD R/Mフィールドでは、MODフィールド内の11という値を受け入れない。本開示の代替的な実施形態は、このビットおよび以下に示される他のビットを反転フォーマットに格納しない。下位16個のレジスタをエンコードするのに、1という値が用いられる。言い換えると、R'Rrrrは、EVEX.R'、EVEX.Rおよび他のフィールドからの他のRRRを組み合わせることにより形成される。
【0134】
オペコードマップフィールド1315(EVEXバイト1、ビット[3:0]-mmmm)-そのコンテンツは、暗黙の先頭オペコードバイト(0F、0F38または0F3)をエンコードする。
【0135】
データ要素幅フィールド1264(EVEXバイト2、ビット[7]-W)は、表記EVEX.Wにより表される。EVEX.Wは、データタイプの粒度(サイズ)(32ビットデータ要素または64ビットデータ要素のいずれか)を定義するために用いられる。
【0136】
EVEX.vvvv1320(EVEXバイト2、ビット[6:3]-vvvv)-EVEX.vvvvの役割は、以下を含んでよい。1)EVEX.vvvvは、反転(1の補数)形式で指定される第1のソースレジスタオペランドをエンコードし、2つまたはそれよりも多くのソースオペランドを有する命令について有効である。2)EVEX.vvvvは、特定のベクトルシフトに対して1の補数形式で指定されるデスティネーションレジスタオペランドをエンコードする。または、3)EVEX.vvvvは、いかなるオペランドもエンコードせず、当該フィールドは、予約され、1111bを含むべきである。したがって、EVEX.vvvvフィールド1320は、反転(1の補数)形式で格納された第1のソースレジスタ指定子の4つの下位ビットをエンコードする。命令に応じて、追加の異なるEVEXビットフィールドは、指定子のサイズを32個のレジスタに拡張するために用いられる。
【0137】
EVEX.U1268のクラスフィールド(EVEXバイト2、ビット[2]-U)-EVEX.U=0である場合、クラスAまたはEVEX.U0を示し、EVEX.U=1である場合、クラスBまたはEVEX.U1を示す。
【0138】
プレフィックスエンコーディングフィールド1325(EVEXバイト2、ビット[1:0]-pp)-ベースオペレーションフィールドに追加のビットを提供する。EVEXプレフィックスフォーマットにおけるレガシSSE命令にサポートを提供することに加え、これは、SIMDプレフィックスを圧縮するという利益も有する(SIMDプレフィックスを表現するバイトを必要とするのではなく、EVEXプレフィックスが2ビットのみを必要とする)。一実施形態において、レガシフォーマットおよびEVEXプレフィックスフォーマットの両方でSIMDプレフィックス(66H、F2H、F3H)を用いるレガシSSE命令をサポートするために、これらのレガシSIMDプレフィックスは、SIMDプレフィックスエンコーディングフィールドへエンコードされ、デコーダのPLAに提供される前に、ランタイムにおいてレガシSIMDプレフィックスへ拡張される(そのため、PLAは、これらのレガシ命令のレガシおよびEVEXフォーマットの両方を修正することなく実行できる)。より新しい命令は、EVEXプレフィックスエンコーディングフィールドのコンテンツをオペコード拡張として直接用いることができるが、特定の実施形態では、整合性のために同様の方式で拡張するが、これらのレガシSIMDプレフィックスにより異なる意味が指定されることを可能にする。代替的な実施形態は、2ビットのSIMDプレフィックスエンコーディングをサポートするようにPLAを再設計してよく、したがって、拡張を必要としない。
【0139】
アルファフィールド1252(EVEXバイト3、ビット[7]-EH、EVEX.EH、EVEX.rs、EVEX.RL、EVEX.書き込みマスク制御およびEVEX.Nとしても知られ、また、αを用いて示される)-前述したように、このフィールドは、コンテキストに固有のものである。
【0140】
ベータフィールド1254(EVEXバイト3、ビット[6:4]-SSS、EVEX.s2-0、EVEX.r2-0、EVEX、rr1、EVEX.LL0、EVEX.LLBとしても知られ、また、βββを用いて示される)-前述したように、このフィールドは、コンテキストに固有のものである。
【0141】
REX'フィールド1210-これは、REX'フィールドの残りであり、拡張32レジスタセットの上位16個または下位16個のいずれかをエンコードするために用いられ得るEVEX.V'ビットフィールド(EVEXバイト3、ビット[3]-V')である。このビットは、ビット反転フォーマットで格納される。下位16個のレジスタをエンコードするのに、1という値が用いられる。言い換えると、V'VVVVは、EVEX.V'、EVEX.vvvvを組み合わせることにより形成される。
【0142】
書き込みマスクフィールド1270(EVEXバイト3、ビット[2:0]-kkk)-そのコンテンツは、前述したように、書き込みマスクレジスタ内のレジスタインデックスを指定する。本開示の一実施形態において、特定の値EVEX.kkk=000は、書き込みマスクが特定の命令に用いられないことを暗示する特別な挙動を有する(これは、全てのものに対してハードウェアに組み込まれる書き込みマスク、または、マスキングハードウェアをバイパスするハードウェアの使用を含む様々な態様で実装され得る)。
【0143】
リアルオペコードフィールド1330(バイト4)は、オペコードバイトとしても知られている。オペコードの一部は、このフィールドにおいて指定される。
【0144】
MOD R/Mフィールド1340(バイト5)は、MODフィールド1342、Regフィールド1344およびR/Mフィールド1346を含む。前述したように、MODフィールド1342のコンテンツは、メモリアクセスオペレーションおよび非メモリアクセスオペレーションを区別する。Regフィールド1344の役割は、デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードすること、または、オペコード拡張として扱われ、いかなる命令オペランドをエンコードするためにも用いられないこと、という2つの状況に要約できる。R/Mフィールド1346の役割は、メモリアドレスを参照する命令オペランドをエンコードすること、またはデスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードすることを含んでよい。
【0145】
スケール、インデックス、ベース(SIB)バイト(バイト6)-前述したように、スケールフィールド1250のコンテンツは、メモリアドレス生成に用いられる。SIB.xxx1354およびSIB.bbb1356-これらのフィールドのコンテンツについては、レジスタインデックスXxxxおよびBbbbに関連して既に言及した。
【0146】
変位フィールド1262A(バイト7-10)-MODフィールド1342が10を含む場合、バイト7-10は、変位フィールド1262Aであり、レガシ32ビット変位(disp32)と同じように機能し、バイト粒度で機能する。
【0147】
変位係数フィールド1262B(バイト7)-MODフィールド1342が01を含む場合、バイト7は、変位係数フィールド1262Bである。このフィールドの位置は、バイト粒度で機能するレガシx86命令セットの8ビット変位(disp8)の位置と同じである。disp8は符号拡張されるので、-128バイトオフセットと127バイトオフセットとの間のみでしかアドレスを指定できず、64バイトのキャッシュラインに関して、disp8は、4つの本当に有用な値、-128、-64、0および64のみに設定され得る8ビットを用いる。より広い範囲が必要とされることが多いのでdisp32が用いられるが、disp32は4バイトを必要とする。disp8およびdisp32とは対照的に、変位係数フィールド1262Bは、disp8の再解釈である。変位係数フィールド1262Bを用いる場合、実際の変位は、メモリオペランドアクセス(N)のサイズで乗算される変位係数フィールドのコンテンツにより決定される。このタイプの変位は、disp8×Nと称される。これにより、平均命令長(変位に用いられる単一のバイトであるが、はるかに広い範囲を有する)が低減する。そのような圧縮された変位は、有効な変位がメモリアクセスの粒度の倍数であるという前提に基づいているので、アドレスオフセットの冗長下位ビットは、エンコードされる必要がない。言い換えると、変位係数フィールド1262Bが、レガシx86命令セットの8ビット変位と置き換わる。したがって、変位係数フィールド1262Bは、disp8がdisp8×Nにオーバーロードされることのみを除き、x86命令セットの8ビット変位と同じ態様でエンコードされる(よって、ModRM/SIBエンコーディングルールに変更はない)。言い換えると、エンコーディングのルールまたはエンコーディングの長さに変更はないが、(メモリオペランドのサイズにより変位をスケーリングして、バイト単位のアドレスオフセットを取得する必要がある)ハードウェアによる変位値の解釈にのみ変更がある。即値フィールド1272は、前述したように動作する。
[フルオペコードフィールド]
【0148】
図13Bは、本開示の一実施形態による、フルオペコードフィールド1274を構成する特定ベクトル向け命令フォーマット1300のフィールドを示すブロック図である。具体的には、フルオペコードフィールド1274は、フォーマットフィールド1240、ベースオペレーションフィールド1242およびデータ要素幅(W)フィールド1264を含む。ベースオペレーションフィールド1242は、プレフィックスエンコーディングフィールド1325、オペコードマップフィールド1315およびリアルオペコードフィールド1330を含む。
[レジスタインデックスフィールド]
【0149】
図13Cは、本開示の一実施形態による、レジスタインデックスフィールド1244を構成する特定ベクトル向け命令フォーマット1300のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド1244は、REXフィールド1305、REX'フィールド1310、MODR/M.regフィールド1344、MODR/M.r/mフィールド1346、VVVVフィールド1320、xxxフィールド1354およびbbbフィールド1356を含む。
[拡張オペレーションフィールド]
【0150】
図13Dは、本開示の一実施形態による、拡張オペレーションフィールド1250を構成する特定ベクトル向け命令フォーマット1300のフィールドを示すブロック図である。クラス(U)フィールド1268は、0を含む場合、EVEX.U0(クラスA1268A)を表し、1を含む場合、EVEX.U1(クラスB1268B)を表す。U=0であり、かつ、MODフィールド1342が11を含む(非メモリアクセスオペレーションを意味する)場合、アルファフィールド1252(EVEXバイト3、ビット[7])-EH)は、RSフィールド1252Aとして解釈される。RSフィールド1252Aが1(ラウンド1252A.1)を含む場合、ベータフィールド1254(EVEXバイト3、ビット[6:4]-SSS)は、ラウンド制御フィールド1254Aとして解釈される。ラウンド制御フィールド1254Aは、1ビットのSAEフィールド1256および2ビットのラウンドオペレーションフィールド1258を含む。RSフィールド1252Aが0(データ変換1252A.2)を含む場合、ベータフィールド1254(EVEXバイト3、ビット[6:4]-SSS)は、3ビットのデータ変換フィールド1254Bとして解釈される。U=0であり、かつ、MODフィールド1342が00、01または10を含む(メモリアクセスオペレーションを意味する)場合、アルファフィールド1252(EVEXバイト3、ビット[7]-EH)は、エビクションヒント(EH)フィールド1252Bとして解釈され、ベータフィールド1254(EVEXバイト3、ビット[6:4]-SSS)は、3ビットのデータ操作フィールド1254Cとして解釈される。
【0151】
U=1である場合、アルファフィールド1252(EVEXバイト3、ビット[7]-EH)は、書き込みマスク制御(Z)フィールド1252Cとして解釈される。U=1であり、かつ、MODフィールド1342が11を含む(非メモリアクセスオペレーションを意味する)場合、ベータフィールド1254の一部(EVEXバイト3、ビット[4]-S0)は、RLフィールド1257Aとして解釈され、1(ラウンド1257A.1)を含む場合、ベータフィールド1254の残り(EVEXバイト3、ビット[6-5]-S2-1)は、ラウンドオペレーションフィールド1259Aとして解釈され、一方、RLフィールド1257Aが0(VSIZE1257.A2)を含む場合、ベータフィールド1254の残り(EVEXバイト3、ビット[6-5]-S2-1)は、ベクトル長フィールド1259B(EVEXバイト3、ビット[6-5]-L1-0)として解釈される。U=1であり、かつ、MODフィールド1342が(メモリアクセスオペレーションを意味する)00、01または10を含む場合、ベータフィールド1254(EVEXバイト3、ビット[6:4]-SSS)は、ベクトル長フィールド1259B(EVEXバイト3、ビット[6-5]-L1-0)およびブロードキャストフィールド1257B(EVEXバイト3、ビット[4]-B)として解釈される。
[例示的なレジスタアーキテクチャ]
【0152】
図14は、本開示の一実施形態によるレジスタアーキテクチャ1400のブロック図である。示される実施形態には、512ビット幅の32個のベクトルレジスタ1410がある。これらのレジスタは、zmm0からzmm31として参照される。下位16個のzmmレジスタの下位256ビットは、レジスタymm0から16上にオーバーレイされる。下位16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0から15上にオーバーレイされる。特定ベクトル向け命令フォーマット1300は、これらのオーバーレイされたレジスタファイル上で、以下の表に示されるように動作する。
【表1】
【0153】
言い換えると、ベクトル長フィールド1259Bは、最大長さと1または複数の他のより短い長さとの間から選択し、そのようなより短い長さの各々は、前述の長さの半分の長さであり、ベクトル長フィールド1259Bがない命令テンプレートは、最大ベクトル長で動作する。さらに、一実施形態において、特定ベクトル向け命令フォーマット1300のクラスB命令テンプレートは、パックドまたはスカラ単精度/倍精度浮動小数点データおよびパックドまたはスカラ整数データで動作する。スカラ演算は、zmm/ymm/xmmレジスタ内の最下位のデータ要素位置で実行されるオペレーションである。上位のデータ要素位置は、それらが命令前と同じままであるか、または実施形態に応じてゼロにされるかのいずれかである。
【0154】
書き込みマスクレジスタ1415-示される実施形態には8個の書き込みマスクレジスタ(k0からk7)があり、各々のサイズは64ビットである。代替的な実施形態において、書き込みマスクレジスタ1415は、16ビットのサイズである。前述したように、本開示の一実施形態において、ベクトルマスクレジスタk0は、書き込みマスクとして用いられることができず、通常k0を示すエンコーディングが書き込みマスクに用いられる場合、0xFFFFのハードウェアに組み込まれる書き込みマスクを選択することで、その命令に対する書き込みマスキングを効果的に無効にする。
【0155】
汎用レジスタ1425-示される実施形態には、メモリオペランドをアドレス指定する既存のx86アドレス指定モードと共に用いられる16個の64ビット汎用レジスタが存在する。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、およびR8からR15という名前で参照される。
【0156】
MMXパックド整数フラットレジスタファイル1450がエイリアシングされるスカラ浮動小数点スタックレジスタファイル(x87スタック)1445-示される実施形態において、x87スタックは、x87命令セット拡張を用いて、32ビット/64ビット/80ビットの浮動小数点データに対するスカラ浮動小数点オペレーションを実行するために用いられる8要素スタックであり、一方、MMXレジスタは、64ビットのパックド整数データに対してオペレーションを実行するために、および、MMXとXMMレジスタとの間で実行されるいくつかのオペレーション用にオペランドを保持するために用いられる。
【0157】
本開示の代替的な実施形態は、より広いまたはより狭いレジスタを用いてよい。さらに、本開示の代替的な実施形態は、より多くの、より少ない、または異なるレジスタファイルおよびレジスタを用いてよい。
[例示的なコアアーキテクチャ、プロセッサおよびコンピュータアーキテクチャ]
【0158】
プロセッサコアは、異なる態様で、異なる目的で、かつ、異なるプロセッサにおいて実装され得る。例えば、そのようなコアの実装は、1)汎用コンピューティング向けの汎用インオーダコア、2)汎用コンピューティング向けの高性能汎用アウトオブオーダコア、3)主にグラフィックスおよび/または科学(スループット)コンピューティング向けの専用コアを含んでよい。異なるプロセッサの実装は、1)汎用コンピューティング向けの1または複数の汎用インオーダコア、および/または、汎用コンピューティング向けの1または複数の汎用アウトオブオーダコアを含むCPU、および、2)主にグラフィックスおよび/または科学(スループット)向けの1または複数の専用コアを含むコプロセッサを含んでよい。そのような異なるプロセッサは、異なるコンピュータシステムアーキテクチャをもたらし、当該コンピュータシステムアーキテクチャは、1)CPUとは別個のチップ上のコプロセッサ、2)CPUと同じパッケージ内の別個のダイ上のコプロセッサ、3)CPUと同じダイ上のコプロセッサ(この場合、そのようなコプロセッサは、場合によっては、例えば、統合グラフィックスおよび/または科学(スループット)ロジックなどの専用ロジックまたは専用コアと称される)、ならびに、4)説明されたCPUと同じダイ上に含まれ得るシステムオンチップ(場合によっては、アプリケーションコアまたはアプリケーションプロセッサと称される)、上述したコプロセッサおよび追加の機能を含んでよい。例示的なコアアーキテクチャを次に説明し、続いて、例示的なプロセッサおよびコンピュータアーキテクチャを説明する。
[例示的なコアアーキテクチャ]
[インオーダコアおよびアウトオブオーダコアのブロック図]
【0159】
図15Aは、本開示の実施形態による、例示的なインオーダパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。
図15Bは、本開示の実施形態による、プロセッサに含まれるインオーダアーキテクチャコアの例示的な実施形態および例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。
図15Aおよび
図15B内の実線のボックスは、インオーダパイプラインおよびインオーダコアを示し、一方、任意選択的な追加の破線のボックスは、レジスタリネーミング、アウトオブオーダ発行/実行パイプラインおよびコアを示す。インオーダの態様がアウトオブオーダの態様のサブセットであると仮定して、アウトオブオーダの態様を説明する。
【0160】
図15Aにおいて、プロセッサパイプライン1500は、フェッチステージ1502、長さデコードステージ1504、デコードステージ1506、割り当てステージ1508、リネーミングステージ1510、スケジューリング(ディスパッチまたは発行としても知られる)ステージ1512、レジスタ読み取り/メモリ読み取りステージ1514、実行ステージ1516、ライトバック/メモリ書き込みステージ1518、例外処理ステージ1522およびコミットステージ1524を含む。
【0161】
図15Bは、実行エンジンユニット1550に結合されるフロントエンドユニット1530を含むプロセッサコア1590を示し、それらの両方が、メモリユニット1570に結合される。コア1590は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コアまたはハイブリッドコアタイプもしくは代替的コアタイプであってよい。さらに別のオプションとして、コア1590は、例えば、ネットワークコアもしくは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(GPGPU)コアまたはグラフィックスコア等の専用コアであってよい。
【0162】
フロントエンドユニット1530は、命令キャッシュユニット1534に結合された分岐予測ユニット1532を含み、命令キャッシュユニット1534は命令変換ルックアサイドバッファ(TLB)1536に結合され、命令変換ルックアサイドバッファ(TLB)1536は命令フェッチユニット1538に結合され、命令フェッチユニット1538はデコードユニット1540に結合されている。デコードユニット1540(またはデコーダもしくはデコーダユニット)は、命令(例えばマクロ命令)をデコードし、1または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または元の命令からデコードされるか、またはそうでなければ元の命令を反映し、または元の命令から派生した他の制御信号を出力として生成してよい。デコードユニット1540は、様々な異なるメカニズムを用いて実装され得る。適切なメカニズムの例は、限定されるものではないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)等を含む。一実施形態において、コア1590は、マイクロコードROM、または、特定のマクロ命令に対するマイクロコードを格納する(例えば、デコードユニット1540における、またはそうでなければ、フロントエンドユニット1530内の)他の媒体を含む。デコードユニット1540は、実行エンジンユニット1550内のリネーミング/アロケータユニット1552に結合される。
【0163】
実行エンジンユニット1550は、リタイアメントユニット1554と、1または複数のスケジューラユニット1556のセットとに結合されたリネーミング/アロケータユニット1552を含む。スケジューラユニット1556は、予約ステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット1556は、物理レジスタファイルユニット1558に結合される。物理レジスタファイルユニット1558の各々は、1または複数の物理レジスタファイルを表し、そのそれぞれ異なる物理レジスタファイルは、例えば、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行される次の命令のアドレスである命令ポインタ)等、1または複数の異なるデータタイプを格納する。一実施形態において、物理レジスタファイルユニット1558は、ベクトルレジスタユニット、書き込みマスクレジスタユニットおよびスカラレジスタユニットを有する。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタおよび汎用レジスタを提供し得る。物理レジスタファイルユニット1558は、(例えば、リオーダバッファおよびリタイアメントレジスタファイルを用いること、将来のファイル、履歴バッファおよびリタイアメントレジスタファイルを用いること、レジスタマップおよびレジスタのプールを用いること等で)レジスタリネーミングおよびアウトオブオーダ実行が実装され得る様々な態様を示すために、リタイアメントユニット1554により重ね合わせられている。リタイアメントユニット1554および物理レジスタファイルユニット1558は、実行クラスタ1560に結合される。実行クラスタ1560は、1または複数の実行ユニット1562のセットと、1または複数のメモリアクセスユニット1564のセットとを含む。実行ユニット1562は、様々なオペレーション(例えば、シフト、加算、減算、乗算)を様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行してよい。いくつかの実施形態は、特定の機能または機能のセットに専用の多数の実行ユニットを含んでよいが、他の実施形態は、1つの実行ユニットのみ、または全ての機能を全てが実行する複数の実行ユニットを含んでよい。特定の実施形態では、特定のタイプのデータ/オペレーションに対して別個のパイプライン(例えば、スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/または、メモリアクセスパイプラインは、独自のスケジューラユニット、物理レジスタファイルユニット、および/または、実行クラスタを各々が有し、別個のメモリアクセスパイプラインの場合、特定の実施形態では、このパイプラインの実行クラスタのみがメモリアクセスユニット1564を有する実施形態において実装される)を作成するので、スケジューラユニット1556、物理レジスタファイルユニット1558および実行クラスタ1560は、場合によっては複数のものとして示されている。別個のパイプラインが用いられる場合、これらのパイプラインのうちの1つまたは複数はアウトオブオーダ発行/実行であってよく、残りはインオーダであってよいことも理解されたい。
【0164】
メモリアクセスユニット1564のセットがメモリユニット1570に結合され、メモリユニット1570は、レベル2(L2)キャッシュユニット1576に結合されたデータキャッシュユニット1574に結合されたデータTLBユニット1572を含む。1つの例示的な実施形態において、メモリアクセスユニット1564は、ロードユニット、ストアアドレスユニットおよびストアデータユニットを含んでよく、これらの各々は、メモリユニット1570内のデータTLBユニット1572に結合される。命令キャッシュユニット1534はさらに、メモリユニット1570内のレベル2(L2)キャッシュユニット1576に結合される。L2キャッシュユニット1576は、1または複数の他のレベルのキャッシュに結合され、最終的にメインメモリに結合される。
【0165】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプライン1500を実装してよい。1)命令フェッチ1538がフェッチおよび長さデコードステージ1502および1504を実行し、2)デコードユニット1540がデコードステージ1506を実行し、3)リネーミング/アロケータユニット1552が割り当てステージ1508およびリネーミングステージ1510を実行し、4)スケジューラユニット1556がスケジューリングステージ1512を実行し、5)物理レジスタファイルユニット1558およびメモリユニット1570がレジスタ読み取り/メモリ読み取りステージ1514を実行し、実行クラスタ1560が実行ステージ1516を実行し、6)メモリユニット1570および物理レジスタファイルユニット1558がライトバック/メモリ書き込みステージ1518を実行し、7)様々なユニットが例外処理ステージ1522に関与してよく、8)リタイアメントユニット1554および物理レジスタファイルユニット1558がコミットステージ1524を実行する。
【0166】
コア1590は、本明細書で説明された命令を含む、1または複数の命令セット(例えば、(より新しいバージョンで追加されたいくつかの拡張を伴う)x86命令セット)、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARM Holdingsの(例えば、NEONなどの任意選択的な追加の拡張を伴う)ARM命令セットをサポートしてよい。一実施形態において、コア1590は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含むことにより、多くのマルチメディアアプリケーションにより用いられるオペレーションがパックドデータを用いて実行されることを可能にする。
【0167】
コアはマルチスレッディング(オペレーションまたはスレッドからなる2つまたはそれよりも多くの並列セットを実行)をサポートしてよく、タイムスライスマルチスレッディング、同時マルチスレッディング(物理コアが同時にマルチスレッディングしているスレッドの各々に対して、単一の物理コアが論理コアを提供する)、またはそれらの組み合わせ(例えば、タイムスライスフェッチおよびデコード、ならびにその後のIntel(登録商標)ハイパースレッディング・テクノロジーなどの同時マルチスレッディング)を含む様々な態様でサポートしてよいことを理解されたい。
【0168】
レジスタリネーミングはアウトオブオーダ実行の文脈で説明されているが、レジスタリネーミングはインオーダアーキテクチャで用いられてもよいことを理解されたい。プロセッサの示される実施形態はまた、別個の命令およびデータキャッシュユニット1534/1574ならびに共有型L2キャッシュユニット1576を含むが、代替的な実施形態は、命令およびデータ両方のために、例えば、レベル1(L1)内部キャッシュまたは複数のレベルの内部キャッシュなどの単一の内部キャッシュを有してよい。いくつかの実施形態において、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。代替的に、キャッシュの全てがコアおよび/またはプロセッサの外部にあってもよい。
[具体的な例示的インオーダコアアーキテクチャ]
【0169】
図16Aおよび
図16Bは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示す。当該コアは、チップ内のいくつかの論理ブロック(同じタイプおよび/または異なるタイプの他のコアを含む)のうちの1つになるであろう。論理ブロックは、高帯域幅相互接続ネットワーク(例えば、リングネットワーク)を通じて、アプリケーションに応じて、いくつかの固定機能ロジック、メモリI/Oインタフェースおよび他の必要なI/Oロジックと通信する。
【0170】
図16Aは、本開示の実施形態による、オンダイ相互接続ネットワーク1602への接続およびレベル2(L2)キャッシュ1604のローカルサブセットと共に示す、シングルプロセッサコアのブロック図である。一実施形態において、命令デコードユニット1600は、パックドデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ1606は、スカラユニットおよびベクトルユニットへのキャッシュメモリに対する低レイテンシアクセスを可能にする。一実施形態において、(設計を単純化するために)スカラユニット1608およびベクトルユニット1610は、別個のレジスタセット(それぞれ、スカラレジスタ1612およびベクトルレジスタ1614)を用いており、それらの間で転送されるデータは、メモリに書き込まれ、次に、レベル1(L1)キャッシュ1606からリードバックされるが、本開示の代替的な実施形態は、異なるアプローチ(例えば、単一のレジスタセットを用いる、または、書き込まれることもリードバックされることもなく2つのレジスタファイル間でデータが転送されることを可能にする通信経路を含む)を用いてよい。
【0171】
L2キャッシュのローカルサブセット1604は、プロセッサコアごとに1つである別個のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサコアは、独自のL2キャッシュのローカルサブセット1604への直接アクセス経路を有する。プロセッサコアにより読み取られたデータは、L2キャッシュサブセット1604に格納され、他のプロセッサコアが独自のローカルL2キャッシュサブセットにアクセスするのと並行して、迅速にアクセスされ得る。プロセッサコアにより書き込まれたデータは、独自のL2キャッシュサブセット1604に格納され、必要な場合、他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは、双方向性であることにより、プロセッサコア、L2キャッシュおよび他の論理ブロックなどのエージェントがチップ内で互いに通信することを可能にする。各リングデータ経路は、一方向当たり1012ビット幅である。
【0172】
図16Bは、本開示の実施形態による、
図16Aにおけるプロセッサコアの一部の拡大図である。
図16Bは、L1キャッシュ1604の一部であるL1データキャッシュ1606A、ならびにベクトルユニット1610およびベクトルレジスタ1614に関するより詳細を含む。具体的には、ベクトルユニット1610は、16幅のベクトル処理ユニット(VPU)(16幅のALU1628を参照)であり、整数命令、単精度浮動小数点命令および倍精度浮動小数点命令のうちの1つまたは複数を実行する。VPUは、スウィズルユニット1620を用いたレジスタ入力のスウィズルと、数値変換ユニット1622A-Bを用いた数値変換と、メモリ入力に対する複製ユニット1624を用いた複製とをサポートする。書き込みマスクレジスタ1626は、結果として得られるベクトル書き込みの予測を可能にする。
【0173】
図17は、本開示の実施形態による、1つよりも多くのコアを有してよく、統合メモリコントローラを有してよく、かつ、統合グラフィックスを有してよいプロセッサ1700のブロック図である。
図17内の実線のボックスは、単一のコア1702Aと、システムエージェント1710と、1または複数のバスコントローラユニット1716のセットとを有するプロセッサ1700を示し、一方、任意選択的な追加の破線のボックスは、複数のコア1702A-Nと、システムエージェントユニット1710内の1または複数の統合メモリコントローラユニット1714のセットと、専用ロジック1708とを有する代替的なプロセッサ1700を示す。
【0174】
したがって、プロセッサ1700の異なる実装は、1)専用ロジック1708が統合グラフィックスおよび/または科学(スループット)ロジック(1または複数のコアを含んでよい)であり、コア1702A-1702Nが1または複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、それら2つの組み合わせ)であるCPU、2)コア1702A-1702Nが、主にグラフィックスおよび/または科学(スループット)向けの多数の専用コアであるコプロセッサ、ならびに3)コア1702A-1702Nが多数の汎用インオーダコアであるコプロセッサを含んでよい。したがって、プロセッサ1700は、汎用プロセッサ、コプロセッサまたは専用プロセッサ、例えば、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、高スループットの多数統合コア(MIC)コプロセッサ(30個またはそれよりも多くのコアを含む)、組み込みプロセッサ等であってもよい。プロセッサは、1または複数のチップ上で実装されてよい。プロセッサ1700は、例えば、BiCMOS、CMOSまたはNMOSなどの多数の処理技術のうちのいずれかを用いる1または複数の基板の一部であってよく、および/または、当該基板上に実装されてよい。
【0175】
メモリ階層は、コア内の1または複数のレベルのキャッシュと、共有キャッシュユニット1706のセットあるいは1または複数の共有キャッシュユニット1706と、統合メモリコントローラユニット1714のセットに結合された外部メモリ(不図示)とを含む。共有キャッシュユニット1706のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)、または他のレベルのキャッシュなど、1または複数の中間レベルのキャッシュまたは他のレベルのキャッシュ、ラストレベルキャッシュ(LLC)および/またはそれらの組み合わせを含んでよい。一実施形態において、リングベースの相互接続ユニット1712は、統合グラフィックスロジック1708、共有キャッシュユニット1706のセットおよびシステムエージェントユニット1710/統合メモリコントローラユニット1714を相互接続し、一方、代替的な実施形態は、そのようなユニットを相互接続するための任意の数の周知の技術を用いてよい。一実施形態において、1または複数のキャッシュユニット1706とコア1702-A-Nとの間でコヒーレンシが維持される。
【0176】
いくつかの実施形態において、コア1702A-Nのうちの1つまたは複数がマルチスレッディング可能である。システムエージェント1710は、コア1702A-Nを調整し動作させるそれらのコンポーネントを含む。システムエージェントユニット1710は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含んでよい。PCUは、コア1702A-Nおよび統合グラフィックスロジック1708の電力状態を調整するのに必要なロジックおよびコンポーネントであってもよく、当該ロジックおよび当該コンポーネントを含んでもよい。ディスプレイユニットは、1または複数の外部接続されたディスプレイを駆動するためのものである。
【0177】
コア1702A-1702Nは、アーキテクチャ命令セットに関して同種でも異種でもよい。すなわち、コア1702A-1702Nのうち2つまたはそれよりも多くは、同じ命令セットを実行することが可能であってよく、一方、他のものは、その命令セットのサブセットまたは異なる命令セットのみを実行することが可能であってよい。
[例示的なコンピュータアーキテクチャ]
【0178】
図18から
図21は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイスおよび様々な他の電子デバイスについて当技術分野で既知の他のシステム設計および構成も適切である。概して、本明細書において開示されるプロセッサおよび/または他の実行ロジックを組み込むことが可能な多種多様なシステムまたは電子デバイスが、概して適切である。
【0179】
ここで
図18を参照すると、本開示の一実施形態によるシステム1800のブロック図が示される。システム1800は、1または複数のプロセッサ1810、1815を含んでよく、これらはコントローラハブ1820に結合されている。一実施形態において、コントローラハブ1820は、グラフィックスメモリコントローラハブ(GMCH)1890および入力/出力ハブ(IOH)1850(別個のチップ上にあり得る)を含む。GMCH1890は、メモリおよびグラフィックスコントローラを含み、これらにメモリ1840およびコプロセッサ1845が結合される。IOH1850は、入力/出力(I/O)デバイス1860をGMCH1890に結合する。代替的に、メモリおよびグラフィックスコントローラのうちの一方または両方は、(本明細書において説明されるように)プロセッサ内に統合され、メモリ1840およびコプロセッサ1845は、プロセッサ1810と、IOH1850を有する単一チップ内のコントローラハブ1820とに直接結合される。メモリ1840は、例えば、実行された場合にプロセッサに本開示の任意の方法を実行させるコードを格納するための分岐予測器コード1840Aを含んでよい。
【0180】
任意選択的な性質の追加のプロセッサ1815は、
図18に破線で示される。各プロセッサ1810、1815は、本明細書において説明される処理コアのうちの1つまたは複数を含んでよく、プロセッサ1700のいくつかのバージョンであってよい。
【0181】
メモリ1840は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)またはこれら2つの組み合わせであってよい。少なくとも1つの実施形態では、コントローラハブ1820は、マルチドロップバス、例えば、フロントサイドバス(FSB)、Quickpath相互接続(QPI)などのポイントツーポイントインタフェースまたは同様の接続1895を介して、プロセッサ1810、1815と通信する。
【0182】
一実施形態において、コプロセッサ1845は、専用プロセッサ、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサ等である。一実施形態において、コントローラハブ1820は、統合グラフィックスアクセラレータを含んでよい。
【0183】
アーキテクチャ特性、マイクロアーキテクチャ特性、熱特性および電力消費特性等を含む広範な価値基準に関して、物理リソース1810、1815の間には様々な差異があり得る。
【0184】
一実施形態において、プロセッサ1810は、一般的なタイプのデータ処理オペレーションを制御する命令を実行する。命令内には、コプロセッサ命令が組み込まれてよい。プロセッサ1810は、これらのコプロセッサ命令を、取り付けられたコプロセッサ1845が実行すべきタイプの命令であると認識する。したがって、プロセッサ1810は、これらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)をコプロセッサバスまたは他の相互接続でコプロセッサ1845に発行する。コプロセッサ1845は、受信したコプロセッサ命令を受け入れて実行する。
【0185】
ここで
図19を参照すると、本開示の実施形態による第1のより具体的な例示的なシステム1900のブロック図が示される。
図19に示されるように、マルチプロセッサシステム1900は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1950を介して結合された第1のプロセッサ1970および第2のプロセッサ1980を含む。プロセッサ1970および1980の各々は、プロセッサ1700のいくつかのバージョンであってよい。本開示の一実施形態において、プロセッサ1970および1980はそれぞれ、プロセッサ1810および1815であり、一方、コプロセッサ1938は、コプロセッサ1845である。別の実施形態において、プロセッサ1970および1980はそれぞれ、プロセッサ1810およびコプロセッサ1845である。
【0186】
プロセッサ1970および1980は、統合メモリコントローラ(IMC)ユニット1972および1982をそれぞれ含むように示されている。プロセッサ1970はまた、そのバスコントローラユニットの一部として、ポイントツーポイント(P-P)インタフェース1976および1978を含み、同様に、第2のプロセッサ1980は、P-Pインタフェース1986および1988を含む。プロセッサ1970、1980は、ポイントツーポイント(P-P)インタフェース1950を介し、P-Pインタフェース回路1978、1988を用いて情報を交換してよい。
図19に示されるように、IMC1972および1982は、プロセッサをそれぞれのメモリに、すなわちメモリ1932およびメモリ1934に結合し、これらのメモリは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であってよい。
【0187】
プロセッサ1970、1980は各々、個々のP-Pインタフェース1952、1954を介し、ポイントツーポイントインタフェース回路1976、1994、1986、1998を用いてチップセット1990と情報を交換してよい。チップセット1990は、任意選択で、高性能インタフェース1939を介してコプロセッサ1938と情報を交換してよい。一実施形態において、コプロセッサ1938は、専用プロセッサ、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサ等である。
【0188】
共有キャッシュ(不図示)は、プロセッサまたは両方のプロセッサの外部のいずれかに含まれてよく、さらに、P-P相互接続を介してプロセッサと接続されてよく、その結果、プロセッサが低電力モードになった場合、プロセッサのローカルキャッシュ情報のいずれかまたは両方は、共有キャッシュに格納されてよい。
【0189】
チップセット1990は、インタフェース1996を介して第1のバス1916に結合されてよい。一実施形態において、第1のバス1916は、ペリフェラルコンポーネントインターコネクト(PCI)バス、またはPCI Expressバスもしくは別の第3世代I/O相互接続バスなどのバスであってよいが、本開示の範囲は、そのようには限定されない。
【0190】
図19に示されるように、第1のバス1916を第2のバス1920に結合するバスブリッジ1918と共に、様々なI/Oデバイス1914が第1のバス1916に結合されてよい。一実施形態において、コプロセッサ、高スループットMICプロセッサ、GPGPUのアクセラレータ(例えば、グラフィックスアクセラレータまたはデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイまたは任意の他のプロセッサなど、1または複数の追加のプロセッサ1915が、第1のバス1916に結合される。一実施形態において、第2のバス1920は、ローピンカウント(LPC)バスであってよい。一実施形態において、例えば、キーボードおよび/またはマウス1922、通信デバイス1927およびストレージユニット1928、命令/コードおよびデータ1930などを含み得るディスクドライブまたは他の大容量ストレージデバイスを含む様々なデバイスが、第2のバス1920に結合されてよい。さらに、オーディオI/O1924が、第2のバス1920に結合されてよい。他のアーキテクチャが可能であることに留意されたい。例えば、
図19のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装してよい。
【0191】
ここで
図20を参照すると、本開示の実施形態による第2のより具体的な例示的なシステム2000のブロック図が示される。
図19及び
図20の同様の要素には同様の参照符号が付され、
図19の特定の態様は、
図20の他の態様を曖昧にするのを回避すべく、
図20から省略されている。
【0192】
図20は、プロセッサ1970、1980が統合メモリならびにI/O制御ロジック(「CL」)1972および1982をそれぞれ含み得ることを示す。したがって、CL1972、1982は、統合メモリコントローラユニットを含み、I/O制御ロジックを含む。
図20は、メモリ1932、1934がCL1972、1982に結合されているだけでなく、I/Oデバイス2014も制御ロジック1972、1982に結合されていることを示している。レガシI/Oデバイス2015が、チップセット1990に結合される。
【0193】
ここで
図21を参照すると、本開示の実施形態によるSoC2100のブロック図が示される。
図17の同様の要素には同様の参照符号が付されている。また、破線のボックスは、より高度なSoC上の任意選択的な特徴である。
図21において、相互接続ユニット2102は、1または複数のコア202A-Nのセットおよび共有キャッシュユニット1706を含むアプリケーションプロセッサ2110と、システムエージェントユニット1710と、バスコントローラユニット1716と、統合メモリコントローラユニット1714と、統合グラフィックスロジック、イメージプロセッサ、オーディオプロセッサおよびビデオプロセッサを含み得るセットあるいは1または複数のコプロセッサ2120と、スタティックランダムアクセスメモリ(SRAM)ユニット2130と、ダイレクトメモリアクセス(DMA)ユニット2132と、1または複数の外部ディスプレイに結合するためのディスプレイユニット2140とに結合される。一実施形態において、コプロセッサ2120は、専用プロセッサ、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサまたは組み込みプロセッサ等を含む。
【0194】
本明細書において開示される(例えば、メカニズムの)実施形態は、ハードウェア、ソフトウェア、ファームウェアまたはそのような実装アプローチの組み合わせで実装されてよい。本開示の実施形態は、少なくとも1つのプロセッサと、(揮発性メモリおよび不揮発性メモリおよび/またはストレージ要素を含む)ストレージシステムと、少なくとも1つの入力デバイスと、少なくとも1つの出力デバイスとを備えるプログラマブルシステムで実行されるコンピュータプログラムまたはプログラムコードとして実装されてよい。
【0195】
図19に示されるコード1930などのプログラムコードは、本明細書において説明される機能を実行し、出力情報を生成する命令を入力するために適用されてよい。出力情報は、既知の方式で、1または複数の出力デバイスに適用されてよい。本願の目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【0196】
プログラムコードは、処理システムと通信するために、高水準手順型またはオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、必要に応じて、アセンブリ言語または機械言語で実装されてもよい。実際には、本明細書において説明されるメカニズムは、いかなる特定のプログラミング言語にも範囲が限定されない。どのような場合でも、言語は、コンパイル型言語またはインタプリタ型言語であってよい。
【0197】
少なくとも1つの実施形態の1または複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体に格納された代表的な命令により実装されてよく、当該命令は、機械により読み取られた場合、本明細書において説明する技術を実行するためのロジックを機械に組み立てさせる。「IPコア」として知られるそのような表現は、有形の機械可読媒体に格納され、ロジックまたはプロセッサを実際に作成する製造機械にロードするために、様々な顧客または製造施設に供給されてよい。
【0198】
そのような機械可読記憶媒体には、ハードディスク、フロッピーディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD-ROM)、コンパクトディスクリライタブル(CD-RW)、および光磁気ディスクを含む任意の他のタイプのディスク、リードオンリメモリ(ROM)などの半導体デバイス、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)などのランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、相変化メモリ(PCM)、磁気カードもしくは光カードまたは電子命令を格納するのに適切な任意の他のタイプの媒体などの記憶媒体を含む、機械またはデバイスにより製造または形成された物品の非一時的有形構成が含まれてもよいが、それらに限定されない。
【0199】
したがって、本開示の実施形態は、命令を含む、または設計データ、例えば、本明細書において説明される構造、回路、装置、プロセッサおよび/またはシステムの機能を定義するハードウェア記述言語(HDL)を含む非一時的な有形の機械可読媒体も含む。そのような実施形態は、プログラム製品とも称され得る。
[エミュレーション(バイナリ変換、コードモーフィング等を含む)]
【0200】
場合によっては、命令コンバータは、命令をソース命令セットからターゲット命令セットに変換するために用いられてよい。例えば、命令コンバータは、命令を、コアにより処理される1または複数の他の命令に、(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて)変換するか、モーフィングするか、エミュレートするか、または他の方法で変換してよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェアまたはそれらの組み合わせで実装されてよい。命令コンバータは、プロセッサ上にあってもよく、プロセッサ外にあってもよく、一部がプロセッサ上にあり、かつ一部がプロセッサ外にあってもよい。
図22は、本開示の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令へ変換するためのソフトウェア命令コンバータの使用を対比したブロック図である。示される実施形態において、命令コンバータは、ソフトウェア命令コンバータであるが、代替的に、ソフトウェア、ファームウェア、ハードウェアまたはそれらの様々な組み合わせで実装されてよい。
図22は、高水準言語2202のプログラムがx86コンパイラ2204を用いてコンパイルされ、少なくとも1つのx86命令セットコアを有するプロセッサ2216によりネイティブに実行され得るx86バイナリコード2206を生成し得ることを示す。少なくとも1つのx86命令セットコアを有するプロセッサ2216は、少なくとも1つのx86命令セットコアを有するIntel(登録商標)プロセッサと実質的に同じ結果を実現すべく、(1)Intel(登録商標)x86命令セットコアの命令セットの大部分、または(2)少なくとも1つのx86命令セットコアを有するIntel(登録商標)プロセッサ上での実行を目的とするアプリケーションまたは他のソフトウェアのオブジェクトコードバージョンを互換的に実行するか、またはそれ以外の方法で処理することにより、少なくとも1つのx86命令セットコアを有するIntel(登録商標)プロセッサと実質的に同じ機能を実行できる任意のプロセッサを表す。x86コンパイラ2204は、追加のリンケージ処理の有無にかかわらず、少なくとも1つのx86命令セットコアを有するプロセッサ2216上で実行され得るx86バイナリコード2206(例えば、オブジェクトコード)を生成するよう動作可能なコンパイラを表す。同様に、
図22は、高水準言語2202のプログラムが、代替的な命令セットバイナリコード2210を生成する代替的な命令セットコンパイラ2208を用いてコンパイルされ得ることを示す。代替的な命令セットバイナリコード2210は、少なくとも1つのx86命令セットコアを有さないプロセッサ2214(例えば、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行する、および/または、カリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行するコアを有するプロセッサ)によりネイティブに実行されてよい。命令コンバータ2212は、x86バイナリコード2206を、x86命令セットコアを有さないプロセッサ2214によりネイティブに実行され得るコードに変換するために用いられる。この変換されたコードは、代替的な命令セットバイナリコード2210と同じになる可能性は低い。なぜなら、この変換が可能な命令コンバータは製造が難しいからである。しかしながら、変換されたコードは、一般的なオペレーションを実現し、代替的な命令セットの命令で構成される。したがって、命令コンバータ2212は、エミュレーション、シミュレーションまたは任意の他の処理を通じて、x86命令セットプロセッサまたはコアを有さないプロセッサまたは他の電子デバイスがx86バイナリコード2206を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表す。
[他の可能な項目]
[項目1]
複数の命令を複数のデコード済みの命令へとデコードするためのデコーダと上記複数のデコード済みの命令を実行するための実行回路とを有するパイプライン回路と、
分岐命令の予測経路を生成するための分岐予測器回路と、
ロード命令からの結果に依存する上記分岐命令について、上記パイプライン回路により受信された命令が上記ロード命令であるかどうかをチェックし、上記パイプライン回路により受信された上記命令が上記ロード命令である場合、上記デコーダでの上記分岐命令のデコードと上記実行回路での上記分岐命令の実行との間の上記ロード命令からの上記結果のライトバックをチェックし、上記予測経路が上記ロード命令からの上記結果に基づく経路とは異なる場合、上記パイプライン回路内の上記分岐命令を上記経路へ再誘導し、上記ロード命令からの上記結果に基づく上記経路についての上記分岐命令の実行を生じさせるための分岐再誘導回路と
を備えるプロセッサ。
[項目2]
上記分岐再誘導回路は、上記結果の最終格納デスティネーションとは別個であるロード値テーブル内の上記結果の上記ライトバックをチェックする、項目1に記載のプロセッサ。
[項目3]
上記分岐再誘導回路は、上記パイプライン回路により受信された上記命令が上記ロード命令である場合、上記ロード命令の上記結果の上記ロード値テーブル内のエントリのインデックス値を割り当て、上記インデックス値が上記分岐命令のフィールドとして上記パイプライン回路へ送信されるようにする、項目2に記載のプロセッサ。
[項目4]
上記分岐再誘導回路は、上記パイプライン回路により受信された上記命令が上記ロード命令である場合、ロード依存分岐テーブル内の上記分岐命令のエントリを上記インデックス値で更新する、項目3に記載のプロセッサ。
[項目5]
上記分岐再誘導回路は、上記ロード命令からの上記結果にも依存する第2の分岐命令のインデックス値を割り当てる、項目3に記載のプロセッサ。
[項目6]
上記分岐命令の上記再誘導は、上記分岐命令の実行を上記実行回路に割り当てる上記パイプライン回路の割り当てステージにおいて生じる、項目1に記載のプロセッサ。
[項目7]
上記分岐命令の上記再誘導は、上記パイプライン回路から上記割り当てステージまでの上記予測経路についての上記分岐命令のデータのフラッシュを含む、項目6に記載のプロセッサ。
[項目8]
1または複数のオペレーションを実行して、上記予測経路が上記ロード命令からの上記結果に基づく上記経路とは異なるかどうかを決定するための、上記パイプライン回路の上記実行回路を含む実行ステージとは別個の回路をさらに備える、項目1に記載のプロセッサ。
[項目9]
プロセッサの分岐予測器回路で分岐命令の予測経路を生成する段階と、
上記プロセッサの分岐再誘導回路が、ロード命令からの結果に依存する上記分岐命令について、複数の命令を複数のデコード済みの命令へとデコードするためのデコーダと上記複数のデコード済みの命令を実行するための実行回路とを含む上記プロセッサのパイプライン回路により受信された命令が上記ロード命令であるかどうかをチェックする段階と、
上記パイプライン回路により受信された上記命令が上記ロード命令である場合、上記分岐再誘導回路が上記デコーダでの上記分岐命令のデコードと上記実行回路での上記分岐命令の実行との間の上記ロード命令からの上記結果のライトバックをチェックする段階と、
上記予測経路が上記ロード命令からの上記結果に基づく経路とは異なる場合、上記分岐再誘導回路が上記パイプライン回路内の上記分岐命令を上記経路へ再誘導する段階と、
上記予測経路が上記ロード命令からの上記結果に基づく上記経路とは異なる場合、上記実行回路が上記ロード命令からの上記結果に基づく上記経路についての上記分岐命令を実行する段階と
を備える方法。
[項目10]
上記ライトバックをチェックする上記段階は、上記結果の最終格納デスティネーションとは別個であるロード値テーブル内の上記結果の上記ライトバックをチェックする段階を有する、項目9に記載の方法。
[項目11]
上記パイプライン回路により受信された上記命令が上記ロード命令である場合、上記分岐再誘導回路が上記ロード命令の上記結果の上記ロード値テーブル内のエントリのインデックス値を割り当てる段階と、
上記インデックス値が上記分岐命令のフィールドとして上記パイプライン回路へ送信されるようにする段階と
をさらに備える、項目10に記載の方法。
[項目12]
上記パイプライン回路により受信された上記命令が上記ロード命令である場合、上記分岐再誘導回路がロード依存分岐テーブル内の上記分岐命令のエントリを上記インデックス値で更新する段階をさらに備える、項目11に記載の方法。
[項目13]
上記分岐再誘導回路が、上記ロード命令からの上記結果にも依存する第2の分岐命令のインデックス値を割り当てる段階をさらに備える、項目11に記載の方法。
[項目14]
上記分岐命令の上記再誘導は、上記分岐命令の実行を上記実行回路に割り当てる上記パイプライン回路の割り当てステージにおいて生じる、項目9に記載の方法。
[項目15]
上記分岐命令の上記再誘導は、上記パイプライン回路から上記割り当てステージまでの上記予測経路についての上記分岐命令のデータのフラッシュを含む、項目14に記載の方法。
[項目16]
上記パイプライン回路の上記実行回路を含む実行ステージとは別個の回路で、1または複数のオペレーションを実行して、上記予測経路が上記ロード命令からの上記結果に基づく上記経路とは異なるかどうかを決定する段階をさらに備える、項目9に記載の方法。
[項目17]
分岐命令およびロード命令を格納するためのメモリと、
上記メモリに結合されたプロセッサコアと
を備え、
上記プロセッサコアは、
複数の命令を複数のデコード済みの命令へとデコードするためのデコーダと上記複数のデコード済みの命令を実行するための実行回路とを有するパイプライン回路と、
上記分岐命令の予測経路を生成するための分岐予測器回路と、
上記ロード命令からの結果に依存する上記分岐命令について、上記パイプライン回路により受信された命令が上記ロード命令であるかどうかをチェックし、上記パイプライン回路により受信された上記命令が上記ロード命令である場合、上記デコーダでの上記分岐命令のデコードと上記実行回路での上記分岐命令の実行との間の上記ロード命令からの上記結果のライトバックをチェックし、上記予測経路が上記ロード命令からの上記結果に基づく経路とは異なる場合、上記パイプライン回路内の上記分岐命令を上記経路へ再誘導し、上記ロード命令からの上記結果に基づく上記経路についての上記分岐命令の実行を生じさせるための分岐再誘導回路と
を有する、
システム。
[項目18]
上記分岐再誘導回路は、上記結果の最終格納デスティネーションとは別個であるロード値テーブル内の上記結果の上記ライトバックをチェックする、項目17に記載のシステム。
[項目19]
上記分岐再誘導回路は、上記パイプライン回路により受信された上記命令が上記ロード命令である場合、上記ロード命令の上記結果の上記ロード値テーブル内のエントリのインデックス値を割り当て、上記インデックス値が上記分岐命令のフィールドとして上記パイプライン回路へ送信されるようにする、項目18に記載のシステム。
[項目20]
上記分岐再誘導回路は、上記パイプライン回路により受信された上記命令が上記ロード命令である場合、ロード依存分岐テーブル内の上記分岐命令のエントリを上記インデックス値で更新する、項目19に記載のシステム。
[項目21]
上記分岐再誘導回路は、上記ロード命令からの上記結果にも依存する第2の分岐命令のインデックス値を割り当てる、項目19に記載のシステム。
[項目22]
上記分岐命令の上記再誘導は、上記分岐命令の実行を上記実行回路に割り当てる上記パイプライン回路の割り当てステージにおいて生じる、項目17に記載のシステム。
[項目23]
上記分岐命令の上記再誘導は、上記パイプライン回路から上記割り当てステージまでの上記予測経路についての上記分岐命令のデータのフラッシュを含む、項目22に記載のシステム。
[項目24]
上記プロセッサコアは、1または複数のオペレーションを実行して、上記予測経路が上記ロード命令からの上記結果に基づく上記経路とは異なるかどうかを決定するための、上記パイプライン回路の上記実行回路を含む実行ステージとは別個の回路をさらに有する、項目17に記載のシステム。