JP2004062908A - 動的遅延演算情報を使用して制御投機ロードの即時遅延を制御する方法およびシステム - Google Patents
動的遅延演算情報を使用して制御投機ロードの即時遅延を制御する方法およびシステム Download PDFInfo
- Publication number
- JP2004062908A JP2004062908A JP2003273510A JP2003273510A JP2004062908A JP 2004062908 A JP2004062908 A JP 2004062908A JP 2003273510 A JP2003273510 A JP 2003273510A JP 2003273510 A JP2003273510 A JP 2003273510A JP 2004062908 A JP2004062908 A JP 2004062908A
- Authority
- JP
- Japan
- Prior art keywords
- speculative load
- instruction
- entry
- load instruction
- speculative
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims description 11
- 230000001133 acceleration Effects 0.000 claims abstract description 42
- 230000003111 delayed effect Effects 0.000 claims abstract description 27
- 238000012545 processing Methods 0.000 claims description 11
- 230000000875 corresponding effect Effects 0.000 description 26
- 230000006870 function Effects 0.000 description 26
- 238000013519 translation Methods 0.000 description 12
- 230000014616 translation Effects 0.000 description 12
- 238000010586 diagram Methods 0.000 description 11
- 238000011084 recovery Methods 0.000 description 10
- 230000007246 mechanism Effects 0.000 description 6
- 230000001934 delay Effects 0.000 description 5
- 230000006399 behavior Effects 0.000 description 4
- 238000000605 extraction Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 230000001276 controlling effect Effects 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000008685 targeting Effects 0.000 description 1
- 238000012546 transfer Methods 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
- G06F9/3865—Recovery, e.g. branch miss-prediction, exception handling using deferred exception handling, e.g. exception flags
-
- 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/3824—Operand accessing
- G06F9/383—Operand prefetching
-
- 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
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)
Abstract
【解決手段】 待ち時間の長い演算が制御投機ロード命令の実行中に必要になる場合、この命令に対応するエントリを求めて投機ロード加速遅延テーブルを探索する。エントリがあるときには、待ち時間の長い演算を遅延させる。この命令に対応するエントリがテーブルに見つからない場合には、待ち時間の長い演算が即座に開始される。非投機命令(chk.sを含む)が投機ロードの結果を使用する場合、テーブルを探索し、命令の結果がプログラムによって最近使用されたことを示すために、対応するエントリを投機ロード加速遅延テーブルから除去する。
【選択図】図3
Description
ロード命令の制御投機により、最適化を目的として、対応する元の最適化されていないコードにおいてロード命令が実行されるか否かを制御する、フロー制御ポイント、条件付分岐命令、または述語計算の上方にロード命令が配置換えされる。
最適化されていないコードではロード命令によって占められる条件付分岐命令に相対して同じ位置にチェック命令が配置される。
現在、ロード命令の制御投機の例外遅延戦略は、ロード命令実行中に発生する特定タイプの例外を遅延させるべきか否かをより正確に示唆しうる実行時情報の恩恵を受けることなく、コンパイラおよびオペレーティングシステムにより統計的に判定される。
待ち時間の長い演算(たとえば、主記憶装置に対するTLBミスまたはキャッシュミス)が制御投機ロード命令の実行中に必要になる場合、制御投機ロード命令に対応するエントリを求めて投機ロード加速遅延テーブルを探索する。
エントリが見つかる場合には、投機ロード加速遅延テーブルが、制御投機ロード命令を最近実行した結果がプログラムによって使用されなかったことを示すため、待ち時間の長い演算を遅延させる。
対照的に、制御投機ロード命令に対応するエントリが投機ロード加速遅延テーブルに見つからない場合には、考えられる例外処理も含め、待ち時間の長い演算が即座に開始される。
非投機命令(chk.sを含む)が投機ロードの結果を使用する場合、投機ロード加速遅延テーブルを探索し、制御投機ロード命令の結果がプログラムによって最近使用されたことを示すために、対応するエントリを投機ロード加速遅延テーブルから除去する。
本発明の別の実施形態では、投機ロード例外が遅延される場合にのみ投機ロード加速遅延テーブルにエントリが追加され、投機ロードが成功するか、または非投機命令が遅延された例外トークンを使用する場合に、テーブルからエントリが除去される。
現在、遅延判定は、ある時点での遅延の望ましさ、または別の時点での即時例外処理もしくは他の待ち時間の長い演算実行の望ましさを示しうる実行時の情報の恩恵を受けることなく、コンパイラによって静的に行われている。
投機オーバヘッドを回避し、よりよく遅延方針を最適化するために、実行時状態に基づいて例外または他の待ち時間の長い演算を遅延させるか否かを判定する手段が必要である。
2クラスの非常に短いC++様の擬似コード実施態様を、2つのクラスのうちの一方の関数メンバから抽出されるforループの短い擬似アセンブリ言語版と併せて以下に示す。
C++様擬似コードは、メンバ関数の一部の擬似アセンブリ言語版の特定の態様を詳細に考察するためのコンテキストを提供する。
クラス「candidate」のインスタンスは、選出に参加している候補を表し、クラス「election」のインスタンスは、候補への投票が行われて当選者が決定される選出を表す。
この単純なC++様擬似コードは、クラス「election」の関数メンバ「winner」の一部の擬似アセンブリ言語版を考察するための例示的なコンテキストとしてのみ提供されるため、実際の使用を意図するプログラムに含められる誤り検査および機能性は省略する。
まず、C++様擬似コードは、includeディレクティブ宣言および3つの定数宣言で始まる。
(1)「name」−候補の名前を含むキャラクタアレイ、
(2)「candidateNo」−識別子として候補に割り当てられる番号、
(3)「bio」−候補の経歴を含む大きなキャラクタアレイ、および
(4)「numVotes」−候補が集めた得票数。
(1)「in」−引き数「c」として与えられる文字列がデータメンバ「name」に格納されている候補の名前内に含まれるか否かを判定するメンバ関数、
(2)「getName」および「setName」−データアレイメンバ「name」に対して候補の名前を格納する関数メンバおよび候補の経験を検索する関数メンバ、
(3)「getNo」および「setNo」−データメンバ「candidateNo」に対して候補に割り当てられた番号を格納する関数メンバおよび候補に割り当てられた番号を検索する関数メンバ、
(4)「getBio」および「setBio」−データアレイメンバ「bio」に対して候補の経歴を格納する関数メンバおよび候補の経験を検索する関数メンバ、
(5)「getVotes」および「incVotes」−データメンバ「numVotes」から得票数を検索する関数メンバおよびデータメンバ「numVotes」に含まれる値を1だけ増分する関数メンバ、ならびに
(6)クラス「candidate」のコンストラクタおよびデコンストラクタ。
クラス「election」は、上記の7〜13行目に宣言される以下の関数メンバを含む:(1)「addCandidate」−候補を選出に追加する関数メンバ、(2)「getCandidate」−与えられる引き数「cNo」の値に等しい識別番号が割り当てられたクラス「candidate」のインスタンスにポインタを戻す関数メンバ、(3)「vote」−名前が引き数「c」として与えられるストリングを含む候補に投票する関数メンバ、(4)「winnder」−選出の当選者を選ぶ関数メンバ、ならびに(5)クラス「election」のコンストラクタおよびデコンストラクタ。
1つの例外は、以下に提供する、クラス「candidate」のコンストラクタである。
現在考慮しているクラス「candidate」のインスタンスが、7行目の関数メンバ「winner」によって決定されるように、ローカル変数「maxVotes」に格納されている値よりも多くの得票数を有する場合、現在考慮中の候補「candidates[i]」は、5〜12行目のforループにおいて今まで考慮されていた最大数の投票を有する候補であり、9〜10行目のステートメントが実行される。
したがって、レジスタ「r1」のコンテンツは、クラス「election」の関連するインスタンスが開始するメモリアドレスを含み、レジスタ「r2」および「r3」のコンテンツは、クラス「election」のインスタンス内のデータメンバ「num」および「candidates」のオフセットである。
レジスタ「r5」および「r6」のコンテンツは、クラス「candidate」のインスタンス内のデータメンバ「candidateNo」および「numVotes」それぞれのオフセットを含む。
レジスタ「r7」および「r9」は、それぞれローカル変数「maxVotes」、「i」、および「res」を表す。
次に、2〜3行目において、レジスタ「r1」に含まれるメモリアドレスから開始するクラス「election」のインスタンスのデータメンバ「num」のメモリアドレスが計算され、レジスタ「r10」に格納され、それからデータメンバ「num」の値が、3行目のロード命令を介してメモリからフェッチされレジスタ「r11」に格納される。
5行目において、比較命令が、レジスタ「r8」に格納されている値をレジスタ「r11」に格納されている値と比較し、上記の5行目における例示的なforループのテスト部分を実施する。
プレディケートレジスタ「p1」のコンテンツによって判定されるように、iがnum以上である場合、アセンブリコードの6行目の分岐は、上記アセンブリコードの4行目で開始するループの実行の終了に進む。
9行目の比較命令が、クラス「candidates」の現在考慮中のインスタンスの得票数をローカル変数「maxVotes」と比較し、プレディケートレジスタ「p2」および「p3」をセットする。
その他の場合、ローカル変数「res」は、11行目および12行目において、現在考慮中の候補に割り当てられた番号を指すようにセットされる。
ここで、レジスタ「r9」はローカル変数「res」に対応し、ローカル変数「maxVotes」は、13行目において、現在考慮中の候補の得票数にセットされる。
ロード命令では一般に、16行目の移動命令等のレジスタ間命令よりも多くの数のプロセッササイクルおよび高い程度の実行待ち時間がプロセッサバスを通してのキャッシュアクセスに関わる必要がある。
最適化コンパイラは、ロード命令をレジスタ間命令と並行して実行でき、ロード命令がアクセスする値が必要になる前に完了することができるように、実行シーケンスにおいて上方にロード命令を移そうとする。
たとえば、11行目および12行目は、以下のように最適化コンパイラにより8行目の後直接上方に移すことができる。
以下に「IA−64プロセッサ」と呼ばれるIntel(登録商標)IA−64プロセッサアーキテクチャに準拠するプロセッサ等最近のプロセッサは、命令をパイプライン化するため、またこれら最近のプロセッサは、ノンブロッキングキャッシュを使用しているため、ロード命令は後続命令と並行して実行される。
本ケースでは、ロード命令の結果は、後続するループの終了および関数メンバ「winner」から戻るためにのみ必要である。
そうではなく、ロード命令が、制御条件分岐により最適化されていないコードで実行されていない場合、ロード命令を上方に移すことによってアセンブリコードが最適化されていない場合には発生しない例外が、配置換えされたロード命令の実行中に発生する。
たとえば、データメンバ「candidateNo」のメモリアドレスにおける11行目の条件付分岐命令、および計算されたメモリアドレスのコンテンツをフェッチする12行目のロード命令のすぐ上方にある10行目の第1版のアセンブリコードにおける条件付分岐命令を考える。
対照的に、当初は12行目にあったロード命令が当初10行目にあった条件分岐の上方に配置換えされた第2版のアセンブリコードを考えてみる。
最適化されていないコードにおいて、ロード命令が実行されていないループ反復において、ロード命令の例外中に例外が発生する場合、最適化アセンブリコードは、最適化されていないアセンブリコードが失敗していない場合に失敗する可能性がある。
したがって、データメンバ「candidateNo」のアドレスを計算するadd命令、およびcandidateNoの値をメモリからレジスタ「r9」にロードする後続のload命令は、ここでは、当初は10行目にあったがここでは12行目にある、最適化されていない擬似アセンブリ言語抽出において2つの命令が実行されるか否かを制御する条件分岐命令の上方に移っている。
ここでは、新しい命令「chk.s」が、ここでは12行目の条件付き分岐命令に関して配置換えされた2つの命令が当初占めていたところと同じ場所の14行目をここでは占め、上方に移されたロード命令はここでは「ld8.s」命令になっている。
14行目のchk.s命令は、前に実行された10行目のロード命令が、例外なく首尾良く完了したかどうかをチェックして調べる。
しかし、10行目のロード命令の前の実行中に例外が発生した場合、分岐は18行目のラベル「RECVR」とラベルづけられた命令にとられる。
ラベル「RECVR」はリカバリブロックをラベル付けし、リカバリブロックでは、ラベル「CONTIN」でラベル付けられる、15行目の増分命令であるステートメントに分岐して戻る前にロード命令が再発行される。
しかし、ロード命令の実行が例外を発生する場合、chk.s命令の位置によって決まる、最適化されていないロード命令が実行される命令ストリームでの時点まで、その例外は遅延される。
ロードの実行がリカバリブロック内で継続する場合、コードは、初期ロード実行が例外を発生しなかったかのように実行するが、ロードが再び失敗する場合、例外が即座に発生し、適宜処理される。
図1は、IA−64プロセッサの中の汎用64ビット整数レジスタの一部を示す。
図1では、64ビット汎用整数レジスタ「r0」、「r1」、・・・が、レジスタ名でラベル付けられたレジスタ列101に示される。
これら特別な1ビット属性は、汎用レジスタ101と整列した図1の1ビットレジスタ列103に示される。
特別な1ビットレジスタは「NAT」ビットと呼ばれ、これは「not−a−thing」ビットを略したものである。
汎用レジスタに関連付けられるNATビットは、投機ロード命令を介してレジスタをロードする間に例外が遅延された後では値「1」を有し、その他の場合には値「0」を有する。
NATビットは、値「1」を有するNATビットのレジスタのコンテンツ、またはそのコンテンツから導出される値がレジスタに格納される場合、別のレジスタにも伝搬しうる。
図2は、IA−64プロセッサ内の制御投機の構成に関わるシステムレジスタを示す。
IA−64プロセッサは、仮想メモリアドレスについての仮想メモリ/物理メモリ変換を格納する2つの変換キャッシュを使用する。
データ変換ルックアサイドバッファ(「DTLB」)204は、メモリ内のデータの仮想メモリアドレスについての仮想メモリ/物理メモリ変換を格納する。
ITLBエントリ203等のITLBエントリでは、「ITLB.ed」と呼ばれるビットフィールド205が、投機実行された命令のリカバリコードがあるか否かを示す。
同様に、仮想メモリデータアドレスの変換を表すDTLBエントリ206等のDTLBエントリは、対応する仮想マッピングページの投機的特徴、キャッシャビリティ(cacheability)特徴、およびライトポリシー特徴を示すフィールド「DTLB.ma」207を含む。
プロセッサはフィールド「DTLB.ma」を使用して、例外を遅延すべきか否かを判定することができる。
プロセッサ状態レジスタ(「PSR」)210は、プロセッサが制御投機ロード命令の実行中に発生する特定の例外を遅延するか否かを制御する3ビットフィールドを含む。
ビットフィールド「PSRic」が値0を有する場合、制御投機ロード実行中に発生するすべての例外が遅延される。
これは、例外の即時処理が不都合なオペレーティングシステムルーチンにとって有益な処理モードである。
このビットフィールドが値「0」を有する場合、プロセッサは投機ロード命令からの例外を即時遅延しない。
最後に、ビットフィールド「PSR.ed」が値「0」を有する場合、再開した制御投機ロードに対して例外遅延が強制される。
PSR.ic、PSR.it、およびITLB.edの値が、ロード命令の実行中にすべて1に等しい場合、発生する特定の例外タイプの例外を遅延するか否かは、特定の例外タイプに対応するDCRレジスタ214内のビット範囲212内のビットがセットされるか否かによって決まる。
したがって、オペレーティングシステムは、特定タイプの例外を遅延に指定し、他のタイプの例外を遅延しない代わりに即時処理するように指定することができる。
こういった詳細は、Intel発行のIntel IA−64アーキテクチャソフトウェアデベロッパーズマニュアル第1〜4巻から得ることができる。
しかし、汎用レジスタに関連付けられるNATビット、ならびに浮動小数点レジスタに関連する同様の符号化は、投機ロード実行中の例外の発生にフラグを立て、投機ロード命令の実行に関するプロセッサの振る舞いは、特定のシステムレジスタを介して構成可能であり、投機ロード命令の実行中に発生しうる特定の例外は、遅延するかまたは即座に発生させるようにDCRレジスタを介して構成しうることに留意することが重要である。
NATビットの伝播は、遅延された投機ロードから生じる無効なレジスタコンテンツが、無効なレジスタコンテンツを別のレジスタに転送する結果として使用されないように確実にする。
ステップ302において、プロセッサがロード演算を開始する。
ステップ304において、プロセッサは、例外条件がロード演算処理中に発生したか否かを判定する。
その他の場合、ステップ306において、プロセッサは発生しうる1つまたは複数の例外の中から最高優先度例外を特定し、状態レジスタをチェックして、その例外を遅延すべきか否かを判定する。
ステップ308において判定されるように、例外がシステムレジスタ内に格納されている現構成下では遅延不可能である場合、障害が即座に発生する。
まだある場合、制御はステップ306に戻って流れる。
その他の場合、ステップ312において、ロード命令のターゲットレジスタに関連付けられたNATビットが値「1」にセットされ、ロード命令の実行は、例外条件の遅延で終了する。
ステップ402において、プロセッサが、chk.s命令において指定されるレジスタに関連付けられたNATビットをチェックして、NATビットがセットされているか否かを判定する。
NATビットのセットは、指定レジスタに向けられたロード命令の実行前の例外発生を示す。
その他の場合、chk.s命令の実行が完了する。
特定の場合では、静的解析またはプロファイル情報を用いて、コンパイラは、適度な確実性をもってロード命令配置換えによりプロセッササイクルを節約し、より効率の高い最適化されたコードを生成することを判定することができる。
上記C++様擬似コードルーチンは、この第2の問題のある場合の例を提供する。
図5は、メモリにおけるクラス「candidate」のインスタンスのデータ構成要素のレイアウトを示す。
本例では、仮想メモリページのサイズは4096バイトであるものと仮定する。
次に、クラス「candidate」のインスタンスを考える。
クラス「candidate」のインスタンスによって占められるメモリ領域は、図5において、仮想メモリの一部の仮想ページ構造上に重複して示される。
クラス「candidate」のインスタンスによって占められるメモリの第1の部分は、データメンバ「name」510を格納する。
クラス「candidate」のインスタンスによって占められるメモリの第3の部分は、大きなキャラクタアレイデータメンバ「bio」514を格納する。
図5から見て取ることができるように、データアレイメンバ「bio」のサイズにより、データメンバ「candidateNo」512によって占められる仮想メモリは、データメンバ「numVotes」516によって占められる仮想メモリの部分とは別の仮想メモリページに存在する。
11行目のload命令は、クラス「candidates」のインスタンスについてデータメンバ「numVotes」を含むメモリの部分にアクセスする一方で、配置換えされた13行目のload命令はデータメンバ「candidateNo」を格納するメモリにアクセスする。
DTLBは固定されており、プロセッサ実施態様に依存して比較的小さなサイズである。
仮想メモリデータアドレスの変換がDTLBにない場合、TLBミス例外が発生し、仮想ハッシュページテーブル(「VHPT」)中の変換を探索するプロセッサ機構が呼び出される。
変換がVHPTから見つけることができない場合には、より低速の大容量記憶装置から対応するページを物理メモリにロードするために、非常に高価なオペレーティングシステムページ不在ハンドラが呼び出される。
以下では「シナリオ1」と呼ぶ第1のシナリオでは、選出の最終的な当選者が、データアレイメンバ「candidates」に格納されるクラス「candidate」の最初のインスタンス「candidates[0]」である。
この場合、例示的なforループの最初の反復中、3行目の条件付きステートメントが真と評価され、5行目および6行目が実行される。
代わりに、ループの最初の反復中に、介在する16行目および17行目が実行される。
しかしその後、3行目の例示的なforループの条件付きステートメントは、プリディケートレジスタ「p3」に値「1」を常に配置する最適化アセンブリコードの14行目の比較命令に対応して常に偽に評価される。
13行目のロード命令は、11行目のロードがアクセスする仮想メモリページとは異なる仮想メモリページにアクセスするため、またループが、最近アクセスされていなかったかもしれないクラス「candidate」のインスタンスの潜在的に長いアレイを横断中であるため、13行目のロード命令の各実行がTLBミス例外を引き起こす可能性が高い。
最適化されていないコードにおいて当初は15行目にあったロード命令を、最適化されたコードの13行目に配置換えすることによって、ループの最初の反復中に得られるわずかな利点は、99の潜在的な後続する不必要なTLBミス例外の欠点にまったく及ばない。
この場合、リカバリブロックにおいて回復する必要のあるのは、ループの最初の反復中に発生する単一のTLBミス例外のみである。
ループのすべての後続反復について、16行目のchk.s命令は実行されず、後続するTLBミス処理は発生しない。
シナリオ2では、クラス「candidates」の100個のエンティティがデータアレイメンバ「candidates」に存在し、クラス「candidate」の各インスタンスは、データアレイ「candidates」内にインスタンスのインデックスに等しい得票数を有する。
シナリオ2では、例示的なforループの3行目の条件付きステートメントは、例示的なforループの反復中に考慮されるクラス「candidate」の各インスタンスについて真と評価され、5行目および6行目のステートメントが例示的なforループの各反復中に実行される。
したがって、16行目のchk.s命令はループの各反復について実行される。
シナリオ2では、シナリオ1において特定された問題を解消するために、TLBミス命令は遅延するように構成される。
シナリオ2の下では、TLBミス事象が発生すると即座に処理でき、TLBミス例外の処理後のロード命令の並列実行を実現することができるように、TLBミス例外を遅延させないほうがよい。
または、単純に、最初からロード命令を配置換えしないほうがよい。
シナリオ1では遅延が好ましいが、シナリオ2では遅延は好ましくなく、シナリオ1と2との間の相違は、実行時にメモリに格納されるデータに関係する。
たとえば、メモリのコンテンツは、ユーザ入力から取得し、様々な任意の大容量記憶装置からロードすることができ、また他の場合にはプログラム実行中に決定することができる。
現在のプロセッサアーキテクチャは、プロセッサが、投機ロード命令実行の最近の履歴に基づいて、投機ロード命令の実行中に発生する特定タイプの例外を遅延するか否かを実行時に判定することができる機構を提供しない。
本発明は、代替の実施形態では、例外のみならず、任意の待ち時間の長い演算の即時遅延に適用できることに留意されたい。
図6に示す第1の実施形態では、SpLADT602は、IA−64プロセッサ等最近のプロセッサ内に組み込まれるビットアレイ、またはレジスタである。
命令ポインタレジスタ(「IP」)の現在値、またはあるビット数の命令ポインタを、ハードウェアハッシュ関数において使用して、SpLADTを実施するビットアレイまたはレジスタへのインデックスを生成する。
一方、値「0」は、最近の投機ロードの結果が使用されたことを示す。
この第1のSpLADT実施形態では、エイリアシングが発生しうる。
これが発生すると、例外処理演算または他の待ち時間の長い演算の実行を遅延するか否かについて最適ではない選択が行われうる。
エイリアシングの確率は一般に小さく、最適ではない場合であってもロード命令は正しく実行される。
多くの異なる代替のSpLADTフォーマットが可能である。
SpLADTの一形態では、SpLADTは汎用レジスタ番号によってインデックス付けられ、SpLADTエントリは、インデックスの付いたレジスタをターゲットとした制御投機ロード命令の実行時のIPのコンテンツを格納する。
すべての場合において、SpLADTは、最近実行された制御投機ロード命令に対応するエントリを格納するように意図される。
以下に述べるSpLADTの一形態では、SpLADTエントリは、対応する制御投機命令が、リカバリブロックへのchk.s仲介分岐を介して回復されなかった1つまたは複数の例外を最近の実行中に生成したこと、および制御投機ロード命令のターゲットレジスタが、非投機命令によって後に使用されなかったことを示す。
この場合、値「0」は、対応するレジスタにエントリが存在しないことを示す識別値である。
エイリアシングが頻繁ではない場合、エイリアシングを無視することに弊害はほとんどないであろう。
一般に、即時遅延は、所与の時点においてロード命令を最適化することができるが、即時遅延の失敗、または即時処理がより高い効率を提供する状況での遅延は、コードが誤って実行されることにはならず、コードの実行効率を下げるだけである。
図8に示すステップの多くは、上記図3に示すものと同一であるため、簡略化のために再び説明はしない。
同一ステップは、図3に使用するものと同じ符号を使用して特定する。
プロセッサが、制御投機ロード実行中に発生した例外を遅延させることができないと判定するステップ308に続き、ステップ702において、プロセッサはSpLADTをチェックして、SpLADTが、現在実行中の制御投機ロード命令に対応するエントリを含むかどうかを調べる。
プロセッサにより、ステップ703において判定されるように、現在実行中の制御投機ロード命令に対応するエントリがSpLADT中に見つかる場合、例外は、ステップ312に流れる制御によって遅延される。
ステップ312および703に続き、新しいステップ704および706が実行され、SpLADTが更新される。
更新は、SpLADTのタイプおよび実行履歴が格納されている精度に応じて、新しいエントリの挿入、エントリの除去、またはエントリの変更を含むことができる。
たとえば、主記憶装置へのキャッシュミス、ページテーブルアクセス、および他のタイプの演算が必要になる可能性があり、SpLADTのコンテンツに応じて遅延されるか、または遅延されない。
ステップ304に続き、特定の実施態様では、首尾良く完了する前にエントリをSpLADTに配置してもよく、他の実施態様では、ステップ704中にエントリをSpLADTに配置してもよいことにも留意されたい。
言い換えれば、首尾良い完了および遅延例外完了の双方に、または遅延例外完了のみに、SpLADTエントリをセットすることが望ましい場合がある。
図8と同様に、図9中のステップの大半は、図4に示し、図4に関連付けてすでに述べたステップと同一であるため、簡略化のために再び説明はしない。
chk.sの変更版における新しいステップ802が、ステップ404の後に挿入される。
この場合、リカバリコードに分岐する前に、chk.s命令は、指定された制御投機ロード命令に対応する、SpLADT中のエントリを消去する。
他の非投機命令についても実行機構を同様に変更し、そうして、遅延例外を示すためにセットされた関連するNATビットを使用してアクセスするレジスタの対応するSpLADTエントリを消去することが望ましい場合がある。
最後に、SpLADTエントリは、そうしない場合に非関連の制御投機ロード命令に関連するものとして推測される可能性があるため、コンテキストスイッチ時にさらに取り除いてもよい。
しかし、現実においてその確率は比較的低い。
再びシナリオ1を考え、TLBミス例外が即座に処理されるように構成され、SpLADTベースの実行時遅延が可能なものと仮定する。
しかし、その後、後続するループ反復では、対応するSpLADTエントリが見つかり、後続するTLBミス例外は遅延される。
シナリオ2の下では、15行目の制御投機ロード命令に対応するSpLADTエントリは、ループのいずれの反復中でも見つからない。
これは、ロード命令の各実行により、次に即座に処理されるTLBミス例外が発生するためである。
本発明の精神内の変更が、当業者には自明であろう。
たとえば、反対の意味で即時遅延を実行することも可能である。
対応するSpLADTエントリが見つからない場合に遅延するように構成される例外は、構成に関わらず即座に発生させることができる。
このような場合、特定の制御投機ロード命令の最初に実行時に、SpLADT中のエントリを入力、または消去する必要がありうる。
たとえば、アクセスされたデータのメモリアドレスをSpLADTエントリに含めることができる。
さらに、遅延決定を追加履歴に基づいて行うことができるように、例外が処理された回数のカウント、および例外が続けて処理されなかった回数のカウント、および制御投機ロード命令を実行した最新の一連の結果を含むより多くの情報を含むことができる。
これにより、即時遅延の予測をかかる相関に基づいて行うことができる。
たとえば、2番目の演算の結果にアクセスするとき、最初の演算の結果に常にアクセスする場合、2番目の演算の結果に最近アクセスした場合、最初の演算の実行中に発生する例外は、即時遅延ではない。
例外タイプ遅延決定を行うために、たとえば、異なるクラスの例外タイプ毎に別個のエントリを入力することによって追加情報をSpLADTに含めて、特定タイプの例外を、特定の制御投機ロード命令についての他のタイプの例外を遅延することなく即時遅延することができる。
ロード命令以外の命令に関連する待ち時間の長い演算の即時遅延もまた、本発明の技法を用いて行うことができる。
しかし、特定の詳細は本発明を実施するために必要ないことが当業者には明らかであろう。
本発明の特定の実施形態の上記説明は、例示および説明を目的として提示されるものである。
明らかに、上記教示を鑑みて多くの変更形態および変形形態が可能である。
実施形態は、当業者が意図する特定の使用に合うように各種変更を行って本発明および各種実施形態を最もよく利用できるように、本発明の原理およびその実際の応用を最もよく説明するために図示し説明された。
本発明の範囲は、併記の特許請求項およびその等価物によって定義されるものである。
102・・・レジスタ「r0」、
103・・・1ビットレジスタ列
104・・・1ビット属性、
202・・・第1の変換キャッシュ、
204・・・データ変換ルックアサイドバッファ(「DTLB」)、
210・・・プロセッサ状態レジスタ(「PSR」)、
212・・・ビット範囲、
214・・・DCRレジスタ、
510・・・データメンバ「name」、
501〜507・・・仮想メモリページ、
512・・・整数データメンバ「candidateNo」、
514・・・キャラクタアレイデータメンバ「bio」、
516・・・データメンバ「numVotes」、
602・・・SpLADT、
604・・・エントリ、
Claims (10)
- 制御投機ロード命令の実行中に発生する遅延演算の処理について、実行時に得られる情報を使用して、待ち時間の長い演算を遅延させるか否かを実行時に判定する方法であって、
投機ロード加速遅延テーブル(602、604)を提供することと、
特定の制御投機ロード命令の実行中に待ち時間の長い動作を検出する必要がある場合、前記投機ロード加速遅延テーブルにアクセスし(702)、前記制御投機ロード命令の最近の実行履歴に基づいて、前記待ち時間の長い演算例外を遅延するか否かを判定する(703)ことと
を含む方法。 - 前記投機ロード加速遅延テーブル(602、604)に、実行中に待ち時間の長い演算を検出する必要がある前記特定の制御投機ロード命令に対応するエントリがある場合、前記待ち時間の長い演算を遅延させること(312)と、
制御投機ロード命令が実行される場合、前記制御投機ロード命令のエントリを前記投機ロード加速遅延テーブルに配置すること(706)と、
待ち時間の長い演算が遅延された投機ロード命令のターゲットであったレジスタのコンテンツを使用する命令を実行する場合、前記投機ロード加速遅延テーブルから対応する制御投機ロード命令についてのエントリをいずれも消去すること(802)と
をさらに含む請求項1記載の方法。 - 前記投機ロード加速遅延テーブル(604)は、各汎用レジスタ毎にエントリを含み、該エントリは、前記投機ロード加速遅延テーブルへのインデックスとしてレジスタを使用することによりアクセスすることができ、
前記投機ロード加速遅延テーブルのエントリは、特定のレジスタについてのエントリが存在しないことを示す識別値を含み、
前記投機ロード加速遅延テーブルのエントリは、例外が制御投機ロード命令の処理中に発生したときの命令ポインタレジスタのコンテンツを含む
請求項1記載の方法。 - 前記投機ロード加速遅延テーブル(602)は、命令ポインタレジスタのコンテンツのすべてまたは一部から生成される一意のハッシュ値のエントリを含み、
該エントリは、前記ハッシュ値を前記投機ロード加速遅延テーブルへのインデックスとして使用することによってアクセスすることができ、
前記投機ロード加速遅延テーブルは、最近実行された投機ロード命令の結果が使用されたか否かを示す単一ビットを各エントリに含む
請求項1記載の方法。 - 待ち時間の長い演算が、投機ロード命令の実行中に遅延される場合、前記投機ロード命令の前記ターゲットレジスタに関連する遅延演算属性をセットすること(312)と、
遅延演算属性を有するレジスタを使用する非投機命令が実行される場合、前記投機ロード加速遅延テーブル(602、604)から対応する制御投機ロード命令についてのエントリをいずれも消去すること(802)とをさらに含み、
前記投機ロード加速遅延テーブルは、以下:
待ち時間の長い演算の結果に最近アクセスした回数のカウント、
待ち時間の長い演算の結果に最近アクセスしなかった回数のカウント、
待ち時間の長い演算の結果アクセスにおける相関に関する情報、
クラス単位またはタイプ単位で待ち時間の長い演算の実行後に結果にアクセスする場合があるかどうかを予測するために使用することができるタイプおよびクラス情報、
のうちの1つまたは複数を含む追加情報を含むことができる
請求項1記載の方法。 - 投機ロード加速遅延テーブル(602、604)と、
投機ロード命令実行ロジックと
を備え、
前記投機ロード命令実行ロジックは、特定の制御投機ロード命令の実行中に待ち時間の長い演算を検出する必要がある場合(308)、前記投機ロード加速遅延テーブルにアクセスし(702)、前記制御投機ロード命令の最近の実行履歴に基づいて、前記待ち時間の長い演算例外を遅延させるか否かを判定する(703)
コンピュータプロセッサ。 - 前記投機ロード命令実行ロジックは、
前記投機ロード加速遅延テーブル(602、604)に、特定の制御投機ロード命令に対応するエントリがある場合、前記特定の制御投機ロード命令の実行中に待ち時間の長い演算を遅延させること(312)と、
前記制御投機ロード命令が実行される場合、前記投機ロード加速遅延テーブルに制御投機ロード命令についてのエントリを配置すること(706)と、
前記対応する制御投機ロード命令の結果が別の非投機命令によって使用される場合、前記投機ロード加速遅延テーブルから対応する制御投機ロード命令についてのエントリを消去すること(802)と
を行う請求項6記載のコンピュータプロセッサ。 - 前記投機ロード加速遅延テーブル(604)は、各汎用レジスタ毎にエントリを含み、該エントリは、前記投機ロード加速遅延テーブルへのインデックスとしてレジスタを使用することによりアクセスすることができ、前記投機ロード加速遅延テーブルのエントリは、特定のレジスタについてのエントリが存在しないことを示す識別値を含むとともに、例外が制御投機ロード命令の処理中に発生したときの命令ポインタレジスタのコンテンツを含む
請求項6記載のコンピュータプロセッサ。 - 前記投機ロード加速遅延テーブル(602)は、命令ポインタレジスタのコンテンツのすべてまたは一部から生成される一意のハッシュ値のエントリを含み、
前記エントリは、前記ハッシュ値を前記投機ロード加速遅延テーブルへのインデックスとして使用することによってアクセスすることができ、
前記投機ロード加速遅延テーブルは、最近実行された投機ロード命令の結果が使用されたか否かを示す単一ビットを各エントリに含む
請求項6記載のコンピュータプロセッサ。 - 前記プロセッサは、待ち時間の長い演算が、投機ロード命令の実行中に遅延される(308)場合、前記投機ロード命令の前記ターゲットレジスタに関連する遅延演算属性をセット(312)し、
遅延演算属性を有するとフラグ付けられたレジスタを使用する非投機命令が実行される場合、前記投機ロード加速遅延テーブル(602、604)から対応する制御投機ロード命令についてのエントリをいずれも消去(802)し、
待ち時間の長い演算は、例外処理、キャッシュミス処理、ページテーブルアクセス、ならびにメモリから値をフェッチし、その値をレジスタにロードするために必要なプロセッササイクルの他にプロセッササイクルを必要とする他の演算を含み、
前記投機ロード加速遅延テーブルは、以下:
待ち時間の長い演算の結果に最近アクセスした回数のカウント、
待ち時間の長い演算の結果に最近アクセスしなかった回数のカウント、
待ち時間の長い演算の結果アクセスにおける相関に関する情報、
クラス単位またはタイプ単位で待ち時間の長い演算の実行後に結果にアクセスする場合があるかどうかを予測するために使用することができるタイプおよびクラス情報、
のうちの1つまたは複数を含む追加情報を含むことができる
請求項6記載のコンピュータプロセッサ。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/208,095 US6931515B2 (en) | 2002-07-29 | 2002-07-29 | Method and system for using dynamic, deferred operation information to control eager deferral of control-speculative loads |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2004062908A true JP2004062908A (ja) | 2004-02-26 |
JP2004062908A5 JP2004062908A5 (ja) | 2006-08-17 |
JP4137735B2 JP4137735B2 (ja) | 2008-08-20 |
Family
ID=27765831
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003273510A Expired - Fee Related JP4137735B2 (ja) | 2002-07-29 | 2003-07-11 | 動的遅延演算情報を使用して制御投機ロードの即時遅延を制御する方法およびシステム |
Country Status (3)
Country | Link |
---|---|
US (1) | US6931515B2 (ja) |
JP (1) | JP4137735B2 (ja) |
GB (1) | GB2392273B (ja) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040117606A1 (en) * | 2002-12-17 | 2004-06-17 | Hong Wang | Method and apparatus for dynamically conditioning statically produced load speculation and prefetches using runtime information |
US7308682B2 (en) * | 2003-04-25 | 2007-12-11 | Intel Corporation | Method and apparatus for recovering data values in dynamic runtime systems |
US7313790B2 (en) * | 2003-06-23 | 2007-12-25 | Intel Corporation | Methods and apparatus for preserving precise exceptions in code reordering by using control speculation |
US7975130B2 (en) * | 2008-02-20 | 2011-07-05 | International Business Machines Corporation | Method and system for early instruction text based operand store compare reject avoidance |
US7930522B2 (en) * | 2008-08-19 | 2011-04-19 | Freescale Semiconductor, Inc. | Method for speculative execution of instructions and a device having speculative execution capabilities |
WO2013095392A1 (en) * | 2011-12-20 | 2013-06-27 | Intel Corporation | Systems and method for unblocking a pipeline with spontaneous load deferral and conversion to prefetch |
US9626189B2 (en) | 2012-06-15 | 2017-04-18 | International Business Machines Corporation | Reducing operand store compare penalties |
US10481876B2 (en) * | 2017-01-11 | 2019-11-19 | Microsoft Technology Licensing, Llc | Methods and systems for application rendering |
US10459817B2 (en) * | 2017-01-18 | 2019-10-29 | International Business Machines Corporation | Evaluating performance improvement of executing instructions in a first processor over execution on a second processor |
CN112905255A (zh) * | 2019-11-19 | 2021-06-04 | 阿里巴巴集团控股有限公司 | 信息处理方法、装置及电子设备 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5692169A (en) | 1990-12-14 | 1997-11-25 | Hewlett Packard Company | Method and system for deferring exceptions generated during speculative execution |
US5881280A (en) * | 1997-07-25 | 1999-03-09 | Hewlett-Packard Company | Method and system for selecting instructions for re-execution for in-line exception recovery in a speculative execution processor |
US6889315B2 (en) * | 1999-12-17 | 2005-05-03 | Fujitsu Limited | Processor and method of controlling the same |
JP3729064B2 (ja) * | 2000-11-29 | 2005-12-21 | 日本電気株式会社 | データ依存関係検出装置 |
JP3729087B2 (ja) * | 2001-05-23 | 2005-12-21 | 日本電気株式会社 | マルチプロセッサシステム、データ依存投機実行制御装置およびその方法 |
-
2002
- 2002-07-29 US US10/208,095 patent/US6931515B2/en not_active Expired - Fee Related
-
2003
- 2003-07-11 JP JP2003273510A patent/JP4137735B2/ja not_active Expired - Fee Related
- 2003-07-18 GB GB0316908A patent/GB2392273B/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US6931515B2 (en) | 2005-08-16 |
GB0316908D0 (en) | 2003-08-20 |
GB2392273B (en) | 2005-08-10 |
JP4137735B2 (ja) | 2008-08-20 |
US20040019768A1 (en) | 2004-01-29 |
GB2392273A (en) | 2004-02-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5758051A (en) | Method and apparatus for reordering memory operations in a processor | |
US8505002B2 (en) | Translation of SIMD instructions in a data processing system | |
US9003169B2 (en) | Systems and methods for indirect register access using status-checking and status-setting instructions | |
US6631514B1 (en) | Emulation system that uses dynamic binary translation and permits the safe speculation of trapping operations | |
JP3565499B2 (ja) | コンピュータ処理システムにおいて実行述語を実現する方法及び装置 | |
US8572359B2 (en) | Runtime extraction of data parallelism | |
JP2938426B2 (ja) | 順不同ロード命令とストア命令との干渉を検出回復するための方法及び装置 | |
US6631460B1 (en) | Advanced load address table entry invalidation based on register address wraparound | |
US7437542B2 (en) | Identifying and processing essential and non-essential code separately | |
US9696995B2 (en) | Parallel execution unit that extracts data parallelism at runtime | |
US6505296B2 (en) | Emulated branch effected by trampoline mechanism | |
JP3745819B2 (ja) | ノン・フォルティング・ロード命令をインプリメントする方法及び装置 | |
US20070118696A1 (en) | Register tracking for speculative prefetching | |
US9003171B2 (en) | Page fault prediction for processing vector instructions | |
US6381691B1 (en) | Method and apparatus for reordering memory operations along multiple execution paths in a processor | |
US10338923B2 (en) | Branch prediction path wrong guess instruction | |
JP4137735B2 (ja) | 動的遅延演算情報を使用して制御投機ロードの即時遅延を制御する方法およびシステム | |
US7434004B1 (en) | Prefetch prediction | |
WO2021036173A1 (zh) | 解释执行字节码指令流的方法及装置 | |
US8683178B2 (en) | Sharing a fault-status register when processing vector instructions | |
US7191430B2 (en) | Providing instruction execution hints to a processor using break instructions | |
Shah et al. | SPSIM: SuperScalar Processor SIMulater CS305 Project Report | |
Jones | Software Prefetching for Indirect Memory Accesses | |
Kaeli et al. | Exploiting Load/Store Parallelism via Memory Dependence Prediction Andreas Moshovos University of Toronto | |
WO2011080054A1 (en) | Extraction of data parallelism |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060705 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060705 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20070216 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070302 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20070322 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20070327 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070529 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20080507 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20080604 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110613 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120613 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120613 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130613 Year of fee payment: 5 |
|
LAPS | Cancellation because of no payment of annual fees |