JP2004062908A - 動的遅延演算情報を使用して制御投機ロードの即時遅延を制御する方法およびシステム - Google Patents

動的遅延演算情報を使用して制御投機ロードの即時遅延を制御する方法およびシステム Download PDF

Info

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
Application number
JP2003273510A
Other languages
English (en)
Other versions
JP2004062908A5 (ja
JP4137735B2 (ja
Inventor
K Ross Jonathan
ジョナサン・ケー・ロス
Dale Morris
デール・モリス
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hewlett Packard Development Co LP
Original Assignee
Hewlett Packard Development Co LP
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hewlett Packard Development Co LP filed Critical Hewlett Packard Development Co LP
Publication of JP2004062908A publication Critical patent/JP2004062908A/ja
Publication of JP2004062908A5 publication Critical patent/JP2004062908A5/ja
Application granted granted Critical
Publication of JP4137735B2 publication Critical patent/JP4137735B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3865Recovery, e.g. branch miss-prediction, exception handling using deferred exception handling, e.g. exception flags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative 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

 本発明は、最近のコンピュータプロセッサアーキテクチャによってサポートされるロード命令の静的制御投機に関し、特に、特定の例外条件と、制御投機ロード命令の実行中に発生するかまたは必要になる他の待ち時間の長い演算と、の即時遅延をトリガするために、ルーチン実行中に動的例外処理情報を使用する方法およびシステムに関する。
 本発明は、Intel(商標)IA−64プロセッサアーキテクチャ等最近のプロセッサアーキテクチャによってサポートされるロード命令の静的制御投機に関する。
 ロード命令の制御投機により、最適化を目的として、対応する元の最適化されていないコードにおいてロード命令が実行されるか否かを制御する、フロー制御ポイント、条件付分岐命令、または述語計算の上方にロード命令が配置換えされる。
 最適化されていないコードではロード命令によって占められる条件付分岐命令に相対して同じ位置にチェック命令が配置される。
 プロセッサは、チェック命令または他の非投機命令がロード命令の結果を使用するまで、配置換えされた制御投機ロード命令の実行中に発生する特定の例外を遅延させる。
 現在、ロード命令の制御投機の例外遅延戦略は、ロード命令実行中に発生する特定タイプの例外を遅延させるべきか否かをより正確に示唆しうる実行時情報の恩恵を受けることなく、コンパイラおよびオペレーティングシステムにより統計的に判定される。
 最近のプロセッサの設計者および製造業者、ならびに最近のプロセッサをベースとするコンパイラ開発者およびコンピュータシステムユーザは、投機ロードの実行中に発生するどの例外および他の待ち時間の長い演算を遅延させるべきかを実行時に判定することができる方法およびシステムの必要性を認識している。
 本方法および本システムは、投機ロード加速遅延テーブルに格納される最近の履歴に依拠する。
 待ち時間の長い演算(たとえば、主記憶装置に対するTLBミスまたはキャッシュミス)が制御投機ロード命令の実行中に必要になる場合、制御投機ロード命令に対応するエントリを求めて投機ロード加速遅延テーブルを探索する。
 エントリが見つかる場合には、投機ロード加速遅延テーブルが、制御投機ロード命令を最近実行した結果がプログラムによって使用されなかったことを示すため、待ち時間の長い演算を遅延させる。
 対照的に、制御投機ロード命令に対応するエントリが投機ロード加速遅延テーブルに見つからない場合には、考えられる例外処理も含め、待ち時間の長い演算が即座に開始される。
 非投機命令(chk.sを含む)が投機ロードの結果を使用する場合、投機ロード加速遅延テーブルを探索し、制御投機ロード命令の結果がプログラムによって最近使用されたことを示すために、対応するエントリを投機ロード加速遅延テーブルから除去する。
 本発明の別の実施形態では、投機ロード例外が遅延される場合にのみ投機ロード加速遅延テーブルにエントリが追加され、投機ロードが成功するか、または非投機命令が遅延された例外トークンを使用する場合に、テーブルからエントリが除去される。
 本発明によれば、制御投機ロード命令の実行中に、発生する例外、または必要になる別の待ち時間の長い演算を遅延させるか否かを、その制御投機ロード命令の最近の実行履歴に基づいて、実行時に判定することができる。
 本発明の一実施形態は、最近のプロセッサが、制御投機ロード命令の実行中に、発生するかまたは必要になる例外または他の待ち時間の長い演算を遅延させるか否かを実行時に判定する手段を提供する。
 現在、遅延判定は、ある時点での遅延の望ましさ、または別の時点での即時例外処理もしくは他の待ち時間の長い演算実行の望ましさを示しうる実行時の情報の恩恵を受けることなく、コンパイラによって静的に行われている。
 投機オーバヘッドを回避し、よりよく遅延方針を最適化するために、実行時状態に基づいて例外または他の待ち時間の長い演算を遅延させるか否かを判定する手段が必要である。
 ロード命令の制御投機および制御投機への現在のアーキテクチャサポートの上記欠点は、単純なプログラミング例を使用して最もよく示される。
 2クラスの非常に短いC++様の擬似コード実施態様を、2つのクラスのうちの一方の関数メンバから抽出されるforループの短い擬似アセンブリ言語版と併せて以下に示す。
 C++様擬似コードは、メンバ関数の一部の擬似アセンブリ言語版の特定の態様を詳細に考察するためのコンテキストを提供する。
 C++様擬似コードは、クラス「candidate」およびクラス「election」を実施する。
 クラス「candidate」のインスタンスは、選出に参加している候補を表し、クラス「election」のインスタンスは、候補への投票が行われて当選者が決定される選出を表す。
 この単純なC++様擬似コードは、クラス「election」の関数メンバ「winner」の一部の擬似アセンブリ言語版を考察するための例示的なコンテキストとしてのみ提供されるため、実際の使用を意図するプログラムに含められる誤り検査および機能性は省略する。
 まず、C++様擬似コードは、includeディレクティブ宣言および3つの定数宣言で始まる。
Figure 2004062908
 1行目のincludeステートメントは、各種ストリング関数を指定するヘッダファイルを含む。定数「MAX_NAME」、「MAX_BIO」、および「MAX_CANDIDATES」は、選出における候補の名前、経歴、候補数をそれぞれ含むデータアレイメンバのサイズを制限するために使用される。
Figure 2004062908
 クラス「candidate」のインスタンスは、上記の4〜7行目で宣言される以下のデータメンバを含む:
 (1)「name」−候補の名前を含むキャラクタアレイ、
 (2)「candidateNo」−識別子として候補に割り当てられる番号、
 (3)「bio」−候補の経歴を含む大きなキャラクタアレイ、および
 (4)「numVotes」−候補が集めた得票数。
 クラス「candidate」は、上記の9〜19行目において宣言される以下のメンバ関数を含む:
 (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」の宣言を提供する。
Figure 2004062908
 クラス「election」のインスタンスは、上記の4〜5行目に宣言される以下の2つのデータメンバを含む:(1)「candidates」−クラス「candidate」のいくつかのインスタンスを含むデータアレイメンバ、および(2)「num」−データアレイメンバ「candidates」中のクラス「candidates」のインスタンス数を含む整数。
 クラス「election」は、上記の7〜13行目に宣言される以下の関数メンバを含む:(1)「addCandidate」−候補を選出に追加する関数メンバ、(2)「getCandidate」−与えられる引き数「cNo」の値に等しい識別番号が割り当てられたクラス「candidate」のインスタンスにポインタを戻す関数メンバ、(3)「vote」−名前が引き数「c」として与えられるストリングを含む候補に投票する関数メンバ、(4)「winnder」−選出の当選者を選ぶ関数メンバ、ならびに(5)クラス「election」のコンストラクタおよびデコンストラクタ。
 クラス「candidate」の関数メンバの実施態様の大半は、クラスdeclarationにおいて指定されるインライン関数である。
 1つの例外は、以下に提供する、クラス「candidate」のコンストラクタである。
Figure 2004062908
 クラス「election」の関数メンバ「addCandidate」の実施態様を以下に提供する。
Figure 2004062908
 関数メンバ「addCandidate」は、単に、与えられる名前および経歴を引き数「c」および「b」として、データアレイ「candidates」に格納されるクラス「candidates」のインスタンスにセットし、新しい候補の追加を反映するようにデータメンバ「num」を増分する。
 クラス「election」の関数メンバ「vote」の実施態様を以下に提供する。  
Figure 2004062908
 関数メンバ「vote」は、4〜7行目のforループ中のデータアレイメンバ「candidates」中のクラス「candidate」のすべてのインスタンスを通して反復し、名前が引き数「c」として提供されるサブストリングを含む候補のデータメンバ「numVotes」を増分する。
 クラス「election」の関数メンバ「winner」の実施態様を以下に提供する。
Figure 2004062908
 関数メンバ「winner」は、クラス「candidate」のすべてのインスタンスおよび5〜12行目のforループ中のデータアレイメンバ「candidates」を通して反復し、最大数の投票を含むクラス「candidate」のインスタンスを求めて探索する。
 現在考慮しているクラス「candidate」のインスタンスが、7行目の関数メンバ「winner」によって決定されるように、ローカル変数「maxVotes」に格納されている値よりも多くの得票数を有する場合、現在考慮中の候補「candidates[i]」は、5〜12行目のforループにおいて今まで考慮されていた最大数の投票を有する候補であり、9〜10行目のステートメントが実行される。
 ローカル変数「res」は、現在考慮中の候補に割り当てられた番号にセットされ、ローカル変数「maxVotes」は、現在考慮中の候補「candidates[i]」が選出中に取得した得票数にセットされる。5〜12行目のforループの完了後、13行目で選出の当選者の名前が戻される。
 最後に、クラス「election」のコンストラクタを提供する。
Figure 2004062908
 以下の考察では、上述したクラス「election」の関数メンバ「winner」からの例示的なforループに焦点をあてる。
Figure 2004062908
 このforループの考えられる擬似アセンブリ言語版を以下に提供する。
Figure 2004062908
 上記擬似アセンブリ言語コードの冒頭にあるコメント行には、レジスタ「r1」〜「r9」の定義が、上述した対応するC++様擬似コードのデータメンバおよびローカル変数に関して提供される。
 したがって、レジスタ「r1」のコンテンツは、クラス「election」の関連するインスタンスが開始するメモリアドレスを含み、レジスタ「r2」および「r3」のコンテンツは、クラス「election」のインスタンス内のデータメンバ「num」および「candidates」のオフセットである。
 レジスタ「r4」のコンテンツは、クラス「candidate」のインスタンスの、バイト単位でのサイズを含む。
 レジスタ「r5」および「r6」のコンテンツは、クラス「candidate」のインスタンス内のデータメンバ「candidateNo」および「numVotes」それぞれのオフセットを含む。
 レジスタ「r7」および「r9」は、それぞれローカル変数「maxVotes」、「i」、および「res」を表す。
 1行目において、レジスタ「r8」のコンテンツが0にセットされ、上記例示的なforループの5行目のforループ変数「i」のC++様擬似コード初期化を実施する。
 次に、2〜3行目において、レジスタ「r1」に含まれるメモリアドレスから開始するクラス「election」のインスタンスのデータメンバ「num」のメモリアドレスが計算され、レジスタ「r10」に格納され、それからデータメンバ「num」の値が、3行目のロード命令を介してメモリからフェッチされレジスタ「r11」に格納される。
 4行目において、アレイ「candidates」の最初の要素のアドレスが計算され、レジスタ「r12」に格納される。
 5行目において、比較命令が、レジスタ「r8」に格納されている値をレジスタ「r11」に格納されている値と比較し、上記の5行目における例示的なforループのテスト部分を実施する。
 比較ステートメントは、プレディケートレジスタ「p0」および「p1」をそれぞれテスト式のブール値およびテスト式のブール値の補数にセットする。
 プレディケートレジスタ「p1」のコンテンツによって判定されるように、iがnum以上である場合、アセンブリコードの6行目の分岐は、上記アセンブリコードの4行目で開始するループの実行の終了に進む。
 その他の場合、7〜8行目において、クラス「candidate」の現在考慮中のインスタンス「candidates[i]」のデータメンバ「numVotes」のメモリアドレスが計算され、クラス「candidate」の現在考慮中のインスタンスのデータメンバ「numVotes」に格納されている値がメモリからフェッチされ、レジスタ「r14」に格納される。
 9行目の比較命令が、クラス「candidates」の現在考慮中のインスタンスの得票数をローカル変数「maxVotes」と比較し、プレディケートレジスタ「p2」および「p3」をセットする。
 プレディケートレジスタ「p3」に格納されるように、現在考慮中の候補の得票数がローカル変数「maxVotes」のコンテンツよりも多い場合、10行目の条件分岐は、4行目で変数「i」を増分し、レジスタ「r12」を次の候補を指すようにセットした後、ループの実行を継続するように進む。
 その他の場合、ローカル変数「res」は、11行目および12行目において、現在考慮中の候補に割り当てられた番号を指すようにセットされる。
 ここで、レジスタ「r9」はローカル変数「res」に対応し、ローカル変数「maxVotes」は、13行目において、現在考慮中の候補の得票数にセットされる。
 上記擬似アセンブリ言語の12行目のロード命令の抽出を考える。
 ロード命令では一般に、16行目の移動命令等のレジスタ間命令よりも多くの数のプロセッササイクルおよび高い程度の実行待ち時間がプロセッサバスを通してのキャッシュアクセスに関わる必要がある。
 最適化コンパイラは、ロード命令をレジスタ間命令と並行して実行でき、ロード命令がアクセスする値が必要になる前に完了することができるように、実行シーケンスにおいて上方にロード命令を移そうとする。
 たとえば、11行目および12行目は、以下のように最適化コンパイラにより8行目の後直接上方に移すことができる。
Figure 2004062908
 上記第2版のアセンブリコードでは、ロードが、レジスタ「r9」に格納されている、ロード命令の結果が必要になる前に開始される。
 以下に「IA−64プロセッサ」と呼ばれるIntel(登録商標)IA−64プロセッサアーキテクチャに準拠するプロセッサ等最近のプロセッサは、命令をパイプライン化するため、またこれら最近のプロセッサは、ノンブロッキングキャッシュを使用しているため、ロード命令は後続命令と並行して実行される。
 本ケースでは、ロード命令の結果は、後続するループの終了および関数メンバ「winner」から戻るためにのみ必要である。
 しかし、ロード命令の実行中に例外が発生する場合、実行時システムは、ロード命令の結果が実際に使用されるまで、例外を遅延させる必要がある。
 そうではなく、ロード命令が、制御条件分岐により最適化されていないコードで実行されていない場合、ロード命令を上方に移すことによってアセンブリコードが最適化されていない場合には発生しない例外が、配置換えされたロード命令の実行中に発生する。
 最適化されていないプログラムが正しく実行されて完了する場合でも、最適化プログラムは条件のエラーによって失敗する可能性がある。
 たとえば、データメンバ「candidateNo」のメモリアドレスにおける11行目の条件付分岐命令、および計算されたメモリアドレスのコンテンツをフェッチする12行目のロード命令のすぐ上方にある10行目の第1版のアセンブリコードにおける条件付分岐命令を考える。
 多くの場合、現在考慮中の候補が、maxVotesの値よりも多い得票数を持たない場合、10行目の条件分岐のすぐ下方にある命令は実行されない。
 対照的に、当初は12行目にあったロード命令が当初10行目にあった条件分岐の上方に配置換えされた第2版のアセンブリコードを考えてみる。
 最適化アセンブリコードでは、ロード命令は、現在考慮されている候補がmaxValに格納されている値よりも多い得票数を有する場合のみではなく、ループの各反復中に実行される。
 最適化されていないコードにおいて、ロード命令が実行されていないループ反復において、ロード命令の例外中に例外が発生する場合、最適化アセンブリコードは、最適化されていないアセンブリコードが失敗していない場合に失敗する可能性がある。
 上記問題は、ロード命令の制御投機を提供することにより、Intel IA−64プロセッサファミリ等最近のプロセッサにおいて解消される。以下の擬似アセンブリ言語コードは、当初は12行目にあったが上方の10行目に配置換えされたロード命令の制御投機版を含む。
Figure 2004062908
 当初は11行目および12行目にあった2つの命令が、上方の9行目および10行目に配置換えされることに留意する。
 したがって、データメンバ「candidateNo」のアドレスを計算するadd命令、およびcandidateNoの値をメモリからレジスタ「r9」にロードする後続のload命令は、ここでは、当初は10行目にあったがここでは12行目にある、最適化されていない擬似アセンブリ言語抽出において2つの命令が実行されるか否かを制御する条件分岐命令の上方に移っている。
 2つの命令を上方に移すことにより、待ち時間の長いロード命令を、後続する比較命令および分岐命令と並行して実行することができるため、結果が必要なときに、その値はメモリから首尾良くすでにフェッチされていることになる。
 ここでは、新しい命令「chk.s」が、ここでは12行目の条件付き分岐命令に関して配置換えされた2つの命令が当初占めていたところと同じ場所の14行目をここでは占め、上方に移されたロード命令はここでは「ld8.s」命令になっている。
 接尾辞「.s」は、ロード命令の結果を含むレジスタが、非投機命令において続けて使用されるかまたはchk.s命令への引数として指定されるまで、ロード命令の実行中に発生する特定の例外をプロセッサが遅延させる制御投機ロードを示す。
 14行目のchk.s命令は、前に実行された10行目のロード命令が、例外なく首尾良く完了したかどうかをチェックして調べる。
 例外が発生しなかった場合、プロセッサは、chk.s命令に続く次の命令を実行することによって継続する。
 しかし、10行目のロード命令の前の実行中に例外が発生した場合、分岐は18行目のラベル「RECVR」とラベルづけられた命令にとられる。
 ラベル「RECVR」はリカバリブロックをラベル付けし、リカバリブロックでは、ラベル「CONTIN」でラベル付けられる、15行目の増分命令であるステートメントに分岐して戻る前にロード命令が再発行される。
 したがって、10行目のロード命令が例外なしで実行される場合、最適化コードと最適化されていないコードの実行の唯一の相違は、後続する命令と並列に実行し、最終的に命令実行待ち時間を減らすために、ロード命令がループ中でより初期に開始されることである。
 しかし、ロード命令の実行が例外を発生する場合、chk.s命令の位置によって決まる、最適化されていないロード命令が実行される命令ストリームでの時点まで、その例外は遅延される。
 この時点において、分岐がリカバリブロックにとられ、ロードが再実行される。
 ロードの実行がリカバリブロック内で継続する場合、コードは、初期ロード実行が例外を発生しなかったかのように実行するが、ロードが再び失敗する場合、例外が即座に発生し、適宜処理される。
 制御投機は、各種レジスタおよびレジスタフィールドをレジスタセット内に追加することにより、ならびにプロセッサに含められる制御投機ロジックにより、IA−64プロセッサにおいて可能になった。
 図1は、IA−64プロセッサの中の汎用64ビット整数レジスタの一部を示す。
 図1では、64ビット汎用整数レジスタ「r0」、「r1」、・・・が、レジスタ名でラベル付けられたレジスタ列101に示される。
 レジスタ「r0」102等の各汎用64ビット整数レジスタには、特別な1ビット属性が関連付けられている。
 これら特別な1ビット属性は、汎用レジスタ101と整列した図1の1ビットレジスタ列103に示される。
 したがって、たとえば、第1の特別な1ビット属性104が汎用レジスタ「r0」102に関連付けられる。
 特別な1ビットレジスタは「NAT」ビットと呼ばれ、これは「not−a−thing」ビットを略したものである。
 NATビットは、1ビットレジスタのセットとして実施しても、または汎用レジスタ内の予約値または余分なビットを使用して実施してもよい。
 汎用レジスタに関連付けられるNATビットは、投機ロード命令を介してレジスタをロードする間に例外が遅延された後では値「1」を有し、その他の場合には値「0」を有する。
 NATビットは、値「1」を有するNATビットのレジスタのコンテンツ、またはそのコンテンツから導出される値がレジスタに格納される場合、別のレジスタにも伝搬しうる。
 制御投機は、各種システムレジスタ内のフィールドを介して構成することが可能である。
 図2は、IA−64プロセッサ内の制御投機の構成に関わるシステムレジスタを示す。
 IA−64プロセッサは、仮想メモリアドレスについての仮想メモリ/物理メモリ変換を格納する2つの変換キャッシュを使用する。
 第1の変換キャッシュ202は、命令変換ルックアサイドバッファ(「ITLB」)であり、命令の仮想メモリアドレスについての仮想メモリ/物理メモリ変換を格納する。
 データ変換ルックアサイドバッファ(「DTLB」)204は、メモリ内のデータの仮想メモリアドレスについての仮想メモリ/物理メモリ変換を格納する。
 ITLBエントリ203等のITLBエントリでは、「ITLB.ed」と呼ばれるビットフィールド205が、投機実行された命令のリカバリコードがあるか否かを示す。
 フィールド「ITLB.ed」が値「1」を有する場合、投機ロード命令の実行中に発生する遅延例外のリカバリコードがコードに挿入されている。
 同様に、仮想メモリデータアドレスの変換を表すDTLBエントリ206等のDTLBエントリは、対応する仮想マッピングページの投機的特徴、キャッシャビリティ(cacheability)特徴、およびライトポリシー特徴を示すフィールド「DTLB.ma」207を含む。
 プロセッサはフィールド「DTLB.ma」を使用して、例外を遅延すべきか否かを判定することができる。
 たとえば、アクセスに副作用が伴う可能性があり、また失敗した演算を再試行すべきではない仮想メモリをI/O装置にマッピングすることができる。
 プロセッサ状態レジスタ(「PSR」)210は、プロセッサが制御投機ロード命令の実行中に発生する特定の例外を遅延するか否かを制御する3ビットフィールドを含む。
 ビットフィールド「PSRic」が値0を有する場合、制御投機ロード実行中に発生するすべての例外が遅延される。
 これは、例外の即時処理が不都合なオペレーティングシステムルーチンにとって有益な処理モードである。
 ビットフィールド「PSR.it」は、64ビット命令アドレスが仮想アドレスであるか、それとも物理アドレスであるかを示す。
 このビットフィールドが値「0」を有する場合、プロセッサは投機ロード命令からの例外を即時遅延しない。
 最後に、ビットフィールド「PSR.ed」が値「0」を有する場合、再開した制御投機ロードに対して例外遅延が強制される。
 オペレーティングシステムは、制御投機中に遅延可能な例外のタイプをある程度制御することができる。
 PSR.ic、PSR.it、およびITLB.edの値が、ロード命令の実行中にすべて1に等しい場合、発生する特定の例外タイプの例外を遅延するか否かは、特定の例外タイプに対応するDCRレジスタ214内のビット範囲212内のビットがセットされるか否かによって決まる。
 したがって、オペレーティングシステムは、特定タイプの例外を遅延に指定し、他のタイプの例外を遅延しない代わりに即時処理するように指定することができる。
 上記各種ビットフィールドにおける値に応答してのIA−64の厳密な振る舞いの詳細は、本発明の背景を提供するために必要な考察の範囲を超えている。
 こういった詳細は、Intel発行のIntel IA−64アーキテクチャソフトウェアデベロッパーズマニュアル第1〜4巻から得ることができる。
 しかし、汎用レジスタに関連付けられるNATビット、ならびに浮動小数点レジスタに関連する同様の符号化は、投機ロード実行中の例外の発生にフラグを立て、投機ロード命令の実行に関するプロセッサの振る舞いは、特定のシステムレジスタを介して構成可能であり、投機ロード命令の実行中に発生しうる特定の例外は、遅延するかまたは即座に発生させるようにDCRレジスタを介して構成しうることに留意することが重要である。
 また、NATビットは、セットされたNATビットに関連付けられたレジスタのコンテンツが移された、またはセットされたNATビットに関連付けられたレジスタに格納される値から導出される結果が格納されるレジスタに伝播することにも留意されたい。
 NATビットの伝播は、遅延された投機ロードから生じる無効なレジスタコンテンツが、無効なレジスタコンテンツを別のレジスタに転送する結果として使用されないように確実にする。
 図3は、制御投機整数ロード命令の処理を表すフロー制御図である。
 ステップ302において、プロセッサがロード演算を開始する。
 ステップ304において、プロセッサは、例外条件がロード演算処理中に発生したか否かを判定する。
 例外条件が発生していない場合、制御投機ロード処理は終了し、首尾良く完了する。
 その他の場合、ステップ306において、プロセッサは発生しうる1つまたは複数の例外の中から最高優先度例外を特定し、状態レジスタをチェックして、その例外を遅延すべきか否かを判定する。
 ステップ308において判定されるように、例外がシステムレジスタ内に格納されている現構成下では遅延不可能である場合、障害が即座に発生する。
 その他の場合、ステップ310において、プロセッサは、考慮すべき例外がまだあるかどうかを判定する。
 まだある場合、制御はステップ306に戻って流れる。
 その他の場合、ステップ312において、ロード命令のターゲットレジスタに関連付けられたNATビットが値「1」にセットされ、ロード命令の実行は、例外条件の遅延で終了する。
 図4は、制御投機整数ロード命令に続くchk.s命令実行のフロー制御図である。
 ステップ402において、プロセッサが、chk.s命令において指定されるレジスタに関連付けられたNATビットをチェックして、NATビットがセットされているか否かを判定する。
 NATビットのセットは、指定レジスタに向けられたロード命令の実行前の例外発生を示す。
 ステップ404において検出されるように、NATビットがセットされる場合、プロセッサは、ステップ406において、chk.s命令において指定されるリカバリコードに分岐する。
 その他の場合、chk.s命令の実行が完了する。
 一般に、コンパイラが、制御投機命令「ld.s」および「chk.s」を使用して、条件付分岐命令および他の条件付ステートメントに関してロード命令をいつ配置換えすべきで、いつ配置換えすべきではないかの推測を試みる。
 特定の場合では、静的解析またはプロファイル情報を用いて、コンパイラは、適度な確実性をもってロード命令配置換えによりプロセッササイクルを節約し、より効率の高い最適化されたコードを生成することを判定することができる。
 他の場合では、コンパイラにより事前には知ることができない実行時値にコードの実行時の振る舞いが依存するため、タスクが不可能なことがある。
 上記C++様擬似コードルーチンは、この第2の問題のある場合の例を提供する。
 クラス「election」のインスタンスのデータアレイメンバ「candidates」中のクラス「candidate」の各インスタンスに格納されているデータのレイアウトを考える。
 図5は、メモリにおけるクラス「candidate」のインスタンスのデータ構成要素のレイアウトを示す。
 図5では、コンピュータシステムの仮想メモリの一部を、一連の仮想メモリページ501〜507として示す。
 本例では、仮想メモリページのサイズは4096バイトであるものと仮定する。
 次に、クラス「candidate」のインスタンスを考える。
 クラス「candidate」のインスタンスは、4つのデータメンバを含む。
 クラス「candidate」のインスタンスによって占められるメモリ領域は、図5において、仮想メモリの一部の仮想ページ構造上に重複して示される。
 クラス「candidate」のインスタンスによって占められるメモリの第1の部分は、データメンバ「name」510を格納する。
 クラス「candidate」のインスタンスによって占められるメモリの第2の部分は、64ビット整数データメンバ「candidateNo」512を格納する。
 クラス「candidate」のインスタンスによって占められるメモリの第3の部分は、大きなキャラクタアレイデータメンバ「bio」514を格納する。
 最後に、64ビット整数はデータメンバ「numVotes」516を含む。
 図5から見て取ることができるように、データアレイメンバ「bio」のサイズにより、データメンバ「candidateNo」512によって占められる仮想メモリは、データメンバ「numVotes」516によって占められる仮想メモリの部分とは別の仮想メモリページに存在する。
 ここでも、上記の最適化された擬似アセンブリ言語コードの抽出を考える。
 11行目のload命令は、クラス「candidates」のインスタンスについてデータメンバ「numVotes」を含むメモリの部分にアクセスする一方で、配置換えされた13行目のload命令はデータメンバ「candidateNo」を格納するメモリにアクセスする。
 図5に見られるように、これら2つのメモリアクセスは、異なる仮想メモリページへのものである。
 DTLBは固定されており、プロセッサ実施態様に依存して比較的小さなサイズである。
 仮想メモリデータアドレスの変換がDTLBにない場合、TLBミス例外が発生し、仮想ハッシュページテーブル(「VHPT」)中の変換を探索するプロセッサ機構が呼び出される。
 このため、TLBミス例外は、処理サイクル、ならびに並列処理の潜在的な割り込みの双方において相当なプロセッサオーバヘッドを生じさせる。
 変換がVHPTから見つけることができない場合には、より低速の大容量記憶装置から対応するページを物理メモリにロードするために、非常に高価なオペレーティングシステムページ不在ハンドラが呼び出される。
 2つの異なるシナリオを考える。
 以下では「シナリオ1」と呼ぶ第1のシナリオでは、選出の最終的な当選者が、データアレイメンバ「candidates」に格納されるクラス「candidate」の最初のインスタンス「candidates[0]」である。
 この場合、例示的なforループの最初の反復中、3行目の条件付きステートメントが真と評価され、5行目および6行目が実行される。
 最適化されたアセンブリコードの場合、プレディケートレジスタ「p3」は値「0」を含み、15行目の条件付分岐命令は、実行を18行目に転送しない。
 代わりに、ループの最初の反復中に、介在する16行目および17行目が実行される。
 しかしその後、3行目の例示的なforループの条件付きステートメントは、プリディケートレジスタ「p3」に値「1」を常に配置する最適化アセンブリコードの14行目の比較命令に対応して常に偽に評価される。
 したがって、シナリオ1では、13行目の配置換え後のロード命令はループの各反復において実行されるが、最適化されていないコードでは、ロード命令は、ループの最初の反復中に一度だけ実行される。
 13行目のロード命令は、11行目のロードがアクセスする仮想メモリページとは異なる仮想メモリページにアクセスするため、またループが、最近アクセスされていなかったかもしれないクラス「candidate」のインスタンスの潜在的に長いアレイを横断中であるため、13行目のロード命令の各実行がTLBミス例外を引き起こす可能性が高い。
 したがって、最適化されていないコードでは発生しない多数のTLBミス例外が発生する。
 最適化されていないコードにおいて当初は15行目にあったロード命令を、最適化されたコードの13行目に配置換えすることによって、ループの最初の反復中に得られるわずかな利点は、99の潜在的な後続する不必要なTLBミス例外の欠点にまったく及ばない。
 この欠点を回避する一方法は、適切なDCRレジスタビットをTLBミス例外を遅延させるようにセットすることである。
 この場合、リカバリブロックにおいて回復する必要のあるのは、ループの最初の反復中に発生する単一のTLBミス例外のみである。
 ループのすべての後続反復について、16行目のchk.s命令は実行されず、後続するTLBミス処理は発生しない。
 しかし、「シナリオ2」と以下に呼ぶ第2のシナリオを考える。
 シナリオ2では、クラス「candidates」の100個のエンティティがデータアレイメンバ「candidates」に存在し、クラス「candidate」の各インスタンスは、データアレイ「candidates」内にインスタンスのインデックスに等しい得票数を有する。
 シナリオ2では、データアレイメンバ「candidates」中のクラス「candidate」の最後のインスタンス「candidates[99]」が、最終的に当選者と決定される。
 シナリオ2では、例示的なforループの3行目の条件付きステートメントは、例示的なforループの反復中に考慮されるクラス「candidate」の各インスタンスについて真と評価され、5行目および6行目のステートメントが例示的なforループの各反復中に実行される。
 最適化されたアセンブリコードでは、シナリオ2の下では、14行目の比較命令の実行後にプレディケートレジスタ「p3」は常に値「0」を有する。
 したがって、16行目のchk.s命令はループの各反復について実行される。
 シナリオ2では、シナリオ1において特定された問題を解消するために、TLBミス命令は遅延するように構成される。
 しかしここでは、TLBミス例外の遅延により、16行目のchk.s命令の各実行はリカバリコードへの分岐、そして並列処理の割り込みおよび追加処理オーバヘッドを伴うロード命令の再実行につながる。
 シナリオ2の下では、TLBミス事象が発生すると即座に処理でき、TLBミス例外の処理後のロード命令の並列実行を実現することができるように、TLBミス例外を遅延させないほうがよい。
 または、単純に、最初からロード命令を配置換えしないほうがよい。
 上記2つのシナリオ下でのアセンブリコード抽出によって示される問題は、TLBミス例外を遅延するか否かを判定するために、動的な実行時に利用可能な情報が必要なことである。
 シナリオ1では遅延が好ましいが、シナリオ2では遅延は好ましくなく、シナリオ1と2との間の相違は、実行時にメモリに格納されるデータに関係する。
 一般に、コンパイラはメモリのコンテンツを予測することができない。
 たとえば、メモリのコンテンツは、ユーザ入力から取得し、様々な任意の大容量記憶装置からロードすることができ、また他の場合にはプログラム実行中に決定することができる。
 不都合なことに、最近のプロセッサアーキテクチャは、ルーチンのランタイム実行中に制御投機振る舞いデータを動的に集める手段をサポートしない。
 現在のプロセッサアーキテクチャは、プロセッサが、投機ロード命令実行の最近の履歴に基づいて、投機ロード命令の実行中に発生する特定タイプの例外を遅延するか否かを実行時に判定することができる機構を提供しない。
 本発明の一実施形態は、特別なハードウェア実施テーブルを使用して、制御投機ロード命令の遅延例外の回復についての動的情報を保持する。
 本発明は、代替の実施形態では、例外のみならず、任意の待ち時間の長い演算の即時遅延に適用できることに留意されたい。
 図6および図7は、投機ロード加速遅延テーブル(「SpLADT」)の代替の実施形態を示す。
 図6に示す第1の実施形態では、SpLADT602は、IA−64プロセッサ等最近のプロセッサ内に組み込まれるビットアレイ、またはレジスタである。
 命令ポインタレジスタ(「IP」)の現在値、またはあるビット数の命令ポインタを、ハードウェアハッシュ関数において使用して、SpLADTを実施するビットアレイまたはレジスタへのインデックスを生成する。
 SpLADTエントリが値「1」を有する場合、IPの現在のコンテンツに対応する、おそらく命令アドレスにおける最近の投機ロードの結果は、使用されなかった。
 一方、値「0」は、最近の投機ロードの結果が使用されたことを示す。
 この第1のSpLADT実施形態では、エイリアシングが発生しうる。
 言い換えれば、2つの異なる投機ロード命令が同じSpLADTエントリにハッシングされてしまうことがある。
 これが発生すると、例外処理演算または他の待ち時間の長い演算の実行を遅延するか否かについて最適ではない選択が行われうる。
 エイリアシングの確率は一般に小さく、最適ではない場合であってもロード命令は正しく実行される。
 図7に示す第2の実施形態では、SpLADT604は、IA−64等の最近のプロセッサ内に組み込まれる小さなハードウェアテーブルである。
 多くの異なる代替のSpLADTフォーマットが可能である。
 SpLADTの一形態では、SpLADTは汎用レジスタ番号によってインデックス付けられ、SpLADTエントリは、インデックスの付いたレジスタをターゲットとした制御投機ロード命令の実行時のIPのコンテンツを格納する。
 SpLADTの他の形態では、SpLADTエントリは、レジスタによってインデックス付けられた単一ビットフラグ、対応するロード命令がアクセスするデータのメモリアドレス、またはメモリアドレスおよびIPコンテンツを含むことができる。
 すべての場合において、SpLADTは、最近実行された制御投機ロード命令に対応するエントリを格納するように意図される。
 以下に述べるSpLADTの一形態では、SpLADTエントリは、対応する制御投機命令が、リカバリブロックへのchk.s仲介分岐を介して回復されなかった1つまたは複数の例外を最近の実行中に生成したこと、および制御投機ロード命令のターゲットレジスタが、非投機命令によって後に使用されなかったことを示す。
 たとえば、図6に示すSpLADTフォーマットでは、汎用レジスタ「r1」に対応する最初のエントリ604における0ではない値の存在は、レジスタ「r1」に向けられたエントリ604のコンテンツによって示される仮想メモリアドレスを有する制御投機ロード命令が、後に回復されなかった例外を発生させたことを示す。
 この場合、値「0」は、対応するレジスタにエントリが存在しないことを示す識別値である。
 エントリがエイリアシングされ、したがって正しく解釈されないことも考えられる。
 エイリアシングが頻繁ではない場合、エイリアシングを無視することに弊害はほとんどないであろう。
 一般に、即時遅延は、所与の時点においてロード命令を最適化することができるが、即時遅延の失敗、または即時処理がより高い効率を提供する状況での遅延は、コードが誤って実行されることにはならず、コードの実行効率を下げるだけである。
 図8は、投機ロード加速遅延テーブルと併せて使用するようになっている変更後制御投機ロード機構のフロー制御図である。
 図8に示すステップの多くは、上記図3に示すものと同一であるため、簡略化のために再び説明はしない。
 同一ステップは、図3に使用するものと同じ符号を使用して特定する。
 代わりに、以下では相違を指摘する。
 プロセッサが、制御投機ロード実行中に発生した例外を遅延させることができないと判定するステップ308に続き、ステップ702において、プロセッサはSpLADTをチェックして、SpLADTが、現在実行中の制御投機ロード命令に対応するエントリを含むかどうかを調べる。
 かかるエントリは、図6に示すSpLADTの一形態では、IPのすべてまたは一部のコンテンツをハッシングすることにより、図7に示すSpLADTの第2の形態では、現在の制御投機ロード命令が、SpLADTへのインデックスとして指示されてSpLADTエントリを見つけるレジスタを使用し、IPの現在のコンテンツをSpLADTエントリのコンテンツと比較することによって、特定される。
 プロセッサにより、ステップ703において判定されるように、現在実行中の制御投機ロード命令に対応するエントリがSpLADT中に見つかる場合、例外は、ステップ312に流れる制御によって遅延される。
 その他の場合、対応するSpLADTエントリが見つからない場合、例外が発生する。
 ステップ312および703に続き、新しいステップ704および706が実行され、SpLADTが更新される。
 更新は、SpLADTのタイプおよび実行履歴が格納されている精度に応じて、新しいエントリの挿入、エントリの除去、またはエントリの変更を含むことができる。
 上記実施態様は例外処理に関連するが、本発明の代替の実施形態は、投機ロード演算の完了に必要でありうる他の待ち時間の長い演算の即時遅延を対象としうることに留意されたい。
 たとえば、主記憶装置へのキャッシュミス、ページテーブルアクセス、および他のタイプの演算が必要になる可能性があり、SpLADTのコンテンツに応じて遅延されるか、または遅延されない。
 かかる待ち時間の長い演算の必要性は、図8のステップ302において検出することができ、ステップ302後に、SpLADTにアクセスして演算を遅延するか否かを判定する。
 ステップ304に続き、特定の実施態様では、首尾良く完了する前にエントリをSpLADTに配置してもよく、他の実施態様では、ステップ704中にエントリをSpLADTに配置してもよいことにも留意されたい。
 言い換えれば、首尾良い完了および遅延例外完了の双方に、または遅延例外完了のみに、SpLADTエントリをセットすることが望ましい場合がある。
 図9は、投機ロード加速遅延テーブルを使用するようになっている、制御投機整数ロード命令後のchk.s命令の実行のフロー制御図である。
 図8と同様に、図9中のステップの大半は、図4に示し、図4に関連付けてすでに述べたステップと同一であるため、簡略化のために再び説明はしない。
 chk.sの変更版における新しいステップ802が、ステップ404の後に挿入される。
 ステップ802では、指定レジスタに関連付けられたNATビットがセットされていることをプロセッサが判定する。
 この場合、リカバリコードに分岐する前に、chk.s命令は、指定された制御投機ロード命令に対応する、SpLADT中のエントリを消去する。
 他の非投機命令についても実行機構を同様に変更し、そうして、遅延例外を示すためにセットされた関連するNATビットを使用してアクセスするレジスタの対応するSpLADTエントリを消去することが望ましい場合がある。
 また、NATビットと同様に、対応するレジスタが、たとえば、値をレジスタに格納するレジスタ間命令を実行することによって有効な値で上書きされる場合、SpLADTエントリを消去または変更することが望ましいことがある。
 最後に、SpLADTエントリは、そうしない場合に非関連の制御投機ロード命令に関連するものとして推測される可能性があるため、コンテキストスイッチ時にさらに取り除いてもよい。
 しかし、現実においてその確率は比較的低い。
 したがって、IA−64プロセッサは、本発明の一実施形態により、SpLADTに格納される制御投機ロード命令実行の最近の履歴に基づいて、制御投機ロード命令の実行中に発生する、普通なら遅延不可能な例外を遅延するように変更される。
 再びシナリオ1を考え、TLBミス例外が即座に処理されるように構成され、SpLADTベースの実行時遅延が可能なものと仮定する。
 ループの最初および2番目の反復では、TLBミス例外が発生し、対応するエントリがSpLADTに見つからないことから即座に処理される。
 しかし、その後、後続するループ反復では、対応するSpLADTエントリが見つかり、後続するTLBミス例外は遅延される。
 シナリオ2の下では、15行目の制御投機ロード命令に対応するSpLADTエントリは、ループのいずれの反復中でも見つからない。
 これは、ロード命令の各実行により、次に即座に処理されるTLBミス例外が発生するためである。
 本発明を特定の実施形態に関して説明したが、本発明のこの実施形態に制限する意図はない。
 本発明の精神内の変更が、当業者には自明であろう。
 たとえば、反対の意味で即時遅延を実行することも可能である。
 対応するSpLADTエントリが見つからない場合に遅延するように構成される例外は、構成に関わらず即座に発生させることができる。
 SpLADTエントリの存在の意味も同様に反転させることができ、SpLADTエントリは、対応する制御投機ロード命令について例外が最近処理されなかったことを示し、SpLADTエントリの不在は、対応する制御投機ロード命令について例外が最近処理されたことを示す。
 このような場合、特定の制御投機ロード命令の最初に実行時に、SpLADT中のエントリを入力、または消去する必要がありうる。
 上述したように、SpLADTは、エントリをより精密に特定の投機命令と相関付けられるようにする追加情報または異なるタイプの情報を含むことができる。
 たとえば、アクセスされたデータのメモリアドレスをSpLADTエントリに含めることができる。
 さらに、遅延決定を追加履歴に基づいて行うことができるように、例外が処理された回数のカウント、および例外が続けて処理されなかった回数のカウント、および制御投機ロード命令を実行した最新の一連の結果を含むより多くの情報を含むことができる。
 別の例として、待ち時間の長い演算の間の相関を検出し、SpLADTに格納することができる。
 これにより、即時遅延の予測をかかる相関に基づいて行うことができる。
 たとえば、2番目の演算の結果にアクセスするとき、最初の演算の結果に常にアクセスする場合、2番目の演算の結果に最近アクセスした場合、最初の演算の実行中に発生する例外は、即時遅延ではない。
 SpLADTは多くの異なるタイプのフォーマットを有することができ、制御投機ロード命令およびchk.s実行機構の多くの異なる変更を用いて、本発明の多くの異なる実施形態の1つを実施することができる。
 例外タイプ遅延決定を行うために、たとえば、異なるクラスの例外タイプ毎に別個のエントリを入力することによって追加情報をSpLADTに含めて、特定タイプの例外を、特定の制御投機ロード命令についての他のタイプの例外を遅延することなく即時遅延することができる。
 ロード命令以外の命令に関連する待ち時間の長い演算の即時遅延もまた、本発明の技法を用いて行うことができる。
 上記説明では、説明目的として、本発明の完全な理解を提供するために特定の名称を使用した。
 しかし、特定の詳細は本発明を実施するために必要ないことが当業者には明らかであろう。
 本発明の特定の実施形態の上記説明は、例示および説明を目的として提示されるものである。
 網羅的である、すなわち開示される厳密な形態に本発明を限定する意図はない。
 明らかに、上記教示を鑑みて多くの変更形態および変形形態が可能である。
 実施形態は、当業者が意図する特定の使用に合うように各種変更を行って本発明および各種実施形態を最もよく利用できるように、本発明の原理およびその実際の応用を最もよく説明するために図示し説明された。
 本発明の範囲は、併記の特許請求項およびその等価物によって定義されるものである。
 本発明は、コンピュータにおける命令実行制御のために利用可能である。
IA−64プロセッサの汎用64ビット整数レジスタの一部を示す図である。 IA−64プロセッサ内の制御投機の構成に関わるシステムレジスタを示す図である。 制御投機ロード命令の処理を表すフロー制御図である。 投機ロード命令後のchk.s命令の実行についてのフロー制御図である。 メモリ中のクラス「candidate」のインスタンスのデータ構成要素のレイアウトを示す図である。 投機ロード加速遅延テーブル(「SpLADT」)の代替の実施形態を示す第1の図である。 投機ロード加速遅延テーブル(「SpLADT」)の代替の実施形態を示す第2の図である。 投機ロード加速遅延テーブルと併せて使用するようになっている変更後制御投機ロード機構のフロー制御図である。 投機ロード加速遅延テーブルを使用するようになっている、制御投機ロード命令後のchk.s命令実行のフロー制御図である。
符号の説明
101・・・レジスタ列、
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)

  1.  制御投機ロード命令の実行中に発生する遅延演算の処理について、実行時に得られる情報を使用して、待ち時間の長い演算を遅延させるか否かを実行時に判定する方法であって、
     投機ロード加速遅延テーブル(602、604)を提供することと、
     特定の制御投機ロード命令の実行中に待ち時間の長い動作を検出する必要がある場合、前記投機ロード加速遅延テーブルにアクセスし(702)、前記制御投機ロード命令の最近の実行履歴に基づいて、前記待ち時間の長い演算例外を遅延するか否かを判定する(703)ことと
     を含む方法。
  2.  前記投機ロード加速遅延テーブル(602、604)に、実行中に待ち時間の長い演算を検出する必要がある前記特定の制御投機ロード命令に対応するエントリがある場合、前記待ち時間の長い演算を遅延させること(312)と、
     制御投機ロード命令が実行される場合、前記制御投機ロード命令のエントリを前記投機ロード加速遅延テーブルに配置すること(706)と、
     待ち時間の長い演算が遅延された投機ロード命令のターゲットであったレジスタのコンテンツを使用する命令を実行する場合、前記投機ロード加速遅延テーブルから対応する制御投機ロード命令についてのエントリをいずれも消去すること(802)と
     をさらに含む請求項1記載の方法。
  3.  前記投機ロード加速遅延テーブル(604)は、各汎用レジスタ毎にエントリを含み、該エントリは、前記投機ロード加速遅延テーブルへのインデックスとしてレジスタを使用することによりアクセスすることができ、
     前記投機ロード加速遅延テーブルのエントリは、特定のレジスタについてのエントリが存在しないことを示す識別値を含み、
     前記投機ロード加速遅延テーブルのエントリは、例外が制御投機ロード命令の処理中に発生したときの命令ポインタレジスタのコンテンツを含む
     請求項1記載の方法。
  4.  前記投機ロード加速遅延テーブル(602)は、命令ポインタレジスタのコンテンツのすべてまたは一部から生成される一意のハッシュ値のエントリを含み、
     該エントリは、前記ハッシュ値を前記投機ロード加速遅延テーブルへのインデックスとして使用することによってアクセスすることができ、
     前記投機ロード加速遅延テーブルは、最近実行された投機ロード命令の結果が使用されたか否かを示す単一ビットを各エントリに含む
     請求項1記載の方法。
  5.  待ち時間の長い演算が、投機ロード命令の実行中に遅延される場合、前記投機ロード命令の前記ターゲットレジスタに関連する遅延演算属性をセットすること(312)と、
     遅延演算属性を有するレジスタを使用する非投機命令が実行される場合、前記投機ロード加速遅延テーブル(602、604)から対応する制御投機ロード命令についてのエントリをいずれも消去すること(802)とをさらに含み、
     前記投機ロード加速遅延テーブルは、以下:
      待ち時間の長い演算の結果に最近アクセスした回数のカウント、
      待ち時間の長い演算の結果に最近アクセスしなかった回数のカウント、
      待ち時間の長い演算の結果アクセスにおける相関に関する情報、
      クラス単位またはタイプ単位で待ち時間の長い演算の実行後に結果にアクセスする場合があるかどうかを予測するために使用することができるタイプおよびクラス情報、
    のうちの1つまたは複数を含む追加情報を含むことができる
     請求項1記載の方法。
  6.  投機ロード加速遅延テーブル(602、604)と、
     投機ロード命令実行ロジックと
     を備え、
     前記投機ロード命令実行ロジックは、特定の制御投機ロード命令の実行中に待ち時間の長い演算を検出する必要がある場合(308)、前記投機ロード加速遅延テーブルにアクセスし(702)、前記制御投機ロード命令の最近の実行履歴に基づいて、前記待ち時間の長い演算例外を遅延させるか否かを判定する(703)
     コンピュータプロセッサ。
  7.  前記投機ロード命令実行ロジックは、
     前記投機ロード加速遅延テーブル(602、604)に、特定の制御投機ロード命令に対応するエントリがある場合、前記特定の制御投機ロード命令の実行中に待ち時間の長い演算を遅延させること(312)と、
     前記制御投機ロード命令が実行される場合、前記投機ロード加速遅延テーブルに制御投機ロード命令についてのエントリを配置すること(706)と、
     前記対応する制御投機ロード命令の結果が別の非投機命令によって使用される場合、前記投機ロード加速遅延テーブルから対応する制御投機ロード命令についてのエントリを消去すること(802)と
     を行う請求項6記載のコンピュータプロセッサ。
  8.  前記投機ロード加速遅延テーブル(604)は、各汎用レジスタ毎にエントリを含み、該エントリは、前記投機ロード加速遅延テーブルへのインデックスとしてレジスタを使用することによりアクセスすることができ、前記投機ロード加速遅延テーブルのエントリは、特定のレジスタについてのエントリが存在しないことを示す識別値を含むとともに、例外が制御投機ロード命令の処理中に発生したときの命令ポインタレジスタのコンテンツを含む
     請求項6記載のコンピュータプロセッサ。
  9.  前記投機ロード加速遅延テーブル(602)は、命令ポインタレジスタのコンテンツのすべてまたは一部から生成される一意のハッシュ値のエントリを含み、
     前記エントリは、前記ハッシュ値を前記投機ロード加速遅延テーブルへのインデックスとして使用することによってアクセスすることができ、
     前記投機ロード加速遅延テーブルは、最近実行された投機ロード命令の結果が使用されたか否かを示す単一ビットを各エントリに含む
     請求項6記載のコンピュータプロセッサ。
  10.  前記プロセッサは、待ち時間の長い演算が、投機ロード命令の実行中に遅延される(308)場合、前記投機ロード命令の前記ターゲットレジスタに関連する遅延演算属性をセット(312)し、
     遅延演算属性を有するとフラグ付けられたレジスタを使用する非投機命令が実行される場合、前記投機ロード加速遅延テーブル(602、604)から対応する制御投機ロード命令についてのエントリをいずれも消去(802)し、
     待ち時間の長い演算は、例外処理、キャッシュミス処理、ページテーブルアクセス、ならびにメモリから値をフェッチし、その値をレジスタにロードするために必要なプロセッササイクルの他にプロセッササイクルを必要とする他の演算を含み、
     前記投機ロード加速遅延テーブルは、以下:
      待ち時間の長い演算の結果に最近アクセスした回数のカウント、
      待ち時間の長い演算の結果に最近アクセスしなかった回数のカウント、
      待ち時間の長い演算の結果アクセスにおける相関に関する情報、
      クラス単位またはタイプ単位で待ち時間の長い演算の実行後に結果にアクセスする場合があるかどうかを予測するために使用することができるタイプおよびクラス情報、
    のうちの1つまたは複数を含む追加情報を含むことができる
     請求項6記載のコンピュータプロセッサ。
JP2003273510A 2002-07-29 2003-07-11 動的遅延演算情報を使用して制御投機ロードの即時遅延を制御する方法およびシステム Expired - Fee Related JP4137735B2 (ja)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 日本電気株式会社 マルチプロセッサシステム、データ依存投機実行制御装置およびその方法

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