【実施例】
【0012】
図1を参照すれば、複数のスレッドを同時に実行することができるプロセッサの実施例を示す。なお、プロセッサ100は、ハードウェア・トランザクショナル実行のためのハードウェア・サポートを含み得る。ハードウェア・トランザクショナル実行とともに、又は別個に、プロセッサ100は、ソフトウェア・トランザクショナル・メモリ(STM)のハードウェア・アクセラレーション、STMの別個の実行、又は、ハイブリッド・トランザクショナル・メモリ(TM)システムなどのそれらの組み合わせのためのハードウェア・サポートも提供し得る。プロセッサ100は、マイクロプロセッサ、組み込み型プロセッサ、ディジタル信号プロセッサ(DSP)、ネットワーク・プロセッサなどの何れかのプロセッサ、又はコードを実行するための他のデバイスを含む。図示したプロセッサ100は複数の処理エレメントを含む。
【0013】
一実施例では、処理エレメントは、スレッド装置、処理装置、コンテキスト、論理プロセッサ、ハードウェア・スレッド、コア、及び/又は、実行状態又はアーキテクチャ状態などのプロセッサの状態を保持することができる何れかの他のエレメントを表す。すなわち、一実施例における処理エレメントは、ソフトウェア・スレッド、オペレーティング・システム、アプリケーション又は他のコードなどのコードに独立して関連付けることが可能な何れかのハードウェアを表す。物理プロセッサは通常、コアやハードウェア・スレッドなどの何れかの数の他の処理エレメントを潜在的に含む集積回路を表す。
【0014】
コアは多くの場合、独立アーキテクチャ状態を維持することができる集積回路上に配置されたロジックを表す。ここで、独立して維持されるアーキテクチャ状態はそれぞれ、少なくとも一部の専用実行リソースと関連付けられる。コアと対照的に、ハードウェア・スレッドは通常、独立アーキテクチャ状態を維持することができる集積回路上に配置された何れかのロジックを表し、独立して維持されたアーキテクチャ状態は、実行リソースへのアクセスを共有する。特定のリソースが共有され、他が、一アーキテクチャ状態専用の場合、コア及びハードウェア・スレッドの用語間の線が重なる。しかし、多くの場合、コア及びハードウェア・スレッドは、オペレーティング・システムにより、個々の論理プロセッサとしてみられており、オペレーティング・システムは、各論理プロセッサ上の動作を個々にスケジューリングすることができる。
【0015】
図1に示す物理プロセッサ100は、より高いレベルのキャッシュ110へのアクセスを共有する2つのコア(コア101及び102)を含む。プロセッサ100は、非対称コア(すなわち、異なる構成、機能的装置、及び/又はロジックを有するコア)を含み得るが、対称コアを示す。その結果、コア101と同一として示すコア102は、反復する記載を避けるために詳細に説明しない。更に、コア101は2つのハードウェア・スレッド101a及び101bを含む一方、コア102は2つのハードウェア・スレッド102a及び102bを含む。したがって、オペレーティング・システムなどのソフトウェア・エンティティは潜在的には、プロセッサ100を別個の4つのプロセッサ(すなわち、4つのソフトウェア・スレッドを同時に実行することができる4つの論理プロセッサ又は処理エレメント)とみる。
【0016】
ここで、第1のスレッドはアーキテクチャ状態レジスタ101aと関連付けられ、第2のスレッドはアーキテクチャ状態レジスタ101bと関連付けられ、第3のスレッドはアーキテクチャ状態レジスタ102aと関連付けられ、第4のスレッドはアーキテクチャ状態レジスタ102bと関連付けられる。図示したように、アーキテクチャ状態レジスタ101aは、アーキテクチャ状態レジスタ101bに複製されるので、個々のアーキテクチャ状態/コンテキストは、論理プロセッサ101a/論理プロセッサ101bに記憶することができる。リネーム・アロケータ・ロジック130におけるリネーム・ロジック及び命令ポインタなどの他の小容量のリソースも、スレッド101a及び101bに対して複製し得る。キュー、ロード/記憶バッファ、ILTB120、及び再配列/退避装置135における再配列バッファなどの一部のリソースは区画化によって共有し得る。汎用内部レジスタ、ページテーブル・ベース・レジスタ、低レベル・データ・キャッシュ及びデータTLB115、実行装置140、及びアウトオブオーダ装置135の一部分などの他のリソースは潜在的に完全に共有されている。
【0017】
プロセッサ100は多くの場合、完全に共有されているか、区画化によって共有化されているか、又は、処理エレメントに専用であり得る他のリソースを含む。
図1では、プロセッサの例証的な機能的装置/リソースを有する全く例示的なプロセッサの実施例を示す。プロセッサは、前述の機能的装置の何れかを含めるか、又は省略することができ、かつ、表していない何れかの他の既知の機能的装置、ロジック又はファームウェアを含み得る。
【0018】
図示したように、プロセッサ100は、システム・メモリ175、チップセット、ノースブリッジ、又は他の集積回路などの、プロセッサ100に対して外部のデバイスと通信するためのバス・インタフェース・モジュール105を含む。メモリ175は、プロセッサ100に専用であるか、又はシステム内の他のデバイスと共有し得る。より高いレベルの、又は更に遠隔のキャッシュ110は、より高いレベルのキャッシュ110から最近フェッチされたエレメントをキャッシュする。「より高いレベルの、又は更に遠隔の」は、増加しているか、又は実行装置から更に遠隔になっているキャッシュ・レベルを表す。一実施例では、より高いレベルのキャッシュ110は、第2のレベルのデータ・キャッシュである。しかし、より高いレベルのキャッシュ110は、命令キャッシュに関連付けられるか、又は命令キャッシュを含み得るので、前述に限定されるものでない。トレース・キャッシュ(すなわち、命令コードの一タイプ)はその代わりに、最近デコードされたトレースを記憶するためにデコーダ125の後に結合し得る。モジュール120は更に潜在的には、実行され/とられる分岐を予測するための分岐目標バッファ、及び命令のアドレス変換エントリを記憶するための命令変換バッファ(I−TLB)を含む。
【0019】
デコード・モジュール125は、フェッチされたエレメントをデコードするためにフェッチ装置120に結合される。一実施例では、プロセッサ100は、プロセッサ100上で実行可能な命令を定義/規定する命令セット・アーキテクチャ(ISA)に関連付けられる。ここでは、多くの場合、ISAによって認識されるマシン・コード命令は、行う対象の命令又は動作を参照/規定するオプコードとして表される、命令の一部分を含む。
【0020】
一例では、アロケータ及びリネーマ・ブロック130は、命令処理結果を記憶するためのレジスタ・ファイルなどのリソースを予約するためのアロケータを含む。しかし、スレッド101a及び101bは潜在的には、アウトオブオーダ実行ができ、ここで、アロケータ及びリネーマ・ブロック130は更に、命令結果を追跡するための再配列バッファなどの他のリソースを予約する。装置130は、プロセッサ100の内部の他のレジスタに、プログラム/命令参照レジスタをリネイムするためのレジスタ・リネイマも含み得る。再配列/退避装置135は、上記再配列バッファなどの構成部分を含み、バッファをロードし、バッファを記憶して、アウトオブオーダ実行をサポートし、後に、アウトオブオーダで実行された命令のインオーダ退避をサポートする。
【0021】
スケジューラ及び実行装置ブロック140は、一実施例では、実行装置に対する命令/動作をスケジューリングするためのスケジューラ装置を含む。例えば、浮動小数点命令が、利用可能な浮動小数点実行装置を有する実行装置のポートに対してスケジューリングされる。実行装置に関連付けられたレジスタ・ファイルも、情報命令処理結果を記憶するために含まれる。例示的な実行装置は、浮動小数点実行装置、整数実行装置、ジャンプ実行装置、ロード実行装置、記憶実行装置、及び他の既知の実行装置を含む。
【0022】
より低いレベルのデータ・キャッシュ及びデータ変換バッファ(D−TLB)150は、実行装置140に結合される。デ―タ・キャッシュは、メモリ・コヒーレンシ状態に潜在的に保持された、データ・オペランドなどの、最近使用された/処理されたエレメントを記憶する。D−TLBは、仮想/線形アドレスから物理アドレスへの変換を記憶する。具体例として、プロセッサは、物理メモリを複数の仮想ページに分解するためのページ・テーブル構造を含み得る。
【0023】
一実施例では、プロセッサ100は、ハードウェア・トランザクショナル実行、ソフトウェア・トランザクショナル実行、又はそれらの組み合わせ又は混合ができる。コードのクリティカル・セクション又はアトミック・セクションとしても表し得るトランザクションは、アトミック群として実行する対象の命令、動作又はマイクロ動作の群を含む。例えば、命令又は動作は、トランザクション又はクリティカル・セクションを区別するために使用し得る。以下に更に詳細に説明する一実施例では、前述の命令は、上記デコーダなどのプロセッサ100のハードウェアによって認識可能な命令セット・アーキテクチャ(ISA)などの命令セットの一部である。多くの場合、前述の命令は、ハイレベル言語から、ハードウェアによって認識可能なアセンブラ言語にコンパイルされると、デコード段階中にデコーダが認識する動作コード(オプコード)、又は命令の他の部分を含む。
【0024】
通常、トランザクションの実行中、メモリに対する更新は、トランザクションがコミットされるまで大局的に可視にされる訳でない。例として、1つの位置に対するトランザクショナル書き込みは、潜在的には、局所スレッドに可視であるが、しかし、別のスレッドからの読み出しに応じて、書き込みデータは、トランザクショナル書き込みを含むトランザクションがコミットされるまで転送されない。トランザクションがなお保留中の間、メモリからロードされ、メモリ内に書き込まれるデータ項目/エレメントが、以下に更に詳細に説明するように追跡される。トランザクションがコミット点に達すると、競合が、トランザクションについて検出されていない場合、トランザクションはコミットされ、トランザクション中に行われた更新は大局的に可視にされる。
【0025】
しかし、トランザクションがその保留状態中に無効にされた場合、更新を大局的に可視にすることなく、トランザクションはアボートされ、潜在的に再起動される。その結果、本明細書及び特許請求の範囲記載のトランザクションが保留状態にあることは、実行を開始しており、コミットもアボートもしていない(すなわち、保留中である)トランザクションを表す。
【0026】
ソフトウェア・トランザクショナル・メモリ(STM)システムは多くの場合、ソフトウェアにおける、又は、少なくとも部分的に、ソフトウェアにおける、アクセス追跡、競合解消、又は他のトランザクショナル・メモリ・タスクの実行を表す。一実施例では、プロセッサ100は、トランザクショナル実行をサポートするためのプログラム・コードをコンパイルするためのコンパイラを実行することができる。ここで、コンパイラは、トランザクションの実行を可能にするために動作、コ―ル、ファンクション及び他のコードを導入し得る。
【0027】
コンパイラは多くの場合、ソース・テキスト/コードを目標テキスト/コードに変換するためのプログラム又はプログラムの組を含む。通常、コンパイラによる、プログラム/アプリケーション・コードのコンパイルは、ハイレベル・プログラミング言語のコードをローレベルのマシン言語コード又はアセンブラ言語コ―ドに変換するために複数の段階及びパスにおいて行われる。しかし、単一パスのコンパイラはなお、単純なコンパイルに利用し得る。コンパイラは、字句解析、前処理、構文解析、意味解析、コード生成、コード変換、及びコード最適化などの何れかの既知のコンパイラ動作を行い得る。
【0028】
より大きなコンパイラは、多くの場合、複数の段階を含むが、多くの場合、前述の段階は、一般的な2つの段階((1)フロントエンド(すなわち、一般に、構文処理、意味処理、及び特定の変換/最適化を行い得る)、及び(2)バックエンド(すなわち、一般に、解析、変換、最適化、及びコード生成が行われる))内に含まれる。一部のコンパイラは、コンパイラのフロントエンドとバックエンドとの間に描かれた輪郭のぼやけを示すミドルエンドを表す。その結果、コンパイラの挿入、関連付け、生成又は他の動作に対する参照は、上述の句若しくはパス、及びコンパイラの何れかの他の既知の句又はパスにおいて行い得る。例証した例では、コンパイラは潜在的には、コンパイルの1つ又は複数の段階においてトランザクショナル動作、コール、ファンクション等を挿入する(コンパイルのフロントエンド段階におけるコール/動作の挿入、及び、次いで、トランザクショナル・メモリ変換段階中の、コール/動作のより低いレベルのコードへの変換など)。
【0029】
しかし、コンパイラの動的特性又は静的特性及び実行環境にもかかわらず、コンパイラは一実施例では、トランザクショナル実行を可能にするようプログラム・コードをコンパイルする。したがって、プログラム・コードの実行に言及していることは、一実施例では、(1)主プログラム・コードをコンパイルし、トランザクショナル構造を維持し、又は、他のトランザクション関連動作を行うための、動的又は静的なコンパイラ・プログラムの実行、(2)トランザクショナル動作/コールを含む主プログラム・コードの実行、(3)主プログラム・コードに関連付けられた、ライブラリなどの他のプログラム・コードの実行、又は(4)これらの組み合わせを表す。
【0030】
一実施例では、プロセッサ100は、ハードウェア・トランスアクショナル・メモリ(HTM)システム内で、ハ―ドウェア/ロジックを利用するトランザクションを実行することができる。数多くの特定の実現形態の詳細が、HTMを実現する場合に、アーキテクチャ及びマイクロアーキテクチャの観点から存在し、その大半は、本発明を不必要に分かりにくくすることを避けるよう本明細書及び特許請求の範囲では説明していない。しかし、一部の構造及び実現形態は、例証の目的で開示している。しかし、前述の構造及び実現形態は必須でなく、異なる実現形態の詳細を有する他の構造により、強化し、かつ/又は置き換え得る。
【0031】
実現形態の設計の選択の例として、HTMは、置き換え更新により、又は書き込みバッファリングで動作し得る。置き換え更新HTMでは、トランザクショナル書き込みは、保持された先行データを修正するために、参照されたメモリ・アドレスに対して行われる。しかし、この修正されたデータは、外部要求スレッドに提供されず、すなわち、データは、大局的に可視に行われないが、局所メモリの配列の目的で、局所読み出しに提供される。更に、先行データは多くの場合、「記録されており」、よって、トランザクションのアボートがあると、先行データは、トランザクションの開始の実行前にスレッドの状態を達成するために回復することができる。
【0032】
例証すれば、データ・キャッシュ150は、キャッシュ110及びシステム・メモリ175などの、より高いレベルのメモリからのデータを保持するための第1のレベルのデータ・キャッシュを含む。よって、デ―タ・キャッシュ150に対するトランザクショナル書き込みに遭遇すると、先行データ項目は、ライトバック・キャッシュの一実施例では、先行データ項目をもう一度、より高いレベル・キャッシュ110に書き込む。あるいは、先行データは、プロセッサ100内又はその外の別の別個のメモリに記録し得る。先行データ項目を記録した後、キャッシュ150内のデータ項目を更新するためにトランザクショナル書き込みが行われる。したがって、(トランザンクショナル書き込みに関連付けられたスレッドである)局所スレッド101aなどの局所スレッドは、キャッシュ150内の修正されたデータ項目から読み出し得る。しかし、トランザクショナル書き込みを含むトランザクションがまだコミットされていない場合、スレッド102bなどの別のスレッドには、読み出し要求に応じて、修正されたデータでなく、記録されたデータが与えられる。
トランザクションがコミットすると、ログインされたデータは、無効にされるか、又は無視される。しかし、トランザクションがアボートした場合、先行データは、再ロードされるか、又は有効データとして、大局的に識別される。
【0033】
対照的に、書き込みバッファリングHTMでは、トランザクショナル書き込みは書き込みバッファにバッファリングされる一方、先行データはその元の位置に常駐する。スレッド102bなどの局所スレッドが、トランザクショナル書き込みされたデータの読み出しを行った場合、修正されたデータが書き込みバッファから転送される。当然の結果として、トランザクショナル書き込みを含むトランザクションがなお保留中である間にデータの読み出しを外部スレッドが要求した場合、元の位置からの先行データが供給される。更に、トランザクションのコミットにより、修正されたデータが、対応するメモリ・アドレスに複製される一方、アボートにより、バッファリングされたデータは無視される。
【0034】
上述のように、局所処理エレメントにより、かつ、潜在的には、他の処理エレメントにより、アクセス及び要求をデータ項目に対して行い得る。安全機構なしでは、前述のアクセスの一部は、潜在的には、無効なデータ及び実行(すなわち、読み出しを無効にするデータへの書き込み、又は無効データの読み出し)をもたらす。その結果、プロセッサ100は、潜在的には、潜在的な競合の識別のためにデータ項目との間のメモリ・アクセスを追跡又は監視するためのロジックを含む。
【0035】
データ項目又はデータ・エレメントは、ハードウェア、ソフトウェア、又はそれらの組み合わせによって規定される何れかの粒度レベルでのデータを含み得る。データ、データ・レメント、データ項目、又はそれらへの参照の例の包括的でないリストには、メモリ・アドレス、データ・オブジェクト、クラス、動的言語コードのタイプのフィールド、動的言語コードのタイプ、変数、オペランド、データ構造、及びメモリ・アドレスに対する間接的な参照が含まれる。しかし、何れの既知のデータ群も、データ・エレメント又はデータ項目として表し得る。動的言語コードのタイプ、及び動的言語コードのタイプのフィールドなどの上記例のいくつかは、動的言語コードのデータ構造を表す。例証するに、サン・マイクロシステムズ社によるジャバ(商標)などの動的言語コードは、強く型付けされた言語である。各変数は、コンパイル時に知られているタイプを有する。上記タイプは、2つのカテゴリ(すなわち、プリミティブ・タイプ(ブーリアン及びニューメリック、例えば、整数、浮動小数点)及び参照タイプ(クラス、インタフェース、及びアレイ)に分けられる。参照タイプの値は、オブジェクトに対する参照である。ジャバ(商標)では、フィールドを含むオブジェクトは、クラス・インスタンス又はアレイであり得る。クラスAのオブジェクトaを考えると、タイプAのフィールドxを表すために表記A::xを使用することが通例であり、クラスAのオブジェクトaのフィールドxを表すためにa.xを使用することが通例である。例えば、a.x=a.y+a.zとして式を表し得る。ここで、フィールドy及びフィールドzが、加算されるようロードされ、その結果がフィールドxに書き込まれる。
【0036】
したがって、データ項目に対するメモリ・アクセスの監視は、何れのデータ・レベル粒度でも行い得る。例えば、一実施例では、データに対するメモリ・アクセスはタイプのレベルで監視される。ここでは、フィールドA::xに対するトランザクショナル書き込み及びフィールドA::yの非トランザクショナル・ロードは、同じデータ項目(すなわち、タイプA)に対するアクセスとして監視し得る。別の実施例では、メモリ・アクセス監視はフィールド・レベル粒度で行われる。ここでは、A::xへのトランザクショナル書き込み及びA::yの非トランザクショナル・ロードは、別個のフィールドに対する参照であるので、同じデ―タ項目に対するアクセスとして監視されない。なお、他のデータ構造又はプログラミング手法は、データ項目に対するメモリ・アクセスの追跡を考慮に入れ得る。例として、クラスAのオブジェクトのフィールドx及びy(すなわち、A::x及びA::y)が、クラスBのオブジェクトを指し示し、新たに割り当てられたオブジェクトに初期化され、初期化後は決して書き込まれないものとする。一実施例では、A::xによって指し示されるオブジェクトのフィールドB::zに対するトランザクショナル書き込みは、A::yによって指し示されるオブジェクトのフィールドB::zの非トランザクショナル・ロードに関し、同じデータ項目へメモリ・アクセスとして監視されない。前述の例から推定すれば、何れのデータ粒度レベルでもモニタがモニタリングを行い得ると判定することが可能である。
【0037】
一実施例では、モニタは、適宜、監視されると判定されたロード及び記憶を追跡するための読み出しモニタ及び書き込みモニタを含む。例として、ハードウェア読み出しモニタ及び書き込みモニタは、データ項目を保持するための記憶構造の粒度にもかかわらず、少なくとも、データ項目の粒度でデータ項目を監視する。データ項目を監視するために読み出しモニタ/属性を利用する例は、本出願とともに出願された、Gad Sheafferらによる、「Read and Write Monitoring Attributes in Transactional Memory (TM) Systems」と題する、代理人整理番号P29130を有する同時係属中の米国特許出願第12/346530号に更に詳細に説明している。しかし、モニタ、属性、注釈、又は他の追跡機構は、データを保持するための何れかの粒度のデータ又は構造を利用するトランザクショナル実行に関連付けられた競合を検出するよう利用し得る。
【0038】
読み出し又は書き込み属性は、データ項目に関連付けられた状態を保持するための何れかのロジック、ファームウェア又は構造を含む。例えば、データ項目の属性は、ビット・ベクトルを含み、ビット・ベクトル内の各ビットは、トランザクショナル・ロードされたか、トランザクショナル書き込みされたか、非トランザクショナル・ロードされたか、非トランザクショナル書き込みされたか、トランザクショナル・ロードされていないか、トランザクショナル書き込みされていないか、非トランザクショナル・ロードされていないか、非トランザクショナル書き込みされていないか、アクセス競合が検出されたか、アクセス競合が検出されていないか、読み出し要求であるか、読み出し要求でない、書き込み要求でありか、書き込み要求でない、保有要求であるか、保有要求でないか、又は、データ項目を保持するためのデータ項目又はメモリ位置に関連付けられた何れかの他の属性又は状態などの)デ―タ項目の属性を表す。
【0039】
別の例として、データ項目の属性はコード化された値を含む。例えば、4つの状態(すなわち、(1)トランザクショナル書き込みされた、(2)トランザクショナル読み出しされた、(3)トランザクショナル書き込みされていない、及び(4)トランザクショナル読み出しされていない)などの状態は、2つの属性ビット(すなわち、4つの2進値00、01、10及び00)を利用してコード化される。
【0040】
更に別の例として、属性は、データ・キャッシュ150などのキャッシュ・メモリに関連付けられたコヒーレンシ状態アレイの一部として含まれる。例示的なキャッシュ・コヒーレンシ状態の網羅的でないリストには、(1)修正された(M420)状態(すなわち、アドレスが、書き込まれており、関連付けられた属性を有していない)、(2)修正された読み出し(MR430)状態(すなわち、アドレスは書き込まれており、関連付けられた読み出し属性を有する(例えば、アドレスに対する先行する読み出し、及び、それに続く、アドレスへのトランザクション書き込み)、(3)修正された書き込み(MW425)状態、すなわち、アドレスは書き込まれ、それに書き込み属性を関連付けさせている、(4)修正された読み出し書き込み(MRW435)状態(すなわち、アドレスは書き込まれており、読み出し及び書き込み属性を関連付けている)、(5)排他的(E440)状態(すなわち、アドレスが、読み出されており、関連付けられた属性がない)、(6)排他的読み出し(ER445)状態(すなわち、アドレスが、読み出されており、関連付けられた読み出し属性を有する)、(7)共有(S410)(すなわち、アドレスが、読み出されており、関連付けられた属性を有しない)、(8)共有読み出し(SR415)状態、すなわち、アドレスが読み出されており、関連付けられた読み出し状態を有する。
【0041】
ここでは、監視されたコヒーレンシ状態などの更なるキャッシュ・コヒーレンシ状態を、伝統的な修正排他的共有及び無効(MESI)キャッシュ・コヒーレンシ状態に加え得る。その結果、既存の既知のコヒーレンシ及び通信/スヌープ・プロトコルを、競合を検出するためのハードウェア・モニタ/属性と組み合わせて利用し得る。
【0042】
当該設計に基づくに、キャッシュ・ラインの監視されたコヒーレンシ状態及びキャッシュ・コヒーレンシ要求の別々の組み合わせは、潜在的な競合(キャッシュ・ラインが、共有読み出し状態にあるデータ項目を保持しており、スヌープが、データ項目に対する書き込み要求を示しているなど)をもたらす。逆に、修正された書き込み状態にあるデータ項目を保持しているキャッシュ・ラインと、上記データ項目に対する読み出し要求を示しているスヌープは、潜在的に競合しているとみなし得る。一実施例では、アクセス要求及び属性状態の前述の組み合わせを検出するために、スヌープ・ロジックが、競合検出/報告のためのモニタ及び/又はロジックなどの競合検出/報告ロジックに結合される。
【0043】
一実施例では、キャッシュ150に保有されたデータ項目に関連付けられた属性は、エフェミラル記憶装置又は専用記憶装置を利用して実現される。ここで、属性は、キャッシュ150のライン自体内などのキャッシュ150内の何れかの場所に保持し得る。例えば、上記HTMの一例は、置き換え更新HTMを含む。ここで、トランザクショナル修正データが現在のメモリ位置に保持される一方、先行データは、より高いレベルのメモリ内などに記録/バックアップされる。その結果、一実施例では、キャッシュ150が、データ項目に対してアクセスされると、属性は、キャッシュ150におけるデータ項目とともに短い間、記憶される。ここでは、データ項目は、専用コヒーレンシ状態又はエフェメラル・コヒーレンシ状態に保持され、このことは、トランザクショナル意味論が維持されることをキャッシュ制御ロジックが確実にすることを可能にする。すなわち、エフェメラル状態に保持されたデータ項目は他のスレッドに供給されない。
【0044】
しかし、データ項目をキャッシュ150から退出させた場合、専用で保持された属性は潜在的に失われる。基本的に、属性は、データ項目を監視するために作成されたシステムであり、より高いレベルのメモリにもう一度書き込まれるものでない。属性が崩壊する(すなわち、退出又は他のイベントによって失われる)シナリオでは、潜在的な競合は、上述の通り、潜在的なアクセス競合の検出と同様にトリガし得る。バッファリングされた記憶装置及びバッファリングされた状態などのエフェメラル記憶装置及び専用状態のバ―ジョンは、「Extending the MESI protocol to support locally buffered data」と題する、代理人整理番号P29132を有する、本出願とともに出願された関連出願に記載している。
【0045】
一実施例では、ハンドラは、アクセス競合、モニタ競合の喪失、データ競合の喪失等などの競合の効率的な処理をサポートするためにハードウェアに登録される。例えば、ソフトウェア書き込み可能なレジスタが、トランザクション・ハンドラのアドレスを登録するために、トランザクション・ランタイム又はアプリケーション・コードなどのソフトウェアに対して提供される。上記情報の喪失又は競合などの関心イベントが検出されると、一実施例では、制御フローが、オペレーティング・システム(OS)などの特権ソフトウェアの介入なしで、ソフトウェア書き込み可能なレジスタに登録されたトランザクション・ハンドラに対して向けられる。
【0046】
一実施例では、関心のイベント(すなわち、トランザクション・ハンドラの呼出しをもたらすためのハンドラ・イベント)は、トランザクショナル・ランタイム又はアプリケーション・コードなどの非特権ソフトウェアによって規定することができる。別々の実施例における関心のイベントは、同期、非同期、又はそれらの組み合わせであり得る。その結果、OSの介入なしで同期イベント及び非同期イベントのためのソフトウェア・ハンドラに制御を移す機能が提供される。これは、潜在的には、ハンドラの実行を開始するために、特権レベルのソフトウェア・ディスパッチ処理を待つことに関係する遅延をなくす。したがって、予期しない実行及び結果をもたらす前の低レーテンシ反応を必要とするハンドラ・イベントは、効率的にかつすばやく処理される。
【0047】
最初に
図1を参照して上述した通り、プロセッサ100のアーキテクチャは、説明の目的で、例証しているに過ぎない。同様に、種々の粒度のデータ項目におけるハードウェア・モニタ及び属性を関連付ける方法を利用し得るので、データ項目/エレメントと属性を関連付ける具体例も例示的である。
【0048】
図2を参照すれば、システムの一実施例は、ハードウェア内にハンドラを登録するためのサポートを提供するためのプロセッサを含む。プロセッサ205は、
図1を参照して説明した機能的装置又はモジュールの何れかを含んでよく、又は省略してよく、プロセッサの何れかの他の既知の装置又はロジックを含んでよい。更に、記憶エレメントの収集物も表す。しかし、別個の記憶エレメントに関して後述する動作及び方法は、何れの数の記憶エレメントとも組み合わせ得る。
【0049】
図示したように、プロセッサ205はコントローラ・ハブ230を介してシステム・メモリ250に結合される。システム・メモリ250は、ランダム・アクセス・メモリ(RAM)などの何れかのメモリ・デバイスを含む。ここで、システム・メモリ250は、プロセッサ205上で実行する対象の1つ又は複数のトランザクションを含み得るアプリケーション・コード260を保持し、後述するように、ハンドラ255は、アプリケーション・コード260の実行中に生じるトランザクショナル関連ハンドラ・イベントを処理するためにプロセッサ205のハードウェアに登録し得る。
【0050】
一実施例では、コントローラ・ハブ230は、多くの場合、2つのハブ(すなわち、システム・メモリ250と通信し、グラフィクス・プロセッサなどの入出力(I/O)デバイスと潜在的にインタフェースするためのメモリ・コントローラ・ハブ、及び、ネットワーク・インタフェース・コントローラ(NIC)、オーディオ・デバイス、又は他の既知のI/Oデバイスなどの他のI/Oデバイスと通信するためのI/Oコントローラ・ハブ)を含むチップセットを含む。
【0051】
プロセッサ205は記憶エレメント210を含む。記憶エレメントは、2進値、デ―タ、コード、命令、アドレス、又は他の既知のコンピュータ関連情報などの情報又はエレメントを保持するための何れかのロジック、構成部分又はデバイスを表す。一般的な例として、記憶エレメントはレジスタを含む。プロセッサ内にみられる通常のレジスタは、汎用レジスタ、データ・レジスタ、アドレス・レジスタ、コンディショナル・レジスタ、浮動小数点レジスタ、定数レジスタ、ベクトル・レジスタ、特殊用途レジスタ、プログラム・カウンタ(別名、命令ポインタ)レジスタ、ステータス・レジスタ、命令レジスタ、マシン/モデル特有レジスタ(MSR)、制御レジスタ、及び一般的なユーザ・アクセス可能なレジスタを含む。その結果、記憶エレメント210乃至255はそれぞれ、個々に、別々の実施例において、上述のレジスタのうちの何れか1つであり得る。
【0052】
一実施例では、ハンドラ255などのハンドラは記憶エレメント210に登録される。プロセッサ205のハードウェアにハンドラ255を登録することは、プロセッサ205に対する、ハンドラ255又はその位置の識別を含む。例として、記憶エレメント210にハンドラ255を登録することは、記憶エレメント210に、ハンドラ255への参照を記憶することを含む。すなわち、登録されると、記憶エレメント210は、ハンドラ255に対する参照を保有する。
【0053】
コードへの参照を登録する何れかの方法を、ハンドラ255への参照を保持するための記憶エレメント210を更新するよう利用し得る。一実施例では、非特権ソフトウェア/コードは、記憶エレメント210にハンドラ255を登録する。非特権ソフトウェアは、特定の高特権レベル(すなわち、特権レベル0)で実行することが可能でないソフトウェアなどの、特権化されていない何れかのコードを含み得る。しかし、一実施例では、非特権化ソフトウェアはユーザレベル・コードを含む。すなわち、トランザクショナル・ランタイム・コード、アプリケーション・コード、又は仮想マシン・コードは、トランザクションの実行前にプロセッサ205のハードウェアにハンドラ255を登録することができる。したがって、記憶エレメント210は、一実施例では、ハンドラ255への参照を保持するために更新されるよう、ユーザレベル又は非特権レベルのコードによって修正可能である。
【0054】
例えば、アプリケーション・コードは、トランザクションを実行する前に、トランザクションの実行中にハンドラ・イベントが生じた場合、ユーザ登録されたハンドラ255がイベントを処理するために呼び出されるように記憶エレメント210にハンドラ255を登録する。よって、この実施例では、ユーザは、トランザクショナル・ハンドラ・イベントの場合に利用する対象のハンドラを定義し、ハンドラに対する最適化された制御フロー移行を提供するためにハードウェアに登録することができる。しかし、ハンドラは、他の実施例では、OSなどの特権レベル・ソフトウェアによって登録し得る。
【0055】
一実施例では、ハンドラ255への参照は、システム・メモリ250に保持されたハンドラ255の開始アドレス256への参照を含む。プロセッサにおいて利用されるアドレス指定手法が数多く存在しているので、メモリ・アドレスへの参照は潜在的には、アドレスへの何れかの既知のコンピュータ参照を含む。一例として、仮想アドレス及びオフセットは、ハンドラ255の開始アドレス256への参照として利用される。ここでは、プロセッサ205の記憶装置に保持された変換テーブル及びページ・テーブルは、仮想アドレスを参照ベース物理アドレスに変換し、それに対するオフセットを加えて物理アドレスを得る(ハンドラ255を参照する物理アドレス256)。コード・セグメントの値、又はオフセットの省略は、ハンドラの使用を現在のコード・セグメントに制限し得る。これは、潜在的には、実行されているトランザクション内の法的な命令も制限する。参照の別の例は、ハンドラ255を直接参照するための、記憶エレメント210に保持された直接物理アドレスを含む。
【0056】
一実施例では、記憶エレメント220は、複数のハンドラ・イベントを特定する/示す。上述の通り、ハンドラ・イベントは、非同期ハンドラ・イベント、同期ハンドラ・イベント、又はそれらの組み合わせを含み得る。同期ハンドラ・イベントは、不正の命令/動作の実行や、無効な場所へのアクセスの実行などの命令に接続された/関連付けられたイベントを示す。対照的に、非同期イベントは、多くの場合、プログラム又は命令の制御フローに直接関係しないイベントを表す。ハンドラ・イベントの例は、属性情報の欠如、属性情報の喪失、トランザクションの範囲内で不正な命令の実行、不正の制御移行、非チェックポイント・レジスタへのアクセス、バッファリングされたデータの喪失、トランザクションの範囲内で禁止されたメモリ・タイプへのアクセス、例外、システム・コール、及び監視されたデータの喪失を含む。ここで、同期命令の一般的な例は、保護されたドメインに対して制御を不正に移行する旨の命令などの不正な命令の実行である一方、非同期イベントの通常の例は、属性情報の喪失を含む。しかし、ハンドラ・イベントは、ソフトウェア・ハンドラによって処理する対象の同期又は非同期の何れかの既知のイベントを含み得る。
【0057】
一実施例では、記憶エレメント220は、ビット・ベクトル221などのビット・ベクトルを保持する。ビット・ベクトル221内の各ビットは、イベント270乃至274などのハンドラ・イベントに対応する。例えば、イベント270乃至274は、上述のイベント、及び本明細書に記載していない何れかの他の既知のハンドラ・イベントの何れかの組み合わせを表す。ビットがセットされると、対応するハンドラ・イベントがイネーブルされ、逆に、ビットがアンセットされると、対応するハンドラ・イベントがディセーブルされる。
【0058】
図示したように、記憶エレメント220に保持する対象のベクトル221の第1のビットは、アンセットされ(すなわち、論理0にセットされ)、よって、ハンドラ・イベント274はディセーブルされる。論理値は例証的であり、反転し得る。すなわち、論理0はイネーブルし、論理1はディセーブルする。基本的に、ベクトル221はマスクとして動作する。ここでは、非チェックポイント・レジスタへのアクセスなどのイベント274は、検出されても、ディセーブルされていることが理由で、ハンドラ255の呼出しをもたらすものでない。このシナリオでは、前述のアクセスは、トランザクションの、変更できないか、又は頑強な特性によって許容可能であり得る。すなわち、トランザクションは、アボートする可能性が高くならないように優先度が与えられる。しかし、他のイネーブルされたイベント270乃至273の何れかが検出されると、記憶エレメント210に保持された参照に基づいてハンドラ255が実行される。ビット・ベクトルが例として利用されるが、コ―ド化された値又は命令の使用などによって、特定されたイベントを記憶する方法も利用し得る。
【0059】
一実施例では、記憶エレメント220の一部分又は全部が、非特権ソフトウェアによって修正されていない。ここで、ソフトウェアは、記憶エレメント210にハンドラ255を登録し、ハンドラ255を実行させるようハンドラ・イベントを特定/登録することができる。しかし、一例では、記憶エレメント220の一部分が予約される。その結果、ハードウェアは、他のイベントがソフトウェアによってイネーブルすることができる一方で、ソフトウェアがディセーブルすることができない一部の予約されたハンドラ・イベントを定義することができる。
【0060】
多くの場合、ハンドラは、検出されたハンドラ・イベントの状況に関して特定の通信を受け取る。したがって、一実施例では、記憶エレメント225は、ハンドラ255によって処理する対象のハンドラ・イベント(すなわち、検出されたハンドラ・イベント)を示すためのステータス値を保持するためのステータス記憶エレメントを含む。上記例から続ければ、スタータス記憶レメント225は、ビット・ベクトル226などのビット・ベクトルも保持し得る。ここで、ハンドラ・イベントをイネーブル又はディセーブルする代わりに、第1の論理値にセットされたビットは、ハンドラ・イベントが検出された旨を示す一方、第2の論理値にセットされたビットは、ハンドラ・イベントが検出されていない旨を示す。
【0061】
一ビットのみが論理1にセットされてとして示しているが、複数のイベントが生じており、複数のイベントを処理する旨を示すために複数のビットをセットし得る。一実施例では、記憶エレメント225は、ユーザレベル又は非特権ソフトウェアによって読み出し可能である。その結果、アプリケーション・コード260又はハンドラ255は、プロファイリング目的で、又は実際のイベントの処理目的で、実行中に生じたハンドラ・イベントを判定するために記憶エレメント225を読み出すことができる。記憶エレメント210との記憶エレメント220の相互接続、又はプロセッサ205に保持された記憶エレメント210への参照により、ハンドラ・イベントの検出に応じて、記憶エレメント210に保持された参照(すなわち、アドレス256の表現)に基づいて、実行が、現在の点におけるアプリケーション・コード(すなわち、アドレス257における命令)の実行からハンドラ255(例えば、アドレス256)の実行に向けられる。
【0062】
アプリケーション・コード260からハンドラ255に、制御フローを移行すること、又は実行を向けることは、プログラムの制御フローを誘導すること、又は実行を向けることの何れかの既知のやり方で行い得る。上述の通り、先行するシステムは多くの場合、ハンドラなどの、別々のプログラムに制御を渡す、OSなどの制御ソフトウェアに依存する。ここで、イベントが発生したかを判定するようOSが情報をポーリングしている間に、イベントを検出し、収集し得る。OSは、イベントが生じたことを知ると、ハンドラの実行のための時間をスケジューリングする。しかし、背景技術の部分の例に示すように、同期又は非同期であり得るトランザクショナル・イベントが更に効率的に(すなわち、より少ないスキッドで)処理される訳でない場合、無効な目標アドレスに基づいた分岐などの予期しない実行結果が生じ得る。
【0063】
スキッドは通常、ハンドラ・シナリオの生起(すなわち、ハンドラ・イベントの検出)と、ハンドラの実際の呼出しとの間のレーテンシとして定義される。例えば、ハンドラ255は、バッファリングされた/専用で保持された読み出しデータの喪失が理由で、呼び出されており、スキッド値が3である場合、ハンドラが呼び出されるまで、バッファリングされたデータの喪失から最大、3命令分とり得る。スキッドを指し示すために命令カウントが利用されると、実行サイクルなどの何れかの他の処理メトリックも利用し得る。その結果、ハンドラ255への制御フロー移行は、潜在的には、より少ないスキッドを伴って行う。
【0064】
制御フロー移行の例には、障害に似た態様(すなわち、スキッド・レベル0を示唆する、障害/イベントの退避を識別する命令の前)、トラップに似た態様(すなわち、これは、スキッド・レベル1を示唆する、割り込み可能な次ウィンドウにおいて)、又は、別々のイベントに対するそれらの組み合わせを含む。時には、スキッドはタイプ・イベントに基づく。例えば、予期しない実行結果を潜在的にもたらす一部の動作は、(スキッド・レベル0という)予期しない結果がシステム内で観測されないということを確実にするために退避させないものとする。一例は、先行してチェックポイントされなかった状態を変更する、トランザクションの範囲内の不正な動作を含む。ここでは、状態の変更が生じた場合、先行状態は失われ、トランザクション・アボートに応じて、先行状態を復元することは可能でない。その結果、動作の退避前に、実行がハンドラに向けられ、この場合、先行状態をチェックポイントし、次いで、動作が行われることを可能にし得る。
【0065】
一実施例では、最適化された制御フロー移行は、特権レベル・ソフトウェアの介入なしで制御をハンドラ255に移行するためにプロセッサ205のハードウェアを利用して行われる。特権レベルのソフトウェアの例は、OSソフトウェア、カーネル・コード、及び仮想マシン・モニタ(VMM)コードを含む。ここでは、プロセッサ205は、記憶エレメント210に登録された参照に基づいてハンドラ255にアプリケーション・コード260の実行を向け得る。例証するに、仮想アドレスなどの参照がレジスタ210に保持され、物理アドレス256に関連付けられたオフセットが、アプリケーション・コード260により、レジスタ210に記憶される。更に、ユーザレベル・コード260などにより、ハンドラ・イベントがレジスタ220において特定されており、前述のハンドラ・イベントのうちのイベントが検出されており、これは、ステータス値を保持するためのレジスタ225に対する更新によって示される。
【0066】
その結果、実行ロジックは、現在のプログラム・カウンタに対する参照(すなわち、現在の命令アドレス257に対する命令ポインタ)をレジスタ215に記憶する。レジスタ210に保持された参照と同様に、命令ポインタ・アドレスは、命令ポインタの実現形態に基づいた現在又は次の命令のアドレスなどの、実行が向けられる直前の現在の位置に対するオフセット又は他の参照、及び仮想アドレスを含み得る。基本的には、レジスタ215は、レジスタ210と同様に、戻りレジスタとして動作する。すなわち、レジスタ210内の参照は、ハンドラ255への制御フロー移行を最適化するよう利用され、戻りレジスタ215に保持された参照は、ハンドラ255からアプリケーション・コード260への制御フローの戻りを最適化するよう利用される。
【0067】
この例では、プログラム260内の現在の位置がレジスタ215に記録された後、アプリケーション・コード260を実行する実行リソースは、レジスタ210に保持された参照に基づいてアプリケーション・コード260に実行を向けるよう利用される。ここでは、アドレス256への参照は基本的には、新たな命令ポインタになり、ハンドラ255の開始時の(すなわち、第1の命令の)実行が開始される。実行リソースは、
図1を参照して上述した実行ロジックの何れか、又は何れかの他の既知の実行関連ロジックを含む。例えば、トランザクションの動作(すなわち、ロード/記憶実行装置上の実行がスケジューリングされたロード動作又は記憶動作)はアプリケーション・コード260で実行し得る。次に、ハンドラ・イベントに応じて、ジャンプ実行装置は、特権レベル・ソフトウェアの介入なしで、命令アドレス257からアドレス256へ実行をジャンプするためのジャンプ・タイプ動作を実行する。ここでは、ジャンプ対応動作は、通常ジャンプ動作、又はファー・ジャンプ動作を含み得る。
【0068】
アドレス256に変換される対象のオフセット及び仮想アドレスなどの、レジスタ210において参照されるアドレスは、アプリケーション・コード260からハンドラ255に実行を向けるためのジャンプ・タイプ動作の目標アドレスとして利用される。このフレームワーク内では、ハンドラ255が実行を終えた後、すなわち、ハンドラ・イベントの処理を終了した後、アプリケーション・コード260に戻るために、同様なジャンプ・タイプ命令/動作が行われる。しかし、今回は、目標アドレスとしてレジスタ210に保持された参照の代わりに、戻りレジスタ215に保持された先行命令ポインタ参照が、アプリケーション・コード260内の先行位置への戻りジャンプの目標アドレスとして利用される。
【0069】
ハンドラ255への上記参照は、同期イベント又は非同期イベントを処理するための何れかの既知のコードである。実際に、ハンドラ255は、検出されたハンドラ・イベントに応じて種々の動作を行い得る。例えば、一ハンドラ255は、一部のハンドラ・イベントに遭遇するとコミット機能又はアボート機能を行い、他のハンドラ・イベントに遭遇すると、レジスタ又は位置のチェックポイントなどの他の動作を行うことを試行し得る。その結果、ユーザは、ハンドラ・イベントを特定し、利用する対象のハンドラをハードウェアにおいて定義し得るので、ハンドラ・イベントに遭遇すると、ハードウェアは、特権ソフトウェアの介入の遅延なしで、ユーザレベル・コードによって特定されるハンドラに制御を移行することができる。更に、ハードウェアは、イベント、イベントに関連付けられたアドレス、及び他のイベント関連情報などの、ハンドラ・イベントに関する情報を通信するために提供し得る。
図3乃至
図4は、ハンドラに制御を向ける実施例を表している。
【0070】
図3に移れば、特権レベルのソフトウェア介入なしで、トランザクショナル・ハンドラに実行を向ける方法のフロー図の実施例を表す。
図3乃至
図4におけるフローは、実質的に直列に示す。しかし、図示したフローは、他の実施例では、異なる順序で実行するか、互いに並列に実行するか、又は、全く実行しないことがあり得る。例えば、
図4では、ハンドラ・アドレスは、ハンドラ・イベントがフロー410で規定される前にフロー405において第1のレジスタに記憶される。しかし、
図4の目的から逸脱しない限り、イベントは、ハンドラ・アドレスが第1のレジスタに記憶される前に記憶し得る。
【0071】
フロー305では、トランザクショナル・ハンドラがプロセッサのハードウェアに登録される。プロセッサにおいて保持されたテーブル又はスタックにハンドラへの参照を加えるなどの、ハードウェアにハンドラを登録する何れかの方法を利用することができる。一実施例では、トランザクショナル・ハンドラに関連付けられたアドレスへの参照がレジスタに入れられる。アドレスに対する参照は、何れかの既知のアドレス参照を含む。例として、参照は、プロセッサ内のハードウェア構造(すなわち、変換バッファ及び/又はページ・テーブル)によって変換することができるオフセット及び仮想アドレスを含む。上述のように、アプリケーション・コード又はトランザクショナル・ランタイム・コードが、トランザクションの開始時などのコードの本体内又はコードの初期化の際に、登録を行うようにレジスタはユーザ・アクセス可能であり得る。
【0072】
フロー310では、ハンドラ・イベントが検出されたかを判定する。ハンドラ・イベントの例は、属性情報の欠如、属性情報の喪失、トランザクションの範囲内で不正な命令の実行、不正の制御移行、非チェックポイント・レジスタへのアクセス、バッファリングされたデータの喪失、トランザクションの範囲内で禁止されたメモリ・タイプへのアクセス、例外、システム・コール、及び監視されたデータの喪失を含む。この例におけるハンドラ・イベントは、同期イベント及び非同期イベントを含み得る。しかし、以下に更に詳細に説明するように、一実施例では、レーテンシに悩まされたソフトウェア・ポーリングを利用してイベントを処理する代わりに、同期イベント及び非同期イベントは、最適化されたスキッド処理を提供するためにすばやい非同期ハードウェア態様で処理し得る。
図2は、ユーザレベル・コード又は特権コード及びユーザレベル・コードの組み合わせがハンドラ・イベントを規定する実施例を示す。しかし、ハンドラ・イベントは、ハードウェア、ファームウェア、又は他のソフトウェアによっても規定し得る。
【0073】
イベントが検出されなかった場合、フロー315で、実行が通常通りに実行する。しかし、イベントがフロー310で検出された場合、フロー320で、特権レベル・ソフトウェアの介入なしで、実行が、トランザクショナル・ハンドラに向けられる。OS、カーネル、又は仮想マシン・モニタ・コードが実行されることなく、ハンドラに実行を向ける何れかの方法を利用し得る。
図4を参照して説明した例は、プロセッサのレジスタに保持された値に基づいて実行を向ける工程を含む。
【0074】
図4は、ハードウェアを利用したソフトウェア・ハンドラに制御フローを移す方法のフロー図の実施例を示す。フロー405では、トランザクショナル・ハンドラのハンドラ・アドレスは第1のレジスタに記憶され/書き込まれる。ここで、ユーザレベル・ソフトウェアは、仮想アドレス及びオフセットなどの、アドレスへの参照を書き込む。フロー410では、ユ―ザレベル・ソフトウェアは、第2のレジスタにおいて複数のハンドラ・イベントを規定する。上記例として、ユーザレベル・ソフトウェアは、ハードウェア定義されたハンドラ・イベントに対応するビット・ベクトルのビットをセットし/リセットする。ハンドラ・イベントは、同期イベント、非同期イベント、又はそれらの組み合わせであり得る。
【0075】
フロー415では、複数のハンドラ・イベントのうちのハンドラ・イベントが検出される。イベント検出は、複数の機能的装置に及ぶいくつかの方法を含み得る。例えば、属性データ又は監視されたデータの喪失を検出するために、キャッシュ制御ロジックは、監視されたラインの退出を検出し、適宜、報告し得る。しかし、不正な命令の場合、不正な動作に関連付けられたオプコードをデコーダが検出することにより、イベントが潜在的に検出され、報告される。別の例として、レジスタの状態を更新するための動作は、プロセッサのパイプラインの段階で検出され、その段階に関連付けられたロジックはハンドラ・イベントを検出する。他のロジック、及びハードウェア・イベント又はハンドラ関連イベントを検出する方法を利用し得る。
【0076】
イベントが検出されると、フロー420で、第3のレジスタは、複数のハンドラ・イベントのうちのハンドラ・イベントが検出されている旨を示すために、状態値に更新される。ここでは、ハードウェアがイベントを検出すると、報告ロジックはイベントをステータス・レジスタに報告する。例として、ハンドラ・イベントに対応するビットは、ハンドラ・イベントの生起を報告するために第3のレジスタに保持されたビット・ベクトルにセットされる。第3のレジスタは、ユーザレベル・ソフトウェアによって読み出し可能であるので、ハンドラは、どのハンドラ・イベントが検出されたかを判定することができる。第3のレジスタ、又は第3のレジスタに関する他のレジスタは、イベントに関連付けられ得た動作、イベントに関連付けられたレジスタ、及びイベントに関連付けられたアドレス/データ項目などの、ハンドラ・イベントに関する更なる情報を提供し得る。
【0077】
ハンドラに実行を向ける前に、現在のプログラム・カウンタ値又は命令ポインタ値/アドレスが、ハンドラの実行後の現在の実行位置に戻ることを可能にするために、フロー425における第4のレジスタに書き込まれる。プロセッサ設計に基づいて、命令ポインタは、現在の命令又は次の命令を参照し得る。したがって、何れの実現形態においても、「現在の命令ポインタ」への参照は、現在の命令又は次命令であり得る現在の命令ポインタ値を含む。例として、適切な命令のアドレスを参照するための仮想アドレス及びオフセットがレジスタに記憶される。
【0078】
フロー430では、実行が、第1のレジスタに保持されたハンドラ・アドレスにジャンプする。上記例から続ければ、ジャンプ・タイプの動作は、第1のレジスタに保持された仮想アドレス及びオフセットにジャンプするよう実行される。基本的には、フロー425では、現在の命令ポインタが記録され、フロー430では、現在の命令ポインタを、トランザクション・ハンドラの開始命令に対する「命令ポインタ」で置き換える。
【0079】
フロー435では、トランザクショナル・ハンドラは、適宜、イベントを処理するよう実行される。上述の通り、ハンドラは、検出されたイベント、イベント・タイプ、イベントに関連付けられたアドレス若しくは動作、又は他のハンドラ関連情報を判定するための第3のレジスタなどのレジスタにアクセスすることができる。イベントが処理された後、フロー440で、実行は、第4のレジスタに保持された命令ポインタ・アドレスにもう一度、ジャンプする。上記とは逆に、ハンドラ内の命令ポインタは、次いで、先行して記録された命令ポインタで置き換える。その結果、ハンドラが呼び出された直前にもう一度、実行が向けられる。一実施例では、アボート又はコミットに応じて、ソフトウェア・ハンドラは、別の位置に実行をもう一度向けさせ得る。
【0080】
本明細書及び特許請求の範囲記載のモジュールは、何れかのハードウェア、ソフトウェア、ファームウェア、又はそれらの組み合わせを表す。多くの場合、別個のものとして示すモジュール境界は一般に、変動し、潜在的に重なる。例えば、第1のモジュール及び第2のモジュールは、特定の独立したハードウェア、ソフトウェア、又はファームウェアを潜在的に維持しながら、ハードウェア、ソフトウェア、ファームウェア、又はそれらの組み合わせを共有し得る。一実施例では、ロジックという語の使用は、トランジスタ、レジスタ、又はプログラマブル論理デバイスなどの他のハードウェアなどのハードウェアを含む。しかし、別の実施例では、ロジックは、ファームウェアやマイクロコードなどの、ハードウェアと一体化されたソフトウェア又はコードも含む。
【0081】
本明細書及び特許請求の範囲記載の値は、数、状態、論理状態、又は2進論理状態の何れかの既知の表現を含む。多くの場合、論理レベル、及び論理値の使用は、2進論理状態を単に表す1及び0としても表す。例えば、1は高論理レベルを表し、0は低論理レベルを表す。一実施例では、トランジスタ又はフラッシュ・セルなどの蓄電池は、単一の論理値又は複数の論理値を保持することができる。しかし、コンピュータ・システム内の値の他の表現を使用し得る。例えば、10進数10は、2進値「1010」及び16進文字「A」としても表し得る。よって、値は、コンピュータ・システムに保持することができる情報の何れかの表現を含む。
【0082】
更に、状態は、値、又は値の一部分として表し得る。例として、論理0などの第2の値は非デフォルト状態を表し得る一方、論理1などの第1の値はデフォルト又は初期状態を表し得る。更に、一実施例では、リセット及びセットの語は、デフォルト、及び更新された値又は状態を表す。例えば、デフォルト値は潜在的には、高論理値(すなわち、リセット)を含む一方、更新された値は潜在的には、低論理値(すなわち、セット)を含む。値の何れかの組み合わせを、何れかの数の状態を表すために利用し得る。
【0083】
上述の方法、ハードウェア、ソフトウェア、ファームウェア、又はコードの実施例は、処理エレメントによって実行可能なマシン・アクセス可能な媒体又はマシン読み取り可能な媒体上に記憶された命令又はコードによって実現し得る。マシン・アクセス可能/マシン読み取り可能な媒体は、コンピュータ又は電子システムなどのマシンによって読み取り可能な形式で情報を提供する(すなわち、記憶し、かつ/又は伝送する)何れかの機構を含む。例えば、マシン・アクセス可能な媒体は、スタティックRAM(SRAM)又はダイナミックRAM(DRAM)などのランダム・アクセス可能なメモリ(RAM)、ROM、磁気記憶媒体又は光記憶媒体、フラッシュ・メモリ・デバイス、電気記憶デバイス、光記憶デバイス、音響記憶デバイス、又は他の形式の伝搬信号(例えば、キャリア信号、赤外線信号、ディジタル信号)記憶デバイス等を含む。例えば、マシンは、伝搬信号上で伝送される対象の情報を保持することができる媒体から、キャリア波などの伝搬信号を受け取ることにより、記憶装置にアクセスし得る。
【0084】
本明細書を通して、「一実施例」又は「実施例」に言及されていることは、実施例に関して説明した特定の構成、構造、又は特性が、本発明の少なくとも1つの実施例に含まれているということを意味する。よって、本明細書の随所に「一実施例」又は「実施例」の句が存在していることは、必ずしも、全て、同じ実施例を参照している訳でない。更に、特定の構成、構造、又は特性は、1つ又は複数の実施例において何れかの適切なやり方で組み合わせ得る。
【0085】
上記明細書では、特定の例示的な実施例を参照して、詳細な説明を記載している。しかし、特許請求の範囲記載の本発明のより広い趣旨及び範囲から逸脱しない限り、種々の修正及び変更を行うことができるということは明らかとなるであろう。よって、本願の明細書及び図面は、限定的な意味合いでなく例証的な意味合いで解されるものとする。更に、実施例及び他の例示的な文言を上述していることは、同じ実施例又は同じ例を必ずしも表している訳でない一方、別々でかつ別個の実施例を表し得、更に、潜在的には、同じ実施例を表し得る。