JP2018500653A - ベクトルブロードキャストおよびxorand論理命令のための装置および方法 - Google Patents

ベクトルブロードキャストおよびxorand論理命令のための装置および方法 Download PDF

Info

Publication number
JP2018500653A
JP2018500653A JP2017527294A JP2017527294A JP2018500653A JP 2018500653 A JP2018500653 A JP 2018500653A JP 2017527294 A JP2017527294 A JP 2017527294A JP 2017527294 A JP2017527294 A JP 2017527294A JP 2018500653 A JP2018500653 A JP 2018500653A
Authority
JP
Japan
Prior art keywords
packed data
bit
data operand
instruction
vector
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
JP2017527294A
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 JP2018500653A publication Critical patent/JP2018500653A/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/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/30029Logical and Boolean instructions, e.g. XOR, NOT
    • 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

Abstract

ベクトルブロードキャストおよびXORAND論理命令を実行するための装置および方法が説明される。例えば、プロセッサの一実施形態は、デスティネーションパックドデータオペランド、第1のソースパックドデータオペランド、第2のソースパックドデータオペランド、および即値オペランドを示す命令をメモリからフェッチするフェッチロジックと、即値に対応する位置に基づいて第2のソースパックドデータオペランドにおけるビットを決定し、第1のソースパックドデータオペランドと決定されたビットとの間でビット単位のANDを実行して中間結果を生成し、デスティネーションパックドデータオペランドと中間結果との間でビット単位のXORを実行し、最終結果を生成し、デスティネーションパックドデータオペランドによって示される格納位置に最終結果を格納する実行ロジックとを備える。

Description

