JP2018503162A - スピンループジャンプを実行するための装置および方法 - Google Patents

スピンループジャンプを実行するための装置および方法 Download PDF

Info

Publication number
JP2018503162A
JP2018503162A JP2017526548A JP2017526548A JP2018503162A JP 2018503162 A JP2018503162 A JP 2018503162A JP 2017526548 A JP2017526548 A JP 2017526548A JP 2017526548 A JP2017526548 A JP 2017526548A JP 2018503162 A JP2018503162 A JP 2018503162A
Authority
JP
Japan
Prior art keywords
instruction
processor
jump
field
pause
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.)
Ceased
Application number
JP2017526548A
Other languages
English (en)
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 JP2018503162A publication Critical patent/JP2018503162A/ja
Ceased legal-status Critical Current

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/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/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30065Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
    • 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/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • 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

Abstract

スピンループジャンプを実行するための装置および方法。プロセッサの一実施形態は、条件を指定し、デスティネーション命令を識別するジャンプ・ポーズ命令を実行するためのジャンプ・ポーズ実行ロジックを備え、ジャンプ・ポーズ命令の実行に応答して、ジャンプ・ポーズ実行ロジックは、ジャンプ・ポーズ命令とデスティネーション命令との間のループがスピン待ちループを含むとのヒントを提供し、条件をテストし、ジャンプ・ポーズ実行ロジックは、条件が満たされる場合に、デスティネーション命令にジャンプする前に指定量だけ実行を遅延させる。プロセッサの第2の実施形態は、第2のソースレジスタにおけるカウンタ値をデクリメントするテスト減算命令を実行するためのテスト減算実行ロジックを備え、テスト減算実行ロジックは、第1のソースレジスタまたはメモリにおけるモニタリング値および第2のソースレジスタにおけるカウンタ値を更にテストし、テスト減算実行ロジックは、モニタリング値が終了条件を示す値を有する場合、またはカウンタ値がゼロに等しい場合に、スピン待ちループを終了させる。

Description

