JP7189935B2 - 同時の分岐アドレスの予測およびレジスタの内容の更新 - Google Patents

同時の分岐アドレスの予測およびレジスタの内容の更新 Download PDF

Info

Publication number
JP7189935B2
JP7189935B2 JP2020508366A JP2020508366A JP7189935B2 JP 7189935 B2 JP7189935 B2 JP 7189935B2 JP 2020508366 A JP2020508366 A JP 2020508366A JP 2020508366 A JP2020508366 A JP 2020508366A JP 7189935 B2 JP7189935 B2 JP 7189935B2
Authority
JP
Japan
Prior art keywords
register
predicted
prediction
predicted value
instructions
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.)
Active
Application number
JP2020508366A
Other languages
English (en)
Other versions
JP2020531962A (ja
Inventor
グシュヴィント、マイケル、カール
サラプラ、ヴァレンティーナ
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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2020531962A publication Critical patent/JP2020531962A/ja
Application granted granted Critical
Publication of JP7189935B2 publication Critical patent/JP7189935B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30061Multi-way branch instructions, e.g. CASE
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • 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/30098Register arrangements
    • G06F9/30101Special purpose registers
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30116Shadow registers, e.g. coupled registers, not forming part of the register space
    • 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/30181Instruction operation extension or modification
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/323Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch instructions
    • 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/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • 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)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Description

1つまたは複数の態様は、一般に、コンピューティング環境内の処理に関しており、特に、そのような処理を容易にすることに関している。
多くのコンピューティング・システムは、アドレス自体の代わりに、次に実行する命令のアドレスの位置が分岐命令において指定される、レジスタ間接分岐を使用する。例えば、アドレスを含むレジスタの位置が指定される。
さらに、一般的に使用されるアプリケーション・バイナリ・インターフェイス(ABI:application binary interfaces)に従って、最初に分岐アドレスが汎用レジスタ(GPR:general purpose register)に読み込まれ、次に、専用制御レジスタ(SPR:special purpose control register)に転送され、その後、レジスタ間接分岐を引き起こす。例えば、International Business Machines Corporation(ニューヨーク州アーモンク)によって提供されるPower命令セット・アーキテクチャで(ISA:Instruction Set Architecture)は、分岐命令がカウンタ(CTR)専用レジスタに分岐する。しかし、この専用レジスタは直接読み込まれず、汎用レジスタを介して読み込まれる。
カウンタ・レジスタは、読み取りが高価になる傾向がある。したがって、サブルーチン(BCTR)への分岐が実行されるときに、少なくとも1つのABIが、CTRの値が別のレジスタ(R12など)に格納されるということを示し、呼び出される関数によって他のレジスタをベース・レジスタとして使用できるようにする。しかし、分岐予測が行われる場合、R12の値が読み込まれる前に分岐アドレスが予測されることがあり、これが、データ・アクセスに応答して呼び出されるサブルーチンを停止させ、性能を制限する。
"z/Architecture Principles of Operation," IBM Publication No. SA22-7832-10, March2015 "Power ISA(TM) Version 2.07B," International Business Machines Corporation, April 9, 2015
したがって、当技術分野において、前述の問題に対処する必要がある。
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品の提供によって、従来技術の欠点が克服され、追加の利点がもたらされる。このコンピュータ・プログラム製品は、処理回路によって読み取り可能な、方法を実行するための命令を格納している記憶媒体を備える。この方法は、例えば、コンピューティング環境のプロセッサを使用して、レジスタ間接分岐において使用される予測値を予測することを含む。予測値は、コンピューティング環境の1つまたは複数の命令にアクセスできる選択された位置に格納され、この格納はレジスタ間接分岐の処理と同時に実行される。選択された位置は、命令アドレスを格納するために使用される別の位置に加えられる。予測値は、レジスタ間接分岐を含む投機的処理において使用される。
レジスタ間接分岐を処理することと、その処理から得られた予測値を他の命令にアクセスできる(プログラム・カウンタに加えた)位置に格納することとを同時に行うことによって、処理が容易になり、特に予測値が正しい場合に、性能が向上することがある。
1つまたは複数の例として、予測値は、命令フェッチによって使用されるターゲット・アドレスを含み、選択された位置はハードウェア・レジスタを含む。さらに、1つの例では、この使用することは、命令フェッチをターゲット・アドレスにリダイレクトすることを含む。
別の態様では、予測値が正確であるかどうかに関する判定が行われる。予測値が不正確であるということの決定に基づいて、回復が実行される。
この回復は、例えば、使用の後に実行される1つまたは複数の命令をフラッシュすることと、予測値を予測ではない値に置き換えることとを含む。1つの例では、この置き換えることは、1つまたは複数の名前変更レジスタを使用して予測ではない値を提供することを含む。
1つの実施形態では、この格納することは、予測値を保持するためのレジスタを割り当てることと、予測値を、予測値を保持するために割り当てられたレジスタにコピーすることとを含む。
1つの例として、このレジスタは、予測値を保持するために割り当てられた論理レジスタに割り当てられた、名前変更レジスタである。さらに、1つの実施形態では、名前変更レジスタが使用可能としてマーク付けされる。
1つまたは複数の態様に関するコンピュータ実装方法およびシステムも本明細書に記載され、請求される。さらに、1つまたは複数の態様に関するサービスも本明細書に記載されており、請求されてよい。
1つの態様に従って、コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品が提供される。このコンピュータ・プログラム製品は、処理回路によって読み取り可能な、方法を実行するための命令を格納しているコンピュータ可読記憶媒体を備える。この方法は、コンピューティング環境のプロセッサを使用して、レジスタ間接分岐において使用される予測値を予測することと、予測値を、コンピューティング環境の1つまたは複数の命令にアクセスできる選択された位置に格納することであって、この格納することがレジスタ間接分岐の処理と同時に実行され、選択された位置が、命令アドレスを格納するために使用される別の位置に加えられる、格納することと、予測値を、レジスタ間接分岐を含む投機的処理において使用することとを含む。
別の態様に従って、コンピューティング環境内の処理を容易にするためのコンピュータ・システムが提供される。このコンピュータ・システムは、メモリと、このメモリと通信するプロセッサとを備えており、このコンピュータ・システムは方法を実行するように構成される。その方法は、コンピューティング環境のプロセッサを使用して、レジスタ間接分岐において使用される予測値を予測することと、予測値を、コンピューティング環境の1つまたは複数の命令にアクセスできる選択された位置に格納することであって、この格納することがレジスタ間接分岐の処理と同時に実行され、選択された位置が、命令アドレスを格納するために使用される別の位置に加えられる、格納することと、予測値を、レジスタ間接分岐を含む投機的処理において使用することとを含む。
別の態様に従って、コンピューティング環境内の処理を容易にするためのコンピュータ実装方法が提供される。このコンピュータ実装方法は、コンピューティング環境のプロセッサを使用して、レジスタ間接分岐において使用される予測値を予測することと、予測値を、コンピューティング環境の1つまたは複数の命令にアクセスできる選択された位置に格納することであって、この格納することがレジスタ間接分岐の処理と同時に実行され、選択された位置が、命令アドレスを格納するために使用される別の位置に加えられる、格納することと、予測値を、レジスタ間接分岐を含む投機的処理において使用することとを含む。
その他の特徴および利点が、本明細書に記載された技術によって実現される。その他の実施形態および態様は、本明細書において詳細に説明され、請求される態様の一部と見なされる。
1つまたは複数の態様は、本明細書の最後にある特許請求の範囲において例として具体的に指摘され、明確に請求される。前述の内容、ならびに1つまたは複数の態様の特徴および利点は、添付の図面と併せて行われる以下の詳細な説明から明らかになる。
本発明の1つまたは複数の態様を組み込んで使用するためのコンピューティング環境の一例を示す図である。 本発明の1つまたは複数の態様に従って、図1のプロセッサの詳細をさらに示す図である。 本発明の1つまたは複数の態様に従って使用される命令実行パイプラインの一例の詳細をさらに示す図である。 本発明の態様に従って、図1のプロセッサの一例の詳細をさらに示す図である。 本発明の態様に従って、レジスタ間接分岐の予測に関連付けられた処理の一例を示す図である。 本発明の態様に従って、予測の正しさをチェックする一例を示す図である。 本発明の態様に従って、予測の正しさをチェックする別の例を示す図である。 本発明の態様に従って、レジスタ間接分岐および関係のあるレジスタの予測に関連付けられた処理の一例を示す図である。 本発明の態様に従って、予測の正しさをチェックする別の例を示す図である。 本発明の態様に従って、関係のあるレジスタに関する予測の正しさをチェックする例を示す図である。 本発明の態様に従って、外部から示された関係のあるレジスタの予測(EIARP:externallyindicated affiliated register prediction)に関連付けられた処理の一例を示す図である。 本発明の態様に従って、コンテキスト切り替えおよび外部から示された関係のあるレジスタの予測に関連付けられた処理の一例を示す図である。 本発明の態様に従って、ハードウェア例外/割り込み処理に移行することに関連付けられた処理の一例を示す図である。 本発明の態様に従って、ハードウェア例外/割り込み処理を終了することに関連付けられた処理の一例を示す図である。 本発明の態様に従って、レジスタ間接分岐の予測および外部から示された関係のあるレジスタの予測の使用に関連付けられた処理の一例を示す図である。 本発明の態様に従って、レジスタ間接分岐の予測に関連付けられた処理および関係のあるレジスタを予測できるかどうかを予測するための処理の一例を示す図である。 本発明の態様に従って、予測の正しさをチェックする別の例を示す図である。 本発明の態様に従って、関係のあるレジスタに関する予測の正しさをチェックする別の例を示す図である。 本発明の態様に従って、関係のあるレジスタに関する予測の正しさをチェックするさらに別の例を示す図である。 本発明の態様に従って、レジスタ間接分岐予測に関連付けられた処理および予測できる関係のあるレジスタを動的に選択するための処理の一例を示す図である。 本発明の態様に従って、関係のあるレジスタに関する予測の正しさをチェックして予測器を更新する例を示す図である。 本発明の態様に従って、融合シーケンスを認識することに関連付けられた処理の一例を示す図である。 本発明の態様に従って、外部から示された関係のあるレジスタの予測および融合に基づく関係シーケンスに関連付けられた処理の一例を示す図である。 本発明の態様に従って、融合に基づく関係のあるシーケンスを含む分岐予測を実行することに関連付けられた処理の一例を示す図である。 本発明の態様に従って、命令が関係の作成または破壊であるかどうかを判定することに関連付けられた処理の一例を示す図である。 本発明の態様に従って、関係のある導出されたレジスタを予測することに関連付けられた処理の一例を示す図である。 本発明の態様に従って、関係のある導出されたレジスタに関する予測の正しさをチェックする一例を示す図である。 本発明の態様に従って、分岐予測および融合に基づく関係のある導出されたシーケンスに関連付けられた処理の一例を示す図である。 本発明の態様に従って、コンピューティング環境内の処理を容易にする一実施形態を示す図である。 本発明の態様に従って、コンピューティング環境内の処理を容易にする一実施形態を示す図である。 本発明の1つまたは複数の態様を組み込んで使用するためのコンピューティング環境の別の例を示す図である。 図31のメモリの詳細をさらに示す図である。 クラウド・コンピューティング環境の一実施形態を示す図である。 抽象モデル・レイヤの一例を示す図である。
1つまたは複数の態様に従って、レジスタ間接分岐に使用されるレジスタの内容の値(例えば、ターゲット・アドレス・レジスタのターゲット・アドレス)を予測することに基づいて、予測値がレジスタ(例えば、ターゲット・アドレス・レジスタ、本明細書では予測されたレジスタとも呼ばれる)に格納される。その後、このレジスタは、将来使用するために使用可能である。例えば、ターゲット・アドレス・レジスタの内容が更新され、予測命令フェッチと共に使用可能になる。ターゲット・アドレスが予測された場合、そのターゲット・アドレスは、命令フェッチと、他のもの(例えば、他の命令または動作)にアクセスできるレジスタまたはその他の選択された位置への格納との両方に、同時に使用可能になる。これによって他のものは、予測値を使用できるようになる。
一例として、予測されたレジスタまたは位置は、予測に基づいて自動的に更新されるプログラム・カウンタ以外のレジスタまたは位置である。例えば、予測されたレジスタまたは位置は、カウンタ(CTR)レジスタまたはその他の選択されたレジスタ/位置などの、プログラム・カウンタに加えたレジスタまたは位置である。ターゲット・アドレスは、予測された場合、予測されたレジスタに同時に使用可能になり、1つの機能がレジスタ間接分岐を処理し、予測されたターゲット・アドレスを格納する。例えば、ターゲット・アドレスは、(例えば、ハードウェア/ソフトウェア・インターフェイスでの)1つの設計された命令の制約の範囲内である。値を予測されたレジスタ/位置にコピーまたは移動するために、別の設計された命令は不要である。
別の態様では、レジスタの内容の値を予測し、予測値を予測されたレジスタに格納することに加えて、予測値が別の位置(処理を容易にするために使用される別のレジスタなど)にも格納される。この他の位置またはレジスタは、本明細書では、他の命令によって使用される予測値を格納する関係のある位置または関係のあるレジスタと呼ばれる。関係のあるレジスタは、予測されたレジスタに関連付けられたレジスタである。例えば、関係のあるレジスタは、別のレジスタ(例えば、予測されたレジスタ)との既知の関係を有しており、他のレジスタのコピーなどとして知られている。1つの特定の例では、両方のレジスタが命令によって参照されてよい。一例として、MTCTR R12命令は、R12の内容をCTRレジスタに移動する。したがって、R12はCTRと関係がある。そのようなその他の例が存在する。
さらに別の態様では、関係のあるレジスタが予測において使用されるかどうかを指定するための制御が提供される。関係のあるレジスタが予測される場合、この制御は、関係のあるレジスタの指示(例えば、レジスタ番号)も提供する。この制御は、例えば、コードに固有であり、例として、コードの単位(アプリケーション、プロセス、関数、モジュール、または動的に共有されるオブジェクト(例えば、ライブラリ)など)ごとに有効化/無効化されてよい。
さらに別の態様では、処理をさらに容易にするために関係のある導出されたレジスタ(または他の位置)に格納される値を予測するために、予測値が使用されてよい。関係のある導出されたレジスタは、その内容が関係のあるレジスタの内容から導出されるレジスタである。例えば、選択されたレジスタ(R2など)に格納される値を取得するために、R12の内容がオフセットと共に使用されることがある。したがって、この例では、R2が関係のある導出されたレジスタである。その他の例も存在する。
さらに、1つまたは複数の態様では、レジスタ間接分岐において使用され、予測されることがある1つまたは複数のレジスタを指定する命令の特定のシーケンスが認識されてよく、それに基づいて、命令の特定のシーケンスの動作を実行する動作のシーケンスが、処理を容易にするために融合されてよい。すなわち、1つまたは複数の命令を動作の単一の複合プロセスに結合するために、融合プロセスが実行される。すなわち、命令のシーケンスが、全体として扱われる。
本明細書では、さまざまな態様が説明される。さらに、本発明の態様の思想を逸脱することなく、多くの変形が可能である。本明細書ではさまざまな態様および特徴が説明されており、特に矛盾がない限り、各態様および特徴が任意の他の態様または特徴と組み合わせられてよいということに、注意するべきである。
本発明の1つまたは複数の態様を組み込んで使用するためのコンピューティング環境の一実施形態が、図1を参照して説明される。1つの例では、コンピューティング環境は、International Business Machines Corporation(ニューヨーク州アーモンク)によって提供されるz/Architecture(R)に基づく。z/Architecture(R)の一実施形態は、“z/Architecture Principles of Operation,” IBM Publication No. SA22-7832-10, March 2015に記載されており、この文献は本明細書において参照によってその全体が本明細書に組み込まれている。Z/ARCHITECTUREは、International Business Machines Corporation(米国ニューヨーク州アーモンク)の登録商標である。
別の例では、コンピューティング環境は、International Business Machines Corporation(ニューヨーク州アーモンク)によって提供されるPower Architecture(R)に基づく。Power Architecture(R)の一実施形態は、“Power IS(TM) Version 2.07B,” International Business Machines Corporation, April 9, 2015に記載されており、この文献は本明細書において参照によってその全体が本明細書に組み込まれている。POWER ARCHITECTUREは、International Business Machines Corporation(米国ニューヨーク州アーモンク)の登録商標である。
コンピューティング環境は、Intel(R) x86アーキテクチャを含むが、これに限定されない、他のアーキテクチャに基づいてもよい。その他の例も存在する。
図1に示されているように、コンピューティング環境100は、例えば、汎用コンピューティング・デバイスの形態で示されるコンピュータ・システム102を含んでいる。コンピュータ・システム102は、1つまたは複数のバスまたはその他の接続110あるいはその両方を介して互いに結合された、1つもしくは複数のプロセッサまたはプロセッシング・ユニット104(例えば、中央処理装置(CPU:central processing units))、メモリ106(例として、メイン・メモリまたはストレージと呼ばれる)、および1つまたは複数の入出力(I/O:input/output)インターフェイス108を含んでよいが、これらに限定されない。
バス110は、メモリ・バスもしくはメモリ・コントローラ、ペリフェラル・バス、アクセラレーテッド・グラフィックス・ポート、および任意のさまざまなバス・アーキテクチャを使用するプロセッサもしくはローカル・バスを含む、任意の複数の種類のバス構造のうちの1つまたは複数を表す。例として、そのようなアーキテクチャは、ISA(Industry Standard Architecture)、MCA(Micro Channel Architecture)、EISA(Enhanced ISA)、VESA(Video Electronics Standards Association)ローカル・バス、およびPCI(Peripheral Component Interconnects)を含むが、これらに限定されない。
メモリ106は、例えば、プロセッサ104のローカル・キャッシュ122に結合されてよい、共有キャッシュなどのキャッシュ120を含んでよい。さらに、メモリ106は、1つもしくは複数のプログラムまたはアプリケーション130、オペレーティング・システム132、および1つまたは複数のコンピュータ可読プログラム命令134を含んでよい。コンピュータ可読プログラム命令134は、本発明の態様の実施形態の機能を実行するように構成されてよい。
コンピュータ・システム102は、例えばI/Oインターフェイス108を介して、1つもしくは複数の外部デバイス140、1つもしくは複数のネットワーク・インターフェイス142、または1つもしくは複数のデータ・ストレージ・デバイス144、あるいはその組み合わせと通信してもよい。外部デバイスの例としては、ユーザ端末、テープ・ドライブ、ポインティング・デバイス、ディスプレイなどが挙げられる。ネットワーク・インターフェイス142は、コンピュータ・システム102が、ローカル・エリア・ネットワーク(LAN:local area network)、一般的な広域ネットワーク(WAN:wide area network)、またはパブリック・ネットワーク(例えば、インターネット)、あるいはその組み合わせなどの1つまたは複数のネットワークと通信できるようにし、他のコンピューティング・デバイスまたはシステムとの通信を実現する。
データ・ストレージ・デバイス144は、1つもしくは複数のプログラム146、1つもしくは複数のコンピュータ可読プログラム命令148、またはデータ、あるいはその組み合わせなどを格納してよい。コンピュータ可読プログラム命令は、本発明の態様の実施形態の機能を実行するように構成されてよい。
コンピュータ・システム102は、取り外し可能/取り外し不可、揮発性/不揮発性のコンピュータ・システム・ストレージ媒体を含むか、またはそのようなにコンピュータ・システム・ストレージ媒体に結合されるか、あるいはその両方であってよい。例えば、コンピュータ・システム102は、取り外し不可、不揮発性の磁気媒体(通常は、「ハード・ドライブ」と呼ばれる)、取り外し可能、不揮発性の磁気ディスク(例えば、「フロッピー・ディスク」)に対する読み取りと書き込みを行うための磁気ディスク・ドライブ、またはCD-ROM、DVD-ROM、もしくはその他の光媒体などの取り外し可能、不揮発性の光ディスクに対する読み取りと書き込みを行うための光ディスク・ドライブ、あるいはその組み合わせを含むか、またはこれらに結合されるか、あるいはその両方であってよい。その他のハードウェア・コンポーネントまたはソフトウェア・コンポーネントあるいはその両方を、コンピュータ・システム102と併用できるということが理解されるべきである。その例として、マイクロコード、デバイス・ドライバ、冗長プロセッシング・ユニット、外部ディスク・ドライブ・アレイ、RAIDシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システムなどが挙げられるが、これらに限定されない。
コンピュータ・システム102は、他の多数の汎用もしくは専用のコンピューティング・システム環境または構成で運用されてよい。コンピュータ・システム102での使用に適した周知のコンピューティング・システム、環境、または構成、あるいはその組み合わせの例としては、パーソナル・コンピュータ(PC:personal computer)システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドまたはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサベース・システム、セット・トップ・ボックス、プログラマブル・コンシューマ・エレクトロニクス、ネットワークPC、マイクロコンピュータ・システム、メインフレーム・コンピュータ・システム、およびこれらの任意のシステムまたはデバイスを含む分散クラウド・コンピューティング環境などが挙げられるが、これらに限定されない。
さらに、プロセッサ104の一例に関する詳細が、図2を参照してさらに説明される。プロセッサ104は、命令を実行するために使用される複数の機能コンポーネントを含む。これらの機能コンポーネントは、例えば、実行される命令をフェッチするための命令フェッチ・コンポーネント150と、フェッチされた命令をデコードするため、およびデコードされた命令のオペランドを取得するための命令デコード・ユニット152と、デコードされた命令を実行するための命令実行コンポーネント154と、必要な場合に、命令を実行するためにメモリにアクセスするためのメモリ・アクセス・コンポーネント156と、実行された命令の結果を提供するための書き戻しコンポーネント160とを含む。これらのコンポーネントのうちの1つまたは複数は、本発明の1つまたは複数の態様に従って、下でさらに説明されているように、予測命令フェッチまたは処理あるいはその両方166に関連付けられた1つもしくは複数の命令または動作あるいはその両方を実行するために使用されてよい。
プロセッサ104は、一実施形態では、機能コンポーネントのうちの1つもしくは複数によって使用される1つまたは複数のレジスタ168も含む。プロセッサ104は、本明細書で提供されている例よりも多いコンポーネント、少ないコンポーネント、またはその他のコンポーネント、あるいはその組み合わせを含んでよい。
プロセッサ104の実行パイプラインに関する詳細が、図3を参照してさらに説明される。本明細書では、パイプラインのさまざまな処理段階が図に示されて説明されているが、本発明の態様の思想から逸脱することなく、追加の段階、より少ない段階、またはその他の段階、あるいはその組み合わせが使用されてよいということが理解されるであろう。
図3を参照すると、1つの実施形態では、命令が命令キューからフェッチされ(170)、命令の分岐予測172またはデコーディング174あるいはその両方が実行されてよい。デコードされた命令が、一緒に処理される命令のグループ176に追加されてよい。グループ化された命令がマッパー178に提供され、マッパー178が、依存関係を決定し、リソースを割り当て、命令/動作のグループを適切な発行キューにディスパッチする。例えば分岐、読み込み/格納、浮動小数点、固定小数点、ベクトルなどを含む、異なる種類の実行ユニットに対して、1つまたは複数の発行キューが存在する。発行段階180の間に、命令/動作が適切な実行ユニットに発行される。いずれかのレジスタが読み取られて(182)、そのソースを取り出し、実行段階184の間に命令/動作が実行される。示されているように、この実行は、分岐の場合、例えば、読み込み(LD)もしくは格納(ST)、固定小数点演算(FX)、浮動小数点演算(FP)、またはベクトル演算(VX)であってよい。書き戻し段階186の間に、いずれかの結果が適切なレジスタに書き込まれる。その後、命令が完了する(188)。割り込みまたはフラッシュ190が存在する場合、処理が命令フェッチ170に戻ってよい。
さらに、1つの例では、レジスタの保存/復元において使用されてよいレジスタ名変更ユニット192が、デコード・ユニットに結合される。
プロセッサに関するその他の詳細が、図4を参照して説明される。1つの例では、プロセッサ104などのプロセッサは、予測ハードウェア、レジスタ、キャッシュ、デコーダ、命令順序付けユニット、および命令実行ユニットを例として含んでよい、パイプライン型プロセッサである。予測ハードウェアは、例えば、ローカル分岐履歴テーブル(BHT:branch history table)105a、グローバル分岐履歴テーブル(BHT)105b、およびグローバル・セレクタ105cを含む。予測ハードウェアは、次の命令フェッチのアドレスを有する命令フェッチ・アドレス・レジスタ(IFAR:instruction fetch address register)107を介してアクセスされる。
同じアドレスが、「フェッチ・グループ」と呼ばれる複数の命令をフェッチしてよい命令キャッシュ109にも提供される。ディレクトリ111が命令キャッシュ109に関連付けられる。
キャッシュおよび予測ハードウェアは、同じアドレスを使用してほぼ同時にアクセスされる。予測ハードウェアが、フェッチ・グループ内の命令に使用できる予測情報を含んでいる場合、その予測が命令順序付けユニット(ISU:instruction sequencing unit)113に転送され、次に、命令順序付けユニットが、実行するための命令を実行ユニットに発行する。この予測は、分岐ターゲット計算115および分岐ターゲット予測ハードウェア(リンク・レジスタ予測スタック117aおよびカウント・レジスタ・スタック117bなど)と連動してIFAR107を更新するために使用されてよい。予測情報を使用できないが、1つまたは複数の命令デコーダ119がフェッチ・グループ内で分岐命令を検出した場合、そのフェッチ・グループに関する予測が作成される。予測された分岐が、分岐情報キュー(BIQ:branch information queue)125などの予測ハードウェアに格納され、ISU113に転送される。
ISU113によって分岐実行ユニット(BRU:branch execution unit)121に発行された命令に応答して、分岐実行ユニット121が動作する。BRU121は、条件レジスタ(CR:condition register)ファイル123に対する読み取りアクセス権限を有する。分岐実行ユニット121は、分岐スキャン論理(branch scan logic)によって分岐情報キュー125に格納された情報にアクセスして、分岐予測の成功を決定することができ、マイクロプロセッサによってサポートされる1つまたは複数のスレッドに対応する命令フェッチ・アドレス・レジスタ(IFAR)107に、動作可能なように結合される。少なくとも1つの実施形態に従って、BIQエントリが識別子によって(例えば、分岐タグ(BTAG:branch tag)によって)関連付けられ、識別される。BIQエントリに関連付けられた分岐が完了したときに、そのことがBIQエントリにマーク付けされる。BIQエントリはキュー内で維持され、それらが、完了した分岐に関連付けられた情報を含んでいるとしてキュー・エントリにマーク付けされるときに、最も古いキュー・エントリの割り当てが順次解除される。BRU121は、BRU121が分岐予測ミスを発見したときに予測器の更新を引き起こすように、動作可能なようにさらに結合される。
命令が実行されるときに、BRU121が、予測が誤っているかどうかを検出する。予測が誤っている場合は、予測が更新される。この目的のために、プロセッサは予測器更新論理127も含んでいる。予測器更新論理127は、分岐実行ユニット121からの更新指示に応答して、ローカルBHT105a、グローバルBHT105b、およびグローバル・セレクタ105cのうちの1つまたは複数に含まれる配列エントリを更新するように構成される。予測器ハードウェア105a、105b、および105cは、命令フェッチおよび予測動作によって使用される、読み取りポートと異なる書き込みポートを有してよく、または単一の読み取り/書き込みポートが共有されてよい。予測器更新論理127は、リンク・スタック117aおよびカウント・レジスタ・スタック117bに動作可能なようにさらに結合されてよい。
ここで条件レジスタ・ファイル(CRF:condition register file)123を参照すると、CRF123は、BRU121によって読み取りアクセス可能であり、固定小数点ユニット(FXU:fixed point unit)141、浮動小数点ユニット(FPU:floating point unit)143、およびベクトル・マルチメディア拡張ユニット(VMXU:vector multimedia extension unit)145を含むが、これらに限定さない、実行ユニットによって書き込み可能である。条件レジスタ論理(CRL:condition register logic)実行ユニット147(CRUとも呼ばれる)および専用レジスタ(SPR:special purpose register)処理論理149は、条件レジスタ・ファイル(CRF)123に対する読み取りおよび書き込みアクセス権限を有する。CRU147は、CRFファイル123に格納された条件レジスタに対して論理演算を実行する。FXU141は、CRF123に対して書き込み更新を実行することができる。
プロセッサ104は、読み込み/格納ユニット151、ならびにさまざまなマルチプレクサ153およびバッファ155に加えて、アドレス変換テーブル157およびその他の回路をさらに含む。
プロセッサ104は、ハードウェア・レジスタを使用して情報を格納するプログラム(アプリケーションとも呼ばれる)を実行する。関数、サブルーチン、またはその他の種類のルーチンなどのルーチンを呼び出すプログラムは、呼び出し元(すなわち、ルーチンを呼び出すプログラム)によって使用されるレジスタを保存し、呼び出し先(呼び出されるルーチン)から戻ったときに、それらのレジスタを復元する責任を負う。同様に、呼び出し先は、下で提供されるコード例に示されているように、呼び出し先が使用するレジスタを保存/復元する責任を負う。
さらに、多くのコンピューティング・システムは、データまたはコードあるいはその両方のアドレスを指定するために、ベース・レジスタを使用する。例えば、International Business Machines Corporationによって提供されるSystem/360(R)(System z(R))は、分岐およびリンク・レジスタ(BALR:branch and link register)命令およびUSINGディレクティブを使用して、データおよびコードのアドレスを指定するためのインデックスを作成する。別の例として、Powerシステムは、分岐およびリンク(BL:branch and link)命令をオフセット(例えば、BL. +4)と共に使用して、位置独立コード(PIC:position independent code)においてデータのアドレス指定に使用するためのレジスタ内のプログラム・カウンタ(PC:program counter)アドレスを作成する。他のシステムも同様に、データおよびコードのアドレスを指定するためにベース・レジスタを使用する。
示されているように、アドレス指定能力を確立するために、異なるシーケンスが使用されている。例えば、呼び出し先関数においてプログラム・カウンタ(PC)値が読み込まれるか、または提供された関数呼び出しアドレスが使用されるシーケンスが使用されている。このシーケンスは、現在の命令アドレスによって表される既知の値を提供する能力を与えるが、高価なシーケンスを使用することがある。反対に、指定された関数エントリ・アドレスを使用すると、シーケンスがより単純になるが、エントリ・ポイント・アドレスを確立するために、長い依存関係の連鎖に依存する可能性がある。以下の例は、アドレス指定能力を確立するために前に使用されたシーケンスを表している。
System/360(R)(System z(R))のコードの一例が下に示されている。以下のSystem/360(R)のアセンブリ・コードは、System/360(R)アーキテクチャに基づくメインフレーム・システム内でサブルーチンを呼び出すために一般に使用されるサブルーチン呼び出しの構造を示している。

