JP2016040737A - 装置および方法 - Google Patents

装置および方法 Download PDF

Info

Publication number
JP2016040737A
JP2016040737A JP2015226505A JP2015226505A JP2016040737A JP 2016040737 A JP2016040737 A JP 2016040737A JP 2015226505 A JP2015226505 A JP 2015226505A JP 2015226505 A JP2015226505 A JP 2015226505A JP 2016040737 A JP2016040737 A JP 2016040737A
Authority
JP
Japan
Prior art keywords
data element
instruction
memory
register
value
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.)
Granted
Application number
JP2015226505A
Other languages
English (en)
Other versions
JP6274672B2 (ja
Inventor
ロバート シー. バレンタイン
C Valentine Robert
ロバート シー. バレンタイン
ジェイ. ヒューズ、クリストファー
J Hughes Christopher
ジェイ. ヒューズ、クリストファー
エイドリアン、ジーザス コーベル サン
Corbal San Adrian Jesus
エイドリアン、ジーザス コーベル サン
エスパサ サンズ、ロジャー
Espasa Sans Roger
エスパサ サンズ、ロジャー
エル. トール、ブレット
Bret L Toll
エル. トール、ブレット
バーブラオ ギルカル、ミリンド
Baburao Girkar Milind
バーブラオ ギルカル、ミリンド
トーマス フォーサイス、アンドリュー
Thomas Forsyth Andrew
トーマス フォーサイス、アンドリュー
トーマス グロチョフスキー、エドワード
Thomas Grochowski Edward
トーマス グロチョフスキー、エドワード
キャノン ハル、ジョナサン
Cannon Hall Jonathan
キャノン ハル、ジョナサン
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 JP2016040737A publication Critical patent/JP2016040737A/ja
Application granted granted Critical
Publication of JP6274672B2 publication Critical patent/JP6274672B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/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
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • 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/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • 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/30181Instruction operation extension or modification
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/355Indexed addressing
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/355Indexed addressing
    • G06F9/3555Indexed addressing using scaling, e.g. multiplication of index
    • 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/3824Operand accessing
    • G06F9/383Operand prefetching
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3865Recovery, e.g. branch miss-prediction, exception handling using deferred exception handling, e.g. exception flags

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)
  • Complex Calculations (AREA)
  • Advance Control (AREA)

Abstract

【課題】ギャザーおよびスキャッタストライド命令をコンピュータで実行するシステム、装置および方法を提供する。【解決手段】SIMD(single instruction multiple data)ハードウェアで同時に作業したいデータ要素がメモリに連続して存在していないため、ギャザー/スキャッタ命令を利用する時に、ギャザーストライド命令の実行により、書き込みマスクのビット値の少なくとも一部に基づいて、条件付きで、メモリからのストライドされたデータ要素をデスティネーションレジスタに格納する事で所定の効率性を達成する。【選択図】図1

Description

