JP2017539010A - ベクトル飽和ダブルワード/クワッドワードの加算を実行するための命令およびロジック - Google Patents

ベクトル飽和ダブルワード/クワッドワードの加算を実行するための命令およびロジック Download PDF

Info

Publication number
JP2017539010A
JP2017539010A JP2017527310A JP2017527310A JP2017539010A JP 2017539010 A JP2017539010 A JP 2017539010A JP 2017527310 A JP2017527310 A JP 2017527310A JP 2017527310 A JP2017527310 A JP 2017527310A JP 2017539010 A JP2017539010 A JP 2017539010A
Authority
JP
Japan
Prior art keywords
instruction
vector
register
data element
field
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
Application number
JP2017527310A
Other languages
English (en)
Inventor
オウルド−アハムド−ヴァル、エルモウスタファ
バレンタイン、ロバート
エル. トール、ブレット
エル. トール、ブレット
サン アドリアン、イエス コーバル
サン アドリアン、イエス コーバル
ジェイ. チャーニー、マーク
ジェイ. チャーニー、マーク
ビー. ジルカル、ミリンド
ビー. ジルカル、ミリンド
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2017539010A publication Critical patent/JP2017539010A/ja
Abandoned legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3812Instruction prefetching with instruction modification, e.g. store into instruction stream
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)

Abstract

いくつかの実施形態において、命令セットアーキテクチャへのベクトル拡張は、飽和した符号付き整数加算および符号なし整数加算を実行するための命令を含む。一実施形態において、符号付き飽和を用いるベクトル符号付き整数加算が提供される。一実施形態において、符号なし飽和を用いるベクトル符号なし整数加算が提供される。一実施形態において、符号付き命令および符号なし命令の両方についてパックドダブルワード整数およびパックドクワッドワード整数がサポートされる。

Description

