JP2017016637A - 密結合ヘテロジニアスコンピューティングのためのハードウェアプロセッサ及び方法 - Google Patents

密結合ヘテロジニアスコンピューティングのためのハードウェアプロセッサ及び方法 Download PDF

Info

Publication number
JP2017016637A
JP2017016637A JP2016093449A JP2016093449A JP2017016637A JP 2017016637 A JP2017016637 A JP 2017016637A JP 2016093449 A JP2016093449 A JP 2016093449A JP 2016093449 A JP2016093449 A JP 2016093449A JP 2017016637 A JP2017016637 A JP 2017016637A
Authority
JP
Japan
Prior art keywords
instruction
memory
field
buffer
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2016093449A
Other languages
English (en)
Other versions
JP6456867B2 (ja
Inventor
ヨン カン、チャン
Chang Yong Kang
ヨン カン、チャン
ローラン、ピエール
Laurent Pierre
ケイ. タデパリ、ハリ
K Tadepalli Hari
ケイ. タデパリ、ハリ
エム. ガティガー、プラサッド
M Ghatigar Prasad
エム. ガティガー、プラサッド
オドウヤー、ティー.ジェイ.
J O'dwyer T
ジリャエフ、サージ
Zhilyaev Serge
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 JP2017016637A publication Critical patent/JP2017016637A/ja
Application granted granted Critical
Publication of JP6456867B2 publication Critical patent/JP6456867B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • G06F15/8061Details on data memory access
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/01Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • 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/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • 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
    • 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/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4027Coupling between buses using bus bridges
    • G06F13/405Coupling between buses using bus bridges where the bridge performs a synchronising function
    • G06F13/4059Coupling between buses using bus bridges where the bridge performs a synchronising function where the synchronisation uses buffers, e.g. for speed matching between buses
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • G06F15/8076Details on data register access
    • G06F15/8084Special arrangements thereof, e.g. mask or switch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks

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)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Advance Control (AREA)
  • Multi Processors (AREA)

Abstract

【課題】密結合ヘテロジニアスコンピューティングに関する複数の方法及び装置が説明される。【解決手段】一実施形態において、ハードウェアプロセッサは、並列な複数の実行ユニットと、複数の実行ユニットの複数の入力を第1のバッファ及び複数のメモリバンクの複数の出力に接続し、並列な複数のメモリバンク及び複数の第2のバッファの複数の入力を第1のバッファ、複数のメモリバンク、及び複数の実行ユニットの複数の出力に接続するスイッチと、複数の第2のバッファの複数の出力に接続される複数の入力を有するオフロードエンジンと、を含む。【選択図】図1

Description