本発明の実施形態は、概ねコンピュータシステムの分野に関する。より詳細には、本発明の実施形態は、コンピュータプロセッサ内でベクトルブロードキャストおよびXORAND論理命令を実行するための装置および方法に関する。
アプリケーションの一定のタイプは、多くの場合、多数のデータアイテムに対して実行される同一のオペレーションを必要とする(「データ並列性」と称される)。単一命令多重データ(SIMD)は、プロセッサに複数のデータアイテムに対するオペレーションを実行させるタイプの命令を指す。SIMD技術は、レジスタにおけるビットをいくつかの固定サイズのデータ要素に論理的に分割し得、固定サイズのデータ要素の各々が別個の値を表すプロセッサに特に好適である。例えば、256ビットレジスタにおけるビットは、4個の別個の64ビットパックドデータ要素(クワッドワード(Q)サイズのデータ要素)、8個の別個の32ビットパックドデータ要素(ダブルワード(D)サイズのデータ要素)、16個の別個の16ビットパックドデータ要素(ワード(W)サイズのデータ要素)、または32個の別個の8ビットデータ要素(バイト(B)サイズのデータ要素)として演算されるソースオペランドとして指定されてもよい。このタイプのデータは、「パックド」データタイプまたは「ベクトル」データタイプと称され、このデータタイプのオペランドは、パックドデータオペランドまたはベクトルオペランドと称される。換言すると、パックドデータアイテムまたはベクトルは、パックドデータ要素のシーケンスを指し、パックドデータオペランドまたはベクトルオペランドは、SIMD命令(パックドデータ命令またはベクトル命令としても知られる)のソースまたはデスティネーションオペランドである。
x86、MMX(商標)、ストリーミングSIMD拡張(SSE)、SSE2、SSE3、SSE4.1、およびSSE4.2命令を含む命令セットを有する、インテル(登録商標)Core(商標)プロセッサにより使用されるもの等、SIMD技術は、アプリケーション性能における著しい改善を可能にした。アドバンスドベクトル拡張(Advanced Vector Extension、AVX)(AVX1およびAVX2)と呼ばれ、ベクトル拡張(VEX)符号化スキームを用いる追加のセットのSIMD拡張が、リリースされている(例えば、Intel(登録商標)64 and IA−32 Architectures Software Developers Manual,October 2011およびIntel(登録商標)Advanced Vector Extensions Programming Reference,June 2011を参照されたい)。これらのAVX拡張を、エンハンストベクトル拡張(EVEX)符号化スキームを用いる512ビットのレジスタ(AVX‐512)のサポートに拡張することが更に提案されている。
ブーリアン(ビット)行列とブーリアンベクトルとの乗算には問題がある。多くの場合、現在の実装は、行列要素に対する反復したブーリアン加算(XOR)オペレーションを必要とする場合がある。これは、かなりのプロセッササイクルを浪費し、結果として、ブーリアン行列乗算オペレーションは非常に遅いものとなる。従って、そのようなビット行列乗算オペレーションが不要な計算を減らすように実装されれば、効率性の向上を図ることができる。
本発明の実施形態による、例示的なインオーダパイプライン、および例示的なレジスタリネーム、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。
本発明の実施形態による、プロセッサに含まれる、例示的インオーダアーキテクチャコア、および例示的なレジスタリネーム、アウトオブオーダ発行/実行アーキテクチャコアの両方の例示的な実施形態を示すブロック図である。
本発明の実施形態による、シングルコアプロセッサ、ならびに統合メモリコントローラおよびグラフィックスを有するマルチコアプロセッサのブロック図である。
本発明の一実施形態によるシステムのブロック図を示す。
本発明の実施形態による第2のシステムのブロック図を示す。
本発明の実施形態による第3のシステムのブロック図を示す。
本発明の実施形態によるシステムオンチップ(SoC)のブロック図を示す。
本発明の実施形態による、ソース命令セットのバイナリ命令を、ターゲット命令セットのバイナリ命令に変換するソフトウェア命令コンバータの使用と対比するブロック図を示す。
ベクトルブロードキャストおよびXORAND論理命令の実施形態を実行するように動作可能なシステム800を示すブロック図である。
本発明の一実施形態によるベクトルブロードキャストおよびXORAND論理命令を実行するためのロジックを示す。
ベクトルブロードキャストおよびXORAND論理命令の実施形態を実行するように動作可能なシステムの方法1000のフロー図である。
ベクトルブロードキャストおよびXORAND論理命令の実施形態を実行するように動作可能なロジック用の例示的な疑似コードを示す。
本発明の実施形態による、一般的ベクトル向け命令フォーマットおよびその命令テンプレートを示すブロック図である。 本発明の実施形態による、一般的ベクトル向け命令フォーマットおよびその命令テンプレートを示すブロック図である。
本発明の実施形態による例示的な特定ベクトル向け命令フォーマットを示す。 本発明の実施形態による例示的な特定ベクトル向け命令フォーマットを示す。 本発明の実施形態による例示的な特定ベクトル向け命令フォーマットを示す。 本発明の実施形態による例示的な特定ベクトル向け命令フォーマットを示す。
本発明の一実施形態による、レジスタアーキテクチャのブロック図である。
より具体的な例示的インオーダコアアーキテクチャのブロック図を示す。 より具体的な例示的インオーダコアアーキテクチャのブロック図を示す。 より具体的な例示的インオーダコアアーキテクチャのブロック図を示す。 より具体的な例示的インオーダコアアーキテクチャのブロック図を示す。
例示的なプロセッサアーキテクチャ
図1Aは、本発明の実施形態による、例示的なインオーダフェッチ、デコード、リタイアパイプライン、および例示的なレジスタリネーム、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図1Bは、本発明の実施形態による、プロセッサに含まれる、例示的インオーダフェッチ、デコード、リタイアコア、および例示的なレジスタリネーム、アウトオブオーダ発行/実行アーキテクチャコアの両方の例示的な実施形態を示すブロック図である。図1A〜図1Bにおける実線ボックスは、パイプラインおよびコアのインオーダ部分を示すが、破線ボックスを任意選択で追加することにより、レジスタリネーム、アウトオブオーダ発行/実行パイプラインおよびコアを示す。
図1Aにおいて、プロセッサパイプライン100は、フェッチステージ102、長さデコードステージ104、デコードステージ106、アロケーションステージ108、リネームステージ110、スケジューリング(ディスパッチまたは発行としても知られる)ステージ112、レジスタ読み出し/メモリ読み出しステージ114、実行ステージ116、ライトバック/メモリ書き込みステージ118、例外処理ステージ122、およびコミットステージ124を含む。
図1Bは、実行エンジンユニット150に結合されたフロントエンドユニット130を含むプロセッサコア190を示し、実行エンジンユニット150およびフロントエンドユニット130の両方がメモリユニット170に結合される。コア190は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは代替的なコアタイプであってもよい。なおも別の選択肢として、コア190は、例えば、ネットワークコアまたは通信コア、圧縮エンジン、コプロセッサコア、汎用演算グラフィックス処理ユニット(GPGPU)コア、グラフィックスコア等のような専用コアであってもよい。
フロントエンドユニット130は、命令キャッシュユニット134に結合される分岐予測ユニット132を含む。命令キャッシュユニット134は、命令トランスレーションルックアサイドバッファ(TLB)136に結合される。TLB136は、命令フェッチユニット138に結合される。命令フェッチユニット138は、デコードユニット140に結合される。デコードユニット140(またはデコーダ)は、命令をデコードし、出力として1もしくは複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号を生成することができ、これらは、元の命令からデコードされ、または別途これらを反映し、あるいはこれらから派生する。デコードユニット140は、様々な異なるメカニズムを用いて実装され得る。好適なメカニズムの例としては、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)等が挙げられるが、これらに限定されない。一実施形態において、コア190は、一定のマクロ命令に対するマイクロコードを(例えば、デコードユニット140またはそうでなければフロントエンドユニット130内に)格納するマイクロコードROMまたは他の媒体を含む。デコードユニット140は、実行エンジンユニット150におけるリネーム/アロケータユニット152に結合される。
実行エンジンユニット150は、リタイアメントユニット154および1もしくは複数のスケジューラユニット156のセットに結合されたリネーム/アロケータユニット152を含む。スケジューラユニット156は、リザベーションステーション、中央命令ウィンドウ等を含む、任意の数の異なるスケジューラを表す。スケジューラユニット156は、物理レジスタファイルユニット158に結合される。物理レジスタファイルユニット158の各々は、1または複数の物理レジスタファイルを表し、これらの異なるものが、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行されるべき次の命令のアドレスである命令ポインタ)等のような1または複数の異なるデータタイプを格納する。一実施形態において、物理レジスタファイルユニット158は、ベクトルレジスタユニット、ライトマスクレジスタユニット、およびスカラレジスタユニットを備える。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供し得る。物理レジスタファイルユニット158は、リタイアメントユニット154と重なっており、レジスタリネームおよびアウトオブオーダ実行が(例えば、リオーダバッファおよびリタイアメントレジスタファイルを用い、フューチャファイル、履歴バッファ、およびリタイアメントレジスタファイルを用い、レジスタのレジスタマップおよびプール等を用いて)実装され得る様々な態様を示す。リタイアメントユニット154および物理レジスタファイルユニット158は、実行クラスタ160に結合される。実行クラスタ160は、1もしくは複数の実行ユニット162のセット、および1もしくは複数のメモリアクセスユニット164のセットを含む。実行ユニット162は、様々なオペレーション(例えば、シフト、加算、減算、乗算)を、様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行し得る。いくつかの実施形態は、特定の関数または関数のセットに専用のいくつかの実行ユニットを含み得るが、他の実施形態は、1つの実行ユニットのみ、またはその全てがあらゆる関数を実行する複数の実行ユニットを含み得る。スケジューラユニット156、物理レジスタファイルユニット158、および実行クラスタ160は、場合によっては複数のものとして示される。なぜなら、ある実施形態は、一定のタイプのデータ/オペレーションのための別個のパイプライン(例えば、各々が自身のスケジューラユニット、物理レジスタファイルユニット、および/または実行クラスタを有し、別個のメモリアクセスパイプラインの場合に、このパイプラインの実行クラスタのみがメモリアクセスユニット164を有する一定の実施形態が実装される)スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプラインを生成するからである。別個のパイプラインが用いられる場合に、これらのパイプラインのうちの1または複数は、アウトオブオーダ発行/実行であり、残りはインオーダであり得ることも理解されたい。
メモリアクセスユニット164のセットは、メモリユニット170に結合される。メモリユニット170は、データTLBユニット172を含む。データTLBユニット172は、データキャッシュユニット174に結合される。データキャッシュユニット174は、レベル2(L2)キャッシュユニット176に結合される。例示的な一実施形態において、メモリアクセスユニット164は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含み得、それらの各々がメモリユニット170におけるデータTLBユニット172に結合される。命令キャッシュユニット134は、メモリユニット170におけるレベル2(L2)キャッシュユニット176に更に結合される。L2キャッシュユニット176は、1または複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
例として、例示的なレジスタリネーム、アウトオブオーダ発行/実行コアアーキテクチャは、パイプライン100を以下のように実装し得る。1)命令フェッチ138は、フェッチステージ102および長さデコードステージ104を実行する。2)デコードユニット140は、デコードステージ106を実行する。3)リネーム/アロケータユニット152は、アロケーションステージ108およびリネームステージ110を実行する。4)スケジューラユニット156は、スケジューリングステージ112を実行する。5)物理レジスタファイルユニット158およびメモリユニット170は、レジスタ読み出し/メモリ読み出しステージ114を実行し、実行クラスタ160は、実行ステージ116を実行する。6)メモリユニット170および物理レジスタファイルユニット158は、ライトバック/メモリ書き込みステージ118を実行する。7)様々なユニットは、例外処理ステージ122に関係し得る。8)リタイアメントユニット154および物理レジスタファイルユニット158は、コミットステージ124を実行する。
コア190は、本明細書において説明される命令を含む、1または複数の命令セット(例えば、x86命令セット(より新しいバージョンを追加された、いくつかの拡張を伴う)、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARM HoldingsのARM命令セット(NEON等の任意選択の追加拡張を伴う)をサポートし得る。一実施形態において、コア190は、パックドデータ命令セット拡張(例えば、AVX1、AVX2、および/または下記のいくつかの形式の一般的ベクトル向け命令フォーマット(U=0および/またはU=1))をサポートするロジックを含み、それによって多くのマルチメディアアプリケーションにより用いられるオペレーションがパックドデータを用いて実行されることを可能にする。
コアは、マルチスレッディング(2もしくはそれより多い並列セットのオペレーションもしくはスレッドを実行する)をサポートし得、タイムスライスマルチスレッディング、同時マルチスレッディング(物理コアが同時にマルチスレッディングするスレッドの各々に対する論理コアを、単一の物理コアが提供する)、またはそれらの組み合わせ(例えば、インテル(登録商標)ハイパースレッディング技術等におけるタイムスライスフェッチおよびデコード、ならびにその後の同時マルチスレッディング)を含む様々な態様でサポートし得ることを理解されたい。
レジスタリネームは、アウトオブオーダ実行の文脈で説明されるが、レジスタリネームは、インオーダアーキテクチャで用いられ得ることを理解されたい。プロセッサの示された実施形態は、別個の命令およびデータキャッシュユニット134/174、ならびに共有L2キャッシュユニット176も含むが、代替的な実施形態は、例えば、レベル1(L1)内部キャッシュまたは複数のレベルの内部キャッシュ等の命令およびデータの両方に対する単一の内部キャッシュを有し得る。いくつかの実施形態において、システムは、内部キャッシュ、ならびにコアおよび/またはプロセッサの外部にある外部キャッシュの組み合わせを含み得る。あるいは、キャッシュの全てがコアおよび/またはプロセッサの外部にあってもよい。
図2は、本発明の実施形態による、2つ以上のコアを有し得、統合メモリコントローラを有し得、統合グラフィックスを有し得る、プロセッサ200のブロック図である。図2における実線ボックスは、シングルコア202A、システムエージェント210、1または複数のバスコントローラユニット216のセットを有するプロセッサ200を示すが、破線ボックスの任意選択の追加は、複数のコア202A〜N、システムエージェントユニット210における1または複数の統合メモリコントローラユニット214のセット、および専用ロジック208を有する代替的なプロセッサ200を示す。
従って、プロセッサ200の異なる実装としては、1)(1または複数のコアを含み得る)統合グラフィックスおよび/またはサイエンティフィック(スループット)ロジックである専用ロジック208と、1または複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、これら2つの組み合わせ)であるコア202A〜Nとを用いるCPU、2)主にグラフィックスおよび/またはサイエンティフィック(スループット)用の多数の専用コアであるコア202A〜Nを用いるコプロセッサ、ならびに3)多数の汎用インオーダコアであるコア202A〜Nを用いるコプロセッサが挙げられ得る。このように、プロセッサ200は、例えば、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、(30個またはそれより多いコアを含む)高スループット多集積コア(MIC)コプロセッサ、エンベデッドプロセッサ等のような汎用プロセッサ、コプロセッサ、または専用プロセッサであり得る。プロセッサは、1または複数のチップ上に実装され得る。プロセッサ200は、1または複数の基板の一部であり得、および/または、例えば、BiCMOS、CMOS、またはNMOS等のいくつかの処理技術のいずれかを用いて1または複数の基板上に実装され得る。
メモリ階層は、コア内における1または複数のレベルのキャッシュと、1セットまたは1もしくは複数の共有キャッシュユニット206と、統合メモリコントローラユニット214のセットに結合された外部メモリ(図示せず)とを含む。共有キャッシュユニット206のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)等、1または複数の中間レベルのキャッシュ、または他のレベルキャッシュ、ラストレベルキャッシュ(LLC)、および/またはこれらの組み合わせを含み得る。一実施形態においては、リングベースの相互接続ユニット212は、統合グラフィックスロジック208、共有キャッシュユニット206のセット、およびシステムエージェントユニット210/統合メモリコントローラユニット214を相互接続するが、代替的な実施形態は、そのようなユニットを相互接続するために任意の数の周知の技術を用いてもよい。一実施形態において、1または複数のキャッシュユニット206とコア202A〜Nとの間でコヒーレンシが保持される。
いくつかの実施形態において、コア202A〜Nのうちの1または複数は、マルチスレッディングができる。システムエージェント210は、コア202A〜Nを調整して動作させるコンポーネントを含む。システムエージェントユニット210は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含み得る。PCUは、コア202A〜Nおよび統合グラフィックスロジック208の電力状態を調整するのに必要とされるロジックおよびコンポーネントであるか、またはこれらを含み得る。ディスプレイユニットは、1または複数の外部接続されたディスプレイを駆動するためのものである。
コア202A〜Nは、アーキテクチャ命令セットの観点からは同種または異種であり得る。すなわち、コア202A〜Nのうちの2またはそれより多くは、同じ命令セットを実行することができる場合があり、他のものは、当該命令セットのサブセットのみ、または異なる命令セットを実行することができる場合がある。一実施形態において、コア202A〜Nは、異種であり、下記の「小さい」コアおよび「大きい」コアの両方を含む。
図3〜6は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、エンベデッドプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスの技術分野で既知の他のシステム設計および構成も好適である。一般に、本明細書において開示されるプロセッサおよび/または他の実行ロジックを組み込むことができる多種多様なシステムまたは電子デバイスが概ね好適である。
ここで図3を参照すると、本発明の一実施形態によるシステム300のブロック図が示されている。システム300は、1または複数のプロセッサ310、315を含み得、これらはコントローラハブ320に結合される。一実施形態において、コントローラハブ320は、グラフィックスメモリコントローラハブ(GMCH)390および入出力ハブ(IOH)350(別個のチップ上にあり得る)を含む。GMCH390は、メモリコントローラおよびグラフィックスコントローラを含み、これらにメモリ340およびコプロセッサ345が結合される。IOH350は、入出力(I/O)デバイス360をGMCH390に結合する。あるいは、メモリおよびグラフィックスコントローラの一方または両方が(本明細書において説明される)プロセッサ内に統合され、メモリ340およびコプロセッサ345は、プロセッサ310およびIOH350を有する単一チップ内のコントローラハブ320に直接に結合される。
追加のプロセッサ315の任意選択の性質は、図3において破線で示される。各プロセッサ310、315は、本明細書に説明される処理コアのうちの1または複数を含み得、プロセッサ200のいくつかのバージョンであり得る。
メモリ340は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、またはこれら2つの組み合わせであってもよい。少なくとも一実施形態においては、コントローラハブ320は、フロントサイドバス(FSB)等のマルチドロップバス、QuickPath相互接続(QPI)等のポイントツーポイントインタフェース、または類似の接続395を介してプロセッサ310、315と通信する。
一実施形態において、コプロセッサ345は、例えば、高スループットMICプロセッサ、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、エンベデッドプロセッサ等のような専用プロセッサである。一実施形態において、コントローラハブ320は、統合グラフィックスアクセラレータを含み得る。
物理リソース310と物理リソース315との間には、アーキテクチャ、マイクロアーキテクチャ、熱、電力消費の特性等を含む幅広い価値基準に関して様々な違いが存在し得る。
一実施形態において、プロセッサ310は、一般的なタイプのデータ処理オペレーションを制御する命令を実行する。コプロセッサ命令は、命令中に埋め込まれ得る。プロセッサ310は、取り付けられたコプロセッサ345により実行されるべきタイプとしてこれらのコプロセッサ命令を認識する。従って、プロセッサ310は、コプロセッサバスまたは他の相互接続においてこれらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)をコプロセッサ345に発する。コプロセッサ345は、受信したコプロセッサ命令を受け取って実行する。
ここで図4を参照すると、本発明の実施形態による、第1のより具体的な例示的システム400のブロック図が示されている。図4に示されるように、マルチプロセッサシステム400は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続450を介して結合される第1のプロセッサ470および第2のプロセッサ480を含む。プロセッサ470および480の各々は、プロセッサ200のいくつかのバージョンであり得る。本発明の一実施形態において、プロセッサ470および480は各々、プロセッサ310および315であるが、コプロセッサ438は、コプロセッサ345である。別の実施形態において、プロセッサ470および480は各々、プロセッサ310およびコプロセッサ345である。
統合メモリコントローラ(IMC)ユニット472および482を各々含むプロセッサ470および480が示される。プロセッサ470は、そのバスコントローラユニットの一部としてポイントツーポイント(P‐P)インタフェース476および478も含む。同様に、第2のプロセッサ480は、P‐Pインタフェース486および488を含む。プロセッサ470、480は、P‐Pインタフェース回路478、488を用いて、ポイントツーポイント(P‐P)インタフェース450を介して情報を交換し得る。図4に示されるように、IMC472および482は、プロセッサを各メモリ、すなわち、各プロセッサにローカルに取り付けられたメインメモリの一部であり得るメモリ432およびメモリ434に結合する。
プロセッサ470、480は各々、ポイントツーポイントインタフェース回路476、494、486、498を用い、個々のP‐Pインタフェース452、454を介してチップセット490と情報を交換し得る。任意選択で、チップセット490は、高性能インタフェース439を介してコプロセッサ438と情報を交換し得る。一実施形態において、コプロセッサ438は、例えば、高スループットMICプロセッサ、ネットワークプロセッサもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、エンベデッドプロセッサ等のような専用プロセッサである。
共有キャッシュ(図示せず)は、いずれかのプロセッサに含まれ、または両方のプロセッサの外部にあり得るが、プロセッサが低電力モードにされると、どちらかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得るように、P‐P相互接続を介してプロセッサとなおも接続され得る。
チップセット490は、インタフェース496を介して第1のバス416に結合され得る。一実施形態において、第1のバス416は、周辺構成要素相互接続(PCI)バス、またはPCI Expressバス等のバス、または別の第3世代I/O相互接続バスであり得るが、本発明の範囲はそのように限定されない。
図4に示されるように、様々なI/Oデバイス414が、第1のバス416を第2のバス420に結合するバスブリッジ418と共に、第1のバス416に結合され得る。一実施形態において、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックスアクセラレータまたはデジタル信号処理(DSP)ユニット等)、フィールドプログラマブルゲートアレイ、またはその他のプロセッサ等、1または複数の追加のプロセッサ415が第1のバス416に結合される。一実施形態において、第2のバス420は、ローピンカウント(LPC)バスであり得る。様々なデバイスは、一実施形態において、例えば、キーボードおよび/またはマウス422、通信デバイス427、ならびに命令/コードおよびデータ430を含み得るディスクドライブもしくは他の大容量ストレージデバイス等のストレージユニット428を含む第2のバス420に結合され得る。更に、オーディオI/O424は、第2のバス420に結合され得る。他のアーキテクチャが可能であることに留意されたい。例えば、図4のポイントツーポイントアーキテクチャに代えて、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装し得る。
ここで図5を参照すると、本発明の実施形態による、第2のより具体的な例示的システム500のブロック図が示されている。図4および図5の同一の要素は、同一の参照番号を有し、図5の他の態様を不明瞭にするのを避けるべく、図4の特定の態様は、図5から省略されている。
図5は、プロセッサ470、480が統合メモリおよびI/O制御ロジック(「CL」)472および482を各々含み得ることを示す。従って、CL472、482は、統合メモリコントローラユニットを含み、I/O制御ロジックを含む。図5は、メモリ432、434がCL472、482に結合されていることのみならず、I/Oデバイス514も制御ロジック472、482に結合されていることを示す。レガシI/Oデバイス515は、チップセット490に結合される。
ここで図6を参照すると、本発明の実施形態によるSoC600のブロック図が示されている。図2における類似の要素は、同一の参照番号を有する。また、破線ボックスは、より高度なSoCの任意選択の特徴である。図6において、相互接続ユニット602は、1もしくは複数のコア202A〜Nおよび共有キャッシュユニット206のセットを含むアプリケーションプロセッサ610、システムエージェントユニット210、バスコントローラユニット216、統合メモリコントローラユニット214、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、およびビデオプロセッサを含み得る1もしくは複数のコプロセッサ620のセット、スタティックランダムアクセスメモリ(SRAM)ユニット630、ダイレクトメモリアクセス(DMA)ユニット632、および1もしくは複数の外部ディスプレイを結合するディスプレイユニット640に結合される。一実施形態において、コプロセッサ620は、例えば、ネットワークプロセッサもしくは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、エンベデッドプロセッサ等のような専用プロセッサを含む。
本明細書に開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装アプローチの組み合わせで実装され得る。本発明の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性および不揮発性メモリ、ならびに/またはストレージ要素を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを有するプログラマブルシステム上で実行するコンピュータプログラムまたはプログラムコードとして実装され得る。
図4に示されるコード430等のプログラムコードは、本明細書に説明される機能を実行して出力情報を生成するべく、入力命令に適用され得る。出力情報は、既知の様式で1または複数の出力デバイスに適用され得る。本願の目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサ等のプロセッサを有する任意のシステムを含む。
プログラムコードは、高水準手続き型プログラミング言語またはオブジェクト指向プログラミング言語で実装され、処理システムと通信し得る。所望であれば、プログラムコードは、アセンブリ言語または機械語でも実装され得る。実際には、本明細書に説明されるメカニズムは、範囲においていずれの特定のプログラミング言語にも限定されない。いずれの場合においても、言語は、コンパイル型言語またはインタープリタ型言語であってもよい。
少なくとも一実施形態の1または複数の態様は、プロセッサ内の様々なロジックを表す、機械可読媒体上に格納された代表的な命令により実装され得、命令は、機械により読み出されると、当該機械に本明細書に説明される技術を実行させるためのロジックを生成させる。「IPコア」として知られるそのような表現は、有形機械可読媒体(「テープ」)上に格納され、様々な顧客または製造設備に供給され、ロジックまたはプロセッサを実際に作製する製造機械に読み込まれ得る。
そのような機械可読ストレージ媒体としては、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD‐ROM)、書き換え可能コンパクトディスク(CD‐RW)、および光磁気ディスク等、その他のタイプのディスクを含むストレージ媒体、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)等のランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、相変化メモリ(PCM)等の半導体デバイス、磁気もしくは光カード、または電子命令を格納するのに好適なその他のタイプの媒体を含む、機械またはデバイスにより製造または形成される、非一時的で有形な構成の物品が挙げられ得るが、これらに限定されない。
従って、本発明の実施形態は、本明細書に説明される構造体、回路、装置、プロセッサ、および/またはシステム機能を定義するハードウェア記述言語(HDL)等の命令を含むか、または設計データを含む非一時的有形機械可読媒体も含む。そのような実施形態は、プログラム製品と称され得る。
いくつかの場合に、命令コンバータは、ソース命令セットからターゲット命令セットへと命令を変換するべく用いられ得る。例えば、命令コンバータは、(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて)命令を、コアにより処理されるべき1または複数の他の命令に翻訳し、モーフィングし、エミュレートし、または別の方法で変換し得る。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装され得る。命令コンバータは、プロセッサ上にあり、プロセッサから離れ、またはプロセッサ上の一部であり、プロセッサから離れた一部であり得る。
図7は、本発明の実施形態による、ソース命令セットのバイナリ命令を、ターゲット命令セットのバイナリ命令に変換するソフトウェア命令コンバータの使用と対比するブロック図である。示された実施形態において、命令コンバータは、ソフトウェア命令コンバータであるが、あるいは、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装され得る。図7は、高水準言語702によるプログラムが、少なくとも1つのx86命令セットコア716を有するプロセッサによりネイティブに実行され得るx86バイナリコード706を生成するべく、x86コンパイラ704を用いてコンパイルされ得ることを示す。 少なくとも1つのx86命令セットコア716を有するプロセッサは、少なくとも1つのx86命令セットコアを用いるインテル(登録商標)プロセッサと実質的に同一の結果を実現するべく、(1)インテル(登録商標)x86命令セットコアの命令セットの実質的部分、または(2)少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサ上で起動することを目的とする、オブジェクトコードバージョンのアプリケーションもしくは他のソフトウェアを互換的に実行し、または別の方法で処理することにより、少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサと実質的に同一の機能を実行し得る任意のプロセッサを表す。x86コンパイラ704は、x86バイナリコード706(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。x86バイナリコード706は、追加のリンク処理を用いるか、または用いることなく少なくとも1つのx86命令セットコア716を有するプロセッサにおいて実行され得る。
同様に、図7は、高水準言語702によるプログラムが、少なくとも1つのx86命令セットコア714を有しないプロセッサ(例えば、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行し、および/またはカリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行するコアを有するプロセッサ)によりネイティブに実行され得る代替的な命令セットバイナリコード710を生成する代替的な命令セットコンパイラ708を用いて、コンパイルされ得ることを示す。命令コンバータ712は、x86バイナリコード706を、x86命令セットコア714を有しないプロセッサによりネイティブに実行され得るコードに変換するべく用いられる。この変換済みコードは、代替的な命令セットバイナリコード710と同じである可能性が高くない。なぜなら、これができる命令コンバータは、作成することが困難だからである。しかし、変換済みコードは、一般的なオペレーションを実現し、代替的な命令セットの命令から構成される。従って、命令コンバータ712は、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表し、これらは、エミュレーション、シミュレーション、またはその他の処理により、x86命令セットプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスがx86バイナリコード706を実行することを可能にする。
ベクトルブロードキャストおよびXORAND論理命令を実行するための装置および方法
上述のように、ブーリアン(ビット)行列およびブーリアンベクトルの乗算は、非効率なものとなる可能性がある。従って、ブーリアン行列およびベクトルを乗算するより効率的な方法が所望である。具体的には、いくつかの実施形態において、行列乗算を実行する命令が用いられる。この命令は、ビット行列の列、および一時ベクトルにブロードキャストされるビットベクトルの対応ビット値を表し得るパックドデータオペランドのビット単位のANDを実行する。このビットベクトルは、第2のパックドデータオペランドによって表されてもよい。次に、この結果値および第3のパックドデータオペランドによって表されたデスティネーションベクトルを用いてビット単位の排他的ORオペレーションが実行される。この命令がビット行列の全ての列に対して反復されると、デスティネーションベクトルは、全てのオペレーションの結果を累計し、行列乗算の結果を表す。モジュラー計算は、ビットベクトルおよび行列の行列オペレーションに用いられ、従って積オペレーションはビット単位のANDになり、和オペレーションはビット単位の排他的OR(すなわちXOR)になることに留意されたい。そのような命令は、従来の命令セットレパートリにおける追加の論理命令に関するオーバヘッドをなくすことによってプロセッサがビットベクトルとビット行列との乗算を効率的に処理することを可能にする。
図8は、ベクトルブロードキャストおよびXORAND論理命令の実施形態を実行するように動作可能なシステム800を示すブロック図である。いくつかの実施形態において、システム800は、汎用プロセッサ(例えば、デスクトップ、ラップトップ、または他のコンピュータにおいて一般に用いられるタイプ)の一部であり得る。あるいは、システム800は、専用プロセッサであってもよい。若干の例のみを言えば、好適な専用プロセッサの例としては、暗号プロセッサ、ネットワークプロセッサ、通信プロセッサ、コプロセッサ、グラフィックスプロセッサ、エンベデッドプロセッサ、デジタル信号プロセッサ(DSP)、およびコントローラ(例えば、マイクロコントローラ)が挙げられるが、これらに限定されない。プロセッサは、様々な複合命令セットコンピューティング(CISC)プロセッサ、様々な縮小命令セットコンピューティング(RISC)プロセッサ、様々な超長命令語(VLIW)プロセッサ、それらの様々な混成体、または他のタイプのプロセッサのいずれかであり得る。
オペレーション中に、システム800は、ベクトルブロードキャストおよびXORAND論理命令802(以下、命令802と称される)の実施形態を受信し得る。例えば、命令802は、命令フェッチユニット、命令キュー等から受信され得る。命令802は、マクロ命令、アセンブリ言語命令、機械コード命令、またはプロセッサの命令セットの他の命令もしくは制御信号を表し得る。いくつかの実施形態において、命令802は、(例えば、1もしくは複数のフィールドまたはビットのセットにより)第1のソースパックドデータオペランド810を明示的に指定し、または別の方法でこれを示し得(例えば、黙示的に示す)、第2のソースパックドデータオペランド812を明示的に指定し、または別の方法でこれを示し得る。命令802は、デスティネーションパックドデータオペランド814も明示的に指定し、または別の方法でこれを示し得、即値オペランド808を明示的に指定し、または別の方法でこれを示し得る。
図8を再び参照すると、システム800は、デコードユニットまたはデコーダ804を含む。デコードユニットは、命令802を含む命令を受信してデコードし得る。デコードユニットは、命令802を反映し、表し、および/またはこれから派生する1または複数のマイクロ命令、マイクロオペレーション、マイクロコードエントリポイント、デコード済みの命令もしくは制御信号、または他の比較的低レベルの命令もしくは制御信号を出力し得る。1または複数の比較的低レベルの命令または制御信号は、1または複数の比較的低レベル(例えば、回路レベルまたはハードウェアレベル)のオペレーションによる比較的高レベルの命令802を実装し得る。いくつかの実施形態において、デコードユニット804は、命令802を受信するための1または複数の入力構造体(例えば、入力ポート、入力相互接続、入力インタフェース等)と、命令802を受信および認識するために入力構造体に結合された命令認識ロジックと、命令802を受信してデコードするために認識ロジックに結合されたデコードロジックと、1または複数の対応するより低レベルの命令または制御信号を出力するためにデコードロジックに結合された1または複数の出力構造体(例えば、出力ポート、出力相互接続、出力インタフェース等)を含み得る。認識ロジックおよびデコードロジックは、マイクロコードリードオンリメモリ(ROM)、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、および当技術分野において既知のデコードユニットを実装するために用いられる他のメカニズムを含むが、これらに限定されない様々な異なるメカニズムを用いて実装され得る。いくつかの実施形態において、デコードユニット804は、図1Aに示されるデコードユニット140と同一であり得る。
システム800は、レジスタのセットも含み得る。いくつかの実施形態において、レジスタは、データを保持するように動作可能な汎用レジスタを含み得る。多くの場合、汎用という用語は、レジスタにデータまたはアドレスを格納する機能に言及するために用いられるが、これは必須ではない。汎用レジスタの各々は、データを格納するように動作可能なオンダイの格納位置を表し得る。汎用レジスタは、アーキテクチャ的に見えるレジスタ(例えば、アーキテクチャ的なレジスタファイル)を表し得る。アーキテクチャ的に見え、またはアーキテクチャ的なレジスタは、ソフトウェアおよび/もしくはプログラマには見ることができ、ならびに/またはレジスタは、オペランドを識別する命令によって示される。これらのアーキテクチャ的なレジスタは、所与のマイクロアーキテクチャ(例えば、一時的レジスタ、リオーダバッファ、リタイアメントレジスタ等)における他の非アーキテクチャ的、または非アーキテクチャに見えるレジスタと対比される。レジスタは、周知の技術を用いて異なるマイクロアーキテクチャに異なる態様で実装され得、いずれの特定のタイプの回路にも限定されない。様々な異なるタイプのレジスタが好適である。好適なタイプのレジスタの例としては、専用物理レジスタ、レジスタリネームを用いて動的に割り当てられた物理レジスタ、およびこれらの組み合わせが挙げられるが、これらに限定されない。
いくつかの実施形態において、第1のソースパックドデータオペランド810は、第1の汎用レジスタに格納され得、第2のソースパックドデータオペランド812は、第2の汎用レジスタに格納され得、デスティネーションパックドデータオペランド814は、第3の汎用レジスタに格納され得る。あるいは、メモリ位置または他の格納位置が1または複数のソースオペランドに用いられ得る。例えば、いくつかの実施形態において、潜在的にはメモリオペレーションが第2のソースパックドデータオペランドに用いられ得るが、これは必須ではない。
実行ユニット806は、デコードユニット804から制御信号を受信し、命令802を実行する。実行ユニット806は、即値の8ビット値、第1のソース格納位置、第2のソース格納位置、およびデスティネーション格納位置を受信するように命令される。これらは、即値オペランド808、第1のソースパックドデータオペランド810、第2のソースパックドデータオペランド812、およびデスティネーションソースパックドデータオペランド814によって各々示され得る。いくつかの実施形態において、格納位置は、レジスタ、例えば、物理レジスタファイルユニット158を示す。いくつかの実施形態において、格納位置は、メモリユニット、例えば、メモリユニット170における位置等のメモリ位置を示す。実行ユニット806のオペレーションおよび機能は、図1Bの実行エンジンユニット150を参照して更に詳細に説明され得る。
再び図8を参照すると、実行ユニット806は、デコードユニット804およびレジスタと結合される。例として、実行ユニットは、算術演算ユニット、算術演算論理装置、算術・論理オペレーションを実行するデジタル回路、乗算器、加算器等を含むデジタル回路を含み得る。実行ユニットは、命令802を表し、および/またはこれから派生した1または複数のデコード済みの、または別の方法で変換済みの命令または制御信号を受信し得る。実行ユニットは、第1のソースパックドデータオペランド810、第2のソースパックドデータオペランド812、デスティネーションパックドデータオペランド814、および即値オペランド808も受信し得る。いくつかの実施形態において、即値オペランドは8ビット値を有する。いくつかの実施形態において、第1のソースパックドデータオペランド810、第2のソースパックドデータオペランド812、およびデスティネーションパックドデータオペランド814は、64ビットの倍数であって最大512ビットまでの値を有する格納位置を示す。実行ユニットは、命令802に応答して、および/または命令802の結果として(例えば、命令から直接的もしくは間接的に(例えば、エミュレーションにより)デコードされた1もしくは複数の命令もしくは制御信号に応答して)結果を格納するように動作可能である。
いくつかの実施形態において、第1のソースパックドデータオペランド810、第2のソースパックドデータオペランド812、およびデスティネーションパックドデータオペランド814におけるパックドデータ要素(ビット)は、64ビットパックドデータ要素(クワッドワード)である。そのような実施形態において、各々の64ビットパックドデータ要素セクションに対して実行されるオペレーションが反復され、実行ユニット806は、並列またはシーケンシャルに各々の64ビットパックドデータ要素セクションに対するオペレーションを実行し得る。いくつかの実施形態において、パックドデータオペランドによって示される値の長さは様々な64の倍数の長さであってもよく、複数の64ビットセクションを含んでもよい。
命令802の結果として、実行ユニットは、即値オペランドによって示される値をインデックス位置として用いて、第2のソースパックドデータオペランド812によって示される各々の64ビットパックドデータ要素セクションにおける1ビットを決定する。即値オペランドは一実施形態において8ビットの値であり、従って64個のインデックス位置0〜63を表し得、これらは、第2のソースパックドデータオペランドの64ビットパックドデータ要素セクションの各々におけるビット位置を示し得る。
いくつかの実施形態において、実行ユニット806が64ビットパックドデータ要素セクションのうちの1または複数における1ビットを決定すると、このビットは次に、64ビットパックドデータ要素セクションの各々の64ビットの一時ベクトルアレイにブロードキャストされる。換言すると、この1ビット値は反復されてこの一時ベクトルアレイの全ての64ビット位置に配置される。いくつかの実施形態において、この一時ベクトルアレイは、いずれのプログラミング言語インタフェースを介してもシステムにアクセスすることができない一時レジスタまたは内部レジスタであってもよい。
64ビットパックドデータ要素セクション毎に、実行ユニット806は次に、ブロードキャストされたビットを有する対応する一時ベクトルアレイを取り、第1のソースパックドデータオペランドによって示された対応する64ビットパックドデータ要素セクションとこの一時ベクトルアレイとのビット単位のANDを実行する。換言すると、実行ユニット806は、決定したビットを取ってこのビットと第1のソースパックドデータオペランドにおける対応ビット値との間でビット単位のANDを実行する。
実行ユニット806は、結果値(すなわち、中間結果)をこのビット単位のANDオペランドから更に取り、これらの結果値およびデスティネーションパックドデータオペランドにおける対応するパックドデータ要素のビット単位の排他的OR(XOR)オペレーションを実行する。次に、実行ユニット806は、このビット単位のXORオペレーションから決定した値を取り、デスティネーションパックドデータオペランドにおける対応する位置にこれらの値を格納する。
上記のこれらの実施形態は、システム800がモジュラー計算を用いてビットベクトルとビット行列との乗算を効率的に行うことを可能にする。いくつかの実施形態において、ビット行列のいくつかまたは全てが第1のソースパックドデータオペランドによって示される格納箇所に格納され、ビットベクトルは、第2のパックドデータオペランドによって示される格納箇所に格納される。いくつかの実施形態において、ビット行列は、行によって格納される(すなわち、格納位置における位置0は、ビット行列の第1の行の第1の要素を格納し、位置1は、ビット行列の第1の同じ第1の行の第2の要素を格納する等である)。そのようなシナリオにおいて、ビット行列は、上記のオペレーションを実行する前に、列によって格納位置に格納されるように入れ替えられるべきである。即値オペランドの異なる値およびビット行列の全ての列を設定することによって、上記のオペレーションがビットベクトルの全ての値に対して実行ユニット806により反復的に実行されると、デスティネーションパックドデータオペランドによって示される格納位置に格納された値は、ビット行列およびビットベクトルの行列乗算の結果を表す。ビット行列の正しい列とビットベクトルの正しい値との乗算を行うようにオペレーション毎に即値オペランドに示される値は、第1のソースパックドデータオペランドによって示されるビット行列の列番号に一致するべきであることに留意されたい(すなわち、ビットベクトルの位置0における値と、ビット行列の位置0の列との乗算を行うべきである)。これを実現するために、第1のソースパックドデータオペランドによって示される格納位置または格納位置アドレスは、命令802のイテレーション毎に変更され得る。
いくつかの実施形態において、ビット行列は64×64のビット行列である。第1のソースパックドデータオペランドによって示された格納位置は、(例えば、格納位置が512ビットのレジスタである場合に)ビット行列の64個の列の全てを格納することができない場合があるので、異なる格納位置は、行列乗算オペレーションを完了するべく命令802のイテレーション毎に第1のソースパックドデータオペランドによって示される場合がある。
上記の実施形態に関する更なる詳細が図9〜図11を参照して以下に説明される。
実行ユニットおよび/またはプロセッサは、命令802を実行し、および/または命令802に応答して、および/またはこの結果として(例えば、命令802からデコードされ、または別の方法でこれから派生した1または複数の命令または制御信号に応答して)結果を格納するように動作可能な具体的または特定のロジック(例えば、トランジスタ、集積回路、または潜在的にはファームウェア(例えば、不揮発性メモリに格納された命令)および/またはソフトウェアと組み合わされた他のハードウェア)を含み得る。いくつかの実施形態において、実行ユニットは、ソースオペランドを受信する1または複数の入力構造体(例えば、入力ポート、入力相互接続、入力インタフェース等)と、ソースオペランドを受信および処理して結果オペランドを生成するために入力構造体に結合された回路またはロジック(例えば、乗算器および少なくとも1つの加算器)と、結果オペランドを出力するために回路またはロジックに結合された1または複数の出力構造体(例えば、出力ポート、出力相互接続、出力インタフェース等)とを含み得る。
説明を不明瞭にするのを避けるために、比較的単純なシステム800が示され、説明されている。他の実施形態において、システム800は、任意選択で他の周知のプロセッサコンポーネントを含み得る。そのようなコンポーネントの考えられる例としては、命令フェッチユニット、命令キャッシュおよびデータキャッシュ、レベル2またはそれより高いレベルのキャッシュ、アウトオブオーダ実行ロジック、命令スケジューリングユニット、レジスタリネームユニット、リタイアメントユニット、バスインタフェースユニット、命令・データトランスレーションルックアサイドバッファ、プリフェッチバッファ、マイクロ命令キュー、マイクロ命令シーケンサ、プロセッサに含まれる他のコンポーネント、およびこれらの様々な組み合わせが挙げられるが、これらに限定されない。そのようなコンポーネントの多くの異なる組み合わせおよび構成が好適である。実施形態は、いずれの既知の組み合わせまたは構成にも限定されない。更に、実施形態は、複数のコア、論理プロセッサ、または実行エンジンを有するプロセッサに含まれ得、これらのコア、論理プロセッサ、または実行エンジンのうちの少なくとも1つは、命令802の実施形態を実行するためにデコードユニットおよび実行ユニットを有する。
図9は、本発明の一実施形態による、ベクトルブロードキャストおよびXORAND論理命令を実行するためのロジック900を示す。いくつかの実施形態において、実行ユニット806は、命令802を実行するロジック900を含む。いくつかの実施形態において、命令802は、即値オペランド808(IMM8)と、第1のソースパックドデータオペランド810(SRC1)と、第2のソースパックドデータオペランド812(SRC2)と、デスティネーションパックドデータオペランド814(DEST)とを指定する。ロジック900に図示されるオペランドは、特定のバイナリ値を含むが、これらの値は、専ら例示的な目的で含まれ、オペランドは、他の実施形態において異なる値を含み得る。
SRC1 810、SRC2 812、およびDEST814によって示される格納位置は、各々、複数のパックド64ビット値を格納することができる場合があることに留意されたい。そのようなシナリオにおいて、ロジック900は、これらの64ビットパックドデータ要素セクションが各々、同様に処理され得ることを示す。いくつかの実施形態において、各セクションは、他のセクションと並列に処理される。これらセクションの各々の長さおよび区分は、904における番号で示されている。オペランド値の全長は、906における番号で示され、一実施形態において512ビット(すなわち、512ビットベクトルレジスタに格納された8個の64ビットパックドデータ要素)を含む。
一実施形態において、IMM8 808は、0〜63の番号を指定することができる8ビット値である。図9の例示的なバイナリ値において、この値は「4」(すなわち、2進数では100b)である。実行ユニットは、ロジック900に従ってIMM8 808の値に対応するビット位置のSRC2 812の値を決定する。図9の例示的な値において、これはSRC2 812の第1の64ビットセクションの値「1」と、SRC2の第2の64ビットセクションの「0」とに対応する。
次に実行ユニットは、SRC2 812の各選択値を64回、一時ベクトルB902にレプリケートまたはブロードキャストする。従って、SRC2の64ビットセクション毎に、一時ベクトルB902における同じ長さの対応セクションが、IMM8 808のインデックス値を用いて選択したSRC2 812の選択値でポピュレートされる。例えば、図9において、最初の64ビットセクションにおけるSRC2 812の選択値は「1」である。従って、B902の対応する64ビットセクションにおける64個の値は各々、「1」にセットされる。いくつかの実施形態において、一時ベクトルB902は、いずれのプログラミングインタフェースを介してもアクセスできない非表示レジスタであってもよい。いくつかの実施形態において、一時ベクトルB902は、メモリ(例えば、RAM)もしくはキャッシュ、または他のストレージ媒体に格納され得る。
図9において、一時ベクトルB902は、SRC2 812の64ビットセクションに対応する複数の64ビットセクションを含むが、いくつかの実施形態において、SRC2の各々の64ビットセクションは、シーケンシャルに処理され、従って一時ベクトルB902は、単一の64ビットセクションのみを含む。他の実施形態において、SRC2 812の各々の64ビットセクションは並列かつ別個に処理され、従って一時ベクトルB902の複数のコピーが同時に存在し得るが、互いに別個のものである。
いくつかの実施形態において、実行ユニットが一時ベクトルB902の64個の値にSRC2 812の単一の選択値をブロードキャストする場合、64未満のプロセッササイクルまたはオペレーションが必要とされ、これに代えて、値は、一時ベクトルB902に同時に置かれる。いくつかの実施形態において、ブロードキャストは、当業者に既知のブロードキャスト方法に従って実行される。
実行ユニットは、一時ベクトルB902の反復値およびSRC1 810の対応値のビット単位のANDを実行することによってロジック900を更に実行する。
実行ユニットは、ロジック900を更に実行し、上記のビット単位のANDオペレーション(908)の結果と、DEST814aで示されるDESTの元の値との間でビット単位のXORを取る。次に、ビット単位のXORの結果は、DEST814bで示すDESTによって示された格納位置に再び格納される。例えば、(906で示される)ビット位置0において、一時ベクトルB902の値「1」とSRC1 810の対応ビット位置の値「1」との間のビット単位のANDは「1」であり、結果として生じるこの「1」の値とDEST814aの対応ビット位置の「0」の値との間のビット単位のXORは「1」である。この「1」の値は、DEST814bのビット位置0に示されるように、DESTによって示される格納位置の対応ビット位置に格納される。
いくつかの場合に、ロジック900は、64x64のサイズのビット行列と64x1のサイズのビットベクトルとの間の行列乗算の結果を効率的に判断するために用いられ得る。そのような実施形態において、ビットベクトルの値はSRC2 812によって示され、ビット行列の列のうちの1または複数における値はSRC1 810によって示される。行×行フォーマットを用いるストレージにおいてビット行列が元々表現されていた場合、ビット行列はまず、実行ユニットによって列×列フォーマットに入れ替えられる。ビット行列の行列乗算は、モジュラー計算を用いて表される。従って、乗算はビット単位のANDによって表され、加算はビット単位のXORによって表される。ビットベクトルとビット行列とを乗算するためにロジック900を用いる最初の段階は、ビット行列の最初の列を取り、これをビットベクトルの最初の値と乗算する。これを行うべく、IMM8は、SRC2 812によって示されるビットベクトルにおける最初のビット位置を示す10進数の値「0」にセットされる。また、64ビット長のビット行列における最初の列は、SRC1 810によって示される。次に、一時ベクトルB902におけるビットベクトルの最初のビットおよびSRC1 810の値にビット単位のANDを取ることは、ビット行列の最初の列とビットベクトルの最初のビットとの乗算を表す。これは、図9において908および上記に示したビット単位のANDに示される。
行列乗算を適切に完了するべく、上記のオペレーションは、ビット行列の後続する列およびビットベクトルの対応ビットについて反復され、各列およびビットの乗算は、64ビットの結果値を生成する。これらの64ビットの結果値は互いに合計され、単一の64ビット値に到達するはずである。この単一の64ビット値は、ビット行列およびビットベクトルの行列乗算の結果を表す。ビット行列オペレーションにおける総和は、ビット単位のXORによって表される。従って、ロジック900の910に示されるビット単位のXORオペレーションは、現在のビット行列の列およびビットベクトルのビット積を、乗算オペレーション全体の累積和に加算する。
いくつかの場合に、64×64のビット行列は、メモリ位置に列×列で格納される。従って、命令の実行毎に、SRC1 810によって示されるストレージアドレスは、ビット行列の次の列に64ビットだけシフトされ得る。他の場合、SRC1 810は、ビット行列の次の列を格納する異なる格納位置に変更され得る。いくつかの他の場合、ビットベクトルを表すSRC2 812の各々の64ビットセクションは、前の64ビットセクションから1ビットだけシフト(または回転)されてもよく、ビット行列を表すSRC1 810の各々の64ビットセクションは、同一のビット行列の連続した列を含んでもよい。これにより、ビット行列の連続した列が一度に処理されることを可能にする。なおも他の場合、SRC1およびSRC2の各々の64ビットセクションは、ビット行列およびビットベクトルの組み合わせの異なるセットを表し得、複数のビット行列・ビットベクトル乗算計算が同時に進行することを可能にする。
上記の行列乗算の例は、64ビット長のビット行列およびビットベクトルの乗算を図示するが、他の場合に、ビット行列およびビットベクトルは64ビット長より小さい。
図10は、ベクトルブロードキャストおよびXORAND論理命令の実施形態を実行するように動作可能なシステムの方法1000のフロー図である。様々な実施形態において、方法は、プロセッサ、命令処理装置、または他のデジタルロジックデバイスによって実行され得る。いくつかの実施形態において、図10のオペレーションおよび/または方法は、図8のプロセッサによって、および/またはその内部で実行され得る。図8のプロセッサに関して本明細書に説明されるコンポーネント、機能、および具体的な任意の詳細は、任意選択で図10のオペレーションおよび/または方法にも適用される。あるいは、図10のオペレーションおよび/または方法は、図1A〜図8を参照して説明されるもの等の類似するか、または異なるプロセッサまたは装置によって、および/またはこれらの内部で実行され得る。更に、図8のプロセッサは、図10におけるものと同一か、類似するか、または異なるオペレーションおよび/または方法を実行し得る。
方法1000は、ブロック1002において、デスティネーションパックドデータオペランドと、第1のソースパックドデータオペランドと、第2のソースパックドデータオペランドと、即値オペランドとを示す命令をメモリからフェッチする段階を備える。様々な態様において、命令は、プロセッサ、命令処理装置、またはそれらの一部(例えば、命令フェッチユニット、デコードユニット、バスインタフェースユニット等)においてフェッチおよび受信され得る。様々な態様において、命令は、オフダイソース(例えば、メモリ、相互接続等)またはオンダイソース(例えば、命令キャッシュ、命令キュー等)から受信され得る。
ブロック1004において、命令がデコードされる。いくつかの実施形態において、命令のデコードは、図8のデコードユニット804等のデコードユニットによって実行され得る。
ブロック1006において、方法1000は、即値オペランドの値に対応する位置に基づいて第2のソースパックドデータオペランドのビットを決定する段階を備える。いくつかの実施形態において、データ要素の決定は、図8の実行ユニット806等の実行ユニットによって実行される。
ブロック1008において、方法1000は、デスティネーションパックドデータオペランドによって示される格納位置に結果を格納する段階を備え、当該結果は、デスティネーションパックドデータオペランドと中間結果との間のビット単位のXORの実行から判断され、当該中間結果は、第1のソースパックドデータオペランドと決定されたビットとの間のビット単位のANDの実行から判断される。
示される方法は、アーキテクチャオペレーション(例えば、ソフトウェアの観点から見えるもの)を伴う。他の実施形態において、方法は、任意選択で1または複数のマイクロアーキテクチャオペレーションを含み得る。例として、命令は、アウトオブオーダにフェッチされ、デコードされ、スケジューリングされ得、ソースオペランドは、アクセスされ得、実行ユニットは、命令を実装するマイクロアーキテクチャオペレーションを実行し得、結果は、プログラムの順序に再構成され得る、等である。いくつかの実施形態において、命令を実装するマイクロアーキテクチャオペレーションは、任意選択で図1A〜図7および図12A〜図15Bに説明されるオペレーションのいずれかを含み得る。
図11は、ベクトルブロードキャストおよびXORAND論理命令の実施形態を実行するように動作可能なロジック用の例示的な疑似コードを示す。いくつかの実施形態において、このロジックはロジック900である。ここではオペコード「vxorandbcstq」1152で表される命令802は、1154〜1160に示される様々なオペランドを指定し得る。オペランドzmm0 1154は、デスティネーションパックドデータオペランドを指定する。いくつかの実施形態において、zmm0 1154はDEST814である。いくつかの実施形態において、命令は、ライトマスク1162を指定し、この事例では「k1」である。ライトマスクの値は、この疑似コードによって表されるロジックを実行する実行ユニットに対してデスティネーションパックドデータオペランドによって示されるレジスタの指定部分に値を書き込むか否かを示し得る。オペランドzmm1 1156は、第1のソースパックドデータオペランドを指定する。いくつかの実施形態において、これはSRC1 810である。オペランドzmm2 1158は、第2のソースパックドデータオペランドを指定する。いくつかの実施形態において、これはSRC2 812である。オペランドimm8 1160は、即値オペランドを指定する。いくつかの実施形態において、imm8 1160は、IMM8 808である。
ライン1102は、128、256、および512のベクトル長を用いるいくつかの実施形態において、命令に互換性があることを示す。Kの長さは、64個のパックドデータ要素セクションの数を示し、バイナリ値の対応するベクトル長は、このパックドデータ要素に分離され得る。上述のように、命令は、64個のパックドデータ要素セクションに対して演算を行う。
いくつかの実施形態において、命令のオペランドは、最大512ビットを格納し得る格納位置を示すオペランドを指定し、そのような場合には、命令の実行にレジスタの一部のみが用いられる。いくつかの実施形態において、オペランドのうちの1または複数は、レジスタ位置に代えてメモリ格納位置を示し得る。
図11において、等号がついたコロン記号は、コロン記号の右側の値がコロン等号の左側の変数に割り当てられることを示す。
ライン1104において、ループは、Kの長さに等しいいくつかのループについて反復するように設定される。例えば、ベクトル長が128である場合、Kの長さは2になり、ループは2回反復する。いくつかの実施形態において、ループ変数は、図11に示されるように「j」である。
ライン1106において、変数iは、64で乗算されたjに設定される。例えば、jが「2」である場合、変数iは「128」になる。
ライン1108において、内部レジスタに格納され得る一時ベクトルBの64ビットは、一時ベクトルBの64ビットに対して64回レプリケートされたSRC2[i+IMM8]の値を設定する。いくつかの実施形態において、一時ベクトルBは、一時ベクトルB902である。SRC2[i+IMM8]は、位置「i+IMM8」におけるSRC2の値を表す。
いくつかの実施形態において、値SRC2[i+IMM8]は、一時値「b」に設定され、これは内部レジスタであってもよい。次にこの一時値bは、一時ベクトルBの値にレプリケートまたはブロードキャストされる。
ライン1112において、ライン1104においてループによって示されるように、現在処理されている64ビットセクションに対するDESTの64ビットが前のビット単位のANDオペレーションの結果でXOR演算され、この結果はDESTの同一の64ビットに再び割り当てられる。
いくつかの実施形態において、ライン1112のおけるオペレーションは、命令802がライトマスクを指定するか否かについて記述される。ライトマスクが指定されている場合、ライン1110に示されるように、位置jにおけるライトマスクのビットは、実行ユニット806によって実行されるライン1112に対するオペレーションのために「1」の値に設定されるべきである。そうでなければ、これに代えて、ライン1114〜1118に対するオペレーションが実行される。
ライン1114における条件文が「0」または偽(false)であると判断された場合に、ライン1110が実行される。いくつかの実施形態において、ライン1114では、条件付きステートメントは、マージマスキングが有効にされているか否かを確認する。いくつかの実施形態において、マージングマスキングは、フラグによって示される。いくつかの実施形態において、このフラグは「EVEX.z」である。いくつかの実施形態において、このフラグは、命令のオペランド(例えば{z}によって示される。マージマスキングまたはマージングマスキングは、これらの値を「0」で上書きするのではなく、デスティネーションオペランドの元の値を保持するように実行ユニットに示す。マージングマスキングがオンになっている場合、現在処理されているDESTにおける64個のパックドデータ要素のセットは、ライン1116に示されるように未変更のままである。そうでなければ、ライン1118に示されるように、これらの値は、「0」でオーバーライドされる(すなわち、「0」の値がデスティネーションオペランドによって示されるレジスタの対応する位置に格納される)。
いくつかの実施形態において、ライン1120では、命令の一部として処理されなかったDESTにおける残りの値、すなわち、指定されたベクトル長を超える値がゼロにされる(すなわち、「0」の値がデスティネーションオペランドによって示されるレジスタの対応位置に格納される)。
上記の実施形態は、512ビット幅のレジスタを参照して説明されているが、本発明の他の実施形態は、そのような長さのレジスタを必要とせず、本発明は、いずれの長さのレジスタを用いても実装され得る。
例示的な命令フォーマット
本明細書に説明される命令の実施形態は、異なるフォーマットで実施され得る。更に、例示的なシステム、アーキテクチャ、およびパイプラインが以下に詳述される。命令の実施形態は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行され得るが、詳述されるものに限定されない。
ベクトル向け命令フォーマットは、ベクトル命令に好適な命令フォーマットである。(例えば、ベクトルオペレーションに固有の一定のフィールドが存在する)。ベクトルおよびスカラオペレーションの両方がベクトル向け命令フォーマットによりサポートされる実施形態が説明されるが、代替的な実施形態は、ベクトル向け命令フォーマットによるベクトルオペレーションのみを用いる。
図12A〜図12Bは、本発明の実施形態による一般的ベクトル向け命令フォーマットおよびその命令テンプレートを示すブロック図である。図12Aは、本発明の実施形態による、一般的ベクトル向け命令フォーマット、およびそのクラスA命令テンプレートを示すブロック図である。図12Bは、本発明の実施形態による、一般的ベクトル向け命令フォーマット、およびそのクラスB命令テンプレートを示すブロック図である。具体的には、クラスAおよびクラスB命令テンプレートは、一般的ベクトル向け命令フォーマット1200に対して定義され、これらの両方は、非メモリアクセス1205の命令テンプレートおよびメモリアクセス1220の命令テンプレートを含む。ベクトル向け命令フォーマットの文脈における一般的という用語は、いずれの特定の命令セットにも関係しない命令フォーマットを指す。
ベクトル向け命令フォーマットが、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バイトのベクトルオペランド)をサポートし得る。
図12AにおけるクラスA命令テンプレートは、1)非メモリアクセス1205の命令テンプレート中に示される非メモリアクセス、フルラウンド制御タイプオペレーション1210の命令テンプレート、および非メモリアクセス、データ変換タイプオペレーション1215の命令テンプレート、ならびに2)メモリアクセス1220の命令テンプレート中に示されるメモリアクセス、一時的1225の命令テンプレート、およびメモリアクセス、非一時的1230の命令テンプレートを含む。図12BのクラスB命令テンプレートは、1)非メモリアクセス1205の命令テンプレート中に示される非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプオペレーション1212の命令テンプレート、および非メモリアクセス、ライトマスク制御、VSIZEタイプオペレーション1217の命令テンプレート、ならびに2)メモリアクセス1220の命令テンプレート中に示されるメモリアクセス、ライトマスク制御1227の命令テンプレートを含む。
一般的ベクトル向け命令フォーマット1200は、図12A〜図12Bにおいて示される順序で以下に列挙される、次のフィールドを含む。
フォーマットフィールド1240。このフィールドにおける特定の値(命令フォーマット識別子の値)は、ベクトル向け命令フォーマット、従って、命令ストリーム中のベクトル向け命令フォーマットにおける命令の発生を一意に識別する。従って、このフィールドは、一般的ベクトル向け命令フォーマットのみを有する命令セットに必要とされないという意味で任意選択である。
ベースオペレーションフィールド1242。その内容は、異なるベースオペレーションを区別する。
レジスタインデックスフィールド1244。その内容は、レジスタ内であれ、メモリ内であれ、直接に、またはアドレス生成により、ソースオペランドおよびデスティネーションオペランドの位置を指定する。これらは、PxQ(例えば、32x512、16x128、32x1024、64x1024)のレジスタファイルからN個のレジスタを選択するのに十分な数のビットを含む。一実施形態においては、Nは、最大で3つのソースおよび1つのデスティネーションレジスタであり得るが、代替的な実施形態は、より多いかまたはより少ないソースおよびデスティネーションレジスタをサポートし得る(例えば、最大で2つのソースをサポートし得、この場合、これらのソースのうちの1つは、デスティネーションとしても機能し、最大で3つのソースをサポートし得、この場合、これらのソースのうちの1つは、デスティネーションとしても機能し、最大で2つのソースおよび1つのデスティネーションをサポートし得る)。
修飾子フィールド1246。その内容は、一般的ベクトル命令フォーマット中におけるメモリアクセスを指定する命令の発生とメモリアクセスを指定しない命令の発生とを、すなわち、非メモリアクセス1205の命令テンプレートとメモリアクセス1220の命令テンプレートを区別する。メモリアクセスオペレーションは、メモリ階層を読み出し、および/またはこれに書き込むが(いくつかの場合には、レジスタにおける値を用いて、ソースアドレスおよび/またはデスティネーションアドレスを指定する)、非メモリアクセスオペレーションは、これを行わない(例えば、ソースおよびデスティネーションは、レジスタである)。また、一実施形態において、このフィールドは、3つの異なる態様を選択し、メモリアドレス計算を実行するが、代替的な実施形態は、より多い、より少ない、または異なる態様をサポートし、メモリアドレス計算を実行し得る。
追加オペレーションフィールド1250。その内容は、ベースオペレーションに加えて、種々様々な異なるオペレーションのうちのどれが実行されるかを区別する。このフィールドは、コンテキストに固有である。本発明の一実施形態において、このフィールドは、クラスフィールド1268、アルファフィールド1252、およびベータフィールド1254に分割される。追加オペレーションフィールド1250は、オペレーションの共通グループが2、3、または4つの命令ではなく、単一の命令で実行されることを可能にする。
スケールフィールド1260。その内容は、メモリアドレス生成のための(例えば、2scale*index+baseを用いるアドレス生成のための)インデックスフィールドの内容のスケーリングを可能にする。
変位フィールド1262A。その内容は、メモリアドレス生成の一部として(例えば、2scale*index+base+displacementを用いるアドレス生成に)用いられる。
変位係数フィールド1262B(変位係数フィールド1262Bの直ぐ上に変位フィールド1262Aを並置することにより、一方または他方が使用されることを示すことに留意されたい)。その内容は、アドレス生成の一部として用いられる。変位係数フィールド1262Bは、メモリアクセス(N)のサイズに対して調整される変位係数を指定する。Nは、(例えば、2scale*index+base+scaled displacementを用いるアドレス生成のための)メモリアクセスにおけるバイトの数である。冗長下位ビットは、無視され、従って、変位係数フィールドの内容は、有効なアドレスを計算するときに用いられる最終的変位を生成するべく、メモリオペランドの合計サイズ(N)で乗算される。Nの値は、フルオペコードフィールド1274(本明細書において説明される)およびデータ操作フィールド1254Cに基づいて、ランタイムでプロセッサハードウェアにより決定される。変位フィールド1262Aおよび変位係数フィールド1262Bは、非メモリアクセス1205の命令テンプレートに用いられず、および/または異なる実施形態が1つのみまたは2つのうちいずれも実装しない場合があるという意味で任意選択である。
データ要素幅フィールド1264。その内容は、(いくつかの実施形態において全ての命令に対して、他の実施形態において命令のうちいくつかのみに対して)いくつかのデータ要素幅のうちのどれが用いられるかを区別する。このフィールドは、1つのデータ要素幅のみがサポートされ、および/またはオペコードのいくつかの態様を用いて、データ要素幅がサポートされる場合には必要とされないという意味で任意選択である。
ライトマスクフィールド1270。その内容は、データ要素位置ベースで、デスティネーションベクトルオペランドにおける当該データ要素位置がベースオペレーションおよび追加オペレーションの結果を反映するか否かを制御する。クラスA命令テンプレートは、マージング・ライトマスキングをサポートするが、クラスB命令テンプレートは、マージングおよびゼロ書き込みマスキングの両方をサポートする。マージングする場合、ベクトルマスクは、デスティネーションにおける要素の任意のセットが(ベースオペレーションおよび追加オペレーションにより指定された)任意のオペレーションの実行中に更新から保護されることを可能にする。他の一実施形態では、対応するマスクビットが0を有するデスティネーションの各要素の古い値を保持する。対照的に、ゼロ書き込みする場合、ベクトルマスクは、デスティネーションにおける要素の任意のセットが(ベースオペレーションおよび追加オペレーションにより指定された)任意のオペレーションの実行中にゼロにされることを可能にする。一実施形態において、対応するマスクビットが0の値を有する場合、デスティネーションの要素は、0に設定される。この機能のサブセットは、実行されるオペレーションのベクトル長を制御する能力である(すなわち、要素のスパンは、最初のものから最後のものに変更される)。しかし、変更される要素が連続している必要はない。従って、ライトマスクフィールド1270は、ロード、ストア、演算、論理等を含む部分的ベクトルオペレーションを可能にする。本発明の実施形態は、ライトマスクフィールド1270の内容が、用いられるべきライトマスクを含むいくつかのライトマスクレジスタのうちの1つを選択する(従って、ライトマスクフィールド1270の内容が実行されるべき当該マスキングを間接的に識別する)ものとして説明されているが、代替的な実施形態はこれに代えて、または更に、マスクライトフィールド1270の内容が実行されるべきマスキングを直接に指定することを可能にする。
即値フィールド1272。その内容は、即値の指定を可能にする。このフィールドは、即値をサポートしない一般的ベクトル向けフォーマットの実装において存在せず、即値を用いない命令中に存在しないという意味で任意選択である。
クラスフィールド1268。その内容は、命令の異なるクラスを区別する。図12A〜図12Bを参照すると、このフィールドの内容は、クラスA命令またはクラスB命令を選択する。図12A〜図12Bにおいて、角が丸い四角形は、特定の値がフィールド内に存在することを示すべく用いられる(例えば、図12Aおよび図12Bにおけるクラスフィールド1268のクラスA1268AおよびクラスB1268Bの各々)。
クラスAの命令テンプレート
クラスAの非メモリアクセス1205の命令テンプレートの場合に、アルファフィールド1252は、RSフィールド1252Aとして解釈され、その内容は、異なる追加オペレーションタイプのうちのどれが実行されるかを区別するが(例えば、ラウンド1252A.1およびデータ変換1252A.2は、各々、非メモリアクセス、ラウンドタイプオペレーション1210、および非メモリアクセス、データ変換タイプオペレーション1215の命令テンプレートに対して指定される)、ベータフィールド1254は、指定されたタイプのオペレーションのうちいずれが実行されるかを区別する。非メモリアクセス1205の命令テンプレートにおいて、スケールフィールド1260、変位フィールド1262A、および変位スケールフィールド1262Bは、存在しない。
非メモリアクセス命令テンプレート‐フルラウンド制御タイプオペレーション
非メモリアクセスのフルラウンド制御タイプオペレーション1210の命令テンプレートにおいて、ベータフィールド1254は、ラウンド制御フィールド1254Aとして解釈され、その内容は、静的ラウンドを提供する。本発明の説明される実施形態において、ラウンド制御フィールド1254Aは、抑圧全浮動小数点例外(SAE)フィールド1256およびラウンドオペレーション制御フィールド1258を含み、代替的な実施形態は、これら両方のコンセプトをサポートおよびエンコードして同一のフィールドとすることができ、またはこれらのコンセプト/フィールドのうち一方または他方のみを有し得る(例えば、ラウンドオペレーション制御フィールド1258のみを有し得る)。
SAEフィールド1256。その内容は、例外イベント報告を無効にするか否かを区別する。SAEフィールド1256の内容が、抑圧が有効にされたことを示す場合、所与の命令は、いずれの種類の浮動小数点例外フラグも報告せず、いずれの浮動小数点例外ハンドラも立ち上げない。
ラウンドオペレーション制御フィールド1258。その内容は、ラウンドオペレーション(例えば、ラウンドアップ、ラウンドダウン、ゼロへのラウンド、および近似値へのラウンド)のグループのうちのどれが実行されるべきかを区別する。このように、ラウンドオペレーション制御フィールド1258は、命令ベースでラウンドモードの変更を可能にする。プロセッサがラウンドモードを指定する制御レジスタを含む本発明の一実施形態において、ラウンドオペレーション制御フィールド1250の内容は、当該レジスタの値を上書きする。
非メモリアクセス命令テンプレート‐データ変換タイプオペレーション
非メモリアクセスのデータ変換タイプオペレーション1215の命令テンプレートにおいて、ベータフィールド1254は、データ変換フィールド1254Bとして解釈され、その内容は、いくつかのデータ変換のうちのどれが実行されるかを区別する(例えば、非データ変換、スウィズル、ブロードキャスト)。
クラスAのメモリアクセス1220の命令テンプレートの場合、アルファフィールド1252は、エビクションヒントフィールド1252Bとして解釈され、その内容は、エビクションヒントのうちのどれが用いられるかを区別するが(図12Aにおいて、一時的1252B.1および非一時的1252B.2は、各々、メモリアクセス、一時的1225の命令テンプレート、およびメモリアクセス、非一時的1230の命令テンプレートに対して指定される)、ベータフィールド1254は、データ操作フィールド1254Cとして解釈され、その内容は、いくつかのデータ操作オペレーション(プリミティブとしても知られる)のうちのどれが実行されるかを区別する(例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、およびデスティネーションのダウンコンバージョン)。メモリアクセス1220の命令テンプレートは、スケールフィールド1260を含み、変位フィールド1262Aまたは変位スケールフィールド1262Bを任意選択で含む。
ベクトルメモリ命令は、変換サポートを用いて、メモリからのベクトルロードおよびメモリへのベクトルストアを実行する。通常のベクトル命令の場合のように、ベクトルメモリ命令は、データ要素の様式で、メモリから/にデータを転送し、実際に転送される要素は、ライトマスクとして選択されるベクトルマスクの内容により規定される。
メモリアクセス命令テンプレート‐一時的
一時的データは、キャッシュから利益を得るのに十分なほど速やかに再利用される可能性が高いデータである。しかし、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含め、異なる態様で一時的データを実装してもよい。
メモリアクセス命令テンプレート‐非一時的
非一時的データは、レベル1のキャッシュにおけるキャッシュから利益を得るのに十分なほど速やかに再利用される可能性が低いデータであり、エビクションの優先権を与えられるべきである。しかし、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含め、異なる態様で非一時的データを実装してもよい。
クラスBの命令テンプレート
クラスBの命令テンプレートの場合、アルファフィールド1252は、ライトマスク制御(Z)フィールド1252Cとして解釈され、その内容は、ライトマスクフィールド1270により制御されるライトマスキングがマージングであるべきか、またはゼロ書き込みであるべきかを区別する。
クラスBの非メモリアクセス1205の命令テンプレートの場合、ベータフィールド1254の一部は、RLフィールド1257Aとして解釈され、その内容は、異なる追加オペレーションタイプのどれが実行されるかを区別するが(例えば、ラウンド1257A.1およびベクトル長(VSIZE)1257A.2は各々、非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプオペレーション1212の命令テンプレート、および非メモリアクセス、ライトマスク制御、VSIZEタイプオペレーション1217の命令テンプレートに対して指定される)、ベータフィールド1254の残りは、指定されたタイプのどのオペレーションが実行されるかを区別する。非メモリアクセス1205の命令テンプレートにおいて、スケールフィールド1260、変位フィールド1262A、および変位スケールフィールド1262Bは、存在しない。
非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプオペレーション1210の命令テンプレートにおいて、ベータフィールド1254の残りは、ラウンドオペレーションフィールド1259Aとして解釈され、例外イベント報告は、無効にされる(所与の命令は、いずれの種類の浮動小数点例外フラグも報告せず、いずれの浮動小数点例外ハンドラも立ち上げない)。
ラウンドオペレーション制御フィールド1259A。ちょうどラウンドオペレーション制御フィールド1258のように、その内容は、ラウンドオペレーション(例えば、ラウンドアップ、ラウンドダウン、ゼロへのラウンド、および近似値へのラウンド)のグループのうちのどれが実行されるべきかを区別する。このように、ラウンドオペレーション制御フィールド1259Aは、命令ベースでラウンドモードの変更を可能にする。プロセッサがラウンドモードを指定する制御レジスタを含む本発明の一実施形態において、ラウンドオペレーション制御フィールド1250の内容は、そのレジスタの値を上書きする。
非メモリアクセス、ライトマスク制御、VSIZEタイプオペレーション1217の命令テンプレートにおいて、ベータフィールド1254の残りは、ベクトル長フィールド1259Bとして解釈され、その内容は、いくつかのデータベクトル長のうちのどれが実行されるかを区別する(例えば、128、256、または512バイト)。
クラスBのメモリアクセス1220の命令テンプレートの場合、ベータフィールド1254の一部は、ブロードキャストフィールド1257Bとして解釈され、その内容は、ブロードキャストタイプのデータ操作オペレーションが実行されるべきか否かを区別するが、ベータフィールド1254の残りは、ベクトル長フィールド1259Bとして解釈される。メモリアクセス1220の命令テンプレートは、スケールフィールド1260を含み、変位フィールド1262Aまたは変位スケールフィールド1262Bを任意選択で含む。
一般的ベクトル向け命令フォーマット1200に関連して、フォーマットフィールド1240、ベースオペレーションフィールド1242、およびデータ要素幅フィールド1264を含む、フルオペコードフィールド1274が示される。一実施形態として、フルオペコードフィールド1274がこれらのフィールドの全てを含むものが示されているが、これら全てをサポートしない実施形態において、フルオペコードフィールド1274は、これらのフィールド全てより少ないものを含む。フルオペコードフィールド1274は、オペレーションコード(オペコード)を提供する。
追加オペレーションフィールド1250、データ要素幅フィールド1264、およびライトマスクフィールド1270は、一般的ベクトル向け命令フォーマットにおける命令ベースで、これらの機能が指定されることを可能にする。
ライトマスクフィールドおよびデータ要素幅フィールドを組み合わせることで、マスクが異なるデータ要素幅に基づいて適用されることを可能にするように、型付き命令を生成する。
クラスAおよびクラスB内に見出される様々な命令テンプレートは、異なる状況において有益である。本発明のいくつかの実施形態において、異なるプロセッサまたはプロセッサ内の異なるコアは、クラスAのみ、クラスBのみ、または両方のクラスをサポートし得る。例えば、汎用演算用の高性能汎用アウトオブオーダコアは、クラスBのみをサポートし得、主にグラフィックスおよび/またはサイエンティフィック(スループット)演算用のコアは、クラスAのみをサポートし得、両方用のコアは、両方をサポートし得る(勿論、両方のクラスの全てのテンプレートおよび命令ではないが、両方のクラスのテンプレートおよび命令のいくつかのミックスを有するコアは、本発明の範囲内である)。また、シングルプロセッサは、複数のコアを含み得、これらの全てが同じクラスをサポートし、または異なるコアが異なるクラスをサポートする。例えば、別個のグラフィックスコアおよび汎用コアを有するプロセッサにおいて、主にグラフィックスおよび/またはサイエンティフィック演算用のグラフィックスコアのうちの1つは、クラスAのみをサポートし得るが、汎用コアのうちの1または複数は、クラスBのみをサポートする汎用演算用のアウトオブオーダ実行およびレジスタリネームを用いる高性能汎用コアであり得る。別個のグラフィックスコアを有しない別のプロセッサは、クラスAおよびクラスBの両方をサポートする、もう1つの汎用インオーダまたはアウトオブオーダのコアを含み得る。勿論、本発明の異なる実施形態において、あるクラスの機能は、他のクラスにおいても実装され得る。高水準言語で書かれたプログラムは、1)実行のためにターゲットプロセッサによりサポートされるクラスの命令のみを有する形式、または2)全てのクラスの命令の異なる組み合わせを用いて書かれた代替的なルーチンを有し、現在、コードを実行しているプロセッサによりサポートされる命令に基づいて、実行するルーチンを選択する制御フローコードを有する形式を含む、種々様々な実行可能な形式にされる(例えば、実行時コンパイルまたは静的コンパイル)。
図13A〜13Dは、本発明の実施形態による例示的な特定ベクトル向け命令フォーマットを示すブロック図である。図13A〜13Dは、フィールドの位置、サイズ、解釈、および順序、ならびにそれらのフィールドのいくつかに対する値を指定するという意味で具体的な特定ベクトル向け命令フォーマット1300を示す。特定ベクトル向け命令フォーマット1300は、x86命令セットを拡張するために用いられ得、従ってフィールドのうちのいくつかは、既存のx86命令セットおよびその拡張(例えば、AVX)において用いられるものと類似するか、または同じである。このフォーマットは、拡張された既存のx86命令セットのプレフィックスエンコードフィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、および即値フィールドとの整合性を保つ。図13A〜図13Dがフィールドにマッピングされる図12A〜図12Bのフィールドが示される。
本発明の実施形態は、例示目的で一般的ベクトル向け命令フォーマット1200の文脈において、特定ベクトル向け命令フォーマット1300を参照して説明されるが、本発明は、特許請求される場合を除き、特定ベクトル向け命令フォーマット1300に限定されないことを理解されたい。例えば、一般的ベクトル向け命令フォーマット1200は、様々なフィールドのために考えられる様々なサイズを企図するが、特定ベクトル向け命令フォーマット1300は、特定サイズのフィールドを有するものとして示される。具体的な例として、データ要素幅フィールド1264は、特定ベクトル向け命令フォーマット1300における1つのビットフィールドとして示されるが、本発明は、そのようには限定されない(すなわち、一般的ベクトル向け命令フォーマット1200は、他のサイズのデータ要素幅フィールド1264を企図する)。
一般的ベクトル向け命令フォーマット1200は、図13Aにおいて示される順序で以下に列挙される、次のフィールドを含む。
EVEXプレフィックス(バイト0〜3)1302。4バイト形式でエンコードされる。
フォーマットフィールド1240(EVEXバイト0、ビット[7:0])。最初のバイト(EVEXバイト0)は、フォーマットフィールド1240であり、0x62を含む(本発明の一実施形態において、ベクトル向け命令フォーマットを区別するべく用いられる一意な値)。
第2〜第4のバイト(EVEXバイト1〜3)は、特定の能力を提供するいくつかのビットフィールドを含む。
REXフィールド1305(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は、1211Bとしてエンコードされ、ZMM15は、0000Bとしてエンコードされる。命令の他のフィールドは、当技術分野で既知のレジスタインデックスの下位の3つのビット(rrr、xxx、およびbbb)をエンコードし、従って、Rrrr、Xxxx、およびBbbbは、EVEX.R、EVEX.X、およびEVEX.Bを加えることにより形成され得る。
REX'フィールド1210。これはREX'フィールド1210の第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を組み合わせることにより形成される。
オペコードマップフィールド1315(EVEXバイト1、ビット[3:0]−mmmm)。その内容は、暗黙に示される先頭オペコードバイト(0F、0F38、または0F3)をエンコードする。
データ要素幅フィールド1264(EVEXバイト2、ビット[7]−W)は、EVEX.Wという表記により表される。EVEX.Wは、データタイプの粒度(サイズ)(32ビットのデータ要素または64ビットのデータ要素のいずれか)を定義するべく用いられる。
EVEX.vvvv1320(EVEXバイト2、ビット[6:3]−vvvv)。EVEX.vvvvの役割は、以下を含み得る。1)EVEX.vvvvは、反転(1の補数)形式で指定された第1のソースレジスタオペランドをエンコードし、2またはそれより多いソースオペランドを用いる命令に対して有効である。2)EVEX.vvvvは、一定の複数のベクトルシフトに対して1の補数形式で指定されたデスティネーションレジスタオペランドをエンコードする。または3)EVEX.vvvvは、いずれのオペランドもエンコードせず、フィールドは予約され、1211bを含むはずである。従って、EVEX.vvvvフィールド1320は、反転(1の補数)形式で格納された第1のソースレジスタ指定子の4つの下位ビットをエンコードする。命令に応じて、指定子サイズを32個のレジスタに拡張するべく、追加の異なるEVEXビットフィールドが用いられる。
EVEX.U1268クラスフィールド(EVEXバイト2、ビット[2]−U)。EVEX.U=0である場合、クラスAまたはEVEX.U0を示す。EVEX.U=1である場合、クラスBまたはEVEX.U1を示す。
プレフィックスエンコードフィールド1325(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を再設計し得、従って拡張を必要としない。
アルファフィールド1252(EVEXバイト3、ビット[7]−EH。EVEX.EH、EVEX.rs、EVEX.RL、EVEX.ライトマスク制御、およびEVEX.Nとしても知られる。αでも示される)。上記のように、このフィールドは、コンテキストに固有である。
ベータフィールド1254(EVEXバイト3、ビット[6:4]−SSS、EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られる。βββでも示される)。上記のように、このフィールドは、コンテキストに固有である。
REX'フィールド1210。これは、REX'フィールドの残りであり、拡張された32個のレジスタセットの上位の16個または下位の16個をエンコードするべく用いられ得るEVEX.V'ビットフィールドのいずれかである(EVEXバイト3、ビット[3]−V')。このビットは、ビット反転フォーマットで格納される。1の値は、下位の16個のレジスタをエンコードするべく用いられる。換言すると、V'VVVVは、EVEX.V'、EVEX.vvvvを組み合わせることにより形成される。
ライトマスクフィールド1270(EVEXバイト3、ビット[2:0]−kkk)。その内容は、上記のようにライトマスクレジスタにおけるレジスタのインデックスを指定する。本発明の一実施形態において、特定の値EVEX.kkk=000は、特定の命令のために非ライトマスクが用いられることを暗に示す、特別な動作を有する(これは、全ての1に対するハードワイヤされたライトマスクの使用、またはマスキングハードウェアを迂回するハードウェアの使用を含む、様々な態様で実装され得る)。
リアルオペコードフィールド1330(バイト4)は、オペコードバイトとしても知られる。オペコードの一部は、このフィールド内に指定される。
MOD R/Mフィールド1340(バイト5)は、MODフィールド1342、Regフィールド1344、およびR/Mフィールド1346を含む。上記のように、MODフィールド1342の内容は、メモリアクセスオペレーションおよび非メモリアクセスオペレーションを区別する。Regフィールド1344の役割は、2つの状況に要約され得る。すなわち、デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードし、またはオペコード拡張として扱われ、任意の命令オペランドをエンコードするためには用いられない。R/Mフィールド1346の役割は、メモリアドレスを参照する命令オペランドをエンコードし、またはデスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかをエンコードすることを含み得る。
スケール、インデックス、ベース(SIB)バイト(バイト6)。上記のように、スケールフィールド1250の内容は、メモリアドレス生成に用いられる。SIB.xxx1354およびSIB.bbb1356。これらのフィールドの内容は、レジスタインデックスXxxxおよびBbbbに関連して既に言及された。
変位フィールド1262A(バイト7〜10)。MODフィールド1342が10を含む場合、バイト7〜10は、変位フィールド1262Aであり、これはレガシ32ビット変位(disp32)と同様に機能し、バイト粒度で機能する。
変位係数フィールド1262B(バイト7)。MODフィールド1342が01を含む場合、バイト7は、変位係数フィールド1262Bである。このフィールドの位置は、バイト粒度で機能するレガシx86命令セットの8ビット変位(disp8)の位置と同じである。disp8は、符号拡張されるので、−128〜127バイトのオフセットのみをアドレスを指定し得る。64バイトのキャッシュラインに関しては、disp8は、4つの本当に有用な値である−128、−64、0、および64のみに設定され得る8ビットを用いる。多くの場合に、より広いレンジが必要とされるので、disp32が用いられる。しかし、disp32は、4バイトを必要とする。disp8およびdisp32とは対照的に、変位係数フィールド1262Bは、disp8の再解釈である。変位係数フィールド1262Bを用いる場合、実際の変位は、メモリオペランドアクセスのサイズ(N)で乗算される変位係数フィールドの内容により決定される。このタイプの変位は、disp8*Nと称される。これにより、平均命令長(単一バイトだが、はるかに広いレンジの変位に用いられる)を小さくする。そのような圧縮された変位は、有効な変位がメモリアクセスの粒度の倍数であり、従って、アドレスオフセットの冗長下位ビットは、エンコードされる必要がないという前提に基づく。換言すると、変位係数フィールド1262Bは、レガシx86命令セットの8ビット変位に置き換わる。従って、disp8がdisp8*Nにオーバーロードされることのみを例外として、変位係数フィールド1262Bは、x86命令セットの8ビット変位と同じ態様でエンコードされる(従って、ModRM/SIBエンコードルールに変更はない)。換言すると、エンコードルールまたはエンコードの長さに変更はないが、(バイト的アドレスオフセットを得るべく、メモリオペランドのサイズにより変位を調節する必要がある)ハードウェアによる変位値の解釈のみには変更がある。
即値フィールド1272は、上記のように動作する。
フルオペコードフィールド
図13Bは、本発明の一実施形態による、フルオペコードフィールド1274を構成する特定ベクトル向け命令フォーマット1300のフィールドを示すブロック図である。具体的には、フルオペコードフィールド1274は、フォーマットフィールド1240、ベースオペレーションフィールド1242、およびデータ要素幅(W)フィールド1264を含む。ベースオペレーションフィールド1242は、プレフィックスエンコードフィールド1325、オペコードマップフィールド1315、およびリアルオペコードフィールド1330を含む。
レジスタインデックスフィールド
図13Cは、本発明の一実施形態による、レジスタインデックスフィールド1244を構成する特定ベクトル向け命令フォーマット1300のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド1244は、REXフィールド1305、REX'フィールド1310、MODR/M.regフィールド1344、MODR/M.r/mフィールド1346、VVVVフィールド1320、xxxフィールド1354、およびbbbフィールド1356を含む。
追加オペレーションフィールド
図13Dは、本発明の一実施形態による、追加オペレーションフィールド1250を構成する特定ベクトル向け命令フォーマット1300のフィールドを示すブロック図である。クラス(U)フィールド1268が0を含む場合、EVEX.U0(クラスA1268A)を意味する。1を含む場合、EVEX.U1(クラスB1268B)を意味する。U=0、かつMODフィールド1342が11を含む場合(非メモリアクセスオペレーションを意味する)、アルファフィールド1252(EVEXバイト3、ビット[7]−EH)は、RSフィールド1252Aとして解釈される。RSフィールド1252Aが1(ラウンド1252A.1)を含む場合、ベータフィールド1254(EVEXバイト3、ビット[6:4]‐SSS)は、ラウンド制御フィールド1254Aとして解釈される。ラウンド制御フィールド1254Aは、1ビットのSAEフィールド1256および2ビットのラウンドオペレーションフィールド1258を含む。RSフィールド1252Aが0(データ変換1252A.2)を含む場合、ベータフィールド1254(EVEXバイト3、ビット[6:4]‐SSS)は、3ビットのデータ変換フィールド1254Bとして解釈される。U=0であり、かつMODフィールド1342が00、01、または10を含む場合(メモリアクセスオペレーションを意味する)、アルファフィールド1252(EVEXバイト3、ビット[7]‐EH)は、エビクションヒント(EH)フィールド1252Bとして解釈され、ベータフィールド1254(EVEXバイト3、ビット[6:4]‐SSS)は、3ビットのデータ操作フィールド1254Cとして解釈される。
U=1である場合、アルファフィールド1252(EVEXバイト3、ビット[7]−EH)は、ライトマスク制御(Z)フィールド1252Cとして解釈される。U=1であり、かつMODフィールド1342が11を含む場合(非メモリアクセスオペレーションを意味する)、ベータフィールド1254(EVEXバイト3、ビット[4]−S)の一部は、RLフィールド1257Aとして解釈される。1(ラウンド1257A.1)を含む場合、ベータフィールド1254(EVEXバイト3、ビット[6−5]‐S2−1)の残りは、ラウンドオペレーションフィールド1259Aとして解釈されるが、RLフィールド1257Aが0(VSIZE1257.A2)を含む場合、ベータフィールド1254(EVEXバイト3、ビット[6‐5]‐S2−1)の残りは、ベクトル長フィールド1259B(EVEXバイト3、ビット[6‐5]‐L1−0)として解釈される。U=1であり、MODフィールド1342が00、01、または10を含む場合(メモリアクセスオペレーションを意味する)、ベータフィールド1254(EVEXバイト3、ビット[6:4]−SSS)は、ベクトル長フィールド1259B(EVEXバイト3、ビット[6‐5]‐L1−0)およびブロードキャストフィールド1257B(EVEXバイト3、ビット[4]‐B)として解釈される。
図14は、本発明の一実施形態による、レジスタアーキテクチャ1400のブロック図である。示される実施形態において、512ビット幅の32個のベクトルレジスタ1410が存在する。これらのレジスタは、zmm0〜zmm31として参照される。下位の16個のzmmレジスタの下位の256ビットは、レジスタymm0〜15上にオーバーレイされる。下位の16個のzmmレジスタの下位の128ビット(ymmレジスタの下位の128ビット)は、レジスタxmm0〜15上にオーバーレイされる。以下の表に示されるように、特定ベクトル向け命令フォーマット1300は、これらのオーバーレイされたレジスタファイルで動作する。
Figure 2018500653
換言すると、ベクトル長フィールド1259Bは、最大長、および1もしくは複数の他のより短い長さのうちから選択され、そのような各々のより短い長さは、先述の長さの半分の長さである。ベクトル長フィールド1259Bを用いない命令テンプレートは、最大ベクトル長で動作する。更に、一実施形態において、特定ベクトル向け命令フォーマット1300のクラスB命令テンプレートは、パックドもしくはスカラ単精度/倍精度浮動小数点データおよびパックドもしくはスカラ整数データで動作する。スカラオペレーションは、zmm/ymm/xmmレジスタにおける最下位のデータ要素位置で実行されるオペレーションである。より上位のデータ要素位置は、命令前と同じままであるか、または実施形態に応じてゼロにされる。
ライトマスクレジスタ1415。示される実施形態において、8つのライトマスクレジスタ(k0〜k7)が存在し、各々は64ビットのサイズである。代替的な実施形態において、ライトマスクレジスタ1415は16ビットのサイズである。上記のように、本発明の一実施形態において、ベクトルマスクレジスタk0は、ライトマスクとして使用され得ない。通常、k0を示すエンコードがライトマスクに用いられる場合、これは、0xFFFFのハードワイヤされたライトマスクを選択し、その命令に対するライトマスキングを実質的に無効にする。
汎用レジスタ1425。示される実施形態において、メモリオペランドをアドレス指定する既存のx86のアドレス指定モードと共に用いられる16個の64ビット汎用レジスタが存在する。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、およびR8〜R15の名称により参照される。
スカラ浮動小数点スタックレジスタファイル(x87スタック)1445上に、MMXパックド整数フラットレジスタファイル1450がエイリアスされ、示される実施形態において、x87スタックは、x87命令セット拡張を用いて、32/64/80ビット浮動小数点データにスカラ浮動小数点オペレーションを実行するべく用いられる8つの要素のスタックである。MMXレジスタは、64ビットパックド整数データにオペレーションを実行すると共に、MMXレジスタとXMMレジスタとの間で実行されるいくつかのオペレーションのためのオペランドを保持するべく用いられる。
本発明の代替的な実施形態は、より広いか、またはより狭いレジスタを用い得る。更に、本発明の代替的な実施形態は、より多いか、より少ないか、または異なるレジスタファイルおよびレジスタを用い得る。
図15A〜図15Bは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示し、このコアは、チップにおける(同じタイプおよび/または異なるタイプの他のコアを含む)いくつかの論理ブロックのうちの1つである。アプリケーションに応じて、論理ブロックは、ある固定機能ロジック、メモリI/Oインタフェース、および他の必要なI/Oロジックを用いる高帯域幅の相互接続ネットワーク(例えば、リングネットワーク)を介して通信する。
図15Aは、本発明の実施形態によるシングルプロセッサコアのブロック図であり、オンダイ相互接続ネットワーク1502への接続に加え、レベル2(L2)キャッシュ1504のローカルサブセットを有する。一実施形態において、命令デコーダ1500は、パックドデータ命令セット拡張を用いるx86命令セットをサポートする。L1キャッシュ1506は、スカラユニットおよびベクトルユニット内のキャッシュメモリへの低レイテンシアクセスを可能にする。一実施形態において(設計を簡略化するべく)、スカラユニット1508およびベクトルユニット1510は、別個のレジスタセット(各々、スカラレジスタ1512およびベクトルレジスタ1514)を用い、それらの間で転送されるデータは、メモリに書き込まれ、次にレベル1(L1)キャッシュ1506からリードバックされる。本発明の代替的な実施形態は、異なるアプローチ(例えば、単一のレジスタセットを用い、またはライトバックおよびリードバックされることなく、2つのレジスタファイルの間で、データが転送されることを可能にする通信パスを含む)を用い得る。
L2キャッシュ1504のローカルサブセットは、プロセッサコア毎に1つずつ、別個のローカルサブセットに分割される全体的なL2キャッシュの一部である。各プロセッサコアは、L2キャッシュ1504の自身のローカルサブセットへの直接のアクセス経路を有する。プロセッサコアにより読み出されたデータは、そのL2キャッシュサブセット1504に格納され、自身のローカルL2キャッシュサブセットにアクセスする他のプロセッサコアと並列に迅速にアクセスされ得る。プロセッサコアにより書き込まれたデータは、自身のL2キャッシュサブセット1504に格納され、必要であれば他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは、双方向であり、プロセッサコア、L2キャッシュ、および他の論理ブロック等のエージェントがチップ内で互いに通信することを可能にする。各リングのデータパスは、1方向毎に1012ビット幅である。
図15Bは、本発明の実施形態による図15Aのプロセッサコアの一部の拡大図である。図15Bは、L1キャッシュ1504のL1データキャッシュ1506A部分、ならびにベクトルユニット1510およびベクトルレジスタ1514に関する更なる詳細を含む。具体的には、ベクトルユニット1510は、16ワイドのベクトル処理ユニット(VPU)(16ワイドのALU1528を参照)であり、これは整数命令、単精度浮動小数点命令、および倍精度浮動小数点命令のうちの1または複数を実行する。VPUは、スウィズルユニット1520によるレジスタ入力のスウィズル、数値変換ユニット1522A〜Bによる数値変換、およびメモリ入力時のレプリケーションユニット1524によるレプリケーションをサポートする。ライトマスクレジスタ1526は、結果として生じるベクトル書き込みを予測(predicating)することを可能にする。
本発明の実施形態は、上記の様々な段階を含み得る。段階は、汎用または専用プロセッサに段階を実行させるために用いられ得る機械実行可能命令で実施され得る。あるいは、これらの段階は、段階を実行するためのハードワイヤされたロジックを含む特定のハードウェアコンポーネントにより、またはプログラミングされたコンピュータコンポーネントおよびカスタムハードウェアコンポーネントの任意の組み合わせにより、実行され得る。
本明細書において説明されるように、命令は、特定のオペレーションを実行するよう構成され、または非一時的コンピュータ可読媒体で実施されるメモリに格納された予め定められた機能もしくはソフトウェア命令を有する特定用途向け集積回路(ASIC)等のハードウェアの特定の構成を指し得る。従って、図面に示される技術は、1または複数の電子デバイス(例えば、終端局およびネットワーク要素等)上に格納され、実行されるコードおよびデータを用いて実装され得る。そのような電子デバイスは、非一時的コンピュータ機械可読ストレージ媒体(例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、リードオンリメモリ、フラッシュメモリデバイス、相変化メモリ)および一時的コンピュータ機械可読通信媒体(例えば、電気的、光、音響、もしくは搬送波、赤外線信号、デジタル信号等の他の形態の伝搬信号)等のコンピュータ機械可読媒体を用いてコードおよびデータを格納し、(内部でおよび/またはネットワークを介する他の電子デバイスと)通信する。更に、そのような電子デバイスは通常、1もしくは複数のストレージデバイス(非一時的機械可読ストレージ媒体)、ユーザ入出力デバイス(例えば、キーボード、タッチスクリーン、および/またはディスプレイ)、ならびにネットワーク接続等、1もしくは複数の他のコンポーネントに結合された1もしくは複数のプロセッサのセットを含む。プロセッサおよび他のコンポーネントのセットの結合は通常、1または複数のバスおよびブリッジ(バスコントローラとも呼ばれる)を介して行われる。ストレージデバイスおよびネットワークトラフィックを搬送する信号は、各々、1または複数の機械可読ストレージ媒体および機械可読通信媒体を表す。従って、所与の電子デバイスのストレージデバイスは通常、当該電子デバイスの1または複数のプロセッサのセットに対して実行するためのコードおよび/またはデータを格納する。勿論、本発明の実施形態の1または複数の部分は、ソフトウェア、ファームウェア、および/またはハードウェアの異なる組み合わせを用いて実装され得る。この詳細な説明を通じて、説明の目的のために、多数の具体的な詳細が、本発明の完全な理解を提供するべく記載された。しかし、当業者には本発明がこれら具体的な詳細のいくつかがなくても実施され得ることが明らかであろう。特定の例において、周知の構造および機能は、本発明の主題を不明瞭にするのを避けるべく、精巧詳細に説明されていない。従って、本発明の範囲および趣旨は、以下の特許請求の範囲の観点から判断されるべきである。
本発明の実施形態は、デスティネーションパックドデータオペランド、第1のソースパックドデータオペランド、第2のソースパックドデータオペランド、および即値を示す命令をメモリからフェッチするフェッチロジックと、即値に対応する位置に基づいて第2のソースパックドデータオペランドにおけるビットを決定し、第1のソースパックドデータオペランドと決定されたビットとの間でビット単位のANDを実行して中間結果を生成し、デスティネーションパックドデータオペランドと中間結果との間でビット単位のXORを実行し、最終結果を生成し、デスティネーションパックドデータオペランドによって示される格納位置に最終結果を格納する実行ロジックとを備える、プロセッサを含む。
更なる実施形態は、第1のソースパックドデータオペランドと決定されたビットとの間でビット単位のANDを実行するべく、実行ロジックが、更に、第1のソースパックドデータオペランドと一時ベクトルとの間でビット単位のANDを実行するように構成され、決定されたビットの値は、1または複数の回数、一時ベクトルにブロードキャストされることを含む。
更なる実施形態は、デスティネーションパックドデータオペランド、第1のソースパックドデータオペランド、および第2のソースパックドデータオペランドによって示される格納位置が、別個の64ビットセクションで処理され、プロセッサが、64ビットセクションの各々に対して同一のロジックを実行することを含む。
更なる実施形態は、命令は、ライトマスクオペランドを更に含み、実行ロジックは、ライトマスクがデスティネーションパックドデータオペランドの64ビットセクションうちの1つに対して設定されたことをライトマスクオペランドが示すとの判断に応じて、デスティネーションパックドデータオペランドによって示された格納位置における64ビットセクションのうちの1つの値をゼロに更にセットすることを含む。
更なる実施形態は、デスティネーションパックドデータオペランド、第1のソースパックドデータオペランド、および第2のソースパックドデータオペランドによって示される格納位置が、レジスタおよびメモリ位置のうちの少なくとも1つであることを含む。
更なる実施形態は、デスティネーションパックドデータオペランド、第1のソースパックドデータオペランド、および第2のソースパックドデータオペランドによって示される格納位置が、512ビット長のレジスタであることを含む。
更なる実施形態は、即値が、8ビット長であることを含む。
更なる実施形態は、命令が、ビット行列とビットベクトルとの間でビット行列乗算オペレーションを実行するために用いられ、ビット行列の1または複数の列が、第1のソースパックドデータオペランドによって示される格納位置に格納され、ビットベクトルの値が、第2のソースパックドデータオペランドによって示される格納位置に格納されることを含む。
本発明の実施形態は、ビット行列が、ビット行列の1または複数の列が第1のソースパックドデータオペランドによって示される格納位置に列×列で格納されるように入れ替えられることを含む。
更なる実施形態は、デスティネーションパックドデータオペランドによって示される格納位置が、命令がビット行列の列の各々に対して実行されたときの、ビット行列とビットベクトルとの間のビット行列乗算オペレーションの結果を含み、命令の実行毎に、即値が、処理済みのビット行列の列番号に対応するビットベクトルにおける位置を示す値を指定することを含む。
本発明の実施形態は、コンピュータプロセッサにおける方法であって、デスティネーションパックドデータオペランド、第1のソースパックドデータオペランド、第2のソースパックドデータオペランド、および即値を示す命令をメモリからフェッチする段階と、即値に対応する位置に基づいて第2のソースパックドデータオペランドにおけるビットを決定する段階と、第1のソースパックドデータオペランドと決定されたビットとの間でビット単位のANDを実行して中間結果を生成する段階と、デスティネーションパックドデータオペランドと中間結果との間でビット単位のXORを実行し、最終結果を生成する段階と、デスティネーションパックドデータオペランドによって示される格納位置に最終結果を格納する段階とを備える、方法を含む。
更なる実施形態は、第1のソースパックドデータオペランドと決定されたビットとの間でビット単位のANDを実行する段階が、更に、第1のソースパックドデータオペランドと一時ベクトルとの間でビット単位のANDを実行する段階を備え、決定されたビットの値が、1または複数の回数、一時ベクトルにブロードキャストされることを含む。
更なる実施形態は、デスティネーションパックドデータオペランド、第1のソースパックドデータオペランド、および第2のソースパックドデータオペランドによって示される格納位置が、別個の64ビットセクションで処理され、プロセッサが、64ビットセクションの各々に対して同一のロジックを実行することを含む。
更なる実施形態は、命令は、ライトマスクオペランドを更に含み、方法は、ライトマスクがデスティネーションパックドデータオペランドの64ビットセクションうちの1つに対して設定されたことをライトマスクオペランドが示すとの判断に応じて、デスティネーションパックドデータオペランドによって示された格納位置における64ビットセクションのうちの1つの値をゼロに更にセットすることを含む。
更なる実施形態は、デスティネーションパックドデータオペランド、第1のソースパックドデータオペランド、および第2のソースパックドデータオペランドによって示される格納位置が、レジスタおよびメモリ位置のうちの少なくとも1つであることを含む。
更なる実施形態は、デスティネーションパックドデータオペランド、第1のソースパックドデータオペランド、および第2のソースパックドデータオペランドによって示される格納位置が、512ビット長のレジスタであることを含む。
更なる実施形態は、即値が、8ビット長であることを含む。
更なる実施形態は、命令が、ビット行列とビットベクトルとの間でビット行列乗算オペレーションを実行するために用いられ、ビット行列の1または複数の列が、第1のソースパックドデータオペランドによって示される格納位置に格納され、ビットベクトルの値が、第2のソースパックドデータオペランドによって示される格納位置に格納されることを含む。
本発明の実施形態は、ビット行列が、ビット行列の1または複数の列が第1のソースパックドデータオペランドによって示される格納位置に列×列で格納されるように入れ替えられることを含む。
更なる実施形態は、デスティネーションパックドデータオペランドによって示される格納位置が、命令がビット行列の列の各々に対して実行されたときの、ビット行列とビットベクトルとの間のビット行列乗算オペレーションの結果を含み、命令の実行毎に、即値が、処理済みのビット行列の列番号に対応するビットベクトルにおける位置を示す値を指定することを含む。
本発明は、いくつかの実施形態に関して説明されているが、当業者は、本発明が説明される実施形態に限定されず、添付の特許請求の範囲の趣旨および範囲内で修正および変更を実施し得ることを理解するであろう。従って、本明細書は、限定ではなく、例示としてみなされるものである。

