JPH08123685A - 推測的実行を支援する方法 - Google Patents

推測的実行を支援する方法

Info

Publication number
JPH08123685A
JPH08123685A JP7230907A JP23090795A JPH08123685A JP H08123685 A JPH08123685 A JP H08123685A JP 7230907 A JP7230907 A JP 7230907A JP 23090795 A JP23090795 A JP 23090795A JP H08123685 A JPH08123685 A JP H08123685A
Authority
JP
Japan
Prior art keywords
speculative
operations
exception
cpu
execution
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
Application number
JP7230907A
Other languages
English (en)
Inventor
Vinod K Kathail
ヴィノド・ケイ・キャサイル
Rajiv Gupta
ラジブ・グプタ
Bantwal R Rau
バントワル・アール・ラウ
Michael S Schlansker
マイケル・エス・シュランスカー
Jun William S Worley
ウィリアム・エス・ウオーレイ・ジュニア
Frederic C Amerson
フレデリック・シー・エイマーソン
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.)
HP Inc
Original Assignee
Hewlett Packard Co
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 Co filed Critical Hewlett Packard Co
Publication of JPH08123685A publication Critical patent/JPH08123685A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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 OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/30181Instruction operation extension or modification
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】プログラム実行の能率を向上させる。 【解決手段】所定の演算をその演算の実行の前にある条
件つき分岐より上に移すようプログラムのスケジューリ
ングを行い、その演算がプログラムの中で実際に使われ
るかどうかわかる前に推測的に実行し、その結果を利用
する。推測的実行にエラーなどの例外を生じたときは、
その例外の扱いは後回しにし、推測的に実行した演算が
実際に使われる場合にだけ報告され処理される。不必要
な例外処理を後回しにした推測的演算の実行によりプロ
グラムの実行速度が向上する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、コンピュータのス
ケジューリングにおけるコードの最適化、具体的には、
そのような最適化に対するアーキテクチャ上の支援に関
する。
【0002】
【従来の技術】コンピュータ・システムの性能は、コン
ピュータがいっそう速くプログラムを実行することがで
きるようにコンピュータ・プログラムのコードを最適化
することによって、向上させることができる。プログラ
ムを最適化する際のステップの1つは、スケジューリン
グと呼ばれる処理である。スケジューリングは、プログ
ラムを構成する一連のコンピュータ演算(オペレーショ
ン、命令に基づく演算、操作)が実行のために編成され
る処理である。スケジューリング処理中に、プログラム
の演算は、そのプログラムが特定の中央処理装置(CP
U)の設計に対してより効率よく実行できるように、整
理、削除、または移動される。一般的に、スケジューリ
ングには、プログラムの実行中にハードウェアによって
行われる動的スケジューリング、および、プログラムの
実行前にコンパイラによって行われる静的スケジューリ
ング、の2つの形式がある。コンピュータ・システムに
よる処理を行うために、これらの手法のどちらか、また
は双方を組み合わせた手法が、コンピュータ・プログラ
ムの演算をスケジュールするのに使われる。
【0003】コンピュータ・プログラムは、コンピュー
タ・システムのCPUによって実行される一連の命令か
らなる。典型的なプログラムは、高水準言語で書かれ、
CPUの命令セット・アーキテクチャと互換性を持つ一
連の命令にコンパイルされる。また、プログラムは、コ
ンピュータの命令セット・アーキテクチャに従って、直
接"機械語"で書くこともできる。命令セット・アーキテ
クチャは、命令の中に演算子および被演算子を含む演算
の形式すなわちコード化を規定する。CPUの構造およ
び使用されるスケジューリング手法に依存するが、各命
令は1つまたは複数の演算を持つことができる。演算
は、加算、引算、ロード、記憶、分岐等の機能を表す命
令コード(opcode)の中にコード化された演算子を含
む。さらに、演算は、被演算子および演算の結果を特定
する。これを行うために、演算は、典型的には、1つま
たは複数の被演算子のレジスタのような位置を特定する
コードを含む。CPUの実行用に、最適化手法を使用し
て編成されるのはこれらの演算である。
【0004】最適化には異なるレベルがある。最適化の
1つのレベルは、直線的コードの部分すなわち"基本ブ
ロック"(basic block)内のコードがより効率良く実行
されるように処理される局部的な最適化である。局部的
最適化手法の例は、共通部分式(common subexpressio
n)の削除および定数の伝搬である。最適化のもう一つ
のレベルは、局部的最適化手法をプログラムの中の条件
つき分岐全体にわたって延ばすことを含み、さらに、ル
ープを最適化するための変形を含む全体的な最適化であ
る。全体的最適化の1つのかたちはコードの移動であ
る。コードの移動の1つの例は、繰り返し毎に同じ値を
計算するループからコードをはずすことである。最適化
の第3のレベルは、機械に依存する最適化である。機械
依存の最適化は、CPUの特定のアーキテクチャ属性を
利用するようにコードを処理する。たとえば、CPUが
命令を同時並行して実行するパイプライン機能装置を備
えている場合、パイプライン性能が改善できるように、
コードの順序が変えられる。
【0005】プログラムを最適化するために、コード
は、推測的コードの移動(speculative code motion)
と呼ばれるスケジューリング処理で、条件つき分岐より
上に移される。推測的コードの移動は、ある命令を、そ
の命令の実行を制御する条件つき分岐より上に移すこと
を指す。"推測的"命令の実行が推測的または予想的実行
と呼ばれるのは、命令が、プログラムの中で実際に使わ
れるかどうかわかる前に、実行されるからである。推測
的コードの移動は、命令レベルの並行処理を向上させ
る。多くの命令は長い待ち時間を持つ、すなわち、命令
を実行するのにいくつかのクロック・サイクルをとるの
で、命令を推測的に実行することには利点がある。そう
しない場合に命令が起こす遅延は、命令を前もって出す
ことによって最小にすることができる。推測的コードの
移動は、また、冗長度排除のようなその他の最適化に役
立つ。
【0006】
【発明が解決しようとする課題】推測的実行は性能を向
上させる可能性を持っているが、推測的命令で生じるエ
ラーを処理する際の問題のために、いままで効果的に具
体化することができなかった。推測的命令がエラーを生
じた場合、エラーの処理を後回しにして、その推測的命
令が実際にプログラムで使われる場合にエラーの報告が
なされるようにするべきである。そのようにしなけれ
ば、元のプログラムで報告されなくてもよかったエラー
が報告され、プログラムの行動が変えられてしまう。
【0007】従来の最適化手法は、条件つき分岐を越え
てコードを移動するときの問題を効果的に扱ってこなか
った。エラーの問題を扱う1つの方法は、エラーを生じ
る可能性のある命令には推測的コードの移動を行わない
ようにすることである。この解決方法には、エラーを生
じない演算だけを移動するという重大な限界がある。も
う1つの可能な解決方法は、エラーをすべて無視するこ
とである。この方法は、エラーの処理または報告を妨げ
ることになるので、満足な解決方法にはならない。
【0008】本発明は、従来の最適化手法の欠点および
限界に対処し、推測的実行を支援する方法および装置を
提供することを目的とする。
【0009】
【課題を解決するための手段】この発明の解決課題は、
次の手段により解決される。推測的実行を支援する方法
であって、推測的演算としてコード化されていない本来
的に推測的な演算を少なくとも1つ含む推測的演算およ
び非推測的演算を備える命令セット・アーキテクチャを
用意するステップと、推測的演算を条件つき分岐より上
に移動するステップを含み、コンピュータ・プログラム
の演算をスケジュールするステップと、中央処理装置内
で演算を実行し、演算が推測的演算であり例外を生じる
場合、その例外を後回しにし、演算が非推測的演算であ
り例外を生じる場合、その例外を報告するステップと、
を有する方法。
【0010】本発明による1つの具体化の方法は、命令
セットに、推測的なバージョン、および非推測的なバー
ジョンという、演算の2つのバージョンを備えることを
含む。条件つき分岐より上に移動される演算は、推測的
演算としてコード化される。次に、推測的演算および非
推測的演算がCPUで実行される。推測的演算が例外を
生じた場合、例外の処理は後回しにされる。第1の推測
的演算の結果が第2の推測的演算の入力に使われる場
合、推測的演算の例外は伝播される。非推測的演算が例
外を生じた場合、例外は直ちに処理または報告される。
非推測的命令を実行するステップには、後回しにされた
例外を調べることを含むことができる。後回しにされた
例外が見つけられた場合、例外は報告される。
【0011】本発明の第2の具体化の方法は、命令セッ
トの中に、本来的に推測的な演算を備えることを含む。
これらの本来的に推測的な演算は、スケジューリングの
ためおよび例外を後回しにするために推測的演算として
扱われる。しかし、これらの演算は、命令コードに推測
的演算としてコード化して特定する必要はない。むし
ろ、CPUが、予定の組の演算を、本来的に推測的であ
るとして扱う。既存のプログラムとのCPUの互換性を
向上するために、CPUは、また、2つの演算のモー
ド、すなわち、予定の組の演算が本来的に推測的である
という第1のモード、および、予定の組の演算が非推測
的であるという第2のモードを含むことができる。上述
の第1の具体化と同様に、推測的演算の例外は後回しに
され、非推測的演算の例外は直ちに報告される。
【0012】推測的実行を支援する装置は、機能装置お
よびレジスタ・ファイルを含むCPUで具体化できる。
プログラムの中の演算を実行中に、CPUの機能装置
は、演算が推測的か非推測的であるかを識別する。推測
的演算が例外を生じた場合、機能装置は、レジスタ・フ
ァイルのレジスタに例外が後回しにされたことを示す情
報を記憶する。1つの具体化では、レジスタ・ファイル
のレジスタは、例外が後回しにされたかどうかを特定す
るためのエラータグを含むことができる。非推測的演算
は、後回しにされた例外を調べるために使うことができ
る。このような演算の実行中に、機能装置は、例外が後
回しにされたかどうかを判断するためにレジスタ・ファ
イルを調べる。後回しにされた例外がある場合、機能装
置は例外を報告する。
【0013】推測的実行を支援する方法と装置は、いく
つかの利点を提供する。推測的演算によって生じた例外
は、その推測的演算が実際にプログラムの中で使われな
い限り、無視される。その結果、コンピュータ・システ
ムは、全面的なエラー検出および報告能力を失うことな
く、推測的実行によってもたらされる性能の向上を得る
ことができる。1つの具体化の手法を使うことにより、
推測的実行は、いくつかの演算に対して推測的バージョ
ンおよび非推測的バージョンが用意される命令セット・
アーキテクチャの中で具体化できる。しかし、このよう
な手法が特定の命令セット・アーキテクチャで可能でな
い場合には、推測的実行は、いくつかの演算を、命令コ
ードを変えたり特別にコード化することなく本来的に推
測的であるとして扱うことによって、具体化できる。
【0014】この代替手法は、推測的実行を支援するた
めに既存の命令セット・アーキテクチャを直して(retr
ofit)使う場合に特に役に立つ。既存の装置を直すため
に、既存の命令セット・アーキテクチャで書かれたプロ
グラムとの互換性を維持しながら、CPUのハードウェ
アを推測的実行を支援するように修正することができ
る。命令セットは具体的に変えずに、その代わりに、推
測的演算によって生じた例外を後回しにしたり、後回し
にされた例外を調べるのを支援できるように演算のハー
ドウェア意味論(セマンティクス:semantics)が変え
られる。この手法では、CPUは、2つの演算モード、
すなわち演算が非推測的である第1モード、および、い
くつかの演算が本来的に推測的であるとして扱われる第
2モードを支援する。第2モードは、本来的に推測的な
演算に対しては例外が後回しにされる点において、第1
モードと異なる。これらの2つの演算モードを支援する
ことによって、CPUは、プログラムが推測的コードの
移動を使って最適化されたかどうかに拘わらず、既存の
命令セット・アーキテクチャ用にコンパイルされたプロ
グラムの二進法の形と互換性を保つことができる。
【0015】
【発明の実施の形態】本発明の具体化は、推測的実行を
支援する方法および装置を提供する。以下の記述は、推
測的実行の一般的説明から始め、次に、推測的実行を支
援するための装置について述べる。最後に、本発明の具
体化による、推測的実行を支援するための方法について
述べる。
【0016】推測的コードの移動は、同時並行処理能力
を持つCPUで効果的に使うことができる。CPUは、
別々の演算(オペレーション:演算、操作)を同時に発
行し、演算の実行をオーバラップさせることによって、
一連の演算をより速く実行することができる。典型的な
CPUは、1つの演算を段階に分けて実行する。演算を
実行するために2つ以上の機能装置を持つCPUでは、
CPUは、複数の演算を出し、同じ段階の複数の演算を
同時に実行することができる。パイプライン型のプロセ
ッサでは、CPUは、演算の各段階をアセンブリ・ライ
ンのように処理するパイプラインを含む。パイプライン
化は、プロセッサがいくつかの命令の異なる段階を同時
に実行するのを可能にすることによって、プログラムの
全体的な処理時間を減らす。CPUは、複数の機能装置
若しくはパイプラインのどちらかを持つか、または、両
方の機構を組み合わせて持つことができる。
【0017】同時並行処理CPUでは、推測的コードの
移動は、待ち時間の問題に対処することによって性能を
最適化することができる。待ち時間は、CPUが演算を
完了するのにかかる時間である。長い待ち時間を持つ演
算は、CPUが別の演算を始める前に今の演算が終わる
のを待たなければならないので、プログラムの実行を失
速させるか遅らす可能性がある。推測的コードの移動が
ない場合、CPUは、分岐条件を評価してからでない
と、分岐の後の演算をどれも出すことができない。演算
を条件つき分岐より上に移動することによって、CPU
は、前もってその演算を推測的演算として出すことがで
きる。複数の機能装置またはパイプラインを備えたCP
Uでは、CPUは、他の演算と同時に推測的演算を処理
することができる。その演算のもととなった分岐がとら
れた場合、プログラムがその演算のもとの位置に着く時
までに、演算は部分的にまたは完全に完了している。推
測的コードの移動は、演算の実行中の失速を減らすかな
くすことによって、待ち時間の問題に対処する。推測的
コードの移動は、同時処理能力を備えているプロセッサ
でとくに役に立つ。そのような装置のCPUは、一時に
複数の演算を処理する能力を持っているからである。
【0018】推測的命令を実行する処理は推測的実行と
呼ばれる。推測的コードの移動は、推測的実行を支援す
るために、様々なスケジューリング手法で具体化でき
る。推測的コードの移動は、並行処理を利用しプログラ
ムを最適化するために、複数の機能装置またはパイプラ
インを備えたCPUと共に使うことができる。推測的コ
ードの移動は、実質的にどの型のCPUのプログラムで
も最適化するために、部分冗長性削除(partial redund
ancy elimination)と共に使用することができる。推測
的実行は、スケジューリングの支援に加え、アーキテク
チャ上の支援を必要する。
【0019】推測的実行を具体化するには、2つの主要
な問題、すなわち推測的コードの移動、および例外検出
および報告の問題を扱わなければならない。本明細書で
は、推測的コードの移動とは、演算を、その演算に関連
する分岐より上に移動するために使われるスケジューリ
ング手法を指す。例外検出および報告は、推測的演算が
エラーを生じる可能性を考慮したスケジューリングに関
連し、さらに、推測的演算によって生じたエラーを検出
し報告することを指す。これらの問題はスケジューリン
グに密接に関係しているので、先ず、推測的実行を支援
するスケジューリングの文脈の中で説明する。次に、例
外検出および報告の方法について説明する。
【0020】プログラムが実行される前に、スケジュー
ラは、プログラムの処理時間を減らすために、推測的コ
ードの移動およびその他の最適化手法を用いてプログラ
ムを最適化する。スケジューラは動的または静的でよ
く、または、コンパイラおよびハードウェア・スケジュ
ーリングを組合せたものを含むものでもよい。トレース
・スケジュリング、モジュロ・スケジュリング、および
改良されたパイプライン化を含む、よく知られた多くの
スケジュリング手法のどれでも使うことができる。使用
されるスケジュリング手法に拘わらず、スケジューラ
は、推測的コードの移動を支援しなければならない。
【0021】推測的コードの移動は、演算を、本拠の基
本ブロック(home basic block)から、以前の基本ブロ
ックに移動することを含む。基本ブロックは、1つの分
岐が後にくる、直線的な演算のシーケンスである。演算
の本拠基本ブロックとは、元(original)のプログラム
の中で、その演算が存在している基本ブロックである。
ある所与の基本ブロックに対する以前の基本ブロックと
は、その所与の基本ブロックに分岐してくるすべての基
本ブロック、または、その所与の基本ブロックに先行す
る基本ブロックである。スケジューリングの間に、演算
は、分岐を越えて、以前の1組の基本ブロックに移動さ
れる。演算は、その演算の結果が使用される前に、その
演算が常に実行されるように移動される。この要求を満
たすために、先行する複数の基本ブロックに、演算を移
動することができる。推測的コード移動のこの一般的手
法は、様々なスケジューリング方法で使用することがで
きる。
【0022】複数の基本ブロックにわたってスケジュー
リングする1つの方法は、スーパーブロック・スケジュ
ーリングである。スーパーブロックは、制御が始めすな
わち最上部だけから入り、1つまたは複数のポイントで
出ることができる、演算のブロックである。スーパーブ
ロック・スケジューリングは、従属グラフ(dependence
graph)の作成、およびリスト・スケジューリングの2
つのステップからなる。従属グラフは、スーパーブロッ
クの中の演算の間の制御およびデータの従属を表す。制
御の従属を使用して、スケジュリング手法は推測的コー
ドの移動の制約に対処することができる。この文脈にお
いて、分岐より上に演算を移動する際の主要な制約は、
(1)分岐がとられて演算が再定義される前に、演算の
結果が使われないこと、および(2)分岐がとられたと
きに、演算がプログラムの結果を変えるような例外を起
こさないこと、の2つである。
【0023】スーパーブロック・モデルを使用した様々
なスケジュリング手法が、これらの一般的な推測的コー
ドの移動についての制約に対処することができる。ほと
んどのスケジューリング手法について、第1の制約は、
コンパイル時のリネーム変換を使って解決できる。制御
の従属が排除されたあと、従属グラフ、命令待ち時間、
および資源制約を使用するリスト・スケジューリング
が、演算がどのようにスケジュールされるかを決めるた
めに実行される。例外の問題は、スケジューリング手法
に基づいて異なった方法で扱われる。
【0024】例外は、演算のアンダフロー、オーバフロ
ー、未定義の命令、メモリアクセス・エラーのようなエ
ラーのことである。非推測的装置で演算が例外を起こす
と、例外は、典型的には、直ちに報告され、CPUはオ
ペレーテイング・システムの例外処理ルーチンに分岐す
る。推測的演算が直ちに例外を報告した場合、CPU
は、最終的にプログラムの実行経路になく推測的演算に
とってはおそらく不必要で意味論的に正しくないエラー
処理を実行しなければならないことになる。
【0025】推測的演算で例外を扱う望ましい方法は、
例外の報告を後回しにすることである。
【0026】例外は、演算が本拠基本ブロックで実際に
実行された場合にのみ、報告される。そのような例外を
後回しにすることによって、余計な例外処理が避けられ
る。コンピュータ・システムは性能が向上し、元のプロ
グラムの意味論は維持される。
【0027】例外を生じる推測的演算の結果が第2の推
測的演算の入力として使われる場合、例外は第2の演算
に伝搬される。例外は、エラーを生じた推測的演算の結
果を使うどの推測的演算にも伝搬される。伝搬された例
外は、プログラムの実行経路で実際に使われる演算に伝
搬された場合にだけ報告される。
【0028】例外の報告を後回しにするのを支援するた
めに、本発明の具体化による装置は、例外を後回しにす
る手段を含む。例外は、エラーが起こったという記録を
保つためにレジスタの中のバッファまたはタグを使っ
て、後回しにすることができる。装置は、また、後回し
にされた例外を報告するための手段を含む。推測的命令
の本拠ブロックは、例外が起こったかどうかを調べるた
めの演算を含む。この演算は、本拠ブロックに挿入され
た付加的なチェック・演算でもよいし、または、本拠ブ
ロックの非推測的演算に組み込まれたものでもよい。こ
れらの側面のコンピュータ・システムでの具体化につい
て次に述べる。
【0029】概略図として、図1に、本発明による装置
が具体化できるコンピュータ・システム20の一般化さ
れたブロック図を示す。コンピュータ・システム20
は、システム・バス28を介してメモリ24および1つ
または複数の周辺装置26に接続されたCPU22を持
つ。システム・バス28は、データおよび制御信号を、
CPU22、メモリ24、および周辺装置26に運ぶ。
メモリ24はランダムアクセス・メモリ(Random Acces
s Memory: RAM)をもつことが望ましいが、リードオン
リ・メモリ(Read Only Memory: ROM)、または、RA
MおよびROMを組み合わせたもので具体化してもよ
い。メモリ24は、コンピュータ・システム20で実行
される1つまたは複数のプログラムを記憶する。
【0030】図2に、本発明の具体化によるCPU22
のブロック図を示す。CPU22は、複数の機能装置3
0、1つまたは複数のレジスタ・ファイル32、および
命令装置34を含む。レジスタ・ファイル32は、典型
的には、値、アドレス、およびその他のデータを記憶す
るための、いくつかの汎用レジスタ36を含む。さら
に、レジスタ・ファイル32の中のレジスタ36は、例
外が起こったかどうかを示すエラータグ・ビット38を
含む。推測的実行の中でのエラータグ・ビット38の使
用については次に詳しく述べる。
【0031】CPU22のアーキテクチャは多様であ
る。本明細書で述べるアーキテクチャは、1つの可能性
のある具体化にしたがったCPU22の概略的なハード
ウェア設計を示すものである。本発明にしたがって具体
化された推測的実行は、様々なCPU設計、とくに複数
の機能装置を持つCPU、またはパイプラインを備えた
複数の機能装置を持つCPUで性能の改善をもたらす。
推測的実行は、とくにスーパースカラー・コンピュー
タ、またはVLIW(Very Long Instruction Word)コ
ンピュータの性能を向上させるのに効果的である。
【0032】プログラムを実行するときに、CPU22
は、メモリ24に記憶された一連の命令を実行する。命
令装置34は、システム・バス28を介してメモリから
命令を取り出し、命令を解読する。CPUの型および/
または使用されるスケジュリング方法により、1つの命
令が複数の演算を持つ場合がある。命令装置34は、1
つの機能装置30または複数の機能装置(図2の重ねら
れた箱として示してあるように)に演算を出す。命令装
置34は、命令の中の1つまたは複数の演算を実行する
ために、制御信号を機能装置30に送る。これらの制御
信号に応答して、機能装置30は、アドレスまたは値の
ようなデータをレジスタ・ファイル32の中の該当する
レジスタから読み、演算を実行する。いくつかの演算に
対しては、機能装置30は、レジスタ・ファイル32に
結果を書き込む。メモリ記憶演算に対しては、機能装置
30は、レジスタ・ファイル32に記憶されているメモ
リ・アドレスおよび値を読み、値を直接メモリ24に転
送する。
【0033】図3に、複数の演算を持つ命令40のフォ
ーマットを示す。この命令には3つの演算が含まれ、各
々は、1つの命令コード(opcode)、および1つまたは
複数の被演算子を含んでいる。左から、この命令の第1
の演算は、命令コード42、宛先レジスタのフィールド
44、および、2つのソース・レジスタのフィールド4
6、48を含む。第2の演算は、命令コード50、およ
び2つのソース・レジスタのフィールド52、54を持
っている。最後に、第3の演算は、命令コード56、お
よび1つのソース・レジスタのフィールド58を持って
いる。ソース・レジスタのフィールドは演算への入力の
位置を指定し、宛先レジスタ・フィールドは結果の位置
を指定する。
【0034】これらの3つの演算は、典型的な命令の例
を提供している。第1の演算は加算(ADD)演算で、
機能装置30はレジスタR1およびR2に記憶されてい
る値を読み、これらを加えて、その結果をレジスタR3
に書く。第2の例の演算はメモリ記憶(MEM)演算5
0で、第1のレジスタR4はアドレスを記憶し、第2の
レジスタR5は値を記憶する。機能装置30はこれらの
レジスタからアドレスおよび値を読み、値をメモリ24
の指定されたアドレスに記憶する。第3の例の演算は、
単純な移動(MOV)演算である。推測的実行を支援す
るために、この演算のハードウェア意味論は、この演算
を、後回しにされた例外を調べるのに使えるように、修
正することができる。
【0035】例として、機能装置30は、ソース・レジ
スタR6を読み、例外が起こった場合、エラー処理ルー
チンへの分岐演算を始動する。チェック演算のためのソ
ース・レジスタは、後回しにされた例外があるかチェッ
クされるレジスタと同じである。チェック演算のソース
・レジスタは、例外を生じ後回しにされた推測的演算
の、または、後回しにされた例外を伝搬した推測的演算
の宛先レジスタである。いずれの場合も、チェックされ
るソース・レジスタが、後回しにされた例外についての
情報を含む。
【0036】推測的実行を支援する装置は、図1ないし
3を参照して説明したコンピュータ・システム20で具
体化することができる。本発明による装置を具体化する
いくつかの代替的方法がある。2つの具体化について以
下に説明するが、当業者には明らかなように、その他の
方法も可能であることを理解されたい。
【0037】本発明の第1の具体化は、CPUの命令セ
ット・アーキテクチャの中に、演算の推測的および非推
測的なバージョンをコード化することを含む。この具体
化では、命令コードが、演算が非推測的かまたは推測的
であるかを特定する。たとえば、図3の加算演算の命令
コード42は、この演算を推測的または非推測的のどち
らかに指定するようにコード化できる。演算のバージョ
ンが、演算によって生じた例外が報告されるのか、後回
しにされるのかを作用する。非推測的演算がエラーを生
じた場合、機能装置30は直ちにエラーを報告する。他
方、推測的命令が例外を生じた場合、機能装置30は例
外の報告を後回しにする。後者の場合、例外は、演算の
結果がその演算の本拠基本ブロックで実際に使われた場
合にだけ報告される。
【0038】本発明の第2の具体化は、最小限の命令セ
ット・アーキテクチャの中で推測的実行を支援する装置
を提供する。第1の具体化にくらべ、この第2の具体化
は、推測的演算のための命令コードを含まずに、推測的
実行を支援する。この装置は、命令セットの中のいくつ
かの予定の演算を、演算をとくにコード化せずに、推測
的演算として扱う。第1の具体化と同様に、この第2の
具体化も、推測的演算からの例外を後回しにすること、
および、これらの後回しにされた例外を報告することに
対するアーキテクチャ上の支援を有する。
【0039】第2の具体化では、スケジューラおよびC
PUは、予定の組の演算を推測的として扱う。この演算
の組は、可能性として、命令セットの中のいかなる演算
も含むことができる。しかし、分岐演算のようにその結
果を元に戻すのが難しい演算、または、CPUの外側に
見える演算は、一般的に、推測的に実行すべきではな
い。CPUの外側に見えない全ての演算は、機能装置3
0のハードウェア意味論を変えることによって、本来的
に推測的な演算として扱うことができる。この具体化に
おいて推測的実行を支援するために、本来的に推測的な
演算は推測的演算としてスケジュールされ、CPUハー
ドウェアは、これらの演算からの例外を後回しにするこ
と、および、後回しにされた例外の報告を支援する。予
定の組の演算がCPUの中で本来的に推測的として扱わ
れる一方、CPUの外側に見える演算は非推測的のまま
残る。CPUの外側に見える演算の例は、メモリ記憶で
ある。メモリ記憶がCPUの外側に見えると考えられる
のは、この命令がCPUの外側のメモリと相互作用、具
体的には、メモリ24の位置を上書きするからである。
このような演算を推測的に実行することが望ましくない
のは、同じメモリ位置と相互作用する別の処理に影響を
及ぼす可能性があるからである。また、外部ハードウェ
アの状態に影響を及ぼす演算によって生じたエラーを訂
正することは、いっそう難しい。これらの理由で、プロ
セッサの外側に見える演算を非推測的に扱うことが望ま
しい。
【0040】第2の具体化の手法を用いれば、命令セッ
トには、演算の推測的および非推測的バージョンという
区分けは必要ない。この結果、既存の命令セット・アー
キテクチャと互換性を維持する方法で、推測的実行が支
援される。本来的に推測的および非推測的として扱われ
る演算は、CPUのアーキテクチャによって変わる。あ
る装置では、CPUの外側に見えるもの以外のすべての
演算を推測的に扱うことができる。別の装置では、すべ
ての演算を本来的に推測的として扱うことができる。さ
らに別の装置では、ある演算は本来的に推測的である一
方、その他の演算は推測的および非推測的両方として提
供される。
【0041】第2の具体化による装置は、推測的コード
の移動を用いて最適化されたかどうかに拘わらず、プロ
グラムのバイナリのかたちと互換性を持つように設計す
ることができる。CPUで支援されている推測的実行を
利用するために、CPUが推測的バージョンを持つ演算
を移動する推測的コードの移動を用いて、プログラムが
最適化される。したがって、プログラムには、推測的コ
ード移動を用いて最適化されなかった既存のプログラ
ム、および、CPUで支援されている推測的実行に対し
て特別に最適化された新しいプログラム、という2つの
カテゴリが存在する。両方のプログラムと互換性を維持
するために、CPUは、非推測的モードおよび本来的な
推測的モードを支援する回路を持つ場合がある。
【0042】CPUが両方の演算モードを支援する場
合、CPUは、プログラムが推測的実行のために最適化
されたかどうかを認識する回路を持たなくてはならな
い。この回路は、モードビットを記憶できるステータス
ワード・レジスタのようなレジスタを含むことができ
る。プログラムの実行を開始する前に、CPUはこのレ
ジスタを読み、該当するモードに切り換える。モードビ
ットは、様々な方法で設定できる。たとえば、プログラ
ムが、CPUで支援されている推測的実行を利用するよ
うにコンパイルされている場合、オペレーテイング・シ
ステムがモードビットを設定するようにプログラムされ
る。代替方法として、プログラムのコンパイラが、プロ
グラムのバイナリのかたちの中にある演算の状態のモー
ドを識別することによって、モードビットを設定するこ
とができる。当業者にはよく知られているように、演算
モードを指定する方法はこの他にも多くある。
【0043】第2の具体化による装置は、2つの演算モ
ードを支援する必要はないが、既存のプログラムと互換
性を維持するために、2つの演算モードを支援すること
は利点がある。CPUが推測的実行のためにとくに最適
化されたプログラムだけを実行する場合は、CPUは非
推測的モードを支援する必要はない。しかし、第2の具
体化の利点は、既存の命令セット・アーキテクチャ、お
よび、これらのアーキテクチャに基づくCPUで動くよ
うに既にコンパイルされたプログラムとの互換性を維持
できることである。既存のプログラムとの互換性が重要
である場合、CPUは、推測的および非推測的の両方の
演算モードを支援すべきである。
【0044】第1および第2の具体化は、例外を後回し
にし報告するアーキテクチャの支援を含む。これは、レ
ジスタ・ファイルのレジスタのエラータグ・ビット38
を含む。推測的演算で例外が起こると、機能装置は、例
外が起こったことを示すエラータグ・ビットを設定す
る。この例外は直ちに報告されず、後回しにされる。例
外についての情報は、エラー処理を助けるために、宛先
レジスタに書かれる。この情報は、命令、および、命令
の中の例外を生じた演算を特定する。たとえば、情報
は、例外を生じた演算のプログラムカウンタの値を特定
する。情報は、また、例外の型、たとえばアドレス違
反、演算のアンダフローおよびオーバフロー等を特定す
る。この演算の結果を別の推測的演算が入力として使用
する場合、例外は伝搬される。例外を伝搬するために、
エラータグ・ビット38が宛先レジスタに設定され、例
外情報が宛先レジスタにコピーされる。このようにし
て、装置は、推測的演算によって生じた例外を、その演
算の結果がプログラムの実行経路で実際に使われるま
で、遅らせる。
【0045】エラータグ・ビット38は例外を後回しに
する1つの方法にすぎない。他のハードウェアを使うこ
ともできる。たとえば、例外を生じた推測的演算は、例
外が起こったことを特定し、エラー処理に使われる例外
情報を含む情報をバッファに書き込むことができる。推
測的命令がプログラムの実行経路で実際に使われる場
合、エラー情報がバッファから読み出され、その情報に
したがって例外が処理される。
【0046】本発明の第1または第2の具体化にしたが
って構成された装置は、また、後回しにされた例外を報
告するためのアーキテクチャ上の支援を含む。この支援
は、非推測的演算に組み込まれたチェック機能、また
は、別個のチェック演算の追加を含む。CPUの外側に
見える演算が非推測的である場合、チェック演算を、こ
れらの演算の1つに組み込んでもよい。たとえば、メモ
リ記憶演算の1部として、機能装置30が、後回しにさ
れた例外を調べてもよい。上述したように、メモリ記憶
演算は2つのソース・レジスタ、すなわち、メモリに記
憶されるデータを含むレジスタ、およびメモリ・アドレ
スを含むレジスタを持つ。チェック演算としての役をす
る場合のメモリ記憶演算は、後回しにされた、および/
または、伝搬された例外を調べるために、両方のソース
・レジスタをチェックする。
【0047】図3の命令の例を参照すると、メモリ記憶
演算は、例外検出意味論(セマンティクス:semantic
s)を含んでもよい。メモリ記憶演算の1部として、機
能装置30は、例外が後回しにされたかどうかを判断す
るために、メモリ記憶演算のソース・レジスタの例外タ
グビットを読む。例外が後回しにされている場合、メモ
リ記憶演算は、エラー処理ルーチンへの分岐を実行す
る。
【0048】もう一つの例として、別個のチェック演算
を作ってもよい。これは、チェック演算のために、命令
コードを1つ追加することが必要になる。これらのチェ
ック演算は、スケジューリング処理の間に挿入すること
ができる。チェック演算は、例外を生じるか伝搬する推
測的演算の各々がチェックできるように挿入されなけれ
ばならない。チェック演算のソース・レジスタは、例外
を生じる演算の宛先レジスタであってもよい。また、ソ
ース・レジスタは、伝搬された一連の例外の中の最後の
演算の宛先レジスタであってもよい。推測的演算がチェ
ックされることを確実にするために、チェック・演算
は、1つの推測的演算、または一連の推測的演算の後に
挿入することができる。例外は、エラーを生じた推測的
演算の結果を使用するすべての演算に伝搬されるので、
チェック演算を推測的演算の各々に挿入する必要はな
い。
【0049】再び図3を参照すると、第3の演算は、後
回しにされた例外を調べるために使うことができるチェ
ック演算の例である。この演算は、1つのソースだけを
持ち、宛先レジスタを持たない。例外が後回しにされた
場合、チェック演算のソース・レジスタは、例外および
その例外を生じた演算の型を特定する情報を含む。例外
が検出されると、チェック演算のソース・レジスタの中
の情報が例外を処理するために使われる。典型的には、
例外が検出されると、CPUは例外処理ルーチンに分岐
する。
【0050】上記の説明は、後回しにされた例外を検出
し報告する、数多くの可能な方法のうちの1つであると
理解されたい。1つの代替方法として、チェック演算
は、あるメモリ位置の演算をチェックして、この位置の
演算がエラーを生じたかどうかを判断することができ
る。たとえば、チェック演算は、そのチェック演算のプ
ログラムカウンタ・アドレスで指定されたメモリ位置の
演算を調べることができる。チェック演算は、たとえ
ば、"PCアドレス535の演算をチェックせよ"、また
は、"第3の最後の演算をチェックせよ"のように、プロ
グラムカウンタ・アドレスをチェックするようにコード
化できる。この形のチェック演算は、推測的演算の宛先
レジスタを調べる方法の代替方法である。このチェック
演算は後回しにされた例外のために宛先レジスタをチェ
ックしないので、エラー処理を助けるために使われる例
外の型についての情報を記憶するために、付加的バッフ
ァが使われる。
【0051】図4は、本発明の具体化による推測的実行
を支援する方法を示す流れ図である。この流れ図は、本
発明の第1および第2の具体化にしたがって推測的実行
を支援する装置の演算を示す。
【0052】最初のステップ62で、演算がスケジュー
ルされる。上述したように、演算は動的もしくは静的、
またはその両方を組み合わせた方法を使ってスケジュー
ルされる。スケジューリングを行うステップ62の1部
として、チェック演算が、条件つき分岐より上に移動さ
れた演算の本拠基本ブロックに挿入される。第1の具体
化では、推測的演算の命令コードが、同じ演算の非推測
的バージョンと区別するためにコード化される。第2の
具体化では、予定の数の演算が、とくにそのようにコー
ド化されずに、推測的として扱われる。プログラムがス
ケジュールされると、CPUは実行のために演算を出し
始める。
【0053】演算は次のステップ64で実行される。図
2に示したように複数の機能装置30を持つCPUで
は、演算は別々の機能装置に同時に出される。機能装置
30がパイプラインを備えている場合は、いくつかの演
算が一時に各パイプラインで実行の異なる段階にある。
【0054】演算の実行中に例外が起こった場合(6
6)、装置は、演算の型に応じて異なる反応をとる(6
8)。推測的演算の場合は、例外は後回しにされる(7
0)。しかし、非推測的演算に対しては、例外は報告さ
れ、エラー処理ルーチンが始動される(72)。非推測
的演算は、条件つき分岐より上に移動されずに本拠基本
ブロックに残っている演算である。具体化の仕方によ
り、非推測的演算は、どのような型の演算も含むことが
できる。非推測的演算の例としては、CPUの外側に見
えるので分岐より上に移動されないメモリ記憶演算、ま
たは、後回しにされた例外を調べるために推測的演算の
本拠基本ブロックに挿入されるチェック演算が含まれ
る。
【0055】装置をどのように具体化するかにより、演
算は、異なる方法で、推測的または非推測的かに特定さ
れる。第1の具体化では、推測的および非推測的演算
は、それらの命令コードによって区別される。第2の具
体化では、予定の数の演算が、命令コードをとくに推測
的であるとコード化せずに、推測的演算として扱われ
る。CPUはこれらの本来的に推測的な演算を認識し、
これらの演算によって生じた例外を後回しにする。同様
に、CPUは、本来的に非推測的な演算を認識し、これ
らの演算によって生じたエラーを直ちに報告する。
【0056】既存のプログラムとの互換性を維持するた
めに、第2の具体化では、CPUは、推測的モードおよ
び非推測的モードの2つの演算・モードを持つ。推測的
モードでは、予定の組の演算が本来的に推測的として扱
われる。これらの本来的に推測的な演算に対しては、例
外は後回しにされる。非推測的モードでは、予定の組の
演算が非推測的として扱われ、これらの演算に対して
は、例外は後回しにされない。
【0057】多くの演算を本来的に推測的として扱う一
方、推測的および非推測的演算を特定してコード化する
ことも可能である。たとえば、CPUの外側に見えない
全ての演算を本来的に推測的であるとし、メモリ記憶の
ようなその他のすべての演算を推測的および非推測的バ
ージョンとして提供することもできる。この手法は、付
加的な命令コードを加えるための十分な融通性を持つか
または持たないかも知れない、特定の命令セット・アー
キテクチャの制約にしたがう。
【0058】64ないし70のステップのシーケンス
は、後回しにされた例外を伝搬することを含むことがで
きる。実行ステップ64で、機能装置30は、例外が以
前に起こったかどうかを判断する(66)ためにエラー
タグを読み込む。演算が推測的である(68)場合、結
果レジスタのエラータグ・ビットを設定し、例外情報を
結果に転送することによって、例外が伝搬される。この
ような方法で例外を伝搬することにより、装置は例外を
後回しにし(70)、例外が非推測的演算で使われる場
合にのみ報告する。
【0059】64ないし70のステップのシーケンス
は、後回しにされた例外を検出し報告するすることを含
むことができる。例外は、エラーをチェックする能力を
持つ非推測的演算を実行する(64)ことにより検出さ
れる。この型の演算を実行することは、後回しにされた
例外を調べる(66)ことを含む。後回しにされた例外
を調べる手段は、具体化の仕方によって異なる。非推測
的演算は、入力またはソース・レジスタのエラータグ・
ビットを読むことによって、後回しにされた例外を調べ
ることができるように具体化できる。例として、メモリ
記憶命令は、その意味論の1部として、後回しにされた
例外があるかを調べ、後回しにされた例外があれば、そ
れを報告するためにエラータグ・ビットを読むようにす
ることができる。もう1つの例として、本拠基本ブロッ
クに挿入されたチェック演算が、その基本ブロックから
の推測的演算の結果レジスタまたは複数のレジスタのエ
ラータグ・ビットを読むことによって、例外を調べても
よい。後回しにされた例外がある場合、その例外は直ち
に報告される(72)。このようにして、推測的実行を
支援する装置は、推測的演算で生じた例外を後回しにす
る。
【0060】本発明の装置および方法について、代替的
な具体化を用いて以上に詳しく説明したが、本発明は、
その範囲を逸脱することなく多様な方法で具体化できる
ことを理解されたい。たとえば、命令セット・アーキテ
クチャは、演算の非推測的および推測的バージョン、本
来的に推測的な演算、または、両方を組み合わせたもの
を含むことができる。例外を後回しにする手段は、CP
Uアーキテクチャによって異なる。たとえば、1つのエ
ラータグ・ビットをレジスタ・ファイルの中の汎用レジ
スタに加えてもよいし、または、後回しにされた例外を
追跡するためにバッファを使用してもよい。後回しにさ
れた例外を調べる手段も多様である。上述したように、
1つまたは複数の非推測的演算が実行されたときに後回
しにされた例外を調べるように、CPUのハードウェア
意味論を設計することができる。代替方法として、別個
のチェック・演算を命令セット・アーキテクチャに加え
てもよい。本発明の範囲を逸脱することなく、この他に
多くの具体化の変形が可能である。
【0061】本発明には、例として次のような実施態様
が含まれる。 (1)推測的実行を支援する方法であって、推測的演算
としてコード化されていない本来的に推測的な演算を少
なくとも1つ含む推測的演算および非推測的演算を備え
る命令セット・アーキテクチャを用意するステップと、
推測的演算を条件つき分岐より上に移動するステップを
含み、コンピュータ・プログラムの演算をスケジュール
するステップと、中央処理装置内で演算を実行し、演算
が推測的演算であり例外を生じる場合、その例外を後回
しにし、演算が非推測的演算であり例外を生じる場合、
その例外を報告するステップと、を有する方法。
【0062】(2)命令セット・アーキテクチャを用意
する前記ステップが、本来的に推測的な演算である予定
の組の演算を、前記命令セット・アーキテクチャに用意
することを含む、上記(1)に記載の方法。 (3)命令セット・アーキテクチャを用意する前記ステ
ップが、前記中央処理装置のモードによってすべてが本
来的に推測的であるか、またはすべてが本来的に非推測
的である予定の組の演算を、前記中央処理装置用の前記
命令セット・アーキテクチャに用意することを含み、さ
らに、前記中央処理装置のステータス・レジスタのモー
ドビットを設定することによって前記中央処理装置のモ
ードを指定するステップと、前記中央処理装置のモード
を判断するために前記ステータス・レジスタのモードビ
ットを読むステップと、を有する、上記(1)に記載の
方法。
【0063】(4)命令セット・アーキテクチャを用意
する前記ステップが、1組の演算の推測的および非推測
的バージョンを前記命令セット・アーキテクチャに用意
することを含む、上記(1)に記載の方法。 (5)前記1組の演算の推測的および非推測的バージョ
ンが1組の命令コードにコード化されている、上記
(4)に記載の方法。 (6)例外を後回しにする前記ステップが、エラーが起
こったことを示す情報を記憶することを含む、上記
(1)に記載の方法。 (7)例外を後回しにする前記ステップが、例外を生じ
た推測的演算の結果レジスタにエラータグ・ビットを設
定することを含む、上記(6)に記載の方法。 (8)演算を実行する前記ステップが、後回しにされた
例外を調べることを含む、上記(1)に記載の方法。 (9)演算を実行する前記ステップが、第2の推測的演
算の入力が例外を生じた第1の推測的演算の結果である
場合に、後回しにされた例外を伝搬することを含む、上
記(1)に記載の方法。 (10)演算を実行する前記ステップが、後回しにされ
た例外を調べる非推測的演算を実行することを含む、上
記(1)に記載の方法。 (11)前記非推測的演算が、後回しにされた例外を調
べるチェック機能を含む、上記(10)に記載の方法。 (12)前記非推測的演算が、関連する推測的演算から
の後回しにされた例外を調べるために、前記関連する推
測的演算の本拠基本ブロックに挿入されたチェック演算
である、上記(10)に記載の方法。 (13)スケジュールする前記ステップが、後回しにさ
れた例外を調べるために推測的演算の本拠基本ブロック
にチェック演算を挿入することを含む、上記(1)に記
載の方法。
【0064】(14)推測的実行を支援する方法であっ
て、中央処理装置の命令セット・アーキテクチャに予定
の数の推測的演算を用意するステップと、推測的演算を
関連する条件つき分岐より上に移動するために、推測的
コード移動を使って推測的演算をスケジュールするステ
ップと、推測的演算を実行し、推測的演算から例外が生
じた場合、例外が起こったことを特定する情報を記憶す
ることによって例外を後回しにするステップと、後回し
にされた例外を調べるチェック演算を含む非推測的演算
を実行するステップと、推測的演算の宛先レジスタを読
むことによって後回しにされた例外を調べるステップ
と、非推測的演算で例外が検出された場合その例外を報
告するステップと、を有する方法。
【0065】(15)前記予定の数の推測的演算が中央
処理装置のモードによって非推測的演算として演算する
ことができ、さらに、前記中央処理装置のレジスタのモ
ードビットを設定することによって前記中央処理装置の
モードを指定するステップと、前記中央処理装置のモー
ドを判断するために前記レジスタのモードビットを読む
ステップと、前記モードビットが、前記予定の組の推測
的演算が非推測的演算として演算すべきであることを示
している場合に、前記推測的演算を非推測的演算として
演算させるステップと、を有する、上記(14)に記載
の方法。 (16)命令セット・アーキテクチャを用意する前記ス
テップが、演算の命令コードを、それぞれが推測的また
は非推測的であることを特定するようにコード化するこ
とによって、1組の演算の推測的および非推測的バージ
ョンを命令セット・アーキテクチャに用意することを含
む、上記(14)に記載の方法。
【0066】(17)汎用レジスタを含むレジスタ・フ
ァイルと、前記レジスタ・ファイルと通信して演算を実
行し、推測的および非推測的演算を認識する回路を備
え、推測的演算が例外を生じたときに例外が後回しにさ
れたことを示す情報を記憶し、かつ後回しにされた例外
を調べるために前記レジスタ・ファイルと通信する機能
装置と、を備える、推測的実行を支援する装置。
【0067】(18)推測的および非推測的演算を認識
する前記回路が、命令コードが演算の推測的または非推
測的バージョンであるかを判断するために、演算の命令
コードを読むための回路を含む、上記(17)に記載の
装置。 (19)推測的および非推測的演算を認識する前記回路
が、中央処理装置のモードを特定するモードビットを記
憶するレジスタを含み、さらに、演算を推測的または非
推測的演算として扱うべきかを判断するためにモードビ
ットを読むための回路を含む、上記(17)に記載の装
置。 (20)前記機能装置が後回しにされた例外があること
を知らせる回路を含む、上記(17)に記載の装置。 (21)前記レジスタ・ファイルのレジスタが例外が後
回しにされたかどうかを示すエラータグ・ビットを含
む、上記(17)に記載の方法。
【0068】
【発明の効果】本発明は、推測的命令がエラーを生じた
場合エラー処理を後回しにし、その推測的命令が実際に
プログラムの実行経路で使われる場合にのみエラー報告
がなされるようにすることにより、プログラム実行の能
率を向上させることができる。
【図面の簡単な説明】
【図1】本発明が具体化されるコンピュータ・システム
を示すブロック図。
【図2】本発明の具体化によるCPUを示すブロック
図。
【図3】複数の演算を持つ命令を示すブロック図。
【図4】本発明の具体化による、推測的実行を支援する
方法を示す流れ図。
【符号の説明】
20 本発明が具体化されるコンピュータ・システ
ム 22 本発明の具体化によるCPU 24 メモリ 26 周辺装置 28 システム・バス 30 機能装置 32 レジスタ・ファイル 34 命令装置 36 汎用レジスタ 38 エラータグ・ビット 40 命令のフォーマット
───────────────────────────────────────────────────── フロントページの続き (72)発明者 バントワル・アール・ラウ アメリカ合衆国94024カリフォルニア州ロ スアルトス、ハイランズ・サークル 900 (72)発明者 マイケル・エス・シュランスカー アメリカ合衆国94024カリフォルニア州ロ スアルトス、ラス・プレンダ 409 (72)発明者 ウィリアム・エス・ウオーレイ・ジュニア アメリカ合衆国80424コロラド州ブレッケ ンリッジ、ピー・オー・ボックス 4433 (72)発明者 フレデリック・シー・エイマーソン アメリカ合衆国95051カリフォルニア州サ ンタクララ、ヒルズデイル・アベニュー 451 アパートメント・ナンバー・ピー

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】 推測的実行を支援する方法であって、 推測的演算としてコード化されていない本来的に推測的
    な演算を少なくとも1つ含む推測的演算および非推測的
    演算を備える命令セット・アーキテクチャを用意するス
    テップと、 推測的演算を条件つき分岐より上に移動するステップを
    含み、コンピュータ・プログラムの演算をスケジュール
    するステップと、 中央処理装置内で演算を実行し、演算が推測的演算であ
    り例外を生じる場合、その例外を後回しにし、演算が非
    推測的演算であり例外を生じる場合、その例外を報告す
    るステップと、 を有する方法。
