JP2001520415A - 命令実行を最適化する方法および装置 - Google Patents

命令実行を最適化する方法および装置

Info

Publication number
JP2001520415A
JP2001520415A JP2000516280A JP2000516280A JP2001520415A JP 2001520415 A JP2001520415 A JP 2001520415A JP 2000516280 A JP2000516280 A JP 2000516280A JP 2000516280 A JP2000516280 A JP 2000516280A JP 2001520415 A JP2001520415 A JP 2001520415A
Authority
JP
Japan
Prior art keywords
instruction
program
readable medium
instructions
computer
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
JP2000516280A
Other languages
English (en)
Inventor
モリス,デイル・シー
ミルズ,ジャック・ディー
チェン,ウィリアム・ワイ
Original Assignee
インスティチュート・フォー・ザ・ディベロップメント・オブ・エマージング・アーキテクチャーズ・エルエルシー
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 インスティチュート・フォー・ザ・ディベロップメント・オブ・エマージング・アーキテクチャーズ・エルエルシー filed Critical インスティチュート・フォー・ザ・ディベロップメント・オブ・エマージング・アーキテクチャーズ・エルエルシー
Publication of JP2001520415A publication Critical patent/JP2001520415A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1405Saving, restoring, recovering or retrying at machine instruction level
    • G06F11/1407Checkpointing the instruction stream
    • 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/3834Maintaining memory consistency
    • 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/3838Dependency mechanisms, e.g. register scoreboarding
    • 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
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Advance Control (AREA)

Abstract

(57)【要約】 命令の投機実行中に遭遇した問題を先送りにする。投機的に実行した命令の結果をその後に用いる場合、命令実行の完全性を検証する。完全性が検証された場合、実行を継続する。検証されない場合、リカバリ・コードを実行し、コンピュータの状態を変更し、投機的に実行した命令の実行に成功したという状況を生じさせる。一実施形態では、投機的に実行し例外状態に遭遇した命令はいずれも延期例外トークンを発生する。延期例外トークンは、投機的命令全体を伝搬する。投機チェック命令が、延期例外トークンの存在をチェックする。トークンが見つからない場合、命令の投機的実行の完全性が検証されたことになり、通常に実行を継続する。トークンが見つかった場合、投機チェック命令がリカバリ・コードを活性化して、非投機的に命令を再実行することにより、例外を再現する。別の実施形態では、ロードおよびこれに依存する計算命令は、ロードと衝突する可能性のある格納よりも前に繰り上げられる。メモリ・チェック命令を実行し、メモリ・アクセスが実際に独立していたか否かについて検証を行う。独立でなかった場合、メモリ・チェック命令はリカバリ・コードを活性化し、メモリ・アクセスが適正な順序で実行されることを保証する。

Description

