JP7046098B2 - リネーム・レジスタ復旧に基づくレジスタ・コンテキスト復元 - Google Patents

リネーム・レジスタ復旧に基づくレジスタ・コンテキスト復元 Download PDF

Info

Publication number
JP7046098B2
JP7046098B2 JP2019556276A JP2019556276A JP7046098B2 JP 7046098 B2 JP7046098 B2 JP 7046098B2 JP 2019556276 A JP2019556276 A JP 2019556276A JP 2019556276 A JP2019556276 A JP 2019556276A JP 7046098 B2 JP7046098 B2 JP 7046098B2
Authority
JP
Japan
Prior art keywords
snapshot
register
registers
restore
architectures
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
JP2019556276A
Other languages
English (en)
Other versions
JP2020518895A (ja
JP2020518895A5 (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 JP2020518895A publication Critical patent/JP2020518895A/ja
Publication of JP2020518895A5 publication Critical patent/JP2020518895A5/ja
Application granted granted Critical
Publication of JP7046098B2 publication Critical patent/JP7046098B2/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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/30058Conditional 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/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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Description

1つ又は複数の態様は、一般に、コンピューティング環境内の処理に関し、特定的には、こうした処理を容易にすることに関する。
コンピュータ・プログラムは、多くの場合、印刷、種々の数学演算等などの特定の演算を提供するために関数を呼び出す。関数を呼び出すプログラムは、呼び出し元(caller)と呼ばれ、呼び出された関数は、呼び出し先(callee)と呼ばれる。これらの関数の多くは、その正味の静的長さ(すなわち、関数は多くの命令を含まない)、又はその短い動的長さ(例えば、早期終了条件(early-out condition))のいずれかに起因して、極めて短い。
短い関数は、その他の関数と同様に、修正した呼び出し先保存レジスタ(callee-saved register)を関数のプロローグの一部としてスタック上に格納し、それらをエピローグの一部として復元する。スタックは、コール・スタックとも呼ばれ、コンピュータ・プログラムのアクティブな関数についての情報を格納するために、コンピュータ・プログラムにより使用される。同様に、こうした関数に対する呼び出し元は、値が関数呼び出しにわたってライブである場合には、呼び出し元保存レジスタ(caller-saved registers)を関数の呼び出しシーケンスの一部としてスタック上に保存し、戻り時にそれらを復元する。これらのレジスタの保存は、関数を呼び出す著しいコストである。
さらに、短い関数の場合、復元は、保存が完了した後にしか行うことができず、その発生は保証されないので、これらのレジスタを保存し、次に復元することに関連した費用はさらに大きい。これらの条件の下で、load-hit-store及びforwarding penaltiesのような付加的なペナルティを招くことがある。
「z/Architecture Principles of Operation」、IBM(登録商標)発行、No.SA22-7832-10、2015年3月 「Power ISA(商標) Version 2.07B」,インターナショナル・ビジネス・マシーンズ・コーポレーション、2015年4月9日
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム、コンピュータ・システム、及びコンピュータ実施方法を提供する。
コンピューティング環境環境内での処理を容易にするためのコンピュータ・プログラムの提供によって、従来技術の欠点が克服され、付加的な利点がもたらされる。コンピュータ・プログラム製品は、処理回路により読み取り可能であり、方法を実行するための命令を格納するストレージ媒体を含む。この方法は、例えば、プロセッサにより、複数のアーキテクチャ上のレジスタ(architected register)を復元するためのロード要求を取得することと、ロード要求を取得することに基づいて、複数のアーキテクチャ上のレジスタのうちの1つ又は複数のアーキテクチャ上のレジスタを復元することと、を含む。復元することは、アーキテクチャ上のレジスタを物理レジスタにマッピングするスナップショットを用いて、1つ又は複数のアーキテクチャ上のレジスタに現在割り当てられている1つ又は複数の物理レジスタを、1つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットの1つ又は複数の物理レジスタと置換する。1つ又は複数のアーキテクチャ上のレジスタを復元するためにスナップショットを用いて、復元を実行するためのメモリ・アクセスを回避することにより、性能を改善させることができる。
一態様において、ロード要求を取得することに基づいて、1つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能であるかどうかを判断する。スナップショットが利用可能であることを示すとの判断に基づいて、スナップショットを用いて復元を実行する。
更に別の態様において、1つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能でないことを示すとの判断に基づいて、値をメモリから1つ又は複数のアーキテクチャ上のレジスタにロードすることにより、1つ又は複数のアーキテクチャ上のレジスタを復元する。
一例として、判断することは、スナップショット・スタックを用いて、1つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能かどうかを判断することを含む。
スナップショット・スタックは、例えば、複数のエントリを含む。一例において、スナップショット・スタックのエントリは、スナップショットを識別するスナップショット識別子を含む。更に別の例において、スナップショット・スタックのエントリは、1つ又は複数のアーキテクチャ上のレジスタの内容のメモリ内のアドレス、スナップショットと関連した1つ又は複数のアーキテクチャ上のレジスタの表示、及びスナップショットが有効かどうかを示す有効性インジケータから成る群から選択される少なくとも1つを含む付加的な情報を含む。
更に別の態様において、スナップショットを作成し、1つ又は複数の物理レジスタの1つ又は複数のアーキテクチャ上のレジスタへのマッピングを保存する。
一例において、スナップショットを作成することは、1つ又は複数のアーキテクチャ上のレジスタの保存を要求する保存要求を取得することに基づいて実行される。
例として、ロード要求は、load multiple(複数ロード)命令を含み、保存要求は、store multiple(複数ストア)命令を含む。
さらに、一実施形態において、1つ又は複数のアーキテクチャ上のレジスタは、メモリから1つ又は複数のアーキテクチャ上のレジスタについての値をコピーすることなく復元される。
1つ又は複数の態様に関する方法及びシステムもまた、本明細書で説明され、特許請求される。さらに、1つ又は複数の態様に関するサービスもまた、本明細書で説明され、特許請求することができる。
本明細書で説明される技術を通して、さらなる特徴及び利点が実現される。他の実施形態及び態様は、本明細書で詳細に説明され、特許請求された態様の一部とみなされる。
1つ又は複数の態様は、本明細書の結論部において具体的に指摘され、明確に特許請求される。1つ又は複数の態様の上記及び他の目的、特徴、並びに利点は、添付図面と関連して用いられる以下の詳細な説明から明らかである。
本発明の1つ又は複数の態様を組み込み、用いるためのコンピューティング環境の1つの例を示す。 本発明の1つ又は複数の態様による、図1のプロセッサのさらなる詳細を示す。 本発明の1つ又は複数の態様に従って用いられる命令実行パイプラインの一例のさらなる詳細を示す。 本発明の1つ又は複数の態様による、図1のプロセッサのさらなる詳細を示す。 本発明の1つ又は複数の態様による、呼び出し元保存レジスタを格納する一例を示す。 本発明の1つ又は複数の態様による、呼び出し先保存レジスタを格納する一例を示す。 本発明の1つ又は複数の態様による、アーキテクチャ上のレジスタの物理レジスタへのマッピングの一例を示す。 本発明の1つ又は複数の態様による、バルク保存(bulk save)要求と関連した処理の一例を示す。 本発明の1つ又は複数の態様による、バルク復元(bulk restore)要求と関連した処理の一例を示す。 本発明の1つ又は複数の態様に従って用いられる、レジスタ・リネーム・テーブル、複数のスナップショット、及び物理リネーム・ファイルの一例を示す。 本発明の1つ又は複数の態様に従って用いられる、レジスタ・リネーム・テーブル、複数のスナップショット、及び物理リネーム・ファイルのさらなる例を示す。 本発明の1つ又は複数の態様による、スナップショットをロールバックする一例を図形的に示す。 本発明の1つ又は複数の態様による、スナップショットをロールバックする別の例を図形的に示す。 本発明の1つ又は複数の態様に従って用いられるスナップショット・スタックの一例を示す。 本発明の1つ又は複数の態様による、Spill Multiple(複数スピル)命令の一例を示す。 本発明の1つ又は複数の態様による、Reload Multiple(複数再ロード)命令の一例を示す。 本発明の1つ又は複数の態様による、バルク復元要求と関連した処理の別の例を示す。 本発明の1つ又は複数の態様による、バルク復元要求と関連した処理のさらに別の例を示す。 本発明の1つ又は複数の態様による、スナップショットを再使用する一例を図形的に示す。 本発明の1つ又は複数の態様による、復元スナップショットの管理と関連した処理の例を示す。 本発明の1つ又は複数の態様による、復元スナップショットの管理と関連した処理の例を示す。 本発明の1つ又は複数の態様による、復元スナップショットの管理と関連した処理の例を示す。 本発明の1つ又は複数の態様による、復元スナップショットの管理と関連した処理の例を示す。 本発明の1つ又は複数の態様による、復元スナップショットの管理と関連した処理の例を示す。 本発明の1つ又は複数の態様による、復旧(recovery)及び/又は復元(restoration)のための共有スナップショットを用いて復旧を実行する一例を示す。 本発明の1つ又は複数の態様による、メモリ変更をチェックし、随意的に復旧する実施形態を示す。 本発明の1つ又は複数の態様による、メモリ変更をチェックし、随意的に復旧する実施形態を示す。 本発明の1つ又は複数の態様による、メモリ変更をチェックし、随意的に復旧する実施形態を示す。 本発明の1つ又は複数の態様による、一致しないSpill Multiple/Reload Multipleの対と関連した処理の一例を示す。 本発明の1つ又は複数の態様による、関連したインジケータを有するデータ・キャッシュ内のエントリの一例を示す。 本発明の1つ又は複数の態様による、図30に示されるインジケータと関連した処理の例を示す。 本発明の1つ又は複数の態様による、図30に示されるインジケータと関連した処理の例を示す。 本発明の1つ又は複数の態様による、図30に示されるインジケータと関連した処理の例を示す。 本発明の1つ又は複数の態様による、レジスタ復元と関連した処理の例を示す。 本発明の1つ又は複数の態様による、レジスタ復元と関連した処理の例を示す。 本発明の1つ又は複数の態様による、トランザクション・メモリ及び復元と関連した処理の例を示す。 本発明の1つ又は複数の態様による、Transaction Begin(トランザクション開始)命令の一例を示す。 本発明の1つ又は複数の態様による、トランザクション・メモリ及び復元と関連した処理の態様を示す。 本発明の1つ又は複数の態様による、トランザクション・メモリ及び復元と関連した処理の態様を示す。 本発明の1つ又は複数の態様による、トランザクション・メモリ及び復元と関連した処理の態様を示す。 本発明の1つ又は複数の態様による、メモリ変更を追跡するために用いられる技術の例を示す。 本発明の1つ又は複数の態様による、メモリ変更を追跡するために用いられる技術の例を示す。 本発明の1つ又は複数の態様による、メモリ変更を追跡するために用いられる技術の例を示す。 本発明の1つ又は複数の態様による、メモリ変更を追跡するために用いられる技術の例を示す。 本発明の1つ又は複数の態様による、復元要求を処理する一例を示す。 本発明の1つ又は複数の態様による、コンテキスト・スイッチと関連した処理の例を示す。 本発明の1つ又は複数の態様による、コンテキスト・スイッチと関連した処理の例を示す。 本発明の1つ又は複数の態様による、コンテキスト・スイッチと関連した処理の例を示す。 本発明の1つ又は複数の態様による、Transaction Begin命令の実行に基づくスナップショットの管理と関連した処理の一例を示す。 本発明の1つ又は複数の態様による、レジスタ保存表示と関連した処理の一例を示す。 本発明の1つ又は複数の態様による、coalescing store/load(ストア/ロード合体)命令と関連した処理の例を示す。 本発明の1つ又は複数の態様による、coalescing store/load命令と関連した処理の例を示す。 本発明の1つ又は複数の態様に従って用いられる、ライトバック論理を含むストア・キューの一例を示す。 本発明の1つ又は複数の態様による、ライトバック論理の処理の例を示す。 本発明の1つ又は複数の態様による、ライトバック論理の処理の例を示す。 本発明の1つ又は複数の態様による、復旧バッファの一例を示す。 本発明の1つ又は複数の態様による、復旧バッファを含むプロセッサの一例を示す。 本発明の1つ又は複数の態様による、レジスタ割り当て要求と関連した処理の例を示す。 本発明の1つ又は複数の態様による、レジスタ割り当て要求と関連した処理の例を示す。 本発明の1つ又は複数の態様による、コンピューティング環境内の処理を容易にする態様の一例を示す。 本発明の1つ又は複数の態様による、コンピューティング環境内の処理を容易にする態様の一例を示す。 本発明の1つ又は複数の態様を組み込み、用いるためのコンピューティング環境の別の例を示す。 図62のメモリのさらなる詳細を示す。 クラウド・コンピューティング環境の一実施形態を示す。 抽象化モデル層の一例を示す。
1つ又は複数の態様によると、関数呼び出し時に保存及び復元を最適化するための機能が提供され、それにより、処理が改善され、それと関連したコストが低下する。一例において、この機能は、保存/復元のためにレジスタ・リネーム(register renaming)を用いる。
図1を参照して、本発明の1つ又は複数の態様を組み込、用いるためのコンピューティング環境の一実施形態が説明される。一例において、コンピューティング環境は、ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるz/Architectureに基づいている。z/Architectureの1つの実施形態は、その全体が引用により本明細書に組み込まれる非特許文献1に記載されている。z/Architectureは、米国ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。
別の例において、コンピューティング環境は、ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるPower Architectureに基づいている。Power Architectureの1つの実施形態は、その全体が引用により本明細書に組み込まれる非特許文献2に記載されている。Power Architectureは、米国ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。
コンピューティング環境は、これに限定されるものではないが、Intel x86アーキテクチャを含む他のアーキテクチャにも基づき得る。他の例も存在する。
図1に示されるように、例えば、コンピューティング環境100は、例えば汎用コンピューティング・デバイスの形で示されるコンピュータ・システム102を含む。コンピュータ・システム102は、これらに限定されるものではないが、1つ又は複数のバス及び/又は他の接続110を介して互いに結合された、1つ又は複数のプロセッサ又は処理ユニット104(例えば、中央処理ユニット(CPU))、メモリ106(例として、メインメモリ又はストレージと呼ばれる)、及び1つ又は複数の入力/出力(I/O)インターフェース108を含む。
バス110は、メモリ・バス又はメモリ・コントローラ、周辺バス、アクセラレーテッド・グラフィックス・ポート、及び種々のバス・アーキテクチャのいずれかを用いるプロセッサ又はローカル・バスを含む、幾つかのタイプのバス構造のうちのいずれかの1つ又は複数を表す。限定ではなく例としては、このようなアーキテクチャは、業界標準アーキテクチャ(Industry Standard Architecture、ISA)バス、マイクロ・チャネル・アーキテクチャ(Micro Channel Architecture、MCA)、Enhanced ISA(EISA)、Video Electronics Standards Association(VESA)ローカル・バス、及びPeripheral Component Interconnect(PCI)を含む。
メモリ106は、例えば、プロセッサ104のローカル・キャッシュ122に結合され得る、共有キャッシュのようなキャッシュ120を含むことができる。さらに、メモリ106は、1つ又は複数のプログラム又はアプリケーション130、オペレーティング・システム132、及び1つ又は複数のコンピュータ可読プログラム命令134を含むことができる。コンピュータ可読プログラム命令134は、本発明の態様の実施形態の機能を実行するように構成することができる。
コンピュータ・システム102は、例えばI/Oインターフェース108を介して、1つ又は複数の外部デバイス140、1つ又は複数のネットワーク・インターフェース142、及び/又は1つ又は複数のデータ・ストレージ・デバイス144と通信することもできる。例示的な外部デバイスとして、ユーザ端末、テープ・ドライブ、ポインティング・デバイス、ディスプレイ等が挙げられる。ネットワーク・インターフェース142は、コンピュータ・システム102が、ローカル・エリア・ネットワーク(LAN)、汎用広域ネットワーク(WAN)、及び/又は公衆ネットワーク(例えば、インターネット)などの1つ又は複数のネットワークと通信することを可能にし、他のコンピューティング・デバイス又はシステムとの通信を提供する。
データ・ストレージ・デバイス144は、1つ又は複数のプログラム146、1つ又は複数のコンピュータ可読プログラム命令148、及び/又はデータ等を格納することができる。コンピュータ可読プログラム命令は、本発明の態様の実施形態の機能を実行するように構成することができる。
コンピュータ・システム102は、取り外し可能/取り外し不能、揮発性/不揮発性のコンピュータ・システム・ストレージ媒体を含むこと、及び/又はそれに結合することができる。例えば、コンピュータ・システム102は、取り外し不能の不揮発性磁気媒体(典型的には「ハード・ドライブ」と呼ばれる)、取り外し可能な不揮発性磁気ディスク(例えば、「フロッピー・ディスク」)との間の読み出し及び書き込みのための磁気ディスク・ドライブ、及び/又はCD-ROM、DVD-ROM又は他の光媒体などの取り外し可能な不揮発性光ディスクとの間の読み出し及び書き込みのための光ディスク・ドライブを含むこと、及び/又はこれらに結合することができる。コンピュータ・システム102と共に他のハードウェア及び/又はソフトウェア・コンポーネントを使用できることを理解されたい。例として、これらに限定されるものではないが、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部のディスク・ドライブ・アレイ、RAIDシステム、テープ・ドライブ、及びデータ・アーカイブ・ストレージ・システム等が含まれる。
コンピュータ・システム102は、多数の他の汎用又は専用コンピューティング・システム環境又は構成で動作することができる。コンピュータ・システム102と共に使用するのに好適であり得る周知のコンピューティング・システム、環境、及び/又は構成の例として、これらに限定されるものではないが、パーソナル・コンピュータ(PC)システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、手持ち式又はラップトップ型デバイス、マルチプロセッサ・システム、マイクロプロセッサ・ベースのシステム、セット・トップ・ボックス、プログラム可能民生電子機器、ネットワークPC、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、及び、上述のシステム若しくはデバイスのいずれかを含む分散型クラウド・コンピューティング環境等が含まれる。
図2を参照して、プロセッサ104の1つの例に関するさらなる詳細が説明される。プロセッサ104は、命令を実行するために用いられる複数の機能コンポーネントを含む。これらの機能コンポーネントは、例えば、実行される命令をフェッチするための命令フェッチ・コンポーネント150;フェッチされた命令をデコードし、デコードされた命令のオペランドを取得するための命令デコード・ユニット152;デコードされた命令を実行するための命令実行コンポーネント154;必要に応じて、命令実行のためにメモリにアクセスするためのメモリ・アクセス・コンポーネント156;及び実行した命令の結果を提供するためのライトバック・コンポーネント160を含む。本発明の態様によると、これらのコンポーネントの1つ又は複数を用いて、1つ又は複数のレジスタ復元操作及び/又は命令166、及び/又はそれと関連した他の操作/命令を実行することができる。
一実施形態において、プロセッサ104は、機能コンポーネントの1つ又は複数により用いられる1つ又は複数のレジスタ168も含む。プロセッサ104は、本明細書で与えられる例と比べて、付加的な、より少ない及び/又は他のコンポーネントを含むことができる。
図3を参照して、プロセッサ104の実行パイプラインに関するさらなる詳細が説明される。パイプラインの種々の処理段階が示され、本明細書で説明されるが、本発明の態様の趣旨から逸脱することなく、付加的な、より少ない及び/又は他の段階を用い得ることが理解されるであろう。
図3を参照すると、一実施形態において、命令が命令キューからフェッチされ(170)、命令の分岐予測172及び/又はデコード174を実行することができる。デコードされた命令を、一緒に処理される命令のグループ176に付加することができる。グループ化した命令は、あらゆる依存を判断し、リソースを割り当て、命令/操作のグループを適切な発行キューにディスパッチするマッパー(mapper)178に与えられる。例として、分岐、ロード/ストア、浮動小数点、固定小数点、ベクトル等を含む異なるタイプの実行ユニットに対して1つ又は複数の発行キューがある。発行段階180の間、命令/操作は、適切な実行ユニットに発行される。そのソースを取り出すために、あらゆるレジスタを読み取り(182)、実行段階184の間、命令/操作を実行する。示されるように、実行は、例として、分岐、ロード(LD)又はストア(ST)、固定小数点演算(FX)、浮動小数点演算(FP)、又はベクトル演算(VX)に対するものであり得る。ライトバック段階186の間、あらゆる結果が適切なレジスタに書き込まれる。その後、命令は完了する(188)。割り込み(interruption)又はフラッシュ190がある場合、処理は、命令フェッチ170に戻り得る。
さらに、本発明の1つ又は複数の態様によると、レジスタの保存/復元の際に1つ又は複数の態様において用いられるレジスタ・リネーム・ユニット192が、デコード・ユニットに結合される。
図4を参照して、プロセッサに関する付加的な詳細が説明される。一例において、プロセッサ104のようなプロセッサは、例として、予測ハードウェア、レジスタ、キャッシュ、デコーダ、命令シーケンス・ユニット、及び命令実行ユニットを含むことができるパイプライン・プロセッサ(pipelined processor)である。予測ハードウェアは、例えば、ローカル分岐履歴テーブル(BHT)105a、グローバル分岐履歴テーブル(BHT)105b、及びブローバル・セレクタ105cを含む。予測ハードウェアは、次の命令フェッチのためのアドレスを有する命令フェッチ・アドレス・レジスタ(IFAR)107を通じてアクセスされる。
同じアドレスが、命令キャッシュ109にも与えられ、これらは「フェッチ・グループ」と呼ばれる複数の命令をフェッチすることができる。ディレクトリ111が、命令キャッシュ109と関連付けられる。
キャッシュ及び予測ハードウェアは、同じアドレスでほぼ同時にアクセスされる。予測ハードウェアが、フェッチ・グループ内の命令に使用可能な予測情報を有する場合、その予測は命令シーケンス・ユニット(ISU)113に転送され、次に、実行のために命令を実行ユニットに発する。予測を用いて、分岐ターゲット計算115及び分岐ターゲット予測ハードウェア(リンク・レジスタ予測スタック117a及びカウント・レジスタ・スタック117b等)と共にIFAR107を更新することができる。予測情報が利用可能でないが、1つ又は複数の命令デコーダ119がフェッチ・グループ内に分岐命令を見出した場合、そのフェッチ・グループに対して、予測が作成される。予測分岐は、分岐情報キュー(BIQ)125内など、予測ハードウェアないに格納され、ISU113に転送される。
分岐実行ユニット(BRU)121は、ISU113によってこれに発行された命令に応答して動作する。BRU121は、条件レジスタ(CR)ファイル123に対する読み取りアクセス権を有する。分岐実行ユニット121は、分岐予測の成功を判断するために、分岐情報キュー125内の分岐走査論理により格納される情報に対するさらなるアクセス権を有し、マイクロプロセッサによりサポートされる1つ又は複数のスレッドに対応する命令フェッチ・アドレス・レジスタ(IFAR)107に動作可能に結合される。少なくとも1つの実施形態によると、BIQエントリが、識別子、例えば分岐タグ(BTAG)と関連付けられ、これにより識別される。BIQエントリと関連した分岐が完了すると、そのようにマーク付けされる。BIQエントリは、キュー内に維持され、それらが完了した分岐と関連した情報を含むものとしてマーク付けされるとき、最も古いキュー・エントリ(単数又は複数)が連続的に割り当て解除される。BRU121は、BRU121が分岐予測ミス(misprediction)を発見すると、予測器の更新を引き起こすようにさらに動作可能に結合される。
命令が実行されると、BRU121は、予測が間違っているかどうかを検知する。予測が間違っている場合、予測は更新される。この目的のため、プロセッサは、予測器更新論理127も含む。予測器更新論理127は、分岐実行ユニット121からの更新表示に応答しており、ローカルBHT105a、グローバルBHT105b及びグローバル・セレクタ105cの1つ又は複数におけるアレイ・エントリを更新するように構成される。予測器ハードウェア105a、105b及び105cは、命令フェッチ及び予測演算により用いられる読み取りポートとは異なる書き込みポートを有することができ、又は単一の読み取り/書き込みポートを共有することができる。予測器更新論理127はさらに、リンク・スタック117a及びカウント・レジスタ・スタック117bに動作可能に結合することができる。
ここで条件レジスタ・ファイル(CRF)123を参照すると、CRF123は、BRU121により読み取りアクセス可能であり、これらに限定されるものではないが、固定小数点ユニット(FXU)141、浮動小数点ユニット(FPU)143、及びベクトル・マルチメディア延長ユニット(VMXU)145を含む実行ユニットにより書き込まれ得る。条件レジスタ論理実行ユニット(CRL実行)147(CRUとも呼ばれる)及び専用レジスタ(SPR)処理論理149は、条件レジスタ・ファイル(CRF)123に対する読み取り及び書き込みアクセス権を有する。CRU147は、CRFファイル123内に格納された条件レジスタに対して論理演算を実行する。FXU141は、CRF123に対する書き込み更新を実行することができる。
プロセッサ104は、ロード/ストア・ユニット151、及び種々のマルチプレクサ153及びバッファ155、並びにアドレス変換テーブル157、及び他の回路をさらに含む。
情報を格納するためにハードウェア・レジスタを用いるプログラム(アプリケーションとも呼ばれる)が、プロセッサ104内で実行されている。例えば、関数、サブルーチン、又は他のタイプのルーチンのようなルーチンを呼び出すプログラムが、呼び出し元により用いられるレジスタの保存と、呼び出し先からの戻り時のそれらのレジスタの復元とを担当する。同様に以下のコードに示されるように、呼び出し先は、それが使用するレジスタの保存/復元を担当する。
最初に、以下は、レジスタのセットを保存し、後にそれらを復元する呼び出し元の例示的なコードである。
Figure 0007046098000001
上記の呼び出し元のコードにおいて、図5を参照すると、呼び出し元保存レジスタが格納される(ステップ200)。例えば、これは、例えば、Store Multiple命令(STMG)を用いる呼び出し元保存レジスタのバルク保存(bulk save)を含む。随意的に、関数パラメータをロードし(例えば、ロード命令LGFIを用いて)(ステップ202)、例えば分岐命令(BRASL)を用いて、関数呼び出しを実行する(ステップ204)(すなわち、呼び出し先が呼び出される)。関数から戻ると、呼び出し元保存レジスタを復元する(ステップ206)。一例において、これは、Load Multiple命令(LMG)を用いるバルク復元(bulk restore)である。(本明細書で用いられる場合、バルク保存又はバルク・ストアは、1つ又は複数のレジスタのストアを含み、バルク復元又はバルク再ロードは、1つ又は複数のレジスタのロードを含む。一例において、バルク保存(ストア)及びバルク復元(再ロード)は、関数呼び出しに関連したレジスタの保存/復元に関連する。特定の例として、バルク保存(ストア)及びバルク復元(再ロード)は、プログラム・スタック上に値を保存し、プログラム・スタックから、値を格納した同じレジスタに値を復元することに関連する。)
Store Multiple命令の一例において、命令により指定される汎用レジスタRで始まり、命令により指定される汎用レジスタRで終了する、汎用レジスタのセットのビット位置の内容が、ストレージ領域内に、第2のオペランド・アドレスにより指定される記憶位置(例えば、Bにより指定されるレジスタの内容+Dの内容により与えられ、B及びDの両方とも命令により指定される)から始まり、必要な数の記憶位置を通じて配置される。一例において、汎用レジスタのビット位置32~63は、第2オペランド・アドレスから始まる一連の4バイトのフィールドに格納される。汎用レジスタは、汎用レジスタRで始まり、汎用レジスタRまで(このレジスタを含む)そのレジスタ番号の昇順に格納され、汎用レジスタ0は、汎用レジスタ15の後に続く。
Load Multiple命令の一例において、命令により指定される汎用レジスタRから始まり、命令により指定される汎用レジスタRで終了する、汎用レジスタのセットのビット位置が、ストレージから、第2オペランド・アドレスにより指定される記憶位置(例えば、Bにより指定されるレジスタの内容+Dの内容により与えられ、B及びDの両方とも命令により指定される)から始まり、必要な数の記憶位置を通じてロードされる。一例において、汎用レジスタのビット位置32~63は、第2オペランド・アドレスから始まる一連の4バイトのフィールドからロードされ、ビット0~31は、変更されないままである。
次に、以下は、レジスタのセットを保存し、後にそれらを復元する呼び出し先の例示的なコードである。
Figure 0007046098000002
上記の呼び出し先のコードにおいて、図6を参照すると、呼び出し先保存レジスタが格納される(ステップ220)。これは、例えば、プロローグにおいて行われ、例えばStore Multiple命令(例えば、STMG)を介する呼び出し先保存レジスタのバルク保存を含む。次に、処理は、戻りアドレスをもとの呼び出し元にロードすることを含む、処理が、関数本体の一部として実行される(ステップ222)。その後、呼び出し先保存レジスタが復元される(ステップ224)。一例において、これは、エピローグにおいて行われ、例えばLoad Multiple命令(LMG)を介する呼び出し先保存レジスタのバルク復元を含む。
図3に示されるように、保存/復元されるレジスタは、物理レジスタにマッピングされるアーキテクチャ上のレジスタ(architected register)又は論理レジスタとすることができる。図3を参照すると、例えば、アーキテクチャ上のレジスタ300を参照する命令に基づいて、そのアーキテクチャ上のレジスタが、物理レジスタ302と関連付けられる。特に、レジスタ・リネーム論理を用いて、テーブル(又は、他のデータ構造)を検索し、どの物理レジスタがアーキテクチャ上のレジスタに対応するかを判断する。例えば、読み取りアドレスの場合、アーキテクチャ上のレジスタは、テーブル内に見出された物理レジスタと置き換えられ、書き込みアクセスの場合、フリーリストから、新しい物理レジスタが割り当てられる。
1つ又は複数の態様によると、リネーム論理は、プロセッサの1つ又は複数のユニットを要することがある。例えば、プロセッサ・デコード・ユニットは、命令を受け取り;例えば、アーキテクチャ上のレジスタのセットを、フリーリストから取得した物理レジスタに関連付けるルックアップ・テーブルを更新することにより、ターゲット命令をリネームし;ソース命令についてのレジスタ・リネーム・テーブルを更新し;命令又は命令のグループがロールバックをトリガできる場合(例えば、命令が例外を発生させ得るため、又は予測を誤る可能性がある分岐命令のため)、ロールバック・スナップショット(例えば、レジスタ・リネーム・テーブルのコピー)を撮り;例えば例外ハンドラ若しくは新しい分岐ターゲットのためにロールバックを要求するイベントに対応するスナップショットを復元する、又は再実行を引き起こすように適合されたロールバック論理を含む。
さらに、リネーム論理は、デコード・ユニットが受け取った物理レジスタ番号によりアクセスされる物理レジスタ・ファイルを含む実行論理;命令を実行し、結果を指定された物理レジスタに書き込むための論理;及び、例えば分岐予測ミス又は例外の場合には、成功裡の完了又はロールバックを示すための論理を含むことができる。
さらに、命令が完了したことを示す報告を受け取り、スナップショットをそれ以上必要ないものとしてマーク付けし、物理レジスタをフリーリストに付加し、イン・オーダー方式(in-order)のプログラム・カウンタ又は他のイン・オーダー方式の状態を更新する命令完了ユニットが用いられる。
汎用レジスタを用いる例に関して、呼び出し元保存レジスタ及び呼び出し先保存レジスタの保存及び復元が説明されてきたが、浮動小数点レジスタ、ベクトル・レジスタ、ベクトル・スカラー・レジスタ、条件レジスタ、制御レジスタ、及び/又は専用レジスタのような他のレジスタ・タイプ、並びに他のタイプのレジスタを、呼び出し元関数、呼び出し先関数、又はその両方のいずれかにより保存し、復元することができる。
他の付加的な及び/又はより少ないユニット及び/又は論理を用いることもできる。
呼び出し元及び呼び出し先のいずれか又は両方におけるレジスタの保存及び復元は、それがメモリの使用を要するので、コストがかかる。従って、本発明の態様によると、このコストを減らすための機能が与えられる。この機能は、例えば、レジスタ・スナップショットを用いて、レジスタを保存及び復元することを含み、それにより、少なくとも1つの態様において、レジスタを復元する(そして随意的に保存する)際のメモリの使用が回避される。
一例において、バルク・レジスタのストアが認識されると、レジスタ状態の少なくとも一部(例えば、レジスタ・リネーム・マップ、他のレジスタ復元情報、又は他の完全なレジスタ状態の少なくとも一部)のスナップショットを撮る。図8を参照すると、バルク・ストアの要求を取得する(例えば、受け取る、決定する、提供する、取り出す、有する等)(ステップ400)。バルク・ストアは、例えば、複数のレジスタを格納するStore Multiple命令とすることができる。バルク保存が実行され、複数のレジスタの内容がメモリに書き込まれる(ステップ402)。それに基づいて、スナップショットが作成される(ステップ404)。(別の実施形態においては、メモリへの格納は実行されない。)
スナップショットの一例が、図10に示される。図示されるように、物理レジスタ502aのアーキテクチャ上のレジスタ504へのマッピングのスナップショット500aが撮られる。この例において、物理レジスタ45が、アーキテクチャ上のレジスタ0に割り当てられ、物理レジスタ88がアーキテクチャ上のレジスタ11に割り当てられ、物理レジスタ96が、アーキテクチャ上のレジスタ12に割り当てられ、物理レジスタ67が、アーキテクチャ上のレジスタ13に割り当てられ、物理レジスタ38が、アーキテクチャ上のレジスタ14に割り当てられ、そして、物理レジスタ22が、アーキテクチャ上のレジスタ15に割り当てられる。これらの物理レジスタのアーキテクチャ上のレジスタへのマッピングは、スナップショット500aによりキャプチャされる。
物理レジスタ・ファイル506は、各物理レジスタ502について、そのレジスタ内に格納される値505を示す。
一実施形態において、スナップショット識別子508(例えば、ID4)が、スナップショット500aに割り当てられる。さらに、一例において、同じく複数のより古いスナップショット510(例えば、スナップショット2及び3)がある場合もある。
上述のように、バルク保存が実行されることを認識することに基づいて、バルク保存に関係するレジスタのスナップショットが撮られる(例えば、スナップショット500a)。次に、処理は続行し、図11に示されるように、新しい物理レジスタ502bが割り当てられ、関数が実行される。
その後、関数が完了すると、スナップショットを復旧することができる。図9を参照して、バルク復元処理の一例が説明される。最初に、一例において、バルク復元要求を取得する(例えば、受け取る、決定する、提供する、有する、取り出す等)(ステップ450)。バルク復元要求は、例えば、複数のレジスタをロードするLoad Multiple命令とすることができる。対応するスナップショットが利用可能かどうかについて判断する(問い合わせ452)。対応するスナップショットが利用不能である場合、メモリから値を再ロードする(ステップ454)。しかしながら、対応するスナップショットが利用可能である場合、バルク復元がバルク保存と一致するかどうかについて、さらに判断する(問い合わせ456)。つまり、復元されるレジスタが、保存された同じレジスタであるか。それらが同じレジスタである場合、スナップショットを復元する(ステップ458)。付加的に、一例において、復元されたスナップショットを検証する(ステップ460)。これは、図12~図13に図形的に示される。
図12に示されるように、物理レジスタのマッピングは、スナップショットを復旧し520、復元したスナップショットをもたらすことにより、復元される。復元されたスナップショット530は、前に保存された同じアーキテクチャ上のレジスタにマッピングされる。従って、図11~図12を参照すると、r0に割り当てられたp123は、p45と置き換えられ、r11に割り当てられたp23は、p88と置き換えられ、r12に割り当てられたp58は、p96と置き換えられ、r13に割り当てられたp67は、p67と置き換えられ(又は、置き換えは実行されない)、r14に割り当てられたp245は、p38と置き換えられ、r15割り当てられたp14は、p22と置き換えられる。
一例において、図13に示されるように、レジスタのサブセットのみが復旧される。例えば、アーキテクチャ上のレジスタ11~15が復旧されるが、アーキテクチャ上のレジスタ0は復旧されない。
上述のように、スナップショットを復旧する一実施形態において、対応するスナップショットがあるかどうかについて判断する。どのスナップショットが所定の保存/復元の対に対応するかを判断するために、多数の技術を用いることができる。1つの技術は、撮られた最後のスナップショットを記憶することを含む。例えば、store multipleに基づいて、スナップショットを撮り、そのスナップショットの識別子を記憶し、スナップショットを利用可能なものとしてマーク付けする。次に、別のstore multipleが実行される場合、別のスナップショットを撮り、スナップショットidをインクリメントし、その識別子を記憶する等。さらに、バルク復元に基づいて、最後のバルク保存のスナップショットidを復旧し、スナップショットを利用不能なものとしてマーク付けする。
単一のスナップショットの追跡は、簡略化した設計をもたらし、リーフ関数(leaf function)(すなわち、それらの関数は別の関数を呼び出さない)に対して迅速なスナップショット・ベースのレジスタ復元を可能にする。リーフ関数は、全ての関数の相当な割合(一般的には、約50%)であり、それらは最も短い関数の間でもあり、従って、保存及び復元処理は、こうした関数のための実行時間のかなりの割合を表し、それは、スナップショットを用いて低減される。
別の技術は、多数のスナップショットを記憶できるスナップショット・スタックを保持することである。図14に示されるように、スタックの先頭(top-of-stack、TOS)ポインタ604により示されるように、スナップショット・スタック600は、最新のスナップショットが上部にある状態で撮られた各スナップショットについて1つの、1つ又は複数のスナップショット識別子(スナップショットID)602を含む。スナップショットIDに加えて、1つ又は複数の実施形態において、スナップショット・スタックは、随意的に、付加的な情報を含むことができる。例えば、レジスタの値は、スナップショットが失われた場合(ステップ454)、又はスナップショットが最新の値を含むかどうかを確認する必要がある場合(ステップ460)を含む多数の状況において、メモリに保存される(ステップ402)。従って、付加的な情報は、スナップショットが・レジスタの値(単数又は複数)がメモリ内に格納される場所のアドレス又はアドレス範囲606を含むことができる。
さらに、別の実施形態において、スナップショットは、スナップショット内に含まれるレジスタの全てについて有効ではないが、代わりにレジスタのサブセットについてのみ有効であることがある。従って、一例において、スナップショット・スタックは、各スナップショットについて、スナップショットについて有効であるレジスタを提供する始端レジスタの表示608及び終端レジスタの表示610を含むことができる。
さらに、有効インジケータ612を随意的に提供して、スナップショットが有効かどうかを示すことができる。他の実施形態においては、他の付加的な及び/又はより少ない情報を提供することができる。
スナップショット・スタックを管理するために、スタック先頭ポインタが調整される。例えば、スナップショットの作成に基づいて、新しいエントリがスタックに付加され、スタック先頭ポインタがインクリメントされる。さらに、スナップショットを復元するとき、スタック先頭ポインタに対応するエントリがスタックから除去され、スタック先頭ポインタがデクリメントされる。例えば、分岐予測ミス又は例外がある場合、複数のエントリが除去されることがあり、スタック先頭ポインタが適切に調整される。
対応するStore Multiple/Load Multipleの対を判断するための他の技術を用いることもできる。
一態様において、レジスタの保存及び復元は、Store Multiple命令又はLoad Multiple命令(又は類似の命令)の実行に基づいている。しかしながら、これらの命令は、様々な目的で用いることができ、従って、チェック及び/又は発見的手法(heuristics)を用いて、正しい実行が保存されることを保証することができる。つまり、store/loadの対を判断し、次に、本発明の保存及び復元の態様を用いて、それらを最適化することができる。一致しないストア/ロードの対は、本発明の保存及び復元の態様を用いて最適化されない。従って、処理を容易にし、例えば、正しい実行を保証するために一致する対を見つけることと関連したチェック又は発見的手法を減らすために、load multiple/store multiple命令とは異なるように挙動する新しい命令を定義する。例えば、本明細書ではSpill Multiple(Spillm)及びReload multiple(Reloadm)と呼ばれる新しい命令を定義し、これらは、スピルと再ロードとの間に生じるメモリに対する修正を考慮しない。つまり、これらの命令の1つのアーテキクチャ上の定義によると、Spillm/Reloadmのユーザは、スピルと再ロードとの間のこれらのレジスタに対応するインメモリ値を修正してはならない。従って、インメモリ・イメージが修正される場合、新しい命令は、その値を考慮する義務はない。
図15を参照して、Spill Multiple命令の一例が説明される。一例において、Spill Multiple(Spillm)命令700は、spill multiple操作を示すオペレーション・コード(オペコード)を含む少なくとも1つのオペレーション・コード・フィールド702と、第1のレジスタ(R)フィールド(D)704と、第2のレジスタ(R)フィールド706と、ベース・フィールド(B)708と、変位(displacement)フィールド(D)710(例えば、12ビットの符号なしバイナリ整数)とを含む。別の実施形態において、変位フィールドは、複数のフィールド(例えば、DL及びDH)を含むことができ、例えば、20ビットの符号なしバイナリ整数(他のサイズも可能である)とすることができる。一例において、フィールドの各々は、互いに分離している。しかしながら、他の例において、フィールドの1つ又複数を結合することもできる。さらに、一例において、フィールドと関連した下付きの数字は、そのフィールドが対応するオペランドを示す。例えば、下付き数字1を有するフィールドは、第1のオペランドに対応し、下付き数字2を有するフィールドは、第2のオペランドに対応する等である。
動作において、後の復元のために、汎用レジスタRから始まり、汎用レジスタRで終了する汎用レジスタのセットのビット位置の内容が保存される。第2オペランド・アドレス(例えば、Bで示されるレジスタの内容+D又はDL+DHの内容により与えられる)で指定される記憶位置から始まり、必要な数の記憶位置を通じて連続するストレージ領域を、レジスタの一部又は全てを格納するためのバッファとして用いることができる。対応するバッファ・ストレージ・アドレスは、対応する復旧アドレスのために指定される。一例において、汎用レジスタのビット位置32~63の内容は、第2のオペランド・アドレスから始まる一連の4バイト・フィールドに格納される。後の復元のために、汎用レジスタが保存される。後の復元のために、Spillmの別の型式においては、後の復元のために、汎用レジスタのビット位置0~63の内容が保存される。レジスタ毎の4バイト(又は、他の実施形態においては、8バイト)に対応するバッファは、用いることができ、アクセス可能である。バッファの内容は、未定義であり、システムの世代ごとに変化し得る。別の実施形態において、バッファは定義され、対応するStore Multiple命令の定義に従ったストレージ領域の値に対応する値を含む。
さらに、動作において、一態様によると、物理レジスタの指定されたアーキテクチャ上のレジスタへのマッピングを有するように、命令により指示される1つ又は複数のレジスタのスナップショットが撮られる。
図16を参照して、Reload Multiple命令の一例が説明される。一例において、Reload Multiple(Reloadm)命令750は、reload multiple操作を示すオペレーション・コード(オペコード)を含む少なくとも1つのオペレーション・コード・フィールド752と、第1のレジスタ(R)フィールド754と、第2のレジスタ(R)フィールド756と、ベース・フィールド(B)758と、変位フィールド(D)760(例えば、12ビットの符号なしバイナリ整数)とを含む。別の実施形態において、変位フィールドは、複数のフィールド(例えば、DL及びDH)を含むことができ、例えば、20ビットの符号なしバイナリ整数とすることができる(他のサイズも可能である)。一例において、フィールドの各々は、互いに分離している。しかしながら、他の例では、フィールドの1つ又複数を結合することもできる。さらに、一例において、フィールドと関連した下付きの数字は、そのフィールドが対応するオペランドを示す。例えば、下付き数字1を有するフィールドは、第1のオペランドに対応し、下付き数字2を有するフィールドは、第2のオペランドに対応する等である。
動作において、本発明の態様によると、汎用レジスタRから始まり、汎用レジスタRで終了する汎用レジスタのセットのビット位置は、最新のスナップショットから復元され、後のReload Multiple命令のために、最新のスナップショットを除去し、前のスナップショットを最新のスナップショットとして利用可能にする。一例において、汎用レジスタのビット位置32~63は、前に格納された値から再ロードされ、ビット0~31は変更されないままである。別の実施形態において、汎用レジスタのビット位置0~63は、前に格納された値から復元される。汎用レジスタは、汎用レジスタRから始まり、汎用レジスタRまで(このレジスタを含む)そのレジスタ番号の昇順に格納され、汎用レジスタ0は、汎用レジスタ15の後に続く。
スナップショットが利用可能でない場合、レジスタは、第2のオペランド・アドレス(例えば、Bで指定されるレジスタの内容+D(又はDL+DH)の内容により与えられる)により指定される記憶位置から始まるストレージからロードされる。
この操作の結果は、以下を含む様々な理由で定義されないことがある。すなわち:前のSpill Multiple命令が、復元のために準備される同じレジスタ範囲を指定しなかった。(別の実施形態において、前のSpill Multiple命令が復元のために準備されるレジスタ範囲の上位集合を指定しなかった場合、結果は定義されない);Reload Multiple命令が同じバッファを指定しない(一実施形態において、これは同じアドレスとなる。別の実施形態においては、これは、レジスタのサブセットが復元されたとき、調整されたアドレスとなる);又は、バッファが介入する命令により修正されたなど。
Reloadmを用いて、一実施形態においては、Reloadmのアーキテクチャ上の定義によれば、ユーザは、それらのレジスタに対応する格納されたデータを修正してはならないので、スナップショットは検証されない(図9におけるように)。従って、図17に示されるように、スナップショットの復元の後にスナップショットの検証は存在しない。
例えば、図17を参照して説明されるように、バルク復元要求(例えば、Reloadm命令)を取得する(例えば、受け取る、決定する、提供する、有する、取り出す等)(ステップ800)。対応するスナップショットが利用可能であるかどうかを判断する(問い合わせ802)。この判断は、最後のスナップショットidを記憶する、スナップショット・スタックを用いる等の上述の技術、及び/又は他の技術を用いて行われる。
対応するスナップショットが利用可能でない場合、例えば、Load Multiple又は同様の命令を用いて、メモリから値を再ロードする(ステップ804)。しかしながら、対応するスナップショットが利用可能である場合、バルク復元がバルク保存(例えば、Spillmにより実行される)と一致するかどうかについてさらに判断する(問い合わせ806)。つまり、復元されるべきレジスタは、保存された同じレジスタであるか。同じレジスタである場合、スナップショットを復元する(ステップ808)。例えば、物理レジスタのアーキテクチャ上のレジスタへのマッピングが、最後のスナップショットを反映するように変更される。Load Multipleが用いられたときと同様に、復元においてReloadmが用いられたので、スナップショットは検証されない。
さらに、一例において、Reloadm命令は、前のSpillm命令と一致するようアーキテクチャ上保証されるので、図18に示されるように、照合検証を抑止することもできる。より具体的には、こうした一致がプログラマーにより保証されないときに未定義の結果を伴うペナルティにおいて、Spillm及びReloadmの対応する対を一致させるのは、プログラマーの責任である。この実施形態において、バルク復元要求(例えば、Reloadm)を取得し(例えば、受け取り、決定し、提供し、有し、取り出し等)(ステップ820)、対応するスナップショットが利用可能かどうかについて判断する(問い合わせ822)。対応するスナップショットが利用可能でない場合、(例えば、Load Multipleを用いて)メモリから値を再ロードする(ステップ824)。他の場合には、スナップショットを復元する(ステップ826)(問い合わせ806に対応する問い合わせは実行されない)。
一実施形態において、従来のstore multiple及びload multipleバルク要求によるバルク保存/復元のためのサポート(例えば、z/ArchitectureによるSTMG及びLMG命令を用いる、又は例示的な実施形態における、Power ISAにおける、それぞれ、STM及びLM-又はSTMW及びLMW並びにSTMD及びLMD命令を用いて)を、少なくとも1つの実施形態において、新しいSpillm/Reloadmファシリティと結合することができる。こうした実施形態によれば、従来のISA(命令セット・アーキテクチャ)定義に従ったコードは加速させ得るが、従来の命令定義とのアーキテクチャ上のコンプライアンスの順守を保証するために付加的なチェックを用いる一方で、本発明の態様による新しいSpillm/Reloadm命令を用いるコードのチェックが低減するため、さらに高い性能を提供する。
本発明の別の態様によると、スナップショットは、隣接するレジスタ復元ポイント間で共有することができる。これらのスナップショットは、例として、レジスタ・リネーム・マップ、他のレジスタ復元情報、又は完全なレジスタ状態の少なくとも一部が撮られる。
関数呼び出しは、一致したレジスタ・スピル及びレジスタ再ロードの対の2つのセット(例えば、STMG及びLMG、又はSpillm及びReloadm)、すなわち、呼び出し側における呼び出し元保存レジスタの保存と関連付けられたもの、及び、呼び出される関数における呼び出し先保存レジスタの保存と関連付けられる別のものと関連付けられることが多い。スピル(すなわち、複数のアーキテクチャ上のレジスタの保存)は、通常、動的に近接して実行され、同様に、レジスタの復元又は再ロードもまた、通常、動的に近接している。さらにレジスタは、相互排他的であり、第2のスピル操作により保存されるレジスタは、一般的に、第1のスピルと第2のスピルとの間コードにより修正されない。疑似コード記法における例示的なコードは、以下の通りである。
Figure 0007046098000003
上記に基づいて、本発明の態様によると、レジスタ復元スナップショットの少なくとも部分を、スピル操作(例えば、Spillm命令)の動的に隣接するインスタンスの間で共有することができる。一例において、プロセッサは、呼び出し元関数のr10~r15及び呼び出し先関数のr16~r20の両方を復元するために用いられるレジスタ状態の単一のスナップショットを含む復元スナップショットを作成することができる。保存したレジスタの範囲は、隣接している必要はないことに留意されたい。
これを達成するため、一実施形態においては、復元スナップショットは、2つの別個の記録、すなわちスピルが生じたアドレス及び復元の際に用いられるレジスタ・スナップショットを含む。レジスタ・スナップショットは共有されるが、各々のSpillm/Reloadmの対について別個のアドレスの値が保持持される。:<アドレス,スナップショット-ID>
本発明の態様によると、プロセッサは、最後の復元スナップショット以来書き込まれていないレジスタ値のビットマップと共に、撮られる最後の復元スナップショット(複数のスピル操作により参照され得るレジスタを含む)への参照を保持する。従って、新しい復元スナップショットが撮られるとき、スナップショットが撮られるレジスタ範囲が最後の復元スナップショット以来変更されていない場合、現在のスピル操作は、前の復元スナップショットを再利用することができる。他の場合には、新しい復元スナップショットを作成することができる。
スナップショットを共有するための命令デコード及びスナップショット論理の一例が、以下に与えられる。:
Figure 0007046098000004

図19に示されるように、一実施形態において、将来のスナップショット4は、スナップショット3と同じであるので、スナップショット4を撮らず、スナップショット3が再利用される。このことは、スナップショット4の周りの点線及び撮られた最後のスナップショットの表示により示され、バルク保存スナップショット900は3に設定される。
図20~図24を参照して、本発明の1つ又は複数の態様による、復元スナップショットの管理に関するさらなる詳細が説明される。図20~図24において、スナップショットは、復元スナップショットを指し、すなわち、1つ又は複数のバルク保存(例えば、Spillm及び/又はStore Multiple)の実行に基づいて撮られるスナップショットである。最初に、図20を参照して、復元スナップショットの共有の一実施形態が説明される。この実施形態において、snapshot_regsが、復元スナップショット内に含まれるそれらのレジスタに設定される(ステップ1000)。例えば、1つ又は複数のSpillm又はStore Multiple命令内に含まれるもののような、含まれるレジスタを判断し、それらのレジスタの表示が、snapshot_regsで与えられる。
前のスナップショットが使用可能かどうかについてチェックする(ステップ1002)。これは、現在のスナップショットについて指定されたレジスタが、そのスナップショットが撮られて以来、前のスナップショットから修正されていないレジスタのみを含むかどうかを判断することを含む。Unmodified_regsは、最後のスナップショット以来、どのレジスタも修正されていないことを追跡するために用いられる。一例において、prev_snapshot_usableは、現在のスナップショットについてのスナップショット・レジスタ及び修正されていないレジスタの共通集合、すなわち、(snapshot_regs&unmodified_regs)が、現在のスナップショットについての全てのレジスタを含むか、すなわち、snapshot_regsと同一である(すなわち、==)という表示に設定される。snapshot_regs内に含まれる修正されたレジスタがない場合、前のスナップショットが使用可能である。前のスナップショットが使用可能である場合(問い合わせ1004)、this_snapshot_IDは、前のスナップショット識別子、すなわちprev_snapshot_IDの識別子と等しくなるように設定される(ステップ1006)。
しかしながら、前のスナップショットが使用可能でない場合(問い合わせ1004)、別のスナップショットが撮られ、this_snapshot_IDが更新される(例えば、1だけインクリメントされる)(ステップ1010)。さらに、どのレジスタも修正されていないように初期化されるので、unmodified_regsは、レジスタの全てを含むように設定される(ステップ1012)。さらに、prev_snapshot_IDが、this_snapshot_IDと等しくなるように設定され、その結果、このスナップショットは、さらなる使用のために記憶される(ステップ1014)。
さらに別の実施形態において、図21を参照すると、命令により修正されるレジスタが追跡される。一例において、命令が1つ又は複数のレジスタの内容を変更するかどうかを判断する(問い合わせ1020)。1つ又は複数のレジスタが命令により修正される場合、それらのレジスタを追跡する(ステップ1022)。例えば、unmodified_regsは、修正されたそれらの1つ又は複数のレジスタを排除するように設定される(例えば、unmodified_regs:=unmodified_regs AND NOT regs_changed_by instruction)。unmodified_regsの更新の後、又は命令がいずれのレジスタも変更しない場合(問い合わせ1020)、この処理は完了する(ステップ1024)。
上記に加えて、さらに別の実施形態において、イベント(例えば、フラッシュ、分岐、予測ミス、例外等)に起因して、命令パイプラインが、前のポイントにリワインドする(rewind)場合、新しいスナップショットが強制される。図22を参照してフラッシュ/分岐予測ミス/例外に起因するスナップショットの強制と関連した処理の一例が説明される。この例において、prev_snapshot_idは、共有できる前のスナップショットがないことを示すNONEに設定され(ステップ1030)、unmodified_regsは、no_regsに設定される(ステップ1032)。つまり、使用可能な前のスナップショットの表示がなく、レジスタは修正されていないと考えられる。
さらに、一例において、図23を参照して説明されるように、命令が、イベント(例えば、フラッシュ、分岐予測ミス、例外等)に起因して前のポイントにリワインドする場合、前のスナップショットへのロールバックを実行することができる。最初に、処理がスナップショットにロールバックすべきかどうかを判断する(問い合わせ1040)。つまり、ロールバックを示唆するイベントが発生したか、そしてロールバックすべき適切なスナップショットがあるか。スナップショットへのロールバックがある場合、prev_snapshot_IDは、処理がロールバックされるスナップショットであるrollback_snapshot_IDと等しくなるように設定される(ステップ1042)。さらに、unmodified_regsは、この時点で、いずれのレジスタも修正されていないので、レジスタの全てに設定される(ステップ1044)。
問い合わせ1040に戻ると、スナップショットへのロールバックがない場合、prev_snapshot_IDがNONEに設定され(ステップ1046)、修正されていないレジスタは、no register(レジスタなし)に設定される(ステップ1048)。
図24を参照して、フラッシュ、分岐予測ミス、例外等のイベントに起因するスナップショットへのロールバックと関連した処理のさらに別の例が説明される。最初に、処理が最後のスナップショットに又はこれを超えてロールバックするかどうかを判断する(問い合わせ1050)。ロールバックしない場合、この処理は完了し、最後のスナップショットを用いることができる(ステップ1052)。一実施形態において、ロールバック命令の処理を用いて、図21の技術によるロールバック命令の処理が修正されていないレジスタ・セットからレジスタを除去しているとき、修正されていないレジスタ・セットは、真に修正されていないレジスタのサブセットを含み得る。しかしながら、これは、サブセットの保守的定義であり、すなわち、最悪の場合、必要以上に多くのスナップショットがある場合があり、それにより、正確性が保持される。同時に、撮ることができるスナップショットのセットは、図22又は図23によるものより少なく、そこで、各スナップショット要求は、図22の技術に従って及び図23のステップ1046及び1048の選択に従って撮られるスナップショットをトリガする。
他の場合には、処理がスナップショットにロールバックするかどうかを判断する(問い合わせ1054)。スナップショットへのロールバックがある場合、prev_snapshot_IDは、処理がロールバックされるスナップショットであるrollback_snapshot_IDと等しくなるように設定される(ステップ1056)。さらに、unmodified_regsは、この時点で、いずれのレジスも修正されていないので、レジスタの全てに設定される(ステップ1058)。
問い合わせ1054に戻ると、スナップショットへのロールバックがない場合、prev_snapshot_IDは、NONEに設定され(ステップ1060)、修正されていないレジスタは、no registerに設定される(ステップ1062)。
種々の実施形態が上記で与えられたが、特定の状況においてどのスナップショットを用いるかを管理するために、他の実施形態を用いることができる。
本発明のさらに別の態様において、復元のための共有スナップショットを用いることに加えて、復旧において共有スナップショットを用いることができる。本明細書で用いられる場合、復元のためのスナップショットは、バルク保存(例えば、Store Multiple、Spillm等)に基づいて撮られるそれらのスナップショットであり、復旧のためのスナップショットは、例として、分岐又はアドレスが予測ミスされ得る状況のような例外フローへの変更に基づいて撮られるそれらのスナップショットである。
以下の例示的な関数を考える:
Figure 0007046098000005
上記の例において、復旧スナップショットが、条件分岐(bcond)命令及びジャンプ(jsr)命令のために撮られ、復元スナップショットが、Spillm命令のために撮られる。この例では、復元のためのスナップショットの共有(例えば、multiple spill操作)と同様に、復旧スナップショット(例えば、条件分岐及びジャンプのための)を共有することができる。これは、図25を参照してさらに説明される。
図25を参照して、復元スナップショットを共有する一例が説明される。一例において、図25の処理は、例えば、正確な例外(precise exception)を実施する分岐予測ミスの復旧、パイプライン・フラッシュの処理、又は他のこうしたイベントのためにロールバック・ポイントを作成するために、復旧スナップショットが作成されるときに実行される。最初に、復旧スナップショットのためにスナップショットが撮られるレジスタのセットが、レジスタの全て(all_regs())、例えば、正確な例外、分岐予測ミス、又は他のこうしたイベント(例えば、この例では、条件分岐bcond及びサブルーチン呼び出しjsr)の場合に、復旧のために保存されるレジスタの全てと等しくなるように設定される(ステップ1070)。前のスナップショットが使用可能かどうかについてチェックする(ステップ1072)。これは、(一例において、ステップ1070による、全てのレジスタに対応する)現在のスナップショットのために使用されるレジスタが、前のスナップショットが撮られたため、修正されていないレジスタのみを含むかどうかを判断することを含む。一例において、インジケータ、prev_snapshot_usableは、unmodified_regs==all_regsかどうかの表示と等しくなるように設定される。snapshot_regs内に修正されたレジスタがない場合、前のスナップショットが使用可能である。前のスナップショットが使用可能である場合(問い合わせ1074)、this_snapshot_IDは、prev_snapshot_IDと等しくなるように設定される(ステップ1076)(すなわち、前のスナップショットは、現在のスナップショット要求に対してスナップショットを提供するために使用可能である)。他の場合には、前のスナップショットが使用可能でない場合、スナップショットが作成され、this_snapshot_IDが更新される(例えば、1だけインクリメントされる)(ステップ1078)。さらに、unmodified_regsは、全てのレジスタと等しくなるように設定され(ステップ1080)、prev_snapshot_IDは、this_snapshot_IDと等しくなるように設定され(ステップ1082)、その結果、現在のスナップショットは、例えば、少なくとも、本発明の態様の実施形態による復元及び復旧スナップショット要求の1つ又は複数を用いて、将来のスナップショット要求のために再利用することができる。
一実施形態において、復旧スナップショットを共有するために実施される図25の処理は、復元スナップショットを共有するために実施される図20~図24の1つ又は複数の処理と共に動作し得る。一態様において、スナップショットは、復旧のため、復元のため、又は復旧と復元の組み合わせのために共有することができる。一例として、図25の技術は、タイプに関係なく、スナップショットの共有のために用いることができる。
図20~図25は、本発明の態様の実施形態による、レジスタ・ファイルのための単一のスナップショットに関して説明されるが、本明細書で説明されるレジスタ・スナップショット技術は、これらに限定されるものではないが、汎用レジスタ、整数レジスタ、アドレス・レジスタ、データ・レジスタ、固定小数点レジスタ、浮動小数点レジスタ、ベクトル・レジスタ、ベクトル・スカラー・レジスタ、条件レジスタ、述語レジスタ(predicate register)、制御レジスタ、専用レジスタ等を含む、種々のレジスタ・タイプに対して実行することができる。一実施形態によると、単一の実装において、複数のレジスタ・タイプをサポートし、例えば、汎用及びベクトル・レジスタ(又は、レジスタ・タイプの他の組み合わせ)のためのスナップショットを提供することができる。さらに、1つ又は複数の実施形態によると、複数のレジスタ・タイプが、スナップショット機構を共有することができる。1つの例示的な実施形態において、例えば、共有されるベクトル及び浮動小数点レジスタを提供するz/Architectureによる実装において、浮動小数点及びベクトル・レジスタのためのスナップショットを共有することができる。別の例示的な実施形態において、例えば、共有されるベクトル・スカラー、ベクトル及び浮動小数点レジスタを提供するPower ISAによる実装において、浮動小数点レジスタ、ベクトル・レジスタ及びベクトル・スカラー・レジスタのためのスナップショットを共有することができる。他の例も可能である。
本発明のさらに別の態様において、メモリへの変更をイン・オーダー方式で追跡し、必要に応じて、復元されるレジスタが正しいかどうか(すなわち、レジスタを復旧するために用いられるスナップショットが最新の情報を有するかどうか)を判断する。例えば、Store Multiple及びLoad Multiple命令(又は他のこうした命令)が用いられる一実施形態において、レジスタがメモリからではなく、レジスタ復元スナップショットから復元される場合、ロードとストアとの間で生じるメモリへの変更は、store multiple要求により以前に格納された、及び、load multiple命令により再ロードされる値に従って、必要に応じて、復元されるレジスタの正確さを判断することができるようにキャプチャされる。(アーキテクチャ上の定義により、メモリ変更は、プログラマーにより行われてはならず、未定義の挙動をもたらすプログラミング・エラーを表すので、インメモリ・バッファについてのレジスタ復元スナップショットの正しさをこの処理の問題としないSpillm/Reloadmの使用は利点をもたらす。従って、アーキテクチャ上の定義により、これらの命令により用いられるメモリ・バッファに対して、SpillmとReloadmとの間でメモリ変更が行われる場合、こうした変更は、プログラミング・エラーと考えられ、Spillm/Reloadm命令と関連したこの処理ではなくプログラマーが、こうしたエラーの処理に対して責任を負う。)
保存及び復元操作を含むコードの一例が以下に示される。:
Figure 0007046098000006
復元は、関数が入力され、呼び出し元保存レジスタの値が保存された時点における呼び出し元保存済レジスタの値を復元する。しかしながら、STMとLMとの間の命令は、メモリを変更することがあり、そのことは、復元された時に呼び出し元保存レジスタに影響を与える。これは、以下の例において実証される。:
Figure 0007046098000007
メモリからレジスタをロードする代わりに、Load Multipleの受信に基づいて、スナップショットからレジスタを復元することは、レジスタr16に対応するインメモリ・レジスタ復元バッファ位置内に格納される修正された値99ではなく、STM命令における値に対応するスナップショット時点におけるレジスタ内のオリジナルの値を復元する。従って、メモリが変更され、スナップショットの完全性が損なわれるかどうかを判断するために、1つ又は複数の態様が与えられる。
本発明の態様によると、例えば、(1)必要に応じて、復元、チェック及び復旧する、(2)定義上、メモリが保存と復元の間で修正されないSpillm/Reloadmを用いる、及び(3)明示的なチェックなしにあらゆる変更を追跡することを含む、保存操作と復元操作との間の可能なメモリ変更に対処するために、種々の実施形態が与えられる。これらの態様の各々を以下にさらに説明する。
上述のように、レジスタ値がストアとロードとの間でメモリにおいて変更されるシナリオに対処するための一実施形態が、本発明の態様による、復元、チェック及び復旧技術を用いるものである。この態様によると、レジスタ復元要求の受信に基づいて、レジスタ・スナップショットが復元される。さらに、スナップショットからの要求及びレジスタ復元に基づいて、レジスタ保存/復元の対に対応するメモリ・バッファから対応するレジスタ値をロードし、レジスタ・スナップショットから復元した値をメモリ・バッファからロードした値と比較することによって、レジスタ・スナップショットから復元したレジスタの各々をチェックする。不一致が検知された場合、復元されたレジスタは、インメモリ・バッファから復旧される。他の場合には、スナップショットから復元されたレジスタを用いる。有利なことに、レジスタのチェックは、復元された値を用いて計算を実行するのと並行して行うことができ、それにより、チェックが完了していない場合でも、アプリケーション・プログラムが計算を続行することが可能になる。
本明細書で説明されるように、一例において、チェックが失敗した場合、メモリ値を用いて、レジスタの全てが復旧される。これは、図26を参照してさらに説明される。
最初に、復元操作を取得する(例えば、受け取る、提供する、決定する、取り出す、有する等)(ステップ1100)。例えば、Load Multiple命令を受け取る。復元操作が前の保存操作と一致するかどうか(例えば、Load Multipleのレジスタが、Load Multipleと対になったStore Multipleのレジスタと一致するか;アドレスが同一であるか;レジスタのサブセット又はアドレスが同一であるか等)について判断する(問い合わせ1102)。復元されるレジスタが、保存されたものに対応する場合、最後のスナップショットを取得し、これを用いてレジスタを復元する(ステップ1104)。
後続チェックを行い、復元された値の正しさを判断する。後続チェックのためのシリアル化を提供し、スナップショットが復元された後にチェックが開始することを保証し(ステップ1106)、インジケータが、不一致と呼ばれる、メモリからの値の復旧が実行される不一致が、FALSE(偽)に初期化されるかどうかを示す(ステップ1108)。例えば、マイクロ・オペレーションを用いて、選択されたレジスタに対応する格納された値をメモリからロードする(ステップ1110)。そのロードされた値をチェックされる選択されたレジスタの復元された値と比較する(ステップ1112)。比較が失敗した場合、すなわち、ロードされた値が復元された値と一致しない場合、不一致がTRUE(真)に設定される。プロセッサは、不一致インジケータをチェックし、これが比較の失敗を示す場合(問い合わせ1114)、パイプラインをフラッシュし、復元操作の後に、再始動を行う(ステップ1116)。付加的に、復元されるレジスタについての値は、メモリから再ロードされる(ステップ1118)。
一例において、フラッシュを実行して、不一致が検知されたとき、復元されたスナップショットからの値を用いて投機的に実行された全ての命令を、メモリから取得された値により再実行させる。少なくとも1つの実施形態において、フラッシュは、より選択的であり、例えば、復元されたレジスタに応じて、命令のフラッシュ及び再実行のみをもたらすことができる。
しかしながら、問い合わせ1114に戻ると、不一致が比較の成功を示す場合、チェックすべき復元されるレジスタがそれ以上あるかどうかについて判断する(問い合わせ1120)。チェックすべき復元されるレジスタがそれ以上ある場合、処理はステップ1110に進む。他の場合には、処理は完了する。
問い合わせ1102に戻ると、復元要求がストア要求と一致しない場合、レジスタの値をメモリから再ロードする(ステップ1118)。
一実施形態において、図26の1つ又は複数のステップが、復元操作を、他の命令及び/又は他の命令に対応する内部操作に対してアウト・オブ・オーダー方式で実行できる図26のステップの1つ又は複数に対応する1つ又は複数の内部操作(iop)に拡張することによって実施される。本発明の別の態様において、現在の命令に対応して生成されるiopは、互いに対してアウト・オブ・オーダー方式で実行することができる。この実装によると、アウト・オブ・オーダー方式の実行論理は、適切なインターロックを提供し、スナップショットが復元されたときにのみ後続操作が実行され、さらに、不一致が検知されたとき、復元された値に基づいて実行されたあらゆる投機的に実行された命令が無効化され、フラッシュされ、再実行されることを保証する。
別の実施形態において、図26のステップは、レジスタの復元及び検証のための専用回路のステップとして実施される。少なくとも1つの実施形態において、図26に対応する論理は、ここでの技術を実施する回路が復元されたレジスタの検証を続行する間、復元された値を用いて後続命令を実行するのと並行して実行される。さらに、適切なインターロックが提供され、スナップショットが復元されたときのみ後続操作が実行され、さらに、不一致が検知されたとき、復元された値に基づいて実行されたあらゆる投機的に実行された命令が無効化され、フラッシュされ、再実行されることを保証する。
図27を参照して、復元、チェック及び復旧技術の別の実施形態が説明される。この実施形態において、1つ又は複数のレジスタがスナップショットから復元されるが、1つ又は複数の他のレジスタがメモリから復元されることが可能である。図27を参照すると、Load Multipleのような復元操作を取得する(受け取る、提供する、取り出す、決定する、有する等)(ステップ1130)。復元操作が前の保存操作と一致するかどうか(例えば、Load Multipleのレジスタが、Load Multipleと対になったStore Multipleのレジスタと一致するか;アドレスが同一であるか、レジスタのサブセット又はアドレスが同一であるか等)について判断する(問い合わせ1132)。復元されるレジスタが、保存されたものに対応する場合、最後のスナップショットを取得し、これを用いてレジスタを復元する(ステップ1136)。
その後、復元された値の正しさを判断するために、後続チェックを行う。後続チェックのためのシリアル化を提供し、スナップショットが復元された後にチェックが開始することを保証し(ステップ1138)、first_mismatchをNONEに設定する(ステップ1140)。例えば、マイクロ・オペレーションを用いて、選択されたレジスタに対応する格納された値をメモリからロードする(ステップ1142)。そのロードされた値を、チェックする選択されたレジスタの復元された値と比較する(ステップ1144)。比較が失敗した場合、すなわち、ロードされた値が復元された値と一致しない場合、first_mismatchが、比較に失敗したレジスタに設定される。first_mismatchがもはやNONEに等しくない場合、プロセッサは、不一致があると判断する(問い合わせ1146)。パイプラインをフラッシュし、復元操作の後、再始動を行う(ステップ1150)。付加的に、失敗した比較のレジスタ内の値及び後続のレジスタの値を、メモリから再ロードする(ステップ1152)。
一例において、フラッシュをイン・オーダー方式で実行し、不一致が検知された場合、復元されたスナップショットからの値を用いて投機的に実行されたであろう全ての命令が、メモリから取得された値により再実行するようにする。少なくとも1つの実施形態において、フラッシュは、より選択的であり、復元されたレジスタに応じて、又はfirst_mismatchレジスタから始まる、メモリから復旧した復元されたレジスタに応じて、命令のフラッシュ及び再実行のみをもたらすことができる。
しかしながら、問い合わせ1146に戻ると、比較が成功した場合、チェックすべき復元されるレジスタがそれ以上あるかどうかについて判断する(問い合わせ1148)。チェックすべき復元されるレジスタがそれ以上ある場合、処理はステップ1142に進む。他の場合には、処理は完了する。
問い合わせ1132に戻ると、復元要求がストア要求と一致しない場合、レジスタの値をメモリから再ロードする(ステップ1134)。
一実施形態において、図27の1つ又は複数のステップが、復元操作を、他の命令及び/又は他の命令に対応する内部操作に対してアウト・オブ・オーダー方式で実行できる図27のステップの1つ又は複数に対応する1つ又は複数の内部操作(iop)に拡張することによって実施される。本発明の別の態様において、現在の命令に対応して生成されるiopは、互いに対してアウト・オブ・オーダー方式で実行することができる。この実装によると、アウト・オブ・オーダー方式の実行論理は、適切なインターロックを提供し、スナップショットが復元されたときにのみ後続操作が実行され、さらに、不一致が検知されたとき、復元された値に基づいて実行されたあらゆる投機的に実行された命令が無効化され、フラッシュされ、再実行されることを保証する。
別の実施形態において、図27のステップは、レジスタの復元及び検証のための専用回路のステップとして実施される。少なくとも1つの実施形態において、図27に対応する論理は、ここでの技術を実施する回路が復元されたレジスタの検証を続行する間、復元された値を用いて後続命令を実行するのと並行して実行される。さらに、適切なインターロックが提供され、スナップショットが復元されたときのみ後続操作が実行され、さらに、不一致が検知されたとき、復元された値に基づいて実行されたあらゆる投機的に実行された命令が無効化され、フラッシュされ、再実行されることを保証する。
図28を参照して、復元、チェック及び復旧の別の実施形態が説明される。この例において、個々のレジスタを追跡し、スナップショットを用いて復元することができるが、他のものはメモリから復元され得る。
図28を参照すると、最初に、復元操作(例えば、Load Multiple)を取得する(例えば、受け取る、提供する、決定する、取り出す、有する等)(ステップ1160)。復元操作が前の保存操作と一致するかどうか(例えば、Load Multipleのレジスタが、Load Multipleと対になったStore Multipleのレジスタと一致するか;アドレスが同一であるか、レジスタのサブセット又はアドレスが同一であるか等)についての判断する(問い合わせ1162)。復元されるレジスタが、保存されたものに対応する場合、最後のスナップショットを取得し、これを用いてレジスタを復元する(ステップ1166)。その後、復元された値の正しさを判断するために、後続チェックを行う。後続チェックのためのシリアル化を提供し、スナップショットが復元された後にチェックが開始することを保証し(ステップ1168)、不一致セットは空のセットに設定される(ステップ1170)。
例えば、マイクロ・オペレーションを用いて、選択されたレジスタに対応する格納された値をメモリからロードする(ステップ1172)。そのロードされた値を、チェックする選択されたレジスタの復元された値と比較する(ステップ1174)。比較が失敗した場合、すなわち、ロードされた値が復元された値と一致しない場合(問い合わせ1176)、不一致のレジスタを不一致セットに付加する(ステップ1178)。
その後、又は比較が成功した場合(問い合わせ1176)、チェックすべき復元されるレジスタがそれ以上あるかどうかについて判断する(問い合わせ1180)。チェックすべき復元されるレジスタがそれ以上ある場合、処理はステップ1172に進む。他の場合には、不一致セットが空であるかどうかを判断する(問い合わせ1182)。不一致セットが空である場合、処理は完了する。他の場合には、不一致セット内のレジスタは、メモリから値を再ロードする(ステップ1184)。
一例において、ステップ1184による再ロードは、復元命令後、又は復元された値の1つに応じて、命令の幾つか又は全ての再実行をもたらし得る。一実施形態において、これは、完全な又は部分的なフラッシュをイン・オーダー方式で実行し、不一致が検知されたとき、復元されたスナップショットからの値を用いて、投機的に実行した全ての命令を、メモリから取得した値により再実行させることにより達成される。少なくとも1つの実施形態において、フラッシュは選択的であり、例えば、命令の復元されたレジスタに応じて、又は、不一致セット内のレジスタにより表されるように、メモリから復旧される復元されたレジスタに応じて、命令のフラッシュ及び再実行のみが行われる。
問い合わせ1162に戻ると、復元要求がストア要求と一致しない場合、レジスタの値をメモリから再ロードする(ステップ1164)。
一実施形態において、図28の1つ又は複数のステップが、復元操作を、他の命令及び/又は他の命令に対応する内部操作に対してアウト・オブ・オーダー方式で実行することができる図28のステップの1つ又は複数に対応する1つ又は複数の内部操作(iops)に拡張することによって実施される。本発明の別の態様において、現在の命令に対応して生成されるiopは、互いに対してアウト・オブ・オーダー方式で実行することができる。この実装によると、アウト・オブ・オーダー方式の実行論理は、適切なインターロックを提供し、スナップショットが復元されたときにのみ後続操作が実行され、さらに、不一致が検知されたとき、復元された値に基づいて実行されたあらゆる投機的に実行された命令が無効化され、フラッシュされ、再実行されることを保証する。
別の実施形態において、図28のステップは、レジスタの復元及び検証のための専用回路のステップとして実施される。少なくとも1つの実施形態において、図28に対応する論理は、ここでの技術を実施する回路が復元されたレジスタの検証を続行する間、復元された値を用いて後続命令を実行するのと並行して実行される。さらに、適切なインターロックが提供され、スナップショットが復元されたときのみ後続操作が実行され、さらに、不一致が検知されたとき、復元された値に基づいて実行されたあらゆる投機的に実行された命令が無効化され、フラッシュされ、再実行されることを保証する。
種々の技術が上述されたが、本発明の態様の趣旨から逸脱することなく、それらの技術に対する変形を行うことができる。
別の態様によると、保存及び復元は、Spillm及びReloadm命令(又は同様の命令を用いて実行され、これらの命令は、spillmとreloadmとの間で、メモリ内に格納されたレジスタへのメモリ変更を許容しないようにアーキテクチャ上定義されているので、メモリ変更のチェックは行われない。この手法において、命令の定義は、メモリが修正される場合、復元されたレジスタ値は定義されないことを示す。命令の定義によれば、ユーザは、対応する格納された領域を修正しない。ユーザが領域を修正する場合、これは、プログラミング・エラーと考えられ、正確性は保証されない。
Spillm及びReloadm命令の例示的な定義が上述される。しかしながら、さらなる詳細がここに与えられる。一実施形態において、Spillmは、レジスタ値をメモリに保存するので、それらのレジスタの値を、例えば、スナップショットの無効化の場合のフォールバックとして用いることができる。スナップショットの無効化は、例えば、プロセッサの物理レジスタが不足した場合、プロセッサのスナップショットのためのストレージが不足した場合、コンテキスト・スイッチ(context switch)がある場合等に生じ得る。
一実施形態において、Spillm及びReloadmを用いるとき、図9のスナップショットの検証は必要ないことがアーキテクチャ上定義される。従って、図17に示されるように、スナップショットの検証は行われない。同様に、別の態様によると、ReloadmはSpillmと一致致することがアーキテクチャ上定義され得るので、照合問い合わせ(例えば、問い合わせ806)を用いることなく、バルク復元を実行することができる。この一例が、照合問い合わせが実行されない図18を参照して上述される。
Spillm/Reloadmのアーキテクチャ上の定義により、照合問い合わせをスキップすることが可能になるが、Spillm/Reloadmが一致しない状況もあり得る。例えば、対は、setjump及びlongjump関数のC/C++及びPOSIX定義に従ったプログラム内のsetjump/longjump関数に基づいて、及び、例えばC++及びJavaで表されるような例外処理に従って用いられるような、構造化例外処理に応答して、対が一致しなくなることがある。例外処理及び結果として生じる一致しないSpillm/Reloadm命令の一例が以下に示される。:
Figure 0007046098000008
本明細書での例の基づき、例外が呼び出し先関数callee()にスローされる場合、呼び出し先関数のプロローグのReloadm命令を実行せず、呼び出し元における後続Reloadmが、呼び出し元の最新のSpillmと一致しなくなることがある。
同様に、以下に示されるように、不一致は、Setjump/Longjumpにより生じ得る。:
Figure 0007046098000009
特定のプログラミングは、Spillm/Reloadm命令の不一致をもたらし得るので、一態様において、特定のReloadmが特定のSpillmと一致することを保証する機能が提供される。この機能は、必要に応じて、復旧に用いられるスナップショットを無効化すること、及び/又は、呼び出し先のSpillmスナップショットを用いて、呼び出し元のReloadmが満たされないこととを保証することを含む。スナップショットを無効化するために、本発明の態様に従って、例えば単にスナップショットを除去するために、Reloadmを例えば1つの単一レジスタ内で実行すること;例えば、invalidate snapshot(スナップショット無効化)(Invsnap)命令を用いてSpillmスナップショットをアンスタックすること;又は他の場合には、スナップショット・スタックから1つのスナップショットを除去する又はスナップショットを無視することを含む多数の技術を用いることができる。
一例において、スキップされるReloadm命令の数は、関数のコードを走査し、次に、その数のスナップショットを無効化することによって、決定される。一実施形態において、無効化されたスナップショットについてのコード分析及びスナップショットの無効化は、例えば構造化例外処理の存在下でレジスタを復元するための、従来のアンワインド(unwind)処理と併せて実行することができる。これは、疑似コード記法において与えられる以下のコードで示される。
Figure 0007046098000010
図29を参照すると、疑似コード記法を参照して説明されるように、プロセッサは、Spillm/Reloadmの対を探して関数のコードを走査する(ステップ1200)。スキップされるReloadm命令の数をカウントし(ステップ1202)、対応する数のスナップショットを無効化する(ステップ1204)。
一致しない対を管理する一例が与えられるが、他の技術を用いてもよい。
本発明の別の態様によると、図26~図28を参照して説明されるような復旧及びチェックを実行する代わりに、それが生じたときに変更を追跡する。この態様において、プロセッサがメモリを更新するたびに、チェックを行い、更新がスナップショットの有効性に影響を与えるかどうかを判断する。影響を与える場合、スナップショット・レジスタの変わりに、要求される値をメモリから取得する。
一例において、store multipleの対象になるキャッシュ・ラインは、書き込みセット内にあるものとしてマーク付けされる。別のプロセッサからの干渉を診断すると、レジスタ復元の対象になるメモリ・バッファに対してストアが行われる。一実施形態において、イン・フライト(in-flight)の転送機会を無効化するために、干渉が用いられる。別の実施形態において、どのストア/ロードの対がレジスタ復元から排除されるかを示すように、書き込みセットのキャッシュ・ラインを対応する識別子と関連付けることができる。少なくとも1つの実施形態において、書き込みセットの表示は、全ての干渉ストア・メモリ操作(又は、他の同期動作)が完了するまでクリアされない。別の実施形態において、バッファの書き込みセットは、対応するロードが完了するまでクリアされない。少なくとも1つの弱いメモリ・オーダリング(weak memory ordering)の実施形態において、ロードの完了時、書き込みセットの予約は直ちにクリアされる。
第1の保存/復元シーケンスを完了するための能力を遅延させ得る強いメモリ・オーダリング(strong memory ordering)におけるような1つの実施形態において、2つのレジスタ復元シーケンスが、同じメモリ位置に対してイン・フライトであり得る。例えば、関数が呼び出され、呼び出し先保存レジスタに対してstore multipleを実行し、load multipleを用いて、呼び出し先保存レジスタを再ロードし、関数が戻り、関数が、直ちに再び呼び出され、別のstore multiple及びload multipleが同じアドレスに対して行われる。
一例において、第1の対が完了するまで、第2の対が保持される。一実施形態において、書き込みセットのキャッシュ・ラインが、複数の対と関連付けられる。別の実施形態において、複数のキャッシュ・ラインが関連付けられると、単一のビットを用いて、全てのstore/loadレジスタ復元の対のクリアを強制する。様々な例が存在する。
さらに、別の態様において、ローカル・アクセスからの格納されたレジスタのインメモリ・バッファとの干渉が考慮される。これは、スナップショットと関連したメモリ・バッファについてのベース・アドレス及び範囲(長さとして、又はエンド・アドレスとしてのいずれか)を取得し、後のstore操作のアドレスを、メモリ・バッファの範囲と比較し、干渉を検知することにより、達成することができる。一実施形態において、この干渉試験は、store-multiple bulk saveのような命令に対して実行される一方で、キャッシュ・ライン又はキャッシュ・サブラインと関連したインジケータを用いて、個々のストアについての干渉が追跡される。一実施形態において、最新のストア/ロードの対に対する単一のスナップショット及び関連したインメモリ・バッファ範囲が保持される。他の実施形態において、より多くの対の保持を可能にするために、付加的なスナップショット及び関連したインメモリ・バッファ範囲がサポートされる。
一実施形態において、バッファの修正を検知するために、各々のアクティブなレジスタ復元スナップショットについてのバッファ・アドレス範囲に照らして、ローカル及び遠隔アドレスがチェックされるので、アドレス・チェックは、同時チェック論理を実施することにより、又は要求が処理されるときの待ち行列遅延を招くリスクを冒して干渉のシリアル・チェックを強制することのいずれかにより、相当な領域、電力、及び遅延のコストを被ることがある。これらのコストを減らすために、本発明の態様の実施形態と共に、種々の手法を用いることができる。一実施形態において、L1キャッシュを含むとき、第1レベル・データ・キャッシュにおいてヒットする遠隔アドレスのみを、追跡されるメモリ範囲と比較する。別の実施形態においては、例えば、マーカー・ビットを用いて、特定のキャッシュ・ラインにおけるバッファの存在を追跡することにより、付加的なフィルタリングが与えられる。さらに別の実施形態において、マーカー・ビットを用いて、アクティブなバッファを示すことができ、スナップショットに対応する追跡されるアドレス範囲と比較することなく、複数のアクセス・タイプに対応するキャッシュ・ライン及びサブキャッシュ・ラインへの書き込みに応答して、バッファを非アクティブにすることができ、それにより、全てのスナップショットに対応する追跡される範囲を比較するオーバーヘッドを負うことなく、スナップショットが無効化される。さらに別の実施形態において、キャッシュ・ラインに対応するスナップショットは、キャッシュ・ディレクトリ又は別個のテーブルにより識別することができ、実行される比較の数がさらに低減する。
さらに1つ又は複数の実施形態において、比較されるメモリ・アクセスの数を減らすために、メモリ・アドレス・フィルタを用いて、メモリ・アドレスをフィルタリングすることができる。本発明の1つ又は複数の態様と共にアドレス・フィルタリングのために、種々のアドレス・フィルタ(例えば、アドレス範囲フィルタ、Bloomフィルタ等)を使用することができる。アドレス・フィルタリングを用いることにより、メモリ・チェックのための領域、電力、及び遅延コストにおける相応のコストなしに、より多くのアドレス範囲を追跡することができる。従って、例えば、保守的な答えを与えるための種々のフィルタ及びダイジェストを用いて、例えば、より深いレベルの呼出し階層についての複数の範囲に対応するより多くのスナップショットを追跡することができる。一実施形態において、これは、第1のバッファから最後のバッファまでのアドレスを追跡することにより達成される。この範囲は、ヒープ、静的変数、ファイル・バッファ等に対応するメモリ要求をフィルタリングにより除外しながら、例えば、関数呼び出しにおけるレジスタ保存及び復元のためにメモリ・バッファを保持するスタック・フレームの数に対応することができる。別の実施形態において、フィルタは、付加的な情報をキャプチャしてバッファ・アクセスをローカル変数アクセスと区別し、ローカル変数アクセスをフィルタリングして、インメモリ・レジスタ・スピル・バッファに対応する追跡されるメモリ・バッファ範囲と比較されるアクセスの数をさらに減らすことができる。少なくとも1つの実施形態において、保留中のレジスタ復元スナップショットの無効化と同時に、又はレジスタ復元スナップショットがアクティブでないときに、1つ又は複数のフィルタを定期的にリセットすることができる。別の実施形態において、範囲フィルタが、1つ又は複数の周知のスヌープ・フィルタ・アーキテクチャに従って用いられる。
一実施形態において、store/load命令に対するバッファ・メモリの修正を検知するためのトランザクション書き込みセットの干渉の判定が、フィルタとして用いられ、次に、遠隔アクセス違反を、コア内で用いられる正確なバッファ境界と比較し、スレッド自体のストアからの干渉をチェックする。
図70に示されるような1つの特定の例において、データ・キャッシュ1300は、複数のキャッシュ・ライン1302を含み、各キャッシュ・ライン1302(又は、別の実施形態においては、キャッシュ・ラインの選択された部分)がマーク付けされる。例えば、各キャッシュ・ライン、又はキャッシュ・ラインの部分をマーク付けする実施形態におけるキャッシュ・ラインの部分は、キャッシュ・ライン又はキャッシュ・ラインの部分が対応するメモリ・アドレスを示すアドレス・タグ1304;キャッシュ・ライン又は部分が有効かどうかを示す有効性(V)インジケータ1306;キャッシュ・ライン又は部分からのデータがメモリにライトバックされるかどうかを示すダーティ(D)インジケータ1308;及び、キャッシュ・ライン又は部分についてスナップショットが有効かどうかを示すために用いられる、本発明の態様によるマーク付け(M)インジケータ1310を有する。さらに、キャッシュ・ライン又は部分は、データ1312を含む。
図31~図33を参照して説明される例示的な技術により説明されるように、有効性インジケータ1306、ダーティ・インジケータ1308及びマーク付けインジケータ1310を含む種々のインジケータが設定又はリセットされる。
例えば、図31を参照して、キャッシュ再ロード中にインジケータを更新する一例が説明される。最初に、メモリからデータ・キャッシュ内にデータをフェッチする要求を取得する(例えば、受け取る、提供する、取り出す、有する、決定する等)(ステップ1320)。要求に基づいて、データをメモリから取得し、キャッシュ・ラインに格納する(ステップ1322)。メモリから取得したデータについてアドレス・タブを計算し、対応するアドレス・タグ・フィールド1304に格納する(ステップ1324)。付加的に、キャッシュ・ラインは今や有効なので、有効インジケータ1306は1に設定され;データは今しがたロードされたので、ダーティ・インジケータ1308はゼロに設定され、よって、ダーティではなく;対応するスナップショットを有するレジスタには格納されていないので、マーク付けインジケータ1310はゼロに設定される(ステップ1326)。
キャッシュ再ロード中にインジケータを更新することに加えて、図32を参照して説明されるように、インジケータは、キャッシュへのストアの際にも更新される。最初に、データ及びアドレスを取得する(例えば、受け取る、提供する、取り出す、有する、決定する等)(ステップ1330)。ストアがキャッシュ内の既存のキャッシュ・ラインに対応するかどうかを判断する(問い合わせ1332)。対応しない場合、図31のキャッシュ再ロード手順を実行する(ステップ1334)。しかしながら、ストアがキャッシュ・ラインに対応する場合、データを格納し(ステップ1336)、対応するダーティを1に設定する(ステップ1338)。さらに、これが、バルク保存である、例えば、複数の呼び出し先保存又は呼び出し元保存レジスタをスタック・フレームにスピルするためのSTMG命令である場合(問い合わせ1340)、マーク付けインジケータは1に設定される(ステップ1342)。他の場合には、それはゼロとなる。
さらに、図33を参照して説明されるように、別のプロセッサからの更新要求の受信に基づいて、インジケータの1つ又は複数を更新することができる。最初に、データ及びメモリ・アドレスを取得する(例えば、受け取る、提供する、取り出す、有する、決定する等)(ステップ1350)。ストアがキャッシュ内の既存のキャッシュ・ラインに対応するかどうかについて判断する(問い合わせ1352)。対応しない場合、図31のキャッシュ再ロード手順を実行する(ステップ1354)。しかしながら、ストアがキャッシュ・ラインに対応する場合、データを格納し(ステップ1356)、マーク付けインジケータを0に設定する(ステップ1358)。遠隔プロセッサからの書き込みアクセスがインメモリ・レジスタ・バッファを修正した可能性があるので、マーク付けインジケータを0に設定し、それにより、レジスタ・スナップショットが、インメモリ・バッファに対して古く(stale)なる。
別の実施形態において、キャッシュへのストアの際、キャッシュ・ライン又はキャッシュ・ラインの部分におけるバッファの存在が検知されると、要求範囲が、追跡されるスナップショットのアドレスと比較され、特定のアクセスがスナップショットを妨げるかどうかを判断する。少なくとも1つの実施形態において、このことは、更新が、メモリ・バッファに対応しない、メモリ・バッファのキャッシュ・ラインの部分に対応するとき、スナップショットの無効化の数が低減する。さらに別の実施形態において、これと関連したキャッシュ・ディレクトリ又は論理を用いて、キャッシュ・ラインに対応する複数のアクティブなスナップショットの特定のスナップショットを識別し、実行される干渉チェックの数を減らすことができる。さらに別の実施形態において、干渉チェックの数を減らすためにマーカー・ビットをフィルタとして用いることが、ローカル・プロセッサからの更新をフィルタリングするために用いられる。他の可能性も存在する。
上記のキャッシュ技術の1つ又は複数は、レジスタ復元と併せて機能する。図34を参照して、レジスタ復元技術の一例が説明される。最初に、Load Multiple(LM)命令(又は、同様の命令)を取得する(例えば、受け取る、決定する、取り出す、提供する、有する等)(ステップ1400)。Load Multiple命令が復元要求に対応するかどうかを判断する(問い合わせ1402)。このことは、例えば、スナップショット・スタックの付加的なフィールド(例えば、アドレス・フィールド)をチェックし、前に格納されたレジスタが復元されているかどうかを判断することにより、判断することができる。Load Multiple命令が復元要求に対応しない場合、load multiple命令を実行する(ステップ1404)。load multiple命令が復元要求に対応する場合、1つ又は複数のレジスタ・マッピングを復旧する(ステップ1406)。例えば、1つ又は複数のスナップショットを用いて、指定されたレジスタを復旧することができる。その後又は並行して、laod multipleにより示されるレジスタに対応するキャッシュ・ライン(キャッシュ・ラインの部分)から、マーク付けインジケータ(M)が取得され(ステップ1408)、キャッシュ・ラインが未修正であるとしてマーク付けされる(問い合わせ1410)。キャッシュ・ラインが未修正であるとしてマーク付けされる場合、処理されるキャッシュ・ライン又はキャッシュ部分がそれ以上あるかどうかについてさらに判断される(問い合わせ1412)。処理されるキャッシュ・ライン又はキャッシュ部分がそれ以上ある場合、処理はステップ1408に進む。他の場合には、レジスタ復元処理は完了する。
問い合わせ1410に戻ると、マーク付けインジケータが、修正済みとしてマーク付けされる(例えば、Mが0に設定される)場合、復旧ステップが実行される(例えば、キャッシュから再ロードされる)(ステップ1414)。つまり、メモリから値がロードされ、スナップショットの値を置換する。
図35を参照して、レジスタ復元の別の例が説明される。この例において、復元のために用いられるスナップショットの有効性についてチェックを行う。例えば、Store Multipleが、別のStore Multipleを上書きしていることがある。これが生じたとき、第1のStore Multipleは、もはやレジスタ復元のために用いられるStore Multiple/Load Multipleのための有効な復元候補ではない。これを判断するために、スナップショット・スタックをトラバースして、store multiple要求に応答して、現在のスナップショットが前のスナップショットにオーバーラップするかどうかを判断することができる。他の実施形態において、このチェックは、他のメモリ更新操作に対して、又は1つ又は複数のフィルタ基準が、チェックが実行されることを示すときの他のメモリ更新操作に対して実行される。一致が見出される場合、前のスナップショットのスタック内のエントリが無効化される。従って、一実施形態において、スタック上の各エントリについて、スナップショット上のスタック・アドレスが現在のストア要求にオーバーラップする場合、そのスナップショット・スタック・エントリについての有効インジケータは無効に設定される。次に、復元処理の際、このインジケータをチェックする。この処理の一例が、図35を参照して説明される。
最初に、Load Multiple命令(又は、同様の命令)を取得する(例えば、受け取る、取り出す、決定する、提供する、有する等)(ステップ1420)。Load Multiple命令が復元要求に対応するかどうかについて判断する(問い合わせ1422)。このことは、例えば、スナップショット・スタックの付加的なフィールド(例えば、アドレス・フィールド)をチェックして、前に格納されたレジスタが復元されているかどうかをチェックすることにより、判断することができる。Load Multiple命令が復元要求に対応しない場合、メモリから、Load Multiple命令によりロードされる複数のレジスタをロードすることにより、load multiple操作が実行される(ステップ1424)。Load Multiple命令が復元要求に対応する場合、使用される1つ又は複数の復元スナップショットが有効かどうかについて判断する(すなわち、インメモリ・バッファが上書きされていないことを確認するために)(問い合わせ1426)。1つ又は複数の有効インジケータが、1つ又は複数の復元スナップショットが有効であると示す場合、1つ又は複数のレジスタ・マッピングを復旧する(ステップ1428)。例えば、1つ又は複数のスナップショットを用いて、指定されたレジスタを復旧する。その後又は並行して、load multipleのレジスタに対応するキャッシュ・ライン(又はキャッシュ・ラインの部分)から、マーク付けインジケータ(M)を取得し(ステップ1430)、キャッシュ・ラインが未修正としてマーク付けされるかどうかを判断する(問い合わせ1432)。キャッシュ・ラインが未修正としてマーク付けされる場合、処理されるキャッシュ・ライン又はキャッシュ部分がそれ以上あるかどうかをさらに判断する(問い合わせ1434)。処理されるキャッシュ・ライン又はキャッシュ部分がそれ以上ある場合、処理はステップ1430に進む。他の場合には、レジスタ復元処理は完了する。
問い合わせ1432に戻ると、マーク付けインジケータが、修正済みとしてマーク付けされる(例えば、Mが0に設定される)場合、復旧ステップを実行する(例えば、キャッシュから再ロードする)(ステップ1436)。つまり、メモリから値がロードされ、スナップショットの値を置換する。
さらに別の態様によると、メモリへの修正を追跡するための別の機構が、トランザクション・メモリ・ハードウェアを用いて、メモリへの変更を追跡することを含む。トランザクション・メモリは、干渉を追跡し、トランザクション状態に対応するメモリ位置の範囲へのアクセスを追跡するための機能を有し、その機能を用いて、保存されたレジスタのインメモリ・イメージに対応するバッファが修正済みかどうかを追跡することができる。トランザクション・メモリ・ファシリティは、インメモリ変更が、特定のスナップショット内に含まれるレジスタに影響を与えるかどうかを追跡することができる。
一態様において、共有されるレジスタ復元能力を用いて、トランザクション・メモリ・ロールバック復旧のためのレジスタの保存及び関数呼び出しレジスタの保持のための能力が提供される。このファシリティは、例えば、バルク保存表示命令の受信などのバルク保存表示イベントにより開始される。一実施形態において、TBegin(begin transactional execution命令)は、第1の表示命令であり、Store Multiple又はSpill Multiple命令は、第2の表示命令である。
一実施形態において、store multipleを受け取った場合、ストアが即座に実行されるが、インクリメンタル・レジスタ・チェックポイントも実行される。Spill Multipleの場合、一例においては、インコア・チェックポイントのみしか実行することができない。
表示イベントの受信に基づいて、現在の要求が既存の要求と適合し得るかどうかについて試験を行う。適合性が判断されると、処理は進行する。他の場合には、最初の要求がトランザクション・メモリ・ロールバック要求に対応する場合、バルク保存が直接実行され、トランザクション・メモリのために、インコア・レジスタ保存が排他的に用いられる。第1の要求がレジスタ保存要求である場合、関数呼出しバルク復元のためのインコア・レジスタ保存は終了し、トランザクション・メモリ保存が開始される。
復元イベントが発生すると、保存された追跡されるレジスタのサブセットが復元される。一実施形態において、修正されたレジスタのみが保存される。別の実施形態においては、全ての追跡されるレジスタが保存される。
一実施形態によると、レジスタ復元は、修正されたトランザクション実行レジスタ・ロールバック操作として実施される。例えば、バルク・ストアが識別されると、トランザクション・メモリ(TM)レジスタ復元状態にスピルされるレジスタのスナップショットが作成される。さらに、一例において、バルク復元が識別されると、レジスタ・スナップショットは、トランザクション・アボート中に他の方法で復元される方法で復元される。
一例において、複数のレジスタ・スナップショットがサポートされていない場合、新しいバルク・ストアが識別されると、前のTMレジスタ・スナップショットが廃棄され、TMレジスタ復元を用いて、最新のバルク・ストアを受け取ることができる。例えば、ネスト化トランザクションをサポートする実施形態などの別の実施形態において、複数のネスト化トランザクションに対応するレジスタ復元スナップショット内に、複数のスピル・スナップショットが格納される。
トランザクションに遭遇し、別のレジスタ復旧状態に対するストレージが利用可能になると(例えば、ネスト化トランザクションがサポートされるとき)、次のレジスタ復旧レベルが用いられる。他の場合には、バルク・ストアに対応する前のレジスタ・スナップショット(例えば、最も新しい又は最も古いスナップショットのいずれか)が無効化され、代わりにTMレジスタ復旧状態を保存する。別の実施形態において、バルク・ストア・スナップショットの割り当て解除を回避するために、ネスト化トランザクションを外部トランザクション内に平坦化することができる。
一実施形態において、TMファシリティがイネーブルにされると、スピル・レジスタ復元のためのTMレジスタ復旧機構の使用がディスエーブルにされる。他の変形も可能である。
一実施形態において、開始イベントがTBeginであるとき、トランザクション・ロールバック、トランザクション失敗、トランザクション干渉、トランザクション・アボート、又は操作を終了及び無効化する他の操作が、復元イベントをトリガする。さらに、開始イベントがStore Multiple、Spill Multiple要求、又は類似の要求であるとき、Load Multiple又はReload multipleが、復元イベントと考えられる。
トランザクションが失敗したとき(トランザクション・ロールバック、トランザクション失敗、トランザクション干渉、トランザクション・アボート、又は操作を終了及び無効化する他の操作)、又は成功するとき(Tend(トランザクション終了)の発生)、バルク保存がTbeginにより開始されたときのいずれかに、状態修正追跡が終了し、状態保存操作が終了する。
少なくとも1つのインスタンスにおいて、レジスタの保存は、インクリメンタルに行われ、インクリメンタルに保存されたレジスタを復元することができる。
図36~図40を参照して、トランザクション・メモリ及びレジスタ復元に関するさらなる詳細が説明される。
図36を参照すると、TBegin命令に基づくスナップショットの開始と関連した処理が説明される。一実施形態において、TBegin命令を取得する(例えば、受け取る、提供する、決定する、取り出す、有する等)(ステップ1500)。TBegin命令は、トランザクションを開始し、一例において図37に示されるように、例えば、トランザクション開始操作を指定するオペコードを含むオペレーション・コード(オペコード)フィールド1510;ベース・フィールド(B)1512;変位フィールド(D)1514;及び即値フィールド(I2)1516を含む。
フィールドが非ゼロのとき、B1512により指定される汎用レジスタの内容がD1514に付加され、第1のオペランド・アドレスを取得する。
フィールドが非ゼロのとき、一例において、以下が適用される。:
*トランザクション・ネスト化深さが最初にゼロである(トランザクションをネスト化できる)とき、第1のオペランド・アドレスは、トランザクションがアボートされる場合、種々の診断情報を格納することができる、TBEGIN指定TDBと呼ばれる256バイトのトランザクション診断ブロックの位置を指定する。
一例において、Iフィールド1516のビットは、次のように定義される。:
汎用レジスタ保存マスク(GRSM):Iフィールドのビット0~7は、汎用レジスタ保存マスク(GRSM)を含む。GRSMの各ビットは、汎用レジスタの偶数-奇数の対を表し、ビット0がレジスタ0及び1を表し、ビット1がレジスタ2及び3を表す等である。最外TBegin命令のGRSM内のビットがゼロである場合、対応するレジスタ対は保存されない。最外TBegin命令のGRSM内のビットが1である場合、対応するレジスタ対は、プログラムにより直接アクセスできないモデル依存位置に保存される。
トランザクション・アボートの場合、保存されるレジスタの対は、最外TBegin命令が実行されたときのそれらの内容に復元される。トランザクション・アボートの際、他の全ての(保存されない)汎用レジスタの内容は復元されない。
汎用レジスタ保存マスクは、最外のものを除いて全てのTBeginsにおいて無視される
AR修正許可(Allow AR Modification)(A):A制御(Iフィールドのビット12)は、トランザクションがアクセス・レジスタを修正するのを許可されるかどうかを制御する。
浮動小数点演算許可(Allow Floating Point Operation)(F):F制御(Iフィールドのビット13)は、トランザクションが指定された浮動小数点命令を実行するのを許可されるかどうかを制御する。
プログラム割り込みフィルタリング制御(PIFC:Program Interruption Filtering Control):Iフィールドのビット14~15は、プログラム割り込みフィルタリング制御(PIFC)である。PIFCは、CPUがトランザクション実行モードにある間に発生する特定のクラスのプログラム例外条件(例えば、アドレス指定例外、データ例外、演算例外、保護例外など)が割り込みをもたらすかどうかを制御する。
フィールドは、本明細書で説明されるよりも多い、少ない、又は異なる制御を含むことができる。
図36を参照すると、TBegin命令の取得に基づいて、例えばレジスタ復元スナップショット・ファシリティなどのレジスタ復元ファシリティがアクティブに使用中であるかどうかを判断する(問い合わせ1502)。これは、例えば、特定の値(例えば、1)に設定されるファシリティ表示に基づいて、又はこうしたスナップショットが使用中かどうかをチェックすること等により、判断することができる。ファシリティがアクティブに使用中である場合、レジスタ復元を非アクティブにし、インメモリ・レジスタ復元バッファ追跡をディスエーブルにする(ステップ1504)。これは、この例において、TBeginが優先されるためである。その後、又はレジスタ復元ファシリティがアクティブでない場合、トランザクション・ロールバック・スナップショットを作成する(ステップ1506)。例えば、TBegin命令(例えば、GRSMにより指定される)により示されるように、保存されるレジスタのスナップショットを撮る。さらに、トランザクション状態干渉の追跡を開始する(ステップ1508)。例えば、トランザクション状態バッファ及びTBeginを追跡する。
さらに別の態様において、図38を参照して説明されるように、レジスタ保存要求に基づいて、スナップショットを撮ることができる。レジスタ保存表示(例えば、Store Multiple)を取得する(例えば、受け取る、提供する、有する、取り出す、決定する等)(ステップ1520)。レジスタ復元ファシリティが、トランザクション実行のために使用中であるかどうかを判断する(例えば、インジケータをチェックすることにより)(問い合わせ1522)。レジスタ復元ファシリティが、トランザクション実行のために使用中である場合、レジスタ状態をメモリ内に格納する(ステップ1530)。しかしながら、レジスタ復元ファシリティがトランザクション実行のために使用中でない場合、レジスタ復元ファシリティが、適合しない要求のレジスタ復元のために使用中であるどうかをさらに判断する(問い合わせ1524)。レジスタ復元ファシリティが、適合しない要求のレジスタ復元のために使用中である場合、処理はステップ1530に進み、そこで、レジスタ状態がメモリ内に格納される。
しかしながら、レジスタ復元ファシリティがトランザクション実行のため、又は適合しない要求のレジスタ復元のために使用中でない場合、レジスタ復元スナップショットを作成し(例えば、Store Multipleにより指定されるレジスタのスナップショット)(ステップ1526)、例えば、メモリ内のトランザクションのトランザクション状態との干渉を識別するように適合されたトランザクション・ファシリティの論理を用いて、インメモリ・レジスタ復元バッファに対する干渉追跡を開始する(ステップ1528)。さらに、レジスタ状態がメモリ内に格納される(ステップ1530)。
本発明の態様によるメモリ・バッファへの変更を追跡するためのトランザクション状態干渉追跡論理の使用によると、ステップ1530のインメモリ・レジスタ・バッファが、干渉チェック論理により、干渉に関して追跡される。従って、保存されるレジスタのコピーを含むインメモリ・バッファへの遠隔アクセスを受け取ると、干渉が記録される。本発明の一態様によると、干渉が記録される場合、干渉追跡論理を用いてレジスタ保存バッファの修正を判断するときに、ロールバックは生じない。本発明のこの態様によると、干渉が検知されるとき、レジスタが復元される際にインプロセッサ・レジスタ・スナップショットは用いられず、代わりに、レジスタは、インメモリ・レジスタ保存バッファから取り出される。少なくとも1つの実施形態によると、プロセッサ・ローカル・メモリ書き込み命令により、例えば書き込みを本発明の一態様による1つ又は複数のメモリ・バッファのアドレス範囲と比較することにより、インメモリ・レジスタ保存バッファ修正を追跡するように、付加的な追跡が行われる。
付加的に、一態様において、図39を参照して説明されるように、トランザクション・ロールバックに基づいて、スナップショットが復旧される。ロールバック要求(例えば、トランザクションのトランザクション状態との干渉又はTransaction Abort(TAbort)命令の実行に応答して)ロールバック要求を取得する(例えば、受け取る、有する、提供する、取り出す、決定する等)(ステップ1540)。状態は、トランザクションの開始点にロールバックする(ステップ1542)。トランザクションのこのロールバックによると、レジスタ状態は、トランザクションの始めの状態に復元される(すなわち、そこで、図36によるトランザクション実行のためのロールバック・スナップショットを作成するために、TBeginが実行された)。トランザクション・ロールバックの実行は、例えば、プログラム・カウンタを復元することと、トランザクション・メモリの既知の実施によるアボートされたトランザクションのインメモリ影響をキャンセルこととを含む。トランザクション・ロールバックは、非アクティブとして示され(ステップ1544)、トランザクション・メモリ干渉追跡を非アクティブにする(ステップ1546)。
さらに、一態様において、図40を参照して説明されるように、レジスタ復元復旧要求に基づいて、スナップショットを復旧する。レジスタ復元復旧要求(例えば、Load Multiple)を取得する(例えば、受け取る、提供する、有する等)(ステップ1550)、インコア・レジスタ復元ファシリティがアクティブかどうかについて判断する(ステップ1552)。インコア・レジスタ復元ファシリティがアクティブでない場合、メモリ状態から復旧する(ステップ1554)。しかしながら、インコア・レジスタ復元ファシリティがアクティブである場合、インメモリ・レジスタ復元バッファとの干渉があるか又はあったかどうかについてさらに判断する(問い合わせ1556)。干渉がる場合、レジスタ復元インメモリ追跡を非アクティブにし(ステップ1558)、処理はステップ1554に進む。
インメモリ・レジスタ普及バッファとの干渉がない場合には、表示されるレジスタを、インコア状態(例えば、スナップショット)から復旧する(ステップ1560)。一例において、プログラム・カウンタ及びインメモリ効果ロールバックが排除される。レジスタ復元インメモリ追跡を非アクティブにする(ステップ1562)。
上述のように、トランザクション・メモリ・ファシリティを用いて、変更を追跡することができる。一態様において、レジスタ復元の目標を達成するために、トランザクション実行のために用いられる動作をミラーリングすることにより、トランザクション状態が再利用されるが、トランザクション・ロールバック処理及びレジスタ復元は、異なる命令によりトリガされ、それらは、一方が復元のためにアクティブであるとき、他方がアクティブでないときに、例えば、トランザクション・ロールバック処理が行うように、レジスタ復元(例えば、LMに基づいた)はプログラム・カウンタを復旧しない又はインメモリの変更をアンドゥ(undo)しないという点で、相互排他的である。
1つ又は複数のさらに別の態様において、メモリ変更の追跡は、スナップショット・スタックと併せて行われる。上述のように、各エントリは、そのバッファのアドレス又はアドレス範囲を含むので、スナップショット・スタックは、バッファのリストを提供する。従って、書き込みがあるたびに、書き込みのアドレス又はアドレス範囲が、スタック内のアドレス又はアドレス範囲と比較される。少なくとも1つの実施形態において、メモリ保存変更の追跡のために用いられるスナップショット・スタックは、本発明の態様による対応するレジスタ復元操作のためのレジスタ保存操作により作成されるスナップショットIDを格納するために用いられる図14によるスナップショット・スタックに対応し、これと共有される。図41~図44を参照して、メモリ変更を追跡するために用いられる種々の技術の例が説明される。
図41を参照して説明される第1の技術は、新しいスナップショットを撮ることに関連する。例えば、一実施形態において、プロセッサにより、Store Multiple(STM)命令(又は、類似の命令)を取得する(例えば、受け取る、提供する、有する、取り出す、決定する等)(ステップ1600)、スナップショット・スタック内に利用可能なエントリがあるかどうかについて判断する(問い合わせ1602)。利用可能なエントリがない場合、スナップショット・スタック・オーバーフローを実行する(ステップ1604)。例えば、エラーが表示される。利用可能なエントリがある場合、スタック先頭(top-of-stack)ポインタを更新する(例えば、1だけインクリメントされる(ステップ1606)。
さらに、スナップショットを作成し(ステップ1608)、スナップショット識別子をエントリ内に格納する(ステップ1610)。さらに、Store Multipleにより指定されるレジスタの内容をメモリ内に格納し(ステップ1612)、内容が格納される場所のメモリ・アドレス範囲を、エントリ(例えば、アドレス)に含める(ステップ1614)。さらに、エントリにおいて有効インジケータを(例えば、1に)設定し(ステップ1616)、ある場合には、他のフィールドも更新する(ステップ1618)。
上記に加えて、図42を参照して、個々のストア要求を実行している場合に変更を追跡するための技術が説明される。この実施形態において、このプロセッサの各ストアについて、スタックのチェックを行い、何らかのオーバーラップがあるかどうかを判断する。最初に、このプロセッサにより、ストア・アドレスと共にメモリ書き込み要求を取得する(例えば、受け取る、提供する、有する、決定する、取り出す等)(ステップ1620)。次に、スナップショット・スタック内の各エントリについて(ステップ1622)、このエントリのアドレス範囲がストア・アドレスと一致するかどうかを判断する(問い合わせ1624)。一致する場合、現在のエントリについての有効ビットをリセットする(例えば、ゼロに)(ステップ1626)。その後、又はこのエントリについてのアドレス範囲がストア・アドレスと一致しない場合、処理されるべきスナップショット・スタック内のエントリがそれ以上あるかどうかについてチェックを行う(問い合わせ1628)。エントリがそれ以上ある場合、処理はステップ1622に進む。他の場合には、処理は終了する。
同様に、図43を参照すると、他のプロセッサから受け取った書き込み要求についてチェックを行う。最初に、プロセッサは、排他的アクセス又はデータ更新を要求している別のプロセッサから、ストア・アドレスと共に遠隔メモリ書き込み要求を取得する(例えば、受け取る、提供する、取り出す、決定する、有する等)(ステップ1640)。次に、スナップショット・スタック内の各エントリについて(ステップ1642)、このエントリについてのアドレス範囲がストア要求のアドレスと一致するかどうかについて判断する(問い合わせ1644)。一致する場合、現在のエントリについての有効ビットをリセットする(例えば、ゼロに)(ステップ1646)。その後、又はこのエントリについてのアドレス範囲がストア要求のアドレスと一致しない場合、処理されるべきスナップショット・スタック内のエントリがそれ以上あるかどうかについてチェックを行う(問い合わせ1648)。エントリがそれ以上ある場合、処理はステップ1642に進む。他の場合には、処理は終了する。
図42及び図43の技術は、スナップショット・スタック内の全てのエントリのアドレスのチェックに関して説明されるが、最適化した実施形態において、比較される書き込みの数及びスナップショット・スタック上のエントリを減らし、スナップショット無効化の試験を行うコストを減らすことができる。例えば、スヌープ・フィルタのような種々のフィルタリング技術が、スナップショット・スタック・エントリに対して比較される。幾つかの例示的なフィルタは、範囲フィルタとすることができ、例えば、図30等によるキャッシュ等と共に、データ・キャッシュと関連したマーク・ビットとしてフィルタリングすることができる。別の最適化された実施形態において、例えば、取り出されるアドレスに基づいてどのエントリが試験されるかを判断することにより、スタック・エントリのサブセットを識別することができる。1つのこうした実施形態において、スナップショット・エントリは、対応するメモリ・バッファを含むキャッシュ・ラインに関連したエントリ・インジケータを有することができる。
さらに別の実施形態において、図44を参照して、バルク復元の受信に基づいてレジスタ復元を実行するための技術が説明される。最初に、プロセッサにより、Load Multiple(LM)命令又は類似の命令を取得する(例えば、受け取る、提供する、取り出す、有する、決定する等)(ステップ1660)。要求を取得するプロセッサは、load multiple操作が復元要求に対応するかどうかを判断する(問い合わせ1662)。load multiple操作が復元要求に対応しない場合、load multiple操作を実行する(ステップ1664)。しかしながら、load multiple操作が復元要求に対応する場合、対応する復元スナップショットが有効であるかどうかを判断する(問い合わせ1666)。対応する復元スナップショットが有効である場合、スナップショットを用いて、1つ又は複数のレジスタ・マッピングを復旧する(ステップ1668)。対応する復元スナップショットが有効でない場合、メモリ・バッファから、又はキャッシュ若しくはシステム・メモリから、値をロードするなどの別の技術を用いて、復旧が行なわれる(ステップ1670)。
メモリ変更を追跡するために種々の実施形態及び/又は技術がここに提供されるが、本発明の態様の趣旨から逸脱することなく、他の変形、実施形態、及び/又は技術を提供することができる。
本発明の別の態様によると、スナップショットの一部の損失を管理するための機能が提供される。インコア値からのレジスタ復元は、インコア・データ・ストアから値を復旧す技術を表す。一例において、これらのデータ・ストアは、他のプロセッサ機構(例えば、分岐予測ミス復旧及び正確な例外)を実施するために用いられるマイクロ・アーキテクチャ上の構造と共有される。インコア・データ・ストアの例は、復旧ファイル及びレジスタ・リネーム・マップ(例えば、スナップショット)である。しかしながら、一実施形態において、全ての値を復元することはできない。例えば、幾つかのレジスタは、それらが新しいアーキテクチャ化された値を保持するように再割り当てされているので、もはやそこからの復旧のために利用できないことがある。一実施形態において、割り当て時間追跡又はライブネス(liveness)の追跡により、上書きされた値が追跡される。
一例において、最後の割り当て(又は、別の実施形態においては、書き込み時間)時間追跡の場合、各物理レジスタは、アーキテクチャ化された値を保持するために最後に割り当てられた(書き込まれた)時間と関連付けられる。次に、その割り当てられた時間(タグ)が作成された復元ポイントの時間(タグ)がより後である場合、値は利用可能でない。
さらに別の態様において、全ての値(又はそのサブセット)のビットマップが作成されるか、又はレジスタ・リネーム・マップが構成される。レジスタが使用不能になるたびに、レジスタは、ビットマップ又はレジスタ・リネーム・マップから除去されるので、復旧の際、復元不能なレジスタは既知である。一実施形態において、ビットマップ又はレジスタ・リネーム・マップは、レジスタ復元スナップショットに対応する。
本発明の態様によると、レジスタ復元のためのハイブリッド技術が提供される。ライブネス/可用性追跡機構に従って、インコア値が利用可能であると判断することができるとき、インコア値からのレジスタ復元が提供される。残りの値は、メモリからロードされる。
図45を参照して、本発明の態様による、復元要求を処理する一実施形態が説明される。最初に、復元要求(例えば、Load Multiple命令)を取得し(例えば、受け取り、提供し、取り出し、決定し、有し等)(ステップ1700)、それに基づいて、プロセッサは、復元されるレジスタに対応するスナップショットが有効であるかどうかを判断する(問い合わせ1702)。スナップショットが無効である場合、値がメモリから復元される(ステップ1704)。しかしながら、スナップショットが有効である場合、復元される各レジスタについて(ステップ1706)、例えば、時間追跡、ビットマップ等を介して、特定のレジスタをスナップショットから復元できるかどうかについて判断する(問い合わせ1708)。レジスタをスナップショットから復元できる場合、レジスタは、例えば、リネーム・マップを更新することにより、スナップショットから復元される(ステップ1710)。しかしながら、レジスタをスナップショットから復元できない場合、例えば、新しいリネーム・レジスタを対応するアーキテクチャ上のレジスタに割り当て、その値をメモリからロードすることにより、レジスタをメモリから復元する(ステップ1712)。
一実施形態において、復元すべきレジスタがそれ以上あるかどうかについて判断する(問い合わせ1714)。復元すべき1つ又は複数のレジスタがある場合、処理は、ステップ1706に進む。
上述のように、レジスタの復元のこの態様において、インコア値が存在する場合、インか値を取り出し、インコア値が存在しない場合、値をメモリからロードする。
レジスタ・リネーム復元は、明示的な又は推定される復元ポイント・インジケータに基づいて、後の復元のためにプロセッサ状態をキャプチャする(例えば、Spillm命令、Store Multiple命令、フレーム・ポインタ又はスタック・ポインタなどの明確なベース・レジスタの1つを用いるStore Multiple命令)。さらに、レジスタ復元は、明示的な又は推定される復元要求(例えば、Reloadm命令、Load Multiple命令、フレーム・ポインタ又はスタック・ポインタなどの明確なベース・レジスタの1つを用いるLoad Multiple命令)時に実行される。
しかしながら、1つのアプリケーションにより用いられる復元ポイントが、コンテキスト・スイッチ後、別のアプリケーションにより不正確に使用されることがある。特に、このことは、同じバイナリ若しくはライブラリの複数のインスタンスが実行することができ、又はフィンガープリントが一致することができ、1つのコンテキストにおける関数からの復元ポイントを、フィンガープリントに一致する同じバイナリ若しくはバイナリの別のプロセスの関数において復元を実行するために用いることができるので、例えば、バイナリの詳細なフィンガープリントを用いてさえ、スナップショット位置の識別が特定のバイナリを識別するときにも発生し得る。従って、本発明の態様によると、明示的な又は推論されるコンテキスト・スイッチ(例えば、1つのアプリケーション又は関数から別のアプリケーション又は関数へのスイッチ)の認識(cognizance)は、プロセッサ内に含まれる。一実施形態において、可能なコンテキスト・スイッチの検知に基づいて、復元ポイントの全て又はサブセットが無効化される。
一例では、例えば、コンテキスト・スイッチ・ルーチンの一部として、1又は複数の復元ポイントを無効化するために用いられる無効化命令が提供される。一実施形態において、この命令は、オペレーティング・システムのコンテキスト・スイッチ・コードにより実行される。別の実施形態において、別のアプリケーション・モジュール(例えば、カーネル)へのスイッチを示す許可レベルの変更、従って、別のアプリケーションへの可能な将来のスイッチに基づいて、少なくとも1つの復元ポイントが無効化される。さらに別の実施形態において、このことは、こうしたシステム・コールが、POSIX getpidシステム・コールなど短いものであり得るとき、レジスタ復元ポイントを、システム・コールを行う関数の存在下での使用を可能にするように行われない。
さらに別の実施形態において、プロセス(例えば、LPID(論理パーティションid)及びPID(プロセスid)の一方又は両方)を示すレジスタの値の変更を用いて、タスク・スイッチを識別する。別の実施形態において、レジスタ・スナップショットは、特定のプロセスを示す表示(indicia)値と関連付けることができ、復元レジスタがレジスタ復元スナップショットを用いる前に、スナップショットIDと関連した表示とレジスタ復元を要求している現在のプロセスの表示との間の表示の一致が確認される。1つの例示的な実施形態におけるLPID及びPIDなどの種々の表示を、実施形態において用いることができる。
さらに、一実施形態において、無効化命令は、例えば、setjump/longjump処理、又はC++/Java構造化例外処理などのために、プログラム内の従来のものではない制御フローのために用いることもできる。他の例も存在する。
図46~図48を参照して、コンテキスト・スイッチを認識し、1つ又は複数のスナップショット(又は、その部分)を無効化するための例示的な技術に関するさらなる詳細が以下に説明される。
図46の例において、invalidate restoration snapshot(復元スナップショット無効化)命令が用いられる。この命令は、例えば、それがinvalidate restoration snapshot命令であることを示すオペレーション・コードと、無効化される1つ又は複数のスナップショットを示す又は決定するために用いられる1つ又は複数のフィールドとを有するアーキテクチャ化命令である。これは新しい命令であるので、一例において、オペレーティング・システムは、命令を認識し使用するように修正される。
図46を参照すると、プロセッサが、invalidate restoration snapshot(復元スナップショット無効化)命令を取得する(例えば、受け取る、提供する、取り出す、決定する、有する等)(ステップ1800)。本明細書で説明されるように、この命令は、コンテキスト・スイッチを判断することに基づいて開始することができる。命令の取得に基づいて、プロセッサは、無効化される1つ又は複数のスナップショットの命令による表示に基づいて、スナップショット・スタック上の少なくとも1つのエントリをクリアする(ステップ1802)。さらに、一例において、無効化される1つ又は複数のスナップショット内に示されるアドレスに対応するキャッシュ・エントリ内のマーク付けビットの1つ又は複数がクリアされる(例えば、ゼロに設定される)(ステップ1804)。
図47において、オペレーティング・システムの更新を要求するアーキテクチャ化命令を用いる代わりに、発見的手法(heuristics)を用いて、コンテキスト・スイッチがあるかどうかを判断し、従って、1つ又は複数のスナップショットが無効化される。図47を参照すると、最初に、プロセッサが、コンテキスト・スイッチを示すプロセッサ状態の変更を検知するかどうかを判断する(問い合わせ1820)。例えば、プログラム状態語(program status word、PSW)が変更され、又はアドレス変換テーブルへのポインタが変更され、その両方が、コンテキスト・スイッチを示し得る。これらの機構又は別の機構の1つによりコンテキスト・スイッチが示される場合、プロセッサは、無効化される1つ又は複数のスナップショットのスナップショット・スタック上の少なくとも1つのエントリをクリアする(ステップ1822)。さらに、一例において、無効化される1つ又は複数のスナップショット内に示されるアドレスに対応するキャッシュ・エントリ内のマーク付けビットの1つ又は複数がクリアされる(例えば、ゼロに設定される)(ステップ1824)。他の場合には、コンテキスト・スイッチが示されない場合、この処理は終了する。
さらに別の実施形態において、無効化命令又は発見的手法の使用は、プロセッサにより動的に選択することができる。図48を参照すると、プロセッサは、コンテキスト・スイッチがあったかどうかを判断するために、invalidate restoration snapshot命令又は発見的手法技術のいずれかを動的に選択する(ステップ1830)。例えば、オペレーティング・システムが、こうした命令を認識しないバージョン・レベルにある場合、発見的手法が選択される。しかしながら、オペレーティング・システムが命令を認識する場合、オペレーティング・システムは、命令の発行を待って、又は発見的手法を用いて、スナップショットが無効化されるかどうかを判断することができる。命令を受け取ることにより、又は発見的に、無効化が実行されると判断される場合(問い合わせ1832)、プロセッサは、無効化されるスナップショット・スタック上の少なくとも1つのエントリをクリアする。さらに、一例において、無効化される1つ又は複数のスナップショット内に示されるアドレスに対応するキャッシュ・エントリ内のマーク付けビットの1つ又は複数がクリアされる(例えば、ゼロに設定される)(ステップ1836)。他の場合には、コンテキスト・スイッチが示されない場合、この処理は終了する。
一態様において、レジスタ保存は、関数コール・バルク状態保存のためにインクリメンタルに行われ、レジスタは、例えば、register Spill Multiple命令の受信時に即座にメモリに保存されない。これに対応して、例えば、トランザクション・メモリ保存へのスイッチのためにインコア保存が終了するとき、レジスタが保存される。これは、例えば、移行の状態機械を用いて実施することができる。
別の態様において、例として、Store Multipleの場合に、インクリメンタル状態保存が実行されると、例えば、それが書き込まれない場合でも、それを書き込みセットの一部としてマーク付けすることによって、Store Multipleのメモリ範囲を監視する。
1つ又は複数の態様において、複数のバルク保存要求を受け取ることができ、従って、所定の要求が、実行されている処理と互換性がある(compatible)かどうかを判断する。例えば、既存のバルク保存要求が存在しない場合、受け取られる新しい要求は互換性がある。既存のバルク保存要求が存在し、バルク保存要求を受け取った場合、さらなる判断が行われ:レジスタが相互排他的である場合、それらは互換性があるとみなすことができる。それらが1つ又は複数のレジスタを参照し、介在する修正が生じた場合、それらは互換性があるとみなし得る。ハードウェアが複数のバルク保存/復元をサポートする場合、それらを互換性があるとみなし得る。
既存のトランザクション・メモリ・ロールバック要求が存在し、トランザクション・メモリ・ロールバック要求を受け取った場合、さらなる判断が行われ:ネスト化トランザクションが平坦化されたトランザクションとして実施される場合、それらは互換性がある。ネスト化トランザクションが真のネスト化トランザクションであり、コンテキスト(例えば、スナップショット又は状態の他の保存)が利用可能である場合、それらは互換性がある。付加的な状態を保存するためのストレージがそれ以上残っていない場合、ネスト化トランザクションの平坦化を選択し、互換性を達成することができる。
既存のトランザクション・メモリ・ロールバック要求が存在し、レジスタ保存要求を受け取った場合、さらなる試験が実行される。:複数のバルク要求がサポートされ、ストレージが付加的な状態のために利用可能である場合、それらは互換性があるとみなし得る。トランザクション・メモリ・ロールバック・セットとStore Multipleセットとの間で共有されるレジスタに対して介在する変更が生じていない場合、それらは互換性がある。
既存のバルク保存要求が存在し、トランザクション・メモリ・ロールバック要求を受け取った場合、さらなる試験が実行される。:複数のバルク保存がサポートされ、ストレージが付加的な状態のために利用可能である場合、それらは互換性があるとみなし得る。トランザクション・メモリ・ロールバック・セットとStore Multipleセットとの間で共有されるレジスタに対して介在する変更が生じていない場合、それらは互換性がある。
図49を参照して、TBegin命令の受信に基づいた1つ又は複数のスナップショットの管理と関連した処理の一例が説明される。TBegin命令を取得する(例えば、受け取る、提供する、有する、取り出される、決定される)(ステップ1900)。レジスタ復元ファシリティがアクティブに使用されているかどうかを判断する(問い合わせ1902)。レジスタ復元ファシリティがアクティブに使用されていない場合、トランザクション・ロールバック・スナップショットを作成し(例えば、TBegin命令により保存されるように指示されるレジスタのスナップショットを撮り)(ステップ1912)、トランザクション状態干渉の追跡を開始する(例えば、インメモリ書き込みがスナップショットのレジスタの1つに対応するかどうかを追跡する)(ステップ1914)。
問い合わせ1902に戻ると、レジスタ復元ファシリティがアクティブに使用中である場合、トランザクション要求と互換性があるスナップショットが存在するかどうか(例えば、レジスタは同一か)について判断する(問い合わせ1904)。スナップショットが要求と互換性がある場合、トランザクション実行のために、レジスタ復元スナップショットが使用される(ステップ1906)。しかしながら、スナップショットが要求と互換性がある場合、それ以上のスナップショットを作成できるかどうか(例えば、スナップショット・スタック内にスペースがあるか)についてさらなるチェックを行う(問い合わせ1908)。それ以上のスナップショットを作成できる場合、処理はステップ1912に進む。他の場合には、レジスタ復元スナップショットを非アクティブにし(ステップ1910)、随意的に、例えば、それが前に格納されていない場合、スナップショットをメモリ内に格納する。別の実施形態において、復旧スナップショット及び復元スナップショットのための別個のスタックがある。
図50を参照して、1つ又は複数のスナップショットの管理と関連した処理の別の例が説明される。この例において、レジスタ保存指示要求(例えば、Store Multiple)を取得する(例えば、受け取る、提供する、決定する、取り出す、有する等)(ステップ1920)。互換性のない要求のために、レジスタ復元ファシリティが使用中であるかどうかを判断する(問い合わせ1922)。ファシリティが、こうした要求のために使用中である場合、付加的なスナップショット(スナップショット・コンテキストと呼ばれる)のために、ストレージが利用可能かどうかについて判断する(問い合わせ1924)。利用可能でない場合、レジスタ状態をメモリ内に格納する(ステップ1932)。しかしながら、それ以上のスナップショット・コンテキストが利用可能である場合、又はレジスタ復元ファシリティが互換性のない要求のために使用中でない場合、レジスタ復元スナップショットを作成する(ステップ1926)。さらに、インメモリ・レジスタ復元バッファのための干渉追跡を開始する(ステップ1928)。随意的に、レジスタ状態をメモリ内に格納する(ステップ1932)。
さらに別の態様において、復元されるレジスタの範囲を決定するために、複数のload及びstore命令を合体する(coalesce)ための機能が提供される。例えば、プロセッサは、それぞれ単一の復元及び保存操作に合体することができる個々のロード及びストア操作のシーケンスを認識するように適合される。合体は、種々の技術を用いて行うことができる。
本発明の態様の1つ又は複数の実施形態によると、ロード及びストアのシーケンスの合体を用いて、z/Architectureの汎用レジスタのためのSTMG及びLMG、又はPower ISA固定小数点のためのSTMW及びLMWのような、bulk save及びrestore命令なしに、レガシー・コード・シーケンスと併せて本明細書で説明されるレジスタ復元技術の使用を可能にする。特に、これは、とりわけ、z/Architecture及びPower ISAにおける浮動小数点レジスタ、及びstore multiple及びload multiple floating point命令が存在しないPower ISAにおけるベクトル・レジスタのような、z/Architecture及びPower ISAにおける幾つかのレジスタ・タイプのバルク保存を含む。さらに、幾つかアーキテクチャは、いずれのレジスタ・タイプに対しても、store multiple及びload multiple命令を提供しない。
一実施形態において、各ストア要求は、認識できる複数の合体シーケンスのストアを開始することができる。別の実施形態において、特定のストア要求だけが、認識することができる合体シーケンスをトリガする。これは、例えば、動作している付加的な論理と関連した電力及び他のオーバーヘッドを回避するためである。1つ又は複数の実施形態において、合体シーケンスは、例えば、フレーム・ポインタ、スタック・ポインタ、又は他の顕著なレジスタなどの特定のレジスタをベース・レジスタとして用いるストア要求によってのみ開始される。別の実施形態において、隣接するアドレスを有する少なくとも第1及び第2の命令(命令のイメージ、すなわち、データ・サイズに対応する同じベース及び変位差に基づく)がシーケンスを開始する。他の例も可能である。
一実施形態において、合体シーケンスの第1のストアが行われると、レジスタ・ファイル(例えば、レジスタ・ファイル・マップ等)がスナップショットされる。一例では、ビット・マスクが初期化され、スナップショットからどのレジスタを復元できるかを示す。レジスタへの後の書き込みは、ビット・マスクにおいて、特定のレジスタが、もはやスナップショット内の値に対応しないことを示す。従って、後のストアがこうしたレジスタを参照するとき、これは、合体シーケンスと独立して別個に実行する、新しい合体シーケンスを開始するかのいずれか、又はその両方である。同様に、一実施形態は、ストアが、初めに連続したストレージに等しい(例えば、第1のストアが、レジスタr1の変位d1において生じた場合、レジスタr2は、同じベースを用いて、変位d2=d1+(語のサイズ)*(r2-r1)において格納される)ことを要求し得る。他の実施形態において、命令シーケンスに対して厳密な順番を課すことがあり、例えば、前の命令がレジスタR(N)を格納した場合、各ストアは、レジスタR(N+1)を格納することになり、単一のカウンタが実施形態を追跡するのを可能にする。他の変形も可能である。一実施形態において、発見的手法を用いて、スナップショットの作成をトリガし得るストアを制限する。
別の実施形態において、本発明の態様による状態のスナップショット撮影及びレジスタ復元をトリガすることができる、個々のストア及びロードのストア及びロードのグループへの合体は、グループ形成と併せて行われる。一態様によると、命令がグループ化され、ストア範囲内のレジスタの修正に介在することなく、隣接するストアを保持する。一例として、制御論理は、ストアが連続的に行われること、例えば、共通の(修正されていない)ベースに関連した変位d1及びd2においてd2=d1+(語のサイズ)*(r2-r1)(及び、一例においては、インデックスない、又は同じ修正されていないインデックス)であることを保証する。
一実施形態において、ロードは、ストアと類似した方法で合体される。別の実施形態において、ロードは、単独で実行され、そこで、少なくとも1つの実施形態において、レジスタ復元のオーバーヘッドは、主として、インコア復元のために格納された値を取り出すための機構を格納し保持することと関連付けられるので、各ロードについて、対応するリネーム・レジスタは、レジスタ・スナップショットから個々に取り出される。
認識することは、事前デコード、グループ形成及びデコード段階の1つにおいて実行される。追跡キャッシュ、ループ・キャッシュ、又は他のこうしたキャッシュを用いる他の実施形態において、認識することは、ループ、追跡、又はiop(内部操作)キャッシュを作成及び/又は最適化するように適合された論理に動作可能に結合することができる。
一態様において、インコア値プールからレジスタを復元するための技術は、隣接するレジスタの隣接する個々のストア命令のシーケンスを認識すること、復元のために単一のスナップショットを作成し保持すること、及び単一のスナップショットを用いて、単一のスナップショットからレジスタをバイパスすることを含む。
図51を参照して、スナップショットの作成のために個々のレジスタ・ストア要求を合体する一実施形態が説明される。単一のストア要求を取得する(例えば、受け取る、有する、提供する、取り出す、決定する等)(ステップ2000)。これがストア・シーケンス(例えば、マルチ・ストア/レジスタ・スピル・シーケンス)の可能な開始であるかどうかについて判断する(問い合わせ2002)。これは、レジスタのサブセット、アドレッシング・モード、アドレッシング範囲、又はレジスタ・スピル・シーケンスの別の表示をチェックすることを含むことができる。これが可能なストア・シーケンスの開始ではないと判断される場合、1つ又は複数のストアを実行する(ステップ2004)。しかしながら、これがストア・シーケンスの可能な開始である場合、現在のストア要求を用いる将来のレジスタ復元スナップショット要求を追跡する(ステップ2006)。
次の命令がストア要求の継続であるかどうかについて判断する(問い合わせ2008)。次の命令がストア要求の継続である場合、次の命令をストア要求に付加する(ステップ2010)。処理すべき命令がそれ以上あるかどうかについてチェックを行う(問い合わせ2012)。それ以上ある場合、処理は問い合わせ2008に進む。
次の命令がストア要求の継続でない場合(問い合わせ2008)、レジスタ復元スナップショットが望ましいかどうかについて判断する(問い合わせ2014)。つまり、将来のスナップショットが、スナップショットを価値のあるものにするのに十分なレジスタを有するか?スナップショットが望ましい場合、スナップショットを作成するために、レジスタ復元スナップショット技術を実行する(ステップ2016)。しかしながら、スナップショットが望ましくない場合、1つ又は複数のストアを実行する(ステップ2018)。少なくとも1つの実施形態によると、スナップショットを作成及び管理するコストを償却するために、特定の最小数のレジスタを保存するスナップショットが望ましい。従って、少なくとも1つの実施形態において、将来のスナップショットが設定された閾値よりも多くのレジスタを有するとき、これは望ましいと考えられる。別の実施形態において、スナップショットの望ましさは、可能なランタイムの改善に基づいて推定される。少なくとも1つの実施形態において、将来のスナップショットが、設定された閾値よりも多くのランタイムの改善を提供するとき、これは望ましいと考えられる。他の可能性も存在する。
図52を参照して、個々のレジスタ復元要求を合体する1つの実施形態が説明される。単一のロード要求を取得する(例えば、受け取る、有する、取り出す、決定する、提供する等)(ステップ2040)。これが、レジスタ復元シーケンスの可能な開始であるかどうかについて判断する(問い合わせ2042)。これは、レジスタのサブセット、アドレッシング・モード、アドレッシング範囲、又はレジスタ再ロードの別の表示をチェックすることを含むことができる。少なくとも1つの実施形態において、問い合わせ2042は、ロード要求が、復元されるレジスタ及び指定されるインメモリ記憶位置に対する最新のレジスタ・スナップショットに対応するかどうかの試験を含む。これが可能な復元シーケンスの開始ではないと判断される場合、1つ又は複数のロードを実行する(ステップ2044)。しかしながら、これが復元シーケンスの可能な開始である場合、現在のロード要求を用いて将来のレジスタ復元要求を追跡する(ステップ2046)。
次の命令が復元要求の継続であるかどうかについて判断する(問い合わせ2048)。次の命令が復元要求の継続である場合、次の命令を復元要求に付加する(ステップ2050)。処理される命令がそれ以上あるかどうかについてチェックを行う(問い合わせ2052)。それ以上ある場合、処理は問い合わせ2048に進む。
次の命令が復元要求の継続でない場合(問い合わせ2048)、復元要求がレジスタ復元スナップショットと一致するかどうかについて判断する(問い合わせ2054)。一致する場合、レジスタ復元スナップショット復元技術を実行する(ステップ2056)。他の場合には、1つ又は複数のロードを実行する(ステップ2058)。
1つ又は複数の態様において、Spillm命令に遭遇したとき、インコア・レジスタ復元スナップショットが作成される。付加的に、インコア・レジスタ復元スナップショットが無効化された場合、スピルされた(spilled)レジスタを、一時的記憶場所(一般的に、現在の関数のスタック・フレーム)に格納する。Spillmレジスタの内容をストア・キュー上に置き、これをメモリに書き込む。
レジスタ・スナップショットが有効である場合、レジスタを、例えば、Reloadm命令により、インコア・レジスタ復元スナップショットから復元する。他の場合には、Reloadmは、値をメモリ(例えば、現在の関数のスタック・フレーム内の一時的ストレージ領域)から再ロードする。
一態様において、Reloadm命令が完了すると、キャッシュに、最終的にはシステム・メモリに書き込まれる、Spillm命令に基づいて格納される値が、依然としてストア・キューへの待ち行列に入れられることがある。ひとたびReloadmが完了すると、バッファへのさらなる読み取りは行われない。従って、これらの値は、ストア・キュー内の貴重な空間を使い果たし、ストア・キュー内の後のストアに対する時間遅延、並びに、役立たないことが分かっているストアの処理中のエネルギー消費を引き起こす。従って、一例において、Reloadm命令が完了すると、Spillm/Reloadm保存/復元シーケンスに対応するストア・キュー・エントリが無効化される。例えば、それらは、ストア・キューから除去されるか、又はそれらが、メモリ階層にコミットされるストア・キューの先頭にきたときに、書き込まれない。他の例も存在する。
さらに別の実施形態において、遠隔相互無効化(cross-invalidate、XI)を受け取ると、Spillmで識別されたストア・キュー・エントリは提供されない。さらに、別の実施形態において、遠隔XIを受け取ると、Reloadmが完了したSpillmで識別されるストア・キュー・エントリは提供されない。
ストア・キューを管理する態様が、本発明の1つ又は複数の態様により増強されるストア・キュー・ライトバック論理により制御される。図53に示されるように、一例において、ストア要求(SRQ)ライトバック論理2100が、ストア・キュー2102内に配置され、このストア・キュー2102は、各ストア・キュー・エントリについてアドレス情報2104及びデータ2106をさらに含む。ストア・キュー2102は、中央処理ユニット(CPU)2112のロード/ストア・ユニット(LSU)2110からストア要求2108を受け取る。CPU2112は、例えば、命令デコード・ユニット2116を用いてデコードされる命令をフェッチする命令フェッチ・ユニット(IFU)2114をさらに含む。デコードされた命令は、1つ又は複数の実行ユニット2118を介して実行することができる。
示されるように、ロード/ストア・ユニットは、ストア要求2108をストア・キュー2102上に置く。ストア要求ライトバック論理2100は、1つ又は複数のキャッシュ2124及びメモリ2126を含むことができるメモリ・サブシステム2122へのライトバックを実行する。本発明の態様によると、図54を参照すると、ライトバック論理は、以下を含む。:
Figure 0007046098000011
上記及び図54に示される論理は、下向きに伸びる、すなわち、スタック・ポインタの値より小さいアドレスがスタックの部分ではない、プロセッサ・スタックを参照して説明されるが(問い合わせ2156)、当業者であれば、本明細書での教示は、プロセッサ・スタックが上向きに伸びる、すなわち、例えば、「より小さい」場合の試験を上記の、図54の問い合わせ2156の例示的なライトバック論理疑似コードにおける「より大きい」場合の試験と置換することにより、スタック・ポインタより大きいアドレスがスタックの部分ではないアーキテクチャに適合され得ることを理解するであろう。
別の実施形態において、図55を参照すると、ライトバック論理は、:
Figure 0007046098000012
一実施形態において、図54~図55の処理は、それらの命令が、バッファが特定の時点(例えば、ストアとロードとの間)における書き込みに対してプログラマーがアクセス可能でないことを示すので、Spillm/Reloadm命令と関連して実行される。別の実施形態において、1つ又は複数の命令又は他の機構を用いて、load multiple状態の復元後、又は別の選択された時点の後、もはやストレージ・バッファにアクセスできないことを示す。
さらに他の実施形態において、スタック・ポインタの下方のスタック領域(すなわち、スタックを保持するために割り当てられたアドレス空間内のページ)内に格納されるデータは、もはや使用されないと考えられ、ストア・キューからのライトバックの際、及び/又はXI相互問い合わせ(cross-interrogate)要求に応答して抑止される。こうした実施形態において、データがスタック・ポインタの下方に割り当てられる最適化は許容可能でない。データをスタック・ポインタの下方に割り当てることができる(例えば、Power ELFv2 ABI、又はLinux用のAMD Red Zone仕様のようABIにより定められる領域における)最適化をサポートする別の実施形態においては、スタック・ポインタを超えてデータを割り当て、アクセスすることができる定められた領域を超えてデータが書き込まれるとき、データのライトバックは阻止され、例えば、Power ELFv2 ABIに従って、スタック・ポインタの下方に512バイトより多いアドレスについて、ストア・キューからのライトバックを抑止することができる。
本発明のさらに別の態様において、レジスタ復元スナップショットへの代案を用いることができる。この代案は、復旧ファイル(recovery file)とも呼ばれる復旧バッファである。予測ミス又は例外の場合、レジスタ値は、スナップショットではなく、復旧バッファから復旧することができる。レジストが上書きされるたびに、それらが復旧に必要とされる場合、古い値が復旧ファイル・キュー内に格納される。こうした復旧ファイルの一例が、図56に示される。一例において、復旧バッファ2200がキューとして実装され、実行される命令2202に対応する1つ又は複数のレジスタ復旧値を含む。一例として、復旧バッファ2200は、復旧されるレジスタ番号、Rn、Rk、Rm等を有する複数のレジスタ2204と、復旧されるレジスタ値2206とを含む。命令タグ2208が、各レジスタ2204に割り当てられる。キューは、命令により上書きされる値を復旧することによりロールバックすることができる最も古い命令に対応する復旧レジスタを指し示すテール・ポインタ2209と、最も若い命令に対応する復旧値を指し示し、命令の実行に応答して付加的な復旧値が挿入される位置を示すヘッド・ポインタ2210とを有する。
一態様において、格納された復旧値が、復元する命令と関連付けられる。格納される値は、命令により上書きされ、命令がフラッシュされると、復旧が実行される。フラッシュされた命令の各々について、値が復旧バッファ2200から復旧され、命令に対応する復旧値2206を読み取る、状態機械を提供することができる。状態機械は、順方向又は逆方向走査を有することができる。
図57を参照して、復旧バッファに関するさらなる詳細が説明される。一例において、命令は、命令フェッチ・ユニット2222により命令キャッシュ2220からフェッチされ、命令デコード・ユニット2224によりデコードされる。1つ又は複数のレジスタ・ファイルから、オペランドが取得される。レジスタ・ファイルからの値が修正される場合、これは、復旧バッファのヘッドにおける復旧バッファ2228内に格納される。1つ又は複数の実行ユニット2230は、命令を実行し、完了及び復旧ユニット2232は、命令を完了する、又は予測ミス又は例外がある場合、処理は、後方にウォークする復旧バッファ2228に進み、一例において、予測ミス又は例外ポイントにおけるイン・オーダー方式のレジスタ状態が復元されるまで、復元される各値を復旧バッファ2228からレジスタ・ファイル2226にコピーする。
本発明の一態様によると、高速プロセッサ・メモリ内に格納された復旧値を用いて、load multiple、coalesced load multipleシーケンス、又はReloadm命令に対応するレジスタ復元要求に応答して値を復元する。
一例において、レジスタが上書きされるとき、古い値は、復旧バッファ内に格納される。復旧の際、復旧バッファ内の値をもとのレジスタ・ファイルにコピーする。一例において、プロセッサは、store multipleへの入口にある値を取り出すために、復旧ファイルをステップ・スルーする。例として、レジスタ値を復元するための復旧バッファのステップ・スルーは、逆方向走査又は順方向走査を介して行われる。(1つの特定の例において、指定されたレジスタに対する保存要求に連続する最も古い復旧エントリが復元される。)順方向走査のための論理の一例が、以下に示される。:
Figure 0007046098000013
上記の例によると、各レジスタについて、Restoreは、レジスタが依然として復元されるかどうかを追跡する。これは、Load Multiple(又は、Reloadm)命令により指定されるレジスタに対応する全てのレジスタを復元するように初期化される。Load Multiple(LM)が状態を復元する、対応するStore Multiple(STM)のタグを特定できない場合、特別な処理を実行する。少なくとも1つの実施形態において、特別な処理は、Load Multiple又はReloadm命令内で指定されるメモリ位置から値をロードすることに対応する。
次に、疑似コードが、レジスタ保存命令(例えば、STM Store Multiple又はSpillm)のタグに対応する復旧バッファ・エントリから開始する復旧バッファを通り、命令復元レジスタ(例えば、Load Multiple又はReloadm)まで、順方向に走査する。
各エントリについて、特定の復旧バッファ・エントリ内に含まれるレジスタ番号(図56の2204)を示す少なくとも1つのフィールドRec.regと、レジスタに復元される値、Rec.value(図56のフィールド2206)とからなる、復旧バッファ・エントリを読み出す(すなわち、値RecFile[]により表される)。レジスタが、Load Multiple又はReloadmのレジスタの1つに対応する場合、STM Store Multiple(Spillm)後に上書きされた第1の(最も古い)値が復元される。
復旧バッファから復元されていない、Restore[]内のいずれの残りのレジスタも、メモリから復元される。
同様に、逆方向走査において、論理は以下を含む。:
Figure 0007046098000014
さらに別の態様において、復旧ファイル・テールを超える値を復旧することができる。これは、値が上書きされていない場合に実行することができ、そのことは、ヘッドがテール・エントリを上書きすることに応答して移動するヘッド/第2のテールの最高水位線に対して比較することにより、判断することができる。ヘッドが第2のテールより大きいか又はこれに等しい場合、第2のテールは、ヘッドに等しい。
本明細書で説明されるように、例外及び分岐予測ミス復旧、並びにレジスタ復元により復元される実際の状態が、一例において、物理レジスタ内に含まれる。新しいレジスタへの書き込みのために、物理レジスタが割り当てられ、書き込まれるアーキテクチャ上のレジスタが、割り当てられた物理レジスタにマッピングされ、物理レジスタに書き込まれる。本発明の態様によると、物理レジスタは、レジスタ復元要求に応答してジスタを復元するためのソースとして物理レジスタの有用性を最大にするように、レジスタ書き込み要求宇に応答して割り当てられる。例えば、物理レジスタ・ファイルからの新しいレジスタのための割り当て技術が、レジスタ復元スナップショットと関連付けられていないレジスタの選択を優先するように修正される。さらに、少なくとも1つの実施形態において、レジスタがレジスタ復元スナップショットから取得される場合、選択は、スナップショットから、又は最小の性能への影響を有するスナップショットから復元されるレジスタの一部とすることができない物理レジスタを選択することにより、性能への影響を最小にするように行われる。少なくとも1つの実施形態において、最小の性能への影響に対応するスナップショットは、最も古いスナップショットである。本発明の1つ又は複数の態様によると、この処理は、図58~図59を参照してさらに説明される。
図58を参照すると、一例において、使用されていない物理レジスタが利用可能かどうかを判断する(問い合わせ2300)。使用されていない物理レジスタが利用可能である場合、使用されていないレジスタを選択し、割り当てる(ステップ2302)。しかしながら、使用されていない物理レジスタが利用可能でない場合、本発明の態様に従って、レジスタを選択する(ステップ2304)。例えば、復旧(例えば、予測ミス、例外等)のためのアクティブなスナップショット内にない;すなわち、レジスタ復元スナップショット内で用いられるが、復旧スナップショット内で用いられないレジスタが選択される。一例において、例えば、最も古いスナップショットが、すぐ空けることができるレジスタを有する可能性が高いので、レジスタは最も古いスナップショットから選択され、より若いスナップショットにおけるレジスタは迅速に使用できないことがあるので、より古いスナップショットからのレジスタを選ぶのがより低コストであり得る。別の実施形態において、復元されるレジスタ、すなわち、STM又はSpillm命令により保存されるように指定されたレジスタの範囲外のレジスタに対応しないレジスタが、レジスタ復元スナップショットから選択される。
さらに、レジスタは、スナップショットにおいて無効としてマーク付けすることができ(ステップ2306)、又はレジスタ復元スナップショットを割り当て解除することができる(ステップ2308)。レジスタ復元スナップショットが割り当て解除されると、そのスナップショットと関連付けられたレジスタは、それらが別のスナップショット内でも使用されるレジスタに対応しないとき、利用可能になる。
次に、選択されたレジスタが割り当てられる(ステップ2310)。
図59を参照して、レジスタを割り当てるための別の実施形態が説明される。一例において、使用されていない物理レジスタが利用可能かどうかについて判断する(問い合わせ2330)。使用されていない物理レジスタが利用可能である場合、使用されていないレジスタを選択し、割り当てる(ステップ2332)。しかしながら、使用されていない物理レジスタが利用可能でない場合、最も古いスナップショットを選択し(ステップ2334)、選択されたスナップショットがレジスタ復元スナップショットであるかどうかを判断する(問い合わせ2336)。選択されたスナップショットがレジスタ復元スナップショットである場合、それを割り当て解除し、それらが別のスナップショット内にない場合、それと関連したレジスタを利用可能にするのを可能にする(ステップ2340)。処理は、問い合わせ2330に進む。
問い合わせ2336に戻ると、選択されたスナップショットがレジスタ復元スナップショットでない場合、処理は、最も古いスナップショットが非アクティブになるのを待つ(ステップ2338)。処理は、問い合わせ2330に戻る。
他の実施形態において、最も古いスナップショットが非アクティブになるのを待つ代わりに、他のスナップショットをチェックすることができる。さらに、他の実施形態において、最初に最も古いもの以外のスナップショットを選択することができる。多くの変形が可能である。
本明細書で説明されるように、分岐予測ミスの復旧及び正確な例外の実施のために、リネーム・レジスタ及びリネーム・マップ(例えば、スナップショット)を用いることができる。例外又は分岐予測ミスが発見されると、イン・オーダー方式のプログラム状態を、レジスタ・リネーム・マップ及び物理レジスタから、ストア・キュー(及び潜在的には、例えば、トランザクション・メモリを用いる実施形態における、可能なキャッシュ)内に投機的に格納された状態をフラッシュすることにより、復旧することができる。例外又は分岐予測ミスがもはや発生しない場合、命令はコミットされているので、レジスタ・リネーム・マップ及び物理レジスタを割り当て解除し、再使用することができる。
少なくとも1つの実施形態によると、分岐予測ミスの復旧及び正確な例外を実施するために用いられるリネーム・レジスタ及びリネーム・マップは、プログラム状態を保存及び復元するため、例えば、関数呼び出しの文脈において、それぞれ呼び出し元及び呼び出し先における呼び出し元保存レジスタ及び呼び出し先保存レジスタを復旧するためにレジスタ復元を実施するためにも用いられる。
さらに、一実施形態によると、レジスタ・スナップショットは、分岐予測ミスの復旧を実施するためにイン・オーダー方式で作成され、アウト・オブ・オーダー方式の実行の存在下で正確な例外を実施する。一実施形態において、レジスタ復元を用いて、アーキテクチャ化した状態を復旧するために、付加的なスナップショットが作成される。しかしながら、レジスタ復元のためにこうしたレジスタ・スナップショットを保持することにより、不十分な数の空いたレジスタが利用可能となり、新しいターゲット・レジスタを実行することができないとき、実行中にプロセッサが進行するのを妨げる。
また、レジスタ復元スナップショットを割り当てることができるが、復旧は決して行われ得ない。例えば、構造化したC++/Java例外処理により、その状態を絶えず復元することなく、関数がアボートすることがあり、又は、setjump/longjumpは同様に、レジスタ復元のために割り当てられたレジスタ・スナップショットを割り当て解除できるレジスタ復元に直面するのを防止することができる。
一実施形態によると、レジスタ・スナップショットは、別個のキュー内に保持され、スナップショット内で参照されるリネーム・レジスタが、割り当て解除されることを防止し、レジスタ・スナップショットは、空いたレジスタの適切な供給を保証することに基づいて、レジスタ・スナップショットを再利用することができる。従って、レジスタのフリーリスト、すなわち、新しいレジスタ割り当て要求を満たすために用いられるレジスタ・リネーム・プールは、特定の数のレジスタを下回り、フリーリストがターゲット・サイズに達するまで、レジスタ・スナップショットを割り当て解除することができる。ターゲット・サイズは、固定閾値とすることができ、又はスナップショットを割り当て解除し、利用可能な付加的なレジスタにするのに必要とされるサイクル数により潜在的に重み付けされる現在のワークロードにより割り当てられる新しいリネーム・レジスタの数の推定値に基づくことができる。(一実施形態において、その閾値は0とすることができ、スナップショットは、リネーム・レジスタ割り当て要求を満たすためにのみ割り当て解除される。しかしながら、そのポリシーは、命令が、リネーム・レジスタが利用可能になるのを待っている間、リソース・ストールをもたらし得る。)
一実施形態において、レジスタ・リネーム・スナップショット及びその関連したレジスタを割り当て解除し、FIFO(先入れ先出し)ポリシーでリネーム・フリーリストに再利用し、そこでもまた、最も早く割り当てられたスナップショットを最初に割り当て解除する。別の実施形態において、レジスタ復元により用いられたレジスタ・スナップショットもまた即座に割り当て解除され、このことは、関数呼び出しに用いられるスタック・モデルの特定の利点を利用することができ、ここで、一番最近入力された関数が最初に終了され、従って、そのレジスタ復元状態は、最初に割り当て解除に利用可能になり得る。
別の実施形態において、最新のバルク保存要求に対応する単一の(又は、最後のn個の、ここでnは、2のような小さい整数)スナップショットのみが、レジスタ復元のために格納される。これは単一の関数呼び出しのためのレジスタ復元のみをサポートするが、これらがどちらも動的に最も高頻度であり(多くのワークロードにおいて、関数呼び出しの50%以上がリーフ関数である)、性能を低下させるストール・サイクルをもたらすロード/ヒット/ストア・インターロックに関して最大の悪影響を有するとすると、設計の複雑さごとに達成される利得の関係に関して最大の利点を提供する。
少なくとも1つの実施形態において、レジスタ復元のためのレジスタ・スナップショットが、マスク制御下でキャプチャされるので、スナップショットは、Spill/STM要求により列挙されるレジスタのみを含み、リネーム・レジスタが、不必要に再割り当てするのを防止することができる。
別の実施形態において、レジスタ復元のために作成されたレジスタ・リネーム・マップ・スナップショット内に列挙することができるレジスタ保存/復元シーケンスに対応するレジスタは、独立して保持されない。代わりに、リネーム・レジスタは、分岐予測ミスの復旧及び正確な例外を実施するためにそれらの使用に基づいて割り当て解除される。レジスタがもはや必要とされなくなると、それらは、フリーリスト・プールに戻される(例えば、Buti他のもののような実装に従って)。
一実施形態において、フリーリスト選択アルゴリズムが、レジスタ復元スナップショットにより参照されないフリーリストからレジスタを選択するように修正される。別の実施形態において、フリーリスト選択アルゴリズムは、他のリネーム・レジスタより早くレジスタ・リネーム・スナップショットに割り当てられたフリーリストからレジスタを選択するように修正される。さらに別の実施形態において、フリーリスト選択アルゴリズムは、アクティブなレジスタ・リネーム・スナップショット(すなわち、例えば対応する関数のために、レジスタ状態を復元するために既に用いられた一番最近割り当てられたスナップショットを除く)により参照されないフリーリストから、レジスタを選択する。さらに別の実施形態において、これらの3つの基準及び付加的な基準のいずれかの組み合わせを用いることができる。さらに別の実施形態において、これらの3つの基準及び付加的な基準の全ての組み合わせを用いることができる。他の可能性も存在する。
本明細書で説明されるのは、レジスタ復元処理の種々の態様及び実施形態である。多数の例及び技術が提供されるが、本発明の態様の趣旨から逸脱することなく、変形及び/又は追加を作成することができる。
本発明の1つ又は複数の態様は、コンピュータ技術に密接に結び付いており、コンピュータ内の処理を容易にし、その性能を改善する。これが本発明の1つ又は複数の態様に関連するとき、コンピューティング環境内の処理を容易にする1つの実施形態のさらなる詳細が、図60~図61を参照して説明される。
図60を参照すると、一実施形態において、プロセッサにより、複数のアーキテクチャ上のレジスタを復元するためのロード要求を取得する(2400)。ロード要求を取得することに基づいて、複数のアーキテクチャ上のレジスタのうちの1つ又は複数のアーキテクチャ上のレジスタを復元する(2402)。復元することは、例えば、アーキテクチャ上のレジスタを物理レジスタにマッピングするスナップショットを用いて、1つ又は複数のアーキテクチャ上のレジスタに現在割り当てられている1つ又は複数の物理レジスタを、1つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットの1つ又は複数の物理レジスタと置換することを含む(2404)。一例において、メモリから1つ又は複数のアーキテクチャ上のレジスタについての値をコピーすることなく、1つ又は複数のアーキテクチャ上のレジスタが復元される(2406)。
一実施形態において、ロード要求を取得することに基づいて、1つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能であるかどうかを判断する(2408)。スナップショットが利用可能であることを示すとの判断に基づいて、スナップショットを用いて復元を実行する(2410)。
さらに、一例において、1つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能でないことを示すとの判断に基づいて、値をメモリから1つ又は複数のアーキテクチャ上のレジスタにロードすることにより、1つ又は複数のアーキテクチャ上のレジスタを復元する(2412)。
図61を参照すると、一実施形態において、スナップショットが利用可能かどうかを判断することは、スナップショット・スタックを用いて、1つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能かどうかを判断することを含む(2420)。一例において、スナップショット・スタックは、複数のエントリを含み(2422)、スナップショット・スタックのエントリは、スナップショットを識別するスナップショット識別子を含む(2424)。さらに別の例において、スナップショット・スタックのエントリは、1つ又は複数のアーキテクチャ上のレジスタの内容のメモリ内のアドレス、スナップショットと関連した1つ又は複数のアーキテクチャ上のレジスタの表示、及び/又はスナップショットが有効かどうかを示す有効性インジケータのうちの1つを含む付加的な情報を含むことができる(2426)。
さらに別の態様において、スナップショットを作成し、1つ又は複数の物理レジスタの1つ又は複数のアーキテクチャ上のレジスタへのマッピングを保存する(2428)。スナップショットの作成は、例えば、1つ又は複数のアーキテクチャ上のレジスタの保存を要求する保存要求を取得することに基づいて実行される(2430)。
例において、ロード要求は、load multiple命令を含み、保存要求は、store multiple命令を含む(2432)。
本発明の態様の趣旨から逸脱することなく、多くの変形が可能である。本明細書では多数の態様及び特徴が説明されるが、特に他の矛盾がない限り、各々の態様又は特徴は、他のいずれの態様又は特徴とも結合可能であることに留意されたい。
他のタイプのコンピューティング環境が、これに限定されるものではないが、その例が図62を参照して説明されるエミュレーション環境を含む、本発明の1つ又は複数の態様を組み込み、使用することもできる。この例において、コンピューティング環境2500は、例えば、1つ又は複数のバス2508及び/又は他の接続を介して互いに結合された、例えば、ネイティブ中央処理ユニット(CPU)2502、メモリ2504、及び1つ又は複数の入力/出力デバイス及び/又はインターフェース2506を含む。例として、コンピューティング環境2500は、ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるPowerPC(登録商標)プロセッサ;及び/又は、インターナショナル・ビジネス・マシーンズ・コーポレーション、Intel又は他に会社により提供されるアーキテクチャに基づいた他のマシンを含むことができる。
ネイティブ中央処理ユニット2502は、環境内での処理の際に用いられる、1つ又は複数の汎用レジスタ及び/又は1つ又は複数の専用レジスタなどの1つ又は複数のネイティブ・レジスタ2510を含む。これらのレジスタは、任意の特定の時点における環境の状態を表す情報を含む。
さらに、ネイティブ中央処理ユニット2502は、メモリ2504内に格納された命令及びコードを実行する。1つの特定の例において、中央処理ユニットは、メモリ2504内に格納されたエミュレータ・コード2512を実行する。このコードにより、1つのアーキテクチャにおいて構成されたコンピューティング環境が、別のアーキテクチャをエミュレートすることが可能になる。例えば、エミュレータ・コード2512により、PowerPCプロセッサ、pSeriesサーバ、又は他のサーバ若しくはプロセッサなどの、z/Architecture以外のアーキテクチャに基づくマシンが、z/Architectureをエミュレートし、z/Architectureに基づいて開発されたソフトウェア及び命令を実行することが可能になる。
図63を参照して、エミュレータ・コード2512に関する更なる詳細が説明される。メモリ2504内に格納されたゲスト命令2550が、ネイティブCPU2502のもの以外のアーキテクチャにおいて実行されるように開発されたソフトウェア命令(例えば、マシン命令に相関する)を含む。例えば、ゲスト命令2550は、z/Architectureプロセッサ上で実行されるように設計されているが、代わりに、例えばIntelプロセッサとすることができるネイティブCPU2502上でエミュレートされることもある。一例において、エミュレータ・コード2512は、メモリ2504から1つ又は複数のゲスト命令2550を取得し、取得された命令に対してローカル・バッファリングを随意的に提供するための命令フェッチ・ルーチン2552を含む。エミュレータ・コード2512また、取得されたゲスト命令のタイプを判断し、ゲスト命令を1つ又は複数の対応するネイティブ命令2556に変換するための命令変換ルーチン2554も含む。この変換は、例えば、ゲスト命令により実施される機能を識別すること、及びその機能を実施するためのネイティブ命令を選択することを含む。
さらに、エミュレータ・コード2512は、ネイティブ命令を実行させるためのエミュレーション制御ルーチン2560を含む。エミュレーション制御ルーチン2560は、ネイティブCPU2502に、1つ又は複数の以前に取得されたゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、こうした実行の最後に、次のゲスト命令又はゲスト命令のグループの取得をエミュレートするように、制御を命令フェッチ・ルーチンに戻すことができる。ネイティブ命令2556の実行は、データをメモリ2504からレジスタにロードすること、データをレジスタから再びメモリに格納すること、又は変換ルーチンによって定められるような何らかのタイプの算術演算又は論理演算を実施することを含むことができる。
各ルーチンは、例えば、メモリ内に格納され、ネイティブ中央処理ユニット2502により実行される、ソフトウェアで実装される。他の例において、ルーチン又は操作の1つ又は複数は、ファームウェア、ハードウェア、ソフトウェア、又はそれらの幾つかの組み合わせで実装される。エミュレートされるプロセッサのレジスタは、ネイティブCPUのレジスタ2510を用いて又はメモリ2504内の位置を用いて、エミュレートすることができる。実施形態において、ゲスト命令2550、ネイティブ命令2556、及びエミュレータ・コード2512は、同一のメモリ内に存在してもよく、又は、異なるメモリ・デバイスの間に分散されてもよい。
本明細書で用いられる場合、ファームウェアは、例えば、プロセッサのマイクロコード又はミリコードを含む。ファームウェアは、例えば、より上位レベルのマシン・コードの実装に用いられる、ハードウェア・レベルの命令及び/又はデータ構造体を含む。1つの実施形態において、ファームウェアは、例えば、典型的には、信頼できるソフトウェアを含むマイクロコード、又は基礎をなすハードウェアに特有のマイクロコードとして配信される独自のコードを含み、システム・ハードウェアへのオペレーティング・システムのアクセスを制御する。
取得され、変換され、実行されるゲスト命令2550は、例えば、本明細書で説明される1つである。1つのアーキテクチャ(例えば、z/Architecture)のものであるこの命令が、メモリからフェッチされ、変換され、別のアーキテクチャ(例えば、PowerPC、pSeries、Intel等)のネイティブ命令2556のシーケンスとして表される。次いで、これらのネイティブ命令が実行される。
1つ又は複数の態様は、クラウド・コンピューティングに関連し得る。
この開示は、クラウド・コンピューティングにおける詳細な説明を含むが、本明細書に記載される教示の実装は、クラウド・コンピューティング環境に限定されないことを予め理解されたい。むしろ、本発明の実施形態は、現在周知の又は後で開発される他のいずれかのタイプのコンピューティング環境と共に実施することができる。
クラウド・コンピューティングは、最小限の管理労力又はサービス・プロバイダとの対話で迅速にプロビジョニング及び解放することができる構成可能なコンピューティング・リソース(例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、及びサービス)の共有プールへの、便利なオンデマンドのネットワーク・アクセスを可能にするためのサービス配信モデルである。このクラウド・モデルは、少なくとも5つの特徴、少なくとも3つのサービス・モデル、及び少なくとも4つの配備モデルを含むことができる。
特徴は、以下の通りである。
オンデマンド・セルフサービス:クラウド・コンシューマは、必要に応じて、サーバ時間及びネットワーク・ストレージ等のコンピューティング機能を、人間がサービスのプロバイダと対話する必要なく自動的に、一方的にプロビジョニングすることができる。
広範なネットワーク・アクセス:機能は、ネットワーク上で利用可能であり、異種のシン又はシック・クライアント・プラットフォーム(例えば、携帯電話、ラップトップ、及びPDA)による使用を促進する標準的な機構を通じてアクセスされる。
リソースのプール化:プロバイダのコンピューティング・リソースは、マルチ・テナント・モデルを用いて、異なる物理及び仮想リソースを要求に応じて動的に割り当て及び再割り当てすることにより、複数のコンシューマにサービスを提供するためにプールされる。コンシューマは、一般に、提供されるリソースの正確な位置についての制御又は知識を持たないが、より高レベルの抽象化では位置(例えば、国、州、又はデータセンタ)を特定できる場合があるという点で、位置とは独立しているといえる。
迅速な弾力性:機能は、迅速かつ弾力的に、幾つかの場合自動的に、プロビジョニングして素早くスケール・アウトし、迅速にリリースして素早くスケール・インさせることができる。コンシューマにとって、プロビジョニングに利用可能なこれらの機能は、多くの場合、無制限であり、いつでもどんな量でも購入できるように見える。
サービスの測定:クラウド・システムは、サービスのタイプ(例えば、ストレージ、処理、帯域幅、及びアクティブなユーザ・アカウント)に適した何らかの抽象化レベルでの計量機能を用いることによって、リソースの使用を自動的に制御及び最適化する。リソース使用を監視し、制御し、報告し、利用されるサービスのプロバイダとコンシューマの両方に対して透明性をもたらすことができる。
サービス・モデルは以下の通りである。
Software as a Service(SaaS):クラウド・インフラストラクチャ上で動作しているプロバイダのアプリケーションを使用するために、コンシューマに提供される機能である。これらのアプリケーションは、ウェブ・ブラウザ(例えば、ウェブ・ベースの電子メール)などのシン・クライアント・インターフェースを通じて、種々のクライアント・デバイスからアクセス可能である。コンシューマは、限定されたユーザ固有のアプリケーション構成設定の考え得る例外として、ネットワーク、サーバ、オペレーティング・システム、ストレージ、又は個々のアプリケーション機能をも含めて、基礎をなすクラウド・インフラストラクチャを管理又は制御しない。
Platform as a Service(PaaS):プロバイダによってサポートされるプログラミング言語及びツールを用いて生成された、コンシューマが生成した又は取得したアプリケーションを、クラウド・インフラストラクチャ上に配備するために、コンシューマに提供される機能である。コンシューマは、ネットワーク、サーバ、オペレーティング・システム、又はストレージなどの基礎をなすクラウド・インフラストラクチャを管理又は制御しないが、配備されたアプリケーション、及び場合によってはアプリケーション・ホスティング環境構成に対して制御を有する。
Infrastructure as a Service(IaaS):コンシューマが、オペレーティング・システム及びアプリケーションを含み得る任意のソフトウェアを配備及び動作させることができる、処理、ストレージ、ネットワーク、及び他の基本的なコンピューティング・リソースをプロビジョニンングするために、コンシューマに提供される機能である。コンシューマは、基礎をなすクラウド・インフラストラクチャを管理又は制御しないが、オペレーティング・システム、ストレージ、配備されたアプリケーションに対する制御、及び場合によってはネットワーク・コンポーネント(例えば、ホストのファイアウォール)選択の限定された制御を有する。
配備モデルは以下の通りである。
プライベート・クラウド:クラウド・インフラストラクチャは、ある組織のためだけに運営される。このクラウド・インフラストラクチャは、その組織又は第三者によって管理することができ、構内又は構外に存在することができる。
コミュニティ・クラウド:クラウド・インフラストラクチャは、幾つかの組織によって共有され、共通の関心事項(例えば、任務、セキュリティ要件、ポリシー、及びコンプライアンス上の考慮事項)を有する特定のコミュニティをサポートする。クラウド・インフラストラクチャは、その組織又は第三者によって管理することができ、オンプレミス又はオフプレミスに存在することができる。
パブリック・クラウド:クラウド・インフラストラクチャは、一般公衆又は大規模な業界グループに利用可能であり、クラウド・サービスを販売する組織によって所有される。
ハイブリッド・クラウド:クラウド・インフラストラクチャは、固有のエンティティのままであるが、データ及びアプリケーションの移行性を可能にする標準化された又は専用の技術(例えば、クラウド間の負荷分散のためのクラウド・バースティング)によって結び付けられる2つ又はそれより多いクラウド(プライベート、コミュニティ、又はパブリック)の混成物である。
クラウド・コンピューティング環境は、無国籍性、低結合性、モジュール性、及びセマンティック相互運用性に焦点を置くことを指向するサービスである。クラウド・コンピューティングの中心は、相互接続されたノードのネットワークを含むインフラストラクチャである。
ここで図64を参照すると、例示的なクラウド・コンピューティング環境50が示される。示されるように、クラウド・コンピューティング環境50は、例えば携帯情報端末(PDA)又は携帯電話54A、デスクトップ・コンピュータ54B、ラップトップ・コンピュータ54C、及び/又は自動車コンピュータ・システム54Nなどといった、クラウド・コンシューマによって用いられるローカル・コンピューティング回路と通信することができる1つ又は複数のクラウド・コンピューティング・ノード10を含む。ノード10は、互いに通信することができる。これらのノードは、上述のようなプライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、若しくはハイブリッド・クラウド、又はこれらの組み合わせなど、1つ又は複数のネットワークにおいて物理的又は仮想的にグループ化することができる(図示せず)。これにより、クラウド・コンピューティング環境50は、クラウド・コンシューマがローカル・コンピューティング回路上にリソースを保持する必要のないサービスとして、インフラストラクチャ、プラットフォーム、及び/又はソフトウェアを提供することが可能になる。図64に示されるコンピューティング回路54A~Nのタイプは単に例示であることを意図し、コンピューティング・ノード10及びクラウド・コンピューティング環境50は、いずれのタイプのネットワーク及び/又はネットワーク・アドレス指定可能な接続上でも(例えば、ウェブ・ブラウザを用いて)、いずれのタイプのコンピュータ化された回路とも通信できることを理解されたい。
ここで図65を参照すると、クラウド・コンピューティング環境50(図64)によって提供される例示的な機能抽象化層のセットが示される。図65に示されるコンポーネント、層、及び機能は単に例示であることを意図し、本発明の実施形態はそれらに限定されないことを予め理解されたい。図示されるように、以下の層及び対応する機能が提供される。
ハードウェア及びソフトウェア層60は、ハードウェア及びソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例として、メインフレーム61と、RISC(Reduced Instruction Set Computer(縮小命令セット・コンピュータ))アーキテクチャ・ベースのサーバ62と、サーバ63と、ブレード・サーバ64と、ストレージ回路65と、ネットワーク及びネットワーキング・コンポーネント66とが含まれる。幾つかの実施形態において、ソフトウェア・コンポーネントは、ネットワーク・アプリケーション・サーバ・ソフトウェア67及びデータベース・ソフトウェア68を含む。
仮想化層70は、抽象化層を提供し、この層により、仮想エンティティの以下の例、すなわち、仮想サーバ71、仮想ストレージ72、仮想プライベート・ネットワークを含む仮想ネットワーク73、仮想アプリケーション及びオペレーティング・システム74、並びに仮想クライアント75を提供することができる。
一例においては、管理層80は、以下で説明される機能を提供することができる。リソース・プロビジョニング81は、クラウド・コンピューティング環境内でタスクを実行するために利用されるコンピューティング・リソース及び他のリソースの動的な調達を提供する。計量及び価格決定82は、クラウド・コンピューティング環境内でリソースが利用される際のコスト追跡と、これらのリソースの消費に対する課金又は請求とを提供する。一例においては、これらのリソースは、アプリケーション・ソフトウェア・ライセンスを含むことができる。セキュリティは、クラウド・コンシューマ及びタスクに対する識別情報の検証と、データ及び他のリソースに対する保護とを提供する。ユーザ・ポータル83は、コンシューマ及びシステム管理者のために、クラウド・コンピューティング環境へのアクセスを提供する。サービス・レベル管理84は、要求されるサービス・レベルが満たされるように、クラウド・コンピューティング・リソースの割り当て及び管理を提供する。サービス・レベル・アグリーメント(Service Level Agreement、SLA)の計画及び履行85は、SLAに従って将来の要件が予測されるクラウド・コンピューティング・リソースの事前配置及び調達を提供する。
ワークロード層90は、クラウド・コンピューティング環境を利用することができる機能の例を提供する。この層から提供することができるワークロード及び機能の例には、マッピング及びナビゲーション91、ソフトウェア開発及びライフサイクル管理92、仮想教室教育配信93、データ分析処理94、トランザクション処理95、及びレジスタ復元及び関連した処理96が含まれる。
本発明は、統合の任意の可能な技術的詳細レベルにおける、システム、方法、及び/又はコンピュータ・プログラム製品とすることができる。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読ストレージ媒体(単数又は複数)を含むことができる。
コンピュータ可読ストレージ媒体は、命令実行デバイスにより使用される命令を保持及び格納できる有形デバイスとすることができる。コンピュータ可読ストレージ媒体は、例えば、これらに限定されるものではないが、電子記憶装置、磁気記憶装置、光学記憶装置、電磁気記憶装置、半導体記憶装置、又は上記のいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例の非網羅的なリストとして、以下のもの:すなわち、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、消去可能プログラム可能読み出し専用メモリ(EPROM又はフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読み出し専用メモリ(CD-ROM)、デジタル多用途ディスク(DVD)、メモリ・スティック、パンチカード若しくは命令がそこに記録された溝内の隆起構造のような機械的にエンコードされたデバイス、及び上記のいずれかの適切な組み合わせが挙げられる。本明細書で使用される場合、コンピュータ可読ストレージ媒体は、電波、又は他の自由に伝搬する電磁波、導波管若しくは他の伝送媒体を通じて伝搬する電磁波(例えば、光ファイバ・ケーブルを通る光パルス)、又はワイヤを通って送られる電気信号などの、一時的信号自体として解釈されない。
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピューティング/処理デバイスに、又は、例えばインターネット、ローカル・エリア・ネットワーク、広域ネットワーク、及び/又は無線ネットワークなどのネットワークを介して外部コンピュータ又は外部ストレージ・デバイスにダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、及び/又はエッジ・サーバを含むことができる。各コンピューティング/処理デバイスにおけるネットワーク・アダプタ・カード又はネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受け取り、コンピュータ可読プログラム命令を転送して、それぞれのコンピューティング/処理デバイス内のコンピュータ可読ストレージ媒体に格納する。
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、又は、Smalltalk、C++などのオブジェクト指向プログラミング言語、及び、「C」プログラミング言語若しくは類似のプログラミング言語などの手続き型プログラミング言語を含む1つ又は複数のプログラミング言語の任意の組み合わせで記述されるソース・コード又はオブジェクト・コードとすることができる。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で、独立型ソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。最後のシナリオにおいて、遠隔コンピュータは、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある(例えば、インターネットサービスプロバイダを用いたインターネットを通じて)。幾つかの実施形態において、例えば、プログラム可能論理回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、又はプログラム可能論理アレイ(PLA)を含む電子回路は、本発明の態様を実施するために、コンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行して、電子回路を個人化することができる。
本発明の態様は、本発明の実施形態による方法、装置(システム)及びコンピュータ・プログラム製品のフローチャート図及び/又はブロック図を参照して説明される。フローチャート図及び/又はブロック図の各ブロック、並びにフローチャート図及び/又はブロック図内のブロックの組み合わせは、コンピュータ可読プログラム命令によって実装できることが理解されるであろう。
これらのコンピュータ可読プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えて機械を製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロック内で指定された機能/動作を実施するための手段を作り出すようにすることができる。これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、及び/又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作の態様を実施する命令を含む製品を含むようにすることもできる。
コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実施のプロセスを生産し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実行するためのプロセスを提供するようにすることもできる。
図面内のフローチャート及びブロック図は、本発明の様々な実施形態による、システム、方法、及びコンピュータ・プログラム製品の可能な実装の、アーキテクチャ、機能及び動作を示す。この点に関して、フローチャート内の各ブロックは、指定された論理機能を実装するための1つ又は複数の実行可能命令を含む、モジュール、セグメント、又はコードの一部を表すことができる。幾つかの代替的な実装において、ブロック内に示される機能は、図に示される順序とは異なる順序で生じることがある。例えば、連続して示される2つのブロックは、関与する機能に応じて、実際には実質的に同時に実行されることもあり、又はこれらのブロックはときとして逆順で実行されることもある。ブロック図及び/又はフローチャート図の各ブロック、及びブロック図及び/又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を実行する、又は専用のハードウェアとコンピュータ命令との組み合わせを実行する、専用ハードウェア・ベースのシステムによって実装できることにも留意されたい。
上記に加えて、1つ又は複数の態様は、顧客環境の管理を提供するサービス・プロバイダによって供与、提供、配置、管理、サービス等を行うことができる。例えば、サービス・プロバイダは、1又は複数の顧客のために1つ又は複数の態様を実施するコンピュータ・コード及び/又はコンピュータ・インフラストラクチャの作成、保守、サポート等を行うことができる。見返りに、サービス・プロバイダは、例として、予約申し込み及び/又は報酬契約の下で顧客から支払いを受けることができる。付加的に又は代替的に、サービス・プロバイダは、1又は複数の第三者に対する広告内容の販売から支払いを受けることができる。
一態様において、1つ又は複数の実施形態を実施するために、アプリケーションを配備することができる。一例として、アプリケーションの配備は、1つ又は複数の実施形態を実施するように動作可能なコンピュータ・インフラストラクチャを提供することを含む。
更に別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含む、コンピュータ・インフラストラクチャを配置することができ、そこでは、コードは、コンピューティング・システムと協働して、1つ又は複数の実施形態を実施することができる。
更に別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含む、プロセスを提供することができる。コンピュータ・システムは、コンピュータ可読媒体を含み、ここで、コンピュータ媒体は、1つ又は複数の実施形態を含む。コードは、コンピュータ・システムと協働して、1つ又は複数の実施形態を実施することができる。
種々の実施形態が上述されたが、これらは例にすぎない。例えば、1つ又は複数の実施形態を組み込み、使用するために、他のアーキテクチャのコンピューティング環境を使用することもできる。さらに、異なる命令、命令形式、命令フィールド、及び/又は命令の値を使用することができる。多くの変形が可能である。
さらに、他のタイプのコンピューティング環境の利益を得、これを使用することができる。一例として、プログラム・コードを格納及び/又は実行するのに適しており、システム・バスを介してメモリ要素に直接又は間接的に結合された少なくとも2つのプロセッサを含む、データ処理システムを使用することができる。メモリ要素は、例えば、プログラム・コードの実際の実行中に用いられるローカル・メモリ、大容量記憶装置、及び実行中に大容量記憶装置からコードを取り出さなければならない回数を減らすために少なくとも幾つかのプログラム・コードの一時的なストレージを提供するキャッシュ・メモリを含む。
入力/出力即ちI/Oデバイス(これらに限定されるものではないが、キーボード、ディスプレイ、ポインティング・デバイス、DASD、テープ、CD、DVD、サムドライブ及び他のメモリ媒体等)は、直接システムに結合することもでき、又は介在するI/Oコントローラを介してシステムに結合することができる。ネットワーク・アダプタをシステムに結合させて、データ処理システムが、介在する私的ネットワーク又は公衆ネットワークを通じて他のデータ処理システム又は遠隔プリンタ若しくはストレージ・デバイスに結合できるようにすることもできる。モデム、ケーブル・モデム及びイーサネット・カードは、ネットワーク・アダプタの利用可能なタイプのうちのほんの数例である。
本明細書で用いられる用語は、特定の実施形態を説明する目的のためのものにすぎず、本発明を限定することを意図したものではない。本明細書で用いられる場合、単数形「1つの(a)」、「1つの(an)」及び「その(the)」は、文脈が特に明示しない限り、複数形も同様に含むことを意図したものである。「含む(comprise)」及び/又は「含んでいる(comprising)」という用語は、本明細書で用いられる場合、記述された特徴、整数、ステップ、動作、要素、及び/又はコンポーネントの存在を指示するが、1つ又は複数の他の特徴、整数、ステップ、動作、要素、コンポーネント、及び/又はそれらの群の存在又は追加を排除するものではないこともさらに理解されるであろう。
以下の特許請求の範囲に存在する場合、「手段又はステップと機能との組合せ(ミーンズ又はステップ・プラス・ファンクション)」要素の対応する構造、材料、動作及び均等物は、明確に特許請求された他の請求要素と共に機能を実行するための任意の構造、材料、又は行為を含むことを意図したものである。本発明の説明は、例証及び説明のためだけに提示されたものであり、網羅的であること又は本発明を開示した形態に限定することを意図したものではない。当業者には、本発明の範囲から逸脱しない多くの修正物及び変形物が明らかとなるであろう。実施形態は、本発明の原理及び実際の用途を最もよく説明するため、及び、当業者が、企図した特定の用途に適するように種々の修正を有する種々の実施形態に関して本発明を理解することができるように、選択され記述された。
100:コンピューティング環境
102:コンピュータ・システム
104:プロセッサ又は処理ユニット
106、2126、2504:メモリ
107:命令フェッチ・アドレス・レジスタ(IFAR)
108:1つ又は複数の入力/出力(I/O)インターフェース
109:命令キャッシュ
110、2502:バス
113:命令シーケンス・ユニット(ISU)
120、2124:キャッシュ
121:分岐実行ユニット(BRU)
123:条件レジスタ・ファイル(CRF)
127:予測器更新論理
130、146:プログラム又はアプリケーション
132、148:オペレーティング・システム
134:コンピュータ可読プログラム命令
141:固定小数点ユニット(FXU)
142:ネットワーク・インターフェース
143:浮動小数点ユニット(FPU)
144:データ・ストレージ・デバイス
145:ベクトル・マルチメディア延長ユニット(VMXU)
146:プログラム
148:コンピュータ可読プログラム命令
150:命令フェッチ・コンポーネント
151、2110:ロード/ストア・ユニット(LSU)
152、2116、2224:命令デコード・ユニット
153:マルチプレクサ
154:命令実行コンポーネント
155:バッファ
156:メモリ・アクセス・コンポーネント
157:アドレス変換テーブル
160:ライトバック・コンポーネント
166:レジスタ復元操作及び/又は命令
168、608、610、2204:レジスタ
170・命令フェッチ
172:命令分岐予測
178:マッパー
190:フラッシュ
192:レジスタ・リネーム・ユニット
300:アーキテクチャ上のレジスタ
302、502:物理レジスタ
502b:新しい物理レジスタ
502a:スナップショット
508、602:スナップショット識別子
510:古いスナップショット
606:アドレス又はアドレス範囲
612:有効インジケータ
700:Spill Multiple(Spillm)命令
750:Reload Multiple(Reloadm)命令
900:バルク保存スナップショット
1300:データ・キャッシュ
1302:キャッシュ・ライン
1306:有効性(V)インジケータ
1308:ダーティ(D)インジケータ
1310:マーク付け(M)インジケータ
1312、2106:データ
2100:ストア要求(SRQ)ライトバック論理
2102:ストア・キュー
2108:ストア要求
2114:命令フェッチ・ユニット(IFU)
2118、2230:実行ユニット
2200:復旧バッファ
2208:命令タグ
2209:テール・ポインタ
2210:ヘッド・ポインタ
2226:レジスタ・ファイル
2228:復旧バッファ
2500:コンピューティング環
2502:ネイティブ中央処理ユニット
2512:エミュレータ・コード
2550:ゲスト命令
2556:ネイティブ命令

Claims (12)

  1. コンピューティング環境内の処理を容易にするためのコンピュータ・プログラムであって、前記コンピュータ・プログラムは、コンピュータに、
    複数のアーキテクチャ上のレジスタを復元するためのロード要求を取得することと、
    前記ロード要求を取得することに基づいて、前記複数のアーキテクチャ上のレジスタのうちの1つ又は複数のアーキテクチャ上のレジスタを復元することと、
    を含み、前記復元することは、アーキテクチャ上のレジスタを物理レジスタにマッピングするスナップショットを用いて、前記1つ又は複数のアーキテクチャ上のレジスタに現在割り当てられている1つ又は複数の物理レジスタを、前記1つ又は複数のアーキテクチャ上のレジスタに対応する前記スナップショットの1つ又は複数の物理レジスタと置換することと、
    前記ロード要求を取得することに基づいて、前記1つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能であるかどうかを判断することと、
    前記スナップショットが利用可能であることを示すとの前記判断に基づいて、前記スナップショットを用いて前記復元を実行することと、
    前記判断することは、スナップショット・スタックを用いて、前記1つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能かどうかを判断することと、を実行させ、 ここで、
    前記スナップショット・スタックは複数のエントリを含み、前記スナップショット・スタックのエントリは、前記スナップショットを識別するスナップショット識別子を含み、前記スナップショット・スタックの前記エントリは、前記1つ又は複数のアーキテクチャ上のレジスタの内容のメモリ内のアドレス、前記スナップショットと関連した前記1つ又は複数のアーキテクチャ上のレジスタの表示、及び前記スナップショットが有効かどうかを示す有効性インジケータから成る群から選択される少なくとも1つを含む付加的な情報を含む、
    コンピュータ・プログラム。
  2. 前記1つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能でないことを示すとの前記判断に基づいて、値をメモリから前記1つ又は複数のアーキテクチャ上のレジスタにロードすることにより、前記1つ又は複数のアーキテクチャ上のレジスタを復元することをさらに含む、請求項に記載のコンピュータ・プログラム。
  3. 前記スナップショットを作成し、前記1つ又は複数の物理レジスタの前記1つ又は複数のアーキテクチャ上のレジスタへのマッピングを保存することをさらに含む、請求項1に記載のコンピュータ・プログラム。
  4. 前記スナップショットを作成することは、前記1つ又は複数のアーキテクチャ上のレジスタの保存を要求する保存要求を取得することに基づいて実行される、請求項に記載のコンピュータ・プログラム。
  5. 前記ロード要求は、load multiple命令を含み、前記保存要求は、store multiple命令を含む、請求項に記載のコンピュータ・プログラム。
  6. 前記1つ又は複数のアーキテクチャ上のレジスタは、メモリから前記1つ又は複数のアーキテクチャ上のレジスタについての値をコピーすることなく復元される、請求項1に記載のコンピュータ・プログラム。
  7. コンピューティング環境内の処理を容易にするためのコンピュータ・システムであって、前記コンピュータ・システムは、
    メモリと、
    前記メモリと通信するプロセッサと、
    を含み、さらに、
    複数のアーキテクチャ上のレジスタを復元するためのロード要求を取得することと、
    前記ロード要求を取得することに基づいて、前記複数のアーキテクチャ上のレジスタのうちの1つ又は複数のアーキテクチャ上のレジスタを復元することと、
    を含み、前記復元することは、アーキテクチャ上のレジスタを物理レジスタにマッピングするスナップショットを用いて、前記1つ又は複数のアーキテクチャ上のレジスタに現在割り当てられている1つ又は複数の物理レジスタを、前記1つ又は複数のアーキテクチャ上のレジスタに対応する前記スナップショットの1つ又は複数の物理レジスタと置換することと、
    前記ロード要求を取得することに基づいて、前記1つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能であるかどうかを判断することと、
    前記スナップショットが利用可能であることを示すとの前記判断に基づいて、前記スナップショットを用いて前記復元を実行することと、
    前記判断することは、スナップショット・スタックを用いて、前記1つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能かどうかを判断することを含み、ここで、
    前記スナップショット・スタックは複数のエントリを含み、前記スナップショット・スタックのエントリは、前記スナップショットを識別するスナップショット識別子を含み、前記スナップショット・スタックの前記エントリは、前記1つ又は複数のアーキテクチャ上のレジスタの内容のメモリ内のアドレス、前記スナップショットと関連した前記1つ又は複数のアーキテクチャ上のレジスタの表示、及び前記スナップショットが有効かどうかを示す有効性インジケータから成る群から選択される少なくとも1つを含む付加的な情報を含む、
    を含む、コンピュータ・システム。
  8. 前記1つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能でないことを示すとの前記判断に基づいて、値をメモリから前記1つ又は複数のアーキテクチャ上のレジスタにロードすることにより、前記1つ又は複数のアーキテクチャ上のレジスタを復元することをさらに含む、請求項に記載のコンピュータ・システム。
  9. 前記1つ又は複数のアーキテクチャ上のレジスタは、メモリから前記1つ又は複数のアーキテクチャ上のレジスタについての値をコピーすることなく復元される、請求項に記載のコンピュータ・システム。
  10. コンピューティング環境内の処理を容易にするためのコンピュータ実施方法であって、前記コンピュータ実施方法は、
    プロセッサにより、複数のアーキテクチャ上のレジスタを復元するためのロード要求を取得することと、
    前記ロード要求を取得することに基づいて、前記複数のアーキテクチャ上のレジスタのうちの1つ又は複数のアーキテクチャ上のレジスタを復元することと、
    前記復元することは、アーキテクチャ上のレジスタを物理レジスタにマッピングするスナップショットを用いて、前記1つ又は複数のアーキテクチャ上のレジスタに現在割り当てられている1つ又は複数の物理レジスタを、前記1つ又は複数のアーキテクチャ上のレジスタに対応する前記スナップショットの1つ又は複数の物理レジスタと置換することと、
    前記ロード要求を取得することに基づいて、前記1つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能であるかどうかを判断することと、
    前記スナップショットが利用可能であることを示すとの前記判断に基づいて、前記スナップショットを用いて前記復元を実行することと、
    前記判断することは、スナップショット・スタックを用いて、前記1つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能かどうかを判断することを含み、ここで、
    前記スナップショット・スタックは複数のエントリを含み、前記スナップショット・スタックのエントリは、前記スナップショットを識別するスナップショット識別子を含み、前記スナップショット・スタックの前記エントリは、前記1つ又は複数のアーキテクチャ上のレジスタの内容のメモリ内のアドレス、前記スナップショットと関連した前記1つ又は複数のアーキテクチャ上のレジスタの表示、及び前記スナップショットが有効かどうかを示す有効性インジケータから成る群から選択される少なくとも1つを含む付加的な情報を含む、
    コンピュータ実施方法。
  11. 前記1つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能でないことを示すとの前記判断に基づいて、値をメモリから前記1つ又は複数のアーキテクチャ上のレジスタにロードすることにより、前記1つ又は複数のアーキテクチャ上のレジスタを復元することをさらに含む、請求項10に記載のコンピュータ実施方法。
  12. 前記1つ又は複数のアーキテクチャ上のレジスタは、メモリから前記1つ又は複数のアーキテクチャ上のレジスタについての値をコピーすることなく復元される、請求項10に記載のコンピュータ実施方法。
JP2019556276A 2017-04-18 2018-03-13 リネーム・レジスタ復旧に基づくレジスタ・コンテキスト復元 Active JP7046098B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/490,013 US10838733B2 (en) 2017-04-18 2017-04-18 Register context restoration based on rename register recovery
US15/490,013 2017-04-18
PCT/IB2018/051646 WO2018193321A1 (en) 2017-04-18 2018-03-13 Register context restoration based on rename register recovery

Publications (3)

Publication Number Publication Date
JP2020518895A JP2020518895A (ja) 2020-06-25
JP2020518895A5 JP2020518895A5 (ja) 2020-08-06
JP7046098B2 true JP7046098B2 (ja) 2022-04-01

Family

ID=63790045

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019556276A Active JP7046098B2 (ja) 2017-04-18 2018-03-13 リネーム・レジスタ復旧に基づくレジスタ・コンテキスト復元

Country Status (6)

Country Link
US (1) US10838733B2 (ja)
JP (1) JP7046098B2 (ja)
CN (1) CN110520837B (ja)
DE (1) DE112018000848T5 (ja)
GB (1) GB2575412B (ja)
WO (1) WO2018193321A1 (ja)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10489382B2 (en) 2017-04-18 2019-11-26 International Business Machines Corporation Register restoration invalidation based on a context switch
US10540184B2 (en) 2017-04-18 2020-01-21 International Business Machines Corporation Coalescing store instructions for restoration
US11010192B2 (en) 2017-04-18 2021-05-18 International Business Machines Corporation Register restoration using recovery buffers
US10963261B2 (en) 2017-04-18 2021-03-30 International Business Machines Corporation Sharing snapshots across save requests
US10545766B2 (en) 2017-04-18 2020-01-28 International Business Machines Corporation Register restoration using transactional memory register snapshots
US10552164B2 (en) 2017-04-18 2020-02-04 International Business Machines Corporation Sharing snapshots between restoration and recovery
US10572265B2 (en) 2017-04-18 2020-02-25 International Business Machines Corporation Selecting register restoration or register reloading
US10564977B2 (en) 2017-04-18 2020-02-18 International Business Machines Corporation Selective register allocation
US10782979B2 (en) 2017-04-18 2020-09-22 International Business Machines Corporation Restoring saved architected registers and suppressing verification of registers to be restored
US10740108B2 (en) 2017-04-18 2020-08-11 International Business Machines Corporation Management of store queue based on restoration operation
US10649785B2 (en) 2017-04-18 2020-05-12 International Business Machines Corporation Tracking changes to memory via check and recovery
US11372970B2 (en) * 2019-03-12 2022-06-28 Hewlett Packard Enterprise Development Lp Multi-dimensional attestation
CN111159002B (zh) * 2019-12-31 2023-04-28 山东有人物联网股份有限公司 一种基于分组的数据边缘采集方法、边缘采集设备及系统
CN111552511B (zh) * 2020-05-14 2023-06-16 山东省计算中心(国家超级计算济南中心) 一种VxWorks系统物联网固件解包恢复文件名的方法
US11249757B1 (en) * 2020-08-14 2022-02-15 International Business Machines Corporation Handling and fusing load instructions in a processor
CN114489791B (zh) * 2021-01-27 2023-03-24 沐曦集成电路(上海)有限公司 处理器装置及其指令执行方法、计算设备
CN114741237B (zh) * 2022-04-20 2024-11-01 Oppo广东移动通信有限公司 一种任务切换方法、装置、设备及存储介质
CN115437691B (zh) * 2022-11-09 2023-01-31 进迭时空(杭州)科技有限公司 一种针对risc-v矢量与浮点寄存器的物理寄存器堆分配装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005537580A (ja) 2002-09-03 2005-12-08 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ スタックタイプのスナップショットバッファがネスト化されたインタラプトを処理すること
US20130179665A1 (en) 2012-01-06 2013-07-11 Imagination Technologies, Ltd. Restoring a register renaming map

Family Cites Families (135)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3781810A (en) 1972-04-26 1973-12-25 Bell Telephone Labor Inc Scheme for saving and restoring register contents in a data processor
US4992938A (en) * 1987-07-01 1991-02-12 International Business Machines Corporation Instruction control mechanism for a computing system with register renaming, map table and queues indicating available registers
JPH0353328A (ja) 1989-07-20 1991-03-07 Hitachi Ltd レジスタ退避回復方法ならびに処理装置
US5444853A (en) 1992-03-31 1995-08-22 Seiko Epson Corporation System and method for transferring data between a plurality of virtual FIFO's and a peripheral via a hardware FIFO and selectively updating control information associated with the virtual FIFO's
US6047122A (en) 1992-05-07 2000-04-04 Tm Patents, L.P. System for method for performing a context switch operation in a massively parallel computer system
US5535397A (en) 1993-06-30 1996-07-09 Intel Corporation Method and apparatus for providing a context switch in response to an interrupt in a computer process
JP3169779B2 (ja) 1994-12-19 2001-05-28 日本電気株式会社 マルチスレッドプロセッサ
US5644742A (en) * 1995-02-14 1997-07-01 Hal Computer Systems, Inc. Processor structure and method for a time-out checkpoint
US6356918B1 (en) * 1995-07-26 2002-03-12 International Business Machines Corporation Method and system for managing registers in a data processing system supports out-of-order and speculative instruction execution
US5809522A (en) 1995-12-18 1998-09-15 Advanced Micro Devices, Inc. Microprocessor system with process identification tag entries to reduce cache flushing after a context switch
JPH09212371A (ja) 1996-02-07 1997-08-15 Nec Corp レジスタ退避及び復元システム
US5794024A (en) 1996-03-25 1998-08-11 International Business Machines Corporation Method and system for dynamically recovering a register-address-table upon occurrence of an interrupt or branch misprediction
US5881305A (en) 1996-12-13 1999-03-09 Advanced Micro Devices, Inc. Register rename stack for a microprocessor
US6088779A (en) 1996-12-30 2000-07-11 Fujitsu Limited System and method for execution management of computer programs
US5918005A (en) 1997-03-25 1999-06-29 International Business Machines Corporation Apparatus region-based detection of interference among reordered memory operations in a processor
JPH10289113A (ja) * 1997-04-14 1998-10-27 Toshiba Corp 計算機のレジスタコンテキストの保存/復元方式
US5987495A (en) 1997-11-07 1999-11-16 International Business Machines Corporation Method and apparatus for fully restoring a program context following an interrupt
US6134653A (en) 1998-04-22 2000-10-17 Transwitch Corp. RISC processor architecture with high performance context switching in which one context can be loaded by a co-processor while another context is being accessed by an arithmetic logic unit
US6338137B1 (en) 1998-05-29 2002-01-08 Texas Instruments Incorporated Data processor having memory access unit with predetermined number of instruction cycles between activation and initial data transfer
US6298403B1 (en) 1998-06-02 2001-10-02 Adaptec, Inc. Host adapter having a snapshot mechanism
US6457021B1 (en) 1998-08-18 2002-09-24 Microsoft Corporation In-memory database system
US6421758B1 (en) 1999-07-26 2002-07-16 International Business Machines Corporation Method and system for super-fast updating and reading of content addressable memory with a bypass circuit
JP3739607B2 (ja) 1999-08-24 2006-01-25 富士通株式会社 情報処理装置
US6480931B1 (en) 1999-11-05 2002-11-12 International Business Machines Corporation Content addressable storage apparatus and register mapper architecture
US7085914B1 (en) 2000-01-27 2006-08-01 International Business Machines Corporation Methods for renaming stack references to processor registers
US7155599B2 (en) * 2000-12-29 2006-12-26 Intel Corporation Method and apparatus for a register renaming structure
US6751749B2 (en) * 2001-02-22 2004-06-15 International Business Machines Corporation Method and apparatus for computer system reliability
JP3663393B2 (ja) * 2001-06-27 2005-06-22 インターナショナル・ビジネス・マシーンズ・コーポレーション 複数プロセッサ・データ処理システムをチェックポインティングする方法、プロセッサ・ユニットおよびコンピュータ・システム
US20030177342A1 (en) 2002-03-15 2003-09-18 Hitachi Semiconductor (America) Inc. Processor with register dirty bits and special save multiple/return instructions
US7269719B2 (en) 2002-10-30 2007-09-11 Stmicroelectronics, Inc. Predicated execution using operand predicates
US7127592B2 (en) 2003-01-08 2006-10-24 Sun Microsystems, Inc. Method and apparatus for dynamically allocating registers in a windowed architecture
JP2004220070A (ja) 2003-01-09 2004-08-05 Japan Science & Technology Agency コンテキスト切り替え方法及び装置、中央演算装置、コンテキスト切り替えプログラム及びそれを記憶したコンピュータ読み取り可能な記憶媒体
US7107438B2 (en) 2003-02-04 2006-09-12 Via Technologies, Inc. Pipelined microprocessor, apparatus, and method for performing early correction of conditional branch instruction mispredictions
US7543284B2 (en) 2003-04-22 2009-06-02 Transitive Limited Partial dead code elimination optimizations for program code conversion
US7493621B2 (en) 2003-12-18 2009-02-17 International Business Machines Corporation Context switch data prefetching in multithreaded computer
EP1622009A1 (en) 2004-07-27 2006-02-01 Texas Instruments Incorporated JSM architecture and systems
US20060184771A1 (en) 2005-02-11 2006-08-17 International Business Machines Mini-refresh processor recovery as bug workaround method using existing recovery hardware
CA2604573A1 (en) 2005-04-13 2006-10-19 Telefonaktiebolaget L M Ericsson (Publ) Data value coherence in computer systems
GB2425622A (en) 2005-04-27 2006-11-01 Ncapsa Ltd Programming real-time systems using data flow diagrams
US7562200B1 (en) 2005-06-10 2009-07-14 American Megatrends, Inc. Method, system, apparatus, and computer-readable medium for locking and synchronizing input/output operations in a data storage system
US20070043934A1 (en) * 2005-08-22 2007-02-22 Intel Corporation Early misprediction recovery through periodic checkpoints
US7426618B2 (en) 2005-09-06 2008-09-16 Dot Hill Systems Corp. Snapshot restore method and apparatus
US7747841B2 (en) 2005-09-26 2010-06-29 Cornell Research Foundation, Inc. Method and apparatus for early load retirement in a processor system
US7962731B2 (en) 2005-10-20 2011-06-14 Qualcomm Incorporated Backing store buffer for the register save engine of a stacked register file
US20070130448A1 (en) 2005-12-01 2007-06-07 Intel Corporation Stack tracker
US8813052B2 (en) 2005-12-07 2014-08-19 Microsoft Corporation Cache metadata for implementing bounded transactional memory
US8099726B2 (en) 2005-12-07 2012-01-17 Microsoft Corporation Implementing strong atomicity in software transactional memory
TWI312112B (en) 2005-12-30 2009-07-11 Ind Tech Res Inst Data managing method, method and apparatus to snapshot data for multiple volumes to a single snapshot volume in a data processing system
US7971018B2 (en) 2006-05-01 2011-06-28 Mediatek Inc. Method and apparatus for secure context switching in a system including a processor and cached virtual memory
US8219885B2 (en) 2006-05-12 2012-07-10 Arm Limited Error detecting and correcting mechanism for a register file
US20080016325A1 (en) 2006-07-12 2008-01-17 Laudon James P Using windowed register file to checkpoint register state
US20080077782A1 (en) 2006-09-26 2008-03-27 Arm Limited Restoring a register renaming table within a processor following an exception
US7950002B2 (en) 2006-10-02 2011-05-24 International Business Machines Corporation Testing a software product by initiating a breakpoint and executing a probe routine
EP2523101B1 (en) 2006-11-14 2014-06-04 Soft Machines, Inc. Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes
US20080148022A1 (en) 2006-12-13 2008-06-19 Arm Limited Marking registers as available for register renaming
US7802136B2 (en) 2006-12-28 2010-09-21 Intel Corporation Compiler technique for efficient register checkpointing to support transaction roll-back
US8010543B1 (en) 2007-05-25 2011-08-30 Emc Corporation Protecting a file system on an object addressable storage system
US8239633B2 (en) 2007-07-11 2012-08-07 Wisconsin Alumni Research Foundation Non-broadcast signature-based transactional memory
US8661204B2 (en) 2007-08-15 2014-02-25 University Of Rochester, Office Of Technology Transfer Mechanism to support flexible decoupled transactional memory
US8438372B2 (en) * 2007-10-05 2013-05-07 Qualcomm Incorporated Link stack repair of erroneous speculative update
US20100031084A1 (en) 2008-08-04 2010-02-04 Sun Microsystems, Inc. Checkpointing in a processor that supports simultaneous speculative threading
US8078854B2 (en) 2008-12-12 2011-12-13 Oracle America, Inc. Using register rename maps to facilitate precise exception semantics
US8245018B2 (en) 2008-12-31 2012-08-14 International Business Machines Corporation Processor register recovery after flush operation
CN101788901B (zh) 2009-01-24 2013-09-25 世意法(北京)半导体研发有限责任公司 使用影子寄存器的高效硬件实现的设备及其方法
CN101819518B (zh) 2009-02-26 2013-09-11 国际商业机器公司 在事务内存中快速保存上下文的方法和装置
US9940138B2 (en) * 2009-04-08 2018-04-10 Intel Corporation Utilization of register checkpointing mechanism with pointer swapping to resolve multithreading mis-speculations
US8484438B2 (en) 2009-06-29 2013-07-09 Oracle America, Inc. Hierarchical bloom filters for facilitating concurrency control
US8356148B2 (en) * 2009-09-22 2013-01-15 Lsi Corporation Snapshot metadata management in a storage system
GB2474522B (en) * 2009-10-19 2014-09-03 Advanced Risc Mach Ltd Register state saving and restoring
US8516465B2 (en) 2009-12-04 2013-08-20 Oracle America, Inc. Register prespill phase in a compiler
US8972994B2 (en) 2009-12-23 2015-03-03 Intel Corporation Method and apparatus to bypass object lock by speculative execution of generated bypass code shell based on bypass failure threshold in managed runtime environment
US9009692B2 (en) 2009-12-26 2015-04-14 Oracle America, Inc. Minimizing register spills by using register moves
US20110238962A1 (en) 2010-03-23 2011-09-29 International Business Machines Corporation Register Checkpointing for Speculative Modes of Execution in Out-of-Order Processors
US9911008B2 (en) 2010-05-25 2018-03-06 Via Technologies, Inc. Microprocessor with on-the-fly switching of decryption keys
US8560816B2 (en) 2010-06-30 2013-10-15 Oracle International Corporation System and method for performing incremental register checkpointing in transactional memory
US8424015B2 (en) 2010-09-30 2013-04-16 International Business Machines Corporation Transactional memory preemption mechanism
US9626190B2 (en) 2010-10-07 2017-04-18 Advanced Micro Devices, Inc. Method and apparatus for floating point register caching
US9110691B2 (en) 2010-11-16 2015-08-18 Advanced Micro Devices, Inc. Compiler support technique for hardware transactional memory systems
US8966453B1 (en) 2010-11-24 2015-02-24 ECOLE POLYTECHNIQUE FéDéRALE DE LAUSANNE Automatic generation of program execution that reaches a given failure point
US9170818B2 (en) 2011-04-26 2015-10-27 Freescale Semiconductor, Inc. Register renaming scheme with checkpoint repair in a processing device
US9063747B2 (en) 2011-04-28 2015-06-23 Freescale Semiconductor, Inc. Microprocessor systems and methods for a combined register file and checkpoint repair register
US8656121B2 (en) 2011-05-17 2014-02-18 International Business Machines Corporation Facilitating data coherency using in-memory tag bits and tag test instructions
US8756591B2 (en) 2011-10-03 2014-06-17 International Business Machines Corporation Generating compiled code that indicates register liveness
US10078515B2 (en) 2011-10-03 2018-09-18 International Business Machines Corporation Tracking operand liveness information in a computer system and performing function based on the liveness information
US9081834B2 (en) 2011-10-05 2015-07-14 Cumulus Systems Incorporated Process for gathering and special data structure for storing performance metric data
US9569369B2 (en) 2011-10-27 2017-02-14 Oracle International Corporation Software translation lookaside buffer for persistent pointer management
JP5852677B2 (ja) 2011-12-26 2016-02-03 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation レジスタ・マッピング方法
WO2013100992A1 (en) 2011-12-28 2013-07-04 Intel Corporation Context-state management
US20130226878A1 (en) 2012-02-27 2013-08-29 Nec Laboratories America, Inc. Seamless context transfers for mobile applications
CN102662851A (zh) * 2012-04-12 2012-09-12 江苏中科芯核电子科技有限公司 一种堆栈入栈出栈装置及方法
US9740549B2 (en) 2012-06-15 2017-08-22 International Business Machines Corporation Facilitating transaction completion subsequent to repeated aborts of the transaction
US9361115B2 (en) 2012-06-15 2016-06-07 International Business Machines Corporation Saving/restoring selected registers in transactional processing
US9262170B2 (en) 2012-07-26 2016-02-16 International Business Machines Corporation Out-of-order checkpoint reclamation in a checkpoint processing and recovery core microarchitecture
US9229873B2 (en) 2012-07-30 2016-01-05 Soft Machines, Inc. Systems and methods for supporting a plurality of load and store accesses of a cache
US9672044B2 (en) 2012-08-01 2017-06-06 Nxp Usa, Inc. Space efficient checkpoint facility and technique for processor with integrally indexed register mapping and free-list arrays
CA2887022C (en) 2012-10-23 2021-05-04 Ip Reservoir, Llc Method and apparatus for accelerated format translation of data in a delimited data format
US9411739B2 (en) 2012-11-30 2016-08-09 Intel Corporation System, method and apparatus for improving transactional memory (TM) throughput using TM region indicators
US9183399B2 (en) 2013-02-14 2015-11-10 International Business Machines Corporation Instruction set architecture with secure clear instructions for protecting processing unit architected state information
US9336004B2 (en) * 2013-02-28 2016-05-10 Advanced Micro Devices, Inc. Checkpointing registers for transactional memory
KR20150128680A (ko) 2013-03-12 2015-11-18 마이크로칩 테크놀로지 인코포레이티드 프로그램 가능한 cpu 레지스터 하드웨어 컨텍스트 스왑 메커니즘
US8972992B2 (en) 2013-04-30 2015-03-03 Splunk Inc. Proactive monitoring tree with state distribution ring
JP6107485B2 (ja) 2013-07-04 2017-04-05 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US9471325B2 (en) 2013-07-12 2016-10-18 Qualcomm Incorporated Method and apparatus for selective renaming in a microprocessor
US9311084B2 (en) * 2013-07-31 2016-04-12 Apple Inc. RDA checkpoint optimization
US9946666B2 (en) 2013-08-06 2018-04-17 Nvidia Corporation Coalescing texture access and load/store operations
US9465721B2 (en) 2013-08-19 2016-10-11 Microsoft Technology Licensing, Llc Snapshotting executing code with a modifiable snapshot definition
US9298626B2 (en) 2013-09-26 2016-03-29 Globalfoundries Inc. Managing high-conflict cache lines in transactional memory computing environments
US9471480B2 (en) 2013-12-02 2016-10-18 The Regents Of The University Of Michigan Data processing apparatus with memory rename table for mapping memory addresses to registers
GB2518022B (en) * 2014-01-17 2015-09-23 Imagination Tech Ltd Stack saved variable value prediction
GB2516999B (en) 2014-01-31 2015-07-22 Imagination Tech Ltd An improved return stack buffer
US9430212B2 (en) 2014-02-10 2016-08-30 Netflix, Inc. Automatically generating volume images and launching virtual computing instances
US9262206B2 (en) 2014-02-27 2016-02-16 International Business Machines Corporation Using the transaction-begin instruction to manage transactional aborts in transactional memory computing environments
US10198321B1 (en) 2014-04-01 2019-02-05 Storone Ltd. System and method for continuous data protection
US9305167B2 (en) 2014-05-21 2016-04-05 Bitdefender IPR Management Ltd. Hardware-enabled prevention of code reuse attacks
CN104021058A (zh) * 2014-06-30 2014-09-03 广州视源电子科技股份有限公司 一种测试板卡快速启动的方法
US10042710B2 (en) 2014-09-16 2018-08-07 Actifio, Inc. System and method for multi-hop data backup
US9501637B2 (en) 2014-09-26 2016-11-22 Intel Corporation Hardware shadow stack support for legacy guests
US10268695B2 (en) 2014-10-28 2019-04-23 Hewlett Packard Enterprise Development Lp Snapshot creation
GB2538237B (en) * 2015-05-11 2018-01-10 Advanced Risc Mach Ltd Available register control for register renaming
GB2538766B (en) 2015-05-28 2018-02-14 Advanced Risc Mach Ltd Register renaming
GB2538764B (en) 2015-05-28 2018-02-14 Advanced Risc Mach Ltd Register renaming
US20170249144A1 (en) 2016-02-26 2017-08-31 Qualcomm Incorporated Combining loads or stores in computer processing
CN106201656B (zh) * 2016-06-30 2019-06-07 无锡华云数据技术服务有限公司 一种对kvm虚拟机快照存储空间的统计方法
EP3373178B1 (en) 2017-03-08 2024-09-18 Secure-IC SAS Comparison of execution context data signatures with references
US10540184B2 (en) 2017-04-18 2020-01-21 International Business Machines Corporation Coalescing store instructions for restoration
US11010192B2 (en) 2017-04-18 2021-05-18 International Business Machines Corporation Register restoration using recovery buffers
US10782979B2 (en) 2017-04-18 2020-09-22 International Business Machines Corporation Restoring saved architected registers and suppressing verification of registers to be restored
US10564977B2 (en) 2017-04-18 2020-02-18 International Business Machines Corporation Selective register allocation
US10552164B2 (en) 2017-04-18 2020-02-04 International Business Machines Corporation Sharing snapshots between restoration and recovery
US10572265B2 (en) 2017-04-18 2020-02-25 International Business Machines Corporation Selecting register restoration or register reloading
US10649785B2 (en) 2017-04-18 2020-05-12 International Business Machines Corporation Tracking changes to memory via check and recovery
US10545766B2 (en) 2017-04-18 2020-01-28 International Business Machines Corporation Register restoration using transactional memory register snapshots
US10489382B2 (en) 2017-04-18 2019-11-26 International Business Machines Corporation Register restoration invalidation based on a context switch
US10740108B2 (en) 2017-04-18 2020-08-11 International Business Machines Corporation Management of store queue based on restoration operation
US10963261B2 (en) 2017-04-18 2021-03-30 International Business Machines Corporation Sharing snapshots across save requests

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005537580A (ja) 2002-09-03 2005-12-08 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ スタックタイプのスナップショットバッファがネスト化されたインタラプトを処理すること
US20130179665A1 (en) 2012-01-06 2013-07-11 Imagination Technologies, Ltd. Restoring a register renaming map

Also Published As

Publication number Publication date
JP2020518895A (ja) 2020-06-25
DE112018000848T5 (de) 2019-11-07
WO2018193321A1 (en) 2018-10-25
CN110520837A (zh) 2019-11-29
CN110520837B (zh) 2023-06-23
GB2575412A (en) 2020-01-08
GB2575412B (en) 2021-10-20
GB201916132D0 (en) 2019-12-18
US20180300157A1 (en) 2018-10-18
US10838733B2 (en) 2020-11-17

Similar Documents

Publication Publication Date Title
JP7046098B2 (ja) リネーム・レジスタ復旧に基づくレジスタ・コンテキスト復元
US11061684B2 (en) Architecturally paired spill/reload multiple instructions for suppressing a snapshot latest value determination
US10592251B2 (en) Register restoration using transactional memory register snapshots
US10732981B2 (en) Management of store queue based on restoration operation
US10552164B2 (en) Sharing snapshots between restoration and recovery
US10564977B2 (en) Selective register allocation
US10489382B2 (en) Register restoration invalidation based on a context switch
US10572265B2 (en) Selecting register restoration or register reloading
US10540184B2 (en) Coalescing store instructions for restoration
US10649785B2 (en) Tracking changes to memory via check and recovery
US11010192B2 (en) Register restoration using recovery buffers
US10963261B2 (en) Sharing snapshots across save requests
JP7190797B2 (ja) メモリ内構成状態レジスタの保護を提供するコンピュータ・プログラム、コンピュータ・システム、およびコンピュータ実装方法
JP7160447B2 (ja) 構成状態レジスタの一括格納および読み込み動作を提供するコンピュータ・プログラム、コンピュータ・システム、およびコンピュータ実装方法
JP7190798B2 (ja) 機能的類似性に基づいてグループ化された構成状態レジスタを提供するコンピュータ・プログラム、コンピュータ・システム、およびコンピュータ実装方法
JP7249717B2 (ja) メモリ・ポインタを変更することによるコンテキスト切り替えを提供するコンピュータ・プログラム、コンピュータ・システム、およびコンピュータ実装方法
JP7189935B2 (ja) 同時の分岐アドレスの予測およびレジスタの内容の更新
JP7082187B2 (ja) サブルーチン分岐シーケンスにおける導出された値の作成および導出された値の予測の動的融合
JP7091441B2 (ja) コード固有の関係のあるレジスタの予測

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200526

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200826

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210825

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210913

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20211201

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: 20220315

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220322

R150 Certificate of patent or registration of utility model

Ref document number: 7046098

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150