本開示は、プロセッサまたは他の処理ロジックにより実行されると、論理的、数学的、または他の関数オペレーションを実行する処理ロジック、マイクロプロセッサ、および関連付けられた命令セットアーキテクチャの分野に関する。
アプリケーションの一定のタイプは、多くの場合、多数のデータアイテムに対して実行される同一のオペレーションを必要とする(「データ並列性」と称される)。単一命令多重データ(SIMD)は、プロセッサに複数のデータアイテムに対するオペレーションを実行させるタイプの命令を指す。SIMD技術は、レジスタにおけるビットをいくつかの固定サイズのデータ要素に論理的に分割し得、固定サイズのデータ要素の各々が別個の値を表すプロセッサに特に好適である。例えば、256ビットレジスタにおけるビットは、4個の別個の64ビットパックドデータ要素(クワッドワード(Q)サイズのデータ要素)、8個の別個の32ビットパックドデータ要素(ダブルワード(D)サイズのデータ要素)、16個の別個の16ビットパックドデータ要素(ワード(W)サイズのデータ要素)、または32個の別個の8ビットデータ要素(バイト(B)サイズのデータ要素)として演算されるソースオペランドとして指定されてもよい。このタイプのデータは、「パックド」データタイプまたは「ベクトル」データタイプと称され、このデータタイプのオペランドは、パックドデータオペランドまたはベクトルオペランドと称される。換言すると、パックドデータアイテムまたはベクトルは、パックドデータ要素のシーケンスを指し、パックドデータオペランドまたはベクトルオペランドは、SIMD命令(パックドデータ命令またはベクトル命令としても知られる)のソースまたはデスティネーションオペランドである。
実施形態は、例として示され、添付の図面における図に限定されない。
実施形態による、例示的なインオーダフェッチ、デコード、リタイアパイプライン、および例示的なレジスタリネーム、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。
実施形態による、プロセッサに含まれる、例示的インオーダフェッチ、デコード、リタイアコアの例示的な実施形態、および例示的なレジスタリネーム、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。
より具体的な例示的インオーダコアアーキテクチャのブロック図である。 より具体的な例示的インオーダコアアーキテクチャのブロック図である。
統合メモリコントローラおよび専用ロジックを用いるシングルコアプロセッサおよびマルチコアプロセッサのブロック図である。
実施形態によるシステムのブロック図を示す。
実施形態による第2のシステムのブロック図を示す。
実施形態による第3のシステムのブロック図を示す。
実施形態によるシステムオンチップ(SoC)のブロック図を示す。
実施形態による、ソース命令セットのバイナリ命令を、ターゲット命令セットのバイナリ命令に変換するソフトウェア命令コンバータの使用と対比するブロック図を示す。
実施形態によるライトマスキングされたベクトル加算を示すブロック図である。
本明細書に説明される実施形態による、命令を実行するための例示的なプロセッサロジックのブロック図である。
実施形態による、ベクトル飽和加算を実行するための命令を含む処理システムのブロック図である。
本明細書に説明される実施形態による、命令を実行するためのロジックのフロー図である。
実施形態による、一般的ベクトル向け命令フォーマットおよびその命令テンプレートを示すブロック図である。 実施形態による、一般的ベクトル向け命令フォーマットおよびその命令テンプレートを示すブロック図である。
実施形態による例示的な特定ベクトル向け命令フォーマットを示すブロック図である。 実施形態による例示的な特定ベクトル向け命令フォーマットを示すブロック図である。
一実施形態による、レジスタインデックスフィールドを構成する特定ベクトル向け命令フォーマットのフィールドを示すブロック図である。
一実施形態による、追加オペレーションフィールドを構成する特定ベクトル向け命令フォーマットのフィールドを示すブロック図である。
一実施形態による、レジスタアーキテクチャ1500のブロック図である。
x86、MMX(商標)、ストリーミングSIMD拡張(SSE)、SSE2、SSE3、SSE4.1、およびSSE4.2命令を含む命令セットを有する、インテル(登録商標)Core(商標)プロセッサにより使用されるもの等、SIMD技術は、アプリケーション性能における著しい改善を可能にした。Advanced Vector Extensions(AVX)(AVX1およびAVX2)と称され、ベクトル拡張(VEX)符号化スキームを用いる追加のセットのSIMD拡張が、リリースされている(例えば、Intel(登録商標)64 and IA−32 Architectures Software Developers Manual,September 2014およびIntel(登録商標)Architecture Instruction Set Extensions Programming Reference,September 2014を参照)。インテル(登録商標)アーキテクチャ(IA)を拡張するアーキテクチャ拡張が説明される。しかし、基礎となる原理は、いずれの特定のISAにも限定されない。
一実施形態において、処理デバイスは、飽和したダブルワードまたはクワッドワード加算オペレーションを実行する命令のセットを実装する。一実施形態において、ベクトル飽和加算命令は、第1および第2のオペランドにより示される2つのベクトルレジスタの対応する要素に対して並列加算を実行し、第3のオペランドにより示される第3のベクトルレジスタに結果を書き込む。一実施形態において、スカラダブルワードデータ要素またはスカラクワッドワードデータ要素は、ベクトルレジスタの各要素に加算され得る。一実施形態において、個々の結果がターゲットデータ要素の範囲を超える場合、範囲外の当該データ要素のデスティネーションオペランドに飽和値が書き込まれる。
プロセッサコアアーキテクチャを以下に説明し、その次に本明細書に説明される実施形態による例示的なプロセッサおよびコンピュータアーキテクチャの説明が続く。下記の本発明の実施形態の完全な理解を提供するべく、多数の具体的な詳細が記載される。しかし、当業者には、実施形態がこれらの具体的な詳細のいくつかを用いることなく実施され得ることが明らかであろう。様々な実施形態の基礎となる原理を不明瞭にするのを避けるべく、他の例において、周知の構造およびデバイスがブロック図の形態で示される。
プロセッサコアは、異なる態様で、異なる目的のために異なるプロセッサに実装され得る。例えば、そのようなコアの実装は、1)汎用演算用の汎用インオーダコア、2)汎用演算用の高性能汎用アウトオブオーダコア、3)主にグラフィックスおよび/またはサイエンティフィック(スループット)演算用の専用コアを含み得る。プロセッサは、シングルプロセッサコアを用いて実装されてもよく、またはマルチプロセッサコアを含み得る。プロセッサ内のプロセッサコアは、アーキテクチャ命令セットの観点からは同種または異種であり得る。
異なるプロセッサの実装は、1)汎用演算用の1もしくは複数の汎用インオーダコア、ならびに/または汎用演算用の1もしくは複数の汎用アウトオブオーダコアを含む中央処理装置、および2)主にグラフィックスおよび/またはサイエンティフィック(例えば、多集積コアプロセッサ)用の1もしくは複数の専用コアを含むコプロセッサを備える。そのような異なるプロセッサは、1)中央システムプロセッサとは別個のチップ上にあるコプロセッサ、2)別個のダイ上にあるが、中央システムプロセッサと同一のパッケージのコプロセッサ、3)他のプロセッサコアと同一のダイ上にあるコプロセッサ(この場合、そのようなコプロセッサは、場合によっては統合グラフィックスおよび/もしくはサイエンティフィック(スループット)ロジック等の専用ロジック、または専用コアと称される)、および4)同一のダイ上に、説明したプロセッサ(アプリケーションコアもしくはアプリケーションプロセッサと称される場合がある)、上記のコプロセッサ、ならびに追加の機能を含み得るシステムオンチップを含む異なるコンピュータシステムアーキテクチャをもたらす。
例示的なコアアーキテクチャ
インオーダおよびアウトオブオーダコアのブロック図
図1Aは、実施形態による、例示的なインオーダパイプライン、および例示的なレジスタリネーム、アウトオブオーダ発行/実行パイプラインを示すブロック図である。図1Bは、実施形態による、プロセッサに含まれる、インオーダアーキテクチャコアの例示的な実施形態、および例示的なレジスタリネーム、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。図1A〜図1Bにおける実線ボックスは、インオーダパイプラインおよびインオーダコアを示すが、破線ボックスの任意選択の追加は、レジスタリネーム、アウトオブオーダ発行/実行のパイプラインおよびコアを示す。 インオーダ態様がアウトオブオーダ態様のサブセットであることを考慮して、アウトオブオーダ態様が説明される。
図1Aにおいて、プロセッサパイプライン100は、フェッチステージ102、長さデコードステージ104、デコードステージ106、アロケーションステージ108、リネームステージ110、スケジューリング(ディスパッチまたは発行としても知られる)ステージ112、レジスタ読み出し/メモリ読み出しステージ114、実行ステージ116、ライトバック/メモリ書き込みステージ118、例外処理ステージ122、およびコミットステージ124を含む。
図1Bは、実行エンジンユニット150に結合されたフロントエンドユニット130を含むプロセッサコア190を示し、実行エンジンユニット150およびフロントエンドユニット130の両方がメモリユニット170に結合される。コア190は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは代替的なコアタイプであってもよい。なおも別の選択肢として、コア190は、例えば、ネットワークコアまたは通信コア、圧縮エンジン、コプロセッサコア、汎用演算グラフィックス処理ユニット(GPGPU)コア、グラフィックスコア等のような専用コアであってもよい。
フロントエンドユニット130は、命令キャッシュユニット134に結合される分岐予測ユニット132を含む。命令キャッシュユニット134は、命令トランスレーションルックアサイドバッファ(TLB)136に結合される。TLB136は、命令フェッチユニット138に結合される。命令フェッチユニット138は、デコードユニット140に結合される。デコードユニット140(またはデコーダ)は、命令をデコードし、出力として1もしくは複数のマイクロオペレーション、マイクロコードエントリーポイント、マイクロ命令、他の命令、または他の制御信号を生成することができ、これらは、元の命令からデコードされ、または別途これらを反映し、あるいはこれらから派生する。デコードユニット140は、様々な異なるメカニズムを用いて実装され得る。好適なメカニズムの例としては、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)等が挙げられるが、これらに限定されない。一実施形態において、コア190は、一定のマクロ命令に対するマイクロコードを(例えば、デコードユニット140またはそうでなければフロントエンドユニット130内に)格納するマイクロコードROMまたは他の媒体を含む。デコードユニット140は、実行エンジンユニット150におけるリネーム/アロケータユニット152に結合される。
実行エンジンユニット150は、リタイアメントユニット154および1または複数のスケジューラユニット156のセットに結合されたリネーム/アロケータユニット152を含む。スケジューラユニット156は、リザベーションステーション、中央命令ウィンドウ等を含む、任意の数の異なるスケジューラを表す。スケジューラユニット156は、物理レジスタファイルユニット158に結合される。物理レジスタファイルユニット158の各々は、1または複数の物理レジスタファイルを表し、これらの異なるものが、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行されるべき次の命令のアドレスである命令ポインタ)等のような1または複数の異なるデータタイプを格納する。一実施形態において、物理レジスタファイルユニット158は、ベクトルレジスタユニット、ライトマスクレジスタユニット、およびスカラレジスタユニットを備える。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供し得る。物理レジスタファイルユニット158は、リタイアメントユニット154と重なっており、レジスタリネームおよびアウトオブオーダ実行が(例えば、リオーダバッファおよびリタイアメントレジスタファイルを用い、フューチャファイル、履歴バッファ、およびリタイアメントレジスタファイルを用い、レジスタのレジスタマップおよびプール等を用いて)実装され得る様々な態様を示す。リタイアメントユニット154および物理レジスタファイルユニット158は、実行クラスタ160に結合される。実行クラスタ160は、1または複数の実行ユニット162のセット、および1または複数のメモリアクセスユニット164のセットを含む。実行ユニット162は、様々なオペレーション(例えば、シフト、加算、減算、乗算)を、様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行し得る。いくつかの実施形態は、特定の関数または関数のセットに専用のいくつかの実行ユニットを含み得るが、他の実施形態は、1つの実行ユニットのみ、またはその全てがあらゆる関数を実行する複数の実行ユニットを含み得る。スケジューラユニット156、物理レジスタファイルユニット158、および実行クラスタ160は、場合によっては複数のものとして示される。なぜなら、ある実施形態は、一定のタイプのデータ/オペレーションのための別個のパイプライン(例えば、各々が自身のスケジューラユニット、物理レジスタファイルユニット、および/または実行クラスタを有し、別個のメモリアクセスパイプラインの場合に、このパイプラインの実行クラスタのみがメモリアクセスユニット164を有する一定の実施形態が実装されるスカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプライン)を生成するからである。別個のパイプラインが用いられる場合に、これらのパイプラインのうちの1または複数は、アウトオブオーダ発行/実行であり、残りはインオーダであり得ることも理解されたい。
メモリアクセスユニット164のセットは、メモリユニット170に結合される。メモリユニット170は、データTLBユニット172を含む。データTLBユニット172は、データキャッシュユニット174に結合される。データキャッシュユニット174は、レベル2(L2)キャッシュユニット176に結合される。例示的な一実施形態において、メモリアクセスユニット164は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含み得、それらの各々がメモリユニット170におけるデータTLBユニット172に結合される。命令キャッシュユニット134は、メモリユニット170におけるレベル2(L2)キャッシュユニット176に更に結合される。L2キャッシュユニット176は、1または複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
例として、例示的なレジスタリネーム、アウトオブオーダ発行/実行コアアーキテクチャは、パイプライン100を以下のように実装し得る。1)命令フェッチ138は、フェッチステージ102および長さデコードステージ104を実行する。2)デコードユニット140は、デコードステージ106を実行する。3)リネーム/アロケータユニット152は、アロケーションステージ108およびリネームステージ110を実行する。4)スケジューラユニット156は、スケジューリングステージ112を実行する。5)物理レジスタファイルユニット158およびメモリユニット170は、レジスタ読み出し/メモリ読み出しステージ114を実行し、実行クラスタ160は、実行ステージ116を実行する。6)メモリユニット170および物理レジスタファイルユニット158は、ライトバック/メモリ書き込みステージ118を実行する。7)様々なユニットは、例外処理ステージ122に関係し得る。8)リタイアメントユニット154および物理レジスタファイルユニット158は、コミットステージ124を実行する。
コア190は、本明細書において説明される命令を含む、1または複数の命令セット(例えば、x86命令セット(より新しいバージョンを追加された、いくつかの拡張を伴う)、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、英国ケンブリッジのARM HoldingsのARM(登録商標)命令セット(NEON等の任意選択の追加拡張を伴う)をサポートし得る。一実施形態において、コア190は、パックドデータ命令セット拡張(例えば、AVX1、AVX2等)をサポートするロジックを含み、多くのマルチメディアアプリケーションにより用いられるオペレーションがパックドデータを用いて実行されることを可能にする。
コアは、マルチスレッディング(2もしくはそれより多い並列セットのオペレーションもしくはスレッドを実行する)をサポートし得、タイムスライスマルチスレッディング、同時マルチスレッディング(物理コアが同時にマルチスレッディングするスレッドの各々に対する論理コアを、単一の物理コアが提供する)、またはそれらの組み合わせ(例えば、インテル(登録商標)ハイパースレッディング技術等におけるタイムスライスフェッチおよびデコード、ならびにその後の同時マルチスレッディング)を含む様々な態様でサポートし得ることを理解されたい。
レジスタリネームは、アウトオブオーダ実行の文脈で説明されるが、レジスタリネームは、インオーダアーキテクチャで用いられ得ることを理解されたい。プロセッサの示される実施形態は、別個の命令およびデータキャッシュユニット134/174、ならびに共有L2キャッシュユニット176も含むが、代替的な実施形態は、例えば、レベル1(L1)内部キャッシュまたは複数のレベルの内部キャッシュ等の命令およびデータの両方に対する単一の内部キャッシュを有し得る。いくつかの実施形態において、システムは、内部キャッシュ、ならびにコアおよび/またはプロセッサの外部にある外部キャッシュの組み合わせを含み得る。あるいは、キャッシュの全てがコアおよび/またはプロセッサの外部にあってもよい。
具体的な例示的インオーダコアアーキテクチャ
図2A〜図2Bは、コアが、チップにおけるいくつかの論理ブロックのうちの1つ(同一タイプおよび/または異なるタイプの他のコアを含む)である、より具体的な例示的インオーダコアアーキテクチャのブロック図である。アプリケーションに応じて、論理ブロックは、ある固定機能ロジック、メモリI/Oインタフェース、および他の必要なI/Oロジックと高帯域幅の相互接続ネットワーク(例えば、リングネットワーク)を介して通信する。
図2Aは、実施形態による、オンダイ相互接続ネットワーク202への接続と共に、レベル2(L2)キャッシュのローカルサブセット204を伴うシングルプロセッサコアのブロック図である。一実施形態において、命令デコーダ200は、パックドデータ命令セット拡張を用いるx86命令セットをサポートする。L1キャッシュ206は、スカラユニットおよびベクトルユニット内のキャッシュメモリへの低レイテンシアクセスを可能にする。一実施形態において(設計を簡略化するべく)、スカラユニット208およびベクトルユニット210は、別個のレジスタセット(各々、スカラレジスタ212およびベクトルレジスタ214)を用い、それらの間で転送されるデータは、メモリに書き込まれ、次に、レベル1(L1)キャッシュ206からリードバックされる。代替的な実施形態は、異なるアプローチ(例えば、単一のレジスタセットを用い、または書き込まれ、リードバックされることなく、2つのレジスタファイルの間で、データが転送されることを可能にする通信パスを含む)を用い得る。
L2キャッシュのローカルサブセット204は、プロセッサコア毎に1つの、別個のローカルサブセットに分割された全体的なL2キャッシュの一部である。各プロセッサコアは、L2キャッシュ204の自身のローカルサブセットへの直接のアクセス経路を有する。プロセッサコアにより読み出されたデータは、L2キャッシュサブセット204内に格納され、自身のローカルL2キャッシュサブセットにアクセスする他のプロセッサコアと並列に迅速にアクセスされ得る。プロセッサコアにより書き込まれたデータは、自身のL2キャッシュサブセット204に格納され、必要であれば他のサブセットからフラッシュされる。リングネットワークは、共有データに対するコヒーレンシを保証する。リングネットワークは、プロセッサコア、L2キャッシュ、および他の論理ブロック等のエージェントがチップ内で互いに通信することを可能にするべく双方向である。各リングデータパスは、1方向毎に1012ビット幅である。
図2Bは、実施形態による、図2Aにおけるプロセッサコアの一部の拡大図である。図2Bは、L1キャッシュ204のL1データキャッシュ206A部分、ならびにベクトルユニット210およびベクトルレジスタ214に関する更なる詳細を含む。具体的には、ベクトルユニット210は、16幅ベクトル処理ユニット(VPU)(16幅ALU228を参照)であり、これは、整数命令、単精度浮動小数点命令、および倍精度浮動小数点命令のうちの1または複数を実行する。VPUは、スウィズルユニット220によるレジスタ入力のスウィズル、数値変換ユニット222A〜Bによる数値変換、およびレプリケーションユニット224によるメモリ入力に対するレプリケーションをサポートする。ライトマスクレジスタ226は、結果として生じるベクトル書き込みのプレディケートを可能にする。
統合メモリコントローラおよび専用ロジックを用いるプロセッサ
図3は、実施形態による、2つ以上のコアを有し得、統合メモリコントローラを有し得、統合グラフィックスを有し得る、プロセッサ300のブロック図である。図3における実線ボックスは、シングルコア302A、システムエージェント310、1または複数のバスコントローラユニット316のセットを有するプロセッサ300を示すが、破線ボックスの任意選択の追加は、複数のコア302A〜N、システムエージェントユニット310における1または複数の統合メモリコントローラユニット314のセット、および専用ロジック308を有する代替的なプロセッサ300を示す。
従って、プロセッサ300の異なる実装としては、1)(1または複数のコアを含み得る)統合グラフィックスおよび/またはサイエンティフィック(スループット)ロジックである専用ロジック308と、1または複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、これら2つの組み合わせ)であるコア302A〜Nとを用いるCPU、2)主にグラフィックスおよび/またはサイエンティフィック(スループット)用の多数の専用コアであるコア302A〜Nを用いるコプロセッサ、ならびに3)多数の汎用インオーダコアであるコア302A〜Nを用いるコプロセッサが挙げられ得る。このように、プロセッサ300は、例えば、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、(30個またはそれより多いコアを含む)高スループット多集積コア(MIC)コプロセッサ、エンベデッドプロセッサ等のような汎用プロセッサ、コプロセッサ、または専用プロセッサであり得る。プロセッサは、1または複数のチップ上に実装され得る。プロセッサ300は、例えば、BiCMOS、CMOS、またはNMOS等のいくつかの処理技術のいずれかを用いる1または複数の基板の一部であり得、および/または1または複数の基板上に実装され得る。
メモリ階層は、コア内における1または複数のレベルのキャッシュと、1セットまたは1もしくは複数の共有キャッシュユニット306と、統合メモリコントローラユニット314のセットに結合された外部メモリ(図示せず)とを含む。共有キャッシュユニット306のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)、または他のレベルキャッシュ等、1または複数の中間レベルのキャッシュ、ラストレベルキャッシュ(LLC)、および/またはこれらの組み合わせを含み得る。一実施形態においては、リングベースの相互接続ユニット312は、統合グラフィックスロジック308、共有キャッシュユニット306のセット、およびシステムエージェントユニット310/統合メモリコントローラユニット314を相互接続するが、代替的な実施形態は、そのようなユニットを相互接続するために任意の数の周知の技術を用いてもよい。一実施形態において、1または複数のキャッシュユニット306とコア302A〜Nとの間でコヒーレンシが保持される。
いくつかの実施形態において、コア302A〜Nのうちの1または複数は、マルチスレッディングができる。システムエージェント310は、コア302A〜Nを調整して動作させるコンポーネントを含む。システムエージェントユニット310は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含み得る。PCUは、コア302A〜Nおよび統合グラフィックスロジック308の電力状態を調整するのに必要とされるロジックおよびコンポーネントであるか、またはこれらを含み得る。ディスプレイユニットは、1または複数の外部接続されたディスプレイを駆動するためのものである。
コア302A〜Nは、アーキテクチャ命令セットの観点からは同種または異種であり得る。すなわち、コア302A〜Nのうちの2またはそれより多くは、同じ命令セットを実行することができる場合があり、他のものは、当該命令セットのサブセットのみ、または異なる命令セットを実行することができる場合がある。
例示的なコンピュータアーキテクチャ
図4〜7は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、エンベデッドプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスの技術分野で既知の他のシステム設計および構成も好適である。一般に、本明細書において開示されるプロセッサおよび/または他の実行ロジックを組み込むことができる多種多様なシステムまたは電子デバイスが概ね好適である。
図4は、実施形態によるシステム400のブロック図を示す。システム400は、1または複数のプロセッサ410、415を含み得、これらはコントローラハブ420に結合される。一実施形態において、コントローラハブ420は、グラフィックスメモリコントローラハブ(GMCH)490および入出力ハブ(IOH)450(別個のチップ上にあり得る)を含む。GMCH490は、メモリコントローラおよびグラフィックスコントローラを含み、これらにメモリ440およびコプロセッサ445が結合される。IOH450は、入出力(I/O)デバイス460をGMCH490に結合する。あるいは、メモリおよびグラフィックスコントローラの一方または両方が(本明細書において説明される)プロセッサ内に統合され、メモリ440およびコプロセッサ445は、プロセッサ410およびIOH450を有する単一チップ内のコントローラハブ420に直接に結合される。
追加のプロセッサ415の任意選択の性質は、図4において破線で示される。各プロセッサ410、415は、本明細書に説明される処理コアのうちの1または複数を含み得、プロセッサ300の何らかのバージョンであり得る。
メモリ440は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、またはこれら2つの組み合わせであってもよい。少なくとも一実施形態においては、コントローラハブ420は、フロントサイドバス(FSB)等のマルチドロップバス、QuickPath相互接続(QPI)等のポイントツーポイントインタフェース、または類似の接続495を介してプロセッサ410、415と通信する。
一実施形態において、コプロセッサ445は、例えば、高スループットMICプロセッサ、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、エンベデッドプロセッサ等のような専用プロセッサである。一実施形態において、コントローラハブ420は、統合グラフィックスアクセラレータを含み得る。
物理リソース410と物理リソース415との間には、アーキテクチャ、マイクロアーキテクチャ、熱、電力消費の特性等を含む幅広い価値基準に関して様々な違いが存在し得る。
一実施形態において、プロセッサ410は、一般的なタイプのデータ処理オペレーションを制御する命令を実行する。コプロセッサ命令は、命令中に埋め込まれ得る。プロセッサ410は、取り付けられたコプロセッサ445により実行されるべきタイプとしてこれらのコプロセッサ命令を認識する。従って、プロセッサ410は、コプロセッサバスまたは他の相互接続においてこれらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)をコプロセッサ445に発する。コプロセッサ445は、受信したコプロセッサ命令を受け取って実行する。
図5は、実施形態による、第1のより具体的な例示的システム500のブロック図を示す。図5に示されるように、マルチプロセッサシステム500は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続550を介して結合される第1のプロセッサ570および第2のプロセッサ580を含む。プロセッサ570および580の各々は、プロセッサ300の何らかのバージョンであり得る。本発明の一実施形態において、プロセッサ570および580は各々、プロセッサ410および415であるが、コプロセッサ538は、コプロセッサ445である。別の実施形態において、プロセッサ570および580は各々、プロセッサ410およびコプロセッサ445である。
統合メモリコントローラ(IMC)ユニット572および582を各々含むプロセッサ570および580が示される。プロセッサ570は、そのバスコントローラユニットの一部としてポイントツーポイント(P‐P)インタフェース576および578も含む。同様に、第2のプロセッサ580は、P‐Pインタフェース586および588を含む。プロセッサ570、580は、P‐Pインタフェース回路578、588を用いて、ポイントツーポイント(P‐P)インタフェース550を介して情報を交換し得る。図5に示されるように、EVIC572および582は、プロセッサを各メモリ、すなわち、各プロセッサにローカルに取り付けられたメインメモリの一部であり得るメモリ532およびメモリ534に結合する。
プロセッサ570、580は各々、ポイントツーポイントインタフェース回路576、594、586、598を用い、個々のP‐Pインタフェース552、554を介してチップセット590と情報を交換し得る。任意選択で、チップセット590は、高性能インタフェース539を介してコプロセッサ538と情報を交換し得る。一実施形態において、コプロセッサ538は、例えば、高スループットMICプロセッサ、ネットワークプロセッサもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、エンベデッドプロセッサ等のような専用プロセッサである。
共有キャッシュ(図示せず)は、いずれかのプロセッサに含まれ、または両方のプロセッサの外部にあり得るが、プロセッサが低電力モードにされると、どちらかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得るように、P‐P相互接続を介してプロセッサとなおも接続され得る。
チップセット590は、インタフェース596を介して第1のバス516に結合され得る。一実施形態において、第1のバス516は、周辺構成要素相互接続(PCI)バス、またはPCI Expressバス、または別の第3世代I/O相互接続バス等のバスであり得るが、本発明の範囲はそのように限定されない。
図5に示されるように、様々なI/Oデバイス514が、第1のバス516を第2のバス520に結合するバスブリッジ518と共に、第1のバス516に結合され得る。一実施形態において、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックスアクセラレータまたはデジタル信号処理(DSP)ユニット等)、フィールドプログラマブルゲートアレイ、またはその他のプロセッサ等、1または複数の追加のプロセッサ515が第1のバス516に結合される。一実施形態において、第2のバス520は、ローピンカウント(LPC)バスであり得る。様々なデバイスは、一実施形態において、例えば、キーボードおよび/またはマウス522、通信デバイス527、ならびに命令/コードおよびデータ530を含み得るディスクドライブもしくは他の大容量ストレージデバイス等のストレージユニット528を含む第2のバス520に結合され得る。更に、オーディオI/O524は、第2のバス520に結合され得る。他のアーキテクチャが可能であることに留意されたい。例えば、図5のポイントツーポイントアーキテクチャに代えて、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装し得る。
図6は、実施形態による、第2のより具体的な例示的システム600のブロック図を示す。図5および図6の同一の要素は、同一の参照番号を有し、図6の他の態様を不明瞭にするのを避けるべく、図5の特定の態様は、図6から省略されている。
図6は、プロセッサ570、580が統合メモリおよびI/O制御ロジック(「CL」)572および582を各々含み得ることを示す。従って、CL572、582は、統合メモリコントローラユニットを含み、I/O制御ロジックを含む。図6は、メモリ532、534がCL572、582に結合されていることのみならず、I/Oデバイス614も制御ロジック572、582に結合されていることを示す。レガシI/Oデバイス615は、チップセット590に結合される。
図7は、実施形態によるSoC700のブロック図を示す。図3における類似の要素は、同一の参照番号を有する。また、破線ボックスは、より高度なSoCの任意選択の特徴である。図7において、相互接続ユニット702は、1もしくは複数のコア302A〜Nおよび共有キャッシュユニット306のセットを含むアプリケーションプロセッサ710、システムエージェントユニット310、バスコントローラユニット316、統合メモリコントローラユニット314、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、およびビデオプロセッサを含み得る1もしくは複数のコプロセッサ720のセット、スタティックランダムアクセスメモリ(SRAM)ユニット730、ダイレクトメモリアクセス(DMA)ユニット732、および1もしくは複数の外部ディスプレイを結合するディスプレイユニット740に結合される。一実施形態において、コプロセッサ720は、例えば、ネットワークプロセッサもしくは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、エンベデッドプロセッサ等のような専用プロセッサを含む。
本明細書に開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装アプローチの組み合わせで実装される。実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性および不揮発性メモリ、ならびに/またはストレージ要素を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを有するプログラマブルシステム上で実行するコンピュータプログラムまたはプログラムコードとして実装される。
図5に示されるコード530等のプログラムコードは、本明細書に説明される機能を実行して出力情報を生成するべく、入力命令に適用され得る。出力情報は、既知の様式で1または複数の出力デバイスに適用され得る。本願の目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサ等のプロセッサを有する任意のシステムを含む。
プログラムコードは、高水準手続き型プログラミング言語またはオブジェクト指向プログラミング言語で実装され、処理システムと通信し得る。所望であれば、プログラムコードは、アセンブリ言語または機械語でも実装され得る。実際には、本明細書に説明されるメカニズムは、範囲においていずれの特定のプログラミング言語にも限定されない。いずれの場合においても、言語は、コンパイル型言語またはインタープリタ型言語であってもよい。
少なくとも一実施形態の1または複数の態様は、プロセッサ内の様々なロジックを表す、機械可読媒体上に格納された代表的データにより実装され得、当該データは、機械により読み出されると、当該機械に本明細書に説明される技術を実行させるためのロジックを生成させる。「IPコア」として知られるそのような表現は、有形機械可読媒体(「テープ」)上に格納され、様々な顧客または製造設備に供給され、ロジックまたはプロセッサを実際に作製する製造機械に読み込まれ得る。例えば、ARM Holdings,Ltdおよび中国科学院の計算技術研究所(ICT)により開発されたプロセッサ等のIPコアは、様々な顧客またはライセンシにライセンス供与または販売され、これらの顧客またはライセンシにより製造されるプロセッサに実装され得る。
そのような機械可読ストレージ媒体としては、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD‐ROM)、書き換え可能コンパクトディスク(CD‐RW)、および光磁気ディスク等、その他のタイプのディスクを含むストレージ媒体、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)等のランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、相変化メモリ(PCM)等の半導体デバイス、磁気もしくは光カード、または電子命令を格納するのに好適なその他のタイプの媒体を含む、機械またはデバイスにより製造または形成される、非一時的で有形な構成の物品が挙げられ得るが、これらに限定されない。
従って、実施形態は、本明細書に説明される構造体、回路、装置、プロセッサ、および/またはシステム機能を定義するハードウェア記述言語(HDL)等の命令を含むか、または設計データを含む非一時的有形機械可読媒体も含む。そのような実施形態は、プログラム製品と称され得る。
エミュレーション(バイナリ変換、コードモーフィング等を含む)
いくつかの場合に、命令コンバータは、ソース命令セットからターゲット命令セットへと命令を変換するべく用いられ得る。例えば、命令コンバータは、(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて)命令を、コアにより処理されるべき1または複数の他の命令に翻訳し、モーフィングし、エミュレートし、または別の方法で変換し得る。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装され得る。命令コンバータは、プロセッサ上にあり、プロセッサから離れ、またはプロセッサ上の一部であり、プロセッサから離れた一部であり得る。
図8は、実施形態による、ソース命令セットのバイナリ命令を、ターゲット命令セットのバイナリ命令に変換するソフトウェア命令コンバータの使用と対比するブロック図である。示された実施形態において、命令コンバータは、ソフトウェア命令コンバータであるが、あるいは、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装され得る。図8は、高水準言語802によるプログラムが、少なくとも1つのx86命令セットコア816を有するプロセッサによりネイティブに実行され得るx86バイナリコード806を生成するべく、x86コンパイラ804を用いてコンパイルされ得ることを示す。
少なくとも1つのx86命令セットコア816を有するプロセッサは、少なくとも1つのx86命令セットコアを用いるインテル(登録商標)プロセッサと実質的に同一の結果を実現するべく、(1)インテル(登録商標)x86命令セットコアの命令セットの実質的部分、または(2)少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサ上で起動することを目的とする、オブジェクトコードバージョンのアプリケーションもしくは他のソフトウェアを互換的に実行し、または別の方法で処理することにより、少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサと実質的に同一の機能を実行し得る任意のプロセッサを表す。x86コンパイラ804は、x86バイナリコード806(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。x86バイナリコード806は、追加のリンク処理を用いるか、または用いることなく少なくとも1つのx86命令セットコア816を有するプロセッサにおいて実行され得る。同様に、図8は、高水準言語802によるプログラムが、少なくとも1つのx86命令セットコア814を有しないプロセッサ(例えば、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行し、および/または英国ケンブリッジのARM HoldingsのARM命令セットを実行するコアを有するプロセッサ)によりネイティブに実行され得る代替的な命令セットバイナリコード810を生成する代替的な命令セットコンパイラ808を用いて、コンパイルされ得ることを示す。
命令コンバータ812は、x86バイナリコード806を、x86命令セットコア814を有しないプロセッサによりネイティブに実行され得るコードに変換するべく用いられる。この変換済みコードは、代替的な命令セットバイナリコード810と同じである可能性が低い。なぜなら、これができる命令コンバータは、作成することが困難だからである。しかし、変換済みコードは、一般的なオペレーションを実現し、代替的な命令セットの命令から構成される。従って、命令コンバータ812は、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表し、これらは、エミュレーション、シミュレーション、またはその他の処理により、x86命令セットプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスがx86バイナリコード806を実行することを可能にする。
ベクトル飽和ダブルワード/クワッドワード加算命令
飽和演算は、特にデジタル信号処理アプリケーションにおける多くのデータ処理アルゴリズムの効率性を向上させる。飽和加算は、多くのアルゴリズムにおいて通常のものである。しかし、既存の命令を用いて飽和演算を実装するためには、高価な命令シーケンスが要求される。いくつかの実施形態において、命令セットアーキテクチャへのベクトル拡張は、飽和した符号付き整数加算および符号なし整数加算を実行するための命令を含む。一実施形態において、符号付き飽和を用いるベクトル符号付き整数加算が提供される。一実施形態において、符号なし飽和を用いるベクトル符号なし整数加算が提供される。一実施形態において、符号付き命令および符号なし命令の両方についてパックドダブルワード整数およびパックドクワッドワード整数がサポートされる。
例えば、ベクトルパックド加算符号付きダブルワード(例えば、VPADDSD)命令は、プロセッサに、第1のソースオペランドおよび第2のソースオペランドの飽和を用いたパックド符号付きダブルワード整数のSIMD加算を実行させる。次に、プロセッサは、パックド整数の結果をデスティネーションオペランドに格納する。個々のダブルワードの結果が符号付きダブルワード整数の範囲を超える(すなわち、0x7FFFFFFFより大きく、または0x80000000より小さい)場合、0x7FFFFFFFまたは0x80000000の飽和値がデスティネーションオペランドに各々書き込まれる。クワッドワード符号付き命令(例えば、VPADDSQ)および符号なしバージョン(ダブルワードおよびクワッドワード用。例えば、VPADDUSD、VPADDUSQの各々)は、符号なしおよび/またはクワッドワード飽和値と同様に機能する。一実施形態において、128ビット、256ビット、および512ビットのベクトルレジスタがサポートされ、ダブルワード命令については4個、8個、または16個のベクトル要素がサポートされ、クワッドワード命令については2個、4個、または8個のベクトル要素がサポートされる。
図9は、実施形態によるライトマスキングされたベクトル加算を示すブロック図である。一実施形態において、ライトマスクレジスタK910は、データ要素位置ベースでデスティネーションベクトルオペランドにおける当該データ要素位置が命令オペレーションの結果を反映するか否かを制御する。ライトマスキング構成に基づいて、デスティネーションオペランド(例えば、DESTオペランド907)における各データ要素位置は、第1のソースオペランド(例えば、SRC1オペランド901)および第2のソースオペランド(例えば、SRC2オペランド902)により識別されたベクトルレジスタの対応するデータ要素の和の出力のどれかを含む。例えば、デスティネーション要素0 910aは、関連付けられたライトマスク値1を有し、SRC1オペランド901の要素0(例えば0x9)と、SRC2オペランド902の要素0(例えば0x8)との和の結果を受け取る。デスティネーション要素1 910bは、関連付けられたライトマスク値0を有し、ライトマスク構成に基づいて、示されるようにゼロマスキングされる。すなわち要素の元の値は変化しない。SRC1オペランド901およびSRC2オペランド902の両方がベクトルとして示されているが、一実施形態において、命令におけるSRC2は、SRC1オペランド901により指定されたベクトルレジスタの各要素に加算されるスカラ整数値を格納するメモリアドレスであってもよい。
図10は、本明細書に説明される実施形態による、命令を実行するための例示的なプロセッサロジックのブロック図である。実施形態によれば、ベクトル加算ロジック1006は、第1のソースレジスタ(例えば、SRC1レジスタ1001)、第2のソースレジスタ(例えば、SRC2レジスタ1002)、およびデスティネーションレジスタ(例えば、DESTレジスタ1007)を含む。一実施形態において、SRC1レジスタ1002は、例示的なソースベクトルAを含むが、SRC2レジスタ1002は、例示的なソースベクトルBを含む。対応するベクトル要素の和が計算され、それらの要素のうちの少なくともいくつかが用いられて例示的なベクトルCを生成し得、ベクトルCは、一実施形態においてDESTレジスタ1007に出力される。一実施形態において、第1のソースレジスタは、ソースベクトルAを含むが、第2のソースレジスタは、指定されたメモリ位置(例えば、命令におけるSRC2により指定されたアドレス)からフェッチされたスカラ値Bを含む。スカラ値は、実施形態によれば、汎用レジスタに格納され、またはベクトルレジスタの複数の要素にブロードキャストされ得る。範囲外の結果を適切な飽和値(例えば、符号付きまたは符号なしのいずれかの最小値または最大値)と置き換えるために、飽和ロジック1008がベクトル加算ロジック1008に含まれる。
図10に示される具体例において、SRC1レジスタ1001、SRC2レジスタ1002、およびDESTレジスタ1007は、各々128ビットである。しかし、本明細書に説明される実施形態の基礎となる原理はそのようなものとして限定されず、256ビットおよび512ビットを含む更なるレジスタサイズが異なる実施形態において用いられてもよい。一実施形態において、デスティネーションレジスタのデータ要素の各々について、マスクデータ構造体1010内でマスクビットも指定され得る。デスティネーションレジスタ内の特定のデータ要素に関連付けられたマスクビットが真(true)(例えば1)に設定されると、ベクトル加算ロジック1006は、関連付けられたデータ要素の和を出力する。マスクビットが偽(false)(例えば0)に設定されると、一実施形態においては、ベクトル加算ロジック1006は、関連付けられたデスティネーションレジスタエントリにゼロを書き込む。マスク値に応答してデスティネーションデータ要素にゼロを書き込む上記の技術は、本明細書において「ゼロ書き込みマスキング(zeroing masking)」と称される。あるいは、一実施形態は、デスティネーションレジスタに格納された以前のデータ要素値が保持される「マージングマスキング(merging masking)」を用いる。従って、マージングマスキングが用いられる場合、デスティネーションベクトルCのビットは、以前の値を保持するであろう。上記のマスキングビットが逆になり得るが、実施形態の基礎となる原理になおも適合することが当業者には理解される(例えば、true=masking、false=no masking)。
オペレーションにおいて、もたらされる任意の要素が最大データ要素値または最小データ要素値を超える場合、(符号付き飽和または符号なし飽和のいずれかを用いる)飽和ロジック1008は、最大値または最小値をその要素の代わりに用いる。示されるように、一実施形態において、変換ロジック1006は、レジスタ1001、1002、および1007にアクセスし、マルチプレクサ1010、1011、および1012を制御することにより上記のオペレーションを実行する。マルチプレクサを実装するのに必要とされるロジックは、当業者により十分に理解されるものであり、本明細書において詳細に説明されない。
図11は、実施形態による、ベクトル飽和加算を実行するための命令を含む処理システムのブロック図である。例示的な処理システムは、メインメモリ1100に結合されたプロセッサ1155を含む。プロセッサ1155は、ベクトル飽和加算命令をデコードするためのデコードロジック1131を有するデコードユニット1130を含む。更に、プロセッサ実行エンジンユニット1140は、ベクトル飽和加算命令を実行するための追加の実行ロジック1141を含む。レジスタ1105は、実行ユニット1140が命令ストリームを実行する場合に、オペランド、制御データ、および他のタイプのデータのためのレジスタストレージを提供する。一実施形態において、レジスタ1105は、本明細書において説明されるベクトル飽和加算命令を実装するときに用いられる物理レジスタも含む。
簡略化のために、単一のプロセッサコア(「コア0」)の詳細が図11に示されている。しかし、図11に示される各コアは、コア0と同じセットのロジックを有し得ることが理解されよう。示されるように、各コアは、指定されたキャッシュ管理ポリシに応じて命令およびデータをキャッシュするための専用のレベル1(L1)キャッシュ1112およびレベル2(L2)キャッシュ1111も含み得る。L1キャッシュ1111は、命令を格納するための別個の命令キャッシュ1320と、データを格納するための別個のデータキャッシュ1121とを含む。様々なプロセッサキャッシュ内に格納された命令およびデータは、キャッシュラインの粒度で管理される。キャッシュラインの粒度は、固定サイズ(例えば、64バイト、128バイト、512バイトの長さ)であってもよい。この例示的な実施形態における各コアは、メインメモリ1100および/または共有レベル3(L3)キャッシュ1116から命令をフェッチするための命令フェッチユニット1110と、命令をデコードするためのデコードユニット1130と、命令を実行するための実行ユニット1140と、命令をリタイアし、結果をレジスタ1105にライトバックするためのライトバック/リタイアユニット1150とを有する。
命令フェッチユニット1110は、メモリ1100(またはキャッシュのうちの1つ)からフェッチされるべき次の命令のアドレスを格納するための次の命令ポインタ1103と、アドレス変換の速度を向上させるべく、最近用いられた仮想・物理命令アドレスのマップを格納するための命令トランスレーションルックアサイドバッファ(ITLB)1104と、命令分岐アドレスを投機的に予測するための分岐予測ユニット1102と、分岐アドレスおよびターゲットアドレスを格納するための分岐ターゲットバッファ(BTB)1101とを含む周知の様々なコンポーネントを含む。フェッチされると、命令は、次に、デコードユニット1130、実行ユニット1140、およびライトバック/リタイアユニット1150を含む命令パイプラインの残りのステージにストリーミングされる。
図12は、本明細書に説明される実施形態による、命令を実行するためのロジックのフロー図である。一実施形態において、プロセッサは、1202に示されるように、命令をフェッチしてベクトル飽和加算命令を実行することを含む命令オペレーションを実行するためのロジックを含む。1204に示されるように、デコードロジックは、フェッチ済み命令をデコードしてデコード済み命令にするように構成される。1206に示されるように、プロセッサ実行ロジックは、ベクトル加算オペレーションを実行するべく、デコード命令を実行する。1208において、飽和ロジックは、計算された任意のデータ要素内の範囲外の結果のいずれかを、適切な飽和値(例えば、符号付きもしくは符号なし、ダブルワードもしくはクワッドワード)と交換する。1210において、実行ロジックは、プロセッサのライトマスク構成および各データ要素に対するライトマスク値に基づいて、実行された命令の1または複数の結果をプロセッサレジスタファイルに書き込む。一実施形態において、実行された命令の結果を書き込む段階は、ベクトル飽和加算オペレーションのデスティネーションオペランドにより示されるアーキテクチャレジスタ等の箇所に、飽和加算オペレーションの結果をコミットする段階を有する。結果は、ソースベクトルに格納した関連付けられたデータ要素の和を含む1または複数のベクトルデータ要素と、データ要素およびライトマスク構成に関連付けられたライトマスクに基づいてゼロの値を格納する1または複数のデータ要素とを含み得る。一実施形態において、結果は、変更されず、前の値または前のオペレーションの結果を含む1または複数のベクトルデータ要素を含む。
一実施形態の実装を記載する疑似コードは、以下の表1に記載される。
Figure 2017539010
表1に示される例示的な疑似コードは、ベクトルプロセッサ加算飽和符号付きダブルワード命令を提供する。例示的な疑似コードにおいて、128ビット、256ビット、および512ビットのベクトル長(VL)は、4個、8個、または16個のダブルワードベクトル要素で各々サポートされる。しかし、実施形態が符号付きクワッドワード命令、ならびに符号なしダブルワード命令およびクワッドワード命令を含む更なる命令を提供するので、実施形態の基礎となる原理は、表1の疑似コードに記載された特定の実装に限定されないことが理解されよう。更に、ベクトル加算オペレーションが実行されるが、一実施形態においては、SRC2オペランドは、SRC1ベクトルの各要素に加算されるダブルワードデータ要素またはクワッドワードデータ要素を格納するメモリアドレスであってもよい。そのような実施形態において、黙示的なロードオペレーションが指定されたメモリアドレスから実行される。一実施形態において、ロードオペレーションは、プロセッサ実行ユニットが加算オペレーションを実行する前に、メモリからSRC2ベクトルレジスタの全要素へとデータ要素をブロードキャストする。
一実施形態において、非ライトマスクオペレーションが実行され得、またはライトマスクオペレーションが実行され得る。ライトマスクが用いられない場合、関連付けられたソースデータ要素の和は、デスティネーションデータ要素に書き込まれる。あるいは飽和値は、デスティネーションデータ要素(例えば、ダブルワードまたはクワッドワード)のデータタイプの範囲外である結果に対して書き込まれる。ライトマスクが用いられる場合、各デスティネーション要素は結果、飽和値、ゼロの値を受信し、またはデータ要素に関連付けられたライトマスク値および命令のライトマスク構成に基づいて未変更のままである。
例示的な命令フォーマット
本明細書に説明される命令の実施形態は、異なるフォーマットで実施され得る。 ベクトル向け命令フォーマットは、ベクトル命令に好適な命令フォーマットである。(例えば、ベクトルオペレーションに固有の一定のフィールドが存在する)。ベクトルおよびスカラオペレーションの両方がベクトル向け命令フォーマットによりサポートされる実施形態が説明されるが、代替的な実施形態は、ベクトル向け命令フォーマットによるベクトルオペレーションのみを用いる。
図13A〜図13Bは、実施形態による一般的ベクトル向け命令フォーマットおよびその命令テンプレートを示すブロック図である。図13Aは、実施形態による、一般的ベクトル向け命令フォーマット、およびそのクラスA命令テンプレートを示すブロック図である。図13Bは、実施形態による、一般的ベクトル向け命令フォーマット、およびそのクラスB命令テンプレートを示すブロック図である。具体的には、クラスAおよびクラスB命令テンプレートは、一般的ベクトル向け命令フォーマット1300に対して定義され、これらの両方は、非メモリアクセス1305の命令テンプレートおよびメモリアクセス1320の命令テンプレートを含む。ベクトル向け命令フォーマットの文脈における一般的という用語は、いずれの特定の命令セットにも関係しない命令フォーマットを指す。
ベクトル向け命令フォーマットが、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バイトのベクトルオペランド)をサポートする。
図13AにおけるクラスA命令テンプレートは、1)非メモリアクセス1305の命令テンプレート中に示される非メモリアクセス、フルラウンド制御タイプオペレーション1310の命令テンプレート、および非メモリアクセス、データ変換タイプオペレーション1315の命令テンプレート、ならびに2)メモリアクセス1320の命令テンプレート中に示されるメモリアクセス、一時的1325の命令テンプレート、およびメモリアクセス、非一時的1330の命令テンプレートを含む。図13BのクラスB命令テンプレートは、1)非メモリアクセス1305の命令テンプレート中に示される非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプオペレーション1312の命令テンプレート、および非メモリアクセス、ライトマスク制御、VSIZEタイプオペレーション1317の命令テンプレート、ならびに2)メモリアクセス1320の命令テンプレート中に示されるメモリアクセス、ライトマスク制御1327の命令テンプレートを含む。
一般的ベクトル向け命令フォーマット1300は、図13A〜図13Bにおいて示される順序で以下に列挙される、次のフィールドを含む。
フォーマットフィールド1340。このフィールドにおける特定の値(命令フォーマット識別子の値)は、ベクトル向け命令フォーマット、従って、命令ストリーム中のベクトル向け命令フォーマットにおける命令の発生を一意に識別する。従って、このフィールドは、一般的ベクトル向け命令フォーマットのみを有する命令セットに必要とされないという意味で任意選択である。
ベースオペレーションフィールド1342。その内容は、異なるベースオペレーションを区別する。
レジスタインデックスフィールド1344。その内容は、レジスタ内であれ、メモリ内であれ、直接に、またはアドレス生成により、ソースオペランドおよびデスティネーションオペランドの位置を指定する。これらは、PxQ(例えば、32x512、16x128、32x1024、64x1024)のレジスタファイルからN個のレジスタを選択するのに十分な数のビットを含む。一実施形態においては、Nは、最大で3つのソースおよび1つのデスティネーションレジスタであり得るが、代替的な実施形態は、より多いかまたはより少ないソースおよびデスティネーションレジスタをサポートし得る(例えば、最大で2つのソースをサポートし得、この場合、これらのソースのうちの1つは、デスティネーションとしても機能し、最大で3つのソースをサポートし得、この場合、これらのソースのうちの1つは、デスティネーションとしても機能し、最大で2つのソースおよび1つのデスティネーションをサポートし得る)。
修飾子フィールド1346。その内容は、一般的ベクトル命令フォーマット中におけるメモリアクセスを指定する命令の発生とメモリアクセスを指定しない命令の発生とを、すなわち、非メモリアクセス1305の命令テンプレートとメモリアクセス1320の命令テンプレートを区別する。メモリアクセスオペレーションは、メモリ階層を読み出し、および/またはこれに書き込むが(いくつかの場合には、レジスタにおける値を用いて、ソースアドレスおよび/またはデスティネーションアドレスを指定する)、非メモリアクセスオペレーションは、これを行わない(例えば、ソースおよびデスティネーションは、レジスタである)。また、一実施形態において、このフィールドは、3つの異なる態様を選択し、メモリアドレス計算を実行するが、代替的な実施形態は、より多い、より少ない、または異なる態様をサポートし、メモリアドレス計算を実行し得る。
追加オペレーションフィールド1350。その内容は、ベースオペレーションに加えて、種々様々な異なるオペレーションのうちのどれが実行されるかを区別する。このフィールドは、コンテキストに固有である。一実施形態において、このフィールドは、クラスフィールド1368、アルファフィールド1352、およびベータフィールド1354に分割される。追加オペレーションフィールド1350は、オペレーションの共通グループが2、3、または4つの命令ではなく、単一命令で実行されることを可能にする。
スケールフィールド1360。その内容は、メモリアドレス生成のための(例えば、2scale*index+baseを用いるアドレス生成のための)インデックスフィールド内容のスケーリングを可能にする。
変位フィールド1362A。その内容は、メモリアドレス生成の一部として(例えば、2scale*index+base+displacementを用いるアドレス生成に)用いられる。
変位係数フィールド1362B(変位係数フィールド1362Bの直ぐ上に変位フィールド1362Aを並置することにより、一方または他方が使用されることを示すことに留意されたい)。その内容は、アドレス生成の一部として用いられる。変位係数フィールド1362Bは、メモリアクセス(N)のサイズに対して調整される変位係数を指定する。Nは、(例えば、2scale*index+base+scaled displacementを用いるアドレス生成のための)メモリアクセスにおけるバイトの数である。冗長下位ビットは、無視され、従って、変位係数フィールドの内容は、有効なアドレスを計算するときに用いられる最終的変位を生成するべく、メモリオペランドの合計サイズ(N)で乗算される。Nの値は、フルオペコードフィールド1374(本明細書において後述される)およびデータ操作フィールド1354Cに基づいて、ランタイムでプロセッサハードウェアにより決定される。変位フィールド1362Aおよび変位係数フィールド1362Bは、非メモリアクセス1305の命令テンプレートに用いられず、および/または異なる実施形態が1つのみまたは2つのうちいずれも実装しない場合があるという意味で任意選択である。
データ要素幅フィールド1364。その内容は、(いくつかの実施形態において全ての命令に対して、他の実施形態において命令のうちいくつかのみに対して)いくつかのデータ要素幅のうちのどれが用いられるかを区別する。このフィールドは、1つのデータ要素幅のみがサポートされ、および/またはオペコードのいくつかの態様を用いて、データ要素幅がサポートされる場合には必要とされないという意味で任意選択である。
ライトマスクフィールド1370。その内容は、データ要素位置ベースで、デスティネーションベクトルオペランドにおける当該データ要素位置がベースオペレーションおよび追加オペレーションの結果を反映するか否かを制御する。クラスA命令テンプレートは、マージング・ライトマスキングをサポートするが、クラスB命令テンプレートは、マージングおよびゼロ書き込みマスキングの両方をサポートする。マージングする場合、ベクトルマスクは、デスティネーションにおける要素の任意のセットが(ベースオペレーションおよび追加オペレーションにより指定された)任意のオペレーションの実行中に更新から保護されることを可能にする。他の一実施形態では、対応するマスクビットが0を有するデスティネーションの各要素の古い値を保持する。対照的に、ゼロ書き込みする場合、ベクトルマスクは、デスティネーションにおける要素の任意のセットが(ベースオペレーションおよび追加オペレーションにより指定された)任意のオペレーションの実行中にゼロにされることを可能にする。一実施形態において、対応するマスクビットが0の値を有する場合、デスティネーションの要素は、0に設定される。この機能のサブセットは、実行されるオペレーションのベクトル長を制御する能力である(すなわち、要素のスパンは、最初のものから最後のものに変更される)。しかし、変更される要素が連続している必要はない。従って、ライトマスクフィールド1370は、ロード、ストア、演算、論理等を含む部分的ベクトルオペレーションを可能にする。実施形態は、ライトマスクフィールド1370の内容が、用いられるべきライトマスクを含むいくつかのライトマスクレジスタのうちの1つを選択する(従って、ライトマスクフィールド1370の内容が実行されるべき当該マスキングを間接的に識別する)ものとして説明されているが、代替的な実施形態はこれに代えて、または更に、マスクライトフィールド1370の内容が実行されるべきマスキングを直接に指定することを可能にする。
即値フィールド1372。その内容は、即値の指定を可能にする。このフィールドは、即値をサポートしない一般的ベクトル向けフォーマットの実装において存在せず、即値を用いない命令中に存在しないという意味で任意選択である。
クラスフィールド1368。その内容は、命令の異なるクラスを区別する。図13A〜図13Bを参照すると、このフィールドの内容は、クラスA命令またはクラスB命令を選択する。図13A〜図13Bにおいて、角が丸い四角形は、特定の値がフィールド内に存在することを示すべく用いられる(例えば、図13Aおよび図13Bにおけるクラスフィールド1368のクラスA 1368AおよびクラスB 1368Bの各々)。
クラスAの命令テンプレート
クラスAの非メモリアクセス1305の命令テンプレートの場合に、アルファフィールド1352は、RSフィールド1352Aとして解釈され、その内容は、異なる追加オペレーションタイプのうちのどれが実行されるかを区別するが(例えば、ラウンド1352A.1およびデータ変換1352A.2は、各々、非メモリアクセス、ラウンドタイプオペレーション1310、および非メモリアクセス、データ変換タイプオペレーション1315の命令テンプレートに対して指定される)、ベータフィールド1354は、指定されたタイプのオペレーションのうちいずれが実行されるかを区別する。非メモリアクセス1305の命令テンプレートにおいて、スケールフィールド1360、変位フィールド1362A、および変位スケールフィールド1362Bは、存在しない。
非メモリアクセス命令テンプレート‐フルラウンド制御タイプオペレーション
非メモリアクセスのフルラウンド制御タイプオペレーション1310の命令テンプレートにおいて、ベータフィールド1354は、ラウンド制御フィールド1354Aとして解釈され、その内容は、静的ラウンドを提供する。説明される実施形態において、ラウンド制御フィールド1354Aは、抑圧全浮動小数点例外(SAE)フィールド1356およびラウンドオペレーション制御フィールド1358を含み、代替的な実施形態は、これら両方のコンセプトをサポートおよびエンコードして同一のフィールドとすることができ、またはこれらのコンセプト/フィールドのうち一方または他方のみを有し得る(例えば、ラウンドオペレーション制御フィールド1358のみを有し得る)。
SAEフィールド1356。その内容は、例外イベント報告を無効にするか否かを区別する。SAEフィールド1356の内容が、抑圧が有効にされたことを示す場合、所与の命令は、いずれの種類の浮動小数点例外フラグも報告せず、いずれの浮動小数点例外ハンドラも立ち上げない。
ラウンドオペレーション制御フィールド1358。その内容は、ラウンドオペレーション(例えば、ラウンドアップ、ラウンドダウン、ゼロへのラウンド、および近似値へのラウンド)のグループのうちのどれが実行されるべきかを区別する。このように、ラウンドオペレーション制御フィールド1358は、命令ベースでラウンドモードの変更を可能にする。プロセッサがラウンドモードを指定する制御レジスタを含む一実施形態において、ラウンドオペレーション制御フィールド1350の内容は、当該レジスタの値を上書きする。
非メモリアクセス命令テンプレート‐データ変換タイプオペレーション
非メモリアクセスのデータ変換タイプオペレーション1315の命令テンプレートにおいて、ベータフィールド1354は、データ変換フィールド1354Bとして解釈され、その内容は、いくつかのデータ変換のうちのどれが実行されるかを区別する(例えば、非データ変換、スウィズル、ブロードキャスト)。
クラスAのメモリアクセス1320の命令テンプレートの場合、アルファフィールド1352は、エビクションヒントフィールド1352Bとして解釈され、その内容は、エビクションヒントのうちのどれが用いられるかを区別するが(図13Aにおいて、一時的1352B.1および非一時的1352B.2は、各々、メモリアクセス、一時的1325の命令テンプレート、およびメモリアクセス、非一時的1330の命令テンプレートに対して指定される)、ベータフィールド1354は、データ操作フィールド1354Cとして解釈され、その内容は、いくつかのデータ操作オペレーション(プリミティブとしても知られる)のうちのどれが実行されるかを区別する(例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、およびデスティネーションのダウンコンバージョン)。メモリアクセス1320の命令テンプレートは、スケールフィールド1360を含み、変位フィールド1362Aまたは変位スケールフィールド1362Bを任意選択で含む。
ベクトルメモリ命令は、変換サポートを用いて、メモリからのベクトルロードおよびメモリへのベクトルストアを実行する。通常のベクトル命令の場合のように、ベクトルメモリ命令は、データ要素の様式で、メモリから/にデータを転送し、実際に転送される要素は、ライトマスクとして選択されるベクトルマスクの内容により規定される。
メモリアクセス命令テンプレート‐一時的
一時的データは、キャッシュから利益を得るのに十分なほど速やかに再利用される可能性が高いデータである。しかし、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含め、異なる態様で一時的データを実装してもよい。
メモリアクセス命令テンプレート‐非一時的
非一時的データは、レベル1キャッシュにおけるキャッシュから利益を得るのに十分なほど速やかに再利用される可能性が低いデータであり、追い出しの優先権を与えられるべきである。しかし、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含め、異なる態様で非一時的データを実装してもよい。
クラスBの命令テンプレート
クラスBの命令テンプレートの場合、アルファフィールド1352は、ライトマスク制御(Z)フィールド1352Cとして解釈され、その内容は、ライトマスクフィールド1370により制御されるライトマスキングがマージングであるべきか、またはゼロ書き込みであるべきかを区別する。
クラスBの非メモリアクセス1305の命令テンプレートの場合、ベータフィールド1354の一部は、RLフィールド1357Aとして解釈され、その内容は、異なる追加オペレーションタイプのどれが実行されるかを区別するが(例えば、ラウンド1357A.1およびベクトル長(VSIZE)1357A.2は各々、非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプオペレーション1312の命令テンプレート、および非メモリアクセス、ライトマスク制御、VSIZEタイプオペレーション1317の命令テンプレートに対して指定される)、ベータフィールド1354の残りは、指定されたタイプのどのオペレーションが実行されるかを区別する。非メモリアクセス1305の命令テンプレートにおいて、スケールフィールド1360、変位フィールド1362A、および変位スケールフィールド1362Bは、存在しない。
非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプオペレーション1310の命令テンプレートにおいて、ベータフィールド1354の残りは、ラウンドオペレーションフィールド1359Aとして解釈され、例外イベント報告は、無効にされる(所与の命令は、いずれの種類の浮動小数点例外フラグも報告せず、いずれの浮動小数点例外ハンドラも立ち上げない)。
ラウンドオペレーション制御フィールド1359A。ちょうどラウンドオペレーション制御フィールド1358のように、その内容は、ラウンドオペレーション(例えば、ラウンドアップ、ラウンドダウン、ゼロへのラウンド、および近似値へのラウンド)のグループのうちのどれが実行されるべきかを区別する。このように、ラウンドオペレーション制御フィールド1359Aは、命令ベースでラウンドモードの変更を可能にする。一実施形態において、プロセッサは、ラウンドモードを指定する制御レジスタを含み、ラウンドオペレーション制御フィールド1350の内容は、当該レジスタの値を上書きする。
非メモリアクセス、ライトマスク制御、VSIZEタイプオペレーション1317の命令テンプレートにおいて、ベータフィールド1354の残りは、ベクトル長フィールド1359Bとして解釈され、その内容は、いくつかのデータベクトル長のうちのどれが実行されるかを区別する(例えば、128、256、または512バイト)。
クラスBのメモリアクセス1320の命令テンプレートの場合、ベータフィールド1354の一部は、ブロードキャストフィールド1357Bとして解釈され、その内容は、ブロードキャストタイプのデータ操作オペレーションが実行されるべきか否かを区別するが、ベータフィールド1354の残りは、ベクトル長フィールド1359Bとして解釈される。メモリアクセス1320の命令テンプレートは、スケールフィールド1360を含み、変位フィールド1362Aまたは変位スケールフィールド1362Bを任意選択で含む。
一般的ベクトル向け命令フォーマット1300に関連して、フォーマットフィールド1340、ベースオペレーションフィールド1342、およびデータ要素幅フィールド1364を含む、フルオペコードフィールド1374が示される。一実施形態として、フルオペコードフィールド1374がこれらのフィールドの全てを含むものが示されているが、これら全てをサポートしない実施形態において、フルオペコードフィールド1374は、これらのフィールド全てより少ないものを含む。フルオペコードフィールド1374は、オペレーションコード(オペコード)を提供する。
追加オペレーションフィールド1350、データ要素幅フィールド1364、およびライトマスクフィールド1370は、一般的ベクトル向け命令フォーマットにおける命令ベースで、これらの機能が指定されることを可能にする。
ライトマスクフィールドおよびデータ要素幅フィールドを組み合わせることで、マスクが異なるデータ要素幅に基づいて適用されることを可能にするように、型付き命令を生成する。
クラスAおよびクラスB内に見出される様々な命令テンプレートは、異なる状況において有益である。いくつかの実施形態において、異なるプロセッサまたはプロセッサ内の異なるコアは、クラスAのみ、クラスBのみ、または両方のクラスをサポートし得る。例えば、汎用演算用の高性能汎用アウトオブオーダコアは、クラスBのみをサポートし得、主にグラフィックスおよび/またはサイエンティフィック(スループット)演算用のコアは、クラスAのみをサポートし得、両方用のコアは、両方をサポートし得る(勿論、両方のクラスの全てのテンプレートおよび命令ではないが、両方のクラスのテンプレートおよび命令のいくつかのミックスを有するコアは、本発明の範囲内である)。また、シングルプロセッサは、複数のコアを含み得、これらの全てが同じクラスをサポートし、または異なるコアが異なるクラスをサポートする。例えば、別個のグラフィックスコアおよび汎用コアを有するプロセッサにおいて、主にグラフィックスおよび/またはサイエンティフィック演算用のグラフィックスコアのうちの1つは、クラスAのみをサポートし得るが、汎用コアのうちの1または複数は、クラスBのみをサポートする汎用演算用のアウトオブオーダ実行およびレジスタリネームを用いる高性能汎用コアであり得る。別個のグラフィックスコアを有しない別のプロセッサは、クラスAおよびクラスBの両方をサポートする、もう1つの汎用インオーダまたはアウトオブオーダのコアを含み得る。勿論、異なる実施形態において、あるクラスの機能は、他のクラスにおいても実装され得る。高水準言語で書かれたプログラムは、1)実行のためにターゲットプロセッサによりサポートされるクラスの命令のみを有する形式、または2)全てのクラスの命令の異なる組み合わせを用いて書かれた代替的なルーチンを有し、現在、コードを実行しているプロセッサによりサポートされる命令に基づいて、実行するルーチンを選択する制御フローコードを有する形式を含む、種々様々な実行可能な形式にされる(例えば、実行時コンパイルまたは静的コンパイル)。
例示的な特定ベクトル向け命令フォーマット
図14A〜図14Dは、一実施形態による例示的な特定ベクトル向け命令フォーマットを示すブロック図である。図14A〜図14Dは、フィールドの位置、サイズ、解釈、および順序、ならびにそれらのフィールドのいくつかに対する値を指定するという意味で具体的な特定ベクトル向け命令フォーマット1400を示す。特定ベクトル向け命令フォーマット1400は、x86命令セットを拡張するために用いられ得、従ってフィールドのうちのいくつかは、既存のx86命令セットおよびその拡張(例えば、AVX)において用いられるものと類似するか、または同じである。このフォーマットは、拡張された既存のx86命令セットのプレフィックスエンコードフィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、および即値フィールドとの整合性を保つ。図14A〜図14Dがフィールドにマッピングされる図13A〜図13Bのフィールドが示される。
実施形態は、例示的目的で一般的ベクトル向け命令フォーマット1300の文脈において、特定ベクトル向け命令フォーマット1400を参照して説明されるが、本発明は、特許請求される場合を除き、特定ベクトル向け命令フォーマット1400に限定されないことを理解されたい。例えば、一般的ベクトル向け命令フォーマット1300は、様々なフィールドのために考えられる様々なサイズを企図するが、特定ベクトル向け命令フォーマット1400は、特定サイズのフィールドを有するものとして示される。具体的な例として、データ要素幅フィールド1364は、特定ベクトル向け命令フォーマット1400における1つのビットフィールドとして示されるが、本発明は、そのようには限定されない(すなわち、一般的ベクトル向け命令フォーマット1300は、他のサイズのデータ要素幅フィールド1364を企図する)。
一般的ベクトル向け命令フォーマット1300は、図14Aにおいて示される順序で以下に列挙される、次のフィールドを含む。
EVEXプレフィックス(バイト0〜3)1402。4バイト形式でエンコードされる。
フォーマットフィールド1340(EVEXバイト0、ビット[7:0])。最初のバイト(EVEXバイト0)は、フォーマットフィールド1340であり、0x62を含む(本発明の一実施形態において、ベクトル向け命令フォーマットを区別するべく用いられる一意な値)。
第2〜第4のバイト(EVEXバイト1〜3)は、特定の能力を提供するいくつかのビットフィールドを含む。
REXフィールド1405(EVEXバイト1、ビット[7−5])は、EVEX.Rビットフィールド(EVEXバイト1、ビット[7]−R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]−X)、およびEVEXバイト1、ビット[5]−B)からなる。EVEX.R、EVEX.X、およびEVEX.Bのビットフィールドは、対応するVEXビットフィールドと同一の機能性を提供し、1の補数形式を用いてエンコードされる。すなわち、ZMM0は、1111Bとしてエンコードされ、ZMM15は、0000Bとしてエンコードされる。命令の他のフィールドは、当技術分野で既知のレジスタインデックスの下位の3つのビット(rrr、xxx、およびbbb)をエンコードし、従って、Rrrr、Xxxx、およびBbbbは、EVEX.R、EVEX.X、およびEVEX.Bを加えることにより形成され得る。
REX'フィールド1310。これはREX'フィールド1310の第1の部分であり、拡張された32個のレジスタセットの上位の16個または下位の16個のいずれかをエンコードするために用いられるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]−R')である。一実施形態において、このビットは、以下に示される他のものと共に、(周知のx86の32ビットモードで)BOUND命令から区別するべく、ビット反転フォーマットで格納する。BOUND命令のリアルオペコードバイトは62であるが、MOD R/Mフィールド(下記)にはMODフィールドにおける11の値を受け付けない。代替的な実施形態は、これおよび以下に示される他のビットを反転フォーマットで格納しない。1の値は、下位16個のレジスタをエンコードするべく用いられる。換言すると、R'Rrrrは、EVEX.R'、EVEX.R、および他のフィールドの他のRRRを組み合わせることにより形成される。
オペコードマップフィールド1415(EVEXバイト1、ビット[3:0]−mmmm)。その内容は、暗黙に示される先頭オペコードバイト(0F、0F38、または0F3)をエンコードする。
データ要素幅フィールド1364(EVEXバイト2、ビット[7]−W)は、EVEX.Wという表記により表される。EVEX.Wは、データタイプの粒度(サイズ)(32ビットのデータ要素または64ビットのデータ要素のいずれか)を定義するべく用いられる。
EVEX.vvvv1420(EVEXバイト2、ビット[6:3]−vvvv)。EVEX.vvvvの役割は、以下を含み得る。1)EVEX.vvvvは、反転(1の補数)形式で指定された第1のソースレジスタオペランドをエンコードし、2またはそれより多いソースオペランドを用いる命令に対して有効である。2)EVEX.vvvvは、一定の複数のベクトルシフトに対して1の補数形式で指定されたデスティネーションレジスタオペランドをエンコードする。または3)EVEX.vvvvは、いずれのオペランドもエンコードせず、フィールドは予約され、1111bを含むはずである。従って、EVEX.vvvvフィールド1420は、反転(1の補数)形式で格納された第1のソースレジスタ指定子の4つの下位ビットをエンコードする。命令に応じて、指定子サイズを32個のレジスタに拡張するべく、追加の異なるEVEXビットフィールドが用いられる。
EVEX.U1368クラスフィールド(EVEXバイト2、ビット[2]−U)。EVEX.U=0である場合、クラスAまたはEVEX.U0を示す。EVEX.U=1である場合、クラスBまたはEVEX.U1を示す。
プレフィックスエンコードフィールド1425(EVEXバイト2、ビット[1:0]−pp)は、ベースオペレーションフィールドのために追加ビットを提供する。EVEXプレフィックスフォーマットでレガシSSE命令のためのサポートを提供することに加えて、これは、SIMDプレフィックスを圧縮するという利益も有する(EVEXプレフィックスは、SIMDプレフィックスを表すバイトを必要とするのではなく、2ビットのみを必要とする)。一実施形態において、レガシフォーマットおよびEVEXプレフィックスフォーマットの両方でSIMDプレフィックス(66H、F2H、F3H)を用いるレガシSSE命令をサポートするべく、これらのレガシSIMDプレフィックスは、SIMDプレフィックスエンコードフィールドへとエンコードされ、(PLAが変更なしにレガシフォーマットおよびこれらのレガシ命令のEVEXフォーマットの両方を実行し得るように)ランタイム時にデコーダのPLAに提供される前にレガシSIMDプレフィックスへと拡張される。より新しい命令は、EVEXプレフィックスエンコードフィールドの内容をオペコード拡張として直接に用い得るが、ある実施形態は、整合のために同様に拡張されるが、これらのレガシSIMDプレフィックスにより指定される異なる意味を可能にする。代替的な実施形態は、2ビットのSIMDプレフィックスエンコードをサポートするようにPLAを再設計し得、従って拡張を必要としない。
アルファフィールド1352(EVEXバイト3、ビット[7]−EH。EVEX.EH、EVEX.rs、EVEX.RL、EVEX.ライトマスク制御、およびEVEX.Nとしても知られる。αでも示される)。上記ように、このフィールドは、コンテキストに固有である。
ベータフィールド1354(EVEXバイト3、ビット[6:4]−SSS、EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られる。βββでも示される)。上記のように、このフィールドは、コンテキストに固有である。
REX'フィールド1310。これは、REX'フィールドの残りであり、拡張された32個のレジスタセットの上位の16個または下位の16個をエンコードするべく用いられ得るEVEX.V'ビットフィールドのいずれかである(EVEXバイト3、ビット[3]−V')。このビットは、ビット反転フォーマットで格納される。1の値は、下位16個のレジスタをエンコードするべく用いられる。換言すると、V'VVVVは、EVEX.V'、EVEX.vvvvを組み合わせることにより形成される。
ライトマスクフィールド1370(EVEXバイト3、ビット[2:0]−kkk)。その内容は、上記のように、ライトマスクレジスタにおけるレジスタのインデックスを指定する。一実施形態において、特定の値EVEX.kkk=000は、特定の命令のために非ライトマスクが用いられることを暗に示す、特別な動作を有する(これは、全ての1に対するハードワイヤされたライトマスクの使用、またはマスキングハードウェアを迂回するハードウェアの使用を含む、様々な態様で実装され得る)。
リアルオペコードフィールド1430(バイト4)は、オペコードバイトとしても知られる。オペコードの一部は、このフィールド内に指定される。
MOD R/Mフィールド1440(バイト5)は、MODフィールド1442、Regフィールド1444、およびR/Mフィールド1446を含む。上記のように、MODフィールド1442の内容は、メモリアクセスオペレーションおよび非メモリアクセスオペレーションを区別する。Regフィールド1444の役割は、2つの状況に要約され得る。すなわち、デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードし、またはオペコード拡張として扱われ、任意の命令オペランドをエンコードするためには用いられない。R/Mフィールド1446の役割は、メモリアドレスを参照する命令オペランドをエンコードし、またはデスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかをエンコードすることを含み得る。
スケール、インデックス、ベース(SIB)バイト(バイト6)。上記のように、スケールフィールド1350の内容は、メモリアドレス生成に用いられる。SIB.xxx1454およびSIB.bbb1456。これらのフィールドの内容は、レジスタインデックスXxxxおよびBbbbに関連して既に言及された。
変位フィールド1362A(バイト7〜10)。MODフィールド1442が10を含む場合、バイト7〜10は、変位フィールド1362Aであり、これはレガシ32ビット変位(disp32)と同様に機能し、バイト粒度で機能する。
変位係数フィールド1362B(バイト7)。MODフィールド1442が01を含む場合、バイト7は、変位係数フィールド1362Bである。このフィールドの位置は、バイト粒度で機能するレガシx86命令セットの8ビット変位(disp8)の位置と同じである。disp8は、符号拡張されるので、−128〜127バイトのオフセットのみをアドレス指定し得る。64バイトのキャッシュラインに関しては、disp8は、4つの本当に有用な値である−128、−64、0、および64のみに設定され得る8ビットを用いる。多くの場合に、より広いレンジが必要とされるので、disp32が用いられる。しかし、disp32は、4バイトを必要とする。disp8およびdisp32とは対照的に、変位係数フィールド1362Bは、disp8の再解釈である。変位係数フィールド1362Bを用いる場合、実際の変位は、メモリオペランドアクセスのサイズ(N)で乗算される変位係数フィールドの内容により決定される。このタイプの変位は、disp8*Nと称される。これにより、平均命令長(単一バイトだが、はるかに広いレンジの変位に用いられる)を小さくする。そのような圧縮された変位は、有効な変位がメモリアクセスの粒度の倍数であり、従って、アドレスオフセットの冗長下位ビットは、エンコードされる必要がないという前提に基づく。換言すると、変位係数フィールド1362Bは、レガシx86命令セットの8ビット変位に置き換わる。従って、disp8がdisp8*Nにオーバーロードされることのみを例外として、変位係数フィールド1362Bは、x86命令セットの8ビット変位と同じ態様でエンコードされる(従って、ModRM/SIBエンコードルールに変更はない)。換言すると、エンコードルールまたはエンコードの長さに変更はないが、(バイト的アドレスオフセットを得るべく、メモリオペランドのサイズにより変位を調節する必要がある)ハードウェアによる変位値の解釈のみには変更がある。
即値フィールド1372は、上記のように動作する。
フルオペコードフィールド 図14Bは、一実施形態による、フルオペコードフィールド1374を構成する特定ベクトル向け命令フォーマット1400のフィールドを示すブロック図である。具体的には、フルオペコードフィールド1374は、フォーマットフィールド1340、ベースオペレーションフィールド1342、およびデータ要素幅(W)フィールド1364を含む。ベースオペレーションフィールド1342は、プレフィックスエンコードフィールド1425、オペコードマップフィールド1415、およびリアルオペコードフィールド1430を含む。
レジスタインデックスフィールド 図14Cは、一実施形態による、レジスタインデックスフィールド1344を構成する特定ベクトル向け命令フォーマット1400のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド1344は、REXフィールド1405、REX'フィールド1410、MODR/M.regフィールド1444、MODR/M.r/mフィールド1446、VVVVフィールド1420、xxxフィールド1454、およびbbbフィールド1456を含む。
追加オペレーションフィールド 図14Dは、一実施形態による、追加オペレーションフィールド1350を構成する特定ベクトル向け命令フォーマット1400のフィールドを示すブロック図である。クラス(U)フィールド1368が0を含む場合、EVEX.U0(クラスA1368A)を意味する。1を含む場合、EVEX.U1(クラスB1368B)を意味する。U=0、かつMODフィールド1442が11を含む場合(非メモリアクセスオペレーションを意味する)、アルファフィールド1352(EVEXバイト3、ビット[7]−EH)は、RSフィールド1352Aとして解釈される。RSフィールド1352Aが1(ラウンド1352A.1)を含む場合、ベータフィールド1354(EVEXバイト3、ビット[6:4]‐SSS)は、ラウンド制御フィールド1354Aとして解釈される。ラウンド制御フィールド1354Aは、1ビットのSAEフィールド1356および2ビットのラウンドオペレーションフィールド1358を含む。RSフィールド1352Aが0(データ変換1352A.2)を含む場合、ベータフィールド1354(EVEXバイト3、ビット[6:4]‐SSS)は、3ビットのデータ変換フィールド1354Bとして解釈される。U=0であり、かつMODフィールド1442が00、01、または10を含む場合(メモリアクセスオペレーションを意味する)、アルファフィールド1352(EVEXバイト3、ビット[7]‐EH)は、エビクションヒント(EH)フィールド1352Bとして解釈され、ベータフィールド1354(EVEXバイト3、ビット[6:4]‐SSS)は、3ビットのデータ操作フィールド1354Cとして解釈される。
U=1である場合、アルファフィールド1352(EVEXバイト3、ビット[7]−EH)は、ライトマスク制御(Z)フィールド1352Cとして解釈される。U=1であり、かつMODフィールド1442が11を含む場合(非メモリアクセスオペレーションを意味する)、ベータフィールド1354(EVEXバイト3、ビット[4]−S)の一部は、RLフィールド1357Aとして解釈される。1(ラウンド1357A.1)を含む場合、ベータフィールド1354(EVEXバイト3、ビット[6−5]‐S2−1)の残りは、ラウンドオペレーションフィールド1359Aとして解釈されるが、RLフィールド1357Aが0(VSIZE1357.A2)を含む場合、ベータフィールド1354(EVEXバイト3、ビット[6‐5]‐S2−1)の残りは、ベクトル長フィールド1359B(EVEXバイト3、ビット[6‐5]‐L1−0)として解釈される。U=1であり、MODフィールド1442が00、01、または10を含む場合(メモリアクセスオペレーションを意味する)、ベータフィールド1354(EVEXバイト3、ビット[6:4]−SSS)は、ベクトル長フィールド1359B(EVEXバイト3、ビット[6‐5]‐L1−0)およびブロードキャストフィールド1357B(EVEXバイト3、ビット[4]‐B)として解釈される。
例示的なレジスタアーキテクチャ 図15は、一実施形態による、レジスタアーキテクチャ1500のブロック図である。示される実施形態において、512ビット幅の32個のベクトルレジスタ1510が存在する。これらのレジスタは、zmm0〜zmm31として参照される。下位の16個のzmmレジスタの下位の256ビットは、レジスタymm0〜15上にオーバーレイされる。下位の16個のzmmレジスタの下位の128ビット(ymmレジスタの下位の128ビット)は、レジスタxmm0〜15上にオーバーレイされる。以下の表2に示されるように、特定ベクトル向け命令フォーマット1400は、これらのオーバーレイされたレジスタファイルで動作する。
Figure 2017539010
換言すると、ベクトル長フィールド1359Bは、最大長、および1もしくは複数の他のより短い長さのうちから選択され、そのような各々のより短い長さは、先述の長さの半分の長さである。ベクトル長フィールド1359Bを用いない命令テンプレートは、最大ベクトル長で動作する。更に、一実施形態において、特定ベクトル向け命令フォーマット1400のクラスB命令テンプレートは、パックドもしくはスカラ単精度/倍精度浮動小数点データおよびパックドもしくはスカラ整数データで動作する。スカラオペレーションは、zmm/ymm/xmmレジスタにおける最下位のデータ要素位置で実行されるオペレーションである。より高位のデータ要素位置は、命令前と同じままであるか、または実施形態に応じてゼロにされる。
ライトマスクレジスタ1515。示される実施形態において、8つのライトマスクレジスタ(k0〜k7)が存在し、各々は64ビットのサイズである。代替的な実施形態において、ライトマスクレジスタ1515は16ビットのサイズである。上記のように、一実施形態において、ベクトルマスクレジスタk0は、ライトマスクとして用いることができない。通常、k0を示すエンコードがライトマスクに用いられる場合、これは、0xFFFFのハードワイヤードライトマスクを選択し、その命令に対するライトマスキングを実質的に無効にする。
汎用レジスタ1525。示される実施形態において、メモリオペランドをアドレス指定する既存のx86のアドレス指定モードと共に用いられる16個の64ビット汎用レジスタが存在する。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、およびR8〜R15の名称により参照される。
スカラ浮動小数点スタックレジスタファイル(x87スタック)1545上に、MMXパックド整数フラットレジスタファイル1550がエイリアスされ、示される実施形態において、x87スタックは、x87命令セット拡張を用いて、32/64/80ビット浮動小数点データにスカラ浮動小数点オペレーションを実行するべく用いられる8つの要素のスタックである。MMXレジスタは、64ビットパックド整数データにオペレーションを実行すると共に、MMXレジスタとXMMレジスタとの間で実行されるいくつかのオペレーションのためのオペランドを保持するべく用いられる。
代替的な実施形態は、より広いか、またはより狭いレジスタを用い得る。更に、代替的な実施形態は、より多いか、より少ないか、または異なるレジスタファイルおよびレジスタを用い得る。
上記の明細書において、本発明は、その特定の例示的な実施形態を参照して説明されている。しかし、添付の特許請求の範囲に記載される本発明のより広い趣旨および範囲を逸脱することなく、様々な修正および変更がなされ得ることは明らかであろう。従って、明細書および図面は、限定的意味ではなく、例示的意味で顧慮されるものである。
本明細書において説明される命令は、一定のオペレーションを実行するように構成され、または予め定められ機能性を有する特定用途向け集積回路(ASIC)のようなハードウェアの特定の構成に言及する。そのような電子デバイスは通常、1もしくは複数のストレージデバイス(非一時的機械可読ストレージ媒体)、ユーザ入出力デバイス(例えば、キーボード、タッチスクリーン、および/またはディスプレイ)、ならびにネットワーク接続等、1もしくは複数の他のコンポーネントに結合された1もしくは複数のプロセッサのセットを含む。プロセッサおよび他のコンポーネントのセットの結合は通常、1または複数のバスおよびブリッジ(バスコントローラとも称される)を介して行われる。ストレージデバイスおよびネットワークトラフィックを搬送する信号は、各々、1または複数の機械可読ストレージ媒体および機械可読通信媒体を表す。従って、所与の電子デバイスのストレージデバイスは通常、当該電子デバイスの1または複数のプロセッサのセット上で実行するためのコードおよび/またはデータを格納する。
勿論、本発明の実施形態の1または複数の部分は、ソフトウェア、ファームウェア、および/またはハードウェアの異なる組み合わせを用いて実装され得る。この詳細な説明を通じて、説明の目的のために、多数の具体的な詳細が、本発明の完全な理解を提供するべく記載された。しかし、当業者には本発明がこれら具体的な詳細のいくつかがなくても実施され得ることが明らかであろう。特定の例において、周知の構造および機能は、本発明の主題を不明瞭にするのを避けるべく、精巧詳細に説明されていない。従って、本発明の範囲および趣旨は、以下の特許請求の範囲の観点から判断されるべきである。