Claims (20)

  1. デスティネーションパックドデータオペランド、第1のソースパックドデータオペランド、第2のソースパックドデータオペランド、および即値を示す命令をメモリからフェッチするフェッチロジックと、
    前記即値に対応する位置に基づいて前記第2のソースパックドデータオペランドにおけるビットを決定し、
    前記第1のソースパックドデータオペランドと決定された前記ビットとの間でビット単位のANDを実行して中間結果を生成し、
    前記デスティネーションパックドデータオペランドと前記中間結果との間でビット単位のXORを実行し、最終結果を生成し、
    前記デスティネーションパックドデータオペランドによって示される格納位置に前記最終結果を格納する実行ロジックとを備える、プロセッサ。
  2. 前記第1のソースパックドデータオペランドと決定された前記ビットとの間で前記ビット単位のANDを実行するべく、前記実行ロジックは、更に、前記第1のソースパックドデータオペランドと一時ベクトルとの間で前記ビット単位のANDを実行し、
    決定された前記ビットの値は、1または複数の回数、前記一時ベクトルにブロードキャストされる、請求項1に記載のプロセッサ。
  3. 前記デスティネーションパックドデータオペランド、前記第1のソースパックドデータオペランド、および前記第2のソースパックドデータオペランドによって示される格納位置は、別個の64ビットセクションで処理され、
    前記プロセッサは、前記64ビットセクションの各々に対して同一のロジックを実行する、請求項1または2に記載のプロセッサ。
  4. 前記命令は、ライトマスクオペランドを更に含み、
    前記実行ロジックは、ライトマスクが前記デスティネーションパックドデータオペランドの前記64ビットセクションうちの1つに対して設定されたことを前記ライトマスクオペランドが示すとの判断に応じて、前記デスティネーションパックドデータオペランドによって示された前記格納位置における前記64ビットセクションのうちの前記1つの値をゼロに更にセットする、請求項3に記載のプロセッサ。
  5. 前記デスティネーションパックドデータオペランド、前記第1のソースパックドデータオペランド、および前記第2のソースパックドデータオペランドによって示される前記格納位置は、レジスタおよびメモリ位置のうちの少なくとも1つである、請求項1〜4のいずれか1項に記載のプロセッサ。
  6. 前記デスティネーションパックドデータオペランド、前記第1のソースパックドデータオペランド、および前記第2のソースパックドデータオペランドによって示される前記格納位置は、512ビット長のレジスタである、請求項5に記載のプロセッサ。
  7. 前記即値は、8ビット長である、請求項5または6に記載のプロセッサ。
  8. 前記命令は、ビット行列とビットベクトルとの間でビット行列乗算オペレーションを実行するために用いられ、
    前記ビット行列の1または複数の列は、前記第1のソースパックドデータオペランドによって示される前記格納位置に格納され、
    前記ビットベクトルの値は、前記第2のソースパックドデータオペランドによって示される前記格納位置に格納される、請求項1〜7のいずれか1項に記載のプロセッサ。
  9. 前記ビット行列は、前記ビット行列の前記1または複数の列が前記第1のソースパックドデータオペランドによって示される前記格納位置に列×列で格納されるように入れ替えられる、請求項8に記載のプロセッサ。
  10. 前記デスティネーションパックドデータオペランドによって示される前記格納位置は、前記命令が前記ビット行列の前記列の各々に対して実行されたときの、前記ビット行列と前記ビットベクトルとの間の前記ビット行列乗算オペレーションの結果を含み、
    前記命令の実行毎に、即値は、処理済みの前記ビット行列の列番号に対応する前記ビットベクトルにおける位置を示す値を指定する、請求項9に記載のプロセッサ。
  11. コンピュータプロセッサにおける方法であって、
    デスティネーションパックドデータオペランド、第1のソースパックドデータオペランド、第2のソースパックドデータオペランド、および即値オペランドを示す命令をメモリからフェッチする段階と、
    即値に対応する位置に基づいて前記第2のソースパックドデータオペランドにおけるビットを決定する段階と、
    前記第1のソースパックドデータオペランドと決定された前記ビットとの間でビット単位のANDを実行して中間結果を生成する段階と、
    前記デスティネーションパックドデータオペランドと前記中間結果との間でビット単位のXORを実行し、最終結果を生成する段階と、
    前記デスティネーションパックドデータオペランドによって示される格納位置に前記最終結果を格納する段階とを備える、方法。
  12. 前記第1のソースパックドデータオペランドと決定された前記ビットとの間で前記ビット単位のANDを実行する段階は、更に、前記第1のソースパックドデータオペランドと一時ベクトルとの間で前記ビット単位のANDを実行する段階を備え、
    決定された前記ビットの値は、1または複数の回数、前記一時ベクトルにブロードキャストされる、請求項11に記載の方法。
  13. 前記デスティネーションパックドデータオペランド、前記第1のソースパックドデータオペランド、および前記第2のソースパックドデータオペランドによって示される格納位置は、別個の64ビットセクションで処理され、
    プロセッサは、前記64ビットセクションの各々に対して同一のロジックを実行する、請求項11または12に記載の方法。
  14. 前記命令は、ライトマスクオペランドを更に含み、
    前記方法は、ライトマスクが前記デスティネーションパックドデータオペランドの前記64ビットセクションうちの1つに対して設定されたことを前記ライトマスクオペランドが示すとの判断に応じて、前記デスティネーションパックドデータオペランドによって示された前記格納位置における前記64ビットセクションのうちの前記1つの値をゼロに更にセットする段階を備える、請求項13に記載の方法。
  15. 前記デスティネーションパックドデータオペランド、前記第1のソースパックドデータオペランド、および前記第2のソースパックドデータオペランドによって示される前記格納位置は、レジスタおよびメモリ位置のうちの少なくとも1つである、請求項11〜14のいずれか1項に記載の方法。
  16. 前記デスティネーションパックドデータオペランド、前記第1のソースパックドデータオペランド、および前記第2のソースパックドデータオペランドによって示される前記格納位置は、512ビット長のレジスタである、請求項15に記載の方法。
  17. 前記即値は、8ビット長である、請求項15または16に記載の方法。
  18. 前記命令は、ビット行列とビットベクトルとの間でビット行列乗算オペレーションを実行するために用いられ、
    前記ビット行列の1または複数の列は、前記第1のソースパックドデータオペランドによって示される前記格納位置に格納され、
    前記ビットベクトルの値は、前記第2のソースパックドデータオペランドによって示される前記格納位置に格納される、請求項11〜17のいずれか1項に記載の方法。
  19. 前記ビット行列は、前記ビット行列の前記1または複数の列が前記第1のソースパックドデータオペランドによって示される前記格納位置に列×列で格納されるように入れ替えられる、請求項18に記載の方法。
  20. 前記デスティネーションパックドデータオペランドによって示される前記格納位置は、前記命令が前記ビット行列の前記列の各々に対して実行されたときの、前記ビット行列と前記ビットベクトルとの間の前記ビット行列乗算オペレーションの結果を含み、
    前記命令の実行毎に、前記即値は、処理済みの前記ビット行列の列番号に対応する前記ビットベクトルにおける位置を示す値を指定する、請求項19に記載の方法。