【発明の詳細な説明】
【0001】関連出願に対する引用 本願は、1997年10月13日に出願された米国特許出願第08/953,
836号の一部継続出願である。発明の分野 本発明は、コンピュータ・システムにおける命令の実行に関する。本発明の一
態様は、投機的に(speculatively)実行したコンピュータ命令に
よって生じた例外の回復に関する。本発明の別の態様によれば、命令の実行およ
びそれに依存する計算を順不同に進めて性能の向上を図ることに関する。関連技術の説明 「基本ブロック(basic block)」とは、ブランチ(分岐)および/
またはブランチ・ターゲットによって境界が示される、ブランチやブランチ・タ
ーゲットを含まない隣接(連続)する命令の集合(セット)である。このことは
、基本ブロック内のいずれかの命令が実行されると、当該基本ブロック内の全命
令が実行される、即ち、いずれの基本ブロック内に含まれる命令は、全てか皆無
か(all−or−nothing)を基本として実行されるということを意味
する。基本ブロック内にある命令は、当該基本ブロックを目標(ターゲット)に
設定する以前のブランチによって制御が当該基本ブロックに進んだときに、イネ
ーブルされ実行される(ここで用いる場合、「ターゲット設定」(target
ing)とは、ブランチ選択による明示的なターゲット設定およびブランチ選択
によらない暗示的なターゲット設定双方を含むものとする)。前述の説明では、
制御が基本ブロックに進んだ場合、当該基本ブロック内の全命令を実行しなけれ
ばならず、制御が基本ブロックに行かない場合、基本ブロック内の命令は全く実
行されないことを意味する。制御が命令に進む前に、当該命令を実行すること、
または実行を指定することを「投機」(speculation)と呼ぶ。プロ
グラムの実行中にプロセッサが行う投機を「動的投機」と呼び、コンパイラが指
定する投機を「静的投機」と呼ぶ。動的投機は従来技術では公知である。静的投
機については、従来技術の大半はこれに基づいておらず、言及もしていないが、
近年静的投機に対する論及も表面化し始めている。
【0002】 2つの命令の内、一方が他方の結果を必要としない場合、これらを「独立」と
呼び、一方の命令が他方の命令の結果を必要とする場合、「従属」と呼ぶ。独立
命令は、並列に実行可能であるが、従属命令は直列的に実行しなければならない
。プログラムの性能は、独立命令を識別し、これらをできるだけ並列に実行する
ことによって向上する。経験によって、多数の基本ブロックを越えて探索(サー
チ)する方が、個々の基本ブロック内だけを探索するよりも、多くの独立命令を
発見できることが示されている。しかしながら、多数の基本ブロックからの命令
を同時に実行するには、投機が必要となる。
【0003】 独立命令を識別しスケジューリングすることによって、性能向上を図ることは
、コンパイラおよびプロセッサの主要なタスクの1つである。コンパイラおよび
プロセッサ設計におけるトレンドは、独立命令の探索範囲を連続的な発生毎に拡
大することである。従来技術の命令セットでは、例外を発生し得る命令は、コン
パイラによって投機(推測)することができない。何故なら、その命令が例外を
生ずると、プログラムは誤った挙動を行う虞れがあるからである。このため、コ
ンパイラの独立命令探索に有用な範囲が限定されてしまい、投機はプロセッサが
動的投機によってプログラムの実行時に行わざるを得ない。しかしながら、動的
投機は、大量のハードウエアの複雑化を伴い、動的投機を適用する基本ブロック
の数と共に指数的に増大する。このために、動的投機の範囲は実際上限定される
ことになる。対照的に、コンパイラが独立命令を探索することができる範囲は遥
かに広く、潜在的には(可能性として)プログラム全体に及ぶ。更に、一旦単一
の基本ブロック境界を越えて静的投機を実行するようにコンパイラを設計すると
、数箇所の基本ブロックの境界を越えて静的投機を行っても、追加される複雑化
は殆ど生じない。
【0004】 静的投機に着手する場合、いくつかの問題を解決しなければならない。最も重
要な問題の1つは、静的投機した命令が遭遇する例外状態の処理である。先に注
記したように、投機的命令の例外は、当該命令の実行時には引き渡す(deli
ver)ことができないので、命令を投機した基本ブロック(「原始(orig
inating)基本ブロック」として知られている)に制御を渡すまで、例外
の引き渡しを延期するようなコンパイラ・ビジブル機構(complier−v
isible mechanism)が望ましい。同様の機能を実行する機構が
従来技術にも存在し、動的に投機した命令の例外を遅らせ、後になってから引き
渡している。しかしながら、定義上、この機構はコンパイラにはビジブル(可視
)でなく、したがってコンパイラによって操作することができず、コンパイラ主
導の投機においてその役割を果たすことができない。静的に投機した命令の致命
的(フェイタル)または非致命的例外を遅らせ、後に引き渡すことは、従来技術
における公知の方法および装置では不可能であった。しかしながら、従来技術に
は、以下のような静的投機の限定的な形態は存在する。(1)例外状態の遅滞お
よび後の回復を伴わない形態、(2)および本発明の幅(breadth)およ
び範囲に及ぶ静的投機を可能としない形態。
【0005】 したがって、静的投機に着手する場合、当技術分野では、投機的命令の例外を
処理し、投機的命令の副作用がプログラマには全く見えないようにする機構が求
められている。更に、この機構は、できるだけ多くの形態の静的投機に適用でき
るようでなければならない。
【0006】 また、できるだけ多くの独立命令の並列実行を可能にすることにより、コンピ
ュータ・システムにおける性能向上を図る機構も求められている。これは、第2
命令およびそれに依存する計算を、第1命令の例外に依存する可能性があるデー
タに対して行う可能性がある場合でも望ましいものである。発明の概要 本発明の例示的な実施形態の1つでは、コンパイルされたプログラムをコンピ
ュータ読み取り可能な形態で格納(記憶)したコンピュータ読み取り可能媒体を
提供する。プログラムは、格納(ストア)命令と、この格納命令の前にスケジュ
ールされたロード命令と、ロード命令によって読み取られるデータに依存し、格
納命令よりも前にスケジュールされる計算命令と、格納命令およびロード命令が
メモリ内の共通位置にアクセスするか否かについて判定を行うチェック命令とを
含む。
【0007】 本発明の別の例示的な実施形態では、メモリと、格納命令を実行する手段と、
格納命令の前にロード命令を実行する手段と、格納命令の前に、ロード命令によ
って読み取られたデータに依存する計算命令を実行する手段とを含むコンピュー
タ・システムを提供する。また、コンピュータ・システムは、格納命令およびロ
ード命令がメモリ内の共通位置にアクセスしたか否かについて判定を行う手段も
含む。
【0008】 本発明の別の例示的な実施形態では、格納命令、ロード命令、およびロード命
令によって読み取られるデータに依存する計算命令を含むソース・プログラムに
対して実行スケジュールを作成するコンパイラを含むコンピュータ・システムを
提供する。コンパイラは、格納命令およびロード命令がプログラムの実行中共通
メモリ位置にアクセスしないことにコンパイラが確信できない場合、ロード命令
および計算命令を格納命令よりも前にスケジュールする手段を含む。
【0009】 別の例示的な実施形態では、コンピュータ読み取り可能な形態でコンパイルさ
れたプログラムを格納したコンピュータ読み取り可能媒体を提供する。プログラ
ムは、格納命令と、格納命令の前にスケジュールされたロード命令と、プログラ
ムの実行中、格納命令およびロード命令が共通メモリ位置にアクセスするか否か
について判定を行うチェック命令を含む。チェック命令は、格納命令およびロー
ド命令が共通メモリ位置にアクセスしたと判定した場合、制御フローを変更する
【0010】 別の例示的な実施形態では、メモリと、格納命令および以前に実行したロード
命令がメモリ内の共通位置にアクセスしたか否かについてチェックする手段と、
格納命令およびロード命令がメモリ内の共通位置にアクセスしたと判定した場合
、制御フローをリカバリ(回復)コードに変更する手段とを含むコンピュータ・
システムを提供する。
【0011】 別の例示的な実施形態では、コンピュータ・システム上で実行されるとき、格
納命令と、ロード命令と、このロード命令によって読み取られたデータに依存す
る計算命令とを含むソース・プログラムをコンパイルする方法を実行するコンパ
イラによってエンコードしたコンピュータ読み取り可能媒体を提供する。前記方
法は、プログラムの実行中、格納およびロード命令が共通メモリ位置にアクセス
しないか否かについて判定を行うステップと、格納およびロード命令が共通メモ
リ位置にアクセスしないと判定できない場合、ロード命令および計算命令を格納
命令の前にスケジュールするステップとを含む。
【0012】 別の例示的な実施形態では、コンピュータ・システム上で実行されるとき、第
1命令および第2命令を含むプログラムをコンパイルする方法を実行するコンパ
イラであって、第2命令が第1命令の実行に依存するデータ上で動作しないこと
に確信できないコンパイラによってエンコードしたコンピュータ読み取り可能媒
体を提供する。前記方法は、第2命令を第1命令の前にスケジュールするステッ
プと、プログラムの実行中、第2命令が、第1命令の実行に依存するデータ上で
動作するか否かについて判定を行うチェック命令を発生するステップとを含む。
【0013】 更に別の例示的な実施形態では、コンピュータ・システム上で実行されるとき
、ロード命令と、格納命令と、ロード命令によって読み取られたデータに依存す
る計算命令とを含むソース・プログラムをコンパイルする方法を実行するコンパ
イラによってエンコードされたコンピュータ読み取り可能媒体を提供する。前記
方法は、ロード命令および計算命令を格納命令の前にスケジュールするステップ
と、プログラムの実行中、格納およびロード命令が共通メモリ位置にアクセスし
たことを判定した場合に分岐する分岐命令を発生するステップとを含む。前記方
法は、更に、プログラムの実行中、格納およびロード命令が共通メモリ位置にア
クセスしたことを判定した場合に分岐命令が分岐するリカバリ・コードを発生す
るステップを含み、リカバリ・コードは、ロード命令および計算命令のコピーを
含む。
【0014】 別の例示的な実施形態は、命令実行方法に関し、投機的と印(マーク)されて
いる少なくとも1つの命令を実行し、少なくとも1つの命令の実行の完全性(i
ntegrity)を検証し、少なくとも1つの命令の実行の完全性が検証され
た場合、他の命令の実行を継続し、少なくとも1つの命令の実行の完全性が検証
されない場合、リカバリ・コードを実行し、リカバリ・コードを実行した後、他
の命令の実行を継続する命令から成る。
【0015】 本発明の更に別の例示的な実施形態は、コンピュータ・システム上で実行され
るとき、ソース・プログラムをコンパイルして、複数の基本ブロックに編成され
た複数の命令を含むコンパイルされたプログラムを発生する方法を実行するコン
パイラによってエンコードされたコンピュータ読み取り可能媒体に関する。各基
本ブロックは、連続する命令の集合を含み、複数の命令が、第1基本ブロックに
関連し、コンパイルされたプログラムの実行中に例外を発生し得る第1命令を含
む。前記方法は、(A)第1命令を、第1基本ブロックの外部で、第1基本ブロ
ックに先行する少なくとも1つの命令の前にスケジュールするステップと、(B
)コンパイルされたプログラムの実行中、第1命令が例外を発生するか否かにつ
いて判定を行うチェック命令を発生するステップとを含む。
【0016】 本発明の別の例示的実施形態は、コンピュータ読み取り可能な形態でプログラ
ムを格納したコンピュータ読み取り可能媒体に関する。前記プログラムは、複数
の基本ブロックに編成された複数の命令から成り、各基本ブロックが連続する命
令の集合を含む。複数の命令は、第1基本ブロックに関連し、プログラムの実行
中に例外を発生し得る第1命令であって、第1基本ブロックの外部で、第1基本
ブロックに先行する少なくとも1つの命令の前にスケジュールされる第1命令と
、プログラムの実行中、第1命令が例外を発生するか否かについて判定を行うチ
ェック命令とを含む。
【0017】 本発明の更に別の例示的な実施形態は、コンピュータ・システムに関し、複数
の基本ブロックに編成された複数の命令を含むプログラムを実行する手段であっ
て、各基本ブロックが連続する命令の集合を含み、複数の命令は、第1基本ブロ
ックに関連し、プログラムの実行中に例外を発生し得る第1命令を含む、手段と
、第1命令を、第1基本ブロックの外部で、第1基本ブロックに先行する少なく
とも1つの命令の前に実行する手段と、第1命令が例外を発生したか否かについ
て判定を行う手段とを備える。
【0018】 本発明の別の例示的な実施形態は、コンピュータ・システムに関し、複数の基
本ブロックに編成されている複数の命令を含むプログラムに対して例外スケジュ
ールを作成するコンパイラを備え、各基本ブロックが、連続する命令の集合を含
み、複数の命令が、第1基本ブロックに関連し、プログラムの実行中に例外を発
生し得る第1命令を含む。コンパイラは、第1命令がプログラムの実行中例外を
発生しないことに当該コンパイラが確信できない場合、第1命令を、第1基本ブ
ロックの外部で、第1基本ブロックに先行する少なくとも1つの命令の前にスケ
ジュールする手段を含む。
【0019】 本発明の更に別の例示的な実施形態は、コンピュータ読み取り可能な形態でプ
ログラムを格納したコンピュータ読み取り可能媒体に関する。前記プログラムは
、第1投機的命令を備え、この第1投機的命令の実行中に命令例外状態が発生す
る可能性があり、第1投機的命令は、例外状態が最初に検出された場合、命令例
外の通報を延期し、命令例外を通報せずに実行を完了する。
【0020】 本発明の別の例示的な実施形態は、コンピュータ・システム上で実行されると
き、ソース・プログラムをコンパイルして、コンパイルされたプログラムを発生
する方法を実行するコンパイラによってコード化されたコンピュータ読み取り可
能媒体に関する。前記方法は、(A)第1投機的命令を発生するステップから成
り、第1投機的命令の実行中に命令例外状態が発生する可能性があり、第1投機
的命令は、例外状態が最初に検出された場合、命令例外の通報を延期し、命令例
外を通報せずに実行を完了する。
【0021】 本発明の更に別の例示的な実施形態は、コンピュータ・システムに関し、投機
に基づいて第1プログラム命令を実行する手段であって、第1プログラム命令が
、当該第1プログラム命令の実行中に命令例外状態を生じる可能性がある、手段
と、第1プログラム命令の実行中に例外状態が検出された場合、命令例外の通報
を延期させる手段と、投機が誤っていたか否かについて判定を行う手段と、投機
が誤っていた場合、命令例外を無視する手段とを備えている。
【0022】 本発明の別の例示的な実施形態は、コンピュータ・システム上で実行された場
合、以下のステップを含む方法を実行するプログラムをエンコードしたコンピュ
ータ読み取り可能媒体に関し、前記方法は、投機に基づいて第1プログラム命令
を実行するステップであって、第1プログラム命令が、当該第1プログラム命令
の実行中に命令例外状態を発生する可能性がある、ステップと、第1プログラム
命令の実行中に例外状態が最初に検出された場合、命令例外の通報を延期させる
ステップと、投機が誤っていたか否かについて判定を行うステップと、投機が誤
っていた場合、命令例外を無視するステップとを含む。詳細な説明 本発明の一実施形態は、繰り上げた(進めた)命令即ち投機命令の実行中に遭
遇した問題からの回復を可能とする方法および装置を対象とする。本発明のこの
態様は、あらゆる種類のコンピュータ・システムでも採用可能である。かかるコ
ンピュータ・システムの一例が、図1に示す汎用コンピュータ50である。汎用
コンピュータ50は、プロセッサ52、入力デバイス54、出力デバイス56、
およびメモリ58を含み、これらはバス60を通じて接続されている。メモリ5
8は、主メモリ62(即ち、ダイナミック半導体メモリのような高速揮発性メモ
リ)および副メモリ64(即ち、磁気ディスクのような不揮発性メモリ)を含む
。メモリ58は、プロセッサ52上で実行する1つ以上のプログラム66を格納
する。
【0023】 プログラム66は、プロセッサ52によって実行されると、汎用コンピュータ
50を制御する。プログラム66は、コンパイラを含み、その機能については図
6に関連して以下で説明する。
【0024】 尚、図1のコンピュータ・システム50は、単に例示の目的で提示するに過ぎ
ず、以下に記載する本発明の実施形態は、多数のその他の種類および構成のコン
ピュータ・システム上でも実現可能であることは認められよう。本発明の一態様
は、静的投機命令の実行中に遭遇した問題から回復する方法および装置を提供す
る。本発明の一実施形態は、コンパイラによって投機的に実行するようにスケジ
ュール化されたあらゆる形式の命令セグメントを実行し、投機的に実行された命
令の実行の完全性を検証し、何らかの問題が検出された場合、問題を補正するリ
カバリ・コードを実行することである。
【0025】 命令は、投機的および非投機的の2種類に分類される。コンパイルの開始時に
、全ての命令は非投機的に初期化される。スケジューリングの間に、コンパイラ
が命令の原始基本ブロック以外の命令をスケジュールする場合、コンパイラはこ
の命令に投機的であるというマークを付ける。例外状態に遭遇した非投機的命令
は例外を発生する。例外状態に遭遇した投機的命令は、例外を発生しないが、代
わりに「延期例外トークン」(DET:deferred exception
token)をその宛先(行先)に書き込む。例外状態の存在により、指定し
たコンピュータ命令が適正なオペランドで完了することが妨げられ、したがって
、この命令の宛先は、正しい結果の代わりに、DETを含むことになる。DET
を読み取った非投機的命令は例外を発生する。DETを読み取った投機的命令は
、別のDETを当該命令の宛先に書き込む(この場合にも宛先には正しい結果が
収容されないことを注記しておく)。この挙動のことを「伝搬」(propag
ation)と呼ぶ。特定の投機的命令の原始基本ブロック内に非投機的命令を
置くことにより、そして投機的命令の宛先(またはDETを伝搬した可能性があ
るいずれかの位置)を読み取るように非投機的命令を構成することにより、制御
が原始基本ブロックに進んだ時点で、投機的命令が発生したDETを検出するこ
とができる。この時点で、元来DETを発生する原因となった例外状態を再現し
、以前に伝搬したDET全てを正しい結果と置き換える必要がある。これは、「
回復(リカバリ:recovery)」と呼ばれるプロセスによって行われる。
回復は、コンパイラが発生する追加のコードによるプログラムの改良を含むこと
ができ、このコードは、非投機的形態の依存性投機的命令集合(セット)のコピ
ーであり、実行時に、全ての例外状態が例外を発生し、以前に書き込んだ宛先の
全てを正しい結果で上書きする。リカバリ・コードは、命令シーケンスの正確な
コピーである必要はなく、実行すると同じ結果が得られるコードであればよい。
更に、本発明の一実施形態では、DETの存在をチェックし、DETが検出され
た場合に関連するリカバリ・コードを活性化するという特定した目的で、新たな
命令を定義する。
【0026】 ここまでに説明した本発明の実施形態は、DETの正確な形態には依存しない
。また、本発明の精神または範囲に影響を与えることなく、投機的および非投機
的命令を指定する代替実施形態も可能である。例えば、ある命令がその原始基本
ブロックの外部でスケジュールされたか否かには無関係に、投機的に振る舞うよ
うにその命令を定義することも可能である。
【0027】 この時点までに引用した投機を、「制御投機(control specul
ation)」と呼ぶ。何故なら、命令が実行された後に、制御がこれらに移さ
れるからである。投機は、制御投機以外にも、他の形態を取ることができる。そ
の一例は、「データ投機(data speculation)」であり、これ
によって、命令Bに依存し得る命令Aを、命令Bの前に実行することを可能とす
る機構を定義する。データ投機はいずれの命令クラスにも適用可能であるが、以
下ではデータ投機を例証するために、ロードおよび格納について説明する。格納
の下にあるロードは、このロードによって読み取られるアドレスが、格納によっ
て書き込まれるアドレスとは決して等しくないことを示すことができない限り、
一般には、この格納の上にはスケジュールすることはできない。アドレスが等し
い場合、ロードは当然格納の結果を受け取ることになる。しかしながら、ロード
によって読み取られるアドレスが、格納によって書き込まれるアドレスとは決し
て等しくならないことを示せれば、格納の上に安全にロードをスケジュールする
ことができる。データ投機が発生するのは、双方によってアクセスされるアドレ
スが決して等しくならないことを証明できないときに、コンパイラが格納よりも
上にロードをスケジュールした場合である。双方の命令によってアクセスされる
アドレスが等しいと実行時に判定された場合、衝突として知られるエラー状態が
発生する。衝突の場合、回復機構を用いて、誤って書き込まれた宛先を全て訂正
する。本発明の一実施形態では、ロード命令およびこれに依存する1つ以上の命
令は、ロード命令と格納命令との間に衝突があり得るとコンパイラが判断した場
合でも、コンパイラによって格納命令の上にスケジュールする。このように、本
発明の態様は、制御投機、データ投機、およびその他の投機形態を対象とする。
【0028】 本発明の一態様は、コンパイラが命令を投機的に実行するようにスケジュール
することができ、しかもコンピュータ・システムは、命令の投機的実行の間に発
生する投機エラーから回復することができる技法を提供する。本発明の別の態様
は、命令を順不同に進める(advance)方法および装置を対象とする。こ
れは、第1および第2命令がメモリの一部において同じアドレスにアクセスする
ことによる衝突として知られているエラー状態を生ずる可能性がある第1命令(
例えば、格納命令)よりも先に、第2命令およびこれに依存ずる計算全体(例え
ば、ロード命令)を実行するようにスケジュールすることを含む。
【0029】 本発明の態様の幾つかを実現するために、コンパイラが、命令をその原始基本
ブロックの外部でスケジュールし(制御投機)、同じメモリ位置にアクセスする
潜在的な可能性があり、したがって潜在的に依存性のある命令の並列実行をスケ
ジュールする(データ投機)ことを可能にする、コンピュータ・アーキテクチャ
を規定することができる。かかるコンピュータ・アーキテクチャの一例が、19
97年10月13日に出願した、Jonathan K. Ross et.
al(ジョナサン K.ロスその他)による”COMPUTER ARCHIT
ECTURE FOR THE DEFERRAL OF EXCEPTION
S ON SPECULATIVE INSTURUCTIONS”(投機的命
令の例外延期のためのコンピュータ・アーキテクチャ)と題する同時係属中の米
国特許出願第08/949,295号に、更に詳細に記載されている。その内容
は、この言及により本願にも援用されるものとする。以下では、本発明の態様を
このアーキテクチャに関して記載するが、本発明はこのアーキテクチャとともに
使用することに限定される訳ではなく、他のアーキテクチャ構造を用いても実現
可能である。これについては、以下で更に詳しく説明する。
【0030】 この新たなアーキテクチャは、例外状態が発生した場合に直ちに例外を通報し
ない「投機的」命令集合を定義する。代わりに、投機的命令が、「延期例外トー
クン」(DET)を、当該命令が指定する宛先に書き込むことによって、例外を
延期させる。また、命令集合は、「非投機的命令」も含み、これは、従来の命令
と同様に、例外状態が発生した場合直ちに例外を通報する。
【0031】 命令例外は、当技術分野では周知のことであり、ページ・フォールト、不正オ
ペランド、特権的違反、ゼロによる除算演算、オーバーフロー等が含まれるが、
これらに限定される訳ではない。また、新たなアーキテクチャは、新たな種類の
メモリ投機も提供し、プログラマによって定義された論理的順序において格納命
令の後に続くロード命令は、同じメモリ位置をアクセスしないであろうという投
機に基づいて、これら2つの命令を格納命令の前に実行することができる。例え
ば、最新の投機的メモリ・アクセスの記録を収容する繰り上げロード・アドレス
・テーブル(ALAT:advanced load address tab
le)にアクセスすることができるメモリ投機チェックを備え、投機が正しいか
否かについて判定を行う。投機が正しい場合、命令は適正に実行されたことにな
る。正しくない場合、ロード命令、およびこのロード命令に依存し格納よりも上
にスケジュールされたいずれの命令も、再実行し格納命令によって書き込まれた
内容を引き出す。
【0032】 投機的とマークされた命令を用いることにより、コンパイラは、それらの原始
基本ブロックの外部で、命令をスケジュールすることができ、依存性である可能
性のあるメモリ・アクセスを並列にスケジュールすることができる。前述のよう
に、投機的命令が例外を発生した場合、「延期例外トークン」を、命令が指定す
る宛先に書き込むことができる。いずれのソースにおいてもDETを検出したあ
らゆる投機的命令は、その宛先にDETをコピーする。投機的命令がソースにお
いてDETを発見した場合、その命令に関連する機能を実行する必要はないこと
を注記しておく。命令は単にDETを宛先にコピーすることができるだけである
。このように、DETは投機的命令のブロック全体を伝搬する。したがって、本
発明の一実施形態では、計算結果を含む宛先にDETがあるか否かチェックすれ
ば、計算に用いられる各オペランドをチェックしなくても済む。
【0033】 ソースにおいてDETを検出したあらゆる非投機的命令は、即時例外を発生す
ることができる。したがって、DETは、非投機的命令に辿り着くまで(そして
辿り着けば)、データフロー状に投機的命令中を伝搬する。
【0034】 実行時に、命令を実行した投機が正しくないことをプログラムが判断した場合
(例えば、誤って予測されたブランチ)、プログラムは単にDETを無視すれば
よい。何故なら、DETはプログラムによってアクセスされないからである。し
かしながら、投機が正しかった場合、DETは、当該DETを発生させた命令の
原始基本ブロックを実行すれば、そして実行するときに、実際の例外に変換され
る。一実施形態では、この変換は、「投機チェック」命令、または、簡略化して
「chk.s」と呼ばれる命令によって実行する。chk.s命令はソースを読
み取り、ソースがDETを含む場合、リカバリ・コードを実装する指定のターゲ
ット・アドレスに分岐する。同様に、本発明の一実施形態では、メモリ投機の正
確性を、chk.a命令と呼ぶ「アドバンス・チェック」(advance c
heck)命令によって判定することができる。chk.a命令は、メモリ位置
が順不同でアクセスされたか否かについて判定を行い、そのようにアクセスされ
た場合、chk.a命令は、リカバリ・コードを実施する指定のターゲット・ア
ドレスに分岐する。chk.a命令については、以下で更に詳しく説明すること
にする。chk.sおよびchk.aは、各々、多数の方法で実現可能であり、
実行する命令の制御フローにおいて変化を生ずる。例えば、各々条件付き分岐命
令として、あるいは例外ハンドラを呼び出す例外を発生する命令として、実現す
ることができる。
【0035】 定義として、chk.sおよびchk.a命令は常に非投機的とする。一般に
、これらの命令がDETまたは正しくないメモリ投機を検出した場合、リカバリ
・コードを実行する。これは、違反命令(offending instruc
tion)の非投機的バージョンを含む。DETを検出したchk.s命令に関
して、リカバリ・コードの実行時に、違反命令の非投機的バージョンは、その宛
先において、DETを正しい結果と置換するか、および/または例外を発生する
。後のいずれかの投機的命令が違反命令に依存した場合、これらもリカバリ・コ
ード内に含まれ、再実行される。何故なら、DETは以降の投機的命令の宛先に
伝搬され、したがってこれらの宛先には正しくない結果が含まれている可能性が
あるからである。chk.a命令に関して、リカバリ・コードは、違反ロード命
令を再実行し、メモリから適正な内容をロードしなければならない。加えて、ロ
ードが依存する格納よりも上でスケジュールされ、違反ロード命令に依存するあ
らゆる命令も、再実行される。ロード命令、および格納命令よりも上でロードさ
れた値に依存する計算命令のスケジューリングについては、以下で更に説明する
ことにする。違反命令に依存しないあらゆる命令は、誤ってプログラム状態を変
更するので、再実行しない。コンパイラは投機的命令および投機のチェックをス
ケジュールしたので、コンパイラは個々の投機命令集合に適したリカバリ・コー
ドを発生することができる。
【0036】 本発明の一態様は、投機的実行のために命令をスケジュールし、適切なリカバ
リ・コードを発生することができるコンパイラ、および前述のアーキテクチャを
実現するコンピュータ・システムのような、投機的とマークされている命令を実
行可能なアーキテクチャを有するコンピュータ・システムによって実現すること
ができる。
【0037】 図2は、3つの基本ブロックA1、B1およびC1で構成された元のコード・
シーケンス10を示す。元のコード・シーケンス10は、プログラマが指定した
コードを表わす。コード10内では、命令I0は、命令I2より前に来る命令を
表わす。命令I2は、レジスタr0の内容が非ゼロである場合に命令I14に分
岐する、分岐命令である。命令I4は、レジスタr1に、レジスタr2が指し示
すメモリ位置の内容をロードする。命令I6は、レジスタr1の内容を3ビット
位置だけシフトし、その結果をレジスタr3に書き込む。命令I8は、レジスタ
r3およびr5の内容を加算し、結果をレジスタr4に書き込む。命令I10は
、レジスタr4の内容を、レジスタr7の内容と比較する。レジスタr4の内容
がレジスタr7の内容よりも大きい場合、非ゼロ値をレジスタr6に書き込む。
それ以外の場合、レジスタr6にゼロを書き込む。命令I12は、レジスタr6
の内容が非ゼロの場合に、命令I100(図2には示さない)に分岐する分岐命
令である。最後に、命令I14は、分岐が行われない場合に命令I12の後に来
る命令群を表わす。基本ブロックB1内では、命令I12は命令I10に依存し
、一方命令I10は命令I8に依存し、一方命令I8は命令I6に依存し、一方
命令I6は命令I4に依存する。
【0038】 図3は、本発明の例示としての一実施形態による静的投機を用いて、図2の元
のコード10をスケジュールして得られた、スケジュール化コード・シーケンス
20を示す。図3において、命令I4、I6、およびI8は、それらの原始基本
ブロックB1の外部で、そしてブロックA1内でスケジュールされており、した
がってコンパイラによって投機的とマークされている(「.s」変更子によって
示す)。命令I10およびI12は、その原始基本ブロックB1の外部でスケジ
ュールされておらず、これらは投機的ではないので「.s」を付されていない。
【0039】 本発明の一実施形態では、ある種の命令、一般的に例外を発生しない命令は、
常に、それらがその原始基本ブロックの外側でスケジュールされたか否かには無
関係に、投機的であるかのように振る舞う(そして、例えば、DETを伝搬する
)。したがって、これらの命令には、明示的に投機的とも非投機的ともマークさ
れていない。ロード命令のように、例外を生ずるある種の別の命令は、投機的お
よび非投機的双方の場合があり得る。したがって、コンパイラは、これらがどの
ようにスケジュールされているかに応じて、投機的または非投機的と明示的にマ
ークを付ける。また、本発明は、全ての命令に明示的かつ個別に投機的または非
投機的とマークを付けるというような代替実施形態にも適用される。
【0040】 最も早い投機的命令で始まり、最も遅い投機的命令で終わり、全てが同じ基本
ブロックからのものである依存投機的命令のシーケンスを、「投機的依存チェー
ン」(speculative dependence chain)と呼ぶ(
ここで用いる場合、「早い」および「遅い」は、元のプログラムの順序によって
定義する)。図2および図3に示すコードでは、投機的依存コードは、命令I4
で始まり、命令I6を含み、命令I8で終わる。投機的依存チェーンにおけるい
ずれかの命令が例外状態に遭遇した場合、違反命令の宛先にDETを書き込み、
DETは投機的依存チェーンを下って伝搬する。例えば、命令I4が、ページ・
フォールトのような例外状態に遭遇した場合、DETをレジスタr1に書き込む
。命令I6は、レジスタr1からDETを読み取ると、次にレジスタr3にDE
Tを書き込む。同様に、命令I8は、レジスタr3内のDETを読み取ると、次
にDETをレジスタr4に書き込む。この例では、命令I6は、shl.s命令
によって指定されるシフト機能を実行する必要がなく、命令I8は、add.s
演算によって指定される加算機能を実行する必要がないことを注記しておく。こ
の命令は、単に延期例外トークンを伝搬するだけでよい。したがって、一旦延期
例外トークンを発生したなら、そうでない場合に投機的命令の実行によって費や
される実行資源が、他の命令を実行するために使用可能となり、あるいは休止状
態のまま残しておくことにより電力消費を削減することができる。
【0041】 命令I2において、レジスタr0を評価する。レジスタr0が非ゼロである場
合、実行は命令I14に分岐し、この場合、レジスタr4に格納されている値は
不要となる。何故なら、命令I4、I6、およびI8は、誤った投機に基づいて
実行され、命令I4、I6またはI8によって例外が発生されても、いずれも無
視することができるからである。コンパイラは、命令I14およびこれに続く命
令が、命令I4、I6、およびI8が実行されなかった場合にのみ実行されるこ
とを把握しているので、命令I14およびそれに続く命令は、単にレジスタr1
、r3、およびr4内に置かれている結果を無視し、これらのレジスタを他の目
的のために再利用することができる。誤った投機のために投機的に実行された命
令の影響に適正に対処するコードを発生するのは、コンパイラの役割である。
【0042】 しかしながら、レジスタr0がゼロである場合、命令I4、I6、およびI8
の結果は妥当性が検査される。コンパイラによるスケジューリングの間、最初の
命令が特定の基本ブロックから投機的とされた場合(この例では命令I4)、コ
ンパイラはchk.s命令(図3における命令I9)を発行し、当該基本ブロッ
ク(この例ではB1)内に置く。先に注記したように、chk.sは非投機的で
あり、それが置かれている基本ブロックの外側ではスケジュールされていない。
命令I9におけるchk.sは、命令I8の宛先レジスタである、レジスタr4
を読み取る。命令I9は、命令I9によって宛先が読み取られた命令、即ち、命
令I4、I6、およびI8を含む、前述の投機的依存チェーンにおける全命令の
結果を検証する。
【0043】 命令I4、I6、およびI8の実行によってDETが発生しなかった場合、命
令I4、I6、およびI8は妥当性が確認されたことになり、これらの命令の投
機的実行が成功したことがこうして確認される。したがって、実行は命令I10
に進む。
【0044】 しかしながら、命令I4、I6、およびI8がDETを発生した場合、このD
ETはレジスタr4に伝搬し、ここで命令I9がこのDETを検出する。投機的
依存チェーン内の命令(命令I4、I6、およびI8)は、それらの宛先レジス
タが正しい結果の代わりにDETを含んでいるので、信頼性のない結果を生成す
ることになる。したがって、chk.s命令(I9)はDETを検出し、命令I
4rにおいて開始するリカバリ・コードに分岐する。命令I4r、I6r、およ
びI8rは、それぞれ、命令I4、I6、およびI8の非投機的バージョンであ
り、命令I9rは命令I9に分岐し、chk.s命令を再実行する。命令I9は
常に再実行する必要なないが、投機的依存チェーンが互いに依存しあう場合のよ
うに、そうすることが好ましい状況は多い。
【0045】 命令I4r、I6r、およびI8rは非投機的であるので、これらは例外を延
期させない。したがって、例外は発生され処理される。例えば、命令I4rがペ
ージ・フォールドを発生したと仮定する。制御は、ページ・フォルトに対処する
役割を担う例外ハンドラに移り、このフォルトを処理する。例えば、プログラム
の実行を中断する場合があったり、あるいはメモリ・ページを仮想メモリ・スワ
ップ・ファイルから読み込む場合もある。
【0046】 先に注記したように、正しいプログラム状態を保存するために、違反した投機
的依存チェーンからの命令のみが、リカバリ・コードの実行中プロセッサ状態を
変更することを許される。図3に示す例では、命令I4、I6、およびI8のみ
が、命令I4r、I6r、およびI8rとして再実行され、他の命令は再実行さ
れない。この選択的再実行を行うには、最も早い命令から始まり、宛先がchk
.s命令によって読み出された命令で終わる、投機的依存チェーン内の命令全て
のコピーを作る。このコピーを「リカバリ・コード」と呼び、chk.s命令は
、chk.s命令がDETに遭遇した場合、制御をリカバリ・コードに移管する
。リカバリ・コードの終了時に、コンパイラは命令I9へのブランチ・バックを
発行する。リカバリ・コードは、対応するchk.s命令が実行されるときにの
み実行されるので、そしてchk.sは常に非投機的であるので、リカバリ・コ
ード内の命令は全て非投機的である。したがって、リカバリ・コード内の命令は
、非投機的バージョンに変換される(必要であれば)。図3に示す例では、命令
I4、I6、およびI8のメインライン・バージョンには全て投機的とマークさ
れており、一方リカバリ・コードのコピー(命令I4r、I6r、およびI8r
)には全て非投機的とマークされている。同じリカバリ・コードが、多数のch
k.s命令のターゲットとされる場合もあり得る。更に、別個のchk.s命令
に別個のリカバリ・コード・セグメントに分岐させることによって、同じ投機的
依存チェーンに多数のリカバリ・コードが関連付けられることもある。
【0047】 DETの存在は、例外状態が投機的依存チェーン内のある命令に発生したこと
を示す。したがって、いずれの命令を再実行する前にも、最初に、関連する例外
ハンドラを活性化することによって例外状態を処理する。本発明の一実施形態は
、この要件を自動的に満たす。何故なら、リカバリ・コードは、投機的依存チェ
ーン内にある全ての関連する命令の非投機的コピーを含み、非投機的命令は直ち
に例外を通報するからである。リカバリ・コードの実行時に、元の例外が違反命
令によって再度発生され、適切な例外ハンドラが活性化される。例外ハンドラが
例外状態を訂正した後、再度制御をリカバリ・コードに戻し、残りの命令を実行
し続けてから、メインライン・コードに戻る。
【0048】 本発明は、いずれの特定のDETフォーマットにも依存しない。好適な実施形
態では、DETは単に延期した例外が存在することを示すだけで、これ以上の情
報を含まない。代替実施形態には、特定の例外ハンドラが必要とし得るその他の
情報、例えば、例外の種類、違反命令のアドレス等を含むように、DETを定義
できるものもある。
【0049】 また、本発明の別の態様は、データ投機のように、別の種類の投機からの回復
を可能にするものもある。本発明の一実施形態では、格納命令に先立ち順不同で
進められるロード命令を用いて、データ投機を例示し、図4ないし図6を参照し
ながら説明する。ここで用いる場合、ロードおよび格納命令を引用する際、命令
が他の機能を実行するか否かにはかかわらず、それぞれリードおよびライトをメ
モリに対して実行するあらゆる命令を示すものとする。ロード命令の方が、メモ
リ・レイテンシのために、通常他の命令よりも必要な実行時間量が長い。ロード
命令をプログラムの実行の初期に移動させることによって、コンピュータにおけ
る命令実行の効率が向上する。繰り上げロードと呼ばれるロードは、メモリの使
用を必要とするアクティビティの実行並列性を高めることができる。
【0050】 先に概述したように、コンパイラはどこでロード命令および格納命令が衝突す
る(即ち、共通メモリ位置をアクセスする)のか、100パーセントの確信度で
検出することはできない。このために、ロード・レイテンシが重複しない、即ち
、ロードをこれと衝突しそうな格納の前に移動しない、より控えめな命令スケジ
ュールとならざるを得ないという点で、並列性の達成に対する障壁となる場合が
多い。しかしながら、これらの場合の多くでは、ロードおよび格納命令は実際に
は衝突しない。したがって、本発明の一実施形態は、単一または多元プロセッサ
・システムにおけるプログラム実行の並列性を改善する一手段として、ロード命
令およびこれに依存する計算を、潜在的に衝突し得る格納命令の前に実行するこ
とを可能にする。
【0051】 図4に示す単純な元のコード30について検討する。コード30は、レジスタ
r3の内容を、レジスタr1の内容によってインデックス(指標付け)されてい
るメモリ位置に格納する命令I22、レジスタr2の内容によってインデックス
されているメモリ位置の内容をレジスタr4にロードする命令I24、およびレ
ジスタr4およびr6を加算し、その結果をレジスタr5に書き込む命令I26
を含む。コンパイラがコード30をスケジュールする場合、命令I22およびI
24を実行する際にレジスタr1の内容がレジスタr2の内容と同一であること
は不可能ではないが、可能性は低いと判定すると仮定する。更に、コンパイラは
、命令I22の前(またはこれと並列に)命令I24およびI26をスケジュー
ルする方が一層効率的であると判断すると仮定する。命令の並列スケジューリン
グに関して、単一プロセッサ・システムにおいても、単一プロセッサは典型的に
多数の実行ユニットを含み、ここで多数の命令を並列に実行可能であることは認
められよう。
【0052】 図5は、スケジュール化コード40を示す。これは、本発明の一実施形態にし
たがって、コンパイラが図4の元のコード30をスケジュールしたときに生成さ
れたものである。コード40は、命令I22(格納命令)の前にスケジュールさ
れた命令I24およびI26を含む。「.a」(アドバンス命令を示す)がロー
ド命令に添付されていることに注意されたい。これは、このロード命令が繰り上
げロード・アドレス表(ALAT)内にロード・アドレスを記録していることを
示す。命令I25は、ALATをチェックし、ロード(I24)および格納(I
22)命令が同じメモリ位置をアクセスしたか否かについて判定するchk.a
命令である。レジスタr1およびr2の内容が等しくなかった場合、これらの命
令は同じメモリ位置をアクセスしなかったことになり、chk.a(I25)は
なにもしない。しかしながら、レジスタr1およびr2の内容が等しかった場合
、chk.a命令(I25)はデータ投機エラーを検出し、命令I24rから始
まるリカバリ・コードに分岐する。命令I24rは、ロード命令を再実行し、格
納命令(I22)の後にロード命令を再実行するので、適正な結果をレジスタr
4にロードさせる。命令I26rは、加算命令を再実行し、正しい結果をレジス
タr5に書き込み、命令I23rは再度命令I25に分岐し、データ投機エラー
がないことを検証する。
【0053】 図6は、図3および図5に示したスケジュール化コードの変化を発生するため
にコンパイラによって実施可能なルーチンの一例を示すフローチャートである。
他の実施態様も可能であるので、このフローチャートは単なる一例として提示す
るに過ぎない。本発明は、特定のプログラム言語やコンピュータ構成の使用に限
定されるものではなく、単一または多元プロセッサ・システムに用いられるコン
パイラに適用可能である。
【0054】 図6のプロセスは、コンパイラによって未だスケジュールされていないソース
・コンピュータ・プログラムにおける命令を表わす、従来の依存性グラフ(de
pendency graph)をコンパイラが作成するときに、ステップ50
3において開始する。本発明は、いずれの特定形式のグラフにも限定される訳で
はない。依存性グラフは、ソース・コンピュータ・プログラムのセグメントを表
わす少なくとも1つのパス、およびコンピュータ・プログラムのセグメントにお
ける各命令を表わすノードを有する図を含み、いくつかの形態を取ることができ
る。各プログラム毎の依存性グラフは、典型的に、複数のパスを含み、その各々
が複数のノードを有する。命令を表わすノードには、当該命令を実行するために
必要なクロック・サイクル数のように、命令に関連する情報を注釈として付ける
とよい。典型的に、図においてノードを接続するアーク(arc)は、命令間の
依存性を示す。
【0055】 ステップ506において、コンパイラはグラフを検討し、グラフのどのパスが
、開始から終了まで最も長い全実行時間を要することになる命令シーケンスを含
むかについて判定を行う。
【0056】 ステップ509において、コンパイラは、プログラムにおける最長パスの実行
を最適化しようとする。何故なら、最長パスは、命令シーケンスの実行時間を制
限する、プログラム内のクリティカル部分を表わすからである。コンパイラによ
って、従来の最適化技法を用いることができ、更に別の最適化技法も、繰り上げ
ロードおよびそれに依存する計算に関係する毎に、以下で説明する。
【0057】 前述のように、コンパイラが最長クリティカル・パスを最適化することができ
る1つの方法は、データ投機によることである。本発明の一実施形態では、これ
は、リード動作を含むロード命令のような命令を、ライト動作を含む格納(スト
ア)命令よりも前に、プログラムの実行の早期に移動させることを含む。ステッ
プ512において、コンパイラは、ロード命令が最長クリティカル・パス内にあ
るか否かについて判定を行う。ロードが最長パス内にある場合、コンパイラは、
最適化方法の1つとして、このロードおよびそれに依存する命令を繰り上げる。
これについて以下で説明する。
【0058】 短縮すべきパス内でロード命令が発見された場合、コンパイラは、次に、ステ
ップ521においてどの計算命令が、ロード命令によって読み取られたデータに
依存するのかについて判定を行う。計算が依存性であるのは、これらがロード命
令の完了から得られる値の使用を必要とする場合である。
【0059】 ステップ524において、ロード命令を、スケジュール化命令シーケンス内の
その場所から除去する。ステップ527において、ロードに依存する計算(ステ
ップ521において識別した)を繰り上げ、ロード命令に続けることにより、ロ
ード命令およびこのロード命令に依存する計算双方を繰り上げて、命令シーケン
スの最適化を図る。コンパイラは、「ld.a」と称するロード命令を、その実
行によってプログラムの性能が全体的に向上し得るような位置の前に繰り上げる
【0060】 前述したように、格納命令は、依存性グラフのパスにおいて、ロード命令「l
d.a」の前に存在する可能性があり、コンパイラはロードおよび格納が衝突す
るか(即ち、同じメモリ位置を使用するか)否かについて判定できない場合があ
る。ステップ530において、コンパイラは、ロードおよび格納が衝突しない絶
対的な確信度があるか否かについて判定を行う。
【0061】 移動させる前に、ロードおよび格納が衝突しないことの確信が判定できない場
合、ステップ533において、ステップ524において除去したロード命令を、
図3および図4に関連付けて先に説明したchk.a命令のようなチェック命令
と置換する。chk.a命令は、ロード命令と置き代わり、ロードを繰り上げな
ければスケジュールされていた場所で実行される(以下で説明する)。
【0062】 ステップ536において、コンパイラは、ステップ527において繰り上げた
、繰り上げロードおよびこの繰り上げロードに依存する計算に対して、リカバリ
・コードを発生する。リカバリ・コードは、必要であれば、以下で述べるように
chk.a命令によってコールされる。
【0063】 ステップ512においてロード命令が最長クリティカル・パス内で発見されな
い場合、またはステップ530において、ロードが、衝突する格納命令の前に繰
り上げられていないことをコンパイラが絶対的に確信すると判定した場合(した
がって、チェック命令やリカバリ・コードは不要である)、またはリカバリ・コ
ードをステップ536において発生した場合、プロセスはステップ539に進み
、ここでコンパイラは、潜在的に最適化が可能な最長クリティカル・パスが残っ
ているか否かについて判定を行う。コンパイラは、当該コンパイラが可能な限り
のソース・プログラムを最適化するまで、プログラムにおける次の最長パスの各
々を最適化して行くことによって、ソース・プログラムの実行並列性を向上させ
ることができる。
【0064】 ステップ539において、コンパイラはもはやプログラムを最適化できないと
判定した場合、プロセスはステップ542に進み、コンパイラは、最適化した命
令シーケンスを実行のためにスケジュールする。しかしながら、ステップ539
において、潜在的に最適化が可能な最長クリティカル・パスが未だ残っていると
コンパイラが判断した場合、コンパイラはステップ506において次の最長パス
を特定する。このように、最適化が可能なグラフ内のパス全てを最適化するまで
、プロセスは継続する。
【0065】 ステップ542において、コンパイラは、命令の実行をスケジュールし、前述
の最適化手順によって行われた実行順序のあらゆる変更をも反映する。コンパイ
ラは、プログラムにおける命令実行のスケジュールを、多数の方法で行うことが
でき、並列実行ユニットを利用することができるが、本発明はいずれの特定のス
ケジューリング機構にも限定されない。図4において先に説明した例では、最適
化によって得られたコードを図5に示し、リカバリ・コードを命令I24r、I
26rおよびI23rとして記す。
【0066】 図7は、図6と関連付けて先に説明したような技法によって最適化した命令シ
ーケンスを実行する際に、コンピュータ・システムが実行するルーチンを示すフ
ローチャートであり、ロード命令および依存する計算を、順不同に格納の前に進
めることを含む。
【0067】 スケジュール化した命令シーケンスの実行は、ステップ603において開始す
る。命令シーケンスの実行中、繰り上げロード(例えば、図5におけるld.a
)をステップ606において実行する。繰り上げロード命令を実行した後、ステ
ップ609において、ALATを更新し、繰り上げロード命令によって読み取ら
れたメモリ位置(例えば、r2内のアドレス)の範囲を記録する。ステップ61
8において、実行した格納動作のように、後に実行される格納命令が、繰り上げ
ロードおよび格納命令が共通のメモリ位置にアクセスしたか否かについて判定す
ることを可能とするために、ALAT内にエントリを作る。特定の繰り上げロー
ドおよびそれに対応する格納命令のメモリ・アドレスの範囲を比較することを可
能にするあらゆる構造が使用可能であるので、本発明は、いずれの特定のALA
T構造にも限定される訳ではない。
【0068】 図8に示す一実施形態では、ALAT内のエントリは、物理メモリ・アドレス
・フィールドおよびメモリ・アクセス・サイズ・フィールドを含み、これらが一
緒になってアクセスされるメモリ位置の範囲を規定する。本発明は、このメモリ
位置範囲を規定する方法に限定される訳ではなく、多数のその他の技法も採用可
能である。例えば、アクセスされるメモリ範囲は、開始および終了メモリ・アド
レスによって、またはメモリ終了アドレスおよび範囲によって特定することも可
能である。図8に示す実施形態では、ALATは有効ビットのフィールドも含み
、エントリが有効か否かについて示すために用いられる。以下で説明するが、本
発明の一実施形態では、ALAT内のエントリを無効化することが望ましい時点
がある(例えば、2つのアプリケーション間のコンテクスト切り替え)。有効ビ
ットは、かかる無効化を実行する際に便利な機構を提供する。
【0069】 本発明の一実施形態では、各々対応する格納よりも前に繰り上げられた多数の
ロードが同時にある場合もあり得る。以下で説明するが、プログラムの実行中、
各ロードおよび格納対間に衝突が起きなかったことを検証する技法が備えられて
いる。したがって、本発明の一実施形態では、ALATは、対応する格納命令と
の可能な衝突を判定するために、エントリを特定することができるように、対応
する繰り上げロード命令を一意に識別する情報を含む。この一意の識別は、多く
の方法で実現可能であり、本発明はいずれの特定な実施態様にも限定されるもの
ではない。図8に示す実施形態では、特定の繰り上げロードに対するエントリに
、繰り上げロード命令において用いられるレジスタ番号およびレジスタの型(汎
用または浮動小数点)に基づいてインデックスを付ける。各命令毎に用いられる
レジスタ番号は、コンパイラによって割り当てられ、各繰り上げロード命令毎に
、確実に唯一のレジスタが使用されるようにする。
【0070】 ステップ606(図7)において繰り上げロードを実行し、ALAT内にエン
トリを作る前に、ターゲット・レジスタ番号をインデックスとして用いてALA
Tにアクセスし、ALATをチェックして、繰り上げロードが用いるターゲット
・レジスタ番号に対応するエントリが既に存在するか否かについて判定を行う。
エントリがある場合、これを除去する。何故なら、現在の繰り上げロードには関
係ない情報を含んでおり、以前の繰り上げロードの実行中に入力された可能性が
非常に高いからである。以前に実行した繰り上げロードからのデータを、既存の
エントリからクリアした後、または現在の繰り上げロードのターゲット・レジス
タ番号に対応する空のエントリをALAT内で発見した場合、ターゲット・レジ
スタ番号でインデックスした新たなエントリを、現在の繰り上げロード命令に対
して作成する。
【0071】 繰り上げロードを実行しALATを更新した後、ステップ612において、繰
り上げロード命令の結果に依存する計算命令(例えば、I24、I26)を実行
する。前述した例では、依存計算は、図5に示すように、加算命令I26を含む
。繰り上げロード命令に続く他の命令や、ロードを繰り上げた後の格納命令に先
立つ他の命令は全て、ステップ615で実行される。
【0072】 ステップ618において、ロードを繰り上げ、このロードと衝突する可能性が
ある格納命令(例えば、I22)を実行する。図5に示す例では、格納命令I2
4は、r1内のアドレスにアクセスする。格納命令I22を実行する際、当該格
納によって書き込まれるメモリの物理アドレスおよび領域のサイズを用いて、A
LAT内にある有効なエントリ全てを探索する。この探索は多数の方法のいずれ
でも行うことができ、本発明はいずれの特定の技法にも限定されるものではない
。本発明の一実施形態では、ALATは、完全連想内容参照可能メモリとして構
成されているので、有効なエントリは全て同時に探索される。エントリを探索し
て、格納命令といずれかの繰り上げロード命令との間に衝突が発生したか否かに
ついて判定を行う。繰り上げロード(例えば、I24)のメモリ空間の範囲が、
格納命令(例えば、I22)のメモリ空間の範囲と重複するALAT内で発見さ
れた場合、衝突が発生したことになる。本発明の一実施形態では、衝突を検出し
た場合、衝突した繰り上げロードに対応するアドレスに対するALAT内のエン
トリをステップ621において除去し、衝突を示す。ステップ621において、
格納命令(例えば、I22)によってアクセスされたメモリ空間が、いずれの繰
り上げロード命令(例えば、I24)のそれとも重複していない場合、個々の繰
り上げロード命令に対応するALAT内のエントリは、ALAT内に残る。
【0073】 繰り上げられたロード命令は、各々このロード命令と衝突する潜在的な可能性
がある、多数の格納命令の前に移動させてもよいことは認められよう。一連の格
納命令に続く単一のチェック命令を用いて、多数の格納命令のいずれかがロード
命令と衝突したか否か検出することも可能である。何故なら、各格納命令の実行
は、ALATにおけるエントリ全てを探索し、衝突が発生したか否かについて判
定することを含むからである。このように、チェック命令は、プログラムにおけ
る格納命令の数には無関係である。何故なら、別個のチェック命令は、ステップ
533において繰り上げた各ロード命令と置き代わり、各チェック命令は、ステ
ップ623において、以下で説明するように、ALATを見直すからである。
【0074】 また、繰り上げロードおよび格納命令によってアクセスされたデータの開始ア
ドレスが同一でなくても、前述したように、これらの命令の間で衝突は発生し得
ることも認められよう。即ち、各命令は、多数のデータ・バイトにアクセスする
場合があるのである。したがって、繰り上げロードによって読み取られたデータ
が占めていたメモリ・アドレスの範囲と、格納によって書き込まれたデータが占
めていたメモリ・アドレスの範囲との間に少しでも重複があれば、衝突が発生す
る可能性がある。衝突の検出は多数の方法で実行することができ、本発明は、い
ずれの特定の実施態様にも限定されるものではない。例えば、繰り上げロードに
よって書き込まれたデータおよび格納によって読み出されたデータのアドレス間
で、範囲全域の比較を行うことができる。しかしながら、範囲全域の比較は、ハ
ードウエアで実現するには費用がかかる可能性がある。したがって、本発明の一
実施形態によれば、繰り上げロードおよび格納によってアクセスされるデータの
アドレスの範囲全域の比較を行わずに、衝突を判定する技法を採用する。
【0075】 本発明のこの実施形態によれば、メモリに格納されるデータのサイズ整合を優
先し、データ・ブロックの開始アドレスをそのサイズの偶数の倍数とすることが
好ましい。例えば、4バイトを含むデータ・ブロックは、下位2ビット(LSB
)がゼロであるアドレスに格納することが好ましく、8バイトのブロックは、3
LSBがゼロであるアドレスに格納することが好ましい等である。データをサイ
ズ整合すると、繰り上げロードおよび格納によってアクセスされるデータの開始
アドレスの直接的な同等性比較を単に実行するだけで、衝突を検出することがで
きる。直接同等性比較は、範囲全域の比較よりも、ハードウエアで実現する場合
、はるかに低いコストで済むことは認められよう。データが不整合の場合、不整
合の制限量があり、不整合データがより大きなサイズの整合データ範囲に納まる
ことができるようにするのであれば、本発明の一実施形態では、ハードウエアは
、あたかもより大きなサイズの整合データ範囲にアクセスしているかのように、
不整合データにアクセスする命令(例えば、ロード)を処理する。例えば、ロー
ドが、メモリ内の8バイトの不整合データにアクセスする場合、ロードによって
アクセスされるデータが32バイトのサイズ整合範囲には納まるのであれば、3
2バイト・データにアクセスするものとして、このロードを扱う。命令をより大
きなサイズ整合データ・ブロックを用いるものとして扱うことにより、繰り上げ
ロードおよび格納命令によってアクセスされるデータ・アドレスの重複が生ずる
という状況があり得るが、実際にはこれらの命令の一方によってアクセスされて
いるだけであり、実際のデータ重複(前述の例では8バイト)ではないので、偽
りの衝突が検出されることになる。この性能上の欠陥は、衝突検出のためのハー
ドウエア複雑化の低減に対して支払う代償である。データの不整合が著しく、正
当な大きなのサイズ整合データ範囲には納まらない場合、ハードウエアはロード
命令も格納命令も処理しない。ロードについては、ALATにエントリを挿入せ
ず、そのために衝突が指示される。この結果、偽りの衝突が検出されるが、この
性能上の欠陥は、衝突検出のためのハードウエア複雑化の低減に対して支払う代
償である。著しく不整合の格納命令については、命令を一連の小さな格納命令に
分離することも可能である。一実施形態では、大きな格納を一連の多数の格納に
分離するハードウエアを用いることができる。別の実施形態では、サイズ整合デ
ータ範囲に納まることができない不整合格納は、割込を発生することができ、オ
ペレーティング・システムが、この格納命令を一連の小さな格納命令に分離する
ことによって、この格納を処理する。不整合格納命令を処理する双方の実施形態
において、ステップ618に記述するように、一連の小さな格納の各々を、AL
AT内の有効なエントリに対してチェックする。小さな格納のいずれかのメモリ
空間範囲が、繰り上げロードのメモリ空間範囲と重複する場合、ステップ621
に記述するように、衝突が指示されよう。このように、小さな格納の各々を実行
することによって、単一の大きな格納を実行する場合と同じ結果が得られる。
【0076】 本発明の別の実施形態では、アドレスの1つ以上の最上位ビット(MSB)を
無視し、同等性比較に部分アドレスを用いることによって、衝突検出に用いられ
るハードウエアの更なる削減を達成する。1つ以上のMSBを無視することによ
って、ALATのサイズ縮小だけでなく、同等性比較を実行するハードウエアの
削減ももたらされる。何故なら、各エントリ毎にALATに格納するビット数が
減少し、比較するビットも減少するからである。例えば、64ビット・データ・
アドレスでは、ロードの下位20ビット(LSB)のみをALATにセーブし、
同等性比較に用いることができる。
【0077】 1つ以上のMSBを無視すると、その結果何らかの偽りの衝突が検出される可
能性があることは認められよう。即ち、格納命令を実行する際に(例えば、ステ
ップ618において)ALATを探索すると、同等性比較を実行するLSB(例
えば、20LSB)については、格納のデータおよびロードのデータの完全な開
始アドレスが一致するが、無視した1つ以上のMSBについては異なるという場
合がある。このことが発生した場合、衝突が実際に発生したかのように、例えば
、制御のフローをリカバリ・コードに切り替えることによって、図7のルーチン
を実行する。したがって、偽りの検出は、実際には発生しなかった衝突からの回
復による何らかの性能上の不利益を被る結果となることは認められよう。この性
能上の不利益は、衝突検出のためのハードウエアの複雑化を低減することに対し
て支払われる代償である。検出方式において(少しでも無視する場合には)どれ
位MSBを無視するかについて決定する際、これら相反する要因間のバランスを
考慮することができる。
【0078】 ステップ623において、ステップ606で実行した繰り上げロード命令に対
してchk.a命令(例えば、I25)を実行する。一実施形態では、chk.
a命令は、ALATを見直し、繰り上げロード命令(例えば、I24)のエント
リがあるか否かについて判定を行うことにより、衝突が発生したか否か判定する
。インデックスとして、ステップ621においてALAT内で更新した情報に対
して、繰り上げロード命令(例えば、I24)が用いたターゲット・レジスタの
アイデンティティ(同一性)およびレジスタ・タイプを用いて、chk.a命令
はALATを見直す。ステップ624において、chk.a命令によって置換さ
れた特定の繰り上げロードに対応するエントリがALAT内で発見された場合、
chk.a命令は、格納命令(例えば、I22)およびこの格納よりも上に繰り
上げられたロード命令(例えば、I24)が衝突しなかったことを認識する。し
たがって、格納命令によって読み取られたデータは有効であり、ルーチンは、ス
テップ630に進み、命令シーケンスの実行を終了する。
【0079】 しかしながら、ステップ624においてchk.a命令がALATを見直し、
繰り上げロード命令(例えば、I24)が用いたレジスタ・アドレスに対応する
エントリをALAT内において見出せなかった場合、chk.a命令(例えば、
I25)は、格納および繰り上げロード命令は同じメモリ空間にアクセスした(
即ち、衝突した)と判断する。したがって、繰り上げロード命令およびこの繰り
上げロード命令(例えば、I24)に基づいて実行した計算命令の精度を確認す
るために、更に別のステップを実行する。一実施形態では、可能な衝突を検出し
た場合、プログラムの制御フローを変更し、リカバリ・コードを実行する。前述
したように、これは多数の方法で行うことができる(例えば、例外処理技法に分
岐する、即ち、これを用いることによる等)。ALATは、実行するプログラム
に含まれ得る繰り上げロード命令の全てに対応するには不十分なエントリ数でも
実現可能であることは認められよう。図7に示す実施形態では、chk.a命令
は、ステップ633(図7)においてリカバリ・コードに分岐する。リカバリ・
コードの一例は、図5において、命令I24r、I26rおよびI23rとして
示す。これらは、本質的に、コメントI24、I26およびI23のコピーであ
る。
【0080】 ステップ636において、ステップ524で繰り上げたロード命令(例えば、
I24)を再実行する。ステップ639において、繰り上げロード命令(例えば
、I24)に依存する命令を再実行する。図5の例では、再実行されるロード命
令I24rおよび依存する加算命令I26rを示す。これらの命令を再実行する
のは、ロード命令I24rおよびそれに依存する計算I26rの適正な結果を得
る格納命令の後である。一実施形態では、リカバリ・コードは、当初実行したロ
ードおよび依存する計算命令と同じ結果が得られると、コンパイラが判断した命
令の組み合わせであれば、いずれでもよい。
【0081】 ステップ642において、制御フローはリカバリ・コードからコンパイルした
実行スケジュールに戻る。これは、例えば、図5におけるI23rのような分岐
命令を用いて行うことができる。次に、ステップ630において、プログラムの
終端まで、スケジュールされた命令の実行を継続する。
【0082】 例えば、一実施形態では、ALATは、32個のアドバンス命令に対応するエ
ントリの空間を有する。実行するプログラムの中に32個よりも多いアドバンス
命令がある場合、ALATは、これらアドバンス命令の全てに関する情報のため
に十分な空間を有さないことになる。ALATが満杯となり、新たなアドバンス
命令が実行された場合、入れ換え方式を用いて、ALAT内の有効なエントリを
取り出し、新たな命令のために余裕を作ることができる。更に、本発明の一実施
形態では、実行時にプロセス間(例えば、別個にコンパイルしたプログラム間)
で切り替えを行う場合、ALAT内のエントリを、後に復帰させるためにセーブ
することができ、あるいは無効化することも可能である。このように、場合によ
っては、chk.a命令は、個々のアドバンス命令に対して、その命令に衝突が
発生していなくても、エントリを見つけることができない場合もある。
【0083】 前述したように、本発明は特定のALAT構造に限定される訳ではなく、ロー
ドおよび格納命令間に衝突があったか否かについて判定を行うために、他の代替
実施形態を含むことも可能である。例えば、他のデータ構造または比較回路を用
いてもよい。また、用いるALATまたはその他の構造は、用いるサイズやフィ
ールド数が異なってもよい。加えて、多数のレジスタ集合の各々に、別個のAL
ATまたはデータ構造を用いてもよい。例えば、一実施形態では、ALATは汎
用および浮動小数点レジスタ集合に用いることができる。
【0084】 以上延期例外処理およびデータ投機を参照しながら本発明について説明したが
、これに限定される訳ではない。一般に、本発明は、投機的に実行されるあらゆ
るタイプの命令セグメント、投機的に実行された命令の実行完全性の検証、およ
び検出したあらゆる問題を訂正するためのリカバリ・コードの実行を包含するも
のである。本発明は、制御投機的およびデータ投機的双方である命令を含むよう
に拡張することも可能である。
【0085】 chk.sおよびchk.a命令からリカバリ・コードへの制御移管は、多数
の方法のいずれでも実現可能である。例えば、chk.sおよびchk.a命令
は、各々、分岐命令として振る舞うことができ、リカバリ・コード内の最初の命
令のアドレスを、chk.sまたはchk.a命令自体に含ませる(図3に示す
ように)。あるいは、chk.sまたはchk.a命令は、特定の例外を発生す
ることができ、例外ハンドラがchk.sまたはchk.a命令内の値を用いて
、対応するリカバリ・コードを特定し、制御をこのリカバリ・コードに移管する
ことも可能である。また、例外ハンドラは、chk.aまたはckh.s命令の
アドレス、即ち、命令が格納されているメモリのアドレス位置を用いて、リカバ
リ・コードの位置を特定することも可能である。リカバリ・コードは、コンパイ
ラが作成する表に基づくことができる。この表は、コンパイラによってコンパイ
ルされたソース・プログラムに追加されたチェック命令のアドレスを含む。した
がって、実行されるリカバリ・コードは、どのチェック命令を実行するかによっ
て特定される。
【0086】 本発明は、コンパイラが、繰り上げた命令が後の命令と衝突しないことに確信
がない場合でも、命令を順不同に繰り上げることを可能にする。前述したように
、従来のコンパイラの中には、ロードおよび格納が衝突しないことに確信がなく
ても、単一のロード命令を格納よりも前に移動させ得るものもある。実行時に、
衝突があった場合、コンパイルした実行スケジュールにおいてロード命令をイン
ラインで再実行する。対照的に、本発明の一実施形態では、単にロードを格納の
前に繰り上げるだけでなく、それに依存する計算も繰り上げることによって、命
令実行の最適化を図る。これによって、コンパイラおよびスケジューラは、多数
の実行ユニットと一度に最も効率的に使用することが可能となる。更に、衝突が
ある場合にロード命令を単に再実行する代わりに、チェック命令を実行し、衝突
があったか否か判定を行い、ロード命令およびそれに依存する計算を含むリカバ
リ・コードに制御フローを変更する。このように、多数のコード・セクションを
独立してしかも並列に実行することができる。
【0087】 本発明は、chk命令、投機的依存チェーン、およびリカバリ・コード間の連
携に関するコンパイラの部分の柔軟性を高めることができる。ここに含む例は比
較的単純であるが、図5に示した例におけるように、投機的依存チェーンが単一
の線形的な命令シーケンスで構成されているのではなく、多数のシーケンスを含
む場合、または2つ以上の投機的依存チェーンが互いに依存しあう場合等、かな
り複雑なコード構成も可能である。本発明は、これら種々の構成のアドレシング
において高い柔軟性を持たせることによって、静的投機の理解が高まるに連れて
、リカバリ・コードの使用において今後の改良を可能としている。
【0088】 本発明は、chk命令の数および構成に関して、広い度合いの柔軟性を持たせ
ている。例えば、単一のchk.sは、投機的依存チェーンに沿った命令のいず
れか1つの宛先を読み取るように構成することができ、または多数のchk.s
命令を発行し、各々が異なる宛先を読み取ることも可能である。各chk.s命
令も、同一または異なるリカバリ・コード命令集合を呼び出すことができる。
【0089】 また、本発明は、DETの存在を検出する代替実施形態も包含するものである
。例えば、一実施形態では、明示的なchk.s命令がない。代わりに、非投機
的命令の通常の実行の一部として、各非投機的命令によってDETを検出する。
この実施形態では、非投機的命令がDETに遭遇した場合、例外を発生し、例外
延期に対処する。別の例示的な実施形態では、各命令の宛先の代わりに、DET
を専用レジスタまたはメモリに格納する。
【0090】 別の実施形態では、非投機的リカバリ・コードは、投機的インライン・コード
と同じコードとすることも可能である。例えば、命令内に含まれる投機フラグに
基づいて、各命令に投機的または非投機的とマークすことができるアーキテクチ
ャも採用可能である。例えば、コンパイラは、命令のセグメントを投機的として
スケジュールすることができ、これらの命令を実行した後にDETを検出するこ
とによって、延期例外ハンドラを活性化することができる。延期例外ハンドラは
、単に投機的命令の投機フラグを切り替え、これらを非投機的命令に変換し、命
令を再実行し、以前に延期した例外を処理し、再度フラグを切り替えて命令を投
機的命令に逆変換することができる。この実施形態はコンパイラのリカバリ・コ
ードのスケジューリングにおける柔軟性を損なうが、コードによって使われるメ
モリ量の大幅な削減をもたらすことができる。加えて、投機フラグは、キャッシ
ュ・メモリ内で切り替えればよいので、投機フラグを切り替えるのに要する時間
も極力短くすることができる。
【0091】 同様の実施形態では、投機的命令を非投機的として実行すべきコード・セグメ
ントを識別するために1組のレジスタを定義することができる。この実施形態で
は、命令の投機フラグを切り替えて非投機的に実行する代わりに、非投機的に実
行する命令を特定するインデックスをレジスタにロードすることを除いて、ほぼ
前述と同様に機能する。
【0092】 本発明の範囲内において、図面に示し本明細書に記載した実施形態には、種々
の変更や修正も可能であることは理解されよう。前述の説明に含まれ添付図面に
示した事柄全ては、限定的な意味ではなく、例示的な意味で解釈することを意図
するものである。本発明は、請求の範囲およびその均等物における規定にのみ限
定されるものである。
【図面の簡単な説明】
【図1】 本発明の実施形態を実施可能な汎用コンピュータのブロック図である。
【図2】 3つの基本ブロックを含む元のコード・シーケンスを示す図である。
【図3】 本発明の一実施形態による静的投機を用いて、図2の元のコード・シーケンス
をスケジューリングすることから得られる、スケジュール化コード・シーケンス
を示す図である。
【図4】 メモリ・ロード命令に続いてメモリ格納命令を含む元のコード・シーケンスを
示す図である。
【図5】 本発明の一実施形態にしたがって、静的データ投機を用い、図4の元のコード
・シーケンスをスケジューリングし、ロード命令を繰り上げた結果得られた、ス
ケジュール化コード・シーケンスを示す図である。
【図6】 本発明の一実施形態にしたがって、格納命令の前に、ロード命令およびこれに
依存する命令を繰り上げるプロセスのフローチャートである。
【図7】 本発明の一実施形態にしたがって、実行時に繰り上げロード命令を実行するプ
ロセスのフローチャートを示す。
【図8】 本発明の一実施形態による繰り上げロード・アドレス表の一例を示す図である
【手続補正書】
【提出日】平成12年12月28日(2000.12.28)
【手続補正1】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正内容】
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
───────────────────────────────────────────────────── フロントページの続き (81)指定国 EP(AT,BE,CH,CY, DE,DK,ES,FI,FR,GB,GR,IE,I T,LU,MC,NL,PT,SE),OA(BF,BJ ,CF,CG,CI,CM,GA,GN,GW,ML, MR,NE,SN,TD,TG),AP(GH,GM,K E,LS,MW,SD,SZ,UG,ZW),EA(AM ,AZ,BY,KG,KZ,MD,RU,TJ,TM) ,AL,AM,AT,AU,AZ,BA,BB,BG, BR,BY,CA,CH,CN,CU,CZ,DE,D K,EE,ES,FI,GB,GD,GE,GH,GM ,HR,HU,ID,IL,IS,JP,KE,KG, KP,KR,KZ,LC,LK,LR,LS,LT,L U,LV,MD,MG,MK,MN,MW,MX,NO ,NZ,PL,PT,RO,RU,SD,SE,SG, SI,SK,SL,TJ,TM,TR,TT,UA,U G,UZ,VN,YU,ZW (72)発明者 ミルズ,ジャック・ディー アメリカ合衆国カリフォルニア州95124, サン・ホセ,シェバリエ・ドライブ 1768 (72)発明者 チェン,ウィリアム・ワイ アメリカ合衆国カリフォルニア州94087, サニーヴェイル,ユーコン・ドライブ 1477

