JP2014182796A - 書き込みマスク・レジスタの末尾の最下位マスキング・ビットを判定するためのシステム、装置、および方法 - Google Patents

書き込みマスク・レジスタの末尾の最下位マスキング・ビットを判定するためのシステム、装置、および方法 Download PDF

Info

Publication number
JP2014182796A
JP2014182796A JP2014028431A JP2014028431A JP2014182796A JP 2014182796 A JP2014182796 A JP 2014182796A JP 2014028431 A JP2014028431 A JP 2014028431A JP 2014028431 A JP2014028431 A JP 2014028431A JP 2014182796 A JP2014182796 A JP 2014182796A
Authority
JP
Japan
Prior art keywords
write mask
bit position
register
instruction
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
JP2014028431A
Other languages
English (en)
Other versions
JP2014182796A5 (ja
JP5806748B2 (ja
Inventor
J Hughes Christopher
ジェイ. ヒューズ、クリストファー
J Charney Mark
ジェイ. チャーニー、マーク
Corbal Jesus
コーバル、ジーザス
B Girkar Milind
ビー. ギルカル、ミリンド
Ould-Ahmed-Vall Elmoustapha
オウルド−アハムド−ヴァル、エルモウスタファ
Bret L Toll
エル. トール、ブレット
Valentine Robert
バレンタイン、ロバート
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 JP2014182796A publication Critical patent/JP2014182796A/ja
Publication of JP2014182796A5 publication Critical patent/JP2014182796A5/ja
Application granted granted Critical
Publication of JP5806748B2 publication Critical patent/JP5806748B2/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
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • G06F9/30152Determining start or end of instruction; determining instruction length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations

Landscapes

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

Abstract

【課題】SIMD演算命令で参照する、ベクトル・レジスタの要素に対応する書き込みマスク・レジスタ内部におけるマスク・ビットの調整を全般に可能にする、共通の操作手段を提供する。
【解決手段】KZBTZの実行では、第1の入力マスクの末尾の最下位ゼロビット・ポジションを検出し、出力マスクを、その第1の入力マスクの値を有するようにセットするが、第1の入力マスクにおける末尾の最下位ゼロビット・ポジションよりも最上位ビット・ポジションに近い全てのビット・ポジションはゼロにセットされた状態である。いくつかの実施形態では、第1の入力マスクのビット・ポジションが、対応する第2の入力マスクのビット・ポジションに応じて末尾の最下位ゼロビット・ポジション計算に考慮されないように、第2の入力マスクが書き込みマスクとして使用される。
【選択図】図1

Description

本発明の分野は一般にコンピュータ・プロセッサ・アーキテクチャに関し、より具体的には、実行時に特定の結果を引き起こす命令に関する。
命令セットすなわち命令セット・アーキテクチャ(ISA)は、プログラミングと関係付けられたコンピュータ・アーキテクチャの一部分であり、ネイティブ・データ型、命令、レジスタ・アーキテクチャ、アドレシング・モード、メモリ・アーキテクチャ、割り込み/例外処理、および外部入出力(I/O)を含むことができる。命令という用語は一般に、ここではマクロ命令、つまり実行するためにプロセッサに提供される命令を示すことに留意すべきである。これは、プロセッサのデコーダがマクロ命令を復号化した結果生じるマイクロ命令またはMicro−Ops(マイクロオプス)とは対照的である。
米国特許第5,446,912号 米国特許第5,207,132号
本発明は添付の図面の図に例として示されるが、それらの図には限定されない。これらの図では、同じ参照記号は同様の要素を示す。
以下の説明では、多数の特定の詳細について述べる。しかしながらこれらの特定の詳細がなくても、本発明の実施形態を実施できることが理解されよう。それ以外の場合には、この説明の理解をあいまいにしないため、周知の回路、構造および技術は詳細に示していない。
この明細書における「一実施形態」、「ある実施形態」、「一実施形態の例」などについての言及は、記載されている実施形態は特定の機能、構造、または特性を含み得るが、あらゆる実施形態が必ずしもその特定の機能、構造、または特性を含み得るわけではないことを示す。さらに、かかる語句は必ずしも同一の実施形態を示すわけではない。さらに、特定の機能、構造、または特性をある実施形態に関して記載する場合、明示的に記載するしないを問わず他の実施形態に関してかかる機能、構造、または特性に影響が及ぶことは、当業者の知識の範囲内にあると言えよう。
概要
命令セット・アーキテクチャは、ISAを実装するプロセッサの内部設計であるマイクロ・アーキテクチャとは区別される。様々なマイクロ・アーキテクチャを備えるプロセッサが共通の命令セットを共有することができる。例えば、インテル(登録商標)社製Pentium(登録商標)4プロセッサ、インテル社製コアプロセッサ、およびアドバンスト・マイクロ・ディバイシズ社(カルフォルニア州サニーベール)製プロセッサは、x86命令セットのほぼ同一のバージョン(より新しいバージョンにはいくつかの拡張が追加されている)を実装するが、異なる内部設計を有する。例えば、そのISAの同一レジスタ・アーキテクチャを異なるマイクロ・アーキテクチャに様々な方法で実装することができる。こういったマイクロ・アーキテクチャは、専用物理レジスタや1つまたは複数の動的に割り付けられる物理レジスタを含む既知の技術を使用しており、動的に割り付けられる物理レジスタは、レジスタ・リネーミング機構などを使用する(例えば、特許文献1に記載のレジスタ・エイリアス・テーブル(RAT)、リオーダ・バッファ(ROB)およびリタイアメント・レジスタ・ファイルの使用、特許文献2に記載のレジスタの複数マップと1つのプールの使用など)。他に指定されていない限り、 レジスタ・アーキテクチャ、レジスタ・ファイル、およびレジスタという語句は、ソフトウェア/プログラマから見えるものと、命令がレジスタを指定する方法を示す。具体性を求める場合、論理の、アーキテクチャ上の、またはソフトウェアビジブルの、という形容詞がレジスタ・アーキテクチャにおけるレジスタ/ファイルを示すために使用され、所与のマイクロ・アーキテクチャにおけるレジスタ(例えば物理レジスタ、リオーダ・バッファ、リタイアメント・レジスタ、レジスタ・プール)を示すために種々の形容詞が使用される。
命令セットは、1つまたは複数の命令フォーマットを含む。所与の命令フォーマットは、特に、実行すべき動作とその動作が実行されるオペランドを指定するために、様々なフィールド(ビット番号、ビット位置)を定義する。所与の命令が所与の命令フォーマットを使用して表現され、動作およびオペランドを指定する。命令ストリームは命令の特定のシーケンスであり、そのシーケンス内の命令ごとに、特定の命令フォーマットの命令が生じる。
科学上の、財務上の、自動ベクトル化された汎用の、RMS(認識、抽出、合成)/映像およびマルチメディア用途(例えば2D/3Dグラフィックスや画像処理、ビデオ圧縮/復元、音声認識アルゴリズム、オーディオ操作など)はしばしば、多数のデータ項目について実行される同じ動作を必要とする(「データ並列性」と呼ばれる)。Single Instruction Multiple Data(単一命令複数データ、SIMD)は、複数のデータ項目に対して同じ動作をプロセッサに実行させる命令のタイプを表す。SIMD技術は特に、レジスタ内のビットを、それぞれ個別値を表す複数の固定サイズのデータ要素に論理的に分割できるプロセッサに適する。例えば、64ビット・レジスタ内のビットを、4個の個別の16ビット・データ要素として操作されるソース・オペランドとして指定することができる。このデータ要素はそれぞれ個別の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命令を含んだ命令セットを有するインテル社(登録商標)製Core(商標)プロセッサで用いられているものなどのSIMD技術は、アプリケーション処理能力の大幅な向上を可能にした(Core(商標)およびMMX(商標)はインテル社(カリフォルニア州サンタクララ)の登録商標または商標である)。アドバンスド・ベクトル拡張(AVX)(AVX1およびAVX2)と呼ばれる、VEXコード体系を使用する追加のSIMD拡張セットが、公開かつ/または公表されている(例えばインテル社(登録商標)の64およびIA−32アーキテクチャ・ソフトウェア開発者マニュアル、2011年10月や、インテル社(登録商標)アドバンスド・ベクトル拡張プログラミング・リファレンス、2011年6月を参照)。
以下の説明では、命令セット・アーキテクチャにおける次の特定の命令の動作について述べる前に説明を要するかもしれない項目をいくつか取り上げる。そのような項目の1つは「書き込みマスク・レジスタ」と呼ばれる。これは一般に、要素1個毎の計算操作を条件付きで制御するためにオペランドを述語化するのに使用される(以下では、マスク・レジスタという用語も用いることができ、この用語は、以下で述べる「k」個のレジスタなどの書き込みマスク・レジスタを表す)。以下で用いられるように、書き込みマスク・レジスタは複数のビット(16個、32個、64個など)を格納し、その書き込みマスク・レジスタの各アクティブ・ビットがSIMD処理の間、ベクトル・レジスタのパックデータ要素の動作/更新を支配する。一般に、プロセッサ・コアで利用可能な書き込みマスク・レジスタは複数存在する。
命令セット・アーキテクチャは少なくともいくつかのSIMD命令を含んでいる。そのSIMD命令はベクトル動作を指定し、ソース・レジスタおよび/またはデスティネーション・レジスタを下記のベクトル・レジスタから選択するためのフィールドを有する(例示的なSIMD命令は、ベクトル・レジスタのうちの1つまたは複数の内容に対して実行されるベクトル動作と、ベクトル・レジスタのうちの1つに格納されるそのベクトル動作の結果を指定することができる)。本発明の様々な実施形態が様々なサイズのベクトル・レジスタを有し、より大きい/より小さい/異なるサイズのデータ要素をサポートすることができる。
SIMD命令によって指定されたマルチビットのデータ要素のサイズ(例えば、バイト、ワード、ダブルワード、クワッドワード)によって、ベクトル・レジスタ内部における「データ要素ポジション」のビット位置が決まり、ベクトル・オペランドのサイズによって、データ要素の数が決まる。パックデータ要素は、特定のポジションに格納されたデータを表す。つまり、デスティネーション・オペランドにおけるデータ要素のサイズと、デスティネーション・オペランドのサイズ(デスティネーション・オペランド内にあるビット総数)に応じて(または言い換えれば、デスティネーション・オペランドのサイズと、デスティネーション・オペランド内部のデータ要素の数に応じて)、結果得られるベクトル・オペランド内部のマルチビット・データ要素ポジションのビット位置は変わる(例えば、結果得られるベクトル・オペランドのデスティネーションがベクトル・レジスタである場合(この説明ではベクトル・レジスタとパックデータ要素レジスタは交換可能な形で使用されている)、デスティネーション・ベクトル・レジスタ内部のマルチビット・データ要素ポジションのビット位置が変わる)。例えば、マルチビット・データ要素のビット位置は、32ビット・データ要素について動作するベクトル動作(データ要素ポジション0がビット位置31:0を占有し、データ要素ポジション1がビット位置63:32を占有するなど)と、64ビット・データ要素について動作するベクトル動作(データ要素ポジション0がビット位置63:0を占有し、データ要素ポジション1がビット位置127:64を占有するなど)とは異なる。
さらに、図1に示されているように、本発明の一実施形態による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ビットの一部分のみを書き込みマスクとして使用することができる。一般に、単一の要素毎マスキング制御ビットを使用する場合、マスキングに使用されるベクトル書き込みマスク・レジスタ内のビット(アクティブ・ビット)の数は、ベクトル・サイズ(ビット単位)をベクトルのデータ要素サイズ(ビット単位)で割ったものに等しい。
上記で指摘したように、書き込みマスク・レジスタは、ベクトル・レジスタの要素に対応するマスク・ビットを含み(またはメモリ位置)、操作が実行されるべき要素の状況を追跡する。このため、ベクトル・レジスタに対するのと同様の挙動を上記マスク・ビット上で繰り返し、書き込みマスク・レジスタ内部における上記マスク・ビットの調整を全般に可能にする、共通の操作があると望ましい。
図2は、1つまたは複数のKZBTZ命令204を実行するためのプロセッサ(プロセッサ・コア)200の例示的実施形態のブロック図である。いくつかの実施形態では、プロセッサは汎用プロセッサであってよい(例えばデスクトップ、ラップトップ、サーバおよびそれに類するコンピュータで使用されるタイプのプロセッサなど)。あるいはプロセッサは専用プロセッサであってもよい。適当な専用プロセッサの例は以下を含むがそれに限定されない。つまり数例を挙げると、ネットワーク・プロセッサ、通信プロセッサ、暗号プロセッサ、グラフィックス・プロセッサ、コプロセッサ、埋込み型プロセッサ、デジタル信号プロセッサ(DSP)、およびコントローラである。このプロセッサは、各種復号命令セット・コンピューティング(CISC)プロセッサ、各種縮小命令セット・コンピューティング(RISC)プロセッサ、各種超長命令語(VLIW)プロセッサ、それらの各種複合体、または完全に他のタイプのプロセッサのうちの任意のものであってよい。
プロセッサ200は、アーキテクチャから見えるレジスタ205(例えばアーキテクチャ上のレジスタ・ファイル)を含む。アーキテクチャ上のレジスタはまた、本明細書では単にレジスタと呼ぶことができる。他に指定されていない、またはそうではないことが明らかでない限り、アーキテクチャ上のレジスタ、レジスタ・ファイル、およびレジスタという語句は、本明細書では、ソフトウェアおよび/またはプログラマから見えるレジスタ、および/またはオペランドを特定するためにマクロ命令またはアセンブリ言語命令によって指定されるレジスタを示すために使用される。これらのレジスタは、所与のマイクロ・アーキテクチャ内にある他の非アーキテクチャまたはアーキテクチャから見えないレジスタ(例えば、命令によって使用される一時的なレジスタ、リオーダ・バッファ、リタイアメント・レジスタなど)と対照をなす。レジスタは一般に、オンダイのプロセッサ記憶位置を表す。例示したアーキテクチャ上のレジスタは、パックデータ・レジスタ206を含む。各パックデータ・レジスタは、パックデータまたはベクトルデータを格納するように動作可能であってよい。例示したアーキテクチャ上のレジスタはまた、パックデータ動作マスク・レジスタ207を含む。各パックデータ動作マスク・レジスタは、パックデータ動作マスクを格納するように動作可能であってよい。こういったレジスタを、この説明では書き込みマスク・レジスタと呼ぶことができる。パックデータ・オペランドは、パックデータ・レジスタ207に格納することができる。
上記プロセッサはまた、実行ロジック208を含む。上記実行ロジックは、1つまたは複数のKZBTZ命令204を実行または処理するように動作可能である。いくつかの実施形態では、上記実行ロジックは、これらの命令を実行するための特定のロジックを含むことができる(例えばファームウェアと潜在的に組み合わせられた特定の回路またはハードウェアなど)。
効率的にベクトル化するために重要なアルゴリズム・パターンは、間接的なメモリ位置に対する読み/書きを伴う計算である。例えばA[B[i]]をA[C[i]]にコピーするなどである。このタイプのループのベクトル化は、複数のインデックス・ベクトル(すなわちB[i]およびC[i])に対する集約/分散操作を伴う。しかしながら、このベクトル化は、複数の読み取りと書き込みを同時に行うことによるメモリの依存関係の違反が無いこと前提としている。例えば、B[i]からのSIMD幅要素からなるグループがC[i]と共通の値を保持する場合、リード・アフター・ライト依存性を違反する可能性がある。より具体的には、B[0]=0、B[1]=1、C[0]=1、およびC[1]=2の場合、A[C[0]]への書き込みの次にA[B[1]]の読み取りを行わなければならない。集約命令により読み取りを全て同時に行い、次いで分散命令により書き込みを全て行うと、この依存性を違反し、解が不正確になる可能性がある。
この問題の解決を助けるために、vconflictと呼ばれる命令が第1のベクトルの各要素を第2のベクトルの全ての要素と比較し、この比較結果をビット・ベクトルのセットとしてベクトル・レジスタ内に出力する。その狙いは、「競合」を検出すること、または様々な集約/分散をまたいでインデックスを整合することである。何らかの競合がある場合、所与のSIMD幅要素のグループに対する計算が反復して実行され、以下の疑似コードに示されているように、できるだけ多くの要素を同時に実行する。
for (i=0; i<N; i+=SIMD_WIDTH) {
gather_indices = vload (&B[i]);
scatter_indices = vload (&C[i]);
comparisons = vconflict (gather_indices, scatter_indices);
elements_left_mask = all_ones;
do {
do_these = Compute_Mask_of_Non_Conflicting_Elements (comparisons, elements_left_mask);
Gather_Compute_Scatter (gather_indices, scatter_indices, do_these);
elements_left_mask ^= do_these;
} while (elements_left_mask != 0);
}
上記の「Compute_Mask_of_Non_Conflicting_Elements」は自明ではない操作である。vconflictと併用した既存の命令は全て、1つの問題を共有する。つまり、2つのインデックス・セットの範囲内で起こり得るデータの依存関係を全て検出するには、vconflictの複数のインスタンスを実行し、その比較結果を追加操作しなければならない。具体的には、上記の例において、リード・アフター・ライト(RAW)依存性を検出するために、集約インデックス・ベクトルと分散インデックス・ベクトルとの重複インデックスをどのように検出しなければならないのか示している。しかしながら、この提案した、リード・アフター・ライト(RAW)依存性を守らせ、いくつかの要素の処理を遅延させる解決策は、ライト・アフター・ライト(WAW)依存性またはライト・アフター・リード(WAR)依存性の違反を引き起こす可能性がある。例えば、B[0]=0、B[1]=1、B[2]=2、C[0]=1、C[1]=3、およびC[2]=3であると仮定する。上記の例と同様に、第2の反復は第1の反復に対してRAW依存性を有するので、その第2の反復は遅延するはずである。第3の反復にはRAW依存性が無く、したがってその第3の反復を第1の反復と同時に実行する選択肢が存在する可能性がある。しかしながら、それが行われた場合、A[C[2]](=A[3])への書き込みがA[C[1]](=A[3])への書き込みの前に生じ、WAW依存性を違反する。
以下に、命令セットに属する、ゼロマスク・ビフォー・末尾ゼロ(「KZBTZ」)命令と一般に呼ばれる命令の実施形態と、かかる命令を実行するために使用できるシステム、アーキテクチャ、命令フォーマットなどの実施形態について記載する。KZBTZの実行では、第1の入力マスクの末尾の最下位ゼロビット・ポジションを検出し、出力マスクを、その第1の入力マスクの値を有するようにセットするが、第1の入力マスクにおける末尾の最下位ゼロビット・ポジションよりも最上位ビット・ポジションに近い全てのビット・ポジションはゼロにセットされた状態である。いくつかの実施形態では、第1の入力マスクのビット・ポジションが、対応する第2の入力マスクのビット・ポジションに応じて末尾の最下位ゼロビット・ポジションの計算に考慮されないように、第2の入力マスクが書き込みマスクとして使用される。
本発明の一実施形態による1アクティブ・ビットのベクトル書き込みマスク要素の数とベクトル・サイズとデータ要素サイズの相関関係の図である。 1つまたは複数の命令を実行するプロセッサ(プロセッサ・コア)の例示的実施形態のブロック図である。 KZBTZ動作の例の図である。 KZBTZ動作の例の図である。 プロセッサにおけるKZBTZ命令の実行の一実施形態の図である。 KZBTZ命令を処理する方法の一実施形態の図である。 本発明の一実施形態によるレジスタ・アーキテクチャ600のブロック図である。 本発明の実施形態によるインオーダ・パイプラインの例とレジスタ・リネーミングを行うアウトオブオーダ発行/実行パイプラインの例を示すブロック図である。 本発明の実施形態によるプロセッサに含まれる、インオーダ・アーキテクチャ・コアの例示的実施形態とレジスタ・リネーミングを行うアウトオブオーダ発行/実行アーキテクチャ・コアの例を示すブロック図である。 インオーダ・コア・アーキテクチャのより具体的な例のブロック図である。このコアは、1つのチップ内にある複数の論理ブロック(同じタイプおよび/または異なるタイプの他のコアを含む)のうちの1つであるはずである。 インオーダ・コア・アーキテクチャのより具体的な例のブロック図である。このコアは、1つのチップ内にある複数の論理ブロック(同じタイプおよび/または異なるタイプの他のコアを含む)のうちの1つであるはずである。 本発明の実施形態に従って複数のコアを有することができ、統合メモリ・コントローラを有することができ、統合グラフィックスを有することができるプロセッサ900のブロック図である。 コンピュータ・アーキテクチャの例のブロック図である。 コンピュータ・アーキテクチャの例のブロック図である。 コンピュータ・アーキテクチャの例のブロック図である。 コンピュータ・アーキテクチャの例のブロック図である。 本発明の実施形態によるソース命令セットにおけるバイナリ命令をターゲット命令セットにおけるバイナリ命令に変換するソフトウェア命令コンバータの用法を対比的に示すブロック図である。
図3A及び図3BにKZBTZの動作例が示されている。図3Aに、2つのソース書き込みマスク・レジスタ301および303とデスティネーション書き込みマスク305がある。第1のソース書き込みマスク・レジスタ301における最初の「0」値が3番目のビット・ポジション(SRC1[2])に示されている。第2のソース書き込みマスク・レジスタ303の対応するビット・ポジションでは値は「1」である。これは、このビット・ポジションが、第1のソース書き込みマスク・レジスタ301内ではゼロであり、かつ第2のソース書き込みマスク・レジスタ303内では有効化されている、最初のビット・ポジションであることを意味する。したがってデスティネーション書き込みマスク・レジスタ305は、ビット・ポジション3に至るまで第1の書き込みマスク・レジスタ301の内容を有し、そのビット・ポジションおよびそれより上位のビット・ポジションでは0になるようにセットされる。
図3Bに、2つのソース書き込みマスク・レジスタ307および309とデスティネーション書き込みマスク311がある。第1のソース書き込みマスク・レジスタ307における最初の「0」値が3番目のビット・ポジション(SRC1[2])内に示されている。第2のソース書き込みマスク・レジスタ309の対応するビット・ポジションでは値は「0」である。これは、このビット・ポジションが、末尾の最下位ゼロビット・ポジションであると評価されていないことを意味する。両方の要件を満たす最初のビット・ポジションはビット・ポジション4である(SRC1[3]およびSRC2[3])。したがってデスティネーション書き込みマスク・レジスタ311は、ビット・ポジション4に至るまで第1の書き込みマスク・レジスタ307の内容を有し、そのビット・ポジションおよびそれより上位のビット・ポジションでは0になるようにセットされる。
KZBTZのフォーマットの例
この命令のフォーマットの例は「KZBTZ K1,K2,K3」である。ここで、オペランドK1がデスティネーション書き込みマスク・レジスタであり、K2およびK3がソース書き込みマスク・レジスタであり、KZBTZが命令のオペコードである。いくつかの実施形態では、K1、K2、およびK3は上記で詳述した専用書き込みマスク・レジスタである。他の実施形態では、K1、K2、およびK3は汎用レジスタである。
KZBTZ実行方法の例
図4に、プロセッサでKZBTZ命令を実行する実施形態が示されている。401で、第1および第2のソース書き込みマスク・オペランド、デスティネーション書き込みマスク・オペランド、およびオペコードを有するKZBTZ命令がフェッチされる。
403で、復号化ロジックによってKZBTZ命令が復号化される。
405で、ソース・オペランドの値が取り出される/読み取られる。例えば、ソース書き込みマスク・レジスタが読み取られる。
407で、復号化されたKZBTZ命令(またはマイクロ・オペレーションなどのかかる命令を含んだ動作)が1つまたは複数の機能ユニットなどの実行資源によって実行される。これは、第2のソース書き込みマスク・オペランド内の対応するビット・ポジションに値1を有する、第1のソース書き込みマスク・オペランド内の最下位ゼロビット・ポジションを検出するためである。このビット・ポジションが末尾の最下位ゼロビット・ポジションを意味する。この例が図3に示されている。
409で、末尾の最下位ゼロビット・ポジションまでの(ただしそのポジションは含まない)値が、デスティネーション書き込みマスク・オペランド内の対応するビット・ポジションに格納される。さらに、デスティネーション書き込みマスク・オペランドの残りのビット・ポジションは0にセットされる。407と409は個別に示したが、実施形態によっては上記命令の実行の一部分としてまとめて実行される。
図5に、KZBTZ命令を処理する方法の実施形態が示されている。この実施形態では、動作401〜405の全てではないにせよいくつかが先に実行されているものとする。ただし、それらは下記に記載する詳細をはっきりさせるために示していない。例えば、フェッチおよび復号化は図示せず、オペランドの取り出しも図示しない。この例では、各ビット・ポジションは並行して処理されるが、ビット・ポジションを直列に評価することもできる。
501で、第1のソース書き込みマスク・レジスタの内容が、デスティネーション書き込みマスク・レジスタに書き込まれる。いくつかの実施形態では、第1のソース書き込みマスク・レジスタの内容が、上記の代わりに一時的なレジスタまたはその他のデータ構造に書き込まれる。
502で、一時的な変数が0にセットされる。この一時的な変数は、503における判定の数値が第1のソース書き込みマスク・レジスタにおけるビット・ポジションの番号を超えたかどうか判定するために、カウンタとして使用される。
503では、判定が以下のもので構成される。1)第1のソース書き込みマスク・レジスタにおけるビット・ポジションの番号よりもカウンタが小さいかどうか、2)第1のソース書き込みマスク・レジスタのカウンタ値のビット・ポジションにおけるビット値が1であるかどうか、または3)第2のソース書き込みマスク・レジスタのカウンタ値のビット・ポジションにおけるビット値が0であるかどうか。これら2)と3)の判定の両方が偽の場合、次のステップは、上記カウンタ値のビット・ポジションから最上位ビット・ポジションまでのデスティネーション書き込みマスク・レジスタのビット・ポジションをすべてゼロにすることになる(507)。上記のカウンタ判定に対する偽は、第1の書き込みマスク全体が評価完了し、末尾の最下位ゼロビット・ポジションが検出されなかったことを意味する。したがって、第1のソース書き込みマスクのビット・ポジションに格納された値が1ではないことに対する偽表示は、ゼロ値という表示である。第2のソース書き込みマスク・レジスタのその同じビット・ポジションに格納された値が1のときに、末尾の最下位ゼロビット・ポジションが検出されている。
これら2)と3)の判定のいずれかが真の場合、次のステップではカウンタを増やし(505)、503の判定を再度行う。
KZBTZの使用例について以下で説明する。この例では、上記に対する解決策は、先の反復の前に後の反復の実行を許可しないことである。したがってベクトル/SIMDの実行は、最初のRAW依存時に停止しなければならない。入力マスクk2が、残りのRAW依存性を持たないまだ計算する必要がある要素のためにセットされたビットを有するマスクであり、入力マスクk3がまだ計算する必要がある全ての要素を示すマスクである場合、ベクトル/SIMDの実行では、RAW競合を有する最初の要素を検出し、それより後の要素のための全てのビットをゼロにする。これにより、このようなベクトル化ループのための以下のアルゴリズムが導かれる。
for (i=0; i<N; i+=SIMD_WIDTH) {
gather_indices = vload (&B[i]);
scatter_indices = vload (&C[i]);
comparisons = vconflict (gather_indices, scatter_indices);
elements_left_mask = all_ones;
do{
no_raw_mask = Compute_Mask_of_Elements_w/o_RAW_Dependence (comparisons, elements_left_mask);
stop_at_first_conf_mask = kzbtz (no_raw_mask, elements_left_mask);
Gather_Compute_Scatter (gather_indices, scatter_indices, stop_at_first_conf_mask);
elements_left_mask ^= stop_at_first_conf_mask;
} while (elements_left_mask != 0);
}
レジスタ・アーキテクチャの例
図6は、本発明の一実施形態によるレジスタ・アーキテクチャ600のブロック図である。示されている実施形態には以下のものが存在する。幅が512ビットの32個のベクトル・レジスタ610−これらのレジスタはzmm0〜zmm31と呼ばれる。下位16個のzmmレジスタの下位256ビットがレジスタymm0〜16に重なる。下位16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)がレジスタxmm0〜15に重なる。
汎用レジスタ625−示されている実施形態では、メモリ・オペランドをアドレス指定するために既存のx86アドレッシング・モードと共に使用される16個の64ビット汎用レジスタが存在する。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、およびR8〜R15という名前で参照される。
MMXパック整数フラット・レジスタ・ファイル650が別名割り当てされたスカラー浮動小数点スタック・レジスタ・ファイル645(x87スタック)−示されている実施形態では、x87スタックは8要素のスタックであり、このスタックは、32/64/80ビット浮動小数点データに対してx87命令セット拡張を使用してスカラー浮動小数点演算を実行するのに使用される。一方MMXレジスタは、64ビットのパック整数データに対して演算を実行するのに使用され、MMXレジスタとXMMレジスタの間で実行されるいくつかの演算のためのオペランドを保持するためにも使用される。
本発明の代替実施形態では、幅がより広いまたは狭いレジスタを使用することもできる。さらに、本発明の代替実施形態では、より多い、より少ない、または異なるレジスタ・ファイルおよびレジスタを使用することができる。
コア・アーキテクチャ、プロセッサ、およびコンピュータ・アーキテクチャの例
プロセッサ・コアは、様々なプロセッサに、様々な目的のために、様々な方法で実装することができる。例えば、かかるコアの実装は以下を含むことができる。1)汎用計算向けの汎用インオーダ・コア、2)汎用計算向けの高性能汎用アウトオブオーダ・コア、3)主にグラフィックスおよび/または科学計算(スループット・コンピューティング)向けの専用コア。各種プロセッサの実装には以下を含むことができる。1)汎用計算向けの1つまたは複数の汎用インオーダ・コアおよび/または汎用計算向けの1つまたは複数の汎用アウトオブオーダ・コアを含んだCPU、2)主にグラフィックスおよび/または科学(スループット)向けの1つまたは複数の専用コアを含んだコプロセッサ。かかる各種プロセッサは様々なコンピュータ・システム・アーキテクチャに結びつく。この様々なコンピュータ・システム・アーキテクチャには以下を含むことができる。1)CPUとは別個のチップ上にあるコプロセッサ、2)CPUと同じパッケージにある個別ダイ上のコプロセッサ、3)CPUと同じダイ上にあるコプロセッサ(この場合、かかるコプロセッサは専用ロジック呼ばれることがある。専用ロジックには例えば、統合グラフィックスおよび/または科学(スループット)ロジックや、専用コアなどがある)、4)同一ダイ上に上述のCPU(アプリケーション・コアまたはアプリケーション・プロセッサと呼ばれることがある)と上述のコプロセッサと追加の機能を含むことができるチップ上のシステム。次にコア・アーキテクチャの例について説明し、続いてプロセッサおよびコンピュータ・アーキテクチャの例の説明をする。
コア・アーキテクチャの例
インオーダ/アウトオブオーダ・コアのブロック図
図7Aは、本発明の実施形態によるインオーダ・パイプラインの例とレジスタ・リネーミングを行うアウトオブオーダ発行/実行パイプラインの例を示すブロック図である。図7Bは、本発明の実施形態によるプロセッサに含まれる、インオーダ・アーキテクチャ・コアの例示的実施形態とレジスタ・リネーミングを行うアウトオブオーダ発行/実行アーキテクチャ・コアの例を示すブロック図である。図7A及び図7Bにおける実線のボックスはインオーダ・パイプラインおよびインオーダ・コアを示し、破線のボックスの任意追加部分はレジスタ・リネーミングを行うアウトオブオーダ発行/実行パイプラインおよびコアを示す。インオーダの態様がアウトオブオーダの態様の部分集合であるものとして、アウトオブオーダの態様について説明する。
図7Aでは、プロセッサ・パイプライン700は、フェッチ段階702、長さ復号化段階704、復号化段階706、割付け段階708、リネーミング段階710、スケジューリング(ディスパッチまたは発行としても知られている)段階712、レジスタ読み取り/メモリ読み取り段階714、実行段階716、ライト・バック/メモリ書き込み段階718、例外処理段階722、およびコミット段階724を含む。
図7Bには、実行エンジン・ユニット750に結合されたフロントエンド・ユニット730を含んだプロセッサ・コア790が示されている。実行エンジン・ユニット750とフロントエンド・ユニット730は両方とも、メモリ・ユニット770に結合されている。コア790は、縮小命令セット・コンピューティング(RISC)コア、複合命令セット・コンピューティング(CISC)コア、超長命令ワード(VLIW)コア、またはハイブリッドもしくは代替コアタイプであってよい。他の選択肢として、コア790は、例えばネットワークまたは通信コア、圧縮エンジン、コプロセッサ・コア、汎用計算グラフィックス処理装置(GPGPU)コア、グラフィックス・コアなどの、専用コアであってよい。
フロントエンド・ユニット730は、命令キャッシュ・ユニット734に結合された分岐予測ユニット732を含み、命令キャッシュ・ユニット734は命令トランスレーション・ルックアサイド・バッファ(TLB)736に結合され、命令トランスレーション・ルックアサイド・バッファ(TLB)736は命令フェッチ・ユニット738に結合され、命令フェッチ・ユニット738は復号化ユニット740に結合される。復号化ユニット740(またはデコーダ)は、命令を復号化し、出力として1つまたは複数のマイクロ・オペレーション、マイクロ・コード・エントリ・ポイント、マイクロ命令、その他の命令、またはその他の制御信号を生成することができる。これらは、元の命令から復号化されるか、その他の方法で元の命令を反映するか、元の命令から導き出される。復号化ユニット740は、様々な異なる機構を使用して実装することができる。適当な機構の例は、検索テーブル、ハードウェア実装、プログラマブル・ロジック・アレイ(PLA)、マイクロ・コード・リード・オンリー・メモリ(ROM)などを含むが、それに限定されない。一実施形態では、コア790は、特定のマクロ命令のためのマイクロ・コードを格納するマイクロ・コードROMまたはその他の媒体を含む(例えば復号化ユニット740の中や、その他の方法でフロントエンド・ユニット730の内部などに含まれる)。復号化ユニット740は、実行エンジン・ユニット750内にあるリネーム/アロケータ・ユニット752に結合される。
実行エンジン・ユニット750は、リタイアメント・ユニット754と一式の1つまたは複数のスケジューラ・ユニット756とに結合されたリネーム/アロケータ・ユニット752を含む。スケジューラ・ユニット756は、予約ステーション、中央命令ウィンドウなどを含む様々な任意の数のスケジューラを表す。スケジューラ・ユニット756は、物理レジスタ・ファイル・ユニット758に結合される。各物理レジスタ・ファイル・ユニット758は、1つまたは複数の物理レジスタ・ファイルを表し、この物理レジスタ・ファイルのうちの様々なものが、例えばスカラー整数、スカラー浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば実行される次の命令のアドレスである命令ポインタ)などの、1つまたは複数の異なるデータ・タイプを格納する。一実施形態では、物理レジスタ・ファイル・ユニット758は、ベクトル・レジスタ・ユニットおよびスカラー・レジスタ・ユニットを備える。これらのレジスタ・ユニットは、アーキテクチャのベクトル・レジスタ、ベクトル・マスク・レジスタ、および汎用レジスタを提供することができる。物理レジスタ・ファイル・ユニット758はリタイアメント・ユニット754と重なっている。これは、レジスタ・リネーミングおよびアウトオブオーダ実行を実装できる様々な方法を示すためである(例えばリオーダ・バッファおよびリタイアメント・レジスタ・ファイルを使用する、フューチャ・ファイル、ヒストリ・バッファ、およびリタイアメント・レジスタ・ファイルを使用する、レジスタ・マップおよびレジスタのプールを使用するなど)。
リタイアメント・ユニット754および物理レジスタ・ファイル・ユニット758は、実行クラスタ760に結合される。実行クラスタ760は、1つまたは複数の実行ユニット762のセットおよび1つまたは複数のメモリ・アクセス・ユニット764のセットを含む。実行ユニット762は、様々なタイプのデータ(例えば、スカラー浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して様々な操作(例えばシフト、加算、減算、乗算)を実行することができる。実施形態によっては、特定のファンクションまたはファンクション・セット専用のいくつかの実行ユニットを含むことができる一方、唯一の実行ユニットまたは、全てが全ファンクションを実行する複数の実行ユニットを含むことができる実施形態もある。スケジューラ・ユニット756、物理レジスタ・ファイル・ユニット758、および実行クラスタ760については、おそらくは複数であると示している。これは、ある特定の実施形態がある特定のタイプのデータ/オペレーションに対して個別のパイプラインを作り出すからである(そういったデータ/オペレーションとは例えば、スカラー整数パイプライン、スカラー浮動小数点/パック整数/パック浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリ・アクセス・パイプラインなど。そのそれぞれが、それ自体のスケジューラ・ユニット、物理レジスタ・ファイル・ユニット、および/または実行クラスタを有する。個別のメモリ・アクセス・パイプラインの事例では、このパイプラインの実行クラスタのみがメモリ・アクセス・ユニット(複数)764を有する特定の実施形態が実装される)。個別のパイプラインが使用される場合、これらのパイプラインの1つまたは複数がアウトオブオーダ発行/実行であり、それ以外がインオーダであってよいことも理解すべきである。
メモリ・アクセス・ユニット764のセットはメモリ・ユニット770に結合され、メモリ・ユニット770はデータTLBユニット772を含み、データTLBユニット772はデータ・キャッシュ・ユニット774に結合され、データ・キャッシュ・ユニット774はレベル2(L2)キャッシュ・ユニット776に結合される。一実施形態の例では、メモリ・アクセス・ユニット764はロード・ユニット、格納アドレス・ユニット、および格納データ・ユニットを含むことができ、そのそれぞれが、メモリ・ユニット770内におけるデータTLBユニット772に結合される。命令キャッシュ・ユニット734がさらに、メモリ・ユニット770にあるレベル2(L2)キャッシュ・ユニット776に結合される。L2キャッシュ・ユニット776は、1つまたは複数の他のレベルのキャッシュと結合され、最終的にメインメモリに結合される。
例として、レジスタ・リネーミングを行うアウトオブオーダ発行/実行コアのアーキテクチャ例が、パイプライン700を以下のように実装することができる。1)命令フェッチ738がフェッチ段階702および長さ復号化段階704を実行する。2)復号化ユニット740が復号化段階706を実行する。3)リネーム/アロケータ・ユニット752が、割付け段階708およびリネーミング段階710を実行する。4)スケジューラ・ユニット756がスケジュール段階712を実行する。5)物理レジスタ・ファイル・ユニット758およびメモリ・ユニット770が、レジスタ読み取り/メモリ読み取り段階714を実行する。実行クラスタ760が実行段階716を実行する。6)メモリ・ユニット770および物理レジスタ・ファイル・ユニット758が、ライト・バック/メモリ書き込み段階718を実行する。7)各種ユニットが例外処理段階722に関わることができる。8)リタイアメント・ユニット754および物理レジスタ・ファイル・ユニット758が、コミット段階724を実行する。
コア790は、ここで説明する命令を含む1つまたは複数の命令セットをサポートすることができる(例えば、x86命令セット(いくつかの拡張がより新しいバージョンと共に加えられている);ミップス・テクノロジーズ社(サニーベール、CA)製MIPS命令セット;ARMホールディングス(サニーベール、CA)製ARM命令セット(NEONなどの任意追加の拡張を有する))。一実施形態では、コア790は、パックデータ命令セット拡張(例えば、AVX1、AVX2、および/または前述した汎用のベクトル・フレンドリィな命令フォーマットのうちのいくつかのフォーム(U=0および/またはU=1))をサポートするためのロジックを含み、それによって、パックデータを使用して実行される多数のマルチメディア・アプリケーションで用いられる動作が可能になる。
上記コアがマルチスレッディング(オペレーションまたはスレッドからなる2個以上の並列セットを実行する)をサポートでき、様々な方法でそのマルチスレッディングを行うことができることを理解すべきである。こういった方法には、タイム・スライス・マルチスレッディング、同時マルチスレッディング(単一の物理コアが、その物理コアが同時にマルチスレッディングしているスレッドごとに論理コアを提供する)、またはそれらの組合せ(例えば、タイム・スライスしたフェッチ/復号化後、インテル(登録商標)・ハイパースレッディング・テクノロジなどで同時マルチスレッディングする)が含まれる。
レジスタ・リネーミングについてアウトオブオーダ実行の文脈で説明するが、レジスタ・リネーミングはインオーダ・アーキテクチャでも使用できることを理解すべきである。示されているプロセッサの実施形態はまた、別個の命令キャッシュ・ユニット734/データ・キャッシュ・ユニット774および共用L2キャッシュ・ユニット776を含むが、代替実施形態では、例えばレベル1(L1)内部キャッシュや複数レベルの内部キャッシュなど、命令とデータの両方に対して単一の内部キャッシュを有することができる。いくつかの実施形態では、上記システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュの組合せを含むこともできる。あるいは、キャッシュの全てが、コアおよび/またはプロセッサの外部にあってもよい。
インオーダ・コア・アーキテクチャの具体例
図8A及び図8Bは、インオーダ・コア・アーキテクチャのより具体的な例のブロック図を示す。このコアは、チップ内における複数の論理ブロック(同じタイプおよび/または異なるタイプからなるその他のコアを含む)のうちの1つであるはずである。論理ブロックは、アプリケーションに応じて、いくつかの固定機能ロジック、メモリ入出力インタフェース、およびその他必要な入出力ロジックと、高バンド幅の相互接続ネットワーク(例えばリング・ネットワーク)を介して通信する。
図8Aは、本発明の実施形態による、単一のプロセッサ・コア、ならびにそのコアのオンダイ相互接続ネットワーク802への接続と、そのコアのレベル2(L2)キャッシュのローカル・サブセット804のブロック図である。一実施形態では、命令デコーダ800が、パックデータ命令セット拡張を備えるx86命令セットをサポートする。L1キャッシュ806は、スカラーおよびベクトル・ユニットにメモリをキャッシュするための低レイテンシのアクセスを可能にする。一実施形態(設計を簡略化するための形態)では、スカラー・ユニット808およびベクトル・ユニット810が、個別レジスタ・セット(それぞれスカラー・レジスタ812、ベクトル・レジスタ814)を使用し、それらの間で転送されるデータがメモリに書き込まれ、次いでレベル1(L1)キャッシュ806から再度読み出されるが、本発明の代替実施形態は異なる手法を使用してもよい(例えば単一のレジスタ・セットを使用する、あるいは書き込み/再読み出しすることなくデータを2つのレジスタ・ファイルの間で転送することを可能にする通信パスを含むなど)。
L2キャッシュのローカル・サブセット804は、プロセッサ・コア1個につき1個の、個別のローカル・サブセットに分割されたグローバルL2キャッシュの一部分である。各プロセッサ・コアは、それ自体のL2キャッシュのローカル・サブセット804への直接アクセス・パスを有する。プロセッサ・コアが読み取ったデータは、そのL2キャッシュのサブセット804に格納され、それら自体のローカルL2キャッシュのサブセットにアクセスする他のプロセッサ・コアと並列に、素早くアクセスすることができる。プロセッサ・コアが書き込むデータは、それ自体のL2キャッシュのサブセット804に格納され、必要ならその他のサブセットからフラッシュされる。リング・ネットワークは、共用データに対するコヒーレンシを確保する。リング・ネットワークは、プロセッサ・コアやL2キャッシュ、その他の論理ブロックなどのエージェントがチップ内部で互いに通信できるように双方向になっている。各リング・データ・パスの幅は方向ごとに1012ビットになっている。
図8Bは、本発明の実施形態による図8Aにおけるプロセッサ・コアの部分拡大図である。図8Bは、L1キャッシュ804のL1データ・キャッシュ806A部分、ならびにベクトル・ユニット810およびベクトル・レジスタ814に関する詳細を含む。具体的には、ベクトル・ユニット810は、幅16のベクトル処理ユニット(VPU)(幅16の算術論理演算装置828を参照)であり、このベクトル処理ユニットは、整数、単精度浮動、および倍精度浮動命令のうちの1つまたは複数を実行する。VPUは、スウィズル・ユニット820によるレジスタ入力のスウィズル、数値変換ユニット822A〜Bによる数値変換、およびメモリ入力に上のレプリケーション・ユニット824によるレプリケーションをサポートする。
統合メモリ・コントローラおよびグラフィックスを備えるプロセッサ
図9は、本発明の実施形態に従って複数のコアを有することができ、統合メモリ・コントローラを有することができ、統合グラフィックスを有することができるプロセッサ900のブロック図である。図9の実線のボックスは、単一のコア902A、システム・エージェント910、1つまたは複数のバス・コントローラ・ユニット916のセットを備えるプロセッサ900を示し、破線のボックスの任意追加部分は、複数のコア902A〜N、システム・エージェント・ユニット910内にある1つまたは複数の統合メモリ・コントローラ・ユニット914のセット、および専用ロジック908を備える代替プロセッサ900を示す。
したがって、プロセッサ900の様々な実装は以下を含むことができる。1)専用ロジック908が統合グラフィックスおよび/または科学(スループット)ロジック(1つまたは複数のコアを含むことができる)であり、コア902A〜Nが1つまたは複数の汎用コア(例えば汎用インオーダ・コアや、汎用アウトオブオーダ・コア、それら2種類の組合せなど)であるCPU、2)コア902A〜Nが主にグラフィックスおよび/または科学(スループット)向けの多数の専用コアであるコプロセッサ、3)コア902A〜Nが多数の汎用インオーダ・コアであるコプロセッサ。したがって、プロセッサ900は、汎用プロセッサでも、コプロセッサでも、専用プロセッサでもよい。この専用プロセッサには例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックス・プロセッサ、GPGPU(汎用グラフィックス処理ユニット)、高スループットのメニー・インテグレーテッド・コア(MIC)コプロセッサ(30個以上のコアを含む)、埋込み型プロセッサなどがある。プロセッサは1つまたは複数のチップ上に実装することができる。プロセッサ900は、例えばBiCMOSやCMOS、NMOSなどのいくつかの処理技術のいずれかを使用する1つまたは複数の基板の一部分であってよく、ならびに/あるいはその1つまたは複数の基板上に実装することができる。
メモリ階層は、コア内部のキャッシュの1つまたは複数のレベル、共用キャッシュ・ユニット906のセットまたは1つまたは複数、および統合メモリ・コントローラ・ユニット914のセットに結合された外部メモリ(図示せず)を含む。共用キャッシュ・ユニット906のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)、またはその他のレベルのキャッシュなど、1つまたは複数の中間レベル・キャッシュ、最下位レベル・キャッシュ(LLC)、および/またはそれらの組合せを含むことができる。一実施形態ではリングベースの相互接続ユニット912が、統合グラフィックス・ロジック908、共用キャッシュ・ユニット906、およびシステム・エージェント・ユニット910/統合メモリ・コントローラ・ユニット914のセットを相互接続するが、代替実施形態では、かかるユニットを相互接続するための任意の数の周知の技術を使用することができる。一実施形態では、1つまたは複数のキャッシュ・ユニット906とコア902A〜Nの間で、コヒーレンシが維持される。
いくつかの実施形態では、1つまたは複数のコア902A〜Nがマルチスレッドを行うことができる。システム・エージェント910は、コア902A〜Nを調整/動作させる次のコンポーネントを含む。システム・エージェント・ユニット910は、例えばパワー・コントロール・ユニット(PCU)およびディスプレイ・ユニットを含むことができる。PCUは、コア902A〜Nおよび統合グラフィックス・ロジック908の電力状態の調整に必要なロジックおよびコンポーネントであってもよく、あるいはそれらを含んでもよい。ディスプレイ・ユニットは、1つまたは複数の外部に接続されたディスプレイを駆動するためのものである。
コア902A〜Nは、アーキテクチャ命令セットに関して同種であっても、異機種であってもよい。つまり、コア902A〜Nの2個以上が同一の命令セットを実行することができると同時に、他のコアはその命令セットのサブセットのみ、または異なる命令セットを実行することができる。
コンピュータ・アーキテクチャの例
図10〜13は、コンピュータ・アーキテクチャの例のブロック図である。以下の当技術分野で知られているその他のシステム設計および構成も適当である。つまり、デスクトップ、ラップトップ、ハンドヘルドPC、パーソナル・デジタル・アシスタント、エンジニアリング・ワークステーション、サーバ、ネットワーク・デバイス、ネットワーク・ハブ、切替器、埋込み型プロセッサ、デジタル信号プロセッサ(DSP)、グラフィックス・デバイス、ビデオ・ゲーム・デバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブル・メディア・プレーヤ、ハンドへルド・デバイス、およびその他様々な電子デバイスのためのものである。一般に、ここで開示するプロセッサおよび/またはその他の実行ロジックを組み込むことができる非常に多様なシステムまたは電子デバイスが概ね適合する。
次に図10を参照すると、本発明の一実施形態によるシステム1000のブロック図が示されている。システム1000は1つまたは複数のプロセッサ1010、1015を含むことができ、プロセッサ1010、1015はコントローラ・ハブ1020に結合される。一実施形態ではコントローラ・ハブ1020は、グラフィックス・メモリ・コントローラ・ハブ(GMCH)1090および入出力ハブ(IOH)1050(個別チップ上にあってもよい)を含む。GMCH1090は、メモリ1040およびコプロセッサ1045が結合されるメモリ・コントローラおよびグラフィックス・コントローラを含む。IOH1050は、入出力(I/O)デバイス1060をGMCH1090に結合する。あるいは、上記メモリ・コントローラとグラフィックス・コントローラの一方または両方がプロセッサ内部に統合され(ここでの説明と同様)、メモリ1040およびコプロセッサ1045は、プロセッサ1010と、IOH1050を備える単一のチップ内にあるコントローラ・ハブ1020とに直接結合される。
追加のプロセッサ1015の任意選択性が図10に破線で示されている。プロセッサ1010、1015はそれぞれ、ここで説明する処理コアの1つまたは複数を含むことができ、プロセッサ900の何れかのバージョンであってよい。
メモリ1040は、例えば、ダイナミック・ランダム・アクセス・メモリ(DRAM)、相変化メモリ(PCM)、またはその2つの組合せであってもよい。少なくとも1つの実施形態の場合、コントローラ・ハブ1020は、例えばフロントサイド・バス(FSB)や、クイック・パス相互接続(QPI)などのポイント・ツー・ポイント・インタフェース、または同様の接続1095などのマルチドロップ・バスを介してプロセッサ1010、1015と通信する。
一実施形態では、コプロセッサ1045は、例えば高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックス・プロセッサ、GPGPU、埋込み型プロセッサなどの専用プロセッサである。一実施形態では、コントローラ・ハブ1020は、統合グラフィックス・アクセラレータを含むことができる。
物理資源1010と1015とには、アーキテクチャ上の特性、マイクロ・アーキテクチャ上の特性、熱特性、電力消費特性などを含む価値評価基準の範囲に様々な差異が存在する可能性がある。
一実施形態では、プロセッサ1010は、一般的なタイプのデータ処理動作を制御する命令を実行する。その命令の内部にコプロセッサ命令を埋め込むことができる。プロセッサ1010は、取り付けられたコプロセッサ1045によって実行されるべきタイプのものである、こういったコプロセッサ命令を認識する。したがって、プロセッサ1010は、コプロセッサバスまたはその他の相互接続上に、コプロセッサ1045に向かってこれらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)を発行する。コプロセッサ1045は、受信したコプロセッサ命令を受け付け、実行する。
次に図11を参照すると、本発明の一実施形態によるシステム1100の第1のより具体的な例のブロック図が示されている。図11に示されているように、マルチプロセッサ・システム1100はポイント・ツー・ポイント相互接続システムであり、ポイント・ツー・ポイント相互接続1150を介して結合された第1のプロセッサ1170および第2のプロセッサ1180を含む。プロセッサ1170および1180はそれぞれ、プロセッサ900の何れかのバージョンであってよい。本発明の一実施形態では、プロセッサ1170および1180がそれぞれプロセッサ1010、1015であり、コプロセッサ1138がコプロセッサ1045である。別の実施形態では、プロセッサ1170および1180はそれぞれ、プロセッサ1010、コプロセッサ1045である。
統合メモリ・コントローラ(IMC)ユニット1172、1182をそれぞれ含むプロセッサ1170、1180が示されている。プロセッサ1170はまた、そのバス・コントローラ・ユニットの一部分としてポイント・ツー・ポイント(P−P)インタフェース1176および1178を含む。同様に、第2のプロセッサ1180は、P−Pインタフェース1186および1188を含む。プロセッサ1170、1180は、P−Pインタフェース回路1178、1188を使用するポイント・ツー・ポイント(P−P)インタフェース1150を介して情報を交換することができる。図11に示されているように、IMC1172および1182は、プロセッサをそれぞれのメモリ、すなわちメモリ1132、メモリ1134に結合する。これらのメモリは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部分であってよい。
プロセッサ1170、1180はそれぞれ、個々のP−Pインタフェース1152、1154を介してポイント・ツー・ポイント・インタフェース回路1176、1194、1186、1198を使用して、情報をチップセット1190と交換することができる。チップセット1190は任意選択で、高性能インタフェース1139を介してコプロセッサ1138と情報を交換することができる。一実施形態では、コプロセッサ1138は、例えば高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックス・プロセッサ、GPGPU、埋込み型プロセッサなどの専用プロセッサである。
共用キャッシュ(図示せず)をどちらか一方のプロセッサの中、または両方のプロセッサの外側に含むことができるが、この共用キャッシュは、プロセッサが低電力モードに置かれたときに、一方または両方のプロセッサのローカル・キャッシュ情報を共用キャッシュに格納できるように、P−P相互接続を介してそれらのプロセッサと接続されている。
チップセット1190は、インタフェース1196を介して第1のバス1116に結合することができる。一実施形態では、第1のバス1116は、周辺装置相互接続(PCI)バス、またはPCIエクスプレス・バスなどのバス、または別の第3世代の入出力相互接続バスであってよいが、本発明の範囲はそれに限定されない。
図11に示されているように、様々な入出力デバイス1114と、第1のバス1116を第2のバス1120に結合するバス・ブリッジ1118とを、第1のバス1116に結合することができる。一実施形態では、1つまたは複数の追加のプロセッサ1115が第1のバス1116に結合される。追加のプロセッサには例えば、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックス・アクセラレータやデジタル信号処理(DSP)ユニットなど)、フィールド・プログラマブル・ゲート・アレイ、またはその他任意のプロセッサなどがある。一実施形態では、第2のバス1120は、ロー・ピン・カウント(LPC)バスであってよい。様々なデバイスを第2のバス1120に結合することができる。第2のバス1120には、一実施形態では例えば、キーボードおよび/またはマウス1122、通信デバイス1127、および記憶ユニット1128などが含まれる。この記憶ユニット1128は、命令/コードおよびデータ1130を含むことができるディスク・ドライブまたはその他の大容量記憶装置などである。さらに、オーディオ入出力1124が場合により第2のバス1120に結合される。他のアーキテクチャも可能であることに留意されたい。例えば、図11のポイント・ツー・ポイントのアーキテクチャの代わりに、システムは、マルチドロップ・バスまたはその他のかかるアーキテクチャを実装することができる。
次に図12を参照すると、本発明の一実施形態によるシステム1200の第2のより具体的な例のブロック図が示される。図11と図12における同じ要素は同じ参照番号を有し、図12の他の態様をあいまいにすることを避けるために、図11のいくつかの態様については図12から除外した。
図12に、プロセッサ1170、1180がそれぞれ、統合メモリ/入出力制御ロジック(「CL」)1172、1182を含むことができることが示されている。したがって、CL1172、1182は、統合メモリ・コントローラ・ユニットを含み、かつ入出力制御ロジックを含む。図12に、メモリ1132、1134がCL1172、1182に結合されるだけでなく、入出力デバイス1214も制御ロジック1172、1182に結合されることが示されている。レガシー入出力デバイス1215がチップセット1190に結合される。
次に図13を参照すると、本発明の一実施形態によるSoC1300のブロック図が示されている。図9における類似の要素は同じ参照番号を有する。また、破線のボックスは、より高度なSoC上の任意選択の機能である。図13において、相互接続ユニット1302が結合されているのは、1つまたは複数のコア902A〜Nのセットおよび共用キャッシュ・ユニット906を含んだアプリケーション・プロセッサ1310と、システム・エージェント・ユニット910と、バス・コントローラ・ユニット916と、統合メモリ・コントローラ・ユニット914と、統合グラフィックス・ロジック、画像処理プロセッサ、オーディオ・プロセッサ、およびビデオプロセッサを含むことができるセットまたは1つもしくは複数のコプロセッサ1320と、スタティック・ランダム・アクセス・メモリ(SRAM)ユニット1330と、ダイレクト・メモリ・アクセス(DMA)ユニット1332と、1つまたは複数の外部ディスプレイに結合するためのディスプレイ・ユニット1340である。一実施形態では、コプロセッサ1320は、例えばネットワークまたは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、埋込み型プロセッサなどの専用プロセッサを含む。
ここで開示する機構の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはかかる実装手法の組合せに実装することができる。本発明の実施形態は、少なくとも1つのプロセッサ、記憶システム(揮発性および不揮発性メモリおよび/または記憶素子を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを備えるプログラマブル・システム上で実行するコンピュータ・プログラムまたはプログラム・コードとして実装することができる。
図11に示されているコード1130などのプログラム・コードは、ここで説明したファンクションを実行しかつ出力情報を生成する命令を、入力するために用いることができる。この出力情報は、1つまたは複数の出力デバイスに周知の形で適用することができる。この適用を行うために、処理システムには、例えばデジタル信号プロセッサ(DSP)やマイクロコントローラ、特定用途向け集積回路(ASIC)、マイクロプロセッサなどのプロセッサを有する任意のシステムが含まれる。
上記プログラム・コードは、処理システムと通信するために、高水準手続言語またはオブジェクト指向プログラミング言語に実装することができる。上記プログラム・コードは、所望ならアセンブリまたは機械言語に実装することもできる。実際、ここで説明する機構は特定のプログラミング言語に範囲は限定されない。いずれの場合も上記言語はコンパイル型言語でもインタープリタ型言語でもよい。
少なくとも1つの実施形態の1つまたは複数の態様が、プロセッサ内部で様々な論理を表現する、機械可読媒体に格納された典型的な命令によって実装することができる。この命令を機械が読み取ると、その命令によって機械はここで説明した技術を実行する論理を作り出す。このような「IPコア」と呼ばれる表現を、実際に論理を作成する作成機械またはプロセッサにロードするために、有形の機械可読媒体に格納し、様々な顧客または製造設備に供給することができる。
かかる機械可読記憶媒体は、以下の記憶媒体を含む、機械またはデバイスによって製造または形成された部材からなる非一時的な有形の仕組みを含むことができるが、これに限定されない。その記憶媒体とは、例えばハードディスクや、フロッピー(登録商標)・ディスク、光ディスク、コンパクト・ディスク読み出し専用メモリ(CD−ROM)、リライタブルのコンパクト・ディスク(CD−RW)、および光磁気ディスクを含むその他任意のタイプのディスク、読み出し専用メモリ(ROM)などの半導体デバイス、動的ランダム・アクセス・メモリ(DRAM)などのランダム・アクセス・メモリ(RAM)、静的ランダム・アクセス・メモリ(SRAM)、消去可能プログラマブル読み出し専用メモリ(EPROM)、フラッシュメモリ、電気消去可能プログラマブル読み出し専用メモリ(EEPROM)、相変化メモリ(PCM)、磁気カードまたは光カード、電子命令を格納するのに適した媒体のその他任意のタイプなどである。
したがって、本発明の実施形態はまた、命令を含んだ、または、ここで説明した構造、回路、装置、プロセッサおよび/またはシステムの特徴を定義する例えばハードウェア記述言語(HDL)などの設計データを含んだ、非一時的な有形の機械可読媒体を含む。かかる実施形態はまた、プログラム製品と呼ぶことができる。
エミュレーション(バイナリ変換、コードモーフなどを含む)
いくつかの事例では、命令をソース命令セットからターゲット命令セットに変換するために、命令コンバータを使用することができる。例えば、命令コンバータは、命令を、コアで処理する1つまたは複数の他の命令に変換(例えば静的バイナリ変換や、動的コンパイルを含む動的バイナリ変換を使用)、モーフ、エミュレート、またはその他の方法で変換することができる。この命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組合せで実装することができる。命令コンバータは、プロセッサ搭載型であっても、プロセッサ非搭載型であってもよく、あるいは部分的プロセッサ搭載型/部分的プロセッサ非搭載型であってもよい。
図14は、本発明の実施形態による、ソース命令セットにおけるバイナリ命令をターゲット命令セットにおけるバイナリ命令に変換するソフトウェア命令コンバータの用法を対比的に示すブロック図である。示されている実施形態では、命令コンバータはソフトウェア命令コンバータであるが、代替方法として、命令コンバータをソフトウェア、ファームウェア、ハードウェア、またはそれらの様々な組合せに実装してもよい。図14には、x86コンパイラ1404を使用して高級言語1402のプログラムをコンパイルして、少なくとも1つのx86命令セット・コアを備えるプロセッサ1416で本来実行できるx86バイナリコード1406を生成できることが示されている。少なくとも1つのx86命令セット・コアを備えるプロセッサ1416とは、(1)インテルx86命令セット・コアの大部分の命令セット、あるいは(2)少なくとも1つのx86命令セット・コアを備えるインテル社製プロセッサとほぼ同じ結果を得るために、少なくとも1つのx86命令セット・コアを備えるインテル社製プロセッサ上で実行することを対象としたアプリケーションまたは他のソフトウェアのオブジェクト・コード・バージョン、以上のいずれかを互換実行またはその他の方法で処理することによって、少なくとも1つのx86命令セット・コアを備えるインテル社製プロセッサとほぼ同じ機能を実行できる任意のプロセッサを示す。x86コンパイラ1404とは、少なくとも1つのx86命令セット・コアを備えるプロセッサ1416で追加のリンク処理の有無にかかわらず実行できるx86バイナリコード1406(例えばオブジェクト・コード)を生成するように動作可能なコンパイラを示す。同様に、図14は、少なくとも1つのx86命令セット・コアを備えないプロセッサ1414(例えばミップス・テクノロジーズ社(サニーベール、CA)製MIPS命令セットを実行する、かつ/またはARMホールディングス(サニーベール、CA)製ARM命令セットを実行するコアを備えるプロセッサなど)で本来実行できる代替命令セット・バイナリコード1410を生成するために、代替命令セット・コンパイラ1408を使用して高級言語1402のプログラムをコンパイルできることを示す。命令コンバータ1412は、x86バイナリコード1406を、x86命令セット・コアを備えないプロセッサ1414で本来実行できるコードに変換するために使用される。この変換されたコードは、代替命令セット・バイナリコード1410と同一である可能性はない。というのは、これができる命令コンバータは作成することが困難だからである。しかしながら、変換されたコードは全体の動作を実現する。変換されたコードは代替命令セットによる命令で構成される。したがって、命令コンバータ1412とは、エミュレーション、シミュレーションまたはその他任意の処理を介して、x86命令セットのプロセッサもしくはコアを備えないプロセッサまたはその他の電子デバイスが、x86バイナリコード1406を実行するのを可能にする、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せを示す。
200 プロセッサ
204 KZBTZ命令
205 アーキテクチャから見えるレジスタ
206 パックデータ・レジスタ
207 パックデータ動作マスク・レジスタ
208 実行ロジック
301 第1のソース書き込みマスク・レジスタ
303 第2のソース書き込みマスク・レジスタ
305 デスティネーション書き込みマスク
307 第1のソース書き込みマスク・レジスタ
309 第2のソース書き込みマスク・レジスタ
311 デスティネーション書き込みマスク・レジスタ
600 レジスタ・アーキテクチャ
610 ベクトル・レジスタ
625 汎用レジスタ
645 スカラー浮動小数点スタック・レジスタ・ファイル
650 MMXパック整数フラット・レジスタ・ファイル
700 プロセッサ・パイプライン
702 フェッチ段階
704 長さ復号化段階
706 復号化段階
708 割付け段階
710 リネーミング段階
712 スケジューリング段階
714 レジスタ読み取り/メモリ読み取り段階
716 実行段階
718 ライト・バック/メモリ書き込み段階
722 例外処理段階
724 コミット段階
730 フロントエンド・ユニット
732 分岐予測ユニット
734 命令キャッシュ・ユニット
736 命令トランスレーション・ルックアサイド・バッファ(TLB)
738 命令フェッチ・ユニット
740 復号化ユニット
750 実行エンジン・ユニット
752 リネーム/アロケータ・ユニット
754 リタイアメント・ユニット
756 スケジューラ・ユニット
758 物理レジスタ・ファイル・ユニット
760 実行クラスタ
762 実行ユニット
764 メモリ・アクセス・ユニット
770 メモリ・ユニット
772 データTLBユニット
774 データ・キャッシュ・ユニット
776 レベル2キャッシュ・ユニット
790 プロセッサ・コア
800 命令デコーダ
802 オンダイ相互接続ネットワーク
804 ローカル・サブセット
806 L1キャッシュ
808 スカラー・ユニット
810 ベクトル・ユニット
812 スカラー・レジスタ
814 ベクトル・レジスタ
820 スウィズル・ユニット
822 数値変換ユニット
824 レプリケーション・ユニット
828 算術論理演算装置
900 プロセッサ
902 コア
906 共用キャッシュ・ユニット
908 専用ロジック
910 システム・エージェント・ユニット
912 リングベースの相互接続ユニット
914 統合メモリ・コントローラ・ユニット
916 バス・コントローラ・ユニット
1000 システム
1010 プロセッサ
1015 プロセッサ
1020 コントローラ・ハブ
1040 メモリ
1045 コプロセッサ
1050 入出力ハブ(IOH)
1060 入出力デバイス
1090 グラフィックス・メモリ・コントローラ・ハブ
1095 接続
1100 マルチプロセッサ・システム
1114 入出力デバイス
1115 プロセッサ
1116 第1のバス
1118 バス・ブリッジ
1120 第2のバス
1122 キーボードおよび/またはマウス
1124 オーディオ入出力
1127 通信デバイス
1128 記憶ユニット
1130 命令/コードおよびデータ
1132 メモリ
1134 メモリ
1138 コプロセッサ
1139 高性能インタフェース
1150 ポイント・ツー・ポイント(P−P)インタフェース
1152 P−Pインタフェース
1154 P−Pインタフェース
1170 第1のプロセッサ
1172 統合メモリ・コントローラ(IMC)ユニット
1176 ポイント・ツー・ポイント・インタフェース回路
1178 P−Pインタフェース回路
1180 第2のプロセッサ
1182 統合メモリ・コントローラ(IMC)ユニット
1186 P−Pインタフェース
1188 P−Pインタフェース回路
1190 チップセット
1194 ポイント・ツー・ポイント・インタフェース回路
1196 インタフェース
1198 ポイント・ツー・ポイント・インタフェース回路
1200 システム
1214 入出力デバイス
1215 レガシー入出力デバイス
1300 SoC
1302 相互接続ユニット
1320 コプロセッサ
1310 アプリケーション・プロセッサ
1330 スタティック・ランダム・アクセス・メモリ(SRAM)ユニット
1332 ダイレクト・メモリ・アクセス(DMA)ユニット
1340 ディスプレイ・ユニット
1402 高級言語
1404 x86コンパイラ
1406 x86バイナリコード
1408 代替命令セット・コンパイラ
1410 代替命令セット・バイナリコード
1412 命令コンバータ
1414 プロセッサ
1416 プロセッサ

Claims (20)

  1. ゼロマスク・ビフォー・末尾ゼロ(KZBTZ)命令を復号化する復号化ロジックにおいて、前記KZBTZ命令が第1のソース書き込みマスク・オペランドおよびデスティネーション書き込みマスク・オペランドを含む復号化ロジックと、
    前記第1のソース書き込みマスクにおいて末尾の最下位ゼロビット・ポジションを検出し、前記デスティネーション書き込みマスクを、前記第1のソース書き込みマスクの値を有するようにセットするが、前記第1のソース書き込みマスクにおける前記末尾の最下位ゼロビット・ポジションよりも最上位ビット・ポジションに近い全てのビット・ポジションはゼロにセットされた状態になるように、前記復号化されたKZBTZ命令を実行する実行ロジックとを備える装置。
  2. 前記KZBTZ命令がさらに、第2のソース書き込みマスク・オペランドを含み、前記末尾の最下位ゼロビット・ポジションが、前記第2のソース書き込みマスク・オペランドのそれに対応するビット・ポジションが1にセットされた場合、前記第1のソース書き込みマスク・オペランドにおいてゼロにセットされる最初のビット・ポジションである、請求項1に記載の装置。
  3. 前記書き込みマスク・オペランドが専用書き込みマスク・レジスタである、請求項1または2に記載の装置。
  4. 前記専用書き込みマスク・レジスタのサイズが8または16ビットである、請求項3に記載の装置。
  5. 前記書き込みマスク・オペランドが汎用レジスタである、請求項1から4のいずれか1項に記載の装置。
  6. 前記実行ロジックが、前記第1のソース・オペランドの各ビット・ポジションを最下位から最上位まで直列に評価する、請求項1から5のいずれか1項に記載の装置。
  7. 前記ビット・ポジションの全てが何時評価完了したか判定するために、カウンタが前記実行ロジックで使用される、請求項6に記載の装置。
  8. コンピュータ・プロセッサでゼロマスク・ビフォー・末尾ゼロ(KZBTZ)命令を実行する方法であって、前記KZBTZ命令が、第1のソース書き込みマスク・オペランドおよびデスティネーション書き込みマスク・オペランドを含み、
    前記第1のソース書き込みマスクにおいて末尾の最下位ゼロビット・ポジションを検出するステップと、
    前記デスティネーション書き込みマスクを、前記第1のソース書き込みマスクの値を有するようにセットするが、前記第1のソース書き込みマスクにおける前記末尾の最下位ゼロビット・ポジションよりも最上位ビット・ポジションに近い全てのビット・ポジションはゼロにセットされた状態になるようにするステップとを含む方法。
  9. 前記KZBTZ命令がさらに、第2のソース書き込みマスク・オペランドを含み、前記末尾の最下位ゼロビット・ポジションが、前記第2のソース書き込みマスク・オペランドのそれに対応するビット・ポジションが1にセットされた場合、前記第1のソース書き込みマスク・オペランドにおいてゼロにセットされる最初のビット・ポジションである、請求項8に記載の方法。
  10. 前記書き込みマスク・オペランドが専用書き込みマスク・レジスタである、請求項8または9に記載の方法。
  11. 前記専用書き込みマスク・レジスタのサイズが8または16ビットである、請求項10に記載の方法。
  12. 前記書き込みマスク・オペランドが汎用レジスタである、請求項8から11のいずれか1項に記載の方法。
  13. 前記第1のソース書き込みマスク・オペランドの各ビット・ポジションが、最下位から最上位まで直列に評価される、請求項8から12のいずれか1項に記載の方法。
  14. 前記ビット・ポジションの全てが何時評価完了したかを、カウンタに基づいて判定する、請求項13に記載の方法。
  15. ゼロマスク・ビフォー・末尾ゼロ(KZBTZ)命令をプロセッサに実行させるコードを含んだ、プログラムであって、前記KZBTZ命令が、第1のソース書き込みマスク・オペランドおよびデスティネーション書き込みマスク・オペランドを含み、
    前記第1のソース書き込みマスクにおいて末尾の最下位ゼロビット・ポジションを検出するステップと、
    前記デスティネーション書き込みマスクを、前記第1のソース書き込みマスクの値を有するようにセットするが、前記第1のソース書き込みマスクにおける前記末尾の最下位ゼロビット・ポジションよりも最上位ビット・ポジションに近い全てのビット・ポジションはゼロにセットされた状態になるようにするステップとを前記プロセッサに実行させるプログラム。
  16. 前記KZBTZ命令がさらに、第2のソース書き込みマスク・オペランドを含み、前記末尾の最下位ゼロビット・ポジションが、前記第2のソース書き込みマスク・オペランドのそれに対応するビット・ポジションが1にセットされた場合、前記第1のソース書き込みマスク・オペランドにおいてゼロにセットされる最初のビット・ポジションである、請求項15に記載のプログラム。
  17. 前記書き込みマスク・オペランドが専用書き込みマスク・レジスタである、請求項15または16に記載のプログラム。
  18. 前記専用書き込みマスク・レジスタのサイズが8または16ビットである、請求項17に記載のプログラム。
  19. 前記書き込みマスク・オペランドが汎用レジスタである、請求項15から18のいずれか1項に記載のプログラム。
  20. 前記第1のソース書き込みマスク・オペランドの各ビット・ポジションが、最下位から最上位まで直列に評価される、請求項15から19のいずれか1項に記載のプログラム。
JP2014028431A 2013-03-15 2014-02-18 書き込みマスク・レジスタの末尾の最下位マスキング・ビットを判定するためのシステム、装置、および方法 Expired - Fee Related JP5806748B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/840,809 2013-03-15
US13/840,809 US9323531B2 (en) 2013-03-15 2013-03-15 Systems, apparatuses, and methods for determining a trailing least significant masking bit of a writemask register

Publications (3)

Publication Number Publication Date
JP2014182796A true JP2014182796A (ja) 2014-09-29
JP2014182796A5 JP2014182796A5 (ja) 2015-07-16
JP5806748B2 JP5806748B2 (ja) 2015-11-10

Family

ID=50554642

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014028431A Expired - Fee Related JP5806748B2 (ja) 2013-03-15 2014-02-18 書き込みマスク・レジスタの末尾の最下位マスキング・ビットを判定するためのシステム、装置、および方法

Country Status (7)

Country Link
US (1) US9323531B2 (ja)
JP (1) JP5806748B2 (ja)
KR (1) KR101624786B1 (ja)
CN (1) CN104049946A (ja)
BR (1) BR102014006118A2 (ja)
DE (1) DE102014003659A1 (ja)
GB (1) GB2513467B (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9354877B2 (en) * 2011-12-23 2016-05-31 Intel Corporation Systems, apparatuses, and methods for performing mask bit compression
US10387150B2 (en) 2015-06-24 2019-08-20 International Business Machines Corporation Instructions to count contiguous register elements having a specific value in a selected location
US10162603B2 (en) * 2016-09-10 2018-12-25 Sap Se Loading data for iterative evaluation through SIMD registers
WO2019005165A1 (en) 2017-06-30 2019-01-03 Intel Corporation METHOD AND APPARATUS FOR VECTORIZING INDIRECT UPDATING BUCKLES
KR101999006B1 (ko) 2017-09-11 2019-07-11 중앙대학교 산학협력단 세균성 벼흰잎마름병균의 OprXBo 단백질 및 이의 용도
GB2585202B (en) * 2019-07-01 2021-11-24 Advanced Risc Mach Ltd An apparatus and method for speculatively vectorising program code
US11853757B2 (en) * 2020-03-06 2023-12-26 Intel Corporation Vectorization of loops based on vector masks and vector count distances

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04182777A (ja) * 1990-11-16 1992-06-30 Koufu Nippon Denki Kk ベクトル処理装置
US20100042789A1 (en) * 2008-08-15 2010-02-18 Apple Inc. Check-hazard instructions for processing vectors
US20120060020A1 (en) * 2008-08-15 2012-03-08 Apple Inc. Vector index instruction for processing vectors
WO2012040545A2 (en) * 2010-09-24 2012-03-29 Intel Corporation Functional unit for vector integer multiply add instruction
WO2012040539A2 (en) * 2010-09-24 2012-03-29 Intel Corporation Functional unit for vector leading zeroes, vector trailing zeroes, vector operand 1s count and vector parity calculation
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
WO2013101223A1 (en) * 2011-12-30 2013-07-04 Intel Corporation Efficient zero-based decompression
JP2013254484A (ja) * 2012-04-02 2013-12-19 Apple Inc ベクトル分割ループの性能の向上

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5207132A (en) 1991-10-16 1993-05-04 Textron Inc. Elliptical lobed drive system
US5651121A (en) * 1992-12-18 1997-07-22 Xerox Corporation Using mask operand obtained from composite operand to perform logic operation in parallel with composite operand
US5446912A (en) 1993-09-30 1995-08-29 Intel Corporation Partial width stalls within register alias table
US7129864B2 (en) * 2004-12-31 2006-10-31 Intel Corporation Fast compact decoder for huffman codes
US7966523B2 (en) * 2008-08-21 2011-06-21 Rockwell Automation Technologies, Inc. Industrial automation and information solutions having industry specific modalities
US8972701B2 (en) * 2011-12-06 2015-03-03 Arm Limited Setting zero bits in architectural register for storing destination operand of smaller size based on corresponding zero flag attached to renamed physical register

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04182777A (ja) * 1990-11-16 1992-06-30 Koufu Nippon Denki Kk ベクトル処理装置
US20100042789A1 (en) * 2008-08-15 2010-02-18 Apple Inc. Check-hazard instructions for processing vectors
US20120060020A1 (en) * 2008-08-15 2012-03-08 Apple Inc. Vector index instruction for processing vectors
WO2012040545A2 (en) * 2010-09-24 2012-03-29 Intel Corporation Functional unit for vector integer multiply add instruction
WO2012040539A2 (en) * 2010-09-24 2012-03-29 Intel Corporation Functional unit for vector leading zeroes, vector trailing zeroes, vector operand 1s count and vector parity calculation
JP2013543173A (ja) * 2010-09-24 2013-11-28 インテル・コーポレーション ベクトル先頭ゼロ、ベクトル末尾ゼロ、ベクトルオペランド1sカウントおよびベクトルパリティ計算のための機能ユニット
JP2013543174A (ja) * 2010-09-24 2013-11-28 インテル・コーポレーション ベクトル整数乗算加算命令のための機能ユニット
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
WO2013101223A1 (en) * 2011-12-30 2013-07-04 Intel Corporation Efficient zero-based decompression
JP2013254484A (ja) * 2012-04-02 2013-12-19 Apple Inc ベクトル分割ループの性能の向上

Also Published As

Publication number Publication date
DE102014003659A1 (de) 2014-09-18
KR101624786B1 (ko) 2016-05-26
BR102014006118A2 (pt) 2015-10-20
KR20140113555A (ko) 2014-09-24
CN104049946A (zh) 2014-09-17
US20140281401A1 (en) 2014-09-18
GB2513467A (en) 2014-10-29
JP5806748B2 (ja) 2015-11-10
GB201403993D0 (en) 2014-04-23
GB2513467B (en) 2015-11-04
US9323531B2 (en) 2016-04-26

Similar Documents

Publication Publication Date Title
CN109478139B (zh) 用于共享存储器中的访问同步的装置、方法和系统
JP6207095B2 (ja) 条件付きループをベクトル化する命令及び論理
JP6466388B2 (ja) 方法及び装置
JP5806748B2 (ja) 書き込みマスク・レジスタの末尾の最下位マスキング・ビットを判定するためのシステム、装置、および方法
US10387148B2 (en) Apparatus and method to reverse and permute bits in a mask register
US9710279B2 (en) Method and apparatus for speculative vectorization
US20140089634A1 (en) Apparatus and method for detecting identical elements within a vector register
CN106030514B (zh) 用于执行采用传播的被屏蔽源元素存储指令的处理器及其方法
JP6807073B2 (ja) 高速ベクトルによる動的なメモリ競合検出
US9904548B2 (en) Instruction and logic to perform a centrifuge operation
US20150186136A1 (en) Systems, apparatuses, and methods for expand and compress
JP2018500652A (ja) マスクをマスク値のベクトルに拡張するための方法および装置
US10545757B2 (en) Instruction for determining equality of all packed data elements in a source operand
US20140189322A1 (en) Systems, Apparatuses, and Methods for Masking Usage Counting
JP2017538215A (ja) 逆分離演算を実行するための命令及びロジック
US10922080B2 (en) Systems and methods for performing vector max/min instructions that also generate index values
US9207942B2 (en) Systems, apparatuses,and methods for zeroing of bits in a data element

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20141202

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20150302

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20150401

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20150501

A524 Written submission of copy of amendment under article 19 pct

Free format text: JAPANESE INTERMEDIATE CODE: A524

Effective date: 20150602

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

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20150805

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150904

R150 Certificate of patent or registration of utility model

Ref document number: 5806748

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