JP6466388B2 - 方法及び装置 - Google Patents

方法及び装置 Download PDF

Info

Publication number
JP6466388B2
JP6466388B2 JP2016235364A JP2016235364A JP6466388B2 JP 6466388 B2 JP6466388 B2 JP 6466388B2 JP 2016235364 A JP2016235364 A JP 2016235364A JP 2016235364 A JP2016235364 A JP 2016235364A JP 6466388 B2 JP6466388 B2 JP 6466388B2
Authority
JP
Japan
Prior art keywords
data
source
register
bits
write mask
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
JP2016235364A
Other languages
English (en)
Other versions
JP2017062845A (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 JP2017062845A publication Critical patent/JP2017062845A/ja
Application granted granted Critical
Publication of JP6466388B2 publication Critical patent/JP6466388B2/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/3001Arithmetic 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/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/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/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/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/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register

Landscapes

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

Description

本発明の分野は、概して、コンピュータプロセッサアーキテクチャに関し、より詳細には、実行時に特定の結果を引き起こす複数の命令に関する。
命令セット、または命令セットアーキテクチャ(ISA)は、プログラミングに関するコンピュータアーキテクチャの一部であり、複数のネイティブデータ型、複数の命令、レジスタアーキテクチャ、複数のアドレッシングモード、メモリアーキテクチャ、割込み及び例外処理、及び外部入力及び出力(I/O)を含み得る。命令という用語は、概して、本明細書では、プロセッサのデコーダが複数のマクロ複数の命令を復号した結果である複数のマイクロ命令またはmicro−opと対照的に、実行のためにプロセッサに付与された複数の命令であるマクロ命令をいうことが理解されよう。
命令セットアーキテクチャは、ISAを実装するプロセッサの内部設計であるマイクロアーキテクチャとは区別される。異なるマイクロアーキテクチャを有する複数のプロセッサは、共通の命令セットを共有することができる。例えば、複数のインテル社製ペンティアム(登録商標)4プロセッサ、インテル社製コアプロセッサ、及びアドバンストマイクロデバイセズ社(カリフォルニア州サニーベール)製プロセッサは、x86命令セットのほぼ同一のバージョン(より新しいバージョンにはいくつかの拡張が追加されている)を実装するが、異なる内部設計を有する。例えば、そのISAの同じレジスタアーキテクチャを異なるマイクロアーキテクチャに複数の異なる態様で実装することができる。こういったマイクロアーキテクチャは、複数の専用物理的レジスタ及び1つまたは複数の動的に割り付けられる物理的レジスタを含む周知技術を用いており、動的に割り付けられる物理的レジスタは、レジスタリネーミング機構などを用いる(例えば、米国特許第5,446,912号に記載のレジスタエイリアステーブル(RAT)、リオーダバッファ(ROB)及びリタイアメントレジスタファイルの使用、米国特許第5,207,132号に記載のレジスタの複数マップ及びプールの使用)。他に指定されない限り、レジスタアーキテクチャ、レジスタファイル及びレジスタという用語は、ソフトウェア/プログラマに可視であり、複数の命令がレジスタを指定する態様をいう。特異性が求められる場合、形容詞的論理的、アーキテクチャ的、またはソフトウェア可視性が、レジスタアーキテクチャにおいて複数のレジスタ/ファイルを示すために使用されるが、複数の異なる形容詞が、所与のマイクロアーキテクチャ(例えば、物理的レジスタ、リオーダバッファ、リタイアメントレジスタ、レジスタプール)において複数のレジスタを指定するために使用される。
命令セットは、1つまたは複数の命令フォーマットを含む。所与の命令フォーマットは、とりわけ、実行されるオペレーション及びそのオペレーションの実行対象であるオペランドを指定するための複数の様々なフィールド(ビット数、複数のビットの位置)を定義する。所与の命令は、所与の命令フォーマットを用いて表現され、オペレーション及び複数のオペランドを指定する。命令ストリームは、複数の命令の具体的なシーケンスであり、ここで、シーケンス内の各命令は、命令フォーマット内の命令の発生である。
科学、金融、自動ベクトル化された汎用、RMS(認識、マイニング及び合成)/ビジュアル及びマルチメディアアプリケーション(例えば、2D/3Dグラフィクス、画像処理、ビデオ圧縮/解凍、音声認識アルゴリズム及びオーディオ操作)は、多くの場合、同じオペレーションが多数のデータ項目に対して実行されることを必要とする(「データ並列化」と称される)。単一命令複数データ(SIMD)は、複数のデータ項目に対して、プロセッサに同じオペレーションを実行させる命令のタイプを指す。SIMD技術は、レジスタ内の複数のビットを、その各々が別々の値を表す固定サイズの多数のデータ要素に論理的に分割することができるプロセッサに、特に適している。例えば、64ビットレジスタの複数のビットは、その各々が別々の16ビット値を表す4つの別々の16ビットデータ要素に対してオペレーションされるソースオペランドとして、指定されてもよい。別の例として、256ビットレジスタの複数のビットは、4つの別々の64ビットのパックデータ要素(クワッドワード(Q)サイズのデータ要素)、8つの別々の32ビットのパックデータ要素(ダブルワード(D)サイズのデータ要素)、16の別々の16ビットのパックデータ要素(ワード(W)サイズのデータ要素)、または32の別々の8ビットのデータ要素(バイト(B)サイズのデータ要素)としてオペレーションされるソースオペランドとして、指定されてもよい。このタイプのデータは、パックデータ型またはベクトルデータ型と称され、このデータ型のオペランドは、パックデータオペランドまたはベクトルオペランドと称される。言い換えると、パックデータ項目またはベクトルは、複数のパックデータ要素のシーケンスを指し、パックデータオペランドまたはベクトルオペランドは、SIMD命令のソースまたはデスティネーションオペランドである(パックデータ命令またはベクトル命令としても知られる)。
例として、SIMD命令の1つの型は、同じサイズで同じ数の複数のデータ要素を有し、かつ、同じデータ要素の順序であるデスティネーションベクトルオペランド(結果ベクトルオペランドとも称される)を生成するために、2つのソースベクトルオペランドに対して縦方向に実行されるべき単一のベクトルオペレーションを指定する。デスティネーションベクトルオペランドのデータ要素は、デスティネーションまたは結果データ要素と称され、ソースベクトルオペランドのデータ要素は、ソースデータ要素と称される。これらのソースベクトルオペランドは、同じサイズであり、かつ、同じ幅の複数のデータ要素を含むので、これらは、同じ数のデータ要素を含む。2つのソースベクトルオペランド内の同じビット位置の複数のソースデータ要素は、複数のデータ要素のペアを形成する(対応するデータ要素とも称され、つまり各ソースオペランドのデータ要素位置0のデータ要素が対応し、各ソースオペランドのデータ要素位置1のデータ要素が対応するなど)。当該SIMD命令により指定されるオペレーションは、結果データ要素のマッチング数を生成するためにソースデータ要素のこれらのペアの各々に対して別々に実行されるため、ソースデータ要素の各ペアは、対応する結果データ要素を有する。オペレーションは、縦方向であるので、かつ、結果ベクトルオペランドは、同じサイズであり、同じ数のデータ要素を有し、結果データ要素がソースベクトルオペランドと同じデータ要素の順序に格納されているので、結果データ要素は、ソースベクトルオペランド内のソースデータ要素のそれらの対応するペアとして、結果ベクトルオペランドの同じビット位置にある。この例示的なタイプのSIMD命令に加えて、様々な他のタイプのSIMD命令がある(例えば、1つだけを有するまたは2つより多くのソースベクトルオペランドを有する、横方向にオペレーションする、異なるサイズ結果ベクトルオペランドを生成する、異なるサイズのデータ要素を有する、及び/または異なるデータ要素の順序を有する)。デスティネーションベクトルオペランド(またはデスティネーションオペランド)という用語は、命令によって指定されたオペレーションを実行した直接的な結果として定義されると理解すべきである。この命令は、そのデスティネーションオペランドをある位置(それが当該命令によって指定されたレジスタまたはメモリアドレスであるかを問わず)に格納することを含むことにより、別の命令によって(その別の命令によりその同じ位置を指定することによって)、ソースオペランドとしてアクセス可能となる。
x86、MMX(商標)、ストリーミングSIMD拡張命令(SSE)、SSE2、SSE3、SSE4.1及びSSE4.2を含む命令セットを有する複数のインテル(登録商標)コア(商標)プロセッサに採用されているようなSIMD技術により、アプリケーション性能が大幅に改善された(コア及びMMXは、カリフォルニア州サンタクララのインテル・コーポレーションの登録商標または商標である)。アドバンストベクトル拡張(AVX)(AVX1及びAVX2)と称され、VEX符号化スキームを用いるSIMD拡張命令のさらなるセットが、リリース及び/または公開されている(例えば、インテル(登録商標)64及びIA−32アーキテクチャソフトウェア開発者マニュアル(2011年10月)を参照、及び、インテル(登録商標)アドバンストベクトル拡張プログラミングリファレンス(2011年6月)を参照のこと)。
本発明は例として示されるものであって、複数の添付図面の複数の図に限定されるものではなく、ここで、複数の同様の参照符号は、複数の類似要素を示す。
VPTESTCONFのオペレーションの例示的な図を示す。 は、プロセッサ内でVPTESTCONF命令を実行する実施形態を示す。 VPTESTCONF命令を処理するための方法の実施形態を示す。 ブロードキャストの例示的なプロセスを示す。 VPBROADCASTMオペレーションの例示的な図を示す。 プロセッサにおけるVPBROADCASTM命令実行の実施形態を示す。 VPBROADCASTM命令を処理するための方法の実施形態を示す。 本発明の一実施形態に係る1つのアクティブビットベクトルライトマスク要素の数、ベクトルサイズ及びデータ要素サイズとの間の相関関係を示す。 本発明の一実施形態に係るレジスタアーキテクチャ900のブロック図である。 本発明の複数の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。 本発明の複数の実施形態に係るプロセッサ内に含まれるべきインオーダアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。 コアがチップ内のいくつかのロジックブロック(同じタイプ及び/または複数の異なるタイプの他のコアを含む)の1つとなる、より具体的な例示的インオーダコアアーキテクチャのブロック図を示す。 コアがチップ内のいくつかのロジックブロック(同じタイプ及び/または複数の異なるタイプの他のコアを含む)の1つとなる、より具体的な例示的インオーダコアアーキテクチャのブロック図を示す。 本発明の複数の実施形態に係る、1つより多くのコアを有してよく、集積メモリコントローラを有してよく、集積グラフィクスを有してもよいプロセッサ1200のブロック図である。 例示的なコンピュータアーキテクチャのブロック図である。 例示的なコンピュータアーキテクチャのブロック図である。 例示的なコンピュータアーキテクチャのブロック図である。 例示的なコンピュータアーキテクチャのブロック図である。 本発明の複数の実施形態に係る、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比させるブロック図である。 複数のビットベクトルのセットを比較した複数の出力結果を示す。
以下の説明において、多数の具体的な詳細が示される。しかしながら、本発明の実施形態は、これらの具体的な詳細事項を伴うことなく実施可能であると理解される。複数の他の例では、この説明の理解を妨げないように、周知の回路、構造、及び技術は、詳細に示されていない。
本明細書における「一実施形態」、「実施形態」、「例示的な実施形態」等の複数の記載は、記載された実施形態が、特定の機能、構造または特性を含む場合があるが、各実施形態が必ずしもその特定の機能、構造または特性を含むものではないことを示す。さらに、そのような複数の用語は、必ずしも同じ実施形態を意味するものではない。さらに、特定の機能、構造、または特性が実施形態に関連して記載される場合、これらは、明記されているか否かに関わらず、複数の他の実施形態に関連するそのような機能、構造、または特性に関わる当業者の知識の範囲内であるものと思われる。
[概要]
以下の説明において、命令セットアーキテクチャ内のこの特定の命令の複数のオペレーションを記載する前に、説明が必要となり得るいくつかの項目がある。1つのそのような項目は、「ライトマスクレジスタ」と称され、これは、概して、条件付きで要素ごとの計算オペレーションを制御するオペランドを叙述するために使用される(以下、マスクレジスタという用語も使用可能であり、以下で説明される「K」レジスタのようなライトマスクレジスタを意味する)。以下で使用されるように、ライトマスクレジスタは、ライトマスクレジスタの各アクティブビットがSIMD処理中のベクトルレジスタのパックデータ要素のオペレーション/更新を管理する複数のビット(16、32、64など)を格納する。典型的には、プロセッサコアに利用可能な1つまたは複数のライトマスクレジスタがある。
命令セットアーキテクチャは、ベクトルオペレーションを指定する及びこれらのベクトルレジスタから複数のソースレジスタ及び/または複数のデスティネーションレジスタを選択するためのフィールドを有する、少なくともいくつかのSIMD命令を含む(例示的なSIMD命令は1つまたは複数のベクトルレジスタの複数のコンテンツに対して実行されるベクトルオペレーション、及び複数のベクトルレジスタの1つに格納されるべき当該ベクトルオペレーションの結果を指定してもよい)。本発明の異なる実施形態は、複数の異なるサイズのベクトルレジスタを有してもよく、より多い/より少ない/異なるサイズの複数のデータ要素をサポートしてもよい。
SIMD命令(例えば、バイト、ワード、ダブルワード、クワッドワード)で指定された複数のマルチビットデータ要素のサイズは、ベクトルレジスタ内で複数の「データ要素位置」のビット位置を判断し、ベクトルオペランドのサイズは、データ要素の数を判断する。パックデータ要素は、特定の位置に格納されたデータを指す。言い換えると、デスティネーションオペランドにおける複数のデータ要素のサイズ及びデスティネーションオペランドのサイズ(デスティネーションオペランド内のビットの合計数)に応じて(または言い換えると、デスティネーションオペランドのサイズ及びデスティネーションオペランド内のデータ要素の数に応じて)、結果ベクトルオペランド内の複数のマルチビットデータ要素位置の複数のビット位置は、変化する(例えば、結果ベクトルオペランドのためのデスティネーションがベクトルレジスタである場合(この説明において、複数のベクトルレジスタ及び複数のパックデータ要素レジスタは、交換可能に使用される)、次にデスティネーションベクトルレジスタ内の複数のマルチビットデータ要素位置のビット位置が、変化する)。例えば、複数のマルチビットデータ要素の複数のビット位置は、32ビットの複数のデータ要素に対してオペレーションするベクトルオペレーション(データ要素位置0はビット位置31:0を占有し、データ要素位置1はビット位置63:32を占有するなど)と、64ビットの複数のデータ要素に対してオペレーションするベクトルオペレーション(データ要素位置0はビット位置63:0を占有し、データ要素位置1はビット位置127:64を占有するなど)との間で異なる。
さらに、図8に示すように、本発明の一実施形態に係る1つのアクティブビットベクトルライトマスク要素の数及びベクトルサイズ及びデータ要素サイズとの間には、相関がある。128ビット、256ビット、512ビットのベクトルサイズが示されるが、他の幅も可能である。8ビットバイト(B)、16ビットワード(W)、32ビットダブルワード(D)または単精度浮動小数点、及び64ビットクワッドワード(Q)または倍精度浮動小数点のデータ要素サイズが考慮されるが、他の幅もまた可能である。示されるように、ベクトルサイズが128ビットである際に、ベクトルデータ要素サイズが8ビットである際は16ビットがマスキングのために使用されてもよく、ベクトルデータ要素サイズが16ビットである際は8ビットがマスキングのために使用されてもよく、ベクトルデータ要素サイズが32ビットである際は4ビットがマスキングのために使用されてもよく、及びベクトルデータ要素サイズが64ビットの際は2ビットがマスキングのために使用されてもよい。ベクトルサイズが256ビットである際に、パックデータ要素の幅が8ビットの際は32ビットがマスキングのために使用されてもよく、ベクトルデータ要素サイズが16ビットである際は16ビットがマスキングのために使用されてもよく、ベクトルデータ要素サイズが32ビットである際は8ビットがマスキングのために使用されてもよく、及びベクトルデータ要素サイズが64ビットである際は4ビットがマスキングのために使用されてもよい。ベクトルサイズが512ビットである際に、ベクトルデータ要素サイズが8ビットである際は64ビットがマスキングのために使用されてもよく、ベクトルデータ要素サイズが16ビットである際は32ビットがマスキングのために使用されてもよく、ベクトルデータ要素サイズが32ビットである際は16ビットがマスキングのために使用されてもよく、及びベクトルデータ要素サイズが64ビットである際は8ビットがマスキングのために使用されてもよい。
ベクトルサイズ及びデータ要素サイズの組み合わせに応じて、全64ビットまたは64ビットのサブセットのみのいずれかが、ライトマスクとして使用されてもよい。概して、単一の要素ごとのマスキング制御ビットが使用される際には、マスキングに使用されるベクトルライトマスクレジスタ内のビット数(アクティブビット)は、ビットでのベクトルデータ要素サイズで除算されたビットでのベクトルサイズに等しい。
上記のように、ライトマスクレジスタは、ベクトルレジスタ(またはメモリ位置)内の要素に対応するマスクビットを含み、オペレーションが実行されるべき要素を記録する。この理由のため、ベクトルレジスタに関しては、これらのマスクビットに対して類似した挙動を複製する共通のオペレーションを有し、概して、複数のライトマスクレジスタ内で、これらのマスクビットを調整可能にすることが望ましい。
我々が効率的にベクトル化したい重要なアルゴリズムのパターンは、「スパース更新」である。ここで、我々は、間接的にアドレスされるメモリ位置に対して、読み出し、修正、書き込みオペレーションを実行する(例えば、A[B[i]]をロードし、これに何らかを加算し、値をA[B[i]]に戻して格納する。)これのベクトル化は、我々のISA及びハードウェアが直接サポートする集約、修正、分散オペレーションの実行を伴い、16個のiの連続値の場合、16個のA[B[i]]を集約し、SIMD計算を実行し、複数の新たな値を戻して分散する。しかしながら、このベクトル化は、単一の集約/分散命令が各メモリ位置にただ一度アクセスすることを想定している。例えば、B[i]の2つの連続値が同じである場合、第2のものに対する読み出し、修正、書き込みは、第1のものに依存し、これらをSIMD態様で同時に実行することは、依存性に反し、誤った解答を出すという結果をもたらす。
ベクトルレジスタ内の各要素の等価性を、「より初期の」(LSBにより近い)複数の要素と比較することが可能である。命令は、これらの比較結果を、複数のビットベクトルのセットとして出力する。これは、図18に示される。複製の情報があるとして、コードはベクトル化されることができ、複数の固有のインデックスで複数の要素のサブセットを判断し、これらをSIMD態様で計算した後、複数の残りの要素に対してリトライするべくループバックすることにより、メモリを介してさらに依存性を高める。疑似コードでは、これは、以下の通りである。
for (i=0; i<N; i+=SIMD_WIDTH){
indices = vload (&B[i]);
comparisons = vpconflict (indices);
elements_left_mask = all_ones;
do {
do_these = Compute_Mask_of_Unique_Remaining_Indices (comparisons, elements_left_mask);
Gather_Compute_Scatter (indices, do_these);
elements_left_mask ^= do_these;
} while (elements_left_mask != 0);
}
Compute_Mask_of_Unique_Remaining_Indices関数は、本開示の1つの焦点である。このオペレーションは、以下の処理を実行する必要がある。
(1)elements_left_maskを、インデックスと同じサイズとなるようにゼロ拡張した後、「comparisons」の各要素で結果に論理的ANDを実行する。これにより、前のdo−whileループの複数のイタレーションで既に算出されたあらゆる要素に対するコンフリクトが破棄される。これを現在行うために、我々は、マスクを汎用レジスタに移動させた後、これをベクトルレジスタにブロードキャストする必要がある。
(2)ゼロへの等価性について、(1)の結果の各要素をテストする。要素がゼロの場合、これはコンフリクトがなく、我々は、当該要素に対応する出力マスクレジスタ内にビットを設定する。
(3)elements_left_maskで、(2)の結果に論理的ANDを実行する。これにより、既に処理されたあらゆる要素が破棄される。これは、最大で5つの命令が必要な場合がある。
上述された機能の全てを実行する単一命令(vptestconf k1,k2,zmm1)が、以下に詳述される。この命令は、我々が本開示の初めに示した疑似コード内のCompute_Mask_of_Unique_Remaining_Indices関数全体を置換する。これにより、疑似コードは、以下のように変化する。
for (i=0; i<N; i+=SIMD_WIDTH) {
indices = vload (&B[i]);
comparisons = vpconflict (indices);
elements_left_mask = all_ones;
do {
do_these = vptestconf (elements_left_mask, comparisons);
Gather_Compute_Scatter (indices, do_these);
elements_left_mask ^= do_these;
} while (elements_left_mask != 0);
}
この命令は、(互いにコンフリクトすることなく)並列に進行し得る複数のイタレーションの連続する複数のベクトルに対応する複数のマスクを計算するために、用いられてもよい。言い換えると、第1のグループは、全ての要素が1に設定された前のイタレーション(リードツーライト)とコンフリクトしないマスクに対応し、これらは、並列に進行することができる。第2のイタレーションでは、第1のマスクなどによってカバーされなかった複数のイタレーションに対応する複数の要素を考慮するだけでよい。
以下は、命令セットのベクトルパックテストコンフリクト(「VPTESTCONF」)命令と総称される命令の複数の実施形態、及び、いくつかの異なる態様で有益であるそのような命令を実行するために用いられ得る複数のシステム、アーキテクチャ及び命令フォーマット等の複数の実施形態である。VPTESTCONFの実行により、ソースマスクオペランドからのデータが、ソースパックデータオペランドの各データ要素で論理的「AND」された後、コンフリクトチェック結果を生成するために、複数の論理的「AND」オペレーションのいずれがコンフリクトを示すかが判断され、ソースマスクオペランドからのデータによるコンフリクトチェック結果で別の論理的「AND」が実行される。第2の「AND」の結果は、デスティネーションマスクオペランドのようなデスティネーション位置に格納される。いくつかの実施形態では、マスクオペランドは、詳しく上述されたように、ライトマスクレジスタである。いくつかの実施形態では、ソースマスクオペランドは、ソースパックデータオペランドの各データ要素と同じサイズになるようにゼロ拡張される。
図1は、VPTESTCONFのオペレーションの例示的な図を示す。示された例では、ソースライトマスクレジスタ101からのデータは、ANDロジック105(0)−(N)を用いて、パックデータソースの複数のデータ要素103(0)−(N)で論理的「ANDされ」る。ソースレジスタ101は、ライトマスクレジスタでなくてもよく、汎用レジスタまたはパックデータレジスタのような任意の他のストレージエンティティたり得る。しかしながら、理解を容易ならしめるために、本明細書ではソースライトマスクレジスタが用いられる。図は個別の複数のソースライトマスクレジスタを示すが、いくつかの実施形態では、このデータは、パックデータソース103と同じサイズの一時パックデータレジスタに格納される。このレジスタへの書き込みは、本明細書で詳しく後述されるブロードキャスト命令により実現され得る。いくつかの実施形態では、ソースライトマスクレジスタのデータは、データは、パックデータソース103の各パックデータ要素と同じサイズになるまでゼロ拡張される。このAND実行により、詳しく前述された例示的なシナリオで既に算出されたあらゆる要素に対するコンフリクトが破棄される。
各AND実行オペレーションの結果は、次に、ANDの結果がゼロか否かを判断するロジック107(0)−107(N)が適用される。結果がゼロの場合、当該要素と他の複数のデータ要素との間にコンフリクトはない。これらの判断の結果は、一時結果レジスタ109において、一時結果レジスタ109の対応する複数のビット位置に格納される。例えば、パックデータソース103のデータ要素0がソースライトマスクレジスタ101のデータでANDされた後、コンフリクト判断がロジック107(0)によってなされた場合、これが、データ要素位置0に対するコンフリクト結果である。このコンフリクト判断は、このため、一時結果レジスタ109のビット位置0に格納される。いくつかの実施形態では、「1」は、コンフリクトがなく、かつ、他で「0」が用いられている場合に、設定される。
一時結果レジスタ109の複数のコンテンツは、既に処理されたあらゆる要素を破棄するために、ソースライトマスクレジスタ101からのデータで、ロジック111を用いて論理的ANDされる。このAND実行の結果は、デスティネーションライトマスクレジスタ113に格納される。
[VPTESTCONFの例示的なフォーマット]
この命令の例示的なフォーマットは、「VPTESTCONF K1,K2,R2」であり、ここで、デスティネーションオペランドK1は、ライトマスクレジスタであり、K2は、ソースライトマスクレジスタであり、ソースオペランドR2は、ベクトル(パックデータ)レジスタ(128、256、512ビットレジスタ等のような)であり、VPTESTCONFは、命令のオペコードである。前述したように、命令は、複数のライトマスクレジスタだけではなく、他の複数のレジスタと共にさらに機能する。
[VPTESTCONFを実行する例示的な複数の方法]
図2は、プロセッサにおけるVPTESTCONF命令実行の実施形態を示す。ソースライトマスクレジスタオペランド、ソースベクトルレジスタオペランド、オペランド及びデスティネーションライトマスクレジスタを有するVPTESTCONF命令は、201でフェッチされる。
VPTESTCONF命令は、203で、復号ロジックにより復号される。命令のフォーマットに応じて、データ変換の有無、書き込み及び/または取得を行うレジスタ、アクセスするメモリアドレス等のような様々なデータが、このステージで解釈されてもよい。
205において、複数のソースオペランド値が取得/読み出される。例えば、ソースベクトルレジスタが、読み出される。複数のソースオペランドの一方または両方がメモリオペランドである場合、当該オペランドに関連付けられた複数のデータ要素が取得される。いくつかの実施形態では、メモリからの複数のデータ要素は、一時レジスタに格納される。このステージで、いくつかの実施形態では、必要に応じて、ソースライトマスクデータは、ソースベクトルレジスタ内のデータ要素と同じサイズになるようにゼロ拡張される。いくつかの実施形態では、(ゼロ拡張された)ソースライトマスクデータは、ソースベクトルレジスタと同じサイズの一時ベクトルレジスタにブロードキャストされる。
VPTESTCONF命令(または、複数のマイクロオペレーションなどのような命令を備える複数のオペレーション)は、207で、1つまたは複数の機能ユニットのような実行リソースによって実行されることにより、ソースマスクオペランドからのデータに、ソースパックデータオペランドの各データ要素で論理的「AND」を実行した後、コンフリクトチェック結果を生成するために、複数の論理的「AND」オペレーションのいずれがコンフリクトを示すかを判断し、ソースマスクオペランドからのデータで、コンフリクトチェック結果に論理的「ANDを実行」する。
第2の「AND」の結果は、209で、デスティネーションマスクオペランドのようなデスティネーション位置に格納される。207と209は別々に示されるが、いくつかの実施形態では、それらは命令の実行の一部として、一緒に実行される。
図3は、VPTESTCONF命令を処理するための方法の実施形態を示す。この実施形態では、オペレーション201−205の全てではないとしても、いくつかは以前に実行されているが、しかしながら、それらは以下に提示される詳細を不明瞭にしないために示されていないものと仮定される。例えば、フェッチ及び復号は示されておらず、またオペランド取得も示されていない。
301では、ソースライトマスクレジスタのデータは、パックデータソースの複数のパックデータ要素及び複数のデスティネーションオペランドと同じサイズに(必要な場合には)ゼロ拡張される。例えば、ソースライトマスクレジスタが8ビットで値がx01であり、パックデータソース及びデスティネーションの複数のデータ要素が16ビットである場合、ソースライトマスクレジスタのデータは、8ビット拡張され、x0001となる。このステージで、ブロードキャストがさらに行われてもよい。
図4は、このブロードキャストのための例示的なプロセスを示す。いくつかの実施形態では、ソースライトマスクレジスタの(ゼロ拡張された)データは、401で、汎用レジスタに移動される。ソースライトマスクレジスタの(ゼロ拡張された)データは、403で、ソースパックデータ要素レジスタと同じサイズの一時パックデータ要素(ベクトル)レジスタにブロードキャストされる。
303では、パックデータソースの各データ要素で、(ゼロ拡張された)ソースライトマスクレジスタの複数のコンテンツに、論理的ANDが実行される。ブロードキャストが実行された場合、303で、ソースパックデータ要素レジスタに対し、対応するデータ要素位置ごとに、一時パックデータ要素レジスタのANDを実行する。
305で、各ANDオペレーションの結果である値がゼロであるか否かが、判断される。ANDオペレーションの結果、ゼロである値の各々に対し、307で、一時ストレージ位置の対応するビット位置に、「1」が書き込まれる。ANDオペレーションの結果である値がゼロ以外の各々に対し、309で、「0」が、一時ストレージ位置の対応するビット位置に書き込まれる。
311で、一時ストレージ位置の複数の値は、ソースライトマスクレジスタの(ゼロ拡張された)データでANDを実行し、313で、当該AND実行の複数の結果は、デスティネーションライトマスクレジスタに格納される。
以下は、命令セットのベクトルパックテストコンフリクト(「VPBROADCASTM」)命令と総称される命令の複数の実施形態、及びいくつかの異なる態様で有益であるそのような命令を実行するために用いられ得る複数のシステム、アーキテクチャ及び命令フォーマット等の複数の実施形態である。VPBROADCASTMの実行により、サイズMのマスクレジスタは、サイズN(N>M)の複数の要素で、ベクトルレジスタにブロードキャストされる。例えば、VPBROADCASTMW2Dは、16ビットの複数のマスクを、ベクトルレジスタデスティネーションの全てのダブルワードパックデータ要素にブロードキャストする。バイトツーバイト(B2B)、バイトツーワード(B2W)、ワードツーワード(W2W)、ワードツークワッドワード(W2Q)、ダブルワードツーダブルワード(D2D)、ダブルワードツークワッドワード(D2W)及びクワッドワードツークワッドワード(Q2Q)等のような、この命令の多くの形式があってもよい。
図5は、VPBROADCASTMオペレーションの例示的な図を示す。示された例では、(ゼロ拡張された)ソースライトマスクレジスタ501からのデータは、パックデータ(ベクトル)レジスタデスティネーション503の複数のデータ要素位置にブロードキャストされる。
[VPBROADCASTMの例示的なフォーマット]
この命令の例示的なフォーマットは、「VPBROADCASTM{k2}R1,K1」であり、ここで、ソースオペランドK1は、ライトマスクレジスタであり、デスティネーションオペランドR2は、ベクトル(パックデータ)レジスタ(128、256、512ビットレジスタ等のような)であり、VPBROADCASTMは、命令のオペコードである。前述したように、命令は、複数のライトマスクレジスタだけではなく、他の複数のレジスタと共にさらに機能する。K2は、詳しく上述された態様で用いられ得る、選択的なライトマスクである。特に、このライトマスクの各ビット位置は、ブロードキャストの書き込みをブロックするために用いられてもよい。例えば、最下位ビット位置が0の場合、デスティネーションレジスタの最下位データ要素位置は、ソースライトマスクレジスタに書き込まれた(ゼロ拡張された)データを有さない。オペコードは、さらに、データ転送のタイプB2B、B2W等の表示を有してもよい。これは、行われるべきゼロ拡張の量を判断するために用いられてもよい。
[VPBROADCASTMを実行する例示的な複数の方法]
図6は、プロセッサでVPBROADCASTM命令を実行する実施形態を示す。ソースライトマスクレジスタオペランド及びデスティネーションベクトルレジスタを有するVPBROADCASTM命令は、601でフェッチされる。
VPBROADCASTM命令は、603で、復号ロジックにより復号される。命令のフォーマットに応じて、データ変換の有無、書き込み及び/または取得を行うレジスタ、アクセスするメモリアドレス等のような様々なデータが、このステージで解釈されてもよい。
605において、ソースオペランド値が取得/読み出される。例えば、ソースライトマスクレジスタが、読み出される。
VPBROADCASTM命令(または複数のマイクロオペレーションなどのような命令を備える複数のオペレーション)は、607で、ソースライトマスクオペランドのデータが、デスティネーションベクトルレジスタのデータ要素と同じサイズになるように、ソースライトマスクオペランドのデータを(必要な場合に)ゼロ拡張するために、1つまたは複数の機能ユニットのような実行リソースによって実行される。
ソースライトマスクレジスタの(ゼロ拡張された)データは、609で、デスティネーションベクトルレジスタの各データ要素位置にブロードキャスト(格納)される。607と609は別々に示されるが、いくつかの実施形態では、それらは命令の実行の一部として、一緒に実行される。
図7は、VPBROADCASTM命令を処理するための方法の実施形態を示す。この実施形態では、オペレーション601−605の全てではないとしても、いくつかは以前に実行されているが、しかしながら、それらは以下に提示する詳細を不明瞭にしないために、示されていないものと仮定される。例えば、フェッチ及び復号は示されておらず、またオペランド取得も示されていない。
701では、ソースライトマスクレジスタのデータは、パックデータデスティネーションの複数のパックデータ要素と同じサイズに(必要な場合には)ゼロ拡張される。例えば、ソースライトマスクレジスタが8ビットで値がx01であり、パックデータデスティネーションの複数のデータ要素が16ビットである場合、ソースライトマスクレジスタのデータは、8ビット拡張され、x0001となる。
ソースライトマスクの(ゼロ拡張された)データは、703で、デスティネーションレジスタの最下位データ要素位置に書き込まれる。
705で、これがデスティネーション位置の最上位データ要素位置であるかが判断される。イエスの場合、707で、ブロードキャストは終了する。いくつかの実施形態では、最下位データ要素位置に書き込んだ後、この段階は、スキップされる。
ノーの場合は、ライトマスクの(ゼロ拡張された)データが、709で、デスティネーションレジスタの次の最下位データ要素位置に書き込まれる。705で、これがデスティネーション位置の最上位データ要素位置であるかが判断される。
上述された図7についての説明は、連続的なプロセスとして示されるが、いくつかの実施形態では、デスティネーションレジスタの複数のデータ要素位置は、並列に書き込まれる。さらに、上述されたように、ライトマスクレジスタは、いくつかの実施形態では、複数のデータ要素位置への書き込みを阻止するためにさらに用いられてもよい。
[例示的な命令フォーマット]
本明細書に記載される命令の複数の実施形態は、異なる複数のフォーマットで具現されてもよい。さらに、例示的なシステム、アーキテクチャ、及びパイプラインが以下に詳述される。命令(複数の場合もある)の実施形態は、そのようなシステム、アーキテクチャ、及びパイプライン上で実行することができるが、詳述されるものに限定されるものではない。
[例示的なレジスタアーキテクチャ]
図9は、本発明の一実施形態に係るレジスタアーキテクチャ900のブロック図である。図示した実施形態には、512ビット幅の32本のベクトルレジスタ910が存在する。これらの複数のレジスタは、zmm0−zmm31として記載される。下位16本のzmmレジスタの下位256ビットは、複数のレジスタymm0−16の上にオーバーレイされている。下位16本のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、複数のレジスタxmm0−15の上にオーバーレイされている。
[複数の汎用レジスタ925]
示された実施形態では、複数のメモリオペランドにアドレスする既存の複数のx86アドレッシングモードと共に用いられる16本の64ビット汎用レジスタが存在する。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、及びR8−R15という名称によって参照される。
[MMXパック型整数フラットレジスタファイル950がエイリアスされるスカラ浮動小数点スタックレジスタファイル(x87スタック)945]
示された実施形態では、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(場合によっては、アプリケーションコアまたはアプリケーションプロセッサと称される)、上述されたコプロセッサ、及びさらなる機能性を含み得るシステムオンチップを含んでもよい。次に、複数の例示的なコアアーキテクチャが説明された後、複数の例示的なプロセッサ及びコンピュータアーキテクチャが説明される。
[例示的な複数のコアアーキテクチャ]
[インオーダ及びアウトオブオーダコアのブロック図]
図10Aは、本発明の複数の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図10Bは、本発明の複数の実施形態に係るプロセッサ内に含まれるべきインオーダアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。図10A−Bにおける複数の実線のボックスは、インオーダパイプライン及びインオーダコアを示し、選択的に追加された複数の破線のボックスは、レジスタリネーミング、アウトオブオーダ発行/実行パイプライン及びコアを示す。インオーダ態様がアウトオブオーダ態様のサブセットであるとして、アウトオブオーダ態様が説明される。
図10Aでは、プロセッサパイプライン1000が、フェッチステージ1002、長さ復号ステージ1004、復号ステージ1006、配分ステージ1008、リネームステージ1010、スケジュール(ディスパッチまたは発行としても知られる)ステージ1012、レジスタ読み出し/メモリ読み出しステージ1014、実行ステージ1016、ライトバック/メモリ書き込みステージ1018、例外処理ステージ1022、及びコミットステージ1024を含む。
図10Bは、実行エンジンユニット1050と結合されるフロントエンドユニット1030を含むプロセッサコア1090を示し、両方ともメモリユニット1070と結合されている。コア1090は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドあるいは代替的なコアタイプであってもよい。さらに他のオプションとして、コア1090は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用計算グラフィクス処理ユニット(GPGPU)コア、グラフィクスコアなどのような特定用途向けコアであってもよい。
フロントエンドユニット1030は、命令キャッシュユニット1034と結合される分岐予測ユニット1032を含み、命令キャッシュユニット1034は命令トランスレーションルックアサイドバッファ(TLB)1036と結合され、命令トランスレーションルックアサイドバッファ1036は命令フェッチユニット1038と結合され、命令フェッチユニット1038は復号ユニット1040と結合される。復号ユニット1040(またはデコーダ)は、複数の命令を復号し、1つまたは複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または、元の命令から復号され、もしくは別の方法でそれを反映し、もしくはそれから派生する他の制御信号を、出力として生成してもよい。復号ユニット1040は、複数の様々な異なるメカニズムを用いて実装され得る。複数の適切なメカニズムの例は、複数のルックアップテーブル、複数のハードウェア実装、複数のプログラマブルロジックアレイ(PLA)、複数のマイクロコードリードオンリメモリ(ROM)等を含むが、これらに限定されない。一実施形態では、コア1090は、複数の特定のマクロ命令に対するマイクロコードを(例えば、復号ユニット1040、そうでなければフロントエンドユニット1030内に)格納する、マイクロコードROMまたは他の媒体を含む。復号ユニット1040は、実行エンジンユニット1050内のリネーム/アロケータユニット1052と結合される。
実行エンジンユニット1050は、リタイアメントユニット1054及び1つまたは複数のスケジューラユニット1056のセットと結合されるリネーム/アロケータユニット1052を含む。スケジューラユニット1056は、複数のリザベーションステーション、中央命令ウィンドウ等を含む、任意の数の異なるスケジューラを表す。スケジューラユニット1056は、物理的レジスタファイルユニット1058に結合される。物理的レジスタファイルユニット1058の各々は、1つまたは複数の物理的レジスタファイルを表し、それらの異なるいくつかが、スカラ整数、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行される次の命令のアドレスである命令ポインタ)等のような、1つまたは複数の異なるデータ型を格納する。一実施形態では、物理的レジスタファイルユニット1058は、ベクトルレジスタユニット及びスカラレジスタユニットを備える。これらのレジスタユニットは、複数のアーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供し得る。物理的レジスタファイルユニット1058は、リタイアメントユニット1054によってオーバラップされていることにより、レジスタリネーミング及びアウトオブオーダ実行が実装され得る複数の様々な態様を示す例えば、リオーダバッファならびにリタイアメントレジスタファイルを用いる、フューチャファイル、履歴バッファ、及びリタイアメントレジスタファイルを用いる、レジスタマップ及び複数のレジスタのプールを用いる等)。リタイアメントユニット1054及び物理的レジスタファイルユニット1058は、実行クラスタ1060と結合される。実行クラスタ1060は、1つまたは複数の実行ユニット1062のセット及び1つまたは複数のメモリアクセスユニット1064のセットを含む。実行ユニット1062は、複数の様々なオペレーション(例えば、シフト、加算、減算、乗算)を、複数の様々な型のデータ(例えば、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行してもよい。いくつかの実施形態は、複数の具体的な機能または複数の機能の複数のセット専用の、多数の実行ユニットを含み得るが、他の実施形態は、1つだけの実行ユニット、または、その全てで全ての機能を実行し得る複数の実行ユニットを含み得る。スケジューラユニット1056、物理的レジスタファイルユニット1058及び実行クラスタ1060は、複数である場合もあるものとして示されるが、その理由は、複数の特定の実施形態は、特定の複数の型のデータ/オペレーションに対して、複数の別のパイプラインを生成するからである(例えば、各々が自己のスケジューラユニット、物理的レジスタファイルユニット及び/または実行クラスタを有する、スカラ整数パイプライン、スカラ浮動小数点/パック型整数/パック型浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、及び/またはメモリアクセスパイプラインであり、個別のメモリアクセスパイプラインの場合、パイプラインの実行クラスタのみがメモリアクセスユニット1064を有する複数の特定の実施形態が実装される)。複数の別のパイプラインが使用される場合、これらのパイプラインのうち1つまたは複数は、アウトオブオーダ発行/実行であり、残りはインオーダであり得ることを理解されたい。
複数のメモリアクセスユニット1064のセットは、メモリユニット1070と結合される。メモリユニット1070は、二次(L2)キャッシュユニット1076と結合されるデータキャッシュユニット1074と結合される、データTLBユニット1072を含む。例示的な一実施形態では、メモリアクセスユニット1064は、メモリユニット1070内のデータTLBユニット1072と各々結合される、ロードユニット、ストアアドレスユニット、及びストアデータユニットを含んでもよい。命令キャッシュユニット1034は、メモリユニット1070内の二次(L2)キャッシュユニット1076とさらに結合される。L2キャッシュユニット1076は、1つまたは複数の他のレベルのキャッシュと結合され、最終的にメインメモリと結合される。
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプライン1000を実装し得る。1)命令フェッチ1038が、フェッチ及び長さ復号ステージ1002及び1004を実行する、2)復号ユニット1040が、復号ステージ1006を実行する、3)リネーム/アロケータユニット1052が、配分ステージ1008及びリネームステージ1010を実行する、4)スケジューラユニット1056が、スケジュールステージ1012を実行する、5)物理的レジスタファイルユニット1058及びメモリユニット1070が、レジスタ読み出し/メモリ読み出しステージ1014を実行し、実行クラスタ1060が、実行ステージ1016を実行する、6)メモリユニット1070及び物理的レジスタファイルユニット1058が、ライトバック/メモリ書き込みステージ1018を実行する、7)複数の様々なユニットが、例外処理ステージ1022に関わり得る、ならびに8)リタイアメントユニット1054及び物理的レジスタファイルユニット1058が、コミットステージ1024を実行する。
コア1090は、本明細書に記載される命令を含む、1つまたは複数の命令セット(例えば、x86命令セット(より新しいバージョンに追加されたいくつかの拡張を有する)、カリフォルニア州サニーベールのMIPSテクノロジーズ(MIPS Technologies)のMIPS命令セット、カリフォルニア州サニーベールのARMホールディングス(ARM Holdings)のARM命令セット(NEONのような任意追加の拡張を有する))をサポートしてもよい。一実施形態では、コア1090はパックデータ命令セット拡張をサポートするためのロジック(例えば、前述のAVX1、AVX2、及び/または総称ベクトル向け命令フォーマットのいくつかの形(U=0及び/またはU=1))を含み、それによって多くのマルチメディアアプリケーションによって用いられる複数のオペレーションは、パックデータを用いて実行されることが可能となる。
コアは、マルチスレッディング(複数のオペレーションまたはスレッドの2つまたはそれより多くの並列なセットを実行すること)をサポートしてもよく、時分割マルチスレッディング、同時マルチスレッディング(ここで、単一の物理的コアは、物理的コアが同時マルチスレッディングを実行する複数のスレッドの各々に、論理コアを提供する)、またはこれらの組み合わせ(例えば、時分割フェッチ及び復号、その後、インテル(登録商標)ハイパースレッディングテクノロジーでのような同時マルチスレッディング)を含む複数の様々な態様で、これを実行してもよいことを理解されたい。
アウトオブオーダ実行との関連で、レジスタリネーミングを説明するが、レジスタリネーミングは、インオーダアーキテクチャで用いられ得ることを理解されたい。図示されたプロセッサの実施形態は、個別の命令及びデータキャッシュユニット1034/1074及び共有L2キャッシュユニット1076をさらに含むが、複数の代替的な実施形態は、命令及びデータの両方のための、例えば、一次(L1)内部キャッシュのような単一の内部キャッシュ、または複数のレベルの内部キャッシュを有してもよい。いくつかの実施形態では、システムは、内部キャッシュと、コア及び/またはプロセッサの外部にある外部キャッシュとの組み合わせを含み得る。代替的に、キャッシュの全てが、コア及び/またはプロセッサの外部にあり得る。
[具体的な、例示的インオーダコアアーキテクチャ]
図11A−Bは、コアが、チップ内のいくつかのロジックブロック(同じタイプ及び/または複数の異なるタイプの複数の他のコアを含む)の1つになるであろう、より具体的な例示的インオーダコアアーキテクチャのブロック図を示す。複数のロジックブロックは、アプリケーションに応じて、高帯域幅の相互接続ネットワーク(例えば、リングネットワーク)を介していくつかの固定機能ロジック、メモリI/Oインタフェース、及び他の必要なI/Oロジックと通信する。
図11Aは、本発明の複数の実施形態に係る、単一のプロセッサコアのブロック図であって、そのオンダイ相互接続ネットワーク1102への接続、及びその二次(L2)キャッシュのローカルサブセット1104を伴う。一実施形態では、命令デコーダ1100が、パックデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ1106が、スカラ及びベクトルユニットに入るキャッシュメモリへの低レイテンシアクセスを可能にする。一実施形態では(設計を単純にするために)、スカラユニット1108及びベクトルユニット1110が、個別のレジスタセット(それぞれ、スカラレジスタ1112及びベクトルレジスタ1114)を用い、それらの間で転送されたデータはメモリに書き込まれ、その後、一次(L1)キャッシュ1106からリードバックされるが、本発明の複数の代替的な実施形態は、異なるアプローチを用いてもよい(例えば、単一のレジスタセットを用いるか、またはデータを、ライトバックまたはリードバックすることなく、2つのレジスタファイルの間で転送することを可能にする通信経路を含む)。
L2キャッシュのローカルサブセット1104は、1つのプロセッサコアあたり1つずつ、個別のローカルサブセットに分割されたグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュのそれ自身のローカルサブセット1104へのダイレクトアクセス経路を有する。プロセッサコアによって読み出されたデータは、そのL2キャッシュサブセット1104内に格納され、他のプロセッサコアがそれら自身のローカルL2キャッシュサブセットにアクセスするのと並列に、迅速にアクセスされることができる。プロセッサコアによって書き込まれたデータは、必要に応じて、それ自身のL2キャッシュサブセット1104内に格納され、他のサブセットからフラッシュされる。リングネットワークは、共有データに対するコヒーレンシを保証する。リングネットワークは、双方向性であり、複数のプロセッサコア、L2キャッシュ、及び他のロジックブロックのような複数のエージェントが、チップ内で互いに通信することを可能にする。各リングデータパスは、1つの方向につき1012ビット幅である。
図11Bは、本発明の複数の実施形態に係る図11Aにおけるプロセッサコアの一部の拡大図である。図11Bは、L1キャッシュ1106の一部であるL1データキャッシュ1106A、ならびにベクトルユニット1110及び複数のベクトルレジスタ1114に関する更なる詳細を含む。具体的には、ベクトルユニット1110は、整数、単精度浮動小数、及び倍精度浮動小数命令のうちの1つまたは複数を実行する、16幅ベクトル処理ユニット(VPU)(16幅ALU 1128参照)である。VPUは、スウィズルユニット1120によるレジスタ入力のスウィズル、数値変換ユニット1122A−Bによる数値変換、及び複製ユニット1124によるメモリ入力に対する複製をサポートする。
[集積メモリコントローラ及びグラフィクスを有するプロセッサ]
図12は、本発明の複数の実施形態に係るプロセッサ1200のブロック図であり、これは、1つより多くのコアを有してよく、集積メモリコントローラを有してよく、集積グラフィクスを有してもよい。図12における複数の実線のボックスは、単一のコア1202A、システムエージェント1210、1つまたは複数のバスコントローラユニット1216のセットを備えるプロセッサ1200を示し、選択的に追加された複数の破線のボックスは、複数のコア1202A−N、システムエージェントユニット1210内の1つまたは複数の集積メモリコントローラユニット1214のセット、及び特定用途向けロジック1208を備える代替的なプロセッサ1200を示す。
したがって、プロセッサ1200の複数の異なる実装には、1)(1つまたは複数のコアを含み得る)集積グラフィクス及び/または科学用途(スループット)ロジックである特定用途向けロジック1208、及び1つまたは複数の汎用コア(例えば、複数の汎用インオーダコア、複数の汎用アウトオブオーダコア、これら2つの組み合わせ)である複数のコア1202A−Nを有するCPU、2)主にグラフィクス及び/または科学用途(スループット)を目的とする多数の特定用途向けコアである複数のコア1202A−Nを有するコプロセッサ、及び3)多数の汎用インオーダコアである複数のコア1202A−Nを有するコプロセッサが含まれ得る。それゆえ、プロセッサ1200は、汎用プロセッサ、コプロセッサ、または例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU(汎用グラフィクス処理ユニット)、ハイスループット多集積コア(MIC)コプロセッサ(30個またはそれより多くのコアを含む)、組み込みプロセッサなどのような特定用途向けプロセッサであってもよい。プロセッサは、1つまたは複数のチップ上で実装され得る。プロセッサ1200は、例えば、BiCMOS、CMOS、またはNMOSのような、多数の処理技術のいずれかを用いた1つまたは複数の基板の一部であってもよく、及び/またはその上に実装されてもよい。
メモリ階層は、複数のコア内の1つまたは複数のレベルのキャッシュ、複数の共有キャッシュユニット1206のセットまたはこれらの1つまたは複数、及び複数の集積メモリコントローラユニット1214のセットに結合された外部メモリ(図示せず)を含む。共有キャッシュユニット1206のセットは、二次(L2)、三次(L3)、四次(L4)、または他のレベルのキャッシュ等のような1つまたは複数の中レベルキャッシュ、ラストレベルキャッシュ(LLC)、及び/またはこれらの組み合わせを含んでもよい。一実施形態では、リングベースの相互接続ユニット1212が、集積グラフィクスロジック1208、複数の共有キャッシュユニット1206のセット、及びシステムエージェントユニット1210/集積メモリコントローラユニット1214を相互接続するが、複数の代替的な実施形態は、そのようなユニットを相互接続する任意の数の周知技術を用いてもよい。一実施形態では、1つまたは複数のキャッシュユニット1206とコア1202A−Nとの間において、コヒーレンシが維持される。
いくつかの実施形態では、複数のコア1202A−Nのうちの1つまたは複数は、マルチスレッディングが可能である。システムエージェント1210は、複数のコア1202A−Nを調整及びオペレーションするそれらの複数のコンポーネントを含む。システムエージェントユニット1210は、例えば、電力制御ユニット(PCU)及びディスプレイユニットを含んでもよい。PCUは、コア1202A−N及び集積グラフィクスロジック1208の電力状態の調整に必要なロジック及び複数のコンポーネントであってもよく、またはそれらを含んでもよい。ディスプレイユニットは、1つまたは複数の外部接続されたディスプレイを駆動するためのものである。
複数のコア1202A−Nは、アーキテクチャ命令セットに関して同種または異種とすることができ、言い換えると、コア1202A−Nのうちの2つまたはそれより多くは、同じ命令セットを実行可能であってもよく、その他は、その命令セットまたは異なる命令セットのサブセットのみ実行可能であってもよい。
[例示的なコンピュータアーキテクチャ]
図13−16は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタルシグナルプロセッサ(DSP)、グラフィクスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯式メディアプレイヤ、ハンドヘルドデバイス、及び様々な他の電子デバイスのための当技術分野で既知の他の複数のシステム設計及び構成も、適切である。概して、本明細書において開示されるように、プロセッサ及び/または他の実行ロジックを組み込むことが可能な多種多様なシステムまたは電子デバイスが、概して適切である。
ここで、図13を参照すると、本発明の一実施形態に係るシステム1300のブロック図が示される。システム1300は、コントローラハブ1320と結合される、1つまたは複数のプロセッサ1310、1315を含んでもよい。一実施形態では、コントローラハブ1320は、グラフィクスメモリコントローラハブ(GMCH)1390及び入出力ハブ(IOH)1350(個別のチップ上に存在することができる)を含む。GMCH1390は、メモリと、メモリ1340及びコプロセッサ1345が結合されたグラフィクスコントローラとを含む。IOH1350は、入出力(I/O)デバイス1360を、GMCH1390に結合する。代替的に、メモリコントローラ及びグラフィクスコントローラの一方または両方は、(本明細書に記載されるように)プロセッサ内部に集積され、メモリ1340及びコプロセッサ1345は、プロセッサ1310と、IOH1350を備える単一のチップ内のコントローラハブ1320とに、直接結合される。
図13では、複数の追加のプロセッサ1315が選択的な性質であることが、破線で表されている。各プロセッサ1310、1315は、本明細書に記載される処理コアのうちの1つまたは複数を含んでもよく、プロセッサ1200の何らかのバージョンであってもよい。
メモリ1340は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、またはその2つの組み合わせであってもよい。少なくとも1つの実施形態のために、コントローラハブ1320は、フロントサイドバス(FSB)のようなマルチドロップバス、クイックパスインタコネクト(QPI)のようなポイントツーポイントインタフェース、または同様の接続部1395を介して、プロセッサ1310、1315と通信する。
一実施形態では、コプロセッサ1345は、例えば、ハイスループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、組み込みプロセッサなどのような特定用途向けプロセッサである。一実施形態では、コントローラハブ1320は、集積グラフィクスアクセラレータを含んでもよい。
物理リソース1310、1315の間には、アーキテクチャ上、マイクロアーキテクチャ上、熱的、電力消費等の複数の特性を含む様々な利点の基準に関して、様々な相違がある。
一実施形態では、プロセッサ1310は、一般的なタイプの複数のデータ処理オペレーションを制御する複数の命令を実行する。複数のコプロセッサ命令が、複数の命令内に組み込まれ得る。プロセッサ1310は、これらのコプロセッサ命令を、取り付けられたコプロセッサ1345によって実行されるべき型のものであると認識する。従って、プロセッサ1310は、コプロセッサバスまたは他のインタコネクト上において、これらの複数のコプロセッサ命令(または複数のコプロセッサ命令を表す複数の制御信号)を、コプロセッサ1345に発行する。コプロセッサ1345は、受信されたコプロセッサ命令を受け付け、これを実行する。
ここで、図14を参照すると、本発明の実施形態に係る、第1のより具体的な、例示的なシステム1400のブロック図が示される。図14に示されるように、マルチプロセッサシステム1400は、ポイントツーポイント相互接続システムであり、ポイントツーポイントインタコネクト1450を介して結合される第1のプロセッサ1470及び第2のプロセッサ1480を含む。プロセッサ1470及び1480の各々はプロセッサ1200の何らかのバージョンであってもよい。本発明の一実施形態では、プロセッサ1470及び1480は、それぞれ、プロセッサ1310及び1315であり、コプロセッサ1438は、コプロセッサ1345である。他の実施形態では、プロセッサ1470及び1480は、それぞれ、プロセッサ1310及びコプロセッサ1345である。
プロセッサ1470及び1480は、集積メモリコントローラ(IMC)ユニット1472及び1482をそれぞれ含むことが示される。プロセッサ1470は、そのバスコントローラユニットの一部として、ポイントツーポイント(P−P)インタフェース1476及び1478をさらに含み、同様に、第2のプロセッサ1480は、P−Pインタフェース1486及び1488を含む。プロセッサ1470、1480は、ポイントツーポイント(P−P)インタフェース1450を介し、P−Pインタフェース回路1478、1488を用いて、情報を交換できる。図14に示されるように、IMC1472及び1482はプロセッサをそれぞれのメモリ、すなわち、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部たり得るメモリ1432及びメモリ1434に結合する。
プロセッサ1470、1480の各々は、ポイントツーポイントインタフェース回路1476、1494、1486、1498を用い、個々のP−Pインタフェース1452、1454を介して、チップセット1490と情報を交換してもよい。チップセット1490は、高性能インタフェース1439を介してコプロセッサ1438と、選択的に情報を交換してもよい。一実施形態では、コプロセッサ1438は、例えば、ハイスループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、組み込みプロセッサなどのような特定用途向けプロセッサである。
共有キャッシュ(図示せず)は、いずれかのプロセッサ内または両方のプロセッサの外部に含まれるが、プロセッサが低電力モードに置かれた場合に、いずれかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納され得るように、P−P相互接続を介して、複数のプロセッサとさらに接続されてもよい。
チップセット1490は、インタフェース1496を介して第1のバス1416と結合されてもよい。一実施形態では、第1のバス1416は、ペリフェラルコンポーネントインタコネクト(PCI)バス、またはPCIエクスプレスバス、または別の第3世代I/O相互接続バスのようなバスであってもよいが、本発明の範囲はこれに限定されるものではない。
図14に示されるように、複数の様々なI/Oデバイス1414が、第1のバス1416を第2のバス1420に結合するバスブリッジ1418とともに、第1のバス1416に結合されてもよい。一実施形態では、コプロセッサ、ハイスループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィクスアクセラレータまたはデジタル信号処理(DSP)ユニット等のような)、フィールドプログラマブルゲートアレイ、あるいは任意の他のプロセッサのような1つまたは複数の追加のプロセッサ1415が、第1のバス1416に結合される。一実施形態では、第2のバス1420はローピンカウント(low pin count、LPC)バスであってもよい。一実施形態では、例えば、キーボード及び/またはマウス1422、通信デバイス1427、ならびに命令/コード及びデータ1430を含んでもよいディスクドライブまたは他の大容量ストレージデバイス等のようなストレージユニット1428を含む、様々なデバイスが第2のバス1420に結合されてもよい。さらに、オーディオI/O1424が第2のバス1420に結合されてもよい。なお、他の複数のアーキテクチャが、適用可能である。例えば、図14のポイントツーポイントアーキテクチャの代わりに、システムがマルチドロップバスまたは他のそのようなアーキテクチャを実装してもよい。
ここで、図15を参照すると、本発明の実施形態に係る第2のより具体的な例示的システム1500のブロック図が示される。図14及び15における複数の同様の要素は、同様の参照番号を有し、図14の複数の特定の態様は、図15の他の態様を不明瞭にすることを回避するために、図15から省かれている。
図15は、プロセッサ1470、1480は集積メモリ及びI/O制御ロジック(「CL」)1472及び1482をそれぞれ含んでもよいことを示している。それゆえ、CL1472、1482は集積メモリコントローラユニットを含み、I/O制御ロジックを含む。図15は、メモリ1432、1434が、CL1472、1482と結合されるだけではなく、I/Oデバイス1514が制御ロジック1472、1482と結合されることも示している。レガシーI/Oデバイス1515は、チップセット1490と結合されている。
ここで、図16を参照すると、本発明の実施形態に係るSoC1600のブロック図が示される。図12における複数の同様の要素は、同様の参照番号を有する。また、複数の破線ボックスは、より高度なSoCにおける複数のオプションの機能である。図16では、相互接続ユニット1602は、1つまたは複数のコア202A−Nのセット、及び共有キャッシュユニット1206を含むアプリケーションプロセッサ1610、システムエージェントユニット1210、バスコントローラユニット1216、集積メモリコントローラユニット1214、集積グラフィクスロジック、画像プロセッサ、オーディオプロセッサ、及びビデオプロセッサを含み得る複数のコプロセッサ1620のセットまたはそのうちの1つまたは複数、スタティックランダムアクセスメモリ(SRAM)ユニット1630、ダイレクトメモリアクセス(DMA)ユニット1632、及び1つまたは複数の外部ディスプレイと結合するためのディスプレイユニット1640と結合されている。一実施形態では、コプロセッサ1620は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、GPGPU、ハイスループットMICプロセッサ、組み込みプロセッサなどのような特定用途向けプロセッサを含む。
本明細書で開示する複数のメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような複数の実装アプローチの組み合わせにより実装されてもよい。本発明の複数の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性及び不揮発性メモリ、及び/または複数のストレージ要素を含む)、少なくとも1つの入力デバイス、及び少なくとも1つの出力デバイスを備える複数のプログラマブルシステム上で実行する複数のコンピュータプログラムまたはプログラムコードとして実装され得る。
本明細書に記載される機能を実行し、出力情報を生成するための命令を入力するために、図14に示されるコード1430のようなプログラムコードが適用されてもよい。出力情報は、既知の様式で、1つまたは複数の出力デバイスに適用され得る。この用途の目的のため、処理システムは、例えば、デジタルシグナルプロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサのようなプロセッサを有する何らかのシステムを含む。
プログラムコードは、処理システムと通信を行う高水準の手続き型またはオブジェクト指向のプログラミング言語で実装されてもよい。また、プログラムコードは、所望される場合、アセンブリ言語または機械言語で実装されてもよい。実際に、本明細書で説明される複数のメカニズムは、何らかの特定のプログラミング言語に限定されない。いずれの場合であっても、言語はコンパイラ型またはインタープリタ型言語であってもよい。
少なくとも1つの実施形態の1つまたは複数の態様は、機械によって読み出されると、当該機械に本明細書で説明される複数の技術を実行するロジックを作成させる、プロセッサ内の様々なロジックを表す機械可読媒体に格納された複数の代表的な命令によって実装されてもよい。「IPコア」として知られたそのような複数の表現は、有形の機械可読媒体上に格納され、様々な顧客、または実際にロジックまたはプロセッサを作成する複数の製造機械にロードする複数の製造設備に提供され得る。
そのような機械可読記憶媒体は、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD−ROM)、書き換え可能コンパクトディスク(CD−RW)、及び光磁気ディスク等、その他のタイプのディスクを含むストレージ媒体、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)等のランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、及び相変化メモリ(PCM)等の半導体デバイス、磁気もしくは光カード、または複数の電子的命令を格納するのに適切なその他のタイプの媒体を含む、機械またはデバイスにより製造または形成される、非一時的で有形の複数の構成の物品を含み得るが、これらに限定されない。
従って、本発明の複数の実施形態は、本明細書で説明される複数の構造、複数の回路、複数の装置、複数のプロセッサ、及び/または複数のシステム機能を定義する、ハードウェア記述言語(HDL)のような複数の命令を含む、または設計データを含む、非一時的な有形の機械可読媒体も含む。そのような複数の実施形態は、プログラム製品とも称され得る。
[エミュレーション(バイナリトランスレーション、コードモーフィング等を含む)]
場合によっては、命令コンバータは、ソース命令セットからターゲット命令セットに命令を変換するために、用いられてもよい。例えば、命令コンバータは、命令を、コアにより処理されることになる他の1つまたは複数の命令にトランスレート(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて)、モーフィング、エミュレート、または変換し得る。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせにおいて実装され得る。命令コンバータは、プロセッサ上にあってもよく、プロセッサ外にあってもよく、または一部がプロセッサ上で一部がプロセッサ外にあってもよい。
図17は、本発明の複数の実施形態に係る、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比させるブロック図である。図示される実施形態では、命令コンバータは、ソフトウェア命令コンバータであるが、代替的に、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装され得る。図17は、少なくとも1つのx86命令セットコアを備えるプロセッサ1716によってネイティブに実行され得るx86バイナリコード1706を生成するために、高水準言語1702のプログラムが、x86コンパイラ1704を用いてコンパイルされてもよいことを示している。少なくとも1つのx86命令セットコアを備えるプロセッサ1716は、少なくとも1つのx86命令セットコアを備えるインテル社製プロセッサと実質的に同じ結果を達成するために、(1)インテルx86命令セットコアの命令セットの大部分、あるいは(2)少なくとも1つのx86命令セットコアを備えるインテル社製プロセッサ上で動作することを目的としたアプリケーションまたは他のソフトウェアのオブジェクトコードバージョンを互換的に実行するか、または別の方法で処理することによって、少なくとも1つのx86命令セットコアを備えるインテル社製プロセッサと実質的に同じ機能を実行することができる任意のプロセッサを表す。x86コンパイラ1704は、さらなる連係処理を用いて、または用いずに、少なくとも1つのx86命令セットコアを備えるプロセッサ1716上で実行することができるx86バイナリコード1706(例えば、オブジェクトコード)を生成するコンパイラを表す。同様に、図17は、高水準言語1702のプログラムが代替的命令セットコンパイラ1708を用いてコンパイルされることにより、少なくとも1つのx86命令セットコアを有さないプロセッサ1714(例えば、カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セットを実行するか、及び/またはカリフォルニア州サニーベールのARMホールディングスのARM命令セットを実行するコアを有するプロセッサ)によってネイティブに実行され得る代替的命令セットバイナリコード1710が生成され得ることを示す。命令コンバータ1712は、x86バイナリコード1706を、x86命令セットコアを備えないプロセッサ1714によってネイティブに実行され得るコードに変換するために用いられる。この変換されたコードは、代替的な命令セットバイナリコード1710と同じ可能性は低い。なぜなら、これが可能な命令コンバータは、製作が難しいからである。しかしながら、変換されたコードは、一般的なオペレーションを実現し、代替的な命令セットからの命令で構成される。それゆえ、命令コンバータ1712は、エミュレーション、シミュレーションまたは任意の他の処理を通じて、x86命令セットプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスがx86バイナリコード1706を実行することを可能にする、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。
本実施形態の例を下記の各項目として示す。
[項目1]
ソースライトマスクレジスタオペランド、ソースベクトルレジスタオペランド、デスティネーションライトマスクレジスタオペランド及びオペコードを含む単一のベクトルパックコンフリクトテスト命令に応じて、コンピュータプロセッサ内で、ベクトルパックコンフリクトテストを実行する方法であって、
前記単一のベクトルパックコンフリクトテスト命令を実行することにより、
前記ソースベクトルレジスタオペランドの各データ要素で、前記ソースライトマスクレジスタオペランドからのデータに論理的ANDを実行し、
前記論理的ANDの複数のオペレーションのいずれがコンフリクトを示すかを判断することにより、コンフリクトチェック結果を生成し、
前記ソースライトマスクレジスタオペランドからの前記データで、前記コンフリクトチェック結果に論理的ANDを実行する段階と、
前記ソースライトマスクレジスタオペランドからのデータで、前記コンフリクトチェック結果に前記論理的ANDを実行した前記結果を、前記デスティネーションライトマスクレジスタオペランドに格納する段階とを備える、方法。
[項目2]
ゼロ拡張されたデータが前記ソースベクトルレジスタオペランドの各データ要素と同じサイズになるように、前記ソースライトマスクレジスタオペランドのデータをゼロ拡張する段階をさらに備える、項目1に記載の方法。
[項目3]
前記ソースライトマスクレジスタオペランドの前記ゼロ拡張されたデータを、前記ソースベクトルレジスタオペランドと同じ数及びサイズのデータ要素を有する一時ベクトルレジスタにブロードキャストする段階をさらに備える、項目2に記載の方法。
[項目4]
前記ソースベクトルレジスタオペランドは、128ビット、256ビットまたは512ビットのサイズである、項目1から3のいずれか1項に記載の方法。
[項目5]
前記デスティネーションライトマスクレジスタは、64ビットである、項目1から4のいずれか1項に記載の方法。
[項目6]
前記デスティネーションライトマスクレジスタは、16ビットである、項目1から4のいずれか1項に記載の方法。
[項目7]
前記ソースベクトルレジスタオペランドの複数のデータ要素は、8ビット、16ビット、32ビット、64ビット、128ビットまたは256ビットのサイズである、項目1に記載の方法。
[項目8]
コンピュータプロセッサにおいて、ソースライトマスクレジスタオペランド、デスティネーションベクトルレジスタオペランド及びオペコードを含む単一のベクトルパックブロードキャスト命令に応じて、データのブロードキャストを実行する方法であって、
ゼロ拡張されたデータが前記デスティネーションベクトルレジスタオペランドの各データ要素と同じサイズになるように、前記ソースライトマスクレジスタオペランドのデータをゼロ拡張する段階と、
前記ソースライトマスクレジスタオペランドの前記ゼロ拡張されたデータを、前記デスティネーションベクトルレジスタオペランドの各データ要素位置に格納する段階とを備える、方法。
[項目9]
前記デスティネーションベクトルレジスタオペランドは、128ビット、256ビットまたは512ビットのサイズである、項目8に記載の方法。
[項目10]
前記ソースライトマスクレジスタオペランドは、64ビットである、項目8または9に記載の方法。
[項目11]
前記ソースライトマスクレジスタオペランドは、16ビットである、項目8または9に記載の方法。
[項目12]
ソースベクトルレジスタオペランドの複数のデータ要素は、8ビット、16ビット、32ビット、64ビット、128ビットまたは256ビットのサイズである、項目9に記載の方法。
[項目13]
前記ベクトルパックブロードキャスト命令は、第2のライトマスクソースレジスタをさらに備える、項目8から12のいずれか1項に記載の方法。
[項目14]
前記第2のライトマスクソースレジスタの複数のビット値に基づいて、前記ソースライトマスクレジスタオペランドの前記データを、前記デスティネーションベクトルレジスタオペランドの少なくとも1つのデータ要素位置に格納することを選択的に回避する段階をさらに備える、項目13に記載の方法。
[項目15]
ソースライトマスクレジスタオペランド、デスティネーションベクトルレジスタオペランド及びオペコードを含む単一のベクトルパックブロードキャスト命令を復号するハードウェアデコーダと、
ゼロ拡張されたデータが前記デスティネーションベクトルレジスタオペランドの各データ要素と同じサイズになるように、前記ソースライトマスクレジスタオペランドのデータをゼロ拡張し、前記ソースライトマスクレジスタオペランドの前記ゼロ拡張されたデータを前記デスティネーションベクトルレジスタオペランドの各データ要素位置に格納する実行ロジックとを備える、装置。
[項目16]
前記デスティネーションベクトルレジスタオペランドは、128ビット、256ビットまたは512ビットのサイズである、項目15に記載の装置。
[項目17]
前記ソースライトマスクレジスタオペランドは、64ビットである、項目15または16に記載の装置。
[項目18]
前記ソースライトマスクレジスタオペランドは、16ビットである、項目15または16に記載の装置。
[項目19]
前記ベクトルパックブロードキャスト命令は、第2のライトマスクソースレジスタをさらに備える、項目15から18のいずれか1項に記載の装置。
[項目20]
前記実行ロジックは、さらに、前記第2のライトマスクソースレジスタの複数のビット値に基づいて、前記ソースライトマスクレジスタオペランドの前記データを、前記デスティネーションベクトルレジスタオペランドの少なくとも1つのデータ要素位置に格納することを選択的に回避する、項目19に記載の装置。

