JP6699845B2 - 方法及びプロセッサ - Google Patents

方法及びプロセッサ Download PDF

Info

Publication number
JP6699845B2
JP6699845B2 JP2017527586A JP2017527586A JP6699845B2 JP 6699845 B2 JP6699845 B2 JP 6699845B2 JP 2017527586 A JP2017527586 A JP 2017527586A JP 2017527586 A JP2017527586 A JP 2017527586A JP 6699845 B2 JP6699845 B2 JP 6699845B2
Authority
JP
Japan
Prior art keywords
index
register
processor
vector register
child
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2017527586A
Other languages
English (en)
Other versions
JP2018500656A (ja
Inventor
エム. クンズマン、デイビッド
エム. クンズマン、デイビッド
ジェイ. ヒューズ、クリストファー
ジェイ. ヒューズ、クリストファー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2018500656A publication Critical patent/JP2018500656A/ja
Application granted granted Critical
Publication of JP6699845B2 publication Critical patent/JP6699845B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/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/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Description

本発明は、概してコンピュータプロセッサの分野に関する。より具体的には、本発明は、1組のベクトル要素にリダクション演算を実行する方法及び装置に関する。
命令セット又は命令セットアーキテクチャ(ISA、instruction set architecture)は、プログラミングに関連するコンピュータアーキテクチャの一部であり、ネイティブデータタイプ、命令、レジスタアーキテクチャ、アドレッシングモード、メモリアーキテクチャ、割り込み及び例外処理、並びに外部入力及び出力(I/O、input and output)を含む。本明細書では、「命令」という用語は、一般に、マクロ命令、すなわち、実行のためにプロセッサに提供される命令を指し、マイクロ命令又はマイクロ演算、すなわち、プロセッサのデコーダがマクロ命令を復号して得られるもの、を指すわけではないことに留意されたい。マイクロ命令又はマイクロ演算は、プロセッサ上の実行ユニットに、マクロ命令に関連する論理を実装するように演算を実行するために命令するように構成されることができる。
ISAは、命令セットを実装するために使用される1組のプロセッサ設計技術であるマイクロアーキテクチャとは区別される。異なるマイクロアーキテクチャを有するプロセッサは、共通の命令セットを共有することができる。例えば、Intel(登録商標)Pentium(登録商標)4プロセッサ、Intel(登録商標)Core(商標)プロセッサ、及びカリフォルニア州サニーベールのアドバンスドマイクロデバイセズ社(Advanced Micro Devices、Inc.)のプロセッサは、x86命令セットとほぼ同じバージョン(幾つかの拡張機能がより新しいバージョンに追加されている)を実装するが、異なる内部設計を有する。例えば、ISAの同じレジスタアーキテクチャは、専用の物理レジスタ、レジスタリネーミングメカニズム(例えば、レジスタエイリアステーブル(RAT、Register Alias Table)、リオーダバッファ(ROB、Reorder Buffer)及びリタイアメントレジスタファイルの使用)を使用する1つ又は複数の動的に割り当てられる物理レジスタを含む周知の技術を使用して、異なるマイクロアーキテクチャ内に異なる方法で実装されることができる。特記しない限り、本明細書では、レジスタアーキテクチャ、レジスタファイル、及びレジスタという用語は、ソフトウェア/プログラマに可視であるもの及び命令がレジスタを指定する方法を指すように使用される。区別が必要な場合、「論理的」、「アーキテクチャ的」、「ソフトウェア可視的」という形容詞が、レジスタアーキテクチャのレジスタ/ファイルを示すために使用され、一方、異なる形容詞が、所与のマイクロアーキテクチャのレジスタ(例えば、物理レジスタ、リオーダバッファ、リタイアメントレジスタ、レジスタプール)を指定するために使用されるであろう。
命令セットは、1つ又は複数の命令フォーマットを含む。所与の命令フォーマットは、とりわけ、実行される演算及びその演算が実行されるオペランドを指定するための様々なフィールド(ビット数、ビット位置)を定義する。幾つかの命令フォーマットは、命令テンプレート(又はサブフォーマット)の定義で更に分割される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの様々なサブセットを有するように定義されることができ(含まれているフィールドは、通常同じ順序であるが、少なくとも幾つかは、より少ないフィールドが含まれているために様々なビット位置を有する)且つ/又は所与のフィールドが別様に解釈されるように定義されることができる。所与の命令は、所与の命令フォーマットを使用して(且つ、定義されている場合、その命令フォーマットの命令テンプレートのうちの所定の1つで)表現され、演算及びオペランドを指定する。命令ストリームは、命令の特定のシーケンスであり、そのシーケンス内の各命令は、命令フォーマット(及び、定義されている場合、その命令フォーマットの命令テンプレートのうちの所与の1つ)の命令の出現である。
本発明のより良い理解は、以下の図面と併せて以下の詳細な説明から得られることができる。
本発明の実施形態による汎用ベクトルフレンドリー命令フォーマット及びその命令テンプレートを示すブロック図である。 本発明の実施形態による汎用ベクトルフレンドリー命令フォーマット及びその命令テンプレートを示すブロック図である。
本発明の実施形態による例示的な特定ベクトルフレンドリー命令フォーマットを示すブロック図である。 本発明の実施形態による例示的な特定ベクトルフレンドリー命令フォーマットを示すブロック図である。 本発明の実施形態による例示的な特定ベクトルフレンドリー命令フォーマットを示すブロック図である。 本発明の実施形態による例示的な特定ベクトルフレンドリー命令フォーマットを示すブロック図である。
本発明の1つの実施形態によるレジスタアーキテクチャのブロック図である。
本発明の実施形態による例示的なインオーダフェッチ、復号、リタイアパイプライン、及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。
本発明の実施形態によるプロセッサに含まれるインオーダフェッチ、復号、リタイアコア及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの例示的な実施形態を示すブロック図である。
オンダイ相互接続ネットワークへのその接続と共に、単一のプロセッサコアのブロック図である。
本発明の実施形態による図5Aのプロセッサコアの一部の拡大図を示す。
本発明の実施形態による統合メモリコントローラ及びグラフィックスを有する単一コアプロセッサ及びマルチコアプロセッサのブロック図である。
本発明の1つの実施形態によるシステムのブロック図を示す。
本発明の1つの実施形態による第2のシステムのブロック図を示す。
本発明の1つの実施形態による第3のシステムのブロック図を示す。
本発明の1つの実施形態によるシステムオンチップ(SoC、system on a chip)のブロック図を示す。
本発明の実施形態によるソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図を示す。
本発明の1つの実施形態によるコンフリクト検出演算がどのように実行され得るかを示す。
値ベクトルレジスタ内のデータ要素にリダクション演算を実行する本発明の1つの実施形態を示す。
コンフリクトがインデックス値を使用して検出され、ベクトルレジスタ内に格納される方法の追加の詳細を示す。
本発明の1つの実施形態によるリダクション演算の実行に関する追加の詳細を示す。
本発明の1つの実施形態による方法を示す。
以下の説明では、説明のために、以下に記載される本発明の実施形態の完全な理解を提供するために、多くの具体的な詳細が記載される。しかしながら、当業者には、本発明の実施形態は、これらの具体的な詳細の一部を使用せずに実施されることができることは明らかであろう。他の例では、本発明の実施形態の根本的な原理を不明瞭にすることを避けるために、周知の構造及びデバイスはブロック図の形態で示される。
<例示的なプロセッサアーキテクチャ及びデータタイプ>
命令セットは1つ又は複数の命令フォーマットを含む。所与の命令フォーマットは、とりわけ、実行される演算(オペコード)及びその演算が実行される対象のオペランドを指定する様々なフィールド(ビット数、ビットの位置)を定義する。幾つかの命令フォーマットは、命令テンプレート(又はサブフォーマット)の定義で更に分割される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの様々なサブセットを有するように定義されることができ(含まれているフィールドは、通常同じ順序であるが、少なくとも幾つかは、含まれているフィールドが少ないために様々なビット位置を有する)且つ/又は別様に解釈される所与のフィールドを有するように定義されることができる。従って、ISAの各命令は、所与の命令フォーマットを使用して(及び、定義される場合、その命令フォーマットの命令テンプレートのうちの所与の1つで)表現され、演算及びオペランドを指定するフィールドを含む。例えば、例示的なADD命令は、特定のオペコードと、そのオペコードを指定するオペコードフィールド及びオペランド(ソース1/デスティネーション及びソース2)を選択するオペランドフィールドを含む命令フォーマットとを有し、そして命令ストリームにおけるこのADD命令の出現は、特定のオペランドを選択するオペランドフィールドに特定の内容を有するであろう。アドバンストベクトル拡張(AVX、Advanced Vector Extensions)(AVX1及びAVX2)と呼ばれ、ベクトル拡張(VEX、Vector Extensions)符号化スキームを使用する1組のSIMD拡張が、存在し、リリースされ、且つ/又は公開されている(例えば、2011年10月発行のインテル(登録商標)64及びIA−32アーキテクチャソフトウェア開発者マニュアル及び2011年6月発行のインテル(登録商標)アドバンストベクトル拡張プログラミングリファレンスを参照)。
[例示的な命令フォーマット]
本明細書で説明される命令の実施形態は様々なフォーマットで具体化されることができる。更に、例示的なシステム、アーキテクチャ、及びパイプラインが以下に詳述される。命令の実施形態は、そのようなシステム、アーキテクチャ、及びパイプライン上で実行されることができるが、詳述されるものに限定されるものではない。
[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命令テンプレート内に、メモリアクセス、テンポラル(temporal)125命令テンプレート及びメモリアクセス、非テンポラル130命令テンプレートが示されていることを含む。図1BのクラスB命令テンプレートは、1)非メモリアクセス105命令テンプレート内に、非メモリアクセス、書き込みマスク制御、部分丸め制御型演算112命令テンプレート及び非メモリアクセス、書き込みマスク制御、vsize型演算117命令テンプレートが示され、及び2)メモリアクセス120命令テンプレート内に、メモリアクセス、書き込みマスク制御127命令テンプレートが示されていることを含む。
汎用ベクトルフレンドリー命令フォーマット100は、図1A〜1Bに示される順序で以下に列挙される以下のフィールドを含む。
フォーマットフィールド140 − このフィールドにおける特定の値(命令フォーマット識別子値)は、ベクトルフレンドリー命令フォーマットを一意的に識別し、従って、命令ストリームにおけるベクトルフレンドリー命令フォーマットでの命令の出現を一意的に識別する。従って、このフィールドは、汎用ベクトルフレンドリー命令フォーマットのみを有する命令セットには必要ないという意味で任意選択的である。
基本演算フィールド142 − その内容は様々な基本演算を識別する。
レジスタインデックスフィールド144 − その内容は、直接又はアドレス生成を介して、ソース及びデスティネーションオペランドの位置を、それらがレジスタであれメモリであれ、指定する。これらは、P×Q(例えば、32×512、16×128、32×1024、64×1024)のレジスタファイルからN個のレジスタを選択するのに十分なビット数を含む。1つの実施形態では、Nは最大3つのソース及び1つのデスティネーションレジスタとすることができるが、代替の実施形態は、より多くの又はより少ないソース及びデスティネーションレジスタをサポートすることができる(例えば、そのソースのうちの1つがデスティネーションとしても機能する最大2つのソースをサポートすることができ、そのソースのうちの1つがデスティネーションとしても機能する最大3つのソースをサポートすることができ、最大2つのソース及び1つのデスティネーションをサポートすることができる)。
修飾子フィールド146 − その内容は、メモリアクセスを指定する汎用ベクトル命令フォーマットでの命令の出現を、メモリアクセスを指定しないものから区別する、つまり、非メモリアクセス105命令テンプレートとメモリアクセス120命令テンプレートとを区別する。メモリアクセス演算は、メモリ階層を読み取り及び/又はそれに書き込む(場合によっては、レジスタ内の値を使用してソース及び/又はデスティネーションアドレスを指定する)が、非メモリアクセス演算はそうしない(例えば、ソース及びデスティネーションがレジスタである)。1つの実施形態では、このフィールドはまた、メモリアドレス計算を実行する3つの異なる方法の間から選択するが、代替的な実施形態は、メモリアドレス計算を実行するより多くの、より少ない、又は異なる方法をサポートすることができる。
増補演算フィールド150 − その内容は、様々な異なる演算のうちのどれが基本演算に加えて実行されるべきかを識別する。このフィールドはコンテキスト固有である。本発明の1つの実施形態では、このフィールドは、クラスフィールド168と、アルファフィールド152と、ベータフィールド154とに分割される。増補演算フィールド150は、共通グループの演算が、2つ、3つ、又は4つの命令ではなく、単一の命令で実行されることを可能にする。
スケールフィールド160 − その内容は、メモリアドレス生成のための(例えば、2scale*インデックス+ベースを使用するアドレス生成のための)インデックスフィールドの内容のスケーリングを可能にする。
変位(Displacement)フィールド162A − その内容は、メモリアドレス生成の一部として(例えば、2scale*インデックス+ベース+変位、を使用するアドレス生成のために)使用される。
変位係数フィールド162B(変位係数フィールド162Bの真上に変位フィールド162Aが並置されているのは、一方又は他方が使用されることを示すことに留意されたい) − その内容は、アドレス生成の一部として(例えば、2scale*インデックス+ベース+スケーリングされた変位、を使用するアドレス生成のために)使用され、その内容は、メモリアクセスのサイズ(N)によりスケーリングされるべき変位係数を指定する。Nは、メモリアクセスにおけるバイト数である。冗長な下位ビットが無視され、従って、変位係数フィールドの内容は、有効アドレスを算出するのに使用される最終変位を生成するために、メモリオペランド合計サイズ(N)で乗算される。Nの値は、フルオペコードフィールド174(本明細書において後に説明される)及びデータ操作フィールド154Cに基づいて、プロセッサハードウェアにより実行時に決定される。変位フィールド162A及び変位係数フィールド162Bは、それらが、非メモリアクセス105命令テンプレートのために使用されない、及び/又は、別の実施形態は、その2つのうちの1つのみを実装する可能性がある、又はそのどちらも実装する可能性が無い、という意味で任意選択的である。
データ要素幅フィールド164 − その内容は、多数のデータ要素幅のうちのどれが(幾つかの実施形態では、全ての命令のために、他の実施形態では、命令のうちの一部のみのために)使用されるべきかを識別する。このフィールドは、1つのデータ要素幅のみがサポートされる場合、且つ/又は、データ要素幅がオペコードの或る態様を使用してサポートされる場合、それは必要ではないという意味で任意選択的である。
書き込みマスクフィールド170 − その内容は、データ要素位置毎に、デスティネーションベクトルオペランドにおけるデータ要素位置が基本演算及び増補演算の結果を反映するかどうかを制御する。クラスA命令テンプレートは、マージ書き込みマスキングをサポートし、一方、クラスB命令テンプレートは、マージ書き込みマスキング及びゼロ化書き込みマスキングの両方をサポートする。マージする場合、ベクトルマスクは、(基本演算及び増補演算により指定される)任意の演算の実行中に、デスティネーション内の任意の組の要素を更新されないように保護することを可能にするが、他の1つの実施形態では、対応するマスクビットが0を有する場合には、デスティネーションの各要素の古い値を保存する。対照的に、ゼロ化する場合、ベクトルマスクは、(基本演算及び増補演算により指定される)任意の演算の実行中に、デスティネーション内の任意の組の要素がゼロ化されることを可能にするが、1つの実施形態では、対応するマスクビットが0値を有する場合、デスティネーションの要素が0に設定される。この機能のサブセットは、実行されている演算のベクトル長(つまり、修正されている要素の、最初から最後のものまでのスパン)を制御する能力である。しかしながら、修正される要素が連続である必要はない。従って、書き込みマスクフィールド170は、ロード、格納、算術、論理などを含む部分的なベクトル演算を可能にする。書き込みマスクフィールド170の内容が、使用される書き込みマスクを保持する多数の書き込みマスクレジスタの1つを選択する(従って、書き込みマスクフィールド170の内容は、実行されるべきマスキングを間接的に識別する)本発明の実施形態が説明されているが、代替的な実施形態では、その代わりに又は追加的に、マスク書き込みフィールド170の内容が、実行されるべきマスキングを直接指定することを可能にする。
即値フィールド172 − その内容は即値の指定を可能にする。このフィールドは、即値をサポートしない汎用ベクトルフレンドリーフォーマットの実装には存在しない、及び即値を使用しない命令には存在しないという意味で任意選択的である。
クラスフィールド168 − その内容は様々なクラスの命令を識別する。図1A〜図1Bを参照すると、このフィールドの内容はクラスA及びクラスB命令の間の選択を行う。図1A〜図1Bにおいて、特定の値がフィールド(例えば、図1A〜図1Bにおいて、それぞれ、クラスフィールド168のクラスA 168A及びクラスB 168B)に存在することを示すために、隅が丸い四角が使用される。
[クラスAの命令テンプレート]
クラスAの非メモリアクセス105命令テンプレートの場合、アルファフィールド152は、RSフィールド152Aとして解釈され、その内容は、様々な増補演算タイプのうちのどれが実行されるべきかを識別する(例えば、丸め152A.1及びデータ変換152A.2は、それぞれ、非メモリアクセス、丸め型演算110及び非メモリアクセス、データ変換型演算115命令テンプレートに対して指定される)。一方、ベータフィールド154は、指定された型の演算のどれが実行されるべきかを識別する。非メモリアクセス105命令テンプレートにおいて、スケールフィールド160、変位フィールド162A、及び変位スケールフィールド162Bは存在しない。
[非メモリアクセス命令テンプレート−全丸め制御型演算]
非メモリアクセス、全丸め制御型演算110の命令テンプレートにおいて、ベータフィールド154は、丸め制御フィールド154Aとして解釈され、その内容は静的丸めを提供する。記載されている本発明の実施形態では、丸め制御フィールド154Aは、全浮動小数点例外抑制(SAE、suppress all floating point exceptions)フィールド156及び丸め演算制御フィールド158を含むが、代替的な実施形態は、これらのコンセプトの両方をサポートすることができる、又はこれらのコンセプトの両方を同じフィールドに符号化することができる、或いは、これらのコンセプト/フィールドのうちの一方又は他方のみを有することができる(例えば、丸め演算制御フィールド158のみを有することができる)。
SAEフィールド156 − その内容は例外イベント報告を無効にするか否かを識別する。SAEフィールド156の内容が、抑制が有効であることを示す場合、所与の命令は、如何なる種類の浮動小数点例外フラグも報告せず、且つ如何なる浮動小数点例外ハンドラも起動させない。
丸め演算制御フィールド158 − その内容は、一群の丸め演算のうちのどちら(例えば、切り上げ、切り捨て、ゼロへの丸め、最近接への丸め)を実行するかを識別する。従って、丸め演算制御フィールド158は、命令毎の丸めモードの変更を可能にする。プロセッサが丸めモードを指定する制御レジスタを含む本発明の1つの実施形態では、丸め演算制御フィールドの150の内容はそのレジスタ値を上書きする。
[非メモリアクセス命令テンプレート − データ変換型演算]
非メモリアクセスデータ変換型演算115命令テンプレートにおいて、ベータフィールド154は、データ変換フィールド154Bとして解釈され、その内容は、多数のデータ変換(例えば、データ変換無し、スウィズル(swizzle)、ブロードキャスト)のうちのどれが実行されるべきかを識別する。
クラスAのメモリアクセス120命令テンプレートの場合、アルファフィールド152は、エビクションヒント(eviction hint)フィールド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、vector length)157A.2が、それぞれ、非メモリアクセス、書き込みマスク制御、部分的丸め制御型演算112命令テンプレート及び非メモリアクセス、書き込みマスク制御、VSIZE型演算117命令テンプレートに対して指定される)。一方、残りのベータフィールド154は指定された型の演算のうちのどれが実行されるべきかを識別する。非メモリアクセス105命令テンプレートにおいて、スケールフィールド160、変位フィールド162A、及び変位スケールファイルド162Bは、存在しない。
非メモリアクセス、書き込みマスク制御、部分的丸め制御型演算112命令テンプレートにおいて、残りのベータフィールド154は、丸め演算フィールド159Aとして解釈され、例外イベント報告が無効化される(所与の命令が何れの種類の浮動小数点例外フラグも報告せず、且つ何れの浮動小数点例外ハンドラも起動させない)。
丸め演算制御フィールド159A − 丸め演算制御フィールド158と同様に、その内容は、一群の丸め演算のうちのどちら(例えば、切り上げ、切り捨て、ゼロへの丸め、最近接への丸め)を実行すべきかを識別する。従って、丸め演算制御フィールド159Aは命令毎に丸めモードの変更を可能にする。プロセッサが丸めモードを指定するための制御レジスタを含む本発明の1つの実施形態において、丸め演算制御フィールド150の内容はそのレジスタ値をオーバーライドする。
非メモリアクセス、書き込みマスク制御、VSIZE型演算117命令テンプレートにおいて、残りのベータフィールド154は、ベクトル長フィールド159Bとして解釈され、その内容は、多数のデータベクトル長のうちのどちら(例えば、128、256、又は512バイト)が実行されるべきかを識別する。
クラスBのメモリアクセス120命令テンプレートの場合、ベータフィールド154の一部は、ブロードキャストフィールド157Bとして解釈され、その内容は、ブロードキャスト型データ操作演算が実行されるべきか否かを識別するが、残りのベータフィールド154は、ベクトル長フィールド159Bとして解釈される。メモリアクセス120命令テンプレートは、スケールフィールド160及び、任意選択的に、変位フィールド162A又は変位スケールフィールド162Bを含む。
汎用ベクトルフレンドリー命令フォーマット100に関連して、フォーマットフィールド140、基本演算フィールド142、及びデータ要素幅フィールド164を含むフルオペコードフィールド174が示される。フルオペコードフィールド174がこれらのフィールドの全てを含む1つの実施形態が示されているが、それらの全てをサポートしない実施形態では、フルオペコードフィールド174は、これらのフィールドのうち、全てより少ないフィールドを含む。フルオペコードフィールド174は演算コード(オペコード)を提供する。
増補演算フィールド150、データ要素幅フィールド164、及び書き込みマスクフィールド170は、汎用ベクトルフレンドリー命令フォーマットにおいてこれらの機能が命令毎に指定されることを可能にする。
書き込みマスクフィールドとデータ要素幅フィールドとの組み合わせは、それらが様々なデータ要素幅に基づいてマスクが適用されることを可能にするという点で、型付き命令を生成する。
クラスA及びクラスB内に見られる様々な命令テンプレートは様々な状況で有益である。本発明の幾つかの実施形態では、様々なプロセッサ又はプロセッサ内の様々なコアは、クラスAのみ、クラスBのみ、又は両方のクラスをサポートすることができる。例えば、汎用計算向けの高性能汎用アウトオブオーダコアは、クラスBのみをサポートすることができ、主にグラフィックス及び/又は科学(スループット)計算向けのコアはクラスAのみをサポートすることができ、両方向けのコアは両方をサポートすることができる(もちろん、両方のクラスからのテンプレート及び命令の幾つかの混合を有しているが、両方のクラスからの全てのテンプレート及び命令を有するわけではないコアは、本発明の範囲内である)。また、単一のプロセッサは複数のコアを含むことができ、コアの全ては同じクラスをサポートする、又は、異なるコアは異なるクラスをサポートする。例えば、別個のグラフィックスコア及び汎用コアを有するプロセッサにおいて、主にグラフィックス及び/又は科学計算向けのグラフィックスコアのうちの1つは、クラスAのみをサポートすることができるが、汎用コアのうちの1つ又は複数は、クラスBのみをサポートする汎用計算向けの、アウトオブオーダ実行及びレジスタリネーミングを有する高性能汎用コアとすることができる。別個のグラフィックスコアを有さない別のプロセッサは、クラスA及びクラスBの両方をサポートするもう1つの汎用インオーダ又はアウトオブオーダコアを含むことができる。もちろん、1つのクラスからの機能はまた、本発明の様々な実施形態において、他のクラスに実装されることができる。高級言語で記述されるプログラムは、1)実行のために対象プロセッサによってサポートされるクラスの命令のみを有する形式、又は2)全クラスの命令の様々な組み合わせを使用して記述される代替的なルーチンを有し、コードを現在実行しているプロセッサによってサポートされる命令に基づいて実行するためにルーチンを選択する制御フローコードを有する形式を含む、様々な異なる実行可能な形式にされるであろう(例えば、ジャストインタイムでコンパイルされる又は静的にコンパイルされる)。
[B.例示的な特定ベクトルフレンドリー命令フォーマット]
図2Aは、本発明の実施形態による例示的な特定ベクトルフレンドリー命令フォーマットを示すブロック図である。図2Aは、フィールドの位置、サイズ、解釈、及び順序、並びにそれらのフィールドのうちの幾つかの値を指定するという意味で具体的である特定ベクトルフレンドリー命令フォーマット200を示す。特定ベクトルフレンドリー命令フォーマット200は、x86命令セットを拡張するのに使用されることができ、従って、フィールドの幾つかは、既存のx86命令セット及びそれらの拡張(例えば、AVX)に使用されるものと同様又は同じである。このフォーマットは、拡張を有する既存のx86命令セットのプレフィックス符号化フィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、及び即値フィールドとの整合性を維持する。図2Aのフィールドが対応付ける図1Aまたは1Bのフィールドが図示されている。
本発明の実施形態が、例示的な目的で汎用ベクトルフレンドリー命令フォーマット100との関連で、特定ベクトルフレンドリー命令フォーマット200を参照して説明されているが、本発明は、特許請求の範囲を除き、特定ベクトルフレンドリー命令フォーマット200に限定されるものではないことが理解されるべきである。例えば、汎用ベクトルフレンドリー命令フォーマット100は、様々なフィールドの様々な可能なサイズを意図しているが、特定ベクトルフレンドリー命令フォーマット200は特定のサイズのフィールドを有するものとして示されている。具体的な例として、データ要素幅フィールド164は特定ベクトルフレンドリー命令フォーマット200で1ビットフィールドとして示されるが、本発明はそのように限定されるものではない(つまり、汎用ベクトルフレンドリー命令フォーマット100はデータ要素幅フィールド164の他のサイズを意図する)。
汎用ベクトルフレンドリー命令フォーマット100は、図2Aに示される順序で以下に列挙される次のフィールドを含む。
EVEXプレフィックス(バイト0〜3)202 − 4バイトの形式で符号化される。
フォーマットフィールド140(EVEXバイト0、ビット[7:0]) − 第1バイト(EVEXバイト0)はフォーマットフィールド140であり、0x62(本発明の1つの実施形態では、ベクトルフレンドリー命令フォーマットを識別するのに使用される固有の値)を保持する。
第2〜第4バイト(EVEXバイト1〜3)は、特定の機能を提供する多数のビットフィールドを含む。
REXフィールド205(EVEXバイト1、ビット[7〜5]) − EVEX.Rビットフィールド(EVEXバイト1、ビット[7]−R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]−X)、及び157BEXバイト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'フィールド210 − これは、REX'フィールド210の第1の部分であり、拡張32レジスタセットの上位16個又は下位16個の何れかを符号化するのに使用されるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]−R')である。本発明の1つの実施形態では、このビットは、以下に示されるように他のものと共に、BOUND命令から(周知のx86の32ビットモードで)区別するために、ビット反転フォーマットで格納され、そのリアルオペコードバイトは、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つの下位ビットを符号化する。命令に応じて、追加の異なるEVEXビットフィールドが指定子サイズを32レジスタに拡張するのに使用される。
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プレフィックスをコンパクトにするという便益も有する(SIMDプレフィックスを表すのに1バイトを必要とするのではなく、EVEXプレフィックスは、2ビットのみを必要とする)。1つの実施形態では、レガシフォーマット及びEVEXプレフィックスフォーマットの両方でのSIMDプレフィックス(66H、F2H、F3H)を使用するレガシSSE命令をサポートするために、これらのレガシSIMDプレフィックスは、SIMDプレフィックス符号化フィールドに符号化され、デコーダのPLAに提供される前に実行時にレガシSIMDプレフィックスに拡張される(それにより、PLAは、修正せずにこれらのレガシ命令のレガシ及びEVEXフォーマットの両方を実行することができる)。より新たな命令は、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.rrl、EVEX.LL0、EVEX.LLBとしても知られ、βββで示される) − 前述のように、このフィールドはコンテキスト固有である。
REX'フィールド210 − これは、残りのREX'フィールドであり、拡張32レジスタセットの上位16個又は下位16個の何れかを符号化するのに使用されることができるEVEX.V'ビットフィールド(EVEXバイト3、ビット[3]−V')である。このビットはビット反転フォーマットで格納される。値1は、下位16個のレジスタを符号化するのに使用される。言い換えれば、V'VVVVは、EVEX.V'とEVEX.vvvvとを組み合わせすることによって形成される。
書き込みマスクフィールド170(EVEXバイト3、ビット[2:0]−kkk) − 前述のように、その内容は、書き込みマスクレジスタにおけるレジスタのインデックスを指定する。本発明の1つの実施形態において、特定の値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ビット変位の代わりとなる。従って、変位係数フィールド162Bは、disp8がdisp8*Nに多重定義されることを唯一の例外として、x86命令セット8ビット変位と同じ方式で符号化される(それで、ModRM/SIB符号化規則において変更はない)。言い換えれば、符号化規則又は符号化長に変更はないが、ハードウェアによる変位値の解釈にのみ変更がある(ハードウェアは、バイト単位のアドレスオフセットを得るために、メモリオペランドのサイズにより変位をスケーリングする必要がある)。
即値フィールド172は前述のように動作する。
[フルオペコードフィールド]
図2Bは、本発明の1つの実施形態によるフルオペコードフィールド174を構成する特定ベクトルフレンドリー命令フォーマット200のフィールドを示すブロック図である。具体的に、フルオペコードフィールド174は、フォーマットフィールド140、基本演算フィールド142、及びデータ要素幅(W)フィールド164を含む。基本演算フィールド142は、プレフィックス符号化フィールド225、オペコードマップフィールド215、及びリアルオペコードフィールド230を含む。
[レジスタインデックスフィールド]
図2Cは、本発明の1つの実施形態によるレジスタインデックスフィールド144を構成する特定ベクトルフレンドリー命令フォーマット200のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド144は、REXフィールド205、REX'フィールド210、MODR/M.regフィールド244、MODR/M.r/mフィールド246、VVVVフィールド220、xxxフィールド254、及びbbbフィールド256を含む。
[増補演算フィールド]
図2Dは、本発明の1つの実施形態による増補演算フィールド150を構成する特定ベクトルフレンドリー命令フォーマット200のフィールドを示すブロック図である。クラス(U)フィールド168は、0を含む場合、EVEX.U0(クラスA 168A)を表し、1を含む場合、EVEX.U1(クラスB 168B)を表す。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として解釈され、フィールド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は、本発明の1つの実施形態によるレジスタアーキテクチャ300のブロック図である。図示されている実施形態には、512ビット幅の32個のベクトルレジスタ310が存在し、これらのレジスタは、zmm0〜zmm31として参照される。下位16個のzmmレジスタの下位256ビットは、レジスタymm0〜16上に重ね合わされる。下位16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0〜15上に重ね合わされる。特定ベクトルフレンドリー命令フォーマット200は、以下の表に示されるように、重ね合わされたこれらのレジスタファイルに対して演算する。
Figure 0006699845
言い換えれば、ベクトル長フィールド159Bは、最大長と、1つ又は複数の他のより短い長さとの間で選択し、そのようなより短い長さの各々は、直前の長さの半分の長さであり、ベクトル長フィールド159Bを有しない命令テンプレートは、最大のベクトル長に対して演算する。更に、1つの実施形態では、特定ベクトルフレンドリー命令フォーマット200のクラスBの命令テンプレートは、パックド又はスカラー単精度/倍精度浮動小数点データ及びパックド又はスカラー整数データに対して演算する。スカラー演算は、zmm/ymm/xmmレジスタ内の最下位のデータ要素位置に対して実行される演算であり、それより上位のデータ要素位置は、実施形態に応じて、命令前に存在したもののままにされるか又はゼロ化されるかの何れかである。
書き込みマスクレジスタ315 − 図示されている実施形態では、それぞれサイズが64ビットの8個の書き込みマスクレジスタ(k0〜k7)が存在する。代替的な実施形態では、書き込みマスクレジスタ315は、サイズが16ビットである。前述のように、本発明の1つの実施形態では、ベクトルマスクレジスタk0は、書き込みマスクとして使用されることができない。通常、k0を示すであろう符号化が書き込みマスクに対して使用される場合、符号化は、0xFFFFに配線された書き込みマスクを選択し、その命令に対して書き込みマスキングを実際上無効にする。
汎用レジスタ325 − 図示されている実施形態では、メモリオペランドをアドレス指定するために既存のx86アドレスモードと共に使用される16個の64ビットの汎用レジスタが存在する。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、及びR8〜R15という名称により参照される。
MMXパックド整数フラットレジスタファイル350がエイリアスされるスカラー浮動小数点スタックレジスタファイル(x87スタック)345 − 図示されている実施形態では、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、reduced instruction set computing)コア、複合命令セットコンピューティング(CISC、complex instruction set computing)コア、超長命令語(VLIW、very long instruction word)コア、又はハイブリッドもしくは代替的なコアタイプとすることができる。更に別の選択肢として、コア490は、例えば、ネットワーク又は通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(GPGPU、general purpose computing graphics processing unit)コア、グラフィックスコア、又は同様のものなどの専用コアとすることができる。
フロントエンドユニット430は、命令キャッシュユニット434に結合される分岐予測ユニット432を含み、命令キャッシュユニット434は、命令トランスレーションルックアサイドバッファ(TLB、translation lookaside buffer)436に結合され、命令TLB436は、命令フェッチユニット438に結合され、命令フェッチユニット438は、復号ユニット440に結合される。復号ユニット440(デコーダ)は、命令を復号することができ、元の命令から復号される、又はそうでなければ、元の命令を表す、もしくは元の命令から派生される1つ又は複数のマイクロ演算、マイクロコードエントリーポイント、マイクロ命令、他の命令、又は他の制御信号を出力として生成することができる。復号ユニット440は、様々な異なるメカニズムを使用して実装されることができる。適したメカニズムの例としては、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA、programmable logic array)、マイクロコードリードオンリメモリ(ROM、read only memory)などを含むが、これらに限定されるものではない。1つの実施形態では、コア490は、或る特定のマクロ命令用のマイクロコードを(例えば、復号ユニット440に、又はそうでなければ、フロントエンドユニット430内に)格納するマイクロコードROM又は他の媒体を含む。復号ユニット440は、実行エンジンユニット450内のリネーム/アロケータユニット452に結合される。
実行エンジンユニット450は、リタイアメントユニット454及び1組の1つ又は複数のスケジューラユニット456に結合されるリネーム/アロケータユニット452を含む。スケジューラユニット456は、予約ステーション、中央命令ウィンドウなどを含む任意の数の異なるスケジューラを表す。スケジューラユニット456は、物理レジスタファイルユニット458に結合される。物理レジスタファイルユニット458のそれぞれは、1つ又は複数の物理レジスタファイルを表し、物理レジスタファイルのうちの異なるものは、スカラー整数、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行されるべき次の命令のアドレスである命令ポインタ)などのような、1つ又は複数の異なるデータタイプを格納する。1つの実施形態では、物理レジスタファイルユニット458は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、及びスカラーレジスタユニットを備える。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供することができる。物理レジスタファイルユニット458は、(例えば、リオーダバッファ及びリタイアメントレジスタファイルを使用して、フューチャファイル、履歴バッファ、及びリタイアメントレジスタファイルを使用して、レジスタマップ及びレジスタのプールを使用して、などで)レジスタリネーミング及びアウトオブオーダ実行が実装されることができる様々な方式を示すようにリタイアメントユニット454によりオーバラップされる。リタイアメントユニット454及び物理レジスタファイルユニット458は、実行クラスタ460に結合される。実行クラスタ460は、1組の1つ又は複数の実行ユニット462及び1組の1つ又は複数のメモリアクセスユニット464を含む。実行ユニット462は、様々なタイプのデータ(例えば、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して、様々な演算(例えば、シフト、加算、減算、乗算)を実行することができる。幾つかの実施形態は、特定の機能又は複数組の機能に専用の多数の実行ユニットを含むことができるが、他の実施形態は、全ての機能を全て実行するたった1つの実行ユニット又は複数の実行ユニットを含むことができる。スケジューラユニット456、物理レジスタファイルユニット458、及び実行クラスタ460は、複数である可能性があるとして示される。それは、特定の実施形態は、或る特定のタイプのデータ/演算に対して別個のパイプライン(例えば、それぞれがそれら自身のスケジューラユニット、物理レジスタファイルユニット、及び/又は実行クラスタを有する、スカラー整数パイプライン、スカラー浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、及び/又はメモリアクセスパイプライン − 別個のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット464を有する或る特定の実施形態が実装される)を作成するからである。別個のパイプラインが使用される場合、これらのパイプラインのうちの1つ又は複数はアウトオブオーダ発行/実行とすることができ、残りはインオーダとすることができることも理解されるべきである。
1組のメモリアクセスユニット464は、レベル2(L2、level 2)キャッシュユニット476に結合されるデータキャッシュユニット474に結合されるデータTLBユニット472を含むメモリユニット470に結合される。1つの例示的な実施形態では、メモリアクセスユニット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テクノロジーズ社のMIPS命令セット、カリフォルニア州サニーベールのARMホールディングス社の(NEONのような任意選択的な追加の拡張を有する)ARM命令セット)をサポートすることができる。1つの実施形態では、コア490は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートする論理を含み、それにより、多くのマルチメディアアプリケーションにより使用される複数の演算がパックドデータを使用して実行されることを可能にする。
コアは、マルチスレッディング(2つ以上の組の演算又はスレッドを並列に実行すること)をサポートすることができ、タイムスライスドマルチスレッディング、同時マルチスレッディング(単一の物理コアは、物理コアが同時にマルチスレッディングしているスレッドのそれぞれに対して論理コアを提供する)、又はこれらの組み合わせ(例えば、インテル(登録商標)ハイパースレッディングテクノロジなどでのタイムスライスドフェッチ及び復号化並びにその後の同時マルチスレッディング)を含む様々な方法でサポートすることができることが理解されるべきである。
レジスタリネーミングがアウトオブオーダ実行との関連で説明されるが、レジスタリネーミングは、インオーダアーキテクチャでも使用されることができることが理解されるべきである。プロセッサの図示の実施形態は、別個の命令及びデータキャッシュユニット434/474及び共有のL2キャッシュユニット476も含むが、代替的な実施形態は、例えば、レベル1(L1、Level 1)内部キャッシュ又は複数のレベルの内部キャッシュのような、命令及びデータの両方用の単一の内部キャッシュを有することができる。幾つかの実施形態では、システムは、内部キャッシュと、コア及び/又はプロセッサの外部に存在する外部キャッシュとの組み合わせを含むことができる。代替的に、キャッシュの全ては、コア及び/又はプロセッサの外部とすることができる。
図5A〜5Bは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示し、そのインオーダコアは、チップ内の幾つかの論理ブロック(同じタイプ及び/又は異なるタイプの他のコアを含む)のうちの1つであろう。論理ブロックは、高帯域幅相互接続ネットワーク(例えば、リングネットワーク)を介して、用途に応じて、幾つかの固定の機能論理、メモリI/Oインターフェース、及び他の必要なI/O論理と通信する。
図5Aは、本発明の複数の実施形態によるオンダイ相互接続ネットワーク502との接続及びそのレベル2(L2)キャッシュ504のローカルサブセットとの、単一のプロセッサコアのブロック図である。1つの実施形態では、命令デコーダ500は、パックドデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ506は、スカラーユニット及びベクトルユニットへのキャッシュメモリに低レイテンシーアクセスを可能にする。(設計を簡略化するために)1つの実施形態では、スカラーユニット508及びベクトルユニット510は、別個のレジスタセット(それぞれ、スカラーレジスタ512及びベクトルレジスタ514)を使用し、それらの間で転送されるデータはメモリに書き込まれ、次に、レベル1(L1)キャッシュ506から読み戻されるが、本発明の代替的な実施形態は、異なるアプローチを使用する(例えば、単一のレジスタセットを使用する、又は、データを、書き込み及び読み戻しせずに、2つのレジスタファイル間で転送することを可能にする通信経路を含む)ことができる。
L2キャッシュのローカルサブセット504は、プロセッサコア毎に1つの別個のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサコアは、それ自身のL2キャッシュのローカルサブセット504への直接アクセス経路を有する。プロセッサコアにより読み取られるデータは、そのL2キャッシュサブセット504に格納され、他のプロセッサコアがそれら自身のローカルL2キャッシュサブセットにアクセスすることと並列に、迅速にアクセスされることができる。プロセッサコアにより書き込まれるデータは、それ自身のL2キャッシュサブセット504に格納され、必要であれば、他のサブセットからフラッシュされる。リングネットワークは共有データに対して整合性を確保する。リングネットワークは、プロセッサコア、L2キャッシュ、及び他の論理ブロックなどのエージェントがチップ内で互いに通信することを可能にするために双方向である。各リングデータ経路は方向毎に1012ビット幅である。
図5Bは、本発明の実施形態による図5Aのプロセッサコアの一部の拡大図である。図5Bは、L1キャッシュ506のL1データキャッシュ506A部分、並びに、ベクトルユニット510及びベクトルレジスタ514に関するさらなる詳細を含む。具体的には、ベクトルユニット510は、16−wideベクトル処理ユニット(VPU、vector processing unit)(16−wideALU528を参照)であり、整数命令、単精度浮動命令、及び倍精度浮動命令のうちの1つ又は複数を実行する。VPUは、スウィズルユニット520によるレジスタ入力のスウィズル、数値変換ユニット522A〜Bによる数値変換、及び複製ユニット524によるメモリ入力への複製をサポートする。書き込みマスクレジスタ526は、結果として生じるベクトル書き込みを断定することを可能にする。
図6は、本発明の実施形態による2つ以上のコアを有することができ、統合メモリコントローラを有することができ、且つ統合グラフィックスを有することができるプロセッサ600のブロック図である。図6の実線のボックスは、単一コア602A、システムエージェント610、1組の1つ又は複数のバスコントローラユニット616を有するプロセッサ600を示し、一方、破線のボックスの任意選択的な追加は、複数のコア602A〜N、システムエージェントユニット610内の1組の1つ又は複数の統合メモリコントローラユニット614、及び専用論理608を有する代替的なプロセッサ600を示す。
従って、プロセッサ600の様々な実装は、1)統合グラフィックス及び/又は(1つ又は複数のコアを含むことができる)科学(スループット)論理である専用論理608と1つ又は複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、その2つの組み合わせ)であるコア602A〜Nとを有するCPU、2)主にグラフィックス及び/又は科学(スループット)向けの多数の専用コアであるコア602A〜Nを有するコプロセッサ、並びに3)多数の汎用インオーダコアであるコア602A〜Nを有するコプロセッサを含むことができる。従って、プロセッサ600は、汎用プロセッサ、コプロセッサ、又は、例えば、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、ハイスループット多集積コア(MIC、many integrated core)コプロセッサ(30以上のコアを含む)、組み込みプロセッサなどの専用プロセッサとすることができる。プロセッサは1つ又は複数のチップ上に実装されることができる。プロセッサ600は、例えば、BiCMOS、CMOS,又はNMOSなどの多数の処理技術のうちの任意のものを使用して、1つもしくは複数の基板の一部とすることができ、及び/又はその上に実装されることができる。
メモリ階層は、コア内の1つ又は複数のレベルのキャッシュ、1組の1つ又は複数の共有キャッシュユニット606、及び1組の統合メモリコントローラユニット614に結合される外部メモリ(図示せず)を含む。1組の共有キャッシュユニット606は、レベル2(L2)、レベル3(L3、level 3)、レベル4(L4、level 4)、又は他のレベルのキャッシュなどの1つ又は複数の中間レベルのキャッシュ、最終レベルのキャッシュ(LLC、last level cache)、及び/又はこれらの組み合わせを含むことができる。1つの実施形態において、リングベース相互接続ユニット612は、統合グラフィックス論理608、1組の共有キャッシュユニット606、及びシステムエージェントユニット610/統合メモリコントローラユニット614を相互接続するが、代替的な実施形態は、そのようなユニットを相互接続する任意の数の周知技術を使用することができる。1つの実施形態において、整合性は、1つ又は複数のキャッシュユニット606とコア602A〜Nとの間で維持される。
幾つかの実施形態では、1つ又は複数のコア602A〜Nはマルチスレッディングすることができる。システムエージェント610は、コア602A〜Nを連係及び動作させる構成要素を含む。システムエージェントユニット610は、例えば、電力制御ユニット(PCU、power control unit)及びディスプレイユニットを含むことができる。PCUは、コア602A〜N及び統合グラフィックス論理608の電力状態を調整するのに必要な論理及び構成要素とすることができる又はそれらを含むことができる。ディスプレイユニットは1つ又は複数の外部接続ディスプレイを駆動するためのものである。
コア602A〜Nはアーキテクチャ命令セットの観点から同種又は異種とすることができる。すなわち、2つ以上のコア602A〜Nは同じ命令セットを実行可能とすることができるが、他のものは、その命令セット又は異なる命令セットのサブセットのみを実行可能とすることができる。
図7〜10は例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP、digital signal processor)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、及び様々な他の電子デバイスについて当技術分野において既知の他のシステム設計及び構成も適している。概して、本明細書に開示されるようなプロセッサ及び/又は他の実行論理を組み込むことができる非常に多くの様々なシステム又は電子デバイスは概ね適している。
図7を参照すると、本発明の1つの実施形態によるシステム700のブロック図が示されている。システム700は、コントローラハブ720に結合される1つ又は複数のプロセッサ710、715を含むことができる。1つの実施形態において、コントローラハブ720は、グラフィックスメモリコントローラハブ(GMCH、graphics memory controller hub)790及び入力/出力ハブ(IOH、Input/Output Hub)750(別個のチップ上に存在することができる)を含み、GMCH790は、メモリ740及びコプロセッサ745が結合されるメモリ及びグラフィックスコントローラを含み、IOH750は、入力/出力(I/O、input/output)デバイス760をGMCH790に結合する。代替的に、メモリ及びグラフィックスコントローラの一方又は両方は、(本明細書で説明されているように)プロセッサ内に集積され、メモリ740及びコプロセッサ745は、プロセッサ710及び、IOH750と共に単一チップ内にあるコントローラハブ720に直接結合される。
追加のプロセッサ715の任意選択的な特性は、図7において破線で示されている。それぞれのプロセッサ710、715は、本明細書で説明される処理コアのうちの1つ又は複数を含むことができ、プロセッサ600の或るバージョンとすることができる。
メモリ740は、例えば、ダイナミックランダムアクセスメモリ(DRAM、dynamic random access memory)、相変化メモリ(PCM、phase change memory)、又はその2つの組み合わせとすることができる。少なくとも1つの実施形態では、コントローラハブ720は、フロントサイドバス(FSB、frontside bus)のようなマルチドロップバス、QuickPath相互接続(QPI、QuickPath Interconnect)のようなポイントツーポイントインターフェース、又は同様の接続795を介して、プロセッサ710、715と通信する。
1つの実施形態では、コプロセッサ745は、例えば、高スループットMICプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサ、又は同様のもののような専用プロセッサである。1つの実施形態では、コントローラハブ720は統合グラフィックスアクセラレータを含むことができる。
アーキテクチャ特性、マイクロアーキテクチャ特性、熱的特性、電力消費特性、及び同様のものを含む利点の様々な基準の観点から、物理リソース710、715の間に様々な相違が存在する可能性がある。
1つの実施形態では、プロセッサ710は、一般的なタイプのデータ処理演算を制御する命令を実行する。命令内に、コプロセッサ命令を組み込むことができる。プロセッサ710は、これらのコプロセッサ命令を、付属のコプロセッサ745により実行されるべきタイプであるとして認識する。従って、プロセッサ710は、コプロセッサ745に対して、コプロセッサバス又は他の相互接続上にこれらのコプロセッサ命令(又は、コプロセッサ命令を表す制御信号)を発行する。コプロセッサ745は、受信したコプロセッサ命令を受理し実行する。
図8を参照すると、本発明の実施形態による第1のより具体的な例示的システム800のブロック図が示されている。図8に示されているように、マルチプロセッサシステム800はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続850を介して結合される第1のプロセッサ870及び第2のプロセッサ880を含む。プロセッサ870及び880のそれぞれはプロセッサ600の或るバージョンとすることができる。本発明の1つの実施形態では、プロセッサ870及び880は、それぞれ、プロセッサ710及び715であり、一方、コプロセッサ838はコプロセッサ745である。別の実施形態では、プロセッサ870及び880は、それぞれ、プロセッサ710及びコプロセッサ745である。
統合メモリコントローラ(IMC、integrated memory controller)ユニット872及び882をそれぞれ含むプロセッサ870及び880が示されている。プロセッサ870は、そのバスコントローラユニットの一部として、ポイントツーポイント(P―P、point−to−point)インターフェース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と任意選択的に情報を交換することができる。1つの実施形態では、コプロセッサ838は、例えば、高スループットMICプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサ、又は同様のもののような専用プロセッサである。
共有キャッシュ(図示せず)は、何れかのプロセッサ内に又は両方のプロセッサの外部に含まれることができるが、プロセッサが低電力モードに置かれている場合、何れか又は両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納されることができるように、P―P相互接続を介してプロセッサに接続されることができる。
チップセット890は、インターフェース896を介して第1バス816に結合されることができる。1つの実施形態では、第1のバス816は、ペリフェラルコンポーネントインターコネクト(PCI、Peripheral Component Interconnect)バス、又は、PCIエクスプレスバスもしくは別の第3世代のI/O相互接続バスのようなバスとすることができるが、本発明の範囲はそのように限定されるものではない。
図8に示されているように、様々なI/Oデバイス814は、第1のバス816を第2のバス820に結合させるバスブリッジ818と共に、第1のバス816に結合されることができる。1つの実施形態では、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックスアクセラレータ又はデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイ、又は任意の他のプロセッサのような1つ又は複数の追加のプロセッサ815は、第1のバス816に結合される。1つの実施形態では、第2のバス820は、ローピンカウント(LPC、low pin count)バスとすることができる。1つの実施形態では、例えば、キーボード及び/又はマウス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、control logic」)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組の1つ又は複数のコプロセッサ1020と、スタティックランダムアクセスメモリ(SRAM、static random access memory)ユニット1030と、ダイレクトメモリアクセス(DMA、direct memory access)ユニット1032と、1つ又は複数の外部ディスプレイに結合されるディスプレイユニット1040とに結合される。1つの実施形態において、コプロセッサ1020は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、組み込みプロセッサ、又は同様のものなどの専用プロセッサを含む。
本明細書において開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような実装アプローチの組み合わせで実装されることができる。本発明の実施形態は、少なくとも1つのプロセッサ、(揮発性もしくは不揮発性メモリ及び/又は記憶要素を含む)記憶システム、少なくとも1つの入力デバイス、及び少なくとも1つの出力デバイスを備えるプログラマブルシステム上で実行するコンピュータプログラム又はプログラムコードとして実装されることができる。
図8に図示されているコード830のようなプログラムコードは、本明細書において説明されている機能を実行し、出力情報を生成するように入力命令に適用されることができる。出力情報は、既知の方法で1つ又は複数の出力デバイスに適用されることができる。本出願の目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC、application specific integrated circuit)又はマイクロプロセッサのようなプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信するために高水準手順又はオブジェクト指向のプログラミング言語で実装されることができる。プログラムコードはまた、所望であれば、アセンブリ又は機械言語で実装されることができる。実際に、本明細書で説明されるメカニズムは、範囲において、如何なる特定のプログラミング言語に限定されるものではない。何れの場合においても、言語はコンパイル型又はインタプリタ型の言語とすることができる。
少なくとも1つの実施形態の1つ又は複数の態様は、プロセッサ内の様々な論理を表す機械可読媒体上に格納される典型的命令によって実装されることができ、典型的命令は、機械に読み取られる場合、本明細書で説明されている技法を実行させるように機械に論理を作成させる。「IPコア」として知られるそのような表現は、有形の機械可読媒体上に格納され、実際に論理又はプロセッサを作る製造機械にロードするために様々な顧客又は製造設備に供給されることができる。
そのような機械可読記憶媒体は、機械又はデバイスによって製造又は形成される物品の非一時的な有形の装置を含むことができるが、これに限定されるものではない。これらの装置は、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスク読み出し専用メモリ(CD−ROM、compact disk read−only memory)、再書込み可能コンパクトディスク(CD−RW、compact disk rewritable)、及び光磁気ディスクを含む他の任意のタイプのディスク、読み出し専用メモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)などのランダムアクセスメモリ(RAM、random access memory)、消去可能プログラマブル読み出し専用メモリ(EPROM、erasable programmable read−only memory)、フラッシュメモリ、電気的消去可能プログラマブル読み出し専用メモリ(EEPROM、electrically erasable programmable read−only memory)、相変化メモリ(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は、追加のリンケージ処理の有無に関わらず、少なくとも1つのx86命令セットコアを有するプロセッサ1116上で実行されることができるx86バイナリコード1106(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、図11は、少なくとも1つのx86命令セットコアを有さないプロセッサ1114(例えば、カリフォルニア州サニーベールのMIPSテクノロジーズ社のMIPS命令セットを実行する、及び/又はカリフォルニア州サニーベールのARMホールディングス社のARM命令セットを実行するコアを有するプロセッサ)によってネイティブで実行されることができる代替の命令セットバイナリコード1110を生成するために、高水準言語1102のプログラムが、代替の命令セットコンパイラ1108を使用してコンパイルされることができることを示す。命令変換器1112は、x86バイナリコード1106を、x86命令セットコアを有さないプロセッサ1114によりネイティブで実行されることができるコードに変換するのに使用される。この変換されたコードは、代替の命令セットバイナリコード1110と同じである可能性は低い。それは、これを可能にする命令変換器の作成は難しいからであるが、しかしながら、変換されたコードは、演算を全般的に達成し、代替の命令セットからの命令で構成される。従って、命令変換器1112は、エミュレーション、シミュレーション、又は任意の他の処理を介して、x86命令セットプロセッサもしくはコアを有さないプロセッサ又は他の電子デバイスがx86バイナリコード1106を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせを表す。
<1組のベクトル要素にリダクション演算を実行する方法及び装置>
「スパース更新」は、ベクトル化が有益であろう重要なアルゴリズムのパターンである。ここで、読み出し−修正−書き込み演算は、間接的にアドレスされるメモリ位置に実行されることができる(例えば、A[B[i]]をロードし、それに何らかを追加し、その値を元の場所A[B[i]]に格納する)。このタイプの演算をベクトル化することは、収集−変更−分散演算を実行することを伴う。一例として、このような演算は、収集演算を介してiの16個の連続する値に対してA[B[i]]の形式の16個の間接ロードを実行し、単一命令複数データ(SIMD、single instruction multiple data)計算を実行し、値を元のメモリに分散することを伴うことができる。しかしながら、このベクトル化は、単一の収集/分散命令が各メモリ位置に1回だけアクセスするであろうことを仮定している。例えば、B[i]の2つの連続する値が同じであるならば、第2のものに対する読み出し−修正−書き込みは第1のものに依存する。そのため、これらをSIMD方法で同時に行うことは、これらの依存性に反し、誤った結果が生じる可能性がある。
本発明の1つの実施形態は、重複を検出するためにベクトルレジスタ内の要素を比較するVPCONFLICTのようなコンフリクト検出命令を利用する。具体的には、命令は、ベクトルレジスタ入力の各要素を、その入力の全ての先行する要素(例えば、最下位ビット(LSB、least significant bit)に近い全ての要素)との等値性をテストすることができ、これらの比較の結果を1組のビットベクトルとして出力する。コンフリクト検出命令は、或る要素が同じSIMDレジスタ内の他の要素を巻き込むデータ依存性を有するか否かを判断する方法を提供する。
図12は、1組のデータ要素1200〜1203を備える入力ベクトルレジスタ1220及びコンフリクト検出命令の結果1210〜1213を格納する出力レジスタ1230を有する例を示す。動作中、コンフリクト検出命令は、データ要素1200〜1203の各々を、それに先行するデータ要素と比較する。第1の要素1200は(それに先行する要素がないので)別の要素と比較されず、その結果は、出力ベクトルレジスタ1230の第1の要素に0000として格納され、コンフリクトの無いことを示す。第2の要素1201は第1の要素1200と比較される。要素が等しくないので、結果は、出力ベクトルレジスタ1230の第2の位置1211に格納される0000(コンフリクト無し)である。第3の要素1202は第1の要素1200と等しいので、0001という結果が出力ベクトルレジスタ1230の第3の出力位置1212に格納される。1つの実施形態では、0001は2進値であり、結果の第1の位置における1は、第3の要素1202が入力ベクトルレジスタ1220の第1の要素1200と等しいことを示す。最後に、第4の要素1203が、第1の要素1200及び第3の要素1202の両方と等しいので、0101の値が出力ベクトルレジスタ1230の第4の位置1213に設定される(第1のビット位置の第1の1が第1のデータ要素1200と等価であり、第3のビット位置の第2の1が第3のデータ要素1202と等しいことを示す)。
SIMDレジスタの別個の要素内で重複した値を識別する能力は、SIMDレジスタ要素間の可能なデータ依存性が、そうでなければ、ベクトル化を妨げるかもしれない場合でも、スカラーコードをベクトル化することを可能にする。例えば、固有のインデックスを有する要素のサブセットを決定し、SIMDの方法でそれらを計算し、且つ残りの要素を再試行するためにループバックすることによって、従って同じインデックスを有する要素に対しての計算をシリアル化することによって、依存関係を強制できる。上記の例では、最初の2つの要素が同時に計算され、続いて、3番目の要素が単独で(第1の要素の出力値から入力値を取得して)、最後の要素が単独で(3番目の要素の出力値からの入力値を取得して)計算されるであろう。このアプローチは、N個のデータ要素の配列に演算(「Compute」)を実行し、反復毎にSIMD_WIDTH要素に対して演算するためにベクトル化する次の例示的ループで表される。
Figure 0006699845
Compute_Mask_of_Unique_Remaining_Indices関数の説明は、簡潔にするために省略されている。
上記のコード例はベクトル化されているが、ループのベクトル化されたバージョンは、スカラー同等物より低いパフォーマンスになる場合があり、ベクトル化が有益か否かを予測することは困難である。具体的には、ベクトル化によってもたらされる性能向上は、インデックスSIMDレジスタ内の幾つの要素(「インデックス」)が重複値を有するかに依存する。このアプローチは、任意の所与のインデックスの少数のインスタンスがある場合、つまり少数の反復のwhileループを有することが普通の場合、良く機能する。しかしながら、同じインデックスの多数のインスタンスがある場合、whileループの最大反復回数はSIMD幅に等しいので、実行時間はスカラー実行より悪くなる可能性がある。
これらの問題に対処するために、以下に説明する本発明の実施形態は、SIMDレジスタ内の要素に対して、複数のツリー縮小を、固有のインデックス値毎に1つの縮小を、並列に実行する技法を含む。このアプローチでは、最大でlogSIMD_WIDTHの計算ステップを有する。具体的には、本発明の或る特定の実施形態は、SIMDレジスタ内に任意の順序を有する1組の値にわたって並列に任意の数のバイナリツリー縮小を実行することができる。VPCONFLICTのようなコンフリクト検出命令の情報豊富な出力は、SIMD要素の対からの部分的な結果を反復的に識別し、同じインデックスと結合させるために使用されることができる。このアプローチでは、新しい命令VPOPCNTが、インデックスを共有する各要素が順序付けられることを可能にするので、使用されることができる。VPOPCNT命令の1つの実施形態は、各SIMD要素内の設定されたビット(すなわち、1)の数をカウントする。
単一のSIMDレジスタ内には、1つ又は複数の縮小パターンを介して結合される必要がある複数の値が存在する可能性がある。例えば、アプリケーションは、全ての「a」値が合計され、且つ全ての「b」値が合計されることで、ただ2つの値{a0+a1+a2+a3+a4、b0+b1+b2}を生じるように結合される必要がある単一のSIMDレジスタ内の1組の値{a0、b0、a1、a2、b1、a3、a4、b2}を有することができる。これを行う複数の方法が存在するが、2つの入力(例えば、プロセッサ内の加算命令)のみを有するリダクション演算を仮定して、最も効率的な方法は、SIMDレジスタの要素にわたって複数のバイナリツリー縮小を並列に実行することである。
本発明の実施形態は、(A)独立の縮小のそれぞれについてリダクション演算をシリアル化すること、又は(B)関連する「インデックス」ベクトル内の各固有のインデックス値のインスタンス数をカウントすることの何れも必要とせずに、ベクトルレジスタのレーンにわたって複数のレジスタ内縮小を実行する問題に対処する。これは、以下に詳細に説明するように、独立の縮小を識別する第1の出力を生成し、バイナリ縮小ツリー内の左対右の子を識別するために使用されることができる第2の出力を生成することによって達成されることができる。1つの実施形態では、第1の出力はVPCONFLICT命令を使用して生成され、第2の出力はVPOPCNT命令を使用して生成される。
図13に図示されているように、SIMDツリー縮小論理1305の1つの実施形態は、入力として、縮小(例えば合計)されるべき値を含む「値」ベクトルレジスタ1302と、「値」ベクトル内のどの値(又はレーン)が互いに関連付けられているかを示す「インデックス」ベクトルレジスタ1301との2つのベクトルレジスタを採用する。「インデックス」ベクトルレジスタ1301内の2つのレーンが等しい値を有するならば、それらは同じツリー縮小に関与する。「インデックス」ベクトルレジスタ1301内の2つのレーンが異なる値を有するならば、それらは別個の縮小に関与する。SIMDツリー縮小論理1305の出力は、その縮小に関連するインデックス値のインスタンスを含む左端のレーン(すなわち、最上位バイトに最も近い)における各縮小の結果を含む累算ベクトルレジスタ1303である。
本明細書に開示された実施形態は、各レジスタの最上位ビット/バイトが「左」側にあり、最下位ビット/バイトが「右」側にある配置を利用するが、本発明の基本的な原理は、そのような配置に限定されるものではない。例えば、代替の実施形態では、最下位ビット/バイトが「左」側にあり、最上位ビット/バイトが「右」側にある。この実施形態では、本開示における「左」又は「左端」の如何なる参照も、「右」又は「右端」で置き換えることが可能であり、逆も可能である。
図13の例において、インデックスベクトルレジスタ1301内の値A、B、C、及びDは任意の(固有の)整数値を表す。図13はまた、各反復(反復0〜2が示されている)で、値ベクトル1302からの異なる組の値がリダクション演算を実行するためにSIMDツリー縮小論理によってどのように合計されるかを示す。例えば、インデックスベクトルレジスタ1301内のAの各インスタンスは、縮小されるべき値ベクトルレジスタ内の1組の値d15、d14、d8、d3、及びd0を識別する。最後の反復の後、これらの値は合計されて単一の値αを形成し、αは、蓄積ベクトル1303の左端のデータ要素位置に格納される(インデックスベクトル内の左端のAの位置と一致する)。βの値は、インデックスベクトルからB(d13、d11、d10、d9、d6、d5、d4、及びd1)の各インスタンスに関連する値を使用して同様に形成され、βの最終値は累算ベクトルレジスタ1303の左から3番目のデータ要素位置に格納される(インデックスベクトルの左端のBの位置と一致する)。
以下の擬似コードは、インデックス値に基づいてSIMDツリー縮小論理1305によって実行されることができるレジスタ内ツリー縮小を表す。
Figure 0006699845
動作中、ベクトルレジスタ「value_vec」(値ベクトルレジスタ1302)は、縮小されるべき値を含み、ベクトルレジスタ「index_vec」(インデックスベクトルレジスタ1301)は、これらの値のインデックス又は関連付けを含む。例えば、1つの実施形態では、「index_vec」内の等しい値は、「value_vec」内の対応する値が同じ縮小に属することを意味する。VEC_OP関数は、縮小で通常使用されるであろう任意の演算を表し、縮小は、典型的には、整数加算などの可換的結合的演算である。角括弧付きの左側の値(例えば、「cnt_vec{eo_mask}」)は、マスクの下で実行されるベクトル演算を表す。「i_vec{eo_mask}」演算では、全ての非アクティブなレーンをゼロ化する必要がある。「accum_vec{eo_mask}」演算では、全ての非アクティブレーンは「accum_vec」の前の値を保持する必要がある。
完了後、「accum_vec」ベクトルは、並列して発生した全ての縮小の結果を、「index_vec」に含まれる各固有値に対して1つ、保持する。各縮小の結果は、(図13に示されるように)「index_vec」における縮小に関連するインデックス値を有した「accum_vec」レジスタ1303の左端のレーン(MSBに最も近い)に存在するであろう。
「インデックス」ベクトルの全ての値が固有である(すなわち、「コンフリクトがない」場合の)状況では、これらの技法のコスト(VPCONFLICT及び偽となるであろう初期の「while」ループ条件テスト並びにループバックブランチのコスト)はかなり低い。「インデックス」ベクトルの全ての値が同じ場合(すなわち、「最もコンフリクトがある」場合)、これらの技法は「logN」回反復する。ここで、Nはベクトル幅である。これは、各縮小が実際上シリアル化される(例えば、各縮小において一度に1つの値/レーンを累算する)ので、N回の反復をその代わりに実行するであろう前述の先の実施形態とは対照的である。一般に、本発明の実施形態は、「値」ベクトル1302にわたって並列に任意の数の縮小を実行するために「O(logN)」反復を実行する。ここで、Nは、最多のインスタンスを有する「インデックス」ベクトル1301内の値のインスタンスの数である。例えば、図13において、値「B」は、合計でN=8のインスタンスを有し、「インデックス」ベクトル内に最多のインスタンスを有する(Aの5つのインスタンス、Cの1つのインスタンス、及びDの2つのインスタンスが存在する)。この例では、本明細書に記載の技法は3(logN)回反復するであろうが、前のアルゴリズムは8(N)回反復するであろう。
具体的な例が、今、図14及び図15に関して説明される。明確にするために、この詳細な例示的な実行は図13に示される例に従う。本明細書で使用される場合、最下位ビット(LSB)及び最下位レーン(LSL)は図示されている右端の値である(例えば、ベクトルレジスタ={レーン15、レーン14、…、レーン0})。マスク値の場合、明確にするためにビットを視覚的にグループ化するために下線が使用される。
第1のコンフリクト検出演算(例えば、VPCONFLICT)の結果と共に入力値は以下のようであり、ここで、A、B、C、及びDは固有で且つ任意の整数値を表し、d0〜d15は縮小に伴う値を表す。
Figure 0006699845
図14は、出力ベクトルレジスタ1402内の初期の「vc_vec」値を生成するコンフリクト検出演算(例えば、VPCONFLICTで実装される)を示す。図示の実施形態では、出力ベクトルレジスタ1402は、16個のデータ要素を格納し、各々は、インデックスデータレジスタ内に格納されているインデックスデータ要素の1つにそれぞれ関連付けられ、その要素の値は、対応するレーンに関連付けられている先のコンフリクトを表す。上述したように、インデックスベクトルレジスタ1301内の各要素は、最下位レーン/ビットにより近い他の全ての要素と比較される。従って、位置#4のインデックスデータ要素(この例ではB)は、位置#3(A)、位置#2(D)、位置#1(B)、及び位置#0(A)のデータ要素と比較される。データ要素が最下位レーンにより近いデータ要素の何れかと等しいならば、対応するビットが出力ベクトルレジスタ1402内に設定される。例えば、インデックスベクトルレジスタ1301の左から2番目のBは、出力11001110010を生成し、1はインデックスベクトルレジスタ1301内の他のBの位置を示す。次に、この値は、図示のように、出力ベクトルレジスタ1402(この例では16進値0x0672によって表される)の、比較が実行されるBの位置に対応する位置に格納される。同様の演算が、インデックスベクトルレジスタ1301に格納される各インデックス値に対して実行される。
次に、出力ベクトルレジスタ1302内の「vc_vec」値の中に設定された少なくとも1つのビットがある限り、上述の「while」ループが反復される。図示された例のために、リダクション演算は加算(例えば、VEC_OP=vpadd)である。その結果、反復0の結果は次のようになる。
Figure 0006699845
図15は、pc_vec値がどのように反復0に対して決定され、ベクトルレジスタ1501内にデータ要素として格納されるかを示す。具体的には、pc_vecベクトルレジスタ1501内の各データ要素は、インデックスベクトルレジスタ1301内のインデックスに対応し、インデックスベクトルレジスタ1301内の最下位レーン/ビットのより近くに格納されているインデックス値のインスタンスの数に等しい値を有する。例えば、pc_vecベクトルレジスタ1501の左端の値4は、インデックスベクトルレジスタ1301のインデックスAの左端のインスタンスに関連付けられ、インデックスベクトルレジスタ1301にインデックスAの(すなわち、Aの左端インスタンスの右側に)4つの他のインスタンスがあることを示す。同様に、pc_vecベクトルレジスタ1501の値7は、インデックスベクトルレジスタ内の対応する位置に位置するインデックスBのインスタンス(図示の例では左から2つの位置)に関連付けられる。値7は、インデックスベクトルレジスタ1301の右側に格納されているインデックスBのインスタンスが7つ存在することを示す。
更に、図15は、eo_maskレジスタ1502内のビットがどのように更新されるかを示す。具体的には、各インデックス値に関連付けられるビットは、インデックスベクトルレジスタ1301内の右側のインデックス値の奇数個の他のインスタンスを示すために1に設定される。従って、所与のインデックス値に対して、そのインデックス値に関連するビットは、eo_maskレジスタ1502内で1と0との間で交替する。
反復0に続いて、出力ベクトルレジスタ1402内に「vc_vec」値に設定されたビットがまだ存在するので、別の反復が実行される(「反復1」)。
Figure 0006699845
反復1の後、出力ベクトルレジスタ1402内に「vc_vec」値に設定されたビットが存在するので、別の反復が実行される。
Figure 0006699845
出力ベクトルレジスタ1402内の「vc_vec」は全てゼロを含むので、ループは終了する。ループの結果は次のようになる。入力は参照のために繰り返されている。
Figure 0006699845
値は、どのレーンが最終縮小結果を表すかを強調するためにindex_vecにおいて太字にされており、値は、index_vecの太字に一致するように上記のaccum_vecにおいて太字にされている。各縮小の結果は、その縮小に関連するインデックス値を有する左端のレーンにあることに留意されたい。この例では、左端のインデックス値「A」は結果「d15+d14+d8+d3+d0」(レーン15)に関連付けられ、左端のインデックス値「B」は結果「d13+d11+d10+d9+d6+d5+d4+d1」(レーン13)に関連付けられ、左端のインデックス値「C」は結果「d12」(レーン12)に関連付けられ、左端のインデックス値「D」は結果「d7+d2」(レーン7)に関連付けられる。これは、「反復2の後」とマークされている図13の表されている最終状態と一致する。
左端のレーン(又は最上位レーン(MSL、most significant lane))に結果を有することは、分散命令の定義の故に幾つかのアーキテクチャ(例えばIAなど)において有利である。分散命令内の複数の要素が同じインデックスを有する(すなわち、同じメモリ位置に書き込む)場合、左端のレーン(MSL)の値は如何なる他のものをも上書きする。この特定の実施形態の場合、左端が選ばれるが、本発明の基本的な原理は、結果のために左端のレーンを使用することに限定されるものではない。所与のインデックス値に対する結果は、そのインデックス値に関連付けられる左端又は右端のレーンの何れかに格納されることができる。なぜなら、分散命令は、重複が起きる場合、そのインデックス値に関連付けられる左端又は右端の値の何れかを選ぶことによって、決定論的結果を与えるようにしばしば定義されるからである。上記に提示される例示的なコードでは、所与のインデックス値に関連付けられる左端のレーンが選ばれる。
本発明の1つの実施形態による方法が図16に示されている。この方法は、上述したアーキテクチャの文脈内で実装されることができるが、如何なる特定のシステム又はプロセッサアーキテクチャに限定されるものではない。
1601において、コンフリクトがインデックスレーンにわたって検出され(例えば、最下位ビット/レーン側に等しいインデックス値)、その結果がVC_VECレジスタに格納される。例えば、1つの実施形態では、コンフリクトは、VPCONFLICTのようなコンフリクト検出命令を使用して検出される(例えば、図12及び関連するテキストを参照)。
何らかのコンフリクトが存在するかどうかの判定が1602で行われる。これは、例えば、VC_VECが現在設定されている幾つかのビットを有するかどうかをチェックすることによって判定されることができる。そうでなければ、プロセスは終了する。そうであれば、1603において、同じインデックス値を有するレーンは、それぞれの縮小ツリー内の左及び右の子としてマークされる。1つの実施形態では、これは、(上述のように)VPOPCNT(VC_VEC)&0x1によって達成される。1つの実施形態では、このビット列は、左の子をアクティブとしてマークするマスク(レーン毎のLSB)として使用される(例えば、左の子は右側に対して奇数個のコンフリクトを有し、一方、右の子は偶数個を有する)。
1604において、各レーンについて、ビットインデックスが、このレーンの右(LSL)側に同じインデックス値を有する左端レーン(MSL)を示す最上位1を求めて計算される。1605において、右の子は左の子と整列するように移動され、結果は一時的な場所に置かれる。1つの実施形態では、これはベクトル順序変更/シャッフル命令を使用して達成される。
1606において、リダクション演算が、元のデータを使用して1605からの一時的な結果に適用されて左及び右の子を結合し、その結果を左の子のレーンに配置する。1607において、1603で生成されたマスクは、ブロードキャストされ、VC−VECレジスタ内の現在の値とビット単位で論理積をとり、VC−VECレジスタを更新し、それによって右の子に関連するVC_VECレジスタ内のビットをクリアする(すなわち、将来の反復においてこれらの子を考慮から除外する)。次に、処理は1602に戻り、何らかのコンフリクトが残っているかどうかを判定する(例えば、VC_VECが1に設定された幾つかのビットを有するかどうかをチェックする)。そうでなければ、処理は終了し、そうであれば、1603から1607までの別の反復が実行される。
上記の技法の1つの用途は、「ヒストグラム」形式の演算にあり、その一例を以下に示す。ヒストグラム演算は、画像処理を含む様々なアプリケーションで一般的である。
Figure 0006699845
上記の「ヒストグラム」ループのようなループでは、このループの素朴なベクトル化を妨げる複雑な要因は、「b[j]」及び「b[k]」の値が等しい可能性があり、単一の単純なベクトル化ループ反復の中で「a」の同じ要素に関して競合状態を引き起こす。これは、「コンフリクト」と呼ばれる。上記の手法の使用は、コンフリクトする全ての値を固有のインデックス値毎に単一の値に最初に結合(縮小)することによって全てのコンフリクトを除去する。
上記の単純なヒストグラムの場合、「インデックス」ベクトルはベクトル幅「b[i]」値であり、「値」ベクトルは全てのレーンで「1」の値を有するであろう。「+=」演算の右辺が単に「1」の定数ではなく計算の結果であったならば、「値」ベクトルはそのベクトル化計算の結果を保持するであろう。その場合、我々の縮小ループが、上記のヒストグラムループをベクトル化するために収集及び分散命令と併せて使用されることができるであろう。
上述の本明細書では、本発明の実施形態を、その具体的な例示的実施形態を参照して説明してきた。しかしながら、様々な修正及び変更が、添付の特許請求の範囲に記載された本発明のより広い精神及び範囲から逸脱することなく、実施形態に対して行われ得ることが明らかであろう。従って、本明細書及び本図面は、限定的意味ではなく例示的な意味で考慮されるべきである。
本発明の実施形態は、上述した様々なステップを含むことができる。ステップは、汎用又は専用プロセッサにステップを実行させるために使用される機械実行可能命令で具現化されることができる。代替的に、これらのステップは、ステップを実行するハードウェアで実現されている論理を含む特定のハードウェア構成要素によって、又はプログラムされたコンピュータ構成要素とカスタムハードウェア構成要素との任意の組み合わせによって実行されることができる。
本明細書で説明されるように、命令は、或る特定の動作を実行するように構成された、又は所定の機能もしくは非一時的コンピュータ可読媒体に具現化されメモリに格納されたソフトウェア命令を有する特定用途向け集積回路(ASIC)のようなハードウェアの特定の構成を指すことができる。従って、図に示されている技法は、1つ又は複数の電子デバイス(例えば、エンドステーション、ネットワーク要素など)に格納され且つ実行されるコード及びデータを使用して実装されることができる。そのような電子デバイスは、非一時的コンピュータ機械可読通信媒体(例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、読み出し専用メモリ、フラッシュメモリデバイス、相変化メモリ)及び一時的コンピュータ機械可読通信媒体(例えば、搬送波、赤外線信号、デジタル信号などのような伝播信号の電気的、光学的、音響的、又は他の形体)のようなコンピュータの機械可読媒体を使用してコード及びデータを格納し、且つそれらを(内部的に且つ/又はネットワーク上の他の電子デバイスに)伝送する。更に、そのような電子デバイスは、典型的には、1つ又は複数の記憶デバイス(非一時的機械可読記憶媒体)、ユーザ入力/出力デバイス(例えば、キーボード、タッチスクリーン、及び/又はディスプレイ)、及びネットワーク接続のような1つ又は複数の他の構成要素に結合される1組の1つ又は複数のプロセッサを含む。一組のプロセッサと他の構成要素との結合は、典型的には、1つ又は複数のバス及びブリッジ(バスコントローラとも呼ばれる)を介する。記憶装置及びネットワークトラフィックを搬送する信号は、それぞれ、1つ又は複数の機械可読記憶媒体及び機械可読通信媒体を表す。従って、所与の電子デバイスの記憶装置は、典型的には、その電子デバイスの1組の1つ又は複数のプロセッサ上で実行するコード及び/又はデータを格納する。もちろん、本発明の実施形態の1つ又は複数の部分は、ソフトウェア、ファームウェア、及び/又はハードウェアの様々な組み合わせを使用して実装されることができる。この詳細な説明を通して、説明の目的のために、本発明の完全な理解を提供するために多数の具体的な詳細が明記された。しかしながら、当業者には、本発明がこれらの具体的な詳細の幾つかがなくても実施され得ることは明らかであろう。或る特定の例では、周知の構造及び機能は、本発明の主題を不明瞭にすることを避けるために、細かい詳細においては記載されなかった。従って、本発明の範囲及び精神は、以下の特許請求の範囲の観点から判断されるべきである。

Claims (23)

  1. 縮小されるべき複数のデータ要素値を格納する値ベクトルレジスタと、
    前記値ベクトルレジスタ内のどの値が互いに関連しているかを示す複数のインデックス値を格納するインデックスベクトルレジスタと、
    前記インデックスベクトルレジスタ内の前記複数のインデックス値によって示されるように互いに関連付けられる前記値ベクトルレジスタからのデータ要素値を結合させることによって、前記値ベクトルレジスタ内の前記データ要素値に対してリダクション演算を実行する単一命令複数データ縮小論理(SIMD縮小論理)と、
    前記SIMD縮小論理によって生成される前記リダクション演算の結果を格納する累算ベクトルレジスタと、を備え
    前記リダクション演算を実行するために、前記SIMD縮小論理は、同じインデックス値を有するデータ要素値の複数群を決定し、且つ複数の結果を生成するために前記同じインデックス値を有するデータ要素を結合させ、前記複数の結果の各々は、前記同じインデックス値を共有する一群のデータ要素値の算術結合を有するロセッサ。
  2. 前記SIMD縮小論理は、前記累算ベクトルレジスタの特定のデータ要素位置内に各結果を格納する、請求項に記載のプロセッサ。
  3. 前記SIMD縮小論理は、前記同じインデックス値を共有する要素値に対して複数の結合反復を実行することによって前記リダクション演算を実行し、前記複数の結合反復の各々は、最終反復において最終結果が得られるまで複数対のデータ要素値を結合する、請求項に記載のプロセッサ。
  4. 前記累算ベクトルレジスタ内の各特定データ要素位置は、前記インデックスベクトルレジスタ内の前記同じインデックス値の他のものに対して最上位位置を有する関連するインデックス値の位置に対応する位置又は前記インデックスベクトルレジスタ内の前記同じインデックス値の他のものに対して最下位位置を有する関連するインデックス値の位置に対応する位置を有する、請求項またはに記載のプロセッサ。
  5. 縮小されるべき複数のデータ要素値を格納する値ベクトルレジスタと、
    前記値ベクトルレジスタ内のどの値が互いに関連しているかを示す複数のインデックス値を格納するインデックスベクトルレジスタと、
    前記インデックスベクトルレジスタ内の前記複数のインデックス値によって示されるように互いに関連付けられる前記値ベクトルレジスタからのデータ要素値を結合させることによって、前記値ベクトルレジスタ内の前記データ要素値に対してリダクション演算を実行する単一命令複数データ縮小論理(SIMD縮小論理)と、
    前記SIMD縮小論理によって生成される前記リダクション演算の結果を格納する累算ベクトルレジスタと、を備えるプロセッサであって、
    前記値ベクトルレジスタ内の前記データ要素値の各々は、前記プロセッサ内のSIMDレーンに関連し、前記リダクション演算を実行することは、
    前記レーンの各々にわたってコンフリクトを計算してコンフリクト結果を生成することと、前記コンフリクト結果をコンフリクトデスティネーションレジスタに格納することとを更に有する、ロセッサ。
  6. 前記リダクション演算を実行することは、
    ビット列を生成するために、各レーンを、左及び右の子の縮小ツリー内のそれぞれの子と同じインデックス値でマークすることを更に有する、請求項に記載のプロセッサ。
  7. 前記リダクション演算を実行することは、
    前記ビット列を、前記左の子をアクティブとしてマークする又は前記右の子をアクティブとしてマークするマスクとして使用することを更に有する、請求項に記載のプロセッサ。
  8. 前記リダクション演算は、各レーンについて、前記マスクが前記左の子をアクティブとしてマークする場合、右側に等しいインデックス値を有する左端レーンを示す又は前記マスクが前記右の子をアクティブとしてマークする場合、左側に等しいインデックス値を有する右端レーンを示す最上位1のビット‐インデックスを計算することを更に有する、請求項に記載のプロセッサ。
  9. 前記リダクション演算は、前記マスクが前記左の子をアクティブとしてマークする場合、左の子と整列するように右の子を移動させ又は前記マスクが前記右の子をアクティブとしてマークする場合、右の子と整列するように左の子を移動させて、一時的な結果を生成することと、前記一時的な結果を一時的な位置に置くことと、を更に有する、請求項に記載のプロセッサ。
  10. 元のデータを使用してリダクション演算を前記一時的な結果に適用し、左と右の子を結合して新しい結果を生成することと、前記マスクが前記左の子をアクティブとしてマークする場合、前記新しい結果を前記左の子に関連付けられる前記レーンに配置すること又は前記マスクが前記右の子をアクティブとしてマークする場合、前記新しい結果を前記右の子に関連付けられる前記レーンに配置することと、を更に備える、請求項に記載のプロセッサ。
  11. 前記リダクション演算を実行することは、更に、
    前記マスクが前記左の子をアクティブとしてマークする場合、前記マスクと前記コンフリクト結果とのビット単位のAND演算を実行することにより、1つ又は複数の右の子に関連する前記コンフリクトデスティネーションレジスタ内のビットをクリアすることと、将来の反復における考慮から前記右の子を除去することと、を有する、又は、前記マスクが前記右の子をアクティブとしてマークする場合、前記マスクと前記コンフリクト結果とのビット単位のAND演算を実行することにより、1つ又は複数の左の子に関連する前記コンフリクトデスティネーションレジスタ内のビットをクリアすることと、将来の反復における考慮から前記左の子を除去することと、を有する、請求項または10に記載のプロセッサ。
  12. 前記SIMD縮小論理は、前記同じインデックス値を有するデータ要素値の複数群を決定し、且つ複数の結果を生成するために前記同じインデックス値を有する前記データ要素を加算することによって前記データ要素を結合させ、前記複数の結果の各々は前記同じインデックス値を共有する一群のデータ要素値の合計を有する、請求項に記載のプロセッサ。
  13. 縮小されるべき複数のデータ要素値を値ベクトルレジスタに格納することと、
    前記値ベクトルレジスタ内のどの値がインデックスベクトルレジスタにおいて互いに関連付けられているかを示す複数のインデックス値を格納することと、
    前記インデックスベクトルレジスタ内の前記複数のインデックス値によって示されるように互いに関連付けられる前記値ベクトルレジスタからのデータ要素値を結合させることによって、前記値ベクトルレジスタ内の前記データ要素値に対してリダクション演算を実行することと、
    前記リダクション演算の結果を累算ベクトルレジスタに格納することと、を備え
    前記リダクション演算を実行するために、同じインデックス値を有するデータ要素値の複数群を決定することと、複数の結果を生成するために前記同じインデックス値を有するデータ要素を結合することとを備え、前記複数の結果の各々は、前記同じインデックス値を共有する一群のデータ要素値の算術結合を有する、方法。
  14. 前記累算ベクトルレジスタの特定のデータ要素位置内に各結果を格納することを更に備える、請求項13に記載の方法。
  15. 前記同じインデックス値を共有する要素値に対して複数の結合反復を実行することによって前記リダクション演算を実行することを更に備え、前記複数の結合反復の各々は、最終反復において最終結果が得られるまで複数対のデータ要素値を結合する、請求項14に記載の方法。
  16. 前記累算ベクトルレジスタ内の各特定データ要素位置は、前記インデックスベクトルレジスタ内の前記同じインデックス値の他のものに対して最上位位置を有する関連するインデックス値の位置に対応する位置又は前記インデックスベクトルレジスタ内の前記同じインデックス値の他のものに対して最下位位置を有する関連するインデックス値の位置に対応する位置を有する、請求項14または15に記載の方法。
  17. 縮小されるべき複数のデータ要素値を値ベクトルレジスタに格納することと、
    前記値ベクトルレジスタ内のどの値がインデックスベクトルレジスタにおいて互いに関連付けられているかを示す複数のインデックス値を格納することと、
    前記インデックスベクトルレジスタ内の前記複数のインデックス値によって示されるように互いに関連付けられる前記値ベクトルレジスタからのデータ要素値を結合させることによって、前記値ベクトルレジスタ内の前記データ要素値に対してリダクション演算を実行することと、
    前記リダクション演算の結果を累算ベクトルレジスタに格納することと、を備え、
    前記値ベクトルレジスタ内の前記データ要素値の各々は、プロセッサ内のSIMDレーンに関連し、前記リダクション演算を実行することは、
    前記レーンの各々にわたってコンフリクトを計算してコンフリクト結果を生成することと、前記コンフリクト結果をコンフリクトデスティネーションレジスタに格納することとを更に有する、法。
  18. 前記リダクション演算を実行することは、
    ビット列を生成するために、各レーンを、左及び右の子の縮小ツリー内のそれぞれの子と同じインデックス値でマークすることを更に有する、請求項17に記載の方法。
  19. 前記リダクション演算を実行することは、
    前記ビット列を、前記左の子をアクティブとしてマークする又は前記右の子をアクティブとしてマークするマスクとして使用することを更に有する、請求項18に記載の方法。
  20. 前記リダクション演算は、各レーンについて、前記マスクが前記左の子をアクティブとしてマークする場合、右側に等しいインデックス値を有する左端レーンを示す又は前記マスクが前記右の子をアクティブとしてマークする場合、左側に等しいインデックス値を有する右端レーンを示す最上位1のビット‐インデックスを計算することを更に有する、請求項19に記載の方法。
  21. 前記リダクション演算は、前記マスクが前記左の子をアクティブとしてマークする場合、左の子と整列するように右の子を移動させ又は前記マスクが前記右の子をアクティブとしてマークする場合、右の子と整列するように左の子を移動させて、一時的な結果を生成すること、前記一時的な結果を一時的な位置に置くことと、を更に有する、請求項20に記載の方法。
  22. 元のデータを使用してリダクション演算を前記一時的な結果に適用し、左と右の子を結合して新しい結果を生成することと、前記マスクが前記左の子をアクティブとしてマークする場合、前記新しい結果を前記左の子に関連付けられる前記レーンに配置すること又は前記マスクが前記右の子をアクティブとしてマークする場合、前記新しい結果を前記右の子に関連付けられる前記レーンに配置することと、を更に備える、請求項21に記載の方法。
  23. 前記リダクション演算を実行することは、更に、
    前記マスクが前記左の子をアクティブとしてマークする場合、前記マスクと前記コンフリクト結果とのビット単位のAND演算を実行することにより、1つ又は複数の右の子に関連する前記コンフリクトデスティネーションレジスタ内のビットをクリアすることと、将来の反復における考慮から前記右の子を除去することと、を有する、或いは、前記マスクが前記右の子をアクティブとしてマークする場合、前記マスクと前記コンフリクト結果とのビット単位のAND演算を実行することにより、1つ又は複数の左の子に関連する前記コンフリクトデスティネーションレジスタ内のビットをクリアすることと、将来の反復における考慮から前記左の子を除去することと、を有する、請求項21または22に記載の方法。
JP2017527586A 2014-12-23 2015-11-23 方法及びプロセッサ Active JP6699845B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/581,478 US9851970B2 (en) 2014-12-23 2014-12-23 Method and apparatus for performing reduction operations on a set of vector elements
US14/581,478 2014-12-23
PCT/US2015/062074 WO2016105764A1 (en) 2014-12-23 2015-11-23 Method and apparatus for performing reduction operations on a set of vector elements

Publications (2)

Publication Number Publication Date
JP2018500656A JP2018500656A (ja) 2018-01-11
JP6699845B2 true JP6699845B2 (ja) 2020-05-27

Family

ID=56129476

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017527586A Active JP6699845B2 (ja) 2014-12-23 2015-11-23 方法及びプロセッサ

Country Status (7)

Country Link
US (1) US9851970B2 (ja)
EP (1) EP3238044A4 (ja)
JP (1) JP6699845B2 (ja)
KR (1) KR102449616B1 (ja)
CN (1) CN107003843B (ja)
TW (2) TWI616817B (ja)
WO (1) WO2016105764A1 (ja)

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10996959B2 (en) * 2015-01-08 2021-05-04 Technion Research And Development Foundation Ltd. Hybrid processor
US10162603B2 (en) * 2016-09-10 2018-12-25 Sap Se Loading data for iterative evaluation through SIMD registers
EP3336692B1 (en) * 2016-12-13 2020-04-29 Arm Ltd Replicate partition instruction
US10846087B2 (en) * 2016-12-30 2020-11-24 Intel Corporation Systems, apparatuses, and methods for broadcast arithmetic operations
US10268479B2 (en) * 2016-12-30 2019-04-23 Intel Corporation Systems, apparatuses, and methods for broadcast compare addition
US10275217B2 (en) * 2017-03-14 2019-04-30 Samsung Electronics Co., Ltd. Memory load and arithmetic load unit (ALU) fusing
US10108581B1 (en) 2017-04-03 2018-10-23 Google Llc Vector reduction processor
WO2019005165A1 (en) * 2017-06-30 2019-01-03 Intel Corporation METHOD AND APPARATUS FOR VECTORIZING INDIRECT UPDATING BUCKLES
CN109034382A (zh) * 2017-10-30 2018-12-18 上海寒武纪信息科技有限公司 场景或物体的识别方法及相关产品
US11277455B2 (en) 2018-06-07 2022-03-15 Mellanox Technologies, Ltd. Streaming system
GB2574817B (en) * 2018-06-18 2021-01-06 Advanced Risc Mach Ltd Data processing systems
US11579883B2 (en) * 2018-09-14 2023-02-14 Intel Corporation Systems and methods for performing horizontal tile operations
US20200106828A1 (en) * 2018-10-02 2020-04-02 Mellanox Technologies, Ltd. Parallel Computation Network Device
US11625393B2 (en) * 2019-02-19 2023-04-11 Mellanox Technologies, Ltd. High performance computing system
EP3699770A1 (en) 2019-02-25 2020-08-26 Mellanox Technologies TLV Ltd. Collective communication system and methods
US11294670B2 (en) * 2019-03-27 2022-04-05 Intel Corporation Method and apparatus for performing reduction operations on a plurality of associated data element values
US11327862B2 (en) 2019-05-20 2022-05-10 Micron Technology, Inc. Multi-lane solutions for addressing vector elements using vector index registers
US11507374B2 (en) 2019-05-20 2022-11-22 Micron Technology, Inc. True/false vector index registers and methods of populating thereof
US11340904B2 (en) * 2019-05-20 2022-05-24 Micron Technology, Inc. Vector index registers
US11403256B2 (en) 2019-05-20 2022-08-02 Micron Technology, Inc. Conditional operations in a vector processor having true and false vector index registers
US11750699B2 (en) 2020-01-15 2023-09-05 Mellanox Technologies, Ltd. Small message aggregation
US11252027B2 (en) 2020-01-23 2022-02-15 Mellanox Technologies, Ltd. Network element supporting flexible data reduction operations
US11876885B2 (en) 2020-07-02 2024-01-16 Mellanox Technologies, Ltd. Clock queue with arming and/or self-arming features
US11556378B2 (en) 2020-12-14 2023-01-17 Mellanox Technologies, Ltd. Offloading execution of a multi-task parameter-dependent operation to a network device
CN115220789B (zh) * 2022-06-24 2023-02-07 北京联盛德微电子有限责任公司 一种用于多寄存器的操作命令触发调度方法及单元
US20240004647A1 (en) * 2022-07-01 2024-01-04 Andes Technology Corporation Vector processor with vector and element reduction method
US11922237B1 (en) 2022-09-12 2024-03-05 Mellanox Technologies, Ltd. Single-step collective operations

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5845112A (en) * 1997-03-06 1998-12-01 Samsung Electronics Co., Ltd. Method for performing dead-zone quantization in a single processor instruction
US7506135B1 (en) 2002-06-03 2009-03-17 Mimar Tibet Histogram generation with vector operations in SIMD and VLIW processor by consolidating LUTs storing parallel update incremented count values for vector data elements
GB2411974C (en) * 2003-12-09 2009-09-23 Advanced Risc Mach Ltd Data shift operations
GB2409068A (en) * 2003-12-09 2005-06-15 Advanced Risc Mach Ltd Data element size control within parallel lanes of processing
US7330964B2 (en) * 2005-11-14 2008-02-12 Texas Instruments Incorporated Microprocessor with independent SIMD loop buffer
US7991987B2 (en) * 2007-05-10 2011-08-02 Intel Corporation Comparing text strings
US8447962B2 (en) * 2009-12-22 2013-05-21 Intel Corporation Gathering and scattering multiple data elements
US20110302394A1 (en) 2010-06-08 2011-12-08 International Business Machines Corporation System and method for processing regular expressions using simd and parallel streams
US9552206B2 (en) * 2010-11-18 2017-01-24 Texas Instruments Incorporated Integrated circuit with control node circuitry and processing circuitry
CN105955704B (zh) * 2011-11-30 2018-12-04 英特尔公司 用于提供向量横向比较功能的指令和逻辑
US9459865B2 (en) * 2011-12-23 2016-10-04 Intel Corporation Systems, apparatuses, and methods for performing a butterfly horizontal and cross add or substract in response to a single instruction
CN103999037B (zh) * 2011-12-23 2020-03-06 英特尔公司 用于响应于单个指令来执行横向相加或相减的系统、装置和方法
WO2013095634A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Systems, apparatuses, and methods for performing a horizontal partial sum in response to a single instruction
US9268626B2 (en) * 2011-12-23 2016-02-23 Intel Corporation Apparatus and method for vectorization with speculation support
WO2013101198A1 (en) * 2011-12-30 2013-07-04 Intel Corporation Simd variable shift and rotate using control manipulation
WO2013147869A1 (en) 2012-03-30 2013-10-03 Intel Corporation Apparatus and method for selecting elements of a vector coumputation
US9378182B2 (en) * 2012-09-28 2016-06-28 Intel Corporation Vector move instruction controlled by read and write masks
US9588766B2 (en) 2012-09-28 2017-03-07 Intel Corporation Accelerated interlane vector reduction instructions
US9921832B2 (en) 2012-12-28 2018-03-20 Intel Corporation Instruction to reduce elements in a vector register with strided access pattern
US9372692B2 (en) 2012-12-29 2016-06-21 Intel Corporation Methods, apparatus, instructions, and logic to provide permute controls with leading zero count functionality
US9411592B2 (en) 2012-12-29 2016-08-09 Intel Corporation Vector address conflict resolution with vector population count functionality
US9411584B2 (en) 2012-12-29 2016-08-09 Intel Corporation Methods, apparatus, instructions, and logic to provide vector address conflict detection functionality

Also Published As

Publication number Publication date
US9851970B2 (en) 2017-12-26
CN107003843A (zh) 2017-08-01
US20160179537A1 (en) 2016-06-23
JP2018500656A (ja) 2018-01-11
CN107003843B (zh) 2021-03-30
KR102449616B1 (ko) 2022-10-04
EP3238044A4 (en) 2018-08-22
TW201643705A (zh) 2016-12-16
TW201737062A (zh) 2017-10-16
KR20170097008A (ko) 2017-08-25
EP3238044A1 (en) 2017-11-01
WO2016105764A1 (en) 2016-06-30
TWI616817B (zh) 2018-03-01
TWI575454B (zh) 2017-03-21

Similar Documents

Publication Publication Date Title
JP6699845B2 (ja) 方法及びプロセッサ
JP6456867B2 (ja) 密結合ヘテロジニアスコンピューティングのためのハードウェアプロセッサ及び方法
JP6711480B2 (ja) ベクトルインデックスロードおよびストアのための方法および装置
JP6466388B2 (ja) 方法及び装置
JP6849275B2 (ja) インデックスおよび即値を用いてベクトル置換を実行するための方法および装置
JP6673574B2 (ja) ベクトルビットシャッフルを実行するための方法および装置
JP6741006B2 (ja) マスクレジスタとベクトルレジスタとの間で可変に拡張するための方法および装置
JP6635438B2 (ja) ベクトルビット反転およびクロスを実行するための方法および装置
JP6745021B2 (ja) 競合検出を実行するための方法および装置
JP6778375B2 (ja) ベクトルビット反転を実行するためのプロセッサ、方法、およびシステム
JP2017509064A (ja) マスクド結果要素に伝搬する対応アンマスクド結果要素にソース要素を記憶するプロセッサ、方法、システム、及び命令
JP2017534114A (ja) Z順序曲線において次のポイントの座標を計算するためのベクトル命令
JP2018502364A (ja) 実行のためのデータ要素の読み込みにおいて空間的局所性を考慮する装置および方法
JP2018506094A (ja) 多倍長整数(big integer)の算術演算を実行するための方法および装置
JP6807073B2 (ja) 高速ベクトルによる動的なメモリ競合検出
CN108292228B (zh) 用于基于通道的步进收集的系统、设备和方法
JP6835436B2 (ja) マスクをマスク値のベクトルに拡張するための方法および装置
JP2017539010A (ja) ベクトル飽和ダブルワード/クワッドワードの加算を実行するための命令およびロジック
JP2017534982A (ja) 4d座標から4dのz曲線インデックスを計算するための機械レベル命令
JP2018500629A (ja) 3d座標から3dのz曲線インデックスを計算するための機械レベル命令
CN107077333B (zh) 用于实行向量位聚集的方法和装置
JP2018500665A (ja) マスク値を圧縮するための方法および装置
JP2018506762A (ja) 結合した加算−加算命令のための装置および方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20181119

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20191016

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20191112

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200129

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200331

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200421

R150 Certificate of patent or registration of utility model

Ref document number: 6699845

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250