Claims (25)

  1. 第1の命令をデコードして、第1のオペランドおよび第2のオペランドを含むデコード済みの第1の命令にするためのデコードロジックと、
    前記第1のオペランドおよび前記第2のオペランドに対してベクトル飽和加算オペレーションを実行するべく、デコード済みの前記第1の命令を実行するための実行ユニットと、
    デスティネーションオペランドにより示される箇所に前記ベクトル飽和加算オペレーションの結果をコミットするためのレジスタファイルユニットとを備える、処理装置。
  2. 前記第1の命令をフェッチするための命令フェッチユニットを更に備え、
    前記第1の命令は、単一のマシンレベル命令である、請求項1に記載の処理装置。
  3. 前記レジスタファイルユニットは、更に、
    第1のソースオペランド値を格納するための第1のレジスタと、
    第2のソースオペランド値を格納するための第2のレジスタと、
    第1のデータ要素に関連付けられたマスク値に基づいて前記ベクトル飽和加算オペレーションの結果の前記第1のデータ要素を条件付きで格納するための第3のレジスタとを含むレジスタのセットを格納する、請求項1または2に記載の処理装置。
  4. 前記レジスタファイルユニットは、更に、第2のデータ要素に関連付けられた前記マスク値に少なくとも基づいて、前記ベクトル飽和加算オペレーションの前記結果の前記第2のデータ要素をコミットしない、請求項3に記載の処理装置。
  5. 前記第1のレジスタまたは前記第2のレジスタは、ベクトルレジスタである、請求項3または4に記載の処理装置。
  6. 前記第2のレジスタは、ベクトルレジスタであり、
    前記第2のオペランドは、スカラデータ要素を格納するメモリアドレスを示し、
    前記スカラデータ要素は、前記第2のレジスタの各要素にブロードキャストされる、請求項5に記載の処理装置。
  7. 前記ベクトルレジスタは、128ビット、256ビット、または512ビットのレジスタである、請求項5または6に記載の処理装置。
  8. 前記ベクトルレジスタは、パックドダブルワードデータ要素またはパックドクワッドワードデータ要素を格納する、請求項5〜7のいずれか1項に記載の処理装置。
  9. データ要素のセットに対する前記ベクトル飽和加算オペレーションの結果は、前記データ要素のデータタイプの範囲外であり、
    飽和値は、デスティネーションデータ要素に書き込まれる、請求項5〜8のいずれか1項に記載の処理装置。
  10. 前記飽和値は、符号なしの値である、請求項9に記載の処理装置。
  11. 前記飽和値は、符号付きの値である、請求項9または10に記載の処理装置。
  12. 集積回路により実装される方法であって、
    ベクトル飽和加算オペレーションを実行する単一命令であって、2つのソースオペランドおよび1つのデスティネーションオペランドを含む前記単一命令をフェッチする段階と、
    前記単一命令をデコードしてデコード済みの命令にする段階と、
    前記2つのソースオペランドに関連付けられたソースオペランド値であって、複数のパックドデータ要素を含む前記ソースオペランド値をフェッチする段階と、
    前記ソースオペランド値の関連付けられたデータ要素の和を計算するべく、デコード済みの前記単一命令を実行する段階であって、関連付けられたデータ要素の前記和は、前記関連付けられたデータ要素のデータタイプの範囲外であり、飽和値は、結果として第1のデスティネーションデータ要素に書き込まれる段階とを備える、方法。
  13. 第2のデータ要素に関連付けられたライトマスク値に基づいて、前記第2のデータ要素にゼロを書き込む段階を更に備える、請求項12に記載の方法。
  14. ソースオペランドにより指定されたメモリアドレスからデータ要素を読み込む段階と、前記データ要素をソースベクトルレジスタの各要素にブロードキャストする段階とを更に備える、請求項13に記載の方法。
  15. ベクトル飽和加算オペレーションを実行するためのシステムにおいて、
    ベクトル飽和加算オペレーションを実行するための単一命令であって、2つのソースオペランドおよび1つのデスティネーションオペランドを有する前記単一命令をフェッチするための手段と、
    前記単一命令をデコードしてデコード済みの命令にするための手段と、
    前記2つのソースオペランドに関連付けられたソースオペランド値であって、複数のパックドデータ要素を含む前記ソースオペランド値をフェッチするための手段と、
    前記ソースオペランド値の関連付けられたデータ要素の和を計算するべく、デコード済みの前記単一命令を実行するための手段とを備える、システム。
  16. 前記ソースオペランド値の関連付けられたデータ要素から計算された和を、ベクトルレジスタファイルの第1のデータ要素に書き込むための手段を更に備え、前記書き込みは、前記第1のデータ要素に関連付けられたライトマスク値に基づく、請求項15に記載のシステム。
  17. 第2のデータ要素に関連付けられたライトマスク値に基づいて、前記第2のデータ要素にゼロを書き込むための手段を更に備える、請求項15または16に記載のシステム。
  18. ソースオペランドにより指定されたメモリアドレスからデータ要素を読み込むための手段を更に備える、請求項15〜17のいずれか1項に記載のシステム。
  19. 前記データ要素をソースベクトルレジスタの各要素にブロードキャストするための手段を更に備える、請求項18に記載のシステム。
  20. 前記ソースベクトルレジスタは、128ビットのレジスタである、請求項19に記載のシステム。
  21. 前記ソースベクトルレジスタは、256ビットのレジスタである、請求項19または20に記載のシステム。
  22. 前記ソースベクトルレジスタは、512ビットのレジスタである、請求項19〜21のいずれか1項に記載のシステム。
  23. 前記データ要素は、ダブルワードデータ要素である、請求項19〜22のいずれか1項に記載のシステム。
  24. 前記データ要素は、クワッドワードデータ要素である、請求項19〜23のいずれか1項に記載のシステム。
  25. 関連付けられたデータ要素の和は、前記関連付けられたデータ要素のデータタイプの範囲外であり、
    飽和値を、結果として第2のデスティネーションデータ要素に書き込むための手段を更に備える、請求項24に記載のシステム。
