JP2017534982A - 4d座標から4dのz曲線インデックスを計算するための機械レベル命令 - Google Patents
4d座標から4dのz曲線インデックスを計算するための機械レベル命令 Download PDFInfo
- Publication number
- JP2017534982A JP2017534982A JP2017522115A JP2017522115A JP2017534982A JP 2017534982 A JP2017534982 A JP 2017534982A JP 2017522115 A JP2017522115 A JP 2017522115A JP 2017522115 A JP2017522115 A JP 2017522115A JP 2017534982 A JP2017534982 A JP 2017534982A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- source
- unit
- field
- register
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Abandoned
Links
- 238000012545 processing Methods 0.000 claims description 28
- 150000001875 compounds Chemical class 0.000 abstract 1
- 230000015654 memory Effects 0.000 description 119
- 239000013598 vector Substances 0.000 description 105
- VOXZDWNPVJITMN-ZBRFXRBCSA-N 17β-estradiol Chemical compound OC1=CC=C2[C@H]3CC[C@](C)([C@H](CC4)O)[C@@H]4[C@@H]3CCC2=C1 VOXZDWNPVJITMN-ZBRFXRBCSA-N 0.000 description 73
- 238000010586 diagram Methods 0.000 description 49
- 238000006073 displacement reaction Methods 0.000 description 40
- 238000007667 floating Methods 0.000 description 19
- 238000006243 chemical reaction Methods 0.000 description 12
- 238000000034 method Methods 0.000 description 11
- 238000003860 storage Methods 0.000 description 11
- 230000006870 function Effects 0.000 description 10
- 239000011159 matrix material Substances 0.000 description 10
- 238000004891 communication Methods 0.000 description 8
- 239000003795 chemical substances by application Substances 0.000 description 7
- 230000006835 compression Effects 0.000 description 6
- 238000007906 compression Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 6
- 230000003068 static effect Effects 0.000 description 6
- 239000000872 buffer Substances 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 5
- 230000008859 change Effects 0.000 description 5
- 238000013461 design Methods 0.000 description 5
- 230000000873 masking effect Effects 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 238000013519 translation Methods 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 230000000295 complement effect Effects 0.000 description 4
- 101000912503 Homo sapiens Tyrosine-protein kinase Fgr Proteins 0.000 description 3
- 102000001332 SRC Human genes 0.000 description 3
- 108060006706 SRC Proteins 0.000 description 3
- 102100026150 Tyrosine-protein kinase Fgr Human genes 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000010076 replication Effects 0.000 description 2
- 230000001629 suppression Effects 0.000 description 2
- 101100285899 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SSE2 gene Proteins 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000003416 augmentation Effects 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000010191 image analysis Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 229910052754 neon Inorganic materials 0.000 description 1
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3893—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
- G06F9/3895—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit or string instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30025—Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
Abstract
1つの実施形態において、プロセッサは、4DのZ曲線インデックスを計算するために、32ビットおよび64ビットの機械レベル命令を含む。プロセッサ復号化ユニットは、3つのソースオペランドを有するz曲線順序付け命令を複合化するように構成され、各オペランドは、第1、第2、または第3の座標のうちの1つと関連付けられ、プロセッサ実行ユニットは、4DのZ曲線インデックスをデスティネーションオペランドによって指定される場所に出力する前に、復号化された命令を実行するように構成される。
Description
実施形態は、全般的に、コンピュータプロセッサの分野に関する。より具体的には、4D座標から4DのZ曲線インデックスを計算するための機械レベル命令を含む装置に関する。
Z順序曲線は、1つのタイプの空間充填曲線であり、その領域が単位間隔[0,1]である連続関数である。Z順序付け(例えば、モートン順序付け)は、疎および密なマトリクス演算(特に、マトリクス乗算)、有限要素解析、画像解析、地震解析、光線追跡、および他のものを含む、多次元的な局所性が重要である大きいデータセットについて、性能のかなりの向上を提供することができる。しかしながら、座標からZ順序曲線インデックスの計算は、計算集約的であり得る。
本実施形態のより良い理解は、以下の図面と関連する、以下の詳細な説明から得ることができる。
以下の説明では、以下で説明される実施形態の完全な理解を提供するために、数多くの具体的な詳細が説明の目的で記載される。しかしながら、当業者には、この実施形態がこれら具体的な詳細の一部を伴わずに実践することができることが明らかになるであろう。他の事例では、実施形態の根本原理を不明瞭にすることを回避するために、よく知られている構造およびデバイスがブロック図の形態で示される。1つの実施形態において、インテルアーキテクチャ(IA:Intel Architecture)を拡張したアーキテクチャの拡張が説明されるが、根本原理は、いかなる特定のISAにも限定されない。
ベクトルおよびSIMD命令の概要
或るタイプのアプリケーションは、しばしば、多数のデータアイテムに対して同じ演算(「データパラレリズム」と称される)を行うことを必要とする。シングルインストラクションマルチプルデータ(SIMD:Single Instruction Multiple Data)は、プロセッサに、複数のアイテムに対して1つの演算を行わせる、1つのタイプの命令を指す。SIMD技術は、レジスタのビットを、各々が個別の値を表すいくつかの固定サイズのデータ要素に論理的に分割することができるプロセッサに特に適している。例えば、256ビットレジスタの中のビットは、4つの別々の64ビットパックドデータ要素(クワッドワード(Q)サイズデータ要素)、8つの別々の32ビットパックドデータ要素(ダブルワード(D)サイズデータ要素)、16個の別々の16ビットパックドデータ要素(ワード(W)サイズデータ要素)、または32個の別々の8ビットデータ要素(バイト(B)サイズデータ要素)として演算されるソースオペランドとして指定することができる。このタイプのデータは、「パックド」データタイプまたは「ベクトル」データタイプと称され、このデータタイプのオペランドは、パックドデータオペランドまたはベクトルオペランドと称される。換言すれば、パックドデータ項目またはベクトルは、一連のパックドデータ要素を指し、パックドデータオペランドまたはベクトルオペランドは、SIMD命令(パックドデータ命令またはベクトル命令としても知られている)のソースまたはデスティネーションオペランドである。
或るタイプのアプリケーションは、しばしば、多数のデータアイテムに対して同じ演算(「データパラレリズム」と称される)を行うことを必要とする。シングルインストラクションマルチプルデータ(SIMD:Single Instruction Multiple Data)は、プロセッサに、複数のアイテムに対して1つの演算を行わせる、1つのタイプの命令を指す。SIMD技術は、レジスタのビットを、各々が個別の値を表すいくつかの固定サイズのデータ要素に論理的に分割することができるプロセッサに特に適している。例えば、256ビットレジスタの中のビットは、4つの別々の64ビットパックドデータ要素(クワッドワード(Q)サイズデータ要素)、8つの別々の32ビットパックドデータ要素(ダブルワード(D)サイズデータ要素)、16個の別々の16ビットパックドデータ要素(ワード(W)サイズデータ要素)、または32個の別々の8ビットデータ要素(バイト(B)サイズデータ要素)として演算されるソースオペランドとして指定することができる。このタイプのデータは、「パックド」データタイプまたは「ベクトル」データタイプと称され、このデータタイプのオペランドは、パックドデータオペランドまたはベクトルオペランドと称される。換言すれば、パックドデータ項目またはベクトルは、一連のパックドデータ要素を指し、パックドデータオペランドまたはベクトルオペランドは、SIMD命令(パックドデータ命令またはベクトル命令としても知られている)のソースまたはデスティネーションオペランドである。
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月を参照されたい)。
Z曲線インデクシングの概要
図1Aは、例示される8×8マトリクス100の要素ごとの、Z順序キーマッピングを例示する。示される各要素内で、より上位のビットは、最上部にあり、より下位のビットは、最底部にある。Z曲線順序付けの1つの実装形態は、元々のインデックス各々のビットを各次元にインターリーブする(例えば、シャッフルする)ことによって行われる。例示されるマトリクス100の各要素に示されるZ順序付けは、マトリクス100の中の各要素の次元_1 101および次元_2 102の値のビットごとのインターリーブによって生成される。
図1Aは、例示される8×8マトリクス100の要素ごとの、Z順序キーマッピングを例示する。示される各要素内で、より上位のビットは、最上部にあり、より下位のビットは、最底部にある。Z曲線順序付けの1つの実装形態は、元々のインデックス各々のビットを各次元にインターリーブする(例えば、シャッフルする)ことによって行われる。例示されるマトリクス100の各要素に示されるZ順序付けは、マトリクス100の中の各要素の次元_1 101および次元_2 102の値のビットごとのインターリーブによって生成される。
例えば、座標[2,3](例えば、次元_1 101のバイナリ010および次元_2 102のバイナリ011)での要素のZ曲線インデックスは、各次元の座標のビットをインターリーブすることによって決定することができ、その結果、001101(例えば、0x0D)のバイナリのZ曲線インデックスとなる。例示的なZ曲線インデックス値は、座標[2,3]でのマトリクス要素が、例示的なマトリクス100のZ順序曲線の(10からインデックスを付けて)13番目のインデックスであることを示す。
図1Bは、Z順序で要素のマトリクス要素を順次的に追跡することによって作成されるZ曲線200のグラフ図である。図1Bには、例示的な目的で、単純な2DのZ曲線および関連付けられるインデックスが示される。限られたビット長を有する限られた数の座標の場合は、予め計算した値を記入したルックアップテーブルを使用して、一組の座標のZ曲線インデックスを素早く決定することができる。これは、座標の数およびサイズが増加するにつれて非実用的になり得る。1つの実施形態において、プロセッサは、大きいデータセットを解析するときに、4DのZ曲線インデックスを計算して、計算オーバヘッドを低減させ、アプリケーション性能を向上させるための32ビットおよび64ビットの機械レベル命令を含む。
4DのZ曲線インデックスを計算するための機械レベル命令
1つの実施形態において、機械命令は、プロセッサに、入力された座標値に対してビット操作演算を行うことによって4DのZ曲線インデックスを計算させる。
1つの実施形態において、機械命令は、プロセッサに、入力された座標値に対してビット操作演算を行うことによって4DのZ曲線インデックスを計算させる。
表1に示されるように、32ビットz曲線インデックス命令は、各ソース座標の8個の下位ビットを32ビットデスティネーションの中へシャッフルする。1つの実施形態において、x座標値およびy座標値は、第1のソースオペランドによって示されるレジスタにパックされる。z座標およびt座標は、第2のソースオペランドによって示されるレジスタにパックされる。各座標値のビットは、1ソースあたり4つのビットストライドおよびソース間の1つのビットオフセットを伴うデスティネーションに交互に分配され、よって、ビットは、指定範囲内で、ゼロビットに、次いで3つおきのビットに分配される。例えば、x座標のビットは、ビット0、4、8、...、28に分配され、y座標ビットは、ビット1、5、8、...、29に分配され、z座標ビットは、ビット2、6、10、...、30に分配され、t座標ビットは、ビット3、7、11、...、31に分配される。
表2に示されるように、64ビットz曲線インデックス命令は、各ソース座標の16個の下位ビットを64ビットデスティネーションの中へシャッフルする。1つの実施形態では、2つ座標値が、32ビット命令のようにレジスタにパックされる。各座標値の16個の下位ビットは、1ソースあたり4つのビットストライドおよびソース間の1つのビットオフセットを伴うデスティネーションに交互に分配され、よって、ビットは、指定範囲内で、ゼロビットに、次いで3つおきのビットに分配される。例えば、x座標のビットは、ビット0、4、8、...、60に分配され、y座標ビットは、ビット1、5、8、...、61に分配され、z座標ビットは、ビット2、6、10、...、62に分配され、t座標ビットは、ビット3、7、11、...、63に分配される。32ビットZ曲線インデックスを算出するための例示的な高レベル疑似コードは、下の表3に示される。64ビットZ曲線インデックスを算出するための例示的な高レベル疑似コードは、下の表4に示される。疑似コードは、上の表1および表2に示されるビット分配を行うために使用することができる、例示的な高レベル論理を示す。
図2A〜2Bは、一実施形態による、ハードウェアZ曲線インデックスの実装形態のための例示的なマルチステージ論理を例示する。図2Aは、XORゲート212と、シフタ回路214と、ANDゲート216とを含む論理の単一のステージ210を示す。ソース入力202は、ソース座標値または以前の論理ステージからの入力とすることができる。1つの実施形態では、表1および表2に示されるように、複数の次元が単一のオペランドにパックされる。ソースオペランドから次元値を分割するための追加の論理が処理論理に含まれる。1つの実施形態では、各ソースオペランドからの複数の次元を並列に処理するために、論理の単一のステージ210の複数のインスタンスが含まれる。
1つの実施形態において、一組の一時レジスタ(例えば、temp_A 204、temp_B 206)を使用して、制御値を供給し、ここで、一時_A 204は、シフタ回路にシフト値を供給し、一時_B 206は、データがステージ_out218を介して出力される前に適用されるビットマスクを供給する。ステージ_out218の値は、最終ステージを除いて、連続する論理ステージごとにSRC202を供給する。最終ステージについて、ステージ_out218は、ソース(例えば、SRC202)として提供される初期座標に対応するデスティネーション出力の一部分である。
図2Bは、一実施形態による、4DのZ曲線インデックス命令を実装するためのマルチステージ論理配設のブロック図を示す。そのような実施態様において、プロセッサは、各ソース入力に対して論理演算を行い、1座標あたりの構成要素を単一の出力に組み合わせるように構成される、実行ユニットを含む。1つの実施形態において、論理の単一ステージ210の複数のインスタンス220(例えば、32ビットについて220A〜F、64ビットについて220A〜G)は、単一入力座標の4DのZ曲線インデックスの一部分を計算するように配設される。最終ステージ以外の全てのステージ_out218は、その後のステージのソースを提供する。最終ステージのステージ_out218は、単一の初期入力座標と関連付けられるZ曲線インデックスの一部分を提供する。1つの実施形態において、それぞれの座標の出力は、次いで、デスティネーションレジスタに出力する前に組み合わせられる。
各Z曲線インデックスのそれぞれの構成要素を計算するための演算は、実行ユニットにおいて直列にまたは並列に行うことができる。例えば、Z曲線インデックスを計算するための単一のマクロ命令を、複数のマイクロ演算に復号化することができ、各マイクロ演算は、1つまたは複数の実行ユニットに、個別の中間値を組み合わせる前に、ソース座標ごとに演算を行わせる。
図3は、一実施形態による、32ビットの4DのZ曲線インデックス命令を実装するための、マルチステージ論理配設のブロック図を示す。1つの実施形態において、図2Aに示される論理210の複数のインスタンスは、図2Bに示される論理ステージ220A〜Fによって示されるように結合することができる。マルチステージ論理は、座標ごとにZ曲線インデックスビットシャッフルを行うために使用することができる。第1の論理ステージ220Aは、32ビットソース入力302を受け付け、ゼロ左シフト304および0x000000ffのマスク値306を有する。第1の論理ステージ220Aの出力308は、第2の論理ステージ220Bのソースとして提供され、入力として、16ビット左シフト314および0x00c0003fのマスク値316を受け付ける。第2の論理ステージ220Bの出力318は、第3の論理ステージ220Cのソースとして提供され、入力として、8ビット左シフト324および0x00c03807のマスク値326を受け付ける。第3の論理ステージ220Cからの出力328は、第4の論理ステージ220Dのソースとして提供され、入力として、4ビット左シフト334および0x08530853のマスク値336を受け付ける。第4の論理ステージ220Dからの出力338は、第5の論理ステージ220Eのソースとして提供され、入力として、2ビットの左シフト344および0x09090909のマスク値346を受け付ける。第5の論理ステージ220Eの出力348は、第6の論理ステージ220Fのソースとして提供され、入力として、1ビット左シフト354および0x11111111のマスク値356を受け付ける。第6の論理ステージ220Fの出力358は、シフトされ、他のソース座標の出力と組み合わせられ、そして、4DのZ曲線インデックスの結果として出力される。各ソース入力は、類似の論理パイプラインの処理を受ける。1つの実施形態において、入力ごとのマイクロ演算は、並列に行われる。
図4は、一実施形態による、64ビットの4DのZ曲線インデックス命令を実装するための、マルチステージ論理配設のブロック図を示す。図2Bに示される各論理ステージ220A〜Fは、座標ごとにZ曲線インデックスビットシャッフルを行うために使用することができる。1つの実施形態において、論理ステージは、少なくとも64ビットの精度を有する演算を行って、64ビット出力を生成するように構成される。第1の論理ステージ220Aは、64ビットソース入力402を受け付け、ゼロ左シフト404および0x0000ffffのマスク値406を有する。第1の論理ステージ220Aの出力408は、第2の論理ステージ220Bのソースとして提供され、入力として、32ビット左シフト414および0x0000f800000007ffのマスク値416を受け付ける。第2の論理ステージ220Bの出力418は、第3の論理ステージ220Cのソースとして提供され、入力として、16ビット左シフト424および0x0000f80007c0003fのマスク値426を受け付ける。第3の論理ステージ220Cの出力428は、第4の論理ステージ220Dのソースとして提供され、入力として、8ビット左シフト434および0x00c0380700c03807のマスク値436を受け付ける。第4の論理ステージ220Dの出力438は、第5の論理ステージ220Eのソースとして提供され、入力として、4ビット左シフト444および0x0843084308430843のマスク値446を受け付ける。第5の論理ステージ220Eの出力448は、第5の論理ステージ220Eのソースとして提供され、入力として、2ビットの左シフト454および0x0909090909090909のマスク値456を受け付ける。第6の論理ステージ220Fの出力458は、第6の論理ステージ220Fのソースとして提供され、入力として、1ビット左シフト464および0x1111111111111111のマスク値466を受け付ける。第7の論理ステージ220Gの出力468は、シフトされ、他のソース座標の出力と組み合わせられ、そして、4DのZ曲線インデックスの結果として返される。各ソース入力は、類似の論理パイプラインの処理を受ける。1つの実施形態において、入力ごとのマイクロ演算は、並列に行われる。
図5は、一実施形態による、4つの座標から4DのZ曲線インデックスを計算する命令のためのオペランドおよび論理のブロック図である。命令の一実施形態は、2つのソースオペランドを含む。各ソースオペランドは、上位ビットに第1の座標を記憶し、下位ビットに第2の座標を記憶する、単一のレジスタ、メモリアドレス、または即値を示す。例えば、図5は、次元X座標値501および次元Y座標値503を示す、または含む、第1のソースオペランド(例えば、SRC1 502)を示す。第2のソースオペランド(例えば、SRC1 506)は、次元Z座標値505および次元T座標値507に対する指示を含む。マイクロ演算レベルで、オペランドと関連付けられる座標は、実行ユニットによって処理される前にプロセッサレジスタに記憶される。1つの実施形態において、座標は、Z順序論理によって処理される前に、オペランドから個別のレジスタにアンパックされる。1つの実施形態において、マルチプレクサ(例えば、mux508)は、ソースレジスタをプロセッサ実行ユニットのz順序論理510に結合させ、ソース座標からZ順序インデックスを計算する。入力、32ビット前出力、および最終出力の例示的な表現は、下の表5に示される。
上の表5は、ソース入力ごとの前出力を示す。表5の各x、y、z、またはtの値は、示された座標値の単一ビットを示し、最下位ビットを右側に、最上位ビットを左側に有する。yおよびt座標は、SRC1 502およびSRC2 506の下位ビットに示されるが、この配設は、例示的なものであり、他の配設が可能である。1つの実施形態において、ソースSRC1 502およびSRC2 506オペランドのパックされた次元は、Z順序論理510によって一時レジスタにアンパックされ、処理される。
表5に示されるように、Z順序論理510は、SRC1 502オペランドに基づいて、一時レジスタSRC1AおよびSRC1Bに値を出力する。Z順序論理510は、SRC2 506オペランドに基づいて、一時レジスタSRC2AおよびSRC2Bに値を出力する。各座標値のビットは、4ビットストライドで一時レジスタに分配される。Z順序インデックスは、一時レジスタの値を左シフトし、次いで、シフトした値に対してビットごとのOR演算を行うことにより値を組み合わせることによって作成される。表3に示される疑似コードによって示されるように、レジスタSRC1Bのy座標のビットは、1ビットだけ左シフトされる。レジスタSRC2Aのz座標のビットは、2ビットだけ左シフトされる。レジスタSRC2Bのt座標のビットは、3ビットだけ左シフトされる。一時レジスタのシフトされた前出力値は、組み合わせられ、命令のデスティネーションオペランド512によって指定されるDEST場所に出力される。1つの実施形態において、示されるレジスタは、SIMD/ベクトルレジスタであり、命令は、ベクトル演算を行うためのSIMD命令である。
図6は、一実施形態による、4つの座標から4DのZ曲線インデックスを計算する命令を実行するための、追加の論理のブロック図である。1つの実施形態において、各ソースオペランド(例えば、SRC600)の2つの座標値は、Z順序論理510によって並列に処理される。1つの実施形態において、第1のインターリーブ論理ブロック(例えば、インターリーブ_論理_1 620A)は、図2Bのマルチステージ論理220(例えば、32ビットについて220A〜F、64ビットについて220A〜G)などの、32ビットまたは64ビットZ順序インデックスを計算するための論理を含む。処理中に、ビットマスクは、2つの座標値のうちの1つを含む上位ビットをゼロにする。上位ビットに含まれる座標値を並列処理するために、第2のインターリーブ論理ブロック(例えば、インターリーブ_論理_2 620B)を含むことができ、該座標値は、右シフト演算、右回転演算、または左回転演算を行うように構成されるシフタ回路602によって下位ビットにシフトまたは回転される。1つの実施形態において、組み合わせ論理604は、命令のデスティネーションオペランドによって示されるデスティネーション(例えば、DEST600)に出力される前に、前出力値を中間一時レジスタにシフトし、組み合わせる。次いで、第2のソースオペランドについて処理演算を繰り返す。
図7は、一実施形態による、4DのZ曲線命令を処理するためのフロー図である。ブロック702に示されるように、命令パイプラインは、プロセッサが単一のz曲線インデックス命令をフェッチして、4DのZ曲線インデックスを計算するときに開始する。命令は、ブロック702に示されるように、第1および第2のソースオペランド、ならびにデスティネーションオペランドを有する。
ブロック704に示されるように、プロセッサは、Z曲線インデックス命令を復号化された命令に復号化する。1つの実施形態において、復号化された命令は、単一の演算である。1つの実施形態において、復号化された命令は、命令の各サブ要素を行うための1つまたは複数の論理的マイクロ演算を含む。マイクロ演算は、実行ユニットなどのプロセッサの構成要素に、命令を実装するための様々な演算を行わせることができるように、ハードワイヤードまたはマイクロコード演算とすることができる。
1つの実施形態において、ブロック706に示されるように、復号化された命令は、実行ユニットなどのプロセッサの構成要素に、ソースオペランドによって示されるソースオペランド値をフェッチするための演算を含む、様々な演算を行わせる。様々な実施形態において、ソースオペランドは、レジスタ識別子、メモリアドレス、または即時値を含むことができる。
1つの実施形態において、ブロック708に示されるように、プロセッサ内の論理ユニットは、追加の演算を行って、座標値を個々の一時レジスタに回転またはシフトすることによって、ソースオペランド値からソース座標値をフェッチする。1つの実施形態において、論理ユニットは、アンパック演算を必要とすることなく、ソースオペランドからソース座標値を自動的に分離するためのハードウェアを含む。例えば、各座標ソースは、ベクトル命令の中の個別のデータ要素とすることができる。
ブロック710に示されるように、ソース座標値がフェッチされると、復号化された命令は、1つまたは複数の実行ユニットに、Z曲線インデックスを計算させる。1つの実施形態において、Z曲線インデックスは、各ソース座標値の少なくとも8個の下位ビットに基づき、また、ソース座標値の構成ビットをインターリーブすることによって計算される。1つの実施形態において、結果として生じるZ曲線インデックスは、長さが少なくとも32ビットである。1つの実施形態において、結果として生じるZ曲線インデックスは、長さが少なくとも64ビットである。64ビット命令について、各ソース値の少なくとも16個の下位ビットは、64ビットZ曲線インデックスを生成するように処理することができる。ブロック712に示されるように、プロセッサは、Z曲線インデックス命令の結果をデスティネーションオペランドによって示される場所に記憶することができる。32ビット命令の場合、Z曲線インデックスは、32ビット出力レジスタに記憶される。64ビット命令の場合、Z曲線インデックスは、64ビット出力レジスタに記憶される。
本明細書で説明される実施形態は、X、Y、Z、およびT座標を使用した演算を指し、該座標は、4次元空間内の位置を定義するために使用される座標である。当業者は、使用される座標は、例示的なものであり、X、Y、Z、およびT座標は、全般的に、Z曲線順序付けを適用することができる4次元空間における第1、第2、第3、または第4の次元の場所を定義するために使用される、任意の一組の座標を指すことを理解するであろう。
本明細書で説明される命令の実施形態は、ソース座標値内の上位ビットまたは下位ビットを演算する。本明細書で説明されるように、上位ビットおよび下位ビットは、バイトがコンピュータメモリに記憶されたときにデータワードを形成する該バイトを解釈するために使用される規定とは関係なく、最上位ビットおよび最下位ビットとして定義される。換言すれば、下位ビットまたは最下位ビットは、使用中のバイト順序の規定に従って、データワード内の最小アドレスまたは最大アドレスに記憶することができる。
本明細書で説明される実施形態は、処理装置またはデータ処理システムで実装される。上述の説明では、多数の具体的な詳細を、本明細書で説明される実施形態の完全な理解を提供する順序で記載した。しかしながら、当業者に明らかになるように、実施形態は、これらの具体的な詳細のいくつかを伴わずに実践することができる。説明されるアーキテクチャ特徴のいくつかは、インテルアーキテクチャ(IA:Intel0173 Architecture)に対する拡張である。しかしながら、根本原理は、任意の特定の命令セットに限定されない。
命令セット、または命令セットアーキテクチャ(ISA:instruction set architecture)は、プログラミングに関連するコンピュータアーキテクチャの一部であり、ネイティブデータタイプ、命令、レジスタアーキテクチャ、アドレッシングモード、メモリアーキテクチャ、割り込および例外処理、ならびに外部入力および出力(I/O)を含む。「命令」という用語は、本明細書では一般的にマクロ命令−すなわち、実行のためにプロセッサに提供される命令−を指し、−マイクロ命令またはマイクロ演算(例えば、マイクロops)−すなわち、プロセッサの復号器によるマクロ命令の復号化の結果−とは対照的であることに留意されたい。マイクロ命令またはマイクロopsは、プロセッサ上の実行ユニットに、演算を行ってマクロ命令と関連付けられる論理を実装するよう命令するように構成することができる。
ISAは、マイクロアーキテクチャから識別され、命令セットを実装するためにしようされる一組のプロセッサ設計技法である。異なるマイクロアーキテクチャを有するプロセッサは、よく見られる命令セットを共有することができる。例えば、Intel(登録商標)Pentium(登録商標)4プロセッサ、Intel(登録商標)Core(商標)プロセッサ、およびAdvanced Micro Devices,Inc.(Sunnyvale、CA)のプロセッサは、ほぼ同じバージョンの×86命令セット(より新しいバージョンが追加された、いくつかの拡張を有する)を実装するが、異なる内部設計を有する。例えば、ISAの同じレジスタアーキテクチャは、よく知られている技法を使用して、異なる方法で異なるマイクロアーキテクチャに実装することができ、専用の物理レジスタ、すなわち、レジスタリネーミングメカニズム(例えば、レジスタエイリアステーブル(RAT:Ragister Alias Table)、リオーダーバッファ(ROB:Reorder Buffer)、およびリタイアメントレジスタファイルの使用)を使用した、1つまたは複数の動的に割り当てられた物理レジスタを含む。別途指定されない限り、レジスタアーキテクチャ、レジスタファイル、およびレジスタといった語句は、ソフトウェア/プログラマが視覚的に確認できるもの、および命令がレジスタを指定する様式を指すために本明細書で使用される。識別が必要とされる場合、「論理的」、「アーキテクチャ上の」、または「ソフトウェアビジブル」といった形容詞は、レジスタアーキテクチャのレジスタ/ファイルを示すために使用され、一方で、所与のマイクロアーキテクチャのレジスタ(例えば、物理レジスタ、リオーダーバッファ、リタイアメントレジスタ、レジスタプール)示すためには、異なる形容詞が使用される。
命令セットは、1つまたは複数の命令フォーマットを含む。所与の命令フォーマットは、とりわけ、行われる演算およびその演算が行われるオペランド(複数可)を指定するために、様々なフィールド(ビット数、ビットの場所)を定義する。いくつかの命令フォーマットは、命令テンプレート(またはサブフォーマット)の定義を通して更に分解される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義することができ(含まれるフィールドは、典型的には、同じ順序であるが、含まれるフィールドがより少ないので、少なくともいくつかは、異なるビット位置を有する)、および/または異なって解釈される所与のフィールドを有するように定義することができる。所与の命令は、所与の命令フォーマット(および定義された場合は、その命令フォーマットの命令テンプレートのうちの所与の1つ)を使用して表現され、また、演算およびオペランドを指定する。命令ストリームは、特定の命令のシーケンスであり、シーケンスの中の各命令は、ある命令フォーマット(および定義された場合は、その命令フォーマットの命令テンプレートのうちの所与の1つ)での命令の発生である。
例示的な命令フォーマット
本明細書で説明される命令(複数可)の実施形態は、異なるフォーマットで具現化することができる。加えて、例示的なシステム、アーキテクチャ、およびパイプラインが以下で詳述される。命令(複数可)の実施形態は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行することができるが、詳述されるものに限定されない。
本明細書で説明される命令(複数可)の実施形態は、異なるフォーマットで具現化することができる。加えて、例示的なシステム、アーキテクチャ、およびパイプラインが以下で詳述される。命令(複数可)の実施形態は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行することができるが、詳述されるものに限定されない。
ベクトルフレンドリー命令フォーマットは、ベクトル命令(例えば、ベクトル演算に特有の或るフィールドがある)に適した命令フォーマットである。実施形態は、ベクトルおよびスカラ演算の両方がベクトルフレンドリー命令フォーマットを通してサポートされているように説明されるが、代替の実施形態は、ベクトルフレンドリー命令フォーマットを通じてサポートされるベクトル演算だけを使用する。
図8A〜8Bは、一実施形態による、一般的ベクトルフレンドリー命令フォーマットおよびその命令テンプレートを例示するブロック図である。図8Aは、一実施形態による、一般的ベクトルフレンドリー命令フォーマットおよびそのクラスA命令テンプレートを例示するブロック図であり、一方で、図8Bは、一実施形態による、一般的ベクトルフレンドリー命令フォーマットおよびそのクラスB命令テンプレートを例示するブロック図である。具体的には、クラスAおよびクラスB命令テンプレートに対して定義される一般的ベクトルフレンドリー命令フォーマット800は、どちらのクラスも、非メモリアクセス805の命令テンプレートおよびメモリアクセス820の命令テンプレートを含む。ベクトルフレンドリー命令フォーマットのコンテキストにおける「一般的」という用語は、いかなる特定の命令セットにも結び付けられていない命令フォーマットを指す。
実施形態は、ベクトルフレンドリー命令フォーマットが、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バイトのベクトルオペランド)を、サポートする。
図8AのクラスA命令テンプレートは、1)非メモリアクセス805の命令テンプレート内に、非メモリアクセスのフルラウンド制御タイプ演算810の命令テンプレート、および非メモリアクセスのデータ変換タイプ演算815の命令テンプレートが示されていること、ならびに2)メモリアクセス820の命令テンプレート内に、メモリアクセスの一時的825命令テンプレート、およびメモリアクセスの非一時的830命令テンプレートが示されていること、を含む。図8BのクラスB命令テンプレートは、1)非メモリアクセス805の命令テンプレート内に、非メモリアクセスの書き込みマスク制御の部分的ラウンド制御タイプ演算812の命令テンプレート、および非メモリアクセスの書き込みマスク制御のvsizeタイプ演算817の命令テンプレートが示されていこと、ならびに2)メモリアクセス820の命令テンプレート内に、メモリアクセスの書き込みマスク制御827の命令テンプレートが示されていること、を含む。
一般的ベクトルフレンドリー命令フォーマット800は、図8A〜8Bに例示される順序で、以下に列記される以下のフィールドを含む。
フォーマットフィールド840−このフィールドの特定の値(命令フォーマット識別子の値)は、ベクトルフレンドリー命令フォーマットを、すなわち、命令ストリームのベクトルフレンドリー命令フォーマットにおける命令の発生を一意的に特定する。したがって、このフィールドは、一般的ベクトルフレンドリー命令フォーマットだけを有する命令セットには必要でない、という意味で随意である。
ベース演算フィールド842−そのコンテンツは、異なるベース演算を識別する。
レジスタインデックスフィールド844−そのコンテンツは、直接またはアドレス生成を通して、ソースの場所およびデスティネーションオペランドがレジスタに、またはメモリにあることを指定する。これらは、P×Q(例えば、32×512、16×128、32×1024、64×1024)のレジスタファイルからN個のレジスタを選択するための十分な数のビットを含む。1つの実施形態において、Nは、最大で3つのソースおよび1つのデスティネーションレジスタとすることができるが、代替の実施形態は、より多いまたはより少ないソースおよびデスティネーションレジスタをサポートすることができる(例えば、最大2つのソースをサポートすることができ、これらのソースのうちの1つがデスティネーションとしても機能する。最大で3つのソースをサポートすることができ、これらのソースのうちの1つがデスティネーションとしても機能する。また、最大で2つのソースおよび1つのデスティネーションをサポートすることができる)。
修飾子フィールド846−そのコンテンツは、非メモリアクセス805の命令テンプレートとメモリアクセス820の命令テンプレートとの間で、メモリアクセスするものと、そうでないものを指定する命令の、一般的ベクトル命令フォーマットにおける発生を識別する。メモリアクセス演算は、メモリ階層に対する読み取りおよび/または書き込みを行い(いくつかの場合では、レジスタの値を使用してソースおよび/またはデスティネーションアドレスを指定し)、一方で、非メモリアクセス演算は、これらを行わない(例えば、ソースおよびデスティネーションがレジスタである)。1つの実施形態において、このフィールドはまた、メモリアドレス計算を行うために、3つの異なる方法から選択するが、代替の実施形態は、メモリアドレス計算を行うためのより多い、より少ない、または異なる方法をサポートすることができる。
拡大演算フィールド850−そのコンテンツは、ベース演算に加えて、様々な異なる演算のうちのどれを行うのかを識別する。このフィールドは、コンテキストに特有である。本発明の1つの実施形態において、このフィールドは、クラスフィールド868、アルファフィールド852、およびベータフィールド854に分割される。拡大演算フィールド850は、共通の演算グループを、2つ、3つ、または4つの命令ではなく、単一の命令で行うことを可能にする。
スケールフィールド860−そのコンテンツは、メモリアドレス生成のための(例えば、2scale*index+baseを使用するアドレス生成のための)インデックスフィールドのコンテンツのスケーリングを可能にする。
変位フィールド862A−そのコンテンツは、(例えば、2scale*index+base+displacementを使用するアドレス生成のための)メモリアドレス生成の一部として使用される。
変位係数フィールド862B(変位係数フィールド862Bの上に変位フィールド862Aを直接並置することは、一方または他方が使用されることを示すことに留意されたい)−そのコンテンツは、アドレス生成の一部として使用され、メモリアクセス(N)のサイズによってスケーリングされる変位係数を指定し、ここで、Nは、(例えば、2scale*index+base+displacementを使用するアドレス生成のための)メモリアクセスにおけるバイト数である。冗長な下位ビットは無視され、それ故に、変位係数フィールドのコンテンツは、有効アドレスを算出する際に使用される最終変位を生成するために、メモリオペランドの総サイズ(N)が乗算される。Nの値は、フルオペコードフィールド874(後に本明細書で説明される)およびデータ操作フィールド854Cに基づいて、実行時にプロセッサハードウェアによって決定される。変位フィールド862Aおよび変位係数フィールド862Bは、非メモリアクセス805の命令テンプレートに使用されない、および/または異なる実施形態は、これら2つのうちの1つだけを実装することができる、または全く実装しない場合がある、という意味で随意である。
データ要素幅フィールド864−そのコンテンツは、(いくつかの実施形態では、すべての命令について、他の実施形態では、命令のいくつかだけについて)いくつかのデータ要素幅のうちのどれを使用するのかを識別する。このフィールドは、1つだけのデータ要素幅がサポートされる、および/またはデータ要素幅がオペコードのいくつかの態様を使用してサポートされる場合に、該フィールドが必要でない、という意味で随意である。
書き込みマスクフィールド870−そのコンテンツは、データ要素位置ごとに、デスティネーションベクトルオペランドの中のそのデータ要素位置がベース演算および拡大演算の結果を反映するかどうかを制御する。クラスA命令テンプレートは、マージング−書き込みマスキングをサポートし、一方で、クラスB命令テンプレートは、マージング−およびゼロ化−書き込みマスキングの両方をサポートする。マージするときに、ベクトルマスクは、デスティネーションの任意の一組のベクトルマスクを、(ベース演算および拡大演算によって指定される)任意の演算の実行中に、更新から保護することを可能にし、他の1つの実施形態では、対応するマスクビットが0を有する場合に、デスティネーションの各要素の古い値を保存する。対照的に、ゼロ化するときに、ベクトルマスクは、デスティネーションの任意の一組のベクトルマスクを、(ベース演算および拡大演算によって指定される)任意の演算の実行中に、ゼロ化することを可能にし、1つの実施形態では、対応するマスクビットが0の値を有するときに、デスティネーションの要素が0に設定される。この機能性のサブセットは、行われている演算のベクトル長(すなわち、最初から最後の1つまでの、修正されている要素のスパン)を制御する能力であるが、修正される要素が連続であることは必要でない。したがって、書き込みマスクフィールド870は、ロード、記憶、計算、論理等を含む部分的ベクトル演算を可能にする。実施形態は、書き込みマスクフィールド870のコンテンツが、使用される書き込みマスクを含むいくつかの書き込みマスクレジスタのうちの1つを選択すること(したがって、書き込みマスクフィールド870のコンテンツが、実行されるマスキングを間接的に特定すること)が説明されるが、代替の実施形態は、代わりに、または加えて、マスク書き込みフィールド870のコンテンツが、実行されるマスキングを直接的に指定することを可能にする。
即値フィールド872−そのコンテンツは、即値の仕様を可能にする。このフィールドは、即値をサポートせず、かつ即値を使用しない命令には存在しない、一般的ベクトルフレンドリーフォーマットの実装形態に存在しない、という意味で随意である。
クラスフィールド868−そのコンテンツは、命令の異なるクラスを識別する。図8A〜8Bを参照すると、このフィールドのコンテンツは、クラスAおよびクラスBの命令から選択する。図8A〜8Bにおいて、角に丸みのある四角は、特定の値がフィールドに存在することを示すために使用される(例えば、図8A〜8Bにおいて、クラスフィールド868について、それぞれ、クラスA 868AおよびクラスB 868B)。
クラスAの命令テンプレート
クラスAの非メモリアクセス805の命令テンプレートの場合において、アルファフィールド852は、RSフィールド852Aとして解釈され、そのコンテンツは、異なる拡大演算タイプのうちのどれを行うのかを識別し(例えば、ラウンド852A.1およびデータ変換852A.2が、それぞれ、非メモリアクセスのラウンドタイプ演算810、および非メモリアクセスのデータ変換タイプ演算815の命令テンプレートについて指定される)、一方で、ベータフィールド854は、指定されたタイプの演算のうちのどれを行うのかを識別する。非メモリアクセス805の命令テンプレートにおいて、スケールフィールド860、変位フィールド862A、および変位スケール862Bは、存在しない。
クラスAの非メモリアクセス805の命令テンプレートの場合において、アルファフィールド852は、RSフィールド852Aとして解釈され、そのコンテンツは、異なる拡大演算タイプのうちのどれを行うのかを識別し(例えば、ラウンド852A.1およびデータ変換852A.2が、それぞれ、非メモリアクセスのラウンドタイプ演算810、および非メモリアクセスのデータ変換タイプ演算815の命令テンプレートについて指定される)、一方で、ベータフィールド854は、指定されたタイプの演算のうちのどれを行うのかを識別する。非メモリアクセス805の命令テンプレートにおいて、スケールフィールド860、変位フィールド862A、および変位スケール862Bは、存在しない。
非メモリアクセス命令テンプレート−フルラウンド制御タイプ演算
非メモリアクセスのフルラウンド制御タイプ演算810の命令テンプレートにおいて、ベータフィールド854は、ラウンド制御フィールド854Aとして解釈され、そのコンテンツ(複数可)は、静的ラウンド処理を提供する。説明される実施形態において、ラウンド制御フィールド854Aは、全浮動小数点例外抑制(SAE:suppress all floating point exception)フィールド856およびラウンド演算制御フィールド858を含むが、代替の実施形態は、これらのコンセプトの両方をサポートすることができ、また、同じフィールドの中へ符号化することができ、またはこれらのコンセプト/フィールドのうちの一方または他方だけを有することができる(例えば、ラウンド演算制御フィールド858だけを有することができる)。
非メモリアクセスのフルラウンド制御タイプ演算810の命令テンプレートにおいて、ベータフィールド854は、ラウンド制御フィールド854Aとして解釈され、そのコンテンツ(複数可)は、静的ラウンド処理を提供する。説明される実施形態において、ラウンド制御フィールド854Aは、全浮動小数点例外抑制(SAE:suppress all floating point exception)フィールド856およびラウンド演算制御フィールド858を含むが、代替の実施形態は、これらのコンセプトの両方をサポートすることができ、また、同じフィールドの中へ符号化することができ、またはこれらのコンセプト/フィールドのうちの一方または他方だけを有することができる(例えば、ラウンド演算制御フィールド858だけを有することができる)。
SAEフィールド856−そのコンテンツは、例外イベントの報告を無効にするかどうかを識別し、SAEフィールド856のコンテンツが、抑制が有効であることを示すときに、所与の命令は、いかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも起こさない。
ラウンド演算制御フィールド858−そのコンテンツは、一群のラウンド処理演算のうちのどれを行うのかを識別する(例えば、切り上げ、切り捨て、ゼロへの丸め、および最近接丸め)。したがって、ラウンド演算制御フィールド858は、命令単位ごとに、ラウンド処理モードの変更を可能にする。プロセッサがラウンド処理モードを指定するための制御レジスタを含む本発明の一実施形態において、ラウンド演算制御フィールドの850コンテンツは、そのレジスタ値をオーバーライドする。
非メモリアクセス命令テンプレート−データ変換タイプ演算
非メモリアクセスデータ変換タイプ演算815の命令テンプレートにおいて、ベータフィールド854は、データ変換フィールド854Bとして解釈され、そのコンテンツは、いくつかのデータ変換(例えば、非データ変換、スウィズル、ブロードキャスト)のうちのどれを行うのかを識別する。
非メモリアクセスデータ変換タイプ演算815の命令テンプレートにおいて、ベータフィールド854は、データ変換フィールド854Bとして解釈され、そのコンテンツは、いくつかのデータ変換(例えば、非データ変換、スウィズル、ブロードキャスト)のうちのどれを行うのかを識別する。
クラスAのメモリアクセス820の命令テンプレートの場合において、アルファフィールド852は、エビクションヒントフィールド852Bとして解釈され、そのコンテンツは、エビクションヒントのうちのどれを使用するのかを識別し(図8Aでは、一時的852B.1および非一時的852B.2が、それぞれ、メモリアクセスの一時的825命令テンプレート、およびメモリアクセスの非一時的830命令テンプレートについて指定される)、一方で、ベータフィールド854は、データ操作フィールド854Cとして解釈され、そのコンテンツは、いくつかのデータ操作演算(プリミティブとしても知られる)のうちのどれを行うのかを識別する(例えば、非操作、ブロードキャスト、ソースのアップコンバージョン、およびデスティネーションのダウンコンバージョン)。メモリアクセス820の命令テンプレートは、スケールフィールド860を含み、随意に、変位フィールド862Aまたは変位スケールフィールド862Bを含む。
ベクトルメモリ命令は、変換サポートによって、メモリからのベクトルのロードおよび該メモリへのベクトルの記憶を行う。通常のベクトル命令と同様に、ベクトルメモリ命令は、データ要素的な様式で、メモリとの間でデータを送信し、実際に送信される要素が、書き込みマスクとして選択されるベクトルマスクのコンテンツによって指示される。
メモリアクセス命令テンプレート−一時的
一時的データは、キャッシングの利益を享受するために、すぐに再使用される可能性があるデータである。しかしながら、これはヒントであり、異なるプロセッサが、ヒントを完全に無視することを含む、異なる方法でそれを実装することができる。
一時的データは、キャッシングの利益を享受するために、すぐに再使用される可能性があるデータである。しかしながら、これはヒントであり、異なるプロセッサが、ヒントを完全に無視することを含む、異なる方法でそれを実装することができる。
メモリアクセス命令テンプレート−非一時的
非一時的データは、一次レベルキャッシュにおけるキャッシングの利益を享受するために、すぐに再使用される可能性がなく、エビクションに対する優先権が与えられるべきデータである。しかしながら、これはヒントであり、異なるプロセッサが、ヒントを完全に無視することを含む、異なる方法でそれを実装することができる。
非一時的データは、一次レベルキャッシュにおけるキャッシングの利益を享受するために、すぐに再使用される可能性がなく、エビクションに対する優先権が与えられるべきデータである。しかしながら、これはヒントであり、異なるプロセッサが、ヒントを完全に無視することを含む、異なる方法でそれを実装することができる。
クラスBの命令テンプレート
クラスBの命令テンプレートの場合に、アルファフィールド852は、書き込みマスク制御(Z)フィールド852Cとして解釈され、そのコンテンツは、書き込みマスクフィールド870によって制御される書き込みマスキングが、マージングであるべきか、またはゼロイングであるべきかを識別する。
クラスBの命令テンプレートの場合に、アルファフィールド852は、書き込みマスク制御(Z)フィールド852Cとして解釈され、そのコンテンツは、書き込みマスクフィールド870によって制御される書き込みマスキングが、マージングであるべきか、またはゼロイングであるべきかを識別する。
クラスBの非メモリアクセス805の命令テンプレートの場合において、ベータフィールド854の一部は、RLフィールド857Aとして解釈され、そのコンテンツは、異なる拡大演算タイプのうちのどれを行うのかを識別し(例えば、ラウンド処理857A.1およびベクトル長(VSIZE)857A.2が、それぞれ、非メモリアクセスの書き込みマスク制御の部分的ラウンド制御タイプ演算812の命令テンプレート、および非メモリアクセス、書き込みマスク制御、VSIZEタイプ演算817の命令テンプレートについて指定される)、一方で、ベータフィールド854の残りは、指定されたタイプの演算のうちのどれを行うのかを識別する。非メモリアクセス805の命令テンプレートにおいて、スケールフィールド860、変位フィールド862A、および変位スケール862Bは、存在しない。
非メモリアクセス、書き込みマスク制御、部分的ラウンド制御タイプ演算810の命令テンプレートにおいて、ベータフィールド854の残りは、ラウンド演算フィールド859Aとして解釈され、例外イベント報告は、無効にされる(所与の命令は、いかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも起こさない)。
ラウンド演算制御フィールド859A−ラウンド演算制御フィールド858と同様に、そのコンテンツは、一群のラウンド処理演算のうちのどれを行うのかを識別する(例えば、切り上げ、切り捨て、ゼロへの丸め、および最近接丸め)。したがって、ラウンド演算制御フィールド859Aは、命令単位ごとに、ラウンド処理モードの変更を可能にする。プロセッサがラウンド処理モードを指定するための制御レジスタを含む本発明の一実施形態において、ラウンド演算制御フィールドの850コンテンツは、そのレジスタ値をオーバーライドする。
非メモリアクセスの書き込みマスク制御のVSIZEタイプ演算817の命令テンプレートにおいて、ベータフィールド854の残りは、ベクトル長フィールド859Bとして解釈され、そのコンテンツは、いくつかのデータベクトル長(例えば、128、256、または512バイト)のうちのどれを行うのかを識別する。
クラスBのメモリアクセス820の命令テンプレートの場合において、ベータフィールド854の一部は、ブロードキャストフィールド857Bとして解釈され、そのコンテンツは、ブロードキャストタイプデータ操作演算が実行されるかどうかを識別し、一方で、ベータフィールド854の残りは、ベクトル長フィールド859Bと解釈される。メモリアクセス820の命令テンプレートは、スケールフィールド860を含み、随意に、変位フィールド862Aまたは変位スケールフィールド862Bを含む。
一般的ベクトルフレンドリー命令フォーマット800に関して、フルオペコードフィールド874は、フォーマットフィールド840、ベース演算フィールド842、およびデータ要素幅フィールド864を含むように示されている。フルオペコードフィールド874がこれらのフィールドのすべてを含む1つの実施形態が示されるが、該フィールドのすべてをサポートしない実施形態において、フルオペコードフィールド874は、該フィールドのすべてよりも少ないフィールドを含む。フルオペコードフィールド874は、演算コード(オペコード)を提供する。
拡大演算フィールド850、データ要素幅フィールド864、および書き込みマスクフィールド870は、これらの特徴を、一般的ベクトルフレンドリー命令フォーマットで、命令ごとに指定することを可能にする。
書き込みマスクフィールドとデータ要素幅フィールドとの組み合わせは、異なるデータ要素幅に基づいてマスクを適用させることを可能にする型付き命令を生成する。
クラスAおよびクラスBの範囲内で見出される様々な命令テンプレートは、異なる状況において有益である。いくつかの実施形態では、プロセッサ内の異なるプロセッサまたは異なるコアが、クラスAだけ、クラスBだけ、または両方のクラスをサポートすることができる。例えば、汎用コンピューティングを意図する高性能汎用アウトオブオーダーコアが、クラスBだけをサポートすることができ、グラフィックスおよび/または科学的(スループット)コンピューティングを主として意図するコアが、クラスAだけをサポートすることができ、両方を意図するコアは、両方をサポートすることができる(当然、両方のクラスからのテンプレートおよび命令のいくつかの混合物を有するが、両方のクラスからのすべてのテンプレートおよび命令を有しないコアは、本発明の範囲内にある)。また、単一のプロセッサは、複数のコアを含むことができ、該コアのすべてが同じクラスをサポートするか、または異なるコアが異なるクラスをサポートする。例えば、個別のグラフィックスおよび汎用コアを有するプロセッサにおいて、グラフィックスおよび/または科学的コンピューティングを主として意図するグラフィックスコアの1つが、クラスAだけをサポートすることができ、一方で、汎用コアのうちの1つまたは複数は、クラスBだけをサポートする汎用コンピューティングを意図するアウトオブオーダー実行およびレジスタリネーミングを有する高性能汎用コアとすることができる。個別のグラフィックスコアを有しない別のプロセッサは、クラスAおよびクラスBの両方をサポートするもう1つの汎用インオーダーまたはアウトオブオーダーコアを含むことができる。当然、異なる実施形態では、1つのクラスからの特徴を他のクラスで実装することもできる。高水準言語で記述されるプログラムは、様々な異なる実行可能な形態に翻訳され(例えば、ジャストインタイムでコンパイルされ、または静的にコンパイルされ)、該形態としては、1)実行のためのターゲットプロセッサによってサポートされるクラス(複数可)の命令だけを有する形態、または2)すべてのクラスの命令の異なる組み合わせを使用して記述される複数の代替のルーチンを有し、かつ現在コードを実行しているプロセッサによってサポートされる命令に基づいて実行するためのルーチンを選択する制御フローコードを有する形態、が挙げられる。
例示的な特定のベクトルフレンドリー命令フォーマット
図9Aは、一実施形態による、例示的な特有のベクトルフレンドリー命令フォーマットを例示するブロック図である。図9Aは、フィールドの場所、サイズ、解釈、および順序、ならびにそうしたフィールドのいくつかの値を特定するという意味で特有である、特有のベクトルフレンドリー命令フォーマット900を示す。特有のベクトルフレンドリー命令フォーマット900は、x86命令セットを拡張するために使用することができ、したがって、フィールドのいくつかは、既存のx86命令セットおよびその拡張(例えば、AVX)において使用されるものと類似するか、または同じである。このフォーマットは、拡張を有する既存のx86命令セットの接頭辞符号化フィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、および即値フィールドとの整合性を維持する。図9Aからの複数のフィールドをマッピングする図8Aまたは8Bからのフィールドが例示される。
図9Aは、一実施形態による、例示的な特有のベクトルフレンドリー命令フォーマットを例示するブロック図である。図9Aは、フィールドの場所、サイズ、解釈、および順序、ならびにそうしたフィールドのいくつかの値を特定するという意味で特有である、特有のベクトルフレンドリー命令フォーマット900を示す。特有のベクトルフレンドリー命令フォーマット900は、x86命令セットを拡張するために使用することができ、したがって、フィールドのいくつかは、既存のx86命令セットおよびその拡張(例えば、AVX)において使用されるものと類似するか、または同じである。このフォーマットは、拡張を有する既存のx86命令セットの接頭辞符号化フィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、および即値フィールドとの整合性を維持する。図9Aからの複数のフィールドをマッピングする図8Aまたは8Bからのフィールドが例示される。
実施形態は、例示の目的で、一般的ベクトルフレンドリー命令フォーマット800のコンテキストで、特有のベクトルフレンドリー命令フォーマット900を参照して説明されるが、本発明は、特許請求される場合を除き、特有のベクトルフレンドリー命令フォーマット900に限定されないことを理解されたい。例えば、一般的ベクトルフレンドリー命令フォーマット800は、様々なフィールドの様々な可能なサイズを想定し、一方で、特有のベクトルフレンドリー命令フォーマット900は、特有のサイズのフィールドを有するものとして示される。具体的な一例として、データ要素幅フィールド864は、特有のベクトルフレンドリー命令フォーマット900の1ビットフィールドとして例示されるが、本発明は、そのように限定されない(すなわち、一般的ベクトルフレンドリー命令フォーマット800は、他のサイズのデータ要素幅フィールド864を想定する)。
一般的ベクトルフレンドリー命令フォーマット800は、図9Aに例示される順序で、以下に列記される以下のフィールドを含む。
EVEX接頭辞(バイト0〜3)902−これは、4バイトの形態で符号化される。
フォーマットフィールド840(EVEXバイト0、ビット[7:0])−第1のバイト(EVEXバイト0)は、フォーマットフィールド840であり、0x62(本発明の1つの実施形態において、ベクトルフレンドリー命令フォーマットを識別するために使用される固有の値)を含む。
第2〜第4のバイト(EVEXバイト1〜3)は、特定の能力を提供するいくつかのビットフィールドを含む。
REXフィールド905(EVEXバイト1、ビット[7−5])−これは、EVEX.Rビットフィールド(EVEXバイト1、ビット[7]−R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]−X)、および857BEXバイト1、ビット[5]−B)からなる。EVEX.R、EVEX.X、およびEVEX.Bビットフィールドは、対応するVEXビットフィールドと同じ機能性を提供し、1の補数の形態を使用して符号化され、すなわち、ZMMOは、1111Bとして符号化され、ZMM15は、0000Bとして符号化される。命令の他のフィールドは、当技術分野で知られているように、レジスタインデックスの下位3ビット(rrr、xxx、およびbbb)を符号化するので、EVEX.R、EVEX.X、およびEVEX.Bを追加することによって、Rrrr、Xxxx、およびBbbbを形成することができる。
REX'フィールド910−これは、REX'フィールド910の第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を組み合わせることによって形成される。
オペコードマップフィールド915(EVEXバイト1、ビット[3:0]−mmmm)−そのコンテンツは、暗黙的な先行オペコードバイト(0F、0F 38、または0F 3)を符号化する。
データ要素幅フィールド864(EVEXバイト2、ビット[7]−W)−これは、表記EVEX.Wによって表される。EVEX.Wは、データタイプの粒度(サイズ)(32ビットデータ要素または64ビットデータ要素のいずれか)を定義するために使用される。
EVEX.vvvv920(EVEXバイト2、ビット[6:3]−vvvv)−EVEX.vvvvの役割としては、1)EVEX.vvvvが、反転(1の補数)の形態で指定され、また、2つ以上のソースオペランドを有する複数の命令に有効である、第1のソースレジスタオペランドを符号化すること、2)EVEX.vvvvが、或るベクトルシフトのために1の補数の形態で特定される、デスティネーションレジスタオペランドを符号化すること、または3)EVEX.vvvvが、いかなるオペランドも符号化せず、フィールドが予約され、かつ1111bを含まなければならない、ことが挙げられる。したがって、EVEX.vvvvフィールド920は、反転(1の補数)の形態で記憶された第1のソースレジスタ指定子の4つの下位ビットを符号化する。命令に応じて、追加の異なるEVEXビットフィールドを使用して、指定子サイズを32個のレジスタに拡張する。
EVEX.U868クラスフィールド(EVEXバイト2、ビット[2]−U)−EVEX.U=0である場合は、クラスAまたはEVEX.U0を示し、EVEX.U=1である場合は、クラスBまたはEVEX.U1を示す。
接頭辞符号化フィールド925(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を再設計することができ、したがって、拡張を必要としない。
アルファフィールド852(EVEXバイト3、ビット[7]−EH、EVEX.EH、EVEX.rs、EVEX.RL、EVEX.書き込みマスク制御、およびEVEX.Nとしても知られており、また、αを伴って例示される)−上で説明したように、このフィールドは、コンテキストに特有である。
ベータフィールド854(EVEXバイト3、ビット[6:4]−SSS、EVEX.s2−0、EVEX.r2−0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られており、また、βββを伴って例示される)−上で説明したように、このフィールドはコンテキストに特有である。
REX'フィールド910−これは、REX'フィールドの残部であり、また、拡張した32個レジスタセットの上位16個または下位16個のいずれかを符号化するために使用することができる、EVEX.Vビットフィールド(EVEXバイト3、ビット[3]−V')である。このビットは、ビット反転フォーマットで記憶される。下位の16個のレジスタを符号化するために、1という値が使用される。換言すれば、v'vvvvは、EVEX.V'、EVEX.vvvvを組み合わせることによって形成される。
書き込みマスクフィールド870(EVEXバイト3、ビット[2:0]−kkk)−そのコンテンツは、上で説明したように、書き込みマスクレジスタのレジスタのインデックスを指定する。本発明の1つの実施形態において、特有の値EVEX.kkk=000は、いかなる書き込みマスクも特定の命令に使用されないことを暗示する特別な振る舞いを有する(これは、すべてのものに対してハードワイヤードされた書き込みマスク、またはマスキングハードウェアを迂回するハードウェアの使用を含む、様々な方法で実装することができる)。
リアルオペコードフィールド930(バイト4)は、オペコードバイトとしても知られている。オペコードの一部は、このフィールドにおいて指定される。
MOD R/Mフィールド940(バイト5)は、MODフィールド942と、Regフィールド944と、R/Mフィールド946とを含む。上で説明したように、MODフィールドの942のコンテンツは、メモリアクセス演算と非メモリアクセス演算とを識別する。Regフィールド944の役割は、2つの状況に要約することができ、すなわち、デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかを符号化すること、またはオペコードエクステンションとして処理され、かつ任意の命令オペランドを符号化するために使用されないこと、である。R/Mフィールド946の役割としては、メモリアドレスを参照する命令オペランドを符号化すること、またはデスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかを符号化すること、が挙げられる。
スケール、インデックス、ベース(SIB)バイト(バイト6)−上で説明したように、スケールフィールドの850コンテンツは、メモリアドレス生成に使用される。SIB.xxx954およびSIB.bbb956−これらのフィールドのコンテンツは、レジスタインデックスXxxxおよびBbbbに関して以前に言及されている。
変位フィールド862A(バイト7〜10)−MODフィールド942が10を含むときに、バイト7〜10は、変位フィールド862Aであり、それは、レガシー32ビット変位(disp32)と同様に機能し、バイト粒度で機能する。
変位係数フィールド862B(バイト7)−MODフィールド942が01を含むときに、バイト7は、変位係数フィールド862Bである。このフィールドの場所は、レガシーx86命令セットの8ビット変位(disp8)の場所と同じであり、バイト粒度で機能する。disp8は、拡張符号であるので、−128〜127バイトのオフセットでだけアドレスすることができ、64バイトのキャッシュラインに関して、disp8は、4つの本当に有用な値−128、−64、0、および64にだけ設定することができる8ビットを使用し、より大きい範囲がしばしば必要であるので、disp32が使用されるが、disp32は、4バイトを必要とする。disp8およびdisp32とは対照的に、変位係数フィールド862Bは、disp8の再解釈であり、変位係数フィールド862Bを使用するときに、実際の変位は、メモリオペランドアクセス(N)のサイズを乗算した変位係数フィールドのコンテンツによって決定される。このタイプの変位は、disp8*Nと呼ばれる。これは、平均命令長(変位には単一のバイトが使用されるが、極めて大きい範囲を伴う)を低減させる。そのような圧縮変位は、有効な変位がメモリアクセスの粒度の倍数であり、それ故に、アドレスオフセットの冗長な下位ビットを符号化する必要はない、という前提に基づく。換言すれば、変位係数フィールド862Bは、レガシーx86命令セットの8ビット変位を置換する。したがって、変位係数フィールド862Bは、disp8がdisp8*Nにオーバーロードされることを唯一の例外として、x86命令セットの8ビット変位と同じ方法で符号化される(したがって、ModRM/SIB符号化規則にはいかなる変更もない)。換言すれば、符号化規則または符号化長にはいかなる変更もないが、ハードウェアによる変位値の解釈にだけ変更がある(バイト単位のアドレスオフセットを得るために、メモリオペランドのサイズだけ変位をスケーリングする必要がある)。
即値フィールド872は、上で説明したように演算する。
フルオペコードフィールド
図9Bは、本発明の1つの実施形態による、フルオペコードフィールド874を構成する特有のベクトルフレンドリー命令フォーマット900のフィールドを例示するブロック図である。具体的には、フルオペコードフィールド874は、フォーマットフィールド840と、ベース演算フィールド842と、データ要素幅(W)フィールド864とを含む。ベース演算フィールド842は、接頭辞符号化フィールド925と、オペコードマップフィールド915と、リアルオペコードフィールド930とを含む。
図9Bは、本発明の1つの実施形態による、フルオペコードフィールド874を構成する特有のベクトルフレンドリー命令フォーマット900のフィールドを例示するブロック図である。具体的には、フルオペコードフィールド874は、フォーマットフィールド840と、ベース演算フィールド842と、データ要素幅(W)フィールド864とを含む。ベース演算フィールド842は、接頭辞符号化フィールド925と、オペコードマップフィールド915と、リアルオペコードフィールド930とを含む。
レジスタインデックスフィールド
図9Cは、本発明の1つの実施形態による、レジスタインデックスフィールド844を構成する特有のベクトルフレンドリー命令フォーマット900のフィールドを例示するブロック図である。具体的には、レジスタインデックスフィールド844は、REXフィールド905と、REX'フィールド910と、MODR/M.Regフィールド944と、MODR/M.r/mフィールド946と、VVVVフィールド920と、xxxフィールド954と、bbbフィールド956とを含む。
図9Cは、本発明の1つの実施形態による、レジスタインデックスフィールド844を構成する特有のベクトルフレンドリー命令フォーマット900のフィールドを例示するブロック図である。具体的には、レジスタインデックスフィールド844は、REXフィールド905と、REX'フィールド910と、MODR/M.Regフィールド944と、MODR/M.r/mフィールド946と、VVVVフィールド920と、xxxフィールド954と、bbbフィールド956とを含む。
拡大演算フィールド
図9Dは、本発明の1つの実施形態による、拡大演算フィールド850を構成する特有のベクトルフレンドリー命令フォーマット900のフィールドを示すブロック図である。クラス(U)フィールド868が、0を含むときには、EVEX.U0(クラスA 868A)を示し、1を含むときには、EVEX.U1(クラスB 868B)を示す。U=0で、かつMODフィールド942が11を含む(非メモリアクセス演算を示す)ときに、アルファフィールド852(EVEXバイト3、ビット[7]−EH)は、rsフィールド852Aとして解釈される。rsフィールド852Aが1を含むとき(ラウンド852A.1)に、ベータフィールド854(EVEXバイト3、ビット[6:4]−SSS)は、ラウンド制御フィールド854Aとして解釈される。ラウンド制御フィールド854Aは、1ビットのSAEフィールド856、および2ビットのラウンド演算フィールド858を含む。rsフィールド852Aが0を含むとき(データ変換852A.2)に、ベータフィールド854(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ変換フィールド854Bとして解釈される。U=0で、かつMODフィールド942が00、01、または10を含む(メモリアクセス演算を示す)ときに、アルファフィールド852(EVEXバイト3、ビット[7]−EH)は、エビクションヒント(EH)フィールド852Bとして解釈され、ベータフィールド854(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ操作フィールド854Cとして解釈される。
図9Dは、本発明の1つの実施形態による、拡大演算フィールド850を構成する特有のベクトルフレンドリー命令フォーマット900のフィールドを示すブロック図である。クラス(U)フィールド868が、0を含むときには、EVEX.U0(クラスA 868A)を示し、1を含むときには、EVEX.U1(クラスB 868B)を示す。U=0で、かつMODフィールド942が11を含む(非メモリアクセス演算を示す)ときに、アルファフィールド852(EVEXバイト3、ビット[7]−EH)は、rsフィールド852Aとして解釈される。rsフィールド852Aが1を含むとき(ラウンド852A.1)に、ベータフィールド854(EVEXバイト3、ビット[6:4]−SSS)は、ラウンド制御フィールド854Aとして解釈される。ラウンド制御フィールド854Aは、1ビットのSAEフィールド856、および2ビットのラウンド演算フィールド858を含む。rsフィールド852Aが0を含むとき(データ変換852A.2)に、ベータフィールド854(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ変換フィールド854Bとして解釈される。U=0で、かつMODフィールド942が00、01、または10を含む(メモリアクセス演算を示す)ときに、アルファフィールド852(EVEXバイト3、ビット[7]−EH)は、エビクションヒント(EH)フィールド852Bとして解釈され、ベータフィールド854(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ操作フィールド854Cとして解釈される。
U=1のときに、アルファフィールド852(EVEXバイト3、ビット[7]−EH)は、書き込みマスク制御(Z)フィールド852Cとして解釈される。U=1で、かつMODフィールド942が11を含む(非メモリアクセス演算を示す)ときに、ベータフィールド854(EVEXバイト3、ビット[4]−S0)の一部は、RLフィールド857Aとして解釈され、1を含む(ラウンド857A.1)ときには、ベータフィールド854(EVEXバイト3、ビット[6−5]−S2−1)の残りは、ラウンド演算フィールド859Aとして解釈され、一方で、RLフィールド857Aが0を含む(VSIZE857.A2)ときに、ベータフィールド854(EVEXバイト3、ビット[6−5]−S2−1)の残りは、ベクトル長フィールド859B(EVEXバイト3、ビット[6−5]−L1−0)として解釈される。U=1で、かつMODフィールド942が00、01、または10(メモリアクセス演算を示す)を含むときに、ベータフィールド854(EVEXバイト3、ビット[6:4]−SSS)は、ベクトル長フィールド859B(EVEXバイト3、ビット[6−5]−L1−0)およびブロードキャストフィールド857B(EVEXバイト3、ビット[4]−B)として解釈される。
例示的なレジスタアーキテクチャ
図10は、本発明の1つの実施形態による、レジスタアーキテクチャ1000のブロック図である。例示される実施形態では、512ビット幅である32個のベクトルレジスタ1010があり、これらのレジスタは、zmm0〜zmm31として参照される。下位16個のzmmレジスタの下位256ビットは、レジスタymm0〜16にオーバーレイされる。下位16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0〜15にオーバーレイされる。特有のベクトルフレンドリー命令フォーマット900は、下の表6に例示されるように、オーバーレイされたレジスタファイルに対して演算する。
図10は、本発明の1つの実施形態による、レジスタアーキテクチャ1000のブロック図である。例示される実施形態では、512ビット幅である32個のベクトルレジスタ1010があり、これらのレジスタは、zmm0〜zmm31として参照される。下位16個のzmmレジスタの下位256ビットは、レジスタymm0〜16にオーバーレイされる。下位16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0〜15にオーバーレイされる。特有のベクトルフレンドリー命令フォーマット900は、下の表6に例示されるように、オーバーレイされたレジスタファイルに対して演算する。
換言すれば、ベクトル長フィールド859Bは、最大長さおよび1つまたは複数の他のより短い長さから選択し、ここで、各々のそのようなより短い長さは、先行する長さの半分の長さであり、ベクトル長フィールド859Bを伴わない命令テンプレートは、最大ベクトル長に対して演算する。更に、1つの実施形態において、特有のベクトルフレンドリー命令フォーマット900のクラスB命令テンプレートは、パックドまたはスカラ単精度/倍精度浮動小数点データ、およびパックドまたはスカラ整数データに対して演算する。スカラ演算は、zmm/ymm/xmmレジスタにおける最下位データ要素位置に対して行われる演算であり、高位データ要素位置は、実施形態に応じて、該位置が命令の前の位置と同じままであるか、またはゼロにされるかのいずれかである。
書き込みマスクレジスタ1015−例示される実施形態では、8つの書き込みマスクレジスタ(k0〜k7)があり、各々が64ビットのサイズである。代替の実施形態において、書き込みマスクレジスタ1015は、16ビットのサイズである。上で説明したように、本発明の1つの実施形態において、ベクトルマスクレジスタk0は、書き込みマスクとして使用することができず、通常k0を示す符号化が書き込みマスクに使用されるときには、0xFFFFのハードワイヤード書き込みマスクを選択し、その命令に対する書き込みマスキングを効果的に無効にする。
汎用レジスタ1025−例示される実施形態において、アドレスメモリオペランドに対する既存のx86アドレッシングモードと共に使用される、16個の64ビット汎用レジスタが存在する。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSPという名称、およびR8〜R15によって参照される。
MMXパックド整数フラットレジスタファイル1050が別名化される、スカラ浮動小数点スタックレジスタファイル(x87スタック)1045−例示される実施形態において、x87スタックは、x87命令セット拡張を使用して、32/64/80ビット浮動小数点データに対してスカラ浮動小数点演算を行うために使用される8要素スタックであり、一方で、MMXレジスタは、64ビットパックド整数データに対して演算を行うために、ならびにMMX〜XMMレジスタの間で行われるいくつかの演算のオペランドを保持するために使用される。
代替の実施形態は、より広いまたはより狭いレジスタを使用することができる。加えて、代替の実施形態は、より多い、より少ない、または異なるレジスタファイルおよびレジスタを使用することができる。
より完全な理解を提供するために、例示的なプロセッサコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャの概要が以下で提供される。
例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ
プロセッサコアは、異なる方法で、異なる目的のために、および異なるプロセッサで実装することができる。例えば、そのようなコアの実装形態としては、1)汎用コンピューティングを意図する汎用インオーダーコア、2)汎用コンピューティングを意図する高性能汎用アウトオブオーダーコア、3)グラフィクスおよび/または科学的(スループット)演算を主として意図する専用コア、が挙げられる。異なるプロセッサの実装形態としては、1)汎用コンピューティングを意図する1つまたは複数の汎用インオーダーコア、および/または汎用コンピューティングを意図する1つまたは複数の汎用アウトオブオーダーコアを含むCPU、および2)グラフィクスおよび/または科学的(スループット)を主として意図する1つまたは複数の専用コアを含むコプロセッサ、が挙げられる。そのような異なるプロセッサは、異なるコンピュータシステムアーキテクチャをもたらし、該アーキテクチャとしては、1)CPUとは別のチップ上のコプロセッサ、2)CPUと同じパッケージの中の別のダイ上のコプロセッサ、3)CPUと同じダイ上のコプロセッサ(この場合、そのようなコプロセッサは、あるときには、統合グラフィクスおよび/または科学的(スループット)論理などの専用論理、または専用コアと称される)、および4)同じダイ上に、説明したCPU(あるときには、アプリケーションコア(複数可)またはアプリケーションプロセッサ(複数可)と称される)、上述のコプロセッサ、および追加の機能性を含むことができる、システムオンチップ、が挙げられる。例示的なコアアーキテクチャを次に説明し、続いて、例示的なプロセッサおよびコンピュータアーキテクチャを説明する。
プロセッサコアは、異なる方法で、異なる目的のために、および異なるプロセッサで実装することができる。例えば、そのようなコアの実装形態としては、1)汎用コンピューティングを意図する汎用インオーダーコア、2)汎用コンピューティングを意図する高性能汎用アウトオブオーダーコア、3)グラフィクスおよび/または科学的(スループット)演算を主として意図する専用コア、が挙げられる。異なるプロセッサの実装形態としては、1)汎用コンピューティングを意図する1つまたは複数の汎用インオーダーコア、および/または汎用コンピューティングを意図する1つまたは複数の汎用アウトオブオーダーコアを含むCPU、および2)グラフィクスおよび/または科学的(スループット)を主として意図する1つまたは複数の専用コアを含むコプロセッサ、が挙げられる。そのような異なるプロセッサは、異なるコンピュータシステムアーキテクチャをもたらし、該アーキテクチャとしては、1)CPUとは別のチップ上のコプロセッサ、2)CPUと同じパッケージの中の別のダイ上のコプロセッサ、3)CPUと同じダイ上のコプロセッサ(この場合、そのようなコプロセッサは、あるときには、統合グラフィクスおよび/または科学的(スループット)論理などの専用論理、または専用コアと称される)、および4)同じダイ上に、説明したCPU(あるときには、アプリケーションコア(複数可)またはアプリケーションプロセッサ(複数可)と称される)、上述のコプロセッサ、および追加の機能性を含むことができる、システムオンチップ、が挙げられる。例示的なコアアーキテクチャを次に説明し、続いて、例示的なプロセッサおよびコンピュータアーキテクチャを説明する。
例示的なコアアーキテクチャ
インオーダーコアおよびアウトオブオーダーコアのブロック図
図11Aは、一実施形態による、例示的なインオーダーパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダー発行/実行パイプラインの両方を例示するブロック図である。図11Bは、一実施形態によるプロセッサに含まれることになる、インオーダーアーキテクチャコアの例示的な実施形態、および例示的なレジスタリネーミング、アウトオブオーダー発行/実行アーキテクチャコアの両方を例示するブロック図である。図11A〜11Bにおいて実線で囲まれたボックスは、インオーダーパイプラインおよびインオーダーコアを例示し、一方で、破線で囲まれたボックスの随意の追加は、レジスタリネーミング、アウトオブオーダー発行/実行パイプラインおよびコアを例示する。インオーダーの態様がアウトオブオーダーの態様のサブセットであることから、アウトオブオーダーの態様を説明する。
インオーダーコアおよびアウトオブオーダーコアのブロック図
図11Aは、一実施形態による、例示的なインオーダーパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダー発行/実行パイプラインの両方を例示するブロック図である。図11Bは、一実施形態によるプロセッサに含まれることになる、インオーダーアーキテクチャコアの例示的な実施形態、および例示的なレジスタリネーミング、アウトオブオーダー発行/実行アーキテクチャコアの両方を例示するブロック図である。図11A〜11Bにおいて実線で囲まれたボックスは、インオーダーパイプラインおよびインオーダーコアを例示し、一方で、破線で囲まれたボックスの随意の追加は、レジスタリネーミング、アウトオブオーダー発行/実行パイプラインおよびコアを例示する。インオーダーの態様がアウトオブオーダーの態様のサブセットであることから、アウトオブオーダーの態様を説明する。
図11Aにおいて、プロセッサパイプライン1100は、フェッチステージ1102と、長さ復号化ステージ1104と、復号化ステージ1106と、割り当てステージ1108と、リネーミングステージ1110と、スケジューリング(ディスパッチまたは発行としても知られる)ステージ1112と、レジスタ読み取り/メモリ読み取りステージ1114と、実行ステージ1116と、書き戻し/メモリ書き込みステージ1118と、例外処理ステージ1122と、コミットステージ1124とを含む。
図11Bは、実行エンジンユニット1150に結合されたフロントエンドユニット1130を含み、どちらのユニットもメモリユニット1170に結合される、プロセッサコア1190を示す。コア1190は、縮小命令セットコンピューティング(RISC:reduced instruction set computing)コア、複合命令セットコンピューティング(CISC:complex instruction set computing)コア、超長命令語(VLIW:very long instruction word)コア、またはハイブリッドもしくは代替のコアタイプとすることができる。更に別のオプションとして、コア1190は、例えばネットワークもしくは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(GPGPU:general purpose computing graphics processing unit)コア、グラフィックスコア、または同類のものなどの、専用コアとすることができる。
フロントエンドユニット1130は、命令キャッシュユニット1134に結合された分岐予測ユニット1132を含み、これが命令翻訳ルックアサイドバッファ(TLB:translation lookaside buffer)1136に結合され、これが命令フェッチユニット1138に係合され、これが復号化ユニット1140に結合される。復号化ユニット1140(または復号器)は、命令を復号化し、また、出力として、1つまたは複数のマイクロ演算、マイクロコードエントリーポイント、マイクロ命令、他の命令、または他の制御信号を生成することができ、これらは、元々の命令から復号化され、または別様には該命令を反映し、または該命令から導出される。復号化ユニット1140は、様々な異なる機構を使用して実装することができる。適切な機構の例としては、ルックアップテーブル、ハードウェア実装、プログラマブル論理アレイ(PLA:programmable logic array)、マイクロコードリードオンリーメモリ(ROM:read only memory)、その他が挙げられるが、これらに限定されない。1つの実施形態において、コア1190は、或るマクロ命令のマイクロコードを記憶するマイクロコードROMまたは他の媒体を(例えば、復号化ユニット1140または別様にはフロントエンドユニット1130の中に)含む。復号化ユニット1140は、実行エンジンユニット1150の中のリネーム/アロケーターユニット1152に結合される。
実行エンジンユニット1150は、リタイアメントユニット1154に結合されたリネーム/アロケーターユニット1152、および一組の1つまたは複数のスケジューラユニット(複数可)1156を含む。スケジューラユニット(複数可)1156は、リザベーションステーション、中央命令ウインドウ、その他を含む、任意の数の異なるスケジューラを表す。スケジューラユニット(複数可)1156は、物理レジスタファイル(複数可)ユニット(複数可)1158に結合される。物理レジスタファイル(複数可)ユニット1158の各々は、1つまたは複数の物理レジスタファイルを表し、その異なるものが、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、次に実行される命令のアドレスである命令ポインタ)、その他などの、1つまたは複数の異なるデータタイプを記憶する。1つの実施形態において、物理レジスタファイル(複数可)ユニット1158は、ベクトルレジスタユニットと、書き込みマスクレジスタユニットと、スカラレジスタユニットとを備える。これらのレジスタユニットは、アーキテクチャ上のベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供することができる。物理レジスタファイル(複数可)ユニット(複数可)1158は、様々な方法を例示するために、リタイアメントユニット1154によってオーバーラップされ、該方法では、(例えば、リオーダーバッファ(複数可)およびリタイアレジスタファイル(複数可)を使用して、フューチャーファイル(複数可)、ヒストリーバッファ(複数可)、およびリタイアレジスタファイル(複数可)を使用して、レジスタマップおよびレジスタのプールを使用して、その他によって)レジスタリネーミングおよびアウトオブオーダーの実行を実装することができる。リタイアメントユニット1154および物理レジスタファイル(複数可)ユニット(複数可)1158は、実行クラスタ(複数可)1160に結合される。実行クラスタ(複数可)1160は、一組の1つまたは複数の実行ユニット1162、および一組の1つまたは複数のメモリアクセスユニット1164を含む。実行ユニット1162は、様々な演算(例えば、シフト、加算、減算、乗算)を、様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して行うことができる。いくつかの実施形態は、特定の機能または一組の機能に専用のいくつかの実行ユニットを含むことができるが、他の実施形態は、すべての関数をすべて行う唯一の実行ユニットまたは複数の実行ユニットを含むことができる。スケジューラユニット(複数可)1156、物理レジスタファイル(複数可)ユニット(複数可)1158、および実行クラスタ(複数可)1160は、或る実施形態が或るタイプのデータ/演算について個別のパイプラインを生成するので、場合により、複数として示される(例えば、スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプラインであり、各々が、それら自体のスケジューラユニット、物理レジスタファイル(複数可)ユニット、および/または実行クラスタを有し、個別のメモリアクセスパイプラインの場合において、或る実施形態は、このパイプラインの実行クラスタだけがメモリアクセスユニット(複数可)1164を有して実装される)。また、個別のパイプラインが使用される場合、これらのパイプラインのうちの1つまたは複数をアウトオブオーダー発行/実行とし、残りをインオーダーとすることができることも理解されたい。
一組のメモリアクセスユニット1164は、メモリユニット1170に結合され、該メモリユニットは、レベル2(L2)キャッシュユニット1176に結合されたデータキャッシュユニット1174に結合されたデータTLBユニット1172を含む。1つの例示的な実施形態において、メモリアクセスユニット1164は、ロードユニットと、ストアアドレスユニットと、ストアデータユニットとを含むことができ、これらの各々が、メモリユニット1170の中のデータTLBユニット1172に結合される。命令キャッシュユニット1134は、メモリユニット1170のレベル2(L2)キャッシュ部1176に更に結合される。L2キャッシュユニット1176は、1つまたは複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
一例として、例示的なレジスタリネーミング、アウトオブオーダー発行/実行コアアーキテクチャは、次のようにパイプライン1100を実装することができる。1)命令フェッチ1138が、フェッチステージ1102および長さ復号化ステージ1104を行う、2)復号化ユニット1140が、復号化ステージ1106を行う、3)リネーム/アロケーターユニット1152が、割り当てステージ1108およびリネーミングステージ1110を行う、4)スケジューラユニット(複数可)1156が、スケジュールステージ1112を行う、5)物理レジスタファイル(複数可)ユニット(複数可)1158およびメモリユニット1170が、レジスタ読み取り/メモリ読み取りステージ1114を行う、実行クラスタ1160が、実行ステージ1116を行う、6)メモリユニット1170および物理レジスタファイル(複数可)ユニット(複数可)1158が、書き戻し/メモリ書き込みステージ1118を行う、7)様々なユニットが、例外処理ステージ1122に関与することができ、および8)リタイアメントユニット1154および物理レジスタファイル(複数可)ユニット(複数可)1158が、コミットステージ1124を行う。
コア1190は、本明細書で説明される命令(複数可)を含む、1つまたは複数の命令セット(例えば、x86命令セット(より新しいバージョンで追加された、いくつかの拡張を有する)、MIPS Technologies(Sunnyvale、CA)のMIPS命令セット、ARM Holdings(San Jose、CA)のARM命令セット(NEONなどの随意の追加の拡張を有する))をサポートすることができる。1つの実施形態において、コア1190は、パックドデータ命令セット拡張をサポートするための論理(例えば、先に説明したAVX1、AVX2、および/または一般的ベクトルフレンドリー命令フォーマットのいくつかの形態(U=0および/またはU=1)を含み、それによって、数多くのマルチメディアアプリケーションによって使用される演算を、パックドデータを使用して行うことを可能にする。
コアが、マルチスレッディング(2つまたはそれ以上の並列の一組の演算またはスレッドを実行すること)をサポートすることができ、また、タイムスライスドマルチスレッディング、同時マルチスレッディング(単一の物理コアが、物理コアが同時にマルチスレッディングしているスレッドの各々のための論理コアを提供する)、またはこれらの組み合わせ(例えば、Intel(登録商標)ハイパースレッディングテクノロジーなどの、タイムスライスドフェッチおよび復号化、ならびにその後の同時マルチスレッディング)を含む、様々な方法でサポートすることができることを理解されたい。
レジスタリネーミングは、アウトオブオーダー実行のコンテキストにおいて説明されるが、レジスタリネーミングは、インオーダーアーキテクチャで使用することができることを理解されたい。プロセッサの例示される実施形態はまた、個別の命令キャッシュユニット1134およびデータキャッシュユニット1174、ならびに共有L2キャッシュユニット1176を含むが、代替の実施形態は、例えばレベル1(L1)内部キャッシュまたは複数レベルの内部キャッシュなどの、命令およびデータの両方のための単一の内部キャッシュを有することができる。いくつかの実施形態において、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせを含むことができる。代替的に、キャッシュのすべてをコアおよび/またはプロセッサの外部とすることができる。
具体的で例示的なインオーダーコアアーキテクチャ
図12A〜12Bは、より具体的で例示的なインオーダーコアアーキテクチャのブロック図を示し、該コアは、チップの中のいくつかの論理ブロックのうちの1つ(同じタイプおよび/または異なるタイプの他のコアを含む)である。論理ブロックは、アプリケーションに応じて、高帯域幅の相互接続ネットワーク(例えば、リングネットワーク)を通して、いくつかの固定機能論理、メモリI/Oインターフェース、および他の必要なI/O論理と通信する。
図12A〜12Bは、より具体的で例示的なインオーダーコアアーキテクチャのブロック図を示し、該コアは、チップの中のいくつかの論理ブロックのうちの1つ(同じタイプおよび/または異なるタイプの他のコアを含む)である。論理ブロックは、アプリケーションに応じて、高帯域幅の相互接続ネットワーク(例えば、リングネットワーク)を通して、いくつかの固定機能論理、メモリI/Oインターフェース、および他の必要なI/O論理と通信する。
図12Aは、一実施形態による、オンダイの相互接続ネットワーク1202への接続およびレベル2(L2)キャッシュ1204のそのローカルサブセットと共に、単一のプロセッサコアのブロック図である。1つの実施形態において、命令復号器1200は、パックドデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ1206は、スカラおよびベクトルユニットの中のキャッシュメモリへの低遅延アクセスを可能とする。1つの実施形態において(設計を単純化するために)、スカラユニット1208およびベクトルユニット1210は、個別のレジスタセット(それぞれ、スカラレジスタ1212およびベクトルレジスタ1214)を使用し、それらの間で転送されるデータがメモリに書き込まれ、次いで、レベル1(L1)キャッシュ1206から読み戻されるが、代替の実施形態は、異なる手法(例えば、単一のレジスタセットを使用するか、またはデータを、書き込みおよび読み戻しを行うことなく2つのレジスタファイル間で転送することを可能にする通信パスを含む)を使用することができる。
L2キャッシュ1204のローカルサブセットは、1プロセッサコアあたり、個別のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュ1204のそれ自体のローカルサブセットへの直接アクセス経路を有する。プロセッサコアにより読み取られたデータは、そのL2キャッシュのサブセット1204に記憶され、他のプロセッサコアがそれら自体のローカルL2キャッシュのサブセットにアクセスすることと並行して、迅速にアクセスすることができる。プロセッサコアにより書き込まれたデータは、それ自体のL2キャッシュのサブセット1204に記憶され、必要に応じて他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを確実にする。リングネットワークは、プロセッサコア、L2キャッシュ、および他の論理ブロックなどのエージェントが、チップ内で互いに通信することを可能にするために、双方向性である。各リングデータパスは、1方向あたり1012ビット幅である。
図12Bは、一実施形態による、図12Aのプロセッサコアの部分拡大図である。図12Bは、L1キャッシュ1204のL1データキャッシュ1206A部分、ならびにベクトルユニット1210およびベクトルレジスタ1214に関する更なる詳細を含む。具体的には、ベクトルユニット1210は、16幅のベクトル処理ユニット(VPU:vector processing unit)(16幅のALU1228を参照されたい)であり、整数、単精度浮動小数点、倍精度浮動小数点命令のうちの1つまたは複数を実行する。VPUは、スウィズルユニット1220によるレジスタ入力のスウィズリング、数値変換ユニット1222A〜Bによる数値変換、およびメモリ入力に対する複製ユニット1224による複製をサポートする。書き込みマスクレジスタ1226は、結果として生じるベクトル書き込みをプレディケートすることを可能にする。
統合メモリコントローラおよびグラフィクスを有するプロセッサ
図13は、一実施形態による、2つ以上のコアを有することができ、統合メモリコントローラを有することができ、また、統合グラフィクスを有することができる、プロセッサ1300のブロック図である。図13において実線で囲まれたボックスは、単一のコア1302Aと、システムエージェント1310と、一組の1つまたは複数のバスコントローラユニット1316とを有するプロセッサ1300を示し、一方で、破線で囲まれたボックスの随意の追加は、複数のコア1302A〜Nと、システムエージェントユニット1310の中の一組の1つまたは複数の統合メモリコントローラユニット(複数可)1314と、専用論理1308とを有する代替のプロセッサ1300を示す。
図13は、一実施形態による、2つ以上のコアを有することができ、統合メモリコントローラを有することができ、また、統合グラフィクスを有することができる、プロセッサ1300のブロック図である。図13において実線で囲まれたボックスは、単一のコア1302Aと、システムエージェント1310と、一組の1つまたは複数のバスコントローラユニット1316とを有するプロセッサ1300を示し、一方で、破線で囲まれたボックスの随意の追加は、複数のコア1302A〜Nと、システムエージェントユニット1310の中の一組の1つまたは複数の統合メモリコントローラユニット(複数可)1314と、専用論理1308とを有する代替のプロセッサ1300を示す。
したがって、プロセッサ1300の異なる実装形態は、1)専用論理1308が統合グラフィックスおよび/または科学的(スループット)論理(1つまたは複数のコアを含むことができる)であり、コア1302A〜Nが1つまたは複数の汎用コア(例えば、汎用インオーダーコア、汎用アウトオブオーダーコア、これらの2つの組み合わせ)である、CPUと、2)コア1302A〜Nが主としてグラフィクスおよび/または科学的(スループット)を意図する多数の専用コアである、コプロセッサと、3)コア1302A〜Nが多数の汎用インオーダーコアである、コプロセッサと、を含むことができる。したがって、プロセッサ1300は、例えば、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット:general purpose graphics processing unit)、ハイスループットのメニーインテグレーテッドコア(MIC:many integrated core)コプロセッサ(30個以上のコアを含む)、組み込みプロセッサ、または同類のものなどの、汎用プロセッサ、コプロセッサ、または専用プロセッサとすることができる。プロセッサは、1つまたは複数のチップ上に実装することができる。プロセッサ1300は、例えばBiCMOS、CMOS、またはNMOSなどの、いくつかの処理技術のうちのいずれかを使用して、1つまたは複数の基板の一部とすること、および/またはその上に実装することができる。
メモリ階層は、コア内の1つまたは複数のレベルのキャッシュと、一組の1つまたは複数の共有キャッシュユニット1306と、一組の統合メモリコントローラユニット1314に結合された外部メモリ(図示せず)とを含む。一組の共用キャッシュユニット1306は、レベル2(L2)、レベル3(L3)、レベル4(L4)、または他のレベルのキャッシュ、ラストレベルキャッシュ(LLC:last level cache)、および/またはこれらの組み合わせなどの、1つまたは複数の中間レベルのキャッシュを含むことができる。1つの実施形態において、リングベースの相互接続ユニット1312は、統合グラフィック論理1308、一組の共有キャッシュユニット1306、およびシステムエージェントユニット1310/統合メモリコントローラユニット(複数可)1314を相互接続するが、代替の実施形態は、そのようなユニットを相互接続するための任意の数の既知の技術を使用することができる。1つの実施形態において、コヒーレンシは、1つまたは複数のキャッシュユニット1306とコア1302A〜Nとの間で維持される。
いくつかの実施形態において、コア1302A〜Nのうちの1つまたは複数は、マルチスレッドを行うことができる。システムエージェント1310は、コア1302A〜Nの協調および演算を行う構成要素を含む。システムエージェントユニット1310は、例えば、電力制御ユニット(PCU:power control unit)およびディスプレイユニットを含むことができる。PCUは、コア1302A〜Nおよび統合グラフィックス論理1308の電力状態を調節するために必要な論理および構成要素とするか、または該倫理および該構成要素を含むことができる。ディスプレイユニットは、1つまたは複数の外部接続ディスプレイを駆動するためのものである。
コア1302A〜Nは、アーキテクチャ命令セットに関して同種または異種とすることができ、すなわち、コア1302A〜Nのうちの2つ以上は、同じ命令セットを実行することができ、一方で、他のものは、その命令セットのサブセットまたは異なる命令セットだけを実行することができる。
例示的なコンピュータアーキテクチャ
図14〜図17は、例示的なコンピュータアーキテクチャのブロック図である。また、ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP:digital signal processor)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤー、ハンドヘルドデバイス、および様々な他の電子デバイスのための、当技術分野において知られている他のシステム設計および構成も適している。全般に、本明細書で開示されるプロセッサおよび/または他の実行論理を組み込むことができる多様なシステムまたは電子デバイスが一般的に適している。
図14〜図17は、例示的なコンピュータアーキテクチャのブロック図である。また、ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP:digital signal processor)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤー、ハンドヘルドデバイス、および様々な他の電子デバイスのための、当技術分野において知られている他のシステム設計および構成も適している。全般に、本明細書で開示されるプロセッサおよび/または他の実行論理を組み込むことができる多様なシステムまたは電子デバイスが一般的に適している。
次に図14を参照すると、本発明の一実施形態による、システム1400のブロック図が示される。システム1400は、コントローラハブ1420に結合される、1つまたは複数のプロセッサ1410、1415を含むことができる。1つの実施形態において、コントローラハブ1420は、グラフィックスメモリコントローラハブ(GMCH:graphics memory controller hub)1490および入力/出力ハブ(IOH:Input/Output Hub)1450(個別のチップ上にあってよい)を含み、GMCH1490は、メモリ1440およびコプロセッサ1445に結合されるメモリコントローラおよびグラフィックスコントローラを含み、IOH1450は、入力/出力(I/O:input/output)デバイス1460をGMCH1490に結合する。代替的に、メモリコントローラおよびグラフィックスコントローラの一方または両方は、(本明細書で説明されるように)プロセッサ内に統合され、メモリ1440およびコプロセッサ1445は、プロセッサ1410、およびIOH1450を有する単一のチップの中のコントローラハブ1420に直接結合される。
図14では、追加のプロセッサ1415の随意の性質が破線で示される。各プロセッサ1410、1415は、本明細書で説明される処理コアのうちの1つまたは複数を含むことができ、また、いくつかのバージョンのプロセッサ1300とすることができる。
メモリ1440は、例えば、ダイナミックランダムアクセスメモリ(DRAM:dynamic random access memory)、相変化メモリ(PCM:phase change memory)、または2つの組み合わせとすることができる。少なくとも1つの実施形態について、コントローラハブ1420は、フロントサイドバス(FSB:frontside bus)などのマルチドロップバス、クイックパスインターコネクト(QPI:QuickPath Interconnect)などのポイントツーポイントインターフェース、または類似する接続1495を介して、プロセッサ(複数可)1410、1415と通信する。
1つの実施形態において、コプロセッサ1445は、例えば、ハイスループットMICプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサ、または同類のものなどの、専用プロセッサである。1つの実施形態において、コントローラハブ1420は、統合グラフィックスアクセラレータを含むことができる。
物理リソース1410、1415の間には、アーキテクチャ上の特性、マイクロアーキテクチャ上の特性、熱的特性、電力消費特性、および同類のもの含む、様々な利点のメトリクスの範囲に関して、様々な相違があり得る。
1つの実施形態において、プロセッサ1410は、一般的なタイプのデータ処理演算を制御する命令を実行する。命令内には、コプロセッサ命令を埋め込むことができる。プロセッサ1410は、これらのコプロセッサ命令を、付加コプロセッサ1445によって実行されるべきタイプのものであると認識する。故に、プロセッサ1410は、コプロセッサバスまたは他の相互接続に対するこれらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)をコプロセッサ1445に発行する。コプロセッサ(複数可)1445は、受信したコプロセッサ命令を受け付け、実行する。
次に図15を参照すると、本発明の一実施形態による、第1のより具体的で例示的なシステム1500のブロック図が示される。図15に示されるように、マルチプロセッサシステム1500は、ポイントツーポイント相互接続システムであり、また、ポイントツーポイント相互接続1550を介して結合される第1のプロセッサ1570および第2のプロセッサ1580を含む。プロセッサ1570および1580の各々は、いくつかのバージョンのプロセッサ1300とすることができる。本発明の1つの実施形態において、プロセッサ1570および1580は、それぞれプロセッサ1410および1415であり、一方で、コプロセッサ1538は、コプロセッサ1445である。別の実施形態において、プロセッサ1570および1580は、それぞれ、プロセッサ1410コプロセッサ1445である。
プロセッサ1570および1580は、それぞれ、統合メモリコントローラ(IMC:integrated memory controller)ユニット1572および1582を含んで示される。プロセッサ1570はまた、そのバスコントローラユニットの一部として、ポイントツーポイント(P−P:point−to−point)インターフェース1576および1578も含み、同様に、第2のプロセッサ1580は、P−Pインターフェース1586および1588を含む。プロセッサ1570、1580は、ポイントツーポイント(P−P)インターフェース回路1578、1588を使用して、P−Pインターフェース1550を介して情報を交換することができる。図15に示されるように、IMC1572および1582は、プロセッサをそれぞれのメモリ、すなわちメモリ1532およびメモリ1534に結合し、該メモリは、それぞれのプロセッサにローカルに付加されたメインメモリの一部分とすることができる。
プロセッサ1570、1580は、各々、ポイントツーポイントインターフェース回路1576、1594、1586、1598を使用して、個々のP−Pインターフェース1552、1554を介してチップセット1590と情報を交換することができる。チップセット1590は、随意に、高性能インターフェース1539を介してコプロセッサ1538と情報を交換することができる。1つの実施形態において、コプロセッサ1538は、例えば、ハイスループットMICプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサ、または同類のものなどの、専用プロセッサである。
共有キャッシュ(図示せず)は、どちらかのプロセッサに、または両方のプロセッサの外部に含むこと、更には、P−P相互接続を介してプロセッサと接続することができ、よって、プロセッサが低電力モードに置かれた場合に、一方または両方のプロセッサのローカルキャッシュ情報を共有キャッシュに記憶することができる。
チップセット1590は、インターフェース1596を介して第1のバス1516に結合することができる。1つの実施形態において、第1のバス1516は、周辺構成要素相互接続(PCI:Peripheral Component Interconnect)バス、またはPCIエクスプレスバスもしくは別の第3世代I/O相互接続バスなどのバスとすることができるが、本発明の範囲は、そのように限定されるものではない。
図15に示されるように、第1のバス1516を第2のバス1520に結合するバスブリッジ1518と共に、様々なI/Oデバイス1514を第1のバス1516に結合することができる。1つの実施形態では、コプロセッサ、ハイスループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックスアクセラレータまたはデジタル信号処理(DSP:digital signal processing)ユニットなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサなどの、1つまたは複数の追加のプロセッサ1515(複数可)が第1のバス1516に結合される。1つの実施形態において、第2のバス1520は、ローピンカウント(LPC:low pin count)バスとすることができる。1つの実施形態では、例えば、キーボードおよび/またはマウス1522、通信デバイス1527、ならびに命令/コードおよびデータ1530を含むことができるディスクドライブまたは他の大容量記憶デバイスなどの記憶ユニット1528を含む、様々なデバイスを第2のバス1520に結合することができる。更に、オーディオI/O1524を第2のバス1520に結合することができる。他のアーキテクチャが可能であることに留意されたい。例えば、図15のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装することができる。
以下、図16を参照すると、本発明の一実施形態による、第2のより具体的で例示的なシステム1600のブロック図が示される。図15および図16における同様の要素は、同様の参照符合を有し、図15の或る態様は、図16の他の態様を不明瞭にすることを回避するために、図16から省略されている。
図16は、プロセッサ1570、1580が、ぞれぞれ、統合メモリおよびI/O制御論理(「CL」:control logic)1572および1582を含むことができることを示す。したがって、CL1572、1582は、統合メモリコントローラユニットを含み、また、I/O制御論理を含む。図16は、メモリ1532、1534がCL1572、1582に結合されることだけではなく、I/Oデバイス1614が制御論理1572、1582に結合されることも示す。レガシーI/Oデバイス1615は、チップセット1590に結合される。
以下、図17を参照すると、本発明の一実施形態による、SoC1700のブロック図が示される。図13における同様の要素は、同様の参照符合を有する。また、破線で囲んだボックスは、より高度なSoC上の随意の特徴である。図17において、相互接続ユニット(複数可)1702は、一組の1つまたは複数のコア1302A〜Nおよび共有キャッシュユニット(複数可)1306を含むアプリケーションプロセッサ1710、システムエージェントユニット1310、バスコントローラユニット(複数可)1316、統合メモリコントローラユニット(複数可)1314、統合グラフィックス論理、イメージプロセッサ、オーディオプロセッサ、およびビデオプロセッサを含むことができる一組の1つまたは複数のコプロセッサ1720、スタティックランダムアクセスメモリ(SRAM:static random access memory)ユニット1730、ダイレクトメモリアクセス(DMA:direct memory access)ユニット1732、および1つまたは複数の外部ディスプレイに結合するためのディスプレイユニット1740、に結合される。1つの実施形態において、コプロセッサ(複数可)1720としては、例えば、ネットワークもしくは通信プロセッサ、圧縮エンジン、GPGPU、ハイスループットMICプロセッサ、組み込みプロセッサ、または同類のものなどの、専用プロセッサが挙げられる。
本明細書で開示される機構の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装形態の手法の組み合わせで実装される。実施形態は、少なくとも1つのプロセッサ、記憶システム(揮発性および不揮発性メモリおよび/または記憶要素を含む)、少なくとも1つの入力デバイス、ならびに少なくとも1つの出力デバイスを備えるプログラムマブルシステム上で実行する、コンピュータプログラムまたはプログラムコードとして実装される。
命令を入力して、本明細書で説明される機能を行い、出力情報を生成するために、図15に例示されるコード1530などのプログラムコードを適用することができる。出力情報は、既知の方法で1つまたは複数の出力デバイスに適用することができる。このアプリケーションの目的で、処理システムとしては、例えば、デジタル信号プロセッサ(DSP:digital signal processor)、マイクロコントローラ、特定用途向け集積回路(ASIC:application specific integrated circuit)、またはマイクロプロセッサなどのプロセッサを有する、任意のシステムが挙げられる。
プログラムコードは、処理システムと通信するために、高水準手続き型またはオブジェクト指向プログラミング言語で実装することができる。プログラムコードはまた、所望であれば、アセンブリ言語または機械言語で実装することもできる。実際には、本明細書で説明される機構は、いかなる特定のプログラミング言語にも範囲が限定されない。いずれの場合においても、言語は、コンパイル型言語またはインタプリタ型言語とすることができる。
少なくとも1つの実施形態の1つまたは複数の態様は、機械によって読み込まれたときに、機械に、論理を作り上げさせて本明細書で説明される技術を行う、プロセッサ内の様々な論理を表す機械可読媒体に記憶された代表的な命令によって実装することができる。「IPコア」として知られているそのような表現は、論理またはプロセッサを実際になす製作機械の中へロードするために、有形の機械可読媒体に記憶され、様々な顧客または製造工場に供給することができる。
そのような機械可読記憶媒体としては、ハードディスク、およびフロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリーメモリ(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)等の半導体デバイス、磁気もしくは光カード、または、電子命令を記憶するのに適した任意の他のタイプの媒体、を含む記憶媒体などの、機械またはデバイスによって製造または形成される物品の非一時的な有形の配設が挙げられるが、これらに限定されない。
故に、一実施形態はまた、本明細書で説明される構造、回路、装置、プロセッサ、および/またはシステムの特徴を定義する、ハードウェア記述言語(HDL:Hardware Description Language)などの、命令を含む、または設計データを含む、非一時的有形機械可読媒体も含む。このような実施形態はまた、プログラム製品とも称することができる。
エミュレーション(バイナリトランスレーション、コードモーフィング、その他を含む)
いくつかの場合では、命令をソース命令セットからターゲット命令セットに変換するために、命令変換器を使用することができる。例えば、命令変換器は、命令を、コアによって処理される1つまたは複数の他の命令に翻訳すること(例えば、静的バイナリ翻訳、動的コンパイルを含む動的バイナリ翻訳を使用する)、モーフィングすること、エミュレートすること、または別様には、変換することができる。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装することができる。命令変換器は、プロセッサ上、プロセッサ外、あるいは一部をプロセッサ上として一部をプロセッサ外とすることができる。
いくつかの場合では、命令をソース命令セットからターゲット命令セットに変換するために、命令変換器を使用することができる。例えば、命令変換器は、命令を、コアによって処理される1つまたは複数の他の命令に翻訳すること(例えば、静的バイナリ翻訳、動的コンパイルを含む動的バイナリ翻訳を使用する)、モーフィングすること、エミュレートすること、または別様には、変換することができる。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装することができる。命令変換器は、プロセッサ上、プロセッサ外、あるいは一部をプロセッサ上として一部をプロセッサ外とすることができる。
図18は、一実施形態による、ソース命令セットの中のバイナリ命令をターゲット命令セットの中のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図である。例示される実施形態において、命令変換器は、ソフトウェア命令変換器であるが、代替的に、命令変換器は、ソフトウェア、ファームウェア、ハードウェア、あるいはこれらの様々な組み合わせで実装することができる。図18は、少なくとも1つのx86命令セットコアを有するプロセッサ1816によってネイティブに実行することができるx86バイナリコード1806を生成するために、x86コンパイラ1804を使用して、高水準言語1802のプログラムをコンパイルすることができることを示す。
少なくとも1つのx86命令セットコアを有するプロセッサ1816は、少なくとも1つのx86命令セットコアを有するインテルプロセッサと実質的に同じ結果を達成するために、(1)インテルx86命令セットコアの命令セットのかなりの部分、または(2)少なくとも1つのx86命令セットコアを有するインテルプロセッサ上で作動することを目標とした、アプリケーションのオブジェクトコードバージョンまたは他のソフトウェアを、互換的に実行するかまたは別様には処理することによって、少なくとも1つのx86命令セットコアを有するインテルプロセッサと実質的に同じ機能を行うことができる、任意のプロセッサを表す。x86コンパイラ1804は、追加のリンケージ処理を伴って、または伴わずに、少なくとも1つのx86命令セットコアを有するプロセッサ1816を有するプロセッサ上で実行することができるx86バイナリコード1806(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、図18は、少なくとも1つのx86命令セットコアを有しないプロセッサ1814(例えば、MIPS Technologies(Sunnyvale、CA)のMIPS命令セットを実行し、および/またはARM Holdings(San Jose、CA)のARM命令セットを実行するコアを有するプロセッサ)によってネイティブに実行することができる代替の命令セットバイナリコード1810を生成するために、代替の命令セットコンパイラ1808を使用して、高水準言語1802のプログラムをコンパイルすることができることを示す。
命令コンバータ1812は、x86バイナリコード1806を、x86命令セットコアを有しないプロセッサ1814によってネイティブに実行することができるコードに変換するために使用される。この変換されたコードは、これを行うことができる命令変換器を作製することが困難であるので、代替の命令セットバイナリコード1810と同じものになり難くいが、変換されたコードは、一般的な演算を達成し、代替の命令セットからの命令で構成される。したがって、命令変換器1812は、エミュレーション、シミュレーション、または任意の他の処理を通して、x86命令セットプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスが、x86バイナリコード1806を実行することを可能にする、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。
上述の明細書では、本発明を、その特定の例示的な実施形態を参照して説明してきた。しかしながら、添付の特許請求の範囲に記載された本発明のより広範な趣旨および範囲から逸脱することなく、様々な修正および変更が行われ得ることが明白になるであろう。故に、本明細書および図面は、限定的な意味ではなく、実例的な意味であるとみなされるべきである。
本明細書で説明される命令は、或る演算を行うように、または所定の機能性を有するように構成された、特定用途向け集積回路(ASIC)などの特定のハードウェア構成を指す。そのような電子デバイスは、典型的には、1つまたは複数の記憶デバイス(非一時的機械読み出し可能記憶媒体)、ユーザ入力/出力デバイス(例えば、キーボード、タッチスクリーン、および/またはディスプレイ)、およびネットワーク接続などの、1つまたは複数の他の構成要素に結合された一組の1つまたは複数のプロセッサを含む。一組のプロセッサおよび他の構成要素の結合は、典型的には、1つまたは複数のバスおよびブリッジ(バスコントローラとも称される)を通してなされる。記憶デバイスおよびネットワークトラフィックを搬送する信号は、それぞれ、1つまたは複数の機械可読記憶媒体および機械可読通信媒体を表す。したがって、所与の電子デバイスの記憶デバイスは、典型的には、その電子デバイスの一組の1つまたは複数のプロセッサ上で実行するためのコードおよび/またはデータを記憶する。
当然のことながら、本発明の実施形態の1つまたは複数の部分は、ソフトウェア、ファームウェア、及び/又はハードウェアの異なる組み合わせを用いて実装されてもよい。この詳細な説明の全体を通して、説明の目的で、本発明の完全な理解を提供するために、数多くの具体的な詳細を記載した。しかしながら、これらの具体的な詳細の一部を伴わずに本発明が実装され得ることが当業者に明らかになるであろう。ある特定の事例において、本発明の主題を不明瞭にすることを回避するために、よく知られている構造および機能は、きめ細かく説明されていない。故に、本発明の範囲および趣旨は、以下の特許請求の範囲の観点から判断されるべきである。
Claims (25)
- プロセッサであって、
復号化された命令を生成するために複数のソースオペランドを有する命令を復号化する復号化ユニットであって、各オペランドが、第1、第2、第3、および第4の座標のうちの2つと関連付けられる、復号化ユニットと、
4次元z曲線インデックスを計算するために、前記復号化された命令を実行し、前記複数のソースオペランドのビットをインターリーブする実行ユニットと、を備える、プロセッサ。 - 前記命令をフェッチする命令フェッチユニットを更に備え、前記命令が、単一の機械レベル命令である、請求項1に記載のプロセッサ。
- 前記4次元z曲線インデックスを、デスティネーションオペランドと関連付けられるレジスタにコミットするレジスタファイルユニットを更に備える、請求項1または2に記載のプロセッサ。
- 前記レジスタファイルユニットが、
第1のソースオペランドを記憶する第1のレジスタと、
第2のソースオペランドを記憶する第2のレジスタと、
を備える、一組のレジスタを更に記憶し、
前記第1のソースオペランドおよび前記第2のソースオペランドが、複数の座標値を記憶する、請求項3に記載のプロセッサ。 - 前記第1のソースオペランドが、第1の次元座標および第2の次元座標を含み、
前記第2のソースオペランドが、第3の次元座標および第4の次元座標を含む、
請求項4に記載のプロセッサ。 - 前記実行ユニットが、各ソース次元座標の値の8個の下位ビットを入力し、32ビットの結果を出力する、請求項1または2に記載のプロセッサ。
- 前記実行ユニットが、各ソース次元座標の値の16個の下位ビットを入力し、64ビットの結果を出力する、請求項1または2に記載のプロセッサ。
- 論理ユニットであって、
4次元z曲線インデックスを計算するための一組の演算のための複数のソース値を記憶する複数のレジスタと、
前記4次元z曲線インデックスを計算するために、前記複数のレジスタの各々の下位ビットを入力し、前記下位ビットをインターリーブする実行ユニットと、
を備える、論理ユニット。 - 前記複数のレジスタが、
第1のソース値を記憶する第1のレジスタと、
第2のソース値を記憶する第2のレジスタと、
を含む、請求項8に記載の論理ユニット。 - 前記第1のソース値が、第1の次元座標および第2の次元座標を示し、
前記第2のソース値が、第3の次元座標および第4の次元座標を示す、
請求項9に記載の論理ユニット。 - 結果を記憶する第4のレジスタを更に備える、請求項9に記載の論理ユニット。
- 前記実行ユニットが、ソース次元座標の各々の8個の下位ビットを入力し、32ビットの結果を前記第4のレジスタに出力する、請求項11に記載の論理ユニット。
- 前記実行ユニットが、ソース次元座標の各々の16個の下位ビットを入力し、64ビットの結果を出力する、請求項11に記載の論理ユニット。
- 前記実行ユニットが単一命令に応じて、1つまたは複数のAND、XOR、およびシフト演算を介して、前記4次元z曲線インデックスを計算する、請求項8に記載の論理ユニット。
- 前記シフト演算が、左シフトを含み、前記論理ユニットが更に、
第1のソース値に対する右シフト演算を介して第1または第2のソース次元座標をフェッチし、
第2のソース値に対する右シフト演算を介して第3または第4のソース次元座標をフェッチする、
請求項14に記載の論理ユニット。 - 4次元z曲線インデックスを計算するための単一命令をフェッチする命令フェッチユニットであって、前記単一命令が、2つのソースオペランドおよび1つのデスティネーションオペランドを有し、各ソースオペランドが、第1、第2、第3、および第4の座標のうちの2つと関連付けられる、命令フェッチユニットと、
前記単一命令を復号化された命令に復号化する復号化ユニットと、
前記復号化された命令のためのソース座標値を記憶するために複数のレジスタを含むレジスタファイルユニットと、
前記4次元z曲線インデックスを計算するために、前記複数のレジスタの各々の下位ビットを取り出し、前記下位ビットをインターリーブする実行ユニットと、
を備える、装置。 - 前記実行ユニットが、XOR論理ゲート、AND論理ゲート、およびシフタ回路を含む、請求項16に記載の装置。
- 前記レジスタファイルユニットが更に、前記4次元z曲線インデックスを前記デスティネーションオペランドと関連付けられるレジスタにコミットする、請求項16または17に記載の装置。
- 前記レジスタファイルユニットが更に、前記4次元z曲線インデックスを前記デスティネーションオペランドによって示される32ビットレジスタにコミットし、前記実行ユニットが更に、少なくとも8個の下位ビットに基づいて前記4次元z曲線インデックスを計算する、請求項18に記載の装置。
- 前記レジスタファイルユニットが更に、前記4次元z曲線インデックスを前記デスティネーションオペランドによって示される64ビットレジスタにコミットし、前記実行ユニットが更に、少なくとも16個の下位ビットに基づいて前記4次元z曲線インデックスを計算する、請求項18に記載の装置。
- 処理システムであって、
4次元z曲線インデックスを計算するための単一命令をフェッチするための手段であって、前記単一命令が、2つのソースオペランドおよび1つのデスティネーションオペランドを有する、手段と、
前記単一命令を復号化された命令に復号化するための手段と、
前記2つのソースオペランドと関連付けられるソースオペランド値をフェッチするための手段であって、前記ソースオペランド値が、第1、第2、第3、および第4の次元のソース座標値を含む、手段と、
前記ソースオペランド値からソース座標値をアンパックするための手段と、
各ソース座標の少なくとも8個の下位ビットを長さが少なくとも32ビットのz曲線インデックスにインターリーブすることによって、前記下位ビットに基づいて前記z曲線インデックスを計算するために、前記復号化された命令を実行するための手段と、
を備える、システム。 - 前記実行するための手段が更に、1つまたは複数のAND、XOR、およびシフト演算を使用して前記z曲線インデックスを計算する、請求項21に記載のシステム。
- 前記実行するための手段が、XOR論理ゲート、AND論理ゲート、および1つまたは複数のシフタ回路を含む、請求項22に記載のシステム。
- 前記z曲線インデックスを、前記デスティネーションオペランドによって示される32ビットレジスタにコミットするための手段を更に備える、請求項21または22に記載のシステム。
- 前記z曲線インデックスを、前記デスティネーションオペランドによって示される64ビットレジスタにコミットするための手段を更に備え、前記実行するための手段が更に、少なくとも16個の下位ビットに基づいて前記z曲線インデックスを計算する、請求項21または22に記載のシステム。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/542,502 US20160139924A1 (en) | 2014-11-14 | 2014-11-14 | Machine Level Instructions to Compute a 4D Z-Curve Index from 4D Coordinates |
US14/542,502 | 2014-11-14 | ||
PCT/US2015/059953 WO2016077344A1 (en) | 2014-11-14 | 2015-11-10 | Machine level instructions to compute a 4d z-curve index from 4d coordinates |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2017534982A true JP2017534982A (ja) | 2017-11-24 |
Family
ID=55954943
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2017522115A Abandoned JP2017534982A (ja) | 2014-11-14 | 2015-11-10 | 4d座標から4dのz曲線インデックスを計算するための機械レベル命令 |
Country Status (7)
Country | Link |
---|---|
US (1) | US20160139924A1 (ja) |
EP (1) | EP3218799A4 (ja) |
JP (1) | JP2017534982A (ja) |
KR (1) | KR20170059478A (ja) |
CN (1) | CN106796503A (ja) |
TW (1) | TWI590155B (ja) |
WO (1) | WO2016077344A1 (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2017534981A (ja) * | 2014-11-14 | 2017-11-24 | インテル・コーポレーション | 3次元モートン座標変換プロセッサ、方法、システム、及び命令 |
JP2018500630A (ja) * | 2014-11-14 | 2018-01-11 | インテル・コーポレーション | 4次元モートン座標変換プロセッサ、方法、システム、及び命令 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9772850B2 (en) | 2014-11-14 | 2017-09-26 | Intel Corporation | Morton coordinate adjustment processors, methods, systems, and instructions |
US9916159B2 (en) | 2016-01-14 | 2018-03-13 | International Business Machines Corporation | Programmable linear feedback shift register |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB9509987D0 (en) * | 1995-05-17 | 1995-07-12 | Sgs Thomson Microelectronics | Manipulation of data |
JPH10275080A (ja) * | 1997-01-24 | 1998-10-13 | Texas Instr Inc <Ti> | マイクロプロセッサ |
DE69942339D1 (de) * | 1998-08-24 | 2010-06-17 | Microunity Systems Eng | System mit breiter operandenarchitektur und verfahren |
US6745319B1 (en) * | 2000-02-18 | 2004-06-01 | Texas Instruments Incorporated | Microprocessor with instructions for shuffling and dealing data |
US6958998B2 (en) * | 2001-07-09 | 2005-10-25 | International Business Machines Corporation | Traffic management in packet-based networks |
US6920446B1 (en) * | 2002-03-21 | 2005-07-19 | Ncr Corporation | Representing spatial objects in a defined space |
US7937559B1 (en) * | 2002-05-13 | 2011-05-03 | Tensilica, Inc. | System and method for generating a configurable processor supporting a user-defined plurality of instruction sizes |
US9557994B2 (en) * | 2004-07-13 | 2017-01-31 | Arm Limited | Data processing apparatus and method for performing N-way interleaving and de-interleaving operations where N is an odd plural number |
US20090254736A1 (en) * | 2008-04-07 | 2009-10-08 | Arm Limited | Data processing system for performing data rearrangement operations |
US8055687B2 (en) * | 2009-01-20 | 2011-11-08 | Hewlett-Packard Development Company, L.P. | System and method for determining intervals of a space filling curve in a query box |
US8780112B2 (en) * | 2011-06-08 | 2014-07-15 | Pacific Data Images Llc | Coherent out-of-core point-based global illumination |
US20130033507A1 (en) * | 2011-08-04 | 2013-02-07 | Nvidia Corporation | System, method, and computer program product for constructing an acceleration structure |
JP5988222B2 (ja) * | 2011-10-18 | 2016-09-07 | パナソニックIpマネジメント株式会社 | シャッフルパターン生成回路、プロセッサ、シャッフルパターン生成方法、命令 |
CN104025502B (zh) * | 2011-12-22 | 2017-07-11 | 英特尔公司 | 用于处理blake安全散列算法的指令处理器、方法以及系统 |
US9965821B2 (en) * | 2012-03-09 | 2018-05-08 | Nvidia Corporation | Fully parallel in-place construction of 3D acceleration structures in a graphics processing unit |
US9298457B2 (en) * | 2013-01-22 | 2016-03-29 | Altera Corporation | SIMD instructions for data compression and decompression |
-
2014
- 2014-11-14 US US14/542,502 patent/US20160139924A1/en not_active Abandoned
-
2015
- 2015-10-08 TW TW104133233A patent/TWI590155B/zh not_active IP Right Cessation
- 2015-11-10 EP EP15859621.3A patent/EP3218799A4/en not_active Withdrawn
- 2015-11-10 WO PCT/US2015/059953 patent/WO2016077344A1/en active Application Filing
- 2015-11-10 KR KR1020177011087A patent/KR20170059478A/ko active Search and Examination
- 2015-11-10 CN CN201580055995.4A patent/CN106796503A/zh active Pending
- 2015-11-10 JP JP2017522115A patent/JP2017534982A/ja not_active Abandoned
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2017534981A (ja) * | 2014-11-14 | 2017-11-24 | インテル・コーポレーション | 3次元モートン座標変換プロセッサ、方法、システム、及び命令 |
JP2018500630A (ja) * | 2014-11-14 | 2018-01-11 | インテル・コーポレーション | 4次元モートン座標変換プロセッサ、方法、システム、及び命令 |
Also Published As
Publication number | Publication date |
---|---|
TWI590155B (zh) | 2017-07-01 |
EP3218799A1 (en) | 2017-09-20 |
KR20170059478A (ko) | 2017-05-30 |
US20160139924A1 (en) | 2016-05-19 |
TW201636828A (zh) | 2016-10-16 |
WO2016077344A1 (en) | 2016-05-19 |
CN106796503A (zh) | 2017-05-31 |
EP3218799A4 (en) | 2018-07-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6238497B2 (ja) | プロセッサ、方法、及びシステム | |
JP6466388B2 (ja) | 方法及び装置 | |
JP6526175B2 (ja) | ビットシャッフルプロセッサ、方法、システム、および命令 | |
TWI489381B (zh) | 多暫存器散布指令 | |
JP6711480B2 (ja) | ベクトルインデックスロードおよびストアのための方法および装置 | |
JP2018500653A (ja) | ベクトルブロードキャストおよびxorand論理命令のための装置および方法 | |
KR102508075B1 (ko) | 인덱스 및 즉치로 벡터 치환을 수행하기 위한 방법 및 장치 | |
JP6673574B2 (ja) | ベクトルビットシャッフルを実行するための方法および装置 | |
JP6635438B2 (ja) | ベクトルビット反転およびクロスを実行するための方法および装置 | |
KR102310793B1 (ko) | Z-오더 곡선에서의 넥스트 포인트의 좌표를 계산하기 위한 벡터 명령어 | |
JP6741006B2 (ja) | マスクレジスタとベクトルレジスタとの間で可変に拡張するための方法および装置 | |
CN109313553B (zh) | 用于跨步加载的系统、装置和方法 | |
JP6778375B2 (ja) | ベクトルビット反転を実行するためのプロセッサ、方法、およびシステム | |
KR101729424B1 (ko) | 128-비트 프로세서에서의 skein256 sha3 알고리즘에 대한 명령어 세트 | |
JP2017509064A (ja) | マスクド結果要素に伝搬する対応アンマスクド結果要素にソース要素を記憶するプロセッサ、方法、システム、及び命令 | |
JP2018506094A (ja) | 多倍長整数(big integer)の算術演算を実行するための方法および装置 | |
KR20170097015A (ko) | 마스크를 마스크 값들의 벡터로 확장하기 위한 방법 및 장치 | |
JP2017534982A (ja) | 4d座標から4dのz曲線インデックスを計算するための機械レベル命令 | |
JP6773378B2 (ja) | 3d座標から3dのz曲線インデックスを計算するための機械レベル命令 | |
KR20170099860A (ko) | 벡터 포화된 더블워드/쿼드워드 덧셈을 수행하기 위한 명령어 및 로직 | |
JP2017539016A (ja) | 結合した乗算−乗算命令のための装置および方法 | |
CN107077333B (zh) | 用于实行向量位聚集的方法和装置 | |
JP2018506762A (ja) | 結合した加算−加算命令のための装置および方法 | |
KR20170099864A (ko) | 마스크 값을 압축하기 위한 방법 및 장치 | |
US20190138303A1 (en) | Apparatus and method for vector horizontal logical instruction |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20181105 |
|
A762 | Written abandonment of application |
Free format text: JAPANESE INTERMEDIATE CODE: A762 Effective date: 20190830 |