JP7230907A 1994-10-18 1995-09-08 推測的実行を支援する方法 Pending JPH08123685A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US324,940 1994-10-18
US08/324,940 US5692169A (en) 1990-12-14 1994-10-18 Method and system for deferring exceptions generated during speculative execution

Publications (1)

Publication Number Publication Date
JPH08123685A true JPH08123685A (ja) 1996-05-17

Family

ID=23265788

Family Applications (1)

Application Number Title Priority Date Filing Date
JP7230907A Pending JPH08123685A (ja) 1994-10-18 1995-09-08 推測的実行を支援する方法

Country Status (4)

Country Link
US (1) US5692169A (ja)
JP (1) JPH08123685A (ja)
DE (1) DE19534752A1 (ja)
GB (1) GB2294341A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11232058A (ja) * 1998-02-09 1999-08-27 Fuji Xerox Co Ltd 機器情報管理装置

Families Citing this family (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5778219A (en) * 1990-12-14 1998-07-07 Hewlett-Packard Company Method and system for propagating exception status in data registers and for detecting exceptions from speculative operations with non-speculative operations
DE69430018T2 (de) 1993-11-05 2002-11-21 Intergraph Corp., Huntsville Befehlscachespeicher mit assoziativem Kreuzschienenschalter
US5740391A (en) * 1996-03-01 1998-04-14 Hewlett-Packard Co. Preventing premature early exception signaling with special instruction encoding
US5748936A (en) * 1996-05-30 1998-05-05 Hewlett-Packard Company Method and system for supporting speculative execution using a speculative look-aside table
US5854928A (en) * 1996-10-10 1998-12-29 Hewlett-Packard Company Use of run-time code generation to create speculation recovery code in a computer system
US5850553A (en) * 1996-11-12 1998-12-15 Hewlett-Packard Company Reducing the number of executed branch instructions in a code sequence
GB2361082B (en) * 1996-11-13 2002-01-30 Intel Corp Processor
US6631454B1 (en) 1996-11-13 2003-10-07 Intel Corporation Processor and data cache with data storage unit and tag hit/miss logic operated at a first and second clock frequencies
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
US5915117A (en) * 1997-10-13 1999-06-22 Institute For The Development Of Emerging Architectures, L.L.C. Computer architecture for the deferral of exceptions on speculative instructions
AU1078099A (en) * 1997-10-13 1999-05-03 Institute For The Development Of Emerging Architectures, Llc Method and apparatus for optimizing instruction execution
US6205491B1 (en) * 1997-12-18 2001-03-20 Sun Microsystems, Inc. Method and apparatus for deferred throwing of exceptions in C++
US6076154A (en) * 1998-01-16 2000-06-13 U.S. Philips Corporation VLIW processor has different functional units operating on commands of different widths
US6216222B1 (en) 1998-05-14 2001-04-10 Arm Limited Handling exceptions in a pipelined data processing apparatus
US6151706A (en) * 1998-06-16 2000-11-21 Silicon Graphics, Inc. Method, system, and computer program product for extending sparse partial redundancy elimination to support speculative code motion within an optimizing compiler
US6260190B1 (en) * 1998-08-11 2001-07-10 Hewlett-Packard Company Unified compiler framework for control and data speculation with recovery code
US6301705B1 (en) * 1998-10-01 2001-10-09 Institute For The Development Of Emerging Architectures, L.L.C. System and method for deferring exceptions generated during speculative execution
JP2000122875A (ja) * 1998-10-19 2000-04-28 Internatl Business Mach Corp <Ibm> 例外処理方法およびシステム
US6519694B2 (en) 1999-02-04 2003-02-11 Sun Microsystems, Inc. System for handling load errors having symbolic entity generator to generate symbolic entity and ALU to propagate the symbolic entity
US6463579B1 (en) * 1999-02-17 2002-10-08 Intel Corporation System and method for generating recovery code
US6453463B1 (en) * 1999-06-07 2002-09-17 Sun Microsystems, Inc. Method and apparatus for providing finer marking granularity for fields within objects
US6640315B1 (en) 1999-06-26 2003-10-28 Board Of Trustees Of The University Of Illinois Method and apparatus for enhancing instruction level parallelism
US7761857B1 (en) 1999-10-13 2010-07-20 Robert Bedichek Method for switching between interpretation and dynamic translation in a processor system based upon code sequence execution counts
US6658555B1 (en) * 1999-11-04 2003-12-02 International Business Machines Corporation Determining successful completion of an instruction by comparing the number of pending instruction cycles with a number based on the number of stages in the pipeline
US20020100031A1 (en) * 2000-01-14 2002-07-25 Miguel Miranda System and method for optimizing source code
US6732363B1 (en) * 2000-02-28 2004-05-04 Sun Microsystems, Inc. Supporting inter-process communication through a conditional trap instruction
US6594821B1 (en) 2000-03-30 2003-07-15 Transmeta Corporation Translation consistency checking for modified target instructions by comparing to original copy
US6615300B1 (en) 2000-06-19 2003-09-02 Transmeta Corporation Fast look-up of indirect branch destination in a dynamic translation system
US6895527B1 (en) * 2000-09-30 2005-05-17 Intel Corporation Error recovery for speculative memory accesses
WO2002101548A1 (en) * 2001-06-08 2002-12-19 Equator Technologies, Inc. System for compiling a computer program
US7584425B2 (en) * 2001-07-31 2009-09-01 Verizon Business Global Llc Systems and methods for generating reports
US6931515B2 (en) 2002-07-29 2005-08-16 Hewlett-Packard Development Company, L.P. Method and system for using dynamic, deferred operation information to control eager deferral of control-speculative loads
US7051238B2 (en) * 2002-07-30 2006-05-23 Hewlett-Packard Development Company, L.P. Method and system for using machine-architecture support to distinguish function and routine return values
US20040024992A1 (en) * 2002-08-02 2004-02-05 Shan-Chyun Ku Decoding method for a multi-length-mode instruction set
US7000091B2 (en) * 2002-08-08 2006-02-14 Hewlett-Packard Development Company, L.P. System and method for independent branching in systems with plural processing elements
US7310723B1 (en) 2003-04-02 2007-12-18 Transmeta Corporation Methods and systems employing a flag for deferring exception handling to a commit or rollback point
US20060224869A1 (en) * 2005-03-31 2006-10-05 Flachs Brian K Combination of forwarding/bypass network with history file
US8413162B1 (en) 2005-06-28 2013-04-02 Guillermo J. Rozas Multi-threading based on rollback
US7996662B2 (en) * 2005-11-17 2011-08-09 Apple Inc. Floating point status/control register encodings for speculative register field
US7721076B2 (en) * 2006-12-18 2010-05-18 Intel Corporation Tracking an oldest processor event using information stored in a register and queue entry
US8566780B2 (en) * 2007-06-26 2013-10-22 Microsoft Corporation Object model based mapping
US7747899B2 (en) * 2007-06-26 2010-06-29 Microsoft Corporation Providing mapping fault processing
WO2012107800A1 (en) * 2011-02-11 2012-08-16 Freescale Semiconductor, Inc. Integrated circuit devices and methods for scheduling and executing a restricted load operation
JP6726136B2 (ja) * 2017-06-22 2020-07-22 ルネサスエレクトロニクス株式会社 データアクセス装置及びアクセスエラーの通知方法

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5299034A (en) * 1976-02-17 1977-08-19 Nippon Telegr & Teleph Corp <Ntt> Control system for micro program
US4287562A (en) * 1979-09-06 1981-09-01 Honeywell Information Systems Inc. Real time adapter unit for use in a data processing system
US4539635A (en) * 1980-02-11 1985-09-03 At&T Bell Laboratories Pipelined digital processor arranged for conditional operation
JPS5748139A (en) * 1980-09-04 1982-03-19 Nec Corp Microprogram control device
US4396906A (en) * 1980-10-31 1983-08-02 Sri International Method and apparatus for digital Huffman encoding
US5021945A (en) * 1985-10-31 1991-06-04 Mcc Development, Ltd. Parallel processor system for processing natural concurrencies and method therefor
US4881194A (en) * 1987-11-16 1989-11-14 Intel Corporation Stored-program controller for equalizing conditional branch delays
GB8828817D0 (en) * 1988-12-09 1989-01-18 Int Computers Ltd Data processing apparatus
US5487156A (en) * 1989-12-15 1996-01-23 Popescu; Valeri Processor architecture having independently fetching issuing and updating operations of instructions which are sequentially assigned and stored in order fetched
SG48907A1 (en) * 1993-12-01 1998-05-18 Intel Corp Exception handling in a processor that performs speculative out-of-order instruction execution
US5546599A (en) * 1994-03-31 1996-08-13 International Business Machines Corporation Processing system and method of operation for processing dispatched instructions with detected exceptions

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11232058A (ja) * 1998-02-09 1999-08-27 Fuji Xerox Co Ltd 機器情報管理装置

Also Published As

Publication number Publication date
DE19534752A1 (de) 1996-04-25
GB9520626D0 (en) 1995-12-13
US5692169A (en) 1997-11-25
GB2294341A (en) 1996-04-24

Similar Documents

Publication Publication Date Title
JPH08123685A (ja) 推測的実行を支援する方法
US5778219A (en) Method and system for propagating exception status in data registers and for detecting exceptions from speculative operations with non-speculative operations
US5881280A (en) Method and system for selecting instructions for re-execution for in-line exception recovery in a speculative execution processor
US5748936A (en) Method and system for supporting speculative execution using a speculative look-aside table
JP2786574B2 (ja) コンピュータ・システムにおける順不同ロード動作の性能を改善する方法と装置
US5901308A (en) Software mechanism for reducing exceptions generated by speculatively scheduled instructions
US6301705B1 (en) System and method for deferring exceptions generated during speculative execution
US6631514B1 (en) Emulation system that uses dynamic binary translation and permits the safe speculation of trapping operations
CA2203124C (en) Handling of exceptions in speculative instructions
US5949995A (en) Programmable branch prediction system and method for inserting prediction operation which is independent of execution of program code
US6505296B2 (en) Emulated branch effected by trampoline mechanism
JP2001175473A (ja) コンピュータ処理システムにおいて実行述語を実現する方法及び装置
JP2000066898A (ja) コンピュ―タ命令の実行をスケジュ―ルする方法
US7302557B1 (en) Method and apparatus for modulo scheduled loop execution in a processor architecture
JP2002532775A (ja) インタープリタプログラム実行方法
Fog Optimizing software in C++
US7665070B2 (en) Method and apparatus for a computing system using meta program representation
EP1031076A1 (en) Method and apparatus for optimizing execution of load and store instructions
JP3146058B2 (ja) 並列処理型プロセッサシステムおよび並列処理型プロセッサシステムの制御方法
Sun et al. Speculative vectorisation with selective replay
Rau et al. Instruction-level parallelism
JPH06290057A (ja) ループ最適化方法
RU2815599C1 (ru) Способ исполнения процессором программ с использованием таблицы адресов спекулятивности по данным
Shipnes et al. A modular approach to Motorola PowerPC compilers.
US5875317A (en) Boosting control method and processor apparatus having boosting control portion