Claims (69)

    【特許請求の範囲】
  1. 【請求項1】 コンピュータ読み取り可能な形態で格納されたコンパイルし
    たプログラムを有するコンピュータ読み取り可能媒体であって、前記プログラム
    が、 格納命令と、 前記格納命令の前にスケジュールされたロード命令と、 前記ロード命令によって読み出されるデータに依存する少なくとも1つの計算
    命令であって、前記格納命令よりも前にスケジュールされる、少なくとも1つの
    計算命令と、 前記格納命令および前記ロード命令がメモリ内の共通位置にアクセスするか否
    かについて判定を行うチェック命令と、 を備えるコンピュータ読み取り可能媒体。
  2. 【請求項2】 請求項1記載のコンピュータ読み取り可能媒体において、前
    記チェック命令が前記格納命令の後にスケジュールされている、コンピュータ読
    み取り可能媒体。
  3. 【請求項3】 請求項1記載のコンピュータ読み取り可能媒体において、前
    記格納命令が複数の格納命令を含む、コンピュータ読み取り可能媒体。
  4. 【請求項4】 請求項1記載のコンピュータ読み取り可能媒体において、前
    記格納命令および前記ロード命令が共通メモリ位置にアクセスする場合、前記チ
    ェック命令が制御フローを変更する、コンピュータ読み取り可能媒体。
  5. 【請求項5】 請求項2記載のコンピュータ読み取り可能媒体において、前
    記チェック命令が、アドレス・テーブルにアクセスし、前記格納命令および前記
    ロード命令がメモリ内の共通位置にアクセスするか否かについて判定を行い、前
    記格納命令の実行後、前記アドレス・テーブル内に前記ロード命令に対応するエ
    ントリがない場合、前記格納およびロード命令によってメモリ内の共通位置がア
    クセスされたことを示す、コンピュータ読み取り可能媒体。
  6. 【請求項6】 請求項4記載のコンピュータ読み取り可能媒体において、前
    記プログラムが、更に、前記格納命令および前記ロード命令が共通メモリ位置に
    アクセスする場合に制御を移すリカバリ・コードを含み、該リカバリ・コードが
    、前記ロード命令および前記少なくとも1つの計算命令の再実行を含む、コンピ
    ュータ読み取り可能媒体。
  7. 【請求項7】 コンピュータ・システムであって、 メモリと、 格納命令を実行する手段と、 前記格納命令の前にロード命令を実行する手段と、 前記格納命令の前に、前記ロード命令によって読み出されたデータに依存する
    少なくとも1つの計算命令を実行する手段と、 前記格納命令および前記ロード命令がメモリ内の共通位置にアクセスしたか否
    かについて判定を行う手段と、 を備えるコンピュータ・システム。
  8. 【請求項8】 請求項7記載のコンピュータ・システムであって、更に、前
    記格納命令および前記ロード命令がメモリ内の共通位置にアクセスしたことを判
    定した場合リカバリ・コードに制御フローを変更する手段を含む、コンピュータ
    ・システム。
  9. 【請求項9】 請求項7記載のコンピュータ・システムにおいて、前記格納
    命令が複数の格納命令を含む、コンピュータ・システム。
  10. 【請求項10】 請求項7記載のコンピュータ・システムにおいて、前記判
    定手段が、前記格納命令および前記ロード命令がメモリ内の共通位置にアクセス
    したか否かを示す情報を含むテーブルを含む、コンピュータ・システム。
  11. 【請求項11】 請求項8記載のコンピュータ・システムにおいて、前記リ
    カバリ・コードが、前記ロード命令および前記少なくとも1つの計算命令のコピ
    ーを含む、コンピュータ・システム。
  12. 【請求項12】 請求項8記載のコンピュータ・システムにおいて、前記判
    定手段が、前記格納命令および前記ロード命令がメモリ内の共通位置にアクセス
    したか否かを示す情報を含むテーブルを含む、コンピュータ・システム。
  13. 【請求項13】 コンピュータ・システムであって、 格納命令、ロード命令、および前記ロード命令によって読み出されるデータに
    依存する少なくとも1つの計算命令を含むソース・プログラムに対して実行スケ
    ジュールを作成するコンパイラを備え、該コンパイラが、前記格納命令および前
    記ロード命令が前記プログラムの実行中共通メモリ位置にアクセスしないことに
    前記コンパイラが確信できない場合、前記ロード命令および前記少なくとも1つ
    の計算命令を前記格納命令よりも前にスケジュールする手段を含む、コンピュー
    タ・システム。
  14. 【請求項14】 請求項13記載のコンピュータ・システムにおいて、前記
    コンパイラが、前記プログラムの実行中、前記格納命令および前記ロード命令が
    共通メモリ位置をアクセスするか否かについて判定を行うチェック命令を発生す
    る手段を含む、コンピュータ・システム。
  15. 【請求項15】 請求項14記載のコンピュータ・システムにおいて、前記
    スケジューラが、前記チェック命令を前記格納命令の後にスケジュールする手段
    を含む、コンピュータ・システム。
  16. 【請求項16】 請求項14記載のコンピュータ・システムにおいて、前記
    コンパイラがチェック命令を発生する手段を含み、該手段は、前記格納命令およ
    び前記ロード命令が共通メモリ位置にアクセスしたことを前記チェック命令が判
    定した場合、制御フローの変更を含む、コンピュータ・システム。
  17. 【請求項17】 請求項14記載のコンピュータ・システムであって、更に
    、複数の実行ユニットを含み、前記コンパイラが、更に、前記ロードおよび格納
    命令の実行を異なる実行ユニット上にスケジュールする手段を含む、コンピュー
    タ・システム。
  18. 【請求項18】 請求項16記載のコンピュータ・システムにおいて、前記
    コンパイラが、更に、前記格納命令および前記ロード命令が共通メモリ位置にア
    クセスした場合に制御を移すリカバリ・コードを発生する手段を含み、該リカバ
    リ・コードが、前記ロード命令および前記少なくとも1つの計算命令のコピーを
    含む、コンピュータ・システム。
  19. 【請求項19】 コンピュータ読み取り可能な形態で格納されたコンパイル
    したプログラムを有するコンピュータ読み取り可能媒体であって、前記プログラ
    ムが、 格納命令と、 前記格納命令の前にスケジュールされたロード命令と、 前記プログラムの実行中、前記格納命令および前記ロード命令が共通メモリ位
    置にアクセスするか否かについて判定を行うチェック命令であって、該チェック
    命令が、前記格納命令および前記ロード命令が共通メモリ位置にアクセスしたと
    判定した場合、制御フローを変更する、チェック命令と、 を備えるコンピュータ読み取り可能媒体。
  20. 【請求項20】 請求項19記載のコンピュータ読み取り可能媒体において
    、前記プログラムが、更に、前記プログラムの実行中前記格納命令および前記ロ
    ード命令が共通メモリ位置にアクセスしたと前記チェック命令が判定した場合に
    制御を移すリカバリ・コードを含み、該リカバリ・コードが前記ロード命令のコ
    ピーを含む、コンピュータ読み取り可能媒体。
  21. 【請求項21】 コンピュータ・システムであって、 メモリと、 格納命令および以前に実行したロード命令が前記メモリ内の共通位置にアクセ
    スしたか否かについてチェックする手段と、 前記格納命令および前記ロード命令が前記メモリ内の共通位置にアクセスした
    と判定した場合、制御フローをリカバリ・コードに変更する手段と、 を備えるコンピュータ・システム。
  22. 【請求項22】 請求項21記載のコンピュータ・システムにおいて、該コ
    ンピュータ・システムが、前記ロード命令のコピーを含む前記リカバリ・コード
    を発生する手段を含む、コンピュータ・システム。
  23. 【請求項23】 請求項21記載のコンピュータ・システムにおいて、前記
    チェック手段が、前記格納命令および前記ロード命令が前記メモリ内の共通位置
    にアクセスしたか否かを示す情報を含むテーブルを含む、コンピュータ・システ
    ム。
  24. 【請求項24】 コンピュータ・システム上で実行されたとき、格納命令と
    、ロード命令と、該ロード命令によって読み出されれたデータに依存する少なく
    とも1つの計算命令とを含むソース・プログラムをコンパイルする方法を実行す
    るコンパイラでエンコードしたコンピュータ読み取り可能媒体であって、前記方
    法が、 (A)前記プログラムの実行中、前記格納およびロード命令が共通メモリ位置
    にアクセスしないか否かについて判定を行うステップと、 (B)前記格納およびロード命令が共通メモリ位置にアクセスしないと判定で
    きない場合、前記ロード命令および前記少なくとも1つの計算命令を前記格納命
    令の前にスケジュールするステップと、 を含むコンピュータ読み取り可能媒体。
  25. 【請求項25】 請求項24記載のコンピュータ読み取り可能媒体であって
    、前記方法が、更に、 (C)前記プログラムの実行中、前記格納およびロード命令が共通メモリ位置
    にアクセスするか否かについて判定を行うチェック命令を発生するステップを含
    む、コンピュータ読み取り可能媒体。
  26. 【請求項26】 請求項25記載のコンピュータ読み取り可能媒体において
    、前記ステップ(C)が、前記チェック命令を前記格納命令の後にスケジュール
    するステップを含む、コンピュータ読み取り可能媒体。
  27. 【請求項27】 請求項25記載のコンピュータ読み取り可能媒体において
    、前記ステップ(C)が、前記格納命令および前記ロード命令が共通メモリ位置
    にアクセスしたと前記チェック命令が判定した場合、制御フローを変更するチェ
    ック命令を発生するステップを含む、コンピュータ読み取り可能媒体。
  28. 【請求項28】 請求項27記載のコンピュータ読み取り可能媒体において
    、前記方法が、更に、 (D)前記チェック命令が、前記プログラムの実行中、前記格納命令および前
    記ロード命令が共通メモリ位置にアクセスしたと判定した場合に制御を移すリカ
    バリ・コードを発生するステップを含み、該リカバリ・コードが、前記ロード命
    令および前記少なくとも1つの計算命令のコピーを含む、コンピュータ読み取り
    可能媒体。
  29. 【請求項29】 コンピュータ・システム上で実行されたとき、第1命令お
    よび第2命令を含むプログラムをコンパイルする方法を実行するコンパイラでエ
    ンコードしたコンピュータ読み取り可能媒体であって、前記コンパイラが、前記
    第2命令が前記第1命令の実行に依存するデータ上で動作しないことを確信でき
    ない場合、前記方法が、 (A)前記第2命令を前記第1命令の前にスケジュールするステップと、 (B)前記プログラムの実行中、前記第1命令の実行に依存するデータ上で、
    前記第2命令が動作するか否かについて判定を行うチェック命令を発生するステ
    ップと、 を含むコンピュータ読み取り可能媒体。
  30. 【請求項30】 請求項29記載のコンピュータ読み取り可能媒体において
    、前記ステップ(B)は、前記第2命令が前記第1命令の実行に依存するデータ
    上で動作することを前記チェック命令が判定した場合に制御フローを変更するこ
    とを含むチェック命令を発生するステップを含む、コンピュータ読み取り可能媒
    体。
  31. 【請求項31】 請求項30記載のコンピュータ読み取り可能媒体において
    、前記方法が、更に、 (C)制御を移すリカバリ・コードを発生するステップを含み、該リカバリ・
    コードが前記第2命令のコピーを含む、コンピュータ読み取り可能媒体。
  32. 【請求項32】 コンピュータ・システム上で実行されたとき、格納命令と
    、ロード命令と、該ロード命令によって読み出されたデータに依存する少なくと
    も1つの計算命令とを含むソース・プログラムをコンパイルする方法を実行する
    コンパイラでエンコードしたコンピュータ読み取り可能媒体であって、前記方法
    が、 (A)前記ロード命令および前記少なくとも1つの計算命令を前記格納命令の
    前にスケジュールするステップと、 (B)前記プログラムの実行中、前記格納およびロード命令が共通メモリ位置
    にアクセスしたことを判定した場合に分岐する分岐命令を発生するステップと、 (C)前記プログラムの実行中、前記格納およびロード命令が共通メモリ位置
    にアクセスしたことを判定した場合に前記分岐命令が分岐するリカバリ・コード
    を発生するステップであって、該リカバリ・コードが前記ロード命令および前記
    少なくとも1つの計算命令のコピーを含む、ステップと、 を含むコンピュータ読み取り可能媒体。
  33. 【請求項33】 請求項32記載のコンピュータ読み取り可能媒体において
    、前記ステップ(B)が、分岐し、前記プログラムの実行中に前記格納およびロ
    ード命令が共通メモリ位置にアクセスしたか否かについて判定するチェック命令
    を発生するステップを含む、コンピュータ読み取り可能媒体。
  34. 【請求項34】 命令実行方法であって、 投機的とマークされた少なくとも1つの命令を実行し、 前記少なくとも1つの命令の実行の完全性を検証し、 前記少なくとも1つの命令の実行の完全性が検証された場合、他の命令の実行
    を継続し、 前記少なくとも1つの命令の実行の完全性が検証されない場合、 リカバリ・コードを実行し、 前記リカバリ・コードを実行した後、前記他の命令の実行を継続する、 ことを含む方法。
  35. 【請求項35】 コンピュータ・システム上で実行されたとき、ソース・プ
    ログラムをコンパイルして、複数の基本ブロックに編成された複数の命令を含む
    コンパイル化プログラムを発生する方法を実行するコンパイラでエンコードした
    コンピュータ読み取り可能媒体であって、各基本ブロックが連続する命令の集合
    を含み、前記複数の命令が、第1基本ブロックに関連し、前記コンパイル化プロ
    グラムの実行中に例外を発生し得る第1命令を含み、前記方法が、 (A)前記第1命令を、前記第1基本ブロックの外部で、前記第1基本ブロッ
    クに先行する少なくとも1つの命令の前にスケジュールするステップと、 (B)前記コンパイル化プログラムの実行中、前記第1命令が例外を発生する
    か否かについて判定を行うチェック命令を発生し、前記第1命令が例外を発生し
    たことを前記チェック命令が判定した場合、前記チェック命令が制御フローを変
    更するステップと、 を含むコンピュータ読み取り可能媒体。
  36. 【請求項36】 請求項35記載のコンピュータ読み取り可能媒体において
    、前記方法が、更に、前記チェック命令を前記第1基本ブロック内でスケジュー
    ルするステップを含む、コンピュータ読み取り可能媒体。
  37. 【請求項37】 請求項35記載のコンピュータ読み取り可能媒体において
    、前記方法が、更に、前記複数の命令の各々を、投機的または非投機的として識
    別するステップを含む、コンピュータ読み取り可能媒体。
  38. 【請求項38】 請求項35記載のコンピュータ読み取り可能媒体において
    、前記方法が、更に、前記第1命令が例外を発生したと前記チェック命令が判定
    した場合に制御を移すリカバリ・コードを発生するステップを含み、該リカバリ
    ・コードが前記第1命令のコピーを含む、コンピュータ読み取り可能媒体。
  39. 【請求項39】 コンピュータ読み取り可能な形態でプログラムを格納した
    コンピュータ読み取り可能媒体であって、前記プログラムが、 複数の基本ブロックに編成された複数の命令から成り、各基本ブロックが連続
    する命令の集合を含み、前記複数の命令が、 第1基本ブロックに関連し、前記プログラムの実行中に例外を発生し得る第1
    命令であって、前記第1基本ブロックの外部で、前記第1基本ブロックに先行す
    る少なくとも1つの命令の前にスケジュールされた、第1命令と、 前記プログラムの実行中、前記第1命令が例外を発生するか否かについて判定
    を行うチェック命令であって、前記第1命令が例外を発生したと前記チェック命
    令が判定した場合、制御フローを変更する、チェック命令と、 を含むコンピュータ読み取り可能媒体。
  40. 【請求項40】 請求項39記載のコンピュータ読み取り可能媒体において
    、前記チェック命令を前記第1基本ブロック内にスケジュールされる、コンピュ
    ータ読み取り可能媒体。
  41. 【請求項41】 請求項39記載のコンピュータ読み取り可能媒体において
    、前記複数の命令の各々を、投機的または非投機的として識別する、コンピュー
    タ読み取り可能媒体。
  42. 【請求項42】 請求項41記載のコンピュータ読み取り可能媒体において
    、前記複数の命令が、更に、前記第1命令が例外を発生したと前記チェック命令
    が判定した場合に制御を移すリカバリ・コードを含む、コンピュータ読み取り可
    能媒体。
  43. 【請求項43】 請求項42記載のコンピュータ読み取り可能媒体において
    、前記リカバリ・コードが、前記第1命令のコピーを含む、コンピュータ読み取
    り可能媒体。
  44. 【請求項44】 コンピュータ・システムであって、 複数の基本ブロックに編成された複数の命令を含むプログラムを実行する手段
    であって、各基本ブロックが連続する命令の集合を含み、前記複数の命令が、第
    1基本ブロックに関連し、前記プログラムの実行中に例外を発生し得る第1命令
    を含む、手段と、 前記第1命令を、前記第1基本ブロックの外部で、前記第1基本ブロックに先
    行する少なくとも1つの命令の前に実行する手段と、 前記第1命令が例外を発生するか否かについて判定を行う手段と、 前記第1命令が例外を発生したと判定した場合に制御フローをリカバリ・コー
    ドに変更する手段と、 を備えるコンピュータ・システム。
  45. 【請求項45】 請求項44記載のコンピュータ・システムにおいて、前記
    リカバリ・コードが、前記第1命令のコピーを含む、コンピュータ・システム。
  46. 【請求項46】 コンピュータ・システムであって、 複数の基本ブロックに編成されている複数の命令を含むプログラムに対して実
    行スケジュールを作成するコンパイラを備え、各基本ブロックが、連続する命令
    の集合を含み、前記複数の命令が、第1基本ブロックに関連し前記プログラムの
    実行中に例外を発生し得る第1命令を含み、前記コンパイラは、前記第1命令が
    前記プログラムの実行中例外を発生しないことに前記コンパイラが確信できない
    場合、前記第1命令を、前記第1基本ブロックの外部で、前記第1基本ブロック
    に先行する少なくとも1つの命令の前にスケジュールする手段を含み、更に、前
    記コンパイラは、前記第1命令が例外を発生したとチェック命令が判定した場合
    制御フローにおいて変更を含むチェック命令を発生する手段を含む、コンピュー
    タ・システム。
  47. 【請求項47】 請求項46記載のコンピュータ・システムにおいて、前記
    コンパイラが、更に、前記第1命令が例外を発生した場合に制御を移すリカバリ
    ・コードを発生する手段を含み、該リカバリ・コードが前記第1命令のコピーを
    含む、コンピュータ・システム。
  48. 【請求項48】 コンピュータ読み取り可能な形態でプログラムを格納した
    コンピュータ読み取り可能媒体であって、前記プログラムが、 第1投機的命令を備え、該第1投機的命令の実行中に命令例外状態が生じる可
    能性があり、前記第1投機的命令は、前記例外状態が最初に検出された場合、命
    令例外の通報を延期し、該命令例外を通報せずに実行を完了する、コンピュータ
    読み取り可能媒体。
  49. 【請求項49】 請求項48記載のコンピュータ読み取り可能媒体において
    、前記第1投機的命令は第1宛先を有し、前記例外状態が最初に検出された場合
    、前記第1投機的命令は、前記第1宛先に、前記第1投機的命令の実行中に前記
    命令例外が検出されたことを示す情報を格納する、コンピュータ読み取り可能媒
    体。
  50. 【請求項50】 請求項49記載のコンピュータ読み取り可能媒体において
    、前記プログラムが、更に、前記第1投機的命令の後にスケジュールされ、前記
    第1宛先における結果に対して動作する第2投機的命令を含み、該第2投機的命
    令が第2宛先を有し、前記第1投機的命令の実行中に前記命令例外が検出された
    ことを示す前記情報を前記第1宛先に格納する場合、前記第2投機的命令が、前
    記第2宛先に、前記プログラムの実行中に前記命令例外が検出されたことを示す
    情報を格納する、コンピュータ読み取り可能媒体。
  51. 【請求項51】 請求項50記載のコンピュータ読み取り可能媒体において
    、前記プログラムが、更に、前記第1投機的命令の後にスケジュールされ、前記
    第1投機的命令の実行中に前記命令例外が検出されたことを判定するチェック命
    令を含む、コンピュータ読み取り可能媒体。
  52. 【請求項52】 請求項51記載のコンピュータ読み取り可能媒体において
    、前記プログラムが、更に、前記第1投機的命令の実行中に前記命令例外が検出
    されたことを前記チェック命令が判定した場合に制御を移すリカバリ・コードを
    含む、コンピュータ読み取り可能媒体。
  53. 【請求項53】 請求項51記載のコンピュータ読み取り可能媒体において
    、前記プログラムが、更に、前記第2投機的命令の実行中に前記命令例外が検出
    されたことを前記チェック命令が判定した場合に制御を移すリカバリ・コードを
    含む、コンピュータ読み取り可能媒体。
  54. 【請求項54】 請求項52記載のコンピュータ読み取り可能媒体において
    、前記リカバリ・コードが、前記第1投機的命令のコピーを含む、コンピュータ
    読み取り可能媒体。
  55. 【請求項55】 コンピュータ・システム上で実行されたとき、ソース・プ
    ログラムをコンパイルして、コンパイルされたプログラムを発生する方法を実行
    するコンパイラでエンコードしたコンピュータ読み取り可能媒体であって、前記
    方法が、 (A)第1投機的命令を発生するステップを含み、該第1投機的命令の実行中
    に命令例外状態が生じる可能性があり、前記第1投機的命令は、前記例外状態が
    最初に検出された場合、命令例外の通報を延期し、該命令例外を通報せずに実行
    を完了する、コンピュータ読み取り可能媒体。
  56. 【請求項56】 請求項55記載のコンピュータ読み取り可能媒体において
    、前記第1投機的命令は第1宛先を有し、前記ステップ(A)が、前記例外状態
    が最初に検出された場合、前記第1投機的命令が、当該第1投機的命令の実行中
    に前記命令例外が検出されたことを示す情報を前記第1宛先に格納するように前
    記第1投機的命令を発生するステップを含む、コンピュータ読み取り可能媒体。
  57. 【請求項57】 請求項56記載のコンピュータ読み取り可能媒体において
    、前記方法が、更に、第1宛先における結果に対して動作する第2投機的命令を
    発生するステップを含み、該第2投機的命令が第2宛先を有し、前記第1投機的
    命令の実行中に前記命令例外が検出されたことを示す前記情報を前記第1宛先に
    格納する場合、前記第2投機的命令が、前記プログラムの実行中に前記命令例外
    が検出されたことを示す情報を前記第2宛先に格納する、コンピュータ読み取り
    可能媒体。
  58. 【請求項58】 請求項57記載のコンピュータ読み取り可能媒体において
    、前記方法が、更に、前記第1投機的命令の実行中に前記命令例外が検出された
    か否かについて判定を行うチェック命令を発生するステップを含む、コンピュー
    タ読み取り可能媒体。
  59. 【請求項59】 請求項58記載のコンピュータ読み取り可能媒体において
    、前記方法が、更に、前記第1投機的命令の実行中に前記命令例外が検出された
    ことを前記チェック命令が判定した場合に制御を移すリカバリ・コードを発生す
    るステップを含む、コンピュータ読み取り可能媒体。
  60. 【請求項60】 コンピュータ・システムであって、 投機に基づいて第1プログラム命令を実行する手段であって、該第1プログラ
    ム命令が、当該第1プログラム命令の実行中に命令例外状態を生じる可能性があ
    る、手段と、 前記第1プログラム命令の実行中に例外状態が検出された場合、該命令例外の
    通報を延期させる手段と、 前記投機が誤っていたか否かについて判定を行う手段と、 前記投機が誤っていた場合、前記命令例外を無視する手段と、 前記第1プログラム命令の実行中に前記例外状態が検出されたことが判定され
    、前記投機が正しかった場合、前記プログラムの制御フローをリカバリ・コード
    に変更する手段と、 を備えるコンピュータ・システム。
  61. 【請求項61】 請求項60記載のコンピュータ・システムであって、更に
    、前記投機が正しかった場合、前記命令例外を通報する手段を含む、コンピュー
    タ・システム。
  62. 【請求項62】 コンピュータ・システム上で実行されたとき、以下のステ
    ップを含む方法を実行するプログラムでエンコードしたコンピュータ読み取り可
    能媒体であって、前記方法が、 投機に基づいて第1プログラム命令を実行するステップであって、該第1プロ
    グラム命令が、当該第1プログラム命令の実行中に命令例外状態を生じる可能性
    がある、ステップと、 前記第1プログラム命令の実行中に例外状態が最初に検出された場合、該命令
    例外の通報を延期させるステップと、 前記投機が誤っていたか否かについて判定を行うステップと、 前記投機が誤っていた場合、前記命令例外を無視するステップと、 前記第1プログラム命令の実行中に前記例外状態が検出されたことが判定され
    、前記投機が正しかった場合、前記プログラムの制御フローをリカバリ・コード
    に変更するステップと、 を含むコンピュータ読み取り可能媒体。
  63. 【請求項63】 請求項62記載のコンピュータ読み取り可能媒体であって
    、前記方法が、更に、前記投機が正しかった場合、前記命令例外を通報するステ
    ップを含む、コンピュータ読み取り可能媒体。
  64. 【請求項64】 コンピュータ読み取り可能な形態でプログラムを格納した
    コンピュータ読み取り可能媒体であって、前記プログラムが、 オペランドを受け取り、命令例外状態を生じる可能性がある第1投機的命令を
    備え、該第1投機的命令が第1タイプのオペランドを受け取った場合、実行し結
    果を計算し、更に、前記第1投機的命令が例外トークンを含む第2タイプのオペ
    ランドを受け取った場合、前記命令を実行せずに単に前記トークンを前記投機的
    命令の宛先に渡し、これにより、前記第1投機的命令は、前記例外状態が最初に
    検出されたときに、命令例外の通報を延期させる、 コンピュータ読み取り可能媒体。
  65. 【請求項65】 第1命令と該第1命令に関係する第2命令とが共通メモリ
    位置にアクセスするか否かについて判定を行う方法であって、 前記第1命令を実行するステップと、 アドレス・テーブル内のエントリにおいて、前記第1命令を一意的に識別する
    ステップと、 前記第2命令を実行するステップであって、該第2命令の実行が、前記アドレ
    ス・テーブルを探索し、前記第1命令を識別するエントリを求めることを含む、
    ステップと、 前記第1命令のメモリ空間範囲が、前記第2命令のメモリ空間範囲と重複する
    場合、前記アドレス・テーブルから前記第1命令を識別するエントリを除去する
    ステップと、 前記第1および第2命令によって共通メモリ位置がアクセスされたか否かにつ
    いて判定を行うチェック命令を実行するステップであって、該チェック命令が前
    記アドレス・テーブルを探索して前記第1命令に対応するエントリを求め、前記
    第1命令に対するエントリが前記アドレス・テーブル内で見つからない場合、前
    記第1および第2命令によって共通メモリ位置がアクセスされたと判定する、ス
    テップと、 を含む方法。
  66. 【請求項66】 請求項65記載の方法において、チェック命令を実行する
    前記ステップが、共通メモリ位置がアクセスされた場合、リカバリ・コードに分
    岐するステップを含む、方法。
  67. 【請求項67】 請求項65記載の方法において、チェック命令を実行する
    前記ステップが、前記第1命令に対するエントリが見つかった場合、共通メモリ
    位置はアクセスされなかったと判定するステップを含む、方法。
  68. 【請求項68】 コンピュータ・システムであって、 メモリと、 アドレス・テーブルと、 前記メモリ内にコンピュータ読み取り可能な形態で格納されているコンパイル
    されたプログラムと、 を備え、前記プログラムが、 格納命令と、 前記格納命令の前にスケジュールされたロード命令と、 前記アドレス・テーブルにアクセスし、前記格納命令および前記ロード命令 がメモリ内の共通位置にアクセスしたか否かについて判定するチェック命令と、
    を含み、前記格納命令の実行後、前記アドレス・テーブル内に前記ロード命令を
    識別するエントリがない場合、前記格納およびロード命令によってメモリ内の共
    通位置がアクセスされたことを示す、 コンピュータ・システム。
  69. 【請求項69】 請求項68記載のコンピュータ・システムにおいて、前記
    アドレス・テーブルが、前記ロード命令のために用いられるレジスタ数に対応す
    る数のエントリを含む、コンピュータ・システム。