本発明は、概ねコンピュータプロセッサの分野に関する。より具体的には、本発明は、スピンループジャンプを実行するための方法および装置に関する。
命令セットまたは命令セットアーキテクチャ(ISA)は、ネイティブなデータタイプ、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込みおよび例外処理、ならびに外部入出力(I/O)を含むプログラミングに関連するコンピュータアーキテクチャの一部である。本明細書において「命令」という用語は、一般に、マクロ命令をデコードするプロセッサデコーダの結果であるマイクロ命令またはマイクロオプとは異なり、実行のためにプロセッサに提供される命令であるマクロ命令を指すことに留意されたい。マイクロ命令またはマイクロオプは、プロセッサ上の実行ユニットにマクロ命令に関連するロジックを実装するためのオペレーションの実行を命令するように構成され得る。
ISAは、命令セットを実装するべく用いられるプロセッサ設計技術のセットであるマイクロアーキテクチャとは区別される。異なるマイクロアーキテクチャを有するプロセッサは、共通の命令セットを共有し得る。例えば、インテル(登録商標)PENTIUM(登録商標)4プロセッサ、インテル(登録商標)Core(商標)プロセッサ、およびカリフォルニア州サニーベールにあるAdvanced Micro Devices,Incのプロセッサは、ほぼ同一のバージョンのx86命令セット(より新しいバージョンに追加されたいくつかの拡張を伴う)を実装するが、異なる内部設計を有する。例えば、ISAの同一のレジスタアーキテクチャは、専用物理レジスタ、レジスタリネームメカニズム(例えば、レジスタエイリアステーブル(RAT)、リオーダバッファ(ROB)、およびリタイアメントレジスタファイルの使用)等を用いる1または複数の動的に割り当てられる物理レジスタを含む周知技術を用いて、異なる態様で異なるマイクロアーキテクチャに実装され得る。別途指定されない限り、レジスタアーキテクチャ、レジスタファイル、およびレジスタという文言は、本明細書においてソフトウェア/プログラマに可視であるもの、および命令がレジスタを指定する態様に言及するために用いられる。区別が必要とされる場合、「論理的」、「アーキテクチャの」、または「可視のソフトウェア」という形容詞は、レジスタアーキテクチャにおけるレジスタ/ファイルを示すために用いられるが、異なる形容詞が所与のマイクロアーキテクチャ(例えば、物理レジスタ、リオーダバッファ、リタイアメントレジスタ、レジスタプール)におけるレジスタを指すために用いられる。
命令セットは、1または複数の命令フォーマットを含む。所与の命令フォーマットは、とりわけ、実行されるオペレーションおよび当該オペレーションが実行されるオペランドを指定する様々なフィールド(ビットの数、ビットの位置)を定義する。いくつかの命令フォーマットは、命令テンプレート(またはサブフォーマット)の定義により更に分類される。例えば、所与の命令フォーマットの命令テンプレートは、異なるサブセットの命令フォーマットのフィールドを有するものと定義され(含まれるフィールドは、通常は同じ順序であるが、少なくともいくつかは、より少ないフィールドが含まれているので、異なるビット位置を有する)、および/または異なる解釈をされる所与のフィールドを有するものと定義され得る。所与の命令は、所与の命令フォーマットを用いて(および定義されている場合には、当該命令フォーマットの命令テンプレートのうちの所与の1つで)表され、オペレーションおよびオペランドを指定する。命令ストリームは、命令の特定のシーケンスであり、シーケンスにおける各命令は、命令フォーマットにおける命令の発生である(定義される場合、当該命令フォーマットの命令テンプレートのうちの所与の1つ)。
本発明のより良い理解は、以下の図面と併せて以下の詳細な説明から得られ得る。
本発明の実施形態による一般的ベクトル向け命令フォーマットおよびその命令テンプレートを示すブロック図である。 本発明の実施形態による一般的ベクトル向け命令フォーマットおよびその命令テンプレートを示すブロック図である。 本発明の実施形態による、例示的な特定ベクトル向け命令フォーマットを示すブロック図である。 本発明の実施形態による、例示的な特定ベクトル向け命令フォーマットを示すブロック図である。 本発明の実施形態による、例示的な特定ベクトル向け命令フォーマットを示すブロック図である。 本発明の実施形態による、例示的な特定ベクトル向け命令フォーマットを示すブロック図である。 本発明の一実施形態によるレジスタアーキテクチャのブロック図である。 本発明の実施形態による、例示的インオーダフェッチ、デコード、リタイアパイプライン、および例示的なレジスタリネーム、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。 本発明の実施形態による、プロセッサに含まれるべきインオーダフェッチ、デコード、リタイアコアの例示的な実施形態、および例示的なレジスタリネーム、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。 オンダイ相互接続ネットワークとの接続を伴うシングルプロセッサコアのブロック図である。 本発明の実施形態による図5Aのプロセッサコアの一部の拡大図を示す。 本発明の実施形態による統合メモリコントローラおよびグラフィックスを用いるシングルコアプロセッサおよびマルチコアプロセッサのブロック図である。 本発明の一実施形態によるシステムのブロック図を示す。 本発明の実施形態による第2のシステムのブロック図を示す。 本発明の実施形態による第3のシステムのブロック図を示す。 本発明の実施形態によるシステムオンチップ(SoC)のブロック図を示す。 本発明の実施形態による、ソース命令セットのバイナリ命令を、ターゲット命令セットのバイナリ命令に変換するソフトウェア命令コンバータの使用と対比するブロック図を示す。 本発明の実施形態が実装され得る例示的なプロセッサを示す。 例示的なスピンループを示す方法を図示する。 ジャンプ・ポーズ命令の一実施形態により実行される複数のオペレーションを示す。 テスト減算命令の一実施形態による方法を示す。
以下の説明において、説明の目的のために、下記の本発明の実施形態の完全な理解を提供するべく、多数の具体的な詳細が記載される。しかし、当業者には、本発明の実施形態がこれらの具体的な詳細のいくつかを用いることなく実施され得ることが明らかであろう。本発明の実施形態の基礎となる原理を不明瞭にするのを避けるべく、他の例において、周知の構造およびデバイスがブロック図の形態で示される。
例示的なプロセッサアーキテクチャおよびデータタイプ
命令セットは、1または複数の命令フォーマットを含む。所与の命令フォーマットは、とりわけ、実行されるオペレーション(オペコード)および当該オペレーションが実行されるオペランドを指定する様々なフィールド(ビットの数、ビットの位置)を定義する。いくつかの命令フォーマットは、命令テンプレート(またはサブフォーマット)の定義により更に分類される。例えば、所与の命令フォーマットの命令テンプレートは、異なるサブセットの命令フォーマットのフィールド(含まれるフィールドは、通常は同じ順序であるが、少なくともいくつかは、より少ないフィールドが含まれているので、異なるビット位置を有する)を有するものと定義され、および/または異なる解釈をされる所与のフィールドを有するものと定義され得る。従って、ISAの各命令は、所与の命令フォーマットを用いて(および定義される場合には、当該命令フォーマットの命令テンプレートのうちの所与の1つで)表され、オペレーションおよびオペランドを指定するためのフィールドを含む。例えば、例示的なADD命令は、特定のオペコード、ならびに当該オペコードを指定するオペコードフィールドおよびオペランド(ソース1/デスティネーション、およびソース2)を選択するオペランドフィールドを含む命令フォーマットを有する。命令ストリームにおけるこのADD命令が生じることにより、特定のオペランドを選択するオペランドフィールドに特定の内容を有する。Advanced Vector Extensions(AVX)(AVX1およびAVX2)と呼ばれ、ベクトル拡張(VEX)符号化スキームを用いるSIMD拡張のセットが、リリースおよび/または公開されている(例えば、Intel(登録商標)64 and IA−32 Architectures Software Developers Manual,October 2011およびIntel(登録商標)Advanced Vector Extensions Programming Reference,June 2011を参照されたい)。
例示的な命令フォーマット
本明細書に説明される命令の実施形態は、異なるフォーマットで実施され得る。更に、例示的なシステム、アーキテクチャ、およびパイプラインが以下に詳述される。命令の実施形態は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行され得るが、詳述されるものに限定されない。
A.一般的ベクトル向け命令フォーマット
ベクトル向け命令フォーマットは、ベクトル命令に好適な命令フォーマットである。(例えば、ベクトルオペレーションに固有の一定のフィールドが存在する)。ベクトルおよびスカラオペレーションの両方がベクトル向け命令フォーマットによりサポートされる実施形態が説明されるが、代替的な実施形態は、ベクトル向け命令フォーマットによるベクトルオペレーションのみを用いる。
図1A〜図1Bは、本発明の実施形態による一般的ベクトル向け命令フォーマットおよびその命令テンプレートを示すブロック図である。図1Aは、本発明の実施形態による、一般的ベクトル向け命令フォーマット、およびそのクラスA命令テンプレートを示すブロック図である。図1Bは、本発明の実施形態による、一般的ベクトル向け命令フォーマット、およびそのクラスB命令テンプレートを示すブロック図である。具体的には、クラスAおよびクラスB命令テンプレートは、一般的ベクトル向け命令フォーマット100に対して定義され、これらの両方は、非メモリアクセス105の命令テンプレートおよびメモリアクセス120の命令テンプレートを含む。ベクトル向け命令フォーマットの文脈における一般的という用語は、いずれの特定の命令セットにも関係しない命令フォーマットを指す。
ベクトル向け命令フォーマットが、32ビット(4バイト)または64ビット(8バイト)のデータ要素幅(またはサイズ)を有する64バイトのベクトルオペランド長(またはサイズ)(従って、64バイトのベクトルは、16ダブルワードサイズの要素、または代替的に8クワッドワードサイズの要素のいずれかからなる)、16ビット(2バイト)または8ビット(1バイト)のデータ要素幅(またはサイズ)を有する64バイトのベクトルオペランド長(またはサイズ)、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、または8ビット(1バイト)のデータ要素幅(またはサイズ)を有する32バイトのベクトルオペランド長(またはサイズ)、および32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、または8ビット(1バイト)のデータ要素幅(またはサイズ)を有する16バイトのベクトルオペランド長(またはサイズ)をサポートする本発明の実施形態が説明されるが、代替的な実施形態は、より多い、より少ない、または異なるデータ要素幅(例えば、128ビット(16バイト)のデータ要素幅)を有するより多い、より少ない、および/または異なるベクトルオペランドサイズ(例えば、256バイトのベクトルオペランド)をサポートし得る。
図1AにおけるクラスA命令テンプレートは、1)非メモリアクセス105の命令テンプレート中に示される非メモリアクセス、フルラウンド制御タイプオペレーション110の命令テンプレート、および非メモリアクセス、データ変換タイプオペレーション115の命令テンプレート、ならびに2)メモリアクセス120の命令テンプレート中に示されるメモリアクセス、一時的125の命令テンプレート、およびメモリアクセス、非一時的130の命令テンプレートを含む。図1BのクラスB命令テンプレートは、1)非メモリアクセス105の命令テンプレート中に示される非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプオペレーション112の命令テンプレート、および非メモリアクセス、ライトマスク制御、VSIZEタイプオペレーション117の命令テンプレート、ならびに2)メモリアクセス120の命令テンプレート中に示されるメモリアクセス、ライトマスク制御127の命令テンプレートを含む。
一般的ベクトル向け命令フォーマット100は、図1A〜図1Bにおいて示される順序で以下に列挙される、次のフィールドを含む。
フォーマットフィールド140。このフィールドにおける特定の値(命令フォーマット識別子の値)は、ベクトル向け命令フォーマット、従って、命令ストリーム中のベクトル向け命令フォーマットにおける命令の発生を一意に識別する。従って、このフィールドは、一般的ベクトル向け命令フォーマットのみを有する命令セットに必要とされないという意味で任意選択である。
ベースオペレーションフィールド142。その内容は、異なるベースオペレーションを区別する。
レジスタインデックスフィールド144。その内容は、レジスタ内であれ、メモリ内であれ、直接に、またはアドレス生成により、ソースオペランドおよびデスティネーションオペランドの位置を指定する。これらは、PxQ(例えば、32x512、16x128、32x1024、64x1024)のレジスタファイルからN個のレジスタを選択するのに十分な数のビットを含む。一実施形態においては、Nは、最大で3つのソースおよび1つのデスティネーションレジスタであり得るが、代替的な実施形態は、より多いかまたはより少ないソースおよびデスティネーションレジスタをサポートし得る(例えば、最大で2つのソースをサポートし得、この場合、これらのソースのうちの1つは、デスティネーションとしても機能し、最大で3つのソースをサポートし得、この場合、これらのソースのうちの1つは、デスティネーションとしても機能し、最大で2つのソースおよび1つのデスティネーションをサポートし得る)。
修飾子フィールド146。その内容は、一般的ベクトル命令フォーマット中におけるメモリアクセスを指定する命令の発生とメモリアクセスを指定しない命令の発生とを、すなわち、非メモリアクセス105の命令テンプレートとメモリアクセス120の命令テンプレートを区別する。
メモリアクセスオペレーションは、メモリ階層を読み出し、および/またはこれに書き込むが(いくつかの場合には、レジスタにおける値を用いて、ソースアドレスおよび/またはデスティネーションアドレスを指定する)、非メモリアクセスオペレーションは、これを行わない(例えば、ソースおよびデスティネーションは、レジスタである)。また、一実施形態において、このフィールドは、3つの異なる態様を選択し、メモリアドレス計算を実行するが、代替的な実施形態は、より多い、より少ない、または異なる態様をサポートし、メモリアドレス計算を実行し得る。
追加オペレーションフィールド150。その内容は、ベースオペレーションに加えて、種々様々な異なるオペレーションのうちのどれが実行されるかを区別する。このフィールドは、コンテキストに固有である。本発明の一実施形態において、このフィールドは、クラスフィールド168、アルファフィールド152、およびベータフィールド154に分割される。追加オペレーションフィールド150は、オペレーションの共通グループが2、3、または4つの命令ではなく、単一の命令で実行されることを可能にする。
スケールフィールド160。その内容は、メモリアドレス生成のための(例えば、2scale*index+baseを用いるアドレス生成のための)インデックスフィールドの内容のスケーリングを可能にする。
変位フィールド162A。その内容は、メモリアドレス生成の一部として(例えば、2scale*index+base+displacementを用いるアドレス生成に)用いられる。
変位係数フィールド162B(変位係数フィールド162Bの直ぐ上に変位フィールド162Aを並置することにより、一方または他方が使用されることを示すことに留意されたい)。その内容は、アドレス生成の一部として用いられる。変位係数フィールド162Bは、メモリアクセス(N)のサイズに対して調整される変位係数を指定する。Nは、(例えば、2scale*index+base+scaled displacementを用いるアドレス生成のための)メモリアクセスにおけるバイトの数である。冗長下位ビットは、無視され、従って、変位係数フィールドの内容は、有効なアドレスを計算するときに使用される最終的変位を生成するべく、メモリオペランドの合計サイズ(N)で乗算される。Nの値は、フルオペコードフィールド174(本明細書において後述される)およびデータ操作フィールド154Cに基づいて、ランタイムでプロセッサハードウェアにより決定される。変位フィールド162Aおよび変位係数フィールド162Bは、非メモリアクセス105の命令テンプレートに用いられず、および/または異なる実施形態が1つのみまたは2つのうちいずれも実装しない場合があるという意味で任意選択である。
データ要素幅フィールド164。その内容は、(いくつかの実施形態において全ての命令に対して、他の実施形態において命令のうちいくつかのみに対して)いくつかのデータ要素幅のうちのどれが用いられるかを区別する。このフィールドは、1つのデータ要素幅のみがサポートされ、および/またはオペコードのいくつかの態様を用いて、データ要素幅がサポートされる場合には必要とされないという意味で任意選択である。
ライトマスクフィールド170。その内容は、データ要素位置ベースで、デスティネーションベクトルオペランドにおける当該データ要素位置がベースオペレーションおよび追加オペレーションの結果を反映するか否かを制御する。クラスA命令テンプレートは、マージング・ライトマスキングをサポートするが、クラスB命令テンプレートは、マージングおよびゼロライトマスキングの両方をサポートする。マージングする場合、ベクトルマスクは、デスティネーションにおける要素の任意のセットが(ベースオペレーションおよび追加オペレーションにより指定された)任意のオペレーションの実行中に更新から保護されることを可能にする。他の一実施形態では、対応するマスクビットが0を有するデスティネーションの各要素の古い値を保持する。対照的に、ゼロ書き込みする場合、ベクトルマスクは、デスティネーションにおける要素の任意のセットが(ベースオペレーションおよび追加オペレーションにより指定された)任意のオペレーションの実行中にゼロにされることを可能にする。一実施形態において、対応するマスクビットが0の値を有する場合、デスティネーションの要素は、0に設定される。この機能のサブセットは、実行されるオペレーションのベクトル長を制御する能力である(すなわち、要素のスパンは、最初のものから最後のものに変更される)。しかし、変更される要素が連続している必要はない。従って、ライトマスクフィールド170は、ロード、ストア、演算、論理等を含む部分的ベクトルオペレーションを可能にする。本発明の実施形態は、ライトマスクフィールド170の内容が、用いられるべきライトマスクを含むいくつかのライトマスクレジスタのうちの1つを選択する(従って、ライトマスクフィールド170の内容が実行されるべき当該マスキングを間接的に識別する)ものとして説明されているが、代替的な実施形態はこれに代えて、または更に、マスクライトフィールド170の内容が実行されるべきマスキングを直接に指定することを可能にする。
即値フィールド172。その内容は、即値の指定を可能にする。このフィールドは、即値をサポートしない一般的ベクトル向けフォーマットの実装において存在せず、即値を用いない命令中に存在しないという意味で任意選択である。
クラスフィールド168。その内容は、命令の異なるクラスを区別する。図1A〜図1Bを参照すると、このフィールドの内容は、クラスA命令またはクラスB命令を選択する。図1A〜図1Bにおいて、角が丸い四角形は、特定の値がフィールド内に存在することを示すべく用いられる(例えば、図1Aおよび図1Bにおけるクラスフィールド168のクラスA168AおよびクラスB168Bの各々)。
クラスAの命令テンプレート
クラスAの非メモリアクセス105の命令テンプレートの場合に、アルファフィールド152は、RSフィールド152Aとして解釈され、その内容は、異なる追加オペレーションタイプのうちのどれが実行されるかを区別するが(例えば、ラウンド152A.1およびデータ変換152A.2は、各々、非メモリアクセス、ラウンドタイプオペレーション110、および非メモリアクセス、データ変換タイプオペレーション115の命令テンプレートに対して指定される)、ベータフィールド154は、指定されたタイプのオペレーションのうちいずれが実行されるかを区別する。非メモリアクセス105の命令テンプレートにおいて、スケールフィールド160、変位フィールド162A、および変位スケールフィールド162Bは、存在しない。
非メモリアクセス命令テンプレート‐フルラウンド制御タイプオペレーション。非メモリアクセスのフルラウンド制御タイプオペレーション110の命令テンプレートにおいて、ベータフィールド154は、ラウンド制御フィールド154Aとして解釈され、その内容は、静的ラウンドを提供する。本発明の説明される実施形態において、ラウンド制御フィールド154Aは、抑圧全浮動小数点例外(SAE)フィールド156およびラウンドオペレーション制御フィールド158を含み、代替的な実施形態は、これら両方のコンセプトをサポートおよびエンコードして同一のフィールドとすることができ、またはこれらのコンセプト/フィールドのうち一方または他方のみを有し得る(例えば、ラウンドオペレーション制御フィールド158のみを有し得る)。
SAEフィールド156。その内容は、例外イベント報告を無効にするか否かを区別する。SAEフィールド156の内容が、抑圧が有効にされたことを示す場合、所与の命令は、いずれの種類の浮動小数点例外フラグも報告せず、いずれの浮動小数点例外ハンドラも立ち上げない。
ラウンドオペレーション制御フィールド158。その内容は、ラウンドオペレーション(例えば、ラウンドアップ、ラウンドダウン、ゼロへのラウンド、および近似値へのラウンド)のグループのうちのどれが実行されるべきかを区別する。このように、ラウンドオペレーション制御フィールド158は、命令ベースでラウンドモードの変更を可能にする。プロセッサがラウンドモードを指定する制御レジスタを含む本発明の一実施形態において、ラウンドオペレーション制御フィールド150の内容は、当該レジスタの値を上書きする。
非メモリアクセス命令テンプレート‐データ変換タイプオペレーション
非メモリアクセスのデータ変換タイプオペレーション115の命令テンプレートにおいて、ベータフィールド154は、データ変換フィールド154Bとして解釈され、その内容は、いくつかのデータ変換のうちのどれが実行されるかを区別する(例えば、非データ変換、スウィズル、ブロードキャスト)。
クラスAのメモリアクセス120の命令テンプレートの場合、アルファフィールド152は、エビクションヒントフィールド152Bとして解釈され、その内容は、エビクションヒントのうちのどれが用いられるかを区別するが(図1Aにおいて、一時的152B.1および非一時的152B.2は、各々、メモリアクセス、一時的125の命令テンプレート、およびメモリアクセス、非一時的130の命令テンプレートに対して指定される)、ベータフィールド154は、データ操作フィールド154Cとして解釈され、その内容は、いくつかのデータ操作オペレーション(プリミティブとしても知られる)のうちのどれが実行されるかを区別する(例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、およびデスティネーションのダウンコンバージョン)。メモリアクセス120の命令テンプレートは、スケールフィールド160を含み、変位フィールド162Aまたは変位スケールフィールド162Bを任意選択で含む。
ベクトルメモリ命令は、変換サポートを用いて、メモリからのベクトルロードおよびメモリへのベクトルストアを実行する。通常のベクトル命令の場合のように、ベクトルメモリ命令は、データ要素の様式で、メモリから/にデータを転送し、実際に転送される要素は、ライトマスクとして選択されるベクトルマスクの内容により規定される。
メモリアクセス命令テンプレート‐一時的
一時的データは、キャッシュから利益を得るのに十分なほど速やかに再利用される可能性が高いデータである。しかし、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含め、異なる態様で一時的データを実装してもよい。
メモリアクセス命令テンプレート‐非一時的
非一時的データは、レベル1のキャッシュにおけるキャッシュから利益を得るのに十分なほど速やかに再利用される可能性が低いデータであり、追い出しの優先権を与えられるべきである。しかし、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含め、異なる態様で非一時的データを実装してもよい。
クラスBの命令テンプレート
クラスBの命令テンプレートの場合、アルファフィールド152は、ライトマスク制御(Z)フィールド152Cとして解釈され、その内容は、ライトマスクフィールド170により制御されるライトマスキングがマージングであるべきか、またはセットゼロ書き込みセットであるべきかを区別する。
クラスBの非メモリアクセス105の命令テンプレートの場合、ベータフィールド154の一部は、RLフィールド157Aとして解釈され、その内容は、異なる追加オペレーションタイプのどれが実行されるかを区別するが(例えば、ラウンド157A.1およびベクトル長(VSIZE)157A.2は各々、非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプオペレーション112の命令テンプレート、および非メモリアクセス、ライトマスク制御、VSIZEタイプオペレーション117の命令テンプレートに対して指定される)、ベータフィールド154の残りは、指定されたタイプのどのオペレーションが実行されるかを区別する。非メモリアクセス105の命令テンプレートにおいて、スケールフィールド160、変位フィールド162A、および変位スケールフィールド162Bは、存在しない。
非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプオペレーション110の命令テンプレートにおいて、ベータフィールド154の残りは、ラウンドオペレーションフィールド159Aとして解釈され、例外イベント報告は、無効にされる(所与の命令は、いずれの種類の浮動小数点例外フラグも報告せず、いずれの浮動小数点例外ハンドラも立ち上げない)。
ラウンドオペレーション制御フィールド159A。ちょうどラウンドオペレーション制御フィールド158のように、その内容は、ラウンドオペレーション(例えば、ラウンドアップ、ラウンドダウン、ゼロへのラウンド、および近似値へのラウンド)のグループのうちのどれが実行されるべきかを区別する。このように、ラウンドオペレーション制御フィールド159Aは、命令ベースでラウンドモードの変更を可能にする。プロセッサがラウンドモードを指定する制御レジスタを含む本発明の一実施形態において、ラウンドオペレーション制御フィールド150の内容は、そのレジスタの値を上書きする。
非メモリアクセス、ライトマスク制御、VSIZEタイプオペレーション117の命令テンプレートにおいて、ベータフィールド154の残りは、ベクトル長フィールド159Bとして解釈され、その内容は、いくつかのデータベクトル長のうちのどれが実行されるかを区別する(例えば、128、256、または512バイト)。
クラスBのメモリアクセス120の命令テンプレートの場合、ベータフィールド154の一部は、ブロードキャストフィールド157Bとして解釈され、その内容は、ブロードキャストタイプのデータ操作オペレーションが実行されるべきか否かを区別するが、ベータフィールド154の残りは、ベクトル長フィールド159Bとして解釈される。メモリアクセス120の命令テンプレートは、スケールフィールド160を含み、変位フィールド162Aまたは変位スケールフィールド162Bを任意選択で含む。
一般的ベクトル向け命令フォーマット100に関連して、フォーマットフィールド140、ベースオペレーションフィールド142、およびデータ要素幅フィールド164を含む、フルオペコードフィールド174が示される。一実施形態として、フルオペコードフィールド174がこれらのフィールドの全てを含むものが示されているが、これら全てをサポートしない実施形態において、フルオペコードフィールド174は、これらのフィールド全てより少ないものを含む。フルオペコードフィールド174は、オペレーションコード(オペコード)を提供する。
追加オペレーションフィールド150、データ要素幅フィールド164、およびライトマスクフィールド170は、一般的ベクトル向け命令フォーマットにおける命令ベースで、これらの機能が指定されることを可能にする。
ライトマスクフィールドおよびデータ要素幅フィールドを組み合わせることで、マスクが異なるデータ要素幅に基づいて適用されることを可能にするように、型付き命令を生成する。
クラスAおよびクラスB内に見出される様々な命令テンプレートは、異なる状況において有益である。本発明のいくつかの実施形態において、異なるプロセッサまたはプロセッサ内の異なるコアは、クラスAのみ、クラスBのみ、または両方のクラスをサポートし得る。例えば、汎用演算用の高性能汎用アウトオブオーダコアは、クラスBのみをサポートし得、主にグラフィックスおよび/またはサイエンティフィック(スループット)演算用のコアは、クラスAのみをサポートし得、両方用のコアは、両方をサポートし得る(勿論、両方のクラスの全てのテンプレートおよび命令ではないが、両方のクラスのテンプレートおよび命令のいくつかのミックスを有するコアは、本発明の範囲内である)。また、シングルプロセッサは、複数のコアを含み得、これらの全てが同じクラスをサポートし、または異なるコアが異なるクラスをサポートする。例えば、別個のグラフィックスコアおよび汎用コアを有するプロセッサにおいて、主にグラフィックスおよび/またはサイエンティフィック演算用のグラフィックスコアのうちの1つは、クラスAのみをサポートし得るが、汎用コアのうちの1または複数は、クラスBのみをサポートする汎用演算用のアウトオブオーダ実行およびレジスタリネームを用いる高性能汎用コアであり得る。別個のグラフィックスコアを有しない別のプロセッサは、クラスAおよびクラスBの両方をサポートする、もう1つの汎用インオーダまたはアウトオブオーダのコアを含み得る。勿論、本発明の異なる実施形態において、あるクラスの機能は、他のクラスにおいても実装され得る。高水準言語で書かれたプログラムは、1)実行のためにターゲットプロセッサによりサポートされるクラスの命令のみを有する形式、または2)全てのクラスの命令の異なる組み合わせを用いて書かれた代替的なルーチンを有し、現在、コードを実行しているプロセッサによりサポートされる命令に基づいて、実行するルーチンを選択する制御フローコードを有する形式を含む、種々様々な実行可能な形式にされる(例えば、実行時コンパイルまたは静的コンパイル)。
B.例示的な特定ベクトル向け命令フォーマット
図2A〜図2Dは、本発明の実施形態による例示的な特定ベクトル向け命令フォーマットを示すブロック図である。図2A〜図2Dは、フィールドの位置、サイズ、解釈、および順序、ならびにそれらのフィールドのいくつかに対する値を指定するという意味で具体的な特定ベクトル向け命令フォーマット200を示す。特定ベクトル向け命令フォーマット200は、x86命令セットを拡張するために用いられ得、従ってフィールドのうちのいくつかは、既存のx86命令セットおよびその拡張(例えば、AVX)において用いられるものと類似するか、または同じである。このフォーマットは、拡張された既存のx86命令セットのプレフィックスエンコードフィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、および即値フィールドとの整合性を保つ。図2A〜図2Dがフィールドにマッピングされる図1A〜図1Bのフィールドが示される。
本発明の実施形態は、例示目的で一般的ベクトル向け命令フォーマット100の文脈において、特定ベクトル向け命令フォーマット200を参照して説明されるが、本発明は、特許請求される場合を除き、特定ベクトル向け命令フォーマット200に限定されないことを理解されたい。例えば、一般的ベクトル向け命令フォーマット100は、様々なフィールドのために考えられる様々なサイズを企図するが、特定ベクトル向け命令フォーマット200は、特定サイズのフィールドを有するものとして示される。具体的な例として、データ要素幅フィールド164は、特定ベクトル向け命令フォーマット200における1つのビットフィールドとして示されるが、本発明は、そのようには限定されない(すなわち、一般的ベクトル向け命令フォーマット100は、他のサイズのデータ要素幅フィールド164を企図する)。
一般的ベクトル向け命令フォーマット100は、図2Aにおいて示される順序で以下に列挙される、次のフィールドを含む。
EVEXプレフィックス(バイト0〜3)202。4バイト形式でエンコードされる。
フォーマットフィールド140(EVEXバイト0、ビット[7:0])。最初のバイト(EVEXバイト0)は、フォーマットフィールド140であり、0x62を含む(本発明の一実施形態において、ベクトル向け命令フォーマットを区別するべく用いられる一意な値)。
第2〜第4のバイト(EVEXバイト1〜3)は、特定の能力を提供するいくつかのビットフィールドを含む。
REXフィールド205(EVEXバイト1、ビット[7−5])は、セットEVEX.Rビットフィールド(EVEXバイト1、ビット[7]−R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]−X)、およびEVEXバイト1、ビット[5]−B)セットからなる。EVEX.R、EVEX.X、およびEVEX.Bのビットフィールドは、対応するVEXビットフィールドと同一の機能性を提供し、1の補数形式を用いてエンコードされる。すなわち、ZMM0は、1111Bとしてエンコードされ、ZMM15は、0000Bとしてエンコードされる。命令の他のフィールドは、当技術分野で既知のレジスタインデックスの下位の3つのビット(rrr、xxx、およびbbb)をエンコードし、従って、Rrrr、Xxxx、およびBbbbは、EVEX.R、EVEX.X、およびEVEX.Bを加えることにより形成され得る。
REX'フィールド110。これはREX'フィールド110の第1の部分であり、拡張された32個のレジスタセットの上位の16個または下位の16個のいずれかをエンコードするために用いられるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]−R')である。本発明の一実施形態において、このビットは、以下に示される他のものと共に、(周知のx86の32ビットモードで)BOUND命令から区別するべく、ビット反転フォーマットで格納する。BOUND命令のリアルオペコードバイトは62であるが、MOD R/Mフィールド(下記)にはMODフィールドにおける11の値を受け付けない。本発明の代替的な実施形態は、これおよび以下に示される他のビットを反転フォーマットで格納しない。1の値は、下位の16個のレジスタをエンコードするべく用いられる。換言すると、R'Rrrrは、EVEX.R'、EVEX.R、および他のフィールドの他のRRRを組み合わせることにより形成される。
オペコードマップフィールド215(EVEXバイト1、ビット[3:0]−mmmm)。その内容は、暗黙に示される先頭オペコードバイト(0F、0F38、または0F3)をエンコードする。
データ要素幅フィールド164(EVEXバイト2、ビット[7]−W)は、EVEX.Wという表記により表される。EVEX.Wは、データタイプの粒度(サイズ)(32ビットのデータ要素または64ビットのデータ要素のいずれか)を定義するべく用いられる。
EVEX.vvvv220(EVEXバイト2、ビット[6:3]−vvvv)。EVEX.vvvvの役割は、以下を含み得る。1)EVEX.vvvvは、反転(1の補数)形式で指定された第1のソースレジスタオペランドをエンコードし、2またはそれより多いソースオペランドを用いる命令に対して有効である。2)EVEX.vvvvは、一定の複数のベクトルシフトに対して1の補数形式で指定されたデスティネーションレジスタオペランドをエンコードする。または3)EVEX.vvvvは、いずれのオペランドもエンコードせず、フィールドは予約され、1111bを含むはずである。従って、EVEX.vvvvフィールド220は、反転(1の補数)形式で格納された第1のソースレジスタ指定子の4つの下位ビットをエンコードする。命令に応じて、指定子サイズを32個のレジスタに拡張するべく、追加の異なるEVEXビットフィールドが用いられる。
EVEX.U168クラスフィールド(EVEXバイト2、ビット[2]−U)。EVEX.U=0である場合、クラスAまたはEVEX.U0を示す。EVEX.U=1である場合、クラスBまたはEVEX.U1を示す。
プレフィックスエンコードフィールド225(EVEXバイト2、ビット[1:0]−pp)は、ベースオペレーションフィールドのために追加ビットを提供する。EVEXプレフィックスフォーマットでレガシSSE命令のためのサポートを提供することに加えて、これは、SIMDプレフィックスを圧縮するという利益も有する(EVEXプレフィックスは、SIMDプレフィックスを表すバイトを必要とするのではなく、2ビットのみを必要とする)。一実施形態において、レガシフォーマットおよびEVEXプレフィックスフォーマットの両方でSIMDプレフィックス(66H、F2H、F3H)を用いるレガシSSE命令をサポートするべく、これらのレガシSIMDプレフィックスは、SIMDプレフィックスエンコードフィールドへとエンコードされ、(PLAが変更なしにセットレガシフォーマットおよびこれらのレガシ命令のEVEXフォーマットの両方セットを実行し得るように)ランタイム時にデコーダのPLAに提供される前にレガシSIMDプレフィックスへとセット拡張セットされる。より新しい命令は、EVEXプレフィックスエンコードフィールドの内容をオペコード拡張として直接に用い得るが、ある実施形態は、整合のために同様に拡張されるが、これらのレガシSIMDプレフィックスにより指定される異なる意味を可能にする。代替的な実施形態は、2ビットのSIMDプレフィックスエンコードをサポートするようにPLAを再設計し得、従って拡張を必要としない。
アルファフィールド152(EVEXバイト3、ビット[7]−EH。EVEX.EH、EVEX.rs、EVEX.RL、EVEX.ライトマスク制御、およびEVEX.Nとしても知られる。αでも示される)。上記のように、このフィールドは、コンテキストに固有である。
ベータフィールド154(EVEXバイト3、ビット[6:4]−SSS、EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られる。βββでも示される)。上記のように、このフィールドは、コンテキストに固有である。
REX'フィールド110。これは、REX'フィールドの残りであり、拡張された32個のレジスタセットの上位の16個または下位の16個をエンコードするべく用いられ得るEVEX.V'ビットフィールドのいずれかである(EVEXバイト3、ビット[3]−V')。このビットは、ビット反転フォーマットで格納される。1の値は、下位の16個のレジスタをエンコードするべく用いられる。換言すると、V'VVVVは、EVEX.V'、EVEX.vvvvを組み合わせることにより形成される。
ライトマスクフィールド170(EVEXバイト3、ビット[2:0]−kkk)。その内容は、上記のようにライトマスクレジスタにおけるレジスタのインデックスを指定する。本発明の一実施形態において、特定の値EVEX.kkk=000は、特定の命令のために非ライトマスクが用いられることを暗に示す、特別な動作を有する(これは、全ての1に対するハードワイヤされたライトマスクの使用、またはマスキングハードウェアを迂回するハードウェアの使用を含む、様々な態様で実装され得る)。
リアルオペコードフィールド230(バイト4)は、オペコードバイトとしても知られる。オペコードの一部は、このフィールド内に指定される。
MOD R/Mフィールド240(バイト5)は、MODフィールド242、Regフィールド244、およびR/Mフィールド246を含む。上記のように、MODフィールド242の内容は、メモリアクセスオペレーションおよび非メモリアクセスオペレーションを区別する。Regフィールド244の役割は、2つの状況に要約され得る。すなわち、デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードし、またはオペコード拡張として扱われ、任意の命令オペランドをエンコードするためには用いられない。R/Mフィールド246の役割は、メモリアドレスを参照する命令オペランドをエンコードし、またはデスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかをエンコードすることを含み得る。
スケール、インデックス、ベース(SIB)バイト(バイト6)。上記のように、スケールフィールド150の内容は、メモリアドレス生成に用いられる。SIB.xxx254およびSIB.bbb256。これらのフィールドの内容は、レジスタインデックスXxxxおよびBbbbに関連して既に言及された。
変位フィールド162A(バイト7〜10)。MODフィールド242が10を含む場合、バイト7〜10は、変位フィールド162Aであり、これはレガシ32ビット変位(disp32)と同様に機能し、バイト粒度で機能する。
変位係数フィールド162B(バイト7)。MODフィールド242が01を含む場合、バイト7は、変位係数フィールド162Bである。このフィールドの位置は、バイト粒度で機能するレガシx86命令セットの8ビット変位(disp8)のものと同じである。disp8は、符号拡張されるので、−128〜127バイトのオフセットのみをアドレス指定し得る。64バイトのキャッシュラインに関しては、disp8は、4つの本当に有用な値である−128、−64、0、および64のみに設定され得る8ビットを用いる。多くの場合に、より広いレンジが必要とされるので、disp32が用いられる。しかし、disp32は、4バイトを必要とする。disp8およびdisp32とは対照的に、変位係数フィールド162Bは、disp8の再解釈である。変位係数フィールド162Bを用いる場合、実際の変位は、メモリオペランドアクセスのサイズ(N)で乗算される変位係数フィールドの内容により決定される。このタイプの変位は、disp8*Nと称される。これにより、平均命令長(単一バイトだが、はるかに広いレンジの変位に用いられる)を小さくする。そのような圧縮された変位は、有効な変位がメモリアクセスの粒度の倍数であり、従って、アドレスオフセットの冗長下位ビットは、エンコードされる必要がないという前提に基づく。換言すると、変位係数フィールド162Bは、レガシx86命令セットの8ビット変位に置き換わる。従って、disp8がdisp8*Nにオーバーロードされることのみを例外として、変位係数フィールド162Bは、x86命令セットの8ビット変位と同じ態様でエンコードされる(従って、ModRM/SIBエンコードルールに変更はない)。換言すると、エンコードルールまたはエンコードの長さに変更はないが、(バイト的アドレスオフセットを得るべく、メモリオペランドのサイズにより変位を調節する必要がある)ハードウェアによる変位値の解釈のみには変更がある。
即値フィールド172は、上記のように動作する。
フルオペコードフィールド
図2Bは、本発明の一実施形態による、フルオペコードフィールド174を構成する特定ベクトル向け命令フォーマット200のフィールドを示すブロック図である。具体的には、フルオペコードフィールド174は、フォーマットフィールド140、ベースオペレーションフィールド142、およびデータ要素幅(W)フィールド164を含む。ベースオペレーションフィールド142は、プレフィックスエンコードフィールド225、オペコードマップフィールド215、およびリアルオペコードフィールド230を含む。
レジスタインデックスフィールド
図2Cは、本発明の一実施形態による、レジスタインデックスフィールド144を構成する特定ベクトル向け命令フォーマット200のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド144は、REXフィールド205、REX'フィールド210、MODR/M.regフィールド244、MODR/M.r/mフィールド246、VVVVフィールド220、xxxフィールド254、およびbbbフィールド256を含む。
追加オペレーションフィールド
図2Dは、本発明の一実施形態による、追加オペレーションフィールド150を構成する特定ベクトル向け命令フォーマット200のフィールドを示すブロック図である。クラス(U)フィールド168が0を含む場合、EVEX.U0(クラスA168A)を意味する。1を含む場合、EVEX.U1(クラスB168B)を意味する。U=0、かつMODフィールド242が11を含む場合(非メモリアクセスオペレーションを意味する)、アルファフィールド152(EVEXバイト3、ビット[7]−EH)は、RSフィールド152Aとして解釈される。RSフィールド152Aが1(ラウンド152A.1)を含む場合、ベータフィールド154(EVEXバイト3、ビット[6:4]‐SSS)は、ラウンド制御フィールド154Aとして解釈される。ラウンド制御フィールド154Aは、1ビットのSAEフィールド156および2ビットのラウンドオペレーションフィールド158を含む。RSフィールド152Aが0(データ変換152A.2)を含む場合、ベータフィールド154(EVEXバイト3、ビット[6:4]‐SSS)は、3ビットのデータ変換フィールド154Bとして解釈される。U=0であり、かつMODフィールド242が00、01、または10を含む場合(メモリアクセスオペレーションを意味する)、アルファフィールド152(EVEXバイト3、ビット[7]‐EH)は、エビクションヒント(EH)フィールド152Bとして解釈され、ベータフィールド154(EVEXバイト3、ビット[6:4]‐SSS)は、3ビットのデータ操作フィールド154Cとして解釈される。
U=1である場合、アルファフィールド152(EVEXバイト3、ビット[7]−EH)は、ライトマスク制御(Z)フィールド152Cとして解釈される。U=1であり、かつMODフィールド242が11を含む場合(非メモリアクセスオペレーションを意味する)、ベータフィールド154(EVEXバイト3、ビット[4]−S)の一部は、RLフィールド157Aとして解釈される。1(ラウンド157A.1)を含む場合、ベータフィールド154(EVEXバイト3、ビット[6−5]‐S2−1)の残りは、ラウンドオペレーションフィールド159Aとして解釈されるが、RLフィールド157Aが0(VSIZE157.A2)を含む場合、ベータフィールド154(EVEXバイト3、ビット[6‐5]‐S2−1)の残りは、ベクトル長フィールド159B(EVEXバイト3、ビット[6‐5]‐L1−0)として解釈される。U=1であり、MODフィールド242が00、01、または10を含む場合(メモリアクセスオペレーションを意味する)、ベータフィールド154(EVEXバイト3、ビット[6:4]−SSS)は、ベクトル長フィールド159B(EVEXバイト3、ビット[6‐5]‐L1−0)およびブロードキャストフィールド157B(EVEXバイト3、ビット[4]‐B)として解釈される。
C.例示的なレジスタアーキテクチャ
図3は、本発明の一実施形態による、レジスタアーキテクチャ300のブロック図である。示される実施形態において、512ビット幅の32個のベクトルレジスタ310が存在する。これらのレジスタは、zmm0〜zmm31として参照される。下位の16個のzmmレジスタの下位の256ビットは、レジスタymm0〜15上にオーバーレイされる。下位の16個のzmmレジスタの下位の128ビット(ymmレジスタの下位の128ビット)は、レジスタxmm0〜15上にオーバーレイされる。以下の表に示されるように、特定ベクトル向け命令フォーマット200は、これらのオーバーレイされたレジスタファイルで動作する。
Figure 2018503162
換言すると、ベクトル長フィールド159Bは、最大長、および1もしくは複数の他のより短い長さのうちから選択され、そのような各々のより短い長さは、先述の長さの半分の長さである。ベクトル長フィールド159Bを用いない命令テンプレートは、最大ベクトル長で動作する。更に、一実施形態において、特定ベクトル向け命令フォーマット200のクラスB命令テンプレートは、パックドもしくはスカラ単精度/倍精度浮動小数点データおよびパックドもしくはスカラ整数データで動作する。スカラオペレーションは、zmm/ymm/xmmレジスタにおける最下位のデータ要素位置で実行されるオペレーションである。より上位のデータ要素位置は、命令前と同じままであるか、または実施形態に応じてゼロにされる。
ライトマスクレジスタ315。示される実施形態において、8つのライトマスクレジスタ(k0〜k7)が存在し、各々は64ビットのサイズである。代替的な実施形態において、ライトマスクレジスタ315は16ビットのサイズである。上記のように、本発明の一実施形態において、ベクトルマスクレジスタk0は、ライトマスクとして使用され得ない。通常、k0を示すエンコードがライトマスクに用いられる場合、これは、0xFFFFのハードワイヤされたライトマスクを選択し、その命令に対するライトマスキングを実質的に無効にする。
汎用レジスタ325。示される実施形態において、メモリオペランドをアドレス指定する既存のx86のアドレス指定モードと共に用いられる16個の64ビット汎用レジスタが存在する。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、およびR8〜R15の名称により参照される。
スカラ浮動小数点スタックレジスタファイル(x87スタック)345上に、MMXパックド整数フラットレジスタファイル350がエイリアスされ、示される実施形態において、x87スタックは、x87命令セット拡張を用いて、32/64/80ビット浮動小数点データにスカラ浮動小数点オペレーションを実行するべく用いられる8つの要素のスタックである。MMXレジスタは、64ビットパックド整数データにオペレーションを実行すると共に、MMXレジスタとXMMレジスタとの間で実行されるいくつかのオペレーションのためのオペランドを保持するべく用いられる。
本発明の代替的な実施形態は、より広いか、またはより狭いレジスタを用い得る。更に、本発明の代替的な実施形態は、より多いか、より少ないか、または異なるレジスタファイルおよびレジスタを用い得る。
D.例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ
プロセッサコアは、異なる態様で異なる目的のために異なるプロセッサに実装され得る。例えば、そのようなコアの実装は、1)汎用演算用の汎用インオーダコア、2)汎用演算用の高性能汎用アウトオブオーダコア、3)主にグラフィックスおよび/またはサイエンティフィック(スループット)演算用の専用コアを含み得る。異なるプロセッサの実装は、1)汎用演算用の1もしくは複数の汎用インオーダコア、および/または汎用演算用の1もしくは複数の汎用アウトオブオーダコアを含むCPU、ならびに2)主にグラフィックスおよび/またはサイエンティフィック(スループット)用の1もしくは複数の専用コアを含むコプロセッサを含み得る。そのような異なるプロセッサは、異なるコンピュータシステムアーキテクチャをもたらし、異なるコンピュータシステムアーキテクチャは、1)CPUの別個のチップ上のコプロセッサ、2)CPUと同一のパッケージにおける別個のダイ上のコプロセッサ、3)CPUと同一のダイ上のコプロセッサ(この場合、そのようなコプロセッサは、場合によっては統合グラフィックスおよび/またはサイエンティフィック(スループット)ロジック等の専用ロジック、または専用コアとして言及される)、および4)同一のダイ上に、説明されたCPU(場合によっては、アプリケーションコアもしくはアプリケーションプロセッサとして言及される)、上記のコプロセッサ、および追加の機能性を含み得るシステムオンチップを含み得る。例示的なコアアーキテクチャが次に説明され、その次に例示的なプロセッサおよびコンピュータアーキテクチャの説明が続く。
図4Aは、本発明の実施形態による、例示的なインオーダパイプラインおよび例示的なレジスタリネーム、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図4Bは、本発明の実施形態によるプロセッサに含まれる、インオーダアーキテクチャコアの例示的な実施形態および例示的なレジスタリネーム、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。図4A〜図4Bにおける実線ボックスは、インオーダパイプラインおよびインオーダコアを示すが、破線ボックスの任意選択の追加は、レジスタリネーム、アウトオブオーダ発行/実行のパイプラインおよびコアを示す。インオーダの態様がアウトオブオーダの態様のサブセットであることを考慮して、アウトオブオーダの態様が説明される。
図4Aにおいて、プロセッサパイプライン400は、フェッチステージ402、長さデコードステージ404、デコードステージ406、アロケーションステージ408、リネームステージ410、スケジューリング(ディスパッチまたは発行としても知られる)ステージ412、レジスタ読み出し/メモリ読み出しステージ414、実行ステージ416、ライトバック/メモリライトステージ418、例外処理ステージ422、およびコミットステージ424を含む。
図4Bは、実行エンジンユニット450に結合されたフロントエンドユニット430を含むプロセッサコア490を示し、これら両方はメモリユニット470に結合されている。コア490は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは代替的なコアタイプであり得る。なおも別の選択肢として、コア490は、例えば、ネットワークコアもしくは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(GPGPU)コア、グラフィックスコア等のような専用コアであってもよい。
フロントエンドユニット430は、命令キャッシュユニット434に結合された分岐予測ユニット432を含み、命令キャッシュユニット434は、命令トランスレーションルックアサイドバッファ(TLB)436に結合され、TLB436は、命令フェッチユニット438に結合され、命令フェッチユニット438は、デコードユニット440に結合される。デコードユニット440(もしくはデコーダ)は、命令をデコードして、出力として1または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または元の命令からデコードされ、もしくは別の方法で元の命令を反映し、もしくは元の命令から派生した他の制御信号を生成し得る。デコードユニット440は、様々な異なるメカニズムを用いて実装され得る。好適なメカニズムの例としては、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)等が挙げられるが、これらに限定されない。一実施形態において、コア490は、特定のマクロ命令用のマイクロコードを(例えば、デコードユニット440内、またはそうでなければフロントエンドユニット430内に)格納するマイクロコードROMまたは他のメディアを含む。デコードユニット440は、実行エンジンユニット450におけるリネーム/アロケータユニット452に結合される。
実行エンジンユニット450は、リタイアメントユニット454に結合されたリネーム/アロケータユニット452と、1または複数のスケジューラユニット456のセットとを含む。スケジューラユニット456は、リザベーションステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット456は、物理レジスタファイルユニット458に結合される。物理レジスタファイルユニット458の各々は、1または複数の物理レジスタファイルを表し、これらの異なるものが、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、状態(例えば、実行されるべき次の命令のアドレスである命令ポインタ)等のような1または複数の異なるデータタイプを格納する。一実施形態において、物理レジスタファイルユニット458は、ベクトルレジスタユニット、ライトマスクレジスタユニット、およびスカラレジスタユニットを備える。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供し得る。(例えば、リオーダバッファおよびリタイアメントレジスタファイルを用い、フューチャーファイル、履歴バッファ、およびリタイアメントレジスタファイルを用い、レジスタマップおよびレジスタのプールを用いる等して)レジスタリネームおよびアウトオブオーダ実行が実装され得る様々な態様を示すべく、物理レジスタファイルユニット458は、リタイアメントユニット454と重ね合わされている。リタイアメントユニット454および物理レジスタファイルユニット458は、実行クラスタ460に結合される。実行クラスタ460は、1または複数の実行ユニット462のセット、および1または複数のメモリアクセスユニット464のセットを含む。実行ユニット462は、様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して様々なオペレーション(例えば、シフト、加算、減算、乗算)を実行し得る。いくつかの実施形態は、特定の関数または関数のセットに専用のいくつかの実行ユニットを含み得るが、他の実施形態は、1つの実行ユニットのみ、または全てがあらゆる関数を実行する複数の実行ユニットを含み得る。スケジューラユニット456、物理レジスタファイルユニット458、および実行クラスタ460は、場合によっては複数のものとして示される。なぜなら、ある実施形態は、一定のタイプのデータ/オペレーションのための別個のパイプライン(例えば、各々が自身のスケジューラユニット、物理レジスタファイルユニット、および/または実行クラスタを有し、別個のメモリアクセスパイプラインの場合に、このパイプラインの実行クラスタのみがメモリアクセスユニット464を有する一定の実施形態が実装される)スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプラインを生成するからである。また、別個のパイプラインが用いられる場合に、これらのパイプラインのうちの1または複数は、アウトオブオーダ発行/実行であり、残りはインオーダであり得ることを理解されたい。
メモリアクセスユニット464のセットは、メモリユニット470に結合される。メモリユニット470は、データキャッシュユニット474に結合されたデータTLBユニット472を含み、データキャッシュユニット474は、レベル2(L2)キャッシュユニット476に結合される。例示的な一実施形態において、メモリアクセスユニット464は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含み得、これらの各々は、メモリユニット470内のデータTLBユニット472に結合される。命令キャッシュユニット434は、メモリユニット470内のレベル2(L2)キャッシュユニット476に更に結合される。L2キャッシュユニット476は、1つまたは複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
例として、例示的なレジスタリネーム、アウトオブオーダ発行/実行コアアーキテクチャは、パイプライン400を以下のように実装し得る。1)命令フェッチ438は、フェッチステージ402および長さデコードステージ404を実行する。2)デコードユニット440はデコードステージ406を実行する。3)リネーム/アロケータユニット452は、アロケーションステージ408およびリネームステージ410を実行する。4)スケジューラユニット456は、スケジューリングステージ412を実行する。5)物理レジスタファイルユニット458およびメモリユニット470は、レジスタ読み出し/メモリ読み出しステージ414を実行し、実行クラスタ460は、実行ステージ416を実行する。6)メモリユニット470および物理レジスタファイルユニット458は、ライトバック/メモリライトステージ418を実行する。7)様々なユニットは、例外処理ステージ422に関与してもよい。8)リタイアメントユニット454および物理レジスタファイルユニット458は、コミットステージ424を実行する。
コア490は、本明細書において説明される命令を含む、1または複数の命令セット(例えば、x86命令セット(より新しいバージョンを追加された、いくつかの拡張を伴う)、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARM HoldingsのARM命令セット(NEON等の任意選択の追加拡張を伴う)をサポートし得る。一実施形態において、コア490は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするためのロジックを含み、それにより、多くのマルチメディアアプリケーションにより用いられるオペレーションが、パックドデータを用いて実行されることを可能にする。
コアは、(オペレーションまたはスレッドの2またはそれより多い並列セットを実行する)マルチスレッディングをサポートし得、時分割マルチスレッディング、同時マルチスレッディング(物理コアが同時にマルチスレッディングするスレッドの各々のための論理コアを、単一の物理コアが提供する)、またはこれらの組み合わせ(例えば、時分割フェッチおよびデコードを行い、その後にインテル(登録商標)ハイパースレッディング技術等の同時マルチスレッディングを行う)を含む様々な態様でこれを実行し得ることを理解されたい。
レジスタリネームは、アウトオブオーダ実行の文脈で説明されているが、レジスタリネームは、インオーダアーキテクチャにおいて用いられ得ることを理解されたい。プロセッサの示される実施形態は、別個の命令およびデータキャッシュユニット434/474、ならびに共有L2キャッシュユニット476も含むが、代替的な実施形態は、例えば、レベル1(L1)内部キャッシュまたは複数のレベルの内部キャッシュ等の命令およびデータの両方に対する単一の内部キャッシュを有し得る。いくつかの実施形態において、システムは、内部キャッシュ、ならびにコアおよび/またはプロセッサの外部にある外部キャッシュの組み合わせを含み得る。あるいは、キャッシュの全てがコアおよび/またはプロセッサの外部にあってもよい。
図5A〜図5Bは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示し、このコアは、チップにおける(同じタイプの他のコアおよび/または異なるタイプを含む)いくつかの論理ブロックのうちの1つである。アプリケーションに応じて、論理ブロックは、ある固定機能ロジック、メモリI/Oインタフェース、および他の必要なI/Oロジックを用いる高帯域幅の相互接続ネットワーク(例えば、リングネットワーク)を介して通信する。
図5Aは、本発明の実施形態によるシングルプロセッサコアのブロック図であり、オンダイ相互接続ネットワーク502への接続に加え、レベル2(L2キャッシュ504のローカルサブセットを有する。一実施形態において、命令デコーダ500は、パックドデータ命令セット拡張を用いるx86命令セットをサポートする。L1キャッシュ506は、スカラユニットおよびベクトルユニット内のキャッシュメモリへの低レイテンシアクセスを可能にする。一実施形態において(設計を簡略化するべく)、スカラユニット508およびベクトルユニット510は、別個のレジスタセット(各々、スカラレジスタ512およびベクトルレジスタ514)を用い、それらの間で転送されるデータは、メモリに書き込まれ、次にレベル1(L1)キャッシュ506からリードバックされるが、本発明の代替的な実施形態は、異なるアプローチ(例えば、単一のレジスタセットを用い、またはライトバックおよびリードバックされることなく、2つのレジスタファイルの間で、データが転送されることを可能にする通信パスを含む)を用い得る。
L2キャッシュ504のローカルサブセットは、プロセッサコア毎に1つずつ、別個のローカルサブセットに分割される全体的なL2キャッシュの一部である。各プロセッサコアは、L2キャッシュ504の自身のローカルサブセットへの直接のアクセス経路を有する。プロセッサコアにより読み出されたデータは、そのL2キャッシュサブセット504に格納され、他のプロセッサコアが自身のローカルL2キャッシュサブセットにアクセスするのと並列して迅速にアクセスされ得る。プロセッサコアにより書き込まれたデータは、自身のL2キャッシュサブセット504に格納され、必要であれば他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは、双方向であり、プロセッサコア、L2キャッシュ、および他の論理ブロック等のエージェントがチップ内で互いに通信することを可能にする。各リングのデータパスは、1方向毎に1012ビット幅である。
図5Bは、本発明の実施形態による図5Aのプロセッサコアの一部の拡大図である。図5Bは、L1キャッシュ504のL1データキャッシュ506A部分、ならびにベクトルユニット510およびベクトルレジスタ514に関する更なる詳細を含む。具体的には、ベクトルユニット510は、16ワイドのベクトル処理ユニット(VPU)(16ワイドのALU528を参照)であり、これは整数命令、単精度浮動小数点命令、および倍精度浮動小数点命令のうちの1または複数を実行する。VPUは、スウィズルユニット520によるレジスタ入力のスウィズル、数値変換ユニット522A〜Bによる数値変換、およびメモリ入力時のレプリケーションユニット524によるレプリケーションをサポートする。ライトマスクレジスタ526は、結果として生じるベクトル書き込みを予測(predicating)することを可能にする。
図6は、本発明の実施形態による、2つ以上のコアを有し得、統合メモリコントローラを有し得、統合グラフィックスを有し得るプロセッサ600のブロック図である。図6の実線ボックスは、シングルコア602A、システムエージェント610、1または複数のバスコントローラユニット616のセットを有するプロセッサ600を示すが、破線ボックスの任意選択の追加は、複数のコア602A〜N、システムエージェントユニット610における1または複数の統合メモリコントローラユニット614のセット、および専用ロジック608を有する代替的なプロセッサ600を示す。
従って、プロセッサ600の異なる実装は、1)統合グラフィックスおよび/またはサイエンティフィック(スループット)ロジック(1または複数のコアを含み得る)である専用ロジック608、および1または複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、2つの組み合わせ)であるコア602A〜Nを用いるCPU、2)主にグラフィックスおよび/またはサイエンティフィック(スループット)用の多数の専用コアであるコア602A〜Nを有するコプロセッサ、ならびに3)多数の汎用インオーダコアであるコア602A〜Nを用いるコプロセッサを含み得る。従って、プロセッサ600は、例えば、ネットワークプロセッサもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、(30またはそれより多いコアを含む)高スループット多集積コア(MIC)コプロセッサ、エンベデッドプロセッサ等のような汎用プロセッサ、コプロセッサもしくは専用プロセッサであってもよい。プロセッサは、1または複数のチップ上に実装され得る。プロセッサ600は、1または複数の基板の一部であり得、および/または例えば、BiCMOS、CMOS、またはNMOS等のいくつかの処理技術のいずれかを用いてこれらの基板上に実装され得る。
メモリ階層は、コア内の1または複数のレベルのキャッシュ、1セットまたは1もしくは複数の共有キャッシュユニット606、および統合メモリコントローラユニット614のセットに結合された外部メモリ(図示せず)を含む。共有キャッシュユニット606のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)等の1または複数の中間レベルのキャッシュ、または他のレベルのキャッシュ、ラストレベルキャッシュ(LLC)、および/またはこれらの組み合わせを含み得る。一実施形態において、リングベースの相互接続ユニット612は、統合グラフィックスロジック608、共有キャッシュユニット606のセット、およびシステムエージェントユニット610/統合メモリコントローラユニット614を相互接続し、代替的な実施形態は、そのようなユニットを相互接続するための任意の数の周知の技術を用い得る。一実施形態において、コヒーレンシは、1または複数のキャッシュユニット606とコア602A〜Nとの間で保持される。
いくつかの実施形態において、コア602A〜Nのうちの1または複数は、マルチスレッディングすることができる。システムエージェント610は、コア602A〜Nを調整および動作させるそれらのコンポーネントを含む。システムエージェントユニット610は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含み得る。PCUは、コア602A〜Nおよび統合グラフィックスロジック608の電力状態を調整するのに必要とされるロジックおよびコンポーネントであるか、またはこれらを含み得る。ディスプレイユニットは、1または複数の外部接続ディスプレイを駆動するためのものである。
コア602A〜Nは、アーキテクチャ命令セットの観点からは同種または異種であり得る。すなわち、コア602A〜Nのうちの2またはそれより多くのものは、同じ命令セットを実行することができる場合があるが、他のものは、当該命令セットまたは異なる命令セットのサブセットのみを実行することができる場合がある。
図7〜図10は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、情報携帯端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、エンベデッドプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスの技術分野で既知の他のシステム設計および構成も好適である。一般に、本明細書において開示されるプロセッサおよび/または他の実行ロジックを組み込むことができる多種多様なシステムまたは電子デバイスが、概ね好適である。
ここで図7を参照すると、本発明の一実施形態によるシステム700のブロック図が示される。システム700は、1または複数のプロセッサ710、715を含み得、これらは、コントローラハブ720に結合される。一実施形態において、コントローラハブ720は、グラフィックスメモリコントローラハブ(GMCH)790および入出力ハブ(IOH)750(別個のチップ上にあり得る)を含む。GMCH790は、メモリコントローラおよびグラフィックスコントローラを含み、これらにメモリ740およびコプロセッサ745が結合される。IOH750は、入出力(I/O)デバイス760をGMCH790に結合する。あるいは、メモリおよびグラフィックスコントローラの一方または両方が(本明細書に説明される)プロセッサ内に集積され、メモリ740およびコプロセッサ745は、プロセッサ710と、IOH750を有する単一のチップのコントローラハブ720とに直接に結合される。
追加のプロセッサ715の任意選択の性質が図7に破線を用いて示されている。各プロセッサ710、715は、本明細書に説明される処理コアのうちの1または複数を含み得、プロセッサ600のいくつかのバージョンであり得る。
メモリ740は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、またはこれら2つの組み合わせであってもよい。少なくとも一実施形態においては、コントローラハブ720は、フロントサイドバス(FSB)等のマルチドロップバス、QuickPath相互接続(QPI)等のポイントツーポイントインタフェース、または類似の接続795を介してプロセッサ710、715と通信する。
一実施形態において、コプロセッサ745は、例えば、高スループットMICプロセッサ、ネットワークプロセッサもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、エンベデッドプロセッサ等のような専用プロセッサである。一実施形態において、コントローラハブ720は、統合グラフィックスアクセラレータを含み得る。
物理リソース710と物理リソース715との間には、アーキテクチャ、マイクロアーキテクチャ、熱、電力消費の特性等を含む幅広い価値基準に関して様々な違いが存在し得る。
一実施形態において、プロセッサ710は、一般なタイプのデータ処理オペレーションを制御する命令を実行する。コプロセッサ命令は、命令中に埋め込まれ得る。プロセッサ710は、取り付けられたコプロセッサ745により実行されるべきタイプとしてこれらのコプロセッサ命令を認識する。従って、プロセッサ710は、コプロセッサバスまたは他の相互接続においてこれらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)をコプロセッサ745に発する。コプロセッサ745は、受信したコプロセッサ命令を受け取って実行する。
ここで図8を参照すると、本発明の実施形態による第1のより具体的な例示的システム800のブロック図が示される。図8に示されるように、マルチプロセッサシステム800はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続850を介して結合される第1のプロセッサ870および第2のプロセッサ880を含む。プロセッサ870および880の各々は、プロセッサ600のいくつかのバージョンであり得る。本発明の一実施形態において、プロセッサ870および880は各々、プロセッサ710および715であるが、コプロセッサ838は、コプロセッサ745である。別の実施形態において、プロセッサ870および880は各々、プロセッサ710およびコプロセッサ745である。
統合メモリコントローラ(IMC)ユニット872および882を各々含むプロセッサ870および880が示される。プロセッサ870は、そのバスコントローラユニットの一部としてポイントツーポイント(P‐P)インタフェース876および878も含む。同様に、第2のプロセッサ880は、P‐Pインタフェース886および888を含む。プロセッサ870、880は、P‐Pインタフェース回路878、888を用いて、ポイントツーポイント(P‐P)インタフェース850を介して情報を交換し得る。図8に示されるように、IMC872および882は、プロセッサを各メモリ、すなわち、各プロセッサにローカルに取り付けられたメインメモリの一部であり得るメモリ832およびメモリ834に結合する。
プロセッサ870、880は各々、ポイントツーポイントインタフェース回路876、894、886、898を用い、個々のP‐Pインタフェース852、854を介してチップセット890と情報を交換し得る。任意選択で、チップセット890は、高性能インタフェース839を介してコプロセッサ838と情報を交換し得る。一実施形態において、コプロセッサ838は、例えば、高スループットMICプロセッサ、ネットワークプロセッサもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、エンベデッドプロセッサ等のような専用プロセッサである。
共有キャッシュ(図示せず)は、どちらかのプロセッサに含まれ、または両方のプロセッサの外部にあり得るが、プロセッサが低電力モードにされると、どちらかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得るように、P‐P相互接続を介してプロセッサとなおも接続され得る。
チップセット890は、インタフェース896を介して第1のバス816に結合され得る。一実施形態において、第1のバス816は、周辺構成要素相互接続(PCI)バス、またはPCI Expressバス等のバス、または別の第3世代I/O相互接続バスであり得るが、本発明の範囲はそのように限定されない。
図8に示されるように、様々なI/Oデバイス814が、第1のバス816を第2のバス820に結合するバスブリッジ818と共に、第1のバス816に結合され得る。一実施形態において、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックスアクセラレータまたはデジタル信号処理(DSP)ユニット等)、フィールドプログラマブルゲートアレイ、またはその他のプロセッサ等、1または複数の追加のプロセッサ815は、第1のバス816に結合される。一実施形態において、第2のバス820は、低ピンカウント(LPC)バスであり得る。様々なデバイスは、一実施形態において、例えば、キーボードおよび/またはマウス822、通信デバイス827、ならびに複数の命令/コードおよびデータ830を含み得るディスクドライブもしくは他の大容量ストレージデバイス等のストレージユニット828を含む第2のバス820に結合され得る。更に、オーディオI/O824は、第2のバス820に結合され得る。他のアーキテクチャが可能であることに留意されたい。例えば、図8のポイントツーポイントアーキテクチャに代えて、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装し得る。
ここで図9を参照すると、本発明の実施形態による第2のより具体的な例示的システム900のブロック図を示す。図8および図9の同一の要素は、同一の参照番号を有し、図9の他の態様を不明瞭にするのを避けるべく、図8の特定の態様は、図9から省略されている。
図9は、プロセッサ870、880が統合メモリおよびI/O制御ロジック(「CL」)872および882を各々含み得ることを示す。従って、CL872、882は、統合メモリコントローラユニットを含み、I/O制御ロジックを含む。図9は、メモリ832、834がCL872、882に結合されていることのみならず、I/Oデバイス914も制御ロジック872、882に結合されていることを示す。レガシI/Oデバイス915は、チップセット890に結合される。
ここで図10を参照すると、本発明の一実施形態によるSoC1000のブロック図が示される。図6における類似の要素は、同一の参照番号を有する。また、破線ボックスは、より高度なSoCの任意選択の特徴である。図10において、相互接続ユニット1002は、1もしくは複数のコア602A〜Nおよび共有キャッシュユニット606のセットを含むアプリケーションプロセッサ1010、システムエージェントユニット610、バスコントローラユニット616、統合メモリコントローラユニット614、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、およびビデオプロセッサを含み得る1もしくは複数のコプロセッサ1020のセット、スタティックランダムアクセスメモリ(SRAM)ユニット1030、ダイレクトメモリアクセス(DMA)ユニット1032、および1または複数の外部ディスプレイを結合するディスプレイユニット1040に結合される。一実施形態において、コプロセッサ1020は、例えば、ネットワークプロセッサもしくは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、エンベデッドプロセッサ等のような専用プロセッサを含む。
本明細書に開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装アプローチの組み合わせで実装され得る。本発明の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性および不揮発性メモリ、ならびに/またはストレージ要素を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを有するプログラマブルシステム上で実行するコンピュータプログラムまたはプログラムコードとして実装され得る。
図8に示されるコード830等のプログラムコードは、本明細書に説明される機能を実行して出力情報を生成するべく、入力命令に適用され得る。出力情報は、既知の様式で1または複数の出力デバイスに適用され得る。本願の目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサ等のプロセッサを有する任意のシステムを含む。
プログラムコードは、高水準手続き型プログラミング言語またはオブジェクト指向プログラミング言語で実装され、処理システムと通信し得る。所望であれば、プログラムコードは、アセンブリ言語または機械語でも実装され得る。実際には、本明細書に説明されるメカニズムは、範囲においていずれの特定のプログラミング言語にも限定されない。いずれの場合においても、言語は、コンパイル型言語またはインタープリタ型言語であってもよい。
少なくとも一実施形態の1または複数の態様は、プロセッサ内の様々なロジックを表す、機械可読媒体上に格納された代表的命令により実装され得、命令は、機械により読み出されると、当該機械に本明細書に説明される技術を実行するためのロジックを生成させる。「IPコア」として知られるそのような表現は、有形機械可読媒体上に格納され、様々な顧客または製造設備に供給され、ロジックまたはプロセッサを実際に作成する製造機械にロードされ得る。
そのような機械可読ストレージ媒体としては、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD‐ROM)、書き換え可能コンパクトディスク(CD‐RW)、および光磁気ディスク等、その他のタイプのディスクを含むストレージ媒体、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)等のランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、および相変化メモリ(PCM)等の半導体デバイス、磁気もしくは光カード、または電子命令を格納するのに好適なその他のタイプの媒体を含む、機械またはデバイスにより製造または形成される、非一時的で有形な構成の物品が挙げられ得るが、これらに限定されない。
従って、本発明の実施形態は、命令を含み、または本明細書に説明される構造体、回路、装置、プロセッサ、および/またはシステム機能を定義するハードウェア記述言語(HDL)等の設計データを含む非一時的有形機械可読媒体も含む。そのような実施形態は、プログラム製品と称され得る。
いくつかの場合に、命令コンバータは、ソース命令セットからターゲット命令セットへと命令を変換するべく用いられ得る。例えば、命令コンバータは、(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて)命令を、コアにより処理されるべき1または複数の他の命令に翻訳し、モーフィングし、エミュレートし、または別の方法で変換し得る。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装され得る。命令コンバータは、プロセッサにあり、プロセッサから離れ、またはプロセッサ上の一部であり、プロセッサから離れた一部であり得る。
図11は、本発明の実施形態による、ソース命令セットのバイナリ命令を、ターゲット命令セットのバイナリ命令に変換するソフトウェア命令コンバータの使用と対比するブロック図である。示された実施形態において、命令コンバータは、ソフトウェア命令コンバータであるが、あるいは、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装され得る。図11は、高水準言語1102によるプログラムが、少なくとも1つのx86命令セットコア1116を有するプロセッサによりネイティブに実行され得るx86バイナリコード1106を生成するべく、x86コンパイラ1104を用いてコンパイルされ得ることを示す。少なくとも1つのx86命令セットコア1116を有するプロセッサは、少なくとも1つのx86命令セットコアを用いるインテル(登録商標)プロセッサと実質的に同一の結果を実現するべく、(1)インテル(登録商標)x86命令セットコアの命令セットの実質的部分、または(2)少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサ上で起動することを目的とする、オブジェクトコードバージョンのアプリケーションまたは他のソフトウェアを互換的に実行し、または別の方法で処理することにより、少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサと実質的に同一の機能を実行し得る任意のプロセッサを表す。x86コンパイラ1104は、x86バイナリコード1106(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。x86バイナリコード1106は、追加のリンク処理を用いるか、または用いることなく少なくとも1つのx86命令セットコア1116を有するプロセッサにおいて実行され得る。同様に、図11は、高水準言語1102によるプログラムが、少なくとも1つのx86命令セットコア1114を有しないプロセッサ(例えば、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行し、および/またはカリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行するコアを有するプロセッサ)によりネイティブに実行され得る代替的な命令セットバイナリコード1110を生成するべく、代替的な命令セットコンパイラ1108を用いてコンパイルされ得ることを示す。命令コンバータ1112は、x86バイナリコード1106を、x86命令セットコア1114を有しないプロセッサによりネイティブに実行され得るコードに変換するべく用いられる。この変換済みコードは、代替的な命令セットバイナリコード1110と同じである可能性が低い。なぜなら、これが可能な命令コンバータは、作成することが困難だからである。しかし、変換済みコードは、一般的なオペレーションを実現し、代替的な命令セットの命令から構成される。従って、命令コンバータ1112は、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表し、これらは、エミュレーション、シミュレーション、またはその他の処理により、x86命令セットプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスがx86バイナリコード1106を実行することを可能にする。
スピンループジャンプを実装するための方法および装置
下記の本発明の実施形態は、スピン待ちループにおける命令の全体としての数を低減する。具体的には、本発明の一実施形態は、ジャンプ・ポーズ命令JPAUSE(cc)DSTを含み、これはループがスピン待ちであり、(例えば、条件コード(cc)値に基づいて)条件が満たされた場合に、(特定の遅延後に)デスティネーション命令(DST)にジャンプすることをヒントする。一実施形態において、テスト減算命令TESTSUB MEM/REG1,REG2は、ソースとしてモニタリング値(メモリ位置またはレジスタ)およびカウンタ(レジスタ)を受け取り、カウンタを1だけ減らし、モニタリング値をテストし、ゼロ値のカウンタをテストする。後述されるように、これら2つの新たな命令の両方が、スピン待ちループに必要とされる命令の全体としての数を減らすべく用いられる。
図12に示されるように、本発明の実施形態が実装され得る例示的なプロセッサ1255は、ジャンプ・ポーズ命令をデコードするためのジャンプ・ポーズ(JPAUSE)デコードロジック1231と、テスト減算命令をデコードするためのテスト減算(TESTSUB)デコードロジック1232とを有するデコーダ1230を備える。デコード済みジャンプ・ポーズ命令を実行するためのジャンプ・ポーズ(JPAUSE)実行ロジック1241と、デコード済みテスト減算命令を実行するためのテスト減算(TESTSUB)実行ロジック1242とを有する実行ロジック1240も示されている。
例示的なプロセッサの更なる詳細がここで説明される。しかし、本発明の基礎となる原理は、いずれの特定のタイプのプロセッサアーキテクチャにも限定されないことに留意されたい。
示されるプロセッサアーキテクチャは、汎用レジスタ(GPR)1205のセット、ベクトルレジスタ1206のセット、およびマスクレジスタ1207のセットを含む。一実施形態において、複数のベクトルデータ要素は、2個の256ビット値、4個の128ビット値、8個の64ビット値、16個の32ビット値等を格納するための512ビット幅を有し得る各ベクトルレジスタ1206にセットパックセットされる。しかし、本発明の基礎となる原理は、ベクトルデータのいずれの特定のサイズ/タイプにも限定されない。一実施形態において、マスクレジスタ1207は、(例えば、上記のマスクレジスタk0〜k7として実装された)ベクトルレジスタ1206内に格納された値にビットマスキングオペレーションを実行するために用いられる8個の64ビットオペランドマスクレジスタを含む。しかし、本発明の基礎となる原理は、いずれの特定のマスクレジスタのサイズ/タイプにも限定されない。
シングルプロセッサコア(「コア0」)の詳細は、簡略化するために図12に示される。しかし、図12に示される各コアは、コア0と同じセットのロジックを有し得ることが理解されよう。例えば、各コアは、指定されたキャッシュ管理ポリシに従って命令およびデータをキャッシュするための専用レベル1(L1)キャッシュ1212およびレベル2(L2)キャッシュ1211を含み得る。L1キャッシュ1212は、命令を格納するための別個の命令キャッシュ1220と、データを格納するための別個のデータキャッシュ1221とを含む。様々なプロセッサキャッシュに格納された命令およびデータは、固定サイズ(例えば、64バイト、128バイト、512バイトの長さ)であり得るキャッシュラインの粒度で管理される。この例示的な実施形態の各コアは、メインメモリ1200および/または共有レベル3(L3)キャッシュ1216から命令をフェッチするための命令フェッチユニット1210と、命令をデコードする(例えば、プログラム命令をマイクロオペレーションまたは「マイクロオプ」にデコードする)ためのデコードユニット1220と、命令を実行するための実行ユニット1240と、命令をリタイアして結果をライトバックするためのライトバックユニット1250とを有する。
命令フェッチユニット1210は、メモリ1200(またはキャッシュのうちの1つ)からフェッチされるべき次の命令のアドレスを格納するための次の命令ポインタ1203と、最近用いられた仮想・物理命令アドレスのマップを格納してアドレス変換の速度を向上させるための命令トランスレーションルックアサイドバッファ(ITLB)1204と、命令分岐アドレスを推論的に予測するための分岐予測ユニット1202と、分岐アドレスおよびターゲットアドレスを格納するための分岐ターゲットバッファ(BTB)1201とを含む、様々な周知のコンポーネントを含む。フェッチされると、命令は次に、デコードユニット1230、実行ユニット1240、およびライトバックユニット1250を含む命令パイプラインの残りのステージにストリーミングされる。これらのユニットの各々の構造および機能は、当業者により良く理解されており、本発明の異なる実施形態の関連する態様を不明瞭にするのを避けるべく、ここでは詳細に説明されない。
例示的なスピン待ちループが図13に示されている。1301において、(例えば、指定されたメモリ位置に格納される)モニタリング値が終了フラグ値と比較される。等しい場合、処理は1305で終了する。等しくない場合、ループカウンタは1302でデクリメントされる。ルックカウンタがゼロに達したか否かが1303で判断され、処理は1305で終了する。そうでない場合、PAUSE命令が1304で実行され、スピン待ちループの性能を向上させるプロセッサにヒントを提供する。一実施形態において、PAUSE命令は、Section 11.4.4.4 of Intel(登録商標)64 and IA−32 Architectures Software Developer's Manual(Sept 2014)において説明されるバージョンを備える。
以下は、スピン待ちループにPAUSE命令を用いる例示的な命令シーケンスである。
Figure 2018503162
ここで、セットシーケンスセットは、[mem]にあるモニタリング値がexit_flagに等しいときに抜ける。シーケンスはまた、1を減算するオペレーション(sub rex,1)がカウンタ値0をもたらした場合に終了する。そうでなければ、PAUSE命令が実行されて、処理は、スピンループの始めに再びジャンプする。
言及されたように、本発明の実施形態は、2つの新たな命令を含み、これらのタイプのスピン待ちループにおける命令の全体としての数を減らす。一実施形態において、当該命令に関連する条件コード(cc)で指定された条件が満たされ、この命令とデスティネーション命令との間のループがスピン待ちループであるとのヒントを提供した場合、JPAUSE(cc)DST命令は、ハードウェアにより指定された遅延後にプログラム制御をデスティネーション(DST)命令に転送する。一実施形態においては、条件が満たされなくても遅延が生じない。
以下の例は、JPAUSE(cc)DSTが本発明の一実施形態によりどのように実装され得るかを示し、I_MPI_SPIN_COUNT回、繰り替えされるスピンループを想定する。
Figure 2018503162
上記の例において、JPAUSENZ SPIN LOOPは、RCXに非ゼロの値が存在するか否かをテストする「非ゼロ」の条件コードを用いる。そうである場合、JPAUSENZ SPIN LOOPは、SPIN LOOPの始め(すなわち、cmp[mem],flag)へのジャンプを生じさせる。条件が満たされない場合(すなわち、ゼロ値)、遅延は生じず、ループは終了する。従って、PAUSE命令を用いる上記の例と同じ結果が実現されるが、より少ない命令が実行される。
図14は、ジャンプ・ポーズ命令の一実施形態により実行される複数のオペレーションを示す。1400において、ジャンプ・ポーズ命令がデコードされ、および/または実行される。1401において、(例えば、PAUSE命令と類似の態様で)ジャンプ・ポーズ命令とデスティネーション命令との間のループがスピン待ちループを含むことを示すべく、ヒントがプロセッサに提供される。条件コード(cc)により指定された条件が満たされるか否かが1403で判断されると、指定された遅延が実装され、その次にデスティネーション命令へのジャンプが続く。例えば、上記のコードにおいて、jpausenzは、指定された期間遅延し、次にスピンループの始め(cmp [mem],flag)にジャンプする。条件が満たされない場合、処理は1405で終了する。
テスト減算命令は、TESTSUB MEM/REG1,REG2の形式を取り得、これはモニタリング値をメモリ位置(MEM)またはレジスタ(REG1)からの第1のソースとして受けとり、カウンタを第2のソース(REG2)として受け取る。一実施形態において、テスト減算命令は、カウンタを1だけデクリメントし、モニタリング値およびゼロ値のカウンタをテストする。
以下の例は、テスト減算命令がジャンプ・ポーズ命令について上記で示されたプログラムコードにどのように追加され得るかを示す。
Figure 2018503162
このように、上記の例において、TESTSUB RAX,RCXは、RCXにおけるカウンタ値を1だけデクリメントし、RAXにおけるモニタリング値(例えば、セットExit Flagセット)をテストし、終了するか否かを判断すると共に、ゼロ値のカウンタもテストする。図15は、テスト減算命令の一実施形態による方法を示す。1500で、テスト減算命令がデコードされ、および/または実行される。1501において、第2のソースレジスタにおけるカウンタ値(例えば、REG2)が1だけデクリメントされる。1502で、モニタリング値がテストされる。一実施形態において、これは、モニタリング値が指定値(例えば0、または指定されたセット終了フラグ値セット)に等しいか否かを判断することにより単純に行われる。更に、カウンタ値は、ゼロ値についてテストされる。
カウンタ値がゼロであるか否か、および/またはモニタリング値が指定された終了値に等しいか否かが1503で判断され、次に1505で処理は終了する。そうでない場合、スピンループにおける次の命令(または他の命令シーケンス)が実行される(例えば、上記で提供された例におけるジャンプ・ポーズ命令等)。
以下の例は、テスト減算命令およびジャンプ・ポーズ命令の両方を用いる、上記のプログラムコードシーケンスに対する別の変更形態を提供する。
Figure 2018503162
このシーケンスは、メモリ位置[mem]における値をモニタリングして0の値を待つときに用いられ得、セットこれが一般的な場合であるセット。従って、これらのパラメータを用いると、2つの命令のみが必要とされ、実行時間を著しく低減し、セット実行可能ファイルのサイズセットを低減し、アプリケーションサイズを低減し、および/またはコードの可読性を向上させる。
上記の明細書において、本発明の実施形態は、その特定の例示的な実施形態を参照して説明されている。しかし、添付の特許請求の範囲に記載される本発明のより広い趣旨および範囲を逸脱することなく、様々な修正および変更がなされ得ることは明らかであろう。従って、明細書および図面は、限定的意味ではなく、例示的意味で顧慮されるものである。
本発明の実施形態は、上記の様々な段階を含み得る。段階は、汎用または専用プロセッサに段階を実行させるべく用いられ得る機械実行可能命令で実施され得る。あるいは、これらの段階は、段階を実行するためのハードワイヤされたロジックを含む特定のハードウェアコンポーネントにより、またはプログラミングされたコンピュータコンポーネントおよびカスタムハードウェアコンポーネントの任意の組み合わせにより、実行され得る。
本明細書において説明されるように、命令は、特定のオペレーションを実行するよう構成され、または予め定められた機能または非一時的コンピュータ可読媒体で実施されるメモリに格納されたソフトウェア命令を有する特定用途向け集積回路(ASIC)等のハードウェアの特定の構成を指し得る。従って、図面に示される技術は、1または複数の電子デバイス(例えば、終端局およびネットワーク要素等)上に格納され、実行されるコードおよびデータを用いて実装され得る。そのような電子デバイスは、非一時的コンピュータ機械可読ストレージ媒体(例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、リードオンリメモリ、フラッシュメモリデバイス、相変化メモリ)および一時的コンピュータ機械可読通信媒体(例えば、電気的、光、音響、もしくは搬送波、赤外線信号、デジタル信号等の他の形態の伝搬信号)等のコンピュータ機械可読媒体を用いてコードおよびデータを格納し、(内部でおよび/またはネットワークを介する他の電子デバイスと)通信する。更に、そのような電子デバイスは通常、1もしくは複数のストレージデバイス(非一時的機械可読ストレージ媒体)、ユーザ入出力デバイス(例えば、キーボード、タッチスクリーン、および/またはディスプレイ)、ならびにネットワーク接続等、1もしくは複数の他のコンポーネントに結合された1もしくは複数のプロセッサのセットを含む。プロセッサおよび他のコンポーネントのセットの結合は通常、1または複数のバスおよびブリッジ(バスコントローラとも呼ばれる)を介して行われる。ストレージデバイスおよびネットワークトラフィックを搬送する信号は、各々、1または複数の機械可読ストレージ媒体および機械可読通信媒体を表す。従って、所与の電子デバイスのストレージデバイスは通常、当該電子デバイスの1または複数のプロセッサのセット上で実行するためのコードおよび/またはデータを格納する。勿論、本発明の実施形態の1または複数の部分は、ソフトウェア、ファームウェア、および/またはハードウェアの異なる組み合わせを用いて実装され得る。この詳細な説明を通じて、説明の目的のために、多数の具体的な詳細が、本発明の完全な理解を提供するべく記載された。しかし、当業者には本発明がこれら具体的な詳細のいくつかがなくても実施され得ることが明らかであろう。特定の例において、周知の構造および機能は、本発明の主題を不明瞭にするのを避けるべく、精巧詳細に説明されていない。従って、本発明の範囲および趣旨は、以下の特許請求の範囲の観点から判断されるべきである。

Claims (20)

  1. 条件を指定し、デスティネーション命令を識別するジャンプ・ポーズ命令を実行するためのジャンプ・ポーズ実行ロジックを備え、
    前記ジャンプ・ポーズ命令の前記実行に応答して、前記ジャンプ・ポーズ実行ロジックは、前記ジャンプ・ポーズ命令と前記デスティネーション命令との間のループがスピン待ちループを含むとのヒントを提供し、前記条件をテストし、前記ジャンプ・ポーズ実行ロジックは、前記条件が満たされる場合に、前記デスティネーション命令にジャンプする前に指定量だけ実行を遅延させる、プロセッサ。
  2. 前記ジャンプ・ポーズ実行ロジックは、前記条件が満たされない場合に、前記スピン待ちループを終了させる、請求項1に記載のプロセッサ。
  3. 前記指定量は、ゼロより大きいか、またはこれに等しい、請求項1または2に記載のプロセッサ。
  4. 前記デスティネーション命令は、前記スピン待ちループに命令を含む、請求項1〜3のいずれか1項に記載のプロセッサ。
  5. テスト減算命令を実行するためのテスト減算実行ロジックを更に備え、
    前記テスト減算実行ロジックは、応答してカウンタ値を1だけデクリメントし、モニタリング値をテストし、前記カウンタ値をテストする、請求項1〜4のいずれか1項に記載のプロセッサ。
  6. 前記テスト減算実行ロジックは、前記モニタリング値が終了条件を示すか否か、および前記カウンタ値がゼロ値を有するか否かを判断し、
    前記モニタリング値が終了条件を示し、または前記カウンタ値がゼロ値を有する場合に、前記テスト減算実行ロジックは、前記スピン待ちループを終了させる、請求項5に記載のプロセッサ。
  7. 前記モニタリング値が終了条件を示さず、または前記カウンタ値がゼロ値を有しない場合、前記テスト減算実行ロジックは、前記スピン待ちループにおける次の命令を実行させる、請求項6に記載のプロセッサ。
  8. モニタリング値を格納するための第1のソースレジスタまたはメモリと、
    カウンタ値を格納するための第2のソースレジスタと、
    前記第2のソースレジスタにおける前記カウンタ値をデクリメントするテスト減算命令を実行するためのテスト減算実行ロジックとを備え、
    前記テスト減算実行ロジックは、前記第1のソースレジスタまたはメモリにおける前記モニタリング値および前記第2のソースレジスタにおける前記カウンタ値を更にテストし、
    前記テスト減算実行ロジックは、前記モニタリング値が終了条件を示す値を有する場合、または前記カウンタ値がゼロに等しい場合に、スピン待ちループを終了させる、プロセッサ。
  9. 前記モニタリング値が終了条件を示す値を有しない場合、または前記カウンタ値がゼロに等しくない場合に、前記テスト減算実行ロジックは、前記スピン待ちループにおける次の命令を実行させる、請求項8に記載のプロセッサ。
  10. 前記スピン待ちループにおける前記次の命令は、ジャンプ・ポーズ命令を含み、
    前記ジャンプ・ポーズ命令の前記実行に応答して、ジャンプ・ポーズ実行ロジックは、前記ジャンプ・ポーズ命令とデスティネーション命令との間のループがスピン待ちループを含むとのヒントを提供し、条件をテストし、前記ジャンプ・ポーズ実行ロジックは、前記条件が満たされる場合に、前記デスティネーション命令にジャンプする前に指定量だけ実行を遅延させる、請求項9に記載のプロセッサ。
  11. 前記ジャンプ・ポーズ実行ロジックは、前記条件が満たされない場合に、前記スピン待ちループを終了させる、請求項10に記載のプロセッサ。
  12. 前記指定量は、ゼロより大きいか、またはこれに等しい、請求項10または11に記載のプロセッサ。
  13. 前記デスティネーション命令は、前記スピン待ちループに命令を含む、請求項10〜12のいずれか1項に記載のプロセッサ。
  14. プロセッサにより、条件を指定し、デスティネーション命令を識別するジャンプ・ポーズ命令を実行する段階と、
    前記ジャンプ・ポーズ命令と前記デスティネーション命令との間のループがスピン待ちループを含むとのヒントを提供する段階と、
    前記ジャンプ・ポーズ命令を実行する段階に応答して前記条件をテストする段階と、
    前記条件が満たされる場合に、前記デスティネーション命令にジャンプする前に指定量だけ実行を遅延させる段階とを備える、方法。
  15. 前記条件が満たされない場合に、前記スピン待ちループを終了させる段階を更に備える、請求項14に記載の方法。
  16. 前記指定量は、ゼロより大きいか、またはこれに等しい、請求項14または15に記載の方法。
  17. 前記デスティネーション命令は、前記スピン待ちループに命令を含む、請求項14〜16のいずれか1項に記載の方法。
  18. テスト減算命令を実行し、応答してカウンタ値を1だけデクリメントして、モニタリング値をテストし、前記カウンタ値をテストする段階を更に備える、請求項14〜17のいずれか1項に記載の方法。
  19. 前記モニタリング値が終了条件を示すか否か、および前記カウンタ値がゼロ値を有するか否かを判断する段階と、
    前記モニタリング値が終了条件を示し、または前記カウンタ値がゼロ値を有する場合に、前記スピン待ちループを終了させる段階とを更に備える、請求項18に記載の方法。
  20. 前記モニタリング値が終了条件を示さないか、または前記カウンタ値がゼロ値を有しない場合に、前記スピン待ちループにおける次の命令を実行させる段階を更に備える、請求項19に記載の方法。
JP2017526548A 2014-12-17 2014-12-17 スピンループジャンプを実行するための装置および方法 Ceased JP2018503162A (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/IB2014/002984 WO2016097782A1 (en) 2014-12-17 2014-12-17 Apparatus and method for performing a spin-loop jump

Publications (1)

Publication Number Publication Date
JP2018503162A true JP2018503162A (ja) 2018-02-01

Family

ID=52450526

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017526548A Ceased JP2018503162A (ja) 2014-12-17 2014-12-17 スピンループジャンプを実行するための装置および方法

Country Status (7)

Country Link
US (1) US20170329609A1 (ja)
EP (1) EP3234765A1 (ja)
JP (1) JP2018503162A (ja)
KR (1) KR102321941B1 (ja)
CN (1) CN106922186A (ja)
TW (1) TWI617977B (ja)
WO (1) WO2016097782A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102016211386A1 (de) * 2016-06-14 2017-12-14 Robert Bosch Gmbh Verfahren zum Betreiben einer Recheneinheit

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03217962A (ja) * 1990-01-23 1991-09-25 Hitachi Ltd 情報処理装置
JPH11224194A (ja) * 1998-02-09 1999-08-17 Mitsubishi Electric Corp データ処理装置

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8806183B1 (en) * 2006-02-01 2014-08-12 Ixys Ch Gmbh Blank bit and processor instructions employing the blank bit
US8230203B2 (en) * 2007-03-30 2012-07-24 Intel Corporation Detecting spin loops in a virtual machine environment
US20120254588A1 (en) * 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
CN103493023A (zh) * 2011-04-26 2014-01-01 富士通株式会社 系统以及检测方法
US10157061B2 (en) * 2011-12-22 2018-12-18 Intel Corporation Instructions for storing in general purpose registers one of two scalar constants based on the contents of vector write masks
CN102968293B (zh) * 2012-11-28 2014-12-10 中国人民解放军国防科学技术大学 基于指令队列的程序循环代码动态检测及执行方法
DE112012007119T5 (de) * 2012-12-26 2015-07-30 Intel Corporation Threadmigration-Unterstützung für Kerne unterschiedlicher Architektur
US20140281418A1 (en) * 2013-03-14 2014-09-18 Shihjong J. Kuo Multiple Data Element-To-Multiple Data Element Comparison Processors, Methods, Systems, and Instructions

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03217962A (ja) * 1990-01-23 1991-09-25 Hitachi Ltd 情報処理装置
JPH11224194A (ja) * 1998-02-09 1999-08-17 Mitsubishi Electric Corp データ処理装置

Also Published As

Publication number Publication date
EP3234765A1 (en) 2017-10-25
CN106922186A (zh) 2017-07-04
KR102321941B1 (ko) 2021-11-05
TW201643692A (zh) 2016-12-16
TWI617977B (zh) 2018-03-11
WO2016097782A1 (en) 2016-06-23
KR20170094147A (ko) 2017-08-17
US20170329609A1 (en) 2017-11-16

Similar Documents

Publication Publication Date Title
JP6456867B2 (ja) 密結合ヘテロジニアスコンピューティングのためのハードウェアプロセッサ及び方法
JP6238497B2 (ja) プロセッサ、方法、及びシステム
JP5926754B2 (ja) 限定範囲ベクトルメモリアクセス命令、プロセッサ、方法、及びシステム
JP6711480B2 (ja) ベクトルインデックスロードおよびストアのための方法および装置
KR102451950B1 (ko) 융합된 단일 사이클 증가-비교-점프를 수행하기 위한 명령어 및 로직
JP2018500653A (ja) ベクトルブロードキャストおよびxorand論理命令のための装置および方法
JP6673574B2 (ja) ベクトルビットシャッフルを実行するための方法および装置
JP6741006B2 (ja) マスクレジスタとベクトルレジスタとの間で可変に拡張するための方法および装置
JP6635438B2 (ja) ベクトルビット反転およびクロスを実行するための方法および装置
JP2018500658A (ja) インデックスおよび即値を用いてベクトル置換を実行するための方法および装置
JP2018500654A (ja) ベクトルビット反転を実行するための方法および装置
JP6835436B2 (ja) マスクをマスク値のベクトルに拡張するための方法および装置
JP6738579B2 (ja) 命令フローを最適化するチェックを実行するための装置および方法
JP2017539016A (ja) 結合した乗算−乗算命令のための装置および方法
JP2017539010A (ja) ベクトル飽和ダブルワード/クワッドワードの加算を実行するための命令およびロジック
JP2017538215A (ja) 逆分離演算を実行するための命令及びロジック
TWI697836B (zh) 處理包括高功率及標準指令之指令集的方法與處理器
KR102528073B1 (ko) 벡터 비트 수집을 수행하기 위한 방법 및 장치
JP2018500665A (ja) マスク値を圧縮するための方法および装置
JP2018506762A (ja) 結合した加算−加算命令のための装置および方法
KR102321941B1 (ko) 스핀-루프 점프를 수행하기 위한 장치 및 방법
JP2018503890A (ja) ベクトル水平論理命令のための装置および方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20171024

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180823

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180911

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20181210

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190212

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190514

A045 Written measure of dismissal of application [lapsed due to lack of payment]

Free format text: JAPANESE INTERMEDIATE CODE: A045

Effective date: 20190917