JP2017527310A 2014-12-23 2015-11-23 ベクトル飽和ダブルワード/クワッドワードの加算を実行するための命令およびロジック Abandoned JP2017539010A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/582,007 2014-12-23
US14/582,007 US20160179530A1 (en) 2014-12-23 2014-12-23 Instruction and logic to perform a vector saturated doubleword/quadword add
PCT/US2015/062112 WO2016105771A1 (en) 2014-12-23 2015-11-23 Instruction and logic to perform a vector saturated doubleword/quadword add

Publications (1)

Publication Number Publication Date
JP2017539010A true JP2017539010A (ja) 2017-12-28

Family

ID=56129471

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017527310A Abandoned JP2017539010A (ja) 2014-12-23 2015-11-23 ベクトル飽和ダブルワード/クワッドワードの加算を実行するための命令およびロジック

Country Status (9)

Country Link
US (1) US20160179530A1 (ja)
EP (1) EP3238031A4 (ja)
JP (1) JP2017539010A (ja)
KR (1) KR20170099860A (ja)
CN (1) CN107077332A (ja)
BR (1) BR112017010988A2 (ja)
SG (1) SG11201704251RA (ja)
TW (2) TWI567644B (ja)
WO (1) WO2016105771A1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10846087B2 (en) * 2016-12-30 2020-11-24 Intel Corporation Systems, apparatuses, and methods for broadcast arithmetic operations
CN111813447B (zh) * 2019-04-12 2022-11-08 杭州中天微系统有限公司 一种数据拼接指令的处理方法和处理装置
CN115098165B (zh) * 2022-06-13 2023-09-08 昆仑芯(北京)科技有限公司 数据处理方法、装置、芯片、设备及介质

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6178500B1 (en) * 1998-06-25 2001-01-23 International Business Machines Corporation Vector packing and saturation detection in the vector permute unit
US6327651B1 (en) * 1998-09-08 2001-12-04 International Business Machines Corporation Wide shifting in the vector permute unit
US7020873B2 (en) * 2002-06-21 2006-03-28 Intel Corporation Apparatus and method for vectorization of detected saturation and clipping operations in serial code loops of a source program
US7392368B2 (en) * 2002-08-09 2008-06-24 Marvell International Ltd. Cross multiply and add instruction and multiply and subtract instruction SIMD execution on real and imaginary components of a plurality of complex data elements
US6986023B2 (en) * 2002-08-09 2006-01-10 Intel Corporation Conditional execution of coprocessor instruction based on main processor arithmetic flags
GB2409063B (en) * 2003-12-09 2006-07-12 Advanced Risc Mach Ltd Vector by scalar operations
GB2410097B (en) * 2004-01-13 2006-11-01 Advanced Risc Mach Ltd A data processing apparatus and method for performing data processing operations on floating point data elements
JP2006171827A (ja) * 2004-12-13 2006-06-29 Seiko Epson Corp 演算処理装置および演算処理プログラム
US20070011441A1 (en) * 2005-07-08 2007-01-11 International Business Machines Corporation Method and system for data-driven runtime alignment operation
US8380966B2 (en) * 2006-11-15 2013-02-19 Qualcomm Incorporated Method and system for instruction stuffing operations during non-intrusive digital signal processor debugging
GB2447427B (en) * 2007-03-12 2011-05-11 Advanced Risc Mach Ltd Address calculation within data processing systems
US8135941B2 (en) * 2008-09-19 2012-03-13 International Business Machines Corporation Vector morphing mechanism for multiple processor cores
US7814303B2 (en) * 2008-10-23 2010-10-12 International Business Machines Corporation Execution of a sequence of vector instructions preceded by a swizzle sequence instruction specifying data element shuffle orders respectively
US8316071B2 (en) * 2009-05-27 2012-11-20 Advanced Micro Devices, Inc. Arithmetic processing unit that performs multiply and multiply-add operations with saturation and method therefor
US20110072236A1 (en) * 2009-09-20 2011-03-24 Mimar Tibet Method for efficient and parallel color space conversion in a programmable processor
US8549264B2 (en) * 2009-12-22 2013-10-01 Intel Corporation Add instructions to add three source operands
CN106406818B (zh) * 2011-12-22 2020-06-16 英特尔公司 打包数据操作掩码串接处理器、方法、系统及指令
CN112416432A (zh) * 2011-12-23 2021-02-26 英特尔公司 用于数据类型的下转换的装置和方法
WO2013095601A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Instruction for element offset calculation in a multi-dimensional array
CN103092571B (zh) * 2013-01-10 2016-06-22 浙江大学 支持多种数据类型的单指令多数据算术单元
US20150052330A1 (en) * 2013-08-14 2015-02-19 Qualcomm Incorporated Vector arithmetic reduction
US9916130B2 (en) * 2014-11-03 2018-03-13 Arm Limited Apparatus and method for vector processing

