JP5926754B2 - 限定範囲ベクトルメモリアクセス命令、プロセッサ、方法、及びシステム - Google Patents

限定範囲ベクトルメモリアクセス命令、プロセッサ、方法、及びシステム Download PDF

Info

Publication number
JP5926754B2
JP5926754B2 JP2014042958A JP2014042958A JP5926754B2 JP 5926754 B2 JP5926754 B2 JP 5926754B2 JP 2014042958 A JP2014042958 A JP 2014042958A JP 2014042958 A JP2014042958 A JP 2014042958A JP 5926754 B2 JP5926754 B2 JP 5926754B2
Authority
JP
Japan
Prior art keywords
memory
limited range
instruction
packed
bit
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.)
Active
Application number
JP2014042958A
Other languages
English (en)
Other versions
JP2014182807A (ja
Inventor
バレンタイン、ロバート
オウルド−アハムド−ヴァル、エルモウスタファ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2014182807A publication Critical patent/JP2014182807A/ja
Application granted granted Critical
Publication of JP5926754B2 publication Critical patent/JP5926754B2/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/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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
    • 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/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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement

Landscapes

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

Description

実施の形態は、プロセッサに関する。特に、実施形態は、メモリアクセス命令を実行するプロセッサに関する。
プロセッサは、一般に、メモリにアクセスする命令を実行するように動作可能である。例えば、プロセッサは、メモリからデータをロードし若しくは読み出すロード命令及び/又はメモリにデータをストアし若しくは書き込むストア命令を実行することができる。
或る特定の(Certain)プロセッサは、ベクトルロード命令を実行するように動作可能である。これらのベクトルロード命令は、当該技術分野ではベクトルギャザー命令又は単にギャザー命令とも呼ばれる。2011年6月に公表されたIntel (R) Advanced Vector Extensions Programming Referenceの文書参照番号319433−011は、幾つかの(some)ベクトルギャザー(VGATHER)命令を記載している。例には、VGATHERDPD、VGATHERQPD、VGATHERDPS、VGATHERQPS、VPGATHERDD、VPGATHERQD、VPGATHERDQ、及びVPGATHERQQが含まれる。これらのベクトルギャザー命令は、複数の対応するメモリインデックスを用いてメモリから複数のデータ要素をギャザーするか、読み出すか、又はロードするのに用いることができる。
本発明は、実施形態を例示するのに用いられる以下の説明及び添付図面を参照することによって最もよく理解することができる。
1つ又は複数の限定範囲ベクトルメモリアクセス命令を実行するプロセッサの一実施形態のブロック図である。
1つ又は複数の限定範囲ベクトルメモリアクセス命令を処理する命令処理装置の一実施形態のブロック図である。
限定範囲ベクトルメモリアクセス命令に応答してメモリの限定範囲にアクセスする方法の一実施形態のブロック流れ図である。
限定範囲ベクトルギャザー演算の一実施形態を示すブロック図である。
マスクされた限定範囲ベクトルギャザー演算の一実施形態を示すブロック図である。
限定範囲ベクトルスキャッター演算の一実施形態を示すブロック図である。
マスクされた限定範囲ベクトルスキャッター演算の一実施形態を示すブロック図である。
限定範囲ベクトルギャザー演算の一例示の実装の実施形態のブロック図である。
好適な一組のパックドデータレジスタの一例示の実施形態のブロック図である。
好適な一組のパックドデータ演算マスクレジスタの一例示の実施形態のブロック図である。
マスクビットの数がパックドデータ幅及びデータ要素幅に依存する64ビットパックドデータ演算マスクレジスタの一例示の実施形態を示す図である。
VEXプレフィックス、リアルオペコードフィールド、Mod R/Mバイト、SIBバイト、変位フィールド、及びIMM8を含む例示的なAVX命令フォーマットを示す図である。
図12Aからのどのフィールドがフルオペコードフィールド及びベース演算フィールドを構成するのかを示す図である。
図12Aからのどのフィールドがレジスタインデックスフィールドを構成するのかを示す図である。
本発明の実施形態による一般的なベクトルフレンドリー命令フォーマット及びそのクラスA命令テンプレートを示すブロック図である。
本発明の実施形態による一般的なベクトルフレンドリー命令フォーマット及びそのクラスB命令テンプレートを示すブロック図である。
本発明の実施形態による例示的な特定のベクトルフレンドリー命令フォーマットを示すブロック図である。 本発明の実施形態による例示的な特定のベクトルフレンドリー命令フォーマットを示すブロック図である。 本発明の実施形態による例示的な特定のベクトルフレンドリー命令フォーマットを示すブロック図である。 本発明の実施形態による例示的な特定のベクトルフレンドリー命令フォーマットを示すブロック図である。
本発明の1つの実施形態によるレジスタアーキテクチャのブロック図である。
本発明の実施形態による例示的なインオーダーパイプライン及び例示的なレジスタリネームアウトオブオーダー発行/実行パイプラインの双方を示すブロック図である。
本発明の実施形態によるプロセッサに備えられるインオーダーアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネームアウトオブオーダー発行/実行アーキテクチャコアの双方を示すブロック図である。
本発明の実施形態による単一のプロセッサコアを、オンダイ相互接続ネットワークへのその接続及びレベル2(L2)キャッシュのそのローカルサブセットとともに示すブロック図である。
本発明の実施形態による図17Aにおけるプロセッサコアの一部の拡大図である。
本発明の実施形態による、2つ以上のコアを有することができ、統合メモリコントローラーを有することができ、統合グラフィックスを有することができるプロセッサのブロック図である。
本発明の1つの実施形態によるシステムのブロック図である。
本発明の一実施形態による第1のより具体的な例示的システムのブロック図である。
本発明の一実施形態による第2のより具体的な例示的システムのブロック図である。
本発明の一実施形態によるSoCのブロック図である。
本発明の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するソフトウェア命令変換器の使用を対比するブロック図である。
本明細書では、限界範囲ベクトルメモリアクセス命令、これらの命令を実行するプロセッサ、これらの命令を処理又は実行するときにプロセッサによって実行される方法、及びこれらの命令を処理又は実行する1つ又は複数のプロセッサを組み込んだシステムが開示される。以下の説明では、多数の具体的な詳細(例えば、具体的な命令、命令フォーマット、パックドデータフォーマットプロセッサ構成、マイクロアーキテクチャの詳細、演算シーケンス等)が述べられる。しかしながら、実施形態は、これらの具体的な詳細がなくても実施することができる。それ以外の場合には、この説明の理解を分かりにくくしないように、よく知られた回路、構造、及び技法は詳細に示されていない。
図1は、1つ又は複数の限界範囲ベクトルメモリアクセス命令103を実行するように動作可能なプロセッサ100の一実施形態のブロック図である。幾つかの実施形態では、プロセッサは、汎用プロセッサ(例えば、デスクトップ、ラップトップ、タブレット、ハンドヘルドデバイス、携帯電話、及び同様のコンピューティングデバイス)とすることができる。代替的に、プロセッサは、専用プロセッサとすることができる。好適な専用プロセッサの例には、ほんの数例を挙げると、グラフィックスプロセッサ、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、コプロセッサ、デジタル信号プロセッサ(DSP)が含まれるが、これらに限定されるものではない。プロセッサは、様々な複合命令セットコンピューティング(CISC)プロセッサ、様々な縮小命令セットコンピューティング(RISC)プロセッサ、様々な超長命令語(VLIW)プロセッサ、それらの様々なハイブリッド、又は完全に他のタイプのプロセッサのうちの任意のものとすることができる。
プロセッサは、命令セットアーキテクチャ(ISA)101を有する。ISAは、プログラミングに関係したプロセッサのアーキテクチャの一部を表し、プロセッサのネイティブ命令、アーキテクチャレジスタ、データタイプ、アドレス指定モード、メモリアーキテクチャ、割込み及び例外ハンドリング、並びに外部入力及び出力(I/O)を含む。ISAは、マイクロアーキテクチャとは区別される。マイクロアーキテクチャは、ISAを実施するのに用いられる特定の設計技法を表す。
ISAは、アーキテクチャ的に可視のレジスタ(例えば、アーキテクチャレジスタファイル)106を含む。アーキテクチャレジスタは、概して、オンダイプロセッサ記憶位置を表す。アーキテクチャレジスタは、本明細書においては、単にレジスタと呼ばれる。特に別段の指定がないか又は明らかでない限り、アーキテクチャレジスタ、レジスタファイル、及びレジスタという語句は、本明細書においては、ソフトウェア及び/又はプログラマーに可視のレジスタ、及び/又はオペランドを識別するためにマクロ命令若しくはアセンブリ言語命令によって指定されるレジスタを指すのに用いられる。これらのレジスタは、所与のマイクロアーキテクチャにおける他の非アーキテクチャレジスタ又はアーキテクチャ的に可視でないレジスタ(例えば、マイクロ命令によって用いられる一時レジスタ、リオーダーバッファー、リタイアメントレジスタ等)と対照をなす。図示したレジスタは、パックドデータレジスタ107を含む。パックドデータレジスタのそれぞれは、パックドデータ、ベクトルデータ、又はSIMDデータをストアするように動作可能である。幾つかの実施の形態において、レジスタは、オプションとして、パックドデータ演算マスクレジスタ108も含むことができるが、これは必須ではない。
ISAは、プロセッサによってサポートされる命令セット101を含む。この命令セットの命令は、アセンブリ言語命令、機械レベル命令、又はマイクロ命令、又はマイクロ演算(デコーダがマクロ命令をデコードした結果得られるもの)とは対照的なマクロ命令例えば、実行のためにプロセッサに提供される命令、を表す。この命令セットは、それぞれがプロセッサに外部メモリ110の限定範囲120にアクセスさせるように動作可能な1つ又は複数の限定範囲ベクトルメモリアクセス命令103を含む。
幾つかの実施形態では、限定範囲120は、外部メモリ110の一部分又はサブセット(例えば、連続してインデックス可能な部分又はサブセット)のみを表すことができる。幾つかの実施形態では、命令(複数の場合もある)103は、オプションとして、外部メモリ110の限定範囲120内の場合によっては不連続なロケーションからデータ要素をプロセッサに読み出させるか、ロードさせるか、又はギャザーさせるように動作可能な1つ又は複数の限定範囲ベクトルギャザー命令104を含むことができる。幾つかの実施形態では、命令(複数の場合もある)103は、オプションとして、外部メモリ110の限定範囲120内の場合によっては不連続なロケーションにデータ要素をプロセッサに書き込ませるか、ストアさせるか、又はスキャッターさせるように動作可能な1つ又は複数の限定範囲ベクトルスキャッター命令105を含むことができる。様々な実施形態では、単一の限定範囲ベクトルメモリアクセス命令から複数又は多くのそのような命令まで存在し得る。
プロセッサは、実行ロジック109も備える。この実行ロジックは、限定範囲ベクトルメモリアクセス命令(複数の場合もある)103を実行又は処理するとともにこれらの命令に応答して限定範囲にアクセスする(例えば、限定範囲から要素をギャザーするか又は限定範囲に要素をスキャッターする)ように動作可能である。好適な実行ロジックの例には、実行ユニット、機能ユニット、メモリアクセスユニット、メモリ実行ユニット、ギャザーユニット、スキャッターユニット等が含まれるが、これらに限定されるものではない。
図2は、命令処理装置200の一実施形態のブロック図である。幾つかの実施形態では、命令処理装置200は、図1のプロセッサとすることもできるし、このプロセッサ内に備えることもできるし、同様のものとすることもできる。代替的に、命令処理装置200は、異なるプロセッサとすることもできるし、異なるプロセッサ内に備えることもできる。その上、図1のプロセッサは、図2のプロセッサとは異なる命令処理装置を備えることができる。
命令処理装置200は、限定範囲ベクトルメモリアクセス命令203を受信することができる。例えば、この命令は、命令フェッチユニット、命令キュー、メモリ等から受信することができる。幾つかの実施形態では、この命令は、限定範囲ベクトルギャザー命令又は限定範囲ベクトルスキャッター命令を表すことができる。
この装置は、一組のパックドデータレジスタ207を備える。幾つかの実施形態では、この装置は、オプションとして、一組のパックドデータ演算マスクレジスタ208を備えることができるが、これは必須ではない。これらのレジスタは、アーキテクチャオンプロセッサ(例えば、オンダイ)プロセッサ記憶ロケーションを表すことができる。これらのレジスタは、よく知られた技法を用いて種々のマイクロアーキテクチャにおいて種々の方法で実装することができ、どの特定のタイプの回路にも限定されるものではない。好適なタイプのレジスタの例には、専用化された物理レジスタ、レジスタリネームを用いて動的にアロケートされる物理レジスタ、及びそれらの組み合わせが含まれるが、これらに限定されるものではない。
限定範囲ベクトルメモリアクセス命令は、複数のパックドメモリインデックスを有するソースパックドメモリインデックス213を(例えば、1ビット若しくは複数ビット又はフィールドを通じて)明示的に指定することもできるし、別の方法で示す(例えば、暗黙的に示す)こともできる。幾つかの実施形態では、パックドメモリインデックスは、パックド8ビットバイトメモリインデックス又はパックド16ビットワードメモリインデックスとすることができる。従来、ベクトルギャザー命令は、通常、これよりも大幅に大きな32ビット又は64ビットのメモリインデックスを実装している。なぜならば、ベクトルギャザー命令は、メモリ210内の限定範囲220内のみからではなく、メモリ210における任意の箇所からギャザーすることができることが期待されているからである。
ベクトルギャザー命令/演算又はベクトルメモリロード命令/演算の場合、この命令は、メモリ210の限定範囲220からロード又はギャザーされたデータ要素を含む結果のパックドデータがストアされるデスティネーション記憶ロケーション215を示すことができる。ベクトルスキャッター命令/演算又はベクトルメモリストア命令/演算の場合、この命令は、メモリ210の限定範囲220に書き込まれるか又はスキャッターされる複数のデータ要素を含むソースパックドデータ214を示すことができる。図示するように、幾つかの実施形態では、ソースパックドメモリインデックス213、ソースパックドデータ214、及びデスティネーション記憶ロケーション215は、一組のパックドデータレジスタ207のうちのパックドデータレジスタとすることができる。代替的に、オプションとして、他の記憶ロケーションをこれらのうちの1つ又は複数に用いることができる。
幾つかの実施形態では、限定範囲ベクトルメモリアクセス命令203は、オプションとして、ソースパックドデータ演算マスク216を指定するか又は別の方法で示すことができるが、これは必須ではない。パックドデータ演算マスク、及びプレディケーション又は条件付き制御へのそれらの使用は、以下で更に論述する。他の実施形態は、オプションとして、マスキングもプレディケーションも伴わずに実行することができる。
図2を再び参照すると、図示した命令処理装置は、デコードロジック211(例えば、デコードユニット又はデコーダー)を備える。命令デコードロジックは、高水準機械命令又はマクロ命令(例えば、命令203)を受信してデコードし、オリジナルの高水準命令を反映し及び/又はオリジナルの高水準命令から導出された1つ又は複数の低水準マイクロ演算、マイクロコードエントリーポイント、マイクロ命令、又は他の低水準命令若しくは制御信号を出力することができる。1つ又は複数の低水準命令又は制御信号は、1つ又は複数の低水準(例えば、回路レベル又はハードウェアレベル)演算を通じて高水準命令の演算を実施することができる。デコードロジックは、様々な異なるメカニズムを用いて実施することができる。これらのメカニズムには、マイクロコード読み出し専用メモリ(ROM)、ルックアップテーブル、ハードウェア実施態様、プログラマブルロジックアレイ(PLA)、及び当該技術分野で知られている他のメカニズムが含まれるが、これらに限定されるものではない。他の実施形態では、デコードロジック211を有する代わりに、命令エミュレーター、トランスレーター、モーファー、インタープリター、又は他の命令変換ロジック(例えば、ソフトウェア、ハードウェア、ファームウェア、又は組み合わせで実施される)を用いることができる。更に他の実施形態では、命令変換ロジック及びデコードロジックの組み合わせを用いることができる。命令変換ロジックの一部又は全ては、場合によっては、別個のダイ上又はメモリ内等、命令処理装置の残りのものからオフダイに位置することができる。
図2を再び参照すると、実行ロジック209は、デコードロジック211と結合されている。この実行ロジックは、パックドデータレジスタ207とも結合され、幾つかの実施形態では、オプションとしてパックドデータ演算マスクレジスタ208とも結合されている。好適な実行ロジックの例には、実行ユニット、機能ユニット、メモリアクセスユニット、メモリ実行ユニット、ギャザーユニット、スキャッターユニット等が含まれるが、これらに限定されるものではない。実行ロジック及び/又は装置は、命令203を実行及び/又は処理し、当該命令に応答してメモリの限定範囲にアクセスするように動作可能な具体的な又は特定のロジック(例えば、回路部、トランジスタ、又は場合によってはソフトウェア及び/又はファームウェアと組み合わされる他のハードウェア)を含むことができる。幾つかの実施形態では、実行ユニットは、少なくとも幾つかの集積回路部、トランジスタ、又は半導体ダイの他の回路部若しくはハードウェアを備える。
実行ロジックは、限定範囲ベクトルメモリアクセス命令203に応答して及び/又はこの命令の結果として(例えば、命令203からデコードされるか又は別の方法で導出される1つ又は複数の制御信号に応答して)、メモリ210の限定範囲220にアクセスするように動作可能である。例えば、限定範囲ベクトルギャザー命令の一実施形態では、実行ユニットは、ソースパックドメモリインデックス213を用いて、メモリ210の限定範囲220内の場合によっては不連続なロケーションからデータ要素をギャザー又はロードし、これらのギャザー又はロードされたデータ要素をデスティネーション記憶ロケーション215にストアすることができる。限定範囲ベクトルスキャッター命令の一実施形態では、実行ユニットは、ソースパックドメモリインデックス213を用いて、ソースパックドデータ214からのデータ要素をメモリ210の限定範囲220内の場合によっては不連続なロケーションにスキャッターするか又は書き込むことができる。
幾つかの実施形態では、限定範囲ベクトルメモリアクセス命令203は、メモリ210の限定範囲220にのみアクセスするのに用いることができる。幾つかの実施形態では、これらの命令は、8ビットバイト又は16ビットワードのメモリインデックスのみを示す。従来のベクトルギャザー命令によれば、通常、メモリ内の任意の箇所からデータ要素をギャザーすることが可能になる。その結果、通常、32ビット又は64ビットのいずれかのメモリインデックスが用いられる。これらの32ビット又は64ビットのメモリインデックスは、場合によってはメモリ内の実質的に任意の箇所から又は(例えば、32ビット又は64ビットのいずれかによってアドレス指定することができる)少なくとも比較的大量のメモリからデータ要素をギャザーすることを可能にする十分なビットを有する。
しかしながら、32ビット又は64ビットのメモリインデックスを用いることの1つの可能性のある欠点は、それらの比較的大きなサイズがベクトルギャザー命令のソースオペランドとして示される単一のパックドデータレジスタ内にストアすることができるメモリインデックスの数を限定しがちであり得るということである。例えば、4つの64ビットメモリインデックスしか又は8つの32ビットメモリインデックスしか256ビットレジスタ内に収まることができない。その上、幾つかの場合には、8ビットバイトデータ要素又は16ビットワード要素等の比較的小さなデータ要素をギャザーすることが所望される場合がある。しかしながら、比較的大きなサイズのメモリインデックスは、ギャザーすることができるそのような8ビットバイト要素又は16ビットワード要素の数を限定しがちである。例えば、多くの場合、パックドデータレジスタ内に収まる32ビット又は64ビットのメモリインデックスの数と同数のデータ要素しかギャザーすることができない。その結果、多くの場合、32ビット又は64ビットのメモリインデックスの大きなサイズに部分的に起因して、これらの要素の望ましいだけの数をギャザーすることが可能でない。
幾つかの実施形態では、そのような比較的大きな32ビット又は64ビットのメモリインデックスの代わりに、8ビットバイト又は16ビットワードのメモリインデックス等の比較的小さなメモリインデックスを限定範囲ベクトルメモリアクセス命令/演算の実施形態によって用いることができる。利点として、これは、ソースパックドメモリインデックスとして単一のパックドデータレジスタにストアすることができるメモリインデックスの数を増加させるのに役立つことができる。例えば、32個の8ビットメモリインデックス又は16個の16ビットメモリインデックスは、4つのみの64ビットメモリインデックス又は8つのみの32ビットメモリインデックスの代わりに256ビットレジスタ内に収まることができる。別の例として、64個の8ビットメモリインデックス又は32個の16ビットメモリインデックスは、512ビットレジスタ内に収まることができる。それに対応して、これは、単一の限定範囲ベクトルギャザー命令/演算又は限定範囲スキャッター命令/演算の一実施形態によってギャザー又はスキャッターすることができるデータ要素の数を増加させるのに役立つことができる。
幾つかの実施形態では、これらの比較的小さな8ビットバイト又は16ビットワードのメモリインデックスは、メモリ内の任意の箇所からのデータ要素にアクセスするには不十分な場合がある。逆に、これらの小さな8ビット又は16ビットのメモリインデックスは、それよりも大きなメモリ全体(例えば、32ビット又は64ビットのメモリインデックスによってアドレス指定する必要があるもの)の限定範囲(例えば、8ビット又は16ビットのメモリインデックスによってインデックスすることが可能な連続的なサブセット)内のみのデータ要素にアクセスすることができる。幾つかの実施形態では、プロセッサによってサポートされるISAは、32ビット又は64ビットのメモリインデックスを示すとともにこれらのインデックスを用いてメモリ全体における任意の箇所からのデータ要素にアクセスする1つ又は複数の他のメモリアクセス命令(例えば、ベクトルギャザー命令)を含むことができる。
例えば、幾つかの実施形態では、8ビットメモリインデックスに対応する限定範囲は、8ビットバイトメモリインデックスによって一意にインデックスすることが可能な僅かに256個のデータ要素又は256個の記憶ロケーションからなることができる。別の例として、幾つかの実施形態では、限定範囲は、16ビットバイトメモリインデックスによって一意にインデックスすることが可能な僅かに65536個のデータ要素又は65536個の記憶ロケーションからなることができる。他の実施形態では、インデックスすることが可能なこれらのデータ要素又は記憶ロケーションの一部分又はサブセットのみを限定範囲として用いることができる(例えば、16ビットインデックスの全範囲を用いるのではなく、その範囲の一部分のみを用いることができる)。
限定範囲ベクトルメモリアクセス命令/演算は、メモリ内の任意の箇所のデータ要素にアクセスすることが可能ではないが、はるかに大きなメモリの限定範囲内のみからのデータ要素にアクセスすることが有利な場合がある様々な理由が存在する。例えば、これは、テーブル、アレイ、データ構造体、又はデータの他の配置若しくは集合体を限定範囲にストアすることができる場合であり得る。多くの場合、アルゴリズムは、テーブル、アレイ、データ構造体、又はデータの他の配置若しくは集合体内からの複数又は多くのデータ要素に同時にアクセスすることが必要な場合がある。1つの例として、このアルゴリズムは、行列を転置する場合もあるし、データを別の方法で再配置又は再構造化する場合もあり、この場合、アルゴリズムは、多くのデータ要素にアクセスすることが必要な場合がある。別の例として、アルゴリズムは、一定ストライドによって、例えば、2つごと、3つごと、4つごと、又はN個ごとのデータ要素に分割されるデータ要素にアクセスする場合がある。より一般的には、8ビットバイト又は16ビットワードのメモリインデックスによってインデックスすることができるメモリの限定範囲内にストアすることができるデータの配置又は集合体内からの複数又は多くのデータ要素にアクセスするのにアルゴリズムが用いられる場合がある多くの例が存在する。
利点として、本明細書において開示される限定範囲ベクトルメモリアクセス命令/演算の実施形態は、そのような例において用いられるとき、より小さな8ビット又は16ビットのメモリインデックスに部分的に起因して単一の命令/演算内で相対的により多くのデータ要素にアクセス(例えば、ギャザー又はスキャッター)することが可能であり得る。そのようなアクセスされるデータ要素の数を限定する傾向があるより大きなインデックスは必要とされない。なぜならば、データ要素は、メモリ内の任意の箇所ではなく限定範囲内からしかギャザーされないからである。その上、以下で更に論述するように、幾つかの実施形態では、限定範囲ベクトルメモリアクセス命令/演算は、アクセスされるデータ要素のそれぞれにシーケンシャルアクセスを用いる従来のベクトルギャザー命令/演算よりも実施効率が良く及び/又は高速であり得る(例えば、それぞれ複数のデータ要素を伴うメモリアクセスの実行をより少なくすることができるからである)。
説明を分かりにくくしないように、単純な命令処理装置200が説明されているが、この命令処理装置は、オプションとして1つ又は複数の他の従来の構成要素を備えることができる。そのような従来の構成要素の例には、命令フェッチユニット、命令スケジューリングユニット、分岐予測ユニット、命令及びデータキャッシュ、命令及びデータ変換索引バッファー(TLB)、プリフェッチバッファー、マイクロ命令キュー、マイクロ命令シーケンサー、バスインターフェースユニット、リタイアメント/コミットユニット、レジスタリネームユニット、並びにプロセッサにおいて従来用いられていた他の構成要素が含まれるが、これらに限定されるものではない。その上、実施形態は、同じ又は異なる命令セット及び/又はISAを有する複数のコア、論理プロセッサ、又は実行エンジンを有することができる。そのような構成要素の文字どおり多数の異なる組み合わせ及び構成がプロセッサに存在し、実施形態は、どの特定のそのような組み合わせにも構成にも限定されるものではない。
図3は、命令の一実施形態を処理する方法330の一実施形態のブロック流れ図である。様々な実施形態では、この方法は、汎用プロセッサ、専用プロセッサ、又は他の命令処理装置若しくはデジタルロジックデバイスが実行することができる。幾つかの実施形態では、図3の演算及び/又は方法は、図1のプロセッサ及び/又は図2の装置によって及び/又はそれらの内部において実行することができる。図1のプロセッサ及び図2の装置について本明細書において説明した構成要素、特徴、及び具体的なオプションの詳細は、図3の演算及び/又は方法にもオプションとして適用される。代替的に、図3の演算及び/又は方法は、類似のプロセッサ若しくは装置又は完全に異なるプロセッサ若しくは装置によって及び/又はそれらの内部において実行することができる。その上、図1のプロセッサ及び/又は図2の装置は、図3のものと同じか、類似するか、又は完全に異なる演算及び/又は方法を実行することができる。
この方法は、ブロック331において、限定範囲ベクトルメモリアクセス命令を受信することを含む。様々な態様では、この命令は、プロセッサ、命令処理装置、又はそれらの一部分(例えば、命令フェッチユニット、デコーダー、命令変換器等)において受信することができる。様々な態様では、この命令は、オフダイソースから(例えば、DRAMメモリ、ディスク、相互接続部等から)、又はオンダイソースから(例えば、命令キャッシュから)受信することができる。この限定範囲ベクトルメモリアクセス命令は、複数のパックドメモリインデックスを有するソースパックドメモリインデックスを示すことができる。幾つかの実施形態では、メモリインデックスは、8ビットメモリインデックス及び16ビットメモリインデックスのうちの一方とすることができる。幾つかの実施形態では、これらのメモリインデックスは、8ビットメモリインデックスとすることができる。幾つかの実施形態では、ソースパックドメモリインデックスは、少なくとも32個のメモリインデックスを含むことができる。
メモリの限定範囲内のみのメモリロケーションは、ブロック332において、限定範囲ベクトルメモリアクセス命令に応答してアクセスすることができる。幾つかの実施形態では、限定範囲は、32ビット又は64ビットの1つ又は複数のメモリアドレスをそれぞれ用いてアクセスすることができる。幾つかの実施形態では、限定範囲は、256バイトのみを含むことができる。幾つかの実施形態では、以下で更に説明するように、アクセスは、必要なデータ要素及び不必要なデータ要素の双方を含む複数のデータ要素をそれぞれロードすることができる複数のデータ要素ロードを通じて実行することができる。そのようなマルチ要素ロードは、幾つかの実施形態では、速度又は効率を改善するのに役立つことができる。幾つかの実施形態では、限定範囲全体をメモリからプロセッサの記憶ロケーション(例えば、オンダイレジスタ)にロードすることができる。
図示した方法は、アーキテクチャ的に可視の演算(例えば、ソフトウェアの視点から可視の演算)を伴う。他の実施形態では、この方法は、オプションとして、1つ又は複数のマイクロアーキテクチャ演算を含むことができる。例として、命令をアウトオブオーダーでフェッチ、デコード、スケジューリングすることができ、ソースオペランドにアクセスすることができ、マイクロアーキテクチャ演算を実行して命令の演算を実施するように実行ロジックをイネーブルすることができ、実行ロジックがマイクロアーキテクチャ演算を実行することができ、結果をプログラム順に戻す等することができる。
図4は、限定範囲ギャザー命令の一実施形態に応答して実行することができる限定範囲ギャザー演算403の一実施形態を示すブロック図である。この限定範囲ギャザー命令は、複数のパックドメモリインデックスを有するソースパックドメモリインデックス413を指定するか又は別の方法で示すことができる。図示するように、幾つかの実施形態では、メモリインデックスは、8ビットバイトメモリインデックスとすることができ、ソースパックドメモリインデックスは、512ビット幅とすることができ、64個の8ビットバイトメモリインデックスを含むことができる。
代替的に、他の実施形態では、16ビットワードメモリインデックス、又は32ビット未満の他のメモリインデックスをオプションとして用いることができる。その上、他の実施形態では、512ビット以外の他のパックドデータ幅、例えば、64ビット、128ビット、256ビット、又は1024ビットのパックドデータ幅等をオプションとして用いることができる。例として、64ビット幅、128ビット幅、及び256ビット幅が、それぞれ、8個、16個、及び32個の8ビットバイトメモリインデックス、又は16ビットワードメモリインデックスについてはそれぞれその半分をストアすることができる場合がある。図示した例では、メモリインデックスは、最下位位置(左側)から最上位位置(右側)に134,231,20,135,5,21,30,...186の値を有する。これらの値は例にすぎない。
限定範囲ベクトルギャザー演算の一実施形態は、限定範囲ギャザー命令の実施形態に応答して及び/又はこの命令の結果として実行することができる。限定範囲ベクトルギャザー演算は、メモリ410の限定範囲420からデータ要素をロード又はギャザーすることができる。前に論述したように、限定範囲は、一般的にははるかに大きなメモリ全体(例えば、32ビット又は64ビットのメモリインデックスを用いて他の命令によってインデックスすることができる)の小さなサブセット(例えば、8ビット又は16ビットのメモリインデックスによってインデックスすることが可能な連続的なサブセット)のみを表すことができる。限定範囲の大きさ又はサイズは、メモリインデックスのビットによる幅に基づくことができる。例えば、各8ビットバイトメモリインデックスは、256個の異なるロケーション又はデータ要素のうちの任意のものを一意にインデックス又はアドレス指定するように使用可能とすることができ、幾つかの実施形態では、限定範囲は、それらの256個のロケーション又はデータ要素(例えば、256バイト又は256ワード)のみを含むことができる。ギャザーされたデータ要素は、ソースパックドメモリインデックス413の対応するメモリインデックスによって示すことができる。各メモリインデックスは、対応するメモリロケーション及び/又はそのロケーションにストアされたデータ要素を指し示すことができる。例えば、図示した実施形態では、メモリインデックス134は、データ要素B1をストアする限定範囲内のメモリロケーションを指し示し、メモリインデックス231は、データ要素B2をストアする限定範囲内のメモリロケーションを指し示し、他のメモリインデックスについても以下同様である。
パックドデータ結果415は、限定範囲ベクトルギャザー命令/演算に応答して及び/又はこの命令/演算の結果としてデスティネーション記憶ロケーションにストアすることができる。1つの態様では、この命令は、デスティネーション記憶ロケーションを指定するか又は別の方法で示すことができる。幾つかの実施形態では、パックドデータ結果は、メモリ410の他の部分内からではなく限定範囲420内のみからの、場合によっては不連続な領域からギャザーされたデータ要素を含むことができる。図示するように、幾つかの実施形態では、パックドデータ結果は、512ビット幅とすることができ、64個の8ビットバイトデータ要素を含むことができる。代替的に、16ビットワード又は32ビットダブルワードのデータ要素をギャザーすることができ、より広いか又はより狭い結果パックドデータにストアすることができる。図示した例では、デスティネーションにおけるパックドデータ結果は、最下位位置(左側)から最上位位置(右側)にデータ要素B1,B2,B3,B4,B5,B6,B7,...B64をストアする。これは1つの例にすぎない。
図5は、マスクされた限定範囲ギャザー命令の一実施形態に応答して実行することができるマスクされた限定範囲ギャザー演算503の一実施形態を示すブロック図である。図5のマスクされた演算は、図4のマスクされていない演算と或る特定の類似点を有する。説明を分かりにくくしないように、図5のマスクされた演算の異なる特徴及び/又は追加の特徴を主として説明し、図4のマスクされていない演算と同様の特徴又は共通の特徴は全て繰り返されるとは限らない。しかしながら、マスクされていない演算のこれらの前述した特徴は、別段明瞭に明らかにされていない限り、オプションとして図5にも適用されることが認識されるべきである。
マスクされた限定範囲ギャザー命令は、複数のパックドメモリインデックスを有するソースパックドメモリインデックス513を指定するか又は別の方法で示すことができる。図示するように、幾つかの実施形態では、メモリインデックスは、8ビットバイトメモリインデックスとすることができ、ソースパックドメモリインデックスは、512ビット幅とすることができ、64個の8ビットバイトメモリインデックスを含むことができる。代替的に、他の実施形態では、16ビットワードメモリインデックス、又は32ビット未満の他のメモリインデックスをオプションとして用いることができる。その上、他の実施形態では、512ビット以外の他のパックドデータ幅、例えば、64ビット、128ビット、256ビット、又は1024ビット等のパックドデータ幅をオプションとして用いることができる。
幾つかの実施形態では、マスクされた限定範囲ギャザー命令は、オプションとしてソースパックドデータ演算マスク516を指定するか又は別の方法で示すことができる。このパックドデータ演算マスクは、本明細書においては、単に演算マスク、プレディケートマスク、又はマスクと呼ばれる場合もある。このマスクは、演算(例えば、ギャザー演算)を実行するか否かをマスク、プレディケート、又は条件付き制御するのに用いられるプレディケートオペランド又は条件付き制御オペランドを表すことができる。幾つかの実施形態では、マスキング又はプレディケーションは、異なるデータ要素に対する演算を別々に及び/又は他のものとは独立にプレディケート又は条件付き制御することができるように、データ要素単位の粒度とすることができる。演算マスクは、複数のマスク要素、プレディケート要素、又は条件付き制御要素を含むことができる。
1つの態様では、これらの要素を、対応するソースデータ要素及び/又は結果データ要素と1対1対応で含めることができる。図示するように、幾つかの実施形態では、各マスク要素は、単一のマスクビットとすることができる。各マスクビットの値は、演算(例えば、ギャザー演算)が実行されるか否かを制御することができる。1つの可能な規則によれば、各マスクビットは、ギャザー演算を実行するとともに結果データ要素をデスティネーション記憶ロケーションにストアすることを許可する第1の値(例えば、バイナリ1にセットされる)、又はギャザー演算を実行することを許可せず及び/又はギャザーされたデータ要素をデスティネーション記憶ロケーションにストアすることを許可しない第2の値(例えば、バイナリ0にクリアされる)を有することができる。
図示するように、ソースパックドメモリインデックス513が512ビット幅であるとともに64個の8ビットメモリインデックスを有する場合、ソースパックドデータ演算マスク516は、各ビットがプレディケートビット又はマスクビットを表す64ビット幅とすることができる。代替的に、ソースパックドデータ演算マスクは、他の幅、例えば、ソースパックドメモリインデックス513内のメモリインデックスの数(例えば、8個、16個、32個等)に等しいビットによる幅を有することができる。図示した例では、マスクビットは、最下位(左側)から最上位(右側)に1,1,0,1,1,1,0,...1である。これは1つの例にすぎない。図示した規則によれば、バイナリ0のマスクビット値は、マスクアウトされた要素を表すのに対して、バイナリ1のマスクビット値は、マスクされていない要素を示す。各マスクされていない要素について、関連付けられたギャザー演算が実行され、ギャザーされたデータ要素がパックドデータ結果515の対応するデータ要素にストアされる。各マスクビットは、対応する位置におけるメモリインデックス及び結果データ要素に対応する。例えば、この説明図では、対応する位置は、縦方向上下に整列されている。
マスクされた限定範囲ベクトルギャザー演算503の一実施形態は、マスクされた限定範囲ギャザー命令の実施形態に応答して及び/又はこの命令の結果として実行することができる。この演算は、ソースパックドデータ演算マスク516の条件付き制御を条件として、メモリ510の限定範囲520からデータ要素をロード又はギャザーすることができる。パックドデータ結果515は、マスクされた限定範囲ベクトルギャザー命令/演算に応答して及び/又はこの命令/演算の結果としてデスティネーション記憶ロケーションにストアすることができる。幾つかの実施形態では、データは、パックドデータ演算マスク内の対応するマスクビットが1にセットされている場合にのみギャザーすることができる。アスタリスク(*)は、対応するマスクビットがマスクアウトされている(例えば、図示した例では、バイナリ0にクリアされている)結果パックドデータの位置に示される。図示するように、幾つかの実施形態では、パックドデータ結果は、512ビット幅とすることができ、64個の8ビットバイトデータ要素を含むことができる。代替的に、16ビットワード又は32ビットダブルワードのデータ要素をギャザーすることができ、より広いか又はより狭い結果パックドデータにストアすることができる。図示した例では、デスティネーションにおけるパックドデータ結果は、最下位位置(左側)から最上位位置(右側)にデータ要素B1,B2,*,B4,B5,B6,*,...B64をストアする。
幾つかの実施形態では、マージングマスキング(merging−masking)を実行することができる。マージングマスキングでは、所与のデスティネーションデータ要素がマスクアウトされているとき、デスティネーション記憶ロケーションにおけるデータ要素の初期値又は既存値を変更せずに保持することができる(すなわち、演算の結果を用いて更新されない)。他の実施形態では、ゼロイングマスキング(zeroing−masking)を実行することができる。ゼロイングマスキングでは、所与のデスティネーションデータ要素がマスクアウトされているとき、この対応する所与のデスティネーションデータ要素をゼロアウトすることができるか、又は0の値を対応する所与のデスティネーションデータ要素にストアすることができる。代替的に、他の所与の値を、マスクアウトされたデスティネーションデータ要素にストアすることができる。したがって、様々な実施形態では、アスタリスク(*)によって示されるデータ要素位置は、ゼロアウトされた値を有することもできるし、ギャザー演算前のデスティネーション記憶ロケーションにおける初期のデータ要素の値を有することもできる。
図6は、限定範囲スキャッター命令の一実施形態に応答して実行することができる限定範囲スキャッター演算605の一実施形態を示すブロック図である。この限定範囲スキャッター命令は、複数のパックドメモリインデックスを有するソースパックドメモリインデックス613を指定するか又は別の方法で示すことができる。図示するように、幾つかの実施形態では、メモリインデックスは、8ビットバイトメモリインデックスとすることができ、ソースパックドメモリインデックスは、512ビット幅とすることができ、64個の8ビットバイトメモリインデックスを含むことができる。代替的に、他の実施形態では、16ビットワードメモリインデックス、又は32ビット未満の他のメモリインデックスをオプションとして用いることができる。その上、他の実施形態では、512ビット以外の他のパックドデータ幅、例えば、64ビット、128ビット、256ビット、又は1024ビット等のパックドデータ幅をオプションとして用いることができる。
限定範囲スキャッター命令は、スキャッターされる複数のパックドデータ要素を有するソースパックドデータ614も指定するか又は別の方法で示すことができる。図示するように、幾つかの実施形態では、パックドデータ要素は、8ビットバイトデータ要素とすることができ、ソースパックドデータ614は、512ビット幅とすることができ、64個のそのような8ビットバイトデータ要素を含むことができる。代替的に、他の実施形態では、16ビットワードデータ要素又は32ビットダブルワードデータ要素をオプションとして用いることができる。その上、他の実施形態では、512ビット以外のソースパックドデータの他の幅、例えば、64ビット、128ビット、256ビット、又は1024ビット等のパックドデータ幅をオプションとして用いることができる。幾つかの実施形態では、メモリインデックスの幅は、データ要素の幅と同じとすることができるが、これは必須ではない(例えば、メモリインデックス用ではなくデータ要素用に2倍の幅のレジスタを用いることができる)。
限定範囲ベクトルスキャッター演算の一実施形態は、限定範囲スキャッター命令の実施形態に応答して及び/又はこの命令の結果として実行することができる。この限定範囲ベクトルスキャッター演算は、メモリ610の限定範囲620にデータ要素をストアするか、書き込むか、又はスキャッターすることができる。本明細書の他の箇所で論述したように、限定範囲は、一般的にははるかに大きなメモリ610全体(例えば、32ビット又は64ビットのメモリインデックスを用いて他の命令によってインデックスすることができる)の小さなサブセット(例えば、8ビット又は16ビットのメモリインデックスによってインデックスすることが可能な連続的なサブセット)のみを表すことができる。限定範囲620は、本明細書の他の箇所で説明した限定範囲のオプションの特徴又は属性のうちの任意のものを有することができる。ソースパックドデータ要素614は、ソースパックドメモリインデックス613によって示され及び/又はこのインデックスから導出されたロケーションにスキャッターすることができる。各メモリインデックスは、対応するメモリロケーションを指し示すことができる。幾つかの実施形態では、データ要素は、より大きなメモリ610の他の部分内からではなく限定範囲620内のみのオプションとして/場合によっては不連続なメモリロケーションにスキャッターすることができる。例えば、図示した実施形態では、メモリインデックス134は、データ要素B1が書き込まれる限定範囲内のメモリロケーションを指し示し、メモリインデックス231は、データ要素B2が書き込まれる限定範囲内のメモリロケーションを指し示し、他のメモリインデックスについても以下同様である。
図7は、マスクされた限定範囲スキャッター命令の一実施形態に応答して実行することができるマスクされた限定範囲スキャッター演算705の一実施形態を示すブロック図である。図7のマスクされた演算は、図6のマスクされていない演算とある特定の類似点を有する。説明を分かりにくくしないように、図7のマスクされた演算の異なる特徴及び/又は追加の特徴を主として説明し、図6のマスクされていない演算と同様の特徴又は共通の特徴は全て繰り返されるとは限らない。しかしながら、マスクされていない演算の前述した特徴は、別段明瞭に明らかにされていない限り、オプションとして図7にも適用されることが認識されるべきである。
マスクされた限定範囲スキャッター命令は、複数のパックドメモリインデックスを有するソースパックドメモリインデックス713を指定するか又は別の方法で示すことができる。図示するように、幾つかの実施形態では、メモリインデックスは、8ビットバイトメモリインデックスとすることができ、ソースパックドメモリインデックスは、512ビット幅とすることができ、64個の8ビットバイトメモリインデックスを含むことができる。代替的に、他の実施形態では、16ビットワードメモリインデックス、又は32ビット未満の他のメモリインデックスをオプションとして用いることができる。その上、他の実施形態では、512ビット以外の他のパックドデータ幅、例えば、64ビット、128ビット、256ビット、又は1024ビット等のパックドデータ幅をオプションとして用いることができる。
限定範囲スキャッター命令は、スキャッターされる複数のパックドデータ要素を有するソースパックドデータ714を指定するか又は別の方法で示すこともできる。図示するように、幾つかの実施形態では、パックドデータ要素は、8ビットバイトデータ要素とすることができ、ソースパックドデータ714は、512ビット幅とすることができ、64個のそのような8ビットバイトデータ要素を含むことができる。代替的に、他の実施形態では、16ビットワードデータ要素又は32ビットダブルワードデータ要素をオプションとして用いることができる。その上、他の実施形態では、512ビット以外のソースパックドデータの他の幅、例えば、64ビット、128ビット、256ビット、又は1024ビット等のパックドデータ幅をオプションとして用いることができる。
幾つかの実施形態では、マスクされた限定範囲スキャッター命令は、オプションとしてソースパックドデータ演算マスク716を指定するか又は別の方法で示すことができる。マスク716は、本明細書の他の箇所で説明した他のパックドデータ演算マスク、プレディケートマスク、又は条件付き制御オペランドの特徴又は属性のうちの任意のものをオプションとして有することができる。図示するように、ソースパックドメモリインデックスが64個のメモリインデックスを有し及び/又はソースパックドデータが64個のデータ要素を有する場合、ソースパックドデータ演算マスク716は、各ビットが対応するデータ要素及び/又は対応する相対位置におけるメモリインデックス用のプレディケートビット又はマスクビットを表す64ビット幅とすることができる。代替的に、ソースパックドデータ演算マスクは、他の幅、例えば、メモリインデックスの数及び/又はデータ要素の数に等しいビットによる幅を有することができる。図示した規則によれば、バイナリ0のマスクビット値は、マスクアウトされた要素を表すのに対して、バイナリ1のマスクビット値は、マスクされていない要素を示す。
限定範囲ベクトルスキャッター演算の一実施形態は、限定範囲スキャッター命令の実施形態に応答して及び/又はこの命令の結果として実行することができる。この限定範囲ベクトルスキャッター演算は、より大きなメモリ710の限定範囲720にデータ要素をストアするか、書き込むか、又はスキャッターすることができる。本明細書の他の箇所で論述したように、限定範囲は、一般的にははるかに大きなメモリ全体(例えば、32ビット又は64ビットのメモリインデックスを用いて他の命令によってインデックスすることができる)の小さなサブセット(例えば、8ビット又は16ビットのメモリインデックスによってインデックスすることが可能な連続的なサブセット)のみを表すことができる。限定範囲720は、本明細書の他の箇所で説明した限定範囲のオプションの特徴又は属性のうちの任意のものを有することができる。ソースパックドデータ要素714は、ソースパックドデータ演算マスク716のプレディケートされた制御又は条件付き制御の下で、ソースパックドメモリインデックス713によって示され及び/又はこのインデックスから導出されたロケーションにスキャッターすることができる。
幾つかの実施形態では、データ要素は、より大きなメモリ710の他の部分内からではなく限定範囲720内のみのオプションとして/場合によっては不連続なメモリロケーションにスキャッターすることができる。例えば、図示した実施形態では、データ要素B1は、メモリインデックス値134によって示される限定範囲におけるロケーションに書き込むことができ、データ要素B2は、メモリインデックス値231によって示される限定範囲におけるロケーションに書き込むことができ、他のデータ要素についても以下同様である。図示した例では、メモリインデックス値20のデータ要素B3及びメモリインデックス値30のデータ要素B7は、スキャッターを実行することができないようにマスクアウトされている。これは、この説明図では、メモリインデックス値20及びメモリインデックス値30に対応するロケーションにおけるアスタリスク(*)によって示されている。幾つかの場合には、これらのメモリロケーションは、スキャッター演算前のそれらの既存の値を有する場合がある(例えば、スキャッター演算によって変更されない場合がある)。
以下の擬似コードは、限定範囲ベクトルギャザー命令/演算VXLATBの一例示の実施形態を表している。
Figure 0005926754
以下の擬似コードは、限定範囲ベクトルギャザー命令/演算VBTALXBの一例示の実施形態を表している。
Figure 0005926754
上記擬似コードにおいて、zmm1は、512ビットパックドデータレジスタを表す。レジスタzmm1は、VXLATBにはデスティネーション(DEST)として用いられ、VBTALXBにはソース(SRC)として用いられる。k1は64ビットマスクレジスタを表す。KLはマスク長を表し、VLはベクトル長を表し、これらは、いずれかの命令の(16,128)、(32,256)、(64,512)のうちの任意の1つから選択される。vm8zは、ベクトルスケールインデックスベースメモリアドレス指定を用いて指定されたメモリオペランドのベクトルアレイを表す。メモリアドレスのアレイは、512ビットZMMレジスタ内の8ビットインデックス値の個々の要素を有する共通のベースレジスタ、定数スケールファクター、及びベクトルインデックスレジスタを用いて指定される。VINDEXは、メモリインデックスのベクトルを表す。SignExtendは、メモリインデックスVINDEXに対する符号拡張演算を表す。BASE_ADDRは、ベースアドレスを表し、SCALEは、メモリアクセスにおいて一般に用いられるようなスケールを表す。シンボル←は、ストアすることを表す。i及びjは、ループカウンターである。
図8は、限定範囲ギャザー命令の一実施形態に応答して実行することができる限定範囲ベクトルギャザー演算803の一実施形態の一例示の実施態様のブロック図である。幾つかの実施形態では、演算803は、図1のプロセッサ及び/又は図2の装置によって及び/又はそれらの内部において実行することができる。代替的に、演算803は、類似のプロセッサ若しくは装置又は完全に異なるプロセッサ若しくは装置によって及び/又はそれらの内部において実行することができる。その上、図1のプロセッサ及び/又は図2の装置は、図8のものと類似するか又は完全に異なる演算を実行することができる。その上、幾つかの実施形態では、演算803の態様は、実施形態において図1のプロセッサ及び/又は図2の装置によって及び/又はそれらの内部において実行することができる図3の方法内にオプションとして組み込むことができる。
限定範囲ギャザー命令は、ソースパックドメモリインデックス813及びデスティネーション記憶ロケーション815を指定するか又は別の方法で示すことができる。図示するように、幾つかの実施形態では、メモリインデックスは、8ビットバイトメモリインデックスとすることができるが、これは必須ではない。図示した例では、これらのメモリインデックスは、最下位位置(左側)から最上位位置(右側)に0,50,100,150,200の値を有する。これらの値は例にすぎないが、全ての値は、バイトインデックスによってインデックスすることが可能な0〜255の範囲内にあることに留意されたい。
実行ロジック809の一実施形態は、限定範囲ベクトルギャザー演算803を実行することができる。前に論述した実施形態と同様に、この演算は、メモリ810の限定範囲820内のみからメモリインデックスによって示されたデータ要素をギャザーし、ギャザーされたデータ要素を、デスティネーション記憶ロケーション815における対応する結果データ要素にストアすることができる。図示した例に示すように、メモリインデックス0、50、100、150、200は、限定範囲における値A、B、C、D、Eを有するデータ要素を示すことができ、これらの値A、B、C、D、Eは、デスティネーション記憶ロケーションの対応する結果データ要素にストアすることができる。限定範囲は、本明細書の他の箇所で述べたオプションの属性のうちの任意のものを有することができる。
ベクトルギャザー命令を実施する1つの方法は、各データ要素を別々のロード演算(例えば、マイクロ演算)を通じて別々に又は個々にロード又はギャザーすることである。例えば、8つのロード演算が、シーケンシャルに1つずつ実行されて、8つのデータ要素をギャザーすることができる。そのようなシーケンシャルなロード演算は、一般に完了するのに大量の時間を要する傾向がある。また、これらのシーケンシャルなロード演算中、ページフォールトが潜在的に発生する場合がある。その結果、プロセッサは、一般に、ロード演算の全てを追跡することができ、そのようなページフォールトが偶然に発生した場合にギャザー命令の完了を監視することができる必要がある。
しかしながら、幾つかの実施形態では、単一のデータ要素をロード又はギャザーするのではなく、1つのロード演算当たり複数のデータ要素をメモリの限定範囲からプロセッサ上にロードするか又は別の方法で取り出すことができる。すなわち、幾つかの実施形態では、1つ又は複数の多重データ要素ロードを用いて、限定範囲ベクトルギャザー演算を実施することができる。図示した例示の実施形態に示すように、実行ロジック809は、限定範囲と結合された512ビット幅メモリロードロジック840を備えることができる。この512ビット幅メモリロードロジックは、512ビットロードを実行して、単一のロード演算において512ビット内に収まるだけの数のデータ要素をロードすることができる。例えば、単一の512ビットロード演算は、64個の8ビットバイトデータ要素をロードすることができる。
幾つかの実施形態では、256バイトの限定範囲のうちの4つの512ビットの重ならない部分をそれぞれロードする4つの512ビットロードを用いて、256バイトの限定範囲820全体をプロセッサ内にロードすることができる。図示するように、幾つかの実施形態では、256ビットのロードされた限定範囲全体は、4つの512ビットレジスタにストアすることもできるし、代替的に8つの256ビットレジスタ又は2つの1024ビットレジスタにストアすることもできる。アーキテクチャ的又は非アーキテクチャ的な専用化されたレジスタ又は存在するレジスタを含めて、任意のオンプロセッサ記憶ロケーションが潜在的に好適である。別のオプションとして、512ビットロードではなく、それよりも狭い(例えば、128ビット、256ビット等)又はそれよりも広い(例えば、1024ビット)ロードをオプションとして用いることができる。その上、必要なデータ要素が、限定範囲の所与の部分内にない場合、これらのロードのうちの1つ又は複数をオプションとして省略することができる。
各ロードは、場合によっては、メモリインデックスの値に応じて、必要な/所望のデータ要素と不要な/非所望のデータ要素との双方をロードすることができる。例えば、各ロードは、複数のメモリインデックスのうちの或るメモリインデックスによって示されるメモリアドレスにおける少なくとも1つのデータ要素と、複数のメモリインデックスのうちの或るメモリインデックスによって示されないメモリアドレスにおける少なくとも1つのデータ要素とをロードすることができる。例えば、上記説明図に示すように、インデックス0、50、100、150、及び200にそれぞれ対応する必要な/所望のデータ要素A、B、C、D、及びEをロードすることができる。加えて、例えば、データ要素F及びG等の不要な/非所望のデータ要素をロードすることができる。他の不要な/非所望のデータ要素(簡略化のために図示せず)もロードすることができる。データ要素F及びGは、ソースパックドバイトメモリインデックス813によってインデックス又はアドレス指定することができる。利点として、そのようなマルチデータ要素ロードは、所与の数のデータ要素を、その所与の数のロードよりも少ないロードでギャザーすることを可能にすることができる。例えば、4つのロード演算しか実行されない場合であっても、通常、5つ以上の所望のデータ要素をロードされた限定範囲に含めることができる。例えば、1つの実施形態では、64個の8ビットバイトデータ要素を4つのロードのみでギャザーすることができる。他の実施形態では、32個、16個、又は8個の所望の比較的小さなデータ要素をそれよりも少ない数(例えば、4つ)のより大きな多重データ要素ロードを用いてメモリからロードすることができる。その結果、これは、演算の速度を向上させるのに役立つことができる。
上記説明図を再び参照すると、実行ロジック809は、メモリインデックスベースのデータ再配置ロジック842も備える。このメモリインデックスベースのデータ再配置ロジックは、ロードされた限定範囲及び/又はロードされたデータ要素からの所望の/必要なデータ要素を再配置するとともに、それらのデータ要素を、対応するメモリインデックスによって示されるようなデスティネーション記憶ロケーションにおける適切な位置にストアするように動作可能とすることができる。幾つかの実施形態では、限定範囲全体のデータ要素のサブセットを、メモリインデックスに基づいてデスティネーション記憶ロケーションに選択的に移動させることができる。再配置を実行する様々な方法が考えられている。幾つかの実施形態では、1つ又は複数の並べ替え、シャッフル、抽出、又は他のデータ再配置演算を用いることができる。
様々な異なるパックドデータ幅及びデータ要素幅が好適である。幾つかの実施形態では、128ビット幅パックドデータが、16個の8ビットバイトデータ要素又は8個の16ビットワードデータ要素を含むことができる。他の実施形態では、256ビットパックドデータが、32個の8ビットバイトデータ要素又は16個の16ビットワードデータ要素を含むことができる。更に他の実施形態では、512ビットパックドデータは、64個の8ビットバイトデータ要素又は32個の16ビットワードデータ要素を含むことができる。更なる実施形態では、512ビットよりも大きなパックドデータフォーマット又は128ビットよりも小さなパックドデータフォーマットのいずれも好適である。例えば、1024ビットパックドデータ及び64ビットパックドデータは、8ビットバイト又は16ビットワードのいずれにも好適である。一般に、データ要素の数は、パックドデータオペランドのビットによるサイズをデータ要素のビットによるサイズによって除算したものに等しい。
図9は、好適な一組のパックドデータレジスタ907の一例示の実施形態のブロック図である。図示したパックドデータレジスタは、32個の512ビットパックドデータレジスタ又はベクトルレジスタを含む。これらの32個の512ビットレジスタは、ZMM0〜ZMM31のラベルが付けられている。図示した実施形態では、これらのレジスタのうちの下位の16個、すなわちZMM0〜ZMM15の低順序の256ビットは、YMM0〜YMM15のラベルが付けられたそれぞれの256ビットパックドデータレジスタ又はベクトルレジスタ上にエイリアスされるか又は重ねられている。ただし、これは必須ではない。同様に、図示した実施形態では、YMM0〜YMM15の低順序の128ビットは、XMM0及びXMM1のラベルが付けられたそれぞれの128ビットパックドデータレジスタ又はベクトルレジスタ上にエイリアスされるか又は重ねられている。ただし、これも必須ではない。512ビットレジスタZMM0〜ZMM31は、512ビットパックドデータ、256ビットパックドデータ、又は128ビットパックドデータを保持するように動作可能である。
256ビットレジスタYMM0〜YMM15は、256ビットパックドデータ又は128ビットパックドデータを保持するように動作可能である。128ビットレジスタXMM0及びXMM1は、128ビットパックドデータを保持するように動作可能である。これらのレジスタのそれぞれは、パックド浮動小数点データ又はパックド整数データのいずれかをストアするのに用いることができる。少なくとも8ビットのバイトデータと、16ビットのワードデータと、32ビットのダブルワードデータ又は単精度浮動小数点データと、64ビットのクワッドワードデータ又は倍精度浮動小数点データとを含む種々のデータ要素サイズがサポートされる。パックドデータレジスタの代替の実施形態は、異なる数のレジスタ、異なるサイズのレジスタを含むことができ、小さい方のレジスタ上に大きい方のレジスタをエイリアスする場合もあるし、しない場合もある。
図10は、好適な一組のパックドデータ演算マスクレジスタ1008の一例示の実施形態のブロック図である。パックドデータ演算マスクレジスタのそれぞれは、パックドデータ演算マスクをストアするのに用いることができる。図示した実施形態では、この一組は、k0〜k7のラベルが付けられた8つのパックドデータ演算マスクレジスタを含む。代替の実施形態は、8つよりも少ない(例えば、2つ、4つ、6つ等)か又は8つよりも多い(例えば、16個、20個、32個等)パックドデータ演算マスクレジスタを含むことができる。図示した実施形態では、パックドデータ演算マスクレジスタのそれぞれは64ビットである。代替の実施形態では、パックドデータ演算マスクレジスタの幅は、64ビットよりも広くすることもできるし(例えば、80ビット、128ビット等)、64ビットよりも狭くすることもできる(例えば、8ビット、16ビット、32ビット等)。例として、マスクされた限定範囲ベクトルメモリアクセス命令は、3ビット(例えば、3ビットフィールド)を用いて、8つのパックドデータ演算マスクレジスタk0〜k7のうちの任意の1つをエンコード又は指定することができる。代替の実施形態では、パックドデータ演算マスクレジスタが上記よりも少ないか又は多いとき、それぞれ、上記よりも少ないビット又は多くのビットを用いることができる。
図11は、64ビットパックドデータ演算マスクレジスタ1108の一例示の実施形態を示すとともに、パックドデータ演算マスクとして及び/又はマスキングに用いられるビット数がパックドデータ幅及びデータ要素幅に依存することを示す図である。図示したマスクレジスタは64ビット幅であるが、これは必須ではない。一般に、単一の要素ごとのマスキング制御ビットが用いられるとき、マスキングに用いられるビット数は、ビットによるパックドデータ幅をビットによるパックドデータ要素幅によって除算したものに等しい。更に例を挙げて説明するために、幾つかの可能な例示の実施形態を検討する。8ビットのみ、例えば、下位の8ビットのみを、16ビットデータ要素を有する128ビットパックドデータに用いることができる。16ビットのみ、例えば下位の16ビットのみを、8ビットデータ要素を有する128ビットパックドデータ又は16ビットデータ要素を有する256ビットパックドデータのいずれかに用いることができる。32ビットのみ、例えば下位の32ビットのみを、8ビットデータ要素を有する256ビットパックドデータ又は16ビットデータ要素を有する512ビットパックドデータのいずれかに用いることができる。64ビットの全てのビットを、8ビットデータ要素を有する512ビットパックドデータに用いることができる。
命令セットは、1つ又は複数の命令フォーマットを有する。所与の命令フォーマットは、特に、実行される演算(オペコード)と、その演算が実行される対象のオペランド(複数の場合もある)とを指定する様々なフィールド(ビット数、ビットのロケーション)を定義する。幾つかの命令フォーマットは、命令テンプレート(又はサブフォーマット)の定義を通じて更に分割される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義することができ(含まれるフィールドは、通常、同じ順序であるが、少なくとも幾つかは、含まれるフィールドが少ないので、異なるビット位置を有する)、及び/又は異なって解釈される所与のフィールドを有するように定義することができる。このように、ISAの各命令は、所与の命令フォーマットを用いて(定義される場合、その命令フォーマットの命令テンプレートのうちの所与の1つにおいて)表され、演算及びオペランドを指定するためのフィールドを含む。例えば、例示的なADD命令は、特定のオペコードと、このオペコードを指定するオペコードフィールド及びオペランド(ソース1/デスティネーション及びソース2)を選択するオペランドフィールドを含む命令フォーマットとを有し、命令ストリームにおけるこのADD命令の存在は、特定のオペランドを選択するオペランドフィールドに特定の内容を有する。アドバンストベクトルエクステンション(AVX:Advanced Vector Extensions)(AVX1及びAVX2)と呼ばれるとともにベクトルエクステンション(VEX:Vector Extensions)符号化方式を用いる一組のSIMDエクステンションがリリースされ及び/又公開されている。(例えば、Intel(R) 64 and IA-32 Architectures Software Developers Manual, October 2011及びIntel(R) Advanced Vector Extensions Programming Reference, June 2011を参照)。
例示的な命令フォーマット
本明細書において説明する命令(複数の場合もある)の実施形態は、種々のフォーマットで具現化することができる。加えて、例示的なシステム、アーキテクチャ、及びパイプラインが以下に詳述される。命令(複数の場合もある)の実施形態は、そのようなシステム、アーキテクチャ、及びパイプライン上で実行することができるが、詳述されるものに限定されるものではない。
VEX命令フォーマット
VEXエンコードによって、命令が3つ以上のオペランドを有することが可能になり、SIMDベクトルレジスタを128ビットよりも長くすることが可能になる。VEXプレフィックスの使用によって、3オペランド(又はそれよりも多くのオペランド)シンタックスが提供される。例えば、これまでの2オペランド命令は、ソースオペランドを上書きするA=A+B等の演算を実行していた。VEXプレフィックスの使用によって、オペランドは、A=B+C等の非消去的な演算を実行することが可能になる。
図12Aは、VEXプレフィックス1202、リアルオペコードフィールド1230、Mod R/Mバイト1240、SIBバイト1250、変位フィールド1262、及びIMM8 1272を含む例示的なAVX命令フォーマットを示している。図12Bは、図12Aからのどのフィールドがフルオペコードフィールド1274及びベース演算フィールド1242を構成するのかを示している。図12Cは、図12Aからのどのフィールドがレジスタインデックスフィールド1244を構成するのかを示している。
VEXプレフィックス(バイト0〜2)1202は、3バイト形式でエンコードされる。第1のバイトは、フォーマットフィールド1240(VEXバイト0、ビット[7:0])であり、このフィールドは、明示的なC4バイト値(C4命令フォーマットを区別するのに用いられる一意の値)を含む。第2のバイト及び第3のバイト(VEXバイト1及び2)は、特定の機能を提供する複数のビットフィールドを含む。具体的には、REXフィールド1205(VEXバイト1、ビット[7〜5])は、VEX.Rビットフィールド(VEXバイト1、ビット[7]−R)と、VEX.Xビットフィールド(VEXバイト1、ビット[6]−X)と、VEX.Bビットフィールド(VEXバイト1、ビット[5]−B)とからなる。命令の他のフィールドは、当該技術分野で知られているように、レジスタインデックスの下位3ビット(rrr、xxx、及びbbb)をエンコードし、VEX.R、VEX.X、及びVEX.Bを加えることによってRrrr、Xxxx、及びBbbbを形成することができるようにする。
オペコードマップフィールド1215(VEXバイト1、ビット[4:0]−mmmmm)は、暗黙のリーディングオペコードバイトをエンコードするコンテンツを含む。Wフィールド1264(VEXバイト2、ビット[7]−W)は、VEX.Wという表記によって表され、命令に応じて異なる機能を提供する。VEX.vvvv1220(VEXバイト2、ビット[6:3]−vvvv)の役割は、次のもの、すなわち、1)VEX.vvvvが、反転された(1の補数)形式で指定された第1のソースレジスタオペランドをエンコードし、2つ以上のソースオペランドを有する命令に有効であること、2)VEX.vvvvが、或る特定のベクトルシフトについて1の補数の形式で指定されたデスティネーションレジスタオペランドをエンコードすること、又は3)VEX.vvvvがどのオペランドもエンコードしないこと、を含むことができ、このフィールドは予約され、1111bを含むべきであるる。VEX.L1268のサイズフィールド(VEXバイト2、ビット[2]−L)=0である場合、これは、128ビットベクトルを示す。VEX.L=1である場合、これは、256ビットベクトルを示す。プレフィックスエンコードフィールド1225(VEXバイト2、ビット[1:0]−pp)は、ベース演算フィールド用の追加のビットを提供する。
リアルオペコードフィールド1230(バイト3)は、オペコードバイトとしても知られている。このオペコードの一部は、このフィールドにおいて指定される。
MOD R/Mフィールド1240(バイト4)は、MODフィールド1242(ビット[7-6])、Regフィールド1244(ビット[5〜3])、及びR/Mフィールド1246(ビット[2〜0])を含む。Regフィールド1244の役割は、次のもの、すなわち、デスティネーションレジスタオペランド又はソースレジスタオペランド(Rrrrのrrr)をエンコードすること、を含むこともできるし、オペコードエクステンションとして扱われて、どの命令オペランドをエンコードするのにも用いられないようにすることもできる。R/Mフィールド1246の役割は、次のもの、すなわち、メモリアドレスを参照する命令オペランドをエンコードすること、又はデスティネーションレジスタオペランド若しくはソースレジスタオペランドをエンコードすることを含むことができる。
スケール、インデックス、ベース(SIB)。スケールフィールド1250(バイト5)のコンテンツは、メモリアドレス生成に用いられるSS1252(ビット[7〜6])を含む。SIB.xxx1254(ビット[5〜3])及びSIB.bbb1256(ビット[2〜0])のコンテンツは、レジスタインデックスXxxx及びBbbbに関して前に言及している。
変位フィールド1262及び即値フィールド(IMM8)1272は、アドレスデータを含む。
一般的なベクトルフレンドリー命令フォーマット
ベクトルフレンドリー命令フォーマットは、ベクトル命令に適した命令フォーマットである(例えば、ベクトル演算に特有のある特定のフィールドが存在する)。ベクトル演算及びスカラー演算の双方がベクトルフレンドリー命令フォーマットを通じてサポートされる実施形態が説明されるが、代替的な実施形態は、ベクトルフレンドリー命令フォーマットを通じてベクトル演算のみを用いる。
図13A及び図13Bは、本発明の実施形態による一般的な(generic)ベクトルフレンドリー命令フォーマット及びその命令テンプレートを示すブロック図である。図13Aは、本発明の実施形態による一般的なベクトルフレンドリー命令フォーマット及びそのクラスA命令テンプレートを示すブロック図である一方、図13Bは、本発明の実施形態による一般的なベクトルフレンドリー命令フォーマット及びそのクラスB命令テンプレート示すブロック図である。具体的には、クラスA命令テンプレート及びクラスB命令テンプレートが定義される一般的なベクトルフレンドリー命令フォーマット1300。これらの命令テンプレートの双方は、無メモリアクセス1305の命令テンプレート及びメモリアクセス1320の命令テンプレートを含む。ベクトルフレンドリー命令フォーマットとの関連における「一般的な」という用語は、この命令フォーマットがどの具体的な命令セットにも結び付いていないことをいう。
ベクトルフレンドリー命令フォーマットが次のもの、すなわち、32ビット(4バイト)又は64ビット(8バイト)のデータ要素幅(又はサイズ)を有する64バイトベクトルオペランド長(又はサイズ)(したがって、64バイトベクトルは、16個のダブルワードサイズの要素又は代替的に8個のクワッドワードサイズの要素のいずれかからなる);16ビット(2バイト)又は8ビット(1バイト)のデータ要素幅(又はサイズ)を有する64バイトベクトルオペランド長(又はサイズ);32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、又は8ビット(1バイト)のデータ要素幅(又はサイズ)を有する32バイトベクトルオペランド長(又はサイズ);及び32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、又は8ビット(1バイト)データ要素幅(又はサイズ)を有する16バイトベクトルオペランド長(又はサイズ)をサポートする本発明の実施形態が説明されるが、代替的な実施形態は、より大きな、より小さな、及び/又は異なるデータ要素幅(例えば、128ビット(16バイト)データ要素幅)を有するより大きな、より小さな、又は異なるベクトルオペランドサイズ(例えば、256バイトベクトルオペランド)をサポートすることができる。
図13AにおけるクラスA命令テンプレートは、1)無メモリアクセス1305の命令テンプレート内には、無メモリアクセスのフルラウンド制御タイプ演算1310の命令テンプレートと、無メモリアクセスのデータ変換タイプ演算1315の命令テンプレートとが示されている;及び2)メモリアクセス1320の命令テンプレート内には、メモリアクセスのテンポラル1325命令テンプレートとメモリアクセスの非テンポラル1330命令テンプレートとが示されていることを含む。図13BにおけるクラスB命令テンプレートは、1)無メモリアクセス1305の命令テンプレート内に、無メモリアクセスの書き込みマスク制御、部分ラウンド制御タイプ演算1312の命令テンプレートと無メモリアクセスの書き込みマスク制御vサイズ(vsize)タイプ演算1317の命令テンプレートとが示されている;及び2)メモリアクセス1320の命令テンプレート内に、メモリアクセス書き込みマスク制御1327の命令テンプレートが示されていることを含む。
一般的なベクトルフレンドリー命令フォーマット1300は、図13A及び図13Bに図示した順序で以下に列挙した次のフィールドを含む。
フォーマットフィールド1340−このフィールド内の特定の値(命令フォーマット識別子値)は、ベクトルフレンドリー命令フォーマットを一意に識別し、したがって、命令ストリームにおけるベクトルフレンドリー命令フォーマット内の命令の存在を一意に識別する。したがって、このフィールドは、一般的なベクトルフレンドリー命令フォーマットのみを有する命令セットには必要とされないという意味でオプションである。
ベース演算フィールド1342−その内容は、異なるベース演算を区別する。
レジスタインデックスフィールド1344−その内容は、直接又はアドレス生成を通じて、ソースオペランド及びデスティネーションオペランドがレジスタ又はメモリにある場合に、それらのロケーションを指定する。これらは、P×Q(例えば32×512、16×128、32×1024、64×1024)レジスタファイルからN個のレジスタを選択するのに十分なビット数を含む。1つの実施形態では、Nは、3つまでのソースレジスタ及び1つまでのデスティネーションレジスタとすることができるが、代替的な実施形態は、それよりも多くの又はそれよりも少ないソースレジスタ及びデスティネーションレジスタをサポートすることができる(例えば、2つまでのソースをサポートすることもでき、これらのソースのうちの一方はデスティネーションとしても機能する。3つまでのソースをサポートすることもでき、これらのソースのうちの1つはデスティネーションとしても機能する。2つまでのソース及び1つまでのデスティネーションをサポートすることもできる。)。
変更子フィールド1346−その内容は、メモリアクセスを指定する一般的なベクトル命令フォーマットにおける命令の存在を、そうでない命令の存在と区別する。すなわち、無メモリアクセス1305の命令テンプレートと、メモリアクセス1320の命令テンプレートとを区別する。メモリアクセス演算は、メモリ階層を読み出し及び/又はメモリ階層に書き込む(幾つかの場合には、レジスタ内の値を用いてソースアドレス及び/又はデスティネーションアドレスを指定する)一方、非メモリアクセス演算は、それを行わない(例えば、ソース及びデスティネーションはレジスタである)。1つの実施形態では、このフィールドは、メモリアドレス計算を実行する3つの異なる方法から選択も行うが、代替的な実施形態は、メモリアドレス計算を実行するそれよりも多くの方法、それよりも少ない方法、又は異なる方法をサポートすることができる。
増大(augmentation)演算フィールド1350−その内容は、様々な異なる演算のうちのいずれがベース演算に加えて実行されるのかを区別する。このフィールドは、コンテキスト特有のものである。本発明の1つの実施形態では、このフィールドは、クラスフィールド1368、アルファフィールド1352、及びベータフィールド1354に分割されている。増大演算フィールド1350は、共通の数群の演算を2つの命令、3つの命令、又は4つの命令ではなく単一の命令で実行することを可能にする。
スケールフィールド1360−その内容は、メモリアドレス生成(例えば、2scale*index+baseを用いるアドレス生成の場合)についてインデックスフィールドの内容のスケーリングを可能にする。
変位(displacement)フィールド1362A−その内容は、メモリアドレス生成(例えば、2scale*index+base+displacementを用いるアドレス生成の場合)の一部として用いられる。
変位ファクターフィールド1362B(変位ファクターフィールド1362Bの真上に変位フィールド1362Aを並置していることは一方又は他方が用いられることを示していることに留意されたい)−その内容は、アドレス生成の一部として用いられる。このフィールドは、メモリアクセスのサイズ(N)によってスケーリングされる変位ファクターを指定する。ここで、Nは、メモリアクセスのバイト数である(例えば、2scale*index+base+scaled displacementを用いるアドレス生成の場合)。冗長な低順序ビットは無視され、したがって、変位ファクターフィールドの内容は、有効アドレスを計算する際に用いられる最終変位を生成するためにメモリオペランドの全サイズ(N)を乗算される。Nの値は、フルオペコードフィールド1374(本明細書において後に説明する)及びデータ操作フィールド1354Cに基づいてランタイムにおいてプロセッサハードウェアによって求められる。変位フィールド1362A及び変位ファクターフィールド1362Bは、無メモリアクセス1305の命令テンプレートには用いられないこと及び/又は異なる実施形態は2つのうちの一方のみを実装することもできるし、全く実装しなくてもよいという意味でオプションである。
データ要素幅フィールド1364−その内容は、複数のデータ要素幅のうちのいずれが用いられるのかを区別する(幾つかの実施形態では、全ての命令について;他の実施形態では、命令の一部についてのみ)。このフィールドは、1つのデータ要素幅しかサポートされていない場合及び/又はデータ要素幅がオペコードの或る態様を用いてサポートされている場合に必要とされないという意味でオプションである。
書き込みマスクフィールド1370−その内容は、データ要素位置単位で、デスティネーションベクトルオペランドにおけるそのデータ要素位置が、ベース演算及び増大演算の結果を反映するか否かを制御する。クラスA命令テンプレートは、マージング書き込みマスキング(merging−writemasking)をサポートする一方、クラスB命令テンプレートは、マージング書き込みマスキング及びゼロイング書き込みマスキングの双方をサポートする。マージングのとき、ベクトルマスクによって、デスティネーションにおける任意の一組の要素を(ベース演算及び増大演算によって指定された)任意の演算の実行中の更新から保護することが可能になる。他の1つの実施形態では、対応するマスクビットが0を有するデスティネーションの各要素の旧値が保持される。これとは対照的に、ゼロイングのとき、ベクトルマスクによって、デスティネーションにおける任意の一組の要素を(ベース演算及び増大演算によって指定された)任意の演算の実行中にゼロにすることが可能になる。1つの実施形態では、デスティネーションの要素は、対応するマスクビットが0値を有するときに0にセットされる。
この機能のサブセットは、実行されている演算のベクトル長を制御する能力である(すなわち、要素のスパンが最初のものから最後のものに変更される)。しかしながら、変更される要素が連続的であることは必要ではない。したがって、書き込みマスクフィールド1370によって、ロード、ストア、算術、論理等を含む部分的なベクトル演算が可能になる。書き込みマスクフィールド1370の内容が、用いられる書き込みマスクを含む複数の書き込みマスクレジスタのうちの1つを選択する(したがって、書き込みマスクフィールド1370の内容が実行されるそのマスキングを間接的に識別する)本発明の実施形態が説明されているが、代替的な実施形態は、その代わりに又は付加的に、マスク書き込みフィールド1370の内容が実行されるマスキングを直接指定することを可能にする。
即値フィールド1372−その内容は即値の指定を可能にする。このフィールドは、即値をサポートしていない一般的なベクトルフレンドリーフォーマットの実施態様には存在せず、即値を用いない命令には存在しないという意味でオプションである。
クラスフィールド1368−その内容は、異なる命令のクラスを区別する。図13A及び図13Bを参照すると、このフィールドの内容は、クラスA命令及びクラスB命令から選択される。図13A及び図13Bにおいて、丸い角の方形は、特定の値がフィールド(例えば、図13A及び図13Bにおけるクラスフィールド1368用のそれぞれクラスA1368A及びクラスB1368B)に存在することを示すのに用いられる。
クラスAの命令テンプレート
クラスAの非メモリアクセス1305の命令テンプレートの場合、アルファフィールド1352は、RSフィールド1352Aとして解釈され、その内容は、異なる増大演算タイプのうちのいずれが実行されるのかを区別する(例えば、ラウンド1352A.1及びデータ変換1352A.2は、それぞれ、無メモリアクセスのラウンドタイプ演算1310及び無メモリアクセスのデータ変換タイプ演算1315の命令テンプレートについて指定される)一方、ベータフィールド1354は、指定されたタイプの演算のうちのいずれが実行されるのかを区別する。無メモリアクセス1305の命令テンプレートでは、スケールフィールド1360、変位フィールド1362A、及び変位スケールフィールド1362Bは存在しない。
無メモリアクセスの命令テンプレート−フルラウンド制御タイプ演算
無メモリアクセスフルラウンド制御タイプ演算1310の命令テンプレートでは、ベータフィールド1354は、ラウンド制御フィールド1354Aとして解釈され、その内容(複数の場合もある)は、静的なラウンドを提供する。説明する本発明の実施形態においては、ラウンド制御フィールド1354Aが、全浮動小数点例外抑制(suppress all floating point exceptions)(SAE)フィールド1356及びラウンド演算制御フィールド1358を含むが、代替的な実施形態は、これらの概念の双方を同じフィールドにエンコードすることもできるし、これらの概念/フィールドの一方又は他方のみを有することもできる(例えば、ラウンド演算制御フィールド1358のみを有することができる)。
SAEフィールド1356−その内容は、例外イベント報告をディセーブルするか否かを区別する。SAEフィールド1356の内容が、抑制がイネーブルされていることを示すとき、所与の命令は、どの種類の浮動小数点例外フラグも報告せず、どの浮動小数点例外ハンドラーも起動しない。
ラウンド演算制御フィールド1358−その内容は、一群のラウンド演算(例えば、ラウンドアップ、ラウンドダウン、0へのラウンド、及び最も近いものへのラウンド)のうちのいずれを実行するのかを区別する。したがって、ラウンド演算制御フィールド1358によって、命令単位でのラウンドモードの変更が可能になる。プロセッサがラウンドモードを指定するための制御レジスタを備える本発明の1つの実施形態では、ラウンド演算制御フィールド1350の内容は、そのレジスタ値を無効にする。
無メモリアクセス命令テンプレート−データ変換タイプ演算
無メモリアクセスデータ変換タイプ演算1315の命令テンプレートでは、ベータフィールド1354は、データ変換フィールド1354Bとして解釈され、その内容は、複数のデータ変換のうちのいずれが実行されるのかを区別する(例えば、データ変換無し、スウィズル、ブロードキャスト)。
メモリアクセス1320のクラスAの命令テンプレートの場合、アルファフィールド1352は、エビクションヒント(eviction hint)フィールド1352Bとして解釈され、その内容は、エビクションヒントのうちのいずれが用いられるのかを区別する(図13Aでは、テンポラル1352B.1及び非テンポラル1352B.2は、それぞれ、メモリアクセスのテンポラル1325の命令テンプレート及びメモリアクセスの非テンポラル1330の命令テンプレート用に指定される)一方、ベータフィールド1354は、データ操作フィールド1354Cとして解釈され、その内容は、複数のデータ操作演算(プリミティブとしても知られている)のいずれが実行されるのかを区別する(例えば、無操作;ブロードキャスト;ソースのアップ変換;及びデスティネーションのダウン変換)。メモリアクセス1320の命令テンプレートは、スケールフィールド1360、及びオプションとして変位フィールド1362A又は変位スケールフィールド1362Bを含む。
ベクトルメモリ命令は、変換サポートを用いてメモリからのベクトルロード及びメモリへのベクトルストアを実行する。通常のベクトル命令と同様に、ベクトルメモリ命令は、データ要素に関してメモリから/へデータを転送する。実際に転送される要素は、書き込みマスクとして選択されたベクトルマスクの内容によって規定される。
メモリアクセス命令テンプレート−テンポラル
テンポラルデータは、キャッシュからの利益を得るのに十分なほど直ちに再利用される可能性のあるデータである。しかしながら、これはヒントであり、種々のプロセッサは、このヒントを完全に無視することを含めて、種々の方法でこのテンポラルデータを実施することができる。
メモリアクセス命令テンプレート−非テンポラル
非テンポラルデータは、第1レベルキャッシュにおけるキャッシュからの利益を得るのに十分なほど直ちに再利用される可能性のないデータであり、エビクションの優先順位が与えられるべきである。しかしながら、これはヒントであり、種々のプロセッサは、このヒントを完全に無視することを含めて、種々の方法でこの非テンポラルデータを実施することができる。
クラスBの命令テンプレート
クラスBの命令テンプレートの場合、アルファフィールド1352は、書き込みマスク制御(Z)フィールド1352Cとして解釈され、その内容は、書き込みマスクフィールド1370によって制御される書き込みマスキングがマージングであるのか又はゼロイングであるのかを区別する。
クラスBの非メモリアクセス1305の命令テンプレートの場合、ベータフィールド1354の一部は、RLフィールド1357Aとして解釈され、その内容は、種々の増大演算タイプのうちのいずれが実行されるのかを区別する(例えば、ラウンド1357A.1及びベクトル長(VSIZE)1357A.2は、それぞれ、無メモリアクセスの書き込みマスク制御の部分ラウンド制御タイプ演算1312の命令テンプレート及び無メモリアクセスの書き込みマスク制御のVSIZEタイプ演算1317の命令テンプレート用に指定される)一方、ベータフィールド1354の残りは、指定されたタイプの演算のいずれが実行されるのかを区別する。無メモリアクセス1305の命令テンプレートには、スケールフィールド1360、変位フィールド1362A、及び変位スケールフィールド1362Bは存在しない。
無メモリアクセス書き込みマスク制御の部分ラウンド制御タイプ演算1310の命令テンプレートでは、ベータフィールド1354の残りは、ラウンド演算フィールド1359Aとして解釈され、例外イベント報告はディセーブルされる(所与の命令は、どの種類の浮動小数点例外フラグも報告せず、どの浮動小数点例外ハンドラーも起動しない)。
ラウンド演算制御フィールド1359A−ラウンド演算制御フィールド1358と全く同様に、その内容は、一群のラウンド演算(例えば、ラウンドアップ、ラウンドダウン、0へのラウンド、及び最も近いものへのラウンド)のうちのいずれを実行するのかを区別する。したがって、ラウンド演算制御フィールド1359Aによって、命令単位でのラウンドモードの変更が可能になる。プロセッサがラウンドモードを指定するための制御レジスタを備える本発明の1つの実施形態では、ラウンド演算制御フィールド1350の内容は、そのレジスタ値を無効にする。
無メモリアクセス書き込みマスク制御のVSIZEタイプ演算1317の命令テンプレートでは、ベータフィールド1354の残りは、ベクトル長フィールド1359Bとして解釈され、その内容は、複数のデータベクトル長(例えば、128バイト、256バイト、又は512バイト)のうちのいずれが実行されるのかを区別する。
メモリアクセス1320のクラスBの命令テンプレートの場合、ベータフィールド1354の一部は、ブロードキャストフィールド1357Bとして解釈され、その内容は、ブロードキャストタイプデータ操作演算を実行するか否かを区別する一方、ベータフィールド1354の残りは、ベクトル長フィールド1359Bとして解釈される。メモリアクセス1320の命令テンプレートは、スケールフィールド1360、及びオプションとして変位フィールド1362A又は変位スケールフィールド1362Bを含む。
一般的なベクトルフレンドリー命令フォーマット1300に関して、フォーマットフィールド1340、ベース演算フィールド1342、及びデータ要素幅フィールド1364を含むフルオペコードフィールド1374が示されている。フルオペコードフィールド1374がこれらのフィールドの全てを含む1つの実施形態が示されているが、フルオペコードフィールド1374は、これらのフィールドの全てをサポートしない実施形態では、これらのフィールドのうちの、全てよりも少ないフィールドを含む。フルオペコードフィールド1374は、演算コード(オペコード)を提供する。
増大演算フィールド1350、データ要素幅フィールド1364、及び書き込みマスクフィールド1370によって、一般的なベクトルフレンドリー命令フォーマットにおいてこれらの特徴を命令単位で指定することが可能になる。
書き込みマスクフィールド及びデータ要素幅フィールドの組み合わせによって、それらが種々のデータ要素幅に基づいてマスクを適用することを可能にするという点で、タイプ付けされた命令が作成される。
クラスA及びクラスB内に見られる様々な命令テンプレートは、種々の状況において有益である。本発明の幾つかの実施形態では、種々のプロセッサ又はプロセッサ内の種々のコアが、クラスAのみ、クラスBのみ、又は双方のクラスをサポートすることができる。例えば、汎用コンピューティングを対象とした高性能汎用アウトオブオーダーコアは、クラスBのみをサポートすることができ、主としてグラフィックス及び/又は科学(スループット)コンピューティングを対象としたコアは、クラスAのみをサポートすることができ、双方を対象としたコアは、双方をサポートすることができる(もちろん、双方のクラスからの全てのテンプレート及び命令とは限らないが双方のクラスからのテンプレート及び命令の或る混合を有するコアは本発明の範囲内にある)。また、単一のプロセッサは、複数のコアを備えることができ、それらのコアの全てが同じクラスをサポートするか、又は異なるコアは異なるクラスをサポートする。
例えば、別々のグラフィックスコア及び汎用コアを有するプロセッサでは、主としてグラフィックス及び/又は科学(スループット)コンピューティングを対象としたグラフィックスコアのうちの1つは、クラスAのみをサポートすることができる一方、汎用コアのうちの1つ又は複数は、クラスBのみをサポートする汎用コンピューティングを対象としたアウトオブオーダー実行及びレジスタリネームを有する高性能汎用コアとすることができる。別個のグラフィックスコアを有しない別のプロセッサは、クラスA及びクラスBの双方をサポートする1つ又は複数の汎用インオーダーコア又はアウトオブオーダーコアを備えることができる。もちろん、一方のクラスからの特徴は、本発明の異なる実施形態では他方のクラスにおいて実施することもできる。高水準言語で記述されるプログラムは、様々な異なる実行可能形態にされる(例えば、実行時にコンパイルされるか又は静的にコンパイルされる)。この実行可能形態には、1)実行用にターゲットプロセッサによってサポートされるクラス(複数の場合もある)の命令のみを有する形態、又は2)全てのクラスの命令の種々の組み合わせを用いて記述された代替的なルーチンを有するとともに、コードを現在実行しているプロセッサによってサポートされる命令に基づいて実行するルーチンを選択する制御フローコードを有する形態、が含まれる。
例示的な具体的なベクトルフレンドリー命令フォーマット
図14AからDは、本発明の実施形態による例示的な具体的なベクトルフレンドリー命令フォーマットを示すブロック図である。図14AからDは、ロケーション、サイズ、解釈、及びフィールドの順序、並びにそれらのフィールドの幾つかの値を指定しているという意味で具体的である、具体的なベクトルフレンドリー命令フォーマット1400を示している。具体的なベクトルフレンドリー命令フォーマット1400は、x86命令セットを拡張するのに用いることができ、したがって、フィールドのうちの幾つかは、既存のx86命令セット及びその拡張(例えば、AVX)において用いられるものと同様又は同じである。このフォーマットは、拡張を有する既存のx86命令セットのプレフィックスエンコードフィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、及び即値フィールドと一致が保たれている。図14AからDからのフィールドがマッピングする図13A、Bからのフィールドが示されている。
本発明の実施形態は、説明の目的で一般的なベクトルフレンドリー命令フォーマット1300に照らして具体的なベクトルフレンドリー命令フォーマット1400に関して説明されているが、本発明は、特許請求されている箇所を除いてこの具体的なベクトルフレンドリー命令フォーマット1400に限定されるものではないことが理解されるべきである。例えば、一般的なベクトルフレンドリー命令フォーマット1300は、様々なフィールドについて様々な可能なサイズを考慮しているが、具体的なベクトルフレンドリー命令フォーマット1400は、具体的なサイズのフィールドを有するものとして示されている。具体例として、データ要素幅フィールド1364は、具体的なベクトルフレンドリー命令フォーマット1400では1ビットフィールドとして示されているが、本発明は、そのように限定されるものではない(すなわち、一般的なベクトルフレンドリー命令フォーマット1300は、データ要素幅フィールド1364の他のサイズを考慮している)。
一般的なベクトルフレンドリー命令フォーマット1300は、図14Aに図示した順序で以下に列挙する次のフィールドを含む。
EVEXプレフィックス(バイト0〜3)1402−4バイト形式でエンコードされる。
フォーマットフィールド1340(EVEXバイト0、ビット[7:0])−第1バイト(EVEXバイト0)は、フォーマットフィールド1340であり、0x62(本発明の1つの実施形態では、ベクトルフレンドリー命令フォーマットを区別するために用いられる一意の値)を含む。
第2バイト〜第4バイト(EVEXバイト1〜3)は、具体的な機能を提供する複数のビットフィールドを含む。
REXフィールド1405(EVEXバイト1、ビット[7〜5])−EVEX.Rビットフィールド(EVEXバイト1、ビット[7]−R)と、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]−X)と、1357BEXバイト1、ビット[5]−B)とからなる。EVEX.Rビットフィールド、EVEX.Xビットフィールド、及びEVEX.Bビットフィールドは、対応するVEXビットフィールドと同じ機能を提供し、1の補数形式を用いてエンコードされる。すなわち、ZMM0は1111Bとしてエンコードされ、ZMM15は0000Bとしてエンコードされる。命令の他のフィールドは、当該技術分野で知られているようにレジスタインデックスの下位3ビット(rrr、xxx、及びbbb)をエンコードし、そのため、EVEX.R、EVEX.X、及びEVEX.Bを追加することによってRrrr、Xxxx、及びBbbbを形成することができる。
REX'フィールド1310−これは、REX'フィールド1310の最初の部分であり、拡張された32レジスタセットの上位16個又は下位16個のいずれかをエンコードするのに用いられるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]−R')である。本発明の1つの実施形態では、このビットは、以下に示す他のものとともに、BOUND命令と(よく知られたx86の32ビットモードにおいて)区別するためにビット反転フォーマットでストアされる。この命令のリアルオペコードバイトは62であるが、MOD R/M フィールド(以下で説明)においてMODフィールドにおける11の値を受理しない。本発明の代替的な実施形態は、これと以下に示す他のビットとを反転フォーマットでストアしない。1の値は、下位の16個のレジスタをエンコードするのに用いられる。換言すれば、R'Rrrrは、EVEX.R'、EVEX.R、及び他のフィールドからの他のRRRを組み合わせることによって形成される。
オペコードマップフィールド1415(EVEXバイト1、ビット[3:0]−mmmm)−その内容は、暗に示される先頭オペコードバイト(0F、0F38、又は0F3)をエンコードする。
データ要素幅フィールド1364(EVEXバイト2、ビット[7]−W)−EVEX.Wという表記によって表わされる。EVEX.Wは、データタイプの粒度(サイズ)(32ビットデータ要素又は64ビットデータ要素のいずれか)を定義するのに用いられる。
EVEX.vvvv1420(EVEXバイト2、ビット[6:3]−vvvv)−EVEX.vvvvの役割は、次のものを含むことができる。1)EVEX.vvvvは、反転された(1の補数)形式で指定された第1のソースレジスタオペランドをエンコードし、2つ以上のソースオペランドを有する命令に有効である;2)EVEX.vvvvは、或る特定のベクトルシフト用に1の補数形式で指定されたデスティネーションレジスタオペランドをエンコードする;又は3)EVEX.vvvvは、オペランドをエンコードせず、フィールドは保持され、1111bを含むことになる。したがって、EVEX.vvvvフィールド1420は、反転された(1の補数)形式でストアされた第1のソースレジスタ指定子の4つの低順序のビットをエンコードする。命令に応じて、余分な異なるEVEXビットフィールドが、指定子のサイズを32個のレジスタに拡張するのに用いられる。
EVEX.U1368クラスフィールド(EVEXバイト2、ビット[2]−U)−EVEX.U=0である場合、これはクラスA又はEVEX.U0を示し、EVEX.U=1である場合、これはクラスB又はEVEX.U1を示す。
プレフィックスエンコードフィールド1425(EVEXバイト2、ビット[1:0]−pp)−ベース演算フィールド用の追加のビットを提供する。EVEXプレフィックスフォーマットにおけるレガシーSSE命令用のサポートを提供することに加えて、これは、SIMDプレフィックスをコンパクトにする利点も有する(SIMDプレフィックスを表すバイトを必要とするのではなく、EVEXプレフィックスは2ビットしか必要としない)。1つの実施形態では、レガシーフォーマット及びEVEXプレフィックスフォーマットの双方においてSIMDプレフィックス(66H、F2H、F3H)を用いるレガシーSSE命令をサポートするために、これらのレガシーSIMDプレフィックスは、SIMDプレフィックスエンコードフィールド内にエンコードされ、ランタイム時において、デコーダーのPLAに提供される前にレガシーSIMDプレフィックスに展開される(そのため、PLAは、これらのレガシー命令を変更することなく、レガシーフォーマット及びEVEXフォーマットの双方を実行することができる)。より新しい命令は、EVEXプレフィックスエンコードフィールドの内容をオペコード拡張子として直接用いることができるが、或る特定の実施形態は、一貫性を保つために同様の方法で拡張されるが、これらのレガシーSIMDプレフィックスによって異なる意味を指定することが可能である。代替的な実施形態は、2ビットSIMDプレフィックスエンコードをサポートし、したがって、拡張子を必要としないようにPLAを再設計することができる。
アルファフィールド1352(EVEXバイト3、ビット[7]−EH;EVEX.EH、EVEX.rs、EVEX.RL、EVEX.書き込みマスク制御、及びEVEX.Nとしても知られている;αを用いて示されることもある)−前述したように、このフィールドはコンテキスト特有である。
ベータフィールド1354(EVEXバイト3、ビット[6:4]−SSS、EVEX.s2〜0、EVEX.r2〜0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られている;βββを用いて示されることもある)−前述したように、このフィールドはコンテキスト特有である。
REX'フィールド1310−これは、REX'フィールドの残りの部分であり、拡張された32レジスタセットの上位16個又は下位16個のいずれかをエンコードするのに用いることができるEVEX.V'ビットフィールド(EVEXバイト3、ビット[3]−V')である。このビットは、ビット反転フォーマットでストアされる。1の値は、下位16個のレジスタをエンコードするのに用いられる。換言すれば、V'VVVVは、EVEX.V'、EVEX.vvvvを組み合わせることによって形成される。
書き込みマスクフィールド1370(EVEXバイト3、ビット[2:0]−kkk)−その内容は、前述したように書き込みマスクレジスタにおけるレジスタのインデックスを指定する。本発明の1つの実施形態では、具体的な値EVEX.kkk=000は、書き込みマスクが特定の命令に用いられないことを意味する特殊な挙動を有する(これは、全て1に配線された書き込みマスク又はマスキングハードウェアを迂回するハードウェアの使用を含む様々な方法で実施することができる)。
リアルオペコードフィールド1430(バイト4)は、オペコードバイトとしても知られている。オペコードの一部は、このフィールドにおいて指定される。
MOD R/M フィールド1440(バイト5)は、MODフィールド1442、Regフィールド1444、及びR/Mフィールド1446を含む。前述したように、MODフィールド1442の内容は、メモリアクセス演算と非メモリアクセス演算とを区別する。Regフィールド1444の役割は、デスティネーションレジスタオペランド若しくはソースレジスタオペランドのいずれかをエンコードするという2つの状況に要約することができるか、又はオペコード拡張子として扱われ、どの命令オペランドをエンコードするのにも用いることができない。R/Mフィールド1446の役割は、次のもの、すなわち、メモリアドレスを参照する命令オペランドをエンコードすること、又はデスティネーションレジスタオペランド若しくはソースレジスタオペランドのいずれかをエンコードすることを含むことができる。
スケール、インデックス、ベース(SIB)バイト(バイト6)−前述したように、スケールフィールド1350の内容は、メモリアドレス生成に用いられる。SIB.xxx1454及びSIB.bbb1456−これらのフィールドの内容は、レジスタインデックスXxxx及びBbbbに関して前述している。
変位フィールド1362A(バイト7〜10)−MODフィールド1442が10を含むとき、バイト7〜10は、変位フィールド1362Aであり、レガシー32ビット変位(disp32)と同じ機能を果たし、バイト粒度で機能する。
変位ファクターフィールド1362B(バイト7)−MODフィールド1442が01を含むとき、バイト7は、変位ファクターフィールド1362Bである。このフィールドのロケーションは、バイト粒度で機能するレガシーx86命令セットの8ビット変位(disp8)のロケーションと同じである。disp8は、符号拡張されるので、−128バイト〜127バイトのオフセットのみをアドレス指定することができる。64バイトキャッシュラインに関して、disp8は、実際に有用な4つの値−128、−64、0、及び64にしかセットすることができない8ビットを用いる。より大きな範囲が多くの場合必要とされるので、disp32が用いられる。しかしながら、disp32は4バイトを必要とする。disp8及びdisp32とは対照的に、変位ファクターフィールド1362Bは、disp8を解釈し直したものである。変位ファクターフィールド1362Bを用いるとき、実際の変位は、変位ファクターフィールドの内容にメモリオペランドアクセスのサイズ(N)を乗算したものによって求められる。このタイプの変位は、disp8*Nとして参照される。これによって、平均命令長が削減される(単一のバイトが変位に用いられるが、はるかに大きな範囲を有する)。そのような圧縮された変位は、有効な変位がメモリアクセスの粒度の倍数であり、したがって、アドレスオフセットの低順序の冗長ビットがエンコードに不要であるという前提に基づいている。換言すれば、変位ファクターフィールド1362Bは、レガシーx86命令セットの8ビット変位の代わりになる。したがって、変位ファクターフィールド1362Bは、x86命令セットの8ビット変位と同じ方法でエンコードされ(そのため、ModRM/SIBエンコードルールに変更はない)、唯一の例外は、disp8がdisp8*Nにオーバーロードされるということである。換言すれば、エンコードルール又はエンコード長に変更はなく、ハードウェアによる変位値の解釈にのみ変更がある(これは、バイトに関するアドレスオフセットを得るために、メモリオペランドのサイズによって変位をスケーリングすることを必要とする)。
即値フィールド1372は、前述したように作用する。
フルオペコードフィールド
図14Bは、本発明の1つの実施形態によるフルオペコードフィールド1374を構成する具体的なベクトルフレンドリー命令フォーマット1400のフィールドを示すブロック図である。具体的には、フルオペコードフィールド1374は、フォーマットフィールド1340、ベース演算フィールド1342、及びデータ要素幅(W)フィールド1364を含む。ベース演算フィールド1342は、プレフィックスエンコードフィールド1425、オペコードマップフィールド1415、及びリアルオペコードフィールド1430を含む。
レジスタインデックスフィールド
図14Cは、本発明の1つの実施形態によるレジスタインデックスフィールド1344を構成する具体的なベクトルフレンドリー命令フォーマット1400のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド1344は、REXフィールド1405、REX'フィールド1410、MODR/M.regフィールド1444、MODR/M.r/mフィールド1446、VVVVフィールド1420、xxxフィールド1454、及びbbbフィールド1456を含む。
増大演算フィールド
図14Dは、本発明の1つの実施形態による増大演算フィールド1350を構成する具体的なベクトルフレンドリー命令フォーマット1400のフィールドを示すブロック図である。クラス(U)フィールド1368は、0を含むとき、これは、EVEX.U0(クラスA1368A)を示す。このフィールドが1を含むとき、これは、EVEX.U1(クラスB1368B)を示す。U=0であり、MODフィールド1442が11(無メモリアクセス演算を示す)を含むとき、アルファフィールド1352(EVEXバイト3、ビット[7]−EH)は、rsフィールド1352Aとして解釈される。rsフィールド1352Aが1(ラウンド1352A.1)を含むとき、ベータフィールド1354(EVEXバイト3、ビット[6:4]−SSS)は、ラウンド制御フィールド1354Aとして解釈される。ラウンド制御フィールド1354Aは、1ビットSAEフィールド1356及び2ビットラウンド演算フィールド1358を含む。rsフィールド1352Aが0(データ変換1352A.2)を含むとき、ベータフィールド1354(EVEXバイト3、ビット[6:4]−SSS)は、3ビットデータ変換フィールド1354Bとして解釈される。U=0であり、MODフィールド1442が00、01、又は10(メモリアクセス演算を示す)とき、アルファフィールド1352(EVEXバイト3、ビット[7]−EH)は、エビクションヒント(EH)フィールド1352Bとして解釈され、ベータフィールド1354(EVEXバイト3、ビット[6:4]−SSS)は、3ビットデータ操作フィールド1354Cとして解釈される。
U=1であるとき、アルファフィールド1352(EVEXバイト3、ビット[7]−EH)は、書き込みマスク制御(Z)フィールド1352Cとして解釈される。U=1であり、MODフィールド1442が11(無メモリアクセス演算を示す)とき、ベータフィールド1354の一部(EVEXバイト3、ビット[4]−S)は、RLフィールド1357Aとして解釈される。上記フィールドが1(ラウンド1357A.1)を含むとき、ベータフィールド1354の残り(EVEXバイト3、ビット[6〜5]−S2〜1)は、ラウンド演算フィールド1359Aとして解釈される一方、RLフィールド1357Aが0(VSIZE1357.A2)を含むとき、ベータフィールド1354の残り(EVEXバイト3、ビット[6〜5]−S2〜1)は、ベクトル長フィールド1359B(EVEXバイト3、ビット[6〜5]−L1〜0)として解釈される。U=1であり、MODフィールド1442が00、01、又は10(メモリアクセス演算を示す)とき、ベータフィールド1354(EVEXバイト3、ビット[6:4]−SSS)は、ベクトル長フィールド1359B(EVEXバイト3、ビット[6〜5]−L1〜0)及びブロードキャストフィールド1357B(EVEXバイト3、ビット[4]−B)として解釈される。
例示的なレジスタアーキテクチャ
図15は、本発明の1つの実施形態によるレジスタアーキテクチャ1500のブロック図である。図示した実施形態には、512ビット幅である32個のベクトルレジスタ1510が存在する。これらのレジスタは、zmm0〜zmm31として参照される。下位の16個のzmmレジスタの低順序の256ビットは、レジスタymm0〜ymm16の上に重ねられている。下位の16個のzmmレジスタの低順序の128ビット(ymmレジスタの低順序の128ビット)は、レジスタxmm0〜xmm15の上に重ねられている。特定のベクトルフレンドリー命令フォーマット1400は、以下の表に示すように、これらの重ねられたレジスタファイルに対して演算を行う。
Figure 0005926754
換言すれば、ベクトル長フィールド1359Bは、最大長と、1つ又は複数の他のそれによりも短い長さから選択される。そのような短い各長さは、前の長さの半分の長さであり、ベクトル長フィールド1359Bを有しない命令テンプレートは、最大ベクトル長に対して演算を行う。さらに、1つの実施形態では、特定のベクトルフレンドリー命令フォーマット1400のクラスB命令テンプレートは、パックド又はスカラー単精度/倍精度浮動小数点データ及びパックド又はスカラー整数データに対して演算を行う。スカラー演算は、zmm/ymm/xmmレジスタ内の最低順序データ要素位置に対して実行される演算である。それよりも高順序のデータ要素位置は、実施形態に応じて、命令前のものと同じままにされるか又はゼロにされる。
書き込みマスクレジスタ1515−図示した実施形態では、それぞれサイズが64ビットの8つの書き込みマスクレジスタ(k0〜k7)がある。代替の実施形態では、書き込みマスクレジスタ1515は、サイズが16ビットである。前述したように、本発明の1つの実施形態では、ベクトルマスクレジスタk0は、書き込みマスクとして用いることができない。通常、k0を示すエンコードが書き込みマスクに用いられるとき、このエンコードは、その命令用の書き込みマスキングを有効にディセーブルする0xFFFFのハードワイヤード書き込みマスクを選択する。
汎用レジスタ1525−図示した実施形態には、メモリオペランドをアドレス指定する既存のx86アドレス指定モードとともに用いられる16個の64ビット汎用レジスタがある。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、及びR8〜R15という名称によって参照される。
MMXパックド整数フラットレジスタファイル1550がエイリアスされるスカラー浮動小数点スタックレジスタファイル(x87スタック)1545−図示した実施形態では、x87スタックは、x87命令セットエクステンションを用いて32/64/80ビットの浮動小数点データに対してスカラー浮動小数点演算を実行するのに用いられる8要素スタックである一方、MMXレジスタは、64ビットパックド整数データに対して演算を実行するとともに、MMXレジスタとXMMレジスタとの間で実行される幾つかの演算用のオペランドを保持するのに用いられる。
本発明の代替の実施形態は、より広いレジスタ又はより狭いレジスタを用いることができる。加えて、本発明の代替の実施形態は、より多くのレジスタファイル及びレジスタ、より少ないレジスタファイル及びレジスタ、又は異なるレジスタファイル及びレジスタを用いることができる。
例示的なコアアーキテクチャ、プロセッサ、及びコンピューターアーキテクチャ
プロセッサコアは、種々の目的で種々のプロセッサにおいて種々の方法で実施することができる。例えば、そのようなコアの実施態様は、1)汎用コンピューティングを対象とした汎用インオーダーコア、2)汎用コンピューティングを対象とした高性能汎用アウトオブオーダーコア、3)主としてグラフィックス及び/又は科学(スループット)コンピューティングを対象とした専用コアを含むことができる。種々のプロセッサの実施態様は、1)汎用コンピューティングを対象とした1つ若しくは複数の汎用インオーダーコア及び/又は汎用コンピューティングを対象とした1つ若しくは複数の汎用アウトオブオーダーコアを備えるCPU、並びに2)主としてグラフィックス及び/又は科学(スループット)を対象とした1つ又は複数の専用コアを備えるコプロセッサを含むことができる。そのような種々のプロセッサは、1)CPUとは別個のチップ上のコプロセッサ、2)CPUと同じパッケージ内にある別個のダイ上のコプロセッサ、3)CPUと同じダイ上のコプロセッサ(この場合、そのようなコプロセッサは、統合グラフィックスロジック及び/又は科学(スループット)ロジック等の専用ロジック又は専用コアと呼ばれることがある)、並びに4)説明したCPU(アプリケーションコア(複数の場合もある)又はアプリケーションプロセッサ(複数の場合もある)と呼ばれることがある)、上述したコプロセッサ、及び追加の機能と同じダイ上に備えることができるシステムオンチップ、を備えることができる種々のコンピューターシステムアーキテクチャをもたらす。例示的なコアアーキテクチャを次に説明し、その後に例示的なプロセッサ及びコンピューターアーキテクチャを説明する。
例示的なコアアーキテクチャ
インオーダーコア及びアウトオブオーダーコアのブロック図
図16Aは、本発明の実施形態による例示的なインオーダーパイプライン及び例示的なレジスタリネームアウトオブオーダー発行/実行パイプラインの双方を示すブロック図である。図16Bは、本発明の実施形態によるプロセッサに含まれる、インオーダーアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネームアウトオブオーダー発行/実行アーキテクチャコアの双方を示すブロック図である。図16A及び図16Bにおける実線のボックスは、インオーダーパイプライン及びインオーダーコアを示している一方、破線のボックスのオプションの追加は、レジスタリネームアウトオブオーダー発行/実行パイプライン及びコアを示している。インオーダーの態様はアウトオブオーダーの態様のサブセットであることから、アウトオブオーダーの態様を説明することにする。
図16Aにおいて、プロセッサパイプライン1600は、フェッチステージ1602、長さデコードステージ1604、デコードステージ1606、アロケーションステージ1608、リネームステージ1610、スケジューリング(ディスパッチ又は発行としても知られている)ステージ1612、レジスタ読み出し/メモリ読み出しステージ1614、実行ステージ1616、ライトバック/メモリ書き込みステージ1618、例外ハンドリングステージ1622、及びコミットステージ1624を備える。
図16Bは、実行エンジンユニット1650に結合されたフロントエンドユニット1630を備えるプロセッサコア1690を示し、双方は、メモリユニット1670に結合されている。コア1690は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、又はハイブリッドコアタイプ若しくは代替のコアタイプとすることができる。更に別のオプションとして、コア1690は、例えば、ネットワークコア又は通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(GPGPU)コア、グラフィックスコア等のような専用コアとすることができる。
フロントエンドユニット1630は、命令キャッシュユニット1634に結合された分岐予測ユニット1632を備え、この命令キャッシュユニットは、命令変換索引バッファー(TLB)1636に結合され、この命令変換索引バッファーは、命令フェッチユニット1638に結合され、この命令フェッチユニットは、デコードユニット1640に結合されている。デコードユニット1640(又はデコーダー)は、命令をデコードし、オリジナルの命令からデコードされるか、又はオリジナルの命令を別の方法で反映するか、又はオリジナルの命令から導出される1つ又は複数のマイクロ演算、マイクロコードエントリーポイント、マイクロ命令、他の命令、又は他の制御信号を出力として生成することができる。デコードユニット1640は、様々な異なるメカニズムを用いて実施することができる。好適なメカニズムの例には、ルックアップテーブル、ハードウェア実施態様、プログラマブルロジックアレイ(PLA)、マイクロコード読み出し専用メモリ(ROM)等が含まれるが、これらに限定されるものではない。1つの実施形態では、コア1690は、(例えば、デコードユニット1640内又は別の状況ではフロントエンドユニット1630内において)或る特定のマクロ命令用のマイクロコードをストアするマイクロコードROM又は他の媒体を備える。デコードユニット1640は、実行エンジンユニット1650内のリネーム/アロケーターユニット1652に結合されている。
実行エンジンユニット1650は、リタイアメントユニット1654と一組の1つ又は複数のスケジューラユニット1656とに結合されたリネーム/アロケーターユニット1652を備える。スケジューラユニット(複数の場合もある)1656は、予約ステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット(複数の場合もある)1656は、物理レジスタファイル(複数の場合もある)ユニット(複数の場合もある)1658に結合されている。物理レジスタファイル(複数の場合もある)ユニット1658のそれぞれは、1つ又は複数の物理レジスタファイルを表し、これらの物理レジスタファイルの異なるものは、スカラー整数、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行される次の命令のアドレスである命令ポインター)等の1つ又は複数の異なるデータタイプをストアする。1つの実施形態では、物理レジスタファイル(複数の場合もある)ユニット1658は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、及びスカラーレジスタユニットを含む。
これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供することができる。物理レジスタファイル(複数の場合もある)ユニット(複数の場合もある)1658は、(例えば、リオーダーバッファー(複数の場合もある)及びリタイアメントレジスタファイル(複数の場合もある)を用いる;フューチャーファイル(複数の場合もある)、履歴バッファー(複数の場合もある)、及びリタイアメントレジスタファイル(複数の場合もある)を用いる;レジスタマップ及びレジスタのプールを用いる等して)レジスタリネーム及びアウトオブオーダー実行を実施することができる様々な方法を示すリタイアメントユニット1654によって重ね合わされる。リタイアメントユニット1654及び物理レジスタファイル(複数の場合もある)ユニット(複数の場合もある)1658は、実行クラスター(複数の場合もある)1660に結合されている。実行クラスター(複数の場合もある)1660は、一組の1つ又は複数の実行ユニット1662及び一組の1つ又は複数のメモリアクセスユニット1664を備える。実行ユニット1662は、様々なタイプのデータ(例えば、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して様々な演算(例えば、シフト、加算、減算、乗算)を実行することができる。
幾つかの実施形態は、特定の機能又は特定の数組の機能に専用の複数の実行ユニットを備えることができるが、他の実施形態は、全ての機能を全て実行する1つの実行ユニットのみ又は複数の実行ユニットを備えることができる。スケジューラユニット(複数の場合もある)1656、物理レジスタファイル(複数の場合もある)ユニット(複数の場合もある)1658、及び実行クラスター(複数の場合もある)1660は、場合によっては複数のものとして示される。なぜならば、或る特定の実施形態は、或る特定のタイプのデータ/演算用の別々のパイプライン(例えば、それぞれがそれ自体のスケジューラユニット、物理レジスタファイル(複数の場合もある)ユニット、及び/又は実行クラスターを有するスカラー整数パイプライン、スカラー浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、及び/又はメモリアクセスパイプライン。別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスターのみがメモリアクセスユニット(複数の場合もある)1664を有する或る特定の実施形態が実施される)を作成するからである。別々のパイプラインが用いられる場合、これらのパイプラインのうちの1つ又は複数はアウトオブオーダー発行/実行とすることができ、残りはインオーダーとすることができることも理解されるべきである。
一組のメモリアクセスユニット1664は、メモリユニット1670に結合され、このメモリユニットは、レベル2(L2)キャッシュユニット1676に結合されたデータキャッシュユニット1674に結合されているデータTLBユニット1672を備える。1つの例示的な実施形態では、メモリアクセスユニット1664は、ロードユニット、アドレスストアユニット、及びデータストアユニットを備えることができ、これらのそれぞれは、メモリユニット1670内のデータTLBユニット1672に結合されている。命令キャッシュユニット1634は、メモリユニット1670内のレベル2(L2)キャッシュユニット1676に更に結合されている。L2キャッシュユニット1676は、1つ又は複数の他のレベルのキャッシュ及び最終的にはメインメモリに結合されている。
例として、例示的なレジスタリネームアウトオブオーダー発行/実行コアアーキテクチャは、次のようにパイプライン1600を実施することができる。すなわち、1)命令フェッチ1638が、フェッチステージ1602及び長さデコードステージ1604を実行する;2)デコードユニット1640が、デコードステージ1606を実行する;3)リネーム/アロケーターユニット1652が、アロケーションステージ1608及びリネームステージ1610を実行する;4)スケジューラユニット(複数の場合もある)1656が、スケジュールステージ1612を実行する;5)物理レジスタファイル(複数の場合もある)ユニット(複数の場合もある)1658及びメモリユニット1670が、レジスタ読み出し/メモリ読み出しステージ1614を実行する;実行クラスター1660が、実行ステージ1616を実行する;6)メモリユニット1670及び物理レジスタファイル(複数の場合もある)ユニット(複数の場合もある)1658が、ライトバック/メモリ書き込みステージ1618を実行する;7)様々なユニットが、例外ハンドリングステージ1622に関与することができる;並びに8)リタイアメントユニット1654及び物理レジスタファイル(複数の場合もある)ユニット(複数の場合もある)1658が、コミットステージ1624を実行する。
コア1690は、本明細書において説明する命令(複数の場合もある)を含む1つ又は複数の命令セット(例えば、x86命令セット(より新しいバージョンとともに追加された幾つかの拡張を有する);カリフォルニア州サニーベールのMIPS Technologies社のMIPS命令セット;カリフォルニア州サニーベールのARM Holdings社のARM命令セット(NEON等のオプションの追加の拡張を有する)をサポートすることができる。1つの実施形態では、コア1690は、パックドデータ命令セットエクステンション(例えば、AVX1、AVX2)をサポートするロジックを備え、それによって、多くのマルチメディアアプリケーションによって用いられる演算をパックドデータを用いて実行することが可能になる。
コアはマルチスレッド化(並列の2つ以上の組の演算又はスレッドを実行する)をサポートすることができ、タイムスライスマルチスレッド化、同時マルチスレッド化(単一の物理コアが、当該物理コアが同時にマルチスレッド化しているスレッドのそれぞれについて論理コアを提供する)、又はそれらの組合せ(例えば、Intel(登録商標)のHyperthreading technology等のタイムスライスフェッチ及びデコード、並びにその後の同時のマルチスレッド化)を含む様々な方法でそれを行うことができることが理解されるべきである。
レジスタリネームは、アウトオブオーダー実行との関連で説明されているが、レジスタリネームは、インオーダーアーキテクチャにおいても用いることができることが理解されるべきである。プロセッサの図示した実施形態は、別々の命令キャッシュユニット1634及びデータキャッシュユニット1674並びに共有L2キャッシュユニット1676を備えるが、代替の実施形態は、例えば、レベル1(L1)内部キャッシュ、又は複数のレベルの内部キャッシュ等の命令及びデータの双方用の単一の内部キャッシュを有することができる。幾つかの実施形態では、システムは、内部キャッシュと、コア及び/又はプロセッサの外部にある外部キャッシュとの組合せを備えることができる。代替的に、キャッシュの全てを、コア及び/又はプロセッサの外部にすることができる。
具体的な例示的インオーダーコアアーキテクチャ
図17A及び図17Bは、より具体的な例示的インオーダーコアアーキテクチャのブロック図を示している。このコアは、チップ内の幾つかの論理ブロック(同じタイプ及び/又は異なるタイプの他のコアを含む)のうちの1つである。これらの論理ブロックは、アプリケーションに応じて、或る固定機能ロジック、メモリI/Oインターフェース、及び他の必要なI/Oロジックと、高帯域幅相互接続ネットワーク(例えば、リングネットワーク)を通じて通信する。
図17Aは、本発明の実施形態による、オンダイ相互接続ネットワーク1702への接続と、レベル2(L2)キャッシュ1704のローカルサブセットとを伴ったシングルプロセッサコアのブロック図である。1つの実施形態では、命令デコーダー1700は、パックドデータ命令セットエクステンションを有するx86命令セットをサポートする。L1キャッシュ1706は、スカラーユニット及びベクトルユニット内へのキャッシュメモリへの低レイテンシーアクセスを可能にする。1つの実施形態(設計を単純化する)では、スカラーユニット1708及びベクトルユニット1710は、別々のレジスタセット(それぞれ、スカラーレジスタ1712及びベクトルレジスタ1714)を用い、それらの間で転送されるデータは、メモリに書き込まれ、次いで、レベル1(L1)キャッシュ1706からリードバックされるが、本発明の代替の実施形態は、異なる手法を用いる(例えば、単一のレジスタセットを用いるか、又はライトバック及びリードバックされることなく2つのレジスタファイル間でデータを転送することを可能にする通信パスを備える)ことができる。
L2キャッシュ1704のローカルサブセットは、プロセッサコアごとに1つの別々のローカルサブセットに分割されたグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュ1704のそれ自身のローカルサブセットへの直接アクセスパスを有する。プロセッサコアによって読み出されたデータは、当該プロセッサコアのL2キャッシュサブセット1704にストアされ、他のプロセッサコアがそれら自身のローカルL2キャッシュサブセットにアクセスすることと並列に高速にアクセスすることができる。プロセッサコアによって書き込まれたデータは、それ自身のL2キャッシュサブセット1704にストアされ、必要な場合に他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシーを保証する。リングネットワークは、プロセッサコア、L2キャッシュ、及び他の論理ブロック等のエージェントがチップ内で互いに通信することを可能にするために双方向である。各リングデータパスは、方向あたり1012ビット幅である。
図17Bは、本発明の実施形態による、図17Aにおけるプロセッサコアの一部の拡大図である。図17Bは、L1キャッシュ1704のL1データキャッシュ1706A部分、並びにベクトルユニット1710及びベクトルレジスタ1714に関するより詳細な内容を含む。具体的には、ベクトルユニット1710は、整数命令、単精度浮動小数点命令、倍精度浮動小数点命令のうちの1つ又は複数を実行する16幅ベクトル処理ユニット(VPU)(16幅ALU1728を参照)である。VPUは、スウィズルユニット1720を用いたレジスタ入力のスウィズルと、数値変換ユニット1722A及び1722Bを用いた数値変換と、メモリ入力に関する複製ユニット1724を用いた複製とをサポートする。書き込みマスクレジスタ1726は、結果のベクトル書き込みを断定することを可能にする。
統合メモリコントローラー及び統合グラフィックスを有するプロセッサ
図18は、本発明の実施形態による、2つ以上のコアを有することができ、統合メモリコントローラーを有することができ、統合グラフィックスを有することができるプロセッサ1800のブロック図である。図18における実線のボックスは、単一のコア1802Aと、システムエージェント1810と、一組の1つ又は複数のバスコントローラーユニット1816とを有するプロセッサ1800を示している一方、破線のボックスのオプションの追加は、複数のコア1802A〜1802Nと、システムエージェントユニット1810内の一組の1つ又は複数の統合メモリコントローラーユニット1814と、専用ロジック1808とを有する代替のプロセッサ1800を示している。
したがって、プロセッサ1800の種々の実施態様は、1)統合グラフィックス及び/又は科学(スループット)ロジック(1つ又は複数のコアを備えることができる)である専用ロジック1808と、1つ又は複数の汎用コア(例えば、汎用インオーダーコア、汎用アウトオブオーダーコア、これらの2つの組合せ)であるコア1802A〜1802Nとを有するCPUと、2)主としてグラフィックス及び/又は科学(スループット)向けの多数の専用コアであるコア1802A〜1802Nを有するコプロセッサと、3)多数の汎用インオーダーコアであるコア1802A〜1802Nを有するコプロセッサとを備えることができる。したがって、プロセッサ1800は、汎用プロセッサ、例えば、ネットワークプロセッサ若しくは通信プロセッサ等のコプロセッサ又は専用プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、高スループットメニーインテグレーテッドコア(MIC)コプロセッサ(30個以上のコアを備える)、組み込みプロセッサ等とすることができる。このプロセッサは、1つ又は複数のチップ上に実装することができる。プロセッサ1800は、例えば、BiCMOS、CMOS、又はNMOS等の複数のプロセス技術のうちの任意のものを用いた1つ若しくは複数の基板の一部とすることができ、及び/又は1つ若しくは複数の基板上に実装することができる。
メモリ階層は、コア内の1つ又は複数のレベルのキャッシュと、一組の1つ又は複数の共有キャッシュユニット1806と、一組の統合メモリコントローラーユニット1814に結合された外部メモリ(図示せず)とを含む。一組の共有キャッシュユニット1806は、レベル2(L2)、レベル3(L3)、レベル4(L4)、若しくは他のレベルのキャッシュ等の1つ又は複数の中間レベルキャッシュ、最終レベルキャッシュ(LLC)、及び/又それらの組合せを含むことができる。1つの実施形態では、リングベースの相互接続部ユニット1812が、統合グラフィックスロジック1808、一組の共有キャッシュユニット1806、及びシステムエージェントユニット1810/統合メモリコントローラーユニット(複数の場合もある)1814を相互接続するが、代替の実施形態は、そのようなユニットを相互接続するための任意の数のよく知られた技法を用いることができる。1つの実施形態では、1つ又は複数のキャッシュユニット1806とコア1802A〜1802Nとの間にコヒーレンシーが維持される。
幾つかの実施形態では、コア1802A〜1802Nのうちの1つ又は複数は、マルチスレッド化することができる。システムエージェント1810は、コア1802A〜1802Nを連係及び動作させる構成要素を備える。システムエージェントユニット1810は、例えば、電力制御ユニット(PCU)及びディスプレイユニットを備えることができる。PCUは、コア1802A〜1802N及び統合グラフィックスロジック1808の電力状態を調整するのに必要なロジック及び構成要素とすることができるか又はそれらを備えることができる。ディスプレイユニットは、1つ又は複数の外部に接続されたディスプレイを駆動するためのものである。
コア1802A〜1802Nは、アーキテクチャ命令セットの観点で同種のものとすることもできるし、異種のものとすることもできる。すなわち、コア1802A〜1802Nのうちの2つ以上は、同じ命令セットを実行可能とすることができる一方、他のものは、その命令セットのサブセットのみ又は異なる命令セットを実行可能とすることができる。
例示的なコンピューターアーキテクチャ
図19〜図22は、例示的なコンピューターアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、携帯情報端末、エンジニアリングワークステーション、サーバー、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラー、携帯電話、ポータブルメディアプレイヤー、ハンドヘルドデバイス、及び他の様々な電子デバイスについて当該技術分野において知られている他のシステム設計及び構成も適している。概して、本明細書において開示されるようなプロセッサ及び/又は他の実行ロジックを組み込むことができる非常に多くの様々なシステム又は電子デバイスが一般に適している。
次に図19を参照すると、本発明の1つの実施形態によるシステム1900のブロック図が示されている。システム1900は、コントローラーハブ1920に結合された1つ又は複数のプロセッサ1910、1915を備えることができる。1つの実施形態では、コントローラーハブ1920は、グラフィックスメモリコントローラーハブ(GMCH)1990及び入力/出力ハブ(IOH)1950(別々のチップ上に存在することができる)を含む。GMCH1990は、メモリと、メモリ1940及びコプロセッサ1945が結合されたグラフィックスコントローラーとを備える。IOH1950は、入力/出力(I/O)デバイス1960をGMCH1990に結合する。代替的に、メモリ及びグラフィックスコントローラーの一方又は双方は、(本明細書において説明するように)プロセッサ内に統合され、メモリ1940及びコプロセッサ1945は、プロセッサ1910と、IOH1950を有する単一のチップ内のコントローラーハブ1920とに直接結合されている。
追加のプロセッサ1915のオプションの特性が、図19に破線で示されている。各プロセッサ1910、1915は、本明細書において説明する処理コアのうちの1つ又は複数を備えることができ、プロセッサ1800の或るバージョンとすることができる。
メモリ1940は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、又はこれらの2つの組合せとすることができる。少なくとも1つの実施形態について、コントローラーハブ1920は、フロントサイドバス(FSB)等のマルチドロップバス、QuickPath Interconnect(QPI)等のポイントツーポイントインターフェース、又は同様の接続1995を介してプロセッサ(複数の場合もある)1910、1915と通信する。
1つの実施形態では、コプロセッサ1945は、例えば、高スループットMICプロセッサ、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサ等のような専用プロセッサである。1つの実施形態では、コントローラーハブ1920は、統合グラフィックスアクセラレーターを備えることができる。
アーキテクチャの特性、マイクロアーキテクチャの特性、熱特性、電力消費特性等を含む多様なメリットメトリック(metrics of merit)の観点から、物理リソース1910、1915間には様々な相違が存在する可能性がある。
1つの実施形態では、プロセッサ1910は、一般のタイプのデータ処理演算を制御する命令を実行する。命令内には、コプロセッサ命令を組み込むことができる。プロセッサ1910は、これらのコプロセッサ命令を、アタッチされたコプロセッサ1945によって実行されるべきタイプであるとして認識する。したがって、プロセッサ1910は、これらのコプロセッサ命令(又はコプロセッサ命令を表す制御信号)を、コプロセッサ1945に向けてコプロセッサバス又は他の相互接続上に発行する。コプロセッサ(複数の場合もある)1945は、受信したコプロセッサ命令を受理して実行する。
次に図20を参照すると、本発明の一実施形態による第1のより具体的な例示的システム2000のブロック図が示されている。図20に示すように、マルチプロセッサシステム2000は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続2050を介して結合された第1のプロセッサ2070及び第2のプロセッサ2080を備える。プロセッサ2070及び2080のそれぞれは、プロセッサ1800の或るバージョンとすることができる。本発明の1つの実施形態では、プロセッサ2070及び2080は、それぞれプロセッサ1910及び1915である一方、コプロセッサ2038は、コプロセッサ1945である。別の実施形態では、プロセッサ2070及び2080は、それぞれプロセッサ1910及びコプロセッサ1945である。
プロセッサ2070及び2080は、それぞれ統合メモリコントローラー(IMC)ユニット2072及び2082を備えるものとして示されている。プロセッサ2070は、そのバスコントローラーユニットの一部としてポイントツーポイント(P−P)インターフェース2076及び2078も備える。同様に、第2のプロセッサ2080も、P−Pインターフェース2086及び2088を備える。プロセッサ2070、2080は、ポイントツーポイント(P−P)インターフェース回路2078、2088を用いてP−Pインターフェース2050を介して情報を交換することができる。図20に示すように、IMC2072及び2082は、プロセッサをそれぞれのメモリ、すなわちメモリ2032及びメモリ2034に結合している。これらのメモリは、それぞれのプロセッサにローカルにアタッチされたメインメモリの一部分とすることができる。
プロセッサ2070、2080はそれぞれ、ポイントツーポイントインターフェース回路2076、2094、2086、2098を用いて個々のP−Pインターフェース2052、2054を介してチップセット2090と情報を交換することができる。チップセット2090は、オプションとして、高性能インターフェース2039を介してコプロセッサ2038と情報を交換することができる。1つの実施形態では、コプロセッサ2038は、例えば、高スループットMICプロセッサ、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサ等のような専用プロセッサである。
共有キャッシュ(図示せず)を、いずれかのプロセッサ内に備えることもできるし、双方のプロセッサの外部に備えて、さらに、P−P相互接続を介してプロセッサと接続することもでき、その結果、プロセッサが低電力モードになった場合に、いずれかのプロセッサ又は双方のプロセッサのローカルキャッシュ情報を共有キャッシュにストアすることができる。
チップセット2090は、インターフェース2096を介して第1のバス2016に結合することができる。1つの実施形態では、第1のバス2016は、周辺機器相互接続(PCI)バス、又はPCIエクスプレスバス若しくは別の第3世代I/O相互接続バス等のバスとすることができるが、本発明の範囲は、そのように限定されるものではない。
図20に示すように、様々なI/Oデバイス2014を、第1のバス2016を第2のバス2020に結合するバスブリッジ2018とともに第1のバス2016に結合することができる。1つの実施形態では、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレーター(例えば、グラフィックスアクセラレーター又はデジタル信号処理(DSP)ユニット等)、フィールドプログラマブルゲートアレイ、又は他の任意のプロセッサ等の1つ又は複数の追加のプロセッサ2015が第1のバス2016に結合されている。1つの実施形態では、第2のバス2020は、ローピンカウント(LPC)バスとすることができる。様々なデバイスを第2のバス2020に結合することができる。これらの様々なデバイスには、例えば、キーボード及び/又はマウス2022、通信デバイス2027、並びに1つの実施形態では命令/コード及びデータ2030を含むことができるディスクドライブ若しくは他のマスストレージデバイス等の記憶ユニット2028が含まれる。さらに、オーディオI/O2024を第2のバス2020に結合することができる。他のアーキテクチャが可能であることに留意されたい。例えば、図20のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスアーキテクチャ又は他のそのようなアーキテクチャを実装することができる。
次に図21を参照すると、本発明の一実施形態による第2のより具体的な例示的なシステム2100のブロック図が示されている。図20及び図21における同様の要素は、同様の参照符号を有し、図20の或る特定の態様(certain aspects)は、図21の他の態様を分かりにくくしないように図21から省略されている。
図21は、プロセッサ2070、2080が、それぞれ、統合されたメモリ及びI/Oの制御ロジック(「CL」)2072及び2082を備えることができることを示している。したがって、CL2072、2082は、統合メモリコントローラーユニットを備え、I/O制御ロジックを備える。図21は、メモリ2032、2034がCL2072、2082に結合されていることだけでなく、I/Oデバイス2114も制御ロジック2072、2082に結合されていることを示している。レガシーI/Oデバイス2115がチップセット2090に結合されている。
次に図22を参照すると、本発明の一実施形態によるSoC2200のブロック図が示されている。図18における同様の要素は、同様の参照符号を有する。また、破線のボックスは、より高度なSoC上のオプションの特徴である。図22において、相互接続ユニット(複数の場合もある)2202は、一組の1つ又は複数のコア1802A〜1802N及び共有キャッシュユニット(複数の場合もある)1806を備えるアプリケーションプロセッサ2210と、システムエージェントユニット1810と、バスコントローラーユニット(複数の場合もある)1816と、統合メモリコントローラーユニット(複数の場合もある)1814と、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、及びビデオプロセッサを含むことができる一組の1つ又は複数のコプロセッサ2220と、スタティックランダムアクセスメモリ(SRAM)ユニット2230と、ダイレクトメモリアクセス(DMA)ユニット2232と、1つ又は複数の外部ディスプレイに結合するためのディスプレイユニット2240とに結合されている。1つの実施形態では、コプロセッサ(複数の場合もある)2220は、例えば、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、組み込みプロセッサ等のような専用プロセッサを含む。
本明細書において開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような実施手法の組合せで実施することができる。本発明の実施形態は、少なくとも1つのプロセッサと、記憶システム(揮発性及び不揮発性メモリ及び/又は記憶素子を含む)と、少なくとも1つの入力デバイスと、少なくとも1つの出力デバイスとを備えるプログラマブルシステム上で実行されるコンピュータープログラム又はプログラムコードとして実施することができる。
図20に図示したコード2030等のプログラムコードは、入力された命令に適用されて、本明細書において説明した機能を実行し、出力情報を生成することができる。この出力情報は、既知の方法で1つ又は複数の出力デバイスに適用することができる。この適用のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラー、特定用途向け集積回路(ASIC)、又はマイクロプロセッサ等のプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信する高水準手続型プログラム言語又はオブジェクト指向型プログラム言語で実施することができる。プログラムコードは、所望の場合には、アセンブリ言語又は機械語で実施することもできる。実際に、本明細書において説明したメカニズムは、どの特定のプログラム言語にも範囲が限定されるものではない。いずれにしても、この言語は、コンパイル型言語又は解釈型言語とすることができる。
少なくとも1つの実施形態の1つ又は複数の態様は、機械によって読み出されると、当該機械に、本明細書において説明した技法を実行するロジックを作製させるプロセッサ内の様々なロジックを表す機械可読媒体上にストアされた代表的な命令によって実施することができる。「IPコア」として知られているそのような表現は、有形の機械可読媒体上にストアすることができ、様々な顧客又は製造設備に供給して、ロジック又はプロセッサを実際に作製する製造機械にロードすることができる。
そのような機械可読記憶媒体は、機械又はデバイスによって製造又は形成された物品の非一時的な有形の構成を含むことができるが、これに限定されるものではない。これらの物品は、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスク読み出し専用メモリ(CD−ROM)、再書込み可能コンパクトディスク(CD−RW)、及び光磁気ディスクを含む他の任意のタイプのディスク、読み出し専用メモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)等のランダムアクセスメモリ(RAM)、消去可能プログラマブル読み出し専用メモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブル読み出し専用メモリ(EEPROM)、相変化メモリ(PCM)、磁気カード若しくは光カード、又は電子命令をストアするのに好適な他の任意のタイプの媒体等の半導体デバイス等の記憶媒体を含む。
したがって、本発明の実施形態は、命令を含む非一時的な有形の機械可読媒体、又は本明細書において説明した構造、回路、装置、プロセッサ及び/又はシステムの特徴を定義するハードウェア記述言語(HDL)等の設計データを含む非一時的な有形の機械可読媒体も含む。そのような実施形態は、プログラム製品と呼ばれる場合もある。
エミュレーション(バイナリ変換、コードモーフィング等を含む)
場合によっては、命令変換器を用いて、命令をソース命令セットからターゲット命令セットに変換することができる。例えば、命令変換器は、命令を、コアによって処理される1つ又は複数の他の命令に変換(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いる)、モーフィング、エミュレート、又は別の方法で変換することができる。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、又はそれらの組合せで実施することができる。命令変換器は、オンプロセッサ、オフプロセッサ、又は一部分がオンプロセッサ及び一部分がオフプロセッサとすることができる。
図23は、本発明の実施形態による、ソフトウェア命令変換器を用いて、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換することを対比したブロック図である。図示した実施形態では、命令変換器は、ソフトウェア命令変換器であるが、代替的に、命令変換器は、ソフトウェア、ファームウェア、ハードウェア、又はそれらの様々な組合せで実施することができる。図23は、高水準言語2302によるプログラムを、x86コンパイラー2304を用いてコンパイルしてx86バイナリコード2306を生成することができることを示している。このx86バイナリコードは、少なくとも1つのx86命令セットコア2316を有するプロセッサが本来的に実行することができるものである。少なくとも1つのx86命令セットコア2316を有するプロセッサは、少なくとも1つのx86命令セットコアを有するIntelプロセッサと実質的に同じ結果を達成するために、(1)Intel x86命令セットコアの命令セットの実質的部分、又は(2)少なくとも1つのx86命令セットコアを有するIntelプロセッサ上で実行されることを目的としたアプリケーション又は他のソフトウェアのオブジェクトコードバージョン、を矛盾なく実行又は別の方法で処理することによって、少なくとも1つのx86命令セットコアを有するIntelプロセッサと実質的に同じ機能を実行することができる任意のプロセッサを表している。
x86コンパイラー2304は、追加のリンク処理の有無を問わず、少なくとも1つのx86命令セットコア2316を有するプロセッサ上で実行することができるx86バイナリコード2306(例えば、オブジェクトコード)を生成するように動作可能なコンパイラーを表している。同様に、図23は、高水準言語2302によるプログラムを、代替の命令セットコンパイラー2308を用いてコンパイルして代替の命令セットバイナリコード2310を生成することができることを示している。この代替の命令セットバイナリコードは、少なくとも1つのx86命令セットコア2314を有しないプロセッサ(例えば、カリフォルニア州サニーベールのMIPS Technologies社のMIPS命令セットを実行するコアを有するプロセッサ及び/又はカリフォルニア州サニーベールのARM Holdings社のARM命令セットを実行するコアを有するプロセッサ)が本来的に実行することができるものである。命令変換器2312は、x86バイナリコード2306を、x86命令セットコア2314を有しないプロセッサが本来的に実行することができるコードに変換するのに用いられる。この変換されたコードは、代替の命令セットバイナリコード2310と同じである可能性は低い。なぜならば、これを行うことができる命令変換器は、作製が困難であるからである。しかしながら、変換されたコードは、一般的な演算を達成し、代替の命令セットからの命令で構成される。したがって、命令変換器2312は、エミュレーション、シミュレーション、又は他の任意のプロセスを通じて、x86命令セットプロセッサもコアも有しないプロセッサ又は他の電子デバイスがx86バイナリコード2306を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、又はそれらの組合せを表している。
図4〜図11のうちの任意のものについて説明した構成要素、特徴、及び詳細は、オプションとして、図1〜図3のうちの任意のものにおいても用いことができる。その上、装置のうちの任意のものについて本明細書において説明した構成要素、特徴、及び詳細は、オプションとして、実施形態においてそのような装置によって及び/又はそのような装置を用いて実行することができる本明細書において説明した方法のうちの任意のものにおいても用いることができる。
例示の実施形態
以下の例は、更なる実施形態に関する。それらの例における細部は、1つ又は複数の実施形態における任意の箇所に用いることができる。
例1は、プロセッサである。このプロセッサは、複数のパックドデータレジスタを備える。このプリセッサは、パックドデータレジスタと結合されたユニットであって、8ビットメモリインデックス及び16ビットメモリインデックスから選択された複数のパックドメモリインデックスを有するソースパックドメモリインデックスを示す限定範囲ベクトルメモリアクセス命令に応答して動作可能であり、限定範囲ベクトルメモリアクセス命令に応答してメモリの限定範囲内のみのメモリロケーションにアクセスするように動作可能であるユニットも備える。
例2は、請求項1の主題を含み、オプションとして、限定範囲ベクトルメモリアクセス命令は、8ビットメモリインデックスを含むソースパックドメモリインデックスを示す。
例3は、請求項1の主題を含み、オプションとして、ユニットは、限定範囲ベクトルメモリアクセス命令に応答して、256バイトのみを含む限定範囲内のメモリロケーションにアクセスする。
例4は、請求項1の主題を含み、オプションとして、限定範囲ベクトルメモリアクセス命令は、少なくとも32個のメモリインデックスを含むソースパックドメモリインデックスを示す。
例5は、請求項1の主題を含み、オプションとして、ユニットは、限定範囲ベクトルメモリアクセス命令に応答して、少なくとも32ビットのメモリアドレスを有するメモリの限定範囲にアクセスする。
例6は、請求項5の主題を含み、オプションとして、ユニットは、限定範囲ベクトルメモリアクセス命令に応答して、メモリインデックスのそれぞれを符号拡張し、符号拡張されたメモリインデックスのそれぞれにスケールファクターを適用する。
例7は、請求項1の主題を含み、オプションとして、ユニットは、限定範囲ベクトルメモリアクセス命令に応答して、複数のパックドメモリインデックスのうちの一メモリインデックスによって示されるメモリアドレスにおける少なくとも1つのデータ要素と、複数のパックドメモリインデックスのうちの一メモリインデックスによって示されないメモリアドレスにおける少なくとも1つのデータ要素とをロードする多重データ要素ロードを実行する。
例8は、請求項1の主題を含み、オプションとして、ユニットは、限定範囲ベクトルメモリアクセス命令に応答して、メモリからプロセッサの記憶ロケーションに限定範囲全体をロードする。
例9は、請求項1の主題を含み、オプションとして、ユニットは、限定範囲ベクトルメモリアクセス命令に応答して、複数のデータ要素をロードする多重データ要素ロードを実行し、(a)命令がパックドデータ演算マスクを示していないとき、及び(b)命令がパックドデータ演算マスクを示しているが、パックドデータ演算マスクの対応するマスク要素がマスクされていないときの一方であるとき、複数のロードされたデータ要素のうちの第2のものを命令によって示されたデスティネーション記憶ロケーションにストアすることなく、複数のロードされたデータ要素のうちの第1のものをデスティネーション記憶ロケーションにストアする。
例10は、請求項1の主題を含み、オプションとして、ユニットは、限定範囲ベクトルメモリアクセス命令に応答して、メモリからプロセッサの記憶ロケーションに限定範囲全体をロードし、ユニットは、限定範囲ベクトルメモリアクセス命令に応答して、メモリインデックスに基づいて命令によって示されるデスティネーション記憶ロケーションに限定範囲全体のデータ要素のサブセットを選択的に移動させる。
例11は、請求項1〜8のうちのいずれかの主題を含み、オプションとして、限定範囲ベクトルメモリアクセス命令は、デスティネーション記憶ロケーションを示し、ユニットは、限定範囲ベクトルメモリアクセス命令に応答して、パックドデータ結果をデスティネーション記憶ロケーションにストアし、パックドデータ結果は、それぞれ対応するメモリインデックスによって示される限定範囲内のメモリロケーションからの複数のデータ要素を有する。
例12は、請求項1〜8のうちのいずれかの主題を含み、オプションとして、限定範囲ベクトルメモリアクセス命令は、複数のデータ要素を有するソースパックドデータを示し、ユニットは、限定範囲ベクトルメモリアクセス命令に応答して、ソースパックドデータの各データ要素を、対応するメモリインデックスによって示される限定範囲内のメモリロケーションに書き込む。
例13は、請求項1〜8のうちのいずれかの主題を含み、オプションとして、限定範囲ベクトルメモリアクセス命令は、パックドデータ演算マスクを示す。
例14は、プロセッサにおける方法である。この方法は、限定範囲ベクトルメモリアクセス命令を受信することであって、限定範囲ベクトルメモリアクセス命令は、8ビットメモリインデックス及び16ビットメモリインデックスから選択された複数のパックドメモリインデックスを有するソースパックドメモリインデックスを示す、受信することを含む。この方法は、限定範囲ベクトルメモリアクセス命令に応答して、メモリの限定範囲のみのメモリロケーションにアクセスすることも含む。
例15は、請求項14の主題を含み、オプションとして、受信することは、8ビットメモリインデックスを含むソースパックドメモリインデックスを示す命令を受信することを含む。
例16は、請求項14の主題を含み、オプションとして、アクセスすることは、256バイトからなる限定範囲内のメモリロケーションにアクセスすることを含む。
例17は、請求項14の主題を含み、オプションとして、受信することは、デスティネーション記憶ロケーションを示す命令を受信することを含み、この方法は、命令に応答して、パックドデータ結果をデスティネーション記憶ロケーションにストアすることを更に含み、パックドデータ結果は、それぞれ対応するメモリインデックスによって示される限定範囲内のメモリロケーションからの複数のデータ要素を有する。
例18は、請求項14の主題を含み、オプションとして、受信することは、複数のデータ要素を有するソースパックドデータを示す命令を受信することを含み、アクセスすることは、命令に応答して、ソースパックドデータの各データ要素を、対応するメモリインデックスによって示される限定範囲内のメモリロケーションに書き込むことを含む。
例19は、請求項14の主題を含み、オプションとして、アクセスすることは、少なくとも32ビットメモリアドレスを用いてアクセスすることを含む。
例20は、請求項14の主題を含み、オプションとして、アクセスすることは、複数のパックドメモリインデックスのうちの一メモリインデックスによって示されるメモリアドレスにおける少なくとも1つのデータ要素と、複数のパックドメモリインデックスのうちの一メモリインデックスによって示されないメモリアドレスにおける少なくとも1つのデータ要素とをロードすることを含む多重データ要素ロードを実行することを含む。
例21は、請求項14の主題を含み、オプションとして、複数のデータ要素をロードする多重データ要素ロードを実行することと、(a)命令がパックドデータ演算マスクを用いないとき、及び(b)命令がパックドデータ演算マスクを用いるが、パックドデータ演算マスクの対応するマスク要素がマスクされていないときの一方であるとき、複数のロードされたデータ要素のうちの第2のものを命令によって示されたデスティネーション記憶ロケーションにストアすることなく、複数のロードされたデータ要素のうちの第1のものをデスティネーション記憶ロケーションにストアすることと、を更に含む。
例22は、命令を処理するシステムである。このシステムは、相互接続部を備える。このシステムは、相互接続部と結合されたプロセッサも備える。このシステムは、相互接続部と結合されたダイナミックランダムアクセスメモリ(DRAM)であって、このDRAMは、限定範囲ベクトルメモリアクセス命令をストアし、限定範囲ベクトルメモリアクセス命令は、8ビットメモリインデックス及び16ビットメモリインデックスから選択された複数のパックドメモリインデックスを有するソースパックドメモリインデックスを示し、限定範囲ベクトルメモリアクセス命令は、プロセッサによって実行されると、メモリの限定範囲のみのメモリロケーションにアクセスすることを含む演算をプロセッサに実行させるように動作可能である、DRAMとも備える。
例23は、請求項22の主題を含み、オプションとして、限定範囲ベクトルメモリアクセス命令は、8ビットメモリインデックスを含むソースパックドメモリインデックスを示し、命令は、プロセッサによって実行されると、プロセッサに、少なくとも32ビットのメモリアドレスを有する限定範囲にアクセスさせるように動作可能である。
例24は、非一時的機械可読記憶媒体を含む製造物品であって、非一時的機械可読記憶媒体は、限定範囲ベクトルメモリアクセス命令をストアし、限定範囲ベクトルメモリアクセス命令は、8ビットメモリインデックス及び16ビットメモリインデックスから選択された複数のパックドメモリインデックスを有するソースパックドメモリインデックスを示し、限定範囲ベクトルメモリアクセス命令は、機械によって実行されると、メモリの限定範囲のみのメモリロケーションにアクセスすることを含む演算を機械に実行させるように動作可能である、非一時的機械可読記憶媒体を含む製造物品である。
例25は、例24の主題を含み、オプションとして、限定範囲ベクトルメモリアクセス命令は、8ビットメモリインデックスを含むソースパックドメモリインデックスを示し、ソースパックドメモリインデックスは、少なくとも32個のメモリインデックスを含む。
例26は、例14〜21のいずれかに記載の方法を実行する装置である。
例27は、例14〜21のいずれかに記載の方法を実行する手段を備える装置である。
例28は、機械によって実行されると、当該機械に例14〜21のうちのいずれかの方法を実行させる命令をストアする機械可読記憶媒体である。
例29は、実質的に本明細書において説明した命令を実行するプロセッサである。
例30は、実質的に本明細書において説明した方法を実行するプロセッサである。
例31は、実質的に本明細書において説明した方法を実行する手段を備えるプロセッサである。
この説明及び特許請求の範囲において、「結合された」及び/又は「接続された」という用語が、それらの派生語とともに用いられている。これらの用語は互いに同義語として意図されていないことが理解されるべきである。逆に、特定の実施形態では、「接続された」は、2つ以上の要素が互いに直接物理的又は電気的に接触していることを示すのに用いることができる。「結合された」は、2つ以上の要素が直接物理的又は電気的に接触していることを意味することができる。しかしながら、「結合された」は、2つ以上の要素が互いに直接接触していないが、それでも、互いに協働又は相互作用することも意味することができる。例えば、実行ユニットは、1つ又は複数の介在する構成要素を通じて、レジスタ又はデコードロジックと結合することができる。図では、矢印が接続及び結合を示すのに用いられる。
この説明及び特許請求の範囲において、「ロジック」という用語が用いられている場合がある。ロジックは、本明細書において用いられるとき、ハードウェア、ファームウェア、ソフトウェア、又は様々なそれらの組合せ等のモジュールを含むことができる。ロジックの例には、集積回路部、特定用途向け集積回路、アナログ回路、デジタル回路、プログラムされたロジックデバイス、命令を含むメモリデバイス等が含まれる。幾つかの実施形態では、ハードウェアロジックは、他の回路部構成要素とともにトランジスタ及び/又はゲートを潜在的に含むことができる。
上記説明では、実施形態の十分な理解を提供するために、具体的な詳細が述べられてきた。しかしながら、他の実施形態は、これらの具体的な詳細のうちの幾つかがなくても実施することができる。本発明の範囲は、上記に提供された具体例によって決定されるものではなく、添付の特許請求の範囲によってのみ決定される。図に示し本明細書において説明した関係と等価な全ての関係が実施形態内に包含される。他の場合には、よく知られた回路、構造、デバイス、及び動作は、この説明の理解を分かりにくくしないように、ブロック図の形式において又は細部を伴わずに示されている。複数の構成要素が図示及び説明されている場合、場合によっては、これらの複数の構成要素は、1つの構成要素内に組み込むことができる。単一の構成要素が図示及び説明されている場合、場合によっては、この単一の構成要素を2つ以上の構成要素に分割することができる。
様々な演算及び方法が説明されてきた。これらの方法のうちの幾つかは、比較的基本的な形式で流れ図に説明されているが、演算は、オプションとして、これらの方法に追加することができ、及び/又はこれらの方法から除去することができる。加えて、流れ図は、例示の実施形態による演算の特定の順序を示しているが、その特定の順序は例示である。代替の実施形態は、オプションとして演算を異なる順序で実行し、或る特定の演算を組み合わせ、或る特定の演算を重ねる等することができる。
或る特定の演算は、ハードウェア構成要素によって実行することもできるし、命令を用いてプログラムされた機械、回路、又はハードウェア構成要素(例えば、プロセッサ、プロセッサの一部分、回路等)が演算を実行することを引き起こし及び/又はもたらすのに用いることができる機械実行可能な命令又は回路実行可能な命令で具現化することもできる。これらの演算は、オプションとして、ハードウェア及びソフトウェアの組合せによって実行することもできる。プロセッサ、機械、回路、又はハードウェアは、具体的な若しくは特定の回路部を含むことができ、又は他のロジック(例えば、ファームウェア及び/又はソフトウェアと潜在的に組み合わされるハードウェア)は、命令を実行及び/又は処理し、命令に応じた結果をストアするように動作可能である。
幾つかの実施形態は、機械可読媒体を備える製造物品(例えば、コンピュータープログラム製品)を含む。この媒体は、機械によって可読な形式で情報を提供する、例えばストアするメカニズムを含むことができる。機械可読媒体は、機械によって実行された場合及び/又は実行されたとき、本明細書において開示された演算、方法、又は技法のうちの1つを当該機械に実行させ及び/又は機械がこれを実行することをもたらすように動作可能な命令又は命令シーケンスを提供することができる、すなわち、当該媒体にストアしておくことができる。機械可読媒体は、本明細書において開示される命令の実施形態のうちの1つ又は複数を提供する、例えば、ストアすることができる。
幾つかの実施形態では、機械可読媒体は、有形の及び/又は非一時的な機械可読記憶媒体を含むことができる。例えば、有形の及び/又は非一時的な機械可読記憶媒体は、フロッピー(登録商標)ディスケット、光記憶媒体、光ディスク、光データ記憶デバイス、CD−ROM、磁気ディスク、光磁気ディスク、読み出し専用メモリ(ROM)、プログラマブルROM(PROM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、フラッシュメモリ、相変化メモリ、相変化データ記憶材料、不揮発性メモリ、不揮発性データ記憶デバイス、非一時的メモリ、非一時的データ記憶デバイス等を含むことができる。非一時的な機械可読記憶媒体は、一時的な伝播信号からなるものではない。別の実施形態では、機械可読媒体は、一時的機械可読通信媒体、例えば、搬送波、赤外線信号、デジタル信号等の電気的伝播信号、光学的伝播信号、音響的伝播信号、又は他の形式の伝播信号を含むことができる。
好適な機械の例には、汎用プロセッサ、専用プロセッサ、命令処理装置、デジタル論理回路、集積回路等が含まれるが、これらに限定されるものではない。好適な機械の更に他の例には、そのようなプロセッサ、命令処理装置、デジタル論理回路、又は集積回路を組み込んだコンピューティングデバイス及び他の電子デバイスが含まれる。そのようなコンピューティングデバイス及び電子デバイスの例には、デスクトップコンピューター、ラップトップコンピューター、ノートブックコンピューター、タブレットコンピューター、ネットブック、スマートフォン、携帯電話、サーバー、ネットワークデバイス(例えば、ルーター及びスイッチ)、モバイルインターネットデバイス(MID)、メディアプレイヤー、スマートテレビ、ネットトップ、セットトップボックス、及びビデオゲームコントローラーが含まれるが、これらに限定されるものではない。
この明細書全体を通じて、例えば、「1つの実施形態」、「一実施形態」、「1つ又は複数の実施形態」、「幾つかの実施形態」というとき、これは、特定の特徴が本発明の実施において含まれ得るが、必ずしも必須ではないことを示す。同様に、この説明において、様々な特徴は、開示を能率化するとともに様々な発明の態様の理解を助ける目的で、単一の実施形態、図、又はその説明においてともにグループ化されることがある。しかしながら、開示のこの方法は、本発明が各請求項において明確に列挙されたものよりも多くの特徴を必要とするという意図を反映するものと解釈されるべきではない。逆に、添付の特許請求の範囲が反映しているように、本発明の態様は、単一の開示された実施形態の全ての特徴よりも少ないものに存する。したがって、この詳細な説明に続く特許請求の範囲は、この詳細な説明に明確に組み込まれ、各請求項は、本発明の個々の実施形態として自立している。

Claims (24)

  1. 複数のパックドデータレジスタと、
    前記複数のパックドデータレジスタと結合されたユニットであって、8ビットメモリインデックス及び16ビットメモリインデックスから選択された複数のパックドメモリインデックスを有するソースパックドメモリインデックスを示す限定範囲ベクトルメモリアクセス命令に応答して動作可能であり、前記限定範囲ベクトルメモリアクセス命令に応答してメモリにおける連続的なサブセットである限定範囲内のみのメモリロケーションにアクセスするように動作可能であるユニットと、
    を備え
    前記ユニットは、前記限定範囲ベクトルメモリアクセス命令に応答して、前記メモリからプロセッサの記憶ロケーションに前記限定範囲全体をロードする、プロセッサ。
  2. 前記限定範囲ベクトルメモリアクセス命令は、8ビットメモリインデックスを含む前記ソースパックドメモリインデックスを示す、請求項1に記載のプロセッサ。
  3. 前記ユニットは、前記限定範囲ベクトルメモリアクセス命令に応答して、256バイトのみを含む前記限定範囲内のメモリロケーションにアクセスする、請求項1または2に記載のプロセッサ。
  4. 前記限定範囲ベクトルメモリアクセス命令は、少なくとも32個のメモリインデックスを含む前記ソースパックドメモリインデックスを示す、請求項1から3のいずれか一項に記載のプロセッサ。
  5. 前記ユニットは、前記限定範囲ベクトルメモリアクセス命令に応答して、少なくとも32ビットのメモリアドレスを有する前記メモリの前記限定範囲にアクセスする、請求項1から4のいずれか一項に記載のプロセッサ。
  6. 前記ユニットは、前記限定範囲ベクトルメモリアクセス命令に応答して、
    前記メモリインデックスのそれぞれを符号拡張し、
    前記符号拡張されたメモリインデックスのそれぞれにスケールファクターを適用する、
    請求項5に記載のプロセッサ。
  7. 前記ユニットは、前記限定範囲ベクトルメモリアクセス命令に応答して、前記複数のパックドメモリインデックスのうちの一メモリインデックスによって示されるメモリアドレスにおける少なくとも1つのデータ要素と、前記複数のパックドメモリインデックスのうちの一メモリインデックスによって示されないメモリアドレスにおける少なくとも1つのデータ要素とをロードする多重データ要素ロードを実行する、請求項1から6のいずれか一項に記載のプロセッサ。
  8. 前記ユニットは、前記限定範囲ベクトルメモリアクセス命令に応答して、
    複数のデータ要素をロードする多重データ要素ロードを実行し、
    (a)前記限定範囲ベクトルメモリアクセス命令がパックドデータ演算マスクを示していないとき、複数のロードされた前記データ要素のうち、前記複数のパックドメモリインデックスのうちの一メモリインデックスによって示されるメモリアドレスにおける少なくとも1つのデータ要素を、前記限定範囲ベクトルメモリアクセス命令によって示されるデスティネーション記憶ロケーションにストアし、(b)前記限定範囲ベクトルメモリアクセス命令がパックドデータ演算マスクを示しているとき前記パックドデータ演算マスクの対応するマスク要素がマスクされていない、前記複数のロードされたデータ要素のうちの、前記複数のパックドメモリインデックスのうちの一メモリインデックスによって示されるメモリアドレスにおける少なくとも1つのデータ要素を前記デスティネーション記憶ロケーションにストアする、請求項1からのいずれか一項に記載のプロセッサ。
  9. 前記ユニットは、前記限定範囲ベクトルメモリアクセス命令に応答して、前記メモリから前記プロセッサの記憶ロケーションに前記限定範囲全体をロードし、前記ユニットは、前記限定範囲ベクトルメモリアクセス命令に応答して、前記メモリインデックスに基づいて前記限定範囲ベクトルメモリアクセス命令によって示されるデスティネーション記憶ロケーションに前記限定範囲全体のデータ要素のサブセットを選択的に移動させる、請求項1からのいずれか一項に記載のプロセッサ。
  10. 前記限定範囲ベクトルメモリアクセス命令は、デスティネーション記憶ロケーションを示し、前記ユニットは、前記限定範囲ベクトルメモリアクセス命令に応答して、パックドデータ結果を前記デスティネーション記憶ロケーションにストアし、前記パックドデータ結果は、それぞれ対応するメモリインデックスによって示される前記限定範囲内のメモリロケーションからの複数のデータ要素を有する、請求項1からのいずれか一項に記載のプロセッサ。
  11. 前記限定範囲ベクトルメモリアクセス命令は、複数のデータ要素を有するソースパックドデータを示し、前記ユニットは、前記限定範囲ベクトルメモリアクセス命令に応答して、前記ソースパックドデータの前記複数のデータ要素の各データ要素を、対応するメモリインデックスによって示される前記限定範囲内のメモリロケーションに書き込む、請求項1から10のいずれか一項に記載のプロセッサ。
  12. 前記限定範囲ベクトルメモリアクセス命令は、パックドデータ演算マスクを示す、請求項1から11のいずれか一項に記載のプロセッサ。
  13. 限定範囲ベクトルメモリアクセス命令を受信することであって、該限定範囲ベクトルメモリアクセス命令は、8ビットメモリインデックス及び16ビットメモリインデックスから選択された複数のパックドメモリインデックスを有するソースパックドメモリインデックスを示すことと、
    前記限定範囲ベクトルメモリアクセス命令に応答して、メモリにおける連続的なサブセットである限定範囲内のみのメモリロケーションにアクセスすることと、
    を含み、
    前記アクセスすることは、前記メモリからプロセッサの記憶ロケーションに前記限定範囲全体をロードすることを含む、プロセッサにおける方法。
  14. 前記受信することは、8ビットメモリインデックスを含む前記ソースパックドメモリインデックスを示す前記限定範囲ベクトルメモリアクセス命令を受信することを含む、請求項13に記載の方法。
  15. 前記アクセスすることは、256バイトからなる前記限定範囲内のメモリロケーションにアクセスすることを含む、請求項13または14に記載の方法。
  16. 前記受信することは、デスティネーション記憶ロケーションを示す前記限定範囲ベクトルメモリアクセス命令を受信することを含み、前記方法は、前記限定範囲ベクトルメモリアクセス命令に応答して、パックドデータ結果を前記デスティネーション記憶ロケーションにストアすることを更に含み、前記パックドデータ結果は、それぞれ対応するメモリインデックスによって示される前記限定範囲内のメモリロケーションからの複数のデータ要素を有する、請求項13から15のいずれか一項に記載の方法。
  17. 前記受信することは、複数のデータ要素を有するソースパックドデータを示す前記限定範囲ベクトルメモリアクセス命令を受信することを含み、前記アクセスすることは、前記限定範囲ベクトルメモリアクセス命令に応答して、前記ソースパックドデータの前記複数のデータ要素の各データ要素を、対応するメモリインデックスによって示される前記限定範囲内のメモリロケーションに書き込むことを含む、請求項13から16のいずれか一項に記載の方法。
  18. 前記アクセスすることは、少なくとも32ビットメモリアドレスを用いてアクセスすることを含む、請求項13から17のいずれか一項に記載の方法。
  19. 前記アクセスすることは、前記複数のパックドメモリインデックスのうちの一メモリインデックスによって示されるメモリアドレスにおける少なくとも1つのデータ要素と、前記複数のパックドメモリインデックスのうちの一メモリインデックスによって示されないメモリアドレスにおける少なくとも1つのデータ要素とをロードすることを含む多重データ要素ロードを実行することを含む、請求項13から18のいずれか一項に記載の方法。
  20. 複数のデータ要素をロードする多重データ要素ロードを実行することと、
    (a)前記限定範囲ベクトルメモリアクセス命令がパックドデータ演算マスクを用いないとき、複数のロードされた前記データ要素のうち、前記複数のパックドメモリインデックスのうちの一メモリインデックスによって示されるメモリアドレスにおける少なくとも1つのデータ要素を、前記限定範囲ベクトルメモリアクセス命令によって示されるデスティネーション記憶ロケーションにストアし、(b)前記限定範囲ベクトルメモリアクセス命令がパックドデータ演算マスクを用いるとき前記パックドデータ演算マスクの対応するマスク要素がマスクされていない、前記複数のロードされたデータ要素のうちの、前記複数のパックドメモリインデックスのうちの一メモリインデックスによって示されるメモリアドレスにおける少なくとも1つのデータ要素を前記デスティネーション記憶ロケーションにストアすることと、を更に含む、請求項13から19のいずれか一項に記載の方法。
  21. 命令を処理するシステムであって、
    相互接続部と、
    前記相互接続部と結合されたプロセッサと、
    前記相互接続部と結合されたダイナミックランダムアクセスメモリ(DRAM)と
    を備え、
    該DRAMは、限定範囲ベクトルメモリアクセス命令をストアし、該限定範囲ベクトルメモリアクセス命令は、8ビットメモリインデックス及び16ビットメモリインデックスから選択された複数のパックドメモリインデックスを有するソースパックドメモリインデックスを示し、前記限定範囲ベクトルメモリアクセス命令は、前記プロセッサによって実行されると、メモリにおける連続的なサブセットである限定範囲内のみのメモリロケーションにアクセスすることを含む演算を前記プロセッサに実行させるように動作可能であり、
    前記アクセスすることは、前記メモリから前記プロセッサの記憶ロケーションに前記限定範囲全体をロードすることを含む、システム。
  22. 前記限定範囲ベクトルメモリアクセス命令は、8ビットメモリインデックスを含む前記ソースパックドメモリインデックスを示し、前記限定範囲ベクトルメモリアクセス命令は、前記プロセッサによって実行されると、前記プロセッサに、少なくとも32ビットのメモリアドレスを有する前記限定範囲にアクセスさせるように動作可能である、請求項21に記載のシステム。
  23. 機械により実行されると、
    限定範囲ベクトルメモリアクセス命令をストアする手順と、
    該限定範囲ベクトルメモリアクセス命令は、8ビットメモリインデックス及び16ビットメモリインデックスから選択された複数のパックドメモリインデックスを有するソースパックドメモリインデックスを示し、前記限定範囲ベクトルメモリアクセス命令は、メモリにおける連続的なサブセットである限定範囲内のみのメモリロケーションにアクセスする手順と
    を前記機械に実行させ
    前記アクセスする手順は、前記メモリから前記機械の記憶ロケーションに前記限定範囲全体をロードすることを含む、プログラム。
  24. 前記限定範囲ベクトルメモリアクセス命令は、8ビットメモリインデックスを含む前記ソースパックドメモリインデックスを示し、該ソースパックドメモリインデックスは、少なくとも32個のメモリインデックスを含む、請求項23に記載のプログラム。
JP2014042958A 2013-03-15 2014-03-05 限定範囲ベクトルメモリアクセス命令、プロセッサ、方法、及びシステム Active JP5926754B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/838,544 2013-03-15
US13/838,544 US9244684B2 (en) 2013-03-15 2013-03-15 Limited range vector memory access instructions, processors, methods, and systems

Publications (2)

Publication Number Publication Date
JP2014182807A JP2014182807A (ja) 2014-09-29
JP5926754B2 true JP5926754B2 (ja) 2016-05-25

Family

ID=50554630

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014042958A Active JP5926754B2 (ja) 2013-03-15 2014-03-05 限定範囲ベクトルメモリアクセス命令、プロセッサ、方法、及びシステム

Country Status (6)

Country Link
US (3) US9244684B2 (ja)
JP (1) JP5926754B2 (ja)
KR (2) KR101599604B1 (ja)
CN (1) CN104049943B (ja)
DE (1) DE102014003706A1 (ja)
GB (1) GB2513970B (ja)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9477467B2 (en) * 2013-03-30 2016-10-25 Intel Corporation Processors, methods, and systems to implement partial register accesses with masked full register accesses
US9600442B2 (en) 2014-07-18 2017-03-21 Intel Corporation No-locality hint vector memory access processors, methods, systems, and instructions
US10754977B2 (en) * 2014-09-25 2020-08-25 Micro Focus Llc Report comprising a masked value
US9811464B2 (en) * 2014-12-11 2017-11-07 Intel Corporation Apparatus and method for considering spatial locality in loading data elements for execution
US9582422B2 (en) 2014-12-24 2017-02-28 Intel Corporation Hardware prefetcher for indirect access patterns
US9971686B2 (en) 2015-02-23 2018-05-15 Intel Corporation Vector cache line write back processors, methods, systems, and instructions
KR102248846B1 (ko) * 2015-11-04 2021-05-06 삼성전자주식회사 데이터를 병렬 처리하는 방법 및 이를 위한 장치
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
US20170185402A1 (en) * 2015-12-23 2017-06-29 Intel Corporation Instructions and logic for bit field address and insertion
CN105739919B (zh) * 2016-01-21 2018-10-12 捷鼎创新股份有限公司 资料存取系统及方法
US11789734B2 (en) * 2018-08-30 2023-10-17 Advanced Micro Devices, Inc. Padded vectorization with compile time known masks
US10838734B2 (en) * 2018-09-24 2020-11-17 Intel Corporation Apparatus and method for processing structure of arrays (SoA) and array of structures (AoS) data
US11237970B2 (en) * 2018-11-07 2022-02-01 Micron Technology, Inc. Reduce data traffic between cache and memory via data access of variable sizes
US20200364047A1 (en) * 2019-05-16 2020-11-19 Facebook, Inc. High throughput neural network operations using inter-layer memory layout transformation
US11327862B2 (en) * 2019-05-20 2022-05-10 Micron Technology, Inc. Multi-lane solutions for addressing vector elements using vector index registers
US11340904B2 (en) 2019-05-20 2022-05-24 Micron Technology, Inc. Vector index registers
US11507374B2 (en) 2019-05-20 2022-11-22 Micron Technology, Inc. True/false vector index registers and methods of populating thereof
US11403256B2 (en) 2019-05-20 2022-08-02 Micron Technology, Inc. Conditional operations in a vector processor having true and false vector index registers
CN112559037B (zh) * 2019-09-25 2024-04-12 阿里巴巴集团控股有限公司 一种指令执行方法、单元、装置及系统
CN113626081A (zh) * 2020-05-08 2021-11-09 安徽寒武纪信息科技有限公司 数据处理方法及装置以及相关产品
TW202215238A (zh) * 2020-09-02 2022-04-16 美商賽發馥股份有限公司 集中-分散操作記憶體保護
CN112860318A (zh) * 2021-01-29 2021-05-28 成都商汤科技有限公司 一种数据传输方法、芯片、设备和存储介质

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2665111B2 (ja) 1992-06-18 1997-10-22 日本電気株式会社 ベクトル処理装置
JPH0962654A (ja) 1995-08-22 1997-03-07 Kofu Nippon Denki Kk リストベクトル処理装置
JP2812292B2 (ja) 1996-02-22 1998-10-22 日本電気株式会社 画像処理装置
US6678807B2 (en) * 2000-12-21 2004-01-13 Intel Corporation System and method for multiple store buffer forwarding in a system with a restrictive memory model
JP3659252B2 (ja) 2003-03-28 2005-06-15 セイコーエプソン株式会社 ベクトルデータのアドレス参照方法およびベクトルプロセッサ
US8190863B2 (en) * 2004-07-02 2012-05-29 Intel Corporation Apparatus and method for heterogeneous chip multiprocessors via resource allocation and restriction
US10387151B2 (en) 2007-12-31 2019-08-20 Intel Corporation Processor and method for tracking progress of gathering/scattering data element pairs in different cache memory banks
US8447962B2 (en) * 2009-12-22 2013-05-21 Intel Corporation Gathering and scattering multiple data elements
GB2461850A (en) 2008-07-10 2010-01-20 Cambridge Consultants Memory management unit with address translation for a range defined by upper and lower limits
US8656082B2 (en) 2008-08-05 2014-02-18 Micron Technology, Inc. Flexible and expandable memory architectures
US8458284B2 (en) * 2009-06-12 2013-06-04 International Business Machines Corporation Systems and methods for efficient live application migration within bandwidth constrained networks
US8230172B2 (en) 2009-12-03 2012-07-24 Intel Corporation Gather and scatter operations in multi-level memory hierarchy
JP5573134B2 (ja) 2009-12-04 2014-08-20 日本電気株式会社 ベクトル型計算機及びベクトル型計算機の命令制御方法
US8635431B2 (en) 2010-12-08 2014-01-21 International Business Machines Corporation Vector gather buffer for multiple address vector loads
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
US9001138B2 (en) 2011-08-29 2015-04-07 Intel Corporation 2-D gather instruction and a 2-D cache
GB2508533B (en) 2011-09-26 2020-01-01 Intel Corp Instruction and logic to provide vector scatter-op and gather-op functionality
WO2013095672A1 (en) 2011-12-23 2013-06-27 Intel Corporation Multi-register gather instruction
US20130311530A1 (en) * 2012-03-30 2013-11-21 Victor W. Lee Apparatus and method for selecting elements of a vector computation
US8972697B2 (en) 2012-06-02 2015-03-03 Intel Corporation Gather using index array and finite state machine
US9355068B2 (en) * 2012-06-29 2016-05-31 Intel Corporation Vector multiplication with operand base system conversion and re-conversion
US9785436B2 (en) 2012-09-28 2017-10-10 Intel Corporation Apparatus and method for efficient gather and scatter operations
US9348601B2 (en) 2012-12-26 2016-05-24 Intel Corporation Coalescing adjacent gather/scatter operations
JP5522283B1 (ja) * 2013-02-27 2014-06-18 日本電気株式会社 リストベクトル処理装置、リストベクトル処理方法、プログラム、コンパイラ、及び、情報処理装置

Also Published As

Publication number Publication date
US9244684B2 (en) 2016-01-26
DE102014003706A1 (de) 2014-09-18
US20160170749A1 (en) 2016-06-16
US20160371084A1 (en) 2016-12-22
GB201403976D0 (en) 2014-04-23
KR20140113556A (ko) 2014-09-24
JP2014182807A (ja) 2014-09-29
US20140281425A1 (en) 2014-09-18
CN104049943B (zh) 2018-07-27
GB2513970B (en) 2016-03-09
KR20150091448A (ko) 2015-08-11
KR101599604B1 (ko) 2016-03-03
GB2513970A (en) 2014-11-12
CN104049943A (zh) 2014-09-17
US9448795B2 (en) 2016-09-20

Similar Documents

Publication Publication Date Title
JP5926754B2 (ja) 限定範囲ベクトルメモリアクセス命令、プロセッサ、方法、及びシステム
JP6238497B2 (ja) プロセッサ、方法、及びシステム
JP5918287B2 (ja) 演算マスクのマスクされていない要素をコンソリデートする命令処理装置、方法、システム、及びプログラム
JP6371855B2 (ja) プロセッサ、方法、システム、プログラム、及び非一時的機械可読記憶媒体
JP6711480B2 (ja) ベクトルインデックスロードおよびストアのための方法および装置
JP5829714B2 (ja) マスクされたフルレジスタアクセスを用いて部分レジスタアクセスを実施するプロセッサ、方法、及びシステム
JP2018500653A (ja) ベクトルブロードキャストおよびxorand論理命令のための装置および方法
JP2018500656A (ja) 1組のベクトル要素にリダクション演算を実行する方法及び装置
JP6708334B2 (ja) モートン座標調整プロセッサ、方法、システム、及び命令
JP6419205B2 (ja) プロセッサ、方法、システム、コンピュータシステム、およびコンピュータ可読記憶媒体
JP6673574B2 (ja) ベクトルビットシャッフルを実行するための方法および装置
JP2017529601A (ja) ビットシャッフルプロセッサ、方法、システム、および命令
JP6741006B2 (ja) マスクレジスタとベクトルレジスタとの間で可変に拡張するための方法および装置
JP2018500658A (ja) インデックスおよび即値を用いてベクトル置換を実行するための方法および装置
JP2017529597A (ja) ビット群インターリーブプロセッサ、方法、システムおよび命令
JP6835436B2 (ja) マスクをマスク値のベクトルに拡張するための方法および装置
JP2017539010A (ja) ベクトル飽和ダブルワード/クワッドワードの加算を実行するための命令およびロジック
JP2017539016A (ja) 結合した乗算−乗算命令のための装置および方法
KR102528073B1 (ko) 벡터 비트 수집을 수행하기 위한 방법 및 장치
JP2018500665A (ja) マスク値を圧縮するための方法および装置
JP2018506762A (ja) 結合した加算−加算命令のための装置および方法
KR20170097613A (ko) 벡터 수평 로직 명령어를 위한 장치 및 방법
JP2018503162A (ja) スピンループジャンプを実行するための装置および方法

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150415

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150428

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150724

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: 20160223

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160323

R155 Notification before disposition of declining of application

Free format text: JAPANESE INTERMEDIATE CODE: R155

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160422

R150 Certificate of patent or registration of utility model

Ref document number: 5926754

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250