JP2021051727A - グラフアプリケーション内の圧縮されたリストに効率的にアクセスするための間接参照のロード及びストアへのisaサポートのシステム及び方法 - Google Patents
グラフアプリケーション内の圧縮されたリストに効率的にアクセスするための間接参照のロード及びストアへのisaサポートのシステム及び方法 Download PDFInfo
- Publication number
- JP2021051727A JP2021051727A JP2020109873A JP2020109873A JP2021051727A JP 2021051727 A JP2021051727 A JP 2021051727A JP 2020109873 A JP2020109873 A JP 2020109873A JP 2020109873 A JP2020109873 A JP 2020109873A JP 2021051727 A JP2021051727 A JP 2021051727A
- Authority
- JP
- Japan
- Prior art keywords
- data
- indirect reference
- instruction
- processor
- field
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims description 39
- 230000004044 response Effects 0.000 claims abstract description 52
- 230000015654 memory Effects 0.000 claims description 139
- 239000013598 vector Substances 0.000 description 97
- VOXZDWNPVJITMN-ZBRFXRBCSA-N 17β-estradiol Chemical compound OC1=CC=C2[C@H]3CC[C@](C)([C@H](CC4)O)[C@@H]4[C@@H]3CCC2=C1 VOXZDWNPVJITMN-ZBRFXRBCSA-N 0.000 description 72
- 238000006073 displacement reaction Methods 0.000 description 39
- 238000010586 diagram Methods 0.000 description 38
- 238000007667 floating Methods 0.000 description 20
- 238000006243 chemical reaction Methods 0.000 description 15
- 230000006870 function Effects 0.000 description 14
- 238000012545 processing Methods 0.000 description 11
- 238000004364 calculation method Methods 0.000 description 7
- 239000003795 chemical substances by application Substances 0.000 description 7
- 238000004891 communication Methods 0.000 description 7
- 230000000873 masking effect Effects 0.000 description 7
- 239000000306 component Substances 0.000 description 6
- 230000008859 change Effects 0.000 description 5
- 230000006835 compression Effects 0.000 description 5
- 238000007906 compression Methods 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 230000000295 complement effect Effects 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 238000013519 translation Methods 0.000 description 4
- 238000007792 addition Methods 0.000 description 3
- 239000000872 buffer Substances 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 239000003607 modifier Substances 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000010076 replication Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000001629 suppression Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 229910052754 neon Inorganic materials 0.000 description 1
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 1
- 239000002245 particle Substances 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000011176 pooling Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30079—Pipeline control instructions, e.g. multicycle NOP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
- G06F9/30178—Runtime instruction translation, e.g. macros of compressed or encrypted instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/35—Indirect addressing
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
- Memory System (AREA)
Abstract
【課題】グラフアプリケーション内の圧縮されたグラフィックリストに効率的にアクセスするマルチレベル間接参照ロード及びストア単一命令を提供する。【解決手段】パイプライン間接参照システム100は、Load.ind単一命令を実行する。第1のデータ位置115と関連する第1の演算エンジン110は、ロードストアキュー105から間接参照要求IND−IND−LDを受信し、第2の演算エンジン120と関連する第2のデータ位置125を計算する。第2の演算エンジン120は、間接参照要求IND−LDに応答して、第3の演算エンジン130と関連する第3のデータ位置135を計算する。さらに、第3の演算エンジン130は、間接参照要求OP−loadに応答して、第3のデータ位置135からデータを受信して、ロードストアキュー105に受信データをロードする。以上により圧縮されたグラフィックリストへのアクセスを実行する。【選択図】図1
Description
本発明の分野は、概して、コンピュータプロセッサアーキテクチャに関し、より具体的には、グラフアプリケーション内の圧縮されたリストに効率的にアクセスするための間接参照のロード及びストアのシステム及び方法である。
大きな疎行列は、圧縮行格納方式(CSR)フォーマットに圧縮される。CSRフォーマットは、疎行列における0でないエントリのベクトル化されたリストである。CSRフォーマットで表された疎行列は、3つの1次元のアレイを有する。対象の位置を発見する前に、各間接参照のロード又はストアは、予め構築された隣接するインデックスの読み込みがメモリ内のリストから実行されて、対象の値の位置を発見すべく隣接するインデックスの値がデリファレンスされて、ロード又はストア要求がその最終的な値に送信されるという点で、性能オーバーヘッドを増加させる。
グラフアプリケーション内の圧縮されたリストに効率的にアクセスする間接参照のロード及びストアをサポートすることによって、プロセッサの必要性、例えば、複数の演算を単一の命令に組み合わせる能力を提供すること、を満たすのに役立ち得、これは、総レイテンシを減らし、コード効率を高める。
本発明が例示する目的で図示され、添付図面の図に限定されない。添付図面において、同様の参照符号は、類似の要素を示す。
以下の説明において、多くの具体的な詳細が明記される。しかしながら、本発明の複数の実施形態がこれらの具体的な詳細なしに実施され得ることが理解される。他の例では、この説明の理解を曖昧にしないために、周知の回路、構造、及び技術が詳細に示されていない。
本明細書における「一実施形態」、「実施形態」、「例示的な実施形態」等への言及は、説明される実施形態が特定の機能、構造、又は特性を含み得るが、あらゆる実施形態が必ずしも特定の機能、構造、又は特性を含まなくてもよいことを示す。さらに、そのような文言が必ずしも同一の実施形態を指すものではない。さらに、特定の機能、構造、又は特性が実施形態に関連して説明されるとき、明示的に説明されているか否かに関わらず、他の複数の実施形態に関連しているそのような機能、構造、又は特性に影響を与えることは、当業者の知識の範囲内であると考えられる。
パイプライン間接参照システムは、リストデータ構造、グラフアプリケーション内の圧縮されたリスト(例えば、圧縮されたグラフィックリスト)、又は任意の他の適切なリストにアクセスするシステムである。圧縮されたリストは、間接参照要求を介してアクセスされ得る。本明細書で使用されるように、用語「間接参照要求」は、間接参照のロード演算、間接参照のストア演算、及び/又はストア確認応答を含むグラフアプリケーション内の圧縮されたリストにアクセスすることへの要求を指すのに使用され得る。
本明細書で説明されるように、圧縮されたリストへの効率的なアクセスのために間接参照のロード及びストアをサポートすることは、複数の演算を単一の命令に結合し、コード効率を高めるリモートアドレス計算をサポートすることによって、性能改善を提供する。さらに、本明細書で説明されるように、間接参照のロード及びストアをサポートすることは、演算ごとのレイテンシを減らしつつ、メモリアクセスごとのラウンドトリップレイテンシを取り除く。
例えば、パイプライン間接参照システムは、圧縮されたグラフィックリストにアクセスする単一の命令をフェッチして復号することから開始する。圧縮されたグラフィックリストが、ロードストアキューから、第1のデータ位置と関連している第1の演算エンジンで、間接参照要求を受信することによって、アクセスされる。第2の演算エンジンと関連している第2のデータ位置が、第1の演算エンジンによって計算される。第3の演算エンジンと関連している第3のデータ位置が第2の演算エンジンによって計算され、データ応答が第3のデータ位置からデータを受信することに応答して、ロードストアキューに提供される。
図1は、本発明の一実施形態による、多重間接参照を有するパイプライン間接参照システムアーキテクチャのブロック図を示す。示されるように、パイプライン間接参照システム100は、ロードストアキュー(例えば、LSQ105)、1又は複数の演算エンジン(例えば、演算エンジン110、120、及び130)、1又は複数のデータ位置(例えば、データ位置115、125、及び135)、並びに1又は複数の追加のシステム、コンポーネント等と通信可能に、且つ、動作可能に連結されるパイプライン102を含む。パイプライン間接参照システム100は、図1に示されるものより多くの、少ない、及び/又は異なるコンポーネント/システムを含み得、その結果、本開示の原理、方法、システム、処理等は、任意の他パイプライン間接参照システム構成と共に適用可能であることが意図されていることが理解されるべきである。本開示の原理は、当該原理が様々な他の用途にも適用され得ることを企図することも理解されるべきである。
示されるように、パイプライン間接参照システム100は、パイプライン102を含む。単一の命令(例えば、load.ind命令、store.ind命令等)が、パイプライン102でパイプライン間接参照システム100に発行される。いくつかの実施形態において、間接参照レベルは、間接参照のロード演算及び/又は間接参照のストア演算に対して判断され得る。間接参照レベルは、マルチレベルの間接参照(例えば、二重間接参照)、又は単一レベルの間接参照(例えば、単一間接参照)を示し得る。本明細書で説明されるように、間接参照レベル(例えば、LEV−IND修飾子)が1に設定される場合、その後、最終的なデータ位置のアドレスをデリファレンスする間接参照要求(例えば、間接参照ロード又は間接参照ストア要求)が、少なくとも2つのデータ位置(例えば、次のリスト位置)に提供され得る。
これに関して、LSQ105は、演算エンジン110に間接参照要求(例えば、IND−IND−LDパケット等の二重間接参照)を含む単一の命令を発行する。本明細書で使用されるように、用語「ロードストアキュー(LSQ)」は、1又は複数の命令と関連しているデータ及び/又は情報をストアするキューを参照するのに使用され得る。いくつかの実施形態において、LSQ105にストアされたデータは、命令、1又は複数の演算エンジン(例えば、演算エンジン110、120、130等)、又は任意の他の適切なコンポーネント間で渡され得、又は別の方法で提供され得る。演算エンジン(例えば、演算エンジン110)がリストメモリの近くに配置され得る。
間接参照要求は、データ位置115から第1のポインタを読み出すよう演算エンジン110に命令し得る。本明細書で使用されるように、用語「データ位置」が、スクラッチパッドメモリ、ダブルデータレート(DDR)メモリ、又は任意の他の適切なストレージ位置を参照するのに使用され得る。データ位置115からの第1のポインタは、第2のポインタの位置を判断するのに利用され得る。
次に、演算エンジン110は、次のポインタ位置(例えば、本明細書の図4の表内で参照されるものとして、r3等のレジスタ)を計算し得、又は別の方法で判断し得る。例えば、演算エンジン110は、次のポインタ位置が演算エンジン120と関連しているデータ位置125であると判断し得る。演算エンジン110は、演算エンジン120に間接参照要求を送信し得、渡し得、又はそうでなければ提供し得る。例えば、演算エンジン110は、演算エンジン120に間接参照要求(例えば、IND−LDパケット)を送信し得、又は別の方法で提供し得る。いくつかの実施形態において、演算エンジン110は、演算エンジン120に提供するために、間接参照要求(例えば、これに限定されないが、IND−LDパケット等の第2の間接参照要求)を生成し得る。間接参照要求は、(図4を参照して本明細書で説明されるものとして)データ位置125でポインタを計算するr4等の第2のレジスタを含み得る。
データ位置125で、演算エンジン120は、メモリからポインタを読み出し得、次のポインタ位置がデータ位置135であることを判断するのにレジスタ値を使用してポインタ計算を実行し得る。演算エンジン120は、その後、間接参照要求(例えば、演算ロード要求)をデータ位置135に送信し、これは、データ位置135で演算エンジン130によって読み出され、又は別の方法で受信される。
データが、間接参照要求に応答してデータ位置135から演算エンジン130によって読み込まれ、データ応答(例えば、データ値、データ確認応答、又はこれらの組み合わせ)がLSQ105に提供(例えば、送信)される。
図2は、本発明の一実施形態による、パイプライン間接参照システムアーキテクチャのブロック図を示す。単一の命令(例えば、load.ind命令)が、パイプライン102でパイプライン間接参照システム100に発行される。LSQ105は、演算エンジン210に提供される間接参照要求(例えば、IND−LDパケット等の単一間接参照)を含む単一の命令を発行する。間接参照レベル(例えば、LEV−IND修飾子)が0に設定される場合、ストア又はロードがデータ位置(例えば、データ位置215及び/又は225等のデリファレンスされた位置)に提供されて、データ応答(例えば、データ値、データ確認応答、又はこれらの組み合わせ)がLSQ105にリターンされる。
したがって、演算エンジン210は、間接参照要求(例えば、IND−LDパケット)を受信し得る。データ位置215で、演算エンジン210は、メモリからポインタを読み出し得、次のポインタ位置がデータ位置225であることを判断するのにレジスタ値を使用してポインタ計算を実行し得る。次に、演算エンジン210は、演算エンジン220に間接参照要求を送信し得、又は別の方法で提供し得る。例えば、演算エンジン210は、データ位置225に間接参照要求(例えば、演算ロード要求)を送信し得、又は別の方法で提供し得、これは、データ位置225で演算エンジン220によって読み出され、又はそうでなければ受信される。
データが、間接参照要求に応答してデータ位置225から演算エンジン220によって読み込まれ、データ応答(例えば、データ値、データ確認応答、又はこれらの組み合わせ)がLSQ105に提供(例えば、送信)される。
図3は、圧縮されたグラフィックリストにアクセスする複数の実施形態の例を示す。図3は、パイプラインに発行された命令(例えば、load.ind命令)に応答してトリガされる。方法の処理が、これに限定されないが、本明細書で詳述されるようなプロセッサを含むプロセッサ又はコアのコンポーネントによって実行される。
図3は、圧縮されたグラフィックリストにアクセスする単一の命令を実行するプロセッサの一実施形態を示す。301では、プロセッサが、フェッチ回路を使用して、単一の命令をフェッチする。単一の命令は、リストロード、ポインタデリファレンス、間接参照のロード演算、又は間接参照のストア演算のうちの少なくとも1つを含む。有利には、単一の命令に複数の演算(例えば、リストロード、ポインタデリファレンス、間接参照のロード演算、又はデータロード/ストア)を含めることは、リモートアドレス計算をサポートし、メモリアクセスごとのラウンドトリップレイテンシを取り除くことによって、コード効率を高めて演算ごとのレイテンシを減少させる。
フェッチされた単一の命令が復号される。例えば、フェッチされた単一の命令が、本明細書で詳細されるような復号回路によって復号される。復号された単一の命令の実行は、間接参照要求を受信することによって圧縮されたグラフィックリストへのアクセスをもたらす。間接参照要求は、間接参照の演算を含む。間接参照の演算は、間接参照のロード演算又は間接参照のストア演算を含み得る。いくつかの実施形態において、間接参照レベルは、間接参照のロード演算及び/又は間接参照のストア演算に対して判断され得る。これに関して、間接参照レベルは、マルチレベルの間接参照又は単一レベルの間接参照を示し得る。いくつかの実施形態において、マルチレベルの間接参照は、複数の個々のロードを含む。いくつかの実施形態において、マルチレベルの間接参照は、複数の個々のストアを含む。いくつかの実施形態において、マルチレベルの間接参照は、1又は複数の個々ロード及び1又は複数の個々のストアの組み合わせを含む。単一レベルの間接参照は、個々のロード又は個々のストアを含む。
いくつかの実施形態において、間接参照要求は、ロードストアキューと関連しているアドレスを含み得る。ロードストアキューと関連しているアドレスが、パイプライン間接参照システムの1又は複数の演算エンジンでロードストアキューにデータをリターンする間接参照要求に含まれ得る。いくつかの実施形態において、ロードストアキューのアドレスが、間接参照要求の位置と関係なく、首尾よくデータをリターンする各間接参照要求で送信され得る。
いくつかの実施形態において、間接参照要求が、ロードストアキュー(LSQ)から、第1の演算エンジンで受信され得る。第1の演算エンジンは、第1のデータ位置と関連している。データ位置は、パイプライン間接参照システム内のメモリ位置を含む。
プロセッサは、実行回路(図11A及び図11Bを参照して本明細書で説明されるように、例えば、メモリインタフェースでの既存のアトミック実行ユニット)を使用して、圧縮されたグラフィックリストにアクセスする復号された単一の命令を実行することによって、復号された単一の命令に応答する。305では、プロセッサは、第1の演算エンジンによって、第2の演算エンジンと関連している第2のデータ位置を計算する。これに関して、第1の演算エンジンは、第1のデータ位置(例えば、第1の演算エンジンと関連している第1の位置)から第1のポインタを読み出す。第1のポインタは、第2のポインタの位置を判断するのに利用され得る。プロセッサは、第1のポインタに従って判断された位置に基づいて、第2のポインタと関連している第2のデータ位置を計算し得る。次に、プロセッサは、判断された第2のデータ位置で第2の演算エンジンに間接参照要求を提供し得る。
307では、プロセッサは、第2の演算エンジンによって、間接参照要求に応答して第3の演算エンジンと関連している第3のデータ位置を計算する。プロセッサは、第2のデータ位置から第2のポインタを読み出し得、それに応じて、第3のポインタと関連している第3のデータ位置を計算し得る。プロセッサは、その後、第2の演算エンジンによって、第3の演算エンジンに間接参照要求を提供し得る。
309では、プロセッサは、第3の演算エンジンによって、第3のデータ位置からデータを受信したことに応答して、ロードストアキューにデータ応答を提供する。例えば、演算エンジンは、第3のデータ位置からデータを読み込み、データ応答(例えば、データ確認応答)をロードストアキューに送信する。
図4は、いくつかの実施形態による、3つの演算に対する命令の定義を示す表を示す。示されるように、表は、間接参照のロード及びストア演算、記述、並びにパイプライン間接参照システム100への入力を含む。これらの演算のそれぞれは、パイプライン間接参照システム100の1又は複数の演算エンジン(例えば、演算エンジン110、120及び130)によってサポートされる。パイプライン間接参照システム100は、マルチスレッドのパイプラインの形態を取り得る。いくつかの実施形態において、一旦メモリ演算が発行されると、そのスレッドは、演算が完了するまでわきに退かれる。スレッドは、その後、有利にパイプラインに再び入り得、転送する必要性を除去する。いくつかの実施形態において、間接参照の演算(例えば、load.ind又はstoreack.ind等の任意の演算)が、間接参照の演算が完了するまで待機するように、マルチスレッドのパイプラインは、フェンシングすることを含み得る。
LSQ105は、リストメモリ(例えば、r2内のアドレス又はr2のアドレス)の近くに配置された演算エンジン(例えば、演算エンジン110、120及び130)に要求を送信する。演算エンジンは、その後、リスト読み込み及びデリファレンスを実行する。間接参照レベル(例えば、LEV−IND修飾子)が1に設定される複数の実施形態において、その後、最終的なデータ位置(例えば、データ位置135)のアドレスをデリファレンスする間接参照要求が、少なくとも2つのデータ位置(例えば、データ位置115及び125のような次のリスト位置)に提供され得る。いくつかの実施形態において、間接参照要求(例えば、二重間接参照)は、レジスタr4等のオペランドを含んで、次のデータ位置をデリファレンスする第2のポインタをサポートし得る。オペランドr4は、同一のベース値を再使用すべく、互いに隣接するデータ構造を配置する任意の要求を有利に除去する新しいデータ構造にベース値を提供し得る。最終的なデータ位置のアドレスがデリファレンスされるとき、データ応答(例えば、データ値、データ確認応答、又はこれらの組み合わせ)が、LSQ105にリターンされる。
間接参照レベル(例えば、LEV−IND修飾子)が0設定される場合、ストア又はロード(例えば、IND−LD)がデータ位置(例えば、データ位置215及び/又は225等のデリファレンスされた位置)に提供されて、データ応答(例えば、データ値、データ確認応答、又はこれらの組み合わせ)がLSQ105にリターンされる。
図5は、本明細書で説明されるような一実施形態による、二重間接参照ロードを実行する例示的な疑似コードを示す。ループが、頂点vごとに、その隣接する頂点にわたって実行される。二重間接参照ロードが、コードlogprimes[labelvec[neighbors[i]]として3行目に示される。間接参照のロードからのリターン値は、「sum」に累算されるtである。単一の機械コード命令として書き込まれると、二重間接参照コードは、
Load.ind ret_reg,neighbors[i],labelvec_base,logprimes_base,
SIZE=64,AM=O,OS=64,OT=U,LEV−IND=1
と変換する。
Load.ind ret_reg,neighbors[i],labelvec_base,logprimes_base,
SIZE=64,AM=O,OS=64,OT=U,LEV−IND=1
と変換する。
Ret_reg:データがロードされるローカルレジスタ
neighbors[i]:どこにポインタの第1の「リスト」が配置されるかを指示する上記のコードセグメントからの変数である。
Labelvec_base:これは、第1の間接参照に「base+offset」アドレスデリファレンスを実行するアドレス値である。
Logprimes_base:これは、第2の間接参照に「base+offset」アドレスデリファレンスを実行するアドレス値である。
図6は、本明細書で説明されるような一実施形態による、例示的なbase+offsetアドレスフォーマットを示す。いくつかの実施形態において、疎グラフ及び行列に対するデータ構造(例えば、圧縮行格納方式)は、整数の隣接するブロックとしてメモリ内の頂点又は列IDを表す。これらの整数は、不均一な配置(例えば、ギャザー、スキャタ、又はブロードキャスト)のデータ構造にインデックスを付けるのに使用され得る。いくつかの実施形態において、演算エンジン(例えば、演算エンジン110、120、及び130)は、オフセットフォーマットのリストで表されるリストを解釈し得る。これに関して、ベース値(例えば、64ビット正規アドレス)及びパックされたオフセットリストのアドレスが、別個のレジスタとしての演算の一部として提供され得る。メモリにストアされたリストは、その後、要素のカウントを表す整数を含み得る。有利には、これは、個々の要素サイズでIDをスケーリングすることなく、元のID(例えば、頂点ID)の提供を可能にする。いくつかの実施形態において、リスト内の整数は、スケーラブルな下限からスケーラブル上限までの値域を定め得る(例えば、整数は、これに限定されないが、4バイト、8バイト等のようなxバイト数である得る)。代替的又はさらに、整数は符号付き又は符号なしであり得る。
32ビット符号なし整数オフセットの値が示される。ここで、AM=O、OT=U、及びOS=32ビットである。リストのベースアドレスは、rSrc(r2)である。64ビットのアドレス値への整数オフセットの変換が、式Dest_addr=(Offset_0×SIZE)+r3に従って実行され得る。整数は、ベース値r3からの距離(例えば、SIZEのデータ要素内の距離)を表す。対象のデータ要素の位置は、SIZEで乗算され、r3に追加された整数オフセットである。
本明細書で詳述されるのは、上記の説明された命令を実行するハードウェア、ソフトウェア等の例である。例えば、以下で説明することは、フェッチ、復号、スケジューリング、実行、リタイア等のような、様々なパイプラインステージを含む命令実行の態様を詳述する。
命令セット
命令セットは、1又は複数の命令フォーマットを含み得る。所与の命令フォーマットは、数ある中でも、実行される演算(例えば、オペコード)及び演算が実行されるオペランド、及び/又は他のデータフィールド(例えば、マスク)を指定する様々なフィールド(例えば、ビット数、ビットの位置)を定義し得る。いくつかの命令フォーマットが、命令テンプレート(又はサブフォーマット)の定義を通じて、さらに分類される。例えば、所与の命令フォーマットの命令テンプレートが、命令フォーマットのフィールドの異なるサブセットを有するように定義され得(含まれるフィールドが、通常同一の順序であるが、含まれるフィールドがより少ないので、少なくともいくつかは異なるビット位置を有する)、及び/又は異なって解釈される所与のフィールドを有するように定義され得る。したがって、命令セットアーキテクチャ(ISA)の各命令が、所与の命令フォーマットを使用して(及び、定義される場合、命令フォーマットの命令テンプレートの所与の1つで)表され、演算及びオペランドを指定するためのフィールドを含む。例えば、例示的なADD命令は、特定のオペコードと、そのオペコードを指定するオペコードフィールド及びオペランド(ソース1/デスティネーション及びソース2)を選択するオペランドフィールドを含む命令フォーマットを有し、命令ストリーム内にこのADD命令が出現すると、特定のオペランドを選択するオペランドフィールドに特定の内容を有する。
本明細書で説明される本発明の複数の実施形態が、異なるフォーマットで具現化され得る。さらに、例示的なシステム、アーキテクチャ及びパイプラインが、以下で詳述される。本発明の複数の実施形態が、そのようなシステム、アーキテクチャ、及びパイプライン上で実行され得るが、詳述されたものに限定されない。
命令セットは、1又は複数の命令フォーマットを含み得る。所与の命令フォーマットは、数ある中でも、実行される演算(例えば、オペコード)及びその演算が実行されるオペランド、及び/又は他のデータフィールド(例えば、マスク)を指定する様々なフィールド(例えば、ビット数、ビットの位置)を定義し得る。いくつかの命令フォーマットが、命令テンプレート(又はサブフォーマット)の定義を通じて、さらに分類される。例えば、所与の命令フォーマットの命令テンプレートが、命令フォーマットのフィールドの異なるサブセットを有するように定義され得(含まれるフィールドが、通常同一の順序であるが、含まれるフィールドがより少ないので、少なくともいくつかは異なるビット位置を有する)、及び/又は異なって解釈される所与のフィールドを有するように定義され得る。したがって、ISAの各命令が、所与の命令フォーマットを使用して(及び、定義される場合、命令フォーマットの命令テンプレートの所与の1つで)表され、演算及びオペランドを指定するためのフィールドを含む。例えば、例示的なADD命令は、特定のオペコードと、そのオペコードを指定するオペコードフィールド及びオペランド(ソース1/デスティネーション及びソース2)を選択するオペランドフィールドを含む命令フォーマットを有し、命令ストリーム内にこのADD命令が出現すると、特定のオペランドを選択するオペランドフィールドに特定の内容を有する。アドバンストベクトルエクステンション(AVX)(AVX1及びAVX2)と称され、ベクトルエクステンション(VEX)符号化スキームを使用するSIMD拡張機能のセットが、リリース及び/又は公開されている(例えば、インテル(登録商標)64及びIA−32アーキテクチャソフトウェア開発者マニュアル、2014年9月を参照、及び、インテル(登録商標)アドバンストベクトルエクステンションプログラミングリファレンス、2014年10月を参照)。
例示的な命令フォーマット
例示的な命令フォーマット
本明細書で説明される本発明の複数の実施形態は、異なるフォーマットで具現化され得る。さらに、例示的なシステム、アーキテクチャ、及びパイプラインが、以下で詳述される。本発明の複数の実施形態が、そのようなシステム、アーキテクチャ、及びパイプライン上で実行され得るが、詳述されたものに限定されない。
汎用ベクトル向け命令フォーマット
汎用ベクトル向け命令フォーマット
ベクトル向け命令フォーマットは、ベクトル命令に適した命令フォーマットである(例えば、ベクトル演算に固有の特定のフィールドが存在する)。ベクトル及びスカラ演算の両方がベクトル向け命令フォーマットによってサポートされている複数の実施形態が説明されているが、代替的な複数の実施形態は、ベクトル向け命令フォーマットのベクトル演算のみを使用する。
図12A〜図12Bは、本発明の複数の実施形態による、汎用ベクトル向け命令フォーマット及びその命令テンプレートを示すブロック図である。図7は、本発明の複数の実施形態による、汎用ベクトル向け命令フォーマット及びそのクラスA命令テンプレートを示すブロック図であり、一方で、図8は、本発明の複数の実施形態による、汎用ベクトル向け命令フォーマット及びそのクラスB命令テンプレートを示すブロック図である。具体的には、クラスA及びクラスB命令テンプレートが定義される汎用ベクトル向け命令フォーマット800は、その両方が非メモリアクセス805命令テンプレート及びメモリアクセス820命令テンプレートを含む。ベクトル向け命令フォーマットとの関連で汎用という用語は、いかなる特定の命令セットにも結び付けられていない命令フォーマットを指す。
ベクトル向け命令フォーマットが、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バイトベクトルのオペランド)をサポートし得る。
図7におけるクラスA命令テンプレートは、1)非メモリアクセス805命令テンプレート内に示される、非メモリアクセス、フルラウンド制御タイプ演算810命令テンプレート、及び、非メモリアクセス、データ変換タイプ演算815命令テンプレートと、2)メモリアクセス820命令テンプレート内に示される、メモリアクセス、一次的825命令テンプレート及びメモリアクセス、非一時的830命令テンプレートとを含む。図8におけるクラスB命令テンプレートは、1)非メモリアクセス805命令テンプレート内に示される、非メモリアクセス、書き込みマスク制御、部分ラウンド制御タイプオペレーション812命令テンプレート、及び非メモリアクセス、書き込みマスク制御、VSIZEタイプオペレーション817命令テンプレートと、2)メモリアクセス820命令テンプレート内に示される、メモリアクセス、書き込みマスク制御827命令テンプレートとを含む。
汎用ベクトル向け命令フォーマット800は、図7〜図8に示される順序で以下に列挙される以下のフィールドを含む。
フォーマットフィールド840−このフィールド内の固有値(命令フォーマット識別子の値)は、ベクトル向け命令フォーマットを、したがって、命令ストリームのベクトル向け命令フォーマット内の命令の出現を一意に識別する。このように、このフィールドは、汎用ベクトル向け命令フォーマットのみを有する命令セットに必要ではないという意味では、任意選択的である。
基本演算フィールド842−その内容は、異なる基本演算を区別する。
レジスタインデックスフィールド844−その内容は、直接又はアドレス生成を介して、ソース及びデスティネーションオペランドの位置を、それらがレジスタ内又はメモリ内にあることを指定する。これは、P×Q(例えば、32×512、16×128、32×1024、64×1024)個のレジスタファイルからN個のレジスタを選択する十分なビット数を含む。一実施形態において、Nは3つのソース及び1つのデスティネーションレジスタまでであり得るが、代替的な複数の実施形態は、より多い、又はより少ないソース及びデスティネーションレジスタをサポートし得る(例えば、これらのソースのうちの1つがデスティネーションとしても動作する2つのソースまでをサポートし得、これらのソースのうちの1つがデスティネーションとしても動作する3つのソースまでをサポートし得、2つのソース及び1つのデスティネーションまでをサポートし得る)。
修飾子フィールド846−その内容は、メモリアクセスを指定する汎用ベクトル命令フォーマット内の命令の出現を、そうしないものから区別し、すなわち、非メモリアクセス805命令テンプレートとメモリアクセス820命令テンプレートとを区別する。メモリアクセス演算は、メモリ階層に読み込み及び/又は書き込みを行い(場合によっては、レジスタ内の値を使用してソース及び/又はデスティネーションアドレスを指定する)、一方、非メモリアクセス演算は、これを行わない(例えば、ソース及びデスティネーションはレジスタである)。一実施形態において、このフィールドはまた、メモリアドレス計算を実行する3つの異なる方法の中から選択するが、代替的な複数の実施形態は、メモリアドレス計算を実行するより多い、より少ない、又は異なる方法をサポートし得る。
拡張演算フィールド850−その内容は、基本演算に加えて、様々な異なる演算のうちどの演算が実行されるかを区別する。このフィールドは、コンテキスト固有である。本発明の一実施形態において、このフィールドは、クラスフィールド868、アルファフィールド852、及びベータフィールド854に分割される。拡張演算フィールド850は、共通グループの演算が2,3、又は4の命令ではなく、単一の命令で実行されることを可能にする。
スケールフィールド860−その内容は、メモリアドレス生成(例えば、2scale×インデックス+ベースを使用するアドレス生成)に対するインデックスフィールドの内容をスケーリングすることを可能にさせる。
変位フィールド862A−その内容は、メモリアドレス生成(例えば、2scale×インデックス+ベース+変位を使用するアドレス生成用)の一部として使用される。
変位係数フィールド862B(変位係数フィールド862Bのすぐ上の変位フィールド862Aの並置が、一方又は他方が使用されることを示すことに留意されたい)−その内容が、アドレス生成の一部として使用される。それは、メモリアクセスのサイズ(N)でスケーリングされる変位係数を指定する。−ここで、Nはメモリアクセス(例えば、2scale×インデックス+ベース+スケーリングされた変位を使用するアドレス生成用)内のバイト数である。冗長下位ビットが無視され、よって、有効なアドレスを計算する際に使用される最終的な変位を生成すべく、変位係数フィールドの内容が、メモリオペランドの総サイズ(N)で乗算される。Nの値が、フルオペコードフィールド874(本明細書で後述される)及びデータ操作フィールド854Cに基づいて、ランタイムでプロセッサハードウェアによって判断される。変位フィールド862A及び変位係数フィールド862Bは、それらが非メモリアクセス805命令テンプレートに使用されない、及び/又は異なる複数の実施形態が2つのうちの1つのみを実装してよい、若しくは2つのうちのいずれも実装しなくてよいという意味では任意選択的である。
データ要素幅フィールド864−その内容は、多数のデータ要素幅のうちのどのデータ要素幅が使用されるのかを区別する(いくつかの実施形態では全ての命令に対して、他の複数の実施形態ではいくつかの命令に対してのみ)。このフィールドは、1つのデータ要素幅のみがサポートされ、及び/又は複数のデータ要素幅がオペコードのいくつかの態様を使用してサポートされる場合、不要であるという意味では、任意選択的である。
書き込みマスクフィールド870−その内容は、データ要素位置ごとに、デスティネーションベクトルオペランド内のそのデータ要素位置が基本演算及び拡張演算の結果を反映するか否かを制御する。クラスA命令テンプレートは、マージング−書き込みマスキングをサポートし、一方で、クラスB命令テンプレートは、マージング−書き込みマスク及びゼロ化−書き込みマスキングの両方をサポートする。マージングのとき、ベクトルマスクは、デスティネーション内の要素の任意のセットが(基本演算及び拡張演算によって指定される)任意の演算の実行中に更新から保護されることを可能にし、他の一実施形態では、対応するマスクビットが0を有するデスティネーションの各要素の古い値を保持する。対照的に、ゼロ化のとき、ベクトルマスクは、デスティネーション内の要素の任意のセットが(基本演算及び拡張演算によって指定される)任意の演算の実行中にゼロ化されることを可能にし、一実施形態では、対応するマスクビットが0値を有するときに、デスティネーションの要素が0に設定される。この機能のサブセットは、実行されている演算のベクトル長(すなわち、修正されている要素の、最初から最後までの範囲)を制御する能力である。しかしながら、修正される要素が連続している必要はない。したがって、書き込みマスクフィールド870は、ロード、ストア、算術、論理等を含む部分的なベクトル演算を可能にする。書き込みマスクフィールド870の内容が、多数の書き込みマスクレジスタのうち、使用されるべき書き込みマスクを含む1つの書き込みマスクレジスタを選択する(したがって、書き込みマスクフィールド870の内容は、実行されるマスキングを間接的に識別する)本発明の複数の実施形態が説明されるが、代替的な複数の実施形態は、これに代えて又はこれに加えて、マスク書き込みフィールド870の内容が、実行されるマスキングを直接指定することを可能にする。
即値フィールド872−その内容は、即値の指定を可能にさせる。このフィールドは、即値をサポートしない汎用ベクトル向けフォーマットの実装に存在せず、即値を使用しない命令に存在しないという意味では任意選択的である。
クラスフィールド868−その内容は、異なるクラスの命令を区別する。図7〜図8を参照して、このフィールドの内容は、クラスA命令とクラスB命令との間で選択する。図7〜図8において、角が丸い四角形は、固有値がフィールドに存在することを示すのに使用される(例えば、図7〜図8中、クラスフィールド868に対し、それぞれクラスA868A及びクラスB868B)。
クラスAの命令テンプレート
クラスAの命令テンプレート
クラスAの非メモリアクセス805命令テンプレートの場合、アルファフィールド852がRSフィールド852Aとして解釈され、その内容は、異なる拡張演算タイプのうちのどの拡張演算タイプが実行されるかを区別し(例えば、ラウンド8852A.1及びデータ変換852A.2が非メモリアクセス、ラウンドタイプ演算810及び非メモリアクセス、データ変換タイプ演算815命令テンプレートに対してそれぞれ指定される)、その一方で、ベータフィールド854は、指定されたタイプの演算のどれが実行されるかを区別する。非メモリアクセス805命令テンプレートにおいて、スケールフィールド860、変位フィールド862A、及び変位スケールフィールド862Bが存在しない。
非メモリアクセス命令テンプレート−フルラウンド制御タイプ演算
非メモリアクセス命令テンプレート−フルラウンド制御タイプ演算
非メモリアクセスフルラウンド制御タイプ演算810命令テンプレートにおいて、ベータフィールド854がラウンド制御フィールド854Aとして解釈され、その内容が静的ラウンドを提供する。説明される本発明の複数の実施形態において、ラウンド制御フィールド854Aは、全浮動小数点例外抑制(SAE)フィールド856及びラウンド演算制御フィールド858を含むが、代替的な複数の実施形態は、これらの概念の両方をサポートし得、同一フィールドに符号化し得、又はこれらの概念/フィールドの一方又は他方のみを有してよい(例えば、ラウンド演算制御フィールド858のみを有し得る)。
SAEフィールド856−その内容は、例外イベント報告を無効にするか否かを区別する。SAEフィールド856の内容が、抑制が有効であることを示すとき、所与の命令は、いかなる種類の浮動小数点例外フラグを報告せず、いかなる浮動小数点例外ハンドラを立ち上げない。
ラウンド演算制御フィールド858−その内容は、ラウンド演算のグループのうちのどのラウンド演算を実行すべきか(例えば、切り上げ、切り捨て、0へのラウンド、及び最近接へのラウンド)を区別する。したがって、ラウンド演算制御フィールド858は、命令ごとにラウンドモードを変更することを可能にさせる。プロセッサがラウンドモードを指定するための制御レジスタを含む本発明の一実施形態において、ラウンド演算制御フィールド850の内容は、そのレジスタ値をオーバーライドする。
非メモリアクセス命令テンプレート−データ変換タイプ演算
非メモリアクセス命令テンプレート−データ変換タイプ演算
非メモリアクセスデータ変換タイプ演算815命令テンプレートにおいて、ベータフィールド854がデータ変換フィールド854Bとして解釈され、その内容は、多数のデータ変換のうちのどのデータ変換が実行されるか(例えば、非データ変換、スウィズル、ブロードキャスト)を区別する。
クラスAのメモリアクセス820命令テンプレートの場合、アルファフィールド852がエビクションヒントフィールド852Bとして解釈され、その内容は、エビクションヒントのうちのどのエビクションヒントが使用されるべきかを区別し(図7では、一時的852B.1及び非一時的852B.2は、それぞれ、メモリアクセス、一次的825命令テンプレート、及びメモリアクセス、非一時的830命令テンプレートについて指定される)、一方で、ベータフィールド854がデータ操作フィールド854Cとして解釈され、その内容は、多数のデータ操作演算(プリミティブとしても知られる)のうちのどのデータ操作演算が実行されるべきか(例えば、非操作、ブロードキャスト、ソースのアップコンバージョン、デスティネーションのダウンコンバージョン)を区別する。メモリアクセス820命令テンプレートは、スケールフィールド860を含み、任意選択的に変位フィールド862A又は変位スケールフィールド862Bを含む。
ベクトルメモリ命令は、変換サポートを用いて、メモリからのベクトルロード及びメモリへのベクトルストアを実行する。通常のベクトル命令と同様に、ベクトルメモリ命令は、データ要素ごとの方法でメモリから/メモリにデータを転送し、ここで、実際に転送される要素が、書き込みマスクとして選択されるベクトルマスクの内容によって指示される。
メモリアクセス命令テンプレート−一時的
メモリアクセス命令テンプレート−一時的
一時的データは、キャッシュから利益を受けるのに十分早く再使用される可能性が高いデータである。しかしながら、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含む、異なる方法でそれを実装し得る。
メモリアクセス命令テンプレート−非一時的
メモリアクセス命令テンプレート−非一時的
非一時的データは、第1のレベルキャッシュでのキャッシュから利益を受けるのに十分早く再使用される可能性が低いデータであり、エビクションの優先権が与えられるべきである。しかしながら、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含む、異なる方法でそれを実装し得る。
クラスBの命令テンプレート
クラスBの命令テンプレート
クラスBの命令テンプレートの場合、アルファフィールド852が、書き込みマスク制御(Z)フィールド852Cとして解釈され、その内容は、書き込みマスクフィールド870によって制御される書き込みマスキングがマージングするべきかゼロ化すべきかを区別する。
クラスBの非メモリアクセス805命令テンプレートの場合、ベータフィールド854の一部がRLフィールド857Aとして解釈され、その内容は、異なる拡張演算タイプのうちのどの拡張演算タイプが実行されるかを区別し(例えば、ラウンド857A.1及びベクトル長(VSIZE)857A.2が非メモリアクセス、書き込みマスク制御、部分ラウンド制御タイプオペレーション812命令テンプレート、及び非メモリアクセス、書き込みマスク制御、VSIZEタイプオペレーション817命令テンプレートに対してそれぞれ指定される)、その一方で、ベータフィールド854の残りが、指定されたタイプの演算のどれが実行されるかを区別する。非メモリアクセス805命令テンプレートにおいて、スケールフィールド860、変位フィールド862A、及び変位スケールフィールド862Bが存在しない。
非メモリアクセス、書き込みマスク制御、部分ラウンド制御タイプオペレーション810命令テンプレートにおいて、ベータフィールド854の残りは、ラウンド演算フィールド859Aとして解釈され、例外イベント報告が無効にされる(所与の命令は、いかなる種類の浮動小数点例外フラグを報告せず、いかなる浮動小数点例外ハンドラも立ち上げない)。
ラウンド演算制御フィールド859A−ラウンド演算制御フィールド858と同じように、その内容は、ラウンド演算のグループうちのどのラウンド演算を実行すべきか(例えば、切り上げ、切り捨て、0へのラウンド、及び最近接へのラウンド)を区別する。したがって、ラウンド演算制御フィールド859Aは、命令ごとにラウンドモードを変更することを可能にさせる。プロセッサがラウンドモードを指定するための制御レジスタを含む本発明の一実施形態において、ラウンド演算制御フィールド850の内容は、そのレジスタ値をオーバーライドする。
非メモリアクセス、書き込みマスク制御、VSIZEタイプオペレーション817命令テンプレートにおいて、ベータフィールド854の残りがベクトル長フィールド859Bとして解釈され、その内容は、多数のデータベクトル長のうちのどのデータベクトル長が実行されるべきか(例えば、128、256、又は512バイト)を区別する。
クラスBのメモリアクセス820命令テンプレートの場合、ベータフィールド854の一部がブロードキャストフィールド857Bとして解釈され、その内容は、ブロードキャストタイプデータ操作演算が実行されるべきか否かを区別し、一方で、ベータフィールド854の残りが、ベクトル長フィールド859Bとして解釈される。メモリアクセス820命令テンプレートは、スケールフィールド860を含み、任意選択的に変位フィールド862A又は変位スケールフィールド862Bを含む。
汎用ベクトル向け命令フォーマット800に関して、フォーマットフィールド840、基本演算フィールド842、及びデータ要素幅フィールド864を含むフルオペコードフィールド874が示される。フルオペコードフィールド874がこれらのフィールドの全てを含む一実施形態が示されるが、それらの全てをサポートしない複数の実施形態では、フルオペコードフィールド874は、これらのフィールドの全より少ないフィールドを含む。フルオペコードフィールド874は、演算コード(オペコード)を提供する。
拡張演算フィールド850、データ要素幅フィールド864、及び書き込みマスクフィールド870は、これらの機能が汎用ベクトル向け命令フォーマットで命令ごとに指定されることを可能にする。
書き込みマスクフィールド及びデータ要素幅フィールドの組み合わせは、マスクが異なるデータ要素幅に基づいて適用されることを可能にするという点で、分類された命令を作成する。
クラスA及びクラスB内で発見される様々な命令テンプレートが異な状況で有益である。本発明のいくつかの実施形態において、プロセッサ内の異なるプロセッサ又は異なるコアは、クラスAのみ、クラスBのみ、又は両クラスをサポートし得る。例えば、汎用コンピューティング向けの高性能汎用アウトオブオーダコアは、クラスBのみをサポートし得、主にグラフィック及び/又は科学(スループット)コンピューティング向けのコアは、クラスAのみをサポートし得、両方向けのコアは、両方をサポートし得る(当然ながら、両クラスからのテンプレート及び命令のいくつかの混合を有するが、両クラスからの全てのテンプレート及び命令を有さないコアは、本発明の範囲内である)。また、単一のプロセッサは、複数のコアを含み得、その全てが同一クラスをサポートする、又はその中の異なるコアが異なるクラスをサポートする。例えば、別個のグラフィックコア及び汎用コアを有するプロセッサにおいて、主にグラフィック及び/又は科学コンピューティング向けのグラフィックコアのうちの1つのコアが、クラスAのみをサポートし得、一方で、1又は複数の汎用コアが、クラスBのみをサポートする汎用コンピューティング向けのアウトオブオーダ実行及びレジスタリネームを有する高性能汎用コアであり得る。別個のグラフィックコアを有さない他のプロセッサは、クラスA及びクラスBの両方をサポートするもう1つの汎用インオーダ又はアウトオブオーダコアを含み得る。当然ながら、本発明の異なる複数の実施形態において、1つのクラスからの機能はまた、他クラスで実装され得る。高水準言語で書き込まれたプログラムは、1)実行用ターゲットプロセッサによってサポートされるクラスの命令のみを有する形式、又は、2)全てのクラスの命令の異なる組み合わせを使用して書き込まれた代替のルーチンを有し、コードを現在実行しているプロセッサによってサポートされる命令に基づいて実行するルーチンを選択する制御フローコードを有する形式を含む様々な異なる実行可能な形式に変換される(例えば、ジャストインタイムでコンパイルされ又は静的コンパイルされる)。
例示的な特定ベクトル向け命令フォーマット
例示的な特定ベクトル向け命令フォーマット
図9Aは、本発明の複数の実施形態による、例示的な特定ベクトル向け命令フォーマットを示すブロック図である。図9Aは、フィールドの位置、サイズ、解釈、及び順序、並びにそれらのフィールドのうちのいくつかのの値を指定するという意味では、特有である特定ベクトル向け命令フォーマット900を示す。特定ベクトル向け命令フォーマット900が、x86命令セットを拡張するのに使用され得、したがって、いくつかのフィールドは、既存のx86命令セット及びその拡張(例えば、AVX)で使用されるフィールドと類似又は同一である。このフォーマットは、拡張を有する既存のx86命令セットのプレフィクス符号化フィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、及び即値フィールドと一致したままである。図8のフィールドが図9Aのどのフィールドにマッピングされるかを示す。
本発明の複数の実施形態が例示目的で汎用ベクトル向け命令フォーマット800との関連で特定ベクトル向け命令フォーマット900を参照して説明されるが、本発明は、特許請求される場合を除いて、特定ベクトル向け命令フォーマット900に限定されないことが理解されるべきである。例えば、汎用ベクトル向け命令フォーマット800は、様々なフィールドに対して様々な可能なサイズを企図するが、特定ベクトル向け命令フォーマット900が特定のサイズおフィールドを有するものとして示される。具体的な例として、データ要素幅フィールド864が特定ベクトル向け命令フォーマット900内の1つビットフィールドとして示されるが、本発明はそのように限定されない(すなわち、汎用ベクトル向け命令フォーマット800は、他のサイズのデータ要素幅フィールド864を企図する)。
汎用ベクトル向け命令フォーマット800は、図9Aに示される順序で以下に列挙される以下のフィールドを含む。
EVEXプレフィクス(バイト0−3)902−4バイト形式で符号化される。
フォーマットフィールド840(EVEXバイト0、ビット[7:0])−第1のバイト(EVEXバイト0)はフォーマットフィールド840であり、それは0x62(本発明の一実施形態において、ベクトル向け命令フォーマットを区別するのに使用される一意の値)を含む。
第2−第4バイト(EVEXバイト1−3)は、特定の機能を提供する多数のビットフィールドを含む。
REXフィールド905(EVEXバイト1、ビット[7−5]−EVEX.Rビットフィールド(EVEXバイト1、ビット[7]−R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]−X)、及び857BEXバイト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'フィールド810−これは、REX'フィールド810の第1の部分であり、拡張された32レジスタセットの上位16又は下位16のいずれかを符号化するのに使用されるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]−R')である。本発明の一実施形態において、このビットは、下記に示される他のビットと共に、そのリアルオペコードバイトが62であるBOUND命令から(周知のx86 32ビットモードで)区別するためにビット反転フォーマットで格納されるが、MOD R/Mフィールド(以下で説明される)では、MODフィールド内の11の値を受理しない。本発明の代替的な複数の実施形態は、これ及び以下の他に示されるビットを反転フォーマットで格納しない。1の値が、下位16個のレジスタを符号化するのに使用される。言い換えれば、R'Rrrrは、他のフィールドからのEVEX.R'、EVEX.R、及び他のRRRを結合することによって形成される。
オペコードマップフィールド915(EVEXバイト1、ビット[3:0]−mmmm)−その内容は、暗示される先行オペコードバイト(0F、0F38、又は0F3)を符号化する。
データ要素幅フィールド864(EVEXバイト2、ビット[7]−W)−表記EVEX.Wによって表される。EVEX.Wは、データタイプ(32ビットデータ要素又は64ビットデータ要素のいずれか)の粒度(サイズ)を定義するのに使用される。
EVEX.vvvv920(EVEXバイト2、ビット[6:3]−vvvv)−EVEX.vvvvの役割は、以下のものを含み得る。1)EVEX.vvvvは、反転(1の補数)形式で指定された第1のソースレジスタオペランドを符号化し、2又はこれより多いソースオペランドを有する命令に有効である。2)EVEX.vvvvは、特定のベクトルシフトに対して1の補数形式で指定される、デスティネーションレジスタオペランドを符号化する。3)EVEX.vvvvはいかなるオペランドも符号化せず、フィールドは予約され、1111bを含むべきである。したがって、EVEX.vvvvフィールド920は、反転(1の補数)形式で格納された第1のソースレジスタ指示子の下位4ビットを符号化する。命令に応じて、追加の異なるEVEXビットフィールドが、指示子サイズを32レジスタに拡張するのに使用される。
EVEX.U868クラスフィールド(EVEXバイト2、ビット[2]−U)−EVEX.U=0である場合、それはクラスA又はEVEX.U0を示し、EVEX.U=1である場合、それはクラスB又はEVEX.U1を示す。
プレフィクス符号化フィールド925(EVEXバイト2、ビット[1:0]−pp)−基本演算フィールドに追加ビットを提供する。EVEXプレフィクスフォーマットでレガシSSE命令にサポートを提供することに加えて、これはSIMDプレフィクスを圧縮するという利点も有する(SIMDプレフィクスを表すために1バイトを要求するのではなく、EVEXプレフィクスは2ビットのみを要求する)。一実施形態において、レガシフォーマットとEVEXプレフィクスフォーマットの両方でSIMDプレフィクス(66H、F2H、F3H)を使用するレガシSSE命令をサポートするために、これらのレガシSIMDプレフィクスはSIMDプレフィクス符号化フィールドに符号化され、ランタイムで、復号器のPLAに提供されるより前に、レガシSIMDプレフィクスに拡張される(そのため、PLAは、修正なしにこれらのレガシ命令のレガシフォーマット及びEVEXフォーマットの両方を実行できる)。より新しい命令が、オペコード拡張としてEVEXプレフィクス符号化フィールドの内容を直接使用できるが、特定の実施形態は、整合性のために同様方法で拡張するが、これらのレガシSIMDプレフィクスによって異なる意味が指定されることを可能にさせる。代替的な複数の実施形態は、2ビットのSIMDプレフィクス符号化をサポートするようPLAを再設計し得、したがって、拡張を要求しない。
アルファフィールド852(EVEXバイト3、ビット[7]−EH、EVEX.EH、EVEX.rs、EVEX.RL、EVEX.書き込みマスク制御、及びEVEX.Nとしても知られ、αでも示されている)−前述されたように、このフィールドはコンテキスト固有である。
ベータフィールド854(EVEXバイト3、ビット[6:4]−SSS、EVEX.s2−0、EVEX.r2−0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られ、βββでも示されている)−前述されたように、このフィールドはコンテキスト固有である。
REX'フィールド810−これは、REX'フィールドの残りであり、拡張された32個のレジスタセットの上位16又は下位16のいずれかを符号化するのに使用され得るEVEX.V'ビットフィールド(EVEXバイト3、ビット[3]−V')である。このビットは、ビット反転フォーマットで格納される。1の値が、下位16個のレジスタを符号化するのに使用される。言い換えれば、V'VVVVは、EVEX.V'及びEVEX.vvvvを結合することによって形成される。
書き込みマスクフィールド870(EVEXバイト3、ビット[2:0]−kkk)−その内容は、前述されたように書き込みマスクレジスタ内のレジスタのインデックスを指定する。本発明の一実施形態において、固有値EVEX.kkk=000は、特定の命令に対して書き込みマスクが使用されないことを暗示する特別な動作を有する(これは、全てのものにハードワイヤリングされた書き込みマスクの使用を含む様々な方法又はマスキングハードウェアをバイパスするハードウェアで実装され得る)。
リアルオペコードフィールド930(バイト4)は、オペコードバイトとしても知られる。オペコードの一部は、このフィールドで指定される。
MOD R/Mフィールド940(バイト5)は、MODフィールド942、Regフィールド944、及びR/Mフィールド946を含む。前述されたように、MODフィールド942の内容は、メモリアクセス演算と非メモリアクセス演算との間を区別する。Regフィールド944の役割は、デスティネーションレジスタオペランド若しくはソースレジスタオペランドのいずれかを符号化する、又は、オペコード拡張として処理され、いずれの命令オペランドも符号化するのに使用されない、という2つの状況に要約され得る。R/Mフィールド946の役割は、メモリアドレスを参照する命令オペランドを符号化すること、又はデスティネーションレジスタオペランド若しくはソースレジスタオペランドのいずれかを符号化することを含み得る。
スケール、インデックス、ベース(SIB)バイト(バイト6)−前述されたように、スケールフィールド850の内容は、メモリアドレス生成のために使用される。SIB.xxx954及びSIB.bbb956−これらのフィールドの内容は、レジスタインデックスXxxx及びBbbbに関して以前に参照されている。
変位フィールド862A(バイト7−10)−MODフィールド942が10を含むとき、バイト7−10は変位フィールド862Aであり、それは、レガシ32ビット変位(disp32)と同じように機能し、バイト粒度で機能する。
変位係数フィールド862B(バイト7)−MODフィールド942が01を含むとき、バイト7は変位係数フィールド862Bである。このフィールド位置は、レガシx86命令セット8ビット変位(disp8)の位置と同一であり、これは、バイト粒度で機能する。disp8は符号拡張されているので、−128バイトオフセットと127バイトオフセットとの間のみでアドレス指定され得る。64バイトのキャッシュラインに関して、disp8は、4つの本当に有用な値−128、−64、0及び64のみに設定され得る8ビットを使用する。より広い範囲がしばしば必要とされるので、disp32が使用される。しかしながら、disp32は、4バイトを要求するdisp8及びdisp32と対照的に、変位係数フィールド862Bがdisp8の再解釈であり、変位係数フィールド862Bを使用するとき、実際の変位が、メモリオペランドアクセスのサイズ(N)で乗算された変位係数フィールドの内容によって判断される。このタイプの変位は、disp8×Nと称される。これは、平均命令長(変位に使用されるが、はるかに広い範囲を有する単一のバイト)を減少させる。そのような圧縮された変位は、有効な変位がメモリアクセスの粒度の倍数であるという想定に基づいており、よって、アドレスオフセットの冗長下位ビットは符号化される必要がない。言い換えれば、変位係数フィールド862Bは、レガシx86命令セットの8ビット変位を置換する。したがって、変位係数フィールド862Bは、disp8がdisp8×Nにオーバーロードされる点のみを除いて、x86命令セットの8ビット変位と同じ方法で符号化される(そのため、ModRM/SIB符号化ルールに変更されない)。言い換えれば、符号化ルール又は符号化長に変更は存在しないが、(バイトごとのアドレスオフセットを取得するために、メモリオペランドのサイズによって変位をスケーリングする必要がある)ハードウェアによる変位値の解釈にのみ変更が存在する。即値フィールド872は、前述されたように演算する。
フルオペコードフィールド
フルオペコードフィールド
図9Bは、本発明の一実施形態による、フルオペコードフィールド874を構成する特定ベクトル向け命令フォーマット900のフィールドを示すブロック図である。具体的には、フルオペコードフィールド874は、フォーマットフィールド840、基本演算フィールド842、及びデータ要素幅(W)フィールド864を含む。基本演算フィールド842は、プレフィクス符号化フィールド925、オペコードマップフィールド915、及びリアルオペコードフィールド930を含む。 レジスタインデックスフィールド
図9Cは、本発明の一実施形態による、レジスタインデックスフィールド844を構成する特定ベクトル向け命令フォーマット900のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド844は、REXフィールド905、REX'フィールド910、MODR/M.regフィールド944、MODR/M.r/Mフィールド946、VVVVフィールド920、xxxフィールド954、及びbbbフィールド956を含む。
拡張演算フィールド
拡張演算フィールド
図9Dは、本発明の一実施形態による、拡張演算フィールド850を構成する特定ベクトル向け命令フォーマット900のフィールドを示すブロック図である。クラス(U)フィールド868が0を含むとき、それはEVEX.U0(クラスA868A)を表し、それが1を含むとき、それは、EVEX.U1(クラスB868B)を表す。U=0であり、且つ、MODフィールド942が11を含む(非メモリアクセス演算を意味する)とき、アルファフィールド852(EVEXバイト3、ビット[7]−EH)が、RSフィールド852Aとして解釈される。RSフィールド852Aが1を含む(ラウンド852A.1)とき、ベータフィールド854(EVEXバイト3、ビット[6:4]−SSS)が、ラウンド制御フィールド854Aとして解釈される。ラウンド制御フィールド854Aは、1つビットのSAEフィールド856及び2ビットのラウンド演算フィールド858を含む。RSフィールド852Aが0を含む(データ変換852A.2)とき、ベータフィールド854(EVEXバイト3、ビット[6:4]−SSS)が、3ビットのデータ変換フィールド854Bとして解釈される。U=0であり、且つ、MODフィールド942が00、01、又は10を含む(メモリアクセス演算を意味する)とき、アルファフィールド852(EVEXバイト3、ビット[7]−EH)がエビクションヒント(EH)フィールド852Bとして解釈され、ベータフィールド854(EVEXバイト3、ビット[6:4]−SSS)が3ビットのデータ操作フィールド854Cとして解釈される。
U=1であるときアルファフィールド852(EVEXバイト3、ビット[7]−EH)が、書き込みマスク制御(Z)フィールド852Cとして解釈される。U=1であり、且つ、MODフィールド942が11を含む(非メモリアクセス演算を意味する)とき、ベータフィールド854の一部(EVEXバイト3、ビット[4]−S0)がRLフィールド857Aとして解釈され、それが1を含む(ラウンド857A.1)とき、ベータフィールド854の残り(EVEXバイト3、ビット[6−5]−S2−1)がラウンド演算フィールド859Aとして解釈され、一方で、RLフィールド857Aが0を含む(VSIZE857.A2)とき、ベータフィールド854の残り(EVEXバイト3、ビット[6−5]−S2−1)がベクトル長フィールド859B(EVEXバイト3、ビット[6−5]−L1−0)として解釈される。U=1であり、且つ、MODフィールド942が00、01、又は10を含む(メモリアクセス演算を意味する)とき、ベータフィールド854(EVEXバイト3、ビット[6:4]−SSS)がベクトル長フィールド859B(EVEXバイト3、ビット[6−5]−L1−0)及びブロードキャストフィールド857B(EVEXバイト3、ビット[4]−B)として解釈される。
例示的なレジスタアーキテクチャ
例示的なレジスタアーキテクチャ
図10は、本発明の一実施形態による、レジスタアーキテクチャ1000のブロック図である。示される一実施形態において、58ビット幅である32個のベクトルレジスタ1010が存在し、これらのレジスタが、zmm0〜zmm31として参照される。下位16個のzmmレジスタの下位256ビットが、レジスタymm0〜16に重ね合わされる。下位16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)が、レジスタxmm0〜15に重ね合わされる。特定ベクトル向け命令フォーマット1300は、以下の表に示されるように、これらの重ね合わされたレジスタファイルで演算する。
言い換えれば、ベクトル長フィールド859Bは、最大長と1又は複数の他のより短い長さとの間で選択し、そのようなより短い長さの各々は先行する長さの半分の長さであり、ベクトル長フィールド859Bを有さない命令テンプレートが、最大ベクトル長で演算する。さらに、一実施形態において、特定ベクトル向け命令フォーマット1300のクラスB命令テンプレートが、パックド又はスカラ単一/倍精度浮動小数点データ及びパックド又はスカラ整数データで演算する。スカラ演算は、zmm/ymm/xmmレジスタで最下位のデータ要素位置で実行される演算であり、より上位のデータ要素位置が、実施形態に応じて、命令以前のままで残されるか、又はゼロ化されるかのいずれかである。
書き込みマスクレジスタ1015−示される一実施形態において、各64ビットサイズの8個の書き込みマスクレジスタ(k0からk7)が存在する。代替的な実施形態において、書き込みマスクレジスタ1015は、16ビットサイズである。前述されたように、本発明の一実施形態において、ベクトルマスクレジスタk0は、書き込みマスクとして使用されることができず、通常k0を示す符号化が書き込みマスクに使用されるとき、それは、0xFFFFのハードワイヤリングされた書き込みマスクを選択し、その命令についての書き込みマスキングを実質的に無効にする。
汎用レジスタ1025−示される一実施形態において、メモリオペランドをアドレス指定するために既存のx86アドレス指定モードと共に使用される16個の64ビット汎用レジスタが存在する。これらのレジスタが、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP及びR8からR15の名称で参照される。
MMXパックド整数フラットレジスタファイル1050がエイリアスされるスカラ浮動小数点スタックレジスタファイル(x87スタック)1045−示される一実施形態において、x87スタックは、x87命令セット拡張を使用する32/64/80ビット浮動小数点データにスカラ浮動小数点演算を実行するのに使用される8要素スタックであり、一方で、MMXレジスタが、64ビットパックド整数データに演算を実行し、MMXとxmmレジスタとの間で実行されるいくつかの演算に対するオペランドを保持する使用される。
本発明の代替的な複数の実施形態は、より広い又はより狭いレジスタを使用し得る。さらに、本発明の代替的な複数の実施形態は、より多い、より少ない、又は異なるレジスタファイル及びレジスタを使用し得る。
例示的なコアアーキテクチャ、プロセッサ、及びコンピュータアーキテクチャ
例示的なコアアーキテクチャ、プロセッサ、及びコンピュータアーキテクチャ
プロセッサコアが、異なる方法で、異なる目的のために、異なるプロセッサで実装され得る。例えば、そのようなコアの実装は、1)汎用コンピューティング向けの汎用インオーダコア、2)汎用コンピューティング向けの高性能汎用アウトオブオーダコア、3)主に、グラフィック及び/又は科学(スループット)コンピューティング向けの専用コアを含み得る。異なるプロセッサの実装は、1)汎用コンピューティング向けの1又は複数の汎用インオーダコア、及び/又は汎用コンピューティング向けの1又は複数の汎用アウトオブオーダコアを含むCPU、2)主にグラフィック及び/又は科学(スループット)向けの1又は複数の専用コアを含むコプロセッサを含み得る。そのような異なるプロセッサは、異なるコンピュータシステムアーキテクチャをもたらし、これは、1)CPUとは別個のチップ上のコプロセッサ、2)CPUと同一のパッケージ内の別個のダイ上のコプロセッサ、3)CPUと同一のダイ上のコプロセッサ(この場合、そのようなコプロセッサは、場合によっては、統合グラフィック及び/又は科学(スループット)ロジック等の専用ロジック、又は専用コアと称される)、4)同一のダイ上に、説明されたCPU(場合によっては、アプリケーションコア又はアプリケーションプロセッサと称される)と、上述されたコプロセッサと、追加機能とを含み得るシステムオンチップを含み得る。例示的なコアアーキテクチャが次に説明され、例示的なプロセッサ及びコンピュータアーキテクチャの説明が続く。
例示的なコアアーキテクチャ
インオーダ及びアウトオブオーダコアブロック図
例示的なコアアーキテクチャ
インオーダ及びアウトオブオーダコアブロック図
図11Aは、本発明の複数の実施形態による、例示的なインオーダパイプライン及び例示的なレジスタリネーム、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図11Bは、本発明の複数の実施形態による、プロセッサに含まれる、例示的な実施形態のインオーダアーキテクチャコア及び例示的なレジスタリネーム、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。図11A〜図11Bの実線のボックスは、インオーダパイプライン及びインオーダコアを示し、一方で、破線のボックスのオプションの追加は、レジスタリネーム、アウトオブオーダ発行/実行パイプライン、及びコアを示す。インオーダの態様がアウトオブオーダの態様のサブセットであると仮定して、アウトオブオーダの態様が説明される。
図11Aにおいて、プロセッサパイプライン1100は、フェッチステージ1102、長さ復号ステージ1104、復号ステージ1106、割り当てステージ1108、リネームステージ1110、スケジューリング(ディスパッチ又は発行としても知られている)ステージ1512、レジスタ読み込み/メモリ読み込みステージ1114、実行ステージ1112、ライトバック/メモリ書き込みステージ1118、例外処理ステージ1122、及びコミットステージ1124を含む。
図11Bは、実行エンジンユニット1150に連結されるフロントエンドユニット1130を含むプロセッサコア1190を示し、両方がメモリユニット1170に連結される。コア1190は、縮小命令セットコンピューティング(RISC)コア、復号命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、又は、ハイブリッド若しくは代替的なコアタイプであり得る。さらに他のオプションとして、コア1190は、例えば、ネットワーク若しくは通信コア、圧縮エンジン、コプロセッサコア、汎用計算グラフィック処理ユニット(GPGPU)コア、グラフィックコア、又は同様のもののような専用コアであり得る。
フロントエンドユニット1130は命令キャッシュユニット1134に連結される分岐予測ユニット1132を含み、命令キャッシュユニット1134は命令トランスレーションルックアサイドバッファ(TLB)1136に連結され、TLB1136は命令フェッチユニット1138に連結され、命令フェッチユニット1138は復号ユニット1140に連結される。復号ユニット1140(又は復号器)は、命令を復号し得、1又は複数のマイクロ演算、マイクロコードエントリポイント、マイクロ命令、他の命令、又は他の制御信号を出力として生成し得、これらは、元の命令から復号され、又は別の方法で元の命令を反映し、又は元の命令から導出される。復号ユニット1140は、様々な異なるメカニズムを使用して実装され得る。適切なメカニズムの例は、これに限定されないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリーメモリ(ROM)等を含む。一実施形態において、コア1190は、特定のマクロ命令用のマイクロコードを(例えば、復号ユニット1140内に、又はそうでなければ、フロントエンドユニット1130内に)格納するマイクロコードROM又は他の媒体を含む。復号ユニット1140が、実行エンジンユニット1150内のリネーム/アロケータユニット1152に連結される。
実行エンジンユニット1150は、リタイアメントユニット1154及び1又は複数のスケジューラユニット1156のセットに連結されるリネーム/アロケータユニット1152を含む。スケジューラユニット1156は、予約ステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット1156が、物理レジスタファイルユニット1158に連結される。物理レジスタファイルユニット1158のそれぞれは、1又は複数の物理レジスタファイルを表し、それらのうちの異なる1つ1つは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行される次の命令のアドレスである命令ポインタ)等のような、1又は複数の異なるデータタイプを格納する。一実施形態において、物理レジスタファイルユニット1158は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、及びスカラレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供し得る。物理レジスタファイルユニット1158は、レジスタリネーム及びアウトオブオーダ実行が(例えば、リオーダバッファ及びリタイアメントレジスタファイルを使用すること、将来ファイル、履歴バッファ、及びリタイアメントレジスタファイルを使用すること、レジスタマッピング及びレジスタのプールを使用すること等で)実装され得る様々な方法を示すために、リタイアメントユニット1154によって重ね合わされる。リタイアメントユニット1154及び物理レジスタファイルユニット1158は、実行クラスタ1160に連結される。実行クラスタ1160は、1又は複数の実行ユニット1162のセット及び1又は複数のメモリアクセスユニット1164のセットを含む。実行ユニット1162は、様々な演算(例えば、シフト、加算、減算、乗算)を様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に実行し得る。いくつかの実施形態は、特定の機能又は機能のセットに専用の多数の実行ユニットを含み得るが、他の複数の実施形態は、1つのみの実行ユニット又は全てが全ての機能を実行する複数の実行ユニットを含み得る。スケジューラユニット1156、物理レジスタファイルユニット1158、及び実行クラスタ1160は、特定の実施形態が特定のタイプのデータ/演算のための別個のパイプライン(例えば、スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、及び/又は各々がそれ自身のスケジューラユニット、物理レジスタファイルユニット、及び/又は実行クラスタを有するメモリアクセスパイプライン−別個のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット1164を有する特定の実施形態が実装される)を作成するので、場合によっては複数であるように示されている。 別個のパイプラインが使用される場合、これらのパイプラインの1又は複数はアウトオブオーダ発行/実行であり得、残りがインオーダであり得ることも理解されるべきである。
メモリアクセスユニット1164のセットはメモリユニット1170に連結され、メモリユニット1170は、レベル2(L2)キャッシュユニット1176に連結されたデータキャッシュユニット1174に連結されたデータTLBユニット1172を含む。1つの例示的な実施形態において、メモリアクセスユニット1164は、ロードユニットと、ストアアドレスユニットと、ストアデータユニットとを含み得、これらのそれぞれが、メモリユニット1170内のデータTLBユニット1172に連結される。命令キャッシュユニット1134は、メモリユニット1170内のレベル2(L2)キャッシュユニット1176にさらに連結される。L2キャッシュユニット1176は、1又は複数の他のレベルのキャッシュに連結され、最終的にはメインメモリに連結される。
例として、例示的なレジスタリネーム、アウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプライン1100を実装し得る。1)命令フェッチ1138は、フェッチステージ1102及び長さ復号ステージ1104を実行する。2)復号ユニット1140は、復号ステージ1106を実行する。3)リネーム/アロケータユニット1152は、割り当てステージ1108及びリネームステージ1110を実行する。4)スケジューラユニットは、スケジューリングステージ1512を実行する。5)物理レジスタファイルユニット1158及びメモリユニット1170は、レジスタ読み込み/メモリ読み込みステージ1114を実行し、実行クラスタ1160は、実行ステージ1112を実行する。6)メモリユニット1170及び物理レジスタファイルユニット1158は、ライトバック/メモリ書き込みステージ1118を実行する。7)様々なユニットが、例外処理ステージ1122に関与し得る。8)リタイアメントユニット1154及び物理レジスタファイルユニット1158は、コミットステージ1124を実行する。
コア1190は、本明細書で説明された命令を含む、1又は複数の命令セット(例えば、(より新しいバージョンで追加された、いくつかの拡張を有する)x86命令セット、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARM Holdingsの(NEON等の任意選択的な追加拡張を有する)ARM命令セット)をサポートし得る。一実施形態において、コア1190は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションによって使用される演算がパックドデータを使用して実行されることを可能にさせる。
コアは、マルチスレッディング(2又はこれより多くの並列セットの演算又はスレッドの実行)をサポートし得、タイムスライスマルチスレッディング、(単一物理コアが、物理コアが同時にマルチスレッディングしているスレッドのそれぞれに論理コアを提供する)同時マルチスレッディング、又はそれらの組み合わせ(例えば、インテル(登録商標)ハイパースレッディングテクノロジーにおけるような、タイムスライスフェッチ及び復号並びにその後の同時マルチスレッディング)を含む様々な方法でサポートし得ることが理解されるべきである。
レジスタリネームは、アウトオブオーダ実行との関連で説明されるが、レジスタリネームは、インオーダアーキテクチャで使用され得ることが理解されるべきである。プロセッサの示された実施形態はまた、別個の命令及びデータキャッシュユニット1134/1174並びに共有L2キャッシュユニット1176を含むが、代替的な複数の実施形態は、例えば、レベル1(L1)内部キャッシュ又は複数レベルの内部キャッシュ等の命令及びデータの両方のための単一の内部キャッシュを有し得る。いくつかの実施形態において、システムは、内部キャッシュと、コア及び/又はプロセッサの外部にある外部キャッシュとの組み合わせを含み得る。代替的に、全てのキャッシュが、コア及び/又はプロセッサの外部にあり得る。
具体的な例示的インオーダコアアーキテクチャ
具体的な例示的インオーダコアアーキテクチャ
図12A〜図12Bは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示し、そのコアはチップ内の(同じタイプ及び/又は異なるタイプの他のコアを含む)いくつかのロジックブロックのうちの1つである。論理ブロックは、用途に応じて、高帯域幅相互接続ネットワーク(例えば、リングネットワーク)を介して、いくつかの固定機能ロジック、メモリI/Oインタフェース、及び他の必要なI/Oロジックと通信する。
図12Aは、本発明の複数の実施形態による、オンダイ相互接続ネットワーク1202への単一のプロセッサコアの接続、及びレベル2(L2)キャッシュ1204のそのローカルサブセットと併せた、単一のプロセッサコアのブロック図である。一実施形態において、命令復号器1200は、パックドデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ1206は、スカラユニット及びベクトルユニットへのキャッシュメモリに対する低レイテンシなアクセスを可能にする。一実施形態において(設計を簡略化するために)スカラユニット1208及びベクトルユニット1210が別個のレジスタセット(それぞれ、スカラレジスタ1212及びベクトルレジスタ1214)を使用し、それらの間のデータ転送がメモリに書き込まれ、その後、レベル1(L1)キャッシュ1206から読み戻されるが、本発明の代替的な複数の実施形態は、異なるアプローチ(例えば、単一のレジスタセットを使用する、又はデータが書き込み及び読み戻しなしに2つレジスタファイル間で転送されることを可能にする通信経路を含む)を使用し得る。
L2キャッシュ1204のローカルサブセットは、プロセッサコアあたり1つの、別個のローカルサブセットに分割されたグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュ1204のそれ自身のローカルサブセットへの直接アクセス経路を有する。プロセッサコアにより読み込まれるデータは、そのL2キャッシュサブセット1204に格納され、他のプロセッサコアがそれら自身のローカルL2キャッシュサブセットにアクセスすることと並行して迅速にアクセスされ得る。プロセッサコアによって書き込まれたデータが、それ自身のL2キャッシュサブセット1204に格納され、必要な場合、他のサブセットからフラッシュされる。リングネットワークは、共有データに対するコヒーレンシを保証する。リングネットワークは、プロセッサコア、L2キャッシュ、及び他の論理ブロック等のエージェントがチップ内でお互いと通信することを可能するように双方向である。各リングデータ経路は、一方向あたり1012ビット幅である。
図12Bは、本発明の複数の実施形態による、図12Aのプロセッサコアの一部の拡大図である。図12Bは、L1キャッシュ1204の一部であるL1データキャッシュ1206Aと、ベクトルユニット1210及びベクトルレジスタ1214に関するより詳細とを含む。具体的には、ベクトルユニット1210は、12幅ベクトル処理ユニット(VPU)(12幅ALU1228を参照)であり、これは、整数命令、単精度浮動命令、及び倍精度浮動命令のうちの1又は複数を実行する。VPUは、スウィズルユニット1220を用いたレジスタ入力のスウィズルと、数値変換ユニット1222A−Bを用いた数値変換と、メモリ入力に対する複製ユニット1224を用いた複製とをサポートする。書き込みマスクレジスタ1226は、結果として生じるベクトル書き込みをプレディケートすることを可能にする。
図13は、本発明の複数の実施形態による、1つより多くのコアを有し得、統合メモリコントローラを有し得、統合グラフィックを有し得るプロセッサ1300のブロック図である。図13の実線のボックスは、単一のコア1302A、システムエージェント1310、1又は複数のバスコントローラユニット1312のセットを有するプロセッサ1300を示し、一方、破線のボックスのオプションの追加は、複数のコア1302A−N、システムエージェントユニット1310内の1又は複数の統合メモリコントローラユニット1314のセット、及び専用ロジック1308を有する代替のプロセッサ1300を示す。
したがって、プロセッサ1300の異なる実装は、1)(1又は複数のコアを含み得る)統合グラフィック及び/又は科学(スループット)ロジックである専用ロジック1308、及び、1又は複数の汎用コアであるコア1302A−N(例えば、汎用インオーダコア、汎用アウトオブオーダコア、これら2つの組み合わせ)を有するCPUと、2)主にグラフィック及び/又は科学(スループット)向けの多数の専用コアであるコア1302A−Nを有するコプロセッサと、3)多数の汎用インオーダコアであるコア1302A−Nを有するコプロセッサとを含み得る。したがって、プロセッサ1300は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPU(汎用グラフィック処理ユニット)、(30又はこれより多くのコアを含む)高スループット多統合コア(MIC)コプロセッサ、組み込みプロセッサ、又は同様のものであるような、汎用プロセッサ、コプロセッサ、又は専用プロセッサであり得る。プロセッサは、1又は複数のチップ上に実装され得る。プロセッサ1300は、例えば、BiCMOS、CMOS、又はNMOS等の多数の処理技術のいずれを使用して、1又は複数の基板の一部であり得、及び/又は1又は複数の基板上に実装され得る。
メモリ階層は、コア内の1又は複数のレベルのキャッシュと、共有キャッシュユニット1306のセット又は1若しくは複数の共有キャッシュユニット1306と、統合メモリコントローラユニット1314のセットに連結された外部メモリ(不図示)とを含む。共有キャッシュユニットのセット1306は、レベル2(L2)、レベル3(L3)、レベル4(L4)又は他のレベルのキャッシュ等の1又は複数の中間レベルキャッシュ、最終レベルキャッシュ(LLC)、及び/又はこれらの組み合わせを含み得る。一実施形態において、リングベースの相互接続ユニット1312は、統合グラフィックロジック1308(統合グラフィックロジック1308は、専用ロジックの例であり、本明細書では専用ロジックとも称される)、共有キャッシュユニットのセット1306、及びシステムエージェントユニット1310/統合メモリコントローラユニット1314を相互接続するが、代替的な複数の実施形態は、そのようなユニットを相互接続するための任意の数の周知技術を使用し得る。一実施形態において、コヒーレンシが1又は複数キャッシュユニット1306とコア1302A−Nとの間で維持される。
いくつかの実施形態において、1又は複数のコア1302A−Nは、マルチスレッディングが可能である。システムエージェント1310は、コア1302A−Nを調整して演算するこれらのコンポーネントを含む。システムエージェントユニット1310は、例えば、電力制御ユニット(PCU)及び表示ユニットを含み得る。PCUは、コア1302A−N及び統合グラフィックロジック1308の電力状態を調整するために必要なロジック及びコンポーネントであり得、又は当該ロジック及びコンポーネントを含み得る。表示ユニットは、1又は複数の外部接続ディスプレイを駆動するためのものである。
コア1302A−Nは、アーキテクチャ命令セットに関して同種又は異種であり得、すなわち、2又はこれより多いコア1302A−Nが同一の命令セットを実行することが可能であってよく、一方で、他のコアが命令セットのサブセット又は異なる命令セットのみを実行することが可能であってよい。
例示的なコンピュータアーキテクチャ
例示的なコンピュータアーキテクチャ
図14〜図17は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、及び様々な他の電子デバイスのための当技術分野で知られた他のシステム設計及び構成にも適している。概して、本明細書で開示されたようなプロセッサ及び/又は他の実行ロジックを組み込むことが可能な多様なシステム又は電子デバイスは、概して適している。
ここで図14を参照すると、本発明の一実施形態による、システム1400のブロック図が示されている。システム1400は、コントローラハブ1420に連結される、1又は複数のプロセッサ1410、1415を含み得る。一実施形態において、コントローラハブ1420は、グラフィックメモリコントローラハブ(GMCH)1490及び入力/出力ハブ(IOH)1450(別個のチップ上にあり得る)を含む。GMCH1490は、メモリ1440及びコプロセッサ1445が連結されるメモリ及びグラフィックコントローラを含む。IOH1450は、入力/出力(I/O)デバイス1460をGMCH1490に連結する。代替的に、メモリ及びグラフィックコントローラの一方又は両方は、(本明細書で説明されるように)プロセッサ内に統合され、メモリ1440及びコプロセッサ1445は、プロセッサ1410とIOH1450を有する単一のチップ内のコントローラハブ1420とに直接連結される。
追加のプロセッサ1415の任意選択的な性質は、破線で図14に示される。各プロセッサ1410、1415は、本明細書で説明される1又は複数の処理コアを含み得、プロセッサ1300のいくつかのバージョンであり得る。
メモリ1440は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、又はこれら2つの組み合わせであり得る。少なくとも1つの実施形態について、コントローラハブ1420は、フロントサイドバス(FSB)等のマルチドロップバス、QuickPathインターコネクト(QPI)等のポイントツーポイントインタフェース、又は同様の接続1495を介して、プロセッサ1410、1415と通信する。
一実施形態において、コプロセッサ1445は、例えば、高スループットMICプロセッサ、ネットワーク若しくは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPU、組み込みプロセッサ、又は同様のもののような、専用プロセッサである。一実施形態において、コントローラハブ1420は、統合グラフィックアクセラレータを含み得る。
アーキテクチャ特性、マイクロアーキテクチャ特性、熱特性、電力消費特性等を含む利点の一連のメトリックスに関して、物理リソース1410、1415の間には様々な差異が存在し得る。
一実施形態において、プロセッサ1410は、一般的なタイプの演算を処理するデータを制御する命令を実行する。命令内にコプロセッサ命令が組み込まれ得る。プロセッサ1410は、これらのコプロセッサ命令を付属のコプロセッサ1445によって実行されるべきタイプであるとして認識する。したがって、プロセッサ1410は、コプロセッサバス又は他の相互接続上で、これらのコプロセッサ命令(又は、コプロセッサ命令を表す制御信号)をコプロセッサ1445に発行する。コプロセッサ1445は、受信したコプロセッサ命令を受理し、これらを実行する。
ここで、図15を参照すると、本発明の一実施形態による、第1のより具体的な例示的システム1500のブロック図が示されている。図15に示されるように、マルチプロセッサシステム1500は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1550を介して連結される第1のプロセッサ1570及び第2のプロセッサ1580を含む。プロセッサ1570及び1580のそれぞれは、プロセッサ1300のいくつかのバージョンであり得る。本発明の一実施形態において、プロセッサ1570及び1580は、それぞれプロセッサ1410及び1415であり、一方、コプロセッサ1538はコプロセッサ1445である。他の実施形態において、プロセッサ1570及び1580は、それぞれプロセッサ1410及びコプロセッサ1445である。
プロセッサ1570及び1580は、それぞれ、統合メモリコントローラ(IMC)ユニット1572及び1582を含むものとして示される。プロセッサ1570はまた、そのバスコントローラユニットの一部として、ポイントツーポイント(P−P)インタフェース1576及び1578を含み、同様に、第2のプロセッサ1580は、P−Pインタフェース1586及び1588を含む。プロセッサ1570、1580は、ポイントツーポイント(P−P)インタフェース1550を介し、P−Pインタフェース回路1578、1588を使用して情報を交換し得る。図15に示されるように、IMC1572及び1582は、プロセッサをそれぞれのメモリ、すなわち、メモリ1532及びメモリ1534に連結し、は、これらは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であり得る。
プロセッサ1570、1580は、各々、ポイントツーポイントインタフェース回路1576、1594、1586、1598を使用して、個々のP−Pインタフェース1552、1554を介して、チップセット1590と情報を交換し得る。チップセット1590は、高性能インタフェース1592を介して、コプロセッサ1538と任意選択的に情報を交換し得る。一実施形態において、コプロセッサ1538は、例えば、高スループットMICプロセッサ、ネットワーク若しくは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPU、組み込みプロセッサ、又は同様のもののような、専用プロセッサである。
共有キャッシュ(不図示)は、いずれかのプロセッサ内に又は両方のプロセッサの外部に含まれ得、さらに、P−P相互接続を介してプロセッサと接続され得、その結果、プロセッサが低電力モードに置かれた場合、いずれか又は両方のプロセッサのローカルキャッシュ情報は、共有キャッシュに格納され得る。
チップセット1590は、インタフェース1596を介して第1のバス1516に連結され得る。一実施形態において、第1のバス1516は、ペリフェラルコンポーネントインタコネクト(PCI)バス、又はPCIエクスプレスバス若しくは他の第3世代I/O相互接続バス等のバスであり得るが、本発明の範囲はこれに限定されない。
図15に示されるように、様々なI/Oデバイス1514が、第1のバス1516を第2のバス1520に連結するバスブリッジ1518と共に、第1のバス1516に連結され得る。一実施形態において、コプロセッサ、高スループットMICプロセッサ、GPGPU、(例えば、グラフィックアクセラレータ又はデジタル信号処理(DSP)ユニットのような)アクセラレータ、フィールドプログラマブルゲートアレイ、又は任意の他のプロセッサ等の1又は複数の追加プロセッサ1515は、第1のバス1516に連結される。一実施形態において、第2のバス1516は、ローピンカウント(LPC)バスであり得る。一実施形態において、例えば、キーボード及び/又はマウス1522、通信デバイス1527、並びに、命令/コード及びデータ1530を含み得るディスクドライブ又は他の大容量ストレージデバイス等のストレージユニット1528を含む、様々なデバイスが、第2のバス1516に連結され得る。さらに、オーディオI/O1524が、第2のバス1516に連結され得る。他のアーキテクチャが可能であることも留意されたい。例えば、図15のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバス又は他のそのようなアーキテクチャを実装し得る。
ここで図16を参照すると、本発明の一実施形態による、第2のより具体的な例示的システム1600のブロック図が示されている。図15及び図16の同様の要素は同様の参照符号を有し、図16の他の態様を曖昧にすることを回避すべく、図15の特定の態様が図16から省略されている。
図16は、プロセッサ1570、1580がそれぞれ統合メモリ及びI/O制御ロジック(「CL」)1572及び1582を含み得ることを示す。したがって、CL1572、1582は、統合メモリコントローラユニットを含み、I/O制御ロジックを含む。図16は、メモリ1532、1534がCL1572、1582に連結されることのみならず、I/Oデバイス1614が制御ロジック1572、1582にも連結されることを示す。レガシI/Oデバイス1615が、チップセット1590に連結される。
ここで図17を参照すると、本発明の一実施形態による、SoC1700のブロック図が示されている。図13における同様の要素は、同様の参照符号を有する。また、破線のボックスは、より高度なSoC上の任意選択的な機能である。図17において、相互接続ユニット1702は、キャッシュユニット1304A−N及び共有キャッシュユニット1306を含む、1又は複数のコア1302A−Nのセットを含む、アプリケーションプロセッサ1710と、システムエージェントユニット1310と、バスコントローラユニット1316と、統合メモリコントローラユニット1314と、統合グラフィックロジック、イメージプロセッサ、オーディオプロセッサ、及びビデオプロセッサを含み得るコプロセッサ1716のセット又は1又は複数のコプロセッサ1716と、スタティックランダムアクセスメモリ(SRAM)ユニット1730と、ダイレクトメモリアクセス(DMA)ユニット1732と、1又は複数の外部ディスプレイに連結するための表示ユニット1740とに連結される。一実施形態において、コプロセッサ1720は、例えば、ネットワーク若しくは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、組み込みプロセッサ、又は同様のもののような、専用プロセッサを含む。
本明細書で開示されたメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような実装アプローチの組み合わせで実装され得る。本発明の複数の実施形態は、少なくとも1つのプロセッサと、(揮発性メモリ及び不揮発性メモリ及び/又はストレージ要素を含む)ストレージシステムと、少なくとも1つの入力デバイスと、少なくとも1つの出力デバイスとを備えるプログラマブルシステム上で実行するコンピュータプログラム又はプログラムコードとして実装され得る。
図15に示されたコード1530等のプログラムコードは、本明細書で説明された機能を実行し、出力情報を生成するために、入力命令に適用され得る。出力情報は、既知の方法で1又は複数の出力デバイスに適用され得る。本願の目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)又はマイクロプロセッサ等のプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信するために、高レベル手続型プログラミング言語又はオブジェクト指向型プログラミング言語で実装され得る。プログラムコードはまた、必要に応じて、アセンブリ言語又は機械言語で実装され得る。実際に、本明細書で説明されたメカニズムは、いかなる特定のプログラミング言語に範囲が限定されるものではない。いずれの場合でも、言語は、コンパイル型言語又はインタープリタ型言語であり得る。
少なくとも1つの実施形態の1又は複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体に格納された代表的な命令によって実装され得、これは、機械によって読み込まれるとき、本明細書で説明された技術を実行するロジックを機械に製造させる。「IPコア」として知られるそのような表現は、有形の機械可読媒体に格納され得、実際にロジック又はプロセッサを作成する製造機械にロードするために様々な顧客又は製造施設に供給され得る。
そのような機械可読ストレージ媒体は、これらに限定することなしに、ハードディスク、フロッピーディスクと、光ディスクと、コンパクトディスクリードオンリーメモリ(CD−ROM)と、書き換え可能のコンパクトディスク(CD−RW)と、磁気光ディスクとを含む任意の他のタイプのディスク、リードオンリーメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)等のランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリーメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリーメモリ(EEPROM)、相変化メモリ(PCM)、磁気若しくは光カード等の半導体デバイス、又は電子命令を格納するのに適した任意の他のタイプの媒体等のストレージ媒体を含む、機械又はデバイスによって製造又は形成された物品の、非一時的で有形の配置を含み得る。
したがって、本発明の複数の実施形態はまた、本明細書で説明された構造、回路、装置、プロセッサ、及び/又はシステム機能を定義する、命令を含む、又はハードウェア記述言語(HDL)等の設計データを含む、非一時的で有形の機械可読媒体を含む。そのような複数の実施形態はまた、プログラム製品と称され得る。
(バイナリ変換、コードモーフィング等を含む)エミュレーション
(バイナリ変換、コードモーフィング等を含む)エミュレーション
場合によっては、命令をソース命令セットからターゲット命令セットに変換するのに命令コンバータが使用され得る。例えば、命令コンバータは、命令をコアによって処理される1又は複数の他の命令に(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して)翻訳し、モーフィングし、エミュレートし、又は別の方法で変換し得る。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせで実装され得る。命令コンバータは、プロセッサ上、プロセッサ外、又は一部がプロセッサ上で一部がプロセッサ外であり得る。
図18は、本発明の複数の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するソフトウェア命令コンバータの使用を対比するブロック図である。示された実施形態において、命令コンバータはソフトウェア命令コンバータであるが、代替的に、命令コンバータはソフトウェア、ファームウェア、ハードウェア、又はこれらの様々な組み合わせで実装され得る。図18は、高水準言語1802のプログラムが、少なくとも1つのx86命令セットコア1816を有するプロセッサによってネイティブに実行され得るx86バイナリコード1806を生成するのにx86コンパイラ1804を使用してコンパイルされ得ることを示す。少なくとも1つのx86命令セットコアを有するプロセッサ1816は、少なくとも1つのx86命令セットコアを有するインテルプロセッサと実質的に同一の結果を実現すべく、(1)インテルx86命令セットコアの命令セットの実質的部分、又は(2)少なくとも1つのx86命令セットコアを有するインテルプロセッサを起動することを目的とする、オブジェクトコードバージョンのアプリケーション若しくは他のソフトウェアを互換性があるように実行し、又は別の方法で処理することによって、少なくとも1つのx86命令セットコアを有するインテルプロセッサと実質的に同一の機能を実行できる任意のプロセッサを表す。x86コンパイラ1804は、追加のリンク処理があってもなくても、少なくとも1つのx86命令セットコア1816を有するプロセッサ上で実行できるx86バイナリコード1806(例えば、オブジェクトコード)を生成するよう動作可能であるコンパイラを表す。同様に、図18は、高水準言語1802のプログラムが、少なくとも1つのx86命令セットコア1814を有さないプロセッサ(例えば、カリフォルニア州サニーベールのMIPS TechnologiesのMIP命令セットを実行する、及び/又はカリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行するコアを有するプロセッサ)によってネイティブに実行され得る代替的な命令セットバイナリコード1810を生成するのに代替的な命令セットコンパイラ1808を使用してコンパイルされ得ることを示す。命令コンバータ1812が、x86命令セットコアを有さないプロセッサ1814によってネイティブに実行され得るコードにx86バイナリコード1806を変換するのに使用される。この変換されたコードは、代替的な命令セットバイナリコード1810と同一である可能性が低い。なぜなら、これが可能な命令コンバータは作成するのが困難であるからである。しかしながら、変換されたコードは、一般的な演算を実現し、代替的な命令セットからの命令で構成される。したがって、命令コンバータ1812は、エミュレーション、シミュレーション、又は任意の他の処理を介して、x86命令セットプロセッサ若しくはコアを有さないプロセッサ又は他の電子デバイスがx86バイナリコード1806を実行することを可能にする、ソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせを表す。
さらなる例:
(例1)圧縮されたグラフィックリストにアクセスする単一の命令をフェッチするフェッチ回路と、上記フェッチされた単一の命令を復号する復号回路と、ロードストアキューから、第1のデータ位置と関連している第1の演算エンジンで、間接参照要求を受信すること、上記第1の演算エンジンによって、第2の演算エンジンと関連している第2のデータ位置を計算すること、上記第2の演算エンジンによって、上記間接参照要求に応答して、第3の演算エンジンと関連している第3のデータ位置を計算すること、及び、上記第3の演算エンジンによって、上記第3のデータ位置からデータを受信することに応答して、上記ロードストアキューにデータ応答を提供することによって、上記圧縮されたグラフィックリストへのアクセスをもたらす上記復号された単一の命令を実行する実行回路を備える、プロセッサ。
(例2)上記単一の命令は、リストロード、ポインタデリファレンス、間接参照のロード演算、又は間接参照のストア演算のうちの少なくとも1つを含む、例1のプロセッサ。
(例3)上記第1の演算エンジンは、上記第1のデータ位置から第1のポインタを読み出し、第2のポインタと関連している上記第2のデータ位置を計算する、例1のプロセッサ。
(例4)上記第2の演算エンジンは、上記第2のデータ位置から上記第2のポインタを読み出し、第3のポインタと関連している上記第3のデータ位置を計算する、例3のプロセッサ。
(例5)データ位置はパイプライン間接参照システム内のメモリ位置を含む、例1のプロセッサ。
(例6)上記間接参照要求は、上記間接参照要求は多重間接参照又は単一間接参照のうちの少なくとも1つを含む、例1のプロセッサ。
(例7)上記間接参照要求は間接参照の演算を含み、上記間接参照の演算は間接参照のロード演算又は間接参照のストア演算を含む、例1のプロセッサ。
(例8)上記間接参照のロード演算又は上記間接参照のストア演算の間接参照のレベルを判断することをさらに含む、例7のプロセッサ。
(例9)上記データ応答は、データ値又はデータ確認応答のうちの少なくとも1つを含む、例1のプロセッサ。
(例10)上記間接参照要求は上記ロードストアキューと関連しているアドレスを含み、上記ロードストアキューと関連している上記アドレスが上記間接参照要求で送信されて、上記パイプライン間接参照システムの1又は複数の演算エンジンで上記ロードストアキューにデータをリターンする、例1のプロセッサ。
(例11)フェッチ回路及び復号回路を使用して、圧縮されたグラフィックリストにアクセスする単一の命令をフェッチして復号する段階と、ロードストアキューから、第1のデータ位置と関連している第1の演算エンジンで、間接参照要求を受信すること、上記第1の演算エンジンによって、第2の演算エンジンと関連している第2のデータ位置を判断すること、上記第2の演算エンジンによって、上記間接参照要求に応答して、第3の演算エンジンと関連している第3のデータ位置を判断すること、及び、上記第3の演算エンジンによって、上記第3のデータ位置からデータを受信することに応答して、上記ロードストアキューにデータ応答を提供することによって、実行回路を使用して、上記復号された命令に応答する段階とを備える方法。
(例12)上記単一の命令は、リストロード、ポインタデリファレンス、間接参照のロード演算、又は間接参照のストア演算のうちの少なくとも1つを含む、例11の方法。
(例13)上記第1の演算エンジンは、上記第1のデータ位置から第1のポインタを読み出し、第2のポインタと関連している上記第2のデータ位置を計算する、例11の方法。
(例14)上記第2の演算エンジンは、上記第2のデータ位置から上記第2のポインタを読み出し、第3のポインタと関連している上記第3のデータ位置を計算する、例11の方法。
(例15)上記間接参照要求は間接参照レベルを含み、上記間接参照レベルはマルチレベルの間接参照を示す、例11の方法。
(例16)上記間接参照要求は間接参照の演算を含み、上記間接参照の演算は間接参照のロード演算又は間接参照のストア演算を含む、例11の方法。
(例17)上記データ応答はデータ値を含む、例11の方法。
(例18)上記間接参照要求は上記ロードストアキューと関連しているアドレスを含み、上記ロードストアキューと関連している上記アドレスが上記間接参照要求で送信されて、上記パイプライン間接参照システムの1又は複数の演算エンジンで上記ロードストアキューにデータをリターンする、例11の方法。
(例19)メモリと、プロセッサであって、圧縮されたグラフィックリストにアクセスする単一の命令をフェッチするフェッチ回路と、上記フェッチされた単一の命令を復号する復号回路と、ロードストアキューから、第1のデータ位置と関連している第1の演算エンジンで、間接参照要求を受信すること、上記第1の演算エンジンによって、第2の演算エンジンと関連している第2のデータ位置を計算すること、上記第2の演算エンジンによって、上記間接参照要求に応答して、第3の演算エンジンと関連している第3のデータ位置を計算すること、及び、上記第3の演算エンジンによって、上記第3のデータ位置からデータを受信することに応答して、上記ロードストアキューにデータ応答を提供することによって、上記圧縮されたグラフィックリストへのアクセスをもたらす上記復号された単一の命令を実行する実行回路とを有する、プロセッサとを備える、システム。
(例20)上記データ応答は、データ値又はデータ確認応答のうちの少なくとも1つを含む、例19のシステム。
[その他の可能な項目]
[項目1]
圧縮されたグラフィックリストにアクセスする単一の命令をフェッチするフェッチ回路と、
上記フェッチされた単一の命令を復号する復号回路と、
ロードストアキューから、第1のデータ位置と関連している第1の演算エンジンで、間接参照要求を受信すること、
上記第1の演算エンジンによって、第2の演算エンジンと関連している第2のデータ位置を計算すること、
上記第2の演算エンジンによって、上記間接参照要求に応答して、第3の演算エンジンと関連している第3のデータ位置を計算すること、及び
上記第3の演算エンジンによって、上記第3のデータ位置からデータを受信することに応答して、上記ロードストアキューにデータ応答を提供すること
によって、上記圧縮されたグラフィックリストへのアクセスをもたらす上記復号された単一の命令を実行する実行回路と
を備える、プロセッサ。
[項目2]
上記単一の命令は、リストロード、ポインタデリファレンス、間接参照のロード演算、又は間接参照のストア演算のうちの少なくとも1つを含む、項目1に記載のプロセッサ。
[項目3]
上記第1の演算エンジンは、
上記第1のデータ位置から第1のポインタを読み出し、
第2のポインタと関連している上記第2のデータ位置を計算する、
項目1に記載のプロセッサ。
[項目4]
上記第2の演算エンジンは、
上記第2のデータ位置から上記第2のポインタを読み出し、
第3のポインタと関連している上記第3のデータ位置を計算する、
項目3に記載のプロセッサ。
[項目5]
データ位置はパイプライン間接参照システム内のメモリ位置を含む、項目1に記載のプロセッサ。
[項目6]
上記間接参照要求は多重間接参照又は単一間接参照のうちの少なくとも1つを含む、項目1に記載のプロセッサ。
[項目7]
上記間接参照要求は間接参照の演算を含み、上記間接参照の演算は間接参照のロード演算又は間接参照のストア演算を含む、項目1に記載のプロセッサ。
[項目8]
上記間接参照のロード演算又は上記間接参照のストア演算の間接参照のレベルを判断することをさらに含む、項目7に記載のプロセッサ。
[項目9]
上記データ応答はデータ値又はデータ確認応答のうちの少なくとも1つを含む、項目1に記載のプロセッサ。
[項目10]
上記間接参照要求は上記ロードストアキューと関連しているアドレスを含み、上記ロードストアキューと関連している上記アドレスが上記間接参照要求で送信されて、上記パイプライン間接参照システムの1又は複数の演算エンジンで上記ロードストアキューにデータをリターンする、項目1に記載のプロセッサ。
[項目11]
フェッチ回路及び復号回路を使用して、圧縮されたグラフィックリストにアクセスする単一の命令をフェッチして復号する段階と、
ロードストアキューから、第1のデータ位置と関連している第1の演算エンジンで、間接参照要求を受信すること、
上記第1の演算エンジンによって、第2の演算エンジンと関連している第2のデータ位置を判断すること、
上記第2の演算エンジンによって、上記間接参照要求に応答して、第3の演算エンジンと関連している第3のデータ位置を判断すること、及び
上記第3の演算エンジンによって、上記第3のデータ位置からデータを受信することに応答して、上記ロードストアキューにデータ応答を提供すること
によって、実行回路を使用して、上記復号された命令に応答する段階と、
を備える、方法。
[項目12]
上記単一の命令は、リストロード、ポインタデリファレンス、間接参照のロード演算、又は間接参照のストア演算のうちの少なくとも1つを含む、項目11に記載の方法。
[項目13]
第1の演算エンジンは、
上記第1のデータ位置から第1のポインタを読み出し、
第2のポインタと関連している上記第2のデータ位置を計算する、
項目11に記載の方法。
[項目14]
上記第2の演算エンジンは、
上記第2のデータ位置から上記第2のポインタを読み出し、
第3のポインタと関連している上記第3のデータ位置を計算する、
項目11に記載の方法。
[項目15]
上記間接参照要求は間接参照レベルを含み、上記間接参照レベルはマルチレベルの間接参照を示す、項目11に記載の方法。
[項目16]
上記間接参照要求は間接参照の演算を含み、上記間接参照の演算は間接参照のロード演算又は間接参照のストア演算を含む、項目11に記載の方法。
[項目17]
上記データ応答はデータ値を含む、項目11に記載の方法。
[項目18]
上記間接参照要求は上記ロードストアキューと関連しているアドレスを含み、上記ロードストアキューと関連している上記アドレスが上記間接参照要求で送信されて、上記パイプライン間接参照システムの1又は複数の演算エンジンで上記ロードストアキューにデータをリターンする、項目11に記載の方法。
[項目19]
メモリと、
プロセッサであって、
圧縮されたグラフィックリストにアクセスする単一の命令をフェッチするフェッチ回路と、
上記フェッチされた単一の命令を復号する復号回路と、
ロードストアキューから、第1のデータ位置と関連している第1の演算エンジンで、間接参照要求を受信すること、
上記第1の演算エンジンによって、第2の演算エンジンと関連している第2のデータ位置を計算すること、
上記第2の演算エンジンによって、上記間接参照要求に応答して、第3の演算エンジンと関連している第3のデータ位置を計算すること、及び
上記第3の演算エンジンによって、上記第3のデータ位置からデータを受信することに応答して、上記ロードストアキューにデータ応答を提供すること
によって、上記圧縮されたグラフィックリストへのアクセスをもたらす上記復号された単一の命令を実行する実行回路と
を有する、プロセッサと
を備える、システム。
[項目20]
上記データ応答はデータ値又はデータ確認応答のうちの少なくとも1つを含む、項目19に記載のシステム。
[その他の可能な項目]
[項目1]
圧縮されたグラフィックリストにアクセスする単一の命令をフェッチするフェッチ回路と、
上記フェッチされた単一の命令を復号する復号回路と、
ロードストアキューから、第1のデータ位置と関連している第1の演算エンジンで、間接参照要求を受信すること、
上記第1の演算エンジンによって、第2の演算エンジンと関連している第2のデータ位置を計算すること、
上記第2の演算エンジンによって、上記間接参照要求に応答して、第3の演算エンジンと関連している第3のデータ位置を計算すること、及び
上記第3の演算エンジンによって、上記第3のデータ位置からデータを受信することに応答して、上記ロードストアキューにデータ応答を提供すること
によって、上記圧縮されたグラフィックリストへのアクセスをもたらす上記復号された単一の命令を実行する実行回路と
を備える、プロセッサ。
[項目2]
上記単一の命令は、リストロード、ポインタデリファレンス、間接参照のロード演算、又は間接参照のストア演算のうちの少なくとも1つを含む、項目1に記載のプロセッサ。
[項目3]
上記第1の演算エンジンは、
上記第1のデータ位置から第1のポインタを読み出し、
第2のポインタと関連している上記第2のデータ位置を計算する、
項目1に記載のプロセッサ。
[項目4]
上記第2の演算エンジンは、
上記第2のデータ位置から上記第2のポインタを読み出し、
第3のポインタと関連している上記第3のデータ位置を計算する、
項目3に記載のプロセッサ。
[項目5]
データ位置はパイプライン間接参照システム内のメモリ位置を含む、項目1に記載のプロセッサ。
[項目6]
上記間接参照要求は多重間接参照又は単一間接参照のうちの少なくとも1つを含む、項目1に記載のプロセッサ。
[項目7]
上記間接参照要求は間接参照の演算を含み、上記間接参照の演算は間接参照のロード演算又は間接参照のストア演算を含む、項目1に記載のプロセッサ。
[項目8]
上記間接参照のロード演算又は上記間接参照のストア演算の間接参照のレベルを判断することをさらに含む、項目7に記載のプロセッサ。
[項目9]
上記データ応答はデータ値又はデータ確認応答のうちの少なくとも1つを含む、項目1に記載のプロセッサ。
[項目10]
上記間接参照要求は上記ロードストアキューと関連しているアドレスを含み、上記ロードストアキューと関連している上記アドレスが上記間接参照要求で送信されて、上記パイプライン間接参照システムの1又は複数の演算エンジンで上記ロードストアキューにデータをリターンする、項目1に記載のプロセッサ。
[項目11]
フェッチ回路及び復号回路を使用して、圧縮されたグラフィックリストにアクセスする単一の命令をフェッチして復号する段階と、
ロードストアキューから、第1のデータ位置と関連している第1の演算エンジンで、間接参照要求を受信すること、
上記第1の演算エンジンによって、第2の演算エンジンと関連している第2のデータ位置を判断すること、
上記第2の演算エンジンによって、上記間接参照要求に応答して、第3の演算エンジンと関連している第3のデータ位置を判断すること、及び
上記第3の演算エンジンによって、上記第3のデータ位置からデータを受信することに応答して、上記ロードストアキューにデータ応答を提供すること
によって、実行回路を使用して、上記復号された命令に応答する段階と、
を備える、方法。
[項目12]
上記単一の命令は、リストロード、ポインタデリファレンス、間接参照のロード演算、又は間接参照のストア演算のうちの少なくとも1つを含む、項目11に記載の方法。
[項目13]
第1の演算エンジンは、
上記第1のデータ位置から第1のポインタを読み出し、
第2のポインタと関連している上記第2のデータ位置を計算する、
項目11に記載の方法。
[項目14]
上記第2の演算エンジンは、
上記第2のデータ位置から上記第2のポインタを読み出し、
第3のポインタと関連している上記第3のデータ位置を計算する、
項目11に記載の方法。
[項目15]
上記間接参照要求は間接参照レベルを含み、上記間接参照レベルはマルチレベルの間接参照を示す、項目11に記載の方法。
[項目16]
上記間接参照要求は間接参照の演算を含み、上記間接参照の演算は間接参照のロード演算又は間接参照のストア演算を含む、項目11に記載の方法。
[項目17]
上記データ応答はデータ値を含む、項目11に記載の方法。
[項目18]
上記間接参照要求は上記ロードストアキューと関連しているアドレスを含み、上記ロードストアキューと関連している上記アドレスが上記間接参照要求で送信されて、上記パイプライン間接参照システムの1又は複数の演算エンジンで上記ロードストアキューにデータをリターンする、項目11に記載の方法。
[項目19]
メモリと、
プロセッサであって、
圧縮されたグラフィックリストにアクセスする単一の命令をフェッチするフェッチ回路と、
上記フェッチされた単一の命令を復号する復号回路と、
ロードストアキューから、第1のデータ位置と関連している第1の演算エンジンで、間接参照要求を受信すること、
上記第1の演算エンジンによって、第2の演算エンジンと関連している第2のデータ位置を計算すること、
上記第2の演算エンジンによって、上記間接参照要求に応答して、第3の演算エンジンと関連している第3のデータ位置を計算すること、及び
上記第3の演算エンジンによって、上記第3のデータ位置からデータを受信することに応答して、上記ロードストアキューにデータ応答を提供すること
によって、上記圧縮されたグラフィックリストへのアクセスをもたらす上記復号された単一の命令を実行する実行回路と
を有する、プロセッサと
を備える、システム。
[項目20]
上記データ応答はデータ値又はデータ確認応答のうちの少なくとも1つを含む、項目19に記載のシステム。
Claims (20)
- 圧縮されたグラフィックリストにアクセスする単一の命令をフェッチするフェッチ回路と、
前記フェッチされた単一の命令を復号する復号回路と、
ロードストアキューから、第1のデータ位置と関連している第1の演算エンジンで、間接参照要求を受信すること、
前記第1の演算エンジンによって、第2の演算エンジンと関連している第2のデータ位置を計算すること、
前記第2の演算エンジンによって、前記間接参照要求に応答して、第3の演算エンジンと関連している第3のデータ位置を計算すること、及び
前記第3の演算エンジンによって、前記第3のデータ位置からデータを受信することに応答して、前記ロードストアキューにデータ応答を提供すること
によって、前記圧縮されたグラフィックリストへのアクセスをもたらす前記復号された単一の命令を実行する実行回路と
を備える、プロセッサ。 - 前記単一の命令は、リストロード、ポインタデリファレンス、間接参照のロード演算、又は間接参照のストア演算のうちの少なくとも1つを含む、請求項1に記載のプロセッサ。
- 前記第1の演算エンジンは、
前記第1のデータ位置から第1のポインタを読み出し、
第2のポインタと関連している前記第2のデータ位置を計算する、
請求項1又は2に記載のプロセッサ。 - 前記第2の演算エンジンは、
前記第2のデータ位置から前記第2のポインタを読み出し、
第3のポインタと関連している前記第3のデータ位置を計算する、
請求項3に記載のプロセッサ。 - データ位置はパイプライン間接参照システム内のメモリ位置を含む、請求項1から4のいずれか一項に記載のプロセッサ。
- 前記間接参照要求は多重間接参照又は単一間接参照のうちの少なくとも1つを含む、請求項1に記載のプロセッサ。
- 前記間接参照要求は間接参照の演算を含み、前記間接参照の演算は間接参照のロード演算又は間接参照のストア演算を含む、請求項1に記載のプロセッサ。
- 前記間接参照のロード演算又は前記間接参照のストア演算の間接参照のレベルを判断することをさらに含む、請求項7に記載のプロセッサ。
- 前記データ応答はデータ値又はデータ確認応答のうちの少なくとも1つを含む、請求項1から8のいずれか一項に記載のプロセッサ。
- 前記間接参照要求は前記ロードストアキューと関連しているアドレスを含み、前記ロードストアキューと関連している前記アドレスが前記間接参照要求で送信されて、パイプライン間接参照システムの1又は複数の演算エンジンで前記ロードストアキューにデータをリターンする、請求項1に記載のプロセッサ。
- フェッチ回路及び復号回路を使用して、圧縮されたグラフィックリストにアクセスする単一の命令をフェッチして復号する段階と、
ロードストアキューから、第1のデータ位置と関連している第1の演算エンジンで、間接参照要求を受信すること、
前記第1の演算エンジンによって、第2の演算エンジンと関連している第2のデータ位置を判断すること、
前記第2の演算エンジンによって、前記間接参照要求に応答して、第3の演算エンジンと関連している第3のデータ位置を判断すること、及び
前記第3の演算エンジンによって、前記第3のデータ位置からデータを受信することに応答して、前記ロードストアキューにデータ応答を提供すること
によって、実行回路を使用して、前記復号された命令に応答する段階と、
を備える、方法。 - 前記単一の命令は、リストロード、ポインタデリファレンス、間接参照のロード演算、又は間接参照のストア演算のうちの少なくとも1つを含む、請求項11に記載の方法。
- 第1の演算エンジンは、
前記第1のデータ位置から第1のポインタを読み出し、
第2のポインタと関連している前記第2のデータ位置を計算する、
請求項11又は12に記載の方法。 - 前記第2の演算エンジンは、
前記第2のデータ位置から第2のポインタを読み出し、
第3のポインタと関連している前記第3のデータ位置を計算する、
請求項11から13のいずれか一項に記載の方法。 - 前記間接参照要求は間接参照レベルを含み、前記間接参照レベルはマルチレベルの間接参照を示す、請求項11に記載の方法。
- 前記間接参照要求は間接参照の演算を含み、前記間接参照の演算は間接参照のロード演算又は間接参照のストア演算を含む、請求項11に記載の方法。
- 前記データ応答はデータ値を含む、請求項11に記載の方法。
- 前記間接参照要求は前記ロードストアキューと関連しているアドレスを含み、前記ロードストアキューと関連している前記アドレスが前記間接参照要求で送信されて、パイプライン間接参照システムの1又は複数の演算エンジンで前記ロードストアキューにデータをリターンする、請求項11に記載の方法。
- メモリと、
プロセッサであって、
圧縮されたグラフィックリストにアクセスする単一の命令をフェッチするフェッチ回路と、
前記フェッチされた単一の命令を復号する復号回路と、
ロードストアキューから、第1のデータ位置と関連している第1の演算エンジンで、間接参照要求を受信すること、
前記第1の演算エンジンによって、第2の演算エンジンと関連している第2のデータ位置を計算すること、
前記第2の演算エンジンによって、前記間接参照要求に応答して、第3の演算エンジンと関連している第3のデータ位置を計算すること、及び
前記第3の演算エンジンによって、前記第3のデータ位置からデータを受信することに応答して、前記ロードストアキューにデータ応答を提供すること
によって、前記圧縮されたグラフィックリストへのアクセスをもたらす前記復号された単一の命令を実行する実行回路と
を有する、プロセッサと
を備える、システム。 - 前記データ応答はデータ値又はデータ確認応答のうちの少なくとも1つを含む、請求項19に記載のシステム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/579,806 US10929132B1 (en) | 2019-09-23 | 2019-09-23 | Systems and methods for ISA support for indirect loads and stores for efficiently accessing compressed lists in graph applications |
US16/579,806 | 2019-09-23 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2021051727A true JP2021051727A (ja) | 2021-04-01 |
Family
ID=71138549
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2020109873A Pending JP2021051727A (ja) | 2019-09-23 | 2020-06-25 | グラフアプリケーション内の圧縮されたリストに効率的にアクセスするための間接参照のロード及びストアへのisaサポートのシステム及び方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10929132B1 (ja) |
EP (1) | EP3796158B1 (ja) |
JP (1) | JP2021051727A (ja) |
CN (1) | CN112540791A (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11791938B2 (en) * | 2019-09-26 | 2023-10-17 | Nvidia Corporation | Parity check decoding |
US20220382551A1 (en) * | 2021-06-01 | 2022-12-01 | Oracle International Corporation | Processor Supporting Position-Independent Addressing |
US11848689B2 (en) * | 2022-03-04 | 2023-12-19 | Microsoft Technology Licensing, Llc | Method and apparatus for compression multiplexing for sparse computations |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0766324B2 (ja) | 1988-03-18 | 1995-07-19 | 三菱電機株式会社 | データ処理装置 |
US20080184017A1 (en) * | 1999-04-09 | 2008-07-31 | Dave Stuttard | Parallel data processing apparatus |
US6754809B1 (en) | 1999-12-30 | 2004-06-22 | Texas Instruments Incorporated | Data processing apparatus with indirect register file access |
JP2003044273A (ja) * | 2001-08-01 | 2003-02-14 | Nec Corp | データ処理装置及びデータ処理方法 |
US7296136B1 (en) | 2004-06-04 | 2007-11-13 | Hewlett-Packard Development Company, L.P. | Methods and systems for loading data from memory |
US7383420B2 (en) * | 2005-03-24 | 2008-06-03 | Qualcomm Incorporated | Processor and method of indirect register read and write operations |
US9304771B2 (en) * | 2013-02-13 | 2016-04-05 | International Business Machines Corporation | Indirect instruction predication |
US10509726B2 (en) * | 2015-12-20 | 2019-12-17 | Intel Corporation | Instructions and logic for load-indices-and-prefetch-scatters operations |
US10846069B2 (en) * | 2017-09-30 | 2020-11-24 | Oracle International Corporation | Method of distributed graph loading for minimal communication and good balance via lazy materialization and directory indirection using indexed tabular representation |
US10684858B2 (en) * | 2018-06-01 | 2020-06-16 | Intel Corporation | Indirect memory fetcher |
-
2019
- 2019-09-23 US US16/579,806 patent/US10929132B1/en active Active
-
2020
- 2020-06-23 EP EP20181670.9A patent/EP3796158B1/en active Active
- 2020-06-24 CN CN202010586366.7A patent/CN112540791A/zh active Pending
- 2020-06-25 JP JP2020109873A patent/JP2021051727A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
US10929132B1 (en) | 2021-02-23 |
CN112540791A (zh) | 2021-03-23 |
EP3796158B1 (en) | 2022-11-16 |
EP3796158A1 (en) | 2021-03-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6274672B2 (ja) | 装置および方法 | |
KR101748538B1 (ko) | 벡터 인덱싱 메모리 액세스 플러스 산술 및/또는 논리 연산 프로세서들, 방법들, 시스템들 및 명령어들 | |
KR101877190B1 (ko) | 인접한 수집/분산 연산들의 통합 | |
KR102463858B1 (ko) | 벡터 인덱스 로드 및 저장을 위한 방법 및 장치 | |
JP7244046B2 (ja) | 遠隔アトミックオペレーションの空間的・時間的マージ | |
CN115437971A (zh) | 无局部性提示的向量存储器访问处理器、方法、***和指令 | |
JP2014182807A (ja) | 限定範囲ベクトルメモリアクセス命令、プロセッサ、方法、及びシステム | |
JP6778375B2 (ja) | ベクトルビット反転を実行するためのプロセッサ、方法、およびシステム | |
KR102585780B1 (ko) | 실행을 위해 데이터 성분들을 로딩하는데 있어서 공간 구역성을 고려하기 위한 장치 및 방법 | |
JP2017534114A (ja) | Z順序曲線において次のポイントの座標を計算するためのベクトル命令 | |
JP2021051727A (ja) | グラフアプリケーション内の圧縮されたリストに効率的にアクセスするための間接参照のロード及びストアへのisaサポートのシステム及び方法 | |
JP6807073B2 (ja) | 高速ベクトルによる動的なメモリ競合検出 | |
JP6835436B2 (ja) | マスクをマスク値のベクトルに拡張するための方法および装置 | |
JP6773378B2 (ja) | 3d座標から3dのz曲線インデックスを計算するための機械レベル命令 | |
CN108241509B (zh) | 用于高效地处理存储器排序缓冲器的分配的方法和装置 | |
KR20170099860A (ko) | 벡터 포화된 더블워드/쿼드워드 덧셈을 수행하기 위한 명령어 및 로직 | |
US11934830B2 (en) | Method and apparatus for data-ready memory operations | |
US20170192789A1 (en) | Systems, Methods, and Apparatuses for Improving Vector Throughput | |
CN107168682B (zh) | 用于确定值是否在范围内的指令的装置和方法 | |
KR102528073B1 (ko) | 벡터 비트 수집을 수행하기 위한 방법 및 장치 | |
US20200401412A1 (en) | Hardware support for dual-memory atomic operations | |
US10095517B2 (en) | Apparatus and method for retrieving elements from a linked structure |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20230620 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20240531 |