Claims (13)

  1. コンピュータプロセッサにおいて、ソースライトマスクレジスタオペランド、デスティネーションベクトルレジスタオペランド及びオペコードを指定する単一のベクトルパックブロードキャスト命令に応じて、データのブロードキャストを実行する方法であって、
    ゼロ拡張されたデータが前記デスティネーションベクトルレジスタオペランドの各データ要素と同じサイズになるように、前記ソースライトマスクレジスタオペランドのデータをゼロ拡張する段階と、
    前記ソースライトマスクレジスタオペランドの前記ゼロ拡張されたデータを、前記デスティネーションベクトルレジスタオペランドの各データ要素位置に格納する段階とを備える、方法。
  2. 前記デスティネーションベクトルレジスタオペランドは、128ビット、256ビットまたは512ビットのサイズである、請求項1に記載の方法。
  3. 前記ソースライトマスクレジスタオペランドは、64ビットである、請求項1または2に記載の方法。
  4. 前記ソースライトマスクレジスタオペランドは、16ビットである、請求項1または2に記載の方法。
  5. 前記デスティネーションベクトルレジスタオペランドのデータ要素のそれぞれのサイズは、8ビット、16ビット、32ビット、64ビット、128ビットまたは256ビットであり、かつ、前記デスティネーションベクトルレジスタオペランドのサイズよりも大きくないサイズである、請求項2に記載の方法。
  6. 前記ベクトルパックブロードキャスト命令は、第2のライトマスクソースレジスタをさらに指定する、請求項1から5のいずれか1項に記載の方法。
  7. 前記第2のライトマスクソースレジスタの複数のビット値に基づいて、前記ソースライトマスクレジスタオペランドの前記データを、前記デスティネーションベクトルレジスタオペランドの少なくとも1つのデータ要素位置に格納することを選択的に回避する段階をさらに備える、請求項6に記載の方法。
  8. ソースライトマスクレジスタオペランド、デスティネーションベクトルレジスタオペランド及びオペコードを指定する単一のベクトルパックブロードキャスト命令を復号するハードウェアデコーダと、
    前記復号された単一のベクトルパックブロードキャスト命令に応じて、ゼロ拡張されたデータが前記デスティネーションベクトルレジスタオペランドの各データ要素と同じサイズになるように、前記ソースライトマスクレジスタオペランドのデータをゼロ拡張し、前記ソースライトマスクレジスタオペランドの前記ゼロ拡張されたデータを前記デスティネーションベクトルレジスタオペランドの各データ要素位置に格納する実行ロジックとを備える、装置。
  9. 前記デスティネーションベクトルレジスタオペランドは、128ビット、256ビットまたは512ビットのサイズである、請求項8に記載の装置。
  10. 前記ソースライトマスクレジスタオペランドは、64ビットである、請求項8または9に記載の装置。
  11. 前記ソースライトマスクレジスタオペランドは、16ビットである、請求項8または9に記載の装置。
  12. 前記ベクトルパックブロードキャスト命令は、第2のライトマスクソースレジスタをさらに指定する、請求項8から11のいずれか1項に記載の装置。
  13. 前記実行ロジックは、さらに、前記第2のライトマスクソースレジスタの複数のビット値に基づいて、前記ソースライトマスクレジスタオペランドの前記データを、前記デスティネーションベクトルレジスタオペランドの少なくとも1つのデータ要素位置に格納することを選択的に回避する、請求項12に記載の装置。