l r15=A(subr) !サブルーチンsubrのアドレスをr15に読み込む
balr r14,r15 !復帰アドレスをr14に保存して、
… !pcをr15の内容に設定する
以下のSystem/360(R)(System z(R))のアセンブリ・コードは、System/360(R)アーキテクチャに基づくメインフレーム・システム内で呼び出されるサブルーチン呼び出しの構造を示している。
subr:
stm r14, r12, 12 (r13) !複数のレジスタを呼び出し元の
!保存領域(r14、r15、r0、…、r12)に格納する
balr r12, 0 !ベース・レジスタとして使用するために、アドレスをr12に設定する
using *, r12 !r12を使用することをアセンブラに伝えるための疑似命令
la r11, savearea !自分の保存領域のアドレスを読み込む
st r13, savearea+4 !呼び出し元の保存領域のアドレスを格納する
st r11, 8 (r13) !自分の保存領域のアドレスを呼び出し元の保存領域に格納する
…サブルーチンの本体…
…r0は、存在する場合、復帰コードに使用される…
l r13, savearea+4 !呼び出し元の保存領域のアドレスを読み込む
lm r14, r12, 12 (r13) !複数のレジスタを呼び出し元の保存領域
!(r14、r15、r0、…、r12)から読み込む
br r14 !呼び出し元に戻る
さらに、Power Architecture(R)に基づくシステムのコードの一例が下に示されている。以下のPower Architecture(R)のアセンブリ・コードは、Power Architecture(R)に基づくPowerシステム内でサブルーチンを呼び出すために一般に使用されるサブルーチン呼び出しの構造を示している。

lwz r15=A(subr) !サブルーチンsubrのアドレスをr15に読み込む
mtctr r15 !ctr = r15
bctrl !復帰アドレスをlrに保存して、
!pcをctrの内容に設定する
以下のPower Architecture(R)のアセンブリ・コードは、Power Architecture(R)に基づくPowerシステム内で呼び出されるサブルーチン呼び出しの構造を示している。
subr:
stmw r10,r4,12(r13) !複数のレジスタを呼び出し元の保存領域
!(r14、r15、r0、…、r12)に格納する
mflr r0 !lrを保存する
bl .+4 !PCをLRに取得する
base: mflr r12 !r12内のアドレスをベース・レジスタとして使用する
mtlr r0 !LRを復元する
…サブルーチンの本体…
lwz r11, (savearea-base) @1, r12 !データを
!グローバル・オフセット・テーブル(GOT:Global Offset Table)から読み込む
…r0は、存在する場合、復帰コードに使用される…
blr !呼び出し元に戻る
上記の例のように、プログラム・カウンタをベースとして読み込むことは、オーバーヘッドを伴う。例えば、System/360(R)の場合、コードは余分なbalr r12, 0命令を含み、Powerシステムでは、mflr/bl.+4/mflr/mtlrを含んでいる余分な命令のセットが存在する。したがって、下に示されているように、1つのコード変換では、関数エントリ・ポイントもベースとして使用される。
ベースとして関数エントリ・ポイントを含んでいるSystem/360(R)のコードの一例は、次のとおりである。

l r12=A(subr) !サブルーチンsubrのアドレスをr12に読み込む
balr r14, r12 !復帰アドレスをr14に保存して、
!pcをr12の内容に設定する

subr:
using *, r12 !r12をベースとして使用することをアセンブラに伝えるための疑似命令
stm r14, r12, 12 (r13) !複数のレジスタを呼び出し元の保存領域
!(r14、r15、r0、…、r12)に格納する
la r11, savearea !自分の保存領域のアドレスを読み込む
st r13, savearea+4 !呼び出し元の保存領域のアドレスを格納する
st r11, 8 (r13) !自分の保存領域のアドレスを呼び出し元の保存領域に格納する
…サブルーチンの本体…
…r0は、存在する場合、復帰コードに使用される…
l r13, savearea+4 !呼び出し元の保存領域のアドレスを読み込む
lm r14, r12, 12 (r13) !複数のレジスタを呼び出し元の保存領域
!(r14、r15、r0、…、r12)から読み込む
br r14 !呼び出し元に戻る
Power Architecture(R)に基づくコードの一例が下に示されている。

lwz r15=A(subr) !サブルーチンのアドレスをr15に読み込む
mtctr r15 !ctr=r15
bctrl !復帰アドレスをlrに保存して、
!pcをctrの内容に設定する

