【文献】
Asger Hoedt,"Morton Codes",[online],2012年10月19日,[2019年10月11日検索],インターネット<URL:http://asgerhoedt.dk/?p=276>,URL,http://asgerhoedt.dk/?p=276
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0022】
以下の説明では、以下で説明される実施形態の完全な理解を提供するために、数多くの具体的な詳細が説明の目的で記載される。しかしながら、当業者には、この実施形態がこれら具体的な詳細の一部を伴わずに実践することができることが明らかになるであろう。他の事例では、実施形態の根本原理を不明瞭にすることを回避するために、よく知られている構造およびデバイスがブロック図の形態で示される。1つの実施形態において、インテルアーキテクチャ(IA:Intel Architecture)を拡張したアーキテクチャの拡張が説明されるが、根本原理は、いかなる特定のISAにも限定されない。
【0023】
ベクトルおよびSIMD命令の概要
或るタイプのアプリケーションは、しばしば、多数のデータアイテムに対して同じ演算(「データパラレリズム」と称される)を行うことを必要とする。シングルインストラクションマルチプルデータ(SIMD:Single Instruction Multiple Data)は、プロセッサに、複数のアイテムに対して1つの演算を行わせる、1つのタイプの命令を指す。SIMD技術は、レジスタのビットを、各々が個別の値を表すいくつかの固定サイズのデータ要素に論理的に分割することができるプロセッサに特に適している。例えば、256ビットレジスタの中のビットは、4つの別々の64ビットパックドデータ要素(クワッドワード(Q)サイズデータ要素)、8つの別々の32ビットパックドデータ要素(ダブルワード(D)サイズデータ要素)、16個の別々の16ビットパックドデータ要素(ワード(W)サイズデータ要素)、または32個の別々の8ビットデータ要素(バイト(B)サイズデータ要素)として演算されるソースオペランドとして指定することができる。このタイプのデータは、「パックド」データタイプまたは「ベクトル」データタイプと称され、このデータタイプのオペランドは、パックドデータオペランドまたはベクトルオペランドと称される。換言すれば、パックドデータ項目またはベクトルは、一連のパックドデータ要素を指し、パックドデータオペランドまたはベクトルオペランドは、SIMD命令(パックドデータ命令またはベクトル命令としても知られている)のソースまたはデスティネーションオペランドである。
【0024】
x86、MMX(商標)、ストリーミングSIMD拡張(SSE:Streaming SIMD Extensions)、SSE2、SSE3、SSE4.1、およびSSE4.2命令を含む命令セットを有する、Intel(登録商標)Core(商標)プロセッサによって採用されたものなどのSIMD技術は、アプリケーション性能のかなりの向上を可能にした。アドバンストベクトル拡張(AVX:Advanced Vector Extensions)(AVX1およびAVX2)と称され、ベクトル拡張(VEX:Vector Extensions)符号化スキームを使用する、追加の一組のSIMD拡張がリリースされている(例えば、Intel(登録商標)64およびIA−32 アーキテクチャズ・ソフトウェア・デベロッパズ・マニュアル(Architectures Software Developers Manual)、2014年9月、およびIntel(登録商標)Intel(登録商標)アーキテクチャ・インストラクション・セット・エクステンションズ・プログラミング・リファレンス(Architecture Instruction Set Extensions Programming Reference)、2014年9月を参照されたい)。
【0025】
Z曲線インデクシングの概要
図1Aは、例示される8×8マトリクス100の要素ごとの、Z順序キーマッピングを例示する。示される各要素内で、より上位のビットは、最上部にあり、より下位のビットは、最底部にある。Z曲線順序付けの1つの実装形態は、元々のインデックスの各々のビットを各次元にインターリーブする(例えば、シャッフルする)ことによって行われる。例示されるマトリクス100の各要素に示されるZ順序付けは、マトリクス100の中の各要素の次元_1 101および次元_2 102の値のビットごとのインターリーブによって生成される。
【0026】
例えば、座標[2,3](例えば、次元_1 101のバイナリ010および次元_2 102のバイナリ011)での要素のZ曲線インデックスは、各次元の座標のビットをインターリーブすることによって決定することができ、その結果、001101(例えば、0x0D)のバイナリのZ曲線インデックスとなる。例示的なZ曲線インデックス値は、座標[2,3]でのマトリクス要素が、例示的なマトリクス100のZ順序曲線の(10からインデックスを付けて)13番目のインデックスであることを示す。
【0027】
図1Bは、Z順序で要素のマトリクス要素を順次的に追跡することによって作成されるZ曲線200のグラフ図である。
図1Bには、例示的な目的で、単純な2DのZ曲線および関連付けられるインデックスが示される。限られたビット長を有する限られた数の座標の場合は、予め計算した値を記入したルックアップテーブルを使用して、一組の座標のZ曲線インデックスを素早く決定することができる。これは、座標の数およびサイズが増加するにつれて非実用的になり得る。1つの実施形態において、プロセッサは、大きいデータセットを解析するときに、3DのZ曲線インデックスを計算して、計算オーバヘッドを低減させ、アプリケーション性能を向上させるための32ビットおよび64ビットの機械レベル命令を含む。
【0028】
3DのZ曲線インデックスを計算するための機械レベル命令
1つの実施形態において、機械命令は、プロセッサに、入力された座標値に対してビット操作演算を行うことによって3DのZ曲線インデックスを計算させる。
【0029】
下の表1は、例示的な32ビット3DのZ曲線インデックスのビット演算を示す。
【表1】
【0030】
表1に示されるように、32ビットz曲線インデックス命令は、各ソース座標の10個の下位ビットを32ビットデスティネーションの中へシャッフルする。1つの実施形態において、各ソースの10個の下位ビットは、1ソースあたり3つのビットストライドおよびソース間の1つのビットオフセットを伴うデスティネーションに交互に分配され、よって、ビットは、指定範囲内で、ゼロビットに、次いで2つおきのビットに分配される。例えば、src1ビットは、ビット0、3、6、...、27に分配され、src2ビットは、ビット1、4、7、...、28に分配され、src3ビットは、ビット2、5、8、...、29に分配される。
【0031】
下の表2は、64ビットの3DのZ曲線インデックス命令のビット演算を示す。
【表2】
【0032】
表2に示されるように、64ビットz曲線インデックス命令は、各ソース座標の20個の下位ビットを64ビットデスティネーションの中へシャッフルする。1つの実施形態において、各ソースの20個の下位ビットは、1ソースあたり3つのビットストライドおよびソース間の1つのビットオフセットを伴うデスティネーションに交互に分配され、よって、ビットは、指定範囲内で、ゼロビットに、次いで2つおきのビットに分配される。例えば、src1ビットは、ビット0、3、6、...、57に分配され、src2ビットは、ビット1、4、7、...、58に分配され、src3ビットは、ビット2、5、8、...、59に分配される。
【0033】
32ビットZ曲線インデックスを算出するための例示的な高レベル疑似コードは、下の表3に示される。64ビットZ曲線インデックスを算出するための例示的な高レベル疑似コードは、下の表4に示される。疑似コードは、上の表1および表2に示されるビット分配を行うために使用することができる、例示的な高レベル論理を明示する。
【表3】
【表4】
【0034】
図2A〜2Bは、一実施形態による、ハードウェアZ曲線インデックスの実装形態のための例示的なマルチステージ論理を例示する。
図2Aは、XORゲート212と、シフタ回路214と、ANDゲート216とを含む論理の単一のステージ210を示す。ソース入力202は、ソースオペランドまたは以前の論理ステージからの入力とすることができる。一組の一時レジスタ(例えば、temp_A 204、temp_B 206)を使用して、制御値を供給し、ここで、temp_A 204は、シフト値をシフタ回路に供給し、temp_B 206は、データがステージ_out218を介して出力される前に適用されるビットマスクを供給する。ステージ_out218の値は、最終ステージを除いて、論理ステージごとにSRC202を供給する。最終ステージについて、ステージ_out218は、ソース(例えば、SRC202)として提供される初期座標に対応するデスティネーション出力の一部分である。
【0035】
図2Bは、一実施形態による、3DのZ曲線インデックス命令を実装するためのマルチステージ論理配設のブロック図を示す。そのような実施態様において、プロセッサは、各ソース入力に対して論理演算を行い、1座標あたりの構成要素を単一の出力に組み合わせるように構成される、実行ユニットを含む。1つの実施形態において、論理の単一ステージ210の多数のインスタンス220(例えば、32ビットについて220A〜E、64ビットについて220A〜F)は、単一入力座標の3DのZ曲線インデックスの一部分を計算するように配設される。最終ステージ以外の全てのステージ_out218は、その後のステージのソースを提供する。最終ステージのステージ_out218は、単一の初期入力座標と関連付けられるZ曲線インデックスの一部分を提供する。1つの実施形態において、それぞれの座標の出力は、次いで、デスティネーションレジスタに出力する前に組み合わせられる。
【0036】
各Z曲線インデックスのそれぞれの構成要素を計算するための演算は、実行ユニットにおいて直列にまたは並列に行うことができる。例えば、Z曲線インデックスを計算するための単一のマクロ命令を、多数のマイクロ演算に復号化することができ、各マイクロ演算は、1つまたは複数の実行ユニットに、個別の中間値を組み合わせる前に、ソース座標ごとに演算を行わせる。
【0037】
図3は、一実施形態による、32ビットの3DのZ曲線インデックス命令を実装するための、マルチステージ論理配設のブロック図を示す。1つの実施形態において、
図2Aに示される論理210の多数のインスタンスは、
図2Bに示される論理ステージ220A〜Eによって示されるように結合することができる。マルチステージ論理は、座標ごとにZ曲線インデックスビットシャッフルを行うために使用することができる。第1の論理ステージ220Aは、32ビットソース入力302を受け付け、ゼロ左シフト304および0x000003ffのマスク値306を有する。第1の論理ステージ220Aの出力308は、第2の論理ステージ220Bのソースとして提供され、論理ステージ220Bは、入力として、16ビット左シフト314および0xff0000ffのマスク値316を受け付ける。第2の論理ステージ220Bの出力318は、第3の論理ステージ220Cのソースとして提供され、第3の論理ステージ220Cは、入力として、8ビット左シフト324および0x0300f00fのマスク値326を受け付ける。第3の論理ステージ220Cの出力328は、第4の論理ステージ220Dのソースとして提供され、第4の論理ステージ220Dは、入力として、4ビット左シフト334および0x030c30c3のマスク値336を受け付ける。第4の論理ステージ220Dの出力338は第5の論理ステージ220Eのソースとして提供され、第5の論理ステージ220Eは、入力として、2ビットの左シフト344および0x030c30c3のマスク値346を受け付ける。第5の論理ステージ220Eの出力348は、シフトされ、他のソース座標の処理出力と組み合わせられ、そして3DのZ曲線インデックスの結果として返される。各ソース入力は、類似の論理パイプラインの処理を受ける。1つの実施形態において、入力ごとのマイクロ演算は、並列に行われる。
【0038】
図4は、一実施形態による、64ビットの3DのZ曲線インデックス命令を実装するための、マルチステージ論理配設のブロック図を示す。
図2Bに示される各論理ステージ220A〜Fは、座標ごとにZ曲線インデックスビットシャッフルを行うために使用することができる。1つの実施形態において、論理ステージは、少なくとも64ビットの精度を有する演算を行って、64ビット出力を生成するように構成される。第1の論理ステージ220Aは、64ビットソース入力402を受け付け、ゼロ左シフト404および0x000fffffのマスク値406を有する。第1の論理ステージ220Aの出力408は、第2の論理ステージ220Bのソースとして提供され、第2の論理ステージ220Bは、入力として、32ビット左シフト414および0x1f00000000ffffのマスク値416を受け付ける。第2の論理ステージ220Bの出力418は、第3の論理ステージ220Cのソースとして提供され、第3の論理ステージ220Cは、入力として、16ビット左シフト424および0x1f0000ff0000ffのマスク値426を受け付ける。第3の論理ステージ220Cの出力428は、第4の論理ステージ220Dのソースとして提供され、第4の論理ステージ220Dは、入力として、8ビット左シフト434および0x100f00f00f00f00fのマスク値436を受け付ける。第4の論理ステージ220Dの出力438は、第5の論理ステージ220Eのソースとして提供され、第5の論理ステージ220Eは、入力として、4ビット左シフト444および0x10c30c30c30c30c3のマスク値446を受け付ける。第5の論理ステージ220Eの出力448は、第5の論理ステージ220Eのソースとして提供され、入力として、2ビットの左シフト454および0x1249249249249249のマスク値456を受け付ける。第6の論理ステージ220Fの出力458は、シフトされ、他のソース座標の出力と組み合わせられ、そして3DのZ曲線インデックスとして出力される。各ソース入力は、類似の論理パイプラインの処理を受ける。1つの実施形態において、入力ごとのマイクロ演算は、並列に行われる。
【0039】
図5は、一実施形態による、3つの座標から3DのZ曲線インデックスを計算する命令のためのオペランドおよび論理のブロック図である。命令の一実施形態は、3つのソースオペランドを含む。すなわち、X次元と関連付けられる第1のソースオペランド502、Y次元と関連付けられる第2のソースオペランド504、およびZ次元と関連付けられる第3のソースオペランド506である。一実施形態によれば、マクロ命令レベルにおいて、ソースオペランドは、それぞれの座標値を記憶するレジスタ、それぞれの座標値を記憶するメモリアドレス、または即値座標値である。オペランドと関連付けられる座標が記憶されるマイクロ命令レベルにおいて、実行ユニットによって処理される前に、プロセッサレジスタに記憶される。1つの実施形態において、マルチプレクサ(例えば、mux508)は、ソースレジスタをプロセッサ実行ユニットのz順序論理510に結合させ、ソース座標からZ順序インデックスを計算する。32ビット前出力レジスタおよび最終結果レジスタの例示的なビットレイアウトの表現は、下の表5に示される。
【表5】
【0040】
上の表5は、ソース入力ごとの32ビット前出力を示す。表5の各x、y、またはzの値は、示された座標値の単一ビットを示し、最下位ビットを右側に、最上位ビットを左側に有する。1つの実施形態において、SRC1'前出力値は、SRC1 502によって示される値から生成され、SRC2'前出力値は、SRC2 504によって示される値から生成され、SRC3'前出力値は、SRC3 506によって示される値から生成される。そのような実施形態において、Z順序インデックスは、SRC2'前出力を1ビットだけ左にシフトし、SRC3'前出力を2ビットだけ左にシフトし、そして、シフトした前出力値に対してビット単位のOR演算を行うことによって作成される。計算したインデックスは、次いで、命令のデスティネーションオペランド512によって指定されるDEST場所に出力される。1つの実施形態において、示されるレジスタは、SIMD/ベクトルレジスタであり、命令は、ベクトル演算を行うためのSIMD命令である。
【0041】
図6は、一実施形態による、3DのZ曲線インデックス命令を処理するためのフロー図である。ブロック602に示されるように、命令パイプラインは、プロセッサが単一のz曲線インデックス命令をフェッチして、3DのZ曲線インデックスを計算するときに開始する。命令は、ブロック602でさらに示されるように、第1、第2、および第3のソースオペランド、ならびにデスティネーションオペランドを有する。
【0042】
ブロック604に示されるように、プロセッサは、Z曲線インデックス命令を復号化された命令に復号化する。1つの実施形態において、復号化された命令は、単一の演算である。1つの実施形態において、復号化された命令は、命令の各サブ要素を行うための1つまたは複数の論理的マイクロ演算を含む。マイクロ演算は、実行ユニットなどのプロセッサの構成要素に、命令を実装するための様々な演算を行わせることができるように、ハードワイヤードまたはマイクロコード演算とすることができる。
【0043】
1つの実施形態において、ブロック606に示されるように、復号化された命令は、実行ユニットなどのプロセッサの構成要素に、ソースオペランドによって示されるソースオペランド値をフェッチするための演算を含む、様々な演算を行わせる。様々な実施形態において、ソースオペランドは、レジスタ、メモリアドレス、または即値を含むことができる。マイクロ演算は、メモリから値をフェッチすること、または内部プロセッサレジスタに値をロードすることができる。
【0044】
ブロック608に示されるように、1つまたは複数のプロセッサ実行ユニットは、復号化された命令を実行して、ソース座標値の構成ビットをインターリーブすることによって、3DのZ曲線インデックスを計算する。1つの実施形態において、Z曲線インデックスは、各ソース値の10個の下位ビットを、長さが少なくとも30ビットのZ曲線インデックスにインターリーブすることによって計算される。1つの実施形態において、Z曲線インデックスは、各ソース値の20個の下位ビットを、長さが少なくとも60ビットのZ曲線インデックスにインターリーブすることによって計算される。
【0045】
ブロック610に示されるように、プロセッサは、Z曲線インデックス命令の結果をデスティネーションオペランドによって示される場所に記憶する。32ビット命令の場合、Z曲線インデックスは、32ビット出力レジスタに記憶される。64ビット命令の場合、Z曲線インデックスは、64ビット出力レジスタに記憶される。
【0046】
本明細書で説明される実施形態は、X、Y、およびZ座標を使用した演算を指し、該座標は、3次元空間内の位置を定義するために使用されるデカルト座標である。当業者は、使用される座標は、例示的なものであり、X、Y、およびZ座標は、全般的に、Z曲線順序付けを適用することができる3次元空間における第1、第2、または第3の次元の場所を定義するために使用される、任意の一組の座標を指すことを理解するであろう。
【0047】
本明細書で説明される実施形態は、処理装置またはデータ処理システムで実装することができる。上述の説明では、多数の具体的な詳細を、本明細書で説明される実施形態の完全な理解を提供する順序で記載した。しかしながら、当業者に明らかになるように、実施形態は、これらの具体的な詳細のいくつかを伴わずに実践することができる。説明されるアーキテクチャ特徴のいくつかは、インテルアーキテクチャ(IA:Intel(登録商標) Architecture)に対する拡張である。しかしながら、根本原理は、任意の特定のISAに限定されない。
【0048】
本明細書で説明される命令の実施形態は、ソース座標値内の上位ビットまたは下位ビットを演算する。本明細書で説明されるように、上位ビットおよび下位ビットは、バイトがコンピュータメモリに記憶されたときにデータワードを形成する該バイトを解釈するために使用される規定とは関係なく、最上位ビットおよび最下位ビットとして定義される。換言すれば、下位ビットまたは最下位ビットは、使用中のバイト順序の規定に従って、データワード内の最小アドレスまたは最大アドレスに記憶することができる。
【0049】
より完全な理解を提供するために、例示的な命令フォーマット、プロセッサコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャの概要が以下で提供される。
【0050】
例示的な命令フォーマット
本明細書で説明される命令(複数可)の実施形態は、異なるフォーマットで具現化することができる。加えて、例示的なシステム、アーキテクチャ、およびパイプラインが以下で詳述される。命令(複数可)の実施形態は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行することができるが、詳述されるものに限定されない。
【0051】
ベクトルフレンドリー命令フォーマットは、ベクトル命令(例えば、ベクトル演算に特有の或るフィールドがある)に適した命令フォーマットである。実施形態は、ベクトルおよびスカラ演算の両方がベクトルフレンドリー命令フォーマットを通じてサポートされているように説明されるが、代替の実施形態は、ベクトルフレンドリー命令フォーマットを通じてサポートされるベクトル演算だけを使用する。
【0052】
図7A〜7Bは、一実施形態による、一般的ベクトルフレンドリー命令フォーマットおよびその命令テンプレートを例示するブロック図である。
図7Aは、一実施形態による、一般的ベクトルフレンドリー命令フォーマットおよびそのクラスA命令テンプレートを例示するブロック図であり、一方で、
図7Bは、一実施形態による、一般的ベクトルフレンドリー命令フォーマットおよびそのクラスB命令テンプレートを例示するブロック図である。具体的には、クラスAおよびクラスB命令テンプレートに対して定義される一般的ベクトルフレンドリー命令フォーマット700は、どちらのクラスも、非メモリアクセス705の命令テンプレートおよびメモリアクセス720の命令テンプレートを含む。ベクトルフレンドリー命令フォーマットのコンテキストにおける「一般的」という用語は、いかなる特定の命令セットにも結び付けられていない命令フォーマットを指す。
【0053】
実施形態は、ベクトルフレンドリー命令フォーマットが、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バイトのベクトルオペランド)を、サポートする。
【0054】
図7AのクラスA命令テンプレートは、1)非メモリアクセス705の命令テンプレート内に、非メモリアクセスのフルラウンド制御タイプ演算710の命令テンプレート、および非メモリアクセスのデータ変換タイプ演算715の命令テンプレートが示されていること、ならびに2)メモリアクセス720の命令テンプレート内に、メモリアクセスの一時的725命令テンプレート、およびメモリアクセスの非一時的730命令テンプレートが示されていること、を含む。
図7BのクラスB命令テンプレートは、1)非メモリアクセス705の命令テンプレート内に、非メモリアクセスの書き込みマスク制御の部分的ラウンド制御タイプ演算712の命令テンプレート、および非メモリアクセスの書き込みマスク制御のvsizeタイプ演算717の命令テンプレートが示されていること、ならびに2)メモリアクセス720の命令テンプレート内に、メモリアクセスの書き込みマスク制御727の命令テンプレートが示されていること、を含む。
【0055】
一般的ベクトルフレンドリー命令フォーマット700は、
図7A〜7Bに例示される順序で、以下に列記される以下のフィールドを含む。
【0056】
フォーマットフィールド740−このフィールドの特定の値(命令フォーマット識別子の値)は、ベクトルフレンドリー命令フォーマットを、すなわち、命令ストリームのベクトルフレンドリー命令フォーマットにおける命令の発生を一意的に特定する。したがって、このフィールドは、一般的ベクトルフレンドリー命令フォーマットだけを有する命令セットには必要でない、という意味で随意である。
【0057】
ベース演算フィールド742−そのコンテンツは、異なるベース演算を識別する。
【0058】
レジスタインデックスフィールド744−そのコンテンツは、直接またはアドレス生成を通して、ソースの場所およびデスティネーションオペランドがレジスタに、またはメモリにあることを指定する。これらは、P×Q(例えば、32×512、16×128、32×1024、64×1024)のレジスタファイルからN個のレジスタを選択するための十分な数のビットを含む。1つの実施形態において、Nは、最大で3つのソースおよび1つのデスティネーションレジスタとすることができるが、代替の実施形態は、より多いまたはより少ないソースおよびデスティネーションレジスタをサポートすることができる(例えば、最大2つのソースをサポートすることができ、これらのソースのうちの1つがデスティネーションとしても機能する。最大で3つのソースをサポートすることができ、これらのソースのうちの1つがデスティネーションとしても機能する。また、最大で2つのソースおよび1つのデスティネーションをサポートすることができる)。
【0059】
修飾子フィールド746−そのコンテンツは、非メモリアクセス705の命令テンプレートとメモリアクセス720の命令テンプレートとの間で、メモリアクセスするものと、そうでないものを指定する命令の、一般的ベクトル命令フォーマットにおける発生を識別する。メモリアクセス演算は、メモリ階層に対する読み取りおよび/または書き込みを行い(いくつかの場合では、レジスタの値を使用してソースおよび/またはデスティネーションアドレスを指定し)、一方で、非メモリアクセス演算は、これらを行わない(例えば、ソースおよびデスティネーションがレジスタである)。1つの実施形態において、このフィールドはまた、メモリアドレス計算を行うために、3つの異なる方法から選択するが、代替の実施形態は、メモリアドレス計算を行うためのより多い、より少ない、または異なる方法をサポートすることができる。
【0060】
拡大演算フィールド750−そのコンテンツは、ベース演算に加えて、様々な異なる演算のうちのどれを行うのかを識別する。このフィールドは、コンテキストに特有である。本発明の1つの実施形態において、このフィールドは、クラスフィールド768、アルファフィールド752、およびベータフィールド754に分割される。拡大演算フィールド750は、共通の演算グループを、2つ、3つ、または4つの命令ではなく、単一の命令で行うことを可能にする。
【0061】
スケールフィールド760−そのコンテンツは、メモリアドレス生成のための(例えば、2
scale*index+baseを使用するアドレス生成のための)インデックスフィールドのコンテンツのスケーリングを可能にする。
【0062】
変位フィールド762A−そのコンテンツは、(例えば、2
scale*index+base+displacementを使用するアドレス生成のための)メモリアドレス生成の一部として使用される。
【0063】
変位係数フィールド762B(変位係数フィールド762Bの上に変位フィールド762Aを直接並置することは、一方または他方が使用されることを示すことに留意されたい)−そのコンテンツは、アドレス生成の一部として使用され、メモリアクセス(N)のサイズによってスケーリングされる変位係数を指定し、ここで、Nは、(例えば、2
scale*index+base+scaled displacementを使用するアドレス生成のための)メモリアクセスにおけるバイト数である。冗長な下位ビットは無視され、それ故に、変位係数フィールドのコンテンツは、有効アドレスを算出する際に使用される最終変位を生成するために、メモリオペランドの総サイズ(N)が乗算される。Nの値は、フルオペコードフィールド774(後に本明細書で説明される)およびデータ操作フィールド754Cに基づいて、実行時にプロセッサハードウェアによって決定される。変位フィールド762Aおよび変位係数フィールド762Bは、非メモリアクセス705の命令テンプレートに使用されない、および/または異なる実施形態は、これら2つのうちの1つだけを実装することができる、または全く実装しない場合がある、という意味で随意である。
【0064】
データ要素幅フィールド764−そのコンテンツは、(いくつかの実施形態では、すべての命令について、他の実施形態では、命令のいくつかだけについて)いくつかのデータ要素幅のうちのどれを使用するのかを識別する。このフィールドは、1つだけのデータ要素幅がサポートされる、および/またはデータ要素幅がオペコードのいくつかの態様を使用してサポートされる場合に、該フィールドが必要でない、という意味で随意である。
【0065】
書き込みマスクフィールド770−そのコンテンツは、データ要素位置ごとに、デスティネーションベクトルオペランドの中のそのデータ要素位置がベース演算および拡大演算の結果を反映するかどうかを制御する。クラスA命令テンプレートは、マージング−書き込みマスキングをサポートし、一方で、クラスB命令テンプレートは、マージング−およびゼロ化−書き込みマスキングの両方をサポートする。マージするときに、ベクトルマスクは、デスティネーションの任意の一組のベクトルマスクを、(ベース演算および拡大演算によって指定される)任意の演算の実行中に、更新から保護することを可能にし、他の1つの実施形態では、対応するマスクビットが0を有する場合に、デスティネーションの各要素の古い値を保存する。対照的に、ゼロ化するときに、ベクトルマスクは、デスティネーションの任意の一組のベクトルマスクを、(ベース演算および拡大演算によって指定される)任意の演算の実行中に、ゼロ化することを可能にし、1つの実施形態では、対応するマスクビットが0の値を有するときに、デスティネーションの要素が0に設定される。この機能性のサブセットは、行われている演算のベクトル長(すなわち、最初から最後の1つまでの、修正されている要素のスパン)を制御する能力であるが、修正される要素が連続であることは必要でない。したがって、書き込みマスクフィールド770は、ロード、記憶、算術、論理、その他を含む、部分的なベクトル演算を可能にする。実施形態は、書き込みマスクフィールド770のコンテンツが、使用される書き込みマスクを含むいくつかの書き込みマスクレジスタのうちの1つを選択すること(したがって、書き込みマスクフィールド770のコンテンツが、実行されるマスキングを間接的に特定すること)が説明されるが、代替の実施形態は、代わりに、または加えて、マスク書き込みフィールド770のコンテンツが、実行されるマスキングを直接的に指定することを可能にする。
【0066】
即値フィールド772−そのコンテンツは、即値の仕様を可能にする。このフィールドは、即値をサポートせず、かつ即値を使用しない命令には存在しない、一般的ベクトルフレンドリーフォーマットの実装形態に存在しない、という意味で随意である。
【0067】
クラスフィールド768−そのコンテンツは、命令の異なるクラスを識別する。
図7A〜7Bを参照すると、このフィールドのコンテンツは、クラスAおよびクラスBの命令から選択する。
図7A〜7Bにおいて、角に丸みのある四角は、特定の値がフィールドに存在することを示すために使用される(例えば、
図7A〜7Bにおいて、クラスフィールド768について、それぞれ、クラスA 768AおよびクラスB 768B)。
【0068】
クラスAの命令テンプレート
クラスAの非メモリアクセス705の命令テンプレートの場合において、アルファフィールド752は、RSフィールド752Aとして解釈され、そのコンテンツは、異なる拡大演算タイプのうちのどれを行うのかを識別し(例えば、ラウンド752A.1およびデータ変換752A.2が、それぞれ、非メモリアクセスのラウンドタイプ演算710、および非メモリアクセスのデータ変換タイプ演算715の命令テンプレートについて指定される)、一方で、ベータフィールド754は、指定されたタイプの演算のうちのどれを行うのかを識別する。非メモリアクセス705の命令テンプレートにおいて、スケールフィールド760、変位フィールド762A、および変位スケール762Bは、存在しない。
【0069】
非メモリアクセス命令テンプレート−フルラウンド制御タイプ演算
非メモリアクセスのフルラウンド制御タイプ演算710の命令テンプレートにおいて、ベータフィールド754は、ラウンド制御フィールド754Aとして解釈され、そのコンテンツ(複数可)は、静的ラウンド処理を提供する。説明される実施形態において、ラウンド制御フィールド754Aは、全浮動小数点例外抑制(SAE:suppress all floating point exception)フィールド756およびラウンド演算制御フィールド758を含むが、代替の実施形態は、これらのコンセプトの両方をサポートすることができ、また、同じフィールドの中へ符号化することができ、またはこれらのコンセプト/フィールドのうちの一方または他方を有することができる(例えば、ラウンド演算制御フィールド758だけを有することができる)。
【0070】
SAEフィールド756−そのコンテンツは、例外イベントの報告を無効にするかどうかを識別し、SAEフィールド756のコンテンツが、抑制が有効であることを示すときに、所与の命令は、いかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも起こさない。
【0071】
ラウンド演算制御フィールド758−そのコンテンツは、一群のラウンド処理演算のうちのどれを行うのかを識別する(例えば、切り上げ、切り捨て、ゼロに向けたラウンド、および最も近方へのラウンド)。したがって、ラウンド演算制御フィールド758は、命令単位ごとに、ラウンド処理モードの変更を可能にする。プロセッサがラウンド処理モードを指定するための制御レジスタを含む本発明の一実施形態において、ラウンド演算制御フィールド750のコンテンツは、そのレジスタ値をオーバーライドする。
【0072】
非メモリアクセス命令テンプレート−データ変換タイプ演算
非メモリアクセスデータ変換タイプ演算715の命令テンプレートにおいて、ベータフィールド754は、データ変換フィールド754Bとして解釈され、そのコンテンツは、いくつかのデータ変換(例えば、非データ変換、スウィズル、ブロードキャスト)のうちのどれを行うのかを識別する。
【0073】
クラスAのメモリアクセス720の命令テンプレートの場合において、アルファフィールド752は、エビクションヒントフィールド752Bとして解釈され、そのコンテンツは、エビクションヒントのうちのどれを使用するのかを識別し(
図7Aでは、一時的752B.1および非一時的752B.2が、それぞれ、メモリアクセスの一時的725命令テンプレート、およびメモリアクセスの非一時的730命令テンプレートについて指定される)、一方で、ベータフィールド754は、データ操作フィールド754Cとして解釈され、そのコンテンツは、いくつかのデータ操作演算(プリミティブとしても知られる)のうちのどれを行うのかを識別する(例えば、非操作、ブロードキャスト、ソースのアップコンバージョン、およびデスティネーションのダウンコンバージョン)。メモリアクセス720の命令テンプレートは、スケールフィールド760を含み、随意に、変位フィールド762Aまたは変位スケールフィールド762Bを含む。
【0074】
ベクトルメモリ命令は、変換サポートによって、メモリからのベクトルのロードおよび該メモリへのベクトルの記憶を行う。通常のベクトル命令と同様に、ベクトルメモリ命令は、データ要素的な様式で、メモリとの間でデータを送信し、実際に送信される要素が、書き込みマスクとして選択されるベクトルマスクのコンテンツによって指示される。
【0075】
メモリアクセス命令テンプレート−一時的
一時的データは、キャッシングの利益を享受するために、すぐに再使用される可能性があるデータである。しかしながら、これはヒントであり、異なるプロセッサが、ヒントを完全に無視することを含む、異なる方法でそれを実装することができる。
【0076】
メモリアクセス命令テンプレート−非一時的
非一時的データは、一次レベルキャッシュにおけるキャッシングの利益を享受するために、すぐに再使用される可能性がなく、エビクションに対する優先権が与えられるべきデータである。しかしながら、これはヒントであり、異なるプロセッサが、ヒントを完全に無視することを含む、異なる方法でそれを実装することができる。
【0077】
クラスBの命令テンプレート
クラスBの命令テンプレートの場合に、アルファフィールド752は、書き込みマスク制御(Z)フィールド752Cとして解釈され、そのコンテンツは、書き込みマスクフィールド770によって制御される書き込みマスキングを、マージするべきか、またはゼロ化するべきかを識別する。
【0078】
クラスBの非メモリアクセス705の命令テンプレートの場合において、ベータフィールド754の一部は、RLフィールド757Aとして解釈され、そのコンテンツは、異なる拡大演算タイプのうちのどれを行うのかを識別し(例えば、ラウンド処理757A.1およびベクトル長(VSIZE)757A.2が、それぞれ、非メモリアクセスの書き込みマスク制御の部分的ラウンド制御タイプ演算712の命令テンプレート、および非メモリアクセス、書き込みマスク制御、VSIZEタイプ演算717の命令テンプレートについて指定される)、一方で、ベータフィールド754の残りは、指定されたタイプの演算のうちのどれを行うのかを識別する。非メモリアクセス705の命令テンプレートにおいて、スケールフィールド760、変位フィールド762A、および変位スケール762Bは、存在しない。
【0079】
非メモリアクセス、書き込みマスク制御、部分的ラウンド制御タイプ演算710の命令テンプレートにおいて、ベータフィールド754の残りは、ラウンド演算フィールド759Aとして解釈され、例外イベント報告は、無効にされる(所与の命令は、いかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも起こさない)。
【0080】
ラウンド演算制御フィールド759A−ラウンド演算制御フィールド758と同様に、そのコンテンツは、一群のラウンド処理演算のうちのどれを行うのかを識別する(例えば、切り上げ、切り捨て、ゼロに向けたラウンド、および最も近方へのラウンド)。したがって、ラウンド演算制御フィールド759Aは、命令単位ごとに、ラウンド処理モードの変更を可能にする。プロセッサがラウンド処理モードを指定するための制御レジスタを含む本発明の一実施形態において、ラウンド演算制御フィールド750のコンテンツは、そのレジスタ値をオーバーライドする。
【0081】
非メモリアクセスの書き込みマスク制御のVSIZEタイプ演算717の命令テンプレートにおいて、ベータフィールド754の残りは、ベクトル長フィールド759Bとして解釈され、そのコンテンツは、いくつかのデータベクトル長(例えば、128、256、または512バイト)のうちのどれを行うのかを識別する。
【0082】
クラスBのメモリアクセス720の命令テンプレートの場合において、ベータフィールド754の一部は、ブロードキャストフィールド757Bとして解釈され、そのコンテンツは、ブロードキャストタイプデータ操作演算が実行されるかどうかを識別し、一方で、ベータフィールド754の残りは、ベクトル長フィールド759Bと解釈される。メモリアクセス720の命令テンプレートは、スケールフィールド760を含み、随意に、変位フィールド762Aまたは変位スケールフィールド762Bを含む。
【0083】
一般的ベクトルフレンドリー命令フォーマット700に関して、フルオペコードフィールド774は、フォーマットフィールド740、ベース演算フィールド742、およびデータ要素幅フィールド764を含むように示されている。フルオペコードフィールド774がこれらのフィールドのすべてを含む1つの実施形態が示されるが、該フィールドのすべてをサポートしない実施形態において、フルオペコードフィールド774は、該フィールドのすべてよりも少ないフィールドを含む。フルオペコードフィールド774は、演算コード(オペコード)を提供する。
【0084】
追加演算フィールド750、データ要素幅フィールド764、および書き込みマスクフィールド770は、これらの特徴を、一般的ベクトルフレンドリー命令フォーマットで、命令ごとに指定することを可能にする。
【0085】
書き込みマスクフィールドとデータ要素幅フィールドとの組み合わせは、異なるデータ要素幅に基づいてマスクを適用させることを可能にするタイプ付き命令を生成する。
【0086】
クラスAおよびクラスBの範囲内で見出される様々な命令テンプレートは、異なる状況において有益である。いくつかの実施形態では、プロセッサ内の異なるプロセッサまたは異なるコアが、クラスAだけ、クラスBだけ、または両方のクラスをサポートすることができる。例えば、汎用コンピューティングを意図する高性能汎用アウトオブオーダーコアが、クラスBだけをサポートすることができ、グラフィックスおよび/または科学的(スループット)コンピューティングを主として意図するコアが、クラスAだけをサポートすることができ、両方を意図するコアは、両方をサポートすることができる(当然、両方のクラスからのテンプレートおよび命令のいくつかの混合物を有するが、両方のクラスからのすべてのテンプレートおよび命令を有しないコアは、本発明の範囲内にある)。
【0087】
単一のプロセッサは、複数のコアを含むことができ、該コアのすべてが同じクラスをサポートするか、または異なるコアが異なるクラスをサポートする。例えば、個別のグラフィックスおよび汎用コアを有するプロセッサにおいて、グラフィックスおよび/または科学的コンピューティングを主として意図するグラフィックスコアの1つが、クラスAだけをサポートすることができ、一方で、汎用コアのうち1つまたは複数は、クラスBだけをサポートする汎用コンピューティングを意図するアウトオブオーダー実行およびレジスタリネーミングを有する高性能汎用コアとすることができる。個別のグラフィックスコアを有しない別のプロセッサは、クラスAおよびクラスBの両方をサポートするもう1つの汎用インオーダーまたはアウトオブオーダーコアを含むことができる。
【0088】
当然、異なる実施形態では、1つのクラスからの特徴を他のクラスで実装することもできる。高水準言語で記述されるプログラムは、様々な異なる実行可能な形態に翻訳され(例えば、ジャストインタイムでコンパイルされ、または静的にコンパイルされ)、該形態としては、1)実行のためのターゲットプロセッサによってサポートされるクラス(複数可)の命令だけを有する形態、または2)すべてのクラスの命令の異なる組み合わせを使用して記述される複数の代替のルーチンを有し、かつ現在コードを実行しているプロセッサによってサポートされる命令に基づいて実行するためのルーチンを選択する制御フローコードを有する形態、が挙げられる。
【0089】
例示的な特定のベクトルフレンドリー命令フォーマット
図8Aは、一実施形態による、例示的な特有のベクトルフレンドリー命令フォーマットを例示するブロック図である。
図8Aは、フィールドの場所、サイズ、解釈、および順序、ならびにそうしたフィールドのいくつかの値を特定するという意味で特有である、特有のベクトルフレンドリー命令フォーマット800を示す。特有のベクトルフレンドリー命令フォーマット800は、x86命令セットを拡張するために使用することができ、したがって、フィールドのいくつかは、既存のx86命令セットおよびその拡張(例えば、AVX)において使用されるものと類似するか、または同じである。このフォーマットは、拡張を有する既存のx86命令セットの接頭辞符号化フィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、および即値フィールドとの整合性を維持する。
図8Aからの複数のフィールドをマッピングする
図7A又は
図7Bからのフィールドが例示される。
【0090】
実施形態は、例示の目的で、一般的ベクトルフレンドリー命令フォーマット700のコンテキストで、特有のベクトルフレンドリー命令フォーマット800を参照して説明されるが、本発明は、特許請求される場合を除き、特有のベクトルフレンドリー命令フォーマット800に限定されないことを理解されたい。例えば、一般的ベクトルフレンドリー命令フォーマット700は、様々なフィールドの様々な可能なサイズを想定し、一方で、特有のベクトルフレンドリー命令フォーマット800は、特有のサイズのフィールドを有するものとして示される。具体的な一例として、データ要素幅フィールド764は、特有のベクトルフレンドリー命令フォーマット800の1ビットフィールドとして例示されるが、本発明は、そのように限定されない(すなわち、一般的ベクトルフレンドリー命令フォーマット700は、他のサイズのデータ要素幅フィールド764を想定する)。
【0091】
一般的ベクトルフレンドリー命令フォーマット700は、
図8Aに例示される順序で、以下に列記される以下のフィールドを含む。
【0092】
EVEX接頭辞(バイト0〜3)802−これは、4バイトの形態で符号化される。
【0093】
フォーマットフィールド740(EVEXバイト0、ビット[7:0])−第1のバイト(EVEXバイト0)は、フォーマットフィールド740であり、0x62(本発明の1つの実施形態において、ベクトルフレンドリー命令フォーマットを識別するために使用される固有の値)を含む。
【0094】
第2〜第4のバイト(EVEXバイト1〜3)は、特定の能力を提供するいくつかのビットフィールドを含む。
【0095】
REXフィールド805(EVEXバイト1、ビット[7−5])−これは、EVEX.Rビットフィールド(EVEXバイト1、ビット[7]−R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]−X)、および757BEXバイト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を形成することができる。
【0096】
REX'フィールド710−これは、REX'フィールド710の第1の部分であり、また、拡張した32個のレジスタセットの上位16個または下位16個のいずれかを符号化するために使用される、EVEX.R'ビットフィールド(EVEXバイト1、ビット[4]−R')である。本発明の一実施形態において、このビットは、以下に示されるように他のものと共に、(よく知られているx86の32ビットモードで)ビット反転フォーマットで記憶されて、BOUND命令から識別され、そのリアルオペコードバイトは、62であるが、MOD R/Mフィールド(以下で説明される)では、MODフィールドの11という値を受け付けず、代替の実施形態は、これを記憶せず、以下に示される他のビットは、反転フォーマットである。下位の16個のレジスタを符号化するために、1という値が使用される。換言すれば、R'Rrrrは、EVEX.R'、EVEX.R、および他のフィールドからの他のRRRを組み合わせることによって形成される。
【0097】
オペコードマップフィールド815(EVEXバイト1、ビット[3:0]−mmmm)−そのコンテンツは、暗黙的な先行オペコードバイト(0F、0F 38、または0F 3)を符号化する。
【0098】
データ要素幅フィールド764(EVEXバイト2、ビット[7]−W)−これは、表記EVEX.Wによって表される。EVEX.Wは、データタイプの粒度(サイズ)(32ビットデータ要素または64ビットデータ要素のいずれか)を定義するために使用される。
【0099】
EVEX.vvvv820(EVEXバイト2、ビット[6:3]−vvvv)−EVEX.vvvvの役割としては、1)EVEX.vvvvが、反転(1の補数)の形態で指定され、また、2つ以上のソースオペランドを有する複数の命令に有効である、第1のソースレジスタオペランドを符号化すること、2)EVEX.vvvvが、或るベクトルシフトのために1の補数の形態で特定される、デスティネーションレジスタオペランドを符号化すること、または3)EVEX.vvvvが、いかなるオペランドも符号化せず、フィールドが予約され、かつ1111bを含まなければならない、ことが挙げられる。したがって、EVEX.vvvvフィールド820は、反転(1の補数)の形態で記憶された第1のソースレジスタ指定子の4つの下位ビットを符号化する。命令に応じて、追加の異なるEVEXビットフィールドを使用して、指定子サイズを32個のレジスタに拡張する。
【0100】
EVEX.U768クラスフィールド(EVEXバイト2、ビット[2]−U)−EVEX.U=0である場合は、クラスAまたはEVEX.U0を示し、EVEX.U=1ある場合は、クラスBまたはEVEX.U1を示す。
【0101】
接頭辞符号化フィールド825(EVEXバイト2、ビット[1:0]−pp)−これは、ベース演算フィールドのための追加のビットを提供する。EVEX接頭辞フォーマットのレガシーSSE命令に対するサポートを提供することに加えて、このことは、SIMD接頭辞をコンパクト化するといった利益も有する(SIMD接頭辞を表すために1バイトを必要とするのではなく、EVEX接頭辞は、2ビットだけしか必要としない)。1つの実施形態において、レガシーフォーマットおよびEVEX接頭辞フォーマットの両方のSIMD接頭辞(66H、F2H、F3H)を使用するレガシーSSE命令をサポートするために、これらのレガシーSIMD接頭辞は、SIMD接頭辞符号化フィールドに符号化され、実行時に、復号器のPLAへの提供に先立って、レガシーSIMD接頭辞に拡張される(よって、PLAは、修正を伴わずに、レガシーフォーマットおよびこれらのレガシー命令のEVEXフォーマットの両方を実行することができる)。より新しい命令は、EVEX接頭辞符号化フィールドのコンテンツをオペコード拡張として直接使用することができるが、或る実施形態は、整合性のために、同様の様式で拡張するが、これらのレガシーSIMD接頭辞によって異なる意味を指定することを可能にする。代替の実施形態は、2ビットSIMD接頭辞符号化をサポートするようにPLAを再設計することができ、したがって、拡張を必要としない。
【0102】
アルファフィールド752(EVEXバイト3、ビット[7]−EH、EVEX.EH、EVEX.rs、EVEX.RL、EVEX.書き込みマスク制御、およびEVEX.Nとしても知られており、また、αを伴って例示される)−上で説明したように、このフィールドは、コンテキストに特有である。
【0103】
ベータフィールド754(EVEXバイト3、ビット[6:4]−SSS、EVEX.s
2−0、EVEX.r
2−0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られており、また、βββを伴って例示される)−上で説明したように、このフィールドはコンテキストに特有である。
【0104】
REX'フィールド710−これは、REX'フィールドの残部であり、また、拡張した32個レジスタセットの上位16個または下位16個のいずれかを符号化するために使用することができる、EVEX.Vビットフィールド(EVEXバイト3、ビット[3]−V')である。このビットは、ビット反転フォーマットで記憶される。下位の16個のレジスタを符号化するために、1という値が使用される。換言すれば、v'vvvvは、EVEX.V'、EVEX.vvvvを組み合わせることによって形成される。
【0105】
書き込みマスクフィールド770(EVEXバイト3、ビット[2:0]−kkk)−そのコンテンツは、上で説明したように、書き込みマスクレジスタのレジスタのインデックスを指定する。本発明の1つの実施形態において、特有の値EVEX.kkk=000は、いかなる書き込みマスクも特定の命令に使用されないことを暗示する特別な振る舞いを有する(これは、すべてのものに対してハードワイヤードされた書き込みマスク、またはマスキングハードウェアを迂回するハードウェアの使用を含む、様々な方法で実装することができる)。
【0106】
リアルオペコードフィールド830(バイト4)は、オペコードバイトとしても知られている。オペコードの一部は、このフィールドにおいて指定される。
【0107】
MOD R/Mフィールド840(バイト5)は、MODフィールド842と、Regフィールド844と、R/Mフィールド846とを含む。上で説明したように、MODフィールドの842のコンテンツは、メモリアクセス演算と非メモリアクセス演算とを識別する。Regフィールド844の役割は、2つの状況に要約することができ、すなわち、デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかを符号化すること、またはオペコードエクステンションとして処理され、かつ任意の命令オペランドを符号化するために使用されないこと、である。R/Mフィールド846の役割としては、メモリアドレスを参照する命令オペランドを符号化すること、またはデスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかを符号化すること、が挙げられる。
【0108】
スケール、インデックス、ベース(SIB)バイト(バイト6)−上で説明したように、スケールフィールドの750コンテンツは、メモリアドレス生成に使用される。SIB.xxx854およびSIB.bbb856−これらのフィールドのコンテンツは、レジスタインデックスXxxxおよびBbbbに関して以前に言及されている。
【0109】
変位フィールド762A(バイト7〜10)−MODフィールド842が10を含むときに、バイト7〜10は、変位フィールド762Aであり、それは、レガシー32ビット変位(disp32)と同様に機能し、バイト粒度で機能する。
【0110】
変位係数フィールド762B(バイト7)−MODフィールド842が01を含むときに、バイト7は、変位係数フィールド762Bである。このフィールドの場所は、レガシーx86命令セットの8ビット変位(disp8)の場所と同じであり、バイト粒度で機能する。disp8は、拡張符号であるので、−128〜127バイトのオフセットでだけアドレスすることができ、64バイトのキャッシュラインに関して、disp8は、4つの本当に有用な値−128、−64、0、および64にだけ設定することができる8ビットを使用し、より大きい範囲がしばしば必要であるので、disp32が使用されるが、disp32は、4バイトを必要とする。disp8およびdisp32とは対照的に、変位係数フィールド762Bは、disp8の再解釈であり、変位係数フィールド762Bを使用するときに、実際の変位は、メモリオペランドアクセス(N)のサイズを乗算した変位係数フィールドのコンテンツによって決定される。このタイプの変位は、disp8
*Nと呼ばれる。これは、平均命令長(変位には単一のバイトが使用されるが、極めて大きい範囲を伴う)を低減させる。そのような圧縮変位は、有効な変位がメモリアクセスの粒度の倍数であり、それ故に、アドレスオフセットの冗長な下位ビットを符号化する必要はない、という前提に基づく。換言すれば、変位係数フィールド762Bは、レガシーx86命令セットの8ビット変位を置換する。したがって、変位係数フィールド762Bは、disp8がdisp8
*Nにオーバーロードされることを唯一の例外として、レガシーx86命令セットの8ビット変位と同じ方法で符号化される(したがって、ModRM/SIB符号化規則にはいかなる変更もない)。換言すれば、符号化規則または符号化長にはいかなる変更もないが、ハードウェアによる変位値の解釈にだけ変更がある(バイト単位のアドレスオフセットを得るために、メモリオペランドのサイズだけ変位をスケーリングする必要がある)。
【0111】
即値フィールド772は、上で説明したように演算する。
【0112】
フルオペコードフィールド
図8Bは、本発明の1つの実施形態による、フルオペコードフィールド774を構成する特有のベクトルフレンドリー命令フォーマット800のフィールドを例示するブロック図である。具体的には、フルオペコードフィールド774は、フォーマットフィールド740と、ベース演算フィールド742と、データ要素幅(W)フィールド764とを含む。ベース演算フィールド742は、接頭辞符号化フィールド825と、オペコードマップフィールド815と、リアルオペコードフィールド830とを含む。
【0113】
レジスタインデックスフィールド
図8Cは、本発明の1つの実施形態による、レジスタインデックスフィールド744を構成する特有のベクトルフレンドリー命令フォーマット800のフィールドを例示するブロック図である。具体的には、レジスタインデックスフィールド744は、REXフィールド805と、REX'フィールド810と、MODR/M.Regフィールド844と、MODR/M.r/mフィールド846と、WWフィールド820と、xxxフィールド854と、bbbフィールド856とを含む。
【0114】
拡大演算フィールド
図8Dは、本発明の1つの実施形態による、拡大演算フィールド750を構成する特有のベクトルフレンドリー命令フォーマット800のフィールドを示すブロック図である。クラス(U)フィールド768が、0を含むときには、EVEX.U0(クラスA 768A)を示し、1を含むときには、EVEX.U1(クラスB 768B)を示す。U=0で、かつMODフィールド842が11を含む(非メモリアクセス演算を示す)ときに、アルファフィールド752(EVEXバイト3、ビット[7]−EH)は、rsフィールド752Aとして解釈される。rsフィールド752Aが1を含むとき(ラウンド752A.1)に、ベータフィールド754(EVEXバイト3、ビット[6:4]−SSS)は、ラウンド制御フィールド754Aとして解釈される。ラウンド制御フィールド754Aは、1ビットのSAEフィールド756、および2ビットのラウンド演算フィールド758を含む。rsフィールド752Aが0を含むとき(データ変換752A.2)に、ベータフィールド754(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ変換フィールド754Bとして解釈される。U=0で、かつMODフィールド842が00、01、または10を含む(メモリアクセス演算を示す)ときに、アルファフィールド752(EVEXバイト3、ビット[7]−EH)は、エビクションヒント(EH)フィールド752Bとして解釈され、ベータフィールド754(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ操作フィールド754Cとして解釈される。
【0115】
U=1のときに、アルファフィールド752(EVEXバイト3、ビット[7]−EH)は、書き込みマスク制御(Z)フィールド752Cとして解釈される。U=1で、かつMODフィールド842が11を含む(非メモリアクセス演算を示す)ときに、ベータフィールド754(EVEXバイト3、ビット[4]―S
0)の一部は、RLフィールド757Aとして解釈され、1を含む(ラウンド757A.1)ときには、ベータフィールド754(EVEXバイト3、ビット[6−5]−S
2−1)の残りは、ラウンド演算フィールド759Aとして解釈され、一方で、RLフィールド757Aが0を含む(VSIZE757.A2)ときに、ベータフィールド754(EVEXバイト3、ビット[6−5]−S
2−1)の残りは、ベクトル長フィールド759B(EVEXバイト3、ビット[6−5]−L
1−0)として解釈される。U=1で、かつMODフィールド842が00、01、または10(メモリアクセス演算を示す)を含むときに、ベータフィールド754(EVEXバイト3、ビット[6:4]−SSS)は、ベクトル長フィールド759B(EVEXバイト3、ビット[6−5]−L
1−0)およびブロードキャストフィールド757B(EVEXバイト3、ビット[4]−B)として解釈される。例示的なレジスタアーキテクチャ
図9は、本発明の1つの実施形態による、レジスタアーキテクチャ900のブロック図である。例示される実施形態では、512ビット幅である32個のベクトルレジスタ910があり、これらのレジスタは、zmm0〜zmm31として参照される。下位16個のzmmレジスタの下位256ビットは、レジスタymm0〜16にオーバーレイされる。下位16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0〜15にオーバーレイされる。特有のベクトルフレンドリー命令フォーマット800は、下の表6に例示されるように、オーバーレイされたレジスタファイルに対して演算する。
【表6】
【0116】
換言すれば、ベクトル長フィールド759Bは、最大長さおよび1つまたは複数の他のより短い長さから選択し、ここで、各々のそのようなより短い長さは、先行する長さの半分の長さであり、ベクトル長フィールド759Bを伴わない命令テンプレートは、最大ベクトル長に対して演算する。更に、1つの実施形態において、特有のベクトルフレンドリー命令フォーマット800のクラスB命令テンプレートは、パックドまたはスカラ単精度/倍精度浮動小数点データ、およびパックドまたはスカラ整数データに対して演算する。スカラ演算は、zmm/ymm/xmmレジスタにおける最下位データ要素位置に対して行われる演算であり、高位データ要素位置は、実施形態に応じて、該位置が命令の前の位置と同じままであるか、またはゼロにされるかのいずれかである。
【0117】
書き込みマスクレジスタ915−例示される実施形態では、8つの書き込みマスクレジスタ(k0〜k7)があり、各々が64ビットのサイズである。代替の実施形態において、書き込みマスクレジスタ915は、16ビットのサイズである。上で説明したように、本発明の1つの実施形態において、ベクトルマスクレジスタk0は、書き込みマスクとして使用することができず、通常k0を示す符号化が書き込みマスクに使用されるときには、0xFFFFのハードワイヤード書き込みマスクを選択し、その命令に対する書き込みマスキングを効果的に無効にする。
【0118】
汎用レジスタ925−例示される実施形態において、アドレスメモリオペランドに対する既存のx86アドレッシングモードと共に使用される、16個の64ビット汎用レジスタが存在する。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSPという名称、およびR8〜R15によって参照される。
【0119】
MMXパックド整数フラットレジスタファイル950に別名化される、スカラ浮動小数点スタックレジスタファイル(x87スタック)945−例示される実施形態において、x87スタックは、x87命令セット拡張を使用して、32/64/80ビット浮動小数点データに対してスカラ浮動小数点演算を行うために使用される8要素スタックであり、一方で、MMXレジスタは、64ビットパックド整数データに対して演算を行うために、ならびにMMX〜XMMレジスタの間で行われるいくつかの演算のオペランドを保持するために使用される。
【0120】
代替の実施形態は、より広いまたはより狭いレジスタを使用することができる。加えて、代替の実施形態は、より多い、より少ない、または異なるレジスタファイルおよびレジスタを使用することができる。
【0121】
例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ
プロセッサコアは、異なる方法で、異なる目的で、および異なるプロセッサで実装することができる。例えば、そのようなコアの実装形態としては、1)汎用コンピューティングを意図する汎用インオーダーコア、2)汎用コンピューティングを意図する高性能汎用アウトオブオーダーコア、3)グラフィクスおよび/または科学的(スループット)演算を主として意図する専用コア、が挙げられる。異なるプロセッサの実装形態としては、1)汎用コンピューティングを意図する1つまたは複数の汎用インオーダーコア、および/または汎用コンピューティングを意図する1つまたは複数の汎用アウトオブオーダーコアを含むCPU、および2)グラフィクスおよび/またはサイエンス(スループット)を主として意図する1つまたは複数の専用コアを含むコプロセッサ、が挙げられる。そのような異なるプロセッサは、異なるコンピュータシステムアーキテクチャをもたらし、該アーキテクチャとしては、1)CPUとは別のチップ上のコプロセッサ、2)CPUと同じパッケージの中の別のダイ上のコプロセッサ、3)CPUと同じダイ上のコプロセッサ(この場合、そのようなコプロセッサは、あるときには、統合グラフィクスおよび/または科学的(スループット)論理などの専用論理、または専用コアと称される)、および4)同じダイ上に、説明したCPU(あるときには、アプリケーションコア(複数可)またはアプリケーションプロセッサ(複数可)と称される)、上で説明したコプロセッサ、および追加の機能性を含むことができる、システムオンチップ、が挙げられる。例示的なコアアーキテクチャを次に説明し、続いて、例示的なプロセッサおよびコンピュータアーキテクチャを説明する。
【0122】
例示的なコアアーキテクチャインオーダーコアおよびアウトオブオーダーコアのブロック図
図10Aは、一実施形態による、例示的なインオーダーパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダー発行/実行パイプラインの両方を例示するブロック図である。
図10Bは、一実施形態によるプロセッサに含まれるように、インオーダーアーキテクチャコアの例示的な実施形態、および例示的なレジスタリネーミング、アウトオブオーダー発行/実行アーキテクチャコアの両方を例示するブロック図である。
図10A〜10Bにおいて実線で囲まれたボックスは、インオーダーパイプラインおよびインオーダーコアを例示し、一方で、破線で囲まれたボックスの随意の追加は、レジスタリネーミング、アウトオブオーダー発行/実行パイプラインおよびコアを例示する。インオーダーの態様がアウトオブオーダーの態様のサブセットであることから、アウトオブオーダーの態様を説明する。
【0123】
図10Aにおいて、プロセッサパイプライン1000は、フェッチステージ1002と、長さ復号化ステージ1004と、復号化ステージ1006と、割り当てステージ1008と、リネーミングステージ1010と、スケジューリング(ディスパッチまたは発行としても知られる)ステージ1012と、レジスタ読み取り/メモリ読み取りステージ1014と、実行ステージ1016と、書き戻し/メモリ書き込みステージ1018と、例外処理ステージ1022と、コミットステージ1024とを含む。
【0124】
図10Bは、実行エンジンユニット1050に結合されたフロントエンドユニット1030を含み、どちらのユニットもメモリユニット1070に結合される、プロセッサコア1090を示す。コア1090は、縮小命令セットコンピューティング(RISC:reduced instruction set computing)コア、複合命令セットコンピューティング(CISC:complex instruction set computing)コア、超長命令語(VLIW:very long instruction word)コア、またはハイブリッドもしくは代替のコアタイプとすることができる。更に別のオプションとして、コア1090は、例えばネットワークもしくは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(GPGPU:general purpose computing graphics processing unit)コア、グラフィックスコア、または同類のものなどの、専用コアとすることができる。
【0125】
フロントエンドユニット1030は、命令キャッシュユニット1034に結合された分岐予測ユニット1032を含み、これが命令翻訳ルックアサイドバッファ(TLB:translation lookaside buffer)1036に結合され、これが命令フェッチユニット1038に係合され、これが復号化ユニット1040に結合される。復号化ユニット1040(または復号器)は、命令を復号化し、また、出力として、1つまたは複数のマイクロ演算、マイクロコードエントリーポイント、マイクロ命令、他の命令、または他の制御信号を生成することができ、これらは、元々の命令から復号化され、または別様には該命令を反映し、または該命令から導出される。復号化ユニット1040は、様々な異なる機構を使用して実装することができる。適切な機構の例としては、ルックアップテーブル、ハードウェア実装、プログラマブル論理アレイ(PLA:programmable logic array)、マイクロコードリードオンリーメモリ(ROM:read only memory)、その他が挙げられるが、これらに限定されない。1つの実施形態において、コア1090は、或るマクロ命令のマイクロコードを記憶するマイクロコードROMまたは他の媒体を(例えば、復号化ユニット1040または別様にはフロントエンドユニット1030の中に)含む。復号化ユニット1040は、実行エンジンユニット1050の中のリネーム/アロケーターユニット1052に連結される。
【0126】
実行エンジンユニット1050は、リタイアメントユニット1054に結合されたリネーム/アロケーターユニット1052、および一組の1つまたは複数のスケジューラユニット(複数可)1056を含む。スケジューラユニット(複数可)1056は、リザベーションステーション、中央命令ウインドウ、その他を含む、任意の数の異なるスケジューラを表す。スケジューラユニット(複数可)1056は、物理レジスタファイル(複数可)ユニット(複数可)1058に結合される。物理レジスタファイル(複数可)ユニット1058の各々は、1つまたは複数の物理レジスタファイルを表し、その異なるものが、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行される次の命令のアドレスである命令ポインタ)、その他などの、1つまたは複数の異なるデータタイプを記憶する。1つの実施形態において、物理レジスタファイル(複数可)ユニット1058は、ベクトルレジスタユニットと、書き込みマスクレジスタユニットと、スカラレジスタユニットとを備える。これらのレジスタユニットは、アーキテクチャ上のベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供することができる。物理レジスタファイル(複数可)ユニット(複数可)1058は、様々な方法を例示するために、リタイアメントユニット1054によってオーバーラップされ、該方法では、(例えば、リオーダーバッファ(複数可)およびリタイアレジスタファイル(複数可)を使用して、フューチャーファイル(複数可)、ヒストリーファイル(複数可)、およびリタイアレジスタファイル(複数可)を使用して、レジスタマップおよびレジスタのプールを使用して、その他によって)レジスタリネーミングおよびアウトオブオーダーの実行を実装することができる。リタイアメントユニット1054および物理レジスタファイル(複数可)ユニット(複数可)1058は、実行クラスタ(複数可)1060に結合される。実行クラスタ(複数可)1060は、一組の1つまたは複数の実行ユニット1062、および一組の1つまたは複数のメモリアクセスユニット1064を含む。実行ユニット1062は、様々な演算(例えば、シフト、加算、減算、乗算)を、様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して行うことができる。いくつかの実施形態は、特定の機能または一組の機能に専用のいくつかの実行ユニットを含むことができるが、他の実施形態は、すべての関数をすべて行う唯一の実行ユニットまたは多数の実行ユニットを含むことができる。スケジューラユニット(複数可)1056、物理レジスタファイル(複数可)ユニット(複数可)1058、および実行クラスタ(複数可)1060は、或る実施形態が或るタイプのデータ/演算について個別のパイプラインを生成するので、場合により、複数として示される(例えば、スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプラインであり、各々が、それら自体のスケジューラユニット、物理レジスタファイル(複数可)ユニット、および/または実行クラスタを有し、個別のメモリアクセスパイプラインの場合において、或る実施形態は、このパイプラインの実行クラスタだけがメモリアクセスユニット(複数可)1064を有して実装される)。また、個別のパイプラインが使用される場合、これらのパイプラインのうち1つまたは複数をアウトオブオーダー発行/実行とし、残りをインオーダーとすることができることも理解されたい。
【0127】
一組のメモリアクセスユニット1064は、メモリユニット1070に結合され、該メモリユニットは、レベル2(L2)キャッシュユニット1076に結合されたデータキャッシュユニット1074に結合されたデータTLBユニット1072を含む。1つの例示的な実施形態において、メモリアクセスユニット1064は、ロードユニットと、ストアアドレスユニットと、ストアデータユニットとを含むことができ、これらの各々が、メモリユニット1070の中のデータTLBユニット1072に結合される。命令キャッシュユニット1034は、メモリユニット1070のレベル2(L2)キャッシュ部1076に更に結合される。L2キャッシュユニット1076は、1つまたは複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
【0128】
一例として、例示的なレジスタリネーミング、アウトオブオーダー発行/実行コアアーキテクチャは、次のようにパイプライン1000を実装することができる。1)命令フェッチ1038が、フェッチステージ1002および長さ復号化ステージ1004を行う、2)復号化ユニット1040が、復号化ステージ1006を行う、3)リネーム/アロケーターユニット1052が、割り当てステージ1008およびリネーミングステージ1010を行う、4)スケジューラユニット(複数可)1056が、スケジュールステージ1012を行う、5)物理レジスタファイル(複数可)ユニット(複数可)1058およびメモリユニット1070が、レジスタ読み取り/メモリ読み取りステージ1014を行う、実行クラスタ1060が、実行ステージ1016を行う、6)メモリユニット1070および物理レジスタファイル(複数可)ユニット(複数可)1058が、書き戻し/メモリ書き込みステージ1018を行う、7)様々なユニットが、例外処理ステージ1022に関与することができ、および8)リタイアメントユニット1054および物理レジスタファイル(複数可)ユニット(複数可)1058が、コミットステージ1024を行う。
【0129】
コア1090は、本明細書で説明される命令(複数可)を含む、1つまたは複数の命令セット(例えば、x86命令セット(より新しいバージョンで追加された、いくつかの拡張を有する)、MIPS Technologies(Sunnyvale、CA)のMIPS命令セット、ARM Holdings(San Jose、CA)のARM命令セット(NEONなどの随意の追加の拡張を有する))をサポートすることができる。1つの実施形態において、コア1090は、パックドデータ命令セット拡張をサポートするための論理(例えば、先に説明したAVX1、AVX2、および/または一般的ベクトルフレンドリー命令フォーマットのいくつかの形態(U=0および/またはU=1)を含み、それによって、数多くのマルチメディアアプリケーションによって使用される演算を、パックドデータを使用して行うことを可能にする。
【0130】
コアが、マルチスレッディング(2つまたはそれ以上の並列の一組の演算またはスレッドを実行すること)をサポートすることができ、また、タイムスライスドマルチスレッディング、同時マルチスレッディング(単一の物理コアが、物理コアが同時にマルチスレッディングしているスレッドの各々のための論理コアを提供する)、またはこれらの組み合わせ(例えば、Intel(登録商標)ハイパースレッディングテクノロジーなどの、その後の、タイムスライスドフェッチおよび復号化、ならびにその後の同時マルチスレッディング)を含む、様々な方法でサポートすることができることを理解されたい。
【0131】
レジスタリネーミングは、アウトオブオーダー実行のコンテキストにおいて説明されるが、レジスタリネーミングは、インオーダーアーキテクチャで使用することができることを理解されたい。プロセッサの例示される実施形態はまた、個別の命令キャッシュユニット1034およびデータキャッシュユニット1074、ならびに共有L2キャッシュユニット1076を含むが、代替の実施形態は、例えばレベル1(L1)内部キャッシュまたは複数レベルの内部キャッシュなどの、命令およびデータの両方のための単一の内部キャッシュを有することができる。いくつかの実施形態において、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせを含むことができる。代替的に、キャッシュのすべてをコアおよび/またはプロセッサの外部とすることができる。
【0132】
具体的で例示的なインオーダーコアアーキテクチャ
図11A〜11Bは、より具体的で例示的なインオーダーコアアーキテクチャのブロック図を示し、該コアは、チップの中のいくつかの論理ブロックのうちの1つ(同じタイプおよび/または異なるタイプの他のコアを含む)である。論理ブロックは、アプリケーションに応じて、高帯域幅の相互接続ネットワーク(例えば、リングネットワーク)を通して、いくつかの固定機能論理、メモリI/Oインターフェース、および他の必要なI/O論理と通信する。
【0133】
図11Aは、一実施形態による、オンダイの相互接続ネットワーク1102への接続およびレベル2(L2)キャッシュ1104のそのローカルサブセットと共に、単一のプロセッサコアのブロック図である。1つの実施形態において、命令復号器1100は、パックドデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ1106は、スカラおよびベクトルユニットの中のキャッシュメモリへの低遅延アクセスを可能とする。1つの実施形態において(設計を単純化するために)、スカラユニット1108およびベクトルユニット1110は、個別のレジスタセット(それぞれ、スカラレジスタ1112およびベクトルレジスタ1114)を使用し、それらの間で転送されるデータがメモリに書き込まれ、次いで、レベル1(L1)キャッシュ1106から読み戻されるが、代替の実施形態は、異なる手法(例えば、単一のレジスタセットを使用するか、またはデータを、書き込みおよび読み戻しを行うことなく2つのレジスタファイル間で転送することを可能にする通信パスを含む)を使用することができる。
【0134】
L2キャッシュ1104のローカルサブセットは、1プロセッサコアあたり、個別のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュ1104のそれ自体のローカルサブセットへの直接アクセス経路を有する。プロセッサコアにより読み取られたデータは、そのL2キャッシュのサブセット1104に記憶され、他のプロセッサコアがそれら自体のローカルL2キャッシュのサブセットにアクセスすることと並行して、迅速にアクセスすることができる。プロセッサコアにより書き込まれたデータは、それ自体のL2キャッシュのサブセット1104に記憶され、必要に応じて他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシーを確実にする。リングネットワークは、プロセッサコア、L2キャッシュ、および他の論理ブロックなどのエージェントが、チップ内で互いに通信することを可能にするために、双方向性である。各リングデータパスは、1方向あたり1012ビット幅である。
【0135】
図11Bは、一実施形態による、
図11Aのプロセッサコアの部分拡大図である。
図11Bは、L1キャッシュ1104のL1データキャッシュ1106A部分、ならびにベクトルユニット1110およびベクトルレジスタ1114に関する更なる詳細を含む。具体的には、ベクトルユニット1110は、16幅のベクトル処理ユニット(VPU:vector processing unit)(16幅のALU1128を参照されたい)であり、整数、単精度浮動小数点、倍精度浮動小数点命令のうち1つまたは複数を実行する。VPUは、スウィズルユニット1120によるレジスタ入力のスウィズリング、数値変換ユニット1122A〜Bによる数値変換、およびメモリ入力に対する複製ユニット1124による複製をサポートする。書き込みマスクレジスタ1126は、結果として生じるベクトル書き込みをプレディケートすることを可能にする。
【0136】
統合メモリコントローラおよび専用論理を有するプロセッサ
図12は、一実施形態による、2つ以上のコアを有することができ、統合メモリコントローラを有することができ、また、統合グラフィクスを有することができる、プロセッサ1200のブロック図である。
図12において実線で囲まれたボックスは、単一のコア1202Aと、システムエージェント1210と、一組の1つまたは複数のバスコントローラユニット1216とを有するプロセッサ1200を示し、一方で、破線で囲まれたボックスの随意の追加部分は、多数のコア1202A〜Nと、システムエージェントユニット1210の中の一組の1つまたは複数の統合メモリコントローラユニット(複数可)1214と、専用論理1208とを有する代替のプロセッサ1200を示す。
【0137】
したがって、プロセッサ1200の異なる実装形態は、1)専用論理1208が統合グラフィックスおよび/または科学的(スループット)論理(1つまたは複数のコアを含むことができる)であり、コア1202A〜Nが1つまたは複数の汎用コア(例えば、汎用インオーダーコア、汎用アウトオブオーダーコア、これらの2つの組み合わせ)である、CPUと、2)コア1202A〜Nが主としてグラフィクスおよび/または科学的(スループット)を意図する多数の専用コアである、コプロセッサと、3)コア1202A〜Nが多数の汎用インオーダーコアである、コプロセッサと、を含むことができる。したがって、プロセッサ1200は、例えば、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット:general purpose graphics processing unit)、ハイスループットのメニーインテグレーテッドコア(MIC:many integrated core)コプロセッサ(30個以上のコアを含む)、組み込みプロセッサ、または同類のものなどの、汎用プロセッサ、コプロセッサ、または専用プロセッサとすることができる。プロセッサは、1つまたは複数のチップ上に実装することができる。プロセッサ1200は、例えばBiCMOS、CMOS、またはNMOSなどの、いくつかの処理技術のうちのいずれかを使用して、1つまたは複数の基板の一部とすること、および/またはその上に実装することができる。
【0138】
メモリ階層は、コア内の1つまたは複数のレベルのキャッシュと、一組の1つまたは複数の共有キャッシュユニット1206と、一組の統合メモリコントローラユニット1214に結合された外部メモリ(図示せず)とを含む。一組の共用キャッシュユニット1206は、レベル2(L2)、レベル3(L3)、レベル4(L4)、または他のレベルのキャッシュ、ラストレベルキャッシュ(LLC:last level cache)、および/またはこれらの組み合わせなどの、1つまたは複数の中間レベルのキャッシュを含むことができる。1つの実施形態において、リングベースの相互接続ユニット1212は、統合グラフィック論理1208、一組の共有キャッシュユニット1206、およびシステムエージェントユニット1210/統合メモリコントローラユニット(複数可)1214を相互接続するが、代替の実施形態は、そのようなユニットを相互接続するための任意の数の既知の技術を使用することができる。1つの実施形態において、コヒーレンシーは、1つまたは複数のキャッシュユニット1206とコア1202A〜Nとの間で維持される。
【0139】
いくつかの実施形態において、コア1202A〜Nのうちの1つまたは複数は、マルチスレッドを行うことができる。システムエージェント1210は、コア1202A〜Nの協調および演算を行う構成要素を含む。システムエージェントユニット1210は、例えば、電力制御ユニット(PCU:power control unit)およびディスプレイユニットを含むことができる。PCUは、コア1202A〜Nおよび統合グラフィックス論理1208の電力状態を調節するために必要な論理および構成要素とするか、または該構成要素を含むことができる。ディスプレイユニットは、1つまたは複数の外部接続ディスプレイを駆動するためのものである。
【0140】
コア1202A〜Nは、アーキテクチャ命令セットに関して同種または異種とすることができ、すなわち、コア1202A〜Nのうちの2つ以上は、同じ命令セットを実行することができ、一方で、他のものは、その命令セットのサブセットまたは異なる命令セットだけを実行することができる。
【0141】
例示的なコンピュータアーキテクチャ
図13〜
図16は、例示的なコンピュータアーキテクチャのブロック図である。また、ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP:digital signal processor)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤー、ハンドヘルドデバイス、および様々な他の電子デバイスのための、当技術分野において知られている他のシステム設計および構成も適している。全般に、本明細書で開示されるプロセッサおよび/または他の実行論理を組み込むことができる多様なシステムまたは電子デバイスが一般的に適している。
【0142】
次に
図13を参照すると、本発明の一実施形態による、システム1300のブロック図が示される。システム1300は、コントローラハブ1320に結合される、1つまたは複数のプロセッサ1310、1315を含むことができる。1つの実施形態において、コントローラハブ1320は、グラフィックスメモリコントローラハブ(GMCH:graphics memory controller hub)1390および入力/出力ハブ(IOH:Input/Output Hub)1350(個別のチップ上にあってよい)を含み、GMCH1390は、メモリ1340およびコプロセッサ1345に結合されるメモリコントローラおよびグラフィックスコントローラを含み、IOH1350は、入力/出力(I/O:input/output)デバイス1360をGMCH1390に結合する。代替的に、メモリコントローラおよびグラフィックスコントローラの一方または両方は、(本明細書で説明されるように)プロセッサ内に統合され、メモリ1340およびコプロセッサ1345は、プロセッサ1310、およびIOH1350を有する単一のチップの中のコントローラハブ1320に直接結合される。
【0143】
図13では、追加のプロセッサ1315の随意の性質が破線で示される。各プロセッサ1310、1315は、本明細書で説明される処理コアのうち1つまたは複数を含むことができ、また、いくつかのバージョンのプロセッサ1200とすることができる。
【0144】
メモリ1340は、例えば、ダイナミックランダムアクセスメモリ(DRAM:dynamic random access memory)、相変化メモリ(PCM:phase change memory)、または2つの組み合わせとすることができる。少なくとも1つの実施形態について、コントローラハブ1320は、フロントサイドバス(FSB:frontside bus)などのマルチドロップバス、クイックパスインターコネクト(QPI:QuickPath Interconnect)などのポイントツーポイントインターフェース、または類似する接続1395を介して、プロセッサ(複数可)1310、1315と通信する。
【0145】
1つの実施形態において、コプロセッサ1345は、例えば、ハイスループットMICプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサ、または同類のものなどの、専用プロセッサである。1つの実施形態において、コントローラハブ1320は、統合グラフィックスアクセラレータを含むことができる。
【0146】
物理リソース1310、1315の間には、アーキテクチャ上の特性、マイクロアーキテクチャ上の特性、熱的特性、電力消費特性、および同類のもの含む、様々な利点のメトリクスに関して、様々な相違があり得る。
【0147】
1つの実施形態において、プロセッサ1310は、一般的なタイプのデータ処理演算を制御する命令を実行する。命令内には、コプロセッサ命令を埋め込むことができる。プロセッサ1310は、これらのコプロセッサ命令を、付加コプロセッサ1345によって実行されるべきタイプのものであると認識する。故に、プロセッサ1310は、コプロセッサバスまたは他の相互接続に対するこれらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)をコプロセッサ1345に発行する。コプロセッサ(複数可)1345は、受信したコプロセッサ命令を受け付け、実行する。
【0148】
次に
図14を参照すると、本発明の一実施形態による、第1のより具体的で例示的なシステム1400のブロック図が示される。
図14に示されるように、マルチプロセッサシステム1400は、ポイントツーポイント相互接続システムであり、また、ポイントツーポイント相互接続1450を介して結合される第1のプロセッサ1470および第2のプロセッサ1480を含む。プロセッサ1470および1480の各々は、いくつかのバージョンのプロセッサ1200とすることができる。本発明の1つの実施形態において、プロセッサ1470および1480は、それぞれプロセッサ1310および1315であり、一方で、コプロセッサ1438は、コプロセッサ1345である。別の実施形態において、プロセッサ1470および1480は、それぞれ、プロセッサ1310コプロセッサ1345である。
【0149】
プロセッサ1470および1480は、それぞれ、統合メモリコントローラ(IMC:integrated memory controller)ユニット1472および1482を含んで示される。プロセッサ1470はまた、そのバスコントローラユニットの一部として、ポイントツーポイント(P−P:point−to−point)インターフェース1476および1478も含み、同様に、第2プロセッサ1480は、P−Pインターフェース1486および1488を含む。プロセッサ1470、1480は、ポイントツーポイント(P−P)インターフェース回路1478、1488を使用して、P−Pインターフェース1450を介して情報を交換することができる。
図14に示されるように、IMC1472および1482は、プロセッサをそれぞれのメモリ、すなわちメモリ1432およびメモリ1434に結合し、該メモリは、それぞれのプロセッサにローカルに付加されたメインメモリの一部分とすることができる。
【0150】
プロセッサ1470、1480は、各々、ポイントツーポイントインターフェース回路1476、1494、1486、1498を使用して、個々のP−Pインターフェース1452、1454を介してチップセット1490と情報を交換することができる。チップセット1490は、随意に、高性能インターフェース1439を介してコプロセッサ1438と情報を交換することができる。1つの実施形態において、コプロセッサ1438は、例えば、ハイスループットMICプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサ、または同類のものなどの、専用プロセッサである。
【0151】
共有キャッシュ(図示せず)は、どちらかのプロセッサに、または両方のプロセッサの外部に含むこと、更には、P−P相互接続を介してプロセッサと接続することができ、よって、プロセッサが低電力モードに置かれた場合に、一方または両方のプロセッサのローカルキャッシュ情報を共有キャッシュに記憶することができる。
【0152】
チップセット1490は、インターフェース1496を介して第1のバス1416に結合することができる。1つの実施形態において、第1のバス1416は、周辺構成要素相互接続(PCI:Peripheral Component Interconnect)バス、またはPCIエクスプレスバスもしくは別の第3世代I/O相互接続バスなどのバスとすることができるが、本発明の範囲は、そのように限定されるものではない。
【0153】
図14に示されるように、第1のバス1416を第2のバス1420に結合するバスブリッジ1418と共に、様々なI/Oデバイス1414を第1のバス1416に結合することができる。1つの実施形態では、コプロセッサ、ハイスループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックスアクセラレータまたはデジタル信号処理(DSP:digital signal processing)ユニットなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサなどの、1つまたは複数の追加のプロセッサ1415が第1のバス1416に結合される。1つの実施形態において、第2のバス1420は、ローピンカウント(LPC:low pin count)バスとすることができる。1つの実施形態では、例えば、キーボードおよび/またはマウス1422、通信デバイス1427、ならびに命令/コードおよびデータ1430を含むことができるディスクドライブまたは他の大容量記憶デバイスなどの記憶ユニット1428を含む、様々なデバイスを第2のバス1420に結合することができる。更に、オーディオI/O1424を第2のバス1420に結合することができる。他のアーキテクチャが可能であることに留意されたい。例えば、
図14のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装することができる。
【0154】
以下、
図15を参照すると、本発明の一実施形態による、第2のより具体的で例示的なシステム1500のブロック図が示される。
図14および
図15における同様の要素は、同様の参照符合を有し、
図14の或る態様は、
図15の他の態様を不明瞭にすることを回避するために、
図15から省略されている。
【0155】
図15は、プロセッサ1470、1480が、ぞれぞれ、統合メモリおよびI/O制御論理(「CL」:control logic)1472および1482を含むことができることを示す。したがって、CL1472、1482は、統合メモリコントローラユニットを含み、また、I/O制御論理を含む。
図15は、メモリ1432、1434がCL1472、1482に結合されることだけではなく、I/Oデバイス1514が制御論理1472、1482に結合されることも示す。レガシーI/Oデバイス1515は、チップセット1490に結合される。
【0156】
以下、
図16を参照すると、本発明の一実施形態による、SoC1600のブロック図が示される。
図12における同様の要素は、同様の参照符合を有する。また、破線で囲んだボックスは、より高度なSoC上の随意の特徴である。
図16において、相互接続ユニット1602は、一組の1つまたは複数のコア1202A〜Nおよび共有キャッシュユニット1206を含むアプリケーションプロセッサ1610、システムエージェントユニット1210、バスコントローラユニット1216、統合メモリコントローラユニット(複数可)1214、統合グラフィックス論理、イメージプロセッサ、オーディオプロセッサ、およびビデオプロセッサを含むことができる一組の1つまたは複数のコプロセッサ1620、スタティックランダムアクセスメモリ(SRAM:static random access memory)ユニット1630、ダイレクトメモリアクセス(DMA:direct memory access)ユニット1632、および1つまたは複数の外部ディスプレイに結合するためのディスプレイユニット1640、に結合される。1つの実施形態において、コプロセッサ(複数可)1620としては、例えば、ネットワークもしくは通信プロセッサ、圧縮エンジン、GPGPU、ハイスループットMICプロセッサ、組み込みプロセッサ、または同類のものなどの、専用プロセッサが挙げられる。
【0157】
本明細書で開示される機構の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装形態の手法の組み合わせで実装される。実施形態は、少なくとも1つのプロセッサ、記憶システム(揮発性および不揮発性メモリおよび/または記憶要素を含む)、少なくとも1つの入力デバイス、ならびに少なくとも1つの出力デバイスを備えるプログラムマブルシステム上で実行する、コンピュータプログラムまたはプログラムコードとして実装される。
【0158】
命令を入力して、本明細書で説明される機能を行い、出力情報を生成するために、
図14に例示されるコード1430などのプログラムコードを適用することができる。出力情報は、既知の方法で1つまたは複数の出力デバイスに適用することができる。このアプリケーションの目的で、処理システムとしては、例えば、デジタル信号プロセッサ(DSP:digital signal processor)、マイクロコントローラ、特定用途向け集積回路(ASIC:application specific integrated circuit)、またはマイクロプロセッサなどのプロセッサを有する、任意のシステムが挙げられる。
【0159】
プログラムコードは、処理システムと通信するために、高水準手続き型またはオブジェクト指向プログラミング言語で実装することができる。プログラムコードはまた、所望であれば、アセンブリ言語または機械言語で実装することもできる。実際には、本明細書で説明される機構は、いかなる特定のプログラミング言語にも範囲が限定されない。いずれの場合においても、言語は、コンパイル型言語またはインタプリタ型言語とすることができる。
【0160】
少なくとも1つの実施形態の1つまたは複数の態様は、機械によって読み込まれたときに、機械に、論理を作り上げさせて本明細書で説明される技術を行う、プロセッサ内の様々な論理を表す機械可読媒体に記憶された代表的な命令によって実装することができる。「IPコア」として知られているそのような表現は、論理またはプロセッサを実際になす製作機械の中へロードするために、有形の機械可読媒体に記憶され、様々な顧客または製造工場に供給することができる。
【0161】
そのような機械可読記憶媒体としては、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリーメモリ(CD−ROM:compact disk read−only memories)、コンパクトディスクリライタブル(CD−RW:compact disk rewritable)、および磁気光ディスクを含む任意の他の種類のディスク、リードオンリーメモリ(ROM:read−only memory)、ダイナミックランダムアクセスメモリ(DRAM:dynamic random access memory)、スタティックランダムアクセスメモリ(SRAM:static random access memory)などのランダムアクセスメモリ(RAM:random access memory)、消去可能プログラム可能リードオンリーメモリ(EPROM:erasable programmable read−only memories)、フラッシュメモリ、電気的消去可能プログラム可能リードオンリーメモリ(EEPROM:electrically erasable programmable read−only memories)、相変化メモリ(PCM:phase change memory)等の半導体デバイス、磁気もしくは光カード、または、電子命令を記憶するのに適した任意の他のタイプの媒体、を含む記憶媒体などの、機械またはデバイスによって製造または形成される物品の非一時的な有形の配設が挙げられるが、これらに限定されない。
【0162】
故に、一実施形態はまた、本明細書で説明される構造、回路、装置、プロセッサ、および/またはシステムの特徴を定義する、ハードウェア記述言語(HDL:Hardware Description Language)などの、命令を含む、または設計データを含む、非一時的有形機械可読媒体も含む。このような実施形態はまた、プログラム製品とも称することができる。
【0163】
エミュレーション(バイナリトランスレーション、コードモーフィング、その他を含む)
いくつかの場合では、命令をソース命令セットからターゲット命令セットに変換するために、命令変換器を使用することができる。例えば、命令変換器は、命令を、コアによって処理される1つまたは複数の他の命令に翻訳すること(例えば、静的バイナリ翻訳、動的コンパイルを含む動的バイナリ翻訳を使用する)、モーフィングすること、エミュレートすること、または別様には、変換することができる。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装することができる。命令変換器は、プロセッサ上、プロセッサ外、あるいは一部をプロセッサ上として一部をプロセッサ外とすることができる。
【0164】
図17は、一実施形態による、ソース命令セットの中のバイナリ命令をターゲット命令セットの中のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図である。例示される実施形態において、命令変換器は、ソフトウェア命令変換器であるが、代替的に、命令変換器は、ソフトウェア、ファームウェア、ハードウェア、あるいはこれらの様々な組み合わせで実装することができる。
図17は、少なくとも1つのx86命令セットコアを有するプロセッサ1716によってネイティブに実行することができるx86バイナリコード1706を生成するために、x86コンパイラ1704を使用して、高水準言語1702のプログラムをコンパイルすることができることを示す。
【0165】
少なくとも1つのx86命令セットコアを有するプロセッサ1716は、少なくとも1つのx86命令セットコアを有するインテルプロセッサと実質的に同じ結果を達成するために、(1)インテルx86命令セットコアの命令セットのかなりの部分、または(2)少なくとも1つのx86命令セットコアを有するインテルプロセッサ上で作動することを目標とした、オブジェクトコードバージョンのアプリケーションまたは他のソフトウェアを、互換的に実行するかまたは別様には処理することによって、少なくとも1つのx86命令セットコアを有するインテルプロセッサと実質的に同じ機能を行うことができる、任意のプロセッサを表す。x86コンパイラ1704は、追加のリンケージ処理を伴って、または伴わずに、少なくとも1つのx86命令セットコアを有するプロセッサ1716を有するプロセッサ上で実行することができるx86バイナリコード1706(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、
図17は、少なくとも1つのx86命令セットコアを有しないプロセッサ1714(例えば、MIPS Technologies(Sunnyvale、CA)のMIPS命令セットを実行し、および/またはARM Holdings(San Jose、CA)のARM命令セットを実行するコアを有するプロセッサ)によってネイティブに実行することができる代替の命令セットバイナリコード1710を生成するために、代替の命令セットコンパイラ1708を使用して、高水準言語1702のプログラムをコンパイルすることができることを示す。
【0166】
命令コンバータ1712は、x86バイナリコード1706を、x86命令セットコアを有しないプロセッサ1714によってネイティブに実行することができるコードに変換するために使用される。この変換されたコードは、これを行うことができる命令変換器を作製することが困難であるので、代替の命令セットバイナリコード1710と同じものになり難くいが、変換されたコードは、一般的な演算を達成し、代替の命令セットからの命令で構成される。したがって、命令変換器1712は、エミュレーション、シミュレーション、または任意の他の処理を通して、x86命令セットプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスが、x86バイナリコード1706を実行することを可能にする、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。
【0167】
上述の明細書では、本発明を、その特定の例示的な実施形態を参照して説明してきた。しかしながら、添付の特許請求の範囲に記載された本発明のより広範な趣旨および範囲から逸脱することなく、様々な修正および変更が行われ得ることが明白になるであろう。故に、本明細書および図面は、限定的な意味ではなく、実例的な意味であるとみなされるべきである。
【0168】
本明細書で説明される命令は、或る演算を行うように、または所定の機能性を有するように構成された、特定用途向け集積回路(ASIC)などの特定のハードウェア構成を指す。そのような電子デバイスは、典型的には、1つまたは複数の記憶デバイス(持続性機械読み出し可能記憶媒体)、ユーザ入力/出力デバイス(例えば、キーボード、タッチスクリーン、および/またはディスプレイ)、およびネットワーク接続などの、1つまたは複数の他の構成要素に結合された一組の1つまたは複数のプロセッサを含む。一組のプロセッサおよび他の構成要素の結合は、典型的には、1つまたは複数のバスおよびブリッジ(バスコントローラとも称される)を通してなされる。記憶デバイスおよびネットワークトラフィックを搬送する信号は、それぞれ、1つまたは複数の機械読み出し可能記憶媒体および機械読み出し可能通信媒体を表す。したがって、所与の電子デバイスの記憶デバイスは、典型的には、その電子デバイスの一組の1つまたは複数のプロセッサ上で実行するためのコードおよび/またはデータを記憶する。
【0169】
この詳細な説明の全体を通して、説明の目的で、本発明の完全な理解を提供するために、数多くの具体的な詳細を記載した。しかしながら、これらの具体的な詳細の一部を伴わずに本発明が実装され得ることが当業者に明らかになるであろう。しかしながら、当業者には、本発明がこれらの具体的な詳細の一部を伴わずに実施され得ることが明らかになるであろう。ある特定の事例において、本発明の主題を不明瞭にすることを回避するために、よく知られている構造および機能は、きめ細かく説明されていない。故に、本発明の範囲および趣旨は、以下の特許請求の範囲の観点から判断されるべきである。