JP2016235364A 2012-09-28 2016-12-02 方法及び装置 Active JP6466388B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/631,666 US9665368B2 (en) 2012-09-28 2012-09-28 Systems, apparatuses, and methods for performing conflict detection and broadcasting contents of a register to data element positions of another register
US13/631,666 2012-09-28

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2015534473A Division JP6055549B2 (ja) 2012-09-28 2013-06-14 ベクトルパックコンフリクトテストを実行する方法、コンピュータプロセッサ、プログラム、および機械可読記憶媒体

Publications (2)

Publication Number Publication Date
JP2017062845A JP2017062845A (ja) 2017-03-30
JP6466388B2 true JP6466388B2 (ja) 2019-02-06

Family

ID=50386389

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2015534473A Expired - Fee Related JP6055549B2 (ja) 2012-09-28 2013-06-14 ベクトルパックコンフリクトテストを実行する方法、コンピュータプロセッサ、プログラム、および機械可読記憶媒体
JP2016235364A Active JP6466388B2 (ja) 2012-09-28 2016-12-02 方法及び装置

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2015534473A Expired - Fee Related JP6055549B2 (ja) 2012-09-28 2013-06-14 ベクトルパックコンフリクトテストを実行する方法、コンピュータプロセッサ、プログラム、および機械可読記憶媒体