subr:
base: stmw r10, r4, 12 (r13) !複数のレジスタを呼び出し元の
!保存領域(r14、r15、r0、…、r12)に格納する
mfctr r12 !ctr内のアドレスをベース・レジスタとしてr12に移動する
…サブルーチンの本体…
lwz r11, (savearea-base) @1, r12 !データを
!グローバル・オフセット・テーブル(GOT)から読み込む
…r0は、存在する場合、復帰コードに使用される…
blr !呼び出し元に戻る
上記の変換は、サブルーチンに入る分岐を実行するためにターゲット・アドレスを使用できるようにすることができるが、分岐予測の後に、ターゲット・アドレスが使用可能になって予測の妥当性を確認するときまでの投機的実行の間、このアドレスを使用できないことがある。例えば、予測の時点では、他の命令または動作によってアクセスできるレジスタまたはその他の選択された位置(プログラム・カウンタとは異なる)にあるアドレスを使用できない。したがって、本発明の態様に従って、分岐予測器がレジスタ間接分岐アドレスを予測することに基づいて、予測値も、例えば設計されたレジスタにおいて、投機的値として使用可能になる。その後、予測が正しい場合、実行がより速く進む。予測が正しくない場合、予測ミスに基づいているため、回復が行われる。
図5を参照して、レジスタ間接分岐の予測手法に関する詳細がさらに説明される。1つの例では、プロセッサがこの処理を実行している。最初に、レジスタ間接分岐のターゲット・アドレスが予測され(ステップ200)、命令フェッチが予測されたターゲット・アドレス(本明細書では予測されたアドレスとも呼ばれる)にリダイレクトされる(ステップ202)。さらに、1つの例では、新しい名前変更レジスタが、ターゲット・アドレスを保持する論理レジスタに割り当てられる(ステップ204)。すなわち、1つの実施形態では、レジスタ名の変更が回復に使用される。レジスタ名の変更を使用する場合、新しい名前変更レジスタが分岐時に割り当てられ、その新しい名前変更レジスタが、予測値と共に読み込まれる。予測がチェックされ、予測が正しくない場合、前の名前のレジスタに戻ることによって回復が実行される。
示されているように、予測されたアドレスが割り当てられた名前変更レジスタにコピーされる(ステップ206)。ターゲット・アドレスを保持する名前変更レジスタが、使用可能としてマーク付けされる(ステップ208)。さらに、予測が正しいかどうかを判定するために、予測チェックが実行される(ステップ210)。予測チェックを発生させる方法は、分岐命令に提供されるターゲット・レジスタ値が使用可能になったときにチェックを実行する状態マシンを開始すること、チェックのための内部動作(iop:internal operation)を挿入すること、またはチェック・パイプラインへの分岐動作を発行することなどを含めて、複数存在する。
予測ミスが存在する場合、回復が実行される。使用できる回復の実装の選択肢は、正しい値を古いレジスタから新しいレジスタにコピーすること、または新しく割り当てられた名前変更レジスタが破棄され、名前変更マップ(rename map)が、正しく読み込まれた値を保持している前の物理レジスタを指す、名前変更の実装を使用することを含めて、複数存在する。例えばプロセッサによって実行される、例示的な回復の実装に関する詳細が、図6~7を参照してさらに説明される。
最初に図6を参照すると、1つの実施形態では、分岐予測の正しさのチェックが実行される(ステップ300)。このチェックは、予測されたアドレスを受け取り、そのアドレスを、それが使用可能になったときに分岐命令への入力として計算された実際のアドレスと比較することを含む。予測が正しい場合(照会301)、予測チェックが完了し(ステップ302)、回復は不要である。
しかし、予測が正しくない場合(照会301)、誤って予測された分岐の後の命令がフラッシュされる(ステップ304)。さらに、命令フェッチが、計算されたアドレスにリダイレクトされる(ステップ306)。さらに、正しい非投機的値が、ターゲット・アドレスを保持するレジスタに書き込まれる(ステップ308)。これを実現するための方法は、名前変更の設計でない設計において、アクティブ・レジスタに書き込むことを含めて、複数存在してよい。さらに、名前変更の設計において、既存の名前変更レジスタに書き込むこと、または新しい名前変更レジスタを割り当てることが存在してよい。ターゲット・アドレスを保持するレジスタが、使用可能としてマーク付けされる(ステップ310)。これによって、予測チェックの1つの例が完了する。
別の実施形態では、図7を参照すると、レジスタ名の変更を明示的に使用するレジスタ間接分岐の予測チェック手法が提供される。この例では、分岐予測の正しさのチェックが行われる(ステップ400)。予測が正しい場合(照会401)、チェックが完了し(ステップ402)、回復は実行されない。しかし、予測が正しくない場合(照会401)、誤って予測された分岐の後の命令がフラッシュされ(ステップ404)、予測時に割り当てられた名前変更レジスタの割り当てが解除され、非投機的ターゲット・アドレスを含む前の名前変更レジスタを見えるようにする(ステップ406)。次に、命令フェッチが、計算されたアドレスにリダイレクトされる(ステップ408)。これによって、予測チェックの1つの例が完了する。
有利なことに、図7の手法は、多くのアウトオブオーダ・プロセッサにおいて現在実装されている分岐処理に対応しており、アウトオブオーダ・プロセッサでは、分岐命令の処理と共に割り当てられたレジスタが、分岐命令の実行後に割り当てられたレジスタとして扱われるという条件で、分岐命令の後に割り当てられたレジスタの割り当てが自動的に解除される。分岐命令と共に割り当てられたターゲット・レジスタが、分岐命令の後に割り当てられたとして扱われず、割り当て解除されない実施形態では、図6に従う実装は、投機的値を保持するために割り当てられた名前変更レジスタを正しい非投機的値で更新するように適応されてよい。
別の実施形態では、名前変更でない注釈が使用されてよく、例えば、ベースの2つのコピーが提供される。その後、予測時に、第2のコピーまたは新しいコピーへの切り替えが行われる。予測は、予測値を新しいコピーにコピーし、その後の命令は、新しく有効化されたコピーを使用する。予測がチェックされ、予測ミスが存在する場合は、古いコピーが使用される。そのような1つの実装では、ターゲット・レジスタのアクティブなコピーを更新することによって、予測ミスの回復が実行され、すなわち、古い(予測でない)コピーが指され、次の予測時に、第2のコピーが次の新しいベース値としてアクティブにされる。その他の実装も可能である。
本明細書に記載されているように、レジスタ間接分岐に使用されるレジスタの内容(例えば、値、ターゲット・アドレス)を予測することに基づいて、予測に使用される予測された内容も、他の命令によって使用できるように、レジスタ間接分岐に使用されるレジスタに(例えば、同時に)格納される。これによって、処理を容易にする。
さらに別の態様では、ターゲット・アドレス・レジスタ(および、例えばプログラム・カウンタ)に書き込まれる予測値も、関係のあるレジスタに書き込まれる。例えば、予測値が、ターゲット・アドレス・レジスタであるカウンタ・レジスタ(CTR:counter register)に書き込まれる場合、予測値は、CTRレジスタと関係があるR12、R15、またはその他のレジスタなどの、別の選択されたレジスタにも書き込まれる。
一般的に使用されるABIなどでの特定の処理の場合、最初に分岐アドレスが汎用レジスタ(GPR)に読み込まれ、次に、専用制御レジスタ(SPR)に転送され、その後、レジスタ間接分岐を引き起こす。分岐アーキテクチャのそのような1つの例に従って、Power ISAはカウンタ(CTR)専用レジスタに分岐する。しかし、この専用レジスタ(例えば、カウンタ・レジスタCTR)は直接読み込まれず、汎用レジスタを介して読み込まれる。
カウンタ・レジスタは読み取りが高価になることがあるため、1つの例示的なABIは、サブルーチンへの分岐(BCTR)が実行されるときに、CTRの値が選択されたレジスタ(例えば、R12、R15、またはその他のレジスタ)に格納されることをさらに示す。これにより、呼び出された関数によって、選択されたレジスタをベース・レジスタとして使用できるようにする。しかし、分岐予測が行われる場合、選択されたレジスタの値が読み込まれる前に分岐アドレスが予測されることがあり、これが、データ・アクセスに応答して呼び出されるサブルーチンを停止させる。
前に、選択されたレジスタ(この例では、R12など)内の値を提供するために、CTRレジスタを読み取って結果をR12に書き込む、CTRからR12への移動(MFCTR)が実行された。しかし、例えばPower ELF v2 ABIなどのABIの1つの定義に従って、CTR内の値が使用可能になった場合に、その値はR12内でも使用可能になる。したがって、CTRレジスタ内のどんな値もR12に書き込まれるということをソフトウェアがすでに示しているため、CTRからR12への移動は不要であり、コピーを排除する。しかし、本発明の態様に従って、レジスタが予測される場合、そのレジスタの予測値が、そのレジスタ内で使用可能になる。したがって、予測されたレジスタがCTRである場合、CTRが同時に更新される。しかし、アプリケーションは、更新されていないR12を読み取る必要があり、コピーが存在しないため、CTR内の予測値をR12に取得するためのソフトウェアの経路は存在しない。R12は関係のあるレジスタであり、関連しているが、必ずしもコード内で見られるコピーではない。したがって、本発明の態様に従って、CTRに対して予測され、CTRに書き込まれた値と同じ値が、R12(または別の選択されたレジスタもしくは位置)にも書き込まれる。
このようにして、本発明の態様に従って、関係のあるレジスタが、1つまたは複数の種類のサブルーチンの分岐の分岐予測と共に、予測される。このことが、以下でさらに詳細に説明される。
図8を参照して、関係のあるレジスタも予測するレジスタ間接分岐の予測手法の一例が説明される。1つの例では、プロセッサがこの処理を実行している。最初に、レジスタ間接分岐のターゲット・アドレスが予測され(ステップ500)、命令フェッチが予測されたターゲット・アドレスにリダイレクトされる(ステップ502)。さらに、1つの例では、新しい名前変更レジスタが、ターゲット・アドレスを保持する論理レジスタに割り当てられ(ステップ504)、予測されたアドレスが割り当てられた名前変更レジスタにコピーされる(ステップ506)。ターゲット・アドレスを保持する名前変更レジスタが、使用可能としてマーク付けされる(ステップ508)。
さらに、本発明の態様に従って、新しい名前変更レジスタが、関係のあるレジスタにも割り当てられる(ステップ510)。予測されたアドレスが、関係のあるレジスタに割り当てられた名前変更レジスタにコピーされ(ステップ512)、関係のあるレジスタの名前変更レジスタが使用可能としてマーク付けされる(ステップ514)。
さらに、分岐予測が正しいかどうかを判定するために予測チェックが実行され(ステップ516)、その一例が本明細書において説明される。さらに、関係のあるレジスタに対して予測チェックが実行される(ステップ518)。このチェックは、例えば、現在の命令が処理される(それに応答して、関係のあるレジスタが予測される)前の設計値の値を、この現在の命令によって予測される値と比較することを含む。このチェックは、状態マシンを開始すること、チェックのためのIOPを挿入すること、またはチェック・パイプラインへの分岐動作を、関係のある値をチェックすることの指示と共に発行することによって、開始されてよい。多くの変形が可能である。
分岐予測チェックに関連付けられた詳細が、図9を参照してさらに説明され、関係のあるレジスタの予測をチェックするための予測チェックの詳細が、図10を参照してさらに説明される。これらの例では、レジスタ名の変更が使用される。しかし、レジスタ名の変更を使用しないその他の実装も可能である。1つの例では、プロセッサがこの処理を実行している。
最初に図9を参照すると、1つの例では、分岐予測の正しさのチェックが行われる(ステップ600)。分岐予測が正しい場合(照会601)、チェックが完了し(ステップ602)、回復は実行されない。しかし、分岐予測が正しくない場合(照会601)、回復が実行される。例えば、誤って予測された分岐の後の命令がフラッシュされる(ステップ604)。ステップ604は、関係のあるレジスタのチェックを含んでよい。さらに、予測時に割り当てられた名前変更レジスタ(例えば、ターゲット・アドレス・レジスタおよび関係のあるレジスタ)の割り当てが解除され、関係のあるレジスタ内の非投機的ターゲット・アドレスおよび元の値を含む前の名前変更レジスタを見えるようにする(ステップ606)。次に、命令フェッチが、計算されたアドレスにリダイレクトされる(ステップ608)。これによって、分岐予測チェックの1つの実装が完了する。
1つの例では、分岐予測のチェックとは別に、関係のあるレジスタの予測がチェックされてよい。したがって、例えばプロセッサによって、関係のあるレジスタの予測をチェックすることに関する詳細が、図10を参照してさらに説明される。1つの例では、関係のあるレジスタの予測の正しさがチェックされる(ステップ700)。関係のあるレジスタの予測が正しい場合(照会701)、チェックが完了し(ステップ702)、回復は実行されない。しかし、関係のあるレジスタの予測が正しくない場合(照会701)、回復が実行される。例えば、誤って予測された関係のあるレジスタの後の命令(または、誤って予測された関係のあるレジスタの第1のユーザ)がフラッシュされ(ステップ704)、予測時に関係のあるレジスタの割り当てられた名前変更レジスタの割り当てが解除され、予測ではない正しい関係のある値を含んでいる前の名前変更レジスタを見えるようにする(ステップ706)。次に、フラッシュの時点で実行が再開される(ステップ708)。これによって、関係のあるレジスタの予測チェックの1つの例が完了する。
予測のチェックの1つの態様では、チェックすることは、関係のあるレジスタの予測値を、関係のあるレジスタの予測をトリガーする命令より前に計算された関係のあるレジスタの最新の値と比較する。少なくとも1つの実施形態では、その値が名前変更レジスタに格納される。
別の実施形態では、関係のあるレジスタの予測をトリガーする命令より前の関係のあるレジスタの値を、関係のあるレジスタの予測値を保持するために割り当てられた名前変更レジスタにコピーすることによって、予測ミスの回復が実行される。少なくとも1つの実施形態では、名前変更レジスタの割り当て解除が、正しい値を割り当て済みの名前変更レジスタにコピーすることより高価である場合に、値を復元することによる回復が使用される。
本明細書に記載されているように、レジスタ間接分岐に使用されるレジスタの内容(例えば、値、ターゲット・アドレス)を予測することに基づいて、予測に使用される予測された内容も、他の命令によって値を使用できるように、(プログラム・カウンタに加えて)レジスタ間接分岐に使用されるレジスタならびに関係のあるレジスタに(例えば、同時に)格納される。これによって、処理を容易にする。
別の態様では、関係のあるレジスタが予測において使用されるかどうかを指定するための制御が提供される。さらに、関係のあるレジスタが使用されることが示された場合、この制御は、使用される関係のあるレジスタの指示(例えば、レジスタ番号)を含んでもよい。この制御は、例えば、コードに固有であり、例として、コードの単位(アプリケーション、プロセス、モジュール、関数、または動的に共有されるオブジェクト(例えば、ライブラリ)など)ごとに有効化/無効化されてよい。
1つの態様では、関係のあるレジスタを予測するための1つまたは複数の制御が提供され、この制御において、コードの単位の第1のセットが、関係のあるレジスタの値の予測から恩恵を受け、コードの単位の第2のセットは恩恵を受けない。多くの変形が可能である。
1つの例として、マシン状態レジスタ(MSR:machine state register)において制御が提供される。オペレーティング・システムは、ある単位のコードに対してMSR制御を設定し、別の単位のコードに対してMSR制御を無効にする。別の実施形態では、ページ・テーブル・エントリ(PTE:page table entry)制御が提供されてよい。例えば、PTE内のビットは、分岐が存在するページ上の分岐に関して、関係のあるレジスタの予測または非予測を制御し、このページは、PTEによって変換されるアドレスを有するページに対応する。別の実施形態では、PTE内のビットは、分岐のターゲット・アドレスのページに関するビットの設定に基づいて、分岐に関して、関係のあるレジスタの予測または非予測を制御し、分岐のターゲットのアドレスはPTEによって変換される。さらに他の実施形態では、ハイブリッドの形態がサポートされ、例えば、MSRビットが、PTE内で設定されたビットの考慮を有効にする。多くのその他の例が可能である。
PTE制御の1つの例では、PTE内のビットが、例えば、コードの特定のセグメントに使用されるABIレベルなどの、モジュールの特性を表すプログラム・モジュールのモジュール・レベルまたはページ・レベルの指示に基づいて、ダイナミック・ローダによって設定される。
少なくとも1つの実施形態では、関数が共通のABIレベルを使用する場合は、それらの関数を共通のページにグループ化し、関数が共通のABIレベルを使用しない場合は、それらの関数を別々のページに分離するように、スタティック・リンカがモジュールをリンクする。
別の実施形態では、モジュールがABIレベルを共有し、すなわち、単一のモジュール内のコードが同じABIレベルに対応し、この制御に関するレベルおよび暗黙の設定が、例えばELF(Executable Linkable Format)マジック・ナンバーなどのモジュールのヘッダーによって提供される。多くの例および変形が可能である。本明細書に記載された例示的な制御は、単なる例である。
関係のあるレジスタの予測がコードの単位に使用されるかどうかを示すための制御の使用は、本明細書では、便宜上、外部から示された関係のあるレジスタの予測(EIARP)と呼ばれる。コードの単位に関する外部から示された関係のあるレジスタの予測を使用する1つの実施形態が、図11を参照して説明される。1つの例では、この処理は、コンピューティング環境のプロセッサ上で実行されるオペレーティング・システムによって実行される。
図11を参照すると、最初にオペレーティング・システムが、アプリケーション、プロセス、モジュール、関数、または動的に共有されるオブジェクトなどのコードの単位を読み込む(ステップ800)。コードの単位(本明細書では、読み込まれたコードまたはコードと呼ばれる)がコードに固有の外部から示された関係のあるレジスタの予測の候補であるかどうかに関する判定が行われる(ステップ802)。この判定は、例えば、例としてコードのヘッダーまたはマジック・ナンバーで提供される、コードのABIのバージョンまたはEIARP指標をチェックすることによって、決定されてよい。
コードが外部から示された関係のあるレジスタの予測の候補でない場合(照会804)、処理が完了する(ステップ810)。候補である場合、関係のあるレジスタの指示(例えば、レジスタ番号)が制御レジスタに読み込まれる(ステップ806)。例示的な制御レジスタの単にいくつかの例として、マシン状態レジスタ(MSR)、プログラム状態ワード(PSW:program status word)、専用レジスタ(SPR)、ページごとのページ・テーブル・エントリ(PTE)、またはセグメント・テーブル・エントリ(STE:segment table entry)が挙げられる。
さらに、読み込まれたコードに対してEIARPを有効にする制御(例えば、フラグまたはその他の指標)が設定されてよい(ステップ808)。1つの例では、フラグまたはその他の指標は、例えばMSR、PSW、SPR、PTE、もしくはSTEなどの、制御レジスタまたはその他の制御フィールドにおいて設定される。これによって、過度の予測ミスおよび回復のペナルティのリスクを減らす。
別の実施形態では、コードの特性(例えば、ABIレベル)に基づいてコードが関係のあるレジスタの予測の候補でないということを照会804が決定した場合に、コードの単位がEIARPの対象にならないということを示すように、制御が設定される。
他の実施形態では、プログラム・ローダ、ダイナミック・プログラム・ローダ(dynamic program loader)、共有ライブラリ・ローダ、ダイナミック・ライブラリ・ローダ(dynamic library loader)、またはコードを読み込むことに適応された別のシステム・コンポーネントのうちの1つによって、コードが読み込まれる。
1つの実施形態では、オペレーティング・システムのコンテキスト切り替えが存在する場合、コードに固有のEIARPを含めて、(例えば、オペレーティング・システムによって)構成が更新される。コンテキスト切り替えに起因するコードに固有のEIARPの更新は、例えば、コードの単位に特に結び付けられていないレジスタ内(MSR、SPR、またはPSW内など)に制御が存在する場合に、実行される。1つの例では、PTEがコードに結び付けられているため、EIARPの構成を更新する必要がない。コードに固有のEIARPに関連付けられたコンテキスト切り替え論理の一実施形態が、図12を参照して説明される。
図12を参照すると、コンテキスト切り替えに基づいて、切り替えられるコンテキストの制御レジスタから値が取得され(ステップ900)、コンテキスト切り替え構造に格納される(ステップ902)。その他の処理が実行されてよい(ステップ904)。さらに、切り替えられるコンテキストの新しい値が取得され(ステップ906)、切り替えられるコンテキストの制御レジスタに格納される(ステップ908)。
他の実施形態では、制御レジスタの値が、例えば図11の手法の処理と連動して値が最初に確立されたときに、出願者のコンテキスト構造に格納され、コンテキスト切り替えプロセス中に、コードの設定を維持するためのステップ900および902が省略される。その他の変形も可能である。
処理中に、プログラムがハードウェア例外(例えば、ページ・フォールト、浮動小数点例外など)を受け取り、割り込み処理を介してオペレーティング・システムに切り替わることがある。1つの実施形態では、オペレーティング・システムへの切り替えが存在する場合、図13を参照して説明されるように、(例えば、オペレーティング・システムによって)構成設定が無効化されてよい。
1つの例では、切り替えられるコンテキストの制御レジスタの値が取得され(ステップ1000)、例外コンテキストに格納される(ステップ1002)。例示的な例外コンテキストの例としては、System zのロー・メモリ内またはPowerシステムの選択されたレジスタ(SRR0/SRR1…またはHSRR0/HSRR1…)が挙げられる。例外コンテキストは、コードに固有のEIARPまたはその他の構成情報あるいはその両方を含んでよい。その他の処理が実行されてよい(ステップ1004)。さらに、任意選択的に、スーパバイザの初期値が制御レジスタ(MSR、SPRなど)に格納されてよい(ステップ1006)。追加の処理またはその他の処理あるいはその両方が実行されてもよい。
例外の処理の後に、ハードウェア例外/割り込み処理が終了する。例えばプロセッサによって実行されるこの処理の一例が、図14を参照して説明される。1つの例では、復元されるコードに固有のEIARPまたはその他の構成情報あるいはその両方が例外コンテキストから取得され(ステップ1100)、選択された制御レジスタ(例えば、MSR、SPR、PSWなど)に格納される(ステップ1102)。
コードに固有のEIARPを分岐予測で使用することの詳細が、図15を参照してさらに説明される。1つの例では、プロセッサがこの処理を実行している。1つの実施形態では、レジスタ間接分岐のターゲット・アドレスが予測され(ステップ1200)、命令フェッチが予測されたターゲット・アドレスにリダイレクトされる(ステップ1202)。さらに、1つの例では、新しい名前変更レジスタが、ターゲット・アドレスを保持する論理レジスタに割り当てられる(ステップ1204)。予測されたアドレスが、割り当てられた名前変更レジスタにコピーされ(ステップ1206)、ターゲット・アドレスを保持する名前変更レジスタが使用可能としてマーク付けされる(ステップ1208)。
さらに、本発明の態様に従って、コードに対してEIARPが有効化されるかどうかに関する判定が行われる(照会1210)。この判定は、例えば、このコードに関して関係のあるレジスタが予測されるかどうかを示す制御をチェックすることによって、決定される。コードに対してEIARPが有効化されない場合、処理が続行して、分岐予測のチェックを発生させる(ステップ1220)。有効化される場合、新しい名前変更レジスタが、関係のあるレジスタにも割り当てられる(ステップ1212)。関係のあるレジスタのレジスタ番号が、例えばEIARP構成情報によって決定される。さらに、予測されたアドレスが、関係のあるレジスタに割り当てられた名前変更レジスタにコピーされ(ステップ1214)、関係のあるレジスタの名前変更レジスタが使用可能としてマーク付けされる(ステップ1216)。
関係のあるレジスタの予測が正しいかどうかを判定するために、関係のあるレジスタの予測のチェックが実行される(ステップ1218)。このチェックは、例えば、現在の命令が処理される(それに応答して、関係のあるレジスタが予測される)前の設計値の値を、この現在の命令によって予測値と比較することを含む。
さらに、分岐予測のチェックが実行される(ステップ1220)。本明細書では、予測の正しさをチェックする論理の例が説明される。また、各例は、図17~18を参照して以下で説明される。その他の例も可能である。
さらに別の態様では、関係のあるレジスタが予測されるかどうかに関する予測が行われる。この予測は、例えば、関係のあるレジスタ候補(例えば、分岐命令)に関する、関係の状態の動的予測決定に基づく。1つの例では、プロセッサは、関係のあるレジスタを含んでいることのある候補分岐サブルーチン命令ごとに、関係のあるレジスタの範囲を動的に決定する。分岐命令、特定の関係のあるレジスタ候補、および動的な関係の決定の有効化が、MSRビット、PTEビット、その他の制御レジスタ、またはこれらの組み合わせを含む、さまざまな制御レジスタによって制御されてよい。この制御は、関係の複数の候補を決定しながら、制御レジスタが関係の候補またはビットマスクを指定することをさらに含んでよい。
1つまたは複数の態様に従って、候補が、関係があるとして予測され、予測器に基づいて予測が行われる。プロセッサにおいて、予測のチェックが実行される。予測が正しくなかった場合、関係のあるレジスタに関係がないため、その後の関係のある予測を抑制するように、動的予測器が更新される。
新しい動的関係を検出するために採用されてよい複数の手法が存在する。そのような手法の1つの例としては、実際の変更された動作または別の分岐が優勢になった場合のエイリアシングに起因して変更された動作のいずれかを識別するための、予測器が(十分低い比率で)非関係を示す場合の関係のランダムな推測が挙げられる。別手法の例としては、オペレーティング・システムが、一定の間隔で、または提供された変更に応答して(例えば、さまざまな動的な実行時の監視およびフィンガープリント取得の手法を使用して決定されたときに)、新しい関係を予測するよう強制することを決定する、トレーニング期間が挙げられる。その他の手法も可能である。
1つの態様では、定義された(例として、静的に定義されたか、またはEIARP構成において定義された)レジスタが特定のインスタンス(例えば、特定の分岐)に関係があるかどうかに関して、予測が行われる。この態様では、コードの単位(例えば、分岐命令)が読み込まれ、定義されたレジスタ番号(例えば、R12)が、ハードウェア内でハード配線されるか、あるいは構成レジスタまたは制御レジスタ(例えば、MSR、PSW、SPR、PTE、STEなど)に読み込まれる。任意選択的に、コードの単位に対する予測を有効にするためのフラグも設定される。
レジスタ番号が構成レジスタまたは制御レジスタに読み込まれ、ハード配線されない場合、各コードの単位が異なる構成情報を含むことがあるため、コンテキスト切り替えに基づいて処理が実行される。この処理の例が、図12を参照して説明されている。
同様に、ハードウェア例外が受け取られ、レジスタ番号がハード配線されない場合、1つの実施形態において図13および14を参照して説明されているように、例外処理が実行されてよい。
図16を参照して、定義されたレジスタが関係があるかどうかも予測するレジスタ間接分岐の予測手法の一例が説明される。1つの例では、プロセッサがこの処理を実行している。1つの例では、最初にレジスタ間接分岐のターゲット・アドレスが予測され(ステップ1300)、命令フェッチが予測されたターゲット・アドレスにリダイレクトされる(ステップ1302)。さらに、1つの例では、新しい名前変更レジスタが、ターゲット・アドレスを保持する論理レジスタに割り当てられる(ステップ1304)。予測されたアドレスが、割り当てられた名前変更レジスタにコピーされ(ステップ1306)、ターゲット・アドレスを保持する名前変更レジスタが使用可能としてマーク付けされる(ステップ1308)。
さらに、関係のある値を予測できるかどうかに関する判定が行われる(照会1310)。例えば、関係のあるレジスタを予測できるか?予測できない場合、処理が続行して、分岐予測チェックを発生させる(ステップ1320)。予測できる場合、1つの実施形態では、新しい名前変更レジスタが、予測された関係のあるレジスタに割り当てられる(ステップ1312)。関係のあるレジスタのレジスタ番号が、例えば、ハード配線されるか、またはEIARP構成情報によって決定されてよい。
予測されたアドレスが、関係のあるレジスタに割り当てられた名前変更レジスタにコピーされ(ステップ1314)、関係のあるレジスタの名前変更レジスタが使用可能としてマーク付けされる(ステップ1316)。
本明細書に記載されているように、予測が正しいかどうかを判定するための、関係のあるレジスタの予測のチェック(ステップ1318)に加えて、分岐予測のチェック(ステップ1320)が実行される。予測ミスが存在する場合、図17~18を参照して説明されているように、回復が実行される。1つの例では、プロセッサがこの処理を実行している。
1つまたは複数の実施形態では、照会1310は、新しい関係のあるレジスタを発見するための制御の無効化の対象になってよい。1つの実施形態では、照会1310は、トレーニング段階の間に、関係のあるレジスタを示すことを強制される。トレーニング段階は、例えば、アプリケーションが読み込まれた後の一定のサイクル数または構成可能なサイクル数に対応してよい。別の例では、トレーニング段階は、例えば、トレーニング段階を開始することの指示の後の一定のサイクル数または構成可能なサイクル数に対応してよい。1つの例では、トレーニング開始の指示は、一定の確率または構成可能な確率でランダムに生成された信号のうちの1つに対応してよい。別の例では、トレーニング開始の指示は、最後のトレーニング段階からの指定された間隔の経過(例えば、一定のまたは構成可能なサイクル数、あるいは一定のまたは構成可能なナノ秒数、マイクロ秒数、または別の時間単位の数)に対応してよい。別の実施形態では、照会1310は、第1の回数の分岐実行に関して、関係のあるレジスタの存在を示し、第1の回数は一定または構成可能である。さらに他の実施形態は、関係のあるレジスタの予測器をトレーニングするために、その他の既知の手法または将来の手法を採用してよい。
ここで図17を参照すると、この例では、定義によって、分岐予測ミスが存在する場合、関係のある値の予測または関係のある値に関連する予測も、誤って予測される。チェックが、例えば、分岐予測の正しさを決定することを含む(ステップ1400)。分岐予測が正しい場合(照会1401)、チェックが完了し(ステップ1402)、回復は実行されない。しかし、分岐予測が正しくない場合(照会1401)、回復が実行される。例えば、誤って予測された分岐の後の命令がフラッシュされる(ステップ1404)。ステップ1404は、関係のあるレジスタのチェックをフラッシュすることを含んでよい。さらに、予測時に割り当てられた名前変更レジスタの割り当てが解除され、前の名前変更レジスタを見えるようにする(ステップ1406)。ステップ1406は、ターゲット・アドレス・レジスタおよび(EIARPが有効化されている場合は)関係のあるレジスタの割り当てを解除し、関係のあるレジスタ内の非投機的ターゲット・アドレスおよび元の値を含む前の名前変更レジスタを見えるようにすることを含んでよい。次に、命令フェッチが、計算されたアドレスにリダイレクトされる(ステップ1408)。これによって、予測チェックの1つの実装が完了する。
さらに、1つの実施形態では、EIARPが有効化されている場合、図18を参照して説明されているように、関係のあるレジスタの予測の正しさに関するチェックが呼び出されてよい。1つの実施形態では、関係のあるレジスタの予測の正しさのチェックが行われる(ステップ1500)。関係のあるレジスタの予測が正しい場合(照会1501)、チェックが完了し(ステップ1502)、回復は実行されない。しかし、関係のあるレジスタの予測が正しくない場合(照会1501)、回復が実行される。例えば、誤って予測された関係のあるレジスタの後の命令がフラッシュされる(ステップ1504)。別の例では、誤って予測された関係のあるレジスタの第1のユーザがステップ1504でフラッシュされる。さらに、予測時に関係のあるレジスタに割り当てられた名前変更レジスタの割り当てが解除され、予測ではない正しい関係のある値を含んでいる前の名前変更レジスタを見えるようにする(ステップ1506)。次に、フラッシュの時点で実行が再開される(ステップ1508)。これによって、関係のあるレジスタの予測チェックの1つの例が完了する。
さらに別の実施形態では、関係のある値(例えば、関係のあるレジスタ)を予測できるかどうかを予測するために予測器が使用される場合、図19を参照して説明されているように、この予測に関連付けられた予測器の更新が実行されてもよい。1つの例では、プロセッサがこの処理を実行している。
図19を参照すると、1つの実施形態では、関係のあるレジスタの予測の正しさのチェックが行われる(ステップ1600)。関係のあるレジスタを予測できるかどうかの予測が正しい場合(照会1601)、関係予測器が、正しい予測を示すように更新されてよく(ステップ1602)、回復は実行されない。別の例では、更新を実行する必要がない。
しかし、関係のあるレジスタを予測できるかどうかの予測が正しくない場合(照会1601)、回復が実行される。例えば、誤って予測された関係のあるレジスタの後の命令がフラッシュされる(ステップ1604)。別の実施形態では、誤って予測された関係のあるレジスタの第1のユーザがステップ1604でフラッシュされる。さらに、予測時に関係のあるレジスタに割り当てられた名前変更レジスタの割り当てが解除され、予測ではない正しい関係のある値を含んでいる前の名前変更レジスタを見えるようにする(ステップ1606)。さらに、1つの例では、関係予測器が、正しくない予測を示すように更新される(ステップ1608)。次に、フラッシュの時点で実行が再開される(ステップ1610)。これによって、予測チェックの1つの実装が完了する。
代替の実施形態では、名前変更レジスタの割り当てを解除する代わりに、正しくなく予測された関係のあるレジスタに格納された値が名前変更レジスタにコピーされる。その他の変形が可能である。
別の態様では、レジスタが特定のインスタンスに関係があるかどうかに関する予測が行われ、レジスタ番号またはその他の識別に関する予測がさらに行われる。この処理の一例が、図20を参照して説明されている。1つの例では、プロセッサがこの処理を実行している。
図20を参照すると、最初に、レジスタ間接分岐のターゲット・アドレスが予測され(ステップ1700)、命令フェッチが予測されたターゲット・アドレスにリダイレクトされる(ステップ1702)。さらに、1つの例では、新しい名前変更レジスタが、ターゲット・アドレスを保持する論理レジスタに割り当てられる(ステップ1704)。予測されたアドレスが、割り当てられた名前変更レジスタにコピーされ(ステップ1706)、ターゲット・アドレスを保持する名前変更レジスタが使用可能としてマーク付けされる(ステップ1708)。
さらに、1つの態様に従って、関係のある値を予測できるかどうかに関する判定が行われる(照会1710)。予測できない場合、処理が続行して、分岐予測チェックを発生させる(ステップ1726)。予測できる場合、新しいレジスタの識別(例えば、番号)が予測された関係のあるレジスタとして選択されるべきであるかどうかに関する判定が行われる(照会1712)。選択されるべきでない場合、例えば予測器によって示された、予測された関係のあるレジスタの指示が関係のあるレジスタとして選択され(ステップ1714)、選択されるべきである場合、別のレジスタ(例えば、他のレジスタ番号)が選択される(ステップ1716)。その後、新しい名前変更レジスタが、選択された(例えば、選択されたレジスタ番号を有する)関係のあるレジスタに割り当てられる(ステップ1718)。
予測されたアドレスが、関係のあるレジスタに割り当てられた名前変更レジスタにコピーされ(ステップ1720)、関係のあるレジスタの名前変更レジスタが使用可能としてマーク付けされる(ステップ1722)。
本明細書に記載されているように、関係のあるレジスタに関連付けられた予測が正しいかどうかを判定するための、関係のあるレジスタの予測のチェック(ステップ1724)に加えて、分岐予測のチェック(ステップ1726)が実行される。
少なくとも1つの実施形態では、照会1712は、予測信頼性がしきい値を超えるかどうかのテストに対応する。予測信頼性は、例えば、1以上のビットの既知の信頼値に対応することができる。このしきい値は、一定であるか、またはソフトウェアによって構成されてよい。
図21を参照して説明されているように、選択された関係のあるレジスタが正しいかどうかを判定するために、予測チェックが実行されてもよい。1つの例では、プロセッサがこの処理を実行している。1つの実施形態では、関係のあるレジスタの予測の正しさのチェックが行われる(ステップ1800)。選択された関係のあるレジスタの予測が正しい場合(照会1801)、関係予測器が、関係のあるレジスタとして使用されているレジスタの正しい予測を示すように更新されてよく(ステップ1802)、回復は実行されない。別の実施形態では、予測器が更新されない。
しかし、選択された関係のあるレジスタの予測が正しくない場合(照会1801)、回復が実行される。例えば、誤って予測された関係のあるレジスタの後の命令がフラッシュされる(ステップ1804)。別の実施形態では、誤って予測された関係のあるレジスタの第1のユーザがステップ1804でフラッシュされる。さらに、予測時に関係のあるレジスタに割り当てられた名前変更レジスタの割り当てが解除され、予測ではない正しい関係のある値を含んでいる前の名前変更レジスタを見えるようにする(ステップ1806)。さらに、1つの例では、関係予測器が、関係のあるレジスタとして使用される特定のレジスタの正しくない予測を示すように更新される(ステップ1808)。次に、フラッシュの時点で実行が再開される(ステップ1810)。これによって、関係のあるレジスタの予測チェックの1つの実装が完了する。
別の態様に従って、命令のシーケンスを認識することによって、関係のあるレジスタが認識される。1つの例では、このシーケンスは、関係を作成するように適応された第1の命令およびサブルーチンの分岐を実行するように適応された第2の命令を含む。1つの例では、このシーケンスは以下を含む。
mtctr R12
bctrl
このシーケンスは、関係作成の移動およびサブルーチン呼び出しの両方を実行するとして認識される。1つの実施形態では、関係作成シーケンスは、移動を実行し、関係予測を使用して分岐を作成する動作の融合シーケンスに、変換される。
上記のシーケンス(または同様のシーケンス)を認識することに基づいて、移動および分岐を実行する動作の融合シーケンスが生成される。例として、例えばハード配線されたR12またはEIARPを使用して、簡略化されたシーケンスが生成されてよく、あるいは予測された分岐アドレスのチェックを含む拡張融合シーケンスが生成されてよく、MTCTR命令のコストを完全に取り除く。拡張シーケンスの一例が、図22を参照して説明されている。1つの実施形態では、この処理はデコーダによって実行される。
最初に、融合シーケンスの機会が認識されたかどうかに関する判定が行われる(照会1900)。例えば、例としてデコーダがMTCTRおよびそれに続くBCTRLを認識したか?融合シーケンスの機会が認識されなかった場合、融合生成処理が完了する。認識された場合、融合生成処理が続行する。分岐ターゲット・アドレスが予測される(ステップ1902)。処理がターゲット・アドレスで実行を開始できるように、ターゲット・アドレスがプログラム・カウンタ(PC)に読み込まれる(ステップ1904)。さらに、予測されたターゲット・アドレスがCTRレジスタに読み込まれる(ステップ1906)ことに加えて、関係のあるレジスタ(例えば、R12)に読み込まれる(ステップ1908)。これはサブルーチン呼び出しであるため、復帰アドレスがリンク・レジスタ(LR:link register)に読み込まれる(ステップ1910)。さらに、予測されたターゲット・アドレスのチェックが実行される(ステップ1912)。1つの例では、チェックは、R12の値である、MTCTRのソースに対するものである。
1つの例では、関係のあるレジスタ番号(例えば、R12)が、関係のあるレジスタとしてハード配線される。別の例では、関係のあるレジスタが、選択された制御レジスタ内などの、制御において示される。さらに別の例では、関係のあるレジスタが、命令のシーケンス(例えば、MTCTRの後に指定されたレジスタ番号)に基づいて動的に決定される。その他の例も可能である。上記のシーケンスでは、予測が値を上書きするため、MTCTRを実行する必要がなく、1つの例では、関係のあるレジスタおよび予測されたターゲット・アドレスが同時にチェックされる。その他の変形が可能である。
1つの実施形態例では、図22の手法の動作が、次のような例示的なiopシーケンスを生成することによって表されてよい。
mtctr R12
old ctr=ctr
update_lr_from_instruction_address+
predict_indirect_ctr+
update_pc_from_prediction+
update_ctr_from_prediction+
update_affiliated_reg_from_prediction (R12)
check_target_address (old_ctr)
別の実施形態では、R12のコピーが抑制され、簡略化されたiopシーケンスが生成される。
old_affiliated=R12+
update_lr_from_instruction_address+
predict_indirect_ctr+
update_pc_from_prediction+
update_ctr_from_prediction+
update_affiliated_reg_from_prediciton (R12)
check_target_address (old_affiliated)
さまざまな実施形態では、予測iopが、プログラム・カウンタ(すなわち、PC-命令がフェッチされるアドレス)、分岐ターゲット・レジスタ(この例では、ctr)、および関係のあるレジスタ(この例では、R12)を更新するために使用できる単一の予測を生成する。また、この特定の実施形態では、予測iopは、例えばリンク・レジスタ(LR)内のサブルーチンの復帰アドレスを捕捉するために、予測を使用して更新する前に、PCを捕捉するように適応される。別の実施形態では、リンク・レジスタ(LR)内のPCの捕捉は別のiopによって実行されてよい。
これらの例では、単一のiop内の複数の動作の実行を示すために、+が使用されており、記述の構成要素が+記号によって接続されている。例えば、update_pc_from_predictionは、予測器によって予測されたアドレスを使用してプログラム・カウンタ(PC)を更新する。
外部から示された関係のあるレジスタを含む1つの実施形態では、融合シーケンスの認識は、構成レジスタ内で示されたレジスタを含むシーケンスを認識することに基づく。融合に基づく関係のあるシーケンスの検出の前に、制御レジスタを、認識される関係のあるレジスタのシーケンスの外部の指示に使用して、関係のあるレジスタが示される。例えばプロセッサによって実行されるこの処理の一例が、図23を参照して説明される。別の実施形態では、関係のあるレジスタの関係を確立し、関係のあるレジスタ番号を含んでいるシーケンスは、プロセッサの論理内で固定され(または「ハード配線され」)ており、そのような実施形態では、図23の手法が実行されない。
図23を参照すると、最初にコード(関係のあるレジスタの関係を確立する1つまたは複数の融合可能なシーケンスを含んでいるコードなど)が読み込まれる(ステップ2000)。さらに、認識される関係生成シーケンスにおいて発生することがあるレジスタに対応するレジスタ番号が読み込まれる(ステップ2010)。さらに、任意選択的に、EIARPを有効にするようにフラグが設定される(ステップ2020)。関係のあるレジスタの関係を確立するとして認識されたシーケンスのみが変換されるため、過度の予測ミスのリスクがなく、したがって、1つまたは複数の実施形態では、関係のあるレジスタの予測を有効または無効にする機能が存在しなくてよい。他の実施形態では、関係のあるレジスタの値の予測を有効または無効にするためのフラグが、例えば、関係のあるレジスタの予測論理の正しくない実装の場合に備えて、安全機能として提供されてよい。その他の変形も可能である。
関係のあるレジスタとして使用されるレジスタがハード配線されず、代わりに制御において示される場合、関係のあるレジスタの指示を含む構成情報が、コンテキスト切り替えに基づく後の復元のために格納される。この処理の1つの実施形態が、図12を参照して上で説明されている。同様に、ハードウェア例外が受け取られた場合、図13~14を参照して説明されたように処理が実行される。しかし、レジスタ番号がハード配線された場合、この処理は任意選択的である。
融合に基づく関係のあるシーケンスを含む分岐予測の1つの実施形態が、図24を参照して説明される。1つの例では、プロセッサがこの処理を実行している。
図24を参照すると、融合の機会の検出ステップが実行される(ステップ2100)。例えば、デコーダによって、MTCTR Rx/BCTRLのシーケンスに関してチェックが行われ、Rxは、分岐ターゲット・アドレスとの関係が検出されることがあるレジスタに対応する。1つの例示的なシーケンスでは、レジスタRxはレジスタR12に対応してよい。融合されてよい関係作成シーケンスの検出ステップを実行することに基づいて、そのような融合シーケンスの機会が検出されるかどうかに関する判定が行われる(照会2102)。すなわち、例として、MTCTR Rx/BCTRLのシーケンスがコード・ストリーム内に存在するか、およびMTCTRのRxが、ハード配線された関係のあるレジスタ番号などの期待されるレジスタ番号または制御(例えば、EIARP制御)において提供された番号に一致するか?融合シーケンスの機会が検出されない場合、従来の処理が実行される(ステップ2104)。検出された場合、処理が続行して、レジスタ間接分岐のターゲット・アドレスを予測し(ステップ2106)、命令フェッチを、予測されたターゲット・アドレスにリダイレクトする(ステップ2108)。さらに、1つの例では、新しい名前変更レジスタが、ターゲット・アドレスを保持する論理レジスタに割り当てられる(ステップ2110)。予測されたアドレスが、割り当てられた名前変更レジスタにコピーされ(ステップ2112)、ターゲット・アドレスを保持する名前変更レジスタが使用可能としてマーク付けされる(ステップ2114)。
さらに、新しい名前変更レジスタが関係のあるレジスタ(例えば、関係作成融合シーケンスにおいて指定されたレジスタRx)に割り当てられる(ステップ2116)。予測されたアドレスが、関係のあるレジスタに割り当てられた名前変更レジスタにコピーされ(ステップ2118)、関係のあるレジスタの名前変更レジスタが使用可能としてマーク付けされる(ステップ2120)。
予測されたアドレスの予測が正しいかどうかを判定するために、この予測のチェックが実行される(ステップ2122)。このチェックは、例えば、ターゲット・アドレスを、融合シーケンスより前の関係のあるレジスタ(Rx)の値と(例えば、前の名前変更レジスタを使用して)比較することを含む。この予測が正しくない場合、本明細書に記載されているように、回復が実行される。そのような回復の一例が、図17を参照して説明されている。
別の実施形態では、関係のあるレジスタ番号が、ハード配線されるのでも、制御(すなわち、EIARP)によって提供されるのでもなく、シーケンス自体(例えば、MTCTRの後に指定されたレジスタ番号)によって決定される。そのような1つの実施形態例では、照会2102が、MTCTR RxおよびBCTRLのシーケンスがコード・ストリーム内に存在するかどうかをチェックする。このシーケンスが存在する場合、シーケンス内で指定された特定のレジスタRxが、関係のあるレジスタとして使用される。そのような1つの実施形態では、図11または図23などにおけるような、コード読み込みおよびEIARP構成の手法は不要であり、関係のあるレジスタの予測が、従来のコード読み込み手法と共に動作してよい。さらに、少なくとも1つの実施形態では、コンテキスト切り替え時に関係のあるレジスタの情報を保存すること、またはハードウェア例外処理を実行すること、あるいはその両方が不要であり、関係のあるレジスタの予測が、従来のコンテキスト切り替えシーケンスおよびハードウェア例外処理と共に動作してよい。
命令のシーケンスの上記の例では、MTCTR命令およびBCTRL命令は、連続的な順序になっている。しかし、別の態様に従って、命令が連続的な順序になっていない場合でも、関係が予測される。例えば、以下のコードを仮定する。
mtctr R12
<命令…>
Bctrl
上記のコードは、関係作成の移動およびサブルーチン呼び出しの両方を実行するとして認識される。このようにして、関係(例えば、MTCTR)を作成する命令を認識することに基づいて、指標が設定される。この指標は、関係のあるレジスタの番号(またはその他の指示)をさらに指定してよい。次に、関係を破壊する動作(例えば、CTRの内容またはMTCTRのソースだったレジスタのいずれかの変更)が認識されたときに、この指標がリセットされる。BCTRLが発生したときに、関係の指示がアクティブである場合、そのBCTRLは、関係のあるレジスタを伴う分岐として示され、さらに任意選択的に、関係のあるレジスタ番号を示す。
動的な実行時の制御解析に基づいて関係を決定することに関連付けられた処理の1つの実施形態が、図25を参照して説明される。1つの例では、プロセッサがこの処理を実行している。図25の手法は、分岐の分岐ターゲット・レジスタとのレジスタの関係を識別し、関係のあるレジスタおよび関係のあるレジスタのレジスタ番号が予測されるべきである分岐を識別するために、命令ストリームのシーケンスの各命令に対して実行される。関係が取り消されるか、またはレジスタ間接分岐が検出され、それと共に、関係のあるレジスタの値の予測が実行されるまで、検出された関係が、1つの命令に対する図25の手法の実行から、次の命令に対するこの手法の実行に渡される。この処理は、1つの例では、命令デコーダによって実行される。
図25を参照すると、1つの実施形態では、命令が受信され(ステップ2200)、デコードされる(ステップ2202)。命令がMTCTRなどの関係作成命令であるかどうかに関する判定が行われる(照会2204)。命令が関係作成命令である場合、前の関係が取り消され、新しい関係が記録される(例えば、指標が設定される)(ステップ2206)。しかし、命令が関係作成命令でない場合、命令が関係破壊命令(例えば、関係のソースまたはターゲット(例えば、それぞれ、関係を確立したMTCTRのソース・レジスタ、またはカウント・レジスタ(CTR))のいずれかを上書きする命令)であるかどうかに関する判定がさらに行われる(照会2208)。命令が関係破壊命令である場合、関係が取り消される(例えば、指標がリセットされる)(ステップ2210)。
命令が関係作成命令でも関係破壊命令でもない場合、この処理が照会2212を続行し、照会2212は、現在の命令がレジスタ間接分岐命令であり、関係が現在アクティブであるかどうかをテストする。照会2212が肯定的である場合、関係のあるレジスタを含むレジスタ間接分岐命令が検出されており、制御がステップ2214に渡される。肯定的でない場合、現在の命令に関して、この手法が終了する。
ステップ2214で、レジスタ間接分岐のターゲット・レジスタ(カウンタ・レジスタ(ctr)など)と別のレジスタの間の関係がアクティブである場合、レジスタ間接分岐命令が検出されている。検出された関係のあるレジスタの値の予測を容易にするために、分岐命令と共に、関係のあるレジスタの存在が示され、現在の分岐のための分岐処理と共に、関係のあるレジスタの値の予測を容易にするために、関係のあるレジスタのレジスタ番号が記録される。現在の命令に対する図25の手法が終了する。
プロセッサのために処理されている1つの命令に対して図25の手法が完了した場合(例えば、ステップ2206、2210、2212、または2214の後に)、次のフェッチされた命令に対して、処理が実行される。記録された関係情報が、図25の手法の1つの実行から、命令ストリーム内の次の命令に対する次の実行に渡される。
ステップ2214に従って関係作成の移動およびその後の分岐のシーケンスを決定することに基づいて、それらが1つまたは複数の他の命令によって分離されていても、前述したように、関係作成の移動および分岐に基づいて、融合シーケンスが生成される。一例として、図17を参照して説明されたように、回復に加えて、図22および図23~24の処理が実行されてよい。1つまたは複数の実施形態では、融合または予測分岐と共に説明された他の処理が実行されてもよい。
本明細書に記載されているように、1つの実施形態では、カウンタ命令からの移動((値をCTRから選択されたレジスタ(例えば、R12)に移動する)MFCTR)を実行するコストを回避するために、CTR値が予測された場合、本発明の態様に従って、関係のあるレジスタ(R12など)を使用して呼び出される関数のアドレスを呼び出される関数に変換するABI関数呼び出しシーケンスに対応するシーケンスが検出されたときに、ABIが汎用レジスタ(例えば、Power Architectureの既知のELFv2 ABIに従って、レジスタR12)内のCTRの値の存在を指定してよく、予測値が、プロセッサによってCTRおよび選択されたレジスタ(例えば、R12)に書き込まれる。
この選択されたレジスタは、本明細書では関係のあるレジスタと呼ばれる。1つの例では、Power Architecture(R)のELF v2 ABIなどの一般に知られているABI仕様に従って、テーブル・オブ・コンテンツ(TOC:table of contents)またはグローバル・オフセット・テーブル(GOT)へのポインタなどの別の値を決定するために、選択されたレジスタの値が使用される。この他の値は、R2などの選択された別のレジスタに格納される。例えば、他の選択されたレジスタ(R2)の値は、選択されたレジスタ(例えば、R12)内の値にオフセットを加算することによって取得される。その後、他の選択されたレジスタ(例えば、R2)の値が、例えば、変数へのアクセスを提供するTOCまたはGOTへのポインタとして使用される。具体的には、コンパイラは、最終的なアドレスも、コード/データの置き換えも知らずに、ソース・コードからオブジェクト・コードを生成する。具体的には、コンパイラは、データ構造の最終的なサイズも、さまざまなデータ・セクションのオフセット/アドレスも知らずに、変数値の可変アドレス参照データ構造(例えば、グローバル・オフセット・テーブルまたはテーブル・オブ・コンテンツ(TOC))にアクセスするオブジェクト・コードを生成する。この情報のプレースホルダがオブジェクト・コード内に残され、リンカによって更新される。
関係のあるレジスタ(例えば、R12)の値が予測されており、オフセットが既知または決定可能であるため、態様に従って、他の選択されたレジスタの値が、関係のある導出された値として予測される。
1つの実装では、関係のある導出された値の構成および処理は、関係のある値の構成および処理に類似している。例えば、関係のある導出された値(例えば、R2などのレジスタ番号)の指示は、ハード配線されるか、あるいは制御レジスタまたはその他の制御フィールド(MSR、SPR、PSW、PTE、STEなど)に格納されてよい。さらに、コードがEIARPの候補である場合、関係のある導出されたレジスタのレジスタ番号が読み込まれてよい(例えば、図11のステップ806)。さらに例として、図12を参照して1つの例において説明されたように、この値は、格納され、コンテキスト切り替えにおいて復元されてよく、図13~14を参照して1つの例において説明されたように、例外処理に含められてよい。この値は、本明細書に記載された他の関係のあるレジスタまたはレジスタ間接分岐あるいはその両方の予測処理に含められてもよい。
図26を参照して、関係のある導出されたレジスタも予測するレジスタ間接分岐の予測手法の一例が説明される。1つの例では、プロセッサがこの処理を実行している。最初に、レジスタ間接分岐および関係のある値の予測に関連付けられた処理が実行される(ステップ2300)。この処理は、例えば、図8を参照して1つの例において説明されたように、レジスタ間接分岐のターゲット・アドレスを予測することと、命令フェッチを予測されたターゲット・アドレスにリダイレクトすること、新しい名前変更レジスタを、ターゲット・アドレスを保持する論理レジスタに割り当てることと、予測されたアドレスを、割り当てられた名前変更レジスタにコピーすることと、ターゲット・アドレスを保持する名前変更レジスタに、使用可能としてマーク付けすることと、新しい名前変更レジスタを、関係のあるレジスタに割り当てることと、予測されたアドレスを、関係のあるレジスタに割り当てられた名前変更レジスタにコピーすることと、関係のあるレジスタの名前変更レジスタに、使用可能としてマーク付けすることと、1つまたは複数の予測チェックを実行することとを含む、複数の動作を含んでよい。
上記の動作のうちの1つまたは複数が実行される上記の処理に加えて、予測器が関係のある導出されたレジスタを予測するかどうかに関する判定が行われる(照会2302)。1つの例では、この判定は、GOTの使用を表す命令のシーケンスを認識することに基づく。別の例では、制御レジスタ内の1つまたは複数の制御が、関係のある導出されたレジスタの値が予測されるかどうかを予測するために使用されてよい。その他の例も可能である。
予測器が、関係のある導出されたレジスタを予測しない場合、この処理が完了する。1つの例では、コードが導出された値を計算するシーケンスに分岐する場合、実行中に、動的イディオム認識が実行される。導出された値を計算するシーケンスが、例えば、コードの実行中に動的に認識され、そのことを示すように予測器が更新される。
その他の方法で、予測器が、関係のある導出された値を予測する場合、1つの例では、導出された値のオフセットが取得される(ステップ2304)。このオフセットは、例として、ルックアップ・テーブルを使用すること、命令ストリームにアクセスすること、または予測器を使用することを含む、さまざまな手法を使用して取得されてよい。多くの手法が可能である。さらに、関係のある導出されたレジスタの値が、例えば、ステップ2300、ステップ2306で取得された関係のあるレジスタの予測値にオフセットを追加することによって計算される。
新しい名前変更レジスタが、関係のある導出されたレジスタに割り当てられる(ステップ2308)。計算された値が、関係のある導出されたレジスタに割り当てられた名前変更レジスタにコピーされ(ステップ2310)、関係のある導出されたレジスタの名前変更レジスタが使用可能としてマーク付けされる(ステップ2312)。
関係のある導出されたレジスタの予測が正しいかどうかを判定するために、この予測のチェックが実行されてよい(ステップ2314)。関係のある導出されたレジスタの予測をチェックすることを含む予測チェックに関連付けられた詳細が、図27を参照してさらに説明される。この予測チェックは、例として、分岐予測チェックまたは関係のあるレジスタの予測チェックあるいはその両方に加えて実行されてよい。1つの例では、プロセッサがこの処理を実行している。
図27を参照すると、1つの例では、関係のある導出された予測の正しさのチェックが行われる(ステップ2400)。予測が正しい場合(照会2401)、チェックが完了し(ステップ2402)、回復は実行されない。しかし、予測が正しくない場合(照会2401)、回復が実行される。例えば、関数エントリの後の命令がフラッシュされる(ステップ2404)。さらに、関係のある導出された値の名前変更レジスタを含めて、予測時に割り当てられた名前変更レジスタの割り当てが解除される(ステップ2406)。さらに、命令フェッチがリダイレクトされ、関係のある導出されたレジスタ(例えば、R2)の計算およびその後の命令を再実行する(ステップ2408)。これによって、予測チェックの1つの実装が完了する。
他の実装では、関係のある導出されたレジスタの指示(例えば、レジスタ番号)が予測されてよい。このようにして、本明細書に記載されているように、関係のあるレジスタに関して、指示を予測すること、予測を使用すること、例えば関係のある導出されたレジスタの予測値を命令ストリームにおいて非予測的に値を計算する命令シーケンスによって計算された値と比較することによって、正しさをチェックすること、または予測から回復すること、あるいはその組み合わせを実行するための処理が実行される。多くの変形が可能である。
さらに別の態様では、1つまたは複数の命令のシーケンスを検出することに応答して、関係のある導出されたレジスタの存在およびレジスタの特定のレジスタ番号が決定されてよい。例えば、デコード論理は、次のコード・シーケンスを認識する。
mtctr Rx
bctrl
addis Ry, Rx, #higha (_foo - .TOC.)
addi Ry, Ry, #low (_foo - .TOC.)
上記のコードにおいて、addisは、1つの実施形態例では、例えばPower Architecture(R)の定義に従って、即値加算シフト(add immediate shift)であり、addiは、1つの実施形態例では、例えばPower Architecture(R)の定義に従って、即値加算であり、Rxは関係のあるレジスタ(例えば、R12)であり、Ryは関係のある導出されたレジスタ(例えば、R2)である。
上記のシーケンスを認識することに基づいて(または、さまざまな実施形態例に従って、類似するシーケンス、異なるシーケンスが可能であり、ハードウェア実装が、可能性のあるシーケンスのうちの1つまたは複数を認識してよい)、移動、分岐、および導出された値の計算を実行する融合シーケンスが生成される。例として、例えば、関係のあるレジスタ(例えば、R12)および関係のある導出されたレジスタ(例えば、R2)がハード配線されるか、または制御レジスタにおいて指定されて、簡略化された融合シーケンスが生成されてよく、あるいは元の関係のあるレジスタに対する予測された分岐アドレスのチェックを含む拡張融合シーケンスが生成されてよく、MTCTRのコストを完全に取り除く。1つの実施形態では、この処理はデコーダによって実行され、例えば以下を含む。
ターゲット・アドレスを予測する
PC <= 予測されたターゲット・アドレス
CTR <= 予測されたターゲット・アドレス
Rx <= 予測されたターゲット・アドレス
Ry <= 予測されたターゲット・アドレス+オフセット
アドレスを返す
予測されたターゲット・アドレスをRxに対してチェックする
1つの例では、関係のあるレジスタ番号(例えば、R12)または関係のある導出されたレジスタ番号(例えば、R2)あるいはその両方が、それぞれ、関係のあるレジスタおよび関係のある導出されたレジスタとしてハード配線される。別の例では、関係のあるレジスタ番号または関係のある導出されたレジスタ番号あるいはその両方が、選択された制御レジスタ内などの、制御において示される。さらに別の例では、それらのレジスタ番号が、命令のシーケンス(例えば、MTCTRの後に指定されたレジスタ番号またはaddisもしくはaddiにおいて提供されたレジスタ番号)に基づいて動的に決定される。その他の例も可能である。
図28を参照して、融合に基づく関係のある導出されたシーケンスを使用するレジスタ間接分岐の予測手法に関する詳細が、さらに説明される。1つの例では、プロセッサがこの処理を実行している。1つの実施形態では、融合の機会の検出ステップが実行される(ステップ2500)。例えば、デコーダによって、MTCTR Rx/BCTRL./ADDIS/ADDIのシーケンスに関するチェックが行われる。検出ステップを実行することに基づいて、そのような融合シーケンスの機会が検出されるかどうかに関する判定が行われる(照会2502)。すなわち、例として、MTCTR、BCTRL、ADDIS、およびADDIのシーケンスがコード・ストリーム内に存在するか、およびMTCTRのRxが、ハード配線された関係のあるレジスタ番号などの期待されるレジスタ番号または制御において提供された番号に一致するか?融合シーケンスの機会が検出されない場合、従来の処理が実行される(ステップ2504)。検出された場合、1つの例では、処理が続行して、レジスタ間接分岐のターゲット・アドレスを予測し(ステップ2506)、命令フェッチを予測されたターゲット・アドレスにリダイレクトする(ステップ2508)。さらに、1つの例では、新しい名前変更レジスタが、ターゲット・アドレスを保持する論理レジスタに割り当てられる(ステップ2510)。予測されたアドレスが、割り当てられた名前変更レジスタにコピーされ(ステップ2512)、ターゲット・アドレスを保持する名前変更レジスタが使用可能としてマーク付けされる(ステップ2514)。
さらに、新しい名前変更レジスタが、関係のあるレジスタ(例えば、R12などのRx)にも割り当てられる(ステップ2516)。予測されたアドレスが、関係のあるレジスタに割り当てられた名前変更レジスタにコピーされ(ステップ2518)、関係のあるレジスタの名前変更レジスタが使用可能としてマーク付けされる(ステップ2520)。
さらに、新しい名前変更レジスタが、関係のある導出されたレジスタ(例えば、R2などのRy)にも割り当てられる(ステップ2522)。予測されたアドレスにオフセットが追加され、その結果が、関係のある導出されたレジスタに割り当てられた名前変更レジスタに格納される(ステップ2524)。関係のある導出されたレジスタの名前変更レジスタが、使用可能としてマーク付けされる(ステップ2526)。
予測されたアドレスの予測が正しいかどうかを判定するために、この予測のチェックが実行される(ステップ2528)。このチェックは、例えば、ターゲット・アドレスを、融合シーケンスより前の関係のあるレジスタ(Rx)の値と(例えば、前の名前変更レジスタを使用して)比較することを含む。この予測が正しくない場合、1つの例では、本明細書に記載されているように、回復が実行される。これで、この処理の1つの実施形態が完了する。
他の実施形態では、本明細書に記載されているように、その他の予測チェックが実行されてもよい。
本発明の1つまたは複数の態様は、コンピュータ技術に密接に関係しており、コンピュータ内の処理を容易にし、その性能を改善する。コンピューティング環境内の処理が、本発明の1つまたは複数の態様に関連しているとき、それらを容易にする一実施形態の詳細が、図29~30を参照してさらに説明される。
図29を参照すると、1つの実施形態では、レジスタ間接分岐において使用される予測値が、コンピューティング環境のプロセッサを使用して予測される(2600)。この予測値は、コンピューティング環境の1つまたは複数の命令にアクセスできる選択された位置(例えば、ハードウェア・レジスタ)に格納される(2602)。この格納することは、レジスタ間接分岐の処理と同時に実行される(2604)。さらに、選択された位置は、命令アドレスを格納するために使用される別の位置(例えば、PC)に加えられる(2605)。予測値は、レジスタ間接分岐を含む投機的処理において使用される(2606)。一例として、予測値は、命令フェッチによって使用されるターゲット・アドレスを含み(2608)、この使用することは、命令フェッチをターゲット・アドレスにリダイレクトすることを含む(2610)。
別の態様では、予測値が正確であるかどうかに関する判定が行われる(2612)。予測値が不正確であるということの決定に基づいて、回復が実行される(2614)。回復は、複数の方法で実行されてよい。1つの例では、この回復は、例えば、使用の後に実行される1つまたは複数の命令をフラッシュすることと(2616)、予測値を予測ではない値に置き換えることと(2618)を含む。1つの例として、この置き換えることは、1つまたは複数の名前変更レジスタを使用して予測ではない値を提供することを含む(2620)。
さらに、1つの例では、図30を参照すると、この格納することは、予測値を保持するためのレジスタを割り当てることと(2622)、予測値を、予測値を保持するために割り当てられたレジスタにコピーすることと(2624)を含む。
1つの特定の例では、このレジスタは、予測値を保持するために割り当てられた論理レジスタに割り当てられた、名前変更レジスタである(2626)。さらに、1つの例では、名前変更レジスタが使用可能としてマーク付けされる(2628)。
命令シーケンスを高速化するために、本発明の1つまたは複数の態様が有利に使用される。Power Architecture(R)の1つの実施形態に従って、下記に示されているシーケンスを効率的に実行することができ、このシーケンスでは、カウンタ間接分岐(counter-indirect branch)を介して関数に入ったときに、GOTのベースを初期化するために、カウンタ・レジスタが使用される。
したがって、レジスタ間接呼び出しまたはモジュール外部呼び出しを実行するとき、および呼び出される関数のターゲット・レジスタと共にカウンタ(CTR)レジスタが初期されたときに、以下に示されているように、呼び出し元がサブルーチンを呼び出してよい。
bctrl
1つの実施形態に従って、ABIは、モジュールの外部の呼び出し元からのカウント・レジスタ(ctr)間接呼び出し、ならびにGOTポインタが初期化される場合、およびGOTポインタが初期化されない場合のローカルの呼び出し元からの、レジスタ間接呼び出しのために、2つのエントリ・ポイントを有するように関数を定義する。
callee_ctr_indirect_entry:
mfctr r12 !CTR値を取得する
addis r2, r12, (.TOC.-callee_ctr_indirec_entry)@ha
addi r2.r2, (.TOC.-callee_ctr_indirect_entry)@1
calle_direct_local_entry:
… !サブルーチン本体
blr !呼び出し元に戻る
有利なことに、カウント・レジスタの値を読み込むMFCTR命令は、CTRの予測された投機的値を直ちに提供することができ、addisおよびaddiのその後のシーケンスが、グローバル変数にアクセスするためのレジスタとしてGOTポインタを計算できるようにし、その他の方法ではサブルーチン本体の処理を遅らせるグローバル変数のアクセスを進めることができるようにする。
別の実施形態では、例えば、System/360(R)命令セットに従って、レジスタ間接呼び出しを使用してサブルーチン呼び出しが実行されてよく、単一のエントリ・ポイントのみが存在してよい。
エミュレーション環境を含むが、これに限定されない、その他の種類のコンピューティング環境が、本発明の1つまたは複数の態様を組み込んで使用してもよく、その例が、図31を参照して説明される。この例では、コンピューティング環境20は例えば、例えば1つまたは複数のバス28またはその他の接続あるいはその両方を介して互いに結合された、ネイティブ中央処理装置(CPU)22、メモリ24、および1つまたは複数の入出力デバイスまたはインターフェイスあるいはその両方26を含む。例として、コンピューティング環境20は、International Business Machines Corporation(ニューヨーク州アーモンク)によって提供されるPowerPC(R)プロセッサもしくはPowerサーバ、またはInternational Business Machines Corporation、Intel(R)、もしくはその他の企業によって提供されるアーキテクチャに基づくその他のマシン、あるいはその組み合わせを含んでよい。
ネイティブ中央処理装置22は、環境内で処理中に使用される1つもしくは複数の汎用レジスタまたは1つもしくは複数の専用レジスタあるいはその両方などの、1つまたは複数のネイティブ・レジスタ30を含む。これらのレジスタは、いずれかの特定の時点での環境の状態を表す情報を含む。
さらに、ネイティブ中央処理装置22は、メモリ24に格納された命令およびコードを実行する。1つの特定の例では、中央処理装置は、メモリ24に格納されたエミュレータ・コード32を実行する。このコードは、あるアーキテクチャで構成されたコンピューティング環境が、別のアーキテクチャをエミュレートできるようにする。例えば、エミュレータ・コード32は、z/Architecture(R)以外のアーキテクチャに基づくマシン(PowerPC(R)プロセッサ、pSeries(R)サーバ、あるいはその他のサーバまたはプロセッサなど)が、z/Architecture(R)をエミュレートし、z/Architecture(R)に基づいて開発されたソフトウェアおよび命令を実行できるようにする。
エミュレータ・コード32に関連する詳細が、図32を参照してさらに説明される。メモリ24に格納されたゲスト命令40は、ネイティブCPU22のアーキテクチャ以外のアーキテクチャにおいて実行されるように開発された(例えば、マシン命令と相互関係がある)ソフトウェア命令を含む。例えば、ゲスト命令40は、z/Architecture(R)プロセッサ上で実行するように設計されてよいが、代わりに、例えばIntel(R)プロセッサであってよい、ネイティブCPU22上でエミュレートされる。1つの例では、エミュレータ・コード32は、メモリ24から1つまたは複数のゲスト命令40を取得するため、および取得された命令のローカル・バッファリングを任意選択的に提供するための命令フェッチ・ルーチン42を含む。エミュレータ・コード32は、取得されたゲスト命令の種類を決定するため、およびゲスト命令を、1つまたは複数の対応するネイティブ命令46に変換するための命令変換ルーチン44も含む。この変換は、例えば、ゲスト命令によって実行される機能を識別すること、およびこの機能を実行するためのネイティブ命令を選択することを含む。
さらに、エミュレータ・コード32は、ネイティブ命令の実行を引き起こすためのエミュレーション制御ルーチン48を含む。エミュレーション制御ルーチン48は、ネイティブCPU22に、1つまたは複数のすでに取得されたゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、そのような実行の終了時に、次のゲスト命令またはゲスト命令のグループの取得をエミュレートするために、制御を命令フェッチ・ルーチンに返してよい。ネイティブ命令46の実行は、データをメモリ24からレジスタに読み込むこと、データをレジスタからメモリに再び格納すること、あるいは変換ルーチンによって決定された何らかの種類の算術演算または論理演算を実行することを含んでよい。
例えば、各ルーチンは、メモリに格納されてネイティブ中央処理装置22によって実行されるソフトウェアにおいて実装される。他の例では、ルーチンもしくは動作のうちの1つまたは複数は、ファームウェア、ハードウェア、ソフトウェア、またはこれらの何らかの組み合わせにおいて実装される。エミュレートされたプロセッサのレジスタは、ネイティブCPUのレジスタ30を使用して、またはメモリ24内の位置を使用することによって、エミュレートされてよい。実施形態では、ゲスト命令40、ネイティブ命令46、およびエミュレータ・コード32は、同じメモリ内に存在してよく、または異なるメモリ・デバイス間で分配されてよい。
本明細書において使用されるとき、ファームウェアは、例えば、プロセッサのマイクロコードまたはミリコードを含む。ファームウェアは、例えば、上位レベルの機械コードの実装において使用される、ハードウェア・レベルの命令またはデータ構造あるいはその両方を含む。1つの実施形態では、ファームウェアは、例えば、信頼できるソフトウェアを含んでいるマイクロコード、または基盤になるハードウェアに固有のマイクロコードとして通常は提供される、システムのハードウェアへのオペレーティング・システムのアクセスを制御する独自のコードを含む。
取得され、変換されて実行されるゲスト命令40は、例えば、本明細書に記載された命令のうちの1つであってよい。あるアーキテクチャ(例えば、z/Architecture(R))の命令が、メモリからフェッチされ、変換され、別のアーキテクチャ(例えば、PowerPC(R)、pSeries(R)、Intel(R)など)のネイティブ命令46のシーケンスとして表される。その後、これらのネイティブ命令が実行される。
1つまたは複数の態様がクラウド・コンピューティングに関連してよい。
本開示にはクラウド・コンピューティングの詳細な説明が含まれているが、本明細書において示された教示の実装は、クラウド・コンピューティング環境に限定されないということが、あらかじめ理解される。本発明の実施形態は、現在既知であるか、または今後開発される任意のその他の種類のコンピューティング環境と組み合わせて実装できる。
クラウド・コンピューティングは、構成可能な計算リソース(例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、およびサービス)の共有プールへの便利なオンデマンドのネットワーク・アクセスを可能にするためのサービス提供モデルであり、管理上の手間またはサービス・プロバイダとのやりとりを最小限に抑えて、これらのリソースを迅速にプロビジョニングおよび解放することができる。このクラウド・モデルは、少なくとも5つの特徴、少なくとも3つのサービス・モデル、および少なくとも4つのデプロイメント・モデルを含むことができる。
特徴は、次のとおりである。
オンデマンドのセルフ・サービス:クラウドの利用者は、サーバの時間、ネットワーク・ストレージなどの計算能力を一方的に、サービス・プロバイダとの人間的なやりとりを必要とせず、必要に応じて自動的にプロビジョニングすることができる。
幅広いネットワーク・アクセス:能力は、ネットワークを経由して利用可能であり、標準的なメカニズムを使用してアクセスできるため、異種のシン・クライアントまたはシック・クライアント・プラットフォーム(例えば、携帯電話、ラップトップ、およびPDA)による利用を促進する。
リソース・プール:プロバイダの計算リソースは、プールされ、マルチテナント・モデルを使用して複数の利用者に提供される。さまざまな物理的および仮想的リソースが、要求に従って動的に割り当ておよび再割り当てされる。場所に依存しないという感覚があり、利用者は通常、提供されるリソースの正確な場所に関して管理することも知ることもないが、さらに高い抽象レベルでは、場所(例えば、国、州、またはデータセンター)を指定できる場合がある。
迅速な順応性:能力は、迅速かつ柔軟に、場合によっては自動的にプロビジョニングされ、素早くスケールアウトし、迅速に解放されて素早くスケールインすることができる。プロビジョニングに使用できる能力は、利用者には、多くの場合、無制限であるように見え、任意の量をいつでも購入できる。
測定されるサービス:クラウド・システムは、計測機能を活用することによって、サービスの種類(例えば、ストレージ、処理、帯域幅、およびアクティブなユーザのアカウント)に適した一部の抽象レベルで、リソースの使用を自動的に制御および最適化する。リソースの使用量は監視、制御、および報告することができ、利用されるサービスのプロバイダと利用者の両方に透明性が提供される。
サービス・モデルは、次のとおりである。
SaaS(Software as a Service):利用者に提供される能力は、クラウド・インフラストラクチャ上で稼働しているプロバイダのアプリケーションの利用である。それらのアプリケーションは、Webブラウザ(例えば、Webベースの電子メール)などのシン・クライアント・インターフェイスを介して、さまざまなクライアント・デバイスからアクセスできる。利用者は、ネットワーク、サーバ、オペレーティング・システム、ストレージ、またはさらには個々のアプリケーション機能を含む基盤になるクラウド・インフラストラクチャを、限定的なユーザ固有のアプリケーション構成設定を行う可能性を除き、管理することも制御することもない。
PaaS(Platform as a Service):利用者に提供される能力は、プロバイダによってサポートされるプログラミング言語およびツールを使用して作成された、利用者が作成または取得したアプリケーションをクラウド・インフラストラクチャにデプロイすることである。利用者は、ネットワーク、サーバ、オペレーティング・システム、またはストレージを含む基盤になるクラウド・インフラストラクチャを管理することも制御することもないが、デプロイされたアプリケーション、および場合によってはアプリケーション・ホスティング環境の構成を制御することができる。
IaaS(Infrastructure as a Service):利用者に提供される能力は、処理、ストレージ、ネットワーク、およびその他の基本的な計算リソースをプロビジョニングすることであり、利用者は、オペレーティング・システムおよびアプリケーションを含むことができる任意のソフトウェアをデプロイして実行できる。利用者は、基盤になるクラウド・インフラストラクチャを管理することも制御することもないが、オペレーティング・システム、ストレージ、およびデプロイされたアプリケーションを制御することができ、場合によっては、選択されたネットワーク・コンポーネント(例えば、ホスト・ファイアウォール)を限定的に制御できる。
デプロイメント・モデルは、次のとおりである。
プライベート・クラウド:このクラウド・インフラストラクチャは、ある組織のためにのみ運用される。この組織またはサード・パーティによって管理することができ、オンプレミスまたはオフプレミスに存在することができる。
コミュニティ・クラウド:このクラウド・インフラストラクチャは、複数の組織によって共有され、関心事(例えば、任務、セキュリティ要件、ポリシー、およびコンプライアンスに関する考慮事項)を共有している特定のコミュニティをサポートする。これらの組織またはサード・パーティによって管理することができ、オンプレミスまたはオフプレミスに存在することができる。
パブリック・クラウド:このクラウド・インフラストラクチャは、一般ユーザまたは大規模な業界団体が使用できるようになっており、クラウド・サービスを販売する組織によって所有される。
ハイブリッド・クラウド:このクラウド・インフラストラクチャは、データとアプリケーションの移植を可能にする標準化された技術または独自の技術(例えば、クラウド間の負荷バランスを調整するためのクラウド・バースト)によって固有の実体を残したまま互いに結合された2つ以上のクラウド(プライベート、コミュニティ、またはパブリック)の複合である。
クラウド・コンピューティング環境は、ステートレス、疎結合、モジュール性、および意味的相互運用性に重点を置いたサービス指向の環境である。クラウド・コンピューティングの中心になるのは、相互接続されたノードのネットワークを備えるインフラストラクチャである。
ここで図33を参照すると、例示的なクラウド・コンピューティング環境50が示されている。図示されているように、クラウド・コンピューティング環境50は、クラウドの利用者によって使用されるローカル・コンピューティング・デバイス(例えば、携帯情報端末(PDA:Personal Digital Assistant)もしくは携帯電話54A、デスクトップ・コンピュータ54B、ラップトップ・コンピュータ54C、または自動車コンピュータ・システム54N、あるいはその組み合わせなど)が通信できる1つまたは複数のクラウド・コンピューティング・ノード10を備える。ノード10は、互いに通信することができる。ノード10は、1つまたは複数のネットワーク内で、本明細書において前述されたプライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、またはハイブリッド・クラウド、あるいはこれらの組み合わせなどに、物理的または仮想的にグループ化されてよい(図示されていない)。これによって、クラウド・コンピューティング環境50は、クラウドの利用者がローカル・コンピューティング・デバイス上でリソースを維持する必要のないインフラストラクチャ、プラットフォーム、またはSaaS、あるいはその組み合わせを提供できる。図33に示されたコンピューティング・デバイス54A~Nの種類は、例示のみが意図されており、コンピューティング・ノード10およびクラウド・コンピューティング環境50は、任意の種類のネットワークまたはネットワーク・アドレス可能な接続(例えば、Webブラウザを使用した接続)あるいはその両方を経由して任意の種類のコンピュータ制御デバイスと通信できるということが理解される。
ここで図34を参照すると、クラウド・コンピューティング環境50(図33)によって提供される機能的抽象レイヤのセットが示されている。図34に示されたコンポーネント、レイヤ、および機能は、例示のみが意図されており、本発明の実施形態がこれらに限定されないということが、あらかじめ理解されるべきである。図示されているように、次のレイヤおよび対応する機能が提供される。
ハードウェアおよびソフトウェア・レイヤ60は、ハードウェア・コンポーネントおよびソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例としては、メインフレーム61、RISC(Reduced Instruction Set Computer)アーキテクチャベースのサーバ62、サーバ63、ブレード・サーバ64、ストレージ・デバイス65、ならびにネットワークおよびネットワーク・コンポーネント66が挙げられる。一部の実施形態では、ソフトウェア・コンポーネントは、ネットワーク・アプリケーション・サーバ・ソフトウェア67およびデータベース・ソフトウェア68を含む。
仮想化レイヤ70は、仮想サーバ71、仮想ストレージ72、仮想プライベート・ネットワークを含む仮想ネットワーク73、仮想アプリケーションおよびオペレーティング・システム74、ならびに仮想クライアント75などの仮想的実体の例を提供できる抽象レイヤを備える。
一例を挙げると、管理レイヤ80は、以下で説明される機能を提供することができる。リソース・プロビジョニング81は、クラウド・コンピューティング環境内でタスクを実行するために利用される計算リソースおよびその他のリソースの動的調達を行う。計測および価格設定82は、クラウド・コンピューティング環境内でリソースが利用される際のコスト追跡、およびそれらのリソースの利用に対する請求書の作成と送付を行う。一例を挙げると、それらのリソースは、アプリケーション・ソフトウェア・ライセンスを含むことができる。セキュリティは、クラウドの利用者およびタスクのID検証を行うと共に、データおよびその他のリソースの保護を行う。ユーザ・ポータル83は、クラウド・コンピューティング環境へのアクセスを利用者およびシステム管理者に提供する。サービス・レベル管理84は、必要なサービス・レベルを満たすように、クラウドの計算リソースの割り当てと管理を行う。サービス水準合意(SLA:Service Level Agreement)計画および実行85は、今後の要求が予想されるクラウドの計算リソースの事前準備および調達を、SLAに従って行う。
ワークロード・レイヤ90は、クラウド・コンピューティング環境で利用できる機能の例を示している。このレイヤから提供されてよいワークロードおよび機能の例としては、マッピングおよびナビゲーション91、ソフトウェア開発およびライフサイクル管理92、仮想クラスルーム教育の配信93、データ解析処理94、トランザクション処理95、およびレジスタ処理96が挙げられる。
本発明は、任意の可能な統合の技術的詳細レベルで、システム、方法、またはコンピュータ・プログラム製品、あるいはその組み合わせであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を含んでいる1つまたは複数のコンピュータ可読記憶媒体を含んでよい。
コンピュータ可読記憶媒体は、命令実行デバイスによって使用するための命令を保持および格納できる有形のデバイスであることができる。コンピュータ可読記憶媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせであってよいが、これらに限定されない。コンピュータ可読記憶媒体のさらに具体的な例の非網羅的リストは、ポータブル・フロッピー・ディスク、ハード・ディスク、ランダム・アクセス・メモリ(RAM:random access memory)、読み取り専用メモリ(ROM:read-only memory)、消去可能プログラマブル読み取り専用メモリ(EPROM:erasable programmable read-only memoryまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM:static random access memory)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD-ROM:compact disc read-only memory)、デジタル多用途ディスク(DVD:digital versatile disk)、メモリ・スティック、フロッピー・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組み合わせを含む。本明細書において使用されるとき、コンピュータ可読記憶媒体は、それ自体が、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を伝搬する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、あるいはワイヤを介して送信される電気信号などの一過性の信号であると解釈されるべきではない。
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から各コンピューティング・デバイス/処理デバイスへ、またはネットワーク(例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組み合わせ)を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードされ得る。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組み合わせを備えてよい。各コンピューティング・デバイス/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス/処理デバイス内のコンピュータ可読記憶媒体に格納するために転送する。
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA:instruction-set-architecture)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、あるいは、Smalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語もしくは同様のプログラミング言語などの手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組み合わせで記述されたソース・コードまたはオブジェクト・コードであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN:local area network)もしくは広域ネットワーク(WAN:wide area network)を含む任意の種類のネットワークを介してユーザのコンピュータに接続されてよく、または接続は、(例えば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに対して行われてよい。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ(FPGA:field-programmable gate arrays)、またはプログラマブル・ロジック・アレイ(PLA:programmable logic arrays)を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行してよい。
本発明の態様は、本明細書において、本発明の実施形態に従って、方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能/動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読記憶媒体がフローチャートまたはブロック図あるいはその両方のブロックに指定される機能/動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読記憶媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組み合わせに特定の方式で機能するように指示できるものであってもよい。
コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能/動作を実施するように、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスに読み込まれてもよく、それによって、一連の動作可能なステップを、コンピュータ上、その他のプログラム可能な装置上、またはコンピュータ実装プロセスを生成するその他のデバイス上で実行させる。
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャート図またはブロック図内の各ブロックは、規定された論理機能を実装するための1つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表してよい。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生してよい。例えば、連続して示された2つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、またはブロックは場合によっては逆の順序で実行されてよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組み合わせは、規定された機能または動作を実行するか、あるいは専用ハードウェアとコンピュータ命令の組み合わせを実行する専用ハードウェアベースのシステムによって実装され得るということにも注意する。
上に加えて、顧客の環境の管理を提供するサービス・プロバイダによって、1つまたは複数の態様が提供されること、提示されること、デプロイされること、管理されること、サービス提供されることなどが行われてよい。例えば、サービス・プロバイダは、1人または複数人の顧客のために1つまたは複数の態様を実行するコンピュータ・コードまたはコンピュータ・インフラストラクチャあるいはその両方を作成すること、維持すること、サポートすることなどを行うことができる。その見返りとして、サービス・プロバイダは、例えばサブスクリプションまたは料金契約あるいはその両方の下で、顧客から支払いを受け取ってよい。追加または代替として、サービス・プロバイダは、1つまたは複数のサード・パーティへの広告コンテンツの販売から支払いを受け取ってよい。
1つの態様では、1つまたは複数の実施形態を実行するために、アプリケーションがデプロイされてよい。1つの例として、アプリケーションのデプロイは、1つまたは複数の実施形態を実行するよう動作可能なコンピュータ・インフラストラクチャを提供することを含む。
さらに別の態様として、コンピュータ可読コードをコンピューティング・システムに統合することを含むコンピューティング・インフラストラクチャがデプロイされてよく、このコンピューティング・インフラストラクチャでは、コンピューティング・システムと組み合わせたコードが、1つまたは複数の実施形態を実行できる。
さらに別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含んでいる、コンピューティング・インフラストラクチャを統合するためのプロセスが提供されてよい。コンピュータ・システムは、コンピュータ可読媒体を備え、このコンピュータ可読媒体では、コンピュータ媒体が1つまたは複数の実施形態を含む。コンピュータ・システムと組み合わせたコードは、1つまたは複数の実施形態を実行できる。
上ではさまざまな実施形態が説明されたが、それらは単なる例である。例えば、1つまたは複数の実施形態を組み込んで使用するために、他のアーキテクチャのコンピューティング環境が使用され得る。さらに、さまざまな命令または動作が使用されてよい。さらに、さまざまなレジスタが使用されてよく、またはその他の種類の(レジスタ番号以外の)指示が指定されてよく、あるいはその両方が行われてよい。多くの変形が可能である。
さらに、他の種類のコンピューティング環境が、恩恵を受けることができ、使用され得る。一例として、プログラム・コードの格納または実行あるいはその両方を行うのに適した、システム・バスを介して直接的または間接的にメモリ素子に結合された少なくとも2つのプロセッサを含んでいる、データ処理システムを使用できる。これらのメモリ素子は、例えば、プログラム・コードの実際の実行時に使用されるローカル・メモリ、バルク・ストレージ、および実行時にバルク・ストレージからコードが取得されなければならない回数を減らすために少なくとも一部のプログラム・コードを一時的に格納するキャッシュ・メモリを含む。
入出力デバイスまたはI/Oデバイス(キーボード、ディスプレイ、ポインティング・デバイス、DASD、テープ、CD、DVD、サム・ドライブ、およびその他の記憶媒体などを含むが、これらに限定されない)は、直接的に、または介在するI/Oコントローラを通じてのいずれかで、システムに結合できる。ネットワーク・アダプタがシステムに結合され、介在するプライベート・ネットワークまたはパブリック・ネットワークを通じて、データ処理システムを、他のデータ処理システムまたはリモート・プリンタまたはストレージ・デバイスに結合できるようにしてもよい。モデム、ケーブル・モデム、およびイーサネット・カードは、使用可能なネットワーク・アダプタのうちの、ごくわずかの種類にすぎない。
本明細書で使用される用語は、特定の実施形態を説明することのみを目的としており、制限することを意図していない。本明細書において使用されるとき、単数形「a」、「an」、および「the」は、特に明示的に示されない限り、複数形も含むことが意図されている。「備える(comprise)」または「備えている(comprising)」あるいはその両方の用語は、本明細書で使用される場合、記載された機能、整数、ステップ、動作、要素、またはコンポーネント、あるいはその組み合わせの存在を示すが、1つもしくは複数のその他の機能、整数、ステップ、動作、要素、コンポーネント、またはこれらのグループ、あるいはその組み合わせの存在または追加を除外していないということが、さらに理解されるであろう。
下の特許請求の範囲内のすべての手段またはステップおよび機能要素の対応する構造、材料、動作、および等価なものは、もしあれば、具体的に請求されるとき、その他の請求される要素と組み合わせて機能を実行するための任意の構造、材料、または動作を含むことが意図されている。1つまたは複数の実施形態の説明は、例示および説明の目的で提示されているが、網羅的であることは意図されておらず、または開示された形態に限定されない。多くの変更および変形が可能であるということは、当業者にとって明らかであろう。さまざまな態様および実際的な適用を最も適切に説明するため、および他の当業者が、企図されている特定の用途に適しているようなさまざまな変更を伴う多様な実施形態を理解できるようにするために、実施形態が選択されて説明された。

Claims (22)

  1. コンピューティング環境内の処理を容易にするためのコンピュータ・プログラムであって、前記コンピュータ・プログラムは、処理回路に方法を実行させ、前記方法は、
    前記コンピューティング環境のプロセッサを使用して、レジスタ間接分岐において使用される予測値を予測することであって、前記予測値は前記レジスタ間接分岐の予測されたターゲット・アドレスを含む、前記予測することと、
    前記予測値を、前記コンピューティング環境の1つまたは複数の命令にアクセスできる選択された位置に格納することであって、前記格納することが前記レジスタ間接分岐の処理と同時に実行され、前記予測されたターゲット・アドレスは、前記選択された位置と命令フェッチを前記予測されたターゲット・アドレスにリダイレクトするためのプログラム・カウンタとに提供される、前記格納することと、
    前記予測値を、前記レジスタ間接分岐を含む投機的処理において使用することであって、前記1つまたは複数の命令の一部が前記レジスタ間接分岐の命令であり、前記使用することは、前記1つまたは複数の命令の一部が前記投機的処理の一部として前記選択された位から前記予測値にアクセスすることを含む、前記使用することと
    を含んでいる、コンピュータ・プログラム。
  2. 前記使用することが、前記命令フェッチを前記予測されたターゲット・アドレスにリダイレクトすることを含んでいる、請求項1に記載のコンピュータ・プログラム。
  3. 前記選択された位置がハードウェア・レジスタを含んでいる、請求項1に記載のコンピュータ・プログラム。
  4. 前記方法が、
    前記予測値が正確であるかどうかを判定することと、
    前記予測値が不正確であるということの決定に基づいて、回復を実行することと
    をさらに含んでいる、請求項1に記載のコンピュータ・プログラム。
  5. 前記回復が、
    前記使用の後に実行される1つまたは複数の命令をフラッシュすることと、
    前記予測値を予測ではない値に置き換えることと
    を含んでいる、請求項4に記載のコンピュータ・プログラム。
  6. 前記置き換えることが、1つまたは複数の名前変更レジスタを使用して前記予測ではない値を提供することを含んでいる、請求項5に記載のコンピュータ・プログラム。
  7. 前記格納することが、
    前記予測値を保持するためのレジスタを割り当てることと、
    前記予測値を、前記予測値を保持するために割り当てられた前記レジスタにコピーすることと
    を含んでいる、請求項1に記載のコンピュータ・プログラム。
  8. 前記レジスタが、前記予測値を保持するために割り当てられた論理レジスタに割り当てられた、名前変更レジスタである、請求項7に記載のコンピュータ・プログラム。
  9. 前記方法が、前記名前変更レジスタに使用可能としてマーク付けすることをさらに含んでいる、請求項8に記載のコンピュータ・プログラム。
  10. コンピューティング環境内の処理を容易にするためのコンピュータ・システムであって、前記コンピュータ・システムは、
    メモリと、
    前記メモリと通信するプロセッサと
    を備えており、前記コンピュータ・システムは方法を実行するように構成されており、前記方法は、
    レジスタ間接分岐において使用される予測値を予測することであって、前記予測値は前記レジスタ間接分岐の予測されたターゲット・アドレスを含む、前記予測することと、
    前記予測値を、前記コンピューティング環境の1つまたは複数の命令にアクセスできる選択された位置に格納することであって、前記格納することが前記レジスタ間接分岐の処理と同時に実行され、前記予測されたターゲット・アドレスは、前記選択された位置と命令フェッチを前記予測されたターゲット・アドレスにリダイレクトするためのプログラム・カウンタとに提供される、前記格納することと、
    前記予測値を、前記レジスタ間接分岐を含む投機的処理において使用することであって、前記1つまたは複数の命令の一部が前記レジスタ間接分岐の命令であり、前記使用することは、前記1つまたは複数の命令の一部が前記投機的処理の一部として前記選択された位から前記予測値にアクセスすることを含む、前記使用することと
    を含んでいる、コンピュータ・システム。
  11. 前記選択された位置がハードウェア・レジスタを含んでいる、請求項10に記載のコンピュータ・システム。
  12. 前記方法が、
    前記予測値が正確であるかどうかを判定することと、
    前記予測値が不正確であるということの決定に基づいて、回復を実行することと
    をさらに含んでいる、請求項10に記載のコンピュータ・システム。
  13. 前記格納することが、
    前記予測値を保持するためのレジスタを割り当てることと、
    前記予測値を、前記予測値を保持するために割り当てられた前記レジスタにコピーすることと
    を含んでいる、請求項10に記載のコンピュータ・システム。
  14. コンピューティング環境内の処理を容易にするコンピュータ実装方法であって、前記コンピュータ実装方法は、
    前記コンピューティング環境のプロセッサを使用して、レジスタ間接分岐において使用される予測値を予測することであって、前記予測値は前記レジスタ間接分岐の予測されたターゲット・アドレスを含む、前記予測することと、
    前記予測値を、前記コンピューティング環境の1つまたは複数の命令にアクセスできる選択された位置に格納することであって、前記格納することが前記レジスタ間接分岐の処理と同時に実行され、前記予測されたターゲット・アドレスは、前記選択された位置と命令フェッチを前記予測されたターゲット・アドレスにリダイレクトするためのプログラム・カウンタとに提供される、前記格納することと、
    前記予測値を、前記レジスタ間接分岐を含む投機的処理において使用することであって、前記1つまたは複数の命令の一部が前記レジスタ間接分岐の命令であり、前記使用することは、前記1つまたは複数の命令の一部が前記投機的処理の一部として前記選択された位から前記予測値にアクセスすることを含む、前記使用することと
    を含んでいる、コンピュータ実装方法。
  15. 前記使用することが、前記命令フェッチを前記ターゲット・アドレスにリダイレクトすることを含んでいる、請求項14に記載のコンピュータ実装方法。
  16. 前記選択された位置がハードウェア・レジスタを含んでいる、請求項14に記載のコンピュータ実装方法。
  17. 前記予測値が正確であるかどうかを判定することと、
    前記予測値が不正確であるということの決定に基づいて、回復を実行することと
    をさらに含んでいる、請求項14に記載のコンピュータ実装方法。
  18. 前記回復が、
    前記使用の後に実行される1つまたは複数の命令をフラッシュすることと、
    前記予測値を予測ではない値に置き換えることと
    を含んでいる、請求項17に記載のコンピュータ実装方法。
  19. 前記置き換えることが、1つまたは複数の名前変更レジスタを使用して前記予測ではない値を提供することを含んでいる、請求項18に記載のコンピュータ実装方法。
  20. 前記格納することが、
    前記予測値を保持するためのレジスタを割り当てることと、
    前記予測値を、前記予測値を保持するために割り当てられた前記レジスタにコピーすることと
    を含んでいる、請求項14に記載のコンピュータ実装方法。
  21. 前記レジスタが、前記予測値を保持するために割り当てられた論理レジスタに割り当てられた、名前変更レジスタである、請求項20に記載のコンピュータ実装方法。
  22. 前記方法が、前記名前変更レジスタに使用可能としてマーク付けすることをさらに含んでいる、請求項21に記載のコンピュータ実装方法。
JP2020508366A 2017-08-18 2018-08-07 同時の分岐アドレスの予測およびレジスタの内容の更新 Active JP7189935B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US15/680,779 2017-08-18
US15/680,779 US11150904B2 (en) 2017-08-18 2017-08-18 Concurrent prediction of branch addresses and update of register contents
US15/816,401 US11314511B2 (en) 2017-08-18 2017-11-17 Concurrent prediction of branch addresses and update of register contents
US15/816,401 2017-11-17
PCT/IB2018/055931 WO2019034964A1 (en) 2017-08-18 2018-08-07 SIMULTANEOUS PREDICTION OF BRANCH ADDRESSES AND UPDATE OF REGISTER CONTENT

Publications (2)

Publication Number Publication Date
JP2020531962A JP2020531962A (ja) 2020-11-05
JP7189935B2 true JP7189935B2 (ja) 2022-12-14

Family

ID=65360492

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020508366A Active JP7189935B2 (ja) 2017-08-18 2018-08-07 同時の分岐アドレスの予測およびレジスタの内容の更新

Country Status (6)

Country Link
US (2) US11150904B2 (ja)
JP (1) JP7189935B2 (ja)
CN (1) CN111033467B (ja)
DE (1) DE112018003578T5 (ja)
GB (1) GB2582451B (ja)
WO (1) WO2019034964A1 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10719328B2 (en) 2017-08-18 2020-07-21 International Business Machines Corporation Determining and predicting derived values used in register-indirect branching
US10534609B2 (en) 2017-08-18 2020-01-14 International Business Machines Corporation Code-specific affiliated register prediction
CN111930428B (zh) * 2020-09-27 2021-01-15 南京芯瞳半导体技术有限公司 一种条件分支指令的融合方法、装置及计算机存储介质
CN112579176B (zh) * 2020-12-17 2023-03-28 成都海光微电子技术有限公司 记录地址历史的装置和方法

Family Cites Families (96)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0337723A (ja) 1989-07-05 1991-02-19 Hitachi Ltd 情報処理装置
JP2883784B2 (ja) 1993-04-27 1999-04-19 株式会社東芝 マイクロコンピュータ
US5604877A (en) 1994-01-04 1997-02-18 Intel Corporation Method and apparatus for resolving return from subroutine instructions in a computer processor
US5835743A (en) 1994-06-30 1998-11-10 Sun Microsystems, Inc. Application binary interface and method of interfacing binary application program to digital computer
US5740414A (en) 1995-02-14 1998-04-14 Hal Computer Systems, Inc. Method and apparatus for coordinating the use of physical registers in a microprocessor
JP3494736B2 (ja) 1995-02-27 2004-02-09 株式会社ルネサステクノロジ 分岐先バッファを用いた分岐予測システム
US5896528A (en) 1995-03-03 1999-04-20 Fujitsu Limited Superscalar processor with multiple register windows and speculative return address generation
US5898864A (en) 1995-09-25 1999-04-27 International Business Machines Corporation Method and system for executing a context-altering instruction without performing a context-synchronization operation within high-performance processors
US5892936A (en) 1995-10-30 1999-04-06 Advanced Micro Devices, Inc. Speculative register file for storing speculative register states and removing dependencies between instructions utilizing the register
US5774722A (en) 1995-12-14 1998-06-30 International Business Machines Corporation Method for efficient external reference resolution in dynamically linked shared code libraries in single address space operating systems
US5850543A (en) 1996-10-30 1998-12-15 Texas Instruments Incorporated Microprocessor with speculative instruction pipelining storing a speculative register value within branch target buffer for use in speculatively executing instructions after a return
US5996092A (en) 1996-12-05 1999-11-30 International Business Machines Corporation System and method for tracing program execution within a processor before and after a triggering event
US5898885A (en) 1997-03-31 1999-04-27 International Business Machines Corporation Method and system for executing a non-native stack-based instruction within a computer system
US6446034B1 (en) 1998-12-16 2002-09-03 Bull Hn Information Systems Inc. Processor emulation virtual memory address translation
US6332191B1 (en) * 1999-01-19 2001-12-18 Advanced Micro Devices, Inc. System for canceling speculatively fetched instructions following a branch mis-prediction in a microprocessor
US6308322B1 (en) 1999-04-06 2001-10-23 Hewlett-Packard Company Method and apparatus for reduction of indirect branch instruction overhead through use of target address hints
US6324643B1 (en) 1999-10-01 2001-11-27 Hitachi, Ltd. Branch prediction and target instruction control for processor
US6446197B1 (en) 1999-10-01 2002-09-03 Hitachi, Ltd. Two modes for executing branch instructions of different lengths and use of branch control instruction and register set loaded with target instructions
JP2001142692A (ja) 1999-10-01 2001-05-25 Hitachi Ltd 2つの異なる固定長命令セットを実行するマイクロプロセッサ、マイクロコンピュータおよび命令実行方法
US6442707B1 (en) 1999-10-29 2002-08-27 Advanced Micro Devices, Inc. Alternate fault handler
US6609194B1 (en) 1999-11-12 2003-08-19 Ip-First, Llc Apparatus for performing branch target address calculation based on branch type
US6715064B1 (en) 2000-01-21 2004-03-30 Intel Corporation Method and apparatus for performing sequential executions of elements in cooperation with a transform
US6766442B1 (en) 2000-03-30 2004-07-20 International Business Machines Corporation Processor and method that predict condition register-dependent conditional branch instructions utilizing a potentially stale condition register value
US6625660B1 (en) 2000-06-06 2003-09-23 International Business Machines Corporation Multiprocessor speculation mechanism for efficiently managing multiple barrier operations
US6691220B1 (en) 2000-06-06 2004-02-10 International Business Machines Corporation Multiprocessor speculation mechanism via a barrier speculation flag
US6880073B2 (en) 2000-12-28 2005-04-12 International Business Machines Corporation Speculative execution of instructions and processes before completion of preceding barrier operations
EP1405174A1 (en) 2001-06-29 2004-04-07 Koninklijke Philips Electronics N.V. Method, apparatus and compiler for predicting indirect branch target addresses
US7234045B2 (en) 2001-07-03 2007-06-19 Ip-First, Llc Apparatus and method for handling BTAC branches that wrap across instruction cache lines
US6845442B1 (en) 2002-04-30 2005-01-18 Advanced Micro Devices, Inc. System and method of using speculative operand sources in order to speculatively bypass load-store operations
US7028166B2 (en) 2002-04-30 2006-04-11 Advanced Micro Devices, Inc. System and method for linking speculative results of load operations to register values
US7089400B1 (en) 2002-08-29 2006-08-08 Advanced Micro Devices, Inc. Data speculation based on stack-relative addressing patterns
US7310799B2 (en) 2002-12-31 2007-12-18 International Business Machines Corporation Reducing load instructions via global data reordering
US7024537B2 (en) 2003-01-21 2006-04-04 Advanced Micro Devices, Inc. Data speculation based on addressing patterns identifying dual-purpose register
US6965983B2 (en) 2003-02-16 2005-11-15 Faraday Technology Corp. Simultaneously setting prefetch address and fetch address pipelined stages upon branch
US20040225866A1 (en) 2003-05-06 2004-11-11 Williamson David James Branch prediction in a data processing system
US7308562B2 (en) 2003-05-22 2007-12-11 International Business Machines Corporation System and method for improved branch performance in pipelined computer architectures
US7263600B2 (en) 2004-05-05 2007-08-28 Advanced Micro Devices, Inc. System and method for validating a memory file that links speculative results of load operations to register values
US7506325B2 (en) 2004-10-07 2009-03-17 International Business Machines Corporation Partitioning processor resources based on memory usage
JP2007041837A (ja) 2005-08-03 2007-02-15 Nec Electronics Corp 命令プリフェッチ装置及び命令プリフェッチ方法
US7409535B2 (en) 2005-04-20 2008-08-05 International Business Machines Corporation Branch target prediction for multi-target branches by identifying a repeated pattern
US20070088937A1 (en) 2005-10-13 2007-04-19 International Business Machines Corporation Computer-implemented method and processing unit for predicting branch target addresses
US7539851B2 (en) 2006-05-18 2009-05-26 Sun Microsystems, Inc. Using register readiness to facilitate value prediction
US8677104B2 (en) 2006-05-30 2014-03-18 Arm Limited System for efficiently tracing data in a data processing system
US7689806B2 (en) 2006-07-14 2010-03-30 Q Method and system to indicate an exception-triggering page within a microprocessor
US7788473B1 (en) * 2006-12-26 2010-08-31 Oracle America, Inc. Prediction of data values read from memory by a microprocessor using the storage destination of a load operation
US7797521B2 (en) 2007-04-12 2010-09-14 International Business Machines Corporation Method, system, and computer program product for path-correlated indirect address predictions
US7809933B2 (en) * 2007-06-07 2010-10-05 International Business Machines Corporation System and method for optimizing branch logic for handling hard to predict indirect branches
JP2009110209A (ja) 2007-10-29 2009-05-21 Panasonic Corp 演算処理装置、プロセッサ、プログラム変換装置およびプログラム
US8631261B2 (en) 2007-12-31 2014-01-14 Intel Corporation Context state management for processor feature sets
US7737725B1 (en) 2008-04-04 2010-06-15 Xilinx, Inc. Device control register for a processor block
US8639913B2 (en) 2008-05-21 2014-01-28 Qualcomm Incorporated Multi-mode register file for use in branch prediction
CN101763248A (zh) 2008-12-25 2010-06-30 世意法(北京)半导体研发有限责任公司 用于多模式分支预测器的系统和方法
US20110078425A1 (en) 2009-09-25 2011-03-31 Shah Manish K Branch prediction mechanism for predicting indirect branch targets
US8612978B2 (en) 2009-12-10 2013-12-17 Oracle America, Inc. Code execution utilizing single or multiple threads
US8843729B2 (en) 2010-04-27 2014-09-23 Via Technologies, Inc. Microprocessor that fuses MOV/ALU instructions
US20110320787A1 (en) 2010-06-28 2011-12-29 Qualcomm Incorporated Indirect Branch Hint
US20120079255A1 (en) 2010-09-25 2012-03-29 Combs Jonathan D Indirect branch prediction based on branch target buffer hysteresis
US8769539B2 (en) 2010-11-16 2014-07-01 Advanced Micro Devices, Inc. Scheduling scheme for load/store operations
US9176737B2 (en) 2011-02-07 2015-11-03 Arm Limited Controlling the execution of adjacent instructions that are dependent upon a same data condition
US9898291B2 (en) 2011-04-07 2018-02-20 Via Technologies, Inc. Microprocessor with arm and X86 instruction length decoders
US8930657B2 (en) 2011-07-18 2015-01-06 Infineon Technologies Ag Method and apparatus for realtime detection of heap memory corruption by buffer overruns
CN102306093B (zh) 2011-08-04 2014-03-05 北京北大众志微系统科技有限责任公司 实现现代处理器间接转移预测的装置及方法
US8612959B2 (en) 2011-10-03 2013-12-17 International Business Machines Corporation Linking code for an enhanced application binary interface (ABI) with decode time instruction optimization
US9329869B2 (en) 2011-10-03 2016-05-03 International Business Machines Corporation Prefix computer instruction for compatibily extending instruction functionality
WO2013095510A1 (en) 2011-12-22 2013-06-27 Intel Corporation Packed data operation mask concatenation processors, methods, systems, and instructions
US9477834B2 (en) 2012-02-08 2016-10-25 Arm Limited Maintaining secure data isolated from non-secure access when switching between domains
US9063759B2 (en) 2012-03-28 2015-06-23 International Business Machines Corporation Optimizing subroutine calls based on architecture level of called subroutine
US9195466B2 (en) 2012-05-16 2015-11-24 Qualcomm Incorporated Fusing conditional write instructions having opposite conditions in instruction processing circuits, and related processor systems, methods, and computer-readable media
US20130346727A1 (en) * 2012-06-25 2013-12-26 Qualcomm Incorporated Methods and Apparatus to Extend Software Branch Target Hints
US20140006752A1 (en) 2012-06-27 2014-01-02 Qualcomm Incorporated Qualifying Software Branch-Target Hints with Hardware-Based Predictions
US9330017B2 (en) 2012-11-02 2016-05-03 International Business Machines Corporation Suppressing virtual address translation utilizing bits and instruction tagging
US9477476B2 (en) 2012-11-27 2016-10-25 Qualcomm Incorporated Fusing immediate value, write-based instructions in instruction processing circuits, and related processor systems, methods, and computer-readable media
GB201300608D0 (en) 2013-01-14 2013-02-27 Imagination Tech Ltd Indirect branch prediction
US9672037B2 (en) 2013-01-23 2017-06-06 Apple Inc. Arithmetic branch fusion
GB2506462B (en) * 2013-03-13 2014-08-13 Imagination Tech Ltd Indirect branch prediction
US9817666B2 (en) 2013-03-15 2017-11-14 Intel Corporation Method for a delayed branch implementation by using a front end track table
US9858081B2 (en) 2013-08-12 2018-01-02 International Business Machines Corporation Global branch prediction using branch and fetch group history
CN104423929B (zh) 2013-08-21 2017-07-14 华为技术有限公司 一种分支预测方法及相关装置
JP2015049832A (ja) 2013-09-04 2015-03-16 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 定数ロードのオーバーヘッドを削減する方法、装置及びプログラム
GB2522906B (en) 2014-02-10 2021-07-14 Advanced Risc Mach Ltd Region identifying operation for identifying a region of a memory attribute unit corresponding to a target memory address
US9110675B1 (en) 2014-03-12 2015-08-18 International Business Machines Corporation Usage of TOC register as application register
US9256546B2 (en) 2014-03-31 2016-02-09 International Business Machines Corporation Transparent code patching including updating of address translation structures
US10740105B2 (en) 2014-04-04 2020-08-11 Texas Instruments Incorporated Processor subroutine cache
US9563427B2 (en) 2014-05-30 2017-02-07 International Business Machines Corporation Relative offset branching in a fixed-width reduced instruction set computing architecture
US9329850B2 (en) 2014-06-24 2016-05-03 International Business Machines Corporation Relocation of instructions that use relative addressing
US20160055003A1 (en) 2014-08-19 2016-02-25 Qualcomm Incorporated Branch prediction using least-recently-used (lru)-class linked list branch predictors, and related circuits, methods, and computer-readable media
US9274769B1 (en) 2014-09-05 2016-03-01 International Business Machines Corporation Table of contents pointer value save and restore placeholder positioning
EP3012762A1 (en) 2014-10-24 2016-04-27 Thomson Licensing Control flow graph flattening device and method
US9354947B2 (en) 2014-10-28 2016-05-31 International Business Machines Corporation Linking a function with dual entry points
US9395964B2 (en) 2014-10-30 2016-07-19 International Business Machines Corporation Rewriting symbol address initialization sequences
US9858411B2 (en) 2014-12-19 2018-01-02 Intel Corporation Execution profiling mechanism
US9513832B2 (en) 2015-03-25 2016-12-06 International Business Machines Corporation Accessing global data from accelerator devices
US20170083318A1 (en) 2015-09-19 2017-03-23 Microsoft Technology Licensing, Llc Configuring modes of processor operation
GB2543304B (en) 2015-10-14 2020-10-28 Advanced Risc Mach Ltd Move prefix instruction
US10324724B2 (en) 2015-12-16 2019-06-18 Intel Corporation Hardware apparatuses and methods to fuse instructions
US10528355B2 (en) * 2015-12-24 2020-01-07 Arm Limited Handling move instructions via register renaming or writing to a different physical register using control flags

Also Published As

Publication number Publication date
CN111033467A (zh) 2020-04-17
US11150904B2 (en) 2021-10-19
CN111033467B (zh) 2023-08-01
GB2582451B (en) 2021-12-22
US20190056938A1 (en) 2019-02-21
WO2019034964A1 (en) 2019-02-21
US20190056936A1 (en) 2019-02-21
GB2582451A (en) 2020-09-23
GB202002829D0 (en) 2020-04-15
DE112018003578T5 (de) 2020-04-02
JP2020531962A (ja) 2020-11-05
US11314511B2 (en) 2022-04-26

Similar Documents

Publication Publication Date Title
JP7059361B2 (ja) Set Table of Contents(TOC)Register命令
JP7189935B2 (ja) 同時の分岐アドレスの予測およびレジスタの内容の更新
US10754656B2 (en) Determining and predicting derived values
US10929135B2 (en) Predicting and storing a predicted target address in a plurality of selected locations
JP7082187B2 (ja) サブルーチン分岐シーケンスにおける導出された値の作成および導出された値の予測の動的融合
US10564974B2 (en) Determining and predicting affiliated registers based on dynamic runtime control flow analysis
US10891133B2 (en) Code-specific affiliated register prediction
US10884748B2 (en) Providing a predicted target address to multiple locations based on detecting an affiliated relationship
US10579385B2 (en) Prediction of an affiliated register

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210122

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20211125

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20211207

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20211221

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220427

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20220502

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220830

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20221104

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20221122

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20221202

R150 Certificate of patent or registration of utility model

Ref document number: 7189935

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150