JP2013254484A - ベクトル分割ループの性能の向上 - Google Patents
ベクトル分割ループの性能の向上 Download PDFInfo
- Publication number
- JP2013254484A JP2013254484A JP2013087861A JP2013087861A JP2013254484A JP 2013254484 A JP2013254484 A JP 2013254484A JP 2013087861 A JP2013087861 A JP 2013087861A JP 2013087861 A JP2013087861 A JP 2013087861A JP 2013254484 A JP2013254484 A JP 2013254484A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- vector
- prediction
- conditional branch
- branch instruction
- 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
- 239000013598 vector Substances 0.000 title claims abstract description 267
- 238000000638 solvent extraction Methods 0.000 title abstract description 3
- 238000000034 method Methods 0.000 claims abstract description 35
- 230000015654 memory Effects 0.000 claims description 66
- 230000004044 response Effects 0.000 claims description 12
- 230000008859 change Effects 0.000 claims description 11
- 230000001419 dependent effect Effects 0.000 abstract description 5
- 238000010586 diagram Methods 0.000 description 13
- 238000012545 processing Methods 0.000 description 9
- 230000006399 behavior Effects 0.000 description 8
- 238000005192 partition Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- 230000003068 static effect Effects 0.000 description 6
- OCKGFTQIICXDQW-ZEQRLZLVSA-N 5-[(1r)-1-hydroxy-2-[4-[(2r)-2-hydroxy-2-(4-methyl-1-oxo-3h-2-benzofuran-5-yl)ethyl]piperazin-1-yl]ethyl]-4-methyl-3h-2-benzofuran-1-one Chemical compound C1=C2C(=O)OCC2=C(C)C([C@@H](O)CN2CCN(CC2)C[C@H](O)C2=CC=C3C(=O)OCC3=C2C)=C1 OCKGFTQIICXDQW-ZEQRLZLVSA-N 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 230000014509 gene expression Effects 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000007704 transition Effects 0.000 description 4
- 230000002411 adverse Effects 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000005291 magnetic effect Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 239000000872 buffer Substances 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000001627 detrimental effect Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000001629 suppression 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
-
- 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/30072—Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
-
- 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/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- 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/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30058—Conditional branch 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3848—Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Executing Machine-Instructions (AREA)
- Devices For Executing Special Programs (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
Abstract
【解決手段】ベクトル分割ループで使用される後方分岐命令の予測を抑制する方法が、述語生成命令後に生じる最初の後方分岐命令を検出するステップを含む。述語生成命令は、依存ベクトルに依存する述語ベクトルを生成し、依存ベクトルの各要素は、ベクトル命令の要素間にデータ依存が存在するかどうかを示す。この方法は、後方分岐命令の予測の予測精度の指示を受け取るステップも含む。予測精度が閾値を満たさない場合、述語生成命令が依存する依存ベクトルが利用可能になるまで後方分岐命令の予測が抑制される。
【選択図】図9
Description
ここで図1を参照すると、コンピュータシステムの1つの実施形態のブロック図を示している。コンピュータシステム100は、プロセッサ102、レベル2(L2)キャッシュ106、メモリ108、及び大容量記憶装置110を含む。図示のように、プロセッサ102は、レベル1(L1)キャッシュ104を含む。なお、コンピュータシステム100内には特定の構成要素を図示し、これらについて説明するが、代替の実施形態では、コンピュータシステム100内に異なる構成要素及び多くの構成要素が存在することができる。例えば、コンピュータシステム100は、メモリ階層の一部(メモリ108及び/又は大容量記憶装置110など)を含まなくてもよい。或いは、L2キャッシュ106をプロセッサ102の外部に示しているが、他の実施形態では、L2キャッシュ106がプロセッサ102の内部に存在できることが企図される。さらに、このような実施形態では、レベル3(L3)キャッシュ(図示せず)を使用することもできる。また、コンピュータシステム100は、グラフィックプロセッサ、ビデオカード、ビデオ取り込み装置、ユーザインターフェイス装置、ネットワークカード、光学ドライブ、及び/又は、バス、ネットワーク、又は別の好適な通信チャネルを使用してプロセッサ102に結合されたその他の周辺装置(全て単純化のために図示せず)を含むこともできる。
図2を参照すると、図1のプロセッサの実施形態のさらなる詳細を示すブロック図を示している。図2に示す実施形態では、プロセッサ102が、複数のパイプラインステージを含むことができるが、簡潔にするために、図2には全てを示しているわけではない。従って、図示のように、プロセッサ102は、L1キャッシュ104、命令フェッチユニット201、分岐予測ユニット210、誤予測ユニット212、整数実行ユニット202、浮動小数点実行ユニット206、及びベクトル実行ユニット204を含む。なお、整数実行ユニット202、浮動小数点実行ユニット206及びベクトル実行ユニット204は、グループとして「実行ユニット」と同義であると見なすことができる。
コンパイラは、命令セットアーキテクチャ(マクロスカラアーキテクチャと呼ばれる)及びサポートハードウェアにより、コンパイル時における並列性を完全に決定する必要なく、また有用な静的分析情報を廃棄することなく、ループのためのプログラムコードを生成することができる。以下、マクロスカラアーキテクチャの様々な実施形態について説明する。詳細には、以下でさらに説明するように、ループに対して並列性を命じるのではなく、代わりに動的条件が許す場合に実行時に並列性を利用できるようにする命令セットを提供する。従って、このアーキテクチャは、コンパイラによって生成されたコードが、使用する並列性の量を切り換えることにより、実行時の条件に依存してループ反復の非並列(スカラ)実行と並列(ベクトル)実行を動的に切り換えることを可能にする命令を含む。
以下の例は、マクロスカラ演算を導入し、図3に示して上述した並列化ループの例のループのようなベクトル化ループにおけるその使用を示すものである。理解を容易にするために、これらの例は、C++フォーマットの疑似コードを使用して示している。
以下の例を説明する際には、変数に関して以下のフォーマットを使用し、これらは別途指示しない限りベクトル量である。
ベクトルp5の要素は、テスト結果a<bに応じて0又は1に設定される。なお、以下でさらに詳細に説明するように、ベクトルp5は「述語ベクトル」とすることができる。述語ベクトルを生成するいくつかの命令は、結果としての述語を反映するようにプロセッサ状態フラグも設定する。例えば、プロセッサ状態フラグ又は条件コードは、FIRST、LAST、NONE及び/又はALLフラグを含むことができる。
述語ベクトルp5内のアクティブな(すなわちゼロでない)要素により指定されるベクトル「a」の要素のみがb+cの結果を受け取る。aの残りの要素はそのままである。この動作は「叙述」と呼ばれ、述語ベクトルの前に波形符号(“〜”)を用いて示す。
述語ベクトルp5内のアクティブな(すなわちゼロでない)要素により指定されるベクトル「a」の要素のみがb+cの結果を受け取る。aの残りの要素はゼロに設定される。この動作は「ゼロ化」と呼ばれ、述語ベクトルの前に感嘆符(“!”)を用いて示す。
VECLENは、ベクトル当たりの要素数を伝える機械値である。この値は、アセンブラにより決定されるのではなく、コードを実行するプロセッサにより実行時に決定される。
以下の例では、多くの共通プログラミング言語と同様に、コメントを示すために二重フォワードスラッシュを使用する。これらのコメントは、指示されるベクトルに含まれる値に関する情報、又は対応する例で行われる動作の説明を示すことができる。
以下のコード例1では、従来のベクトルアーキテクチャを使用する「非ベクトル化」のプログラムコードループを示す。(なお、このループは、非ベクトル化であることに加え、データ依存の微細粒性に起因して、従来のマルチスレッディングアーキテクチャ上におけるマルチスレッドが可能でない。)明確にするために、このループは、ループをベクトル化できないようにする基本的ループ伝搬依存に集約している。
[プログラムコード]
VectorReadIntは、メモリ読み取り動作を行うための命令である。データサイズによってスケーリングされるオフセットのベクトル、Offset(この場合は整数)をスカラベースアドレス、Baseに追加してメモリアドレスのベクトルを形成し、その後これを宛先ベクトル内に読み込む。命令が叙述又はゼロ化された場合、アクティブな要素に対応するアドレスのみが読み取られる。説明する実施形態では、無効なアドレスへの読み込みには失敗してもよいが、最初のアクティブなアドレスが無効である場合、このような失敗はプログラムの終了しか招かない。
VectorWriteIntは、メモリ書き込み動作を実行するための命令である。データサイズによってスケーリングされるオフセットのベクトル、Offset(この場合は整数)をスカラベースアドレス、Baseに追加してメモリアドレスのベクトルを形成する。これらのメモリアドレスに、値のベクトル、Valueが書き込まれる。この命令が叙述又はゼロ化された場合、アクティブアドレスのみにデータが書き込まれる。説明する実施形態では、違法なアドレスへの書き込みは常に失敗する。
VectorIndexは、Startによって指定されたスカラ開始値から増分によって単調に調整を行う値のベクトルを生成するための命令である。この命令は、指標調整が一定である場合にループ指標変数を初期化するために使用することができる。叙述又はゼロ化が適用された場合、最初のアクティブな要素が開始値を受け取り、次のアクティブな要素のみに増分が適用される。例えば、
[プログラムコード]
PropagatePostT命令は、predによって決定されるsrc内のアクティブな要素の値を、destの次の非アクティブな要素に伝播する。destでは、アクティブな要素、及び最初のアクティブな要素に先行するあらゆる非アクティブな要素はそのままである。この命令の目的は、条件的に計算された値を取ることであり、この条件的に計算された値を、同等のスカラーコード内に生じる次のループ反復に伝播する。例えば、
[プログラムコード]
PropagatePriorF命令は、predによって決定されるsrcの非アクティブな要素の値を、dest内の次のアクティブな要素に伝播する。非アクティブな要素はsrcからdestにコピーされる。述語の最初の要素がアクティブである場合、srcの最後の要素がその位置に伝播される。例えば、
[プログラムコード]
ConditionalStop命令は、述語のベクトル、predを評価し、depsによって指定されるデータ依存を意味する隣接する述語要素間の遷移を識別する。スカラ値depsは、4ビットのアレイと考えることができ、これらの各々は、左から右に処理した場合、pred内の真/偽の要素間の考えられる遷移を示す。これらのビットは、設定された場合には示される依存の存在を伝え、設定されていない場合には依存が存在しないことを保証する。これらには以下のものがある。
kTF−述語が真である反復から、述語の値が偽である次の反復へのループ伝搬依存を意味する。
kFF−述語が偽である反復から、述語の値が偽である次の反復へのループ伝搬依存を意味する。
kFT−述語が偽である反復から、述語の値が真である次の反復へのループ伝搬依存を意味する。
kTT−述語が真である反復から、述語の値が真である次の反復へのループ伝搬依存を意味する。
[プログラムコード]
GeneratePredicatesは、依存指標ベクトル、DIVを取り、predによって示される処理された前のグループを所与として、安全に並列に処理できる次の要素グループに対応する述語を生成する。predの要素がどれも非アクティブな場合、安全に並列に処理できる最初の要素グループに対して述語が生成される。Predが、ベクトルの最後の要素が処理されたことを示す場合、この命令は、要素を処理すべきでないことを示す非アクティブな述語の結果ベクトルを生成し、ZFフラグが設定される。結果の最後の要素がアクティブであることを示すためには、CFフラグを設定する。第1の例の値を使用すると、GeneratePredicates(述語生成)は以下のように動作する。
[プログラムコード]
前回の例では、制御フローの決定がループ伝搬依存と無関係であったため、ベクトル分割ループの開始前にベクトル区分を決定することができた。しかしながら、これがいつもそうであるとは限らない。例2A及び例2Bに示す以下の2つのループについて検討する。
[プログラムコード]
[プログラムコード]
VectorReadIntFFは、VectorReadIntの最初の失敗用の変種である。少なくとも最初のアクティブな要素が有効なアドレスである場合、この命令は失敗を生成しない。無効なアドレスに対応する結果はゼロに強制され、このデータを使用する後の命令に、述語をマスク処理するために使用できるフラグpfが戻される。アドレスの最初のアクティブな要素がマッピングされていない場合、この命令は、コンピュータシステム100(図示せず)内の仮想メモリシステムに対応するページを読み込ませることに失敗し、これによりプロセッサ102が順方向の進行を継続することが保証される。
Remaining命令は、述語のベクトル、Pred、を評価し、ベクトル内の残りの要素を計算する。これは、最後のアクティブな述語に続く非アクティブな述語の組に対応する。Pred内にアクティブな要素が存在しない場合、全てのアクティブな述語のベクトルが戻される。同様に、Predが全てのアクティブな述語のベクトルである場合、非アクティブな述語のベクトルが戻される。例えば、
[プログラムコード]
前回の例では、コンパイラが、コンパイル時にアドレスエイリアシングが存在しないことを立証することができた。しかしながら、このような決定を行うことは、困難又は不可能であることが多い。以下の例3に示すコードセグメントは、マクロスカラアーキテクチャの様々な実施形態において、メモリを通じて生じる(エイリアシングを含む可能性がある)ループ伝搬依存にどのように対処するかを示すものである。
[プログラムコード]
CheckHazardP命令は、メモリを通じた潜在的なデータ依存を求めて、2つのメモリ動作に対応するメモリアドレスの2つのベクトル(又は指標)を調べる。ベクトル「first」は、第1のメモリ動作のアドレスを保持し、ベクトル「second」は、第2の動作のアドレスを保持する。述語「pred」は、「second」のいずれの要素に対して動作すべきかを指示又は制御する。スカラループ反復が時間的に順方向に進行するにつれ、ベクトル内の左から右に、連続的反復を表すベクトル要素が現れる。CheckHazardP命令は、この文脈において評価を行うことができる。この命令は、対応する第1及び第2のメモリ動作の対の間のメモリハザードを表すDIVを計算することができる。この命令は、読み取り後の書き込み、書き込み後の読み取り、及び書き込み後の書き込みのメモリハザードを正しく評価することができる。
[プログラムコード]
[プログラムコード]
[プログラムコード]
[プログラムコード]
[プログラムコード]
上述したように、コードセグメントをベクトル化する際には、例えばメモリハザードなどの考えられるループ伝搬依存を正しく処理するために、ベクトル化を行うプログラムコード内にベクトル分割ループを使用することができる。このようなプログラムコードでは、例えば(上述した)CheckHazard命令などのマクロスカラ命令によって、DIVを生成することができ、これをベクトル分割ループの一部であるマクロスカラのGeneratePredicates(述語生成)命令によって後で使用することができる。また、ベクトル分割ループは、ループの一部として後方分岐を使用する。上述したように、この後方分岐が正確に予測される場合、処理性能を維持することができる。しかしながら、この分岐が正確に予測されない場合(多くの場合にそうである)、性能が低下することがある。従って、場合によっては、分岐の予測を抑制してDIVが利用可能になるまで待つことが有益となり得る。すなわち、いくつかの例では、DIVが利用可能になるまで実行を効果的に停止するペナルティを、ベクトル分割ループの境界を形成する分岐を誤予測するペナルティよりも低くすることができる。
[プログラムコード]
[プログラムコード]
Claims (20)
- 述語生成命令に続く最初の条件付き分岐命令を検出するステップを含み、前記最初の条件付き分岐命令は、選択時に後方に分岐し、前記述語生成命令は、実行時に、依存ベクトルに依存する述語ベクトルを生成し、前記依存ベクトルの各要素は、ベクトル命令の要素間にデータ依存が存在するかどうかを示す指標を含み、
前記最初の条件付き分岐命令の予測精度の指示を受け取るステップと、
前記予測精度の指示に基づいて前記最初の条件付き分岐命令の予測精度が閾値を満たさないと判断したことに応答して、前記述語生成命令が依存する前記依存ベクトルが利用可能になるまで前記最初の条件付き分岐命令の予測を抑制するステップと、
をさらに含むことを特徴とする方法。 - 前記依存ベクトルが利用可能であることを検出したことに応答して、前記依存ベクトル内に示されるデータ依存情報を使用して前記最初の条件付き分岐命令を予測するステップをさらに含む、
ことを特徴とする請求項1に記載の方法。 - 前記述語生成命令が、マクロスカラのGeneratePredicates命令である、
ことを特徴とする請求項1に記載の方法。 - 前記最初の条件付き分岐命令の予測を抑制するステップが、前記最初の条件付き分岐命令を予測して該予測を廃棄するステップを含む、
ことを特徴とする請求項1に記載の方法。 - 前記最初の条件付き分岐命令の予測を抑制するステップが、前記依存ベクトルが利用可能になるまで新たな命令が実行されるのを防ぐステップを含む、
ことを特徴とする請求項1に記載の方法。 - 前記最初の条件付き分岐命令の予測を抑制するステップが、前記最初の条件付き分岐命令の実行によりプログラム命令の実行を制御するフローが変化しない旨の以前に生成された予測を廃棄するステップを含む、
ことを特徴とする請求項1に記載の方法。 - 前記最初の条件付き分岐命令の各実行に応答してプログラム命令の実行を制御するフローが変化する回数を決定するために前記依存ベクトルが利用可能になった時に、該依存ベクトルを使用するステップをさらに含む、
ことを特徴とする請求項1に記載の方法。 - 前記最初の条件付き分岐命令の予測を抑制するステップが、前記依存ベクトルが利用可能になるまで新たな命令が実行パイプライン内にフェッチされるのを防ぐステップを含む、
ことを特徴とする請求項1に記載の方法。 - 前記最初の条件付き分岐命令の予測を抑制するステップが、前記依存ベクトルが利用可能になるまで新たな命令が実行されるのを防ぐステップを含む、
ことを特徴とする請求項1に記載の方法。 - 請求項1〜9のいずれかに記載のステップを実行するための1又はそれ以上の手段を備える、
ことを特徴とするプロセッサ。 - 実行命令を選択的にフェッチするように構成されたフェッチユニットと、
前記フェッチユニットに結合されて、述語生成命令に続く最初の条件付き分岐命令を検出するように構成された予測ユニットを備え、前記最初の条件付き分岐命令は、選択時に後方に分岐し、前記述語生成命令は、実行時に、依存ベクトルに依存する述語ベクトルを生成し、前記依存ベクトルの各要素は、ベクトル命令の要素間にデータ依存が存在するかどうかを示す指標を含み、
前記予測ユニットは、前記最初の条件付き分岐命令の予測精度の指示を生成するように構成されるとともに、
前記最初の条件付き分岐命令の予測精度が閾値を満たさないと判断したことに応答して、前記述語生成命令が依存する前記依存ベクトルが利用可能になるまで前記最初の条件付き分岐命令の予測を抑制するように構成される、
ことを特徴とするプロセッサ。 - 前記予測ユニットが、前記依存ベクトル内に示されるデータ依存情報を受け取ったことに応答して、前記最初の条件付き分岐命令を予測するように構成される、
ことを特徴とする請求項11に記載のプロセッサ。 - 前記フェッチユニットが、前記依存ベクトルが利用可能になるのを待っている間にストールするように構成される、
ことを特徴とする請求項11に記載のプロセッサ。 - 前記フェッチユニットに結合されて、前記依存ベクトルが利用可能になるのを待っている間に文脈を切り換えるように構成された実行ユニットをさらに備える、
ことを特徴とする請求項11に記載のプロセッサ。 - 前記予測ユニットが、前記最初の条件付き分岐の予測を生成するように構成されるとともに、前記最初の条件付き分岐の予測を抑制するために、前記最初の条件付き分岐命令の予測精度が前記閾値を満たさないと判断したことに応答して、前記最初の条件付き分岐命令の予測を廃棄するように構成される、
ことを特徴とする請求項11に記載のプロセッサ。 - 前記最初の条件付き分岐命令が、命令ループの境界を定め、前記依存ベクトルが、前記命令ループが実行される回数を示す、
ことを特徴とする請求項11に記載のプロセッサ。 - 前記予測ユニットが、前記依存ベクトルが利用可能であることを検出したことに応答して、ループフェッチ指示を与えるように構成され、前記フェッチユニットが、前記ループフェッチ指示を受け取ったことに応答して、前記命令ループの各反復のための命令をフェッチするように構成される、
ことを特徴とする請求項16に記載のプロセッサ。 - 前記最初の条件付き分岐命令の予測を抑制するために、前記予測ユニットが、前記依存ベクトルが利用可能になるまで新たな命令の実行を防ぐようにさらに構成される、
ことを特徴とする請求項11に記載のプロセッサ。 - 前記述語生成命令が、マクロスカラのGeneratePredicates命令である、
ことを特徴とする請求項11に記載のプロセッサ。 - プログラム命令を記憶するように構成されたメモリと、
前記メモリに結合された、請求項11から19のいずれかに記載のプロセッサの1又はそれ以上のインスタンスと、
を備えることを特徴とするシステム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/437,482 US9116686B2 (en) | 2012-04-02 | 2012-04-02 | Selective suppression of branch prediction in vector partitioning loops until dependency vector is available for predicate generating instruction |
US13/437,482 | 2012-04-02 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2013254484A true JP2013254484A (ja) | 2013-12-19 |
JP2013254484A5 JP2013254484A5 (ja) | 2015-01-22 |
Family
ID=48044642
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013087861A Pending JP2013254484A (ja) | 2012-04-02 | 2013-04-02 | ベクトル分割ループの性能の向上 |
Country Status (8)
Country | Link |
---|---|
US (1) | US9116686B2 (ja) |
EP (1) | EP2648090A3 (ja) |
JP (1) | JP2013254484A (ja) |
KR (1) | KR101511837B1 (ja) |
CN (1) | CN103383640B (ja) |
BR (1) | BR102013007865A2 (ja) |
TW (1) | TWI512617B (ja) |
WO (1) | WO2013151861A1 (ja) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014182796A (ja) * | 2013-03-15 | 2014-09-29 | Intel Corp | 書き込みマスク・レジスタの末尾の最下位マスキング・ビットを判定するためのシステム、装置、および方法 |
JP2017509064A (ja) * | 2014-03-28 | 2017-03-30 | インテル・コーポレーション | マスクド結果要素に伝搬する対応アンマスクド結果要素にソース要素を記憶するプロセッサ、方法、システム、及び命令 |
JP2018500659A (ja) * | 2014-12-23 | 2018-01-11 | インテル・コーポレーション | 高速ベクトルによる動的なメモリ競合検出 |
US10223113B2 (en) | 2014-03-27 | 2019-03-05 | Intel Corporation | Processors, methods, systems, and instructions to store consecutive source elements to unmasked result elements with propagation to masked result elements |
JP2022500777A (ja) * | 2018-09-18 | 2022-01-04 | アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドAdvanced Micro Devices Incorporated | ループ終了予測を用いたプロセッサのループモードの促進又は抑制 |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10241793B2 (en) | 2013-03-15 | 2019-03-26 | Analog Devices Global | Paralleizing loops in the presence of possible memory aliases |
GB2519107B (en) | 2013-10-09 | 2020-05-13 | Advanced Risc Mach Ltd | A data processing apparatus and method for performing speculative vector access operations |
GB2519108A (en) | 2013-10-09 | 2015-04-15 | Advanced Risc Mach Ltd | A data processing apparatus and method for controlling performance of speculative vector operations |
US10289417B2 (en) * | 2014-10-21 | 2019-05-14 | Arm Limited | Branch prediction suppression for blocks of instructions predicted to not include a branch instruction |
GB2540941B (en) * | 2015-07-31 | 2017-11-15 | Advanced Risc Mach Ltd | Data processing |
GB2545248B (en) | 2015-12-10 | 2018-04-04 | Advanced Risc Mach Ltd | Data processing |
GB2548602B (en) * | 2016-03-23 | 2019-10-23 | Advanced Risc Mach Ltd | Program loop control |
GB2549737B (en) * | 2016-04-26 | 2019-05-08 | Advanced Risc Mach Ltd | An apparatus and method for managing address collisions when performing vector operations |
GB2571527B (en) * | 2018-02-28 | 2020-09-16 | Advanced Risc Mach Ltd | Data processing |
US11860996B1 (en) | 2018-04-06 | 2024-01-02 | Apple Inc. | Security concepts for web frameworks |
US11403256B2 (en) * | 2019-05-20 | 2022-08-02 | Micron Technology, Inc. | Conditional operations in a vector processor having true and false vector index registers |
US11507374B2 (en) | 2019-05-20 | 2022-11-22 | Micron Technology, Inc. | True/false vector index registers and methods of populating thereof |
US11327862B2 (en) | 2019-05-20 | 2022-05-10 | Micron Technology, Inc. | Multi-lane solutions for addressing vector elements using vector index registers |
US11340904B2 (en) | 2019-05-20 | 2022-05-24 | Micron Technology, Inc. | Vector index registers |
CN115113934B (zh) * | 2022-08-31 | 2022-11-11 | 腾讯科技(深圳)有限公司 | 指令处理方法、装置、程序产品、计算机设备和介质 |
Citations (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH1185515A (ja) * | 1997-09-10 | 1999-03-30 | Ricoh Co Ltd | マイクロプロセッサ |
JP2000322257A (ja) * | 1999-05-10 | 2000-11-24 | Nec Corp | 条件分岐命令の投機的実行制御方法 |
US20010032308A1 (en) * | 1998-08-04 | 2001-10-18 | Grochowski Edward T. | Method and apparatus for performing predicate prediction |
WO2008029450A1 (fr) * | 2006-09-05 | 2008-03-13 | Fujitsu Limited | Dispositif de traitement d'informations comprenant un mécanisme de correction d'erreur de prédiction d'embranchement |
JP2008529191A (ja) * | 2005-02-03 | 2008-07-31 | クゥアルコム・インコーポレイテッド | 電力的に効率的な命令プリフェッチ機構 |
US20100042807A1 (en) * | 2008-08-15 | 2010-02-18 | Apple Inc. | Increment-propagate and decrement-propagate instructions for processing vectors |
JP2010152843A (ja) * | 2008-12-26 | 2010-07-08 | Nec Corp | 分岐予測の信頼度見積もり回路及びその方法 |
JP2010524107A (ja) * | 2007-04-10 | 2010-07-15 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プロセッサによる電力消費を低減する方法、プロセッサ、及び、情報処理システム |
US20100325398A1 (en) * | 2008-08-15 | 2010-12-23 | Apple Inc. | Running-min and running-max instructions for processing vectors |
US20100325399A1 (en) * | 2008-08-15 | 2010-12-23 | Apple Inc. | Vector test instruction for processing vectors |
US20100325483A1 (en) * | 2008-08-15 | 2010-12-23 | Apple Inc. | Non-faulting and first-faulting instructions for processing vectors |
US20110035567A1 (en) * | 2008-08-15 | 2011-02-10 | Apple Inc. | Actual instruction and actual-fault instructions for processing vectors |
US20110035568A1 (en) * | 2008-08-15 | 2011-02-10 | Apple Inc. | Select first and select last instructions for processing vectors |
US20110093681A1 (en) * | 2008-08-15 | 2011-04-21 | Apple Inc. | Remaining instruction for processing vectors |
US20110113217A1 (en) * | 2008-08-15 | 2011-05-12 | Apple Inc. | Generate predictes instruction for processing vectors |
US20110276782A1 (en) * | 2008-08-15 | 2011-11-10 | Apple Inc. | Running subtract and running divide instructions for processing vectors |
US20110283092A1 (en) * | 2008-08-15 | 2011-11-17 | Apple Inc. | Getfirst and assignlast instructions for processing vectors |
US20120060020A1 (en) * | 2008-08-15 | 2012-03-08 | Apple Inc. | Vector index instruction for processing vectors |
JP2013175201A (ja) * | 2012-02-24 | 2013-09-05 | Apple Inc | ゼロ述語分岐予測ミスにおける分岐予測ミス振舞い抑制 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5228131A (en) * | 1988-02-24 | 1993-07-13 | Mitsubishi Denki Kabushiki Kaisha | Data processor with selectively enabled and disabled branch prediction operation |
US5903750A (en) | 1996-11-20 | 1999-05-11 | Institute For The Development Of Emerging Architectures, L.L.P. | Dynamic branch prediction for branch instructions with multiple targets |
US6988183B1 (en) | 1998-06-26 | 2006-01-17 | Derek Chi-Lan Wong | Methods for increasing instruction-level parallelism in microprocessors and digital system |
WO2000011548A1 (en) * | 1998-08-24 | 2000-03-02 | Advanced Micro Devices, Inc. | Mechanism for load block on store address generation and universal dependency vector |
US7159099B2 (en) | 2002-06-28 | 2007-01-02 | Motorola, Inc. | Streaming vector processor with reconfigurable interconnection switch |
US7571302B1 (en) | 2004-02-04 | 2009-08-04 | Lei Chen | Dynamic data dependence tracking and its application to branch prediction |
US20060168432A1 (en) | 2005-01-24 | 2006-07-27 | Paul Caprioli | Branch prediction accuracy in a processor that supports speculative execution |
US20070288732A1 (en) * | 2006-06-08 | 2007-12-13 | Luick David A | Hybrid Branch Prediction Scheme |
US8006070B2 (en) | 2007-12-05 | 2011-08-23 | International Business Machines Corporation | Method and apparatus for inhibiting fetch throttling when a processor encounters a low confidence branch instruction in an information handling system |
US20100115233A1 (en) | 2008-10-31 | 2010-05-06 | Convey Computer | Dynamically-selectable vector register partitioning |
US8521996B2 (en) | 2009-02-12 | 2013-08-27 | Via Technologies, Inc. | Pipelined microprocessor with fast non-selective correct conditional branch instruction resolution |
US9176737B2 (en) | 2011-02-07 | 2015-11-03 | Arm Limited | Controlling the execution of adjacent instructions that are dependent upon a same data condition |
-
2012
- 2012-04-02 US US13/437,482 patent/US9116686B2/en active Active
-
2013
- 2013-03-28 WO PCT/US2013/034360 patent/WO2013151861A1/en active Application Filing
- 2013-03-28 EP EP13161570.0A patent/EP2648090A3/en not_active Withdrawn
- 2013-04-01 BR BRBR102013007865-4A patent/BR102013007865A2/pt not_active Application Discontinuation
- 2013-04-01 TW TW102111747A patent/TWI512617B/zh active
- 2013-04-02 JP JP2013087861A patent/JP2013254484A/ja active Pending
- 2013-04-02 KR KR20130035807A patent/KR101511837B1/ko active IP Right Grant
- 2013-04-02 CN CN201310112340.9A patent/CN103383640B/zh active Active
Patent Citations (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH1185515A (ja) * | 1997-09-10 | 1999-03-30 | Ricoh Co Ltd | マイクロプロセッサ |
US20010032308A1 (en) * | 1998-08-04 | 2001-10-18 | Grochowski Edward T. | Method and apparatus for performing predicate prediction |
JP2000322257A (ja) * | 1999-05-10 | 2000-11-24 | Nec Corp | 条件分岐命令の投機的実行制御方法 |
JP2008529191A (ja) * | 2005-02-03 | 2008-07-31 | クゥアルコム・インコーポレイテッド | 電力的に効率的な命令プリフェッチ機構 |
WO2008029450A1 (fr) * | 2006-09-05 | 2008-03-13 | Fujitsu Limited | Dispositif de traitement d'informations comprenant un mécanisme de correction d'erreur de prédiction d'embranchement |
JP2010524107A (ja) * | 2007-04-10 | 2010-07-15 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プロセッサによる電力消費を低減する方法、プロセッサ、及び、情報処理システム |
US20100049951A1 (en) * | 2008-08-15 | 2010-02-25 | Apple Inc. | Running-and, running-or, running-xor, and running-multiply instructions for processing vectors |
US20100325399A1 (en) * | 2008-08-15 | 2010-12-23 | Apple Inc. | Vector test instruction for processing vectors |
US20100042789A1 (en) * | 2008-08-15 | 2010-02-18 | Apple Inc. | Check-hazard instructions for processing vectors |
US20100042816A1 (en) * | 2008-08-15 | 2010-02-18 | Apple Inc. | Break, pre-break, and remaining instructions for processing vectors |
US20100042817A1 (en) * | 2008-08-15 | 2010-02-18 | Apple Inc. | Shift-in-right instructions for processing vectors |
US20100049950A1 (en) * | 2008-08-15 | 2010-02-25 | Apple Inc. | Running-sum instructions for processing vectors |
US20100042815A1 (en) * | 2008-08-15 | 2010-02-18 | Apple Inc. | Method and apparatus for executing program code |
US20100058037A1 (en) * | 2008-08-15 | 2010-03-04 | Apple Inc. | Running-shift instructions for processing vectors |
US20120060020A1 (en) * | 2008-08-15 | 2012-03-08 | Apple Inc. | Vector index instruction for processing vectors |
US20100042807A1 (en) * | 2008-08-15 | 2010-02-18 | Apple Inc. | Increment-propagate and decrement-propagate instructions for processing vectors |
US20100325398A1 (en) * | 2008-08-15 | 2010-12-23 | Apple Inc. | Running-min and running-max instructions for processing vectors |
US20100042818A1 (en) * | 2008-08-15 | 2010-02-18 | Apple Inc. | Copy-propagate, propagate-post, and propagate-prior instructions for processing vectors |
US20100325483A1 (en) * | 2008-08-15 | 2010-12-23 | Apple Inc. | Non-faulting and first-faulting instructions for processing vectors |
US20110035567A1 (en) * | 2008-08-15 | 2011-02-10 | Apple Inc. | Actual instruction and actual-fault instructions for processing vectors |
US20110035568A1 (en) * | 2008-08-15 | 2011-02-10 | Apple Inc. | Select first and select last instructions for processing vectors |
US20110093681A1 (en) * | 2008-08-15 | 2011-04-21 | Apple Inc. | Remaining instruction for processing vectors |
US20110113217A1 (en) * | 2008-08-15 | 2011-05-12 | Apple Inc. | Generate predictes instruction for processing vectors |
US20110276782A1 (en) * | 2008-08-15 | 2011-11-10 | Apple Inc. | Running subtract and running divide instructions for processing vectors |
US20110283092A1 (en) * | 2008-08-15 | 2011-11-17 | Apple Inc. | Getfirst and assignlast instructions for processing vectors |
JP2010152843A (ja) * | 2008-12-26 | 2010-07-08 | Nec Corp | 分岐予測の信頼度見積もり回路及びその方法 |
JP2013175201A (ja) * | 2012-02-24 | 2013-09-05 | Apple Inc | ゼロ述語分岐予測ミスにおける分岐予測ミス振舞い抑制 |
Non-Patent Citations (1)
Title |
---|
SRILATHA MANNE, ARTUR KLAUSER, DIRK GRUNWALD: "Pileline Gating : Speculation Control For Energy Reduction", PROCEEDINGS OF THE 25TH ANNUAL INTERNATIONAL SYMPOSIUM ON COMPUTER ARCHITECTURE, JPN6014033282, 27 June 1998 (1998-06-27), pages 132 - 141, ISSN: 0002871129 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014182796A (ja) * | 2013-03-15 | 2014-09-29 | Intel Corp | 書き込みマスク・レジスタの末尾の最下位マスキング・ビットを判定するためのシステム、装置、および方法 |
US10223113B2 (en) | 2014-03-27 | 2019-03-05 | Intel Corporation | Processors, methods, systems, and instructions to store consecutive source elements to unmasked result elements with propagation to masked result elements |
JP2017509064A (ja) * | 2014-03-28 | 2017-03-30 | インテル・コーポレーション | マスクド結果要素に伝搬する対応アンマスクド結果要素にソース要素を記憶するプロセッサ、方法、システム、及び命令 |
US10223119B2 (en) | 2014-03-28 | 2019-03-05 | Intel Corporation | Processors, methods, systems, and instructions to store source elements to corresponding unmasked result elements with propagation to masked result elements |
JP2018500659A (ja) * | 2014-12-23 | 2018-01-11 | インテル・コーポレーション | 高速ベクトルによる動的なメモリ競合検出 |
JP2022500777A (ja) * | 2018-09-18 | 2022-01-04 | アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドAdvanced Micro Devices Incorporated | ループ終了予測を用いたプロセッサのループモードの促進又は抑制 |
JP7301955B2 (ja) | 2018-09-18 | 2023-07-03 | アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド | ループ終了予測を用いたプロセッサのループモードの促進又は抑制 |
Also Published As
Publication number | Publication date |
---|---|
EP2648090A3 (en) | 2017-11-01 |
CN103383640A (zh) | 2013-11-06 |
TW201403470A (zh) | 2014-01-16 |
WO2013151861A1 (en) | 2013-10-10 |
US9116686B2 (en) | 2015-08-25 |
CN103383640B (zh) | 2016-02-10 |
KR20130112009A (ko) | 2013-10-11 |
US20130262833A1 (en) | 2013-10-03 |
EP2648090A2 (en) | 2013-10-09 |
BR102013007865A2 (pt) | 2015-07-07 |
KR101511837B1 (ko) | 2015-04-13 |
TWI512617B (zh) | 2015-12-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101511837B1 (ko) | 벡터 분할 루프들의 성능 향상 | |
KR101417597B1 (ko) | 제로 프레디케이트 브랜치 예측실패에 대한 브랜치 예측실패 거동 억제 | |
US8359460B2 (en) | Running-sum instructions for processing vectors using a base value from a key element of an input vector | |
US8417921B2 (en) | Running-min and running-max instructions for processing vectors using a base value from a key element of an input vector | |
US8793472B2 (en) | Vector index instruction for generating a result vector with incremental values based on a start value and an increment value | |
US8271832B2 (en) | Non-faulting and first-faulting instructions for processing vectors | |
US8447956B2 (en) | Running subtract and running divide instructions for processing vectors | |
TWI494851B (zh) | 用於推測式述詞指令之功能單元、處理器及方法 | |
US8959316B2 (en) | Actual instruction and actual-fault instructions for processing vectors | |
US8984262B2 (en) | Generate predicates instruction for processing vectors | |
US9182959B2 (en) | Predicate count and segment count instructions for processing vectors | |
US9389860B2 (en) | Prediction optimizations for Macroscalar vector partitioning loops | |
US20110035568A1 (en) | Select first and select last instructions for processing vectors | |
US20100325399A1 (en) | Vector test instruction for processing vectors | |
US20110283092A1 (en) | Getfirst and assignlast instructions for processing vectors | |
US9715386B2 (en) | Conditional stop instruction with accurate dependency detection | |
US20130318332A1 (en) | Branch misprediction behavior suppression using a branch optional instruction | |
US9390058B2 (en) | Dynamic attribute inference |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20140806 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20141105 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20141110 |
|
A524 | Written submission of copy of amendment under article 19 pct |
Free format text: JAPANESE INTERMEDIATE CODE: A524 Effective date: 20141202 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20150105 |