Country Status (7)

Country Link
US (2) US9665368B2 (ja)
JP (2) JP6055549B2 (ja)
KR (1) KR101851439B1 (ja)
CN (1) CN104903867B (ja)
DE (1) DE112013003741T5 (ja)
GB (1) GB2520860B (ja)
WO (1) WO2014051752A1 (ja)

Families Citing this family (13)

* 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
EP3199604B1 (en) * 2014-09-26 2020-12-23 Chugoku Marine Paints, Ltd. Rust-inhibiting paint composition and application for same
JP6282750B2 (ja) * 2014-09-26 2018-02-28 中国塗料株式会社 防錆塗料組成物およびその用途
US20160179550A1 (en) * 2014-12-23 2016-06-23 Intel Corporation Fast vector dynamic memory conflict detection
US9891913B2 (en) * 2014-12-23 2018-02-13 Intel Corporation Method and apparatus for performing conflict detection using vector comparison operations
US10185562B2 (en) 2015-12-24 2019-01-22 Intel Corporation Conflict mask generation
US20170192791A1 (en) * 2015-12-30 2017-07-06 Elmoustapha Ould-Ahmed-Vall Counter to Monitor Address Conflicts
JP6788017B2 (ja) * 2016-01-22 2020-11-18 株式会社ソニー・インタラクティブエンタテインメント 後方互換性のためのなりすましcpuid
CN105847077B (zh) * 2016-03-17 2019-03-08 华为技术有限公司 一种检测多路串行数据冲突的方法及装置、设备
US10846087B2 (en) * 2016-12-30 2020-11-24 Intel Corporation Systems, apparatuses, and methods for broadcast arithmetic operations
JP7006858B1 (ja) * 2020-03-18 2022-01-24 日本電気株式会社 情報処理装置及び情報処理方法
CN112579168B (zh) * 2020-12-25 2022-12-09 成都海光微电子技术有限公司 指令执行单元、处理器以及信号处理方法
CN116257350B (zh) * 2022-09-06 2023-12-08 进迭时空(杭州)科技有限公司 一种针对risc-v矢量寄存器的重命名分组装置

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2564264B2 (ja) * 1985-05-22 1996-12-18 株式会社日立製作所 ベクトル処理方法及びベクトルプロセッサ
US5615349A (en) * 1990-09-04 1997-03-25 Mitsubishi Denki Kabushiki Kaisha Data processing system capable of execution of plural instructions in parallel
JPH06274528A (ja) * 1993-03-18 1994-09-30 Fujitsu Ltd ベクトル演算処理装置
US5812147A (en) * 1996-09-20 1998-09-22 Silicon Graphics, Inc. Instruction methods for performing data formatting while moving data between memory and a vector register file
JP3733842B2 (ja) * 2000-07-12 2006-01-11 日本電気株式会社 ベクトルスキャタ命令制御回路及びベクトル型情報処理装置
US7739319B2 (en) * 2001-10-29 2010-06-15 Intel Corporation Method and apparatus for parallel table lookup using SIMD instructions
AU2003256870A1 (en) * 2002-08-09 2004-02-25 Intel Corporation Multimedia coprocessor control mechanism including alignment or broadcast instructions
GB2409064B (en) * 2003-12-09 2006-09-13 Advanced Risc Mach Ltd A data processing apparatus and method for performing in parallel a data processing operation on data elements
US7196708B2 (en) 2004-03-31 2007-03-27 Sony Corporation Parallel vector processing
US7600104B2 (en) 2006-08-15 2009-10-06 Peter Neumann Method and system for parallel vector data processing of vector data having a number of data elements including a defined first bit-length
US8019977B2 (en) 2007-05-14 2011-09-13 Apple Inc. Generating predicate values during vector processing
US9529592B2 (en) * 2007-12-27 2016-12-27 Intel Corporation Vector mask memory access instructions to perform individual and sequential memory access operations if an exception occurs during a full width memory access operation
US7895419B2 (en) * 2008-01-11 2011-02-22 International Business Machines Corporation Rotate then operate on selected bits facility and instructions therefore
US8793472B2 (en) * 2008-08-15 2014-07-29 Apple Inc. Vector index instruction for generating a result vector with incremental values based on a start value and an increment value
US8209525B2 (en) * 2008-08-15 2012-06-26 Apple Inc. Method and apparatus for executing program code
US9501286B2 (en) * 2009-08-07 2016-11-22 Via Technologies, Inc. Microprocessor with ALU integrated into load unit
US8688957B2 (en) 2010-12-21 2014-04-01 Intel Corporation Mechanism for conflict detection using SIMD
US8972698B2 (en) * 2010-12-22 2015-03-03 Intel Corporation Vector conflict instructions
CN104081336B (zh) * 2011-12-23 2018-10-23 英特尔公司 用于检测向量寄存器内的相同元素的装置和方法
WO2013095659A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Multi-element instruction with different read and write masks
WO2013095642A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Systems, apparatuses, and methods for setting an output mask in a destination writemask register from a source write mask register using an input writemask and immediate
EP2798504A4 (en) * 2011-12-29 2016-07-27 Intel Corp PROCESSORS HAVING FULLY CONNECTED INTERCONNECTIONS SHARED BY VECTORIAL CONFLICT INSTRUCTIONS AND PERMUTATION INSTRUCTIONS
US9575753B2 (en) * 2012-03-15 2017-02-21 International Business Machines Corporation SIMD compare instruction using permute logic for distributed register files