本発明の分野は、一般的に、コンピュータプロセッサアーキテクチャに関しており、より詳しくは、実行されると特定の結果を生じさせる命令に関する。
プロセッサのSIMD(single instruction, multiple data)幅が大きくなるにつれて、アプリケーションの開発者たち(およびコンパイラたち)は、SIMDハードウェアを完全に利用することを難しく感じるようになってきている。これは、彼らが、同時に作業したいデータ要素がメモリに連続して存在していないからである。この問題を解決するための1つの方法としては、ギャザー/スキャッタ命令を利用する、というものがある。命令のギャザーによって、メモリから連続していない(可能性がある)要素セットを読み出して、これらを(通常は1つのレジスタに)パッキングする。スキャッタ命令は、これと逆のことを行う。あいにく、これらギャザー命令もスキャッタ命令も、所定の効率性を達成していない。
本発明を図面に限定ではなく例示として示すが、図面において同様の参照番号は同様の部材を示している。
ギャザーストライド命令の実行の一例を示す。 ギャザーストライド命令の実行の別の例を示す。 ギャザーストライド命令の実行のまた別の例を示す。 プロセッサでギャザーストライド命令を実行する一実施形態を示す。 ギャザーストライド命令を処理する方法の一実施形態を示す。 スキャッタストライド命令の実行の一例を示す。 スキャッタストライド命令の実行の別の例を示す。 スキャッタストライド命令の実行のまた別の例を示す。 プロセッサでスキャッタストライド命令を実行する一実施形態を示す。 スキャッタストライド命令を処理する方法の一実施形態を示す。 ギャザーストライドプリフェッチ命令の実行の一例を示す。 プロセッサでギャザーストライドプリフェッチ命令を利用する一実施形態を示す。 ギャザーストライドプリフェッチ命令を処理する方法の一実施形態を示す。 本発明の実施形態における、汎用ベクトルフレンドリーな命令フォーマットと、そのクラスA命令テンプレートとを示すブロック図である。 本発明の実施形態における、汎用ベクトルフレンドリーな命令フォーマットと、そのクラスB命令テンプレートとを示すブロック図である。 本発明の実施形態における、特殊なベクトルフレンドリーな命令フォーマットの一例を示す。 本発明の実施形態における、特殊なベクトルフレンドリーな命令フォーマットの一例を示す。 本発明の実施形態における、特殊なベクトルフレンドリーな命令フォーマットの一例を示す。 本発明の実施形態における、レジスタアーキテクチャのブロック図である。 本発明の実施形態における、シングルCPUコアと、そのオンダイ相互接続ネットワークおよびレベル2(L2)キャッシュのローカルサブセットとの接続を示すブロック図である。 本発明の実施形態における、図17AのCPUコアの一部の分解図である。 本発明の実施形態におけるアウトオブオーダアーキテクチャの一例を示すブロック図である。 本発明の一実施形態におけるシステムのブロック図である。 本発明の一実施形態における第2のシステムのブロック図である。 本発明の一実施形態における第3のシステムのブロック図である。 本発明の一実施形態におけるSoCのブロック図である。 本発明の実施形態における統合メモリコントローラおよびグラフィックをもつシングルコアプロセッサとマルチコアプロセッサのブロック図である。 本発明の実施形態において、ソース命令セットのバイナリ命令を、ターゲット命令セットにおけるバイナリ命令に変換するソフトウェア命令コンバータの利用を比較するブロック図である。
以下の記載では、複数の詳細を述べる。しかし、本発明の実施形態はこれら具体的な詳細がなくとも実施可能である点を理解されたい。他の例では、公知の回路、構造、および技術は詳細に示さず、本記載の理解をあいまいにしないようにしている場合もある。
本明細書全体において、「一実施形態」又は「1つの実施形態」という言い回しは、その実施形態で記載される特定の特徴、構造、又は特性が、本発明の少なくとも1つの実施形態に含まれていることを示す。したがって「一実施形態」又は「1つの実施形態」という言い回しが本明細書の随所にみられても、これらは必ずしも全てが同じ実施形態のことを意味しているわけではない。さらに、特定の特徴、構造、又は特性は、それらが述べられた具体的な実施形態以外の適切な形態で実施することもでき、本願の請求項の範囲には、これらすべての形態が含まれることとする。
高いパフォーマンスの計算/スループットコンピューティングアプリケーションにおいては、非常によく利用される連続していないメモリ参照パターンが「ストライドメモリパターン」である。ストライドメモリパターンは、各要素が、前のものからe19tという同じ一定の量、離れている(ストライドと称されている)、まばらなメモリ位置のセットのことである。このメモリパターンは、多次元の「C」または他のハイレベルプログラミング言語アレイの対角線または列にアクセスする際によく見られる。
ストライドパターンの一例は、A、A+3、A+6、A+9、A+12、…であり、ここではAはベースアドレスでありストライドが3である。ストライドメモリパターンを取り扱うギャザーおよびスキャッタの問題は、要素が無作為にスキャッタしていることを想定して設計されているので、ストライドが本来提供する情報を活用することができない点である(高いレベルの予測性によって、より高いパフォーマンスの実装が可能となる)。さらに、プログラマーおよびコンパイラたちは、既知のストライドを、ギャザー/スキャッタが入力として利用するメモリインデックスのベクトルに変換する際にオーバヘッドを生じてしまう、という点である。以下に、ストライドを活用することができるいくつかのギャザーおよびスキャッタ命令の実施形態、および、これらの命令を実行するために利用可能なシステム、アーキテクチャ、命令セット等の実施形態を示す。
<ギャザーストライド>
第1の種類の命令は、ギャザーストライド命令である。この命令をプロセッサで実行すると、メモリのデータ要素が条件付きでデスティネーションレジスタにロードされる。たとえば、一部の実施形態では、16個までの32ビット(または8つの64ビット)の浮動小数点データ要素が条件付きでデスティネーション(たとえばXMM、YMM,またはZMMレジスタ)にパッキングされる。
ロードされるデータ要素は、あるタイプのSIB(スケール、インデックス、およびベース)の指定によって特定される。一部の実施形態では、命令は、汎用レジスタに渡されるベースアドレス、即値として渡されるスケール、汎用レジスタとして渡されるストライドレジスタ、および随意で変位(displacement)を含んでいる。もちろん、ベースアドレスおよび/またはストライドの即値等を含む命令等の他の実装例を利用することもできる。
ギャザーストライド命令も書き込みマスクを含む。専用マスクレジスタ(たとえば後述する「k」書き込みマスク)を利用する一部の実施形態では、対応する書き込みマスクビットがそうすべきと示しているとき(たとえば一部の実施形態ではビットが「1」の場合)に、メモリデータ要素がロードされる。他の実施形態では、データ要素の書き込みマスクビットは、書き込みマスクレジスタ(たとえばXMMまたはYMMレジスタ)からの対応する要素の符号ビットである。これら実施形態では、書き込みマスク要素は、データ要素と同じサイズとして扱われる。データ要素の対応する書き込みマスクビットが設定されていない場合には、デスティネーションレジスタ(XMM、YMM、またはZMMレジスタ)の対応するデータ要素を変更せずにおく。
通常は、ギャザーストライド命令の実行によって、例外的事例を除いて、書き込みマスクレジスタ全体がゼロに設定される。しかし、一部の実施形態では、命令が、少なくとも1つの要素が既にギャザーされている場合(つまり、書き込みマスクビットが設定されている最下位のもの以外の要素によって例外がトリガされると)、例外により命令が中断される。こうなると、デスティネーションレジスタおよび書き込みマスクレジスタが、部分的に更新される(ギャザーされている要素は、デスティネーションレジスタに配置され、マスクビットをゼロに設定される)。既にギャザーされている要素からトラップまたは割り込みがペンディングである場合、これらは例外の代わりに配信され、EFLAGS再開フラグまたはこの均等物が1に設定され、命令ブレークポイントは、命令が継続されても再度トリガされない。
128ビットサイズのベクトルの一部の実施形態では、命令は、4つの単精度浮動小数点値または2つの倍精度浮動小数点値までギャザーされる。256ビットサイズのベクトルの一部の実施形態では、命令は、8つの単精度浮動小数点値または4つの倍精度浮動小数点値までギャザーされる。512ビットサイズのベクトルの一部の実施形態では、命令は、16個の単精度浮動小数点値または8個の倍精度浮動小数点値までギャザーされる。
一部の実施形態では、マスクおよびデスティネーションレジスタが同じ場合、この命令はGPフォルトを配信する。通常、データ要素値は、任意の順序でメモリから読み出される。しかし、フォルトは右から左の順に配信される。つまり、フォルトが要素によりトリガされて配信されると、デスティネーションXMM,YMM,またはZMMのLSB付近のすべての要素が完了する(フォルトではない(non-faulting))。MSB付近の個々の要素は、完了してもしなくてもよい。任意の要素が複数のフォルトをトリガすると、これらは従来の順序で配信される。この命令はいずれの実装も繰り返すことができる、つまり、同じ入力値およびアーキテクチャ状態である場合には、フォルトになったものの左の同じ要素セットをギャザーする。
この命令の形式の例が、「VGATHERSTR zmm1 {k1}, [base, scale * stride] + displacement」であり、ここでzmmlがデスティネーションベクトルレジスタオペランド(たとえば128−、256−、512ビットレジスタ等)であり、klは、書き込みマスクオペランドであり(たとえば16ビットのレジスタであり、この例に関しては後述する)、ベース、スケール、ストライド、および変位を利用して、メモリの第1のデータ要素のメモリソースアドレスと、後続するメモリデータエレンメントのストライド値とを生成して、デスティネーションレジスタに条件付きでパッキングする。一部の実施形態では、書き込みマスクは、異なるサイズ(たとえば8ビット、32ビット)であってもよい。加えて、一部の実施形態では、書き込みマスクのすべてのビットが、命令により利用されなくてもよいが、この点は後述する。VGATHERSTRは、命令のオペコードである。通常、各オペランドは命令によって明示的に定義されている。データ要素のサイズは、ここで記載する「W」等のデータ粒度ビットの情報を利用する等によって、命令の「プレフィックス」部分で定義されている。殆どの実施形態では、データ粒度ビットは、データ要素が32ビットまたは64ビットであることを示す。データ要素が32ビットのサイズであり、ソースが512ビットのサイズである場合には、16個のデータ要素が1つのソースについて存在する。
以下は、この命令に利用可能なアドレス指定への近道である。通常のIntel Architecture(x86)メモリオペランドでは、たとえば[rax + rsi*2]+36であり、ここでRAXがベース(BASE)であり、RSIがINDEXであり、2がスケールSSであり、36が変位であり、括弧[]はメモリオペランドの内容である。したがって、このアドレスにおけるデータは、data = MEM_CONTENTS(addr= RAX + RSI*2 + 36)である。通常のギャザーでは、[rax + zmm2*2]+36であり、RAXがベース(BASE)であり、Zmm2がINDEXの*vector*であり、2がscale SSであり、36が変位であり、[ ]括弧は、メモリオペランドの内容を示す。したがって、データのベクトルは、data[i] = MEM_CONTENTS(addr= RAX + ZMM2[i]*2 + 36)である。ギャザーストライドでは、一部の実施形態で、アドレス指定がここでも、 [rax, rsi*2]+36であり、ここでRAXがBASEであり、RSIがストライド(STRIDE)であり、2がscale SSであり、36が変位であり、括弧[ ]はメモリオペランドの内容である。ここで、データのベクトルが、data[i] = MEM_CONTENTS(addr= RAX + STRIDE*i*2 + 36)である。他の「ストライド」命令が、同様のアドレス指定モデルを示している。
ギャザーストライド命令の実行例を図1に示す。この例では、ソースは、RAXレジスタにみられるアドレスに、初期アドレス指定されているメモリである(これは、メモリアドレス指定の簡略化された図であり、変位等を、アドレスを生成するために利用することができる)。もちろん、メモリアドレスは、他のレジスタに格納されていても、上述した命令の即値として発見されてもよい。
この例の書き込みマスクは、ビットの値が4DB4のhe20ecimalの値に対応している16ビットの書き込みマスクである。「1」の値の書き込みマスクの各ビット位置において、メモリソースからのデータ要素が、デスティネーションレジスタの対応する位置に格納される。書き込みマスクの第1の位置(たとえばkl[0])は「0」であり、対応するデスティネーションデータ要素位置(たとえばデスティネーションレジスタの第1のデータ要素)が、そこには、ソースメモリからのデータ要素が格納されていないことを示す。この場合、RAXアドレスに関連しているデータ要素は格納されない。書き込みマスクの次のビットも「0」であり、これは、メモリからの次の「ストライド」されたデータ要素も、デスティネーションレジスタに格納されるべきではないことを示している。この例では、ストライド値が「3」であり、この後続するストライドされたデータ要素は、第1のデータ要素から離れている第3のデータ要素である。
書き込みマスクの第1の「1」の値は、第3のビット位置にある(たとえばkl[2])。これは、メモリの前のストライドされたデータ要素に後続するストライドされたデータ要素が、デスティネーションレジスタの対応するデータ要素の位置に格納されるべきことを示す。この後続するストライドされたデータ要素は、前のストライドされたデータ要素から3つ離れており、第1のデータ要素からは6つ離れている。
残りの書き込みマスクビット位置も、メモリソースのどの追加的データ要素がデスティネーションレジスタに格納されるかを判断するために利用される(この例では、全部で8つのデータ要素が格納されるが、書き込みマスクビットに応じて、数はこれより多くても少なくてもよい)。加えて、メモリソースからのデータ要素は、デスティネーションのデータ要素のサイズが、たとえば、デスティネーションに格納される前に16ビットの浮動小数点値から32ビットの浮動小数点値になるようアップコンバージョンされてよい。アップコンバージョンおよびこれらを命令フォーマットにエンコードする方法の例は、上述した通りである。加えて、一部の実施形態では、メモリオペランドのストライドされたデータ要素が、デスティネーションに格納する前にレジスタに格納される。
ギャザーストライド命令の実行の別の例を図2に示す。この例は、前の例に類似しているが、データ要素のサイズが異なっている(たとえば、データ要素の数が32ビットではなくて64ビットである)。このサイズの変更によって、マスクで利用されるビット数も変化する(本例では8である)。一部の実施形態では、マスクの下位のほうの8ビットが利用される(最下位8ビット)。他の実施形態では、マスクの上位のほうの8ビットが利用される(最上位8ビット)。他の実施形態では、マスクの1つおきのビットを利用する(つまり、偶数のビットまたは奇数のビット)。
ギャザーストライド命令の実行の別の例が図3に示されている。この例は、前の例に類似しているが、マスクが16ビットではない点が異なる。本例では、書き込みマスクレジスタがベクトルレジスタ(たとえばXMMまたはMMレジスタ)である。本例では、条件付きで格納される各データ要素の書き込みマスクビットが、書き込みマスクの対応するデータエレンメントの符号ビットである。
図4は、プロセッサのギャザーストライド命令の利用の一実施形態を示す。デスティネーションオペランド、ソースアドレスオペランド(ベース、変位、インデックス、および/またはスケール)および書き込みマスクを有するギャザーストライド命令をフェッチする(401)。オペランドのサイズの例は前述したとおりである。
403で、ギャザーストライド命令をデコードする。命令の形式に応じて、この段階で、様々なデータを解釈する(たとえば、アップコンバージョン(またはその他のデータ変換)が必要か、どのレジスタに書き込み、またはどのレジスタから取得すべきか、および、ソースメモリアドレスはどれか、等)。
405で、ソースオペランド値を取得する/読み取る。ほとんどの実施形態では、メモリソース位置アドレスおよび後続するストライドアドレスに関するデータ要素がこの時点で読み出される(たとえばキャッシュライン全体を読み出す)。加えて、これらは、デスティネーション以外のベクトルレジスタに一時的に格納されてよい。しかしソースからのデータ要素は一回につき1つだけ取得することができる。
実行すべきデータ要素変換がある場合(たとえばアップコンバージョン)、407で実行する。たとえばメモリから16ビットデータ要素を、32ビットのデータ要素にアップコンバージョンしてよい。
ギャザーストライド命令(または、マイクロオペレーション等の命令を含むオペレーション)が、409で実行リソースにより実行される。この実行によって、アドレスメモリのストライドされたデータ要素が、書き込みマスクの対応するビットに基づいて、条件付きで、デスティネーションレジスタに格納される。この格納の例は前述したとおりである。
図5は、ギャザーストライド命令を処理する方法の一実施形態を示す。この実施形態では、オペレーション401−407のうち全部ではなくとも一部が予め実行されていることを想定しているが、以下では詳細をあいまいにしないよう配慮して示されてはいない。たとえば、フェッチおよびデコードは示されておらず、オペランド(ソースおよび書き込みマスク)の取得も示されていない。
501で、マスクとデスティネーションとが同じレジスタかの判断を行う。同じであれば、フォルトを生成して、命令の実行を中断する。
同じでなければ、メモリの第1のデータ要素のアドレスを、ソースオペランドのアドレスデータから生成する(503)。たとえばベースおよび変位が、アドレスを生成するために利用される。ここでも、これは前に実行されていてもよい。この時点で、データ要素が前に取得されていなければ、取得される。一部の実施形態では、(ストライド)データ要素の全てではなくてもいくつかが取得される。
504で、第1のデータ要素にフォルトがあるかを判断する。フォルトがある場合、命令の実行を中断する。
フォルトがない場合には、メモリの第1のデータ要素に対応している書き込みマスクビット値を、デスティネーションレジスタの対応する位置に格納すべきかを判断する(505)。前の例を振り返ると、この判断は、図1の書き込みマスクの最下位の値等の書き込みマスクの最下位位置を参照して、メモリデータ要素をデスティネーションの第1のデータ要素位置に格納すべきかを判断することで行われる。
書き込みマスクビットが、メモリデータ要素をデスティネーションレジスタに格納すべきであると示していない場合には、デスティネーションの第1の位置のデータ要素をそのままにしておく(507)。通常、これは、書き込みマスクの「0」の値で示されるが、反対のルール(opposite convention)を適用することもできる。
書き込みマスクビットが、メモリデータ要素をデスティネーションレジスタに格納すべきであると示している場合には、デスティネーションの第1の位置のデータ要素をこの位置に格納する(509)。通常、これは、書き込みマスクの「1」の値で示されるが、反対のルールを適用することもできる。データ変換(アップコンバージョン等)が必要な場合には、前に行われていない場合はこのときに行うことができる。
511で、第1の書き込みマスクビットをクリアして、書き込みの成功を示す。
条件付きでデスティネーションレジスタに格納する、後続するストライドされたデータ要素のアドレスを513で生成する。前の例で詳述したように、このデータ要素は、メモリの前のデータ要素から「x」個のデータ要素分離れており、ここで「x」は、命令に含まれるストライド値である。ここでも、この処理は前に実行されていてもよい。データ要素は、前に取得されていなければ、このときに取得される。
この後続するストライドされたデータ要素にフォルトがあるかの判断を515で行う。フォルトがある場合には、命令の実行を中断する。
フォルトがない場合には、メモリの後続するストライドされたデータ要素に対応する書き込みマスクビット値が、デスティネーションレジスタの対応する位置に格納すべきかを判断する(517)。前の例を振り返ると、この判断は、図1の書き込みマスクの2番目に最下位の値等の書き込みマスクの次の位置を参照して、メモリデータ要素をデスティネーションの第2のデータ要素位置に格納すべきかを判断することで行われている。
書き込みマスクビットが、メモリデータ要素をデスティネーションレジスタに格納すべきであると示していない場合には、デスティネーションの該当位置のデータ要素をそのままにしておく(523)。通常、これは、書き込みマスクの「0」の値で示されるが、反対のルール(opposite convention)を適用することもできる。
書き込みマスクビットが、メモリデータ要素をデスティネーションレジスタに格納すべきであると示している場合には、デスティネーションの第1の位置のデータ要素をこの位置に格納する(519)。通常、これは、書き込みマスクの「1」の値で示されるが、反対のルールを適用することもできる。データ変換(アップコンバージョン等)が必要な場合には、前に行われていない場合はこのときに行うことができる。
書き込みマスク評価ビットを521でクリアして、書き込みの成功を示す。
評価された書き込みマスク位置が書き込みマスクの最後か、デスティネーションのデータ要素位置の全てが満たされているかの判断を525で行う。この判断結果が肯定的である場合には、オペレーションを終了する。否定的な場合には、別の書き込みマスクビットを評価する。
この図および上述した記載は、それぞれの第1の位置を最下位の位置と想定しているが、一部の実施形態では、第1の位置が最上位の位置である。一部の実施形態では、フォルトの決定を行わない。
<スキャッタストライド>
第2の種類の命令は、スキャッタストライド命令である。一部の実施形態では、この命令をプロセッサで実行すると、ソースレジスタ(たとえばXMM,YMM,またはZMM)からデータ要素が、書き込みマスクの値に基づいて、デスティネーションメモリ位置に条件付きで格納される。たとえば一部の実施形態では、16個までの32ビット(または8つの64ビット)の浮動小数点データ要素が条件付きでデスティネーションに格納される。
通常は、デスティネーションメモリ位置は、SIB情報(上述した)で特定される。対応するマスクビットがそう指定している場合には、データ要素を格納する。一部の実施形態では、命令は、汎用レジスタに渡されるベースアドレス、即値として渡されるスケール、汎用レジスタとして渡されるストライドレジスタ、および随意で変位(displacement)を含んでいる。もちろん、ベースアドレスおよび/またはストライドの即値等を含む命令等の他の実装例を利用することもできる。
スキャッタストライド命令も書き込みマスクを含む。専用マスクレジスタ(たとえば後述する「k」書き込みマスク)を利用する一部の実施形態では、対応する書き込みマスクビットがそうすべきと示しているとき(たとえば一部の実施形態ではビットが「1」の場合)に、メモリデータ要素がロードされる。他の実施形態では、メモリデータ要素の書き込みマスクビットは、書き込みマスクレジスタ(たとえばXMMまたはYMMレジスタ)からの対応する要素の符号ビットである。これら実施形態では、書き込みマスク要素は、データ要素と同じサイズとして扱われる。データ要素の対応する書き込みマスクビットが設定されていない場合には、メモリの対応するデータ要素を変更せずにおく。
通常は、スキャッタストライド命令によって、例外的事例がトリガされた場合を除いて、本スキャッタストライド命令に関する書き込みマスクレジスタ全体がゼロに設定される。加えて、少なくとも1つのデータ要素が既にスキャッタされている場合、この命令の実行は、例外により中断される(ギャザーストライド命令について上述した通りである)。こうなると、デスティネーションメモリおよびマスクレジスタが、部分的に更新される。
128ビットサイズのベクトルの一部の実施形態では、命令は、4つの単精度浮動小数点値または2つの倍精度浮動小数点値までスキャッタされる。256ビットサイズのベクトルの一部の実施形態では、命令は、8つの単精度浮動小数点値または4つの倍精度浮動小数点値までスキャッタされる。512ビットサイズの一部の実施形態では、命令は、16個の32ビット(または8つの64ビット)の浮動小数点値までスキャッタされる。
一部の実施形態では、重複しているデスティネーション位置に対する書き込みのみが、互いに対して順序を付けられることが保証されている(ソースレジスタの最下位から最上位へ)。任意の2つの異なる要素の2つの位置が同じである場合、これら要素は重複している。重複していない書き込みは任意の順序で行われてよい。一部の実施形態では、2以上のデスティネーション位置が完全に重複している場合、「前の」書き込みのほうを省略する。加えて一部の実施形態では、データ要素は任意の順序でスキャッタさせることができるが(重複がない場合)、フォルトは右から左の順に配信される(上述したギャザーストライド命令と同様である)。
この命令のフォーマットの例は、「VSCATTERSTR [base, scale * stride] + displacement {k1}, ZMM1」であり、ここでZMM1は、ソースベクトルレジスタオペランド(128-, 256-, 512-ビットのレジスタ)であり、k1が書き込みマスクオペランドであり(後で詳述する16ビットのレジスタ例)、ベース、スケール、ストライド、および変位が、メモリデスティネーションアドレスおよびストライド値を、メモリの後続するデータ要素に提供して、デスティネーションレジスタに条件付きでパッキングさせる。一部の実施形態では、書き込みマスクが異なるサイズ(8ビット、32ビット等)である場合もある。加えて一実施形態では、書き込みマスクビットの全てのビットが命令によって利用されない場合もある(後述する)。VSCATTERSTRは、命令のオペコードである。通常、各オペランドは明示的に命令で定義されている。データ要素のサイズは、ここで記載する「W」等のデータ粒度ビットの情報を利用して、命令の「プレフィックス」部分で定義されている。一部の実施形態では、データ粒度ビットは、データ要素が32ビットまたは64ビットであることを示す。データ要素が32ビットのサイズであり、ソースが512ビットのサイズである場合には、16個のデータ要素が1つのソースについて存在する。
この命令は通常、この例では、書き込みマスクレジスタklに設定されている対応するビットをもつ要素のみが、デスティネーションメモリ位置で修正されるように、書き込みマスクされる。対応するビットが書き込みマスクレジスタでクリアされているデスティネーションメモリ位置のデータ要素は、自身の前の値を保持している。
スキャッタストライド命令の実行の例が図6に示されている。ソースは、XMM、YMM,またはZMM等のレジスタである。この例では、デスティネーションは、RAXレジスタに見つかるアドレスで初期アドレス指定されているメモリである(これは、メモリアドレス指定の簡略化された図であり、変位等を利用してアドレスが生成されてよい)。もちろん、メモリアドレスは他のレジスタに格納され、命令の即値として発見されてもよい(上述した通りである)。
この例の書き込みマスクは、ビットの値が4DB4のhe20ecimalの値に対応している16ビットの書き込みマスクである。「1」の値の書き込みマスクの各ビット位置において、レジスタソースからの対応するデータ要素が、デスティネーションメモリの対応する(ストライド)位置に格納される。書き込みマスクの第1の位置(たとえばkl[0])は「0」であり、対応するソースデータ要素位置(たとえばソースレジスタの第1のデータ要素)が、RAXメモリ位置には書き込めないことを示す。書き込みマスクの次のビットも「0」であり、これは、ソースレジスタからの次のデータ要素も、RAXメモリ位置からストライドされたメモリ位置に格納されないことを示している。この例では、ストライド値が「3」であるので、RAXメモリ位置から3つのデータ要素離れたデータ要素が上書きできない。
書き込みマスクの第1の「1」の値は、第3のビット位置にある(たとえばkl[2])。これは、ソースレジスタの第3のデータ要素がデスティネーションメモリに格納されるべきことを示す。このデータ要素は、ストライドされたデータ要素から3つストライド離れた位置であって、第1のデータ要素から6つ離れた位置に格納されている。
残りの書き込みマスクビット位置も、ソースレジスタのどの追加的データ要素がデスティネーションメモリに格納されるかを判断するために利用される(この例では、全部で8つのデータ要素が格納されるが、書き込みマスクに応じて、数はこれより多くても少なくてもよい)。加えて、レジスタソースからのデータ要素は、デスティネーションのデータ要素のサイズが、たとえば、デスティネーションに格納される前に32ビットの浮動小数点値から16ビットの浮動小数点値になるように、ダウンコンバージョンされてよい。ダウンコンバージョンおよびこれらを命令フォーマットにエンコードする方法の例は、上述した通りである。
スキャッタストライド命令の実行の別の例が図7に示されている。この例は、前の例に類似しているが、データ要素のサイズが異なっている(たとえば、データ要素の数が32ビットではなくて64ビットである)。このサイズの変更によって、マスクで利用されるビット数も変化する(本例では8である)。一部の実施形態では、マスクの下位のほうの8ビットが利用される(最下位8ビット)。他の実施形態では、マスクの上位のほうの8ビットが利用される(最上位8ビット)。他の実施形態では、マスクの1つおきのビットを利用する(つまり、偶数のビットまたは奇数のビット)。
スキャッタストライド命令の実行のまた別の例が図8に示されている。この例は、前の例に類似しているが、マスクが16ビットではない点が異なる。本例では、書き込みマスクレジスタがベクトルレジスタ(たとえばXMMまたはMMレジスタ)である。本例では、条件付きで格納される各データ要素の書き込みマスクビットが、書き込みマスクの対応するデータエレンメントの符号ビットである。
図9は、プロセッサでスキャッタストライド命令を実行する一実施形態を示す。901で、デスティネーションアドレスオペランド(ベース、変位、インデックス、および/またはスケール)、書き込みマスク、およびソースレジスタオペランドをもつスキャッタストライド命令をフェッチする。ソースレジスタのサイズの例は前に詳述した通りである。
903で、スキャッタストライド命令をデコードする。命令の形式に応じて、この段階で、様々なデータを解釈する(たとえば、アップコンバージョン(またはその他のデータ変換)が必要か、どのレジスタに書き込み、またはどのレジスタから取得すべきか、および、メモリアドレスはどれか、等)。
905で、ソースオペランドの値を取得する/読み取る。
実行すべきデータ要素変換がある場合(たとえばダウンコンバージョン)、907で実行する。たとえばソースから32ビットデータ要素を、16ビットのデータ要素にダウンコンバージョンしてよい。
スキャッタストライド命令(または、マイクロオペレーション等の命令を含むオペレーション)が、909で実行リソースにより実行される。この実行によって、ソース(XMM、YMM、またはZMMレジスタ)からのデータエレンメントが、書き込みマスクの値に基づいて、最下位から最上位へと、重複している(ストライド)デスティネーションメモリ位置に、条件付きで格納される。
図10は、スキャッタストライド命令を処理する方法の一実施形態を示す。この実施形態では、オペレーション901−907のうち全部ではなくとも一部が予め実行されていることを想定しているが、以下では詳細をあいまいにしないよう配慮して示されてはいない。たとえば、フェッチおよびデコードは示されておらず、オペランド(ソースおよび書き込みマスク)の取得も示されていない。
1001で、潜在的に書き込まれる可能性のある第1のメモリ位置を、命令のアドレスデータから生成する。ここでも、これは前に実行していてもよい。
1002で、このアドレスにフォルトがあるかを判断する。フォルトがある場合には実行を中断する。
フォルトがない場合には、1003で、第1の書き込みマスクビットの値が、ソースレジスタの第1のデータ要素が、生成されたアドレスに格納されるべきかを判断する。前の例を参照すると、この決定は、図6の書き込みマスクの最下位の値等の書き込みマスクの最下位の位置を参照して、第1のレジスタデータ要素を生成されたアドレスに格納すべきかを判断することで行われる。
書き込みマスクビットが、レジスタデータ要素を、生成されたアドレスに格納すべきであると示していない場合には、メモリのデータ要素をそのままにしておく(1005)。通常、これは、書き込みマスクの「0」の値で示されるが、反対のルール(opposite convention)を適用することもできる。
書き込みマスクビットが、レジスタデータ要素を、生成されたアドレスに格納すべきであると示している場合には、ソースの第1の位置のデータ要素をこの位置に格納する(1007)。通常、これは、書き込みマスクの「1」の値で示されるが、反対のルールを適用することもできる。データ変換(ダウンコンバージョン等)が必要な場合には、前に行われていない場合はこのときに行うことができる。
1009で、書き込みマスクビットをクリアして、書き込みの成功を示す。
1011で、データ要素が条件付きで上書きされてよい後続するストライドメモリアドレスを生成する。前の例で詳述したように、このアドレスは、メモリの前のデータ要素から「x」個のデータ要素分離れており、ここで「x」は、命令に含まれるストライド値である。
この後続するストライドされたデータ要素にフォルトがあるかの判断を1013で行う。フォルトがある場合には、命令の実行を中断する。
フォルトがない場合には、1015で、後続する書き込みマスクビットの値が、ソースレジスタの後続するデータ要素が、生成されたストライドアドレスに格納されるべきであるかを示しているか判断してよい。前の例を振り返ると、この判断は、図6の書き込みマスクの2番目に最下位の値等の書き込みマスクの次の位置を参照して、対応するデータ要素を、生成されたアドレスに格納すべきかを判断することで行われている。
書き込みマスクビットが、ソースデータ要素をメモリ位置に格納すべきであると示していない場合には、そのアドレスのデータ要素をそのままにしておく(1021)。通常、これは、書き込みマスクの「0」の値で示されるが、反対のルール(opposite convention)を適用することもできる。
書き込みマスクビットが、ソースデータ要素を、生成されたストライドアドレスに格納すべきであると示している場合には、そのアドレスのデータ要素を、ソースデータ要素で上書きする(1017)。通常、これは、書き込みマスクの「1」の値で示されるが、反対のルールを適用することもできる。データ変換(ダウンコンバージョン等)が必要な場合には、前に行われていない場合はこのときに行うことができる。
書き込みマスクビットを1019でクリアして、書き込みの成功を示す。
評価された書き込みマスク位置が書き込みマスクの最後か、またはデスティネーションのデータ要素位置の全てが満たされているかの判断を1023で行う。この判断結果が肯定的である場合には、オペレーションを終了する。否定的な場合には、ストライドアドレスに格納する候補の別のデータ要素を評価する。
この図および上述した記載は、それぞれの第1の位置を最下位の位置と想定しているが、一部の実施形態では、第1の位置が最上位の位置である。加えて、一部の実施形態では、フォルトの決定を行わない。
<ギャザーストライドプリフェッチ>
第3の種類の命令は、ギャザーストライドプリフェッチ命令である。この命令のプロセッサによる実行によって、メモリ(システムまたはキャッシュ)から条件付きでストライドデータがプリフェッチされて、命令の書き込みマスクに従って命令で示唆されている(hint at)命令によってキャッシュのレベルに入れられる。プリフェッチされたデータは、後続する命令によって読み出されてよい。上述したギャザーストライド命令とは異なり、デスティネーションレジスタがなく、書き込みマスクが修正されない(この命令は、プロセッサの任意のアーキテクチャ状態を修正するものではない)。データ要素は、キャッシュライン等のメモリチャンク全体の部分としてプリフェッチされてよい。
プリフェッチされるデータ要素は、1種類のSIB(スケール、インデックス、およびベース)の指定によって特定される(前述した)。一部の実施形態では、命令は、汎用レジスタに渡されるベースアドレス、即値として渡されるスケール、汎用レジスタとして渡されるストライドレジスタ、および随意で変位(displacement)を含んでいる。もちろん、ベースアドレスおよび/またはストライドの即値等を含む命令等の他の実装例を利用することもできる。
ギャザーストライドプリフェッチ命令も書き込みマスクを含む。専用マスクレジスタ(たとえば後述する「k」書き込みマスク)を利用する一部の実施形態では、メモリデータ要素に対応する書き込みマスクビットがそうすべきと示しているとき(たとえば一部の実施形態ではビットが「1」の場合)に、当該メモリデータ要素がプリフェッチされる。他の実施形態では、データ要素の書き込みマスクビットは、書き込みマスクレジスからの対応する要素の符号ビットである(たとえばXMMまたはYMMレジスタ)。これら実施形態では、書き込みマスク要素は、データ要素と同じサイズとして扱われる。
加えて、上述したギャザーストライドの実施形態とは異なり、通常は、ギャザーストライドプリフェッチ命令は、例外的に停止されず、ページフォルトを配信しない。
この命令の形式の例が、「VGATHERSTR_PRE [base, scale * stride] + displacement, {k1}, hint」であり、ここでk1が書き込みマスクオペランドであり(後で詳述する16ビットのレジスタ例)、ベース、スケール、ストライド、および変位が、メモリソースアドレスおよびストライド値を、メモリの後続するデータ要素に提供して、デスティネーションレジスタに条件付きでプリフェッチさせる。示唆(hint)により、条件付きでプリフェッチするキャッシュレベルを提供する。一部の実施形態では、書き込みマスクも異なるサイズ(8ビット、32ビット等)であってよい。加えて一部の実施形態では、後述するように、書き込みマスクの全てのビットを命令が利用しない場合もある。VGATHERSTR_PREは、命令のオペコードである。通常、各オペランドは明示的に命令で定義されている。
この命令は通常、この例では、書き込みマスクレジスタklに設定されている対応するビットをもつメモリ位置のみが、プレフェッチされるように、書き込みマスクされる。
ギャザーストライドプリフェッチ命令の実行の一例が図11に示されている。この例では、メモリは、RAXレジスタにみられるアドレスに、初期アドレス指定されている(これは、メモリアドレス指定の簡略化された図であり、変位等を、アドレスを生成するために利用することができる)。もちろん、メモリアドレスは、他のレジスタに格納されていても、上述した命令の即値として発見されてもよい。
この例の書き込みマスクは、ビットの値が4DB4のhe20ecimalの値に対応している16ビットの書き込みマスクである。「1」の値の書き込みマスクの各ビット位置において、メモリソースからのデータ要素がプリフェッチされ、これには、キャッシュまたはメモリのライン全体のプリフェッチが含まれてよい。書き込みマスクの第1の位置は(たとえばkl[0])であり、対応するデスティネーションデータ要素位置(たとえばデスティネーションレジスタの第1のデータ要素)が、そこには、ソースメモリからのデータ要素が格納されていないことを示す。この場合、RAXアドレスに関連しているデータ要素は格納されない。書き込みマスクの次のビットも「0」であり、これは、メモリ内の後続する「ストライド」されたデータ要素も、プリフェッチされるべきではないことを示している。この例では、ストライド値が「3」であり、この後続するデータ要素は、第1のデータ要素から離れている第3のデータ要素である。
書き込みマスクの第1の「1」の値は、第3のビット位置にある(たとえばkl[2])。これは、メモリの前のストライドされたデータ要素に後続するストライドされたデータ要素がプリフェッチされるべきことを示す。この後続するストライドされたデータ要素は、前のストライドされたデータ要素から3つ離れており、第1のデータ要素からは6つ離れている。
残りの書き込みマスクビット位置も、メモリソースのどの追加的データ要素をプリフェッチするかを判断するために利用される。
図12は、プロセッサでギャザーストライドプリフェッチ命令を利用する一実施形態を示す。アドレスオペランド(ベース、変位、インデックス、および/またはスケール)、書き込みマスク、および示唆(hint)を有するギャザーストライドプリフェッチ命令をフェッチする(1201)。
1203で、ギャザーストライドプリフェッチ命令をデコードする。命令の形式に応じて、この段階で、様々なデータを解釈してよい(たとえば、どのキャッシュレベルをプリフェッチするか、ソースからのメモリアドレスはどれか、等)。
1205で、ソースオペランド値を取得する/読み取る。ほとんどの実施形態では、メモリソース位置アドレスに関するデータ要素および後続するストライドアドレスに関するデータ要素(およびそれに関するデータ要素)がこの時点で読み出される(たとえばキャッシュライン全体を読み出す)。しかしソースからのデータ要素は一回につき1つだけ取得することができる(破線に示されている通りである)。
ギャザーストライドプリフェッチ命令(または、マイクロオペレーション等の命令を含むオペレーション)が、1207で実行リソースにより実行される。この実行によって、プロセッサは、メモリ(システムまたはキャッシュ)からストライドされたデータ要素をプリフェッチして、命令の書き込みマスクに従って命令で示唆されている(hint at)キャッシュのレベルに入れられる。
図13は、ギャザーストライドプリフェッチ命令を処理する方法の一実施形態を示す。この実施形態では、オペレーション1201―1205のうち全部ではなくとも一部が予め実行されていることを想定しているが、以下では詳細をあいまいにしないよう配慮して示されてはいない。
1301で、条件付きでプリフェッチされるメモリの第1のデータ要素のアドレスが、ソースオペランドのアドレスデータから生成される。ここでも、これは前に実行されていてもよい。
1303で、メモリの第1のデータ要素に対応している書き込みマスクビット値が、プリフェッチされるべきであると示しているかどうかの判断を行う。前の例を振り返ると、この判断は、図11の書き込みマスクの最下位の値等の書き込みマスクの最下位の位置を参照して、メモリデータ要素をプリフェッチすべきかを判断することで行われている。
書き込みマスクが、メモリデータ要素をプリフェッチすべきであると示していない場合には、なにもプリフェッチされない(1305)。通常は、書き込みマスクの「0」の値で示されるが、反対のルール(opposite convention)を適用することもできる。
書き込みマスクが、メモリデータ要素をプリフェッチすべきであると示している場合には、データ要素をプリフェッチする(1307)。通常は、書き込みマスクの「1」の値で示されるが、反対のルール(opposite convention)を適用することもできる。前述したように、これは、他のデータ要素を含むキャッシュラインまたはメモリ位置全体をフェッチすることを意味していてよい。
条件付きでプリフェッチされる、後続するストライドされたデータ要素のアドレスを1309で生成する。前の例で詳述したように、このデータ要素は、メモリの前のデータ要素から「x」個のデータ要素分離れており、ここで「x」は、命令に含まれるストライド値である。
1311で、メモリ内の後続するストライドされたデータ要素に対応している書き込みマスクビット値が、プリフェッチされるべきであると示しているかどうかの判断を行う。前の例を振り返ると、この判断は、図11の書き込みマスクの2番目に最下位の値等の書き込みマスクの次の位置を参照して、メモリデータ要素をプリフェッチすべきかを判断することで行われている。
書き込みマスクビットが、メモリデータ要素をプリフェッチすべきであると示していない場合には、なにもプリフェッチされない(1313)。通常は、書き込みマスクの「0」の値で示されるが、反対のルール(opposite convention)を適用することもできる。
書き込みマスクが、メモリデータ要素をプリフェッチすべきであると示している場合には、データ要素をプリフェッチする(1315)。通常は、書き込みマスクの「1」の値で示されるが、反対のルール(opposite convention)を適用することもできる。
評価された書き込みマスクの位置が、書き込みマスクの最後かを判断する(1317)。この判断結果が肯定的である場合には、オペレーションを終了する。否定的な場合には、別のストライドされたデータ要素を評価する。
この図および上述した記載は、それぞれの第1の位置を最下位の位置と想定しているが、一部の実施形態では、第1の位置が最上位の位置である。
<スキャッタストライドプリフェッチ>
第4の種類の命令は、スキャッタストライドプリフェッチ命令である。この命令のプロセッサによる実行によって、メモリ(システムまたはキャッシュ)からストライドデータがプリフェッチされて、命令の書き込みマスクに従って命令で示唆されている(hint at)命令によってキャッシュのレベルに入れられる。この命令と、ギャザーストライドプリフェッチとの違いは、プリフェッチされるデータが、後で書き込まれるが、読み出されないことである。
上記にて詳述した命令の実施形態は、下記に詳述する「汎用のベクトルフレンドリーな命令フォーマット」で実施することも可能である。他の実施形態において、そのような形式は用いられず、他の命令フォーマットが用いられる。しかし、書き込みマスクレジスタ、様々なデータ変換(スウィズル、ブロードキャストなど)、アドレシングなどに関する以下の説明は一般的に、上述した命令の実施形態の説明に関して適用可能である。加えて、例示的なシステム、アーキテクチャ、およびパイプラインについて以下で詳述する。上述した命令の実施形態は、そのようなシステム、アーキテクチャ、およびパイプラインで実行することが出来るが、それら詳述されるものに限定されない。
ベクトルフレンドリーな命令フォーマットは、ベクトル命令に適した命令フォーマット(例えば、ベクトル演算に特定のいくつかのフィールドがある)である。ベクトルフレンドリーな命令フォーマットによってベクトル演算およびスカラ演算の両方がサポートされる実施形態を説明するが、代替的な実施形態においては、ベクトルフレンドリーな命令フォーマットのベクトル演算のみが用いられる。
<例示的な汎用のベクトルフレンドリーな命令フォーマット−図14Aおよび図14B>
図14Aおよび図14Bは、本願発明の実施形態に係る、汎用のベクトルフレンドリーな命令フォーマット、および、その命令テンプレートを示すブロック図である。図14Aは、本願発明の実施形態に係る、汎用のベクトルフレンドリーな命令フォーマット、および、そのクラスAの命令テンプレートを示すブロック図である。図14Bは、本願発明の実施形態に係る、汎用のベクトルフレンドリーな命令フォーマット、および、そのクラスB命令テンプレートを示すブロック図である。詳細には、汎用のベクトルフレンドリーな命令フォーマット1400には、それぞれが非メモリアクセス1405命令テンプレートおよびメモリアクセス1420命令テンプレートを含む、クラスAおよびクラスB命令テンプレートが定義されている。ベクトルフレンドリーな命令フォーマットという表現において汎用という用語は、命令フォーマットが何ら特定の命令セットに関連付けられていないことを意味する。ベクトルフレンドリーな命令フォーマットの命令が、レジスタ(非メモリアクセス1405命令テンプレート)およびレジスタ/メモリ(メモリアクセス1420命令テンプレート)のうちいずれかをソースとするベクトルに対して動作する実施形態を説明するが、本願発明の代替的な実施形態においては、これらのうちいずれか一方だけをサポートしてもよい。また、ベクトル命令フォーマットのロード命令および格納命令がある本願発明の実施形態を説明するが、代替的な実施形態においては、代わりに、或いは、加えて、レジスタへ、またはレジスタからベクトル(例えば、メモリからレジスタへ、レジスタからメモリへ、レジスタ間で、など)を移動させる異なる命令フォーマットの命令が用いられる。さらに、2つのクラスの命令テンプレートをサポートする本願発明の実施形態を説明するが、代替的な実施形態においては、これらのうち一方のみ、または3つ以上がサポートされる。
ベクトルフレンドリーな命令フォーマットが、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バイト)データ要素幅)を有するより大きな、より小さな、および/または異なるベクトルオペランドサイズ(例えば1456バイトのベクトルオペランド)がサポートされてもよい。
図14AのクラスAの命令テンプレートは、1)非メモリアクセス1405命令テンプレート内に、非メモリアクセス完全丸め制御タイプ演算1410命令テンプレート、および非メモリアクセスデータ変換タイプ演算1415命令テンプレート、並びに2)メモリアクセス1420命令テンプレート内に、メモリアクセス一時的1425命令テンプレート、およびメモリアクセス非一時的1430命令テンプレートを含む。図14BのクラスB命令テンプレートは、1)非メモリアクセス1405命令テンプレート内に、非メモリアクセス書き込みマスク制御部分的丸め制御タイプ演算1412命令テンプレート、および非メモリアクセス書き込みマスク制御vsizeタイプ演算1417命令テンプレート、並びに、2)メモリアクセス1420命令テンプレート内に、メモリアクセス書き込みマスク制御1427命令テンプレートを含む。
<形式>
汎用のベクトルフレンドリーな命令フォーマット1400は、図14Aおよび図14Bに示される順序で、以下に列挙するフィールドを含む。
形式フィールド1440−このフィールド内の特定値(命令フォーマット識別値)は一意的に、ベクトルフレンドリーな命令フォーマットを識別し、よって、命令ストリーム内のベクトルフレンドリーな命令フォーマットの命令の発生を識別する。よって、形式フィールド1440の内容は、第1命令フォーマットの命令の発生を他の命令フォーマットの命令の発生と区別し、これにより、ベクトルフレンドリーな命令フォーマットを他の命令フォーマットの命令セットへ導入することが可能となる。このため、このフィールドは、汎用のベクトルフレンドリーな命令フォーマットのみを有する命令には必要でないので任意的なものである。
ベース演算フィールド1442−この内容は、複数の異なるベース演算を区別する。本明細書で以下に説明するように、ベース演算フィールド1442は、オペコードフィールドを含み、および/または、その一部であってもよい。
レジスタインデックスフィールド1444−この内容は、直接的またはアドレス生成を介して、レジスタまたはメモリなどの、ソースおよびデスティネーションオペランドの位置を特定する。これらには、PxQ(例えば32x1612)レジスタファイルからN個のレジスタを選択するのに十分な数のビットを含む。一実施形態において、Nは最大3つのソースおよび1つのデスティネーションレジスタであるが、代替的な実施形態においては、より多く、またはより少ないソースおよびデスティネーションレジスタをサポートしてもよい(例えば最大2つのソースをサポートしてもよく、これらソースのうち1つはデスティネーションとしても動作する。例えば最大3つのソースをサポートしてもよく、これらソースのうち1つはデスティネーションとしても動作する。例えば最大2つのソースおよび1つのデスティネーションをサポートしてもよい)。一実施形態においてはP=32であるが、代替的な実施形態においては、より多く、またはより少ないレジスタ(例えば16の)をサポートしてもよい。一実施形態においてはQ=1612ビットであるが、代替的な実施形態においては、より多く、またはより少ないビット(例えば128、1024の)をサポートしてもよい。
修飾子フィールド1446−この内容は、メモリアクセスを特定する汎用ベクトル命令フォーマットの命令の発生を、メモリアクセスを特定しない命令フォーマットの命令の発生と区別する。つまり、非メモリアクセス1405命令テンプレートとメモリアクセス1420命令テンプレートとを区別する。メモリアクセス動作は、メモリ階層から読み出す、および/または、メモリ階層へ書き込む(場合によっては、レジスタ内の値を用いて、ソース、および/またはデスティネーションアドレスを特定する。他方、メモリアクセス動作はこれらを特定しない(例えば、ソースおよびデスティネーションがレジスタである)。一実施形態においては、このフィールドはメモリアドレス計算を実行する3つの異なる方法からの選択も行うが、代替的な実施形態においては、メモリアドレス計算を実行するより多くの、より少ない、または複数の異なる方法をサポートする。
オーグメンテーション演算フィールド1450−この内容は、ベース演算に加えて、様々な複数の異なる演算のうち何れを実行するかを区別する。このフィールドはコンテキスト特有のものである。本願発明の一実施形態において、このフィールドは、クラスフィールド1468、アルファフィールド1452、および、ベータフィールド1454に分けられる。オーグメンテーション演算フィールドは、複数の演算からなる共通のグループを、2、3、または4つの命令ではなく1つの命令で実行することを可能とする。以下に示すのは、必要な命令の数を減らすべくオーグメンテーションフィールド1450を用いる命令(用いられる用語の意味は、本明細書において以下により詳細に説明する)のいくつかの例である。
Figure 2016040737
ここで、[rax]はアドレス生成に用いられるベースポインタであり、{}は、データ操作フィールド(本明細書で以下により詳細に説明する)で特定される変換演算を示す。
スケールフィールド1460−この内容は、メモリアドレスの生成のための(例えば、2スケール*インデックス+ベースを用いるアドレス生成のための)インデックスフィールドの内容のスケーリングを可能とする。
変位フィールド1462A−この内容は、メモリアドレスの生成(例えば、2スケール*インデックス+ベース+変位を用いるアドレス生成)の一部として用いられる。
変位係数フィールド1462B(いずれか一方のみが用いられるので、変位フィールド1462Aは変位係数フィールド1462Bの直接上に配置されている)−この内容は、アドレス生成の一部として用いられる。このフィールドは、メモリアクセス(N)のサイズでスケーリングされる変位係数を特定する。ここでNは、メモリアクセス(例えば、2スケール*インデックス+ベース+スケーリングされた変位を用いるアドレス生成のための)のバイト数である。冗長下位ビットは無視され、よって、有効アドレスを計算するのに用いられる最終的な変位を生成すべく変位係数フィールドの内容がメモリオペランドの合計サイズ(N)で乗算される。Nの値は、本明細書で以下に説明するようにフルオペコードフィールド1474(本明細書で以下に説明する)およびデータ操作フィールド1454Cに基づいて実行時にプロセッサハードウェアによって求められる。変位フィールド1462Aおよび変位係数フィールド1462Bは非メモリアクセス1405命令テンプレートには用いられない、並びに/或いは、異なる実施形態においては、いずれか一方が用いられる、または両方とも用いられないので、任意的なものである。
データ要素幅フィールド1464−この内容は、複数のデータ要素幅のうち何れを用いるかを区別する(いくつかの実施形態においては全ての命令に関して。他の実施形態においては、命令のうちいくつかに関して)。1つだけのデータ要素幅がサポートされる場合、および/または、オペコードのいくつかの態様を用いて複数のデータ要素幅がサポートされる場合には必要ではないので、このフィールドは任意的なものである。
書き込みマスクフィールド1470−この内容は、データ要素の位置毎に、デスティネーションベクトルオペランドのデータ要素の位置に、ベース演算およびオーグメンテーション演算の結果を反映させるかどうかを制御する。クラスA命令テンプレートはマージング−書き込みマスキングをサポートし、クラスB命令テンプレートは、マージング−書き込みマスキング、およびゼロ化−書き込みマスキングの両方をサポートする。マージングの際、ベクトルマスクにより、デスティネーションの複数の要素からなる何れのセットも、(ベース演算およびオーグメンテーション演算によって特定される)いかなる演算の実行の間であっても、更新から保護をすることが可能となる。他の一実施形態において、対応するマスクビットが有する0を有するデスティネーションの各要素の古い値が維持される。対照的に、ベクトルマスクをゼロ化する際、(ベース演算およびオーグメンテーション演算によって特定される)いかなる演算の実行の間であっても、デスティネーションの複数の要素からなる何れのセットもゼロにされる。一実施形態において、対応するマスクビットが0の値を有するデスティネーションの要素が0に設定される。この機能のサブセットは、実行されている演算のベクトル長さ(つまり、最初から最後までの、修飾されている要素のスパン)を制御する能力である。しかし、修飾される要素が連続している必要はない。よって、書き込みマスクフィールド1470は、ロード、格納、算術、ロジカルなどを含む部分的なベクトル演算を可能とする。また、このマスキングをフォルトの抑制に用いることも出来る(つまり、フォルトを引き起こし得る/引き起こす何らかの演算の結果の受信を避けるべくデスティネーションのデータ要素の位置をマスキングすることにより。例えば、メモリのベクトルがページの境界をクロスし、2番目のページではなく最初のページがページフォルトを引き起こすことを想定すると、最初のページにあるベクトルの全てのデータ要素が書き込みマスクによりマスキングされた場合、ページフォルトを無視することが出来る)。さらに、書き込みマスクは、特定のタイプの条件ステートメントを含む「ベクトル化ループ」を可能とする。書き込みマスクフィールド1470の内容が、用いられる書き込みマスクを含む複数の書き込みマスクレジスタのうちの1つを選択する(よって、書き込みマスクフィールド1470の内容が、実行されるマスキングを間接的に識別する)本願発明の実施形態を説明したが、代替的な実施形態においては、代替的または追加的に、書き込みマスクフィールド1470の内容が、実行されるマスキングを直接的に特定することを可能とする。さらに、1)レジスタリネームパイプライン段階においてデスティネーションは黙示的なソースではないので、デスティネーションオペランドがソースでもない命令(ノンターナリ命令とも呼ばれる)に対してレジスタリネーミングが用いられる(演算の結果でない何れかデータ要素(何れのマスキングされたデータ要素)もゼロにされるので、現在のデスティネーションレジスタからのデータ要素の何れもリネームされたデスティネーションレジスタにコピーされる必要がなく、或いは、何らかの方法で演算を実行される必要がない)場合、および、2)ゼロが書き込まれているので、書き戻し段階の間、ゼロ化により性能の向上が可能となる。
即値フィールド1472−この内容は即値の特定を可能とする。即値をサポートしない汎用のベクトルフレンドリーな形式の実施では存在せず、即値を用いない命令では存在しないので、このフィールドは任意的なものである。
<命令テンプレートクラス選択>
クラスフィールド1468−この内容は複数の異なるクラスの命令を区別する。図14Aおよび図14Bを参照すると、このフィールドの内容は、クラスAの命令およびクラスBの命令のうちから選択する。図14Aおよび図14Bにおいて、角が丸められた正方形は、特定値がフィールド内に存在することを示すのに用いられている(例えば、図14AのクラスA1468A、および図14BのクラスB1468B)。
<クラスAの非メモリアクセス命令テンプレート>
クラスAの非メモリアクセス1405命令テンプレートの場合、アルファフィールド1452は、含まれる内容が複数の異なるオーグメンテーション演算タイプのうち何れが実行されるかを区別する(例えば、丸め1452A.1およびデータ変換1452A.2がそれぞれ、非メモリアクセス丸めタイプ演算1410および非メモリアクセスデータ変換タイプ演算1415命令テンプレートに関して特定される)RSフィールド1452Aとして解釈され、ベータフィールド1454は、特定されたタイプの演算のうち何れが実行されるかを区別する。図14Aおよび図14Bにおいて、角が丸められたブロックは、特定値が存在することを示すのに用いられている(例えば、修飾子フィールド1446の非メモリアクセス1446A、アルファフィールド1452/rsフィールド1452Aの丸め1452A.1およびデータ変換1452A.2)。非メモリアクセス1405命令テンプレートにおいて、スケールフィールド1460、変位フィールド1462A、および変位スケールフィールド1462Bは存在しない。
<非メモリアクセス命令テンプレート−完全丸め制御タイプ演算>
非メモリアクセス完全丸め制御タイプ演算1410命令テンプレートにおいて、ベータフィールド1454は、含まれる内容が静的な丸めを提供する丸め制御フィールド1454Aとして解釈される。本願発明の説明される実施形態においては、丸め制御フィールド1454Aは全浮動小数点例外抑制(SAE)フィールド1456、および、丸め演算制御フィールド1458を含むが、代替的な実施形態においては、これらのコンセプトの両方を同じフィールドにエンコードする、または、これらのコンセプト/フィールドのうち一方、または他方のみを有する(例えば、丸め演算制御フィールド1458のみを有する)。
SAEフィールド1456−この内容は、例外イベント報告を無効化するかどうかを区別する。抑制が有効であることをSAEフィールド1456の内容が示す場合、任意の命令はあらゆるタイプの浮動小数点例外フラグを報告せず、浮動小数点例外ハンドラを立ち上げない。
丸め演算制御フィールド1458−この内容は、複数の丸め演算(例えば、端数切り上げ、端数切り捨て、ゼロに丸め、および最も近い値に丸め)からなるグループのうち何れを実行するかを区別する。よって、丸め演算制御フィールド1458は、命令毎に丸めモードを変更することを可能とし、よって、このようなことが必要である場合に特に有用である。丸めモードを特定するための制御レジスタをプロセッサが含む本願発明の一実施形態において、丸め演算制御フィールド1450の内容は、レジスタ値よりも優位である(そのような制御レジスタに対し格納−変更−復元を実行する必要なく丸めモードを選択出来るということは有利である)。
<非メモリアクセス命令テンプレート−データ変換タイプ演算>
非メモリアクセスデータ変換タイプ演算1415命令テンプレートにおいて、ベータフィールド1454は、複数のデータ変換(例えば、データ変換、スウィズル、ブロードキャスト)のうち何れが実行されるかを含まれる内容が区別するデータ変換フィールド1454Bとして解釈される。
<クラスAのメモリアクセス命令テンプレート>
クラスAのメモリアクセス1420命令テンプレートの場合、アルファフィールド1452に含まれている内容は、エビクション・示唆(hint)のうちいずれが用いられるかを区別する(図14Aにおいて、一時的1452B.1および非一時的1452B.2がそれぞれ、メモリアクセス一時的1425命令テンプレートおよびメモリアクセス非一時的1430命令テンプレートに関して特定される)エビクション・示唆(hint)フィールド1452Bとして解釈され、ベータフィールド1454は、含まれる内容が複数のデータ操作演算(プリミティブとしても知られる)のうちいずれが実行されるか(例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、およびデスティネーションのダウンコンバージョン)を区別するデータ操作フィールド1454Cとして解釈される。メモリアクセス1420命令テンプレートは、スケールフィールド1460を含み、場合によっては、変位フィールド1462Aまたは変位スケールフィールド1462Bを含む。
ベクトルメモリ命令は、変換のサポートと共に、メモリからのベクトルロード、およびメモリへのベクトル格納を実行する。通常のベクトル命令と同様に、ベクトルメモリ命令は、データ要素の点で、書き込みマスクとして選択されたベクトルマスクの内容によって指示されて実際に転送される要素と共に、メモリから、またはメモリへデータを転送する。図14Aにおいて、角が丸められた正方形は、フィールド内に特定値が存在することを示すのに用いられている(例えば、修飾子フィールド1446のメモリアクセス1446B、アルファフィールド1452/エビクション・示唆(hint)フィールド1452Bの一時的1452B.1、および非一時的1452B.2)。
<メモリアクセス命令テンプレート−一時的>
一時的データは、キャッシュするのが有利である程度に直ぐに再度用いられる可能性が高いデータである。しかし、これは示唆(hint)であり、複数の異なるプロセッサが、示唆(hint)を全く無視するなど複数の異なるやり方で実行し得る。
<メモリアクセス命令テンプレート−非一時的>
非一時的データは、第1レベルキャッシュでキャッシュするのが有利ではない程度に直ぐには再度用いられる可能性が低く、エビクションの高い優先度を与えられるべきデータである。しかし、これは示唆(hint)であり、複数の異なるプロセッサが、示唆(hint)を全く無視するなど複数の異なるやり方で実行し得る。
<クラスB命令テンプレート>
クラスB命令テンプレートの場合、アルファフィールド1452は、書き込みマスクフィールド1470により制御される書き込みマスキングがマージングであるかゼロ化であるかを含まれる内容が区別する書き込みマスク制御(Z)フィールド1452Cとして解釈される。
<クラスBの非メモリアクセス命令テンプレート>
クラスBの非メモリアクセス1405命令テンプレートの場合、ベータフィールド1454の一部は、含まれる内容が複数の異なるオーグメンテーション演算タイプのうちいずれが実行されるのかを区別する(例えば、丸め1457A.1およびベクトル長さ(VSIZE)1457A.2がそれぞれ、非メモリアクセス書き込みマスク制御部分的丸め制御タイプ演算1412命令テンプレート、および非メモリアクセス書き込みマスク制御VSIZEタイプ演算1417命令テンプレートに関して特定される)RLフィールド1457Aとして解釈され、ベータフィールド1454の残りは、特定されたタイプの演算のうちいずれが実行されるのかを区別する。図14Aおよび14Bにおいて、角が丸められたブロックは、特定値(例えば、修飾子フィールド1446の非メモリアクセス1446A、RLフィールド1457Aの丸め1457A.1およびVSIZE1457A.2)が存在することを示すのに用いられている。非メモリアクセス1405命令テンプレートにおいて、スケールフィールド1460、変位フィールド1462A、および、変位スケールフィールド1462Bは存在しない。
<非メモリアクセス命令テンプレート−書き込みマスク制御部分的丸め制御タイプ演算>
非メモリアクセス書き込みマスク制御部分的丸め制御タイプ演算1410命令テンプレートにおいて、ベータフィールド1454の残りは、丸め演算フィールド1459Aとして解釈され、例外イベント報告が無効化される(任意の命令はあらゆるタイプの浮動小数点例外フラグを報告せず、浮動小数点例外ハンドラを立ち上げない)。
丸め演算制御フィールド1459A−丸め演算制御フィールド1458とちょうど同じようにこの内容は、複数の丸め演算(例えば、端数切り上げ、端数切り捨て、ゼロに丸め、および最も近い値に丸め)からなるグループのうち何れを実行するかを区別する。よって、丸め演算制御フィールド1459Aは、命令毎に丸めモードを変更することを可能とし、よって、このようなことが必要である場合に特に有用である。丸めモードを特定するための制御レジスタをプロセッサが含む本願発明の一実施形態において、丸め演算制御フィールド1450の内容は、レジスタ値よりも優位である(そのような制御レジスタに対し格納−変更−復元を実行する必要なく丸めモードを選択出来るということは有利である)。
<非メモリアクセス命令テンプレート−書き込みマスク制御VSIZEタイプ演算>
非メモリアクセス書き込みマスク制御VSIZEタイプ演算1417命令テンプレートにおいて、ベータフィールド1454の残りは、複数のデータベクトル長さ(例えば、128、1456、または1612バイト)のうち何れで実行されるかを含まれる内容が区別するベクトル長さフィールド1459Bとして解釈される。
<クラスBのメモリアクセス命令テンプレート
クラスAのメモリアクセス1420命令テンプレートの場合、ベータフィールド1454の一部は、ブロードキャストタイプデータ操作が実行されるかどうかを含まれる内容が区別するブロードキャストフィールド1457Bとして解釈され、ベータフィールド1454の残りは、ベクトル長さフィールド1459Bとして解釈される。メモリアクセス1420命令テンプレートは、スケールフィールド1460を含み、場合によっては、変位フィールド1462Aまたは変位スケールフィールド1462Bを含む。
<フィールドについての追加の説明>
汎用のベクトルフレンドリーな命令フォーマット1400に関し、フルオペコードフィールド1474は、形式フィールド1440、ベース演算フィールド1442、およびデータ要素幅フィールド1464を含むものとして示した。フルオペコードフィールド1474がこれらのフィールド全てを含む一実施形態を示したが、これらのフィールド全てをサポートしない実施形態においては、フルオペコードフィールド1474はこれらのフィールドの全ては含まない。フルオペコードフィールド1474は演算コードを提供する。
オーグメンテーション演算フィールド1450、データ要素幅フィールド1464、および書き込みマスクフィールド1470は、汎用のベクトルフレンドリーな命令フォーマットで、命令毎にこれらの特徴全てを特定することを可能とする。
書き込マスクフィールドおよびデータ要素幅フィールドを組み合わせると、複数の異なるデータ要素幅に基づいたマスクの適用を可能とするタイプ化された命令が生成される。
当該命令フォーマットは、他のフィールドの内容に基づいて異なる目的のために異なるフィールドを再利用するので、必要なビット数が比較的少なくて済む。例えば、一つの見方としては、修飾子フィールドの内容が、図14Aおよび図14Bの非メモリアクセス1405命令テンプレートと、図14Aおよび図14Bのメモリアクセス14250命令テンプレートとの間で選択と行い、クラスフィールド1468の内容が、それら非メモリアクセス1405命令テンプレートのうち、図14Aの命令テンプレート1410/1415、および、図14Bの命令テンプレート1412/1417から選択を行い、クラスフィールド1468の内容が、それらメモリアクセス1420命令テンプレートのうち、図14Aの命令テンプレート1425/1430、および、図14Bの命令テンプレート1427から選択を行う。他の見方では、クラスフィールド1468の内容が、図14Aおよび図14BのうちそれぞれのクラスAおよびクラスB命令テンプレートから選択を行い、修飾子フィールドの内容が、それらクラスAの命令テンプレートのうち、図14Aの命令テンプレート1405、1420から選択を行い、修飾子フィールドの内容が、それらクラスB命令テンプレートのうち、図14Bの命令テンプレート1405、1420から選択を行う。クラスフィールドの内容がクラスAの命令テンプレートを示す場合、修飾子フィールド1446の内容が、アルファフィールド1452(RSフィールド1452AおよびEHフィールド1452B)の解釈を選択する。同様に、修飾子フィールド1446およびクラスフィールド1468の内容が、アルファフィールドがRSフィールド1452A、EHフィールド1452B、または書き込みマスク制御(Z)フィールド1452Cとして解釈されるかの選択を行う。クラスフィールドおよび修飾子フィールドがクラスAの非メモリアクセス動作を示す場合、オーグメンテーションフィールドのベータフィールドの解釈は、RSフィールドの内容に基づいて変化し、クラスフィールドおよび修飾子フィールドがクラスBの非メモリアクセス動作を示す場合には、ベータフィールドの解釈は、RLフィールドの内容に依存する。クラスフィールドおよび修飾子フィールドがクラスAのメモリアクセス動作を示す場合には、オーグメンテーションフィールドのベータフィールドの解釈は、ベース演算フィールドの内容に基づいて変化し、クラスフィールドおよび修飾子フィールドがクラスBのメモリアクセス動作を示す場合には、オーグメンテーションフィールドのベータフィールドのブロードキャストフィールド1457Bの解釈は、ベース演算フィールドの内容に基づいて変化する。よって、ベース演算フィールド、修飾子フィールド、および、オーグメンテーション演算フィールドの組み合わせにより、さらに幅広いタイプのオーグメンテーション演算を特定することが可能となる。
複数の異なる状況において、クラスAおよびクラスBに関し様々な命令テンプレートを用いるのが有益である。クラスAは、性能上の理由によりゼロ化−書き込みマスキング、または、より短いベクトル長さが所望される場合に有用である。例えば、ゼロ化により、人工的にデスティネーションとマージングを行う必要がなくリネームが用いられる場合に偽の依存性を避けることが可能となる。他の例として、ベクトル長さの制御は、ベクトルマスクを用いてより短いベクトルサイズをエミュレートする際に格納−ロード転送に関する課題を緩和する。クラスBは、1)浮動小数点の例外を可能とし(つまり、SAEフィールドの内容がNoを示す)、同時に丸めモード制御を用いる場合、2)アップコンバージョン、スウィズル、スワップ、および/または、ダウンコンバージョンを用いることが出来る場合、並びに、3)グラフィックデータタイプで動作することが所望される場合に有用である。例えば、アップコンバージョン、スウィズル、スワップ、ダウンコンバージョン、およびグラフィックデータタイプは、異なる形式のソースを処理する際に必要となる命令の数を減らす。他の例としては、例外を可能とする性能により、指示される丸めモードでIEEEの規格に完全に準拠することが可能となる。
<例示的な特定のベクトルフレンドリーな命令フォーマット>
図15A、図15B、および図15Cは、本願発明の実施形態に係る例示的な特定のベクトルフレンドリーな命令フォーマットを示すブロック図である。図15A、図15B、および図15Cは、フィールドの場所、サイズ、解釈、および順序、並びに、これらのフィールドのうちいくつかの値を特定するという意味で特定的である、特定のベクトルフレンドリーな命令フォーマット1500を示す。特定のベクトルフレンドリーな命令フォーマット1500を用いて、x86命令の拡張を行ってもよく、よって、フィールのうちいくつかは、既存のx86命令のセット、およびその拡張(例えばAVX)に用いられるものと同様、または同じである。この形式は、拡張された既存のx86命令のセットのプレフィックスエンコードフィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、および、即値フィールドに対応したままである。図15A、図15B、および図15Cからのフィールドがマッピングされる図14Aおよび図14Bのフィールドが示されている。
なお、本願発明の実施形態は、例示を目的とし、汎用のベクトルフレンドリーな命令フォーマット1400の文脈で特定のベクトルフレンドリーな命令フォーマット1500に関して説明するが、本願発明は、特に記される場合を除き、特定のベクトルフレンドリーな命令フォーマット1500に限定されない。例えば、特定のベクトルフレンドリーな命令フォーマット1500は特定のサイズのフィールドを有するものとして示されているが、汎用のベクトルフレンドリーな命令フォーマット1400に関しては様々なフィールドが様々なサイズを有し得る。特定の例として、データ要素幅フィールド1464は特定のベクトルフレンドリーな命令フォーマット1500において1ビットのフィールドとして示されているが、本願発明はそのように限定されない(つまり、汎用のベクトルフレンドリーな命令フォーマット1400のデータ要素幅フィールド1464は他のサイズを有し得る)。
<形式−図15A、図15B、および図15C>
汎用のベクトルフレンドリーな命令フォーマット1400は、図15A、図15B、および図15Cで示される順序で以下に列挙するフィールドを含む。 EVEX Prefix(Bytes 0−3) EVEX Prefix1002−4バイト形式でエンコードされている。 形式フィールド1440(EVEX Byte0,bits[7:0])−第1バイト(EVEX Byte 0)は、形式フィールド1440であり、0x62(本願発明の一実施形態において、ベクトルフレンドリーな命令フォーマットを区別するのに用いられる一意の値)を含む。
第2〜4バイト(EVEX Bytes 1−3)は特定の機能を提供する複数のビットフィールドを含む。
REXフィールド1505(EVEX Byte 1,bits[7−5])−EVEX.R bit field(EVEX Byte 1,bit[7]−R),EVEX.X bit field(EVEX byte1,bit[6]−X)、および1457BEX byte 1,bit[5]−B)からなる。EVEX.R,EVEX.XおよびEVEX.Bビットフィールドは、対応するVEXビットフィールドと同様の機能を提供し、1の補数形式を用いてエンコードされる。つまり、ZMM0は、1111Bとしてエンコードされ、ZMM15は、0000Bとしてエンコードされる。当分野で公知のように命令の他のフィールドは、レジスタインデックスの下位3ビット(rrr、xxx、およびbbb)をエンコードするので、EVEX.R、EVEX.X、およびEVEX.Bを加えることにより、Rrrr、Xxxx、およびBbbbが形成され得る。
REX'フィールド1510−このフィールドは、REX'フィールド1510の最初の部分であり、拡張された32レジスタセットの上位16および下位16のうちいずれかをエンコードするのに用いられるEVEX.R'ビットフィールド(EVEX Byte 1,bit[4]−R')である。本願発明の一実施形態において、以下に示す他のビットと共にこのビットは、リアルオペコードバイトが62であるBOUND命令と(周知のx86 32ビットモードで)区別すべくビット反転形式で格納されるが、MODフィールドの11の値をMOD R/Mフィールド(以下に説明する)で受け入れない。代替的な実施形態においては、このビット、および以下に示された他のビットは反転形式で格納されない。1の値を用いて下位16のレジスタをエンコードする。言い換えると、EVEX.R'、EVEX.R、および他のフィールドからの他のRRRを組み合わせて、R'Rrrrが形成される。
オペコードマップフィールド1015(EVEX byte 1,bits[3:0]−mmmm)−この内容は、示唆された先頭のオペコードバイト(0F、0F 38、または、0F 3)をエンコードする。
データ要素幅フィールド1464(EVEX byte 2,bit[7]−W)−EVEX.Wと表記される。EVEX.Wは、データタイプの粒度(サイズ)を定義するのに用いられる(32ビットのデータ要素、または64ビットのデータ要素)。
EVEX.vvvv1520(EVEX Byte 2,bits[6:3]−vvvv)−EVEX.vvvvの役割には、以下のものが含まれ得る。1)EVEX.vvvvは、反転された(1の補数)形式で特定される第1ソースレジスタオペランドをエンコードし、2以上のソースオペランドの命令に有効である、2)EVEX.vvvvは、特定のベクトルシフトに関し、1の補数形式で特定されるデスティネーションレジスタオペランドをエンコードする、3)EVEX.vvvvは、何れのオペランドもエンコードせず、当該フィールドは残しておかれ、1111bを含む。よって、EVEX.vvvvフィールド1520は、反転された(1の補数)形式で格納される第1ソースレジスタ指定子の4つの下位ビットをエンコードする。命令に応じて、追加の異なるEVEXビットフィールドが、指定子のサイズを32レジスタに拡張するのに用いられる。
EVEX.U1468クラスフィールド(EVEX byte 2,bit[2]−U)−EVEX.U=0の場合、クラスA、またはEVEX.U0を示し、EVEX.U=1の場合、クラスB、またはEVEX.U1を示す。
プレフィックスエンコードフィールド1525(EVEX byte 2,bits[1:0]−pp)−ベース演算フィールドに追加のビットを提供する。EVEXプレフィックス形式のレガシーSSE命令のサポートを提供するのに加え、このフィールドは、SIMDプレフィックスをコンパクト化するのに有用である(SIMDプレフィックスを表現するのに1バイトを必要とせず、EVEX Prefixは2ビットのみ必要とする)。一実施形態において、レガシー形式、およびEVEXプレフィックス形式の両方のSIMDプレフィックス(66H、F2H、F3H)を用いるレガシーSSE命令をサポートするべく、これらのレガシーSIMDプレフィックスは、SIMDプレフィックスエンコードフィールドにエンコードされ、実行時には、デコーダのPLAに提供される前に、レガシーSIMDプレフィックスに拡張される(つまり、PLAは修正を加えることなくこれらのレガシー命令のレガシー形式およびEVEX形式を実行することが出来る)。より新しい命令はEVEXプレフィックスエンコードフィールドの内容を直接的にオペコード拡張として用いることが出来るが、特定の実施形態においては、一貫性を保つべく同様のやり方で拡張が行われるが、これらのレガシーSIMDプレフィックスによる異なる意味の特定を可能とする。代替的な実施形態において、2ビットのSIMDプレフィックスエンコードをサポートするようPLAを再設計し、よって、拡張が必要とされない。
アルファフィールド1452(EVEX byte 3,bit[7]−EH。EVEX.EH、EVEX.rs、EVEX.RL、EVEX.write mask controlおよびEVEX.Nとしても知られる。αを用いても示される−上述したように、このフィールドは内容特有のものである。追加の説明は本明細書において以下に示す。
ベータフィールド1454(EVEX byte 3,bits[6:4]−SSS。EVEX.s2−0、EVEX.r2−0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られる。βββを用いても示される)−上述したように、このフィールドは内容特有のものである。追加の説明は本明細書において以下に示す。
REX'フィールド1510−このフィールドはREX'フィールドの残りであり、拡張された32レジスタセットの上位16および下位16のうちいずれかをエンコードするのに用いられ得るEVEX.V'ビットフィールド(EVEX Byte 3,bit[3]−V')である。このビットはビット反転形式で格納される。下位16のレジスタをエンコードするのに1の値が用いられる。言い換えると、EVEX.V'とEVEX.vvvvとを組み合わせてV'VVVVが形成される。
書き込みマスクフィールド1470(EVEX byte 3,bits[2:0]−kkk)−この内容は、上述したように書き込みマスクレジスタのレジスタのインデックスを特定する。本願発明の一実施形態において、特定値EVEX.kkk=000は特定の命令に対し書き込みマスクが用いられないことを示唆する特別な挙動を示す(このことは、全ての1にハードワイヤされた、またはマスキングハードウェアをバイパスするハードウェアにハードワイヤされた書き込みマスクを用いることを含む様々なやり方で実装することが出来る)。 リアルオペコードフィールド1030(Byte 4) このフィールドは、オペコードバイトとしても知られる。オペコードの一部はこのフィールドで特定される。 MOD R/Mフィールド1040(Byte 5) 修飾子フィールド1446(MODR/M.MOD,bits[7−6]−MODフィールド1542)−上述したように、MODフィールド1542の内容は、メモリアクセス動作と非メモリアクセス動作とを区別する。このフィールドは本明細書において以下にさらに説明する。 MODR/M.regフィールド1044,bits[5−3]−ModR/M.regフィールドの役割は、2つの状況に要約することが出来る。ModR/M.regが、デスティネーションレジスタオペランド、およびソースレジスタオペランドのうちいずれかをエンコードする。または、ModR/M.regが、オペコード拡張として扱われ、いずれの命令オペランドをエンコードするのにも用いられない。 MODR/M.r/mフィールド1046,bits[2−0]−ModR/M.r/mフィールドの役割には以下のものが含まれ得る。ModR/M.r/mが、メモリアドレスを参照する命令オペランドをエンコードする。または、ModR/M.r/mが、デスティネーションレジスタオペランド、およびソースレジスタオペランドのいずれかをエンコードする。 スケール、インデックス、ベース(SIB)バイト(Byte 6)スケールフィールド1460(SIB.SS,bits[7−6]−上述したように、スケールフィールド1460の内容は、メモリアドレスの生成に用いられる。このフィールドは本明細書において以下にさらに説明する。 SIB.xxx1554(bits[5−3])、および、SIB.bbb1056(bits[2−0])−これらのフィールドの内容は、レジスタインデックスXxxxおよびBbbbに関連して上記にて参照した。 変位バイト(Byte 7、または、Bytes 7−10) 変位フィールド1462A(Bytes 7−10)−MODフィールド1542が10を含む場合、バイト7−10は変位フィールド1462Aであり、レガシー32ビットの変位(disp32)と同じく動作し、バイト粒度で動作する。
変位係数フィールド1462B(Byte 7)−MODフィールド1542が01を含む場合、バイト7は変位係数フィールド1462Bである。このフィールドの場所は、バイト粒度で動作するレガシーx86命令セットの8ビット変位(disp8)の場所と同じである。disp8は符号が拡張されているので、−128〜127バイトのオフセットのみに対応出来る。64バイトのキャッシュに関しては、disp8は、−128、−64、0、および64の4つの実際に有用な値にのみ設定され得る8ビットを用いる。さらに大きな範囲が必要とされることが多いので、disp32が用いられる。しかし、disp32は4バイトを必要とする。disp8およびdisp32と対照的に、変位係数フィールド1462Bはdisp8の再解釈である。変位係数フィールド1462Bを用いる場合、実際の変位は、変位係数フィールドの内容にメモリオペランドアクセスのサイズ(N)を乗算して決定される。このタイプの変位は、disp8*Nと示される。これにより、平均の命令長さが短くなる(変位に関して1つのバイトがより大きな範囲に対して用いられる)。そのような圧縮された変位は、有効な変位はメモリアクセスの粒度の倍数であり、よって、アドレスオフセットの冗長下位ビットは、エンコードされる必要がないという仮定に基づいている。言い換えると、変位係数フィールド1462Bはレガシーx86命令セットの8ビット変位に置き換わる。よって、変位係数フィールド1462Bは、x86命令セットの8ビット変位と同じやり方でエンコードされ(つまり、ModRM/SIBのエンコードルールには変更がない)、disp8がdisp8*Nにオーバーロードされる(overloaded)点だけが異なる。言い換えると、エンコードルールまたはエンコード長さには変化がないが、(バイトごとのアドレスオフセットを得るには、メモリオペランドのサイズで変位をスケーリングする必要がある)ハードウェアによる変位値の解釈にのみ変化がある。
<即値>
即値フィールド1472は上述したように動作する。
<例示的なレジスタアーキテクチャ−図16>
図16は、本願発明の一実施形態に係るレジスタアーキテクチャ1600のブロック図である。レジスタアーキテクチャのレジスタファイルおよびレジスタを以下に列挙する。
<ベクトルレジスタファイル1610>
示される実施形態において、1112ビットの幅を有する32個のベクトルレジスタがある。これらのレジスタをzmm0〜zmm31と呼ぶ。最初の16個のレジスタの下位956ビットは、レジスタymm0〜16にオーバーレイされて(overlaid)いる。最初の16zmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0〜15にオーバーレイされている。特定のベクトルフレンドリーな命令フォーマット1500は以下の表に示すようにこれらオーバーレイされたレジスタファイルに対して動作する。
Figure 2016040737
言い換えると、ベクトル長さフィールド1459Bは、最大長さおよび1以上の他のより短い長さのうちから選択を行う。ここでそのようなより短い長さのそれぞれは先行する長さの半分である。ベクトル長さフィールド1459Bを有さない命令テンプレートは、最大ベクトル長さで動作する。さらに、一実施形態において、特定のベクトルフレンドリーな命令フォーマット1500のクラスB命令テンプレートは、パックされた、またはスカラの単/倍精度浮動小数点データ、およびパックされた、またはスカラの整数データに対し動作する。スカラ演算は、zmm/ymm/xmmレジスタの下位のデータ要素の位置に対して行われる演算である。上位のデータ要素の位置は命令の前の位置と同じままである、または実施形態によってはゼロにされる。
書き込みマスクレジスタ1515−示される実施形態において、それぞれサイズが64ビットである8個の書き込みマスクレジスタ(k0〜k7)がある。上述したように、本願発明の一実施形態において、ベクトルマスクレジスタk0は書き込みマスクとして用いることが出来ない。エンコードの際には、このフィールドは通常k0が書き込みマスクに用いられることを示し、0xFFFFのハードワイヤされた書き込みマスクを選択し、効果的に当該命令の書き込みマスクを無効化する。
マルチメディア拡張制御ステータスレジスタ(MXCSR)1620−示される実施形態において、この32ビットレジスタは浮動小数点演算に用いられるステータスおよび制御ビットを提供する。
汎用レジスタ1625−示される実施形態において、メモリオペランドに対応する既存のx86アドレシングモードと用いられる16個の64ビット汎用レジスタがある。これらのレジスタはRAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、および、R8〜R15で示される。
拡張フラグ(EFLAGS)レジスタ1630−示される実施形態において、この32ビットのレジスタは、多くの命令の結果を記録するのに用いられる。
浮動小数点制御ワード(FCW)レジスタ1635、および、浮動小数点ステータスワード(FSW)レジスタ1640−示される実施形態において、これらのレジスタは、FCWの場合に丸めモード、例外マスク、およびフラグを設定し、FSWの場合に例外の記録をつけるべく、x87命令セット拡張によって用いられる。
MMXパックド整数フラットレジスタファイル1650がエイリアスされるスカラ浮動小数点スタックレジスタファイル(x87スタック)1645−示される実施形態において、x87スタックは、x87命令セット拡張を用いる32/64/80ビット浮動小数点データに対するスカラ浮動小数点演算を実行するのに用いられる8個の要素のスタックであり、MMXレジスタは、64ビットのパックされた整数データに対する演算を実行し、MMXレジスタとXMMレジスタとの間で実行されるいくつかの演算のオペランドを保持するのに用いられる。
セグメントレジスタ1655−示される実施形態において、セグメント化されたアドレス生成に用いられるデータを格納するのに用いられる6個の16ビットレジスタがある。
RIPレジスタ1665−示される実施形態において、この64ビットレジスタは、命令ポインタを格納する。
本願発明の代替的な実施形態においては、より広い、またはより狭いレジスタが用いられる。加えて、本願発明の代替的な実施形態においては、より多くの、より少ない、または異なるレジスタファイルおよびレジスタが用いられる。
<例示的なインオーダープロセッサアーキテクチャ−図17Aおよび図17B>
図17Aおよび図17Bは、例示的なインオーダープロセッサアーキテクチャのブロック図を示す。これらの例示的な実施形態は、ワイドベクトルプロセッサ(VPU)で補強されたインオーダーCPUコアの複数のインスタンシエイションに基づいて設計されている。コアはe19tアプリケーションに応じて、何らかの所定の関数ロジック、メモリI/Oインタフェース、および、他の必要なI/Oロジックと高帯域幅インターコネクトネットワークを介して通信を行う。例えば、スタンドアローンGPUとしての本実施形態の実施は、典型的にはPCIeバスを含む。
図17Aは、本願発明の実施形態に係る、シングルCPUコア、当該シングルCPUコアのオンダイインターコネクトネットワーク1702との接続、およびレベル2(L2)キャッシュ1704のローカルサブセットを示すブロック図である。命令デコーダ1700は、特定のベクトル命令フォーマット1000を含む拡張を有するx86命令セットをサポートする。本願発明の一実施形態においては、(設計を単純にするべく)スカラユニット1708およびベクトルユニット1710は別個のレジスタセットを用い(それぞれ、スカラレジスタ1712、およびベクトルレジスタ1714)、これらの間で転送されるデータはメモリへ書き込まれ、レベル1(L1)キャッシュ1706から読み出されるが、本願発明の代替的な実施形態においては、異なるアプローチが用いられる(例えば、1つのレジスタセットが用いられる、または、書き込みおよび読み出しが行われることなく2つのレジスタファイル間でデータの転送を可能とする通信パスが含まれる)。
L1キャッシュ1706は、メモリのスカラユニットおよびベクトルユニットへのキャッシュのための低いレイテンシアクセスを可能とする。ベクトルフレンドリーな命令フォーマットのロードオペランド命令と併せて、このことは、拡張されたレジスタファイルと幾分同じようにL1キャッシュ1706を扱えることを意味する。このことにより、多くのアルゴリズム、特にエビクション・示唆(hint)フィールド1452Bのアルゴリズムに関して性能を向上させられる。
L2キャッシュ1704のローカルサブセットは、CPUコア毎に1つの、別個のローカルサブセットへ分割されるグローバルなL2キャッシュの一部である。各CPUは、L2キャッシュ1704の自身のローカルサブセットへの直接的なアクセスパスを有する。CPUコアによって読み出されたデータは、そのL2キャッシュサブセット1704に格納され、それぞれ自身のローカルL2キャッシュサブセットにアクセスする他のCPUと並行して迅速にアクセスすることが出来る。CPUコアによって書き込まれたデータは、自身のL2キャッシュサブセット1704に格納され、必要であれば他のサブセットからフラッシュされる。リングネットワークによって、共有されるデータの一貫性が確保される。
図17Bは、本願発明の実施形態に係る、図17AのCPUコアの一部を示す分解図である。図17BはL1キャッシュ1704のL1データキャッシュ1706A部分、並びに、ベクトルユニット1710およびベクトルレジスタ1714の詳細を示す。詳細には、ベクトルユニット1710は整数、単精度浮動小数点、および倍精度浮動小数点命令を実行する16ワイドベクトル処理ユニット(VPU)(16ワイドALU1728を参照)である。VPUは、スウィズルユニット1720のレジスタインプットのスウィズリング、数値変換ユニット1722A、1722Bの数値変換、およびメモリインプットの複製ユニット1724の複製をサポートする。書き込みマスクレジスタ1726により、結果として生じるベクトル書き込みの予測が可能となる。
レジスタデータは、例えば行列の乗算をサポートするなど、様々なやり方でスウィズリング出来る。メモリからのデータは、複数のVPUレーンに対して複製出来る。このことはグラフィックおよび非グラフィック両方の並列データ処理に共通の演算であり、キャッシュの効率性をはるかに向上させる。
リングネットワークは、CPUコア、L2キャッシュ、および他のロジックグロックなどのエージェントが互いにチップ内で通信を行えるよう双方向性である。各リングデータパスは、一方向あたり1112ビット幅である。
<例示的なアウトオブオーダーアーキテクチャ−図18>
図18は、本願発明の実施形態に係る例示的なアウトオブオーダーアーキテクチャを示すブロック図である。詳細には、図18は、ベクトルフレンドリーな命令フォーマットおよびその実行に対応するよう修正された周知の例示的なアウトオブオーダーアーキテクチャを示す。図18において、矢印は2以上のユニットの結合を示し、矢印の方向はそれらユニット間のデータフローの方向を示す。図18は、実行エンジンユニット1810およびメモリユニット1815に結合されたフロントエンドユニット1805を含む。実行エンジンユニット1810はさらに、メモリユニット1815に結合されている。
フロントエンドユニット1805は、レベル2(L2)分岐予測ユニット1822に結合されたレベル1(L1)分岐予測ユニット1820を含む。L1およびL2分岐予測ユニット1820、1822は、L1命令キャッシュユニット1824に結合されている。L1命令キャッシュユニット1824は、命令トランスレーションルックアサイドバッファ(TLB)1826に結合され、命令トランスレーションルックアサイドバッファ(TLB)1826はさらに、命令フェッチ/プリデコードユニット1828に結合されている。命令フェッチ/プリデコードユニット1828は、命令キューユニット1830に結合され、命令キューユニット1830はさらにデコードユニット1832に結合されている。デコードユニット1832は、1個の複雑なデコーダユニット1834、および3個の単純なデコーダユニット1836、1838、1840を備える。デコードユニット1832は、マイクロコードROMユニット1842を含む。デコードユニット1832は、デコード段階について述べたセクションで上述したように動作してもよい。L1命令キャッシュユニット1824はさらに、メモリユニット1815内のL2キャッシュユニット1848に結合されている。命令TLBユニット1826はさらに、メモリユニット1815内の第2レベルTLBユニット1846に結合されている。デコードユニット1832、マイクロコードROMユニット1842、およびループストリーム検出ユニット1844はそれぞれ、実行エンジンユニット1810内のリネーム/アロケータユニット1856に結合されている。
実行エンジンユニット1810は、リネーム/アロケータユニット1856を含み、リネーム/アロケータユニット1856は、リタイヤユニット1874および統合スケジューラユニット1858に結合されている。リタイヤユニット1874はさらに、実行ユニット1860に結合され、リオーダバッファユニット1878を含む。統合スケジューラユニット1858はさらに、物理レジスタファイルユニット1876に結合され、物理レジスタファイルユニット1876は実行ユニット1860に結合されている。物理レジスタファイルユニット1876は、ベクトルレジスタユニット1877A、書き込みマスクレジスタユニット1877B、および、スカラレジスタユニット1877Cを備える。これらのレジスタユニットは、ベクトルレジスタ1610、ベクトルマスクレジスタ1515、および、汎用レジスタ1625を提供してもよく、物理レジスタファイルユニット1876は、示されていない追加のレジスタファイルを含んでもよい(例えば、MMXパックド整数フラットレジスタファイル1650に対しエイリアスされたスカラ浮動小数点スタックレジスタファイル1645)。実行ユニット1860は3個のミックスされたスカラおよびベクトルユニット1862、1864、1872、ロードユニット1866、格納アドレスユニット1868、および、格納データユニット1870を含む。ロードユニット1866、格納アドレスユニット1868、および、格納データユニット1870はそれぞれさらに、メモリユニット1815内のデータTLBユニット1852に結合されている。
メモリユニット1815は、第2レベルTLBユニット1846を含み、第2レベルTLBユニット1846は、データTLBユニット1852に結合されている。データTLBユニット1852はL1データキャッシュユニット1854に結合されている。L1データキャッシュユニット1854はさらに、L2キャッシュユニット1848に結合されている。いくつかの実施形態において、L2キャッシュユニット1848はさらに、メモリユニット1815内、および/または外のL3およびさらに高いレベルのキャッシュユニット1850に結合されている。
例として、例示的なアウトオブオーダーアーキテクチャは、次のように処理パイプラインを実施する。1)命令フェッチ/プリデコードユニット1828がフェッチおよび長さデコード段階を実行する、2)デコードユニット1832がデコード段階を実行する、3)リネーム/アロケータユニット1856がアロケーションおよびリネーム段階を実行する、4)統合スケジューラユニット1858がスケジューリング段階を実行する、5)物理レジスタファイルユニット1876、リオーダバッファユニット1878、およびメモリユニット1815がレジスタ読み出し/メモリ読み出し段階を実行し、実行ユニット1860が実行/データ変換段階を実行する、6)メモリユニット1815およびリオーダバッファユニット1878が、書き戻し/メモリ書き込み段階を実行する、7)リタイヤユニット1874がROB読み出し段階を実行する、8)様々なユニットが例外取り扱い段階14164に関わってもよい、9)リタイヤユニット1874および物理レジスタファイルユニット1876がコミット段階を実行する。
<例示的なシングルコアおよびマルチコアプロセッサ>
図23は、本願発明の実施形態に係る、集積メモリコントローラおよび集積グラフィックを備えたシングルコアプロセッサおよびマルチコアプロセッサ2300を示すブロック図である。図23において、実線の四角はシングルコア2302A、システムエージェント2310、および1以上のバスコントローラユニット2316からなるセットを含むプロセッサ2300を示し、破線の四角は、複数のコア2302A〜N、システムエージェントユニット2310内の1以上の集積メモリコントローラユニット2314からなるセット、および集積グラフィックロジック2308を含む代替的なプロセッサ2300を任意的な追加として示す。
メモリ階層は、コア内の1以上のレベルのキャッシュ、1以上の共有キャッシュユニット2306からなるセット、複数の集積メモリコントローラユニット2314からなるセットに結合された外部メモリ(図示せず)を含む。複数の共有キャッシュユニット2306からなるセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)、または他のレベルのキャッシュなど1以上の中間レベルのキャッシュ、最後のレベルのキャッシュ(LLC)、および/またはこれらの組み合わせを含んでよい。一実施形態においては、リングベースのインターコネクトユニット2312が集積グラフィックロジック2308、複数の共有キャッシュユニット2306からなるセット、および、システムエージェントユニット2310を相互接続するが、代替的な実施形態においては、そのようなユニットを相互接続する周知の技術をいくつか用いてもよい。
いくつかの実施形態において、1以上のコア2302A〜Nは、マルチスレッドに対応可能である。システムエージェント2310は、コア2302A〜Nの調整を行い動作させるコンポーネントを含む。システムエージェントユニット2310は、例えば、電力制御ユニット(PCU)、およびディスプレイユニットを含む。PCUは、コア2302A〜Nおよび集積グラフィックロジック2308の電力状況を制御するのに必要なロジックおよびコンポイーネントであるか、それらを含んでもよい。ディスプレイユニットが1以上の外部接続されたディスプレイを駆動する。
コア2302A〜Nは、アーキテクチャ、および/または命令セットに関して、同質、または異質のものであってもよい。例えば、コア2302A〜Nのうちいくつかはインオーダー(例えば、図17Aおよび図17Bで示すような)であり、他のコアは、アウトオブオーダー(例えば、図23に示すような)であってもよい。他の例として、コア2302A〜Nのうち2以上は、同じ命令セットを実行可能であり、他のコアは、その命令セットのサブセットのみ、または異なる命令セットを実行可能である。少なくとも1つのコアが、本明細書で説明するベクトルフレンドリーな命令フォーマットを実行可能である。
プロセッサは、米国カリフォルニア州サンタクララのIntel Corporationにより販売されるCore(登録商標)i3、i5、i7、2 Duo、およびQuad、Xeon(登録商標)、またはItanium(登録商標)プロセッサなどの汎用プロセッサであってよい。代替的に、プロセッサは他の企業が販売するものであってもよい。プロセッサは、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、コプロセッサ、埋め込み型プロセッサなどの特定用途プロセッサであってもよい。プロセッサは1以上のチップ上で実装されてもよい。プロセッサ2300は、BiCMOS、CMOS、またはNMOSなどの処理技術をいくつか用い、1以上の基板の一部である、および/または、それら基板上で実装されてもよい。
<例示的なコンピュータシステムおよびプロセッサ−図19〜22>
図19〜22は、プロセッサ2300を含めるのに適した例示的なシステムを示す。図17Aおよび図17Bは、1以上のコア2302を含みうる例示的なシステムオンチップ(SoC)を示す。ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込み型プロセッサ、デジタル信号プロセッサ(DSP)、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスに関する当分野で公知の他のシステム設計および構成も適している。一般的に、本明細書で開示されるプロセッサ、および/または他の実行ロジックを組み込むことが可能な非常に幅広い種類のシステムまたは電子デバイスが適している。
図19は、本願発明の一実施形態に係るシステム1900を示すブロック図である。システム1900は、1以上のプロセッサ1910、1915を含み、1以上のプロセッサ1910、1915はグラフィックメモリコントローラハブ(GMCH)1920に結合されている。追加のプロセッサ1915は任意で用いられるので、図19において破線で示されている。
各プロセッサ1910、1915はプロセッサ2300の何らかのバージョンであってよい。しかし、集積グラフィックロジックおよび集積メモリ制御ユニットがプロセッサ1910、1915内に存在するということは考えられにくい。
図19は、GMCH1920が、例えばダイナミックランダムアクセスメモリ(DRAM)であってよいメモリ1940に結合されていてよいことを示す。DRAMは、少なくとも一実施形態において、非揮発性キャッシュに関連付けられている。
GMCH1920は、チップセットである、またはチップセット一部である。GMCH1920はプロセッサ1910、1915と通信を行い、プロセッサ1910、1915とメモリ1940との間の相互作用を制御してもよい。またGMCH1920は、プロセッサ1910、1915と、システム1900の他の要素との間の加速バスインタフェースとして動作してもよい。少なくとも一実施形態において、GMCH1920は、フロントサイドバス(FSB)1995などのマルチドロップバスを介してプロセッサ1910、1915と通信を行う。
さらに、GMCH1920は、ディスプレイ1945(フラットパネルディスプレイなど)に結合されている。GMCH1920は、集積グラフィックアクセラレータを含んでもよい。GMCH1920はさらに、様々な周辺デバイスをシステム1900に結合するのに用いられ得る、入力/出力(I/O)コントローラハブ(ICH)1950に結合されている。図19の実施形態においては、他の周辺デバイス1970と併せて、ICH1950に結合されている独立したグラフィックデバイスであってよい外部グラフィックデバイス1960が例として示されている。
代替的に、追加的な、または異なるプロセッサもシステム1900に存在してもよい。例えば、追加のプロセッサ1915には、プロセッサ1910と同じ追加のプロセッサ、プロセッサ1910と異質の、または対称的な追加のプロセッサ、アクセラレータ(例えば、グラフィックアクセラレータ、またはデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイ、または他の何らかのプロセッサが含まれてよい。アーキテクチャ、マイクロアーキテクチャ、熱、電力消費特性などの面で、物理リソース1910、1915毎に様々な利点がある。これらの利点の差は、処理要素1910、1915間の対称性または異質性を利用し有効に活用される。少なくとも一実施形態において、様々な処理要素1910、1915が同じダイパッケージに存在してもよい。
図20は、本願発明の実施形態に係る第2システム2000を示すブロック図である。図20に示すようにマルチプロセッサシステム2000は、ポイントツーポイントインターコネクトシステムであり、ポイントツーポイントインターコネクト2050で結合された第1プロセッサ2070および第2プロセッサ2080を含む。図20に示すように各プロセッサ2070、2080はプロセッサ2300の何らかのバージョンであってよい。
代替的に、1以上のプロセッサ2070、2080は、アクセラレータまたはフィールドプログラマブルゲートアレイなど、プロセッサ以外の要素であってよい。
2つのプロセッサ2070、2080のみが示されているが、本願発明の態様はこのことに限定されない。他の実施形態において、1以上の追加的な処理要素が任意のプロセッサに存在してもよい。
プロセッサ2070はさらに、集積メモリコントローラハブ(IMC)2072、およびポイントツーポイント(P−P)2076、2078を含んでもよい。同様に、第2プロセッサ2080は、IMC2082およびP−Pインタフェース2086、2088を含んでもよい。プロセッサ2070、2080は、PtPインタフェース回路2078、2088を用いてポイントツーポイント(PtP)インタフェース2050を介してデータを交換してもよい。図20に示すようにIMC2072、2082は各プロセッサを、対応するメモリ、つまり各プロセッサにローカルに取り付けられた主メモリの一部であってもよいメモリ2042およびメモリ2044に結合する。
プロセッサ2070、2080はそれぞれ、ポイントツーポイントインタフェース回路2076、2094、2086、2098を用いて個々のP−Pインタフェース2052、2054を介しチップセット2090とデータを交換してもよい。またチップセット2090は、高性能グラフィックインタフェース2039を介して高性能グラフィック回路2038とデータを交換してもよい。
プロセッサが低電力モードにされた場合、いずれか、または両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納されるように、共有キャッシュ(図示せず)は、両プロセッサ外でいずれかのプロセッサに含まれ、かつ、P−Pインターコネクトを介しプロセッサと接続されていてもよい。
チップセット2090は、インタフェース2096を介して第1バス2016に結合されていてもよい。一実施形態において、第1バス2016は、Peripheral Component Interconnect(PCI)バス、或いは、PCI Expressバスまたは他の第3世代I/Oインターコネクトバスなどのバスであってもよい。ただし、本願発明の態様はこのことに限定されない。
図20に示すように、第1バス2016を第2バス2020へ結合するバスブリッジ2018と併せて、様々なI/Oデバイス2014が第1バス2016に結合されていてもよい。一実施形態において、第2バス2020はlow pin count(LPC)バスであってもよい。一実施形態において、キーボード/マウス2022、通信デバイス2026、並びに、ディスクドライブまたは、コード2030を含んでよい他の大容量記憶装置などのデータ格納ユニット2028など様々なデバイスが第2バス2020に結合されていてもよい。さらに、オーディオI/O2024が第2バス2020に結合されていてもよい。なお他のアーキテクチャを用いることも可能である。例えば、図20のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他の同様のアーキテクチャを実装してもよい。
図21は、本願発明の実施形態に係る第3システム2100を示すブロック図である。図20および図21において同様の要素は、同様の参照符号が付されており、図20の特定の態様は、図21の他の態様を曖昧にすることを避けるべく図21において省略されている。
図21は、処理要素2070、2080がそれぞれ集積メモリ−I/O制御ロジック(「CL」)2072、2082を含んでよいことを示す。少なくとも一実施形態において、CL2072、2082は図19および図20に関連して上述したようなメモリコントローラハブロジック(IMC)を含んでもよい。加えて、CL2072、2082はI/O制御ロジックも含んでよい。図21は、メモリ2042、2044のみがCL2072、2082に結合されているのではなく、I/Oデバイス2114も制御ロジック2072、2082に結合されていることを示す。レガシーI/Oデバイス2115がチップセット2090に結合されている。
図22は、本願発明の実施形態に係るSoC2200のブロック図を示す。同様の要素には同様の参照符号が付されている。また破線の四角はより高度なSoCの、任意で用いられる特徴を示す。図22において、インターコネクトユニット2202は、1以上のコア2302A〜Nからなるセットおよび共有キャッシュユニット2306を含むアプリケーションプロセッサ2210と、システムエージェントユニット2310と、バスコントローラユニット2321と、集積メモリコントローラユニット2314と、集積グラフィックロジック2308、スチールカメラ、および/またはビデオカメラ機能を提供するイメージプロセッサ2224、ハードウェアオーディオアクセラレーションを提供するオーディオプロセッサ2226、および、ビデオエンコード/デコードアクセラレーションを提供するビデオプロセッサ2228を含みうる1以上のメディアプロセッサ2220からなるセットと、スタティックランダムアクセスメモリ(SRAM)ユニット2230と、ダイレクトメモリメモリアクセス(DMA)ユニット2232と、1以上の外部ディスプレイに結合されるディスプレイユニット2240とに結合されている。
本明細書で開示するメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装アプローチの組み合わせにより実施されてもよい。本願発明の実施形態は、少なくとも1つのプロセッサ、記憶システム(揮発性、および非揮発性のメモリ、および/または記憶要素を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを備えるプログラム可能なシステムで実行されるコンピュータプログラムまたはプログラムコードとして実施されてもよい。
プログラムコードは、本明細書で開示される機能を実行し、出力情報を生成する入力データに適用されてもよい。出力情報は、公知の方式で、1以上の出力デバイスに適用されてもよい。この適用の目的において、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途集積回路(ASIC)、またはマイクロプロセッサなどのプロセッサを有する何らかのシステムを含む。
プログラムコードは、処理システムと通信を行う高水準の手続き型プログラミング言語またはオブジェクト指向のプログラミング言語で実施されてもよい。またプログラムコードは、所望される場合、アセンブリ言語または機械言語で実施されてもよい。事実、本明細書で開示されるメカニズムは、何らかの特定のプログラミング言語に限定されない。いずれの場合であっても、言語はコンパイラ型言語、またはインタープリタ型言語であってもよい。
少なくとも1つの実施形態の1以上の態様は、機械によって読み出されると当該機械に本明細書で開示される技術を実施するロジックを作成させる、プロセッサ内の様々なロジックを表す機械可読媒体に格納された表現命令によって実施されてもよい。「IPコア」とし知られるそのような表現は、有形の機械可読媒体に格納され、ロジックまたはプロセッサを実際に作成する製造機械にロードされるべく様々な顧客または製造施設に提供されてもよい。
そのような機械可読媒体には、これらに限定されるわけではないが、機械またはデバイスによって製造または形成される、ハードディスク、フロッピー(登録商標)ディスク、光学式ディスク(コンパクトディスク読み取り専用メモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RW)、および光磁気ディスクなどを含む他の何らかのタイプのディスク、リードオンリーメモリ(ROM)などの半導体デバイス、ダイナミックランダムアクセスメモリ(DRAM)などのランダムアクセスメモリ(RAM)、スタティックランダムアクセスメモリ(SRAM)、消去可能プログラム可能リードオンリーメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラム可能リードオンリーメモリ(EEPROM)、磁気または光学式カード、または、電子命令を格納するのに適した他の何らかのタイプの媒体などの記憶媒体を含む物品の非一時的な有形構造を含みうる。
したがって、本願発明の実施形態は、本明細書で説明される構造、回路、装置、プロセッサ、および/またはシステム特徴を定めるベクトルフレンドリーな命令フォーマットの命令を保持する、またはHardware Description Language(HDL)などの設計データを保持する非一時的有形機械可読媒体も含む。そのような実施形態は、プログラム製品とも呼ばれ得る。
場合によっては、命令コンバータを用いて、ソース命令セットからターゲット命令セットへ命令が変換される。例えば、命令コンバータは、命令をコアによって処理される1以上の他の命令にトランスレートする(スタティックバイナリトランスレーション、ダイナミックコンパイルを含むダイナミックバイナリトランスレーションを用いて)、モーフィングする、エミュレートする、または変換してもよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせによって実施されてもよい。命令コンバータは、プロセッサ上、プロセッサ外、または一部がプロセッサ上で一部がプロセッサ外であってもよい。
図24は、本願発明の実施形態に係る、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令コンバータの利用を対比するブロック図である。示される実施形態において、命令コンバータはソフトウェア命令コンバータであるが、代替的に、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実施されてもよい。図24は、少なくとも1つのx86命令セットコアを備えるプロセッサ2416によりネイティブに実行され得るx86バイナリコード2406を生成するべくx86コンパイラ2404を用いてコンパイルされている高水準言語2402のプログラムを示す(コンパイルされた命令のうちいくつかがベクトルフレンドリーな命令フォーマットであるものと想定されている)。少なくとも1つのx86命令セットコアを備えるプロセッサ2416は、(1)Intelx86命令セットコアの命令の実質的な部分、または、(2)少なくとも1つのx86命令セットコアを備えるIntelプロセッサと実質的に同じ結果を得るべく、少なくとも1つのx86命令セットコアを備えるIntelプロセッサで実行されることを目的とするアプリケーションのオブジェクトコードバージョンまたは他のソフトウェアに適合して実行する、または処理することにより、少なくとも1つのx86命令セットコアを備えるIntelプロセッサと実質的に同じ機能を実行出来るプロセッサを表す。x86コンパイラ2404は、少なくとも1つのx86命令セットコアを備えるプロセッサ2416で追加のリンケージ処理あり、またはなしで実行され得るx86バイナリコード2406(例えばオブジェクトコード)を生成するべく動作可能なコンパイラを表す。同様に、図24は、少なくとも1つのx86命令セットコアを備えないプロセッサ2414(例えば、米国カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行するコアを備えるプロセッサ、および/または米国カリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行するコアを備えるプロセッサなど)によってネイティブに実行され得る代替的な命令セットバイナリコード2410を生成するべく、代替的な命令セットコンパイラ2408を用いてコンパイルされ得る高水準言語2402のプログラムを示す。命令コンバータ2412を用いて、x86命令セットコアを備えないプロセッサ2414によってネイティブに実行され得るコードへx86バイナリコード2406を変換する。この変換されたコードが、代替的な命令セットバイナリコード2410と同じであることは考えられにくい。なぜなら、このことに対応可能な命令コンバータは作成しにくいからである。しかし、変換されたコードは、一般的な動作を実行し、代替的な命令セットからの命令によって構成されているであろう。よって、命令コンバータ2412は、エミュレーション、シミュレーション、または他の何らかの処理により、プロセッサ、或いは、x86命令セットプロセッサまたはコアを有さない他の電子デバイスがx86バイナリコード2406を実行することを可能とする、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。
本明細書で開示されるベクトルフレンドリーな命令フォーマットの命令の特定の演算は、ハードウェアコンポーネントで実行されてもよく、当該命令をプログラムされた回路または他のハードウェアコンポーネントによるそれらの演算の実行を引き起こす、または少なくともそのような結果をもたらすのに用いられる機械可読命令として実施され得る。回路には、ほんの数例を上げると、汎用プロセッサ、特定用途プロセッサ、またはロジック回路が含まれる。また演算は、場合によっては、ハードウェアとソフトウェアとの組み合わせによって実施されてもよい。実行ロジック、および/またはプロセッサは、命令によって特定される結果オペランドを格納するよう指示する機械命令、または当該機械命令から抽出された1以上の制御信号に応答する特定的な、または特定の回路または他のロジックを含んでもよい。例えば、本明細書で開示される命令の実施形態は、図14A〜図22の1以上のシステムで実行されてもよく、ベクトルフレンドリーな命令フォーマットの命令の実施形態は、システムによって実行されるプログラムコードに格納されてもよい。加えて、これら図面の処理要素は、本明細書で詳述されたパイプライン、および/またはアーキテクチャ(例えば、インオーダーアーキテクチャ、およびアウトオブオーダーアーキテクチャ)のうち1つを用いてもよい。例えば、インオーダーアーキテクチャのデコードユニットは、命令をデコードし、デコードされた命令をベクトルユニットまたはスカラユニットに渡すなどしてもよい。
上記の説明は、本願発明の好ましい実施形態を示すことを目的として提供された。上記の説明から、成長が早くさらなる進歩の予測が容易ではない当技術分野において特に、本願発明は構造に関して、また詳細部分において、当業者によって本願発明の原理から逸脱することなく、添付の請求項およびそれらの同等物の範囲内で本願発明に修正が加えられ得ることは明らかである。例えば、方法の1以上の動作は組み合わせられ得る、またはさらに分割され得る。
<代替的な実施形態>
ベクトルフレンドリーな命令フォーマットがネイティブに実行される実施形態を説明してきたが、代替的な実施形態においては、異なる命令セットを実行する(例えば、米国カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行するプロセッサ、米国カリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行するプロセッサなどの)プロセッサ上で実行されるエミュレーションレイヤーを介してベクトルフレンドリーな命令フォーマットを実行してもよい。また、図中のフロー図は本願発明の特定の実施形態によって実行される動作の特定の順序を示すが、そのような順序は例示であることが理解されるべきである(例えば、代替的な実施形態においては、それらの動作を異なる順序で実行する、特定の動作を組み合わせる、または特定の動作を同時に行うなど)。
以上の説明において、説明を目的とし、本願発明の実施形態をよりよく理解いただけるように様々な特定の詳細を示してきた。しかし当業者であれば、それら特定の詳細のいくつかを用いずとも1以上の他の実施形態が実施可能であることを理解されよう。説明された特定の実施形態は、本願発明を限定するのではなく、本願発明の実施形態を例示するべく示されている。本願発明の態様は上記された特定の例によっては定められず、以下の請求項によってのみ定められる。
本実施形態の例を下記の各項目として示す。
[項目1]
コンピュータプロセッサでギャザーストライド命令を実行する方法であって、
デスティネーションレジスタオペランド、書き込みマスク、ならびに、スケール値、ベース値、およびストライド値を含むメモリソースアドレス情報を含む前記ギャザーストライド命令をフェッチする段階と、
フェッチされた前記ギャザーストライド命令をデコードする段階と、
フェッチされた前記ギャザーストライド命令を実行して、前記書き込みマスクのビット値の少なくとも一部に基づいて、条件付きで、メモリからストライドされたデータ要素を前記デスティネーションレジスタに格納する段階と
を備える方法。
[項目2]
前記実行する段階は、
前記ベース値を利用して決定される、前記メモリ内の第1のデータ要素のアドレスを生成する段階と
前記メモリ内の第1のデータ要素に対応している、前記書き込みマスクの第1のマスクビット値が、前記メモリ内の第1のデータ要素が、前記デスティネーションレジスタの対応する位置に格納されるべきであることを示しているかを判断する段階と
を含み、
前記メモリ内の第1のデータ要素に対応している、前記書き込みマスクの前記第1のマスクビット値が、前記第1のデータ要素が格納されるべきであることを示していない場合、前記データ要素を、前記デスティネーションレジスタの前記対応する位置に、変更せずに放置して、
前記メモリ内の第1のデータ要素に対応している、前記書き込みマスクの前記第1のマスクビット値が、前記第1のデータ要素が格納されるべきであることを示している場合、前記第1のデータ要素を、前記デスティネーションレジスタの前記対応する位置に格納して、前記第1のマスクビットをクリアして、格納に成功したことを示す、項目1に記載の方法。
[項目3]
前記第1のマスクビット値は、前記書き込みマスクの最下位ビットであり、前記デスティネーションレジスタの前記第1のデータ要素は、前記デスティネーションレジスタの最下位データ要素である、項目2に記載の方法。
[項目4]
前記実行する段階は、
前記メモリ内の第1のデータ要素に対するフォルトがあると判断する段階と、
前記実行する段階を中断する段階と
をさらに含む、項目2または3に記載の方法。
[項目5]
前記実行する段階は、
前記スケール値、ベース値、およびストライド値を利用して決定される、前記メモリ内の第2のデータ要素のアドレスを生成する段階と、
前記メモリ内の第2のデータ要素に対応している、前記書き込みマスクの第2のマスクビット値が、前記メモリ内の第2のデータ要素が、前記デスティネーションレジスタの対応する位置に格納されるべきであることを示しているかを判断する段階と
をさらに含み、
前記メモリ内の第2のデータ要素に対応している、前記書き込みマスクの前記第2のマスクビット値が、前記第2のデータ要素が格納されるべきであることを示していない場合、前記第2のデータ要素を、前記デスティネーションレジスタの前記対応する位置に、変更せずに放置して、
前記メモリ内の第2のデータ要素に対応している、前記書き込みマスクの前記第2のマスクビット値が、前記第2のデータ要素が格納されるべきであることを示している場合、前記第2のデータ要素を、前記デスティネーションレジスタの前記対応する位置に格納して、前記第2のマスクビットをクリアして、格納に成功したことを示し、前記第2のデータ要素は、前記第1のデータ要素からデータ要素X個分、離れており、Xは前記ストライド値である、項目2から4のいずれか一項に記載の方法。
[項目6]
前記デスティネーションレジスタの前記データ要素のサイズは32ビットであり、前記書き込みマスクは、専用の16ビットレジスタである、項目1から5のいずれか一項に記載の方法。
[項目7]
前記デスティネーションレジスタの前記データ要素のサイズは64ビットであり、前記書き込みマスクは16ビットレジスタであり、前記書き込みマスクの最下位8ビットが、前記メモリのどのデータ要素を前記デスティネーションレジスタに格納すべきかを決定している、項目1から5のいずれか一項に記載の方法。
[項目8]
前記デスティネーションレジスタの前記データ要素のサイズは32ビットであり、前記書き込みマスクはベクトルレジスタであり、前記書き込みマスクの各データ要素の符号ビットが、マスクビットである、項目1から5のいずれか一項に記載の方法。
[項目9]
前記デスティネーションレジスタ内に格納される、前記メモリ内のデータ要素はすべて、前記デスティネーションレジスタに格納される前にアップコンバージョンされる、項目1から8のいずれか一項に記載の方法。
[項目10]
コンピュータプロセッサでスキャッタストライド命令を実行する方法であって、
ソースレジスタオペランド、書き込みマスク、ならびに、スケール値、ベース値、およびストライド値を含むメモリデスティネーションアドレス情報を含む前記スキャッタストライド命令をフェッチする段階と、
前記スキャッタストライド命令をデコードする段階と、
前記スキャッタストライド命令を実行して、前記書き込みマスクのビット値の少なくとも一部に基づいて、条件付きで、前記ソースレジスタからのデータ要素を前記メモリのストライドされた位置に格納する段階と
を備える方法。
[項目11]
前記実行する段階は、
前記ベース値を利用して決定される、前記メモリ内の第1の位置のアドレスを生成する段階と、
前記書き込みマスクの第1のマスクビット値が、前記ソースレジスタの第1のデータ要素が、前記メモリの、前記第1の位置について生成された前記アドレスに格納されるべきであることを示しているかを判断する段階と
を含み、
前記書き込みマスクの第1のマスクビット値が、前記ソースレジスタの第1のデータ要素が、前記メモリの、前記第1の位置について生成された前記アドレスに格納されるべきであることを示していない場合、前記データ要素を、前記メモリの、前記第1の位置について生成された前記アドレスに、変更せずに放置して、
前記書き込みマスクの第1のマスクビット値が、前記ソースレジスタの第1のデータ要素が、前記メモリの、前記第1の位置について生成された前記アドレスに格納されるべきであることを示している場合、前記ソースレジスタの前記第1のデータ要素を、前記メモリの、前記第1の位置について生成された前記アドレスに格納して、前記第1のマスクビットをクリアして、格納に成功したことを示す、項目10に記載の方法。
[項目12]
前記第1のマスクビット値は、前記書き込みマスクの最下位ビットであり、前記第1のデータ要素は、前記ソースレジスタの最下位データ要素である、項目11に記載の方法。
[項目13]
前記実行する段階は、
前記スケール値、ベース値、およびストライド値を利用して決定され、前記第1の位置から、X個のデータ要素分離れた、前記メモリ内の第2の位置のアドレスを生成する段階と、
前記書き込みマスクの第2のマスクビット値が、前記ソースレジスタの第2のデータ要素が、前記メモリの、前記第2の位置について生成された前記アドレスに格納されるべきであることを示しているかを判断する段階と
を含み、
前記書き込みマスクの第2のマスクビット値が、前記ソースレジスタの第2のデータ要素が、前記メモリの、前記第2の位置について生成された前記アドレスに格納されるべきであることを示していない場合、前記データ要素を、前記メモリの、前記第2の位置について生成された前記アドレスに、変更せずに放置して、
前記書き込みマスクの第2のマスクビット値が、前記ソースレジスタの第2のデータ要素が、前記メモリの、前記第2の位置について生成された前記アドレスに格納されるべきであることを示している場合、前記ソースレジスタの前記第2のデータ要素を、前記メモリの、前記第2の位置について生成された前記アドレスに格納して、前記第2のマスクビットをクリアして、格納に成功したことを示し、Xは、前記ストライド値である、項目11または12に記載の方法。
[項目14]
前記ソースレジスタの前記データ要素のサイズは32ビットであり、前記書き込みマスクは、専用の16ビットレジスタである、項目10から13のいずれか一項に記載の方法。
[項目15]
前記ソースレジスタの前記データ要素のサイズは64ビットであり、前記書き込みマスクは16ビットレジスタであり、前記書き込みマスクの最下位8ビットが、前記ソースレジスタのどのデータ要素を前記メモリに格納すべきかを決定している、項目10から13のいずれか一項に記載の方法。
[項目16]
前記ソースレジスタの前記データ要素のサイズは32ビットであり、前記書き込みマスクはベクトルレジスタであり、前記書き込みマスクの各データ要素の符号ビットが、マスクビットである、項目10から13のいずれか一項に記載の方法。
[項目17]
ハードウェアデコーダと、
実行ロジックと
を備える装置であって、
前記ハードウェアデコーダは、
デスティネーションレジスタオペランド、書き込みマスク、ならびに、スケール値、ベース値、およびストライド値を含むメモリソースアドレス情報を含むギャザーストライド命令と、
ソースレジスタオペランド、書き込みマスク、ならびに、スケール値、ベース値、およびストライド値を含むメモリデスティネーションアドレス情報を含むスキャッタストライド命令とをデコードして、
前記実行ロジックは、
デコードされた前記ギャザーストライド命令および前記スキャッタストライド命令を実行して、デコードされた前記ギャザーストライド命令の実行により、前記ギャザーストライド命令の前記書き込みマスクのビット値の少なくとも一部に基づいて、条件付きで、メモリからのストライドされたデータ要素が前記デスティネーションレジスタに格納され、デコードされた前記スキャッタストライド命令の実行により、前記スキャッタストライド命令の前記書き込みマスクのビット値の少なくとも一部に基づいて、条件付きで、データ要素が前記メモリのストライドされた位置に格納される、装置。
[項目18]
前記実行ロジックは、ベクトル実行ロジックを含む、項目17に記載の装置。
[項目19]
前記ギャザーストライド命令および前記スキャッタストライド命令の少なくとも一方の前記書き込みマスクは、専用の16ビットレジスタである、項目17に記載の装置。
[項目20]
前記ギャザーストライド命令の前記ソースレジスタは、512ビットのベクトルレジスタである、項目17に記載の装置。

Claims (9)

  1. コンピュータプロセッサでギャザーストライド命令を実行する方法であって、
    デスティネーションレジスタオペランド、書き込みマスク、ならびに、スケール値、ベース値、およびストライド値を含むメモリソースアドレス情報を示す前記ギャザーストライド命令をフェッチする段階と、
    フェッチされた前記ギャザーストライド命令をデコードする段階と、
    フェッチされた前記ギャザーストライド命令を実行する段階であって、前記書き込みマスクのビット値の少なくとも一部に基づいて、条件付きで、メモリからストライドされたデータ要素を前記デスティネーションレジスタに格納する、前記実行する段階と
    を備え、
    前記実行する段階は、
    前記ギャザーストライド命令の前記書き込みマスクおよびデスティネーションレジスタが同じレジスタかの判断を行い、前記書き込みマスクおよびデスティネーションレジスタが同じレジスタである場合は、前記ギャザーストライド命令の実行を中断する段階と、
    前記メモリ内の第1のデータ要素のアドレスを生成する段階とを含み、
    前記アドレスは、前記ストライド値と、前記スケール値と、インデックスとを乗算して、前記ベース値および変位値を前記乗算された値に加算することにより決定される方法。
  2. 前記実行する段階は、
    前記ベース値を利用して決定される、前記メモリ内の前記第1のデータ要素のアドレスを生成する段階と
    前記メモリ内の第1のデータ要素に対応している、前記書き込みマスクの第1のマスクビット値が、前記メモリ内の第1のデータ要素が、前記デスティネーションレジスタの対応する位置に格納されるべきであることを示しているかを判断する段階と
    を含み、
    前記メモリ内の第1のデータ要素に対応している、前記書き込みマスクの前記第1のマスクビット値が、前記第1のデータ要素が格納されるべきであることを示していない場合、前記メモリ内の前記第1のデータ要素を前記デスティネーションレジスタの前記対応する位置に格納せずに、前記デスティネーションレジスタの前記対応する位置のデータ要素を放置して、
    前記メモリ内の第1のデータ要素に対応している、前記書き込みマスクの前記第1のマスクビット値が、前記第1のデータ要素が格納されるべきであることを示している場合、前記第1のデータ要素を、前記デスティネーションレジスタの前記対応する位置に格納して、前記第1のマスクビットをクリアして、格納に成功したことを示す、請求項1に記載の方法。
  3. 前記第1のマスクビット値は、前記書き込みマスクの最下位ビットであり、前記デスティネーションレジスタの前記第1のデータ要素は、前記デスティネーションレジスタの最下位データ要素である、請求項2に記載の方法。
  4. 前記実行する段階は、
    前記メモリ内の第1のデータ要素に対するフォルトがあると判断する段階と、
    前記実行する段階を中断する段階と
    をさらに含む、請求項2または3に記載の方法。
  5. 前記実行する段階は、
    前記スケール値、ベース値、およびストライド値を利用して決定される、前記メモリ内の第2のデータ要素のアドレスを生成する段階と、
    前記メモリ内の第2のデータ要素に対応している、前記書き込みマスクの第2のマスクビット値が、前記メモリ内の第2のデータ要素が、前記デスティネーションレジスタの対応する位置に格納されるべきであることを示しているかを判断する段階と
    をさらに含み、
    前記メモリ内の第2のデータ要素に対応している、前記書き込みマスクの前記第2のマスクビット値が、前記第2のデータ要素が格納されるべきであることを示していない場合、前記メモリ内の前記第2のデータ要素を前記デスティネーションレジスタの前記対応する位置に格納せずに、前記デスティネーションレジスタの前記対応する位置のデータ要素を放置して、
    前記メモリ内の第2のデータ要素に対応している、前記書き込みマスクの前記第2のマスクビット値が、前記第2のデータ要素が格納されるべきであることを示している場合、前記第2のデータ要素を、前記デスティネーションレジスタの前記対応する位置に格納して、前記第2のマスクビットをクリアして、格納に成功したことを示し、前記第2のデータ要素は、前記第1のデータ要素からデータ要素X個分、離れており、Xは前記ストライド値である、請求項2から4のいずれか一項に記載の方法。
  6. 前記デスティネーションレジスタの前記データ要素のサイズは32ビットであり、前記書き込みマスクはベクトルレジスタであり、前記書き込みマスクの各データ要素の符号ビットが、マスクビットである、請求項1から5のいずれか一項に記載の方法。
  7. ハードウェアデコーダと、
    実行ロジックと
    を備える装置であって、
    前記ハードウェアデコーダは、
    デスティネーションレジスタオペランド、書き込みマスク、ならびに、スケール値、ベース値、およびストライド値を含むメモリソースアドレス情報を示すギャザーストライド命令と、
    ソースレジスタオペランド、書き込みマスク、ならびに、スケール値、ベース値、およびストライド値を含むメモリデスティネーションアドレス情報を示すスキャッタストライド命令とをデコードして、
    前記実行ロジックは、
    デコードされた前記ギャザーストライド命令および前記スキャッタストライド命令を実行して、デコードされた前記ギャザーストライド命令の実行により、前記ギャザーストライド命令の前記書き込みマスクのビット値の少なくとも一部に基づいて、条件付きで、メモリからのストライドされたデータ要素を前記デスティネーションレジスタに格納し、デコードされた前記スキャッタストライド命令の実行により、前記スキャッタストライド命令の前記書き込みマスクのビット値の少なくとも一部に基づいて、条件付きで、データ要素を前記メモリのストライドされた位置に格納し、
    前記実行ロジックは、前記ギャザーストライド命令の実行により、前記メモリ内の第1のデータ要素のアドレスを生成し、前記ギャザーストライド命令の前記書き込みマスクおよびデスティネーションレジスタが同じレジスタかの判断を行い、前記書き込みマスクおよびデスティネーションレジスタが同じレジスタである場合は、前記ギャザーストライド命令の実行を中断し、
    前記アドレスは、前記ストライド値と、前記スケール値と、インデックスとを乗算して、前記ベース値および変位値を前記乗算された値に加算することにより決定される装置。
  8. 前記実行ロジックは、ベクトル実行ロジックを含む、請求項7に記載の装置。
  9. 前記ギャザーストライド命令の前記デスティネーションレジスタまたは前記スキャッタストライド命令の前記ソースレジスタは、512ビットのベクトルレジスタである、請求項7に記載の装置。
JP2015226505A 2011-04-01 2015-11-19 装置および方法 Active JP6274672B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/078,891 US20120254591A1 (en) 2011-04-01 2011-04-01 Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements
US13/078,891 2011-04-01

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2014502544A Division JP5844882B2 (ja) 2011-04-01 2011-12-06 データ要素のストライドパターンギャザーおよびデータ要素のストライドパターンスキャッタのためのシステム、装置、および方法

Publications (2)

Publication Number Publication Date
JP2016040737A true JP2016040737A (ja) 2016-03-24
JP6274672B2 JP6274672B2 (ja) 2018-02-07

Family

ID=46928901

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2014502544A Expired - Fee Related JP5844882B2 (ja) 2011-04-01 2011-12-06 データ要素のストライドパターンギャザーおよびデータ要素のストライドパターンスキャッタのためのシステム、装置、および方法
JP2015226505A Active JP6274672B2 (ja) 2011-04-01 2015-11-19 装置および方法

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2014502544A Expired - Fee Related JP5844882B2 (ja) 2011-04-01 2011-12-06 データ要素のストライドパターンギャザーおよびデータ要素のストライドパターンスキャッタのためのシステム、装置、および方法

Country Status (8)

Country Link
US (2) US20120254591A1 (ja)
JP (2) JP5844882B2 (ja)
KR (1) KR101607161B1 (ja)
CN (1) CN103562856B (ja)
DE (1) DE112011105121T5 (ja)
GB (1) GB2503169B (ja)
TW (2) TWI514273B (ja)
WO (1) WO2012134555A1 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017079078A (ja) * 2011-04-01 2017-04-27 インテル コーポレイション ベクトルフレンドリ命令フォーマット及びその実行
US10157061B2 (en) 2011-12-22 2018-12-18 Intel Corporation Instructions for storing in general purpose registers one of two scalar constants based on the contents of vector write masks
KR20200083123A (ko) * 2018-12-31 2020-07-08 그래프코어 리미티드 로드-저장 명령

Families Citing this family (73)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2480296A (en) * 2010-05-12 2011-11-16 Nds Ltd Processor with differential power analysis attack protection
US20120254591A1 (en) * 2011-04-01 2012-10-04 Hughes Christopher J Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements
US9519617B2 (en) * 2011-07-14 2016-12-13 Texas Instruments Incorporated Processor with instruction variable data distribution
KR101714133B1 (ko) * 2011-09-26 2017-03-08 인텔 코포레이션 벡터 로드 및 저장에 스트라이드 및 마스킹 기능을 제공하는 명령어 및 로직
WO2013048369A1 (en) 2011-09-26 2013-04-04 Intel Corporation Instruction and logic to provide vector load-op/store-op with stride functionality
CN104011709B (zh) * 2011-12-22 2018-06-05 英特尔公司 在256位数据路径中执行jh加密散列的指令
WO2013095484A1 (en) * 2011-12-22 2013-06-27 Intel Corporation Instructions to perform jh cryptographic hashing
US20140201499A1 (en) * 2011-12-23 2014-07-17 Elmoustapha Ould-Ahmed-Vall Systems, apparatuses, and methods for performing conversion of a list of index values into a mask value
WO2013095672A1 (en) 2011-12-23 2013-06-27 Intel Corporation Multi-register gather instruction
CN104011648B (zh) * 2011-12-23 2018-09-11 英特尔公司 用于执行向量打包压缩和重复的系统、装置以及方法
US10055225B2 (en) * 2011-12-23 2018-08-21 Intel Corporation Multi-register scatter instruction
EP2798477A4 (en) * 2011-12-29 2015-08-26 Intel Corp SIGNALING AND MANAGING AGGREGATE PAGE DEFAULT
US10225306B2 (en) 2011-12-29 2019-03-05 Koninklijke Kpn N.V. Controlled streaming of segmented content
WO2013101210A1 (en) * 2011-12-30 2013-07-04 Intel Corporation Transpose instruction
US9569211B2 (en) 2012-08-03 2017-02-14 International Business Machines Corporation Predication in a vector processor
US9575755B2 (en) 2012-08-03 2017-02-21 International Business Machines Corporation Vector processing in an active memory device
US9632777B2 (en) * 2012-08-03 2017-04-25 International Business Machines Corporation Gather/scatter of multiple data elements with packed loading/storing into/from a register file entry
US9594724B2 (en) 2012-08-09 2017-03-14 International Business Machines Corporation Vector register file
US9471317B2 (en) * 2012-09-27 2016-10-18 Texas Instruments Deutschland Gmbh Execution of additional instructions in conjunction atomically as specified in instruction field
US10049061B2 (en) * 2012-11-12 2018-08-14 International Business Machines Corporation Active memory device gather, scatter, and filter
US9244684B2 (en) 2013-03-15 2016-01-26 Intel Corporation Limited range vector memory access instructions, processors, methods, and systems
JP6444398B2 (ja) 2013-07-03 2018-12-26 コニンクリーケ・ケイピーエヌ・ナムローゼ・フェンノートシャップ セグメント化コンテンツのストリーミング
US11074169B2 (en) * 2013-07-03 2021-07-27 Micron Technology, Inc. Programmed memory controlled data movement and timing within a main memory device
KR102213668B1 (ko) 2013-09-06 2021-02-08 삼성전자주식회사 제너럴 퍼포즈 프로그래머블 컴퓨팅 디바이스에서의 멀티미디어 데이터 프로세싱 방법 및 그에 따른 데이터 프로세싱 시스템
KR102152735B1 (ko) * 2013-09-27 2020-09-21 삼성전자주식회사 그래픽 처리 장치 및 이의 동작 방법
KR102113048B1 (ko) 2013-11-13 2020-05-20 현대모비스 주식회사 마그네틱 엔코더 구조
US10114435B2 (en) 2013-12-23 2018-10-30 Intel Corporation Method and apparatus to control current transients in a processor
JP6698553B2 (ja) 2014-02-13 2020-05-27 コニンクリーケ・ケイピーエヌ・ナムローゼ・フェンノートシャップ 1つの要求メッセージに基づいたネットワーク・ノードへの多数のチャンクの要求
US9747104B2 (en) * 2014-05-12 2017-08-29 Qualcomm Incorporated Utilizing pipeline registers as intermediate storage
US10523723B2 (en) 2014-06-06 2019-12-31 Koninklijke Kpn N.V. Method, system and various components of such a system for selecting a chunk identifier
US9811464B2 (en) * 2014-12-11 2017-11-07 Intel Corporation Apparatus and method for considering spatial locality in loading data elements for execution
US9830151B2 (en) * 2014-12-23 2017-11-28 Intel Corporation Method and apparatus for vector index load and store
GB2540942B (en) 2015-07-31 2019-01-23 Advanced Risc Mach Ltd Contingent load suppression
US9875214B2 (en) * 2015-07-31 2018-01-23 Arm Limited Apparatus and method for transferring a plurality of data structures between memory and a plurality of vector registers
JP6493088B2 (ja) * 2015-08-24 2019-04-03 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US10503502B2 (en) * 2015-09-25 2019-12-10 Intel Corporation Data element rearrangement, processors, methods, systems, and instructions
GB2543303B (en) * 2015-10-14 2017-12-27 Advanced Risc Mach Ltd Vector data transfer instruction
US10152321B2 (en) * 2015-12-18 2018-12-11 Intel Corporation Instructions and logic for blend and permute operation sequences
US10467006B2 (en) * 2015-12-20 2019-11-05 Intel Corporation Permutating vector data scattered in a temporary destination into elements of a destination register based on a permutation factor
US10509726B2 (en) * 2015-12-20 2019-12-17 Intel Corporation Instructions and logic for load-indices-and-prefetch-scatters operations
US20170177359A1 (en) * 2015-12-21 2017-06-22 Intel Corporation Instructions and Logic for Lane-Based Strided Scatter Operations
US20170177360A1 (en) * 2015-12-21 2017-06-22 Intel Corporation Instructions and Logic for Load-Indices-and-Scatter Operations
US20170177349A1 (en) * 2015-12-21 2017-06-22 Intel Corporation Instructions and Logic for Load-Indices-and-Prefetch-Gathers Operations
US20170177363A1 (en) * 2015-12-22 2017-06-22 Intel Corporation Instructions and Logic for Load-Indices-and-Gather Operations
US20170192783A1 (en) * 2015-12-30 2017-07-06 Elmoustapha Ould-Ahmed-Vall Systems, Apparatuses, and Methods for Stride Load
US10289416B2 (en) 2015-12-30 2019-05-14 Intel Corporation Systems, apparatuses, and methods for lane-based strided gather
US20170192781A1 (en) * 2015-12-30 2017-07-06 Robert Valentine Systems, Apparatuses, and Methods for Strided Loads
US20170192782A1 (en) * 2015-12-30 2017-07-06 Robert Valentine Systems, Apparatuses, and Methods for Aggregate Gather and Stride
US10191744B2 (en) * 2016-07-01 2019-01-29 Intel Corporation Apparatuses, methods, and systems for element sorting of vectors
US10282204B2 (en) * 2016-07-02 2019-05-07 Intel Corporation Systems, apparatuses, and methods for strided load
US10191740B2 (en) 2017-02-28 2019-01-29 Intel Corporation Deinterleave strided data elements processors, methods, systems, and instructions
US10884750B2 (en) 2017-02-28 2021-01-05 Intel Corporation Strideshift instruction for transposing bits inside vector register
WO2018174930A1 (en) 2017-03-20 2018-09-27 Intel Corporation Systems, methods, and apparatuses for matrix add, subtract, and multiply
EP3757823B1 (en) * 2017-05-17 2023-07-05 Google LLC Low latency matrix multiply unit
US10014056B1 (en) * 2017-05-18 2018-07-03 Sandisk Technologies Llc Changing storage parameters
US11360771B2 (en) 2017-06-30 2022-06-14 Intel Corporation Method and apparatus for data-ready memory operations
WO2019009870A1 (en) 2017-07-01 2019-01-10 Intel Corporation SAVE BACKGROUND TO VARIABLE BACKUP STATUS SIZE
US10346163B2 (en) 2017-11-01 2019-07-09 Apple Inc. Matrix computation engine
US10922258B2 (en) * 2017-12-22 2021-02-16 Alibaba Group Holding Limited Centralized-distributed mixed organization of shared memory for neural network processing
US10642620B2 (en) 2018-04-05 2020-05-05 Apple Inc. Computation engine with strided dot product
US10970078B2 (en) * 2018-04-05 2021-04-06 Apple Inc. Computation engine with upsize/interleave and downsize/deinterleave options
US10649777B2 (en) * 2018-05-14 2020-05-12 International Business Machines Corporation Hardware-based data prefetching based on loop-unrolled instructions
US10846260B2 (en) * 2018-07-05 2020-11-24 Qualcomm Incorporated Providing reconfigurable fusion of processing elements (PEs) in vector-processor-based devices
US10754649B2 (en) 2018-07-24 2020-08-25 Apple Inc. Computation engine that operates in matrix and vector modes
CN112912843A (zh) * 2018-08-14 2021-06-04 优创半导体科技有限公司 具有精确中断和/或重写的向量指令
US10831488B1 (en) 2018-08-20 2020-11-10 Apple Inc. Computation engine with extract instructions to minimize memory access
US11620153B2 (en) * 2019-02-04 2023-04-04 International Business Machines Corporation Instruction interrupt suppression of overflow exception
CN113626079A (zh) * 2020-05-08 2021-11-09 安徽寒武纪信息科技有限公司 数据处理方法及装置以及相关产品
TW202215237A (zh) * 2020-09-02 2022-04-16 美商賽發馥股份有限公司 向量運算記憶體保護
US20220414049A1 (en) * 2021-06-28 2022-12-29 Silicon Laboratories Inc. Apparatus for Array Processor and Associated Methods
US20220414050A1 (en) * 2021-06-28 2022-12-29 Silicon Laboratories Inc. Apparatus for Memory Configuration for Array Processor and Associated Methods
US20220413850A1 (en) * 2021-06-28 2022-12-29 Silicon Laboratories Inc. Apparatus for Processor with Macro-Instruction and Associated Methods
CN114546488B (zh) * 2022-04-25 2022-07-29 超验信息科技(长沙)有限公司 一种向量跨步指令的实现方法、装置、设备及存储介质

Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61290570A (ja) * 1985-06-17 1986-12-20 インタ−ナショナル ビジネス マシ−ンズ コ−ポレ−ション ベクトル処理方法
JPH10207870A (ja) * 1996-10-18 1998-08-07 Samsung Electron Co Ltd ベクトルプロセッサプログラミング、及びベクトルプロセッサとriscプロセッサを備える非対称二重プロセッサの並列プログラミングにおけるコンピュータプログラム生成方法
JPH10307814A (ja) * 1997-05-07 1998-11-17 Kofu Nippon Denki Kk ベクトル処理装置
US5940876A (en) * 1997-04-02 1999-08-17 Advanced Micro Devices, Inc. Stride instruction for fetching data separated by a stride amount
JP2002024205A (ja) * 2000-07-12 2002-01-25 Nec Corp ベクトルスキャタ命令制御回路及びベクトル型情報処理装置
JP2005038185A (ja) * 2003-07-15 2005-02-10 Nec Computertechno Ltd ベクトル処理装置
US20050055543A1 (en) * 2003-09-05 2005-03-10 Moyer William C. Data processing system using independent memory and register operand size specifiers and method thereof
JP2007505373A (ja) * 2003-09-08 2007-03-08 フリースケール セミコンダクター インコーポレイテッド Simdオペレーションを実行するデータ処理システム及び方法
US20090172365A1 (en) * 2007-12-27 2009-07-02 Doron Orenstien Instructions and logic to perform mask load and store operations
US20090172364A1 (en) * 2007-12-31 2009-07-02 Eric Sprangle Device, system, and method for gathering elements from memory
US20090172349A1 (en) * 2007-12-26 2009-07-02 Eric Sprangle Methods, apparatus, and instructions for converting vector data
JP2011134318A (ja) * 2009-12-22 2011-07-07 Intel Corp 複数のデータ・エレメントの収集及び分散
JP2014513340A (ja) * 2011-04-01 2014-05-29 インテル・コーポレーション データ要素のストライドパターンギャザーおよびデータ要素のストライドパターンスキャッタのためのシステム、装置、および方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6539470B1 (en) * 1999-11-16 2003-03-25 Advanced Micro Devices, Inc. Instruction decode unit producing instruction operand information in the order in which the operands are identified, and systems including same
US6532533B1 (en) * 1999-11-29 2003-03-11 Texas Instruments Incorporated Input/output system with mask register bit control of memory mapped access to individual input/output pins
US6807622B1 (en) * 2000-08-09 2004-10-19 Advanced Micro Devices, Inc. Processor which overrides default operand size for implicit stack pointer references and near branches
KR100877138B1 (ko) * 2004-03-29 2009-01-09 고쿠리츠 다이가쿠 호진 교토 다이가쿠 데이터 처리장치, 데이터 처리 프로그램, 및 데이터 처리프로그램을 기록한 기록매체
US8211826B2 (en) * 2007-07-12 2012-07-03 Ncr Corporation Two-sided thermal media
US9513905B2 (en) * 2008-03-28 2016-12-06 Intel Corporation Vector instructions to enable efficient synchronization and parallel reduction operations

Patent Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61290570A (ja) * 1985-06-17 1986-12-20 インタ−ナショナル ビジネス マシ−ンズ コ−ポレ−ション ベクトル処理方法
JPH10207870A (ja) * 1996-10-18 1998-08-07 Samsung Electron Co Ltd ベクトルプロセッサプログラミング、及びベクトルプロセッサとriscプロセッサを備える非対称二重プロセッサの並列プログラミングにおけるコンピュータプログラム生成方法
US5940876A (en) * 1997-04-02 1999-08-17 Advanced Micro Devices, Inc. Stride instruction for fetching data separated by a stride amount
JPH10307814A (ja) * 1997-05-07 1998-11-17 Kofu Nippon Denki Kk ベクトル処理装置
JP2002024205A (ja) * 2000-07-12 2002-01-25 Nec Corp ベクトルスキャタ命令制御回路及びベクトル型情報処理装置
JP2005038185A (ja) * 2003-07-15 2005-02-10 Nec Computertechno Ltd ベクトル処理装置
US20050055543A1 (en) * 2003-09-05 2005-03-10 Moyer William C. Data processing system using independent memory and register operand size specifiers and method thereof
JP2007505373A (ja) * 2003-09-08 2007-03-08 フリースケール セミコンダクター インコーポレイテッド Simdオペレーションを実行するデータ処理システム及び方法
US20090172349A1 (en) * 2007-12-26 2009-07-02 Eric Sprangle Methods, apparatus, and instructions for converting vector data
US20090172365A1 (en) * 2007-12-27 2009-07-02 Doron Orenstien Instructions and logic to perform mask load and store operations
US20090172364A1 (en) * 2007-12-31 2009-07-02 Eric Sprangle Device, system, and method for gathering elements from memory
JP2011134318A (ja) * 2009-12-22 2011-07-07 Intel Corp 複数のデータ・エレメントの収集及び分散
JP2014513340A (ja) * 2011-04-01 2014-05-29 インテル・コーポレーション データ要素のストライドパターンギャザーおよびデータ要素のストライドパターンスキャッタのためのシステム、装置、および方法

Non-Patent Citations (7)

* Cited by examiner, † Cited by third party
Title
"ARM Compiler toolchain Version 4.1 Assembler Reference", [ONLINE], JPN6015025711, 29 July 2011 (2011-07-29), pages 3 - 39, ISSN: 0003698211 *
"IA-64 Application Developer's Architecture Guide", [ONLINE], JPN6015025713, May 1999 (1999-05-01), pages 7 - 111, ISSN: 0003698212 *
SXシステム ソフトウェア SUPER-UX Cプログラミングの手引 G1AF02-7, vol. 第7版, JPN6016043820, December 1998 (1998-12-01), JP, pages 120 - 121, ISSN: 0003698209 *
インテル・アーキテクチャ・ソフトウェア・ディベロッパーズ・マニュアル 上巻, vol. 初版, JPN6016043821, 1997, pages 5 - 5, ISSN: 0003698210 *
大貫広幸: "x86系CPUのGNUアセンブラを理解しよう", INTERFACE, vol. 第32巻,第2号, JPN6015025709, 1 February 2006 (2006-02-01), JP, pages 75 - 85, ISSN: 0003439632 *
岡崎恵三,弘中哲夫,村上和彰,富田眞治: "『順風』:ストリームFIFO方式に基づくシングルチップ・ベクトルプロセッサ・プロトタイプ −「IF文を含む", 情報処理学会研究報告, vol. Vol:90,No:90,(90-ARC-85), JPN6014049449, 22 November 1990 (1990-11-22), JP, pages 15 - 22, ISSN: 0003439630 *
泉田正道: "x86と対比したRISCの高速化技術", 日経バイト, vol. 第106号, JPN6015025706, 16 November 1992 (1992-11-16), JP, pages 56 - 69, ISSN: 0003439631 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017079078A (ja) * 2011-04-01 2017-04-27 インテル コーポレイション ベクトルフレンドリ命令フォーマット及びその実行
US11210096B2 (en) 2011-04-01 2021-12-28 Intel Corporation Vector friendly instruction format and execution thereof
US11740904B2 (en) 2011-04-01 2023-08-29 Intel Corporation Vector friendly instruction format and execution thereof
US10157061B2 (en) 2011-12-22 2018-12-18 Intel Corporation Instructions for storing in general purpose registers one of two scalar constants based on the contents of vector write masks
KR20200083123A (ko) * 2018-12-31 2020-07-08 그래프코어 리미티드 로드-저장 명령
KR102201935B1 (ko) 2018-12-31 2021-01-12 그래프코어 리미티드 로드-저장 명령

Also Published As

Publication number Publication date
TW201525856A (zh) 2015-07-01
GB2503169B (en) 2020-09-30
TWI514273B (zh) 2015-12-21
JP5844882B2 (ja) 2016-01-20
CN103562856A (zh) 2014-02-05
JP2014513340A (ja) 2014-05-29
KR20130137702A (ko) 2013-12-17
CN103562856B (zh) 2016-11-16
TWI476684B (zh) 2015-03-11
JP6274672B2 (ja) 2018-02-07
GB2503169A (en) 2013-12-18
TW201246065A (en) 2012-11-16
US20120254591A1 (en) 2012-10-04
WO2012134555A1 (en) 2012-10-04
KR101607161B1 (ko) 2016-03-29
GB201316951D0 (en) 2013-11-06
US20150052333A1 (en) 2015-02-19
DE112011105121T5 (de) 2014-01-09

Similar Documents

Publication Publication Date Title
JP6274672B2 (ja) 装置および方法
JP6109910B2 (ja) メモリ・ソースを宛先レジスタに展開し、ソース・レジスタを宛先メモリ位置に圧縮するためのシステム、装置および方法
JP6408524B2 (ja) 書込マスクを用いて2つのソースオペランドを単一のデスティネーションに融合するシステム、装置及び方法
KR101817034B1 (ko) 반복 종속 조건을 갖는 반복들의 벡터 루프들을 구현하기 위한 명령어
JP5764257B2 (ja) レジスタをアライメントするためのシステム、装置、および方法
KR101938290B1 (ko) 히스토그램을 결정하기 위한 명령어
KR101722346B1 (ko) 적분 이미지 계산 명령어를 위한 방법 및 장치
JP5926754B2 (ja) 限定範囲ベクトルメモリアクセス命令、プロセッサ、方法、及びシステム
JP5947879B2 (ja) マスクレジスタを用いてジャンプを行うシステム、装置、および方法
JP6835436B2 (ja) マスクをマスク値のベクトルに拡張するための方法および装置
JP2021051727A (ja) グラフアプリケーション内の圧縮されたリストに効率的にアクセスするための間接参照のロード及びストアへのisaサポートのシステム及び方法
JP2017539010A (ja) ベクトル飽和ダブルワード/クワッドワードの加算を実行するための命令およびロジック
KR20160113220A (ko) 마스킹된 결과 요소들로의 전파를 이용하여 연속 소스 요소들을 마스킹되지 않은 결과 요소들에 저장하기 위한 프로세서, 방법, 시스템 및 명령어
TWI697836B (zh) 處理包括高功率及標準指令之指令集的方法與處理器
JP2018500666A (ja) ベクトルビットギャザーを実行するための方法および装置
JP2018503162A (ja) スピンループジャンプを実行するための装置および方法

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151218

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20151218

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160121

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20161031

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20161115

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170213

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170711

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20171212

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180105

R150 Certificate of patent or registration of utility model

Ref document number: 6274672

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250