Also Published As

Publication number Publication date
TWI644256B (zh) 2018-12-11
SG11201704251RA (en) 2017-07-28
WO2016105771A1 (en) 2016-06-30
TWI567644B (zh) 2017-01-21
TW201643709A (zh) 2016-12-16
CN107077332A (zh) 2017-08-18
BR112017010988A2 (pt) 2018-02-14
US20160179530A1 (en) 2016-06-23
EP3238031A1 (en) 2017-11-01
EP3238031A4 (en) 2018-06-27
TW201732575A (zh) 2017-09-16
KR20170099860A (ko) 2017-09-01

Similar Documents

Publication Publication Date Title
JP6238497B2 (ja) プロセッサ、方法、及びシステム
JP5926754B2 (ja) 限定範囲ベクトルメモリアクセス命令、プロセッサ、方法、及びシステム
JP6711480B2 (ja) ベクトルインデックスロードおよびストアのための方法および装置
JP2018500653A (ja) ベクトルブロードキャストおよびxorand論理命令のための装置および方法
JP2016040737A (ja) 装置および方法
JP2018500656A (ja) 1組のベクトル要素にリダクション演算を実行する方法及び装置
JP6741006B2 (ja) マスクレジスタとベクトルレジスタとの間で可変に拡張するための方法および装置
KR102462174B1 (ko) 벡터 비트 셔플을 수행하기 위한 방법 및 장치
JP6849275B2 (ja) インデックスおよび即値を用いてベクトル置換を実行するための方法および装置
JP6778375B2 (ja) ベクトルビット反転を実行するためのプロセッサ、方法、およびシステム
JP2017539014A (ja) ベクトルビット反転およびクロスを実行するための方法および装置
JP2017509064A (ja) マスクド結果要素に伝搬する対応アンマスクド結果要素にソース要素を記憶するプロセッサ、方法、システム、及び命令
JP2017534114A (ja) Z順序曲線において次のポイントの座標を計算するためのベクトル命令
JP2018506094A (ja) 多倍長整数(big integer)の算術演算を実行するための方法および装置
JP6835436B2 (ja) マスクをマスク値のベクトルに拡張するための方法および装置
JP6738579B2 (ja) 命令フローを最適化するチェックを実行するための装置および方法
JP6807073B2 (ja) 高速ベクトルによる動的なメモリ競合検出
JP2017539016A (ja) 結合した乗算−乗算命令のための装置および方法
JP2017534982A (ja) 4d座標から4dのz曲線インデックスを計算するための機械レベル命令
JP2018500629A (ja) 3d座標から3dのz曲線インデックスを計算するための機械レベル命令
JP2017539010A (ja) ベクトル飽和ダブルワード/クワッドワードの加算を実行するための命令およびロジック
CN107077333B (zh) 用于实行向量位聚集的方法和装置
KR20170097012A (ko) 역 원심 연산을 수행하는 명령어 및 로직
JP2018500665A (ja) マスク値を圧縮するための方法および装置
JP2018506762A (ja) 結合した加算−加算命令のための装置および方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20181119

A762 Written abandonment of application

Free format text: JAPANESE INTERMEDIATE CODE: A762

Effective date: 20190830