Also Published As

Publication number Publication date
GB2520860A (en) 2015-06-03
JP6055549B2 (ja) 2016-12-27
CN104903867B (zh) 2018-05-15
KR101851439B1 (ko) 2018-04-23
GB2520860B (en) 2020-09-16
KR20150091462A (ko) 2015-08-11
JP2017062845A (ja) 2017-03-30
US9665368B2 (en) 2017-05-30
CN104903867A (zh) 2015-09-09
GB201501047D0 (en) 2015-03-11
US20170329606A1 (en) 2017-11-16
DE112013003741T5 (de) 2015-09-10
WO2014051752A1 (en) 2014-04-03
US20140095843A1 (en) 2014-04-03
JP2015530674A (ja) 2015-10-15

Similar Documents

Publication Publication Date Title
JP6466388B2 (ja) 方法及び装置
JP6699845B2 (ja) 方法及びプロセッサ
CN107918546B (zh) 利用经掩码的全寄存器访问实现部分寄存器访问的处理器、方法和系统
TWI524266B (zh) 用以偵測向量暫存器內相等元素之裝置及方法
CN107908427B (zh) 用于多维数组中的元素偏移量计算的指令
US10387148B2 (en) Apparatus and method to reverse and permute bits in a mask register
JP2018500653A (ja) ベクトルブロードキャストおよびxorand論理命令のための装置および方法
CN106030514B (zh) 用于执行采用传播的被屏蔽源元素存储指令的处理器及其方法
JP5806748B2 (ja) 書き込みマスク・レジスタの末尾の最下位マスキング・ビットを判定するためのシステム、装置、および方法
JP6807073B2 (ja) 高速ベクトルによる動的なメモリ競合検出
JP2018500658A (ja) インデックスおよび即値を用いてベクトル置換を実行するための方法および装置
JP2018506096A (ja) ベクトルビットシャッフルを実行するための方法および装置
JP2017539014A (ja) ベクトルビット反転およびクロスを実行するための方法および装置
JP2017539013A (ja) 競合検出を実行するための方法および装置
JP2018500652A (ja) マスクをマスク値のベクトルに拡張するための方法および装置
JP2017534982A (ja) 4d座標から4dのz曲線インデックスを計算するための機械レベル命令
CN108268279B (zh) 用于广播算术操作的系统、装置和方法
JP2018500629A (ja) 3d座標から3dのz曲線インデックスを計算するための機械レベル命令
US20140189294A1 (en) Systems, apparatuses, and methods for determining data element equality or sequentiality
JP2018500666A (ja) ベクトルビットギャザーを実行するための方法および装置
JP2018503890A (ja) ベクトル水平論理命令のための装置および方法
JP5753603B2 (ja) データ要素内のビットをゼロ化するためのシステム、装置、および方法

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180124

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180220

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20180518

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180720

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190109

R150 Certificate of patent or registration of utility model

Ref document number: 6466388

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