JP2017527294A 2014-12-23 2015-11-20 ベクトルブロードキャストおよびxorand論理命令のための装置および方法 Ceased JP2018500653A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/582,171 US20160179523A1 (en) 2014-12-23 2014-12-23 Apparatus and method for vector broadcast and xorand logical instruction
US14/582,171 2014-12-23
PCT/US2015/061725 WO2016105727A1 (en) 2014-12-23 2015-11-20 Apparatus and method for vector broadcast and xorand logical instruction

Publications (1)

Publication Number Publication Date
JP2018500653A true JP2018500653A (ja) 2018-01-11

Family

ID=56129465

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017527294A Ceased JP2018500653A (ja) 2014-12-23 2015-11-20 ベクトルブロードキャストおよびxorand論理命令のための装置および方法

Country Status (9)

Country Link
US (1) US20160179523A1 (ja)
EP (1) EP3238041A4 (ja)
JP (1) JP2018500653A (ja)
KR (1) KR20170097018A (ja)
CN (1) CN107003844A (ja)
BR (1) BR112017010985A2 (ja)
SG (1) SG11201704245VA (ja)
TW (1) TWI610229B (ja)
WO (1) WO2016105727A1 (ja)

Families Citing this family (52)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR3021428B1 (fr) * 2014-05-23 2017-10-13 Kalray Multiplication de matrices de bits utilisant des registres explicites
US10275243B2 (en) 2016-07-02 2019-04-30 Intel Corporation Interruptible and restartable matrix multiplication instructions, processors, methods, and systems
US10282204B2 (en) 2016-07-02 2019-05-07 Intel Corporation Systems, apparatuses, and methods for strided load
US10846087B2 (en) * 2016-12-30 2020-11-24 Intel Corporation Systems, apparatuses, and methods for broadcast arithmetic operations
JP7148526B2 (ja) * 2017-02-23 2022-10-05 アーム・リミテッド データ処理装置におけるベクトルによる要素演算
WO2018174936A1 (en) 2017-03-20 2018-09-27 Intel Corporation Systems, methods, and apparatuses for tile matrix multiplication and accumulation
US10372456B2 (en) * 2017-05-24 2019-08-06 Microsoft Technology Licensing, Llc Tensor processor instruction set architecture
WO2019009870A1 (en) 2017-07-01 2019-01-10 Intel Corporation SAVE BACKGROUND TO VARIABLE BACKUP STATUS SIZE
US10552154B2 (en) 2017-09-29 2020-02-04 Intel Corporation Apparatus and method for multiplication and accumulation of complex and real packed data elements
US10795677B2 (en) 2017-09-29 2020-10-06 Intel Corporation Systems, apparatuses, and methods for multiplication, negation, and accumulation of vector packed signed values
US10514924B2 (en) 2017-09-29 2019-12-24 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication of packed data elements
US10664277B2 (en) 2017-09-29 2020-05-26 Intel Corporation Systems, apparatuses and methods for dual complex by complex conjugate multiply of signed words
US10802826B2 (en) 2017-09-29 2020-10-13 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication of packed data elements
US11074073B2 (en) 2017-09-29 2021-07-27 Intel Corporation Apparatus and method for multiply, add/subtract, and accumulate of packed data elements
US11243765B2 (en) 2017-09-29 2022-02-08 Intel Corporation Apparatus and method for scaling pre-scaled results of complex multiply-accumulate operations on packed real and imaginary data elements
US11256504B2 (en) 2017-09-29 2022-02-22 Intel Corporation Apparatus and method for complex by complex conjugate multiplication
US10534838B2 (en) * 2017-09-29 2020-01-14 Intel Corporation Bit matrix multiplication
US10795676B2 (en) 2017-09-29 2020-10-06 Intel Corporation Apparatus and method for multiplication and accumulation of complex and real packed data elements
US11093247B2 (en) 2017-12-29 2021-08-17 Intel Corporation Systems and methods to load a tile register pair
US11023235B2 (en) 2017-12-29 2021-06-01 Intel Corporation Systems and methods to zero a tile register pair
US11789729B2 (en) 2017-12-29 2023-10-17 Intel Corporation Systems and methods for computing dot products of nibbles in two tile operands
US11669326B2 (en) 2017-12-29 2023-06-06 Intel Corporation Systems, methods, and apparatuses for dot product operations
US11816483B2 (en) 2017-12-29 2023-11-14 Intel Corporation Systems, methods, and apparatuses for matrix operations
US11809869B2 (en) 2017-12-29 2023-11-07 Intel Corporation Systems and methods to store a tile register pair to memory
US20190205131A1 (en) * 2017-12-29 2019-07-04 Intel Corporation Systems, methods, and apparatuses for vector broadcast
US10664287B2 (en) 2018-03-30 2020-05-26 Intel Corporation Systems and methods for implementing chained tile operations
US11093579B2 (en) 2018-09-05 2021-08-17 Intel Corporation FP16-S7E8 mixed precision for deep learning and other algorithms
US11579883B2 (en) 2018-09-14 2023-02-14 Intel Corporation Systems and methods for performing horizontal tile operations
US10970076B2 (en) 2018-09-14 2021-04-06 Intel Corporation Systems and methods for performing instructions specifying ternary tile logic operations
US10719323B2 (en) 2018-09-27 2020-07-21 Intel Corporation Systems and methods for performing matrix compress and decompress instructions
US10990396B2 (en) 2018-09-27 2021-04-27 Intel Corporation Systems for performing instructions to quickly convert and use tiles as 1D vectors
US10866786B2 (en) 2018-09-27 2020-12-15 Intel Corporation Systems and methods for performing instructions to transpose rectangular tiles
US10929143B2 (en) 2018-09-28 2021-02-23 Intel Corporation Method and apparatus for efficient matrix alignment in a systolic array
US10963256B2 (en) 2018-09-28 2021-03-30 Intel Corporation Systems and methods for performing instructions to transform matrices into row-interleaved format
US10896043B2 (en) 2018-09-28 2021-01-19 Intel Corporation Systems for performing instructions for fast element unpacking into 2-dimensional registers
US10963246B2 (en) 2018-11-09 2021-03-30 Intel Corporation Systems and methods for performing 16-bit floating-point matrix dot product instructions
US10929503B2 (en) 2018-12-21 2021-02-23 Intel Corporation Apparatus and method for a masked multiply instruction to support neural network pruning operations
US11294671B2 (en) 2018-12-26 2022-04-05 Intel Corporation Systems and methods for performing duplicate detection instructions on 2D data
US11886875B2 (en) 2018-12-26 2024-01-30 Intel Corporation Systems and methods for performing nibble-sized operations on matrix elements
US20200210517A1 (en) 2018-12-27 2020-07-02 Intel Corporation Systems and methods to accelerate multiplication of sparse matrices
US10922077B2 (en) 2018-12-29 2021-02-16 Intel Corporation Apparatuses, methods, and systems for stencil configuration and computation instructions
US10942985B2 (en) 2018-12-29 2021-03-09 Intel Corporation Apparatuses, methods, and systems for fast fourier transform configuration and computation instructions
US11269630B2 (en) 2019-03-29 2022-03-08 Intel Corporation Interleaved pipeline of floating-point adders
US11016731B2 (en) 2019-03-29 2021-05-25 Intel Corporation Using Fuzzy-Jbit location of floating-point multiply-accumulate results
US11175891B2 (en) 2019-03-30 2021-11-16 Intel Corporation Systems and methods to perform floating-point addition with selected rounding
US10990397B2 (en) 2019-03-30 2021-04-27 Intel Corporation Apparatuses, methods, and systems for transpose instructions of a matrix operations accelerator
US11403097B2 (en) 2019-06-26 2022-08-02 Intel Corporation Systems and methods to skip inconsequential matrix operations
US11334647B2 (en) 2019-06-29 2022-05-17 Intel Corporation Apparatuses, methods, and systems for enhanced matrix multiplier architecture
US11714875B2 (en) 2019-12-28 2023-08-01 Intel Corporation Apparatuses, methods, and systems for instructions of a matrix operations accelerator
US11941395B2 (en) 2020-09-26 2024-03-26 Intel Corporation Apparatuses, methods, and systems for instructions for 16-bit floating-point matrix dot product instructions
US11494190B2 (en) * 2021-03-31 2022-11-08 Arm Limited Circuitry and method for controlling a generated association of a physical register with a predicated processing operation based on predicate data state
CN114826278B (zh) * 2022-04-25 2023-04-28 电子科技大学 基于布尔矩阵分解的图数据压缩方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05508499A (ja) * 1990-06-11 1993-11-25 クレイ、リサーチ、インコーポレーテッド 特殊目的ブール演算装置のための方法およびその装置
CN101706712A (zh) * 2009-11-27 2010-05-12 北京龙芯中科技术服务中心有限公司 浮点向量乘加运算装置和方法
US7873812B1 (en) * 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US20140052969A1 (en) * 2011-12-23 2014-02-20 Intel Corporation Super multiply add (super madd) instructions with three scalar terms

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6925479B2 (en) * 2001-04-30 2005-08-02 Industrial Technology Research Institute General finite-field multiplier and method of the same
US6944747B2 (en) * 2002-12-09 2005-09-13 Gemtech Systems, Llc Apparatus and method for matrix data processing
US7219289B2 (en) * 2005-03-15 2007-05-15 Tandberg Data Corporation Multiply redundant raid system and XOR-efficient method and apparatus for implementing the same
US7873821B2 (en) * 2007-04-11 2011-01-18 American Megatrends, Inc. BIOS configuration and management
CN103959237B (zh) * 2011-11-30 2016-09-28 英特尔公司 用于提供向量横向比较功能的指令和逻辑
CN103959236B (zh) * 2011-11-30 2016-12-07 英特尔公司 用于提供向量横向多数表决功能的处理器、设备和处理系统
US9960917B2 (en) * 2011-12-22 2018-05-01 Intel Corporation Matrix multiply accumulate instruction
US20140223138A1 (en) * 2011-12-23 2014-08-07 Elmoustapha Ould-Ahmed-Vall Systems, apparatuses, and methods for performing conversion of a mask register into a vector register.
US9465612B2 (en) * 2011-12-28 2016-10-11 Intel Corporation Systems, apparatuses, and methods for performing delta encoding on packed data elements
EP2798454A4 (en) * 2011-12-30 2016-08-17 Intel Corp VARIABLE SIMD DISPLACEMENT AND ROTATION USING A CONTROL PANELULATION
US9235417B2 (en) * 2011-12-31 2016-01-12 Intel Corporation Real time instruction tracing compression of RET instructions
US9128698B2 (en) * 2012-09-28 2015-09-08 Intel Corporation Systems, apparatuses, and methods for performing rotate and XOR in response to a single instruction
US9787469B2 (en) * 2013-04-24 2017-10-10 Nec Corporation Method and system for encrypting data

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05508499A (ja) * 1990-06-11 1993-11-25 クレイ、リサーチ、インコーポレーテッド 特殊目的ブール演算装置のための方法およびその装置
US7873812B1 (en) * 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
CN101706712A (zh) * 2009-11-27 2010-05-12 北京龙芯中科技术服务中心有限公司 浮点向量乘加运算装置和方法
US20140052969A1 (en) * 2011-12-23 2014-02-20 Intel Corporation Super multiply add (super madd) instructions with three scalar terms