JP2000516280A 1997-10-13 1998-10-09 命令実行を最適化する方法および装置 Pending JP2001520415A (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US95383697A 1997-10-13 1997-10-13
US08/953,836 1997-10-13
US16804098A 1998-10-07 1998-10-07
US09/168,040 1998-10-07
PCT/US1998/021465 WO1999019795A1 (en) 1997-10-13 1998-10-09 Method and apparatus for optimizing execution of load and store instructions

Publications (1)

Publication Number Publication Date
JP2001520415A true JP2001520415A (ja) 2001-10-30

Family

ID=26863747

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000516280A Pending JP2001520415A (ja) 1997-10-13 1998-10-09 命令実行を最適化する方法および装置

Country Status (4)

Country Link
EP (1) EP1031076A1 (ja)
JP (1) JP2001520415A (ja)
AU (1) AU1078099A (ja)
WO (1) WO1999019795A1 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7240343B2 (en) 2001-07-05 2007-07-03 International Business Machines Corporation System and method for handling an exception in a program
JP2008293378A (ja) * 2007-05-25 2008-12-04 Panasonic Corp プログラム書き換え装置
JP7403541B2 (ja) 2019-04-03 2023-12-22 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド メモリ順序付け違反チェックバッファの排出遅延を許容するための投機的命令ウェイクアップ

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6889315B2 (en) * 1999-12-17 2005-05-03 Fujitsu Limited Processor and method of controlling the same
US6598156B1 (en) * 1999-12-23 2003-07-22 Intel Corporation Mechanism for handling failing load check instructions
US7680999B1 (en) 2000-02-08 2010-03-16 Hewlett-Packard Development Company, L.P. Privilege promotion based on check of previous privilege level
US6704862B1 (en) 2000-03-06 2004-03-09 Sun Microsystems, Inc. Method and apparatus for facilitating exception handling using a conditional trap instruction
US6631460B1 (en) 2000-04-27 2003-10-07 Institute For The Development Of Emerging Architectures, L.L.C. Advanced load address table entry invalidation based on register address wraparound
CN111723921B (zh) * 2019-03-22 2024-05-14 中科寒武纪科技股份有限公司 人工智能计算装置及相关产品
US11983535B2 (en) 2019-03-22 2024-05-14 Cambricon Technologies Corporation Limited Artificial intelligence computing device and related product

Family Cites Families (6)

* 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
US5692169A (en) * 1990-12-14 1997-11-25 Hewlett Packard Company Method and system for deferring exceptions generated during speculative execution
JP2786574B2 (ja) * 1992-05-06 1998-08-13 インターナショナル・ビジネス・マシーンズ・コーポレイション コンピュータ・システムにおける順不同ロード動作の性能を改善する方法と装置
US5799179A (en) * 1995-01-24 1998-08-25 International Business Machines Corporation Handling of exceptions in speculative instructions
US5625835A (en) * 1995-05-10 1997-04-29 International Business Machines Corporation Method and apparatus for reordering memory operations in a superscalar or very long instruction word processor
US5903749A (en) * 1996-07-02 1999-05-11 Institute For The Development Of Emerging Architecture, L.L.C. Method and apparatus for implementing check instructions that allow for the reuse of memory conflict information if no memory conflict occurs

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7240343B2 (en) 2001-07-05 2007-07-03 International Business Machines Corporation System and method for handling an exception in a program
JP2008293378A (ja) * 2007-05-25 2008-12-04 Panasonic Corp プログラム書き換え装置
US8286145B2 (en) 2007-05-25 2012-10-09 Panasonic Corporation Program re-writing apparatus
JP7403541B2 (ja) 2019-04-03 2023-12-22 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド メモリ順序付け違反チェックバッファの排出遅延を許容するための投機的命令ウェイクアップ

Also Published As

Publication number Publication date
EP1031076A1 (en) 2000-08-30
WO1999019795A8 (en) 2000-09-28
AU1078099A (en) 1999-05-03
WO1999019795A1 (en) 1999-04-22

Similar Documents

Publication Publication Date Title
US6505296B2 (en) Emulated branch effected by trampoline mechanism
US6631460B1 (en) Advanced load address table entry invalidation based on register address wraparound
JP3096423B2 (ja) スーパースカラまたはvliwプロセッサにおけるメモリ操作の順序替えのための方法及び装置
US5778219A (en) Method and system for propagating exception status in data registers and for detecting exceptions from speculative operations with non-speculative operations
JP3772900B2 (ja) コンピュータシステム
JP2786574B2 (ja) コンピュータ・システムにおける順不同ロード動作の性能を改善する方法と装置
US5692169A (en) Method and system for deferring exceptions generated during speculative execution
US6918030B2 (en) Microprocessor for executing speculative load instructions with retry of speculative load instruction without calling any recovery procedures
JPH1069386A (ja) 推測的な実行を支援する論理装置
KR20190104375A (ko) 벡터 처리회로를 사용한 에러 검출
JP2001520415A (ja) 命令実行を最適化する方法および装置