(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-08-05
(45)【発行日】2024-08-14
(54)【発明の名称】投機実行中に安全とみなされた場合に、セキュリティチェックを省略するためのハードウェア
(51)【国際特許分類】
G06F 9/38 20180101AFI20240806BHJP
G06F 9/34 20180101ALI20240806BHJP
G06F 9/32 20180101ALN20240806BHJP
【FI】
G06F9/38 380X
G06F9/34 380
G06F9/32 380
【外国語出願】
(21)【出願番号】P 2020104078
(22)【出願日】2020-06-16
【審査請求日】2023-06-13
(32)【優先日】2019-09-27
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】マイケル ルメイ
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許出願公開第2019/0205140(US,A1)
【文献】特表2021-509743(JP,A)
【文献】国際公開第2019/140274(WO,A1)
【文献】特表2021-511571(JP,A)
【文献】特開平09-223013(JP,A)
【文献】米国特許出願公開第2019/0007446(US,A1)
【文献】特開2022-003582(JP,A)
【文献】米国特許出願公開第2016/132337(US,A1)
【文献】米国特許出願公開第2020/0410088(US,A1)
【文献】米国特許出願公開第2019/0121716(US,A1)
【文献】米国特許出願公開第2007/0006187(US,A1)
【文献】米国特許出願公開第2004/0268095(US,A1)
【文献】川添 良幸、早川 美徳,アルファ 64ビット革命,bit Vol.25 No.3,第25巻 第3号,日本,共立出版株式会社,1993年03月01日,42-51,【ISSN】0385-6984
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
G06F 9/34
G06F 9/32
(57)【特許請求の範囲】
【請求項1】
命令をデコードされた命令にデコードするためのデコーダと、
投機マネージャ回路であって、
前記命令内のセキュリティチェックフィールドを検出する、
潜在的に投機ミスされる実行に対し強制実行されるべきセキュリティチェックポリシーを、前記セキュリティチェックフィールドに基づき、複数のセキュリティチェックポリシーから判定する、
前記セキュリティチェックポリシーの1または複数の関連付けられたチェックを前記命令に対し実行して、前記命令が潜在的に投機ミスされるか否かを判定する、
前記1または複数の関連付けられたチェックにより、前記命令が安全ではないとみなされた場合に、前記命令の実行をスケジューリングする、
前記1または複数の関連付けられたチェックにより、前記命令が安全であるとみなされた場合に、前記命令を省略する、投機マネージャ回路と、
実行のためのスケジューリングがされた前記命令を実行するための実行ユニットと、を備える、装置。
【請求項2】
前記セキュリティチェックフィールドは、コンパイラにより提供されるヒントである、請求項1に記載の装置。
【請求項3】
前記投機マネージャ回路は、前記セキュリティチェックポリシーの前記1または複数の関連付けられたチェックを、前記命令の関連付けられたメモリアクセスのセットに対し実行する、請求項1または2に記載の装置。
【請求項4】
前記セキュリティチェックポリシーは、メモリ安全性チェックポリシーである、請求項1から3のいずれか一項に記載の装置。
【請求項5】
前記セキュリティチェックポリシーは、型安全性チェックポリシーである、請求項1から3のいずれか一項に記載の装置。
【請求項6】
前記セキュリティチェックポリシーの前記1または複数の関連付けられたチェックは、メモリ安全性チェックおよび型安全性チェックを含む、請求項1に記載の装置。
【請求項7】
前記1または複数の関連付けられたチェックは、前記装置のアーキテクチャ仕様の完全準拠チェックより少ない、請求項1に記載の装置。
【請求項8】
前記命令は、プログラム順序において後続するメモリアクセス命令に関連付けられたセキュリティチェック命令である、請求項1から7のいずれか一項に記載の装置。
【請求項9】
ハードウェアプロセッサのデコーダを用いて、命令をデコードされた命令にデコードする段階と、
前記ハードウェアプロセッサにより、前記命令内のセキュリティチェックフィールドを検出する段階と、
前記ハードウェアプロセッサにより、潜在的に投機ミスされる実行に対し強制実行されるべきセキュリティチェックポリシーを、前記セキュリティチェックフィールドに基づき、複数のセキュリティチェックポリシーから判定する段階と、
前記ハードウェアプロセッサにより、前記セキュリティチェックポリシーの1または複数の関連付けられたチェックを前記命令に対し実行して、前記命令が潜在的に投機ミスされるか否かを判定する段階と、
前記ハードウェアプロセッサにより、前記1または複数の関連付けられたチェックにより前記命令が安全ではないとみなされた場合に、前記命令の実行をスケジューリングする段階と、
前記ハードウェアプロセッサにより、前記1または複数の関連付けられたチェックにより、前記命令が安全であるとみなされた場合に、前記命令を省略する段階と、
前記ハードウェアプロセッサの実行ユニットを用いて、実行のためのスケジューリングがされた前記命令を実行する段階と、を備える、方法。
【請求項10】
前記セキュリティチェックフィールドは、コンパイラにより提供されるヒントである、請求項9に記載の方法。
【請求項11】
前記実行する段階は、前記セキュリティチェックポリシーの前記1または複数の関連付けられたチェックを、前記命令の関連付けられたメモリアクセスのセットに対し実行する段階を含む、請求項9または10に記載の方法。
【請求項12】
前記セキュリティチェックポリシーは、メモリ安全性チェックポリシーである、請求項9から11のいずれか一項に記載の方法。
【請求項13】
前記セキュリティチェックポリシーは、型安全性チェックポリシーである、請求項9から11のいずれか一項に記載の方法。
【請求項14】
前記セキュリティチェックポリシーの前記1または複数の関連付けられたチェックは、メモリ安全性チェックおよび型安全性チェックを含む、請求項9に記載の方法。
【請求項15】
前記1または複数の関連付けられたチェックは、前記ハードウェアプロセッサのアーキテクチャ仕様の完全準拠チェックより少ない、請求項9に記載の方法。
【請求項16】
前記命令は、プログラム順序において後続するメモリアクセス命令に関連付けられたセキュリティチェック命令である、請求項9から15のいずれか一項に記載の方法。
【請求項17】
ハードウェアプロセッサに、
前記ハードウェアプロセッサのデコーダを用いて、命令をデコードされた命令にデコードする手順と、
前記命令内のセキュリティチェックフィールドを検出する手順と、
潜在的に投機ミスされる実行に対し強制実行されるべきセキュリティチェックポリシーを、前記セキュリティチェックフィールドに基づき、複数のセキュリティチェックポリシーから判定する手順と、
前記セキュリティチェックポリシーの1または複数の関連付けられたチェックを前記命令に対し実行して、前記命令が潜在的に投機ミスされるか否かを判定する手順と、
前記1または複数の関連付けられたチェックにより前記命令が安全ではないとみなされた場合に、前記命令の実行をスケジューリングする手順と、
前記1または複数の関連付けられたチェックにより前記命令が安全であるとみなされた場合に、前記命令を省略する手順と、
前記ハードウェアプロセッサの実行ユニットを用いて、実行のためのスケジューリングがされた前記命令を実行する手順と、を実行させるための、プログラム。
【請求項18】
前記セキュリティチェックフィールドは、コンパイラにより提供されるヒントである、請求項17に記載のプログラム。
【請求項19】
前記実行する手順は、前記セキュリティチェックポリシーの前記1または複数の関連付けられたチェックを、前記命令の関連付けられたメモリアクセスのセットに対し実行する手順を含む、請求項17または18に記載のプログラム。
【請求項20】
前記セキュリティチェックポリシーは、メモリ安全性チェックポリシーである、請求項17から19のいずれか一項に記載のプログラム。
【請求項21】
前記セキュリティチェックポリシーは、型安全性チェックポリシーである、請求項17から19のいずれか一項に記載のプログラム。
【請求項22】
前記セキュリティチェックポリシーの前記1または複数の関連付けられたチェックは、メモリ安全性チェックおよび型安全性チェックを含む、請求項17に記載のプログラム。
【請求項23】
前記1または複数の関連付けられたチェックは、前記ハードウェアプロセッサのアーキテクチャ仕様の完全準拠チェックより少ない、請求項17に記載のプログラム。
【請求項24】
前記命令は、プログラム順序において後続するメモリアクセス命令に関連付けられたセキュリティチェック命令である、請求項17から23のいずれか一項に記載のプログラム。
【請求項25】
請求項17から24のいずれか一項に記載のプログラムを格納した非一時的機械可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
[背景技術]
プロセッサ、またはプロセッサのセットは、例えば、命令セットアーキテクチャ(ISA)といった命令セットから命令を実行する。命令セットは、プログラミングに関連するコンピュータアーキテクチャの一部であり、概して、ネイティブのデータ型、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込みおよび例外処理、並びに外部入力および出力(I/O)を含む。本明細書において、命令という用語は、例えば、プロセッサに実行のために提供される命令であるマクロ命令、または、例えば、プロセッサのデコーダがマクロ命令をデコードした結果から得られる命令であるマイクロ命令を指してよいことに留意されたい。
【図面の簡単な説明】
【0002】
本開示による様々な実施形態について、図面を参照して説明する。
【0003】
【
図1】本開示の実施形態による、プロセッサコアを含むコンピュータシステムを示す。
【0004】
【
図2】本開示の実施形態によるセキュリティチェック命令を省略するためのフロー図を示す。
【0005】
【
図3】本開示の実施形態により、ヒントをコード内に発出するためのフロー図を示す。
【0006】
【0007】
【
図5A】本開示の実施形態による、汎用ベクトル向け命令フォーマットおよびそのクラスA命令テンプレートを示すブロック図である。
【0008】
【
図5B】本開示の実施形態による、汎用ベクトル向け命令フォーマットおよびそのクラスB命令テンプレートを示すブロック図である。
【0009】
【
図6A】本開示の実施形態による、
図5Aおよび
図5B中の汎用ベクトル向け命令フォーマットのためのフィールドを示すブロック図である。
【0010】
【
図6B】本開示の一実施形態による、
図6A中の特定ベクトル向け命令フォーマットのフルオペコードフィールドを構成するフィールドを示すブロック図である。
【0011】
【
図6C】本開示の一実施形態による、
図6A中の特定ベクトル向け命令フォーマットのレジスタインデックスフィールドを構成するフィールドを示すブロック図である。
【0012】
【
図6D】本開示の一実施形態による、
図6A中の特定ベクトル向け命令フォーマットの拡張オペレーションフィールド550を構成するフィールドを示すブロック図である。
【0013】
【
図7】本開示の一実施形態による、レジスタアーキテクチャのブロック図である。
【0014】
【
図8A】本開示の実施形態による、例示的なインオーダパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。
【0015】
【
図8B】本開示の実施形態による、プロセッサに含まれるべき例示的実施形態のインオーダアーキテクチャコアおよび例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。
【0016】
【
図9A】本開示の実施形態による、単一のプロセッサコアを、オンダイ相互接続ネットワークへ接続された状態およびそのレベル2(L2)キャッシュのローカルサブセットを有する状態と共に示すブロック図を示す。
【0017】
【
図9B】本開示の実施形態による、
図9A中のプロセッサコアの一部の拡大図である。
【0018】
【
図10】本開示の実施形態による、2個以上のコアを有してよい、統合メモリコントローラを有してよい、統合グラフィックを有してよい、プロセッサのブロック図である。
【0019】
【
図11】本開示の一実施形態による、システムのブロック図である。
【0020】
【
図12】本開示の実施形態による、より具体的な例示的システムのブロック図である。
【0021】
【
図13】本開示の実施形態による、第2のより具体的な例示的システムのブロック図である。
【0022】
【
図14】本開示の実施形態による、システムオンチップ(SoC)のブロック図が示される。
【0023】
【
図15】本開示の実施形態による、ソース命令セット内のバイナリ命令を、ターゲット命令セット内のバイナリ命令に変換するソフトウェア命令コンバータの使用を対比するブロック図である。
【発明を実施するための形態】
【0024】
以下の説明では、多くの具体的な詳細について記載される。しかしながら、本開示の実施形態は、これらの具体的な詳細を省いても実施可能であることを理解されたい。他の例においては、本説明の理解を不明瞭にしないために、周知の回路、構造および技術は詳細に示されていない。
【0025】
本明細書中の「一実施形態(one embodiment)」、「実施形態(an embodiment)」、「例示的な実施形態(an example embodiment)」等への言及は、記載される実施形態は、特定の機能、構造または特性を含んでよいが、すべての実施形態が必ず特定の機能、構造または特性を含んでいなくてもよいことを示す。また、このような文言は、必ずしも同一の実施形態を指していない。さらに、ある実施形態に関連して特定の機能、構造または特性が説明されている場合は、明示の記載の有無に関わらず、他の実施形態に関し、このような機能、構造または特定に影響が及ぶことは、当業者の知識の範囲内であると考えられる。
【0026】
(例えば、ハードウェア)プロセッサ(例えば、1または複数のコアを有する)は、命令(例えば、命令のスレッド)を実行して、データに対し処理、例えば、算術的、論理的または他の機能を実行してよい。例えば、ソフトウェアはオペレーションを要求してよく、ハードウェアプロセッサ(例えば、コアまたはハードウェアプロセッサのコア)は、当該要求に応答してオペレーションを実行してよい。ソフトウェアは、プログラム順序とは異なる命令シーケンスの実行を生じさせる1または複数の分岐(例えば、分岐命令)を含んでよい。分岐命令は、常に分岐をもたらす無条件分岐であってよく、または、特定の条件により分岐をもたらしてもよい、またはもたらさなくてよい条件分岐であってよい。特定のプロセッサは、より多くの命令がより高速に完了することを可能にするためにパイプライン化される。これは、概して、前の命令が完了するのを待機せず、命令(例えば、投機的)の実行を開始することを意味する。しかしながら、条件分岐により、このアプローチに関する問題が生じる。特に、プロセッサが条件分岐に遭遇した場合に、当該条件の結果がまだ計算されていないときは、プロセッサは分岐を取るべきか否かがわからない。分岐予測とは、特定のプロセッサが、条件分岐を取るか否かを決定するために用いるものである。不正確な予測(例えば、予測ミス)は、特定のプロセッサに対し、実行する必要のなかったすべての命令を破棄させ、正しい命令セットでやり直すことを生じさせ、例えば、このプロセスが深くパイプラインされたプロセッサを用いている場合に特にコスト高となるので、この情報を可能な限り正確に取得することが重要である。一実施形態において、プロセッサの分岐予測器は積極的に投機を行い、例えば、アウトオブオーダの深さおよび幅を増大させ、大きな性能を取得する。
【0027】
特定の実施形態において、投機実行(例えば、分岐予測を含む)をサポートするハードウェアプロセッサにより実行されるべきコードは、1または複数のセキュリティチェック(例えば、セキュリティチェック命令)を含む。特定のセキュリティチェック(例えば、メモリ安全性チェックまたは型安全性チェックを強制実行する)は、静的解析(例えば、コンパイラによる)を用いて省略されてよいが、その解析は、投機実行を考慮に入れるように拡張されるべきである。所望のセキュリティポリシーを、投機ミスの実行パスを含むすべての可能性のある実行パスに対し強制実行するには、追加のセキュリティチェックとなり得る。しかしながら、特定の実施形態において、投機ミスはまれにしか生じないものであり、そのため、これらの実施形態において、これらのセキュリティチェックは、通常は不要である追加のオーバーヘッドを課すこととなる。
【0028】
特定の実施形態において、メモリ安全性チェックは、メモリアクセスエラー、例えば、バッファオーバーフローおよびダングリングポインタ等をチェックする。一実施形態において、メモリ安全性チェックは、配列の境界およびポインタの参照外しをチェックする。
【0029】
特定の実施形態において、型安全性チェックは、プログラムの定数、変数およびメソッド(例えば、関数)のための異なるデータ型間の矛盾をチェックする(例えば、メモリアクセス要求のために)ものであり、例えば、整数(int)であるデータを、浮動小数点の数値(float)として扱うエラーがある。
【0030】
本明細書における特定の実施形態は、プロセッサのアーキテクチャを拡張して、チェックされているオペレーションが潜在的に投機ミスされ得る場合にのみ、特定のセキュリティチェックが必要となるというヒント(例えば、コンパイラにより発出される)を読み取らせる。プロセッサが、オペレーションが安全とみなされないと判定する場合、チェックが実行されてよく、且つ投機が継続されてよく、これにより、最適化の機会を向上させる。一方で、これらの実施形態において、プロセッサが、オペレーションの実行準備が整うまでに、かかるオペレーションが安全であると判定した場合は、関連付けられたセキュリティチェックをスキップして、オーバーヘッドを減少させてよい。本明細書における特定の実施形態は、命令が投機ミスされ得る場合にのみ、セキュリティチェックが実行されるべきであることを指定する方法を提供する。将来のコンパイラは、コンパイラにより発出されるセキュリティチェック命令の数を増やす可能性があり、その結果、チェックが潜在的な投機制御フローに対し、安全性(例えば、型)を強制実行する。このような場合に、本明細書の特定の実施形態は、正しく予測されている/アーキテクチャ上正しいとわかっている制御フローに対し、スキップ可能なセキュリティチェックはどれかに関する情報をマイクロアーキテクチャに伝達(例えば、コンパイラから)することで、有利な効率性を提供する。
【0031】
フェンスを用いて、先行するセキュリティチェックが完了するまで、当該チェックにより制限されているオペレーションの投機実行を制限できる。投機実行におけるセキュリティチェックの省略のための本明細書の実施形態とは異なり、フェンスは、セキュリティチェックに依存していないオペレーションの投機実行も制限する可能性があり、故に、プロセッサの性能を最適化する能力を制限する。
【0032】
特定の実施形態において、ハードウェアプロセッサにおけるハードウェア投機攻撃に対し防御するための戦略は、データキャッシュ階層内で投機を不可視にすることであり、例えば、情報をリークさせ得るような態様でマイクロアーキテクチャの状態に影響を及ぼすことなく、且つ、投機実行の継続が許可される時点よりも前の状態変更をバッファすることなく、ロードを安全に進められる時点をより正確に判定することである。一実施形態において、当該戦略は、例えば、安全でない投機ロードがデータを投機バッファに読み込んでしまうような投機ロードを理由に、マルチプロセッサデータキャッシュ階層を修正することなく、マルチプロセッサのデータキャッシュ階層を通るマイクロアーキテクチャのカバートチャネル(隠れ通信路)およびサイドチャネルをブロックする。ロードが安全になった時点で、この戦略はそれらをシステムの残部に対し可視にする。この戦略は、メモリ整合性を害した可能性のあるロードを識別し、この時点で、これらのロードに対し、検証ステップの実行を強制する。投機実行におけるセキュリティチェックの省略のための本明細書の実施形態と異なり、上記の戦略は、もし開発者が、当該戦略が強制するキャッシュアクセス可視性のアーキテクチャ仕様の、より厳格な完全準拠チェックよりも、緩いセキュリティポリシー(メモリ安全性または型安全性等)を強制実行することにのみ関心がある場合は、ロードを安全に実行可能な時点を判定するにおいて、過度に悲観的である。この戦略は、またバッファ領域に対する要求も増大させる。バッファロジックはまた、特に、最終的にロードの実行が許容される際に、当該戦略はバッファされたロードを再発行するので、追加のオーバーヘッドと複雑性をもたらす。投機実行におけるセキュリティチェックの省略のための本明細書の実施形態は、開発者が所望する特定のセキュリティポリシーを強制実行するセキュリティチェックの使用(例えば、コンパイラにより挿入され)を可能にし、これらのチェック自体を投機的に実行し、これらのチェックが行われなかった場合よりも早期に、オペレーション(例えば、ロード)が安全であると宣言できるようにする。投機実行におけるセキュリティチェックの省略のための本明細書の実施形態は、バッファと共に用いられてよいことを留意されたい。
【0033】
投機実行におけるセキュリティチェックの省略のための本明細書の実施形態は、開発者により所望されるセキュリティポリシーを強制実行するセキュリティ手段を含む新しいタイプの命令(および以前に定義された命令への修飾子)を定義し、同時に、顕著な動的最適化を可能にする。例えば、当該命令は、チェックされているアドレスからのロードが安全ではないとみなされる場合にのみ、境界チェック命令(例えば、ポインタ命令またはメモリ保護拡張(MPX)境界チェック命令(例えば、下限または上限のチェック)のための機能)または暗黙の境界チェックおよび型チェックのセットを、必要とマークすることを可能にする。プロセッサがその命令に到達したとき、安全性基準が既に満たされている(例えば、先行する分岐の正しい方向が決定済み)場合は、プロセッサは、その命令をスキップしてよい。特定の実施形態において、この文脈における機能は、ポインタストレージ内に埋め込まれた関連付けられたセキュリティメタデータを持つポインタを指す。
【0034】
データリークをもたらし得る共通のセキュリティ問題を回避すべく、タイプセーフ言語が、開発者により彼らのプログラム内に用いられてよい。特定の実施形態において、メモリ安全性は、同程度に厳格ではない(例えば、型の取り違えを防止しない)が、実行にあたりオーバーヘッドをより少なく課す可能性がある。投機実行におけるセキュリティチェックの省略のための本明細書の実施形態は、プロセッサに対し、投機ミスがされ得る制御フローに対してのみ必要なセキュリティチェックは何かを通知するヒント(例えば、コンパイラにより提供される)を用いることで、実行のアーキテクチャのパスおよび投機ミスのパスの両方に沿って、セキュリティポリシーの真部分集合(例えば、メモリ安全性および/または型安全性)をより効率的に強制実行する方法を提供する。特定の実施形態において、潜在的に投機ミスされる命令についてのみ必要なチェックを示すヒントは、コード内でプログラムに対し可視である。
【0035】
投機実行におけるセキュリティチェックの省略のための本明細書の実施形態の基礎をなす基本的概念は、一部のプログラムは、プログラムを実行するプロセッサのアーキテクチャ仕様に完全準拠するよりも、ポリシーの真部分集合(例えば、全部より少ない)(例えば、メモリ安全性および/または型安全性ポリシー)を強制実行するだけでよいという点にあり、それにより、より厳格なポリシーが強制実行される場合に特定のセットのプロセッサリソースにとって可能となったであろうものよりも、より大きな投機実行の機会を提供する。
【0036】
故に、投機実行におけるセキュリティチェックの省略のための本明細書の実施形態の一態様は、完全なアーキテクチャの準拠を要求する代わりに、境界チェックおよび型チェック等の特定の狭いタイプのセキュリティチェックを用いて、投機実行をゲートする。これは、関連するチェック(例えば、ポインタチェック、MPXチェックまたは他の定義されたチェックの機能)が完了する前に、セキュリティセンシティブなオペレーション(例えば、メモリロード)により誘発される、敵対者に可視となるマイクロアーキテクチャの状態変更が生じるのを防止することで実現されてよい。例えば、これは、チェックが完了するまで、さらなる投機実行をブロックする、または、もたらされる状態変更をバッファし、チェックが失敗した場合にそれらをロールバックするという形態を取ってよい。
【0037】
第2に、これは、投機ミスの可能性のある制御フローをカバーするために、さらに多くのセキュリティチェックが必要となり得ることを示唆する。これに対し、以前は、コンパイラがアーキテクチャ上あり得ないフローに対しチェックを静的に省略したであろう。これは、特定の実施形態のコンパイラが、すべての可能な投機制御フローを識別可能なように、投機実行のモデルを有することを必要とする。
【0038】
第3に、効率性の理由で、特定の実施形態のコンパイラは、プロセッサに対し、チェックされている値がそれらのアーキテクチャの定義に準拠している場合に、プロセッサがそれらのチェックをスキップできるように、どのセキュリティチェックが追加(さもなければ省略されたであろう)されているかについて通知できる必要がある。それらのチェックをスキップ(例えば、それらのチェックの実行ユニットへのディスパッチをスキップ)することにより、プロセッサのエネルギー、帯域幅および他のリソースを節約し、故に、プロセッサ(例えば、プロセッサを含むコンピュータ)への改善となる。
【0039】
以下のコードは、この第3の態様に関し作成されたものである。投機実行におけるセキュリティチェックの省略のための本明細書の実施形態は、チェックにより制限されているオペレーションが何らかの点で安全であるとまだみなされていない場合に、どのセキュリティチェックのみが必要であるかに関するヒント(例えば、コンパイラによって提供される)をプロセッサが使用することを可能にする。例えば、以下のサンプル擬似コードについて考えてみよう。
【表1】
【0040】
特定の実施形態において、以下のアクセスのための境界チェックは無条件で実行される必要がある。というのは、"id"の任意の値がこの機能に提供され得るからである(この例について、インライン化の可能性を除く)。コンパイラは、ソケットのアドレスはプロセッサにより投機されないことを前提に、このアクセスの型安全性を静的に検証可能であるので、型チェックは必要でなくてよい。そうではなく、そのレベルの投機が可能な場合は、動的型安全性チェックにより、投機の実行をさらに進めつつ、同時に型安全性が強制実行されることを保証することを可能にしてよい。
【0041】
しかしながら、特定の実施形態においては、たとえアドレス投機が可能であったとしても、コンパイラは、ソケットのアドレスがそのアーキテクチャの定義に合致する場合、型安全性チェックは不要であると静的に決定してよいことに留意されたい。例えば、該当する場合、ソケットのアドレスのロード元のメモリ位置をアリアスする可能性のある先行分岐または先行ストア等について、プロセッサ(例えば、中央処理装置(CPU))が既に任意の条件を解決済みである、または、ソケットのアドレスのプロセッサのアーキテクチャ定義からの逸脱(例えば、投機ミス)を潜在的に生じさせた可能性のある命令をリタイア済みである場合に、この後者の条件は満たされる。
【0042】
投機実行におけるセキュリティチェックの省略のための本明細書の実施形態は、コンパイラが、プロセッサに、アクセスの実行準備が整った時点で、以下のアクセスに入力されたアドレスがアーキテクチャ上のものであるとプロセッサ(例えば、CPU)により既に判定された場合は、型安全性チェックは省略可能であることを示すヒントを渡すことを可能にする。
【0043】
一実施形態において、上記の擬似コード内のdynamic_castルーチンは、パラメータがキャストされるポインタのタイプを指定するテンプレートパラメータを受け取る。dynamic_castルーチンは、入力パラメータのタイプが、テンプレートパラメータのサブクラスであるか否か、または、それらが正確に合致するか否かを判定するための動的チェックを実行する。是である場合、ルーチンの結果は、入力ポインタと同一アドレスを持つ新しいタイプのオブジェクトへのポインタである。それ以外の場合、dynamic_castはヌルを返す。
【0044】
1つの例として、この"if"ステートメントは、コンパイラに、条件制御フローを実行するための分岐命令を生成させる。当該ifステートメントのこの分岐内の命令が実行されるまでに、前の分岐が解決済みである場合、型チェックは通過される。これは、ts->portへの後続のアクセスも、tsの境界の範囲内にあることを示唆する。故に、このts->portアクセスに、アクセスされているアドレスがそのアーキテクチャの定義に合致することが既に判明しており、すべての先行する分岐が既に解決済みである場合は、型チェックおよび境界チェック(例えば、境界チェック命令)は省略されてよいことを示すヒントが供給されてよい。これは、lookupSocket内の最後のステートメントから生成されるアクセスに指定されたものよりも、さらに強い制限であることに留意されたい。各タイプの制限について、複数のタイプのヒント(例えば、異なる命令プレフィックスまたは異なる命令バリアント)が定義されてよい。
【0045】
上記の擬似コードの別の例として、分岐が投機ミスされ、その結果、あたかもそれがTCPIPSocketであるかのようにLocalDomainSocketがアクセスされる場合、LocalDomainSocketオブジェクトの末尾のすぐの箇所に格納された16ビットのデータが用いられて、tcpipServicesアレイへインデックスされる。これが、何らかの機密データ、例えば、サーバの秘密キーの一部が格納された場所について生じる場合、その情報は、アレイ全体が最初にキャッシュされないことを前提に、tcpipServicesアレイ内のどのエントリがキャッシュに入れられるかを判定できる可能性がある。敵対者が、例えば、各サービスへの接続を試み、接続が確立されるまでの所要時間を計時する等により、tcpipServicesアレイへの後続のアクセスを計時できる場合、それは機密データの値をリークする可能性がある。最も早く接続するサービスは、機密データと等しいポート番号を持つものであってよい。暗号キーは、例示の16ビットより大きい可能性があるが、何であれ秘密キーをリークすることは潜在的に問題である。また、キーのリーク以上のものをもたらし得る、この例で説明したものよりも複雑なシナリオも存在し得る。
【0046】
アクセスの実行準備が整ったが、アクセスは、上で定義された基準により、安全であるとまだみなされていない場合、境界チェックおよび型チェックが実行されてよい。分岐が投機ミスされると、境界チェックおよび型チェックの両方がこの場合において失敗する。しかしながら、他の場合においては、1種類のチェックのみが失敗し得る。
【0047】
いくつかの場合においては、オブジェクトの開始へのポインタと、オブジェクト内の他のオフセットへのポインタとの間を区別することが有用であってよい。その結果、ポインタがオブジェクトのベースを指しており、静的チェックで十分であろう場合であっても、後者のタイプのポインタのサブタイプを用いて、アクセスへの動的境界チェックが実行されてよい。ポインタがオブジェクトの開始をポイントするか否かの表記をポインタ内に指定することで効率性を高めてよい。例えば、ポインタ(またはfatポインタ)がオブジェクトベースに対し初期化される場合、予約ビットがポインタ内に設定されてよく、後続のポインタ更新が、得られるポインタがそのオブジェクトベースをポイントするか否かに応じて、そのビットを更新してよい。
【0048】
図1は、本開示の実施形態によるプロセッサコア109を含むコンピュータシステム100を示す。プロセッサコア109は、本明細書で説明する投機機能の制御を管理するための投機マネージャ110を含んでよい。スケジューラ147は、本明細書で説明する投機実行機能におけるセキュリティチェック省略を含む投機マネージャ110を含んでよい。特定の実施形態において、投機マネージャ110は、特定のセキュリティチェックポリシーのために実行されるべき1または複数の関連付けられたチェックを格納するためのセキュリティチェックポリシー112を含む。例えば、第1のセキュリティチェックポリシーは、メモリ安全性チェックポリシー114であってよく、第2のセキュリティチェックポリシーは、型安全性チェックポリシー116であってよい。特定の実施形態において、投機マネージャ110は、コード(例えば、追加のヒントを持つコード106)(例えば、ヒントが追加された命令、またはコード106からのその命令のデコードされた命令)にアクセスし、どのポリシーを適用するかを判定し、その後、1または複数の関連付けられたチェックを省略することが安全か安全でないかを判定する。一実施形態において、投機マネージャ110は、例えば、省略されるべき命令(例えば、マイクロコード)のスケジューリングを停止(故に実行を停止)するための、コア109のスケジューラ147へのパス110Aを含む。パス110Aは、一方向通信または双方向通信を可能にしてよい。一実施形態において、スケジューラ147は、1または複数の実行ユニット154上の命令(例えば、マイクロコード)の実行をスケジューリングする。
【0049】
図示されたコンピュータシステム100は、本開示の実施形態による、パイプライン化されたプロセッサコア109(1)~109(N)内に分岐予測器120および分岐アドレス計算器142(BAC)を含む。
図1を参照すると、パイプライン化されたプロセッサコア(例えば、109(1))は、命令ポインタ生成(IP Gen)ステージ111、フェッチステージ130、デコードステージ140および実行ステージ150を含む。特定の実施形態において、リタイヤメントステージ(例えば、リオーダバッファ(ROB)を含む)が実行ステージ150の後にくる。一実施形態において、コンピュータシステム(例えば、プロセッサ)100は、複数のコア109(1~N)を含み、Nは任意の正の整数である。別の実施形態において、コンピュータシステム(例えば、プロセッサ)100は、シングルコアを含む。特定の実施形態において、各プロセッサコア109(1~N)インスタンスは、マルチスレッディング(例えば、2または2より多いオペレーションまたはスレッドの並行セットを第1の論理コアおよび第2の論理コアに実行)をサポートし、これは、タイムスライスマルチスレッディング、同時マルチスレッディング(例えば、単一の物理コアが、当該物理コアが同時マルチスレッディングを行っているスレッドの各々に、論理コアを提供する場合)、またはこれらの組み合わせ(例えば、タイムスライスフェッチおよびデコーディング並びにその後の同時マルチスレッディング)を含む様々な方法でそのように実行されてよい。示される実施形態においては、各単一のプロセッサコア109(1)から109(N)は、分岐予測器120のインスタンスを含む。分岐予測器120は、分岐ターゲットバッファ(BTB)124を含んでよい。
【0050】
特定の実施形態において、分岐ターゲットバッファ124は、複数の分岐命令(例えば、複数回実行されたコードのセクションの分岐命令)の各々に対応する予測されたターゲット命令を格納(例えば、分岐予測器アレイ内に)する。示される実施形態においては、分岐アドレス計算器(BAC)142は、BACがアクセス(例えば、含む)するリターンスタックバッファ144(RSB)を含む。特定の実施形態においては、リターンスタックバッファ144は、任意のCALL命令(例えば、スタックにそれらの戻りアドレスをプッシュする)の戻りアドレスを格納(例えば、後入れ先出し(LIFO)のスタックデータ構造で)する。
【0051】
分岐アドレス計算器(BAC)142は、特定のタイプの分岐命令のアドレスを計算する、および/または、分岐予測器(例えば、BTB)によりなされた分岐予測を検証するために用いられる。特定の実施形態において、分岐アドレス計算器は、分岐ターゲットの、および/または次のシーケンシャルの、線形アドレス計算を実行する。特定の実施形態において、分岐アドレス計算器は、アドレス計算に基づき、分岐に対し、静的予測を実行する。
【0052】
特定の実施形態において、分岐アドレス計算器142は、CALL命令の戻りアドレスを記録するためのリターンスタックバッファ144を含む。一実施形態において、分岐アドレス計算器は、分岐予測ミスのペナルティを低減すべく、分岐予測器120によってなされた不適切な予測を訂正することを試みる。1つの例として、分岐アドレス計算器は、分岐命令および命令ポインタから唯一に判定可能なターゲットを持つ分岐に対する分岐予測を検証する。
【0053】
特定の実施形態において、分岐アドレス計算器142は、リターンスタックバッファ144を、戻り命令のターゲットアドレスを判定するための分岐予測メカニズムとして用いられるように維持する。例えば、リターンスタックバッファ144は、すべての"呼び出しサブルーチン"および"サブルーチンからの戻り"分岐命令をモニタリングすることで動作する。一実施形態において、分岐アドレス計算器が、"呼び出しサブルーチン"分岐命令を検出すると、分岐アドレス計算器は、次の命令のアドレスをリターンスタックバッファにプッシュし、例えば、スタックポインタの最上部が、リターンスタックバッファの最上部をマークする。この実施形態では、各"呼び出しサブルーチン"命令の直後のアドレスをリターンスタックバッファにプッシュすることで、リターンスタックバッファは、リターンアドレスのスタックを含む。後で分岐アドレス計算器が"サブルーチンからの戻り"分岐命令を検出したとき、分岐アドレス計算器は、例えば、分岐予測器120により予測されたリターンアドレスを検証すべく、リターンスタックバッファから最上部のリターンアドレスを取り出す。一実施形態において、直接分岐タイプについては、分岐アドレス計算器は、(例えば、常に)条件分岐を取ると予測し、例えば、分岐予測器が直接分岐を取ると予測していない場合、分岐アドレス計算器は、分岐予測器の予測ミスまたは不適切な予測を上書きする。
【0054】
図1中のコア109は、分岐予測器120によってなされた分岐予測を検証するための回路を含む。各分岐予測器120エントリは(例えば、BTB124内にある)、さらに、分岐予測器120によってなされた分岐予測の精度を高め且つ検証をするために用いられる有効フィールドおよびバンドルアドレス(BA)フィールドを含み得、これについては後でより詳しく説明する。一実施形態において、有効フィールドおよびBAフィールドはそれぞれ、1ビットフィールドで構成されている。しかしながら、他の実施形態においては、有効フィールドおよびBAフィールドのサイズは異なってよい。一実施形態において、フェッチされた命令は、デコードされるべく、デコーダ146に送信(例えば、BAC142により、ライン137から)され、デコードされた命令は、実行ユニット154の1または複数における実行をスケジューリングすべく、スケジューラ147に送信される。
【0055】
図示されたコンピュータシステム100は、ネットワークデバイス101、入/出力(I/O)回路103(例えば、キーボード)、ディスプレイ105およびシステムバス(例えば、相互接続)107を含む。
【0056】
一実施形態において、分岐予測器120内に格納された分岐命令は、取得される分岐命令として、コンパイラによって事前選択される。特定の実施形態においては、
図1のメモリ内102に格納された図示されるようなコンパイラコード104が、実行時に高水準言語で記述されたプログラムのソースコードを、実行可能な機械コードに変換するコードシーケンスを含む。一実施形態において、コンパイラコード104は、さらに、追加のヒントを持つコード106を形成するためのヒントを含む。コンパイラコードは、さらに、分岐命令(例えば、取得される可能性のある分岐命令(例えば、予め選択された分岐命令))のターゲット命令を予測してよい。分岐予測器120(例えば、そのBTB124)は、その後、分岐命令のターゲット命令で更新される。一実施形態において、ソフトウェアがハードウェアBTBを管理し、例えば、当該ソフトウェアが予測モードを指定する、または、BTBに書き込みを行う命令のモードによって暗黙に定義された予測モードがエントリ内にモードビットも設定する。
【0057】
以下に説明するように、図示されたコア(例えば、その分岐予測器120)は、1または複数のレジスタへのアクセスを含む。特定の実施形態において、コアは、1または複数の汎用レジスタ108を含む。
【0058】
特定の実施形態において、分岐予測器120の各エントリ(例えば、そのBTB124内にある)は、タグフィールドおよびターゲットフィールドを含む。一実施形態において、BTBストア内の各エントリのタグフィールドは、分岐命令を識別する命令ポインタ(例えば、メモリアドレス)の少なくとも一部を格納する。一実施形態において、BTBストア内の各エントリのタグフィールドは、コード内の分岐命令を識別する命令ポインタ(例えば、メモリアドレス)を格納する。一実施形態において、ターゲットフィールドは、同一エントリのタグフィールド内で識別された分岐命令のターゲットのための命令ポインタの少なくとも一部を格納する。また、他の実施形態において、分岐予測器120のエントリ(例えば、そのBTB124内にある)は、1または複数の他のフィールドを含む。特定の実施形態において、エントリは、例えば、分岐命令が存在する(例えば、BTB内に)場合は、当該分岐命令が取得されるとみなされるといったように、分岐命令が取得されるかどうかの予測を支援するための別個のフィールドは含まない。
【0059】
図1に示されるように、IP生成ステージ111のIP Gen mux113は、ライン114Aから命令ポインタを受信する。ライン115Aを介して提供される命令ポインタは、インクリメント回路115によって生成され、インクリメント回路115は、パス113Aから最新の命令ポインタのコピーを受信する。インクリメント回路115は、コアによって現在実行されているプログラムシーケンスから次のシーケンシャル命令を取得すべく、命令ポインタを予め定められた量だけインクリメントしてよい。
【0060】
一実施形態において、IP Gen mux113からIPを受信するとすぐに、分岐予測器120は、IPの一部を、分岐予測器120(例えば、BTB124)内の各エントリのタグフィールドと比較する。この実施形態において、IPと分岐予測器120のタグフィールドとの間に合致が見つからない場合、IP Gen muxは続けて、次のシーケンシャルIPを、フェッチされるべき次の命令として選択する。反対に、合致が検出された場合、分岐予測器120は、IPと合致した分岐予測器エントリの有効フィールドを読み取る。この実施形態において、有効フィールドが設定されていない(例えば、論理値0を有する)場合、分岐予測器120は、それぞれのエントリを"無効"とみなし、IPとそれぞれのエントリのタグとの間の合致を無視し、そして、例えば、それぞれのエントリの分岐ターゲットは、IP Gen Muxに転送されない。一方で、この実施形態において、合致するエントリの有効フィールドが設定されている(例えば、論理値1を有する)場合、分岐予測器120は続けて、命令ポインタ(IP)の予め定められた部分と、合致する分岐予測器エントリの分岐アドレス(BA)フィールドとの間の論理比較を実行する。 "許容可能な条件"が存在する場合、合致するエントリの分岐ターゲットは、IP Gen muxに転送される。そうでない場合、分岐予測器120はIPと分岐予測器エントリのタグとの間の合致を無視する。いくつかの実施形態において、エントリインジケータが現在の分岐IPだけでなく、グローバル履歴の少なくとも一部からも形成される。
【0061】
より具体的には、一実施形態において、BAフィールドは、それぞれの分岐命令がキャッシュメモリ132のライン内のどこに格納されているかを示す。特定の実施形態において、プロセッサは、クロックサイクルごとに、複数の命令の実行を開始でき、ここで命令は、相互依存しておらず、同一の実行リソースを使用しない。
【0062】
例えば、
図1中に示される命令キャッシュ132の各ラインは、複数の命令(例えば、6つの命令)を含む。また、この実施形態において、フェッチユニット134によるフェッチオペレーションに応答して、命令キャッシュ132は、キャッシュのフルラインを、フェッチユニット134に提供することで、応答する(例えば、"ヒット"の場合)。キャッシュのライン内の命令は、別個の"バンドル"としてグループ化されてよい。例えば、
図1に示されるように、キャッシュライン133内の第1の3つの命令は、バンドル0としてアドレス指定されてよく、第2の3つの命令は、バンドル1としてアドレス指定されてよい。バンドル内の命令の各々は互いに独立している(例えば、実行のために同時発行可能)。特定の実施形態において、分岐予測器120エントリ内に設けられたBAフィールドは、それぞれのエントリに対応する分岐命令のバンドルアドレスを識別するために用いられる。例えば、一実施形態において、BAは、分岐命令が特定のキャッシュラインの第1のバンドルまたは第2のバンドルのいずれに格納されているかを識別する。
【0063】
一実施形態において、分岐予測器120は、合致するエントリのBAフィールドと、IPの予め定められた部分との間の論理比較を実行して、"許容可能な条件"が存在するかどうかを判定する。例えば、一実施形態において、IPの5番目のビット位置(例えば、IP[4])が、合致する(例えば、BTB)エントリのBAフィールドと比較される。一実施形態において、IP[4]がBAより大きくない場合に、許容可能な条件が存在する。このような許容可能な条件は、分岐命令の明らかに不要な予測を防止することに役立ち、このような分岐命令は実行されなくてよい。すなわち、分岐予測器120のタグとの比較を行う際にIPの全部より少ないものが考慮される場合、タグとの合致を有することは可能であるが、それは真の合致ではない可能性がある。にもかかわらず、IPと分岐予測器のタグとの間の合致は、キャッシュの特定のラインを示し、当該特定のラインは、それぞれの分岐予測器エントリに対応する分岐命令を含み、まさに実行される予定であってよい。具体的に言うと、IPのバンドルアドレスが合致する分岐予測器エントリのBAフィールドより大きくない場合は、それぞれのキャッシュライン内の分岐命令はすぐに実行される予定である。従って、特定の実施形態において、分岐命令のターゲットのフェッチに進むことで、性能の利益が得られてよい。
【0064】
上記の通り、この例では、"許容可能な条件"が存在する場合、合致するエントリの分岐ターゲットは、IP Gen muxに転送されることになる。そうでない場合、分岐予測器は、IPとタグとの間の合致を無視することになる。一実施形態において、分岐予測器から転送された分岐ターゲットは、最初に分岐予測(BP)resteer mux128に送信されてから、IP Gen muxに送信される。
図1に示されるように、BP resteer mux128は、他の分岐予測デバイスからの命令ポインタも受信してよい。一実施形態において、BP resteer muxによって受信される入力ラインは、どの入力ラインが、BP resteer muxからIP Gen muxへと渡されることが可能かを決定するために優先順位付けされる。
【0065】
分岐ターゲットをBP resteer muxに転送することに加え、IPと分岐予測器のタグとの間の合致が検出されるとすぐに、合致する分岐予測器エントリのBAが分岐アドレス計算器(BAC)142に転送される。
図1中、BAC142は、デコードステージ140に位置するように図示されているが、他のステージに位置してもよい。BACは、フェッチユニット134からライン137を介してキャッシュラインを受信してもよい。
【0066】
この例において、IP Gen muxにより選択されるIPも、データライン135を介してフェッチユニット134に転送される。IPがフェッチユニット134に受信されると、当該IPに対応するキャッシュラインが、命令キャッシュ132からフェッチされる。命令キャッシュから受信されるキャッシュラインは、データライン137を介してBACに転送される。
【0067】
この例において、BAを受信するとすぐに、BACはBAを読み取り、予め選択された分岐命令(例えば、合致する分岐予測器エントリ内で識別された)が、BACにより読み取られるべき次のキャッシュライン内のどこ(例えば、キャッシュラインの第1のバンドルまたは第2のバンドル)に位置するかを判定する。一実施形態において、分岐命令がキャッシュラインのバンドル内のどこに位置するかは予め決まっていてよい(例えば、3つの命令の1つのバンドル内といったように。分岐命令は、第2の命令として格納される)。
【0068】
代替的な実施形態においては、BAは、キャッシュライン内の分岐命令のアドレスをより具体的に識別するための追加ビットを含む。従って、分岐命令は、バンドル内の特定の命令位置に限定されない。
【0069】
BACがキャッシュライン内の予め選択された分岐命令のアドレスを判定し、且つ、フェッチユニット134からそれぞれのキャッシュラインを受信した後、BACは、分岐命令に真に対応するIPを検証すべく、それぞれの命令をデコードする。受信されたキャッシュライン内のBAでアドレス指定された命令が分岐命令である場合、その分岐予測に対する訂正は不要である。反対に、キャッシュライン内のそれぞれの命令が分岐命令でない(すなわち、IPが分岐命令に対応していない)場合、同一分岐予測器エントリでの同様の予測ミスを防止すべく、BACはそれぞれの分岐予測器エントリを無効にするためのメッセージを分岐予測器に送信する。その後、無効にされた分岐予測器エントリは、新しい分岐予測器エントリで上書きされる。
【0070】
また、一実施形態においてにおいて、BACは、IPを予め定められた量だけインクリメントして、インクリメントされたIPをBP resteer mux128にデータライン145を介して転送する。例えば、BACから出るデータライン145は、分岐予測器からのデータラインより優先する。その結果、当該IPの後にシーケンシャルに続く命令をフェッチすることで、分岐予測ミスを訂正すべく、インクリメントされたIPはIP Gen muxに転送され、フェッチユニットに渡される。
【0071】
投機実行におけるセキュリティチェックの省略のための本明細書の実施形態は、特定のセキュリティポリシー(例えば、メモリ安全性ポリシーおよび/または型安全性ポリシー)を強制実行するための様々なアーキテクチャを用いてインスタンス化されてよい。この1つの例示が、インテル(登録商標)メモリ保護拡張(MPX)を用いるものであり、MPXは、ペアのレジスタ(例えば、64ビット)により示されるメモリ範囲に対しポインタをチェックする命令(例えば、BNDCL/N/U)を定義する。故に、これらの命令は、メモリ安全性を強制実行するために用いられてよい。投機実行におけるセキュリティチェックの省略のための本明細書の実施形態は、プロセッサに対し、安全であるとまだみなされていないアクセスのポインタをチェックする場合にのみ、チェックは必要であるというヒントを示すべく、命令プレフィックス(例えば、セグメント上書きプレフィックス)(さもなければ命令(例えば、MPX命令)の文脈において無意味となる)を再定義してよい。プロセッサは、どの命令がポインタを含むレジスタを使用するかを列挙することで、関連するアクセスを識別してよい。しかしながら、例えば、実際のアクセスは関連付けられたMPX命令に従うので、命令自体をあたかもアクセス命令であるとみなし、且つ、アクセス命令ベースで安全と判定することも可能である。
【0072】
以下の擬似コードシーケンスは、MPX命令が投機ミスされ得る場合にのみ、そのセキュリティチェックが必要となることを示すヒントを用いて、どのようにMPX命令を修正できるかを示す。
【表2】
【0073】
この擬似コードの例は、ESセグメント上書きプレフィックスを用いて、関連付けられたアクセスが投機ミスされないと判明している場合は、メモリ安全性チェックは不要(例えば、省略可能)であることを示す。例えば、この文脈では、ESプレフィックスの元の目的は重要ではなく、故にここでヒントに用いるために利用可能な命令プレフィックスであるとみなす。
【0074】
特定の実施形態において、ヒントを持つ命令は、それが既に安全とみなされている場合は、オペレーションなし(nop)として扱われる。この一例が
図2に示されている。
【0075】
図2は、本開示の実施形態による、セキュリティチェック命令を省略するためのフロー
図200を示す。示されたフロー
図200は、ヒント(例えば、セキュリティチェックフィールド)を持つセキュリティチェック命令を実行するための要求を受信する202段階と、セキュリティチェック命令のすべての関連付けられたアクセスが既に安全であるか否かを判定する204段階と、是であれば、セキュリティチェック命令の実行をスキップ(例えば、省略)する段階206と、否であれば、セキュリティチェック命令を実行する208段階と、を含む。
【0076】
特定の実施形態において、省略により、命令の機能(例えば、セキュリティチェック)の真部分集合が除去されるが、機能のすべてを除去することはしない(例えば、部分的に省略された命令のセキュリティチェック機能以外は除去しない)。この例のための擬似コードについて以下に説明する。
【0077】
プロセッサは、エンコードされたインライン機能(EIC)を、別個のセキュリティチェック命令を活用する別のセキュリティアーキテクチャとして有してよく、EICは、セキュリティチェックの省略のための本明細書の実施形態の文脈において、MPX命令と幾分同様に扱われてよい。特定の実施形態において、MPXとEICとの間の差異は、EICの境界チェック命令は、MPX命令と同様の境界チェックを実行するのみでなく、入力ポインタ値が後続のメモリアクセスによって使用できるように入力ポインタ値もデコードする。MPXの実施形態が、境界をポインタとは別個に格納する一方、EICの実施形態では、境界情報をエンコードされたポインタ(例えば、64ビット)に直接埋め込む。これは、特定の実施形態において、ポインタを介してメモリへのアクセスを試行する前に、その追加情報を除去するために、ポインタがデコードされることを意味する。故に、たとえ、アクセスが安全であると判明しており、且つ、潜在的に投機ミスされた場合にのみセキュリティチェックが必要であるとマークされていたとしても、特定の実施形態のEICセキュリティチェック命令は、ポインタを依然としてデコードし、後続のメモリアクセスが続行できるようにする。
【0078】
EICセキュリティチェック命令の1つの例(例えば、チェック機能(CheckCap)と称される)は、エンコードされたポインタおよび実行されるべきアクセスのサイズを指定する入力オペランドを取得し、例えば、その結果、命令をデコードおよび実行することで、境界チェックが行われ、境界チェックが成功した場合は、エンコードされたポインタがデコードされたポインタで上書きされる。
【0079】
これは、MPXベースの例で用いられた上記の擬似コードに基づく、以下のコードシーケンスで示される。
【表3】
【0080】
MPXベースの例と同様、EICの例は、特定の実施形態において、命令が潜在的に投機ミスされる場合にのみ境界チェックが実行されることが必要であることをプロセッサに示すべく、セグメント上書きプレフィックスESを再定義する。
【0081】
境界および型情報のストレージを管理するためのアプリケーションまたは言語ランタイムを用い、且つ必要時に実際のセキュリティチェックを実行する他の命令も再定義可能である。例えば、RBNDCL/N/U命令は、MPX境界レジスタではなく、汎用レジスタ(GPR)内に格納された境界に対しオペレーションを実行してよく、それらは、本開示のこの文脈において同様に修正されてよい。さらに、型チェック(TYPECHK)命令は、2つのタイプの識別値(ID)が等しいかを比較し、且つ、合致しない場合は例外を生成するように定義されてよい。これらの命令も、命令が安全な場合に、セキュリティチェックをスキップするためのESプレフィックス等のようなヒントで修正されてよい。
【0082】
一部のアーキテクチャは、セキュリティチェックを実行するための別個の命令に依存しなくてよく、代わりに、メモリにアクセスする前に自動的にセキュリティチェックを実行してよい。例えば、タグ値を含むポインタがメモリアクセスで用いられる場合は、メモリタグが自動的にチェックされてよい。すべてのアクセスされるメモリ位置のタグ値がタグストレージからロードされ、ポインタ内のタグと比較されてよい。これらの比較のうちのいずれかのものが不一致を呈する場合、例外が生成されてよい。セキュリティチェック命令のためにヒントが供給可能であるのと同様に、自動的なセキュリティチェックがスキップされるべきであることを示すヒントがメモリアクセスに供給されてよい。以下は、上記の例に基づく例示的な擬似コードである。
【表4】
【0083】
しかしながら、ヒントとして、特定のセグメント上書きプレフィックスを用いることが、メモリアクセスに望ましくない影響を及ぼすことがあり得る。例えば、本開示によるヒントを提供するためにFSプレフィックスおよびGSプレフィックスを使用することで、メモリアクセス内に指定されたアドレスへのセグメントベースアドレスの追加が生じる可能性があり、これにより、誤ったメモリ位置へのアクセスが生じる可能性がある。例えば、これらのプレフィックスがプロセッサアーキテクチャ内に既に定義されているときに、この種のアドレス計算が生じる。他のモード(例えば、32ビット線形アドレスを用いる)では、さらに多くのセグメント上書きプレフィックスにより、意図しないセグメントベースへのアドレスの追加が生じる可能性がある。故に、特定の実施形態において、意図しない効果を生じさせない他のプレフィックスを選択する、または、ヒントのための新しいプレフィックス若しくは他のエンコーディングを定義する必要があり得る。
【0084】
いくつかの命令は、同一命令内に複数のタイプのチェックを組み合わせる。一実施形態において、命令は、境界および型情報の両方をチェックする。これを説明するために、MPX境界レジスタおよび対応する境界テーブルエントリが型情報を含むように拡張され得ること、およびMPX命令がその型情報をチェックするように拡張され得ることを考えてみよう。例えば、境界チェック(例えば、下限チェック)命令の1つの変形例は、単一レジスタオペランド内のチェックされるべきアドレスを受け付けるので、タイプIDを指定する即値オペランドを受け付けるように拡張可能である。一例として、TYPEBNDCLと呼ばれる、この拡張された命令(例えば、BNDCL)は、その即値オペランド内のタイプIDを、境界レジスタ内のタイプIDと比較し、それらが合致しない場合に例外を生成してよい。故に、コンパイラは、命令が安全であると判明している場合に、境界チェックおよび型チェックのうちの一方または両方を選択的にキャンセルするためのヒントを供給し得る。例えば、ESプレフィックスは、このような場合に境界チェックをキャンセルしてよく、FSセグメント上書きプレフィックスは、このような場合に型チェックをキャンセルしてよい。これら両方のチェックをキャンセルすべく、ESプレフィックスとGSセグメント上書きプレフィックスの両方のプレフィックスが供給されてよく、または、その目的のために第3のヒント、例えば、GSプレフィックスが定義されてもよい。
【0085】
セキュリティポリシーを強制実行するためのすべてのアーキテクチャが別個のセキュリティチェック命令を定義するわけではなく、命令を修正して、命令プレフィックス付きのアクセスを生成するアプローチがここでも適用されてよい。例えば、メモリタギングは、アクセスされているストレージ位置のアドレスによりインデックスされている境界メタデータに対し、アクセスを暗黙にチェックする。特定のアーキテクチャは、複合命令セットコンピューティング(CISC)であるので、多数の命令がメモリアクセスを生成してよく、例えば、すべての命令がメモリオペランド付きである。また他のセキュリティアーキテクチャも、例えば、fatポインタを用いたメモリおよび型安全性を強制実行する機能メカニズムのような暗黙的なチェックを実行してよい。上記のサンプルコードに示される通り、場合によっては、安全なアクセスに対し、境界チェックおよび型チェックのうちの一方または他方のみを実行することが必要であり、よって、これらのタイプのチェックの各々のための別個の修飾子が単一の命令内で両方をサポートするアーキテクチャ用に定義されてよい。
【0086】
以下に、ヒント(例えば、セキュリティチェックフィールド)を挿入する例について説明する。特定の実施形態において、コンパイラが、メモリアクセス、および任意の関連付けられたセキュリティチェック命令(該当する場合は、複数の関連付けられたセキュリティチェック命令)を発出する各時点において、コンパイラは本明細書で説明するような、1または複数のヒントも発出するか否かを決定する。そうするために、これらの実施形態のうちの特定の実施形態において、コンパイラは、アクセスが安全とみなされる場合にセキュリティチェックを省略してよいか否かを考慮する。いくつかの例示的なシナリオについて上記したが、これらは網羅的ではない。
【0087】
図3を参照して、これらの判定をするための例示的なフローについて以下に説明する。このフローは、アクセスごとに複数回実行されてよく、例えば1回目はメモリ安全性チェックポリシー、別の回は型安全性チェックポリシーといったように異なるタイプのポリシーのための異なる判定をする。特定の実施形態において、これらの決定は最終的に上記のようなマージされたヒントをもたらし、例えば、アクセスが安全であるとみなされる場合、メモリ安全性チェックおよび型安全性チェックの両方が省略されることを示す。
【0088】
図3は、本開示の実施形態によりコード内にヒントを発出するためのフロー
図300を示す。示されるフロー300は、メモリアクセスおよび関連付けられたセキュリティチェック命令を含むコード(例えば、コンパイラによる、またはコンパイラからの)を受信する302段階と、アクセスが安全とみなされる場合、適用可能なセキュリティポリシーが害される可能性があるか否かを判定する304段階と、否の場合、ヒント(例えば、セキュリティチェック命令のセキュリティチェックフィールドとして)をコード内に発出する306段階と、是の場合、ヒント(例えば、セキュリティチェック命令のセキュリティチェックフィールドとして)をコード内に発出しない(例えば、その結果、セキュリティチェック命令が実行されるように)308段階と、を含む。
【0089】
以下は、潜在的なタイプの投機および関連付けられたチェックの例を含む。
【0090】
一実施形態において、命令が潜在的に投機ミスされる可能性がある場合(例えば、のみ)に実行されるセキュリティチェックに関するプロセッサへのヒントは、潜在的な投機ミスの場合に強制実行されるべきポリシーのタイプを指定するものである。すると、例えば、プロセッサは、プロセッサがサポートする投機のタイプに依存する条件をチェックして、命令が潜在的に投機ミスされるか否かを判定する。
【0091】
以下に、プロセッサによってサポートされ得る潜在的な投機のタイプ、およびその特定のタイプの投機について、命令が潜在的に投機ミスされるか否かを判定するためにプロセッサが実行し得る関連付けられたチェックに関する、非網羅的な例を説明する。プロセッサが複数のタイプの投機をサポートする場合、プロセッサは、すべてのサポートされたタイプの投機に対するチェックを実行して、命令が特定のセキュリティポリシー(例えば、メモリ安全性または型安全性)を害し得る態様で投機ミスされないことを判定してよい。
【0092】
プロセッサが他のタイプの投機に関連する命令の態様が正しく投機されるかを判定していなくても、適用可能なセキュリティポリシーを害することがないためにセキュリティチェックがスキップされてよい、サポートされた他のタイプの投機が存在してよいことに留意されたい。例えば、投機可能なデータ値が考えられる。たとえストアのデータ値が投機ミスされる場合であっても、それは、特定の実施形態のメモリ安全性ポリシーまたは型安全性ポリシーを害することはない。例えば、格納されるべきデータ値は、ストアにどのアドレスが用いられるかには影響を及ぼさないからである。
【0093】
故に、特定の実施形態は、プロセッサが、命令の実行のいくつかの態様の投機ミスが適用可能なセキュリティポリシーを弱体化させないと判定した命令を言及するにあたり、"正しく投機される"命令ではなく、"安全"である命令(例えば、セキュリティチェック命令の関連付けられたメモリアクセス)を区別する。
[分岐予測]
【0094】
プロセッサは、前の分岐および他の要因からの履歴に基づき、分岐がどの方向を取るかについて予測を試みてよい。特定の実施形態において、これは、分岐が解決される(例えば、正しい方向が完全に決定される)前に、予測される分岐ターゲットを投機的に実行するために用いられる。特定の実施形態において、命令が正確に投機されたパスにあることを判定すべく、プロセッサはまず、プログラム内の先行する分岐を解決する必要がある。
[ストアバッファバイパス投機]
【0095】
プロセッサは、ロードおよびストアを並べ替えてよく、場合によっては、ロードより古いストア(例えば、プログラム内のロードに先行する)により上書きされることになる位置からデータを取得するロードが発生することがある。そのデータは、そのロードに依存するオペレーションにより投機的に用いられてよい。例えば、そのデータは、ポインタアドレスまたは整数値若しくは浮動小数点値等として解釈されてよい。プロセッサが正確な値がロードされていることを判定するために、プロセッサは、メモリ曖昧性除去回路を用いて、ロードが、既にバッファ済みの古い(例えば、プログラム順序において)ストアオペレーションによっても参照されない位置を参照していることを検証してよい。
[他の可能なタイプのセキュリティハードニング]
【0096】
セキュリティハードニングの他の可能なアプローチが存在する。これは、例えば、敵対者に可視となる可能性のあるキャッシュ状態への変更を行うメモリアクセスを許容する前に、すべての先行する分岐が解決されるまで待機することである。これらは、上で示した例よりも、さらに厳格なポリシーを強制実行することができる。そうしなければ、メモリ安全性チェックまたは型安全性チェックは完了した後ではあるが、これらのポリシーの強制実行の一環として、未だチェックされていない投機ミスの形態があり得るといった場合に、敵対者に可視となり得るキャッシュ状態への変更を許容することになり得る。例えば、以下の例示的な擬似コードを検討してみよう。
【表5】
【0097】
privによりポイントされたメモリからの読み取りは遅延する可能性があることを考慮すると、プロセッサは、ifブロック内またはelseブロック内のいずれのコードを実行すべきかを投機ミスする可能性がある。メモリ安全性チェックおよび/または型安全性チェックは、arr変数を通して参照されるアレイへのアクセスに依然適用可能である。しかしながら、本開示で説明された特定のヒントがこれらのチェックに適用されるか否かに関わらず、fooが特権のない呼び出し元から呼び出された場合に、これらのチェックではpriv_arrayへのアクセスを必ずしも防止しない。その際、悪意の呼び出し元が潜在的に当該機能からの戻り値を用いて、敵対者に可視となるような態様でキャッシュの状態に影響を及ぼす可能性があることを考慮されたい。
【0098】
このような状況のために、上記の擬似コードで説明したもののような、より厳格なポリシーを選択的に強制実行する別のタイプのヒントがここで定義される。例えば、サンプルコード内の戻りステートメントにより生成されるメモリアクセスは、別のセグメント上書きプレフィックス、例えばGSを用いて修正され、当該メモリアクセスは、さらに厳格なポリシーにより調整される必要があることを示してよい。しかしながら、いくつかの適用または適用のうちの一部については、メモリ安全性および型安全性で十分である可能性があり、そのコードのユーザは、それらのより緩いポリシーのみが強制実行される場合に可能となる追加の最適化から利益を得るであろう。上記のようなさらに厳格なポリシーを選択的に強制実行できることは、既定では、より緩いポリシーを強制適用して追加の最適化の機会を提供しつつ、プログラムにおけるクリティカルポイントでは、さらに厳格なポリシーをも強制実行する点において有用であろう。
【0099】
データキャッシュ階層において投機を不可視にする戦略は、上記のようなこのヒントにより選択され得るさらに厳格なタイプのポリシーを強制実行するためのメカニズムの一例である。
【0100】
図4は、本開示の実施形態によるフロー
図400を示す。示されるフロー400は、ハードウェアプロセッサのデコーダを用いて、命令をデコードされた命令にデコードする402段階と、ハードウェアプロセッサにより、命令内のセキュリティチェックフィールドを検出する404段階と、ハードウェアプロセッサにより、潜在的に投機ミスされる実行に対し強制実行されるべきセキュリティチェックポリシーを、セキュリティチェックフィールドに基づき、複数のセキュリティチェックポリシーから判定する406段階と、ハードウェアプロセッサにより、セキュリティチェックポリシーの1または複数の関連付けられたチェックを命令に対し実行して、命令が潜在的に投機ミスされるか否かを判定する408段階と、ハードウェアプロセッサにより、1または複数の関連付けられたチェックにより命令が安全ではないとみなされた場合に、命令の実行をスケジューリングする410段階と、ハードウェアプロセッサにより、1または複数の関連付けられたチェックにより、命令が安全であるとみなされた場合に、命令を省略する412段階と、ハードウェアプロセッサの実行ユニットを用いて、実行のためのスケジューリングがされた命令を実行する414段階と、を含む。
【0101】
以下に、上記の内容が用いられてよい例示的なアーキテクチャ、システム等について説明する。
【0102】
本開示の技術の少なくともいくつかの実施形態には、以下の例に照らし説明できる。
[例1]
命令をデコードされた命令にデコードするためのデコーダと、
投機マネージャ回路であって、
上記命令内のヒント(例えば、セキュリティチェックフィールド)を検出する、
潜在的に投機ミスされる実行に対し強制実行されるべきセキュリティチェックポリシーを、上記ヒント(例えば、上記セキュリティチェックフィールド)に基づき、複数のセキュリティチェックポリシーから判定する、
上記セキュリティチェックポリシーの1または複数の関連付けられたチェックを上記命令に対し実行して、上記命令が潜在的に投機ミスされるか否かを判定する、
上記1または複数の関連付けられたチェックにより、上記命令が安全ではないとみなされた場合に、上記命令の実行をスケジューリングする、
上記1または複数の関連付けられたチェックにより、上記命令が安全であるとみなされた場合に、上記命令を省略する、投機マネージャ回路と、
実行のためのスケジューリングがされた上記命令を実行するための実行ユニットと、を備える、装置。
[例2]
上記ヒント(例えば、上記セキュリティチェックフィールド)はコンパイラにより提供されるヒントである、例1に記載の装置。
[例3]
上記投機マネージャ回路は、上記セキュリティチェックポリシーの上記1または複数の関連付けられたチェックを、上記命令の関連付けられたメモリアクセスのセットに対し実行する、例1に記載の装置。
[例4]
上記セキュリティチェックポリシーは、メモリ安全性チェックポリシーである、例1に記載の装置。
[例5]
上記セキュリティチェックポリシーは、型安全性チェックポリシーである、例1に記載の装置。
[例6]
上記セキュリティチェックポリシーの上記1または複数の関連付けられたチェックは、メモリ安全性チェックおよび型安全性チェックを含む、例1に記載の装置。
[例7]
上記1または複数の関連付けられたチェックは、上記装置のアーキテクチャ仕様の完全準拠チェックより少ない、例1に記載の装置。
[例8]
上記命令は、プログラム順序において後続するメモリアクセス命令に関連付けられたセキュリティチェック命令である、例1に記載の装置。
[例9] ハードウェアプロセッサのデコーダを用いて、命令をデコードされた命令にデコードする段階と、
上記ハードウェアプロセッサにより、上記命令内のセキュリティチェックフィールドを検出する段階と、
上記ハードウェアプロセッサにより、潜在的に投機ミスされる実行に対し強制実行されるべきセキュリティチェックポリシーを、上記セキュリティチェックフィールドに基づき、複数のセキュリティチェックポリシーから判定する段階と、
上記ハードウェアプロセッサにより、上記セキュリティチェックポリシーの1または複数の関連付けられたチェックを上記命令に対し実行して、上記命令が潜在的に投機ミスされるか否かを判定する段階と、
上記ハードウェアプロセッサにより、上記1または複数の関連付けられたチェックにより上記命令が安全ではないとみなされた場合に、上記命令の実行をスケジューリングする段階と、
上記ハードウェアプロセッサにより、上記1または複数の関連付けられたチェックにより、上記命令が安全であるとみなされた場合に、上記命令を省略する段階と、
上記ハードウェアプロセッサの実行ユニットを用いて、実行のためのスケジューリングがされた上記命令を実行する段階と、を備える、方法。
[例10]
上記セキュリティチェックフィールドは、コンパイラにより提供されるヒントである、例9に記載の方法。
[例11]
上記実行する段階は、上記セキュリティチェックポリシーの上記1または複数の関連付けられたチェックを、上記命令の関連付けられたメモリアクセスのセットに対し実行する段階を含む、例9に記載の方法。
[例12]
上記セキュリティチェックポリシーは、メモリ安全性チェックポリシーである、例9に記載の方法。
[例13]
上記セキュリティチェックポリシーは、型安全性チェックポリシーである、例9に記載の方法。
[例14]
上記セキュリティチェックポリシーの上記1または複数の関連付けられたチェックは、メモリ安全性チェックおよび型安全性チェックを含む、例9に記載の方法。
[例15]
上記1または複数の関連付けられたチェックは、上記ハードウェアプロセッサのアーキテクチャ仕様の完全準拠チェックより少ない、例9に記載の方法。
[例16]
上記命令は、プログラム順序において後続するメモリアクセス命令に関連付けられたセキュリティチェック命令である、例9に記載の方法。
[例17]
機械により実行されると、機械に対し、方法を実行させるためのコードを格納する非一時的機械可読媒体であって、上記方法は、
ハードウェアプロセッサのデコーダを用いて、命令をデコードされた命令にデコードする手順と、
上記ハードウェアプロセッサにより、上記命令内のセキュリティチェックフィールドを検出する段階と、
上記ハードウェアプロセッサにより、潜在的に投機ミスされる実行に対し強制実行されるべきセキュリティチェックポリシーを、上記セキュリティチェックフィールドに基づき、複数のセキュリティチェックポリシーから判定する段階と、
上記ハードウェアプロセッサにより、上記セキュリティチェックポリシーの1または複数の関連付けられたチェックを上記命令に対し実行して、上記命令が潜在的に投機ミスされるか否かを判定する段階と、
上記ハードウェアプロセッサにより、上記1または複数の関連付けられたチェックにより上記命令が安全ではないとみなされた場合に、上記命令の実行をスケジューリングする段階と、
上記ハードウェアプロセッサにより、上記1または複数の関連付けられたチェックにより上記命令が安全であるとみなされた場合に、上記命令を省略する段階と、
上記ハードウェアプロセッサの実行ユニットを用いて、実行のためのスケジューリングがされた上記命令を実行する段階と、を備える、非一時的機械可読媒体。
[例18]
上記セキュリティチェックフィールドは、コンパイラにより提供されるヒントである、例17に記載の非一時的機械可読媒体。
[例19]
上記実行する段階は、上記セキュリティチェックポリシーの上記1または複数の関連付けられたチェックを、上記命令の関連付けられたメモリアクセスのセットに対し実行する段階を含む、例17に記載の非一時的機械可読媒体。
[例20]
上記セキュリティチェックポリシーは、メモリ安全性チェックポリシーである、例17に記載の非一時的機械可読媒体。
[例21]
上記セキュリティチェックポリシーは、型安全性チェックポリシーである、例17に記載の非一時的機械可読媒体。
[例22]
上記セキュリティチェックポリシーの上記1または複数の関連付けられたチェックは、メモリ安全性チェックおよび型安全性チェックを含む、例17に記載の非一時的機械可読媒体。
[例23]
上記1または複数の関連付けられたチェックは、上記ハードウェアプロセッサのアーキテクチャ仕様の完全準拠チェックより少ない、例17に記載の非一時的機械可読媒体。
[例24]
上記命令は、プログラム順序において後続するメモリアクセス命令に関連付けられたセキュリティチェック命令である、例17に記載の非一時的機械可読媒体。
【0103】
さらなる別の実施形態において、装置は、ハードウェアプロセッサにより実行されると、ハードウェアプロセッサに、本明細書で開示された任意の方法を実行させるコードを格納するデータストレージデバイスを備える。装置は、詳細な説明中に説明されたようなものであってよい。方法は、詳細な説明中に説明されたようなものであってよい。
【0104】
命令セットは、1または複数の命令のフォーマットを含んでよい。特定の命令フォーマットは、指定する様々なフィールド(例えば、ビット数、ビット位置)、とりわけ、実行されるべきオペレーション(例えば、オペコード)およびそのオペレーションが実行されるオペランドおよび/または他のデータフィールド(例えば、マスク)を定義してよい。いくつかの命令フォーマットはさらに、命令テンプレート(またはサブフォーマット)の定義により細分化されてよい。例えば、特定の命令フォーマットの命令テンプレートは、命令フォーマットのフィールド(含まれるフィールドは通常同一の順序であるが、少なくともいくつかは、含まれるフィールドがより少ないので、異なるビット位置を有する)の異なるサブセットを有するように定義されてよく、および/または、解釈上異なる特定のフィールドを有するように定義されてよい。故に、ISAの各命令は、特定の命令フォーマット(および定義される場合は、その命令フォーマットの複数の命令テンプレートのうちの特定のもの)を用いて表現され、且つ、オペレーション及びオペランドを指定するためのフィールドを含む。例えば、例示的なADD命令は、特定のオペコード並びにそのオペコードを指定するためのオペコードフィールドおよびオペランドを選択するためのオペランドフィールド(ソース1/デスティネーションおよびソース2)を含む命令フォーマット有する。命令ストリーム内のこのADD命令の出現箇所は、特定のオペランドを選択するオペランドフィールド内に特定のコンテンツを有することになる。Advanced Vector Extensions(AVX)(AVX1およびAVX2)と称されるSIMD拡張のセットおよびVector Extensions(VEX)コーディングスキームの使用が、リリースおよび/または公開されている(例えば、2018年11月のインテル(登録商標)64およびIA‐32アーキテクチャソフトウェア開発者のマニュアルを参照、および、2018年10月のインテル(登録商標)アーキテクチャ命令セット拡張プログラミングリファレンスを参照)。
[例示的な命令フォーマット]
【0105】
本明細書で説明される命令の実施形態は、異なるフォーマットで具現化されてよい。追加で、以下に、例示的システム、アーキテクチャおよびパイプラインについて説明する。命令の実施形態は、このようなシステム、アーキテクチャおよびパイプライン上で実行されてよいが、説明されたものに限定はされない。
[汎用ベクトル向け命令フォーマット]
【0106】
ベクトル向け命令フォーマットとは、ベクトル命令に適した命令フォーマットのことである(例えば、ベクトルオペレーションに特有の特定のフィールドが存在する)。ベクトル向け命令フォーマットにより、ベクトル演算およびスカラ演算の両方がサポートされる実施形態について説明されているが、代替的な実施形態は、ベクトル向け命令フォーマットを通して、ベクトルオペレーションのみを用いる。
【0107】
図5A~5Bは、本開示の実施形態による、汎用ベクトル向け命令フォーマットおよびその命令テンプレートを示すブロック図である。
図5Aは、本開示の実施形態による、汎用ベクトル向け命令フォーマットおよびそのクラスA命令テンプレートを示すブロック図である一方、
図5Bは、本開示の実施形態による、汎用ベクトル向け命令フォーマットおよびそのクラスB命令テンプレートを示すブロック図である。具体的に言うと、汎用ベクトル向け命令フォーマット500には、クラスA命令テンプレートおよびクラスB命令テンプレートが定義され、それらの両方が、非メモリアクセス505命令テンプレートおよびメモリアクセス520命令テンプレートを含む。ベクトル向け命令フォーマットの文脈における汎用という用語は、いずれの特定の命令セットにも結合されていない命令フォーマットを指す。
【0108】
本開示は、ベクトル向け命令フォーマットが、32ビット(4バイト)または64ビット(8バイト)のデータ要素幅(またはサイズ)(故に、64バイトベクトルは、16ダブルワードサイズの要素または代替的に8クワッドワードサイズの要素で構成される)を持つ64バイトのベクトルオペランド長(またはサイズ)、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バイトベクトルオペランド)をサポートしてよい。
【0109】
図5A中のクラスA命令テンプレートは、1)非メモリアクセス505命令テンプレート内に示される、非メモリアクセス、フルラウンド制御タイプオペレーション510命令テンプレートと、非メモリアクセス、データ変換タイプオペレーション515命令テンプレートと、並びに2)メモリアクセス520命令テンプレート内に示されるメモリアクセス、一時的525命令テンプレートと、メモリアクセス非一時的530命令テンプレートとを含む。
図5B中のクラスB命令テンプレートは、1)非メモリアクセス505命令テンプレート内に示される、非メモリアクセス、書き込みマスク制御、パーシャルラウンド制御タイプ512命令テンプレートと、非メモリアクセス、書き込みマスク制御、vサイズタイプオペレーション517命令テンプレートと、並びに2)メモリアクセス520命令テンプレート内に示されるメモリアクセス、書き込みマスク制御527命令テンプレートを含む。
【0110】
汎用ベクトル向け命令フォーマット500は、以下に示されるフィールドを
図5A~5Bに示される順序で含む。
【0111】
フォーマットフィールド540:このフィールド内の特定の値(命令フォーマット識別子の値)は、ベクトル向け命令フォーマットを一意に識別し、故に、命令ストリーム内のベクトル向け命令フォーマット内の命令の出現を一意に識別する。そのため、このフィールドは、汎用ベクトル向け命令フォーマットのみを有する命令セットには不要であるという意味においてオプションである。
【0112】
基本オペレーションフィールド542:その内容により、異なる基本オペレーションを区別する。
【0113】
レジスタインデックスフィールド544:その内容は、ソースオペランドおよびデスティネーションオペランドがレジスタ内にあるか、メモリ内にあるかに関わらず、それらの位置を直接に、または、アドレス生成を通して指定する。これらは、PxQ(例えば、32×512、16×128、32×1024、64×1024)レジスタファイルからN個のレジスタを選択するための、十分な数のビットを含む。一実施形態において、Nは最大で3つのソースレジスタおよび1つのデスティネーションレジスタであってよい一方、代替的な実施形態は、それより多いまたは少ない数のソースおよびデスティネーションレジスタをサポートしてよい(例えば、最大2つのソースをサポートしてよく、この場合、これらソースのうちの1つはデスティネーションとしても動作する。最大3つのソースをサポートしてよく、この場合、これらのソースのうちの1つはデスティネーションとして動作する。最大2つのソースと1つのデスティネーションをサポートしてよい)。
【0114】
修飾子フィールド546:その内容により、汎用ベクトル命令フォーマットにおけるメモリアクセスを指定する命令の出現を、メモリアクセスを指定しない命令から区別する。すなわち、非メモリアクセス505命令テンプレートと、メモリアクセス520命令テンプレートとの間を区別する。メモリアクセスオペレーションは、メモリ階層への読み取りおよび/または書き込みを行う(場合により、レジスタ内の値を用いて、ソースアドレスおよび/またはデスティネーションアドレスを指定する)一方、非メモリアクセスオペレーションはこれを行わない(例えば、ソースおよびデスティネーションはレジスタである)。一実施形態において、このフィールドはまた、メモリアドレス計算を実行するために3つの異なる方法から選択する一方、代替的な実施形態は、メモリアドレス計算を実行するために、より多い、より少ない、または異なる方法をサポートしてよい。
【0115】
拡張オペレーションフィールド550:その内容で、基本オペレーションに加え、様々な異なるオペレーションのうちのどれが実行されるかを区別する。このフィールドはコンテキスト固有である。本開示の一実施形態において、このフィールドは、クラスフィールド568、アルファフィールド552およびベータフィールド554に分割される。拡張オペレーションフィールド550は、共通のオペレーションのグループが、2、3または4個の命令ではなく、単一の命令内で実行されることを可能にする。
【0116】
スケールフィールド560:その内容は、メモリアドレス生成のための(例えば、2scale*インデックス+基本を用いるアドレス生成のための)インデックスフィールドの内容のスケーリングを可能にする。
【0117】
変位フィールド562A:その内容は、メモリアドレス生成(例えば、2scale*インデックス+基本+変位を用いるアドレス生成のための)の一部として用いられる。
【0118】
変位係数フィールド562B(変位係数フィールド562Bの直接上に変位フィールド562Aが併置されていることは、一方または他方が用いられることを示すことに留意されたい):その内容は、アドレス生成の一部として用いられ、それは、メモリアクセス(N)のサイズによりスケーリングされるべき変位係数を指定する。ここで、Nは、メモリアクセスにおけるバイト数である(例えば、2scale*インデックス+基本+スケーリングされた変位を用いるアドレス生成のための)。冗長下位ビットは無視され、従って、変位係数フィールドの内容は、有効アドレスを計算する際に用いられる最終的な変位を生成すべく、メモリオペランドの合計サイズ(N)で乗じられる。Nの値は、ランタイム時にプロセッサハードウェアにより、フルオペコードフィールド574(本明細書で後述する)およびデータ操作フィールド554Cに基づき決定される。変位フィールド562Aおよび変位係数フィールド562Bは、それらが、非メモリアクセス505命令テンプレートで用いられない、および/または異なる実施形態は、これらの2つのうちの一方のみを実装してよい、またはいずれも実装しなくてよいという意味においてオプションである。
【0119】
データ要素幅フィールド564:その内容により、複数のデータ要素幅のどれが用いられるかを区別する(いくつかの実施形態においては、すべての命令について、他の実施形態においては、命令のうちの一部のみについて)。このフィールドは、1つのデータ要素幅のみがサポートされる、および/または、オペコードのいくつかの態様を用いて、データ要素幅がサポートされる場合は、このフィールドが不要という意味においてオプションである。
【0120】
書き込みマスクフィールド570:その内容により、データ要素位置ベースごとに、デスティネーションベクトルオペランド内のそのデータ要素位置が、基本オペレーションおよび拡張オペレーションの結果に反映されるか否かを制御する。クラスA命令テンプレートは、マージング書き込みマスクをサポートする一方で、クラスB命令テンプレートは、マージング書き込みマスクおよびゼロ化書き込みマスクの両方をサポートする。マージングの場合に、ベクトルマスクは、デスティネーションの任意の要素セットが、オペレーションの実行中に更新されないように保護されることを可能にする(基本オペレーションおよび拡張オペレーションで指定)。他の一実施形態においては、対応するマスクビットが0を有する場合、デスティネーションの各要素の古い値を保持する。対照的に、ゼロ化の場合、ベクトルマスクは、デスティネーションの任意の要素セットが、オペレーションの実行中にゼロ化されることを可能にする(基本オペレーションおよび拡張オペレーションにおいて指定される)。一実施形態においては、対応するマスクビットが0値を有する場合、デスティネーションの要素は0に設定される。この機能のサブセットは、実行されているオペレーションのベクトル長(すなわち、修正される要素の第1のものから最後のものまでのスパン)を制御する能力である。しかしながら、修正される要素は連続的であることは必要ではない。故に、書き込みマスクフィールド570は、ロード、ストア、算術、論理等を含む部分的なベクトルオペレーションを可能にする。書き込みマスクフィールドの570の内容が、用いられるべき書き込みマスクを含む複数の書き込みマスクレジスタのうちの1つを選択する本開示の実施形態が説明される(故に、書き込みマスクフィールド570の内容は、実行されるべきマスクを間接的に識別する)一方で、代替的な実施形態は、代替的にまたは追加的に、書き込みマスクフィールド570の内容が、実行されるべきマスクを直接的に指定することを可能にする。
【0121】
即値フィールド572:その内容は、即値の指定を可能にする。このフィールドは、即値をサポートしない汎用ベクトルフォーマットの実装においては、これは存在しない、および、即値を用いない命令内にはこれは存在しないという意味においてオプションである。
【0122】
クラスフィールド568:その内容により、異なるクラスの命令間を区別する。
図5A~
図5Bを参照すると、このフィールドの内容は、クラスA命令とクラスB命令との間で選択する。
図5A~
図5B中、角の丸められた四角は、特定の値がフィールド内に存在することを示すために用いられる(例えば、
図5A~
図5B中のそれぞれのクラスフィールド568に対するクラスA 568AおよびクラスB 568B)。
[クラスAの命令テンプレート]
【0123】
クラスAの非メモリアクセス505命令テンプレートの場合、アルファフィールド552はRSフィールド552Aとして解釈され、その内容により、異なる拡張オペレーションタイプのうちのどれが実行されるべき(例えば、ラウンド552A.1およびデータ変換552A.2が、非メモリアクセス、ラウンドタイプオペレーション510および非メモリアクセス、データ変換タイプオペレーション515命令テンプレートのそれぞれに対し指定される)かを区別する一方、ベータフィールド554により、指定されたタイプのオペレーションのうちのいずれが実行されるべきかを区別する。非メモリアクセス505命令テンプレートでは、スケールフィールド560、変位フィールド562Aおよび変位スケールフィールド562Bは存在しない。
[非メモリアクセス命令テンプレート‐フルラウンド制御タイプオペレーション]
【0124】
非メモリアクセスフルラウンド制御タイプオペレーション510命令テンプレートでは、ベータフィールド554がラウンド制御フィールド554Aとして解釈され、その内容が静的ラウンディングを提供する。本開示の説明される実施形態において、ラウンド制御フィールド554Aは、すべての浮動小数点例外を抑制(SAE)フィールド556およびラウンドオペレーション制御フィールド558を含む一方、代替的な実施形態は、これらのコンセプトの両方の同一フィールドへのエンコードをサポートしてよく、または、これらのコンセプト/フィールドのうち一方または他方のみを有することをサポートしてよい(例えば、ラウンドオペレーション制御フィールド558のみを有してよい)。
【0125】
SAEフィールド556:その内容により、例外イベント報告を無効にするか否かを区別する。SAEフィールド556の内容が、抑制が有効になっていることを示す場合、特定の命令は浮動小数点例外フラグを報告せず、浮動小数点例外ハンドラを掲げない。
【0126】
ラウンドオペレーション制御フィールド558:その内容により、一群のラウンドオペレーション(例えば、切り上げ、切り下げ、ゼロへの丸めおよび最近似値への丸め)のうちのいずれが実行されるかを区別する。故に、ラウンドオペレーション制御フィールド558は、命令ベースごとに、ラウンドモードの変更を可能にする。プロセッサがラウンドモードを指定するための制御レジスタを含んでいる本開示の一実施形態においては、ラウンドオペレーション制御フィールド550の内容は、そのレジスタ値を上書きする。
[非メモリアクセス命令テンプレート‐データ変換タイプオペレーション]
【0127】
非メモリアクセスデータ変換タイプオペレーション515命令テンプレートでは、ベータフィールド554は、データ変換フィールド554Bとして解釈され、データ変換フィールド554Bの内容により、複数のデータ変換(例えば、データ変換なし、スウィズル、ブロードキャスト)のうちのいずれが実行されるかを区別する。
【0128】
クラスAのメモリアクセス520命令テンプレートの場合、アルファフィールド552はエビクションヒントフィールド552Bとして解釈され、エビクションヒントフィールド552Bの内容により、どのエビクションヒントが用いられるかを区別する(
図5Aでは、一時552B.1および非一時552B.2がメモリアクセス、一時525命令テンプレートおよびメモリアクセス、非一時530命令テンプレートにそれぞれ指定される)一方、ベータフィールド554はデータ操作フィールド554Cとして解釈され、データ操作フィールド554Cの内容により、複数のデータ操作オペレーション(プリミティブとしても知られる)(例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、デスティネーションのダウンコンバージョン)のうちのいずれが実行されるかを区別する。メモリアクセス520命令テンプレートは、スケールフィールド560を含み、オプションで、変位フィールド562Aまたは変位スケールフィールド562Bを含む。
【0129】
ベクトルメモリ命令は、変換サポートにより、メモリからのベクトルロードおよびメモリへのベクトルストアを実行する。通常のベクトル命令の場合と同様、ベクトルメモリ命令は、データ要素全体でデータをメモリから/メモリへ転送し、実際に転送される要素は、書き込みマスクとして選択されるベクトルマスクの内容によって記述されている。
[メモリアクセス命令テンプレート‐一時]
【0130】
一時的データとは、キャッシングによる恩恵を得るのに十分早く再使用される可能性が高いデータである。しかしながら、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含め、それを異なる方法で実装してよい。
[メモリアクセス命令テンプレート‐非一時]
【0131】
非一時的データとは、第1のレベルのキャッシュ内にキャッシュすることによる恩恵を得るのに十分早く再使用される可能性が低いデータであり、これにはエビクションの優先度が与えられるべきである。しかしながら、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含め、それを異なる方法で実装してよい。
[クラスBの命令テンプレート]
【0132】
クラスBの命令テンプレートの場合、アルファフィールド552は、書き込みマスク制御(Z)フィールド552Cとして解釈され、書き込みマスク制御(Z)フィールド552Cの内容により、書き込みマスクフィールド570により制御される書き込みマスクが、マージングであるべきかゼロ化であるべきかを区別する。
【0133】
クラスBの非メモリアクセス505命令テンプレートの場合、ベータフィールド554の一部はRLフィールド557Aとして解釈され、その内容により、異なる拡張オペレーションタイプのうちのいずれが実行されるかを区別する(例えば、ラウンド557A.1およびベクトル長VSIZE557A.2が、非メモリアクセス、書き込みマスク制御、パーシャルラウンド制御タイプオペレーション512命令テンプレートおよび非メモリアクセス書き込みマスク制御VSIZEタイプオペレーション517命令テンプレートにそれぞれ指定される)一方、ベータフィールド554の残部により、指定されたタイプのオペレーションのうちいずれが実行されるかを区別する。非メモリアクセス505命令テンプレートには、スケールフィールド560、変位フィールド562A、および変位スケールフィールド562Bは存在しない。
【0134】
非メモリアクセス、書き込みマスク制御、パーシャルラウンド制御タイプオペレーション510命令テンプレートでは、ベータフィールド554の残部は、ラウンドオペレーションフィールド559Aとして解釈され、例外イベント報告が無効にされる(特定の命令は、あらゆる種類の浮動小数点例外フラグを報告せず、浮動小数点例外ハンドラを掲げない)。
【0135】
ラウンドオペレーション制御フィールド559A:ラウンドオペレーション制御フィールド558と全く同様、その内容により、一群のラウンドオペレーションのうちのいずれが実行されるかを区別する(例えば、切り上げ、切り下げ、ゼロへの丸めおよび最近似値への丸め)。故に、ラウンドオペレーション制御フィールド559Aは、命令ベースごとに、ラウンドモードの変更を可能にする。プロセッサがラウンドモードを指定するための制御レジスタを含んでいる本開示の一実施形態においては、ラウンドオペレーション制御フィールド550の内容は、そのレジスタ値を上書きする。
【0136】
非メモリアクセス書き込みマスク制御VSIZEタイプオペレーション517命令テンプレートでは、ベータフィールド554の残部はベクトル長フィールド559Bとして解釈され、その内容により、複数のデータベクトル長(例えば、128、256または512バイト)のうちのいずれが実行されるかを区別する。
【0137】
クラスBのメモリアクセス520命令テンプレートの場合、ベータフィールド554の一部はブロードキャストフィールド557Bとして解釈され、その内容により、ブロードキャストタイプデータ操作オペレーションが実行されるか否かを区別する一方、ベータフィールド554の残部はベクトル長フィールド559Bとして解釈される。メモリアクセス520命令テンプレートは、スケールフィールド560、およびオプションで変位フィールド562Aまたは変位スケールフィールド562Bを含む。
【0138】
汎用ベクトル向け命令フォーマット500に関しては、フルオペコードフィールド574は、フォーマットフィールド540、基本オペレーションフィールド542およびデータ要素幅フィールド564を含むように図示されている。一実施形態はフルオペコードフィールド574がすべてのこれらのフィールドを含むように図示されているが、これらのすべてをサポートしていない実施形態においては、フルオペコードフィールド574は、これらのフィールドの全部より少ない数を含む。フルオペコードフィールド574は、オペレーションコード(オペコード)を提供する。
【0139】
拡張オペレーションフィールド550、データ要素幅フィールド564、および書き込みマスクフィールド570は、汎用ベクトル向け命令フォーマットにおいて、これらの機能が命令ベースごとに指定されることを可能にする。
【0140】
書き込みマスクフィールドおよびデータ要素幅フィールドを組み合わせると、それらが、異なるデータ要素幅に基づき、マスクが適用されることを可能にするという意味においてタイプ別の命令を形成する。
【0141】
クラスAおよびクラスB内で見つかる様々な命令テンプレートは、異な状況において有益である。本開示のいくつかの実施形態において、異なるプロセッサまたはプロセッサ内の異なるコアは、クラスAのみ、クラスBのみ、またはこれら両方のクラスをサポートしてよい。例えば、汎用コンピューティング向け高性能汎用アウトオブオーダコアはクラスBのみをサポートしてよく、主にグラフィックおよび/または科学(スループット)コンピューティング向けコアは、クラスAのみをサポートしてよく、およびこれらの両方向けのコアはこれらの両方をサポートしてよい(もちろん、両方のクラスからのすべてのテンプレートおよび命令ではなく、両方のクラスからのテンプレートおよび命令のいくつかの混在を有するコアは、本開示の範囲内に属する)。また、単一のプロセッサは複数のコアを含んでよく、これらのすべてが、同一クラスをサポートするか、または、異なるコアは異なるクラスをサポートする。例えば、別個のグラフィックコアおよび汎用コアを持つプロセッサでは、主にグラフィックコンピューティングおよび/または科学コンピューティング向けのグラフィックコアのうちの1つがクラスAのみをサポートしてよい一方、汎用コアのうちの1または複数は、クラスBのみをサポートする汎用コンピューティング向けアウトオブオーダ実行およびレジスタリネーミングを持つ高性能汎用コアであってよい。別個のグラフィックコアを有していない別のプロセッサは、クラスAおよびクラスBの両方をサポートする1または複数の汎用インオーダまたはアウトオブオーダコアを含んでよい。もちろん、本開示の異なる実施形態においては、1つのクラスに属する諸機能が、他のクラスに実装されてもよい。高水準言語で記述されたプログラムは、様々な異なる実行可能な形態に編成される(例えば、実行時コンパイルまたは静的コンパイル)。このような形態としては、1)実行のためのターゲットプロセッサによりサポートされるクラスの命令のみを有する形態、または2)すべてのクラスの異なる組み合わせを用いて記述された代替ルーチンを有し、且つ、コードを現在実行中のプロセッサによりサポートされる命令に基づき、実行すべきルーチンを選択する制御フローコードを有する形態が含まれる。
[例示的な特定ベクトル向け命令フォーマット]
【0142】
図6A~
図6Dは、本開示の実施形態による、例示的な特定ベクトル向け命令フォーマットを示すブロック図である。
図6A~
図6Dは、特定ベクトル向け命令フォーマット600を示す。特定ベクトル向け命令フォーマット600は、場所、サイズ、解釈およびフィールド順序に加え、これらのフィールドの一部の値を指定するという意味において特定的である。特定ベクトル向け命令フォーマット600を用いて、x86命令セットを拡張してよく、故に、フィールドの一部は、既存のx86命令セットおよびその拡張(例えば、AVX)で用いられるものと同様または同一である。このフォーマットは、拡張機能付きの既存のx86命令セットのプレフィックスエンコーディングフィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールドおよび即値フィールドと整合している。
図5A~
図5Bのフィールドが
図6A~
図6Dのどのフィールドにマッピングされるかが図示されている。
【0143】
本開示の実施形態は、説明目的で、汎用ベクトル向け命令フォーマット500の文脈の中で、特定ベクトル向け命令フォーマット600に関し説明されているが、本開示は、特許請求される場合を除き、特定ベクトル向け命令フォーマット600に限定はされないことを理解されたい。例えば、汎用ベクトル向け命令フォーマット500は様々なフィールドの様々な可能性のあるサイズを想定している一方、特定ベクトル向け命令フォーマット600は、特定のサイズのフィールドを有するように図示されている。特定の例として、データ要素幅フィールド564は、特定ベクトル向け命令フォーマット600では1ビットフィールドとして示されている一方、本開示はこのようには限定されない(すなわち、汎用ベクトル向け命令フォーマット500は、データ要素幅フィールド564の他のサイズを想定している)。
【0144】
汎用ベクトル向け命令フォーマット500は、以下に示されるフィールドを
図6Aに示される順序で含む。
【0145】
EVEXプレフィックス(バイト0-3)602:4バイト形式でエンコードされる。
【0146】
フォーマットフィールド540(EVEXバイト0、ビット[7:0]):第1のバイト(EVEXバイト0)はフォーマットフィールド540であり、0x62(本開示の一実施形態において、ベクトル向け命令フォーマットを区別するために用いられる一意の値)を含む。
【0147】
第2~第4バイト(EVEXバイト1-3)は、特定の機能を提供する複数のビットフィールドを含む。
【0148】
REXフィールド605(EVEXバイト1、ビット[7‐5]):EVEX.Rビットフィールド(EVEXバイト1、ビット[7]‐R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]‐X)および557BEXバイト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が形成されてよい。
【0149】
REX'フィールド510:これは、REX'フィールド510の第1の部分であり、拡張32レジスタセットの上位16または下位16のいずれかをエンコードするために用いられるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]‐R')である。本開示の一実施形態において、このビットは、以下に示す他のものと共に、BOUND命令から区別(周知のx86 32ビットモードで)するためにビット反転形式で格納され、BOUND命令のリアルオペコードバイトは62であるが、MOD R/Mフィールド(後述)では、MODフィールド内の値11を受け入れない。本開示の代替的な実施形態は、これおよび以下に示される他のビットを反転形式でストアしない。値1が用いられて、下位の16個のレジスタをエンコードする。換言すると、EVEX.R'、EVEX.Rおよび他のフィールドからの他のRRRを組み合わせて、R'Rrrrが形成される。
【0150】
オペコードマップフィールド615(EVEXバイト1、ビット[3:0]‐mmmm):その内容により、暗示された先頭オペコードバイト(0F、0F 38または0F 3)をエンコードする。
【0151】
データ要素幅フィールド564(EVEXバイト2、ビット[7]‐W):表記EVEX.Wにより表される。EVEX.Wは、データ型の粒度(サイズ)を定義するために用いられる(32ビットデータ要素または64ビットデータ要素のいずれか)。
【0152】
EVEX.vvvv620(EVEXバイト2、ビット[6:3]―vvvv):EVEX.vvvvの役割は、以下を含んでよい。1)EVEX.vvvvは、反転(1の補数)形式で指定された第1のソースレジスタオペランドをエンコードし、2つ以上のソースオペランドを有する命令について有効である。2)EVEX.vvvvは、特定のベクトルシフトについて1の補数形式で指定されたデスティネーションレジスタオペランドをエンコードする。または、3)EVEX.vvvvは、いずれのオペランドもエンコードせず、当該フィールドは予約されており、1111bを含むはずである。故に、EVEX.vvvvフィールド620は、反転(1の補数)形式で格納された第1のソースレジスタ指定子の4つの下位ビットをエンコードする。命令に応じて、追加の異なるEVEXビットフィールドが使用され、指定子サイズを32個のレジスタに拡張する。
【0153】
EVEX.U568クラスフィールド(EVEXバイト2、ビット[2]‐U):EVEX.U=0の場合、これは、クラスAまたはEVEX.U0を示す。EVEX.U=1の場合、これは、クラスBまたはEVEX.U1を示す。
【0154】
プレフィックスエンコーディングフィールド625(EVEXバイト2、ビット[1:0]‐pp):基本オペレーションフィールドに対し追加ビットを提供する。EVEXプレフィックスフォーマットのレガシSSE命令へのサポートを提供することに加え、これはまたSIMDプレフィックスを圧縮する利益も有する(SIMDプレフィックスを表すために1バイトを必要とせず、EVEXプレフィックスは2ビットのみを必要とする)。一実施形態において、レガシフォーマットおよびEVEXプレフィックスフォーマットの両方でSIMDプレフィックス(66H、F2H、F3H)を使用するレガシSSE命令をサポートするために、これらのレガシSIMDプレフィックスは、SIMDプレフィックスエンコーディングフィールドにエンコードされ、ランタイム時にデコード回路のPLAに提供される前に、レガシSIMDプレフィックスに拡張される(そのため、PLAは、修正することなく、これらのレガシ命令のレガシフォーマットとEVEXフォーマットの両方を実行できる)。より新しい命令は、EVEXプレフィックスエンコーディングフィールド内の内容を直接オペコード拡張として使用できるが、特定の実施形態は整合性のために同様の形式で拡張するが、これらのレガシSIMDプレフィックスにより指定される異なる手段を可能にする。代替的な実施形態は、2ビットSIMDプレフィックスエンコーディングをサポートし、従って、拡張を必要としないようにPLAを再設計することができる。
【0155】
アルファフィールド552(EVEXバイト3、ビット[7]‐EH:EVEX.EH、EVEX.rs、EVEX.RL、EVEX.書き込みマスク制御およびEVEX.Nとしても知られ、αでも示される):上記したように、このフィールドはコンテキスト固有である。
【0156】
ベータフィールド554(EVEXバイト3、ビット[6:4]‐SSS、EVEXs2-0、EVEXr2-0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られ、βββでも示される)。上記したように、このフィールドはコンテキスト固有である。
【0157】
REX'フィールド510:これは、REX'フィールドの残部であり、拡張32レジスタセットの上位16個または下位16個のいずれかをエンコードするために用いられ得るEVEX.V'ビットフィールド(EVEXバイト3、ビット[3]‐V')である。このビットは、ビット反転フォーマットで格納される。下位の16個のレジスタをエンコードするために値1が用いられる。換言すると、EVEX.V'、EVEX.vvvvを組み合わせて、V'VVVVが形成される。
【0158】
書き込みマスクフィールド570(EVEXバイト3、ビット[2:0]‐kkk):その内容は、上記の通り、書き込みマスクレジスタのレジスタのインデックスを指定する。本開示の一実施形態において、特定の値EVEX.kkk=000は、特定の命令に書き込みマスクが用いられないことを暗示する特別な挙動を有する(これは、すべて1にハードワイヤードされる書き込みマスクまたはマスキングハードウェアをバイパスするハードウェアの使用を含み、様々な方法で実装されてよい)。
【0159】
リアルオペコードフィールド630(バイト4)は、オペコードバイトとしても知られる。オペコードの一部は、このフィールドで指定される。
【0160】
MOD R/Mフィールド640(バイト5)は、MODフィールド642、Regフィールド644およびR/Mフィールド646を含む。上記の通り、MODフィールド642の内容により、メモリアクセスオペレーションと非メモリアクセスオペレーションとの間を区別する。Regフィールド644の役割は、2つの状況に要約できる。デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードする、または、オペコード拡張として扱われ、命令オペランドをエンコードするために用いられない。R/Mフィールド646の役割は、メモリアドレスを参照する命令オペランドをエンコードすること、または、デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードすることを含んでよい。
【0161】
スケール、インデックス、基本(SIB)バイト(バイト6):上記の通り、スケールフィールド550の内容は、メモリアドレス生成に用いられる。SIB.xxx654およびSIB.bbb656:これらのフィールドの内容は、レジスタインデックスXxxxおよびBbbbに関して記載済みである。
【0162】
変位フィールド562A(バイト7-10):MODフィールド642が10を含む場合、バイト7‐10が変位フィールド562Aであり、変位フィールド562Aはレガシ32ビットの変位(disp32)と同じように動作し、バイト粒度で動作する。
【0163】
変位係数フィールド562B(バイト7):MODフィールド642が01を含む場合、バイト7が変位係数フィールド562Bである。このフィールドの位置は、レガシx86命令セット8ビット変位(disp8)の位置と同一であり、バイト粒度で動作する。disp8は符号拡張されるので、-128と127バイトのオフセット間でのみアドレス指定できる。64バイトのキャッシュラインの観点では、disp8は4つの現実的に有用な値-128、-64、0、および64にのみ設定できる8ビットを使用し、より大きな範囲がしばしば必要とされるので、disp32が使用されるが、disp32は4バイトを必要とする。disp8およびdisp32と対照的に、変位係数フィールド562Bはdisp8を再解釈したものであり、変位係数フィールド562Bを使用するとき、実際の変位は、メモリオペランドアクセスのサイズ(N)で乗算された変位係数フィールドの内容によって決定される。このタイプの変位は、disp8*Nと称される。これは、平均命令長を低減する(変位に使用される単一バイトであるが、はるかに広い範囲を有する)。このような圧縮された変位は、実効変位がメモリアクセスの粒度の倍数であるという仮定に基づいており、従って、アドレスオフセットの冗長な下位ビットはエンコードされる必要がない。換言すると、変位係数フィールド562Bは、レガシx86命令セットの8ビット変位を置き換える。故に、変位係数フィールド562Bは、disp8がdisp8*Nにオーバーロードされる点のみを除き、x86命令セットの8ビット変位と同じ方法でエンコードされる(そのため、ModRM/SIBエンコーディング規則における変更はない)。換言すると、エンコーディング規則またはエンコーディング長に変更はないが、ハードウェア(バイト単位のアドレスオフセットを取得するために、メモリオペランドのサイズによって変位をスケーリングする必要がある)による変位値の解釈のみに変更がある。即値フィールド572は、上記の通り動作する。
[フルオペコードフィールド]
【0164】
図6Bは、本開示の一実施形態によるフルオペコードフィールド574を構成する特定ベクトル向け命令フォーマット600のフィールドを示すブロック図である。具体的に言うと、フルオペコードフィールド574は、フォーマットフィールド540、基本オペレーションフィールド542、およびデータ要素幅(W)フィールド564を含む。基本オペレーションフィールド542は、プレフィックスエンコーディングフィールド625、オペコードマップフィールド615およびリアルオペコードフィールド630を含む。
[レジスタインデックスフィールド]
【0165】
図6Cは、本開示の一実施形態による、レジスタインデックスフィールド544を構成する特定ベクトル向け命令フォーマット600のフィールドを示すブロック図である。具体的に言うと、レジスタインデックスフィールド544は、REXフィールド605、REX'フィールド610、MODR/M.regフィールド644、MODR/M.r/mフィールド646、VVVVフィールド620、xxxフィールド654およびbbbフィールド656を含む。
[拡張オペレーションフィールド]
【0166】
図6Dは、本開示の一実施形態による、拡張オペレーションフィールド550を構成する特定ベクトル向け命令フォーマット600のフィールドを示すブロック図である。クラス(U)フィールド568が0を含む場合、それは、EVEX.U0(クラスA 568A)を意味し、1を含むとき、それはEVEX.U1(クラスB 568B)を意味する。U=0であり且つMODフィールド642が(非メモリアクセスオペレーションを意味する)11を含むとき、アルファフィールド552(EVEXバイト3、ビット[7]-EH)はrsフィールド552Aとして解釈される。rsフィールド552Aが1(ラウンド552A.1)を含むとき、ベータフィールド554(EVEXバイト3、ビット[6:4]-SSS)はラウンド制御フィールド554Aとして解釈される。ラウンド制御フィールド554Aは、1ビットのSAEフィールド556および2ビットのラウンドオペレーションフィールド558を含む。rsフィールド552Aが0を含む場合(データ変換552A.2)、ベータフィールド554(EVEXバイト3、ビット[6:4]‐SSS)は3ビットのデータ変換フィールド554Bとして解釈される。U=0で且つMODフィールド642が00、01または10を含む場合(メモリアクセスオペレーションを意味)、アルファフィールド552(EVEXバイト3、ビット[7]‐EH)は、エビクションヒント(EH)フィールド552Bとして解釈され、ベータフィールド554(EVEXバイト3、ビット[6:4]‐SSS)は3ビットのデータ操作フィールド554Cとして解釈される。
【0167】
U=1の場合、アルファフィールド552(EVEXバイト3、ビット[7]-EH)は、書き込みマスク制御(Z)フィールド552Cとして解釈される。U=1であり且つMODフィールド642が11を含む(非メモリアクセスオペレーションを表わす)場合、ベータフィールド554の一部(EVEXバイト3、ビット[4]―S0)は、RLフィールド557Aとして解釈される。1を含む場合(ラウンド557A.1)、ベータフィールド554の残部(EVEXバイト3、ビット[6‐5]―S2-1)は、ラウンドオペレーションフィールド559Aとして解釈される一方、RLフィールド557Aが0を含む場合(VSIZE 557.A2)、ベータフィールド554の残部(EVEXバイト3、ビット[6‐5]―S2-1)は、ベクトル長フィールド559B(EVEXバイト3、ビット[6‐5]‐L1-0)として解釈される。U=1であり且つMODフィールド642が00、01、または10を含む(メモリアクセスオペレーションを意味する)場合、ベータフィールド554(EVEXバイト3、ビット[6:4]-SSS)は、ベクトル長フィールド559B(EVEXバイト3、ビット[6-5]-L1-0)およびブロードキャストフィールド557B(EVEXバイト3、ビット[4]-B)として解釈される。
[例示的レジスタアーキテクチャ]
【0168】
図7は、本開示の一実施形態による、レジスタアーキテクチャ700のブロック図である。図示された実施形態においては、512ビット幅である32個のベクトルレジスタ710が存在し、これらのレジスタは、zmm0からzmm31と称される。下位16個のzmmレジスタの下位256ビットは、ymm0~16レジスタ上に重なっている。下位16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、xmm0~15レジスタ上に重なっている。特定ベクトル向け命令フォーマット600は、以下の表に示されるように、これらの重なったレジスタファイルを処理する。
【表6】
【0169】
換言すると、ベクトル長フィールド559Bは、最大長と、1または複数の他のより短い長さとの間で選択し、このようなより短い長さの各々は先行する長さの半分の長さであり、ベクトル長フィールド559Bのない命令テンプレートは、最大ベクトル長を処理する。さらに、一実施形態において、特定ベクトル向け命令フォーマット600のクラスB命令テンプレートは、パックされたまたはスカラの単精度/倍精度浮動小数点データおよびパックされたまたはスカラの整数データに対し処理を行う。スカラ演算とは、zmm/ymm/xmmレジスタ内の最下位のデータ要素の位置で実行される演算である。実施形態に応じ、より上位のデータ要素の位置は、命令前と同じに保持されるか、ゼロにされるかのいずれかである。
【0170】
書き込みマスクレジスタ715:図示された実施形態では、各々が64ビットサイズの8つの書き込みマスクレジスタ(k0からk7)が存在する。代替的な実施形態においては、書き込みマスクレジスタ715は16ビットのサイズである。前述したように、本開示の一実施形態において、ベクトルマスクレジスタk0は、書き込みマスクとして用いることはできず、通常k0を示すエンコーディングが書き込みマスクに用いられる場合、ベクトルマスクレジスタは、0xFFFFのハードワイヤされた書き込みマスクを選択することで、その命令に対する書き込みマスキングを実質無効にする。
【0171】
汎用レジスタ725:図示された実施形態では、メモリオペランドをアドレス指定するための既存のx86アドレス指定モードと共に使用される16個の64ビット汎用レジスタが存在する。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSPおよびR8~R15という名称で参照される。
【0172】
示される実施形態において、MMXパックされた整数フラットレジスタファイル750でアリアスされた部分のスカラ浮動小数点スタックレジスタファイル(x87スタック)745では、x87スタックは、x87命令セット拡張を用いて、32/64/80ビット浮動小数点データに対し、スカラ浮動小数点演算を行うために用いられる8要素から成るスタックである。一方で、MMXレジスタは、64ビットのパックされた整数データに対し演算を行うために用いられ、また、MMXレジスタとXMMレジスタとの間で行われるいくつかの演算のオペランドを保持するために用いられる。
【0173】
本開示の代替的な実施形態は、より広い、またはより狭いレジスタを用いてよい。また、本開示の代替的な実施形態は、より多い、より少ない、または異なるレジスタファイルおよびレジスタを用いてよい。
[例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ]
【0174】
プロセッサコアは、異なる方法で、異なる目的のために、異なるプロセッサにおいて実装されてよい。例えば、このようなコアの実装形態には、1)汎用コンピューティング向けの汎用インオーダコア、2)汎用コンピューティング向けの高性能汎用アウトオブオーダコア、3)主にグラフィックおよび/または科学(スループット)コンピューティング向けの専用コアが含まれてよい。異なるプロセッサの実装形態には、1)汎用コンピューティング向けの1または複数の汎用インオーダコアおよび/または汎用コンピューティング向け1または複数の汎用アウトオブオーダコアを含むCPU、および、2)主にグラフィックおよび/または科学(スループット)向けの1または複数の専用コアを含むコプロセッサが含まれてよい。このような異なるプロセッサは、異なるコンピュータシステムアーキテクチャをもたらし、このようなコンピュータシステムアーキテクチャには、1)CPUとは別のチップ上のコプロセッサ、2)CPUと同じパッケージ内の別のダイ上のコプロセッサ、3)CPUと同じダイ上のコプロセッサ(この場合、このようなコプロセッサは、統合グラフィックおよび/または科学(スループット)ロジック等の専用ロジック、または、専用コアと呼ばれることがある)、および4)同じダイ上に(アプリケーションコアまたはアプリケーションプロセッサと呼ばれることもある)説明されたCPU、上述したコプロセッサ、および追加の機能を含んでよいシステムオンチップが含まれてよい。次に、例示的なコアアーキテクチャについて説明し、その後に例示的なプロセッサおよびコンピュータアーキテクチャの説明が続く。
[例示的なコアアーキテクチャ]
[インオーダおよびアウトオブオーダコアのブロック図]
【0175】
図8Aは、本開示の実施形態による、例示的なインオーダパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。
図8Bは、本開示の実施形態によるプロセッサに含まれる例示的実施形態のインオーダアーキテクチャコア、および例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。
図8A~
図8B中の実線のボックスがインオーダパイプラインおよびインオーダコアを示す一方、破線のボックスがオプションの追加のレジスタリネーミング、アウトオブオーダ発行/実行パイプライン及びコアを示す。インオーダの態様はアウトオブオーダの態様のサブセットであることを想定して、アウトオブオーダの態様について説明する。
【0176】
図8A中、プロセッサパイプライン800は、フェッチステージ802、長さデコードステージ804、デコードステージ806、割り当てステージ808、リネーミングステージ810、スケジューリング(ディスパッチまたは発行としても知られる)ステージ812、レジスタ読み取り/メモリ読み取りステージ814、実行ステージ816、書き戻し/メモリ書き込みステージ818、例外処理ステージ822およびコミットステージ824を含む。
【0177】
図8Bは、実行エンジンユニット850に結合されたフロントエンドユニット830を含むプロセッサコア890を示し、これら両方がメモリユニット870に結合されている。コア890は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドコアタイプまたは代替コアタイプであってよい。さらに別のオプションとして、コア890は、例えば、ネットワークコアまたは通信コア等の専用コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィック処理装置(GPGPU)コアまたはグラフィックコア等であってよい。
【0178】
フロントエンドユニット830は、命令キャッシュユニット834に結合された分岐予測ユニット832を含み、命令キャッシュユニット834は命令変換ルックアサイドバッファ(TLB)836に結合され、命令変換ルックアサイドバッファ(TLB)836は命令フェッチユニット838に結合され、命令フェッチユニット838はデコードユニット840に結合されている。デコードユニット840(例えば、デコード回路)は命令(例えば、マクロ命令)をデコードし、且つ、1または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令または他の制御信号を出力として生成してよく、これらは元の命令からデコードされ、あるいは元の命令を反映し、あるいは元の命令から導出される。デコードユニット840は、様々な異なるメカニズムを用いて実装されてよい。好適なメカニズムの例としては、限定されるものではないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)等が含まれる。一実施形態において、コア890は、マイクロコードROM、または特定のマクロ命令のためのマイクロコードを格納(例えば、デコードユニット840内に、あるいは、フロントエンドユニット830内に)する他の媒体を含む。デコードユニット840は、実行エンジンユニット850内のリネーム/アロケータユニット852に結合される。
【0179】
実行エンジンユニット850は、リタイアメントユニット854に結合されたリネーム/アロケータユニット852および1または複数のスケジューラユニットのセット856を含む。スケジューラユニット856は、予約ステーション、中央命令ウィンドウ等を含む任意の数の異ななるスケジューラ回路を表わす。スケジューラユニット856は、物理レジスタファイルユニット858に結合される。物理レジスタファイルユニット858の各々は、1または複数の物理レジスタセットを表わし、それらのうちの異なる物理レジスタセットは、スカラ整数、スカラ浮動小数点、パックされた整数、パックされた浮動小数点、ベクトル整数、ベクトル浮動小数点等の1または複数の異なるデータ型、ステータス(例えば、実行されるべき次の命令のアドレスである命令ポインタ)等を格納する。一実施形態において、物理レジスタファイルユニット858は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、およびスカラレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタおよび汎用レジスタを提供してよい。物理レジスタファイルユニット858は、リタイアメントユニット854に重ねられて、レジスタリネーミングおよびアウトオブオーダ実行が実装されてよい様々な態様(例えば、リオーダバッファおよびリタイアメントレジスタファイルを用いる、将来のファイル、履歴バッファ、およびリタイアメントレジスタファイルを用いる、レジスタマップおよびレジスタプールを用いる等)を示す。リタイアメントユニット854および物理レジスタファイルユニット858は、実行クラスタ860に結合されている。実行クラスタ860は、1または複数の実行ユニット862のセット(例えば、実行回路)および1または複数のメモリアクセスユニット864のセットを含む。実行ユニット862は、様々な演算(例えば、シフト、加算、減算、乗算)を、様々なデータ型(例えば、スカラ浮動小数点、パックされた整数、パックされた浮動小数点、ベクトル整数、ベクトル浮動小数点)に対し実行してよい。いくつかの実施形態が、特定の機能または機能セットに専用の複数の実行ユニットを含んでよい一方、他の実装は、1つの実行ユニットのみ、またはすべての機能をすべて実行する複数の実行ユニットを含んでよい。スケジューラユニット856、物理レジスタファイルユニット858および実行クラスタ860は複数の可能性があるものとして図示されているが、これは、特定の実施形態において、特定のデータ型/演算のために別個のパイプラインが形成されるからである(例えば、スカラ整数パイプライン、スカラ浮動小数点/パックされた整数/パックされた浮動小数点/ベクトル整数/ベクトル浮動小数点のパイプライン、および/またはメモリアクセスパイプライン。これらパイプラインの各々は自身のスケジューラユニット、物理レジスタファイルユニットおよび/または実行クラスタを有し、別個のメモリアクセスパイプラインの場合は、このパイプラインの実行クラスタのみがメモリアクセスユニット864を有するといった特定の実装が実装される)。また別個のパイプラインが用いられる場合は、これらのパイプラインのうちの1または複数は、アウトオブオーダ発行/実行であってよく、残りがインオーダであってよいことも理解されたい。
【0180】
メモリアクセスユニット864のセットがメモリユニット870に結合され、レベル2(L2)キャッシュユニット876に結合されたデータキャッシュユニット874に結合されたデータTLBユニット872を含む。1つの例示的実施形態において、メモリアクセスユニット864は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含んでよく、これらの各々が、メモリユニット870のデータTLBユニット872に結合されている。命令キャッシュユニット834は、さらに、メモリユニット870内のレベル2(L2)キャッシュユニット876に結合されている。L2キャッシュユニット876は、1または複数の他のレベルのキャッシュに結合され、最終的にメインメモリに結合される。
【0181】
例示として、例示的レジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、以下のようなパイプライン800を実装してよい。1)命令フェッチ838は、フェッチステージ802および長さデコーディングステージ804を実行する。2)デコードユニット840は、デコードステージ806を実行する。3)リネーム/アロケータユニット852は、割り当てステージ808およびリネームステージ810を実行する。4)スケジューラユニット856は、スケジューリングステージ812を実行する。5)物理レジスタファイルユニット858およびメモリユニット870は、レジスタ読み取り/メモリ読み取りステージ814を実行し、実行クラスタ860は、実行ステージ816を実行する。6)メモリユニット870および物理レジスタファイルユニット858は、書き戻し/メモリ書き込みステージ818を実行する。7)様々なユニットが例外処理ステージ822に関与してよい。8)リタイアメントユニット854および物理レジスタファイルユニットは、コミットステージ824を実行する。
【0182】
コア890は、本明細書で説明した命令を含む、1または複数の命令セット(例えば、x86命令セット(より新しいバージョンが追加されたいくつかの拡張がなされたもの)、カリフォルニアのサニーベールにあるMIPS TechnologiesのMIPS命令セット、カリフォルニアのサニーベールにあるARM HoldingsのARM命令セット(NEON等のオプションの拡張機能が追加された))をサポートしてよい。一実施形態において、コア890は、パックされたデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、これにより、多くのマルチメディアアプリケーションにより用いられるオペレーションがパックされたデータを用いて実行されることを可能にする。
【0183】
コアは、マルチスレッディング(2または2より多いオペレーションまたはスレッドの並列セットを実行)をサポートしてよく、タイムスライスマルチスレッディング、同時マルチスレッディング(単一の物理コアが、物理コアが同時マルチスレッディングをしているスレッドの各々に対し論理コアを提供する)、またはこれらの組み合わせ(例えば、インテル(登録商標)ハイパースレッディングテクノロジのように、タイムスライスフェッチおよびデコード並びにその後の同時マルチスレッディング)を含む様々な方法でそのように実行してよいことを理解されたい。
【0184】
レジスタリネーミングはアウトオブオーダ実行の文脈で説明されているが、レジスタリネーミングはインオーダアーキテクチャで用いられてよいことを理解されたい。プロセッサの示された実施形態は、別個の命令およびデータキャッシュユニット834/874および共有L2キャッシュユニット876を含む一方、代替的な実施形態は、例えば、レベル1(L1)内部キャッシュまたは複数のレベルの内部キャッシュ等の命令およびデータ両方のための単一の内部キャッシュを有してよい。いくつかの実施形態において、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。代替的に、すべてのキャッシュは、コアおよび/またはプロセッサの外部に存在してよい。
[具体的な例示的インオーダコアアーキテクチャ]
【0185】
図9A~
図9Bは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示し、このコアは、チップ内のいくつかの論理ブロック(同じタイプおよび/または異なるタイプの他のコアを含む)のうちの1つとなる。論理ブロックは、適用に応じ、高帯域幅の相互接続ネットワーク(例えば、リングネットワーク)を通して、いくつかの固定機能ロジック、メモリI/Oインタフェースおよび他の必要なI/Oロジックと通信する。
【0186】
図9Aは、本開示の実施形態による、単一のプロセッサコアを、オンダイ相互接続ネットワーク902へのその接続およびレベル2(L2)キャッシュ904のそのローカルサブセットと共に示すブロック図を示す。一実施形態において、命令デコードユニット900は、パックされたデータ命令セット拡張を持つx86命令セットをサポートする。L1キャッシュ906は、スカラユニットおよびベクトルユニットに入るキャッシュメモリへの低レイテンシのアクセスを可能にする。一実施形態において、(設計の単純化のために)スカラユニット908およびベクトルユニット910は、別個のレジスタセット(それぞれ、スカラレジスタ912およびベクトルレジスタ914)を用い、これらの間で転送されるデータはメモリに書き込まれた後、レベル1(L1)キャッシュ906から再読み取りされる一方、本開示の代替的な実施形態は、異なるアプローチ(例えば、単一のレジスタセットを用いる、または書き込みおよび再読み取りを行うことなく、2つのレジスタファイル間でデータ転送を可能とする通信パスを含む)を用いてよい。
【0187】
L2キャッシュ904のローカルサブセットは、プロセッサコア当たりに1つのサブセットとなるように、別個のローカルサブセットに分割されたグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュ904のその独自のローカルサブセットへの直接アクセスパスを有する。プロセッサコアにより読み取られたデータは、そのL2キャッシュサブセット904に格納され、それらの独自のローカルL2キャッシュサブセットにアクセスする他のプロセッサコアと並行して、迅速にアクセスされてよい。プロセッサコアにより書き込まれたデータは、その独自のL2キャッシュサブセット904内に格納され、必要な場合は、他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは、プロセッサコア、L2キャッシュおよび他の論理ブロック等のエージェントが、チップ内で互いに通信できるように双方向である。各リングデータパスは、各方向で1012ビット幅である。
【0188】
図9Bは、本開示の実施形態による
図9A中のプロセッサコアの一部の拡大図である。
図9Bは、L1キャッシュ904の一部であるL1データキャッシュ906Aと、ベクトルユニット910およびベクトルレジスタ914に関する詳細とを含む。具体的に言うと、ベクトルユニット910は、16幅ベクトル処理ユニット(VPU)(16幅ALU928を参照)であり、VPUは、整数、単精度および倍精度の浮動命令のうちの1または複数を実行する。VPUは、スウィズルユニット920を用いてレジスタ入力をスウィズルすること、数値変換ユニット922A-Bを用いて数値変換すること、およびレプリケーションユニット924を用いてメモリ入力にレプリケーションを行うことをサポートする。書き込みマスクレジスタ926は、得られるベクトル書き込みを予測することを可能にする。
【0189】
図10は、本開示の実施形態による、2つ以上のコアを有してよい、統合メモリコントローラを有してよい、統合グラフィックを有してよいプロセッサ1000のブロック図である。
図10の実線のボックスは、シングルコア1002A、システムエージェント1010、1または複数のバスコントローラユニット1016から成るセットを有するプロセッサ1000を示す一方、破線のボックスの追加オプションは、マルチコア1002A~N、システムエージェントユニット1010内の1または複数の統合メモリコントローラユニット1014から成るセット、および専用ロジック1008を有する代替のプロセッサ1000を示す。
【0190】
故に、プロセッサ1000の異なる実装は、1)統合されたグラフィックおよび/または科学(スループット)ロジック(1または複数のコアを含んでよい)である専用ロジック1008と、1または複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、これら2つの組み合わせ)であるコア1002A~Nとを持つCPU、2)主にグラフィックおよび/または科学(スループット)向けの多数の専用コアであるコア1002A~Nを持つコプロセッサ、および、3)多数の汎用インオーダコアであるコア1002A~Nを持つコプロセッサを含んでよい。故に、プロセッサ1000は、汎用プロセッサ、コプロセッサ、または、例えば、ネットワークプロセッサ若しくは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPU(汎用グラフィック処理装置)、高スループットMIC(Many Integrated Core)コプロセッサ、(30以上のコアを含む)または組み込みプロセッサ等の専用プロセッサであってよい。プロセッサは、1または複数のチップ上に実装されてよい。プロセッサ1000は、例えば、BiCMOS、CMOSまたはNMOS等の任意の数のプロセス技術を用いた、1または複数の基板の一部であってよく、および/または、当該基板上に実装されてよい。
【0191】
メモリ階層は、コア内に1または複数のレベルのキャッシュ、共有キャッシュユニットのセットまたは1若しくは複数の共有キャッシュユニット1006、および統合メモリコントローラユニット1014のセットに結合された外部メモリ(不図示)を含む。共有キャッシュユニットのセット1006は、1または複数の中間レベルのキャッシュ、例えば、レベル2(L2)、レベル3(L3)、レベル4(L4)または他のレベルのキャッシュ、ラストレベルキャッシュ(LLC)および/またはこれらの組み合わせを含んでよい。一実施形態において、リングベースの相互接続ユニット1012が、統合グラフィックロジック1008、共有キャッシュユニットのセット1006、およびシステムエージェントユニット1010/統合メモリコントローラユニット(1014)を相互接続する一方、代替的な実施形態は、このようなユニットを相互接続するための任意の数の周知の技術を用いてよい。一実施形態において、1または複数のキャッシュユニット1006と、コア1002-A-Nとの間のコヒーレンシが維持される。
【0192】
いくつかの実施形態において、コア1002A-Nのうちの1または複数がマルチスレッディングを可能である。システムエージェント1010は、コア1002A-Nを調整および操作するこれらのコンポーネントを含む。システムエージェントユニット1010は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含んでよい。PCUは、コア1002A-Nおよび統合グラフィックロジック1008の電力状態を調整するために必要なロジックおよびコンポーネントであってよい、またはこれらを含んでよい。ディスプレイユニットは、1または複数の外部接続されたディスプレイを駆動させるためのものである。
【0193】
コア1002A-Nは、アーキテクチャ命令セットの観点から同種または異種であってよく、すなわち、コア1002A-Nのうちの2または2より多いものは、同一命令セットを実行可能であって良い一方、他のものは、その命令セットのサブセットまたは異なる命令セットを実行可能であってよい。
[例示的なコンピュータアーキテクチャ]
【0194】
図11~14は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイス用に当該技術分野で既知の他のシステム設計および構成もまた好適である。一般に、本明細書で開示されたプロセッサおよび/または他の実行ロジックを組み込み可能な膨大な数の様々なシステムおよび電子デバイスが、概して好適である。
【0195】
ここで
図11を参照すると、本開示の一実施形態による、システム1100のブロック図が示されている。システム1100は、1または複数のプロセッサ1110、1115を含んでよく、当該プロセッサはコントローラハブ1120に結合される。一実施形態において、コントローラハブ1120は、グラフィックメモリコントローラハブ(GMCH)1190および入/出力ハブ(IOH)1150(別個のチップ上に存在してよい)を含む。GMCH1190は、メモリ1140およびコプロセッサ1145が結合されたメモリコントローラおよびグラフィックコントローラを含む。IOH1150は、入/出力(I/O)デバイス1160を、GMCH1190に結合する。代替的に、メモリコントローラおよびグラフィックコントローラのうちの一方または両方は、プロセッサ内に統合されてよく(本明細書で説明したように)、メモリ1140およびコプロセッサ1145は、プロセッサ1110およびIOH1150内の単一チップにあるコントローラハブ1120に直接結合される。メモリ1140は、例えば、実行時にプロセッサに、本開示の任意の方法を実行させるコードを格納するための投機マネージャコード1140Aを含んでよい。
【0196】
追加のプロセッサ1115のオプションの性質が
図11に破線で示されている。各プロセッサ1110、1115は、本明細書で説明された処理コアのうちの1または複数を含んでよく、プロセッサ1000の何らかのバージョンであってよい。
【0197】
メモリ1140は、例えば、ダイナミックランダムアクセス(DRAM)、相変化メモリ(PCM)またはこれら2つの組み合わせであってよい。少なくとも1つの実施形態では、コントローラハブ1120は、フロントサイドバス(FSB)等のマルチドロップバス、Quickpathインターコネクト(QPI)等のポイントツーポイントインタフェース、または同様の接続1195を介して、プロセッサ1110、1115と通信する。
【0198】
一実施形態において、コプロセッサ1145は、例えば、高スループットMICプロセッサ、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPUまたは組み込みプロセッサ等の専用プロセッサである。一実施形態において、コントローラハブ1120は、統合グラフィックアクセラレータを含んでよい。
【0199】
物理リソース1110、1115間には、アーキテクチャ特性、マイクロアーキテクチャ特性、熱特性、電力消費特性等を含む広範な価値基準の観点から様々な差異が存在し得る。
【0200】
一実施形態において、プロセッサ1110は、汎用タイプのデータプロセッシング処理を制御する命令を実行する。命令内には、コプロセッサ命令が埋め込まれてよい。プロセッサ1110は、これらのコプロセッサ命令を、取り付けられたコプロセッサ1145により実行されるべきタイプであると認識する。従って、プロセッサ1110は、これらのコプロセッサ命令(またはコプロセッサ命令を表わす制御信号)を、コプロセッサバスまたは他の相互接続上でコプロセッサ1145に対し発行する。コプロセッサ1145は、コプロセッサ命令を受け取り、受信したコプロセッサ命令を実行する。
【0201】
ここで
図12を参照すると、本開示の実施形態による、第1のより具体的な例示的システム1200のブロック図が示されている。
図12に示される通り、マルチプロセッサシステム1200は、ポイント‐ツーポイント相互接続システムであり、ポイント‐ツーポイント相互接続1250を介して結合された第1のプロセッサ1270および第2のプロセッサ1280を含む。プロセッサ1270および1280の各々は、プロセッサ1000の特定のバージョンであってよい。本開示の一実施形態において、プロセッサ1270および1280はそれぞれプロセッサ1110および1115である一方、コプロセッサ1238はコプロセッサ1145である。別の実施形態において、プロセッサ1270および1280は、それぞれプロセッサ1110およびコプロセッサ1145である。
【0202】
プロセッサ1270および1280は、それぞれ統合メモリコントローラ(IMC)ユニット1272および1282を含むように図示されている。プロセッサ1270は、またそのバスコントローラユニットの一部として、ポイント‐ツーポイント(P‐P)インタフェース1276および1278を含み、同様に、第2のプロセッサ1280は、P‐Pインタフェース1286および1288を含む。プロセッサ1270、1280は、P‐Pインタフェース回路1278、1288を用いて、ポイント‐ツーポイント(P‐P)インタフェース1250を介して情報を交換してよい。
図12に示される通り、IMC1272および1282は、プロセッサをそれぞれのメモリ、すなわちメモリ1232およびメモリ1234に結合し、当該メモリは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であってよい。
【0203】
プロセッサ1270、1280はそれぞれ、ポイントツーポイントインタフェース回路1276、1294、1286、1298を用いて、個々のP‐Pインタフェース1252、1254を介してチップセット1290と情報を交換してよい。オプションで、チップセット1290は、高性能インタフェース1239を介して、コプロセッサ1238と情報を交換してよい。一実施形態において、コプロセッサ1238は、例えば、高スループットMICプロセッサ、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPUまたは埋め込みプロセッサ等の専用プロセッサである。
【0204】
共有キャッシュ(不図示)は、いずれかのプロセッサ内に含まれてよく、または両方のプロセッサの外部にあるが、P‐P相互接続を介してプロセッサと接続されていてよく、そのため、プロセッサが低電力モードになった場合、いずれかのプロセッサまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納されてよい。
【0205】
チップセット1290は、インタフェース1296を介して第1のバス1216に結合されてよい。一実施形態において、第1のバス1216は、ペリフェラルコンポーネントインターコネクト(PCI)バス、または、PCI Expressバス等のバス、または別の第3世代I/O相互接続バスであってよいが、本開示の実施形態はこのように限定はされない。
【0206】
図12に示される通り、様々なI/Oデバイス1214が、第1のバス1216を第2のバス1220に結合させるバスブリッジ1218と共に、第1のバス1216に結合されてよい。一実施形態において、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックアクセラレータまたはデジタル信号処理(DSP)ユニット等)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサ等の1または複数の追加のプロセッサ1215が、第1のバス1216に結合される。一実施形態において、第2のバス1220は、ローピンカウント(LPC)バスであってよい。例えば、一実施形態において、キーボードおよび/またはマウス1222、通信デバイス1227、および、命令/コードおよびデータ1230を含んでよいディスクドライブまたは他のマスストレージデバイス等のストレージユニット1228を含む、様々なデバイスが第2のバス1220に結合されてよい。さらに、オーディオI/O1224が、第2のバス1220に結合されてよい。他のアーキテクチャが可能であることに留意されたい。例えば、
図12のポイント‐ツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他のこのようなアーキテクチャを実装してよい。
【0207】
ここで
図13を参照すると、本開示の実施形態による、第2のより具体的な例示的システム1300のブロック図が示されている。
図12および
図13の同様の要素には同様の参照符号が付され、
図13の他の態様を曖昧にすることを回避するために、
図12の特定の態様は
図13から省略されている。
【0208】
図13は、プロセッサ1270、1280が、それぞれ統合メモリならびにI/O制御ロジック("CL")1272および1282を含んでよいことを示す。故に、CL1272、1282は、統合メモリコントローラユニットを含み、I/O制御ロジックを含む。
図13は、メモリ1232、1234がCL1272、1282に結合されるだけでなく、I/Oデバイス1314も制御ロジック1272、1282に結合されることを示す。レガシI/Oデバイス1315が、チップセット1290に結合される。
【0209】
ここで
図14を参照すると、本開示の実施形態によるSoC1400のブロック図が示されている。
図10中の同様の要素には同様の参照符号が付されている。また、破線ボックスはより高度なSoC上のオプションの機能である。
図14中、相互接続ユニット1402は、1または複数のコア202A-Nのセットおよび共有キャッシュユニット1006を含むアプリケーションプロセッサ1410;システムエージェントユニット1010;バスコントローラユニット1016;統合メモリコントローラユニット1014、統合グラフィックロジック、イメージプロセッサ、オーディオプロセッサおよびビデオプロセッサを含んでよいコプロセッサ1420のセットまたは1若しくは複数のコプロセッサ1420;スタティックランダムアクセスメモリ(SRAM)ユニット1430;ダイレクトメモリアクセス(DMA)ユニット1432;および1または複数の外部ディスプレイに結合するためのディスプレイユニット1440に結合される。一実施形態において、コプロセッサ1420は、例えば、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサまたは埋め込みプロセッサ等の専用プロセッサを含む。
【0210】
本明細書で開示された実施形態(例えば、メカニズムの)は、ハードウェア、ソフトウェア、ファームウェアまたはこのような実装アプローチの組み合わせで実装されてよい。本開示の実施形態は、コンピュータプログラムまたは少なくとも1つのプロセッサ、ストレージシステム(揮発性および不揮発性のメモリおよび/またはストレージ要素)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを備えるプログラム可能なシステム上で実行されるプログラムコードとして実装されてよい。
【0211】
図12中に示されるコード1230等のプログラムコードが入力命令に適用され、本明細書に説明された機能を実行し、出力情報を生成してよい。出力情報は、1または複数の出力デバイスに既知の態様で適用されてよい。本願の目的において、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)またはマイクロプロセッサ等のプロセッサを有する任意のシステムを含んでよい。
【0212】
プログラムコードは、処理システムと通信するために高水準の手続型またはオブジェクト指向型プログラミング言語で実装されてよい。また、必要であれば、プログラムコードは、アセンブリ言語または機械言語で実装されてもよい。実際に、本明細書で記載されたメカニズムはその範囲において、いずれの特定のプログラミング言語にも限定されない。いずれの場合においても、言語は、コンパイルされた言語または解釈された言語であってよい。
【0213】
少なくとも1つの実施形態の1または複数の態様が、機械可読媒体に格納された典型的な命令により実装されてよく、当該命令は、プロセッサ内の様々なロジックを表わし、機械によって読み取られると、機械に、本明細書で説明された技術を実行するためのロジックを作成させる。 "IPコア"として知られるこのような表現は、有形の機械可読媒体上に格納されて、様々な顧客または製造施設へ供給されて、実際にロジックまたはプロセッサを作成する製造用機械に読み込まれてよい。
【0214】
このような機械可読ストレージ媒体は、限定ではないが、機械または装置により製造または形成された物品の非一時的有形構成を含んでよく、このようなものとしては、ハードディスク等のストレージ媒体、フロッピーディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD‐ROM)、コンパクトディスクリライタブル(CD‐RW)および磁気‐光ディスク等の任意の他のタイプのディスク、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)等のランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、相変化メモリ(PCM)等の半導体デバイス、磁気または光カード、または電子命令を格納するのに好適な任意の他のタイプの媒体が含まれる。
【0215】
従って、本開示の実施形態はまた、命令を含む、または、本明細書で説明された構造、回路、装置、プロセッサおよび/またはシステム機能を定義するハードウェア記述言語(HDL)等の設計データを含む非一時的な有形の機械可読媒体を含む。このような実施形態も、プログラムプロダクトと称されてよい。
[エミュレーション(バイナリ変換、コードモーフィング等を含む)]
【0216】
いくつかの場合において、命令コンバータを用いて、ソース命令セットからの命令をターゲット命令セットへ変換してよい。例えば、命令コンバータは、命令をコアにより処理される1または複数の他の命令へと、変換(例えば、スタティックバイナリ変換、ダイナミックコンパイルを含むダイナミックバイナリ変換を用いて)、モーフィング、エミュレート、あるいはコンバートしてよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェアまたはこれらの組み合わせで実装されてよい。命令コンバータは、プロセッサ上、プロセッサ外、または一部がプロセッサ上または一部がプロセッサ外にあってよい。
【0217】
図15は、本開示の実施形態によるソース命令セット内のバイナリ命令を、ターゲット命令セット内のバイナリ命令に変換するソフトウェア命令コンバータの使用を対比したブロック図である。示された実施形態では、命令コンバータはソフトウェア命令コンバータであるが、代替的に、命令コンバータはソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装されてもよい。
図15は、少なくとも1つのx86命令セットコア1516を有するプロセッサによって、ネイティブで実行可能なx86バイナリコード1506を生成するために、高水準言語1502のプログラムが、x86コンパイラ1504を用いてコンパイルされてよいことを示す。少なくとも1つのx86命令セットコア1516を持つプロセッサは、少なくとも1つのx86命令セットコアを持つインテル(登録商標)プロセッサと実質的に同一の結果を達成すべく、(1)インテル(登録商標)x86命令セットコアの命令セットのかなりの部分、または、(2)少なくとも1つのx86命令セットコアを持つインテル(登録商標)プロセッサ上で実行される対象のアプリケーションまたは他のソフトウェアのオブジェクトコードバージョンを互換的に実行するか、または、処理するかにより、少なくとも1つのx86命令セットコアを持つインテル(登録商標)プロセッサと実質的に同一の機能を実行可能な任意のプロセッサを表わす。x86コンパイラ1504は、さらなるリンク処理を用いて、または用いることなく、少なくとも1つのx86命令セットコア1516を有するプロセッサ上で実行可能なx86バイナリコード1506(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表わす。同様に、
図15は、高水準言語1502のプログラムが、代替的な命令セットバイナリコード1510を生成する代替的な命令セットコンパイラ1508を使用してコンパイルされ得ることを示しており、当該代替的な命令セットバイナリコード1510は、少なくとも1つのx86命令セットコアを持たないプロセッサ1514(例えば、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行する、および/または、カリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行するコアを持つプロセッサ)によってネイティブに実行されてよい。命令コンバータ1512は、x86バイナリコード1506を、x86命令セットコアを有さないプロセッサ1514によってネイティブで実行可能なコードに変換するために用いられる。この変換されたコードは、代替的な命令セットバイナリコード1510と同じである可能性が低い。なぜなら、この変換が可能な命令コンバータは、製造が難しいからである。しかしながら、変換されたコードは、一般的なオペレーションを実現し、代替的な命令セットからの複数の命令で構成される。故に、命令コンバータ1512は、ソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせを表わし、それらは、エミュレーション、シミュレーションまたは任意の他の処理を介して、x86命令セットプロセッサまたはコアを有さないプロセッサまたは他の電子デバイスが、x86バイナリコード1506を実行できるようにする。
[他の可能な請求項]
[項目1]
命令をデコードされた命令にデコードするためのデコーダと、
投機マネージャ回路であって、
上記命令内のセキュリティチェックフィールドを検出する、
潜在的に投機ミスされる実行に対し強制実行されるべきセキュリティチェックポリシーを、上記セキュリティチェックフィールドに基づき、複数のセキュリティチェックポリシーから判定する、
上記セキュリティチェックポリシーの1または複数の関連付けられたチェックを上記命令に対し実行して、上記命令が潜在的に投機ミスされるか否かを判定する、
上記1または複数の関連付けられたチェックにより、上記命令が安全ではないとみなされた場合に、上記命令の実行をスケジューリングする、
上記1または複数の関連付けられたチェックにより、上記命令が安全であるとみなされた場合に、上記命令を省略する、投機マネージャ回路と、
実行のためのスケジューリングがされた上記命令を実行するための実行ユニットと、を備える、装置。
[項目2]
上記セキュリティチェックフィールドは、コンパイラにより提供されるヒントである、項目1に記載の装置。
[項目3]
上記投機マネージャ回路は、上記セキュリティチェックポリシーの上記1または複数の関連付けられたチェックを、上記命令の関連付けられたメモリアクセスのセットに対し実行する、項目1に記載の装置。
[項目4]
上記セキュリティチェックポリシーは、メモリ安全性チェックポリシーである、項目1に記載の装置。
[項目5]
上記セキュリティチェックポリシーは、型安全性チェックポリシーである、項目1に記載の装置。
[項目6]
上記セキュリティチェックポリシーの上記1または複数の関連付けられたチェックは、メモリ安全性チェックおよび型安全性チェックを含む、項目1に記載の装置。
[項目7]
上記1または複数の関連付けられたチェックは、上記装置のアーキテクチャ仕様の完全準拠チェックより少ない、項目1に記載の装置。
[項目8]
上記命令は、プログラム順序において後続するメモリアクセス命令に関連付けられたセキュリティチェック命令である、項目1に記載の装置。
[項目9]
ハードウェアプロセッサのデコーダを用いて、命令をデコードされた命令にデコードする段階と、
上記ハードウェアプロセッサにより、上記命令内のセキュリティチェックフィールドを検出する段階と、
上記ハードウェアプロセッサにより、潜在的に投機ミスされる実行に対し強制実行されるべきセキュリティチェックポリシーを、上記セキュリティチェックフィールドに基づき、複数のセキュリティチェックポリシーから判定する段階と、
上記ハードウェアプロセッサにより、上記セキュリティチェックポリシーの1または複数の関連付けられたチェックを上記命令に対し実行して、上記命令が潜在的に投機ミスされるか否かを判定する段階と、
上記ハードウェアプロセッサにより、上記1または複数の関連付けられたチェックにより上記命令が安全ではないとみなされた場合に、上記命令の実行をスケジューリングする段階と、
上記ハードウェアプロセッサにより、上記1または複数の関連付けられたチェックにより、上記命令が安全であるとみなされた場合に、上記命令を省略する段階と、
上記ハードウェアプロセッサの実行ユニットを用いて、実行のためのスケジューリングがされた上記命令を実行する段階と、を備える、方法。
[項目10]
上記セキュリティチェックフィールドは、コンパイラにより提供されるヒントである、項目9に記載の方法。
[項目11]
上記実行する段階は、上記セキュリティチェックポリシーの上記1または複数の関連付けられたチェックを、上記命令の関連付けられたメモリアクセスのセットに対し実行する段階を含む、項目9に記載の方法。
[項目12]
上記セキュリティチェックポリシーは、メモリ安全性チェックポリシーである、項目9に記載の方法。
[項目13]
上記セキュリティチェックポリシーは、型安全性チェックポリシーである、項目9に記載の方法。
[項目14]
上記セキュリティチェックポリシーの上記1または複数の関連付けられたチェックは、メモリ安全性チェックおよび型安全性チェックを含む、項目9に記載の方法。
[項目15]
上記1または複数の関連付けられたチェックは、上記ハードウェアプロセッサのアーキテクチャ仕様の完全準拠チェックより少ない、項目9に記載の方法。
[項目16]
上記命令は、プログラム順序において後続するメモリアクセス命令に関連付けられたセキュリティチェック命令である、項目9に記載の方法。
[項目17]
機械により実行されると、機械に対し、方法を実行させるためのコードを格納する非一時的機械可読媒体であって、上記方法は、
ハードウェアプロセッサのデコーダを用いて、命令をデコードされた命令にデコードする手順と、
上記ハードウェアプロセッサにより、上記命令内のセキュリティチェックフィールドを検出する段階と、
上記ハードウェアプロセッサにより、潜在的に投機ミスされる実行に対し強制実行されるべきセキュリティチェックポリシーを、上記セキュリティチェックフィールドに基づき、複数のセキュリティチェックポリシーから判定する段階と、
上記ハードウェアプロセッサにより、上記セキュリティチェックポリシーの1または複数の関連付けられたチェックを上記命令に対し実行して、上記命令が潜在的に投機ミスされるか否かを判定する段階と、
上記ハードウェアプロセッサにより、上記1または複数の関連付けられたチェックにより上記命令が安全ではないとみなされた場合に、上記命令の実行をスケジューリングする段階と、
上記ハードウェアプロセッサにより、上記1または複数の関連付けられたチェックにより上記命令が安全であるとみなされた場合に、上記命令を省略する段階と、
上記ハードウェアプロセッサの実行ユニットを用いて、実行のためのスケジューリングがされた上記命令を実行する段階と、を備える、非一時的機械可読媒体。
[項目18]
上記セキュリティチェックフィールドは、コンパイラにより提供されるヒントである、項目17に記載の非一時的機械可読媒体。
[項目19]
上記実行する段階は、上記セキュリティチェックポリシーの上記1または複数の関連付けられたチェックを、上記命令の関連付けられたメモリアクセスのセットに対し実行する段階を含む、項目17に記載の非一時的機械可読媒体。
[項目20]
上記セキュリティチェックポリシーは、メモリ安全性チェックポリシーである、項目17に記載の非一時的機械可読媒体。
[項目21]
上記セキュリティチェックポリシーは、型安全性チェックポリシーである、項目17に記載の非一時的機械可読媒体。
[項目22]
上記セキュリティチェックポリシーの上記1または複数の関連付けられたチェックは、メモリ安全性チェックおよび型安全性チェックを含む、項目17に記載の非一時的機械可読媒体。
[項目23]
上記1または複数の関連付けられたチェックは、上記ハードウェアプロセッサのアーキテクチャ仕様の完全準拠チェックより少ない、項目17に記載の非一時的機械可読媒体。
[項目24]
上記命令は、プログラム順序において後続するメモリアクセス命令に関連付けられたセキュリティチェック命令である、項目17に記載の非一時的機械可読媒体。