Also Published As

Publication number Publication date
TWI610229B (zh) 2018-01-01
BR112017010985A2 (pt) 2018-02-14
US20160179523A1 (en) 2016-06-23
EP3238041A1 (en) 2017-11-01
KR20170097018A (ko) 2017-08-25
TW201636831A (zh) 2016-10-16
EP3238041A4 (en) 2018-08-15
WO2016105727A1 (en) 2016-06-30
SG11201704245VA (en) 2017-07-28
CN107003844A (zh) 2017-08-01

Similar Documents

Publication Publication Date Title
JP2018500653A (ja) ベクトルブロードキャストおよびxorand論理命令のための装置および方法
JP6238497B2 (ja) プロセッサ、方法、及びシステム
JP5926754B2 (ja) 限定範囲ベクトルメモリアクセス命令、プロセッサ、方法、及びシステム
JP5918287B2 (ja) 演算マスクのマスクされていない要素をコンソリデートする命令処理装置、方法、システム、及びプログラム
JP6466388B2 (ja) 方法及び装置
JP6419205B2 (ja) プロセッサ、方法、システム、コンピュータシステム、およびコンピュータ可読記憶媒体
JP6741006B2 (ja) マスクレジスタとベクトルレジスタとの間で可変に拡張するための方法および装置
JP2017529601A (ja) ビットシャッフルプロセッサ、方法、システム、および命令
JP2018500660A (ja) ベクトルインデックスロードおよびストアのための方法および装置
JP2017529597A (ja) ビット群インターリーブプロセッサ、方法、システムおよび命令
JP6807073B2 (ja) 高速ベクトルによる動的なメモリ競合検出
JP2018500652A (ja) マスクをマスク値のベクトルに拡張するための方法および装置
JP2018507453A (ja) 命令フローを最適化するチェックを実行するための装置および方法
JP2017539016A (ja) 結合した乗算−乗算命令のための装置および方法
JP2017534982A (ja) 4d座標から4dのz曲線インデックスを計算するための機械レベル命令
JP2018500629A (ja) 3d座標から3dのz曲線インデックスを計算するための機械レベル命令
JP2017539010A (ja) ベクトル飽和ダブルワード/クワッドワードの加算を実行するための命令およびロジック
KR20170097012A (ko) 역 원심 연산을 수행하는 명령어 및 로직
JP2018506762A (ja) 結合した加算−加算命令のための装置および方法
JP2018500665A (ja) マスク値を圧縮するための方法および装置
JP2018500666A (ja) ベクトルビットギャザーを実行するための方法および装置
US20190138303A1 (en) Apparatus and method for vector horizontal logical instruction
JP2018503162A (ja) スピンループジャンプを実行するための装置および方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20181115

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190628

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190723

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

Free format text: JAPANESE INTERMEDIATE CODE: A045

Effective date: 20191126