本開示は、概して電子分野に関し、より詳細には、本開示の実施形態は、密結合ヘテロジニアスコンピューティングのためのハードウェアプロセッサに関する。
プロセッサ又は複数のプロセッサのセットは、命令セット、例えば命令セットアーキテクチャ(ISA)からの複数の命令を実行する。命令セットは、プログラミングに関するコンピュータアーキテクチャの一部であり、概して、複数のネイティブデータ型、複数の命令、レジスタアーキテクチャ、複数のアドレス指定モード、メモリアーキテクチャ、割り込み及び例外処理ならびに外部入力及び出力(I/O)を含む。
本開示は、添付図面の複数の図において、限定としてではなく例として示されるものであり、ここで、同様の参照符号は、同様の要素を示す。
本開示の複数の実施形態に係るハードウェアプロセッサを示す。 本開示の複数の実施形態に係るハードウェアプロセッサを通して、複数のデータパスを示す。 本開示の複数の実施形態に係る図2Aにおけるハードウェアプロセッサを通る複数のアクティブなデータパスを示す。 本開示の複数の実施形態に係るデータパスを通して移行する複数のベクトルを示す。 本開示の複数の実施形態に係るフロー図を示す。 本開示の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びこれらのクラスA命令テンプレートを示すブロック図である。 本開示の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びこれらのクラスB命令テンプレートを示すブロック図である。 本開示の複数の実施形態に係る図5A及び5Bにおける汎用ベクトル向け命令フォーマットの複数のフィールドを示すブロック図である。 本開示の一実施形態に係るフルオペコードフィールドを形成する図6Aにおける特定ベクトル向け命令フォーマットの複数のフィールドを示すブロック図である。 本開示の一実施形態に係るレジスタインデックスフィールドを形成する図6Aにおける特定ベクトル向け命令フォーマットの複数のフィールドを示すブロック図である。 本開示の一実施形態に係る増加オペレーションフィールド550を形成する図6Aにおける特定ベクトル向け命令フォーマットの複数のフィールドを示すブロック図である。 本開示の一実施形態に係るレジスタアーキテクチャのブロック図である。 本開示の複数の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。 本開示の複数の実施形態に係るプロセッサに含まれるべきインオーダアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。 本開示の複数の実施形態に係る単一のプロセッサコアを、そのオンダイ相互接続ネットワークへの接続及びその二次(L2)キャッシュのローカルサブセットと共に示すブロック図である。 本開示の複数の実施形態に係る図9Aにおけるプロセッサコアの一部の拡大図である。 1つより多くのコアを有してよく、集積メモリコントローラを有してよく、集中画像表示を有してよい、本開示の複数の実施形態に係るプロセッサのブロック図である。 本開示の一実施形態に係るシステムのブロック図である。 本開示の実施形態に係る、より具体的な例示的システムのブロック図である。 本開示の実施形態に係る、第2のより具体的な例示的システムのブロック図を示す。 本開示の実施形態に係るシステムオンチップ(SoC)のブロック図を示す。 本開示の複数の実施形態に係るソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令に変換するソフトウェア命令コンバータの使用を対比したブロック図である。
以下の説明において、多数の具体的な詳細が示される。しかしながら、本開示の複数の実施形態は、これらの具体的な詳細がなくとも実施可能であることを理解されたい。他の複数の例において、周知の複数の回路、構造及び技術は、この説明に対する理解を曖昧にしないよう、詳細には示されていない。
本明細書における「一実施形態」、「実施形態」、「例示的な実施形態」等の記載は、説明される実施形態が、特定の機能、構造、又は特性を含んでよいが、各実施形態がその特定の機能、構造、又は特性を必ずしも含まなくてよいことを示す。さらに、このような複数の語句は、必ずしも同じ実施形態を参照するものではない。さらに、ある実施形態に関連して特定の機能、構造、又は特性が説明される場合、明示的に説明されているか否かに関わらず、複数の他の実施形態に関連してこのような機能、構造、又は特性に影響を与えることは、当業者の知識の範囲内であると考えられる。
(例えばハードウェア)プロセッサ又はプロセッサのセットは、命令セット、例えば命令セットアーキテクチャ(ISA)からの複数の命令を実行する。命令セットは、プログラミングに関するコンピュータアーキテクチャの一部であり、概して、複数のネイティブデータ型、複数の命令、レジスタアーキテクチャ、複数のアドレス指定モード、メモリアーキテクチャ、割り込み及び例外処理ならびに外部入力及び出力(I/O)を含む。本明細書において、命令という用語は、マクロ命令、例えば、実行のためにプロセッサに提供される命令、又は、マイクロ命令、例えば、複数のマクロ命令を復号するプロセッサの復号ユニット(デコーダ)から得られた命令を意味してよいことに留意されたい。プロセッサ(例えば、複数の命令を復号及び/又は実行する1つ又は複数のコアを有するもの)は、例えば、演算、ロジック、又は他の複数の機能の実行において、データに対して動作してよい。
複数の特定の機能は、複数のベクトル(例えば、各エレメントを特定する対応インデックスを有する複数のデータエレメント(エントリ)のアレイ又は他の順序のリスト)、例えば、複数の他のベクトルに対して動作するベクトルに対するオペレーションを含んでよい。ベクトルのエレメントは、概して、単一の値、例えば、それ自身のインデックス値によって特定される値を表すデータの別個のセクションを意味してよい。ベクトルの複数のエレメントは、数値(例えば、整数、浮動小数点等)であってよい。一実施形態において、ベクトルは、単一の数値、例えば単一の浮動小数点数を表す複数のエレメントを含む。
プロセッサは、(例えば、プロセッサダイとは別個の)メモリ(例えば、データストレージデバイス)のデータにアクセス(例えば、ロード及び/又はストア)してよい。メモリは、システムメモリ、例えば、ランダムアクセスメモリ(RAM)であってよい。データストレージデバイスは、プロセッサキャッシュを含まなくてよく、及び/又は、限定されるものではないが、ハードディスクドライブ(HDD)ストレージのような外部ストレージを含まなくてよい。
プロセッサは、特定のオペレーション(又はオペレーションの一部)をオフロードエンジンにオフロードしてよい。ハードウェアオフロードエンジンは、プロセッサとは別個であってよく(例えば、オフダイ)、又はプロセッサの一部、例えば、コアの一部又はコアとは別個であってよい。オフロードエンジンを用いるプロセッサ(例えば、プロセッサコア)は、その命令セットにおける命令(例えば、特定のオペコードを有するもの)を含んでよく、命令セットは、例えば、当該命令が実行される場合に、データをハードウェアオフロードエンジンに送信させる。一実施形態において、オフロードエンジンは、例えば、本明細書において説明されるように、そのオペレーションを制御する有限ステートマシン(FSM)を含む。一実施形態において、プロセッサコア(例えば、複数の(例えばベクトル)実行ユニット)は、第1のクロック速度で実行してよく、オフロードエンジンは、第2のより高速(又はより低速)のクロック速度で(例えば同時に)実行してよい。一実施形態において、オフロードエンジンは、プロセッサのクロック速度の倍より大きい速度で動作する。一実施形態において、オフロードエンジンは、プロセッサのクロック速度の2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、又は25倍等、より高速(又はより低速)の速度で動作する。オフロードエンジンは、オフロードエンジンを用いるプロセッサと異なる型のプロセッサであってよい。一実施形態において、プロセッサ及びオフロードエンジンは、同じ命令セット、例えばISAを用いる。
一実施形態において、プロセッサは、領域が特化された問題に対処する特定用途向けオフロードエンジンを含む。ハードウェアのみ及びソフトウェアのみのアプローチと比較して、ハイブリッドプロセッサアーキテクチャの複数の特定の実施形態は、ソフトウェア(例えば、プロセッサ上で動作するファームウェア)の柔軟性と、最適化されたハードウェア(例えば、特定用途向けオフロードエンジン)の効率性との両方を提供することができる。例えば、公開鍵暗号化(PKE)の一実施形態において、回路(例えば、コンテンツ処理モジュール(CPM))は、(例えば、プログラマブル)ベクトルプロセッサ(例えば、モジュラー計算プロセッサ(MMP))と、(例えば大型)整数乗算器(521bx521b)オフロードエンジンとを含んでよい。本実施形態は、オフロードエンジンのモデルの非同期利用を含んでよく、例えば、これにより、複数のオペランドのソーシング及び結果のドレインは、2つの(例えばファームウェア)ベクトル命令の実行を含む。複数の命令のこのようなシーケンシャルな実行モデルは、オフロードエンジンの利用、従って、システムのスループット全体を低減することができる。(例えば高)並列データパスを有するこのようなベクトルプロセッサ及びオフロードエンジンは、データハザード解消ロジックの利用を含んでもよい。
本開示の一実施形態において超長命令語(VLIW)型の命令に対するベクトルプロセッサ(例えば、ベクトルプロセッサアーキテクチャ)は、例えば、プロセッサ(例えばコア)によってオフロードエンジンに送信されたデータ及び/又はオフロードエンジンによってプロセッサに送信されたデータの、プロセッサ自体の内部における、又はオフロードエンジンへ及び/又はオフロードエンジンからの(例えば高)並列データ移動を可能とする。VLIW命令は(例えば、実行された場合に)、複数の(例えば、別個の又は異なる)複数のオペレーションを生じさせてよい。例えば、1つのVLIW命令は(例えば、実行された場合に)、1つの(例えば、異なる)複数のオペレーションをプロセッサの複数の実行ユニットの各々に対して実行させてよい。
本開示の複数の特定の実施形態は、スイッチ(又は複数のスイッチ)と、複数の並列データオペレーションを可能にする複数の実行ユニットとを含む。スイッチは、マトリックス(例えば、クロスバー)スイッチであってよい。マトリックススイッチは、概して、複数の入力と複数の出力との間にある個々のスイッチのアセンブリを意味してよい。スイッチは、非ブロックスイッチであってよく、これにより、他の複数の同時接続が、他の複数の入力を他の複数の出力に接続することの妨げとならない。単一の入力は、複数の出力に接続されてよい。
一実施形態において、(例えば、パイプラインの第1の命令からの)データが(例えば、パイプラインの第2の命令によって)当該データに対するオペレーションを実行することを必要とされる場合、(例えば、第1の命令からの)データの欠損は、(例えば、第2の命令による)オペレーションの実行において遅延を生じさせ得る。このような場合、実行パイプラインの一部は、データが利用可能になる(例えば、第1の命令が実行を完了し、結果のデータが第2の命令によって利用可能となる)まで、ストール(例えば、停止)のような特別な処理を用いてよい。この条件は、概して、データハザードと称されることがある。
本開示の複数の特定の実施形態は、データハザード解消ロジックを含む。一実施形態において、ハードウェアプロセッサは、1つ又は複数の(例えば、整数)オフロードエンジン、(例えば、ベクトルプロセッサの)1つ又は複数の実行ユニット、複数のメモリバンク、及び、データハザードを検出及び/又は防止する能力により複数の処理エレメント及びメモリのいずれか又は全ての中におけるデータ移動を容易にする(例えば、データスイッチングロジック及び/又はデータハザード解消ロジックを含む)スイッチを含む。例えば、データハザード解消ロジックは、複数の(例えば右又は左)シフトオペレーション、例えばベクトルシフトオペレーションをサポートするベクトル処理データパスを制御してよい。
図1は、本開示の複数の実施形態に係るハードウェアプロセッサ100を示す。図示されるハードウェアプロセッサ100は、プロセッサコア102と、オフロードエンジン104と、メモリ106へのアクセスと、スイッチ108とを含む。これらのコンポーネントの任意の組み合わせが用いられてよい。メモリ106は、別個のコンポーネントとして示されるが、ハードウェアプロセッサ100の一部であってよい。プロセッサコアは、1つ又は複数の実行ユニットを(例えば、直列及び/又は並列に)含んでよい。オフロードエンジンは、例えば、プロセッサコアに対して複数のオペレーションを実行してよく、これにより、プロセッサコアは、他の複数のオペレーションを(例えば同時に)実行してよい。オフロードエンジンは、その複数のオペレーションが完了した(例えば、データが利用可能である)ことを示す信号を(例えば、プロセッサコアに)提供してよい。オフロードエンジンは、プロセッサとは別個(例えば、オフダイ)であってよい。オフロードエンジンは、(例えば、プロセッサとは)別個のメモリへのアクセス、例えば、ダイレクトメモリアクセスを有してよい。
メモリ106は、任意のデータストレージデバイスであってよい。図示されるメモリ106は、複数のメモリバンク、例えば、メモリバンクA、B、F、及びGを含む。メモリは、メモリバンクA−Gを含んでよい。メモリは、任意の複数のメモリバンクを含んでよい。例えば、メモリは、2つ又はそれより多くのメモリバンク、3つ又はそれより多くのメモリバンク、4つ又はそれより多くのメモリバンク、5つ又はそれより多くのメモリバンク等を含んでよい。各メモリバンクは、それ自身のアクセスポート又は複数のポート(例えば、入力及び/又は出力)を有してよい。各メモリバンクは、他のメモリバンク、例えば複数のメモリバンクから独立してアクセス可能であり、又は、各メモリバンクは、同時にアクセス可能である。プロセッサは、メモリを含んでもよい。プロセッサ及び/又はメモリは、バッファ、例えばシフトレジスタを含んでよい。
スイッチは、特定の入力を特定の出力に接続する制御信号を(例えばプロセッサコア102から)受信してよい。スイッチ108は、任意の複数の通信パスを含んでよく、図示されたものに限定されるものではない。スイッチは、コンポーネントを選択的に接続してよい。例えば、スイッチ108は、プロセッサコア、オフロードエンジン、メモリ、及びこれらの任意の組み合わせを接続してよい。なお、本明細書における単一方向の矢印は、一方向の通信であることを必要としないことがあり、例えば、これは、(例えば、当該コンポーネントへ、及び当該コンポーネントからの)二方向の通信を示してよい。複数の通信パスのいずれか又は全ての組み合わせは、本明細書の複数の実施形態において用いられてよい。スイッチは、どのコンポーネントが共に接続されるか(例えば、2つのコンポーネント間においてアクティブな接続)を制御するデータハザード解消ロジックを含んでよい。スイッチは、プロセッサ(例えば、プロセッサコア)によって、例えば、スイッチに送信される制御信号又は複数の信号によって制御されてよい。一実施形態において、スイッチは、プロセッサのコンポーネント内、例えば、プロセッサコア及び/又はオフロードエンジン内にあってよい。スイッチは、複数の接続を制御(例えば、アクティブ化)してよく、これにより、データパスが、データハザードを許さない(例えば、含まない)ようにする。あらゆるデータパスは、スイッチにルートバックされてよく、例えばこれにより、出力は、入力としてルートバックされる。
図2Aは、本開示の複数の実施形態に係るハードウェアプロセッサ200を通る複数のデータパスを示す。図2Aのデータフローは、概して、左から右への態様で進む。図示されたデータパスは、命令をフェッチするプロセッサの命令フェッチユニット210を含む。フェッチされた命令(例えば、マクロ命令)は次に、デコーダ212に進んでよく、これにより、例えば、元の命令から復号され、又は元の命令を他の方法で反映し、又は元の命令から派生した1つ又は複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、又は他の制御信号を、出力として生成するべく復号される。復号された命令は、次に、ベクトル分解ユニット214に進んでよく、これにより、例えば、(例えばVLIW)ベクトル命令を、プロセッサ200の示されたデータパスによって(例えば、露出された命令セットアーキテクチャに対してトランスペアレントな態様で)実行可能な複数の(例えばダブルクワッドワード)サブ命令に変換する。命令フェッチユニット210、デコーダ212、及びベクトル分解ユニット214のいずれか又は全ては、任意であってよい。さらに、複数のパイプラインレジスタ(例えば、EC/MRレジスタ216、MR/EXレジスタ220、EX0/EX1レジスタ222、及びEX/WBレジスタ224)が示されるが、任意の単一又は複数のパイプラインレジスタが用いられてよい。一実施形態において、パイプラインレジスタは用いられない。
示されたデータパスの残りは、複数の連続的なプロセッサパイプラインステージを含み、これらは、メモリ読み出し(MR)、実行0(EX0)、実行1(EX1)、及びメモリライトバック(WB)とラベリングされている。一実施形態において、複数の実行ステージは、例えば、図示された回路を有する(例えば、コアを含む)プロセッサであるプロセッサ200(例えば、プロセッサ200の単一のコア202)の一部である。プロセッサコア202は、複数の実行ステージを(例えば直列に)有する回路、又は単一の実行ステージから出力されたデータを当該単一の実行ステージへの入力として再ルーティングする、例えば、出力を入力として帰還させる回路を含んでよい。一実施形態において、スイッチ208A及びスイッチ208Bは、同じスイッチであってよい。命令フェッチユニット210、デコーダ212、及びベクトル分解ユニット214のいずれか又は全ては、ハードウェアプロセッサ200の一部又はプロセッサコア202であってよい。単一のプロセッサコアが特定の図に示されるが、ハードウェアプロセッサは、複数のプロセッサコアを含んでよい。一実施形態において、誤り訂正(例えば、誤り訂正ユニット)は、パイプラインにおいて、例えばメモリ読み出し(MR)の前に行われてよい。
一実施形態において、MRステージにおける複数のメモリ(例えば、RAM)バンクは、ライトバック(WB)ステージにおける複数の同じ物理的インスタンスである。図示された実施形態において、MRステージにおける(例えば、ファーストインファーストアウト(FIFO))バッファA(例えば、入力バッファ)は、オフロードエンジン204の出力を受信するバッファと同じである。一実施形態において、オフロードエンジン204の出力を受信するバッファは、異なるバッファである。オフロードエンジン204は、その出力をバッファ218の入力に直接提供するものとして示される。一実施形態において、オフロードエンジンは、パイプラインを通して、例えば、パイプラインレジスタ216の入力を通して、その出力を提供する。一実施形態において、上記回路のいずれか又はいくつかを迂回するためのバイパス、例えば、マトリックススイッチ208Aとマトリックススイッチ208Bの間に、例えば、図2Bのパス(2)のために用いられる別個のバイパスが存在してよい。一実施形態において、マトリックススイッチ208Aとマトリックススイッチ208Bと間の回路は、例えば、データに対して前方転送以外のいずれのオペレーションも実行することなく、例えば、ALU2、(存在する場合には)EX0/EX1レジスタ222、及び(存在する場合には)シフタ2を通るバイパスとして用いられてよい。
一実施形態において、プロセッサは、(例えば、図2Aに示される複数のデータパスを通して)第2の(例えばFIFO)バッファ又は複数のバッファ(例えば、バッファB226及びバッファC228)のセットへの書き込みと、第1のバッファ(例えば、バッファA218)からの読み出しとを同時に(例えば、時間的に重複して)実行する。一実施形態において、ハードウェアプロセッサは、オフロードエンジン204へのデータ及び/又はオフロードエンジン204からのデータを前処理及び後処理してよい。公開鍵の算出におけるこの利用の一例は、Karatsuba法による乗算であり、中間乗算結果が合算されてよい。他の例は、楕円曲線暗号(ECC)の点の加算及び点の2倍算において用いられる式である。
複数の特定の実施形態において、プロセッサは、複数(例えば、2つ)の(例えばベクトル)実行ユニットを(例えば、並列及び/又は直列に)含んでよい。一実施形態において、(例えばベクトル)演算ロジックユニット(ALU)実行ユニットは、シフタ実行ユニットと直列である(例えば、シフタ実行ユニットに出力を提供する)。複数の特定の実施形態において、これにより、並列オペレーションにおいて起こり得る(例えば構造的な)データハザードを回避することができる。(例えば構造的な)データハザードは、メモリ(例えばRAM)バンク、例えばメモリバンク206に対しても発生し得る。複数のメモリバンク(例えば、メモリバンクA及びメモリバンクB)は、例えば、オフロードエンジン204(例えば、一実施形態において多倍長整数(big−integer)乗算器)が2つの入力(例えば、入力オペランド)をとる場合に、(例えば同時に)用いられてよい。これにより、1つのメモリバンクにおいて必要とされる同時の読み出し及び/又は書き込みを実行することなく、並列なソーシング及びドレインが可能となり得る。例えば、Karatsuba法による乗算の分解は、2つのメモリ書き込み及び3つのメモリ読み出しを同時に用いてよく、これにより、アルゴリズムにおいて利用可能な並列性を完全に活用する。図示されたデータパスは、他の複数のメモリバンク(例えば、メモリバンクF及びメモリバンクG)を含む。一実施形態において、複数のメモリバンク(例えば、各々が、複数の他のメモリバンクの入力ポート及び出力ポートとは別個にそれ自身の入力ポート及び出力ポートを有するもの)を用いることは、より少ない数のメモリバンクに複数のさらなるポートを追加するよりも、(例えば、エリア的に)より効率的なことがある。複数の特定の実施形態において(例えば、MMP)、複数の(例えば一部の)メモリバンク(例えば、メモリバンクF及びメモリバンクG)は、連続乗算用の一時ストレージとして、及び/又は内積のアキュムレータとして、用いられてよい。一実施形態において、複数のメモリバンクの第1のセット(例えば、メモリバンクF及びメモリバンクG)は、複数のメモリバンクの第2のセット(例えば、メモリバンクA及びメモリバンクB)と比べてストレージ容量がより小さい。
ソースは、複数の入力ポートにルーティングされてよい。本明細書において開示される複数のデータパスは、前述された複数の例の利用をサポートしてよいが、複数のメモリ(例えばRAM)バンク、及び複数のバッファ、例えば入力及び出力(例えばFIFO)バッファの中における直接的な並列データ移動をも可能にしてよい。一実施形態において、プロセッサのデータパスは、例えば他の複数のオペレーションと並列に、一時ストレージ(例えば、メモリバンクF及びG)とメインストレージ(例えば、メモリバンクA及びB)との間におけるデータの前後移動を可能にしてよい。
一実施形態において、例えば、オフロードエンジンの同時のソーシング及びドレインに関連する並列性を最大限活用すべく、プロセッサは、以下の複数のソースシンクペア、すなわち、
複数のソース(例えば、メモリバンクA、B、F、及びG及びバッファA)複数の(例えば5つの)出力ポートから複数のALU(例えば、図2A−2Bにおいて並列なALU1及びALU2)の(例えば4つの)入力ポート(例えば、その各々)のいずれかと、
複数のソース(例えば、メモリバンクA、B、F、及びG、バッファA、及びALU1及びALU2)の複数の(例えば7つの)出力ポートから複数のシンク(例えば、メモリバンクA、B、F、及びG、バッファB、及びバッファC)の(例えば6つの)入力ポートのいずれかと
のペアのうちいずれか又は両方をサポートするデータパスを含んでよい。
示された複数のソースシンクペアにおける複数の並列移動は、スイッチ208A及びスイッチ208Bによって接続(例えば、可能に)されてよい。一実施形態において、スイッチは、どの入力又は複数の入力(例えば、ポート)がどの出力(例えば、ポート)又は複数の出力に接続すべきかを選択する制御信号を送信する。例えば、命令は、例えば、どの複数の接続がアクティブであるかを制御する複数の制御信号を、(例えば、これらのフィールドとして)含んでよい。命令は(例えば、プロセッサによって実行された場合に)、どの型のオペレーションが入力データに対してALUによって実行されるべきかを示してよい。ALU1及びALU2は、複数の異なる型のオペレーションを同時に実行してよい。一実施形態、例えば、命令セットアーキテクチャレベルにおけるデータパスの並列性をサポートする実施形態は、この例において「dexec」と称され、以下の表1のフォーマットを有する64ビットVLIWスタイルの命令を含んでよい。
Figure 2017016637
ここで図2Bを参照すると、他の命令の例が説明される。図2Bは、本開示の複数の実施形態に係る図2Aにおけるハードウェアプロセッサ200を通る複数のアクティブなデータパスを示す。この例示的な「dexec」命令201は、4つの異なるフィールド(メモリライトバック、複数の乗算器バッファ入力、命令のALU1部分、及び命令のALU2部分)を含む。複数の異なる破線は、命令が(例えば、プロセッサによる命令の実行から)スイッチ208A及び208Bを介して生じさせる複数の異なる接続を示す。例えば、メモリライトバックフィールドの第1のセクションにおいて、a3[1]=b0[3]は、メモリバンクAにおける第3のアレイの第2のエレメントに書き込まれる、メモリバンクBにおけるゼロ番目のアレイの第4のエレメントを意味してよい。例えば、バンクBの第4のエレメントにおいて開始するベクトルは、メモリバンクAの第2のエレメントにおいて開始するメモリバンクAに書き込まれ(例えば、コピーされ)てよい。「−」は、フィールドに値がないこと、例えば、特定の例においてオペレーションフィールドが用いられていないことを示してよい。一実施形態において、プロセッサは、(例えば、実行パイプラインにおいて)ストールを含まない。ストールは、ノーオペレーション(NOP)命令、バブル等であってよい。ストールは、ベクトル内ストール、例えば、ベクトルオペレーションが例えば実行ステージ0又は実行ステージ1において生じている間のストールを意味してよい。
図2Bに示される命令は、命令内及び/又は複数の連続的な命令間における潜在的なデータハザードを解決しつつ、複数のソース及びデスティネーションオペランドに対して同時に動作する命令の例であってよい。高いレベルにおいて、示された命令は2つの演算オペレーションを含み、これらは、ALU1及びALU2によってそれぞれ促進され、かつ、ハードウェアオフロードエンジン(例えば、乗算器)及び4つのメモリバンクA、B、F及びGをターゲットにするデータ移動オペレーションの3つのインスタンスに対する複数のキューイングオペランドの1つのインスタンスを有する。これらの(例えばシーケンスの)オペレーションの例は、以下のとおりであってよい。
ALU1:メモリバンクAからソースされたベクトルオペランドa3[5]は、ビット回転を受け、出力にコピーされる。出力は、その最上位ビット(MSB)部分に追加のデータ(例えばクワッドワード)を有する出力オペランドを含む。ALU1出力のデスティネーションは、この命令の他の部分に表される。
ALU2:ALU2は、単一のオペランドをソースし、これは、ハードウェアオフロードエンジン(例えば乗算器)の出力からソースされたバッファAの出力である。オペレーションは、例えば、さらなるデータ(例えばクワッドワード)をMSB部分に追加した後、このオペランドをALU2の出力にコピーしてよい。(この最後のオペレーションは、「+1」によって指定されてよい。)この例示的命令は、ALU1及びALU2のバイナリオペレータとしての能力を適用しないが、代わりに、単項オペランドの例において適用する。ALUは、バイナリ及び/又は単項オペレーションを実行してよい。
ハードウェア乗算器オフロードエンジン(例えば乗算器):乗算器は、(例えば、バッファB及びバッファCからの)その複数のオペランドを(例えば、上述されたように)ALU1の出力からソースしてよく、メモリバンクFからソースされたベクトルオペランドf[1]をソースしてよい。
メモリコピーオペレーション(左から右への読み出し)
(1)a2[1]=b0[3]は、(例えばベクトル)オペランドb0[3]をa2[1]にコピーする。
(2)b3[2]=ALU2は、(例えば、上述された)ALU2の出力を、メモリバンクBにおいて(例えばベクトル)オペランドb3[2]にコピーする。
(3)g[0]=ALU2も、ALU2の出力を(例えば、第2のデスティネーションオペランドとして)、メモリバンクGにおいて(例えばベクトル)オペランドg[0]にコピーする。複数の特定の実施形態は、メモリバンクへの第4のデータコピーオペレーションを可能にし得るが、この選択肢は、この例示的命令においては用いられない。
他の例として、ハードウェアプロセッサは、メモリバンクAにストアされた、オフロードエンジン(例えば、乗算器)の幅(w)より大きい数を二乗する複数のデータパスのアクティブ化を含んでよい。例えば、メモリバンクAにストアされた数は、乗算器オフロードエンジンのサイズの2倍のベクトルであってよい。この例において、段階1として、命令が受信されてよく、これにより、バンクAのアドレスaから乗算器バッファB及びCに半ベクトルを送信する(例えば、乗算1)。段階2として、命令は、バンクAのアドレスa+幅(w)から乗算器バッファB及びCに半ベクトルを送信してよい(例えば、乗算2)。段階3として、命令は、バンクAから乗算器オフロードエンジンに両方の半ベクトルを送信してよく、途中で1をシフトする(例えば、乗算3)。段階4として、ハードウェアプロセッサは、乗算器オフロードエンジンの出力(例えば、乗算1の結果)をメモリバンクBのアドレス[b,b+2w]にストアしてよい。段階5として、ハードウェアプロセッサは、乗算器オフロードエンジンの出力(例えば、乗算2の結果)をバンクBのアドレス[b+2w,b+4w]にストアしてよい。段階6として、ハードウェアプロセッサは、アドレス[b+w,b+3w]間でバンクBを読み出し、ALUを通してデータを送信することにより当該データを乗算器オフロードエンジンの出力(例えば、乗算3の結果)に加算し、これをバンクBのアドレス[b+w,b+3w]にストアしてよい。
段階5及び6の間において、リードアフターライトが行われ、そのロジックは、そこにおけるデータハザードを防止し得る。段階6内において、同じ命令内での読み出しと書き込みとの(例えば完全な)重複が存在してよい。一実施形態において、段階4及び段階1は単一の命令に併合され、同時に動作する。一実施形態において、段階5及び段階2は単一の命令に併合され、同時に動作する。一実施形態において、段階6及び段階3は単一の命令に併合され、同時に動作する。本明細書における複数の特定の実施形態は、パイプライン化されたプロセッサのためのデータハザード解消ロジックを提供する。MMPの例として、リードアフターライト(RAW)ハザードが適用可能であってよく、これは、2つの連続的なベクトル命令の間で、先行する命令の書き込みと後の命令の読み出しとが、同じデータストレージ(例えば、メモリバンク)の重複するアドレス(例えば、アドレス範囲)に対して実行された場合に発生し得る。複数の特定の実施形態において、ストール(例えばNOP)は、ベクトル内(例えば、ベクトル中央における)命令の実行に挿入されるものではなく、例えば、最下位ビット(LSB)をEX0からEX1ステージに転送することを含むデータパスの右シフトオペレーションに起因する。一実施形態において、ベクトルオペレーションは、最下位エレメント(例えば、クワッドワード)から最上位エレメント(例えば、クワッドワード)に向かってよく、例えば、これによりシフタは、右シフトオペレーションを実行すべく、ベクトルの次のエレメント(例えばクワッドワード)からLSBをとる。図2A−2Bのデータパスにおいて、これは、EX0ステージから転送されたLSBをとり、EX0/EX1パイプラインを迂回することに対応する。ストールが複数の特定の実施形態に挿入される、例えば、ベクトルオペレーションの中央において右シフトを実行するMR/EXパイプラインに挿入される場合、EX1ステージは、EX0ステージから転送する有効なLSBの欠如により前進できないことがあり、例えば、ハザード条件が持続するデッドロックを発生させる。ストール挿入における上述された制約のため、(例えば、MMPにおける)RAWデータハザード条件の検出は、命令がベクトル分解ユニットに発行される前に、例えば、データパスにおける保留の書き込みのアドレス範囲に対する命令のアドレス範囲をチェックすることによって、デコーダにおいて実行されてよい。複数の特定の実施形態において、複数のベクトル命令から複数の異なるメモリバンクへのデータパスにおいて、複数の保留の書き込みが存在することがある。本開示の複数の特定の実施形態は、ベクトル内ストール(例えば、NOP遮断)を用いることなく、データパスにおけるハザードを防止する。一実施形態において、ベクトル命令は、(例えばRAW)データハザードをチェックすることなく、デコーダによって発行される。データハザードは、メモリバンクからの読み出し前に、例えば、EC/MRパイプラインステージにおいて、チェックされてよい。チェックは、ベクトルの各エレメント(例えば、ワード)が特定のステージ、例えば、EC/MRステージに到達した場合に、当該エレメントに対して(例えば、エラーチェックユニットによって)実行されてよい。チェックは、データパスの残りに、読み出されるべき即値アドレスである保留の書き込みが1つもないことをチェックすることであってよい。(例えばRAW)データハザードが検出された場合、プロセッサは、ベクトル内ストール(例えばNOP)を挿入せず、ベクトル間ストール(例えばNOP)をそこに挿入してよい。より積極的な命令スケジューリングにおいて、早期段階にスケジューリングされる追従命令は、前の命令のパイプラインが完了しておらず、ハザードを発生させ得ることを検出してよい。例えば、ほぼ重複する複数のアドレス範囲に対するチェックの実行は、当該範囲がメモリの境界及びメモリのラップアラウンドを含む場合に好ましくない影響をもたらすような実装を必要とすることがあるが、これと対照的に、パイプラインが最大でn回サイクルの場合、n個のアドレスコンパレータがハザード検出のために用いられてよい。
図3は、本開示の複数の実施形態に係るデータパス300を通る複数のベクトルの移行を、例えばパイプラインスナップショットとして示す。データハザード解消(例えばロジック)は、以下のいずれか又は全てを含んでよい。一実施形態(a)において、データハザード解消は、例えば複数のベクトルが右に移動した場合に、1つだけインクリメントされるパイプラインのアドレスを有することを含む。このように、(例えばエレメント)xをパイプラインに発行した時点で、x=m−d<m、ここでdが正の整数の場合、ストライドdは、2つのベクトルが前進する場合に整合するように維持されてよい。具体的には、ベクトルxからの複数のアドレス読み出しは、dの距離だけ、ベクトルmからの複数のアドレス書き込みを継続的に遅らせてよい。一実施形態(b)において、xの発行時にx=m+j+d>m+jであり、ここでdが正の整数である場合、dのストライドは、2つのベクトルが前進する場合に整合するように維持されてよい。具体的には、ベクトルxからの複数のアドレス読み出しは、パイプラインにおいてアクティブなベクトルmからの書き込みアドレス範囲の外部に(例えば、常に)あってよい。一実施形態において、アドレスチェックにより、(例えば)上記2つの条件(a)及び(b)の1つがd≧1を満たす場合に(又はその場合にのみ)、ベクトルxは移動してよい。2つのいずれも適用されない場合、(例えばベクトル間)ストール(例えばNOP)は、例えば、最終的に(a)がd=1により適用可能となるまで又はベクトルMが消失するまで、挿入されてよい。一実施形態(d)において、ベクトルmに追従する他のベクトル、例えばベクトルnが存在する場合、ベクトルxの前進は、さらにx<n又はx>n+kの対象とされてよい。いずれも適用可能ではない場合、(例えばベクトル間)ストール(例えばNOP)は、例えば、ベクトルnがパイプラインの末尾に配置されるまで、ベクトルm及びnの進行を可能とするように挿入されてよい。次に、(a)、(b)、及び(c)は、ベクトルnに再帰的に適用可能であってよい。一実施形態(e)において、パイプラインにおいてベクトルnに追従するより多くのベクトルが存在する場合、(d)は、再帰的に適用可能であってよい。一実施形態において、アドレスチェックは、(j+k+2)個のコンパレータのいずれかが、読み出されたxのアドレスに等しいmのアドレスを示すか否かをチェックすることを含んでよい。
本開示の複数の特定の実施形態は、いずれの範囲もチェックしないでよく、例えば、入手された単一の読み出アドレスに対して、パイプラインにおける複数の保留の書き込みアドレスの等価性のみチェックしてよい。本開示の複数の特定の実施形態は、例えば、動的ベクトル追従ロジックを用いることなく、複数の保留の書き込みが1つのベクトル命令に属するか否かをチェックしないデータハザード解消ロジックを可能にしてよい。
本明細書における複数の特定の実施形態は、オフロードエンジンの100%又は約100%の利用を実現してよい。本明細書における複数の特定の実施形態は、例えば、(例えば、単一の命令、複数データ(SIMD)実装における場合のように)密結合均一処理、又は、(例えば、画像処理ユニット(GPGPU)コンピューティングにおける汎用コンピューティングの場合のように)1つの処理グループ(例えばアンサンブル)だけがホモジニアスの処理でビジーだが、他の処理グループは待機している非常に緩く結合された実行のいずれかに提供する並列処理アーキテクチャと対照的に、2つの異なる処理エンジン(例えば、プロセッサコア、又はさらなる例として、その実行ユニット)による、(例えばVLIW)命令セットを通してのヘテロジニアス並列処理に、密な結合を提供する。対照的に、本明細書における複数の特定の実施形態において、複数の処理エレメント(例えば、当該システムのプロセッサと異なる速度で動作するオフロードエンジン(又は他のプロセッサ)であるもの)の両方は、命令レベルで協調し、例えば、SIMD構造と対照的にVLIW構造を有する命令セットにより所与のタスクを実行する。
図4は、本開示の複数の実施形態に係るフロー図400を示す。フロー図400は、制御信号に基づいて、スイッチにより、ハードウェアプロセッサの並列な複数の実行ユニットの複数の入力を第1のバッファ及び複数のメモリバンクの複数の出力に接続し、並列な複数のメモリバンク及び複数の第2のバッファの複数の入力を第1のバッファ、複数のメモリバンク、及び複数の実行ユニットの複数の出力に接続する段階402と、複数の第2のバッファの複数の出力からオフロードエンジンの複数の入力にデータを提供する段階404と、を含む。プロセッサは、例えば有限ステートマシンのような、本明細書のフロー図に従って動作するロジックを含んでよい。
一実施形態において、ハードウェアプロセッサは、並列な複数の(例えばベクトル)実行ユニットと、複数の実行ユニットの複数の入力を第1のバッファ及び複数のメモリバンクの複数の出力に接続し、並列な複数のメモリバンク及び複数の第2のバッファの複数の入力を第1のバッファ、複数のメモリバンク、及び複数の実行ユニットの複数の出力に接続するスイッチと、複数の第2のバッファの複数の出力に接続される複数の入力を有するオフロードエンジンと、を含む。オフロードエンジンの出力は、第1のバッファの入力に接続してよい。ハードウェアプロセッサは、第1のバッファの出力からの読み出しと複数の第2のバッファの複数の入力への書き込みとを同時に実行するデータハザード解消ロジックをさらに含んでよい。データハザード解消ロジックは、(例えばベクトル内)ストールを挿入しなくてよい。複数の(例えばベクトル)実行ユニットは、第1のクロック速度で実行してよく、オフロードエンジンは、第2のより高速(又はより低速)のクロック速度で実行してよい。実行ユニットは、シフトレジスタを含んでよい。複数の実行ユニットの各々は、シフトレジスタを含んでよい。第1のバッファ及び複数の第2のバッファは、ファーストインファーストアウト(FIFO)バッファであってよい。複数のメモリバンクは、4つ又はそれより多くのメモリバンクであってよく、各メモリバンクは、複数の他のメモリバンクの複数の入力ポート及び複数の出力ポートとは別個の入力ポート及び出力ポートを含んでよい。
他の実施形態において、方法は、制御信号に基づいて、スイッチにより、ハードウェアプロセッサの並列な複数の実行ユニットの複数の入力を第1のバッファ及び複数のメモリバンクの複数の出力に接続し、並列な複数のメモリバンク及び複数の第2のバッファの複数の入力を第1のバッファ、複数のメモリバンク、及び複数の実行ユニットの複数の出力に接続する段階と、複数の第2のバッファの複数の出力からオフロードエンジンの複数の入力にデータを提供する段階と、を含む。方法は、オフロードエンジンの出力から第1のバッファの入力にデータを提供する段階を含んでよい。方法は、第1のバッファの出力からの読み出しと複数の第2のバッファの複数の入力への書き込みとを同時に実行する段階を含んでよい。方法は、例えば、実行ユニットによって実行されるべき、ストールを挿入しない段階を含んでよい。方法は、複数の実行ユニットによって第1のクロック速度で実行し、オフロードエンジンによって第2のより高速(又はより低速)のクロック速度で実行する段階をさらに含んでよい。複数の実行ユニットの各々は、シフトレジスタを含んでよい。複数のメモリバンクは、4つ又はそれより多くのメモリバンクであり、各メモリバンクは、複数の他のメモリバンクの複数の入力ポート及び複数の出力ポートとは別個の入力ポート及び出力ポートを含む。第1のバッファ及び複数の第2のバッファは、ファーストインファーストアウト(FIFO)バッファであってよい。
さらに他の実施形態において、ハードウェアプロセッサは、命令を復号するハードウェアデコーダと、命令を実行することにより、制御信号に基づいて、ハードウェアプロセッサの並列な複数の実行ユニットの複数の入力を第1のバッファ及び複数のメモリバンクの複数の出力に接続し、並列な複数のメモリバンク及び複数の第2のバッファの複数の入力を第1のバッファ、複数のメモリバンク、及び複数の実行ユニットの複数の出力に接続し、複数の第2のバッファの複数の出力からオフロードエンジンの複数の入力にデータを提供するハードウェア実行ユニットと、を含む。オフロードエンジンの出力は、第1のバッファの入力に接続してよい。ハードウェア実行ユニットは、命令を実行してよく、これにより、第1のバッファの出力からの読み出しと、複数の第2のバッファの複数の入力への書き込みとを同時に実行させる。ハードウェア実行ユニットは、ストールを挿入することなく、命令を実行してよい。複数の実行ユニットは、第1のクロック速度で実行してよく、オフロードエンジンは、第2のより高速(又はより低速)のクロック速度で実行してよい。複数の実行ユニットの各々は、シフトレジスタを含んでよい。第1のバッファ及び複数の第2のバッファは、ファーストインファーストアウト(FIFO)バッファであってよい。複数のメモリバンクは、4つ又はそれより多くのメモリバンクであってよく、各メモリバンクは、複数の他のメモリバンクの複数の入力ポート及び複数の出力ポートとは別個の入力ポート及び出力ポートを含んでよい。
他の実施形態において、ハードウェア装置は、並列な複数の実行ユニットと、複数の実行ユニットの複数の入力を第1のバッファ及び複数のメモリバンクの複数の出力に接続し、並列な複数のメモリバンク及び複数の第2のバッファの複数の入力を第1のバッファ、複数のメモリバンク、及び複数の実行ユニットの複数の出力に接続する手段と、複数の第2のバッファの複数の出力に接続される複数の入力を有するオフロードエンジンと、を含む。
さらに他の実施形態において、装置は、コードをストアするデータストレージデバイスを備え、コードは、ハードウェアプロセッサによって実行された場合に、本明細書に開示される任意の方法をハードウェアプロセッサに実行させる。
命令セットは、1つ又は複数の命令フォーマットを含んでよい。所与の命令フォーマットは、実行されるべきオペレーション(例えば、オペコード)及び当該オペレーションが実行されるべき対象であるオペランド、及び/又は他のデータフィールド(例えば、マスク)を、他のものの中から指定する様々なフィールド(例えば、ビットの数、ビットの位置)を定義してよい。いくつかの命令フォーマットは、複数の命令テンプレート(又はサブフォーマット)の定義によってさらに分解される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットの複数のフィールドの異なる複数のサブセットを有するように定義されてよく(含まれる複数のフィールドは、典型的には同じ順序だが、少なくともいくつかは、含まれるフィールドがより少ないため、異なる複数のビット位置を有する)、及び/又は、異なるように解釈される所与のフィールドを有するように定義されてよい。従って、ISAの各命令は、所与の命令フォーマットを用いて(かつ、定義される場合には、その命令フォーマットの複数の命令テンプレートの所与のもので)表され、オペレーション及び複数のオペランドを指定するための複数のフィールドを含む。例えば、例示的なADD命令は、オペコード及びオペランドフィールドを指定することにより複数のオペランド(ソース1/デスティネーション及びソース2)を選択するために、具体的なオペコード及びオペコードフィールドを含む命令フォーマットを有し、命令ストリームにおけるこのADD命令の発生は、具体的な複数のオペランドを選択する複数のオペランドフィールド内の具体的な複数の内容を有する。次世代ベクトル拡張(AVX)(AVX1及びAVX2と称され、ベクトル拡張(VEX)符号化スキームを用いるSIMD拡張のセットが、リリース及び/又は公開されている(例えば、2015年4月発行のインテル(登録商標)64及びIA−32アーキテクチャソフトウェアデベロッパーズマニュアル及び2014年10月発行のインテル(登録商標)アーキテクチャ命令セット拡張プログラミングリファレンスを参照)。
[例示的な命令フォーマット]
本明細書で説明される命令の複数の実施形態は、異なる複数のフォーマットで具現されてよい。さらに、例示的なシステム、アーキテクチャ、及びパイプラインが以下に詳述される。命令の複数の実施形態は、このようなシステム、アーキテクチャ、及びパイプライン上で実行可能であるが、詳述されるものに限定されるものではない。
[汎用ベクトル向け命令フォーマット]
ベクトル向け命令フォーマットは、(例えば、特定の複数のフィールド固有の複数のベクトルオペレーションが存在する)複数のベクトル命令に適した命令フォーマットである。ベクトル及びスカラオペレーションの両方がベクトル向け命令フォーマットを通してサポートされる複数の実施形態が説明されるが、複数の代替的な実施形態は、ベクトル向け命令フォーマットのベクトルオペレーションのみを用いる。
図5A−5Bは、本開示の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びこれらの命令テンプレートを示すブロック図である。図5Aは、本開示の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びその複数のクラスA命令テンプレートを示すブロック図であり、図5Bは、本開示の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びその複数のクラスB命令テンプレートを示すブロック図である。具体的には、クラスA及びクラスB命令テンプレートが定義される汎用ベクトル向け命令フォーマット500であり、これらは両方とも、複数の非メモリアクセス505命令テンプレート及びメモリアクセス520命令テンプレートを含む。汎用という用語は、ベクトル向け命令フォーマットとの関連では、任意の具体的な命令セットに拘束されない命令フォーマットを指す。
ベクトル向け命令フォーマットが、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バイトの複数のベクトルオペランド)をサポートしてよい。
ハードウェアプロセッサ、例えば、乗算器オフロードエンジンを有するMMPハードウェアプロセッサは、複数の多倍精度演算を実行してよい。ハードウェアプロセッサは、128、256、512、1024等ビットのベクトルをシフトし、例えば、単一の(例えばVLIW)命令において(例えば非常に大きい)整数を2で除算すること又は(例えば非常に大きい)整数を2で乗算することを実行してよい。
図5AのクラスA命令テンプレートは、1)その内部に、非メモリアクセス、フルラウンド制御型オペレーション510命令テンプレート、及び非メモリアクセス、データ変換型オペレーション515命令テンプレートが示される複数の非メモリアクセス505命令テンプレートと、2)その内部に、メモリアクセス、一時的525命令テンプレート、及びメモリアクセス、非一時的530命令テンプレートが示されるメモリアクセス520命令テンプレートとを含む。図5BのクラスB命令テンプレートは、1)その内部に、非メモリアクセス、書き込みマスク制御、部分的ラウンド制御型オペレーション512命令テンプレート、及び非メモリアクセス、書き込みマスク制御、vsize型オペレーション517命令テンプレートが示される非メモリアクセス505命令テンプレートと、2)その内部に、メモリアクセス、書き込みマスク制御527命令テンプレートが示されるメモリアクセス520命令テンプレートとを含む。
汎用ベクトル向け命令フォーマット500は、図5A−5Bに示される順序で、以下に列挙される以下のフィールドを含む。
フォーマットフィールド540:このフィールドにおける特定値(命令フォーマット識別子の値)は、ベクトル向け命令フォーマットを一意に特定し、従って、命令ストリームにおけるベクトル向け命令フォーマットの複数の命令の発生を特定する。このように、このフィールドは、汎用ベクトル向け命令フォーマットのみを有する命令セットには必要とされないという意味で任意である。
ベースオペレーションフィールド542:その内容は、異なる複数のベースオペレーションを区別する。
レジスタインデックスフィールド544:その内容は、直接的に又はアドレス生成を通して、ソース及びデスティネーションオペランドの位置が、レジスタ内にあるか又はメモリ内にあるかを指定する。これらは、PxQ(例えば、32x512、16x128、32x1024、64x1024)レジスタファイルからN個のレジスタを選択するために十分な数のビットを含む。一実施形態において、Nは、3つのソース及び1つのデスティネーションレジスタまでであってよいが、複数の代替的な実施形態は、より多くの又はより少ないソース及びデスティネーションレジスタをサポートしてよい(例えば、2つのソースまでであっても、これらのソースのうち1つがデスティネーションとしても動作するようなソースをサポートしてよく、3つのソースまでであっても、これらのソースのうちの1つがデスティネーションとしても動作するソースをサポートしてよく、2つのソース及び1つのデスティネーションまでをサポートしてよい。)
修飾子フィールド546:その内容は、メモリアクセスを指定する汎用ベクトル命令フォーマットの複数の命令の発生を、メモリアクセスを指定しないものから、すなわち、複数の非メモリアクセス505命令テンプレートとメモリアクセス520命令テンプレートとを区別する。複数のメモリアクセスオペレーションは、(いくつかの場合において、複数のレジスタ内の複数の値を用いて、ソース及び/又はデスティネーションアドレスを指定する)メモリ階層の読み出し及び/又は書き込みを実行するが、複数の非メモリアクセスオペレーションは、これを実行しない(例えば、ソース及びデスティネーションがレジスタである)。一実施形態において、このフィールドは、複数のメモリアドレス算出を実行する3つの異なる態様の間でさらに選択するが、複数の代替的な実施形態は、複数のメモリアドレス算出を実行するより多くの、より少ない、又は異なる態様をサポートしてよい。
増加オペレーションフィールド550:その内容は、ベースオペレーションに加えて、様々な異なるオペレーションの中で実行されるべきいずれかを区別する。このフィールドは、状況に応じて異なる。本開示の一実施形態において、このフィールドは、クラスフィールド568、アルファフィールド552、及びベータフィールド554に分割される。増加オペレーションフィールド550は、2、3、又は4つの命令ではなく単一の命令において実行されるべき複数のオペレーションの共通グループを可能とする。
スケールフィールド560:その内容は、メモリアドレス生成のために(例えば、2scale×インデックス+ベースを用いるアドレス生成のために)、インデックスフィールドの内容のスケーリングを可能とする。
変位フィールド562A:その内容は、(例えば、2scale×インデックス+ベース+変位を用いるアドレス生成のために)メモリアドレス生成の一部として用いられる。
変位ファクタフィールド562B(なお、変位ファクタフィールド562Bの直上に変位フィールド562Aを並べることは、一方又は他方が用いられることを示す):その内容は、アドレス生成の一部として用いられる。これは、メモリアクセスのサイズ(N)によりスケールされるべき変位ファクタを指定する。ここで、Nは、(例えば、2scale×インデックス+ベース+スケールされた変位を用いるアドレス生成のための)メモリアクセスにおけるバイト数である。複数の冗長下位ビットは無視され、従って、変位ファクタフィールドの内容は、実効アドレスの算出に用いられる最終的な変位を生成すべく、複数のメモリオペランドの合計サイズ(N)により乗算される。Nの値は、プロセッサハードウェアによって、(本明細書において後述される)フルオペコードフィールド574及びデータ操作フィールド554Cに基づいて、ランタイムで決定される。変位フィールド562A及び変位ファクタフィールド562Bは、これらが非メモリアクセス505命令テンプレートのために用いられないという意味で任意であり、及び/又は、異なる複数の実施形態は、これら2つのうち1つだけを実装してよく、又はこれらのうち1つも実装しなくてよい。
データエレメント幅フィールド564:その内容は、多数のデータエレメント幅のうちのいずれが(いくつかの実施形態においては全ての命令に対して、複数の他の実施形態では、複数の命令のうちのいくつかのみに対して)用いられるかを区別する。このフィールドは、複数のオペコードのいくつかの態様を用いて、1つだけのデータエレメント幅がサポートされる場合、及び/又は複数のデータエレメント幅がサポートされる場合には必要とされないという意味で任意である。
書き込みマスクフィールド570:その内容は、データエレメント位置毎に、デスティネーションベクトルオペランドにおける当該データエレメント位置がベースオペレーション及び増加オペレーションの結果を反映するか否かを制御する。クラスA命令テンプレートは、併合書き込みマスクをサポートするが、クラスB命令テンプレートは、併合及びゼロ書き込みマスクの両方をサポートする。併合の場合、複数のベクトルマスクは、(ベースオペレーション及び増加オペレーションによって指定された)いずれのオペレーションの実行中も、デスティネーションの複数のエレメントの任意のセットを更新から保護することを可能にする。他の一実施形態において、対応するマスクビットが0を有する場合、デスティネーションの各エレメントの古い値を保持する。対照的に、複数のゼロ書き込みベクトルマスクが(ベースオペレーション及び増加オペレーションによって指定された)いずれのオペレーションの実行中もデスティネーションの複数のエレメントの任意のセットへのゼロ書き込みを可能にする場合、一実施形態において、対応するマスクビットが0値を有する場合、デスティネーションのエレメントは0にセットされる。この機能性のサブセットは、実行されているオペレーションのベクトル長を制御する(すなわち、複数のエレメントのスパンが最初から最後のものまで変更される)能力である。しかしながら、変更される複数のエレメントが連続する必要はない。従って、書き込みマスクフィールド570は、ロード、ストア、演算、論理等を含む複数の部分的なベクトルオペレーションを可能とする。書き込みマスクフィールド570の内容が多数の書き込みマスクレジスタの中から使用されるべき書き込みマスクを含む1つを選択する(従って、書き込みマスクフィールド570の内容は、実行されるべきマスキングを間接的に特定する)本開示の複数の実施形態が説明されるが、代替的な実施形態によれば、代わりに又はさらに、マスク書き込みフィールド570の内容は、実行されるべきマスキングを直接的に指定することを可能とする。
即値フィールド572:その内容は、即値の指定を可能とする。このフィールドは、即値をサポートしない汎用ベクトル向けフォーマットの実装では存在せず、即値を用いない複数の命令に存在しないという意味で任意である。
クラスフィールド568:その内容は、複数の命令の異なるクラス間を区別する。図5A−Bを参照すると、このフィールドの内容は、クラスA及びクラスB命令の間で選択する。図5A−Bにおいて、複数の角が円い四角は、特定値がフィールドに存在する(例えば、図5A−Bにおいて、クラスフィールド568に対してクラスA568A及びクラスB568Bのそれぞれ)ことを示すために用いられる。
[クラスA命令テンプレート]
複数のクラスAの非メモリアクセス505命令テンプレートの場合、アルファフィールド552は、RSフィールド552Aと解釈され、その内容は、複数の異なる増加オペレーション型の中でいずれが実行されるべきかを区別し(例えば、非メモリアクセス、ラウンド型オペレーション510及び非メモリアクセス、複数のデータ変換型オペレーション515命令テンプレートに対し、ラウンド552A.1及びデータ変換552A.2がそれぞれ指定される)、ベータフィールド554は、指定される型の複数のオペレーションの中でいずれが実行されるべきかを区別する。非メモリアクセス505命令テンプレートには、スケールフィールド560、変位フィールド562A、及び変位スケールフィールド562Bは存在しない。
[メモリアクセス命令テンプレート:フルラウンド制御型オペレーション]
非メモリアクセスフルラウンド制御型オペレーション510の命令テンプレートにおいて、ベータフィールド554は、ラウンド制御フィールド554Aと解釈され、その内容は、静的なラウンドを提供する。説明された本開示の複数の実施形態において、ラウンド制御フィールド554Aは、全浮動小数点例外抑制(SAE)フィールド556及びラウンドオペレーション制御フィールド558を含むが、複数の代替的な実施形態は、これらの複数の概念の両方を同じフィールドに符号化することをサポートしてよく、又はこれらの複数の概念/複数のフィールドの1つ又は他を有するだけでよい(例えば、ラウンドオペレーション制御フィールド558のみを有してよい)。
SAEフィールド556:その内容は、例外イベント報告を無効化するか否かを区別する。SAEフィールド556の内容が、抑制可能であることを示す場合、所与の命令は、いずれの種類の浮動小数点例外フラグも報告せず、いずれの浮動小数点例外処理部も起動しない。
ラウンドオペレーション制御フィールド558:その内容は、複数のラウンドオペレーションのいずれのグループ(例えば、切り上げ、切り捨て、0への丸め及び近似値への丸め)を実行するかを区別する。従って、ラウンドオペレーション制御フィールド558は、命令に基づいて、ラウンドオペレーションモードの変更を可能とする。プロセッサが複数のラウンドオペレーションモードを指定するための制御レジスタを含む本開示の一実施形態において、ラウンドオペレーション制御フィールド550の内容は、当該レジスタ値にオーバライドする。
[非メモリアクセス命令テンプレート−データ変換型オペレーション]
非メモリアクセスデータ変換型オペレーション515命令テンプレートにおいて、ベータフィールド554はデータ変換フィールド554Bと解釈され、その内容は、多数のデータ変換のうちいずれが実行されるか(例えば、データ変換なし、スウィズル、ブロードキャスト)を区別する。
クラスAのメモリアクセス520命令テンプレートの場合、アルファフィールド552は、エビクションヒントフィールド552Bと解釈され、その内容は、複数のエビクションヒントの中からいずれが用いられるべきかを区別し(図5Aにおいて、一時的552B.1及び非一時的552B.2が、メモリアクセス、一時的525命令テンプレート及びメモリアクセス、非一時的530命令テンプレートに対してそれぞれ指定される)、ベータフィールド554は、データ操作フィールド554Cと解釈され、その内容は、(プリミティブとしても知られる)多数のデータ操作オペレーションのうちいずれが実行されるべきか(例えば、操作なし、ブロードキャスト、ソースのアップコンバート及びデスティネーションのダウンコンバート)を区別する。複数のメモリアクセス520命令テンプレートは、スケールフィールド560と、任意に、変位フィールド562A又は変位スケールフィールド562Bとを含む。
複数のベクトルメモリ命令は、変換サポートにより、メモリからの複数のベクトルロード、メモリへの及び複数のベクトルストアを実行する。通常のベクトル命令と同様に、複数のベクトルメモリ命令は、書き込みマスクとして選択されるベクトルマスクの内容によって命令される、実際に転送される複数のエレメントとともに、データエレメント単位の態様で、メモリから/メモリへデータを転送する。
[メモリアクセス命令テンプレート−一時的]
一時的データは、キャッシュによる利益を十分に受けられるほどすぐに再使用される可能性が高いデータである。しかしながら、これは示唆であり、複数の異なるプロセッサが、この示唆を完全に無視することを含む異なる態様で、これを実装してよい。
[メモリアクセス命令テンプレート−非一時的]
非一時的データは、一次レベルキャッシュにおいてキャッシュによる利益を受けられるほど十分即座に再使用される可能性が低いデータであり、エビクションの優先度が与えられなければならない。しかしながら、これは示唆であり、複数の異なるプロセッサが、この示唆を完全に無視することを含む異なる態様で、これを実装してよい。
[命令テンプレート−クラスB]
複数のクラスB命令テンプレートの場合、アルファフィールド552は、書き込みマスク制御(Z)フィールド552Cと解釈され、その内容は、書き込みマスクフィールド570によって制御される書き込みマスキングが、併合又はゼロ書き込みを実行すべきか否かを区別する。
複数のクラスB非メモリアクセス505命令テンプレートの場合、ベータフィールド554の一部は、RLフィールド557Aと解釈され、その内容は、複数の異なる増加オペレーション型の中でいずれが実行されるべきかを区別し(例えば、ラウンド557A.1及びベクトル長(VSIZE)557A.2は、非メモリアクセス、書き込みマスク制御、部分的ラウンド制御型オペレーション512命令テンプレート及び非メモリアクセス、書き込みマスク制御、VSIZE型オペレーション517命令テンプレートに対してそれぞれ指定される)、ベータフィールド554の残りは、指定される型の複数のオペレーションのいずれが実行されるべきかを区別する。非メモリアクセス505命令テンプレートには、スケールフィールド560、変位フィールド562A、及び変位スケールフィールド562Bは存在しない。
非メモリアクセス、書き込みマスク制御、部分的ラウンド制御型オペレーション510の命令テンプレートにおいて、ベータフィールド554の残りは、ラウンドオペレーションフィールド559Aと解釈され、例外イベント報告は、無効化される(所与の命令は、いずれの種類の浮動小数点例外フラグも報告せず、いずれの浮動小数点例外処理部も起動しない)。
ラウンドオペレーション制御フィールド559A:単にラウンドオペレーション制御フィールド558として、その内容は、複数のラウンドオペレーションのいずれのグループが(例えば、切り上げ、切り捨て、0への丸め及び近似値への丸めを)実行するかを区別する。従って、ラウンドオペレーション制御フィールド559Aは、命令に基づいて、ラウンドオペレーションモードの変更を可能とする。プロセッサが複数のラウンドオペレーションモードを指定するための制御レジスタを含む本開示の一実施形態において、ラウンドオペレーション制御フィールド550の内容は、当該レジスタ値にオーバライドする。
非メモリアクセス、書き込みマスク制御、VSIZE型オペレーション517命令テンプレートにおいて、ベータフィールド554の残りは、ベクトル長フィールド559Bと解釈され、その内容は、多数のデータベクトル長の中からいずれが実行されるべきか(例えば、128、256、又は512バイト)を区別する。
複数のクラスBのメモリアクセス520命令テンプレートの場合、ベータフィールド554の一部は、ブロードキャストフィールド557Bと解釈され、その内容は、ブロードキャスト型のデータ操作オペレーションが実行されるべきか否かを区別し、ベータフィールド554の残りは、ベクトル長フィールド559Bと解釈される。複数のメモリアクセス520命令テンプレートは、スケールフィールド560と、任意に、変位フィールド562A又は変位スケールフィールド562Bとを含む。
汎用ベクトル向け命令フォーマット500に関して、フォーマットフィールド540、ベースオペレーションフィールド542、及びデータエレメント幅フィールド564を含むフルオペコードフィールド574が示される。一実施形態において、フルオペコードフィールド574はこれらフィールドの全てを含むものとして示されるが、フルオペコードフィールド574は、これらの全てをサポートしてはいない複数の実施形態においては、これらフィールドの一部を含む。フルオペコードフィールド574は、オペレーションコード(オペコード)を提供する。
増加オペレーションフィールド550、データエレメント幅フィールド564、及び書き込みマスクフィールド570は、汎用ベクトル向け命令フォーマットにおいて、これら全ての機能が命令に基づいて指定されることを可能とする。
書き込みマスクフィールド及びデータエレメント幅フィールドの組み合わせは、型別の複数の命令を形成し、これらによれば、マスクは複数の異なるデータエレメント幅に基づいて適用されることが可能となる。
クラスA及びクラスB内で見られる様々な複数の命令テンプレートは、複数の異なる状況において有益である。本開示の複数の実施形態のいくつかにおいて、複数の異なるプロセッサ又はプロセッサ内の複数の異なるコアは、クラスAのみ、クラスBのみ、又は両方のクラスをサポートしてよい。例えば、汎用コンピューティング向けの高性能汎用アウトオブオーダコアは、クラスBのみをサポートしてよく、主にグラフィック及び/又は科学的(スループット)コンピューティング向けのコアは、クラスAのみをサポートしてよく、両方向けのコアは、両方をサポートしてよい(勿論、コアは、両方のクラスからの複数のテンプレート及び命令のいくつかの組み合わせを有するが、両方のクラスからの複数のテンプレート及び命令の全てが本開示の範囲内にある訳ではない)。また、単一のプロセッサは、全てが同じクラスをサポートする、又は異なるコアが異なるクラスをサポートする複数のコアを含んでよい。例えば、別個のグラフィックコア及び汎用コアを有するプロセッサにおいて、主にグラフィック及び/又は科学コンピューティング向けに意図された複数のグラフィックコアの1つは、クラスAのみをサポートしてよく、複数の汎用コアのうちの1つ又は複数は、クラスBのみをサポートする汎用コンピューティング向けに意図されたアウトオブオーダ実行及びレジスタリネーミングを有する高性能汎用コアであってよい。別個のグラフィックコアを有さない他のプロセッサは、クラスA及びクラスBの両方をサポートする汎用インオーダ又はアウトオブオーダコアをもう1つ含んでよい。勿論、1つのクラスからの複数の機能は、本開示の複数の異なる実施形態における他のクラスで実装されてもよい。高水準言語で記述された複数のプログラムは、1)実行のためにターゲットのプロセッサにサポートされるクラスの命令のみを有する形式、又は2)全クラスの命令の複数の異なる組み合わせを用いて記述された代替的な複数のルーチンを有し、コードを現在実行中のプロセッサにサポートされる複数の命令に基づいて実行する複数のルーチンを選択する制御フローコードを有する形式を含む、様々な異なる実行可能形式にされる(例えば、ジャストインタイムにコンパイルされる又は静的にコンパイルされる)ことがある。
[例示的な特定ベクトル向け命令フォーマット]
図6Aは、本開示の複数の実施形態に係る例示的な特定ベクトル向け命令フォーマットを示すブロック図である。図6Aは、複数のフィールドの位置、サイズ、解釈及び順序、ならびにこれらのフィールドのうちいくつかに対する複数の値を指定するという意味で具体的な特定ベクトル向け命令フォーマット600を示す。特定ベクトル向け命令フォーマット600は、x86命令セットを拡張するために用いられてよく、従って、複数のフィールドのうちのいくつかは、既存のx86命令セット及びこれらの拡張(例えば、AVX)において用いられるものと同様又は同じである。このフォーマットは、複数の拡張を有する既存のx86命令セットのプレフィクス符号化フィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、及び複数の即値フィールドとの整合性を維持する。図6Aの複数のフィールドがマッピングされる図5A−Bの複数のフィールドが示される。
本開示の複数の実施形態は、例示目的のため、汎用ベクトル向け命令フォーマット500との関連で特定ベクトル向け命令フォーマット600を参照して説明されるが、本開示は、特許請求の範囲に記載されたものを除いて、特定ベクトル向け命令フォーマット600に限定されるものではないことを理解されたい。例えば、汎用ベクトル向け命令フォーマット500は、様々なフィールドの様々な可能なサイズを検討し、特定ベクトル向け命令フォーマット600は、複数の具体的なサイズの複数のフィールドを有するものとして示される。具体的な例を用いて、データエレメント幅フィールド564は、特定ベクトル向け命令フォーマット600の1ビットフィールドとして示されるが、本開示は、この例に限定されるものではない(すなわち、汎用ベクトル向け命令フォーマット500は、複数の他のサイズのデータエレメント幅フィールド564を検討する)。
汎用ベクトル向け命令フォーマット500は、図6Aに示される順序で、以下に列挙される以下のフィールドを含む。EVEXプレフィクス(バイト0−3)602は、4バイト形式で符号化される。
フォーマットフィールド540(EVEXバイト0、ビット[7:0])]:第1のバイト(EVEXバイト0)は、フォーマットフィールド540であり、これは、0x62(本開示の一実施形態において、ベクトル向け命令フォーマットを区別するために用いられる固有値)を含む。
第2−第4のバイト(EVEXバイト1−3)は、具体的な能力を提供する多数のビットフィールドを含む。
REXフィールド605(EVEXバイト1、ビット[7−5]は、EVEX.Rビットフィールド(EVEXバイト1、ビット7−R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]−X)、及び557BEXバイト1、ビット[5]−B)からなる。EVEX.R、EVEX.X、及びEVEX.Bビットフィールドは、対応する複数のVEXビットフィールドと同じ機能性を提供し、1の補数形式を用いて符号化される、すなわち、ZMM0は1111Bとして符号化され、ZMM15は0000Bとして符号化される。当技術分野において公知であるように、複数の命令の複数の他のフィールドは、複数のレジスタインデックスの下位3ビット(rrr、xxx、及びbbb)を符号化し、これにより、Rrrr、Xxxx、及びBbbbは、EVEX.R、EVEX.X、及びEVEX.Bを追加することによって形成されてよい。
REX'フィールド510:これは、REX'フィールド510の第1の部分であり、拡張された32レジスタセットの上位16又は下位16のいずれかを符号化するために用いられるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]−R')である。本開示の一実施形態において、このビットは、以下に示される他のものと共に、ビット反転フォーマットでストアされることにより、リアルオペコードバイトは62であるが、(後述の)MOD R/MフィールドにおいてMODフィールドの値11を受け付けない(周知のx86の32ビットモードにおける)BOUND命令から区別するが、本開示の複数の代替的な実施形態は、このビット及び以下に示される反転フォーマットの他のビットをストアしない。1の値は、下位16個のレジスタを符号化するために用いられる。換言すると、R'Rrrrは、EVEX.R'、EVEX.R、及び複数の他のフィールドからの他のRRRを組み合わせことによって形成される。
オペコードマップフィールド615(EVEXバイト1、ビット[3:0]−mmmm):その内容は、暗示された先頭オペコードバイト(0F、0F38、又は0F3)を符号化する。
データエレメント幅フィールド564(EVEXバイト2、ビット[7]−W)は、表記EVEX.Wにより表される。EVEX.Wは、データ型(32ビットデータエレメント又は64ビットデータエレメントのいずれか)の粒度(サイズ)を定義するために用いられる。
EVEX.vvvv620(EVEXバイト2、ビット[6:3]−vvvv):EVEX.vvvvの役割は、1)EVEX.vvvvは、反転(1の補数)形式で指定される第1のソースレジスタオペランドを符号化し、2つ又はそれより多くのソースオペランドを有する複数の命令に対して有効であり、2)EVEX.vvvvは、特定の複数のベクトルシフトに対して1の補数形式で指定されるデスティネーションレジスタオペランドを符号化し、又は3)EVEX.vvvvは、いずれのオペランドも符号化せず、フィールドは保持されて1111bを含まなくてはならないということを含んでよい。従って、EVEX.vvvvフィールド620は、反転(1の補数)形式でストアされた第1のソースレジスタ指定子の下位4ビットを符号化する。命令に応じて、追加の異なるEVEXビットフィールドは、指定子サイズを32のレジスタに拡張するために用いられる。
EVEX.U568クラスフィールド(EVEXバイト2、ビット[2]−U):EVEX.U=0の場合、これは、クラスA又はEVEX.U0を示す。EVEX.U=1の場合、これは、クラスB又はEVEX.U1を示す。
プレフィクス符号化フィールド625(EVEXバイト2、ビット[1:0]−pp)は、ベースオペレーションフィールドに対してさらなる複数のビットを提供する。EVEXプレフィクスフォーマットにおける複数のレガシSSE命令に対するサポートを提供することに加えて、これは、SIMDプレフィクスを圧縮する利益をも有する(SIMDプレフィクスを表現するバイトを必要とするのではなく、EVEXプレフィクスは2ビットのみを必要とする)。一実施形態において、レガシフォーマット及びEVEXプレフィクスフォーマットの両方においてSIMDプレフィクス(66H、F2H、F3H)を用いる複数のレガシSSE命令をサポートすべく、これらのレガシSIMDプレフィクスは、SIMDプレフィクス符号化フィールドに符号化され、デコーダのPLAに提供される前に、ランタイムにおいてレガシSIMDプレフィクスに拡張される(従って、PLAは、これらのレガシ命令のレガシ及びEVEXフォーマットの両方を変更することなく実行することができる)。より新たな複数の命令は、EVEXプレフィクス符号化フィールドの内容を直接、オペコード拡張として用いることができたが、複数の特定の実施形態は、整合性のために同様に拡張するが、これらのレガシSIMDプレフィクスにより指定された異なる意味を可能とする。代替的な実施形態は、2ビットSIMDプレフィクスの符号化をサポートするPLAを再設計してよく、従って、拡張を必要としない。
アルファフィールド552(EVEXバイト3、ビット[7]−EH、EVEX.EH、EVEX.rs、EVEX.RL、EVEX.write mask control、及びEVEX.Nとしても知られ、またαで示される):前述されたように、このフィールドは状況に応じて異なる。
ベータフィールド554(EVEXバイト3、ビット[6:4]−SSS、EVEX.s2−0、EVEX.r2−0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られ、またβββで示される):前述されたように、このフィールドは状況に応じて異なる。
REX'フィールド510:これは、REX'フィールドの残りであり、拡張された32レジスタセットの上位16又は下位16のいずれかを符号化するために用いられてよいEVEX.V'ビットフィールド(EVEXバイト3、ビット[3]−V')である。このビットは、ビット反転フォーマットでストアされる。1の値は、下位16個のレジスタを符号化するために用いられる。換言すると、V'VVVVは、EVEX.V'、EVEX.vvvvを組み合わせることによって形成される。
書き込みマスクフィールド570(EVEXバイト3、ビット[2:0]−kkk):その内容は、前述されたように、複数の書き込みマスクレジスタ内のレジスタにおいてインデックスを指定する。本開示の一実施形態において、特定値EVEX.kkk=000は、特定の命令のために用いられる書き込みマスクがないことを示唆する特別な挙動を有する(これは、ハードウェアに組み込まれた全ての書き込みマスク又はマスキングハードウェアを迂回するハードウェアを用いることを含む、様々な態様で実装されてよい)。
リアルオペコードフィールド630(バイト4)は、オペコードバイトとしても知られる。オペコードの一部は、このフィールドにおいて指定される。
MOD R/Mフィールド640(バイト5)は、MODフィールド642、Regフィールド644及びR/Mフィールド646を含む。前述されたように、MODフィールド642の内容は、メモリアクセス及び非メモリアクセスオペレーション間を区別する。Regフィールド644の役割は、2つの状況に対して要約されてよい。すなわち、デスティネーションレジスタオペランド又はソースレジスタオペランドのいずれかを符号化する場合、又はオペコード拡張として扱われ、いずれの命令オペランドの符号化にも用いられない場合である。R/Mフィールド646の役割は、以下を含んでよい。すなわち、メモリアドレスを参照する命令オペランドを符号化すること、又はデスティネーションレジスタオペランド又はソースレジスタオペランドのいずれかを符号化することである。
スケーリング、インデックス、ベース(SIB)バイト(バイト6):前述されたように、スケールフィールド550の内容は、メモリアドレス生成のために用いられる。SIB.xxx654及びSIB.bbb656:これらのフィールドの内容は、レジスタインデックスXxxx及びBbbbに関して前に説明されている。
変位フィールド562A(バイト7―10):MODフィールド642が10を含む場合、バイト7−10は変位フィールド562Aであり、これは、レガシ32ビット変位(disp32)と同じ機能をはたし、かつ、バイト粒度において機能する。
変位ファクタフィールド562B(バイト7):MODフィールド642が01を含む場合、バイト7は、変位ファクタフィールド562Bである。このフィールドの位置は、バイト粒度において機能するレガシx86命令セットの8ビット変位(disp8)の位置と同じである。disp8は符号拡張されるので、これは、−128及び127バイトオフセット間でのみアドレスすることができる。複数の64バイトキャッシュラインに関して、disp8は、−128、−64、0、及び64の4つのみという実に有用な値にセットされ得る8ビットを用いる。多くの場合、より広範囲が必要とされるので、disp32が用いられる。しかしながら、disp32は、4バイトを必要とする。disp8及びdisp32と対照的に、変位ファクタフィールド562Bは、disp8の再解釈である。変位ファクタフィールド562Bを用いる場合、実際の変位は、メモリオペランドアクセスのサイズ(N)で乗算された変位ファクタフィールドの内容によって決定される。この型の変位は、disp8×Nと称される。これは、(変位のために用いられる単一バイトであるが、はるかにより広範囲を有する)平均命令長を低減させる。このような圧縮された変位は、有効な変位がメモリアクセスの粒度の倍数であるという前提に基づいており、従って、アドレスオフセットの冗長下位ビットは、符号化される必要がない。換言すると、変位ファクタフィールド562Bは、レガシx86命令セットの8ビット変位を代替する。従って、変位ファクタフィールド562Bは、disp8がdisp8×Nにオーバーロードされる唯一の例外はあるものの、x86命令セットの8ビット変位と同じ態様で符号化される(ModRM/SIB符号化ルールに変更はない)。換言すると、(バイト単位のアドレスオフセットを得るために、変位をメモリオペランドのサイズによりスケーリングする必要がある)ハードウェアによる変位値の解釈のみを除いて、複数の符号化ルール又は符号化長に変更はない。即値フィールド572は、前述されたように動作する。
[フルオペコードフィールド]
図6Bは、本開示の一実施形態に係るフルオペコードフィールド574を形成する特定ベクトル向け命令フォーマット600の複数のフィールドを示すブロック図である。具体的には、フルオペコードフィールド574は、フォーマットフィールド540、ベースオペレーションフィールド542、及びデータエレメント幅(W)フィールド564を含む。ベースオペレーションフィールド542は、プレフィクス符号化フィールド625、オペコードマップフィールド615、及びリアルオペコードフィールド630を含む。
[レジスタインデックスフィールド]
図6Cは、本開示の一実施形態に係るレジスタインデックスフィールド544を形成する特定ベクトル向け命令フォーマット600の複数のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド544は、REXフィールド605、REX'フィールド610、MODR/M.regフィールド644、MODR/M.r/mフィールド646、VVVVフィールド620、xxxフィールド654、及びbbbフィールド656を含む。
[増加オペレーションフィールド]
図6Dは、本開示の一実施形態に係る増加オペレーションフィールド550を形成する特定ベクトル向け命令フォーマット600の複数のフィールドを示すブロック図である。クラス(U)フィールド568が0を含む場合、これはEVEX.U0(クラスA568A)を意味し、1を含む場合、これはEVEX.U1(クラスB568B)を意味する。U=0、かつMODフィールド642が(非メモリアクセスオペレーションを意味する)11を含む場合、アルファフィールド552(EVEXバイト3、ビット[7]−EH)は、rsフィールド552Aと解釈される。rsフィールド552Aが1(ラウンド552A.1)を含む場合、ベータフィールド554(EVEXバイト3、ビット[6:4]−SSS)は、ラウンド制御フィールド554Aと解釈される。ラウンド制御フィールド554Aは、1ビットのSAEフィールド556及び2ビットのラウンドオペレーションフィールド558を含む。rsフィールド552Aが0(データ変換552A.2)を含む場合、ベータフィールド554(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ変換フィールド554Bと解釈される。U=0、かつMODフィールド642が00、01、又は10(メモリアクセスオペレーションを意味する)を含む場合、アルファフィールド552(EVEXバイト3、ビット[7]−EH)は、エビクションヒント(EH)フィールド552Bと解釈され、ベータフィールド554(EVEXバイト3、ビット[6:4]−SSS)は、3ビットデータ操作フィールド554Cと解釈される。
U=1の場合、アルファフィールド552(EVEXバイト3、ビット[7]−EH)は、書き込みマスク制御(Z)フィールド552Cと解釈される。U=1、かつMODフィールド642が(非メモリアクセスオペレーションを意味する)11を含む場合、ベータフィールド554の一部(EVEXバイト3、ビット[4]−S)は、RLフィールド557Aと解釈され、1(ラウンド557A.1)を含む場合、ベータフィールド554の残り(EVEXバイト3、ビット[6−5]−S2−1)は、ラウンドオペレーションフィールド559Aと解釈され、RLフィールド557Aが0(VSIZE557.A2)を含む場合、ベータフィールド554の残り(EVEXバイト3、ビット[6−5]−S2−1)は、ベクトル長フィールド559B(EVEXバイト3、ビット[6−5]−L1−0)と解釈される。U=1、かつMODフィールド642が00、01、又は10(メモリアクセスオペレーションを意味する)を含む場合、ベータフィールド554(EVEXバイト3、ビット[6:4]−SSS)は、ベクトル長フィールド559B(EVEXバイト3、ビット[6−5]−L1−0)及びブロードキャストフィールド557B(EVEXバイト3、ビット[4]−B)と解釈される。
[例示的なレジスタアーキテクチャ]
図7は、本開示の一実施形態に係るレジスタアーキテクチャ700のブロック図である。示された実施形態には、512ビット幅の32個のベクトルレジスタ710が存在する。これらのレジスタは、zmm0からzmm31と記載される。下位16個のzmmレジスタの下位256ビットは、レジスタymm0−16にオーバーレイされる。下位16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0−15の上にオーバーレイされる。特定ベクトル向け命令フォーマット600は、以下の表に示されるように、これらのオーバーレイされたレジスタファイルにおいて動作する。
Figure 2017016637
換言すると、ベクトル長フィールド559Bは、最大長と1つ又は複数の他のより短い長さとの間で選択し、ここで、このようなより短い長さの各々は、先行の長さの半分の長さであり、ベクトル長フィールド559Bを有さない複数の命令のテンプレートは、最大ベクトル長において動作する。さらに、一実施形態において、特定ベクトル向け命令フォーマット600の複数のクラスB命令テンプレートは、パック型又はスカラ単/倍精度浮動小数点データ及びパック型又はスカラ整数データにおいて動作する。複数のスカラオペレーションは、zmm/ymm/xmmレジスタ内の最下位のデータエレメント位置で実行されるオペレーションである。より高位のデータエレメント位置は、命令の前のそれらと同じ状態のままに残される、又は実施形態に応じてゼロ書き込みが実行される。
書き込みマスクレジスタ715:示された実施形態において、8個の書き込みマスクレジスタが存在し(k0からk7)、各々のサイズは64ビットである。代替的な実施形態において、書き込みマスクレジスタ715は、16ビットサイズである。前述されたように、本開示の一実施形態において、ベクトルマスクレジスタk0は、書き込みマスクとして用いられることができない。通常k0を示す符号化が、書き込みマスクのために用いられる場合、これは、ハードウェアに組み込まれる書き込みマスク0xFFFFを選択し、当該命令に対し、有効に書き込みマスキングを無効化する。
汎用レジスタ725:示された実施形態において、複数のメモリオペランドにアドレスする既存の複数のx86アドレス指定モードと共に用いられる16個の64ビット汎用レジスタが存在する。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、及びR8からR15という名称で記載される。
MMXパック型整数フラットレジスタファイル750がエイリアスされるスカラ浮動小数点スタックレジスタファイル(x87スタック)745:示された実施形態において、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(場合によっては、アプリケーションコア又はアプリケーションプロセッサと称される)、上述されたコプロセッサ、及び追加的な機能性を含み得るシステムオンチップを含んでよい。複数の例示的なコアアーキテクチャが、次に説明され、次いで、例示的な複数のプロセッサ及びコンピュータアーキテクチャが説明される。
[例示的なコアアーキテクチャ]
インオーダ及びアウトオブオーダコアのブロック図
図8Aは、本開示の複数の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図8Bは、本開示の複数の実施形態に係るプロセッサに含まれるべきインオーダアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。図8A−Bにおける複数の実線のボックスは、インオーダパイプライン及びインオーダコアを示し、任意に追加された複数の破線のボックスは、レジスタリネーミング、アウトオブオーダ発行/実行パイプライン及びコアを示す。インオーダ態様はアウトオブオーダ態様のサブセットであるとして、アウトオブオーダ態様が説明される。
図8Aにおいて、プロセッサパイプライン800が、フェッチステージ802、長さ復号ステージ804、復号ステージ806、配分ステージ808、リネーミングステージ810、スケジューリング(ディスパッチ又は発行としても知られる)ステージ812、レジスタ読み出し/メモリ読み出しステージ814、実行ステージ816、ライトバック/メモリ書き込みステージ818、例外処理ステージ822、及びコミットステージ824を含む。
図8Bは、実行エンジンユニット850に結合されるフロントエンドユニット830を含むプロセッサコア890を示し、両方ともメモリユニット870に結合される。コア890は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、又はハイブリッドもしくは代替的な型のコアであってよい。さらに他の選択肢として、コア890は、例えば、ネットワーク又は通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティング画像処理ユニット(GPGPU)コア、グラフィックコア等のような特定用途向けコアであってよい。
フロントエンドユニット830は、命令キャッシュユニット834と結合される分岐予測ユニット832を含み、命令キャッシュユニット834は命令トランスレーションルックアサイドバッファ(TLB)836と結合され、命令トランスレーションルックアサイドバッファ836は命令フェッチユニット838と結合され、命令フェッチユニット838は復号ユニット840と結合される。復号ユニット840(又はデコーダもしくはデコーダユニット)は、複数の命令(例えばマクロ命令)を復号し、1つ又は複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、又は元の命令から復号され、又は他の方法でこれを反映し、又はこれから派生した他の制御信号を、出力として生成してよい。復号ユニット840は、様々な異なるメカニズムを用いて実装されてよい。複数の適したメカニズムの複数の例は、限定されるものではないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)等を含む。一実施形態において、コア890は、複数の特定のマクロ命令に対するマイクロコードを(例えば、復号ユニット840、又は他の方法でフロントエンドユニット830内に)ストアする、マイクロコードROM又は他の媒体を含む。復号ユニット840は、実行エンジンユニット850内のリネーミング/アロケータユニット852と結合される。
実行エンジンユニット850は、リタイアメントユニット854及び1つ又は複数のスケジューラユニット856のセットと結合されるリネーミング/アロケータユニット852を含む。スケジューラユニット856は、複数のリザベーションステーション、中央命令ウィンドウ等を含む、任意の数の異なるスケジューラを表す。スケジューラユニット856は、物理レジスタファイルユニット858に結合される。複数の物理レジスタファイルユニット858の各々は、1つ又は複数の物理レジスタファイル、スカラ整数、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行される次の命令のアドレスである命令ポインタ)等のような1つ又は複数の異なるデータ型をストアする異なるものを表す。一実施形態において、物理レジスタファイルユニット858は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、及びスカラレジスタユニットを備える。これらのレジスタユニットは、複数のアーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供してよい。物理レジスタファイルユニット858は、リタイアメントユニット854にオーバラップされて、(例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いて、フューチャファイル、履歴バッファ、及びリタイアメントレジスタファイルを用いて、レジスタマップ及び複数のレジスタのプールを用いる等)レジスタリネーミング及びアウトオブオーダ実行が実装されてよい様々な態様を示す。リタイアメントユニット854及び物理レジスタファイルユニット858は、実行クラスタ860と結合される。実行クラスタ860は、1つ又は複数の実行ユニット862のセット及び1つ又は複数のメモリアクセスユニット864のセットを含む。実行ユニット862は、様々なオペレーション(例えば、シフト、加算、減算、乗算)を様々な型のデータ(例えば、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行してよい。いくつかの実施形態は、複数の具体的な機能又は複数の機能の複数のセット専用の、多数の実行ユニットを含んでよいが、複数の他の実施形態は、1つだけの実行ユニット、又は、その全てで全ての機能を実行し得る複数の実行ユニットを含んでよい。スケジューラユニット856、物理レジスタファイルユニット858及び実行クラスタ860は、場合によっては複数として示されるが、その理由は、複数の特定の実施形態は、特定の複数の型のデータ/オペレーションに対して、複数の別個のパイプラインを形成するからである(例えば、各々がこれら自身のスケジューラユニット、物理レジスタファイルユニット及び/又は実行クラスタを有する、スカラ整数パイプライン、スカラ浮動小数点/パック型整数/パック型浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、及び/又はメモリアクセスパイプラインであり、別個のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット864を有する複数の特定の実施形態が実装される)。複数の別個のパイプラインが使用される場合、これらのパイプラインのうちの1つ又は複数は、アウトオブオーダ発行/実行であり、残りはインオーダであってよいことも理解されたい。
複数のメモリアクセスユニット864のセットは、メモリユニット870と結合される。メモリユニット870は、二次(L2)キャッシュユニット876と結合されるデータキャッシュユニット874と結合される、データTLBユニット872を含む。例示的な一実施形態において、メモリアクセスユニット864は、ロードユニット、ストアアドレスユニット、及びストアデータユニットを含んでよく、それらの各々は、メモリユニット870内のデータTLBユニット872に結合される。命令キャッシュユニット834は、メモリユニット870内の二次(L2)キャッシュユニット876とさらに結合される。L2キャッシュユニット876は、1つ又は複数の他のレベルのキャッシュと結合され、最終的にメインメモリと結合される。
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプライン800を実装してよい。1)命令フェッチ838が、フェッチ及び長さ復号ステージ802及び804を実行する、2)復号ユニット840が、復号ステージ806を実行する、3)リネーミング/アロケータユニット852が、配分ステージ808及びリネーミングステージ810を実行する、4)スケジューラユニット856が、スケジューリングステージ812を実行する、5)物理レジスタファイルユニット858及びメモリユニット870が、レジスタ読み出し/メモリ読み出しステージ814を実行し、実行クラスタ860が、実行ステージ816を実行する、6)メモリユニット870及び物理レジスタファイルユニット858が、ライトバック/メモリ書き込みステージ818を実行する、7)複数の様々なユニットが、例外処理ステージ822に関わってよく、8)リタイアメントユニット854及び物理レジスタファイルユニット858が、コミットステージ824を実行する。
コア890は、本明細書において説明される命令を含む1つ又は複数の命令セット(例えば、(複数のより新たなバージョンを伴う、いくつかの拡張が追加された)x86命令セット、カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セット、カリフォルニア州サニーベールのARMホールディングスの(NEONのような任意のさらなる拡張を有する)ARM命令セット)をサポートしてよい。一実施形態において、コア890は、パック型データ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、これによって、多くのマルチメディアアプリケーションによって用いられる複数のオペレーションが、パック型データを用いて実行されることが可能となる。
コアは、マルチスレッディング(複数のオペレーション又は複数のスレッドの2つ又はそれより多くの並列セットを実行すること)をサポートしてよく、時分割マルチスレッディング、同時マルチスレッディング(単一の物理コアが複数のスレッドの各々に対して論理的コアを提供することにより、物理コアが同時マルチスレッディングを実行すること)又はこれらの組み合わせ(例えば、時分割フェッチ及び復号化、その後、インテル(登録商標)ハイパースレッディングテクノロジーなどでの同時マルチスレッディング)を含む様々な態様で、マルチスレッディングを実行してよいことを理解されたい。
アウトオブオーダ実行との関連で、レジスタリネーミングを説明するが、レジスタリネーミングは、インオーダアーキテクチャで用いられてよいことを理解されたい。プロセッサの示された実施形態は、別個の命令ならびにデータキャッシュユニット834/874及び共有L2キャッシュユニット876をさらに含むが、複数の代替的な実施形態は、命令及びデータの両方のための、例えば、一次(L1)内部キャッシュのような単一の内部キャッシュ、又は複数のレベルの内部キャッシュを有してよい。いくつかの実施形態において、システムは内部キャッシュと、コア及び/又はプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。代わりに、全てのキャッシュはコア及び/又はプロセッサの外部にあってよい。
[具体的な例示的インオーダコアアーキテクチャ]
図9A−Bは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示し、ここで、コアは、チップ内のいくつかの論理ブロック(同じ型及び/又は異なる型の他の複数のコアを含む)の中の1つであってよい。複数の論理ブロックは、用途に応じて、高帯域幅の相互接続ネットワーク(例えば、リングネットワーク)を通して、いくつかの固定機能ロジック、メモリI/Oインタフェース、及び他の必要なI/Oロジックと通信を行う。
図9Aは、本開示の複数の実施形態に係る単一のプロセッサコアを、そのオンダイ相互接続ネットワーク902への接続及びその二次(L2)キャッシュのローカルサブセット904と共に示すブロック図である。一実施形態において、命令復号ユニット900は、パック型データ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ906が、スカラ及びベクトルユニットに入るキャッシュメモリへの低レイテンシアクセスを可能にする。一実施形態において、(設計の単純化のために)スカラユニット908及びベクトルユニット910は、別個のレジスタセット(それぞれ、複数のスカラレジスタ912及び複数のベクトルレジスタ914)を用い、これらの間で転送されるデータは、一次(L1)キャッシュ906のメモリに書き込まれてから再読み出しされるが、本開示の複数の代替的な実施形態は、異なるアプローチ(例えば、単一のレジスタセットを用いる、又は書き込み及び再読み出しを行うことなく、2つのレジスタファイル間におけるデータ転送を可能とする通信パスを含む)を用いてよい。
L2キャッシュのローカルサブセット904は、プロセッサコア毎に1つの別個のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュのそれ自身のローカルサブセット904へのダイレクトアクセスパスを有する。プロセッサコアによって読み出されたデータは、そのL2キャッシュサブセット904内にストアされ、他のプロセッサコアによるこれら自身のローカルL2キャッシュサブセットへのアクセスと並列に、迅速なアクセスが可能である。プロセッサコアによって書き込まれたデータは、必要に応じて、それ自身のL2キャッシュサブセット904にストアされ、他のサブセットからフラッシュされる。リングネットワークは、共有データに対するコヒーレンシを保証する。リングネットワークは、双方向性であり、複数のプロセッサコア、L2キャッシュ、及び他の論理ブロックのようなエージェントが、チップ内で互いに通信を行うことを可能にする。各リングデータパスは、各方向につき1012ビット幅である。
図9Bは、本開示の複数の実施形態に係る図9Aにおけるプロセッサコアの一部の拡大図である。図9Bは、L1キャッシュ906の一部であるL1データキャッシュ906A、ならびにベクトルユニット910及び複数のベクトルレジスタ914に関するさらなる詳細を含む。具体的には、ベクトルユニット910は、整数、単精度浮動小数、及び倍精度浮動小数命令のうちの1つ又は複数を実行する、16幅ベクトル処理ユニット(VPU)(16幅ALU928参照)である。VPUは、スウィズルユニット920によるレジスタ入力のスウィズル、数値変換ユニット922A−Bによる数値変換、及び複製ユニット924によるメモリ入力に対する複製をサポートする。書き込みマスクレジスタ926は、結果的な複数のベクトル書き込みの叙述を可能とする。
図10は、本開示の複数の実施形態に係るプロセッサ1000のブロック図であり、当該プロセッサは、1つより多くのコアを有してよく、集積メモリコントローラを有してよく、集中画像表示を有してよい。図10における複数の実線のボックスは、単一のコア1002A、システムエージェント1010、1つ又は複数のバスコントローラユニット1016のセットを備えるプロセッサ1000を示し、任意に追加された複数の破線のボックスは、複数のコア1002A−N、システムエージェントユニット1010内の1つ又は複数の集積メモリコントローラユニット1014のセット、及び特定用途向けロジック1008を備える代替的なプロセッサ1000を示す。
従って、プロセッサ1000の複数の異なる実装は、1)(1つ又は複数のコアを含み得る)集中画像表示及び/又は科学用途(スループット)ロジックである特定用途向けロジック1008、及び1つ又は複数の汎用コア(例えば、複数の汎用インオーダコア、複数の汎用アウトオブオーダコア、これら2つの組み合わせ)である複数のコア1002A−Nを有するCPU、2)主にグラフィック及び/又は科学用途(スループット)向けの多数の特定用途向けコアである複数のコア1002A−Nを有するコプロセッサ、及び3)多数の汎用インオーダコアである複数のコア1002A−Nを有するコプロセッサを含んでよい。従って、プロセッサ1000は、汎用プロセッサ、コプロセッサ、又は例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPU(汎用画像処理ユニット)、ハイスループット多集積コア(MIC)コプロセッサ(30又はそれより多くのコアを含む)、組み込みプロセッサ等のような特定用途向けプロセッサであってよい。プロセッサは、1つ又は複数のチップ上に実装されてよい。プロセッサ1000は、例えば、BiCMOS、CMOS、又はNMOSのような、多数の処理技術のいずれかを用いた1つ又は複数の基板の一部であってよく、及び/又はその上に実装されてよい。
メモリ階層は、複数のコア内における1つ又は複数のレベルのキャッシュ、1つ又は複数の共有キャッシュユニット1006のセット、及び複数の集積メモリコントローラユニット1014のセットに結合される外部メモリ(不図示)を含む。共有キャッシュユニット1006のセットは、二次(L2)、三次(L3)、四次(L4)、又は他のレベルのキャッシュ等のような1つ又は複数の中レベルキャッシュ、ラストレベルキャッシュ(LLC)、及び/又はこれらの組み合わせを含んでよい。一実施形態において、リングベースの相互接続ユニット1012が、集中画像表示ロジック1008、複数の共有キャッシュユニット1006のセット、及びシステムエージェントユニット1010/集積メモリコントローラユニット1014を相互接続するが、複数の代替的な実施形態は、このようなユニットを相互接続する任意の数の周知技術を用いてよい。一実施形態において、1つ又は複数のキャッシュユニット1006とコア1002−A−Nとの間において、コヒーレンシが維持される。
いくつかの実施形態において、コア1002A−Nのうちの1つ又は複数は、マルチスレッディングが可能である。システムエージェント1010は、コア1002A−Nを調整及び動作させるこれらのコンポーネントを含む。システムエージェントユニット1010は、例えば、電力制御ユニット(PCU)及びディスプレイユニットを含んでよい。PCUは、コア1002A−N及び集中画像表示ロジック1008の電力状態の調整に必要なロジック及び複数のコンポーネントであってよく、又はこれらを含んでよい。ディスプレイユニットは、1つ又は複数の外部接続されたディスプレイを駆動するためのものである。
コア1002A−Nは、アーキテクチャ命令セットに関してホモジニアス又はヘテロジニアスであってよく、すなわち、コア1002A−Nのうち2つ又はそれより多くは、同じ命令セットを実行可能であってよく、他のものは、当該命令セット又は異なる命令セットのサブセットのみを実行可能であってよい。
[例示的なコンピュータアーキテクチャ]
図11−14は、複数の例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルド型PC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、及び様々な他の電子デバイスのための当技術分野において公知の他の複数のシステム設計及び構成も、適している。概して、本明細書において開示されるように、プロセッサ及び/又は他の実行ロジックを組み込むことが可能な多種多様なシステム又は電子デバイスが、概して適している。
ここで図11を参照すると、本開示の一実施形態に係るシステム1100のブロック図が示される。システム1100は、コントローラハブ1120に結合される1つ又は複数のプロセッサ1110、1115を含んでよい。一実施形態において、コントローラハブ1120は、グラフィックメモリコントローラハブ(GMCH)1190及び入力/出力ハブ(IOH)1150(複数の別個のチップ上にあってよい)を含む。GMCH1190は、メモリ1140及びコプロセッサ1145が結合される複数のメモリ及びグラフィックコントローラを含む。IOH1150は、複数の入力/出力(I/O)デバイス1160をGMCH1190に結合する。代わりに、メモリ及びグラフィックコントローラの一方又は両方は、(本明細書において説明されるように)プロセッサ内で集積され、メモリ1140及びコプロセッサ1145は、プロセッサ1110と、IOH1150を有する単一のチップ内のコントローラハブ1120とに直接結合される。メモリ1140は、スイッチ制御モジュール1140A(及び/又はデータハザード解消モジュール)を含んでよく、これにより、例えば、実行された場合に、プロセッサに本開示の任意の方法を実行させるコードをストアする。
複数の追加のプロセッサ1115が任意の性質であることが、図11において、破線で示される。各プロセッサ1110、1115は、本明細書において説明される処理コアのうちの1つ又は複数を含んでよく、プロセッサ1000の何らかのバージョンであってよい。
メモリ1140は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)又はこれら2つの組み合わせであってよい。少なくとも1つの実施形態に対して、コントローラハブ1120は、フロントサイドバス(FSB)のようなマルチドロップバス、クイックパスインタコネクト(QPI)のようなポイントツーポイントインタフェース、又は同様の接続部1195を介して、プロセッサ1110、1115と通信を行う。
一実施形態において、コプロセッサ1145は、例えば、ハイスループットMICプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPU、組み込みプロセッサ等のような特定用途向けプロセッサである。一実施形態において、コントローラハブ1120は、集中画像表示アクセラレータを含んでよい。
物理リソース1110、1115の間には、アーキテクチャ上、マイクロアーキテクチャ上、熱的、電力消費等の特性を含む利点の様々な基準に関して、様々な相違が存在し得る。
一実施形態において、プロセッサ1110は、一般的な型の複数のデータ処理オペレーションを制御する複数の命令を実行する。複数のコプロセッサ命令が、複数の命令内に組み込まれてよい。プロセッサ1110は、これらのコプロセッサ命令を、取り付けられたコプロセッサ1145によって実行されるべき型のものであると認識する。従って、プロセッサ1110は、コプロセッサバス又は他のインタコネクト上において、これらのコプロセッサ命令(又は複数のコプロセッサ命令を表す制御信号)を、コプロセッサ1145に発行する。コプロセッサ1145は、複数のコプロセッサ命令を受け付け、受信されたコプロセッサ命令を実行する。
ここで図12を参照すると、本開示の実施形態に係る第1のより具体的な例示的システム1200のブロック図が示される。図12に示されるように、マルチプロセッサシステム1200は、ポイントツーポイントインタコネクトシステムであり、ポイントツーポイントインタコネクト1250を介して結合される第1のプロセッサ1270及び第2のプロセッサ1280を含む。プロセッサ1270及び1280の各々は、プロセッサ1000の何らかのバージョンであってよい。本開示の一実施形態において、プロセッサ1270及び1280は、それぞれ、プロセッサ1110及び1115であり、コプロセッサ1238は、コプロセッサ1145である。他の実施形態において、プロセッサ1270及び1280は、それぞれ、プロセッサ1110及びコプロセッサ1145である。
プロセッサ1270及び1280は、それぞれ、集積メモリコントローラ(IMC)ユニット1272及び1282を含むものとして示される。プロセッサ1270は、そのバスコントローラユニットの一部として、ポイントツーポイント(P−P)インタフェース1276及び1278をさらに含み、同様に、第2のプロセッサ1280は、P−Pインタフェース1286及び1288を含む。プロセッサ1270、1280は、P−Pインタフェース回路1278、1288を用いて、ポイントツーポイント(P−P)インタフェース1250を介して情報を交換してよい。図12に示されるように、IMC1272及び1282は、プロセッサをそれぞれのメモリ、すなわち、メモリ1232及びメモリ1234に結合し、これらは、それぞれのプロセッサにローカルに取り付けされたメインメモリの一部であってよい。
プロセッサ1270、1280は、各々、ポイントツーポイントインタフェース回路1276、1294、1286、1298を用いて、個々のP−Pインタフェース1252、1254を介してチップセット1290と情報を交換してよい。チップセット1290は、任意に、高性能インタフェース1239を介して、コプロセッサ1238と情報を交換してよい。一実施形態において、コプロセッサ1238は、例えば、ハイスループットMICプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPU、組み込みプロセッサ等のような特定用途向けプロセッサである。
共有キャッシュ(不図示)は、いずれかのプロセッサに含まれてよく、又は両方のプロセッサの外部にあってよく、さらに、P−P相互接続を介して複数のプロセッサと接続されてよく、これにより、プロセッサが低電力モードに置かれた場合に、いずれか又は両方のプロセッサのローカルキャッシュ情報が、共有キャッシュ内にストアされ得る。
チップセット1290は、インタフェース1296を介して第1のバス1216に結合されてよい。一実施形態において、第1のバス1216は、ペリフェラルコンポーネントインタコネクト(PCI)バス、もしくはPCIエクスプレスバス又は他の第3世代I/O相互接続バスのようなバスであってよいが、本開示の範囲はこれらのバスに限定されるものではない。
図12に示されるように、様々なI/Oデバイス1214は、第1のバス1216を第2のバス1220に結合するバスブリッジ1218と共に、第1のバス1216に結合されてよい。一実施形態において、コプロセッサ、ハイスループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックアクセラレータ又はデジタル信号処理(DSP)ユニットのような)、フィールドプログラマブルゲートアレイ、又は任意の他のプロセッサのような1つ又は複数の追加のプロセッサ1215が、第1のバス1216に結合される。一実施形態において、第2のバス1220は、ローピンカウント(LPC)バスであってよい。一実施形態において、例えば、キーボード及び/又はマウス1222、通信デバイス1227、ならびに命令/コード及びデータ1230を含んでよいディスクドライブ又は他の大容量ストレージデバイスのようなストレージユニット1228を含む様々なデバイスが、第2のバス1220に結合されてよい。さらに、オーディオI/O1224は、第2のバス1220に結合されてよい。なお、他の複数のアーキテクチャが、適用可能である。例えば、図12のポイントツーポイントアーキテクチャの代わりに、システムがマルチドロップバス又は他のこのようなアーキテクチャを実装してよい。
ここで図13を参照すると、本開示の実施形態に係る第2のより具体的な例示的システム1300のブロック図が示される。図12及び13において、複数の同様の要素は同様の参照符号を有し、図12の複数の特定の態様は、図13の他の複数の態様への妨げとならないよう、図13から省略されている。
図13は、プロセッサ1270、1280が集積メモリ及びI/O制御ロジック(「CL」)1272及び1282をそれぞれ含んでよいことを示す。従って、CL1272、1282は、複数の集積メモリコントローラユニットを含み、I/O制御ロジックを含む。図13は、メモリ1232、1234がCL1272、1282に結合されることのみならず、I/Oデバイス1314もが制御ロジック1272、1282に結合されることをも示す。レガシI/Oデバイス1315は、チップセット1290に結合される。
ここで図14を参照すると、本開示の実施形態に係るSoC1400のブロック図が示される。図10において、複数の同様の要素は、同様の参照符号を有する。また、複数の破線のボックスは、より高度な複数のSoCにおいて、任意の機能である。図14において、相互接続ユニット1402は、1つ又は複数のコア202A−Nのセット、及び共有キャッシュユニット1006を含むアプリケーションプロセッサ1410、システムエージェントユニット1010、バスコントローラユニット1016、集積メモリコントローラユニット1014、集中画像表示ロジック、画像プロセッサ、オーディオプロセッサ、及びビデオプロセッサを含み得る1つ又は複数のコプロセッサ1420のセット、スタティックランダムアクセスメモリ(SRAM)ユニット1430、ダイレクトメモリアクセス(DMA)ユニット1432、及び1つ又は複数の外部ディスプレイと結合するためのディスプレイユニット1440と結合されている。一実施形態において、コプロセッサ1420は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、GPGPU、ハイスループットMICプロセッサ、組み込みプロセッサ等のような特定用途向けプロセッサを含む。
本明細書に開示される(例えば、複数のメカニズムの)実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はこのような複数の実装アプローチの組み合わせで実装されてよい。本開示の複数の実施形態は、少なくとも1つのプロセッサ、(揮発性及び不揮発性メモリ及び/又は複数のストレージエレメントを含む)ストレージシステム、少なくとも1つの入力デバイス及び少なくとも1つの出力デバイスを備える複数のプログラマブルシステム上で実行する複数のコンピュータプログラム又はプログラムコードとして実装されてよい。
図12に示されるコード1230のようなプログラムコードは、本明細書で説明される複数の機能を実行し、出力情報を生成する複数の入力命令に適用されてよい。出力情報は、公知の態様で、1つ又は複数の出力デバイスに適用されてよい。この用途の複数の目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、又はマイクロプロセッサのようなプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信を行うべく、高水準の手順型又はオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、所望の場合には、アセンブリ又は機械言語で実装されてもよい。実際には、本明細書で説明される複数のメカニズムの範囲は、いずれの特定のプログラミング言語にも限定されるものではない。いずれの場合であっても、言語は、コンパイラ型又はインタプリタ型言語であってよい。
少なくとも1つの実施形態の1つ又は複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体にストアされた代表的な複数の命令によって実装されてよく、これらは、機械によって読み出された場合に、機械にロジックを製造させることにより、本明細書で説明される複数の技術を実行する。「IPコア」として公知であるこのような複数の表現は、有形の機械可読媒体にストアされてよく、様々な顧客、又は実際にロジック又はプロセッサを作成する複数の製造機械にロードする複数の製造設備に供給されてよい。
このような機械可読記憶媒体は、ハードディスク、フロッピ(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD−ROM)、書き換え可能コンパクトディスク(CD−RW)、及び光磁気ディスクを含む任意の他のタイプのディスクのような記憶媒体、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)のようなランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、及び相変化メモリ(PCM)のような半導体デバイス、磁気もしくは光カード、又は複数の電子的命令のストアに適した任意の他のタイプの媒体を含む、機械又はデバイスにより製造又は形成される、非一時的で有形の複数の構成の物品を含んでよいが、これらに限定されるものではない。
従って、本開示の複数の実施形態は、複数の命令を含み、又は本明細書で説明される複数の構造、複数の回路、複数の装置、複数のプロセッサ及び/又はシステムの複数の機能を定義するハードウェア記述言語(HDL)のような設計データを含む、非一時的な有形の機械可読媒体をさらに含む。このような複数の実施形態は、プログラム製品と称されることもある。
[エミュレート(バイナリ変換、コードモーフィング等を含む)]
いくつかの場合において、命令コンバータは、ソース命令セットからターゲット命令セットに命令を変換するために用いられてよい。例えば、命令コンバータは、命令を、コアにより処理されるべき他の1つ又は複数の他の命令にトランスレート(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて)、モーフィング、エミュレート、又は他の方法で変換してよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせで実装されてよい。命令コンバータは、プロセッサ上にあってよく、プロセッサ外にあってよく、又は部分的にプロセッサ上かつ部分的にプロセッサ外にあってよい。
図15は、本開示の複数の実施形態に係るソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令に変換するソフトウェア命令コンバータの使用を対比したブロック図である。示された実施形態において、命令コンバータはソフトウェア命令コンバータであるが、代わりに、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、又はこれらの様々な組み合わせで実装されてよい。図15は、少なくとも1つのx86命令セットコアを有するプロセッサ1516によってネイティブで実行可能なx86バイナリコード1506を生成するために、高水準言語1502のプログラムが、x86コンパイラ1504を用いてコンパイルされてよいことを示す。少なくとも1つのx86命令セットコアを有するプロセッサ1516は、少なくとも1つのx86命令セットコアを有するインテル社製プロセッサと実質的に同じ結果を実現すべく、(1)インテルx86命令セットコアの命令セットの大部分、もしくは(2)少なくとも1つのx86命令セットコアを有するインテル社製プロセッサ上で動作することをターゲットとしたアプリケーション又は他のソフトウェアのオブジェクトコードバージョンを互換的に実行するか、又は他の方法で処理することによって、少なくとも1つのx86命令セットコアを有するインテル社製プロセッサと実質的に同じ機能を実行可能な任意のプロセッサを表す。x86コンパイラ1504は、さらなるリンク処理を用いて、又は用いることなく、少なくとも1つのx86命令セットコアを有するプロセッサ1516上で実行可能なx86バイナリコード1506(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、図15は、少なくとも1つのx86命令セットコアを有さないプロセッサ1514(例えば、カリフォルニア州のサニーベールにあるMIPSテクノロジーズのMIPS命令セットを実行する及び/又はカリフォルニア州のサニーベールのARMホールディングスのARM命令セットを実行する複数のコアを有するプロセッサ)によってネイティブで実行可能な代替的な命令セットバイナリコード1510を生成すべく、代替的な命令セットコンパイラ1508を用いてコンパイル可能な高水準言語1502のプログラムを示す。命令コンバータ1512は、x86バイナリコード1506を、x86命令セットコアを有さないプロセッサ1514によってネイティブで実行可能なコードに変換するために用いられる。この変換されたコードは、代替的な命令セットバイナリコード1510と同じである可能性が低い。なぜなら、この変換が可能な命令コンバータは、製造が難しいからである。しかしながら、変換されたコードは、一般的なオペレーションを実現し、代替的な命令セットからの複数の命令で構成される。従って、命令コンバータ1512は、エミュレート、シミュレーション又は任意の他の処理を通じて、x86命令セットプロセッサ又はコアを有さないプロセッサ又は他の電子デバイスがx86バイナリコード1506を実行することを可能にする、ソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせを表す。

Claims (25)

  1. 並列な複数の実行ユニットと、
    前記複数の実行ユニットの複数の入力を第1のバッファ及び複数のメモリバンクの複数の出力に接続し、並列な前記複数のメモリバンク及び複数の第2のバッファの複数の入力を前記第1のバッファ、前記複数のメモリバンク、及び前記複数の実行ユニットの複数の出力に接続するスイッチと、
    前記複数の第2のバッファの複数の出力に接続される複数の入力を有するオフロードエンジンと、
    を備える、ハードウェアプロセッサ。
  2. 前記オフロードエンジンの出力は、前記第1のバッファの入力に接続する、請求項1に記載のハードウェアプロセッサ。
  3. 前記第1のバッファの出力からの読み出しと前記複数の第2のバッファの複数の入力への書き込みとを同時に実行するデータハザード解消ロジックをさらに備える、請求項1に記載のハードウェアプロセッサ。
  4. 前記データハザード解消ロジックは、ストールを挿入しない、請求項3に記載のハードウェアプロセッサ。
  5. 前記複数の実行ユニットは、第1のクロック速度で実行し、前記オフロードエンジンは、第2のより低速のクロック速度で実行する、請求項1に記載のハードウェアプロセッサ。
  6. 前記複数の実行ユニットの各々は、シフトレジスタを含む、請求項1に記載のハードウェアプロセッサ。
  7. 前記第1のバッファ及び前記複数の第2のバッファは、ファーストインファーストアウト(FIFO)バッファである、請求項1に記載のハードウェアプロセッサ。
  8. 前記複数のメモリバンクは、4つ又はそれより多くのメモリバンクであり、各メモリバンクは、複数の他のメモリバンクの複数の入力ポート及び複数の出力ポートとは別個の入力ポート及び出力ポートを含む、請求項1から7のいずれか1項に記載のハードウェアプロセッサ。
  9. 制御信号に基づいて、スイッチにより、ハードウェアプロセッサの並列な複数の実行ユニットの複数の入力を第1のバッファ及び複数のメモリバンクの複数の出力に接続し、並列な前記複数のメモリバンク及び複数の第2のバッファの複数の入力を前記第1のバッファ、前記複数のメモリバンク、及び前記複数の実行ユニットの複数の出力に接続する段階と、
    前記複数の第2のバッファの複数の出力からオフロードエンジンの複数の入力にデータを提供する段階と、
    を備える、方法。
  10. 前記オフロードエンジンの出力から前記第1のバッファの入力にデータを提供する段階をさらに備える、請求項9に記載の方法。
  11. 前記第1のバッファの出力からの読み出しと前記複数の第2のバッファの複数の入力への書き込みとを同時に実行する段階をさらに備える、請求項9に記載の方法。
  12. ストールを挿入しない段階をさらに備える、請求項11に記載の方法。
  13. 前記複数の実行ユニットによって第1のクロック速度で実行し、前記オフロードエンジンによって第2のより低速のクロック速度で実行する段階をさらに備える、請求項9に記載の方法。
  14. 前記複数の実行ユニットの各々は、シフトレジスタを含む、請求項9に記載の方法。
  15. 前記第1のバッファ及び前記複数の第2のバッファは、ファーストインファーストアウト(FIFO)バッファである、請求項9に記載の方法。
  16. 前記複数のメモリバンクは、4つ又はそれより多くのメモリバンクであり、各メモリバンクは、複数の他のメモリバンクの複数の入力ポート及び複数の出力ポートとは別個の入力ポート及び出力ポートを含む、請求項9から15のいずれか1項に記載の方法。
  17. ハードウェアプロセッサであって、
    命令を復号するハードウェアデコーダと、
    前記命令を実行することにより、
    制御信号に基づいて、前記ハードウェアプロセッサの並列な複数の実行ユニットの複数の入力を第1のバッファ及び複数のメモリバンクの複数の出力に接続し、並列な前記複数のメモリバンク及び複数の第2のバッファの複数の入力を前記第1のバッファ、前記複数のメモリバンク、及び前記複数の実行ユニットの複数の出力に接続し、
    前記複数の第2のバッファの複数の出力からオフロードエンジンの複数の入力にデータを提供する
    ハードウェア実行ユニットと、
    を備える、ハードウェアプロセッサ。
  18. 前記オフロードエンジンの出力は、前記第1のバッファの入力に接続する、請求項17に記載のハードウェアプロセッサ。
  19. 前記ハードウェア実行ユニットは、前記命令を実行し、これにより、前記第1のバッファの出力からの読み出しと、前記複数の第2のバッファの複数の入力への書き込みとを同時に実行させる、請求項17に記載のハードウェアプロセッサ。
  20. 前記ハードウェア実行ユニットは、ストールを挿入することなく前記命令を実行する、請求項19に記載のハードウェアプロセッサ。
  21. 前記複数の実行ユニットは、第1のクロック速度で実行し、前記オフロードエンジンは、第2のより低速のクロック速度で実行する、請求項17に記載のハードウェアプロセッサ。
  22. 前記複数の実行ユニットの各々は、シフトレジスタを含む、請求項17に記載のハードウェアプロセッサ。
  23. 前記第1のバッファ及び前記複数の第2のバッファは、ファーストインファーストアウト(FIFO)バッファである、請求項17に記載のハードウェアプロセッサ。
  24. 前記複数のメモリバンクは、4つ又はそれより多くのメモリバンクであり、各メモリバンクは、複数の他のメモリバンクの複数の入力ポート及び複数の出力ポートとは別個の入力ポート及び出力ポートを含む、請求項17から23のいずれか1項に記載のハードウェアプロセッサ。
  25. 並列な複数の実行ユニットと、
    前記複数の実行ユニットの複数の入力を第1のバッファ及び複数のメモリバンクの複数の出力に接続し、並列な前記複数のメモリバンク及び複数の第2のバッファの複数の入力を前記第1のバッファ、前記複数のメモリバンク、及び前記複数の実行ユニットの複数の出力に接続する手段と、
    前記複数の第2のバッファの複数の出力に接続される複数の入力を有するオフロードエンジンと、
    を備える、ハードウェア装置。
JP2016093449A 2015-06-26 2016-05-06 密結合ヘテロジニアスコンピューティングのためのハードウェアプロセッサ及び方法 Expired - Fee Related JP6456867B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/752,047 US9870339B2 (en) 2015-06-26 2015-06-26 Hardware processors and methods for tightly-coupled heterogeneous computing
US14/752,047 2015-06-26

Publications (2)

Publication Number Publication Date
JP2017016637A true JP2017016637A (ja) 2017-01-19
JP6456867B2 JP6456867B2 (ja) 2019-01-23

Family

ID=56092738

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016093449A Expired - Fee Related JP6456867B2 (ja) 2015-06-26 2016-05-06 密結合ヘテロジニアスコンピューティングのためのハードウェアプロセッサ及び方法

Country Status (8)

Country Link
US (2) US9870339B2 (ja)
EP (1) EP3109766A3 (ja)
JP (1) JP6456867B2 (ja)
KR (1) KR101854520B1 (ja)
CN (1) CN106293640B (ja)
BR (1) BR102016012180A2 (ja)
DE (1) DE102016006400A1 (ja)
TW (2) TW202107289A (ja)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9870339B2 (en) * 2015-06-26 2018-01-16 Intel Corporation Hardware processors and methods for tightly-coupled heterogeneous computing
US10152243B2 (en) * 2016-09-15 2018-12-11 Qualcomm Incorporated Managing data flow in heterogeneous computing
US11099879B2 (en) 2016-12-16 2021-08-24 Intel Corporation Executing an application with multiple processors
EP4089531B1 (en) 2016-12-31 2024-06-26 Intel Corporation Systems, methods, and apparatuses for heterogeneous computing
US10387037B2 (en) 2016-12-31 2019-08-20 Intel Corporation Microarchitecture enabling enhanced parallelism for sparse linear algebra operations having write-to-read dependencies
US10261786B2 (en) * 2017-03-09 2019-04-16 Google Llc Vector processing unit
US11592817B2 (en) * 2017-04-28 2023-02-28 Intel Corporation Storage management for machine learning at autonomous machines
KR102343652B1 (ko) * 2017-05-25 2021-12-24 삼성전자주식회사 벡터 프로세서의 서열 정렬 방법
US10778407B2 (en) 2018-03-25 2020-09-15 Nuvoton Technology Corporation Multiplier protected against power analysis attacks
CN111971663A (zh) * 2018-04-16 2020-11-20 埃米尔·巴登霍斯特 处理器和操作处理器的方法
DE102018005620A1 (de) 2018-07-17 2020-01-23 WAGO Verwaltungsgesellschaft mit beschränkter Haftung Schaltung zur gepufferten Übertragung von Daten
US11048515B2 (en) * 2018-12-28 2021-06-29 SiFive, Inc. Way predictor and enable logic for instruction tightly-coupled memory and instruction cache
TWI805731B (zh) * 2019-04-09 2023-06-21 韓商愛思開海力士有限公司 多線道資料處理電路及系統
US10733016B1 (en) * 2019-04-26 2020-08-04 Google Llc Optimizing hardware FIFO instructions
US11301213B2 (en) * 2019-06-24 2022-04-12 Intel Corporation Reduced latency multiplier circuitry for very large numbers
US11182208B2 (en) 2019-06-29 2021-11-23 Intel Corporation Core-to-core start “offload” instruction(s)
US10929129B2 (en) 2019-06-29 2021-02-23 Intel Corporation Apparatus and method for modifying addresses, data, or program code associated with offloaded instructions
US11372711B2 (en) 2019-06-29 2022-06-28 Intel Corporation Apparatus and method for fault handling of an offload transaction
US11321144B2 (en) 2019-06-29 2022-05-03 Intel Corporation Method and apparatus for efficiently managing offload work between processing units
US10983796B2 (en) 2019-06-29 2021-04-20 Intel Corporation Core-to-core end “offload” instruction(s)
US11016766B2 (en) * 2019-06-29 2021-05-25 Intel Corporation Apparatus and method for compiler hints for inter-core offload
US11030000B2 (en) 2019-06-29 2021-06-08 Intel Corporation Core advertisement of availability
CN114091384A (zh) * 2021-11-29 2022-02-25 上海阵量智能科技有限公司 数据处理电路及人工智能芯片、数据处理方法和装置

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5497467A (en) * 1990-08-08 1996-03-05 Hitachi, Ltd. Vector data buffer and method of reading data items from a banked storage without changing the data sequence thereof
US6012139A (en) * 1996-01-31 2000-01-04 Hitachi Micro Systems, Inc. Microprocessor including floating point unit with 16-bit fixed length instruction set
JP2002149399A (ja) * 2000-10-09 2002-05-24 Siroyan Ltd プロセッサ用命令セット
JP2005538439A (ja) * 2002-09-04 2005-12-15 エイアールエム リミテッド データ処理装置におけるパイプライン間の同期
JP2008165780A (ja) * 1995-10-09 2008-07-17 Renesas Technology Corp マイクロプロセッサ
JP2009026135A (ja) * 2007-07-20 2009-02-05 Nec Electronics Corp マルチプロセッサ装置
JP2010541088A (ja) * 2007-10-06 2010-12-24 アクシス セミコンダクター インコーポレイテッド リアルタイム信号処理のための方法及び装置

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01226066A (ja) * 1988-03-04 1989-09-08 Hitachi Ltd ディジタル信号処理プロセッサ
US5522052A (en) 1991-07-04 1996-05-28 Matsushita Electric Industrial Co. Ltd. Pipeline processor for processing instructions having a data dependence relationship
US5623698A (en) * 1993-04-30 1997-04-22 Cray Research, Inc. Memory interconnect network having separate routing networks for inputs and outputs using switches with FIFO queues and message steering bits
US5740404A (en) * 1993-09-27 1998-04-14 Hitachi America Limited Digital signal processor with on-chip select decoder and wait state generator
JP2637931B2 (ja) * 1994-12-01 1997-08-06 インターナショナル・ビジネス・マシーンズ・コーポレイション テクスチャ・マッピングを行うコンピュータ・システム
US6606704B1 (en) * 1999-08-31 2003-08-12 Intel Corporation Parallel multithreaded processor with plural microengines executing multiple threads each microengine having loadable microcode
CN1227601C (zh) * 2000-03-27 2005-11-16 英芬能技术公司 将用户定义的执行单元加至采用可配置长指令字(cliw)的处理器的方法和设备
JP2002108837A (ja) * 2000-09-29 2002-04-12 Nec Corp 計算機システムとその計算制御方法
US20050125590A1 (en) * 2003-12-09 2005-06-09 Li Stephen H. PCI express switch
US7773620B2 (en) * 2003-12-24 2010-08-10 Intel Corporation Method, system, and program for overrun identification
US8102863B1 (en) * 2006-06-27 2012-01-24 Qurio Holdings, Inc. High-speed WAN to wireless LAN gateway
US7725603B1 (en) * 2008-04-30 2010-05-25 Network Appliance, Inc. Automatic network cluster path management
US7978721B2 (en) * 2008-07-02 2011-07-12 Micron Technology Inc. Multi-serial interface stacked-die memory architecture
US8243737B2 (en) * 2009-03-23 2012-08-14 Lsi Corporation High speed packet FIFO input buffers for switch fabric with speedup and retransmit
US8495455B1 (en) * 2011-01-06 2013-07-23 Mindspeed Technologies, Inc. Systems and methods for parallel dual-mode turbo decoders
CN102508643A (zh) * 2011-11-16 2012-06-20 刘大可 一种多核并行数字信号处理器及并行指令集的运行方法
US9372695B2 (en) 2013-06-28 2016-06-21 Globalfoundries Inc. Optimization of instruction groups across group boundaries
US9870339B2 (en) * 2015-06-26 2018-01-16 Intel Corporation Hardware processors and methods for tightly-coupled heterogeneous computing

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5497467A (en) * 1990-08-08 1996-03-05 Hitachi, Ltd. Vector data buffer and method of reading data items from a banked storage without changing the data sequence thereof
JP2008165780A (ja) * 1995-10-09 2008-07-17 Renesas Technology Corp マイクロプロセッサ
US6012139A (en) * 1996-01-31 2000-01-04 Hitachi Micro Systems, Inc. Microprocessor including floating point unit with 16-bit fixed length instruction set
JP2002149399A (ja) * 2000-10-09 2002-05-24 Siroyan Ltd プロセッサ用命令セット
JP2005538439A (ja) * 2002-09-04 2005-12-15 エイアールエム リミテッド データ処理装置におけるパイプライン間の同期
JP2009026135A (ja) * 2007-07-20 2009-02-05 Nec Electronics Corp マルチプロセッサ装置
JP2010541088A (ja) * 2007-10-06 2010-12-24 アクシス セミコンダクター インコーポレイテッド リアルタイム信号処理のための方法及び装置

Also Published As

Publication number Publication date
EP3109766A2 (en) 2016-12-28
US20180225255A1 (en) 2018-08-09
TW202107289A (zh) 2021-02-16
BR102016012180A2 (pt) 2017-01-24
CN106293640B (zh) 2018-12-04
KR20170001576A (ko) 2017-01-04
US9870339B2 (en) 2018-01-16
TWI706255B (zh) 2020-10-01
EP3109766A3 (en) 2017-01-04
KR101854520B1 (ko) 2018-05-03
CN106293640A (zh) 2017-01-04
US20160378715A1 (en) 2016-12-29
DE102016006400A1 (de) 2016-12-29
TW201717037A (zh) 2017-05-16
JP6456867B2 (ja) 2019-01-23
US10372668B2 (en) 2019-08-06

Similar Documents

Publication Publication Date Title
JP6456867B2 (ja) 密結合ヘテロジニアスコンピューティングのためのハードウェアプロセッサ及び方法
JP6699845B2 (ja) 方法及びプロセッサ
JP6238497B2 (ja) プロセッサ、方法、及びシステム
JP6371855B2 (ja) プロセッサ、方法、システム、プログラム、及び非一時的機械可読記憶媒体
KR102463858B1 (ko) 벡터 인덱스 로드 및 저장을 위한 방법 및 장치
KR102508075B1 (ko) 인덱스 및 즉치로 벡터 치환을 수행하기 위한 방법 및 장치
KR102462174B1 (ko) 벡터 비트 셔플을 수행하기 위한 방법 및 장치
JP6635438B2 (ja) ベクトルビット反転およびクロスを実行するための方法および装置
CN106030514B (zh) 用于执行采用传播的被屏蔽源元素存储指令的处理器及其方法
JP6741006B2 (ja) マスクレジスタとベクトルレジスタとの間で可変に拡張するための方法および装置
JP2017538213A (ja) アウトオブオーダーハードウェアソフトウェア協調設計プロセッサにおいてスタック同期命令を用いてプレディケート値のスタックを実装し維持する方法および装置
KR102460975B1 (ko) 벡터 비트 뒤집기를 수행하기 위한 방법 및 장치
JP6807073B2 (ja) 高速ベクトルによる動的なメモリ競合検出
CN112148251A (zh) 跳过无意义的矩阵运算的系统和方法
JP6835436B2 (ja) マスクをマスク値のベクトルに拡張するための方法および装置
JP6738579B2 (ja) 命令フローを最適化するチェックを実行するための装置および方法
CN107003848B (zh) 用于融合乘法-乘法指令的装置和方法
KR20170099860A (ko) 벡터 포화된 더블워드/쿼드워드 덧셈을 수행하기 위한 명령어 및 로직
CN108241509B (zh) 用于高效地处理存储器排序缓冲器的分配的方法和装置
KR102528073B1 (ko) 벡터 비트 수집을 수행하기 위한 방법 및 장치
JP2017538215A (ja) 逆分離演算を実行するための命令及びロジック
TWI697836B (zh) 處理包括高功率及標準指令之指令集的方法與處理器
CN107003841B (zh) 用于融合加法-加法指令的装置和方法
CN112988230A (zh) 用于将大约为一的浮点值相乘的指令的装置、方法和系统
JP2018500665A (ja) マスク値を圧縮するための方法および装置

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170725

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170801

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171101

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180327

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20181219

R150 Certificate of patent or registration of utility model

Ref document number: 6456867

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

LAPS Cancellation because of no payment of annual fees