特許第6711483号(P6711483)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インテル・コーポレーションの特許一覧

特許6711483複数の128ビットデータパスにおけるSHA1ラウンド処理のための命令セット
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6711483
(24)【登録日】2020年6月1日
(45)【発行日】2020年6月17日
(54)【発明の名称】複数の128ビットデータパスにおけるSHA1ラウンド処理のための命令セット
(51)【国際特許分類】
   G06F 9/305 20060101AFI20200608BHJP
   G06F 9/315 20060101ALI20200608BHJP
   G06F 9/30 20180101ALI20200608BHJP
   G09C 1/00 20060101ALI20200608BHJP
【FI】
   G06F9/305 E
   G06F9/315 S
   G06F9/30 350A
   G09C1/00 650Z
【請求項の数】12
【全頁数】46
(21)【出願番号】特願2018-228487(P2018-228487)
(22)【出願日】2018年12月5日
(62)【分割の表示】特願2017-1355(P2017-1355)の分割
【原出願日】2013年6月14日
(65)【公開番号】特開2019-71075(P2019-71075A)
(43)【公開日】2019年5月9日
【審査請求日】2019年1月4日
(31)【優先権主張番号】13/631,150
(32)【優先日】2012年9月28日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】龍華国際特許業務法人
(72)【発明者】
【氏名】ウォルリッチ、ギルバート エム.
(72)【発明者】
【氏名】ヤップ、カーク エス.
(72)【発明者】
【氏名】ゴーパル、ヴィノード
(72)【発明者】
【氏名】ガリー、ショーン エム.
(72)【発明者】
【氏名】ギルフォード、ジェイムス ディー.
【審査官】 清木 泰
(56)【参考文献】
【文献】 米国特許出願公開第2013/0283064(US,A1)
【文献】 米国特許出願公開第2013/0132737(US,A1)
【文献】 米国特許出願公開第2011/0320825(US,A1)
【文献】 米国特許出願公開第2005/0144204(US,A1)
【文献】 米国特許出願公開第2002/0066014(US,A1)
【文献】 特表2015−535955(JP,A)
【文献】 特開2010−134465(JP,A)
【文献】 特表2006−526202(JP,A)
【文献】 特開2004−004784(JP,A)
【文献】 特開2001−282106(JP,A)
【文献】 Sean Gulley et al.,Intel SHA Extensions New Instructions Supporting the Secure Hash Algorithm on Intel Architecture Processors,[online],Intel Corporation,2013年 7月,all 22 pages,software.intel.com, [平成28年5月31日検索], インターネット,URL,http://software.intel.com/sites/default/files/article/402097/intel-sha-extensions-white-paper.pdf
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30− 9/355
G06F 9/38
G09C 1/00− 5/00
H04K 1/00− 3/00
H04L 9/00− 9/38
G06F17/10−17/18
(57)【特許請求の範囲】
【請求項1】
メッセージスケジューリングオペレーションの第2の部分の性能、デスティネーション及び第1のソースの両方であるオペランドの識別子、及び第2のソースオペランドの識別子を示すオペコードを有する命令をデコードするデコード回路と、
前記オペコードに従ってデコードされた前記命令を実行して、
前記第1のソースのビット31の前記第2のソースのビット6332との排他的論理和(XOR)をとって第1結果を生成し、
前記第1結果を1だけ左に循環して第5結果を生成し、
前記第1のソースのビット6332の前記第2のソースのビット9564との排他的論理和(XOR)をとって第2結果を生成し、
前記第2結果を1だけ左に循環して第6結果を生成し、
前記第1のソースのビット9564の前記第2のソースのビット12796との排他的論理和(XOR)をとって第3結果を生成し、
前記第3結果を1だけ左に循環して第7結果を生成し、
前記第1のソースのビット12796の前記第結果との排他的論理和(XOR)をとって第4結果を生成し、
前記第4結果を1だけ左に循環して第8結果を生成し、
前記第5結果を前記デスティネーションのビット31に、前記第6結果を前記デスティネーションのビット6332に、前記第7結果を前記デスティネーションのビット9564に、前記第8結果を前記デスティネーションのビット12796にストアする、
実行回路と、
を備えるプロセッサ。
【請求項2】
前記デスティネーション及び第1のソースオペランドは、XMMレジスタである、請求項1に記載のプロセッサ。
【請求項3】
前記デスティネーション及び第1のソースオペランドは、128ビットレジスタである、請求項2に記載のプロセッサ。
【請求項4】
前記第2のソースオペランドは、XMMレジスタである、請求項1から3のいずれか一項に記載のプロセッサ。
【請求項5】
前記XMMレジスタは、128ビットレジスタである、請求項4に記載のプロセッサ。
【請求項6】
前記第2のソースオペランドは、128ビットを格納するメモリ位置である、請求項1からのいずれか一項に記載のプロセッサ。
【請求項7】
メッセージスケジューリングオペレーションの第2の部分の性能、デスティネーション及び第1のソースの両方であるオペランドの識別子、及び第2のソースオペランドの識別子を示すオペコードを有する命令をデコードする段階と、
前記オペコードに従ってデコードされた前記命令を実行して、
前記第1のソースのビット31の前記第2のソースのビット6332との排他的論理和(XOR)をとって第1結果を生成し、
前記第1結果を1だけ左に循環して第5結果を生成し、
前記第1のソースのビット6332の前記第2のソースのビット9564との排他的論理和(XOR)をとって第2結果を生成し、
前記第2結果を1だけ左に循環して第6結果を生成し、
前記第1のソースのビット9564の前記第2のソースのビット12796との排他的論理和(XOR)をとって第3結果を生成し、
前記第3結果を1だけ左に循環して第7結果を生成し、
前記第1のソースのビット12796の前記第結果との排他的論理和(XOR)をとって第4結果を生成し、
前記第4結果を1だけ左に循環して第8結果を生成し、
前記第5結果を前記デスティネーションのビット31に、前記第6結果を前記デスティネーションのビット6332に、前記第7結果を前記デスティネーションのビット9564に、前記第8結果を前記デスティネーションのビット12796にストアする、
段階と、
を備える方法。
【請求項8】
前記デスティネーション及び第1のソースオペランドは、XMMレジスタである、請求項7に記載の方法。
【請求項9】
前記デスティネーション及び第1のソースオペランドは、128ビットレジスタである、請求項8に記載の方法。
【請求項10】
前記第2のソースオペランドは、XMMレジスタである、請求項7から9のいずれか一項に記載の方法。
【請求項11】
前記XMMレジスタは、128ビットレジスタである、請求項10に記載の方法。
【請求項12】
前記第2のソースオペランドは、128ビットを格納するメモリ位置である、請求項7からのいずれか一項に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の複数の実施形態は、概ね、複数の命令処理装置に関する。より具体的には、本発明の複数の実施形態は、複数のSHA1セキュアハッシングアルゴリズムを処理する命令処理装置に関する。
【背景技術】
【0002】
SHAは、セキュアハッシュアルゴリズムを表す。SHAは、国家安全保障局(NSA)により設計され、国立標準技術研究所(NIST)により公開された5つのハッシュ関数からなる。その全てのうちで、SHA1が最も普及しているものである。SHA1は、264の最大長を有するメッセージのための160ビットのメッセージダイジェストを生成する。メッセージダイジェストは、メッセージの固定長出力である。そして、メッセージダイジェストは、デジタル署名アルゴリズム(DSA)に入力され、次いで、デジタル署名アルゴリズムは、メッセージのための署名を生成する。メッセージではなく、メッセージダイジェストに署名することは、メッセージダイジェストがメッセージより小さいので、性能の改善を提供する。次に、メッセージの受信者は、署名を検証するべく同一のハッシュアルゴリズムを使用する。転送中に生じるいずれの変更も、異なるメッセージダイジェストをもたらし、従って、署名を検証しない。署名がtrueとして検証されると、受信者は、メッセージのロック解除をすることができる。この方法は、複数の未承認ユーザが自身に向けられていない複数のメッセージを見ることを阻止する。
【0003】
メッセージダイジェストを計算する場合に、SHA1は、512ビットの複数のブロックを処理する。メッセージダイジェストの全長は、512の倍数になる。図1Aは、複数のSHA1オペレーションの典型的イテレーションを図示するブロック図である。図1Bおよび1Cは、複数のSHA1オペレーションの複数のラウンド中に使用される複数の関数および定数をそれぞれ示す。SHA1ハッシュアルゴリズムを用いて512ビット/64バイトブロックのデータを処理することは、80ラウンド(イテレーション)のラウンドアルゴリズムを実行することからなる。各ラウンドに対して、32ビットのメッセージ入力が要求され、ハッシュされる512ビットのブロックが最初の16ラウンドのメッセージデータ入力に直接使用され、17〜80ラウンドに対する複数のメッセージ入力は、SHA1規格により指定される複数の「メッセージスケジューリング関数」に従って先行するメッセージ入力を組み合わせることにより派生する。
【0004】
具体的には、SHA1規格によれば、メッセージダイジェストは、埋め込みメッセージを用いて計算される。計算は、2つのバッファを用い、それぞれは、5つの32ビットワード、および80の32ビットワードのシーケンスからなる。最初の5ワードのバッファのワードは、A、B、C、D、およびEとラベリングされている。次の5ワードのバッファのワードは、H、H、H、H、およびHとラベリングされている。80ワードのシーケンスのワードは、W、W,...,W79とラベリングされている。また、1つのワードバッファTEMPが使用される。メッセージダイジェストを生成するべく、規格において定義される複数の16ワードのブロックM、M,...,Mは、順番に処理される。各M;の処理は、80の段階を伴う。任意の複数のブロックを処理する前に、{3/4}は、H=0x67452301、H=0xEFCDAB89、H=0x98BADCFE、H=0x10325476、およびH=0xC3D2ElF0のように初期化される。
次に、M、M,...,Mが処理される。
を処理するべく、以下の複数のオペレーションが実行される。
a)M;を16ワードのW、W,...,W15に分割する。ただし、Wが左端のワードのである。
b)t=16〜79の場合、W=S(Wt−3XOR Wt_8XOR Wt−14 XOR Wt−16)とする。
c)A=H、B=H、C=H、D=H、E=Hとする。
d)For t=0〜79 do
TEMP=S(A)+f(B,C,D)+E+W+K
E=D;D=C;C=S30(B);B=A;A=TEMP
e)H=H+A、H=H+B,H=H+C,H=H+D,H=H+E
【0005】
を処理した後、メッセージダイジェストは、5ワードH、H、H、H、およびHにより表される160ビットの文字列となる。
【0006】
あるいは、SHA1規格によれば、上記は、シーケンスW,...,W79が80の32ビットワードのアレイとして実装されるものと仮定する。これは、段階(b)におけるWt−3,...,Wt−16の複数のアドレスが容易に計算されるので、実行時間の最小化の観点から効率的である。スペースが貴重である場合、代替例は、{W}を巡回待ちキューとみなし、これは、16の32ビットワードW[0],...,W[15]のアレイを用いて実装され得る。この場合、MASK=OxOOOOOOOFとし、M;の処理は以下のようになる。
a)Mを16ワードのW[0],...,W[15]に分割する。ただし、W[0]が左端のワードである。
b)A=H、B=H、C=H、D=H、E=Hとする。
c)For t =0 to 79 do
s=tΛMASK
if(t>=16)W[s]=S(W[(s+13)ΛMASK]XOR W[(s+8)AND MASK]XOR W[(s+2)<Λ>MASK]XOR W[s])
TEMP=S(A)+f(B,C,D)+E+W[s]+K
E=D;D=C;C=S30(B);B=A;A=TEMP
d)Let H=H+A,H=H+B,H=H+C,H=H+D,H=H+E
【0007】
SHA1仕様に関する更なる詳細な情報は、連邦情報処理規格刊行物(FIPS PUB 180 − 1995 April 17)により公開されたセキュアハッシュ規格に見出され得る。
【0008】
従来の複数のソフトウェアソリューションは、標準の32ビット命令および32ビットレジスタ/メモリストレージを利用する。ラウンド計算は、4つの32ビット加算、2つの32ビット循環、複数の論理関数および移動を必要とする。複数のラウンド17〜80に対する各メッセージ入力は、循環および3つの排他的OR(XOR)を必要とする。80ラウンド/メッセージパスのそれぞれに対する4つの32ビットの加算、3つの循環、およびいくつかの論理関数を用い、複数の実行ユニットプロセッサを更に用いて、いくつかのサイクルが処理するために要求される。上記の複数のオペレーションを実行する効率的なやり方が欠如していた。
【図面の簡単な説明】
【0009】
本発明の複数の実施形態は、添付の複数の図面において限定ではなく例として図示され、複数の同様の参照符号は、複数の類似の要素を示す。
図1A】SHA1標準アルゴリズムの典型的処理を図示するブロック図である。
図1B】SHA1標準アルゴリズムにおいて使用される複数の関数および定数を図示する図である。
図1C】SHA1標準アルゴリズムにおいて使用される複数の関数および定数を図示する図である。
図2】一実施形態によるプロセッサの一例を図示するブロック図である。
図3】一実施形態によるSHA1ラウンド処理を図示するブロック図である。
図4】一実施形態による複数のSHA1オペレーションのパイプライン処理を図示するブロック図である。
図5】一実施形態による複数のSHA1ラウンドオペレーションを実行する方法を図示するフロー図である。
図6】一実施形態による複数のSHA1メッセージスケジューリングオペレーションを実行する方法を図示するフロー図である。
図7】一実施形態による複数のSHA1メッセージスケジューリングオペレーションを実行する方法を図示するフロー図である。
図8】一実施形態による複数のSHA1オペレーション用の疑似コードである。
図9A】本発明の一実施形態による、例示的な高度ベクトル拡張(AVX)の命令フォーマットを図示する。
図9B】本発明の別の実施形態による、例示的な高度ベクトル拡張(AVX)の命令フォーマットを図示する。
図9C】本発明の別の実施形態による、例示的な高度ベクトル拡張(AVX)命令フォーマットを図示する。
図10A】本発明の複数の実施形態による、一般ベクトル向け命令フォーマットおよびそのクラスA命令テンプレートを図示するブロック図である。
図10B】本発明の複数の実施形態による、一般ベクトル向け命令フォーマットおよびそのクラスB命令テンプレートを図示するブロック図である。
図11A】本発明の一実施形態による、例示的な特定ベクトル向け命令フォーマットを図示するブロック図である。
図11B】本発明の別の実施形態による一般ベクトル向け命令フォーマットを図示するブロック図である。
図11C】本発明の別の実施形態による、一般ベクトル向け命令フォーマットを図示するブロック図である。
図11D】本発明の別の実施形態による一般ベクトル向け命令フォーマットを図示するブロック図である。
図12】本発明の一実施形態によるレジスタアーキテクチャのブロック図である。
図13A】本発明の複数の実施形態による、例示的なインオーダパイプライン、および例示的なレジスタリネーム、アウトオブオーダ発行/実行パイプラインの双方を図示するブロック図である。
図13B】本発明の複数の実施形態によるプロセッサに含まれる、インオーダアーキテクチャコアの例示的な実施形態、および例示的なレジスタリネーム、アウトオブオーダ発行/実行アーキテクチャコアの双方を図示するブロック図である。
図14A】本発明の一実施形態による、プロセッサコアのブロック図である。
図14B】本発明の別の実施形態によるプロセッサコアのブロック図である。
図15】本発明の複数の実施形態によるプロセッサのブロック図である。
図16】本発明の一実施形態によるシステムのブロック図である。
図17】本発明の実施形態による、より具体的な例示的システムのブロック図である。
図18】本発明の別の実施形態による、より具体的な例示的システムのブロック図である。
図19】本発明の実施形態によるSoCのブロック図である。
図20】本発明の複数の実施形態による、ソース命令セットの複数のバイナリ命令を、ターゲット命令セットの複数のバイナリ命令に変換するソフトウェア命令変換器の使用を対比させるブロック図である。
【発明を実施するための形態】
【0010】
本発明の様々な実施形態および態様は、以下に論じられる詳細、および様々な実施形態を図示する添付の複数の図面を参照して説明される。以下の説明および複数の図面は、本発明を図示するものであって、本発明を限定するものと解釈されるものではない。多くの具体的詳細は、本発明の様々な実施形態の完全な理解を提供するべく説明される。しかし、複数の一定の例において、周知または従来の詳細は、本発明の複数の実施形態の正確な論述を提供するべく記載されない。
【0011】
本明細書において「一実施形態」または「実施形態」に言及することは、実施形態と共に説明される特定の機能、構造、または特性が本発明の少なくとも一実施形態に含まれ得ることを意味する。本明細書の様々な個所において「一実施形態において」という文言が現れても、全てが必ずしも同一の実施形態を指す訳ではない。
【0012】
いくつかの実施形態によれば、新しい命令セットアーキテクチャ(ISA)は、上記の複数のSHA1オペレーションに利用される。複数のプロセッサ命令の新しいセットは、複数の既存のプロセッサ命令に対し著しい性能改善を伴ったSHA1のセキュアハッシング規格を実装するべく用いられる。ISAは、xmmレジスタ等、複数の128ビット単一命令多重データ(SIMD)レジスタ上で動作するように定義される。本発明の実施形態は、512ビットブロックのメッセージデータ用の複数のSHA1ハッシュラウンド計算関数を最適化するように設計された複数の命令を含む。SHAハッシュアルゴリズムを用いるデータの512ビット/64バイトブロックを処理することは、ラウンドアルゴリズムの80のラウンドまたはイテレーションを実行することを含む。各ラウンドに対して、32ビットのメッセージ入力が要求され、ハッシュされるブロックの512ビットがメッセージデータ入力の最初の16ラウンドに直接使用され、ラウンド17〜80に対するメッセージ入力は、SHA1規格により指定されるメッセージスケジューリング関数に従って、先行するメッセージ入力を組み合わせることにより派生する。最適化された性能は、SHA1ラウンド関数計算を実行するべく要求される時間を最小化することにより実現される。本発明の複数の実施形態は、複数の128ビットSIMDレジスタを、複数のSHA1状態に対するソース/デスティネーションとして使用する新しい命令およびデータパスを含み、SHA1の4つのラウンドを処理する。
【0013】
図2は、一実施形態によるプロセッサの一例を図示するブロック図である。図2を参照すると、プロセッサ100は、任意の種類の命令処理装置を表し得る。例えば、プロセッサ101は、汎用プロセッサであってもよい。プロセッサ100は、様々な複合命令セットコンピューティング(CISC)プロセッサ、様々な縮小命令セットコンピューティング(RISC)プロセッサ、様々な超長命令語(VLrW)プロセッサ、その様々なハイブリッド、または他の複数のタイプのプロセッサの全くいずれであってもよい。一実施形態において、プロセッサ100は、命令106を受信およびデコードする命令デコーダ101を含む。命令デコーダ101は、1または複数のマイクロオペレーション、マイクロコード、複数のエントリポイント、マイクロ命令、他の命令、または他の制御信号を生成および出力することができ、これらは、命令106を反映し、または命令106から派生する。命令デコーダ101は、様々な異なるメカニズムを用いて実装され得る。好適なメカニズムの複数の例示的としては、マイクロコードリードオンリメモリ(ROM)、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)等が挙げられるが、これらに限定されるものではない。
【0014】
プロセッサ100は、1または複数の実行ユニット102を更に含み、1または複数の実行ユニット102は、算術ロジックユニット、または命令106に基づいて複数のオペレーションを実行することが可能な別のタイプのロジックユニットを含み得る。命令デコーダ101が命令106をデコードする結果として、実行ユニット102は、1または複数のマイクロオペレーション、複数のマイクロコードエントリーポイント、マイクロ命令、他の命令、または他の制御信号を受信することができ、これらは、命令106を反映し、または命令106から派生する実行ユニット102は、1または複数のソースオペランド(SRC)108を示す命令106の結果として、命令106により示されるレジスタセット105の1または複数のデスティネーションオペランド(DEST)109における結果を格納するように動作可能であってもよい。実行ユニット102は、複数の命令または命令106から派生する他の複数の制御信号を実行し、それに応じてオペレーションを実行するように動作可能な回路または他の実行ロジック(例えば、ハードウェアおよび/またはファームウェアと組み合わされるソフトウェア)を含み得る。実行ユニット102は、ロジックユニット、算術ロジックユニット(ALU)、算術ユニット、整数ユニット等、任意の種類の複数の実行ユニットを表し得る。
【0015】
一実施形態において、命令106は、(例えば、1または複数の専用フィールドまたは複数のビットのセットにより)ソースおよびデスティネーションオペランドを黙示的に示し、および/または明示的に指定し得る。複数の好適なソースおよび/またはオペランドのデスティネーションの例としては、レジスタ、メモリ、命令の即値、およびこれらの組み合わせが挙げられる。様々な実施形態において、ソースおよびデスティネーションオペランドは、8ビット、16ビット、32ビット、または64ビットのオペランドであり得るが、これは、要求されない。
【0016】
一実施形態において、ソースおよび複数のデスティネーションオペランドのいくつかまたは全ては、レジスタセットおよび/またはメモリ104の複数のレジスタに格納され得る。レジスタセットは、ステータスレジスタ、フラグレジスタ等、潜在的には他の複数のレジスタを伴うレジスタファイルの一部であってもよい。レジスタは、データを格納するべく用いられ得る格納位置またはデバイスであってもよい。多くの場合、レジスタセットは、実行ユニットを有するダイ上に物理的に位置し得る。複数のレジスタは、プロセッサの外側またはプログラマの視野から可視であり得る。例えば、複数の命令は、複数のレジスタ内に格納された複数のオペランドを指定し得る。本明細書において説明されるデータを格納および提供することが可能である限りにおいて、様々な異なるタイプのレジスタは、好適である。複数のレジスタは、名前を変更することができ、またはできないことがある。好適な複数のレジスタの例としては、専用物理レジスタ、レジスタリネームを用いて動的に割り当てられる物理レジスタ、専用レジスタおよび動的に割り当てられる物理レジスタの組み合わせ等が挙げられるが、これらに限定されるものではない。あるいは、ソースおよび複数のデスティネーションオペランドの1または複数は、例えば、システムメモリの位置等、レジスタ以外の格納位置に格納され得る。
【0017】
一実施形態によれば、実行ユニット102は、命令デコーダ101により受信および提供される第1の命令に応答して、1または複数のレジスタ104(例えば、少なくとも128ビットを有するレジスタ)において指定される複数のSHA1状態、複数のメッセージ入力、およびハッシュ関数等のデータ110を用いて、複数のSHA1ラウンドオペレーションの複数のラウンドを実行する、1または複数のSHA1ユニット106を含む。複数のSHA1ラウンドオペレーションの複数のラウンドは、単一命令多重データ(SIMD)命令に応答して実行される。一実施形態において、第1の命令は、3つのオペランドを含む。第1のオペランドは、現在のイテレーションの5つのSHA1状態のうち4つ(例えば、A、B、C、およびD)、および複数のSHA1ラウンドオペレーションの結果としての次のイテレーションのSHA1状態を格納する、ソース/デスティネーションレジスタを表す。第2のオペランドは、複数のラウンドオペレーションに対する複数のメッセージ入力、および複数のSHA1状態の5番目(例えば状態E)を格納する、レジスタ/メモリを表す。第3のオペランドは、図1Bに示される、複数のラウンドオペレーションのために用いられる複数のハッシュ関数のうちの1つ等、ハッシュ関数を表す。複数のSHA1ラウンドオペレーションが実行された後、複数のSHA1状態が更新され、第1のオペランドにより指定されたレジスタに再度格納される。一実施形態において、複数のSHA1ラウンドオペレーションのうち少なくとも4つのラウンドが、1つのSIMD命令に応答して実行され、関連する複数のレジスタは、複数のSHA1状態変数およびメッセージ入力を格納するべく、少なくとも128ビットを有する。
【0018】
別の実施形態によれば、SHA1ユニット106は、第2の命令に応答して、SHA1メッセージスケジューリングオペレーションを実行し、次のイテレーションまたはサイクルに対する複数のメッセージ入力(例えば、次のSIMD命令サイクルにおける複数のSHA1ラウンドオペレーション)を生成するように構成される。一実施形態において、次のSIMDサイクルに対する複数のメッセージ入力を準備するべく必要とされる2つの命令が存在することがある。複数のSHA1ラウンドオペレーションのうち少なくとも4つのラウンドをサポートするときに、第1の命令は、少なくとも8つの先行するメッセージ入力を格納する2つのオペランドを含み、第1の命令が実行された後、中間結果が生成され、複数のオペランドのうちの1つにおいて指定されたレジスタに戻る。第2の命令は、第1の命令から生成された中間結果を、4つの他のメッセージ入力と組み合わせた1つのオペランドにおける入力とみなす。第2の命令の別のオペランドは、少なくとも4つの先行するメッセージ入力を指定する。最終結果は、次のSIMDサイクルに対する4つのメッセージ入力を表す。一実施形態において、複数のメッセージスケジューリングオペレーションに関連する複数のレジスタは、少なくとも128ビットを有する。本願全体を通して、xmmレジスタは、128ビットレジスタの一例として利用される。
【0019】
図示の目的のために、1つのSIMDサイクルにおいて、複数のSHA1ラウンドオペレーションのうち4つのラウンドが実行されるものと仮定される。また、十分なビットを有するレジスタ等、要求される複数のリソースが利用可能である限り、複数のSHA1ラウンドオペレーションのうちより多いか、またはより少ないラウンドが、1つのSIMDサイクルにおいて実行され得ることが理解されるであろう。いくつかの実施形態によれば、本発明の複数の実施形態は、5つのSHA1状態(例えば、A、B、C、およびD)のうち4つを格納するソース/デスティネーションオペランドとして、XMM SIMDレジスタを利用する新しい命令およびデータパスを含む。ここで、XMM SIMDレジスタは、128ビットを有し、カリフォルニア州サンタクララのインテル(登録商標)株式会社のAVXプロセッサと互換性がある。別のxmmレジスタまたはメモリ位置は、(図1Cに示されるように)次の4つのSHA1ラウンドに対する複数のメッセージ入力と複数の定数K値を、残余のSHA1状態(例えば状態E)と組み合わせて格納する第2のソースオペランドとして利用される。図1Bに示されるように、直近のオペランドは、複数のラウンド1〜20、21〜40、41〜60、および61〜80のために要求される異なる組み合わせの論理関数「F」を指定するべく用いられる。
【0020】
一実施形態によれば、本明細書においてSHA1RNDS4(SHA1 4 rounds)として言及されるSHA1ラウンド命令は、以下のように定義され得る。
SHA1RNDS4 XMM0,XMM1,imm
図1Bおよび1Cに示されるように、即値immは、様々なラウンドに用いられる論理関数Fの定義、およびSHA1ラウンド処理において消費される前に、スケジューリングメッセージ語に加算される定数Kを指定する。
【0021】
XMM0は、ソース/デスティネーションレジスタである。入力として、XMM0は、現在ラウンドの状態A、B、C、およびDを格納し、出力として、XMM0は、4つのラウンドの後の状態An+4、Bn+4、Cn+4、およびDn+4を格納する。一実施形態において、XMM0は、以下のように定義される。
XMM0[127:96]=A
XMM0[95:64]=B
XMM0[63:32]=C
XMM0[31:0]=D
【0022】
XMM1は、複数のメッセージ入力、定数、および状態Eを格納するソースレジスタである。一実施形態において、XMM1は以下のように定義され、
XMM1[127:96]=KW3
XMM0[95:64]=KW2
XMM0[63:32]=KW1 XMM0[31:0]=KW0+E
式中、KW3、KW2、KW1、およびKW0は、複数のSHA1スケジューリングオペレーションにより算出される。
【0023】
一実施形態において、状態Eは、状態A:En+4=A<<<30を循環させることにより、先行するサイクルの状態Aに基づいて算出され、演算子<<<は、rotate―left演算子を表す。これは、以下に定義される別の命令SHA1NEXT_Eにより実行し得、
SHA1NEXT_E XMM0,XMM1
式中、XMM0[31:0]=XMM1[127:96]<<<30およびXMM0[127:32]=0である。図3は、上記のSHA1ラウンド処理を図示するブロック図である。本願全体を通して、XMM[yyy,xxx]のフォーマットは、レジスタXMMのビット「xxx」からビット「yyy」を包括的に指すことに留意されたい。
【0024】
我々が3つのサイクルのパイプラインレイテンシを用いる命令により4つのラウンドを処理する場合、0.75サイクル/ラウンド(80x0.75)/64=0.94サイクル/バイトの性能を実現し得る。ブロックサイズは、64バイトであり、ラウンドの数は、80である。この性能を実現するには、我々は、複数のメッセージスケジューリング計算を保持し、これらに対する複数の新しい命令も要求する必要がある。一実施形態によれば、SHA1 w[i]関数のメッセージスケジューリングは、以下の複数の命令により実行され得る。
MSG1SHA1 XMM0,XMM1
VPXOR XMM0,XMM1
MSG2SHA1
XMM0,XMM1
【0025】
一実施形態において、MSG1 SHA1は、以下の複数のオペレーションを実行する。
XMM0[31:0]=Word0=w[i−12]XOR w[i−16]
XMM0[63:32]=Word1=w[i−11]XOR w[i−15]
XMM0[95:64]=Word2=w[i−10]XOR w[i−14]
XMM0[127:96]=Word3=w[i−9]XOR w[i−13]
XMM0は、ソース/デスティネーションレジスタである。ソースとして、XMM0は、以下のように定義され得る。
XMM0[31:0]=w[i−16]
XMM0[63:32]=w[i−15]
XMM0[95:64]=w[i−14]
XMM0[127:96]=w[i−13]
XMM1は、以下のように定義されるソースレジスタである。
XMM1[31:0]=w[i−12]
XMM1[63:32]=w[i−11]
XMM1[95:64]=w[i−10]
XMM1[127:96]=w[i−19]
【0026】
VPXORは、XMM1の対応する複数のデータ要素を用いて、XMM0の複数のデータ要素で複数のXORオペレーションを実行し、XMM0にXORの結果を再度格納する、ベクトルXOR命令である。一実施形態において、VPXORは、以下の複数のオペレーションを実行する。
modified MSG1Word0=MSG1Word0 XOR w[i−8]
modified MSG1Word0=MSG1Word1 XOR w[i−7]
modified MSG1Word0=MSG1Word2 XOR w[i−6]
modified MSG1Word0=MSG1Word3 XOR w[i−5]
MSG1Word0、MSG1Word1、MSG1Word2、およびMSG1Word3は、MSG1SHA1命令により生成され、ソース/デスティネーションレジスタとしてXMM0内に格納されるが、メッセージ入力w[i−8]〜w[i−5]は、ソースレジスタとしてXMM1内に格納される。
【0027】
一実施形態において、MSG2SHA1は、以下の複数のオペレーションを実行する。
Word0=w[i]=(w[i−3]XOR modified MSG1Word0)<<<1
Word1=w[i+1]=(w[i−2] XOR modified MSG1Word1)<<<1
Word2=w[i+2]=(w[i−1] XOR modified MSG1Word2)<<<1
Word3=w[i+3]=(w[i]XOR modified MSG1Word3)<<<1
【0028】
Word3のw[i]入力は、word0の結果であることに留意されたい。従って、Word0とWord3の計算の間のいくつかの遅延が必要とされることがある。
【0029】
MSG2SHA1に対しては、XMM0は、ソース/デスティネーションレジスタであり、XMM1は、ソースレジスタである。一実施形態において、ソースとして、XMM0は以下のようにと定義される。
XMM0[31:0]=modified MSG1 Word0=MSG1 Word0 XOR w[i−8]
XMM0[63:32]=modified MSG1Word0=MSG1Word1 XOR w[i−7]
XMM0[95:64]=modified MSG1Word0=MSG1Word2 XOR w[i−6]
XMM0[127:96]=modified MSG1Word0=MSG1Word3 XOR w[i−5]
ソースとして、XMM1は、以下のように定義される。
XMM1[31:0]=w[i−3]
XMM1[63:32]=w[i−2]
XMM1[95:64]=w[i−1]
XMM1[127:96]=w[i]
MSG1Word0からMSG1Word3は、MSG1SHA1命令により生成され、modified MSG1Word0からMSG1Word3は、MSG2SHA1命令を呼び出す前にVPXOR命令を用いて生成され得る。
【0030】
図4は、一実施形態による複数のSHA1オペレーションのパイプライン処理を図示するブロック図である。図4を参照すると、処理の実施形態は、プロセッサまたはプロセッサコアの少なくとも3つのパイプラインステージ401〜403を用いて定義され得る。パイプラインステージ401〜403は、プロセッサの特定の設計または構成に依存する連続したパイプラインステージであってもよく、またはそうでなくともよいことに留意されたい。MSG1SHA1マイクロコード404、MSG2SHA1マイクロコード405、およびSHA1ラウンドマイクロコード406は、図2のSHA1ユニット106の一部として実装されてもよい。一実施形態において、SHA1ラウンドマイクロコード406は、図3のロジック300の一部として実装されてもよい。
【0031】
一実施形態によれば、命令MSG1SHA1に応答して、MSG1SHA1マイクロコード404は、上記の複数のSHA1メッセージスケジューリングオペレーションのうち第1の部分を実行する。複数のSHA1ラウンドオペレーションの所与のラウンドiについて、パイプラインステージ401の間に、MSG1SHA1マイクロコード404は、複数のメッセージスケジューリングオペレーションのうち第1の部分を、すでに生成された複数のメッセージ407〜408に実行し、中間メッセージ409を生成する。
【0032】
一実施形態によれば、命令MSG2SHA1に応答して、MSG2SHA1マイクロコード405は、上記の複数のSHA1メッセージスケジューリングオペレーションのうち第2の部分を実行する。複数のSHA1ラウンドオペレーションの所与のラウンドiについて、パイプラインステージ402の間に、MSG2SHA1マイクロコード405は、すでに生成されたメッセージ410と、中間メッセージ409と、複数のメッセージ入力411(VPXOR等の別の命令を用いて組み合わされ得る)において、複数のメッセージスケジューリングオペレーションのうち第2の部分を実行し、メッセージ412を生成する。
【0033】
一実施形態によれば、命令SHA1RNDS4および/またはSHA1NEXT_Eに応答して、SHA1RNDS4マイクロコード406は、上記の複数のSHA1ラウンドオペレーションのうち4つのラウンドを実行する。複数のSHA1ラウンドオペレーションの所与のラウンドiについて、パイプラインステージ403の間に、SHA1RNDS4マイクロコード406は、複数のメッセージ412および現在の複数のSHA1状態413においてラウンドオペレーションを実行し、次のラウンドまたはイテレーションに対する複数のSHA1状態414を生成する。この例において、レジスタ412に格納されるw(i+3)、w(i+2)、w(i+1)、およびw(i)のそれぞれは、32ビットを有することに留意されたい。これは、複数のSHA1ラウンドオペレーションのうち少なくとも4つのラウンドを実行するべく用いられ得る。また、パイプラインレイテンシ要件が満たされ得る限り、レジスタ412がより多くのメッセージ入力を格納し得るとき、複数のSHA1ラウンドオペレーションのうちより多くのラウンドが実行され得る。
【0034】
図5は、一実施形態による複数のSHA1ラウンドオペレーションを実行する方法を図示するフロー図である。方法500は、図2のプロセッサ100により実行され得る。図5を参照すると、ブロック501で、命令(例えば、SHA1RNDS4)がプロセッサにおいて受信される。命令はそれぞれ、少なくとも128ビットを有する3つのオペランドを含む。ブロック502で、4つのSHA1状態は、第1のオペランド(例えば、XMM0)により示される格納位置から得られる。4つのメッセージ入力(例えば、KW0からKW3)および第5のSHA1状態(例えば、状態E)は、第2のオペランドにより示される格納位置から得られる。第5のSHA1状態は、複数のメッセージ入力のうち1つと組み合わされる。ブロック503で、複数のSHA1ラウンドオペレーションのうち少なくとも4つのラウンドは、第3のオペランドにより指定された組み合わせの論理関数を用いて、複数のSHA1状態および第1および第2のオペランドから得られた複数のメッセージ入力に基づいて実行される。ブロック504で、複数のラウンドオペレーション(例えば、複数の新しいSHA1状態)の結果は、第1のオペランドに関連する格納位置に格納される。一実施形態において、状態A〜Dのみが第1のオペランド内に格納され、状態Eは、上記のEn+4=A n<<<30として得ることができる。
【0035】
図6は、一実施形態による複数のSHA1メッセージスケジューリングオペレーションを実行する方法を図示するフロー図である。方法600は、図2のプロセッサ100により実行され得る。図6を参照すると、ブロック601で、SHA1メッセージスケジューリングオペレーションを実行する命令(例えば、MSGISHA1)が受信される。命令は、第1および第2のオペランド(例えば、XMM0、XMM1)を含み、それぞれは、少なくとも128ビットを有する格納位置を参照する。ブロック602で、複数のメッセージ入力(例えば、8つのメッセージ入力)は、第1および第2のオペランドにより示される複数の格納位置から得られる。ブロック603で、複数のSHA1メッセージスケジューリングオペレーションのうち第1の部分は、第1および第2のオペランドから得られる複数のメッセージ入力に基づいて実行される。ブロック604で、中間結果は、第1のオペランド(例えば、XMM0)に関連する格納位置に格納される。
【0036】
図7は、一実施形態による複数のSHA1メッセージスケジューリングオペレーションを実行する方法を図示するフロー図である。方法700は、図2のプロセッサ100により実行され得る。図7を参照すると、ブロック701で、複数のSHA1メッセージスケジューリングオペレーションを実行する命令(例えば、MSG2SHA1)が受信される。命令は、2つのオペランドを含み、それぞれは、少なくとも128ビットを有する格納位置を参照する。ブロック702で、複数のSHA1メッセージスケジューリングオペレーションのうち第1の部分の中間結果は、第1のオペランドに関連する格納位置から得られる。中間結果は、MSG1SHA1命令により生成され、4つのメッセージ入力(例えば、w(i−5)からw(i−8))との排他的論理和をとる。他の4つのメッセージ入力(例えば、w(i)からw(i−3))は、第2のオペランドに関連する格納位置から得られる。ブロック703で、複数のSHA1メッセージスケジューリングオペレーションのうち第2の部分が実行される。ブロック704で、次のサイクルのメッセージ入力(例えば、w(i)からw(i+3))を表す最終結果は、第1のオペランド(例えば、XMM0)に関連する格納位置に格納される。図8は、一実施形態による、上記の命令セットを用いる複数のSHA1オペレーション用の疑似コードである。
【0037】
命令セットまたは命令セットアーキテクチャ(ISA)は、プログラミングに関連するコンピュータアーキテクチャの一部であり、複数のネイティブデータタイプ、命令、レジスタアーキテクチャ、アドレスモード、メモリアーキテクチャ、割り込みおよび例外処理、ならびに外部入力および出力(I/O)を含み得る。一般に、命令という用語は、本明細書においてマクロ命令を指す。マクロ命令は、複数のマクロ命令をデコードするプロセッサのデコーダの結果であるマイクロ命令またはマイクロオペレーション(マイクロオペ)とは異なり、実行のためにプロセッサ(または(例えば、静的バイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを用いて)命令をプロセッサにより処理される1または複数の他の命令にトランスレート、モーフィング、エミュレート、または変換する命令変換器)に提供される複数の命令である。
【0038】
ISAは、命令セットを実装するプロセッサの内部設計であるマイクロアーキテクチャとは区別される。複数の異なるマイクロアーキテクチャを有するプロセッサは、共通の命令セットを共有し得る。例えば、インテル(登録商標)Pentium(登録商標)4プロセッサ、インテル(登録商標)Core(商標)プロセッサ、カリフォルニア州サニーベールのアドバンストマイクロデバイセズ株式会社のプロセッサは、ほぼ同一のバージョンのx86命令セット(複数のより新しいバージョンを追加されたいくつかの拡張を伴う)を実装するが、複数の異なる内部設計を有する。例えば、ISAの同一のレジスタアーキテクチャは、複数の専用物理レジスタ、レジスタリネームメカニズム(例えば、レジスタエイリアステーブル(RAT)の使用、リオーダバッファ(ROB)、およびリタイアメントレジスタファイル、複数のレジスタの複数のマップおよびプールの使用)等を用いる1または複数の動的に割り当てられる物理レジスタ、を含む複数の周知技術を用いて、異なる形で複数の異なるマイクロアーキテクチャに実装され得る。指定されない限り、レジスタアーキテクチャ、レジスタファイル、およびレジスタという文言は、どの複数の命令が複数のレジスタを指定するように、ソフトウェア/プログラマに可視であるものを言及するべく本明細書において用いられる。特定性が所望である場合、論理の、アーキテクチャの、または可視のソフトウェアという形容詞が、レジスタアーキテクチャにおける複数のレジスタ/ファイルを示すべく用いられるが、複数の異なる形容詞は、所与のマイクロアーキテクチャ(例えば、物理レジスタ、リオーダバッファ、リタイアメントレジスタ、レジスタプール)における複数の指定レジスタに対して用いられる。
【0039】
命令セットは、1または複数の命令のフォーマットを含む。所与の命令フォーマットは、とりわけ、実行されるオペレーション(オペコード)および当該オペレーションが実行されるオペランドを指定する様々なフィールド(ビット数、複数のビットの位置)を定義する。いくつかの命令フォーマットは、複数の命令テンプレート(または、サブフォーマット)の定義により更に分類される例えば、所与の命令フォーマットの複数の命令テンプレートは、複数の命令フォーマットフィールドの複数の異なるサブセット(通常、含まれる複数のフィールドは、同一の順序であるが、より少ないフィールドが含まれるため、少なくともいくつかは、複数の異なるビット位置を有する)を有するものと定義されてもよく、および/または異なるように解釈される所与のフィールドを有するものと定義されてもよい。従って、ISAの各命令は、所与の命令フォーマットを用いて表され(定義される場合、当該命令フォーマットの複数の命令テンプレートのうち所与の1つで)、オペレーションおよび複数のオペランドを指定する複数のフィールドを含む。例えば、例示的なADD命令は、特定のオペコード、ならびに当該オペコードを指定するオペコードフィールドおよび複数のオペランド(ソース1/デスティネーション、およびソース2を選択する複数のオペランドフィールドを含む命令フォーマットを有する。命令ストリームにおけるこのADD命令が生じることにより、複数の特定のオペランドを選択する複数のオペランドフィールドに特定の複数のコンテンツを有する。
【0040】
多くの場合、サイエンティフィック、金融的、自動ベクトル化した汎用、RMS(認識、マイニング、および合成)、ならびに視覚およびマルチメディアのアプリケーション(例えば、2D/3Dグラフィックス、画像処理、映像圧縮/復元、音声認識のアルゴリズムおよびオーディオ操作)は、多数のデータアイテム(「データ並列性」と呼ばれる)に実行される同一のオペレーションを要求する。単一命令多重データ(SIMD)は、プロセッサに複数のデータアイテムにオペレーションを実行させるタイプの命令を指す。SIMD技術は、レジスタにおける複数のビットをいくつかの固定サイズのデータ要素に論理的に分割し、固定サイズのデータ要素のそれぞれが別個の値を表す複数のプロセッサに特に好適である。例えば、256ビットレジスタにおける複数のビットは、4つの別個の64ビットパックドデータ要素(クワッドワード(Q)サイズのデータ要素)、8つの別個の32ビットパックドデータ要素(倍長語(D)サイズのデータ要素)、別個の16ビットパックドデータ要素(ワード(W)サイズのデータ要素)、または32の別個の8ビットデータ要素(バイト(B)サイズのデータ要素)として実行されるソースオペランドとして指定されてもよい。このタイプのデータは、パックドデータタイプまたはベクトルデータタイプと呼ばれ、このデータタイプの複数のオペランドは、パックドデータオペランドまたはベクトルオペランドと呼ばれる。換言すると、パックドデータアイテムまたはベクトルは、複数のパックドデータ要素のシーケンスを指し、パックドデータオペランドまたはベクトルオペランドは、SIMD命令(パックドデータ命令またはベクトル命令としても知られる)のソースまたはデスティネーションオペランドである。
【0041】
例として、1つのタイプのSIMD命令は、2つのソースベクトルオペランドに垂直な様式で実行される1つのベクトルオペレーションを指定し、同一の数の複数のデータ要素を有し、同一のデータ要素の順序の同一のサイズのデスティネーションベクトルオペランド(結果として、ベクトルオペランドとも呼ばれる)を生成する。複数のソースベクトルオペランドにおける複数のデータ要素は、ソースデータ要素と呼ばれるが、デスティネーションベクトルオペランドにおける複数のデータ要素は、デスティネーションまたは結果データ要素と呼ばれる。これらのソースベクトルオペランドは、同一のサイズであり、同一の幅の複数のデータ要素を含み、従って同一の数の複数のデータ要素を含む。2つのソースベクトルオペランドの同一の複数のビット位置における複数のソースデータ要素は、データ要素のペア(対応するデータ要素とも呼ばれる。つまり、各ソースオペランドのデータ要素位置0におけるデータ要素が対応し、各ソースオペランドのデータ要素位置1におけるデータ要素が対応する等)を形成する。当該SIMD命令により指定されるオペレーションは、これらのペアのソースデータ要素のそれぞれに別個に実行され、複数の結果データ要素の一致する数を生成し、従って各ペアのソースデータ要素は、対応する結果データ要素を有する。オペレーションは垂直であり、結果ベクトルオペランドは同一のサイズであり、同一の数の複数のデータ要素を有し、複数の結果データ要素は、同一のデータ要素の順序で複数のソースベクトルオペランドとして格納されるので、複数の結果データ要素は、複数のソースベクトルオペランドにおける対応するペアのソースデータ要素として、結果ベクトルオペランドの複数の同一ビット位置に存在する。この例示的タイプのSIMD命令に加えて、(例えば、1つのみまたは3つ以上のソースベクトルオペランドを有し、水平な様式で演算し、異なるサイズの結果ベクトルオペランドを生成し、複数の異なるサイズのデータ要素を有し、および/または異なるデータ要素の順序を有する)様々な他のタイプのSIMD命令が存在する。デスティネーションベクトルオペランド(またはデスティネーションオペランド)という用語は、ある位置にある当該デスティネーションオペランドのストレージを含む命令(またはその命令により指定されたメモリアドレスにおけるレジスタであっても)により指定されるオペレーションを実行する結果と定義され、別の命令により(別の命令によるその同一の位置の指定により)ソースオペランドとしてアクセスされ得ることを理解されたい。
【0042】
x86、MMX(商標)、ストリーミングSIMD拡張(SSE)、SSE2、SSE3、SSE4.1、およびSSE4.2命令を含む命令セットを有する、複数のインテル(登録商標)Core(商標)プロセッサにより使用されるもの等、SIMD技術は、アプリケーション性能における著しい改善を可能にした。Advanced Vector Extensions(AVX)(AVX1およびAVX2)と呼ばれ、ベクトル拡張(VEX)エンコードスキームを用いる追加のセットのSIMD拡張が、リリースおよび/または公開されている(例えば、インテル(登録商標)64 and IA−32 Architectures Software Developers Manual,October 2011およびインテル(登録商標)Advanced Vector Extensions Programming Reference,June 2011を参照されたい)。本明細書において説明される命令の複数の実施形態は、複数の異なるフォーマットで実施され得る。更に、例示的な複数のシステム、アーキテクチャ、およびパイプラインが、以下に詳述される。
【0043】
命令の複数の実施形態は、そのような複数のシステム、アーキテクチャ、およびパイプラインで実行され得るが詳述されるものに限定されるものではない。
【0044】
VEXエンコードは、複数の命令が3つ以上のオペランドを有することを可能にし、複数のSIMDベクトルレジスタが128ビットより長くなることを可能にする。VEXプレフィックスを使用することにより、3つのオペランド(またはそれ以上)による構文を提供する。例えば、先行する2つのオペランドによる複数の命令は、A=A+B等の複数のオペレーションを実行し、これによりソースオペランドを上書きする。VEXプレフィックスを使用することにより、A=B+C等の複数の非破壊オペレーションを実行する複数のオペランドをイネーブルにする。
【0045】
図9Aは、VEXプレフィックス2102、リアルオペコードフィールド2130、Mod R/Mバイト2140、SIBバイト2150、変位フィールド2162、およびIMM8 2172を含む例示的なAVX命令フォーマット図示する。図9Bは、図9Aのどのフィールドがフルオペコードフィールド2174およびベースオペレーションフィールド2142を構成するかを図示する。図9Cは、図9Aのどのフィールドがレジスタインデックスフィールド2144を構成するかを図示する。
【0046】
VEXプレフィックス(バイト0〜2)2102は、3バイト形式でエンコードされる。第1のバイトは、フォーマットフィールド2140(VEXバイト0、ビット[7:0])であり、これは、明示的なC4バイト値(C4命令フォーマットを区別するべく用いられる一意な値)を含む。第2〜第3のバイト(VEXバイト1〜2)は、特定の能力を提供するいくつかのビットフィールドを含む。具体的には、REXフィールド2105(VEXバイト1、ビット[7−5])は、VEX.Rビットフィールド(VEXバイト1、ビット[7]−R)、VEX.Xビットフィールド(VEXバイト1、ビット[6]−X)、およびVEX.Bビットフィールド(VEXバイト1、ビット[5]−B)からなる。複数の命令の他のフィールドは、Rrrr、Xxxx、およびBbbbがVEX.R、VEX.X、およびVEX.Bを加算することにより形成され得るように、当技術分野において既知の複数のレジスタインデックス(rrr、xxx、およびbbb)のより小さい3ビットをエンコードする。オペコードマップフィールド2115(VEXバイト1、ビット[4:0]−mmmmm)は、暗黙に示される先頭オペコードバイトをエンコードするコンテンツを含む。Wフィールド2164(VEXバイト2、ビット[7]−W)は、表記VEX.Wにより表され、命令に応じて複数の異なる関数を提供する。VEX.vvvv2120(VEXバイト2、ビット[6:3]−vvvv)の役割は、以下を含み得る。1)VEX.vvvvは、反転された(1の補数)形式で指定された、第1のソースレジスタオペランドをエンコードし、2またはそれ以上のソースオペランドを用いる複数の命令に対して有効であり、2)VEX.vvvvは、一定の複数のベクトルシフトに対して1s補数形式で指定されたデスティネーションレジスタオペランドをエンコードし、または3)VEX.vvvvは、いずれのオペランドもエンコードせず、フィールドは、予約され、111lbを含むはずである。VEX.L2168サイズフィールド(VEXバイト2、ビット[2]−L)=0である場合、128ビットベクトルを示し、VEX.L=1である場合、256ビットベクトルを示す。プレフィックスエンコードフィールド2125(VEXバイト2、ビット[1:0]−pp)は、ベースオペレーションフィールド用の追加ビットを提供する。
【0047】
また、リアルオペコードフィールド2130(バイト3)は、オペコードバイトとしても知られる。オペコードの一部は、このフィールド内に指定される。MOD R/Mフィールド2140(バイト4)は、MODフィールド2142(ビット[7−6])、Regフィールド2144(ビット[5−3])、およびR/Mフィールド2146(ビット[2−0])を含む。Regフィールド2144の役割は、デスティネーションレジスタオペランドまたはソースレジスタオペランド(Rrrrのrrr)のいずれかをエンコードすることを含み、オペコード拡張として扱われ、命令オペランドをエンコードするべく用いられなくともよい。R/Mフィールド2146の役割は、メモリアドレスを参照する命令オペランドをエンコードし、またはデスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかをエンコードすることを含み得る。
【0048】
スケール、インデックス、ベース(SIB)。スケールフィールド2150(バイト5)のコンテンツは、SS2152(ビット[7−6])を含み、SS2152は、メモリアドレス生成に用いられる。SIB.xxx2154(ビット[5−3])およびSIB.bbb2156(ビット[2−0])のコンテンツは、レジスタインデックスXxxxおよびBbbbに関連してすでに言及された。変位フィールド2162および即値フィールド(IMM8)2172は、アドレスデータを含む。
【0049】
ベクトル向け命令フォーマットは、複数のベクトル命令に好適な命令フォーマットである(例えば、複数のベクトルオペレーションに固有の一定の複数のフィールドが存在する)。ベクトルおよびスカラオペレーションの双方がベクトル向け命令フォーマットによりサポートされる複数の実施形態が説明されるが、複数の代替的な実施形態は、ベクトル向け命令フォーマットによるベクトルオペレーションのみを用いる。
【0050】
図10Aおよび図10Bは、本発明の複数の実施形態による、一般ベクトル向け命令フォーマット、およびその複数の命令テンプレートを図示するブロック図である。図10Aは、本発明の複数の実施形態による、一般ベクトル向け命令フォーマット、およびその複数のクラスA命令テンプレートを図示するブロック図である。図10Bは、本発明の複数の実施形態による、一般ベクトル向け命令フォーマット、およびその複数のクラスB命令テンプレートを図示するブロック図である。具体的には、一般ベクトル向け命令フォーマット2200に対して、クラスAおよびクラスB命令のテンプレートが定義され、それら双方は、メモリアクセス2205の複数の命令テンプレートおよびメモリアクセス2220の複数の命令テンプレートを含まない。ベクトル向け命令フォーマットの文脈における一般という用語は、いずれの特定命令セットにも関係しない命令フォーマットを指す。
【0051】
ベクトル向け命令フォーマットが、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バイトのベクトルオペランド)をサポートし得る。
【0052】
図10AにおけるクラスA命令テンプレートは、以下を含む。1)非メモリアクセス2205の複数の命令テンプレート内に、非メモリアクセス、フルラウンド制御タイプオペレーション2210の命令テンプレート、および非メモリアクセス、データ変換タイプオペレーション2215の命令テンプレートが示され、および2)メモリアクセス2220の複数の命令テンプレート内に、一時的メモリアクセス2225の命令テンプレートおよび非一時的メモリアクセス2230の命令テンプレートが示される。図10Bにおける複数のクラスB命令テンプレートは、以下を含む。1)非メモリアクセス2205の複数の命令テンプレート内に、非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプオペレーション2212の命令テンプレート、およびメモリアクセス、ライトマスク制御、VSIZEタイプオペレーション2217の命令テンプレートが示され、および2)メモリアクセス2220の複数の命令テンプレート内に、メモリアクセス、ライトマスク制御2227の命令テンプレートが示される。
【0053】
一般ベクトル向け命令フォーマット2200は、図10Aおよび図10Bにおいて図示される順序で、以下に列挙される複数のフィールドを含む。フォーマットフィールド2240は、このフィールドにおける特定の値(命令フォーマット識別子の値)であり、ベクトル向け命令フォーマット、従って、複数の命令ストリーム中のベクトル向け命令フォーマットにおける複数の命令の複数の発生を一意に識別する。従って、このフィールドは、一般ベクトル向け命令フォーマットのみを有する命令セット用に必要とされないという意味で任意選択である。ベースオペレーションフィールド2242のコンテンツは、複数の異なるベースオペレーションを区別する。
【0054】
レジスタインデックスフィールド2244のコンテンツは、複数のレジスタ内であれ、メモリ内であれ、直接に、またはアドレス生成により、ソースの複数の位置および複数のデスティネーションオペランドを指定する。これらは、十分な数のビットを含み、PxQ(例えば、32x512、16x128、32x1024、64x1024)レジスタファイルのNのレジスタを選択する。一実施形態において、Nは、最大3つのソースおよび1つのデスティネーションレジスタであり得るが、代替的な複数の実施形態において、それより多いか、または少ない複数のソースおよびデスティネーションレジスタをサポートし得る(例えば、最大2つのソースをサポートし得、その場合にこれらのソースのうち1つは、デスティネーションとしても機能し、最大3つのソースをサポートし得、その場合にこれらのソースのうち1つは、デスティネーションとしても機能し、最大2つのソースおよび1つのデスティネーションをサポートし得る)。
【0055】
修飾子フィールド2246のコンテンツは、メモリアクセスを指定する一般ベクトル命令フォーマット中の複数の命令の複数の発生とメモリアクセスを指定しないものとを、すなわち、非メモリアクセス2205の複数の命令テンプレートとメモリアクセス2220の複数の命令テンプレートを区別する。複数のメモリアクセスオペレーションは、メモリ階層を読み取り、および/またはこれに書き込むが(いくつかの場合には、複数のレジスタにおける複数の値を用いて、ソースアドレスおよび/またはデスティネーションアドレスを指定する)、複数の非メモリアクセスオペレーションは、これを行わない(例えば、ソースおよびデスティネーションは、レジスタではない)。また、一実施形態において、このフィールドは、3つの異なる様式のうちで選択し、複数のメモリアドレス算出を実行するが、代替的な複数の実施形態は、より多く、より少なく、または複数の異なる様式をサポートし、複数のメモリアドレス算出を実行し得る。
【0056】
増加オペレーションフィールド2250のコンテンツは、ベースオペレーションに加えて、様々な異なるオペレーションのうちどちらが実行されるかを区別する。このフィールドは、コンテキスト固有である。本発明の一実施形態において、このフィールドは、クラスフィールド2268、アルファフィールド2252、およびベータフィールド2254に分割される。増加オペレーションフィールド2250は、複数のオペレーションの共通グループが2、3、または4つの命令ではなく、1つの命令で実行されることを可能にする。スケールフィールド2260のコンテンツは、メモリアドレス生成用の(例えば、2scale*index+baseを用いるアドレス生成用の)インデックスフィールドのコンテンツのスケーリングを可能にする。
【0057】
変位フィールド2262Aのコンテンツは、メモリアドレス生成の一部として(例えば、2scale*index+base+displacementを用いるアドレス生成のために)用いられる。変位係数フィールド2262B(変位係数フィールド2262Bのすぐ上に変位フィールド2262Aを並置することにより、一方または他方が使用されることを示すことに留意されたい)のコンテンツは、アドレス生成の一部として用いられる。変位係数フィールド2262Bは、メモリアクセス(N)のサイズに比例して描写される変位係数を指定する。Nは、(例えば、2scale*index+base+scaled displacementを用いるアドレス生成用の)メモリアクセスにおけるバイトの数である。有効なアドレスを算出するときに使用される最終的変位を生成するべく、複数の冗長下位ビットは、無視され、従って、変位係数フィールドのコンテンツは、複数のメモリオペランドの合計サイズ(N)で乗算される。Nの値は、フルオペコードフィールド2274(本明細書において後に説明される)およびデータ操作フィールド2254Cに基づくランタイム時にプロセッサハードウェアにより決定される。変位フィールド2262Aおよび変位係数フィールド2262Bは、非メモリアクセス2205の複数の命令テンプレートに用いられず、および/または複数の異なる実施形態が1つのみまたは2つのうちいずれも実装しないことがあるという意味で任意選択である。
【0058】
データ要素幅フィールド2264のコンテンツは、(いくつかの実施形態において全ての命令に対して、他の複数の実施形態において複数の命令のうちいくつかのみについて)いくつかのデータ要素幅のうちどちらが用いられるかを区別する。このフィールドは、複数のオペコードのいくつかの態様を用いて、1つのデータ要素幅のみがサポートされ、および/または複数のデータ要素幅がサポートされる場合には必要とされないという意味で任意選択である。
【0059】
ライトマスクフィールド2270のコンテンツは、データ要素位置ベースで、デスティネーションベクトルオペランドにおける当該データ要素位置が、ベースオペレーションおよび増加オペレーションの結果を反映しているか否かを制御する。複数のクラスA命令テンプレートは、マージングとライトマスキングをサポートするが、複数のクラスB命令テンプレートは、マージングとゼロイング・ライトマスキングの双方をサポートする。マージングする場合、複数のベクトルマスクは、デスティネーションにおける要素の任意のセットが(ベースオペレーションおよび増加オペレーションにより指定された)任意のオペレーションを実行する間に複数の更新から保護されることを可能にし、他の一実施形態において、対応するマスクビットが0を有するデスティネーションの各要素における古い値を保存する。対照的に、ゼロイングする場合、複数のベクトルマスクは、デスティネーションにおける要素の任意のセットが(ベースオペレーションおよび増加オペレーションにより指定された)任意のオペレーションを実行する間にゼロイングされることを可能にし、一実施形態において、対応するマスクビットが0の値を有する場合に、デスティネーションの要素は、0に設定される。この機能性のサブセットは、実行されるオペレーションのベクトル長を制御することができるが(つまり、最初から最後のものまでの修飾される複数の要素のスパン)、修飾される複数の要素が連続していることは、必要ではない。このように、ライトマスクフィールド2270は、ロード、ストア、算術、論理等を含む、複数の部分的ベクトルオペレーションを可能にする。ライトマスクフィールド2270のコンテンツが、用いられるライトマスクを含むいくつかのライトマスクレジスタのうち1つを選択する(従って、ライトマスクフィールド2270のコンテンツは、実行される当該マスキングを間接的に識別する)本発明の複数の実施形態が、説明されるが、代替的な複数の実施形態は、これに代えて、または更にライトマスクフィールド2270のコンテンツが実行されるマスキングを直接に指定することを可能にする。
【0060】
即値フィールド2272のコンテンツは、即値の仕様を可能にする。このフィールドは、即値をサポートしない一般ベクトル向け命令フォーマットの実装において存在せず、即値を用いない複数の命令中に存在しないという意味で任意選択である。クラスフィールド2268のコンテンツは、複数の命令の複数の異なるクラスを区別する。図10Aおよび図10Bを参照すると、このフィールドの複数のコンテンツは、クラスA命令およびクラスB命令から選択される。図10Aおよび図10Bにおいて、角が丸められた複数の四角形は、特定の値がフィールド内に存在することを示すべく用いられる(例えば、図10Aおよび図10Bにおけるクラスフィールド2268のクラスA2268AおよびクラスB2268Bのそれぞれ)。
【0061】
クラスAの非メモリアクセス2205の複数の命令テンプレートの場合、アルファフィールド2252は、RSフィールド2252Aとして解釈され、そのコンテンツは、複数の異なる増加オペレーションタイプのうちどちらが実行されるかを区別し(例えば、ラウンド2252A.1およびデータ変換2252A.2は、それぞれ、非メモリアクセス、ラウンドタイプオペレーション2210、および非メモリアクセス、データ変換タイプオペレーション2215の複数の命令テンプレート)に対して指定されるが、ベータフィールド2254は、指定されるタイプの複数のオペレーションのうちいずれが実行されるかを区別する。非メモリアクセス2205の複数の命令テンプレートにおいて、スケールフィールド2260、変位フィールド2262A、およびファイル済み変位スケール2262Bは、存在しない。
【0062】
非メモリアクセスのフルラウンド制御タイプオペレーション2210の命令テンプレートにおいて、ベータフィールド2254は、ラウンド制御フィールド2254Aとして解釈され、そのコンテンツは、静的ラウンドを提供する。本発明の説明される複数の実施形態において、ラウンド制御フィールド2254Aは、抑圧全浮動小数点例外(SAE)フィールド2256およびラウンドオペレーション制御フィールド2258を含み、代替的な複数の実施形態は、これら双方のコンセプトをサポートおよびエンコードして同一のフィールドとすることができ、またはこれらのコンセプト/フィールドのうち一方または他方のみを有し得る(例えば、ラウンドオペレーション制御フィールド2258のみを有し得る)。
【0063】
SAEフィールド2256のコンテンツは、例外イベント報告をディスエーブルにするか否かを区別する。SAEフィールド2256のコンテンツが、抑圧がイネーブルにされたことを示す場合、所与の命令は、いずれの種類の浮動小数点例外フラグも報告せず、いずれの浮動小数点例外処理部も立ち上げない。
【0064】
ラウンドオペレーション制御フィールド2258のコンテンツは、複数のラウンドオペレーションのグループのうちどちらを実行するかを区別する(例えば、大きくなる方向に丸める、小さくなる方向に丸める、ゼロに向けて丸める、最も近い方向に丸める)。このように、ラウンドオペレーション制御フィールド2258は、命令ベースでラウンドモードの変更を可能にする。プロセッサが複数のラウンドモードを指定する制御レジスタを含む本発明の一実施形態において、ラウンドオペレーション制御フィールド2250のコンテンツは、当該レジスタ値を上書きする。
【0065】
非メモリアクセスのデータ変換タイプオペレーション2215の命令テンプレートにおいて、ベータフィールド2254は、データ変換フィールド2254Bとして解釈され、そのコンテンツは、いくつかのデータ変換のうちどちらが実行されるかを区別する(例えば、非データ変換、スウィズル、ブロードキャスト)。
【0066】
クラスAのメモリアクセス2220の命令テンプレートの場合、アルファフィールド2252は、追い出し示唆フィールド2252Bとして解釈され、そのコンテンツは、複数の追い出し示唆のうちどちらが用いられるかを区別するが(図10Aにおいて、一時的2252B.1および非一時的2252B.2は、それぞれ、メモリアクセス、一時的2225の命令テンプレート、およびメモリアクセス、非一時的2230の命令テンプレートに対して指定される)、ベータフィールド2254は、データ操作フィールド2254Cとして解釈され、そのコンテンツは、いくつかのデータ総裁オペレーション(プリミティブとしても知られる)のうちどちらが実行されるかを区別する(例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、およびデスティネーションのダウンコンバージョン)。メモリアクセス2220の複数の命令テンプレートは、スケールフィールド2260を含み、変位フィールド2262Aまたは変位スケールフィールド2262Bを任意選択で含む。
【0067】
複数のベクトルメモリ命令は、変換サポートを用いて、メモリからのベクトルロードおよびメモリへのベクトルストアを実行する。通常の複数のベクトル命令の場合のように、複数のベクトルメモリ命令は、データ要素の様式で、メモリから/にデータを転送し、実際に転送される複数の要素は、ライトマスクとして選択されるベクトルマスクの複数のコンテンツにより規定される。
【0068】
一時的データは、キャッシングから利益を得るのに十分なほど速やかに再利用される可能性が高いデータである。しかし、それは示唆であり、異なるプロセッサは、示唆を完全に無視することを含め、複数の異なる様式で一時的データを実装してもよい。非一時的データは、第1のレベルのキャッシュにおけるキャッシングから利益を得るのに十分なほど速やかに再利用される可能性が低いデータであり、追い出しの優先権を与えられるべきである。しかし、それは示唆であり、複数の異なるプロセッサは、示唆を完全に無視することを含め、複数の異なる様式で非一時的データを実装してもよい。クラスBの複数の命令テンプレートの場合、アルファフィールド2252は、ライトマスク制御(Z)フィールド2252Cとして解釈され、そのコンテンツは、ライトマスクフィールド2270により制御されるライトマスキングがマージングであるべきか、またはゼロイングであるべきかを区別する。
【0069】
クラスBの非メモリアクセス2205の複数の命令テンプレートの場合、ベータフィールド2254の一部は、RLフィールド2257Aとして解釈され、そのコンテンツは、複数の異なる増加オペレーションタイプのうちどちらが実行されるかを区別するが(例えば、ラウンド2257A.1およびベクトル長(VSIZE)2257A.2は、それぞれ、非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプオペレーション2212の命令テンプレート、および非メモリアクセス、ライトマスク制御、VSIZEタイプオペレーション2217の命令テンプレートに対して指定される)、ベータフィールド2254の残りは、指定されるタイプの複数のオペレーションのうちいずれが実行されるかを区別する。非メモリアクセス2205の複数の命令テンプレートにおいて、スケールフィールド2260、変位フィールド2262A、およびファイル済み変位スケール2262Bは、存在しない。
【0070】
非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプオペレーション2210の命令テンプレートにおいて、ベータフィールド2254の残りは、ラウンドオペレーションフィールド2259Aとして解釈され、例外イベント報告は、ディセーブルにされる(所与の命令は、いずれの種類の浮動小数点例外フラグも報告せず、任意の浮動小数点例外処理部も立ち上げない)。
【0071】
ラウンドオペレーション制御フィールド2258と同様に、ラウンドオペレーション制御フィールド2259Aのコンテンツは、複数のラウンドオペレーションのグループのうちどちらを実行するかを区別する(例えば、大きくなる方向に丸める、小さくなる方向に丸める、ゼロに向けて丸める、最も近い方向に丸める)。このように、ラウンドオペレーション制御フィールド2259Aは、命令ベースでラウンドモードの変更を可能にする。プロセッサが複数のラウンドモードを指定する制御レジスタを含む本発明の一実施形態において、ラウンドオペレーション制御フィールド2250のコンテンツは、当該レジスタ値を上書きする。
【0072】
非メモリアクセス、ライトマスク制御、VSIZEタイプオペレーション2217の命令テンプレートにおいて、ベータフィールド2254の残りは、ベクトル長フィールド2259Bとして解釈され、そのコンテンツは、いくつかのデータベクトル長のうちどちらが実行されるかを区別する(例えば、128、256、または512バイト)。
【0073】
クラスBのメモリアクセス2220の複数の命令テンプレートの場合、ベータフィールド2254の一部は、ブロードキャストフィールド2257Bとして解釈され、そのコンテンツは、ブロードキャストタイプデータ操作オペレーションが実行されるか否かを区別するが、ベータフィールド2254の残りは、ベクトル長フィールド2259Bとして解釈される。メモリアクセス2220の複数の命令テンプレートは、スケールフィールド2260を含み、変位フィールド2262Aまたは変位スケールフィールド2262Bを任意選択で含む。
【0074】
一般ベクトル向け命令フォーマット2200に関連して、フォーマットフィールド2240、ベースオペレーションフィールド2242、およびデータ要素幅フィールド2264を含む、フルオペコードフィールド2274が示される。フルオペコードフィールド2274がこれらのフィールドの全てを含む一実施形態が示されるが、フルオペコードフィールド2274は、それらの全てをサポートしない複数の実施形態において、これらのフィールドの全てよりも少ないものを含む。フルオペコードフィールド2274は、オペレーションコード(オペコード)を提供する。
【0075】
増加オペレーションフィールド2250、データ要素幅フィールド2264、およびライトマスクフィールド2270は、一般ベクトル向け命令フォーマットにおける命令ベースで、これらの特徴が指定されることを可能にする。ライトマスクフィールドおよびデータ要素幅フィールドを組み合わせることで、マスクが異なるデータ要素幅に基づいて適用されることを可能にするように、複数の型の命令を生成する。
【0076】
クラスAおよびクラスB内に見出される様々な命令テンプレートは、複数の異なる状況において有益である。本発明のいくつかの実施形態において、複数の異なるプロセッサまたはプロセッサ内の複数の異なるコアは、クラスAのみ、クラスBのみ、または双方のクラスをサポートし得る。例えば、汎用計算用の高性能の汎用アウトオブオーダコアは、クラスBのみをサポートし得、主としてグラフィックスおよび/またはサイエンティフィック(スループット)計算用のコアは、クラスAのみをサポートし得、双方用のコアは、双方をサポートし得る(勿論、双方のクラスの全てのテンプレートおよび命令ではないが、いくらか混合した双方のクラスの複数のテンプレートおよび命令を有するコアは、本発明の範囲内である)。また、1つのプロセッサは、複数のコアを含んでもよく、複数のコアの全ては、同一クラスをサポートし、またはそのうちの複数の異なるコアは、異なるクラスをサポートする。例えば、別個のグラフィックスおよび複数の汎用コアを有するプロセッサにおいて、主としてグラフィックスおよび/またはサイエンティフィック計算用の複数のグラフィックスコアのうち1つは、クラスAのみをサポートし得るが、複数の汎用コアの1または複数は、クラスBのみをサポートする、汎用計算用のアウトオブオーダ実行およびレジスタリネームを用いる複数の高性能汎用コアであり得る。別個のグラフィックスコアを有しない別のプロセッサは、クラスAおよびクラスBの双方をサポートする、もう1つの汎用インオーダまたはオウトオブオーダのコアを含み得る。勿論、本発明の複数の異なる実施形態において、1つのクラスの複数の特徴も、他のクラスに実装され得る。ハイレベル言語で書かれた複数のプログラムは、1)実行のためにターゲットプロセッサによりサポートされるクラスの複数の命令のみを有する形式、または2)全てのクラスの命令の複数の異なる組み合わせを用いて書かれた代替的な複数のルーチンを有し、目下、コードを実行しているプロセッサによりサポートされる複数の命令に基づいて、実行する複数のルーチンを選択する制御フローコードを有する形式を含む、種々様々な実行可能な形式にされる(例えば、実行時コンパイルまたは静的コンパイルされる)。
【0077】
図11は、本発明の複数の実施形態による、例示的な特定ベクトル向け命令フォーマットを図示するブロック図である。図11は、位置、サイズ、インタープリテーション、および複数のフィールドの順序、ならびにこれらのフィールドに対する複数の値を指定するという意味で具体的な特定ベクトル向け命令フォーマット2300を示す。特定ベクトル向け命令フォーマット2300は、x86命令セットを拡張するべく用いられ得、従って、複数のフィールドのいくつかは、既存のx86命令セットおよびその拡張(例えばAVX)において使用されるものと類似し、または同一である。このフォーマットは、プレフィックスエンコードフィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、および複数の拡張を伴う既存のx86命令セットの複数の即値フィールドと依然として整合性がある。図10の複数のフィールドにマッピングする図11の複数のフィールドが図示される。
【0078】
本発明の複数の実施形態は、例示的目的で一般ベクトル向け命令フォーマット2200の文脈において、特定ベクトル向け命令フォーマット2300を参照して説明されるが、本発明は、特許請求される場合を除き、特定ベクトル向け命令フォーマット2300に限定されないことを理解されたい。例えば、一般ベクトル向け命令フォーマット2200は、様々なフィールドの様々な適用可能なサイズを企図するが、特定ベクトル向け命令フォーマット2300は、複数の特定サイズのフィールドを有するものとして示される。特定の例によれば、データ要素幅フィールド2264は、特定ベクトル向け命令フォーマット2300における1つのビットフィールドとして図示されるが、本発明は、そのようには限定されない(つまり、一般ベクトル向け命令フォーマット2200は、他の複数のサイズのデータ要素幅フィールド2264を企図する)。
【0079】
一般ベクトル向け命令フォーマット2200は、図11Aにおいて図示される順序で以下に列挙される、次の複数のフィールドを含む。EVEXプレフィックス(バイト0〜3)2302は、4バイト形式でエンコードされる。フォーマットフィールド2240(EVEXバイト0、ビット[7:0])の第1のバイト(EVEXバイト0)は、フォーマットフィールド2240であり、0x62を含む(本発明の一実施形態において、ベクトル向け命令フォーマットを区別するべく用いられる一意な値)。第2〜第4のバイト(EVEXバイト1〜3)は、特定の能力を提供するいくつかのビットフィールドを含む。
【0080】
REXフィールド2305(EVEXバイト1、ビット[7−5])は、EVEX.Rビットフィールド(EVEXバイト1、ビット[7]−R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]−X)、および2257BEXバイト1、ビット[5]−B)からなる。EVEX.R、EVEX.X、およびEVEX.Bのビットフィールドは、対応するVEXビットフィールドと同一の機能性を提供し、1s補数形式を用いてエンコードされる。すなわち、ZMM0は、1111Bとしてエンコードされ、ZMM15は、0000Bとしてエンコードされる。複数の命令の他の複数のフィールドは、当技術分野で既知の複数のレジスタインデックスのより低い3つのビット(rrr、xxx、およびbbb)をエンコードし、従って、Rrrr、Xxxx、およびBbbbは、EVEX.R、EVEX.X、およびEVEX.Bを加算することにより形成され得る。
【0081】
REX'フィールド2310。これは、REX'フィールド2310の第1の部分であり、拡張された32レジスタセットの上方または下方の16をエンコードするべく用いられるEVEX.R'ビットフィールドである(EVEXバイト1、ビット[4]−R')。本発明の一実施形態において、このビットは、以下に示される他のものと共に、BOUND命令から(周知のx86 32ビットモードで)区別するビット反転フォーマットで格納され、BOUND命令のリアルオペコードバイトは62であるが、MOD R/Mフィールド(下記)において、MODフィールドの値11を受け取らない。本発明の代替的な複数の実施形態は、これと、反転フォーマットで下に示される他の複数のビットを格納しない。値1は、より低い16のレジスタをエンコードするべく用いられる。換言すると、R'Rrrrは、EVEX.R'、EVEX.R、および他の複数のフィールドの他のRRRを組み合わせることにより形成される。
【0082】
オペコードマップフィールド2315(EVEXバイト1、ビット[3:0]−mmmm)のコンテンツは、暗黙に示される先頭オペコードバイト(OF、OF38、またはOF3)をエンコードする。データ要素幅フィールド2264(EVEXバイト2、ビット[7]−W)は、EVEX.Wという表記により表される。EVEX.Wは、データタイプの粒度(サイズ)(32ビットのデータ要素または64ビットのデータ要素)を定義するべく用いられる。EVEX.vvvv2320(EVEXバイト2、ビット[6:3]−vvvv)。EVEX.vvvvの役割は、以下を含み得る。1)EVEX.vvvvは、反転(1s補数)形式で指定された第1のソースレジスタオペランドをエンコードし、2またはそれ以上のソースオペランドを用いる命令に対して有効である。2)EVEX.vvvvは、一定の複数のベクトルシフトに対して1s補数形式で指定されたデスティネーションレジスタオペランドをエンコードする。または3)EVEX.vvvvは、いずれのオペランドもエンコードせず、フィールドは予約され、1111bを含むことになっている。従って、EVEX.vvvvフィールド2320は、反転(1s補数)形式で格納された第1のソースレジスタ指定子の4つの下位ビットをエンコードする。命令に応じて、指定子サイズを32レジスタに拡張するべく、追加の異なるEVEXビットフィールドが用いられる。EVEX.U2268クラスフィールド(EVEXバイト2、ビット[2]−U)。EVEX.U=0の場合、これは、クラスAまたはEVEX.U0を示す。EVEX.U=1の場合、クラスBまたはEVEX.U1を示す。
【0083】
プレフィックスエンコードフィールド2325(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を設計し得、従って拡張を要求しない。
【0084】
アルファフィールド2252(EVEXバイト3、ビット[7]−EH。EVEX.EH、EVEX.rs、EVEX.RL、EVEX.ライトマスク制御、およびEVEX.Nとしても知られる。αでも図示される)。先述したように、このフィールドは、コンテキスト固有である。ベータフィールド2254(EVEXバイト3、ビット[6:4]−SSS、EVEX.s2-0、EVEXr2-0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られる。βββでも図示される)。先述したように、このフィールドは、コンテキスト固有である。
【0085】
REX'フィールド2210は、REX'フィールドの残りであり、拡張された32レジスタセットの上方または下方の16をエンコードするべく用いられるEVEX.Vビットフィールドである(EVEXバイト3、ビット[3]−V)。このビットは、ビット反転フォーマットに格納される。値1は、より低い16のレジスタをエンコードするべく用いられる。換言すると、VVVVは、EVEX.V、EVEX.vvvvを組み合わせすることにより形成される。
【0086】
ライトマスクフィールド2270(EVEXバイト3、ビット[2:0]−kkk)のコンテンツは、先述した複数のライトマスクレジスタにおけるレジスタのインデックスを指定する。本発明の一実施形態において、特定の値EVEX.kkk=000は、特定の命令のために非ライトマスクが用いられることを暗に示す、特別な動作を有する(これは、全てのものに実線で接続されたライトマスク、またはマスキングハードウェアを迂回するハードウェアの使用を含む、様々な様式で実装され得る)。
【0087】
リアルオペコードフィールド2330(バイト4)は、オペコードバイトとしても知られる。オペコードの一部は、このフィールド内に指定される。MOD R/Mフィールド2340(バイト5)は、MODフィールド2342、Regフィールド2344、およびR/Mフィールド2346を含む。先述したように、MODフィールド2342のコンテンツは、メモリアクセスオペレーションと非メモリアクセスオペレーションとを区別する。Regフィールド2344の役割は、デスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかをエンコードするか、またはオペコード拡張として扱われ、任意の命令オペランドをエンコードするべく用いられないという2つの状況に要約され得る。R/Mフィールド2346の役割は、メモリアドレスを参照する命令オペランドをエンコードすること、またはデスティネーションレジスタオペランドもしくはソースレジスタオペランドをエンコードすることを含み得る。
【0088】
スケール、インデックス、ベース(SIB)バイト(バイト6)。先述したように、スケールフィールド2250のコンテンツは、メモリアドレス生成に用いられる。SIB.xxx2354およびSIB.bbb2356。これらのフィールドのコンテンツは、レジスタインデックスXxxxおよびBbbbに関連してすでに言及された。変位フィールド2262A(バイト7〜10)。MODフィールド2342が10を含む場合、バイト7〜10は、変位フィールド2262Aであり、レガシー32ビット変位(disp32)と同様に機能し、バイト粒度で機能する。
【0089】
変位係数フィールド2262B(バイト7)。MODフィールド2342が01を含む場合、バイト7は、変位係数フィールド2262Bである。このフィールドの位置は、レガシーx86命令セットの8ビット変位(disp8)の位置と同一であり、disp8は、バイト粒度で機能する。disp8は、拡張された署名であるので、128バイトオフセットと127バイトオフセットとの間でのみ処理することができる。64バイトキャッシュラインの観点から、disp8は、4つの本当に有用な値128、64、0、および64のみに設定され得る8ビットを使用する。多くの場合、より大きい範囲が必要とされるので、disp32が使用される。しかし、disp32は、4バイトを要求する。disp8およびdisp32とは対照的に、変位係数フィールド2262Bは、disp8のリインタープレテーションである。変位係数フィールド2262Bを用いる場合、実際の変位は、メモリオペランドアクセス(N)のサイズで乗算された変位係数フィールドのコンテンツにより決定される。このタイプの変位は、disp8*Nと呼ばれる。これは、平均的命令の長さ(変位に用いられるが、より大きい範囲を有する1バイト)を低減する。そのように圧縮された変位は、有効な変位がメモリアクセスの粒度の倍数であるという前提に基づき、従って、アドレスオフセットの複数の冗長下位ビットは、エンコードされる必要がない。換言すると、変位係数フィールド2262Bは、レガシーx86命令セットの8ビット変位を代用する。従って、変位係数フィールド2262Bは、disp8がdisp8*Nにオーバーロードされることのみを例外として、x86命令セットの8ビット変位と同じようにエンコードされる(従って、Mod RM/SIBエンコード規則に変更はない)。換言すると、エンコード規則またはエンコードの長さに変更はないが、(バイト的アドレスオフセットを得るべく、メモリオペランドのサイズにより変位を調節する必要がある)ハードウェアによる変位値のインタープリテーションのみには変更がある。即値フィールド2272は、先述したように動作する。
【0090】
図11Bは、本発明の一実施形態による、フルオペコードフィールド2274を構成する特定ベクトル向け命令フォーマット2300のフィールドを図示するブロック図である。具体的には、フルオペコードフィールド2274は、フォーマットフィールド2240、ベースオペレーションフィールド2242、およびデータ要素幅(W)フィールド2264を含む。ベースオペレーションフィールド2242は、プレフィックスエンコードフィールド2325、オペコードマップフィールド2315、およびリアルオペコードフィールド2330を含む。
【0091】
図11Cは、本発明の一実施形態による、レジスタインデックスフィールド2244を構成する特定ベクトル向け命令フォーマット2300のフィールドを図示するブロック図である。具体的には、レジスタインデックスフィールド2244は、REXフィールド2305、REX'フィールド2310、MODR/M.regフィールド2344、MODR/M.r/mフィールド2346、VVVVフィールド2320、xxxフィールド2354、およびbbbフィールド2356を含む。
【0092】
図11Dは、本発明の一実施形態による、増加オペレーションフィールド2250を構成する特定ベクトル向け命令フォーマット2300のフィールドを図示するブロック図である。クラス(U)フィールド2268が0を含む場合、EVEX.U0(クラスA2268A)を意味する。1を含む場合、EVEX.U1(クラスB2268B)を意味する。U=0であり、MODフィールド2342が11を含む(非メモリアクセスオペレーションを意味する)場合、アルファフィールド2252(EVEXバイト3、ビット[7]−EH)は、rsフィールド2252Aとして解釈される。RSフィールド2252Aが1(ラウンド2252A.1)を含む場合、ベータフィールド2254(EVEXバイト3、ビット[6:4]−SSS)は、ラウンド制御フィールド2254Aとして解釈される。ラウンド制御フィールド2254Aは、1ビットのSAEフィールド2256および2ビットのラウンドオペレーションフィールド2258を含む。rsフィールド2252Aが0(データ変換2252A.2)を含む場合、ベータフィールド2254(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ変換フィールド2254Bとして解釈される。U=0であり、MODフィールド2342が00、01、または10(メモリアクセスオペレーションを意味する)を含む場合、アルファフィールド2252(EVEXバイト3、ビット[7]−EH)は、追い出し示唆(EH)フィールド2252Bとして解釈され、ベータフィールド2254(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ操作フィールド2254Cとして解釈される。
【0093】
U=1である場合、アルファフィールド2252(EVEXバイト3、ビット[7]−EH)は、ライトマスク制御(Z)フィールド2252Cとして解釈される。U=1であり、MODフィールド2342が11を含む(非メモリアクセスオペレーションを意味する)場合、ベータフィールド2254(EVEXバイト3、ビット[4]−So)の一部は、RLフィールド2257Aとして解釈される。1(ラウンド2257A.1)を含む場合、ベータフィールド2254(EVEXバイト3、ビット[6−5]−S2−1)の残りは、ラウンドオペレーションフィールド2259Aとして解釈されるが、RLフィールド2257Aが0(VSIZE2257.A2)を含む場合、ベータフィールド2254(EVEXバイト3、ビット[6−5]−S2−1)の残りは、ベクトル長フィールド2259B(EVEXバイト3、ビット[6−5]−L1−0)として解釈される。U=1であり、MODフィールド2342が00、01、または10を含む(メモリアクセスオペレーションを意味する)場合、ベータフィールド2254(EVEXバイト3、ビット[6:4]−SSS)は、ベクトル長フィールド2259B(EVEXバイト3、ビット[6−5]−L1−0)およびブロードキャストフィールド2257B(EVEXバイト3、ビット[4]−B)として解釈される。
【0094】
図12は、本発明の一実施形態による、レジスタアーキテクチャ2400のブロック図である。図示される実施形態において、512ビット幅の32のベクトルレジスタ2410が存在する。これらのレジスタは、zmm0〜zmm31として参照される。より低い16のzmmレジスタの下位256ビットは、レジスタymm0〜16上にオーバーレイされる。より低い16のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0〜15上にオーバーレイされる。以下の表に図示されるように、特定ベクトル向け命令フォーマット2300は、これらのオーバーレイされたレジスタファイルで動作する。
【表1】
【0095】
換言すると、ベクトル長フィールド2259Bは、最大長、および1もしくは複数の他のより短い長さのうちから選択され、そのようなそれぞれのより短い長さは、先述の長さの半分の長さである。ベクトル長フィールド2259Bを用いない複数の命令テンプレートは、最大ベクトル長で動作する。更に、一実施形態において、特定ベクトル向け命令フォーマット2300のクラスB命令テンプレートは、パックドもしくはスカラ単精度/倍精度浮動小数点データおよびパックドもしくはスカラ整数データで動作する。複数のスカラオペレーションは、zmm/ymm/xmmレジスタにおける最低位のデータ要素位置で実行されるオペレーションである。より高位の複数のデータ要素位置は、命令前と同一が、または実施形態に応じてゼロにされる。
【0096】
複数のライトマスクレジスタ2415。図示される実施形態において、8のライトマスクレジスタ(k0〜k7)が存在し、それぞれは64ビットのサイズである。代替的な実施形態において、複数のライトマスクレジスタ2415は16ビットのサイズである。先述したように、本発明の一実施形態において、ベクトルマスクレジスタk0は、ライトマスクとして使用され得ない。通常、k0を示すエンコードがライトマスクに用いられる場合、これは、0xFFFFの実線で接続されたライトマスクを選択し、その命令に対するマスキングを効果的にディスエーブルにする。
【0097】
複数の汎用レジスタ2425。図示される実施形態において、既存の複数のx86アドレスモードと共に用いられ、複数のメモリオペランドを処理する16の64ビット汎用レジスタが存在する。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、およびR8〜R15の名称により参照される。
【0098】
スカラ浮動小数点スタックレジスタファイル(x87スタック)2445上に、MMXパックド整数フラットレジスタファイル2450がエイリアスされ、図示される実施形態において、x87スタックは、x87命令セット拡張を用いて、32/64/80ビット浮動小数点データに複数のスカラ浮動小数点オペレーションを実行するべく用いられる8つの要素のスタックである。複数のMMXレジスタは、64ビットパックド整数データに複数のオペレーションを実行すると共に、MMXレジスタとxmmレジスタとの間で実行されるいくつかのオペレーションのためのオペランドを保持するべく用いられる。
【0099】
本発明の代替的な複数の実施形態は、より広いか、またはより狭い複数のレジスタを用い得る。 更に、本発明の代替的な複数の実施形態は、より多く、より少なく、または異なるレジスタファイルおよびレジスタを用い得る。
【0100】
複数のプロセッサコアは、複数の異なる目的のために、複数の異なるプロセッサにおいて異なる様式で実装され得る。例えば、そのような複数のコアの複数の実装は、1)汎用計算用の汎用インオーダコア、2)汎用計算用の高性能汎用アウトオブオーダコア、3)主としてグラフィックスおよび/またはサイエンティフィック(スループット)計算用の特定用途用コアを含み得る。複数の異なるプロセッサの複数の実装は、1)汎用計算用の1もしくは複数の汎用インオーダコア、および/または汎用計算用の1もしくは複数の汎用アウトオブオーダコアを含むCPU、ならびに2)主としてグラフィックスおよび/またはサイエンティフィック(スループット)用の1もしくは複数の特定用途用コアを含むコプロセッサを含み得る。そのような複数の異なるプロセッサは、複数の異なるコンピュータシステムアーキテクチャをもたらし、複数の異なるコンピュータシステムアーキテクチャは、1)CPUの別個のチップ上のコプロセッサ、2)CPUと同一のパッケージにおける別個のダイ上のコプロセッサ、3)CPUと同一のダイ上のコプロセッサ
(この場合、そのようなコプロセッサは、場合によっては統合グラフィックスおよび/またはサイエンティフィック(スループット)ロジック、または特定用途用コア等、特定用途用ロジックとして言及される)、および4)同一のダイ上に、上述のCPU(場合によっては、アプリケーションコアもしくはアプリケーションプロセッサとして言及される)、上記のコプロセッサ、および追加の機能性を含み得るシステムオンチップを含み得る。複数の例示的なコアアーキテクチャが次に説明され、その後に複数の例示的なプロセッサおよびコンピュータアーキテクチャの説明が続く。
【0101】
図13Aは、本発明の複数の実施形態による、例示的なインオーダパイプライン、および例示的なレジスタリネーム、アウトオブオーダ発行/実行パイプラインの双方を図示するブロック図である。図13Bは、本発明の複数の実施形態による、インオーダアーキテクチャコアの例示的な実施形態、およびプロセッサ内に含まれる例示的なレジスタリネーム、アウトオブオーダ発行/実行アーキテクチャコアの双方を図示するブロック図である。実線の複数のボックスは、インオーダパイプラインおよびインオーダコアを図示するが、複数の破線ボックスの任意の追加により、レジスタリネーム、アウトオブオーダ発行/実行パイプライン、およびコアを図示する。インオーダ態様がアウトオブオーダ態様のサブセットであると仮定して、アウトオブオーダ態様が説明される。
【0102】
図13Aにおいて、プロセッサパイプライン2500は、フェッチステージ2502、長さデコードステージ2504、デコードステージ2506、割り当てステージ2508、リネームステージ2510、スケジューリング(ディスパッチまたは発行としても知られる)ステージ2512、レジスタ読み取り/メモリ読み取りステージ2514、実行ステージ2516、ライトバック/メモリライトステージ2518、例外処理ステージ2522、およびコミットステージ2524を含む。
【0103】
図13Bは、実行エンジンユニット2550に結合されたフロントエンドユニット2530を含むプロセッサコア2590を示し、実行エンジンユニット2550およびフロントエンドユニット2530の双方がメモリユニット2570に結合される。コア2590は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは代替的なコアタイプであってもよい。なおも別の選択肢として、コア2590は、例えば、ネットワークもしくは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(GPGPU)コア、グラフィックスコア等の特定用途用コアであってもよい。フロントエンドユニット2530は、命令キャッシュユニット2534に結合された分岐予測ユニット2532を含み、分岐予測ユニット2532は、命令トランスレーションルックアサイドバッファ(TLB)2536に結合され、命令トランスレーションルックアサイドバッファ2536は、命令フェッチユニット2538に結合され、命令フェッチユニット2538は、デコードユニット2540に結合される。デコードユニット2540(またはデコーダ)は、複数のデコード命令をデコードし、出力として1もしくは複数のマイクロオペレーション、マイクロコードエントリーポイント、マイクロ命令、他の命令、または他の制御信号を生成することができ、これらは、複数の元の命令からデコードされ、またはこれらを反映し、あるいはこれらから派生する。デコードユニット2540は、様々な異なるメカニズムを用いて実装され得る。好適なメカニズムの例としては、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)等が挙げられるが、これらに限定されない。一実施形態において、コア2590は、複数の一定のマクロ命令に対するマイクロコードを(例えば、デコードユニット2540またはフロントエンドユニット2530内に)格納する、マイクロコードROMまたは他の媒体を含む。デコードユニット2540は、実行エンジンユニット2550内のリネーム/アロケータユニット2552に結合される。
【0104】
実行エンジンユニット2550は、リタイアメントユニット2554および1または複数のスケジューラユニット2556のセットに結合されたリネーム/アロケータユニット2552を含む。スケジューラユニット2556は、複数のリザベーションステーション、中央命令ウィンドウ等を含む、任意の数の異なるスケジューラを表す。スケジューラユニット2556は、物理レジスタファイルユニット2558に結合される。物理レジスタファイルユニット2558のそれぞれは、1または複数の物理レジスタファイルを表し、それらのうちの異なるものが、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、状態(例えば、実行される次の命令のアドレスである命令ポインタ)等、1または複数の異なるデータタイプを格納する。
【0105】
一実施形態において、物理レジスタファイルユニット2558は、複数のベクトルレジスタユニット、ライトマスクレジスタユニット、およびスカラレジスタユニットを備える。これらのレジスタユニットは、複数のアーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供し得る。物理レジスタファイルユニット2558は、リタイアメントユニット2554と重なり、レジスタリネームおよびアウトオブオーダ実行が(例えば、リオーダバッファおよびリタイアメントレジスタファイルを用いることにより、フューチャファイル、履歴バッファ、およびリタイアメントレジスタファイルを用いることにより、複数のレジスタのレジスタマップおよびプール等を用いることにより)実装され得る様々な様式を図示する。リタイアメントユニット2554および物理レジスタファイルユニット2558は、実行クラスタ2560に結合される。
【0106】
実行クラスタ2560は、1もしくは複数の実行ユニット2562のセット、および1もしくは複数のメモリアクセスユニット2564のセットを含む。複数の実行ユニット2562は、様々なオペレーション(例えば、シフト、加算、減算、乗算)を、様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に基づいて実行し得る。いくつかの実施形態は、複数の特定の関数または複数のセットの関数に専用のいくつかの実行ユニットを含み得るが、他の実施形態は、1つのみ実行ユニットまたは複数の実行ユニットを含み、それらの全てがあらゆる関数を実行し得る。
【0107】
スケジューラユニット2556、物理レジスタファイルユニット2558、および実行クラスタ2560は、おそらくは複数であるものとして示される。複数の一定の実施形態は、複数の一定のタイプのデータ/オペレーションのための複数の別個のパイプライン(例えば、各々が、自身のスケジューラユニット、物理レジスタファイルユニット、および/または実行クラスタを有する、スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプライン。別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット2564を有する複数の一定の実施形態が実装される)を作成するからである。別個の複数のパイプラインが使用される場合、これらのパイプラインのうち1または複数は、アウトオブオーダ発行/実行であり、残りはインオーダであり得ることを理解されたい。
【0108】
複数のメモリアクセスユニット2564のセットは、メモリユニット2570に結合され、メモリユニット2570は、レベル2(L2)キャッシュユニット2576に結合されたデータキャッシュユニット2574に結合されたデータTLBユニット2572を含む。例示的な一実施形態において、複数のメモリアクセスユニット2564は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含み、それらのそれぞれは、メモリユニット2570におけるデータTLBユニット2572に結合され得る。命令キャッシュユニット2534は、メモリユニット2570におけるレベル2(L2)キャッシュユニット2576に更に結合される。L2キャッシュユニット2576は、1または複数の他のレベルのキャッシュに、そして最終的にはメインメモリに結合される。
【0109】
例として、例示的なレジスタリネーム、アウトオブオーダ発行/実行コアアーキテクチャは、パイプライン2500を以下のように実装し得る。1)命令フェッチ2538は、フェッチおよび長さデコードステージ2502および2504を実行する。2)デコードユニット2540はデコードステージ2506を実行する。3)リネーム/アロケータユニット2552は、割り当てステージ2508およびリネームステージ2510を実行する。4)スケジューラユニット2556は、スケジューリングステージ2512を実行する。5)物理レジスタファイルユニット2558およびメモリユニット2570は、レジスタ読み取り/メモリ読み取りステージ2514を実行し、実行クラスタ2560は、実行ステージ2516を実行する。6)メモリユニット2570および物理レジスタファイルユニット2558は、ライトバック/メモリライトステージ2518を実行する。7)様々なユニットは、例外処理ステージ2522に関与してもよく、8)リタイアメントユニット2554および物理レジスタファイルユニット2558は、コミットステージ2524を実行する。
【0110】
コア2590は、本明細書において説明される命令を含む、1または複数の命令セット(例えば、x86命令セット(複数のより新しいバージョンを追加された、いくつかの拡張を伴う)、カリフォルニア州サニーベールのMIPS TechnologyのMIPS命令セット、カリフォルニア州サニーベールのARM HoldingのARM命令セット(NEON等の複数の選択的追加拡張を伴う)をサポートし得る。一実施形態において、コア2590は、パックドデータ命令セット拡張(例えば、AVX1、AVX2、および/または先述のいくつかの形式の一般ベクトル向け命令フォーマット(U=0および/またはU=1))をサポートするロジックを含み、それにより、パックドデータを用いて実行される多くのマルチメディアアプリケーションにより使用される複数のオペレーションを可能にする。
【0111】
コアは、マルチスレディング(2もしくはそれ以上の並列セットのオペレーションもしくはスレッドを実行する)をサポートし、タイムスライスマルチスレッド化、同時マルチスレッド化(1つの物理コアが、物理コアが同時に、マルチスレッド化する複数のスレッドのそれぞれに対する論理コアを提供する)、またはそれらの組み合わせ(例えば、タイムスライスフェチおよびデコード、ならびにインテル(登録商標)ハイパースレッディング技術等における以後の同時マルチスレッド化)を含む様々な様式でサポートし得ることを理解されたい。
【0112】
レジスタリネームは、アウトオブオーダ実行の文脈において説明されるが、レジスタリネームは、インオーダアーキテクチャにおいて使用されてもよいことを理解されたい。プロセッサの図示される実施形態は、別個の命令および複数のデータキャッシュユニット2534/2574、ならびに共有L2キャッシュユニット2576も含むが、複数の代替的な実施形態は、例えば、レベル1(L1)内部キャッシュまたは内部キャッシュの複数のレベル等、複数の命令およびデータの双方に対する1つの内部キャッシュを有し得る。いくつかの実施形態において、システムは、内部キャッシュ、ならびにコアおよび/もしくはプロセッサの外部にある外部キャッシュの組み合わせを含み得る。あるいは、キャッシュのすべては、コアおよび/またはプロセッサの外部にあってもよい。
【0113】
図14Aおよび図14Bは、コアが、チップにおけるいくつかのロジックブロックのうちの1つ(同一タイプおよび/または複数の異なるタイプの他のコアを含む)である、より具体的な例示的インオーダコアアーキテクチャのブロック図を図示する。複数のロジックブロックは、アプリケーションに応じて、高帯域幅の相互接続ネットワーク(例えば、リングネットワーク)を介していくつかの固定機能ロジック、メモリI/Oインターフェース、および他の必要なI/Oロジックと通信する。
【0114】
図14Aは、本発明の複数の実施形態による、オンダイ相互接続ネットワーク2602、およびレベル2(L2)キャッシュ2604のローカルサブセットへの接続を伴うシングルプロセッサコアのブロック図である。一実施形態において、命令デコーダ2600は、パックドデータ命令セット拡張を用いるx86命令セットをサポートする。L1キャッシュ2606は、スカラユニットおよびベクトルユニットに至るキャッシュメモリへの複数の低レイテンシーアクセスを可能にする。一実施形態において(設計を簡略化するべく)、スカラユニット2608およびベクトルユニット2610は、別個の複数のレジスタセット(それぞれ、複数のスカラレジスタ2612および複数のベクトルレジスタ2614)を使用し、それらの間で転送されるデータは、メモリに書き込まれ、その後、レベル1(L1)キャッシュ2606からリードバックされる。本発明の代替的な複数の実施形態は、異なるアプローチ(例えば、1つのレジスタセットを使用し、またはライトバックおよびリードバックされることなく、2つのレジスタファイルの間で、データが転送されることを可能にする通信パスを含む)を使用し得る。
【0115】
L2キャッシュ2604のローカルサブセットは、複数の別個のローカルサブセットに分割され、1プロセッサコア毎に1つのグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュ2604の自身のローカルサブセットへのダイレクトアクセスパスを有する。プロセッサコアにより読み取られるデータは、L2キャッシュサブセット2604内に格納され、自身の複数のローカルL2キャッシュサブセットにアクセスする他の複数のプロセッサコアと並列に迅速にアクセスされ得る。プロセッサコアにより書き込まれたデータは、自身のL2キャッシュサブセット2604内に格納され、必要な場合に他の複数のサブセットからフラッシュされる。リングネットワークは、共有データに対するコヒーレンシを保証する。リングネットワークは、双方向性であり、複数のプロセッサコア、L2キャッシュ、および他のロジックブロック等のエージェントがチップ内で互いに通信することを可能にする。各リングデータパスは、1方向毎に1012ビット幅である。
【0116】
図14Bは、本発明の複数の実施形態による、図14Aにおけるプロセッサコアの一部の拡大図である。図14Bは、L1キャッシュ2604のL1データキャッシュ2606A部分、ならびにベクトルユニット2610および複数のベクトルレジスタ2614に関する更なる詳細を含む。具体的には、ベクトルユニット2610は、16ワイドベクトル処理ユニット(VPU)(16ワイドALU2628を参照されたい)であり、これは、整数命令、単精度浮動命令、および倍精度浮動命令のうちの1または複数を実行する。VPUは、スウィズルユニット2620を用いる複数のレジスタ入力、複数の数値変換ユニット2622A〜Bを用いる数値変換、およびレプリケーションユニット2624を用いるメモリ入力に関するレプリケーションをスウィズルすることをサポートする。複数のライトマスクレジスタ2626は、複数のベクトル書き込みの結果をプレディケートすることを可能にする。
【0117】
図15は、本発明の複数の実施形態による、2つ以上のコア、統合メモリコントローラ、および統合グラフィックスを有し得る、プロセッサ2700のブロック図である。図15における複数の実線のボックスは、シングルコア2702Aを有するプロセッサ2700、システムエージェント2710、1または複数のバスコントローラユニット2716のセットを図示するが、複数の破線ボックスの選択的追加は、複数のコア2702A〜N、システムエージェントユニット2710における1または複数の統合メモリコントローラユニット2714のセット、および特定用途用ロジック2708を有する代替的なプロセッサ2700を図示する。
【0118】
従って、プロセッサ2700の複数の異なる実装は、1)統合グラフィックスおよび/またはサイエンティフィック(スループット)ロジック(1または複数のコアを含み得る)である特定用途用ロジック2708、および1または複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、2つの組み合わせ)である複数のコア2702A〜Nを用いるCPU、2)主としてグラフィックスおよび/またはサイエンティフィック(スループット)用に意図される多数の特定用途用コアである複数のコア2702A〜Nを用いるコプロセッサ、および3)多数の汎用インオーダコアである複数のコア2702A〜Nを用いるコプロセッサを含み得る。従って、プロセッサ2700は、例えば、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、高スループットのmany integrated core(MIC)コプロセッサ(30またはそれ以上のコアを含む)、エンベデッドプロセッサ等の汎用プロセッサ、コプロセッサ、または特定用途用プロセッサであってもよい。プロセッサは、1または複数のチップ上に実装されてもよい。プロセッサ2700は、例えば、BiCMOS、CMOS、またはNMOS等、いくつかの処理技術のいずれかを用いる1または複数の基板の一部であってもよく、および/またはその上に実装されてもよい。
【0119】
メモリ階層は、複数のコア内の1または複数のレベルのキャッシュ、共有キャッシュユニット2706のセットまたは1もしくは複数、および複数の統合メモリコントローラユニット2714のセットに結合された外部メモリ(図示せず)を含む。複数の共有キャッシュユニット2706のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)等の1または複数の中間レベルのキャッシュ、キャッシュの他の複数のレベル、最後のレベルのキャッシュ(LLC)、および/またはこれらの組み合わせを含み得る。一実施形態において、リングベースの相互接続ユニット2712は、統合グラフィックスロジック2708、複数の共有キャッシュユニット2706のセット、およびシステムエージェントユニット2710/統合メモリコントローラユニット2714を相互接続し、複数の代替的な実施形態は、そのような複数のユニットを相互接続する、任意の数の周知技術を使用し得る。一実施形態において、コヒーレンシは、1もしくは複数のキャッシュユニット2706と複数のコア2702A〜Nとの間で維持される。
【0120】
いくつかの実施形態において、複数のコア2702A〜Nのうち1または複数は、マルチスレッド化することができる。システムエージェント2710は、複数のコア2702A〜Nを調整および操作するそれらのコンポーネントを含む。システムエージェントユニット2710は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含んでもよい。PCUは、複数のコア2702A〜Nおよび統合グラフィックスロジック2708の電力状態を調整するのに必要とされるロジックおよび複数のコンポーネントであってもよく、またはこれらを含んでもよい。ディスプレイユニットは、1または複数の外部接続ディスプレイを駆動するためのものである。
【0121】
複数のコア2702A〜Nは、アーキテクチャ命令セットの観点からは同種または異種であり得る。つまり、複数のコア2702A〜Nのうち2またはそれ以上は、同一の命令セットを実行することができるが、他のものは、当該命令セットのサブセット、または異なる命令セットのみを実行し得る。
【0122】
図16図20は、複数の例示的コンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、携帯用情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、エンベデッドプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯式メディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスのための当技術分野で既知の他の複数のシステム設計および構成も、好適である。一般に、本明細書において開示されるプロセッサおよび/または他の実行ロジックを組み込むことができる多種多様なシステムまたは電子デバイスが、概ね好適である。
【0123】
ここで図16を参照すると、本発明の一実施形態による、システム2800のブロック図が示される。システム2800は、1または複数のプロセッサ2810、2815を含み、1または複数のプロセッサ2810、2815は、コントローラハブ2820に結合され得る。一実施形態において、コントローラハブ2820は、グラフィックスメモリコントローラハブ(GMCH)2890および入力/出力ハブ(IOH)2850(複数の別個のチップ上にあり得る)を含む。GMCH2890は、メモリコントローラおよびグラフィックスコントローラを含み、これらにメモリ2840およびコプロセッサ2845が結合される。IOH2850は、入力/出力(I/O)デバイス2860をGMCH2890に結合する。あるいは、メモリおよび複数のグラフィックスコントローラの1つまたは双方は、(本明細書において説明されるように)プロセッサ内に統合され、メモリ2840およびコプロセッサ2845は、プロセッサ2810に直接に結合され、シングルチップ内のコントローラハブ2820は、IOH2850と結合される。
【0124】
複数の追加のプロセッサ2815の選択的性質は、図16において破線で示される。各プロセッサ2810、2815は、本明細書において説明される複数の処理コアのうち1または複数を含み、いくつかのバージョンのプロセッサ2700であり得る。
【0125】
メモリ2840は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、または2つの組み合わせであってもよい。少なくとも一実施形態については、コントローラハブ2820は、フロントサイドバス(FSB)等のマルチドロップバス、QuickPath相互接続(QPI)等のポイントツーポイントインターフェース、または類似の接続2895を介してプロセッサ2810、2815と通信する。
【0126】
一実施形態において、コプロセッサ2845は、例えば、高スループットMICプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、エンベデッドプロセッサ等の特定用途用プロセッサである。一実施形態において、コントローラハブ2820は、統合グラフィックスアクセラレータを含み得る。
【0127】
アーキテクチャ、マイクロアーキテクチャ、熱、電力消費の特性等を含む、性能の測定基準の範囲の観点において、物理リソース2810、2815の間には様々な差異が存在し得る。
【0128】
一実施形態において、プロセッサ2810は、通常のタイプの複数のデータ処理オペレーションを制御する複数の命令を実行する。複数のコプロセッサ命令が、複数の命令に埋め込まれ得る。プロセッサ2810は、取り付けられたコプロセッサ2845により実行されるべきタイプであるものとして、これらのコプロセッサ命令を認識する。従って、プロセッサ2810は、コプロセッサバスまたは他の相互接続上で、これらのコプロセッサ命令(または複数のコプロセッサ命令を表す複数の制御信号)をコプロセッサ2845に発行する。コプロセッサ2845は、複数の受信済みコプロセッサ命令を受け取り、実行する。
【0129】
ここで図17を参照すると、本発明の実施形態による第1のより具体的な例示的システム2900のブロック図が示される。図17に示されるように、マルチプロセッサシステム2900は、ポイントツーポイント相互接続システムであり、第1のプロセッサ2970、およびポイントツーポイント相互接続2950を介して結合される第2のプロセッサ2980を含む。プロセッサ2970および2980のそれぞれは、いくつかのバージョンのプロセッサ2700であり得る。本発明の一実施形態において、プロセッサ2970および2980はそれぞれ、プロセッサ2810および2815であるが、コプロセッサ2938は、コプロセッサ2845である。別の実施形態において、プロセッサ2970および2980はそれぞれ、プロセッサ2810およびコプロセッサ2845である。
【0130】
統合メモリコントローラ(IMC)ユニット2972および2982をそれぞれ含む、プロセッサ2970および2980が示される。また、プロセッサ2970は、複数のバスコントローラユニットの一部として、ポイントツーポイント(P―P)インターフェース2976および2978を含む。同様に、第2のプロセッサ2980は、P−Pインターフェース2986および2988を含む。プロセッサ2970、2980は、複数のP―Pインターフェース回路2978、2988を用いて、ポイントツーポイント(P―P)インターフェース2950を介して情報を交換し得る。図17に示されるように、IMC2972および2982は、複数のプロセッサをそれぞれのメモリ、すなわち、メモリ2932およびメモリ2934に結合させるが、メモリ2932およびメモリ2934は、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であり得る。
【0131】
プロセッサ2970、2980はそれぞれ、ポイントツーポイントインターフェース回路2976、2994、2986、2998を用いて、個々のP−Pインターフェース2952、2954を介してチップセット2990と情報を交換し得る。チップセット2990は、任意選択で、高性能インターフェース2939を介してコプロセッサ2938と情報を交換してもよい。一実施形態において、コプロセッサ2938は、例えば、高スループットMICプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、エンベデッドプロセッサ等の特定用途用プロセッサである。
【0132】
共有キャッシュ(図示せず)は、どちらかのプロセッサ内または双方のプロセッサの外側に含まれるが、P―P相互接続を介して複数のプロセッサとなおも接続され得、従って、プロセッサが低電力モードに置かれると、どちらかまたは双方のプロセッサのローカルキャッシュ情報は、共有キャッシュ内に格納され得る。チップセット2990は、インターフェース2996を介して第1のバス2916に結合され得る。一実施形態において、第1のバス2916は、周辺構成要素相互接続(PCI)バス、またはPCI Expressバスまたは別の第3世代I/O相互接続バス等のバスであり得るが、本発明の範囲は、そのようには限定されない。
【0133】
図17に示されるように、様々なI/Oデバイス2914は、第1のバス2916を第2のバス2920に結合するバスブリッジ2918と共に第1のバス2916に結合され得る。一実施形態において、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックスアクセラレータまたはデジタル信号処理(DSP)ユニット等)、フィールドプログラマブルゲートアレイ、またはその他のプロセッサ等、1または複数の追加のプロセッサ2915は、第1のバス2916に結合される。一実施形態において、第2のバス2920は、低ピンカウント(LPC)バスであり得る。様々なデバイスは、一実施形態において、例えば、キーボードおよび/またはマウス2922、通信デバイス2927、ならびに複数の命令/コードおよびデータ2930を含み得るディスクドライブもしくは他の大容量ストレージデバイス等のストレージユニット2928を含む第2のバス2920に結合され得る。更に、オーディオI/O2924は、第2のバス2920に結合されてもよい。他の複数のアーキテクチャが可能であることに留意されたい。例えば、図17のポイントツーポイントアーキテクチャに代えて、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装してもよい。
【0134】
ここで図18を参照すると、本発明の実施形態による、第2のより具体的な例示的システム3000のブロック図が示される。図18および図19における複数の同一要素は、複数の同一の参照番号を有し、図17の複数の一定の態様は、図18の他の複数の態様を不明瞭にするのを避けるべく、図18から省略されている。図18は、プロセッサ2970、2980が統合メモリおよびI/O制御ロジック(「CL」)2972および2982をそれぞれ含み得ることを図示する。従って、CL2972、2982は、統合メモリコントローラユニットを含み、I/O制御ロジックを含む。図18は、メモリ2932、2934のみがCL2972、2982に結合されるのみならず、複数のI/Oデバイス3014も制御ロジック2972、2982に結合されることを図示する。複数のレガシーI/Oデバイス3015は、チップセット2990に結合される。
【0135】
ここで図19を参照すると、本発明の実施形態による、SoC3100のブロック図が示される。図15における複数の類似の要素は、同一の参照番号を有する。また、複数の破線ボックスは、より高度なSoCにおける複数の選択的特徴である。図19において、相互接続ユニット3102は、1もしくは複数のコア202A〜Nおよび共有キャッシュユニット2706のセットを含むアプリケーションプロセッサ3110、システムエージェントユニット2710、バスコントローラユニット2716、統合メモリコントローラユニット2714、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、およびビデオプロセッサを含み得るコプロセッサ3120のセットまたは1もしくは複数、スタティックランダムアクセスメモリ(SRAM)ユニット3130、ダイレクトメモリアクセス(DMA)ユニット3132、および1または複数の外部ディスプレイを結合するディスプレイユニット3140に結合される。一実施形態において、コプロセッサ3120は、例えば、ネットワークもしくは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、エンベデッドプロセッサ等の特定用途用プロセッサを含む。
【0136】
本明細書において開示されるメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような複数の実装アプローチの組み合わせで実装され得る。本発明の複数の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性および不揮発性メモリ、ならびに/または複数のストレージ要素を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを有する複数のプログラマブルシステム上で実行する複数のコンピュータプログラムまたはプログラムコードとして実装され得る。
【0137】
図17で図示されるコード2930等のプログラムコードは、複数の命令を入力し、本明細書において開示される複数の関数を実行し、出力情報を生成するべく適用され得る。出力情報は、既知の様式で、1または複数の出力デバイスに適用され得る。本願において、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサ等のプロセッサを有するいずれのシステムも含む。
【0138】
プログラムコードは、処理システムと通信するべく、ハイレベルプロシージャ型またはオブジェクト指向プログラミング言語で実装されてもよい。また、プログラムコードは、所望であれば、アセンブリ言語または機械語で実装されてもよい。実際には、本明細書において説明される複数のメカニズムは、範囲において、いずれの特定のプログラミング言語にも限定されない。いずれの場合にも、言語は、コンパイル型言語またはインタープリタ型言語であってもよい。
【0139】
少なくとも一実施形態の1または複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体上に格納された複数の代表的命令により実装され得、複数の代表的命令は、機械により読み取られると、機械に、本明細書において説明される複数の技術を実行するロジックを作成させる。「IPコア」として既知のそのような複数の表現は、有形機械可読媒体上に格納され、様々な顧客、または実際にロジックまたはプロセッサを作製する複数の製造機械にロードする複数の製造設備に提供され得る。
【0140】
そのような機械可読ストレージ媒体としては、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD―ROM)、書き換え可能コンパクトディスク(CD―RW)、および光磁気ディスク等、その他のタイプのディスクを含むストレージ媒体、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)等のランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、および相変化メモリ(PCM)等の半導体デバイス、磁気もしくは光カード、または複数の電子命令を格納するのに好適なその他のタイプの媒体を含む、機械またはデバイスにより製造または形成される、非一時的で有形な複数の構成の物品が挙げられ得るが、これらに限定されない。
【0141】
従って、本発明の複数の実施形態は、本明細書において説明される複数の構造、回路、装置、プロセッサ、および/またはシステムの特徴を定義する、ハードウェア記述言語(HDL)等の複数の命令または設計データを含む、非一時的で有形の機械可読媒体も含む。そのような複数の実施形態は、プログラム製品とも呼ばれ得る。
【0142】
いくつかの場合に、命令変換器は、ソース命令セットからターゲット命令セットに、命令を変換するべく使用され得る。例えば、命令変換器は、命令を、コアにより処理される1または複数の他の命令にトランスレート(例えば、静的バイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを用いる)、モーフィング、エミュレート、または変換し得る。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装され得る。命令変換器は、プロセッサ上にあってもよく、プロセッサから離れてもよく、または一部がプロセッサ上にあり、一部がプロセッサから離れてもよい。
【0143】
図20は、本発明の複数の実施形態による、ソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令に変換するソフトウェア命令変換器の使用を対比させるブロック図である。図示される実施形態において、命令変換器は、ソフトウェア命令変換器であるが、別法では、命令変換器は、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装され得る。図20は、x86コンパイラ3204を用いてコンパイルされ、少なくとも1つのx86命令セットコア3216を用いるプロセッサによりネイティブに実行され得るx86バイナリコード3206を生成し得る、ハイレベル言語3202のプログラムを示す。少なくとも1つのx86命令セットコア3216を用いるプロセッサは、少なくとも1つのx86命令セットコアを用いるインテル(登録商標)プロセッサと実質的に同一の結果を実現するべく、(1)インテル(登録商標)x86命令セットコアの命令セットの実質的部分、または(2)少なくとも1つのx86命令セットコアを用いるインテル(登録商標)プロセッサ上で起動することを目的とする、複数のオブジェクトコードバージョンの複数のアプリケーションまたは他のソフトウェアを互換的に実行または処理することにより、少なくとも1つのx86命令セットコアを用いるインテル(登録商標)プロセッサと実質的に同一の複数の機能を実行し得るいずれのプロセッサも表す。x86コンパイラ3204は、追加のリンケージ処理を用い、もしくは用いずに、少なくとも1つのx86命令セットコア3216を用いるプロセッサ上で実行され得る、x86バイナリコード3206(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、図20は、代替的な命令セットのコンパイラ3208を用いてコンパイルされ、少なくとも1つのx86命令セットコア3214を用いないプロセッサ(例えば、カルフォルニア州サニーベールのMIPS TechnologyのMIPS命令セットを実行し、および/またはカリフォルニア州サニーベールのARM HoldingのARM命令セットを実行する複数のコアを用いるプロセッサ)によりネイティブに実行され得る、代替的な命令セットバイナリコード3210を生成し得る、ハイレベル言語3202のプログラムを示す。命令変換器3212は、x86バイナリコード3206を、x86命令セットコア3214を用いないプロセッサによりネイティブに実行され得るコードに変換するべく、使用される。この変換済みコードは、代替的な命令セットバイナリコード3210と同一である可能性は低い。これを行うことができる命令変換器は、作製するのが困難なためである。しかし、変換済みコードは、汎用オペレーションを遂行し、代替的な命令セットの複数の命令からなるであろう。従って、命令変換器3212は、エミュレーション、シミュレーション、またはその他の処理により、x86命令セットプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスがx86バイナリコード3206を実行することを可能にする、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。
【0144】
一実施形態によれば、プロセッサは、第1のオペランド、第2のオペランド、および第3のオペランドを有し、第1のオペランドは、4つのSHA状態を格納する第1の格納位置を指定し、第2のオペランドは、複数のSHA1メッセージ入力を、第5のSHA1状態と組み合わせて格納する第2の格納位置を指定する、SHA1ハッシュアルゴリズムを処理する第1の命令を受信するための命令デコーダを備える。プロセッサは、命令デコーダに結合され、第1の命令に応答して、第3のオペランドの指定された組み合わせの論理関数を用いて、第1および第2のオペランドから得られたSHA1状態およびメッセージ入力に、複数のSHA1ラウンドオペレーションの少なくとも4つのラウンドを実行する実行ユニットを更に備える。第1のオペランドおよび第2のオペランドは、少なくとも128ビットを有する第1のレジスタを指定する。第1の格納位置は、複数のSHA1状態A、B、C、およびDを格納する。第5のSHA1状態は、SHA1状態Eである。複数のSHA1ラウンドオペレーションのうち少なくとも4つのラウンドの結果は、第1のオペランドにより示される第1の格納位置に格納される。結果は、新しい複数のSHA1状態A、B、C、およびDを表す。命令デコーダは、第4の格納位置を指定する第4のオペランドおよび第5の格納位置を指定する第5のオペランドを有する、第2の命令を受信し、実行ユニットは、第2の命令に応答して、第4の格納位置から得られた先行する複数のメッセージ入力の第1のセット、および第5の格納位置から得られた先行する複数のメッセージ入力の第2のセットに基づいて、複数のメッセージスケジューリングオペレーションの第1の部分を実行し、中間結果を第4の格納位置に格納するように構成される。命令デコーダは、第6の格納位置を指定する第6のオペランドおよび第7の格納位置を指定する第7のオペランドを有する第3の命令を受信し、実行ユニットは、第3の命令に応答して、第6の格納位置から得られた先行する複数のメッセージ入力の第3のセットおよび第7の格納位置から得られた先行する複数のメッセージ入力の第4のセットと組み合わせた中間結果に基づいて、複数のメッセージスケジューリングオペレーションの第2の部分を実行し、SHA1アルゴリズムの次の複数のラウンド中に実行されるSHA1アルゴリズムの複数のラウンドオペレーションのために次の複数のメッセージ入力を生成するように構成される。
【0145】
上記の詳細な説明のいくつかの部分は、コンピュータメモリ内のデータビットに対する複数のオペレーションの複数のアルゴリズムおよび表現の観点から提示されている。これらのアルゴリズムの記載および表現は、他の当業者に作業の実態を最も有効に伝達するべくデータ処理の当業者により用いられる方法である。アルゴリズムは、ここでは、通常、所望の結果をもたらす、複数のオペレーションの自己矛盾のないシーケンスと考えられる。複数のオペレーションは、複数の物理量の物理的操作を要求するものである。
【0146】
しかし、これらおよび類似の用語の全ては、適切な物理量に関連するものであり、これらの量に適用される便宜的標記にすぎないことを念頭に置かれたい。上述から明らかなものとして具体的に記述されない限り、本明細書全体を通して、以下の特許請求の範囲において記載されるもの等の用語を使用する論述は、コンピュータシステムの複数のレジスタおよびメモリ内で物理(電子)量として表されるデータを操作し、複数のコンピュータシステムメモリもしくはレジスタ、または他のそのような情報ストレージ送信装置またはディスプレイデバイス内で物理量として同様に表される他のデータに変換する、コンピュータシステムまたは類似の電子コンピューティングデバイスのアクションおよび複数の処理を指すことを理解されたい。
【0147】
複数の図において示される複数の技術は、1または複数の電子デバイス上に格納され、実行されるコードおよびデータを用いて実装され得る。複数のそのような電子デバイスは、非一時的コンピュータ可読ストレージ媒体(例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、リードオンリメモリ、フラッシュメモリデバイス、相変化メモリ)および一時的コンピュータ可読伝送媒体(例えば、電気的、光、音響、もしくは搬送波、赤外線信号、デジタル信号等の他の形態の伝搬信号)等のコンピュータ可読媒体を用いて、(内的に、および/またはネットワークを介する他の複数の電子デバイスを用いて)コードおよびデータを格納および通信する。
【0148】
上記の複数の図に示される複数の処理および方法は、ハードウェア(例えば、回路、専用ロジック等)、ファームウェア、ソフトウェア(例えば、非一時的コンピュータ可読媒体上で実施される)、または双方の組み合わせを備える処理ロジックにより実行されてもよい。複数の処理または方法は、いくつかのシーケンシャルオペレーションの観点から説明されるが、説明される複数のオペレーションのうちいくつかは、異なる順序で実行され得ることを理解されたい。更に、いくつかのオペレーションは、連続してではなく、並列に実行され得る。
【0149】
上記の明細書において、本発明の複数の実施形態は、特定の例示的実施形態を参照して説明されている。以下に記載される本発明の広い趣旨および範囲を逸脱することなく、これに様々な変更が行われ得ることは明白であろう。従って、明細書および複数の図面は、限定的意味ではなく、例示的意味で顧慮されるものである。
図1A
図1B
図1C
図2
図3
図4
図5
図6
図7
図8
図9A
図9B
図9C
図10A
図10B
図11A
図11B
図11C
図11D
図12
図13A
図13B
図14A
図14B
図15
図16
図17
図18
図19
図20