(57)【要約】【課題】トランザクショナル・メモリのハードウェアにユーザハンドラを登録する方法及び装置。【解決手段】ユーザ・アクセス可能なレジスタは、トランザクショナル・ハンドラへの参照を保持する。イベント・レジスタは、更に、ユーザレベルのソフトウェア、特権ソフトウェアを利用して、又はハードウェアによって行い得る、ハンドラ・イベントの規定のために提供し得る。イベントが検出されると、ユーザ・アクセス可能なレジスタに保持されたトランザクショナル・ハンドラへの参照に基づいて、実行がトランザクション・ハンドラに向けられる。トランザクショナル・ハンドラはイベントを処理し、次いで、実行は通常フローに戻る。【選択図】図１
2014089752.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサであって、
トランザクショナル・ハンドラのアドレスへの参照を保持するために非特権レベル・ソフトウェアによって更新することができるレジスタと、
前記トランザクショナル・ハンドラの前記アドレスへの前記参照に基づいてトランザクションの実行中にハンドラ・イベントに応じて特権レベル・ソフトウェアの介入なしで制御フローを前記トランザクショナル・ハンドラに移行するための実行ロジックと
を備え、
前記トランザクショナル・ハンドラの前記アドレスは、前記トランザクショナル・ハンドラの開始アドレスであり、前記トランザクショナル・ハンドラの前記アドレスへの前記参照は仮想アドレスを含むプロセッサ。
【請求項２】
請求項１記載のプロセッサであって、前記トランザクショナル・ハンドラの前記アドレスへの前記参照に基づいてトランザクションの実行中にハンドラ・イベントに応じて特権レベル・ソフトウェアの介入なしで前記制御フローを前記トランザクショナル・ハンドラに移行するための前記実行ロジックは、目標アドレスとして前記レジスタに保持された前記トランザクショナル・ハンドラの前記アドレスへの前記参照からの、前記トランザクション・ハンドラの前記アドレスを利用した第１のジャンプ・タイプ動作を実行するための実行ロジックを含むプロセッサ。
【請求項３】
請求項２記載のプロセッサであって、戻りレジスタを更に備え、前記目標アドレスとして前記レジスタに保持された前記トランザクショナル・ハンドラの前記アドレスへの前記参照からの前記トランザクショナル・ハンドラの前記アドレスを利用した前記ジャンプ・タイプ動作を前記実行ロジックが実行する前に、前記戻りレジスタは、前記実行ロジックが前記第１のジャンプ・タイプ動作を実行する直前の現在の位置において命令ポインタ・アドレスへの参照によって更新されるプロセッサ。
【請求項４】
請求項３記載のプロセッサであって、前記実行ロジックは、前記第１のジャンプ・タイプ動作の実行に応じて前記ハンドラ・イベントを処理するために前記トランザクション・ハンドラを更に実行し、前記ハンドラ・イベントを処理するために前記実行ロジックが前記トランザクション・ハンドラを実行した後、前記実行ロジックは、前記実行ロジックが前記第１のジャンプ・タイプ動作を実行する直前に前記現在の位置に戻るために前記戻りレジスタに保持された前記命令ポインタ・アドレスへの前記参照からの、前記命令ポインタ・アドレスを利用した第２のジャンプ・タイプ動作を実行するプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
（技術分野）
本発明は、プロセッサ実行の分野に関し、特に、命令群の実行に関する。
【０００２】
（関連出願への相互参照）
本出願は、本出願とともに出願された、  Ｇａｄ  Ｓｈｅａｆｆｅｒらによる、「Ｅｘｔｅｎｄｉｎｇ  Ｃａｃｈｅ  Ｃｏｈｅｒｅｎｃｙ  Ｐｒｏｔｏｃｏｌｓ  ｔｏ  Ｓｕｐｐｏｒｔ  Ｌｏｃａｌｌｙ  Ｂｕｆｆｅｒｅｄ  Ｄａｔａ」と題する、西暦２００８年１２月３０日付け出願の米国特許出願第１２／３４６５４３号（代理人整理番号Ｐ２９１３２）、Ｇａｄ  Ｓｈｅａｆｆｅｒらによる、「Ｍｅｍｏｒｙ  Ｍｏｄｅｌ  ｆｏｒ  Ｈａｒｄｗａｒｅ  Ａｔｔｒｉｂｕｔｅｓ  Ｗｉｔｈｉｎ  ａ  Ｔｒａｎｓａｃｔｉｏｎａｌ  Ｍｅｍｏｒｙ  Ｓｙｓｔｅｍ」と題する、西暦２００８年１２月３０日付け出願の米国特許出願第１２／３４６５３９号（代理人整理番号Ｐ２９１３１）、Ｇａｄ  Ｓｈｅａｆｆｅｒらによる、「Ｒｅａｄ  ａｎｄ  Ｗｒｉｔｅ  Ｍｏｎｉｔｏｒｉｎｇ  Ａｔｔｒｉｂｕｔｅｓ  ｉｎ  Ｔｒａｎｓａｃｔｉｏｎａｌ  Ｍｅｍｏｒｙ  （ＴＭ）  Ｓｙｓｔｅｍｓ」と題する、西暦２００８年１２月３０日付け出願の米国特許出願第１２／３４６５３０号（代理人整理番号Ｐ２９１３０）、及びＧａｄ  Ｓｈｅａｆｆｅｒらによる、「Ｍｅｔａｐｈｙｓｉｃａｌ  Ａｄｄｒｅｓｓ  Ｓｐａｃｅ  ｆｏｒ  Ｈｏｌｄｉｎｇ  Ｌｏｓｓｙ  Ｍｅｔａ−ｄａｔａ  ｉｎ  Ｈａｒｄｗａｒｅ」と題する、西暦２００８年１２月３０日付け出願の米国特許出願第１２／３４６５００号（代理人整理番号Ｐ２９１２８）の特許出願に関連している。
【背景技術】
【０００３】
半導体処理及びロジック・デザインにおける進歩は、集積回路デバイス上に存在し得るロジックの量の増加を可能にしてきた。その結果、コンピュータ・システム構成は、システムにおける単一又は複数の集積回路から、個々の集積回路上に存在している複数のコア及び複数の論理プロセッサへと発展してきた。プロセッサ又は集積回路は通常、単一のプロセッサ・ダイを含んでおり、プロセッサ・ダイは、何れかの数のコア又は論理プロセッサを含み得る。
【０００４】
集積回路上のコア及び論理プロセッサの数がますます増加していることにより、より多くのソフトウェア・スレッドが同時に実行されることが可能になっている。しかし、同時に実行することができるソフトウェア・スレッドの数の増加は、ソフトウェア・スレッド間で共有されるデータの同期化の問題をもたらしている。複数のコア又は複数の論理プロセッサ・システムにおける共有データへのアクセスに対する一般的な解決策の１つは、共有データへの複数のアクセスにわたる相互排除を保証するためにロックを使用することである。しかし、複数のソフトウェア・スレッドを実行する能力がますます向上していることは、潜在的には、フォールス・コンテンション、及び実行の逐次化をもたらす。
【０００５】
例えば、共有データを保持しているハッシュ・テーブルを考えてみる。ロック・システムにより、プログラマは、ハッシュ・テーブル全体をロックし、一スレッドがハッシュ・テーブル全体にアクセスすることを可能にする。しかし、他のスレッドのスループット及び性能は、潜在的には悪影響を受ける。ロックが解放されるまで、ハッシュ・テーブル内のエントリには何れもアクセスすることができないからである。あるいは、ハッシュ・テーブル内の各エントリはロックし得る。いずれにせよ、この単純な例を大規模のスケーラブルなプログラムに外挿した後、ロック・コンテンション、逐次化、ファイングレイン同期化、及びデッドロック回避の複雑度は、プログラマにとって極めて厄介な負担になる。
【０００６】
最近の別のデータ同期化手法には、トランザクショナル・メモリ（ＴＭ）の使用が含まれる。多くの場合、トランザクショナル実行は、複数のマイクロ動作、動作、又は命令の群の実行を含む。上記例では、何れのスレッドもハッシュ・テーブル内で実行し、それらのメモリ・アクセスは監視／追跡される。何れのスレッドも、同じエントリにアクセスし／同じエントリを変える場合、データのバリディティを保証するために競合解消を行い得る。トランザクショナル実行の一タイプには、ソフトウェア・トランザクショナル・メモリ（ＳＴＭ）が含まれ、ＳＴＭでは、メモリ・アクセスの追跡、競合解消、アボート・タスク、及び、他のトランザクショナル・タスクが、多くの場合、ハードウェアのサポートなしで行われる。別のタイプのトランザクショナル実行は、ハードウェア・トランザクショナル・メモリ（ＨＴＭ）システムであり、ここで、ハードウェアは、アクセス追跡、競合解消、及び他のトランザクショナル・タスクをサポートするために含まれる。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
トランザクション内の一部の動作は、トランザクションによって読み出されるか、又は生成されるデータに基づく。このデータ、又はこのデータに対するアクセスを監視する情報がそこなわれた場合、予期しない副作用が生じ得る。例えば、トランザクションが分岐の宛先を特定の変数Ｘに書き込んだとする。トランザクショナル・メモリの意味論により、Ｘの値は変更し得る（例えば、Ｘは、バッファリングされたやり方で書き込まれ、バッファは失われている）。変更の後、トランザクションは、アドレスＸから読み出された、当該時点では無効な値に基づいて分岐しようとし、その結果、予期しない結果が生じる。トランザクションの最後に、又は、ポーリングなどの全くシンクロナスなソフトウェア（ＯＳ又はＶＭＭ）手法によって処理される上述のものなどのイベントは、予期しない結果が生じる前に変更又は競合を処理するのに十分差し迫っている訳でないことがあり得る。
【課題を解決するための手段】
【０００８】
本発明は、例示の目的で例証しており、添付図面の図によって限定されることを意図するものでない。
【図面の簡単な説明】
【０００９】
【図１】複数のソフトウェア・スレッドを同時に実行することができる複数の処理エレメントを含むプロセッサの実施例を示す図である。
【図２】ハンドラ・イベントに応じてハンドラに対する制御移行をサポートするためのプロセッサ内の実施例を示す図である。
【図３】特権レベルのソフトウェア介入なしで、トランザクショナル・ハンドラに実行を向ける方法のフロー図の実施例を示す図である。
【図４】ハードウェアを利用したソフトウェア・ハンドラに制御フローを移す方法のフロー図の別の実施例を示す図である。
【発明を実施するための形態】
【００１０】
以下の明細書では、本発明の詳細な理解をもたらすために、特定のタイプのメモリ・アクセス及び場所、特定のデータ粒度、特定のタイプのキャッシュ・コヒーレンシ・モデル、特定のキャッシュ実現形態、アクセス・モニタの特定のタイプ及び実現形態、トランザクショナル実行の特定のハードウェア構造の例等などの数多くの具体的な詳細を記載している。しかし、前述の具体的な詳細は、本発明を実施するために使用しなくてよいということが当業者には明らかになるであろう。他の場合には、周知の構成部分又は手法（ソフトウェアにおけるトランザクションのコーディング、トランザクションの境界設定、特定並びに別のマルチコア及びマルチスレッドのプロセッサ・アーキテクチャ、特定のコンパイラ手法／実現形態、及びマイクロプロセッサの特定の動作の詳細は、本発明を不必要に分かりにくくすることを避けるために、詳細に説明していていない。
【００１１】
本明細書及び特許請求の範囲記載の方法及び装置は、ハンドラへの、最適化された制御フロー移行をサポートするために、ハードウェアにおいてハンドラを登録する。特に、ハンドラの登録は主に、ハードウェア・トランザクションナル・メモリ・システムに関して説明している。しかし、ハンドラを登録する方法及び装置は、前述に限定されるものでない。ハンドラの介入を必要とする何れのハードウェア実行のためにも実現し得るからである。
【実施例】
【００１２】
図１を参照すれば、複数のスレッドを同時に実行することができるプロセッサの実施例を示す。なお、プロセッサ１００は、ハードウェア・トランザクショナル実行のためのハードウェア・サポートを含み得る。ハードウェア・トランザクショナル実行とともに、又は別個に、プロセッサ１００は、ソフトウェア・トランザクショナル・メモリ（ＳＴＭ）のハードウェア・アクセラレーション、ＳＴＭの別個の実行、又は、ハイブリッド・トランザクショナル・メモリ（ＴＭ）システムなどのそれらの組み合わせのためのハードウェア・サポートも提供し得る。プロセッサ１００は、マイクロプロセッサ、組み込み型プロセッサ、ディジタル信号プロセッサ（ＤＳＰ）、ネットワーク・プロセッサなどの何れかのプロセッサ、又はコードを実行するための他のデバイスを含む。図示したプロセッサ１００は複数の処理エレメントを含む。
【００１３】
一実施例では、処理エレメントは、スレッド装置、処理装置、コンテキスト、論理プロセッサ、ハードウェア・スレッド、コア、及び／又は、実行状態又はアーキテクチャ状態などのプロセッサの状態を保持することができる何れかの他のエレメントを表す。すなわち、一実施例における処理エレメントは、ソフトウェア・スレッド、オペレーティング・システム、アプリケーション又は他のコードなどのコードに独立して関連付けることが可能な何れかのハードウェアを表す。物理プロセッサは通常、コアやハードウェア・スレッドなどの何れかの数の他の処理エレメントを潜在的に含む集積回路を表す。
【００１４】
コアは多くの場合、独立アーキテクチャ状態を維持することができる集積回路上に配置されたロジックを表す。ここで、独立して維持されるアーキテクチャ状態はそれぞれ、少なくとも一部の専用実行リソースと関連付けられる。コアと対照的に、ハードウェア・スレッドは通常、独立アーキテクチャ状態を維持することができる集積回路上に配置された何れかのロジックを表し、独立して維持されたアーキテクチャ状態は、実行リソースへのアクセスを共有する。特定のリソースが共有され、他が、一アーキテクチャ状態専用の場合、コア及びハードウェア・スレッドの用語間の線が重なる。しかし、多くの場合、コア及びハードウェア・スレッドは、オペレーティング・システムにより、個々の論理プロセッサとしてみられており、オペレーティング・システムは、各論理プロセッサ上の動作を個々にスケジューリングすることができる。
【００１５】
図１に示す物理プロセッサ１００は、より高いレベルのキャッシュ１１０へのアクセスを共有する２つのコア（コア１０１及び１０２）を含む。プロセッサ１００は、非対称コア（すなわち、異なる構成、機能的装置、及び／又はロジックを有するコア）を含み得るが、対称コアを示す。その結果、コア１０１と同一として示すコア１０２は、反復する記載を避けるために詳細に説明しない。更に、コア１０１は２つのハードウェア・スレッド１０１ａ及び１０１ｂを含む一方、コア１０２は２つのハードウェア・スレッド１０２ａ及び１０２ｂを含む。したがって、オペレーティング・システムなどのソフトウェア・エンティティは潜在的には、プロセッサ１００を別個の４つのプロセッサ（すなわち、４つのソフトウェア・スレッドを同時に実行することができる４つの論理プロセッサ又は処理エレメント）とみる。
【００１６】
ここで、第１のスレッドはアーキテクチャ状態レジスタ１０１ａと関連付けられ、第２のスレッドはアーキテクチャ状態レジスタ１０１ｂと関連付けられ、第３のスレッドはアーキテクチャ状態レジスタ１０２ａと関連付けられ、第４のスレッドはアーキテクチャ状態レジスタ１０２ｂと関連付けられる。図示したように、アーキテクチャ状態レジスタ１０１ａは、アーキテクチャ状態レジスタ１０１ｂに複製されるので、個々のアーキテクチャ状態／コンテキストは、論理プロセッサ１０１ａ／論理プロセッサ１０１ｂに記憶することができる。リネーム・アロケータ・ロジック１３０におけるリネーム・ロジック及び命令ポインタなどの他の小容量のリソースも、スレッド１０１ａ及び１０１ｂに対して複製し得る。キュー、ロード／記憶バッファ、ＩＬＴＢ１２０、及び再配列／退避装置１３５における再配列バッファなどの一部のリソースは区画化によって共有し得る。汎用内部レジスタ、ページテーブル・ベース・レジスタ、低レベル・データ・キャッシュ及びデータＴＬＢ１１５、実行装置１４０、及びアウトオブオーダ装置１３５の一部分などの他のリソースは潜在的に完全に共有されている。
【００１７】
プロセッサ１００は多くの場合、完全に共有されているか、区画化によって共有化されているか、又は、処理エレメントに専用であり得る他のリソースを含む。図１では、プロセッサの例証的な機能的装置／リソースを有する全く例示的なプロセッサの実施例を示す。プロセッサは、前述の機能的装置の何れかを含めるか、又は省略することができ、かつ、表していない何れかの他の既知の機能的装置、ロジック又はファームウェアを含み得る。
【００１８】
図示したように、プロセッサ１００は、システム・メモリ１７５、チップセット、ノースブリッジ、又は他の集積回路などの、プロセッサ１００に対して外部のデバイスと通信するためのバス・インタフェース・モジュール１０５を含む。メモリ１７５は、プロセッサ１００に専用であるか、又はシステム内の他のデバイスと共有し得る。より高いレベルの、又は更に遠隔のキャッシュ１１０は、より高いレベルのキャッシュ１１０から最近フェッチされたエレメントをキャッシュする。「より高いレベルの、又は更に遠隔の」は、増加しているか、又は実行装置から更に遠隔になっているキャッシュ・レベルを表す。一実施例では、より高いレベルのキャッシュ１１０は、第２のレベルのデータ・キャッシュである。しかし、より高いレベルのキャッシュ１１０は、命令キャッシュに関連付けられるか、又は命令キャッシュを含み得るので、前述に限定されるものでない。トレース・キャッシュ（すなわち、命令コードの一タイプ）はその代わりに、最近デコードされたトレースを記憶するためにデコーダ１２５の後に結合し得る。モジュール１２０は更に潜在的には、実行され／とられる分岐を予測するための分岐目標バッファ、及び命令のアドレス変換エントリを記憶するための命令変換バッファ（Ｉ−ＴＬＢ）を含む。
【００１９】
デコード・モジュール１２５は、フェッチされたエレメントをデコードするためにフェッチ装置１２０に結合される。一実施例では、プロセッサ１００は、プロセッサ１００上で実行可能な命令を定義／規定する命令セット・アーキテクチャ（ＩＳＡ）に関連付けられる。ここでは、多くの場合、ＩＳＡによって認識されるマシン・コード命令は、行う対象の命令又は動作を参照／規定するオプコードとして表される、命令の一部分を含む。
【００２０】
一例では、アロケータ及びリネーマ・ブロック１３０は、命令処理結果を記憶するためのレジスタ・ファイルなどのリソースを予約するためのアロケータを含む。しかし、スレッド１０１ａ及び１０１ｂは潜在的には、アウトオブオーダ実行ができ、ここで、アロケータ及びリネーマ・ブロック１３０は更に、命令結果を追跡するための再配列バッファなどの他のリソースを予約する。装置１３０は、プロセッサ１００の内部の他のレジスタに、プログラム／命令参照レジスタをリネイムするためのレジスタ・リネイマも含み得る。再配列／退避装置１３５は、上記再配列バッファなどの構成部分を含み、バッファをロードし、バッファを記憶して、アウトオブオーダ実行をサポートし、後に、アウトオブオーダで実行された命令のインオーダ退避をサポートする。
【００２１】
スケジューラ及び実行装置ブロック１４０は、一実施例では、実行装置に対する命令／動作をスケジューリングするためのスケジューラ装置を含む。例えば、浮動小数点命令が、利用可能な浮動小数点実行装置を有する実行装置のポートに対してスケジューリングされる。実行装置に関連付けられたレジスタ・ファイルも、情報命令処理結果を記憶するために含まれる。例示的な実行装置は、浮動小数点実行装置、整数実行装置、ジャンプ実行装置、ロード実行装置、記憶実行装置、及び他の既知の実行装置を含む。
【００２２】
より低いレベルのデータ・キャッシュ及びデータ変換バッファ（Ｄ−ＴＬＢ）１５０は、実行装置１４０に結合される。デ―タ・キャッシュは、メモリ・コヒーレンシ状態に潜在的に保持された、データ・オペランドなどの、最近使用された／処理されたエレメントを記憶する。Ｄ−ＴＬＢは、仮想／線形アドレスから物理アドレスへの変換を記憶する。具体例として、プロセッサは、物理メモリを複数の仮想ページに分解するためのページ・テーブル構造を含み得る。
【００２３】
一実施例では、プロセッサ１００は、ハードウェア・トランザクショナル実行、ソフトウェア・トランザクショナル実行、又はそれらの組み合わせ又は混合ができる。コードのクリティカル・セクション又はアトミック・セクションとしても表し得るトランザクションは、アトミック群として実行する対象の命令、動作又はマイクロ動作の群を含む。例えば、命令又は動作は、トランザクション又はクリティカル・セクションを区別するために使用し得る。以下に更に詳細に説明する一実施例では、前述の命令は、上記デコーダなどのプロセッサ１００のハードウェアによって認識可能な命令セット・アーキテクチャ（ＩＳＡ）などの命令セットの一部である。多くの場合、前述の命令は、ハイレベル言語から、ハードウェアによって認識可能なアセンブラ言語にコンパイルされると、デコード段階中にデコーダが認識する動作コード（オプコード）、又は命令の他の部分を含む。
【００２４】
通常、トランザクションの実行中、メモリに対する更新は、トランザクションがコミットされるまで大局的に可視にされる訳でない。例として、１つの位置に対するトランザクショナル書き込みは、潜在的には、局所スレッドに可視であるが、しかし、別のスレッドからの読み出しに応じて、書き込みデータは、トランザクショナル書き込みを含むトランザクションがコミットされるまで転送されない。トランザクションがなお保留中の間、メモリからロードされ、メモリ内に書き込まれるデータ項目／エレメントが、以下に更に詳細に説明するように追跡される。トランザクションがコミット点に達すると、競合が、トランザクションについて検出されていない場合、トランザクションはコミットされ、トランザクション中に行われた更新は大局的に可視にされる。
【００２５】
しかし、トランザクションがその保留状態中に無効にされた場合、更新を大局的に可視にすることなく、トランザクションはアボートされ、潜在的に再起動される。その結果、本明細書及び特許請求の範囲記載のトランザクションが保留状態にあることは、実行を開始しており、コミットもアボートもしていない（すなわち、保留中である）トランザクションを表す。
【００２６】
ソフトウェア・トランザクショナル・メモリ（ＳＴＭ）システムは多くの場合、ソフトウェアにおける、又は、少なくとも部分的に、ソフトウェアにおける、アクセス追跡、競合解消、又は他のトランザクショナル・メモリ・タスクの実行を表す。一実施例では、プロセッサ１００は、トランザクショナル実行をサポートするためのプログラム・コードをコンパイルするためのコンパイラを実行することができる。ここで、コンパイラは、トランザクションの実行を可能にするために動作、コ―ル、ファンクション及び他のコードを導入し得る。
【００２７】
コンパイラは多くの場合、ソース・テキスト／コードを目標テキスト／コードに変換するためのプログラム又はプログラムの組を含む。通常、コンパイラによる、プログラム／アプリケーション・コードのコンパイルは、ハイレベル・プログラミング言語のコードをローレベルのマシン言語コード又はアセンブラ言語コ―ドに変換するために複数の段階及びパスにおいて行われる。しかし、単一パスのコンパイラはなお、単純なコンパイルに利用し得る。コンパイラは、字句解析、前処理、構文解析、意味解析、コード生成、コード変換、及びコード最適化などの何れかの既知のコンパイラ動作を行い得る。
【００２８】
より大きなコンパイラは、多くの場合、複数の段階を含むが、多くの場合、前述の段階は、一般的な２つの段階（（１）フロントエンド（すなわち、一般に、構文処理、意味処理、及び特定の変換／最適化を行い得る）、及び（２）バックエンド（すなわち、一般に、解析、変換、最適化、及びコード生成が行われる））内に含まれる。一部のコンパイラは、コンパイラのフロントエンドとバックエンドとの間に描かれた輪郭のぼやけを示すミドルエンドを表す。その結果、コンパイラの挿入、関連付け、生成又は他の動作に対する参照は、上述の句若しくはパス、及びコンパイラの何れかの他の既知の句又はパスにおいて行い得る。例証した例では、コンパイラは潜在的には、コンパイルの１つ又は複数の段階においてトランザクショナル動作、コール、ファンクション等を挿入する（コンパイルのフロントエンド段階におけるコール／動作の挿入、及び、次いで、トランザクショナル・メモリ変換段階中の、コール／動作のより低いレベルのコードへの変換など）。
【００２９】
しかし、コンパイラの動的特性又は静的特性及び実行環境にもかかわらず、コンパイラは一実施例では、トランザクショナル実行を可能にするようプログラム・コードをコンパイルする。したがって、プログラム・コードの実行に言及していることは、一実施例では、（１）主プログラム・コードをコンパイルし、トランザクショナル構造を維持し、又は、他のトランザクション関連動作を行うための、動的又は静的なコンパイラ・プログラムの実行、（２）トランザクショナル動作／コールを含む主プログラム・コードの実行、（３）主プログラム・コードに関連付けられた、ライブラリなどの他のプログラム・コードの実行、又は（４）これらの組み合わせを表す。
【００３０】
一実施例では、プロセッサ１００は、ハードウェア・トランスアクショナル・メモリ（ＨＴＭ）システム内で、ハ―ドウェア／ロジックを利用するトランザクションを実行することができる。数多くの特定の実現形態の詳細が、ＨＴＭを実現する場合に、アーキテクチャ及びマイクロアーキテクチャの観点から存在し、その大半は、本発明を不必要に分かりにくくすることを避けるよう本明細書及び特許請求の範囲では説明していない。しかし、一部の構造及び実現形態は、例証の目的で開示している。しかし、前述の構造及び実現形態は必須でなく、異なる実現形態の詳細を有する他の構造により、強化し、かつ／又は置き換え得る。
【００３１】
実現形態の設計の選択の例として、ＨＴＭは、置き換え更新により、又は書き込みバッファリングで動作し得る。置き換え更新ＨＴＭでは、トランザクショナル書き込みは、保持された先行データを修正するために、参照されたメモリ・アドレスに対して行われる。しかし、この修正されたデータは、外部要求スレッドに提供されず、すなわち、データは、大局的に可視に行われないが、局所メモリの配列の目的で、局所読み出しに提供される。更に、先行データは多くの場合、「記録されており」、よって、トランザクションのアボートがあると、先行データは、トランザクションの開始の実行前にスレッドの状態を達成するために回復することができる。
【００３２】
例証すれば、データ・キャッシュ１５０は、キャッシュ１１０及びシステム・メモリ１７５などの、より高いレベルのメモリからのデータを保持するための第１のレベルのデータ・キャッシュを含む。よって、デ―タ・キャッシュ１５０に対するトランザクショナル書き込みに遭遇すると、先行データ項目は、ライトバック・キャッシュの一実施例では、先行データ項目をもう一度、より高いレベル・キャッシュ１１０に書き込む。あるいは、先行データは、プロセッサ１００内又はその外の別の別個のメモリに記録し得る。先行データ項目を記録した後、キャッシュ１５０内のデータ項目を更新するためにトランザクショナル書き込みが行われる。したがって、（トランザンクショナル書き込みに関連付けられたスレッドである）局所スレッド１０１ａなどの局所スレッドは、キャッシュ１５０内の修正されたデータ項目から読み出し得る。しかし、トランザクショナル書き込みを含むトランザクションがまだコミットされていない場合、スレッド１０２ｂなどの別のスレッドには、読み出し要求に応じて、修正されたデータでなく、記録されたデータが与えられる。
トランザクションがコミットすると、ログインされたデータは、無効にされるか、又は無視される。しかし、トランザクションがアボートした場合、先行データは、再ロードされるか、又は有効データとして、大局的に識別される。
【００３３】
対照的に、書き込みバッファリングＨＴＭでは、トランザクショナル書き込みは書き込みバッファにバッファリングされる一方、先行データはその元の位置に常駐する。スレッド１０２ｂなどの局所スレッドが、トランザクショナル書き込みされたデータの読み出しを行った場合、修正されたデータが書き込みバッファから転送される。当然の結果として、トランザクショナル書き込みを含むトランザクションがなお保留中である間にデータの読み出しを外部スレッドが要求した場合、元の位置からの先行データが供給される。更に、トランザクションのコミットにより、修正されたデータが、対応するメモリ・アドレスに複製される一方、アボートにより、バッファリングされたデータは無視される。
【００３４】
上述のように、局所処理エレメントにより、かつ、潜在的には、他の処理エレメントにより、アクセス及び要求をデータ項目に対して行い得る。安全機構なしでは、前述のアクセスの一部は、潜在的には、無効なデータ及び実行（すなわち、読み出しを無効にするデータへの書き込み、又は無効データの読み出し）をもたらす。その結果、プロセッサ１００は、潜在的には、潜在的な競合の識別のためにデータ項目との間のメモリ・アクセスを追跡又は監視するためのロジックを含む。
【００３５】
データ項目又はデータ・エレメントは、ハードウェア、ソフトウェア、又はそれらの組み合わせによって規定される何れかの粒度レベルでのデータを含み得る。データ、データ・レメント、データ項目、又はそれらへの参照の例の包括的でないリストには、メモリ・アドレス、データ・オブジェクト、クラス、動的言語コードのタイプのフィールド、動的言語コードのタイプ、変数、オペランド、データ構造、及びメモリ・アドレスに対する間接的な参照が含まれる。しかし、何れの既知のデータ群も、データ・エレメント又はデータ項目として表し得る。動的言語コードのタイプ、及び動的言語コードのタイプのフィールドなどの上記例のいくつかは、動的言語コードのデータ構造を表す。例証するに、サン・マイクロシステムズ社によるジャバ（商標）などの動的言語コードは、強く型付けされた言語である。各変数は、コンパイル時に知られているタイプを有する。上記タイプは、２つのカテゴリ（すなわち、プリミティブ・タイプ（ブーリアン及びニューメリック、例えば、整数、浮動小数点）及び参照タイプ（クラス、インタフェース、及びアレイ）に分けられる。参照タイプの値は、オブジェクトに対する参照である。ジャバ（商標）では、フィールドを含むオブジェクトは、クラス・インスタンス又はアレイであり得る。クラスＡのオブジェクトａを考えると、タイプＡのフィールドｘを表すために表記Ａ：：ｘを使用することが通例であり、クラスＡのオブジェクトａのフィールドｘを表すためにａ．ｘを使用することが通例である。例えば、ａ．ｘ＝ａ．ｙ＋ａ．ｚとして式を表し得る。ここで、フィールドｙ及びフィールドｚが、加算されるようロードされ、その結果がフィールドｘに書き込まれる。
【００３６】
したがって、データ項目に対するメモリ・アクセスの監視は、何れのデータ・レベル粒度でも行い得る。例えば、一実施例では、データに対するメモリ・アクセスはタイプのレベルで監視される。ここでは、フィールドＡ：：ｘに対するトランザクショナル書き込み及びフィールドＡ：：ｙの非トランザクショナル・ロードは、同じデータ項目（すなわち、タイプＡ）に対するアクセスとして監視し得る。別の実施例では、メモリ・アクセス監視はフィールド・レベル粒度で行われる。ここでは、Ａ：：ｘへのトランザクショナル書き込み及びＡ：：ｙの非トランザクショナル・ロードは、別個のフィールドに対する参照であるので、同じデ―タ項目に対するアクセスとして監視されない。なお、他のデータ構造又はプログラミング手法は、データ項目に対するメモリ・アクセスの追跡を考慮に入れ得る。例として、クラスＡのオブジェクトのフィールドｘ及びｙ（すなわち、Ａ：：ｘ及びＡ：：ｙ）が、クラスＢのオブジェクトを指し示し、新たに割り当てられたオブジェクトに初期化され、初期化後は決して書き込まれないものとする。一実施例では、Ａ：：ｘによって指し示されるオブジェクトのフィールドＢ：：ｚに対するトランザクショナル書き込みは、Ａ：：ｙによって指し示されるオブジェクトのフィールドＢ：：ｚの非トランザクショナル・ロードに関し、同じデータ項目へメモリ・アクセスとして監視されない。前述の例から推定すれば、何れのデータ粒度レベルでもモニタがモニタリングを行い得ると判定することが可能である。
【００３７】
一実施例では、モニタは、適宜、監視されると判定されたロード及び記憶を追跡するための読み出しモニタ及び書き込みモニタを含む。例として、ハードウェア読み出しモニタ及び書き込みモニタは、データ項目を保持するための記憶構造の粒度にもかかわらず、少なくとも、データ項目の粒度でデータ項目を監視する。データ項目を監視するために読み出しモニタ／属性を利用する例は、本出願とともに出願された、Ｇａｄ  Ｓｈｅａｆｆｅｒらによる、「Ｒｅａｄ  ａｎｄ  Ｗｒｉｔｅ  Ｍｏｎｉｔｏｒｉｎｇ  Ａｔｔｒｉｂｕｔｅｓ  ｉｎ  Ｔｒａｎｓａｃｔｉｏｎａｌ  Ｍｅｍｏｒｙ  （ＴＭ）  Ｓｙｓｔｅｍｓ」と題する、代理人整理番号Ｐ２９１３０を有する同時係属中の米国特許出願第１２／３４６５３０号に更に詳細に説明している。しかし、モニタ、属性、注釈、又は他の追跡機構は、データを保持するための何れかの粒度のデータ又は構造を利用するトランザクショナル実行に関連付けられた競合を検出するよう利用し得る。
【００３８】
読み出し又は書き込み属性は、データ項目に関連付けられた状態を保持するための何れかのロジック、ファームウェア又は構造を含む。例えば、データ項目の属性は、ビット・ベクトルを含み、ビット・ベクトル内の各ビットは、トランザクショナル・ロードされたか、トランザクショナル書き込みされたか、非トランザクショナル・ロードされたか、非トランザクショナル書き込みされたか、トランザクショナル・ロードされていないか、トランザクショナル書き込みされていないか、非トランザクショナル・ロードされていないか、非トランザクショナル書き込みされていないか、アクセス競合が検出されたか、アクセス競合が検出されていないか、読み出し要求であるか、読み出し要求でない、書き込み要求でありか、書き込み要求でない、保有要求であるか、保有要求でないか、又は、データ項目を保持するためのデータ項目又はメモリ位置に関連付けられた何れかの他の属性又は状態などの）デ―タ項目の属性を表す。
【００３９】
別の例として、データ項目の属性はコード化された値を含む。例えば、４つの状態（すなわち、（１）トランザクショナル書き込みされた、（２）トランザクショナル読み出しされた、（３）トランザクショナル書き込みされていない、及び（４）トランザクショナル読み出しされていない）などの状態は、２つの属性ビット（すなわち、４つの２進値００、０１、１０及び００）を利用してコード化される。
【００４０】
更に別の例として、属性は、データ・キャッシュ１５０などのキャッシュ・メモリに関連付けられたコヒーレンシ状態アレイの一部として含まれる。例示的なキャッシュ・コヒーレンシ状態の網羅的でないリストには、（１）修正された（Ｍ４２０）状態（すなわち、アドレスが、書き込まれており、関連付けられた属性を有していない）、（２）修正された読み出し（ＭＲ４３０）状態（すなわち、アドレスは書き込まれており、関連付けられた読み出し属性を有する（例えば、アドレスに対する先行する読み出し、及び、それに続く、アドレスへのトランザクション書き込み）、（３）修正された書き込み（ＭＷ４２５）状態、すなわち、アドレスは書き込まれ、それに書き込み属性を関連付けさせている、（４）修正された読み出し書き込み（ＭＲＷ４３５）状態（すなわち、アドレスは書き込まれており、読み出し及び書き込み属性を関連付けている）、（５）排他的（Ｅ４４０）状態（すなわち、アドレスが、読み出されており、関連付けられた属性がない）、（６）排他的読み出し（ＥＲ４４５）状態（すなわち、アドレスが、読み出されており、関連付けられた読み出し属性を有する）、（７）共有（Ｓ４１０）（すなわち、アドレスが、読み出されており、関連付けられた属性を有しない）、（８）共有読み出し（ＳＲ４１５）状態、すなわち、アドレスが読み出されており、関連付けられた読み出し状態を有する。
【００４１】
ここでは、監視されたコヒーレンシ状態などの更なるキャッシュ・コヒーレンシ状態を、伝統的な修正排他的共有及び無効（ＭＥＳＩ）キャッシュ・コヒーレンシ状態に加え得る。その結果、既存の既知のコヒーレンシ及び通信／スヌープ・プロトコルを、競合を検出するためのハードウェア・モニタ／属性と組み合わせて利用し得る。
【００４２】
当該設計に基づくに、キャッシュ・ラインの監視されたコヒーレンシ状態及びキャッシュ・コヒーレンシ要求の別々の組み合わせは、潜在的な競合（キャッシュ・ラインが、共有読み出し状態にあるデータ項目を保持しており、スヌープが、データ項目に対する書き込み要求を示しているなど）をもたらす。逆に、修正された書き込み状態にあるデータ項目を保持しているキャッシュ・ラインと、上記データ項目に対する読み出し要求を示しているスヌープは、潜在的に競合しているとみなし得る。一実施例では、アクセス要求及び属性状態の前述の組み合わせを検出するために、スヌープ・ロジックが、競合検出／報告のためのモニタ及び／又はロジックなどの競合検出／報告ロジックに結合される。
【００４３】
一実施例では、キャッシュ１５０に保有されたデータ項目に関連付けられた属性は、エフェミラル記憶装置又は専用記憶装置を利用して実現される。ここで、属性は、キャッシュ１５０のライン自体内などのキャッシュ１５０内の何れかの場所に保持し得る。例えば、上記ＨＴＭの一例は、置き換え更新ＨＴＭを含む。ここで、トランザクショナル修正データが現在のメモリ位置に保持される一方、先行データは、より高いレベルのメモリ内などに記録／バックアップされる。その結果、一実施例では、キャッシュ１５０が、データ項目に対してアクセスされると、属性は、キャッシュ１５０におけるデータ項目とともに短い間、記憶される。ここでは、データ項目は、専用コヒーレンシ状態又はエフェメラル・コヒーレンシ状態に保持され、このことは、トランザクショナル意味論が維持されることをキャッシュ制御ロジックが確実にすることを可能にする。すなわち、エフェメラル状態に保持されたデータ項目は他のスレッドに供給されない。
【００４４】
しかし、データ項目をキャッシュ１５０から退出させた場合、専用で保持された属性は潜在的に失われる。基本的に、属性は、データ項目を監視するために作成されたシステムであり、より高いレベルのメモリにもう一度書き込まれるものでない。属性が崩壊する（すなわち、退出又は他のイベントによって失われる）シナリオでは、潜在的な競合は、上述の通り、潜在的なアクセス競合の検出と同様にトリガし得る。バッファリングされた記憶装置及びバッファリングされた状態などのエフェメラル記憶装置及び専用状態のバ―ジョンは、「Ｅｘｔｅｎｄｉｎｇ  ｔｈｅ  ＭＥＳＩ  ｐｒｏｔｏｃｏｌ  ｔｏ  ｓｕｐｐｏｒｔ  ｌｏｃａｌｌｙ  ｂｕｆｆｅｒｅｄ  ｄａｔａ」と題する、代理人整理番号Ｐ２９１３２を有する、本出願とともに出願された関連出願に記載している。
【００４５】
一実施例では、ハンドラは、アクセス競合、モニタ競合の喪失、データ競合の喪失等などの競合の効率的な処理をサポートするためにハードウェアに登録される。例えば、ソフトウェア書き込み可能なレジスタが、トランザクション・ハンドラのアドレスを登録するために、トランザクション・ランタイム又はアプリケーション・コードなどのソフトウェアに対して提供される。上記情報の喪失又は競合などの関心イベントが検出されると、一実施例では、制御フローが、オペレーティング・システム（ＯＳ）などの特権ソフトウェアの介入なしで、ソフトウェア書き込み可能なレジスタに登録されたトランザクション・ハンドラに対して向けられる。
【００４６】
一実施例では、関心のイベント（すなわち、トランザクション・ハンドラの呼出しをもたらすためのハンドラ・イベント）は、トランザクショナル・ランタイム又はアプリケーション・コードなどの非特権ソフトウェアによって規定することができる。別々の実施例における関心のイベントは、同期、非同期、又はそれらの組み合わせであり得る。その結果、ＯＳの介入なしで同期イベント及び非同期イベントのためのソフトウェア・ハンドラに制御を移す機能が提供される。これは、潜在的には、ハンドラの実行を開始するために、特権レベルのソフトウェア・ディスパッチ処理を待つことに関係する遅延をなくす。したがって、予期しない実行及び結果をもたらす前の低レーテンシ反応を必要とするハンドラ・イベントは、効率的にかつすばやく処理される。
【００４７】
最初に図１を参照して上述した通り、プロセッサ１００のアーキテクチャは、説明の目的で、例証しているに過ぎない。同様に、種々の粒度のデータ項目におけるハードウェア・モニタ及び属性を関連付ける方法を利用し得るので、データ項目／エレメントと属性を関連付ける具体例も例示的である。
【００４８】
図２を参照すれば、システムの一実施例は、ハードウェア内にハンドラを登録するためのサポートを提供するためのプロセッサを含む。プロセッサ２０５は、図１を参照して説明した機能的装置又はモジュールの何れかを含んでよく、又は省略してよく、プロセッサの何れかの他の既知の装置又はロジックを含んでよい。更に、記憶エレメントの収集物も表す。しかし、別個の記憶エレメントに関して後述する動作及び方法は、何れの数の記憶エレメントとも組み合わせ得る。
【００４９】
図示したように、プロセッサ２０５はコントローラ・ハブ２３０を介してシステム・メモリ２５０に結合される。システム・メモリ２５０は、ランダム・アクセス・メモリ（ＲＡＭ）などの何れかのメモリ・デバイスを含む。ここで、システム・メモリ２５０は、プロセッサ２０５上で実行する対象の１つ又は複数のトランザクションを含み得るアプリケーション・コード２６０を保持し、後述するように、ハンドラ２５５は、アプリケーション・コード２６０の実行中に生じるトランザクショナル関連ハンドラ・イベントを処理するためにプロセッサ２０５のハードウェアに登録し得る。
【００５０】
一実施例では、コントローラ・ハブ２３０は、多くの場合、２つのハブ（すなわち、システム・メモリ２５０と通信し、グラフィクス・プロセッサなどの入出力（Ｉ／Ｏ）デバイスと潜在的にインタフェースするためのメモリ・コントローラ・ハブ、及び、ネットワーク・インタフェース・コントローラ（ＮＩＣ）、オーディオ・デバイス、又は他の既知のＩ／Ｏデバイスなどの他のＩ／Ｏデバイスと通信するためのＩ／Ｏコントローラ・ハブ）を含むチップセットを含む。
【００５１】
プロセッサ２０５は記憶エレメント２１０を含む。記憶エレメントは、２進値、デ―タ、コード、命令、アドレス、又は他の既知のコンピュータ関連情報などの情報又はエレメントを保持するための何れかのロジック、構成部分又はデバイスを表す。一般的な例として、記憶エレメントはレジスタを含む。プロセッサ内にみられる通常のレジスタは、汎用レジスタ、データ・レジスタ、アドレス・レジスタ、コンディショナル・レジスタ、浮動小数点レジスタ、定数レジスタ、ベクトル・レジスタ、特殊用途レジスタ、プログラム・カウンタ（別名、命令ポインタ）レジスタ、ステータス・レジスタ、命令レジスタ、マシン／モデル特有レジスタ（ＭＳＲ）、制御レジスタ、及び一般的なユーザ・アクセス可能なレジスタを含む。その結果、記憶エレメント２１０乃至２５５はそれぞれ、個々に、別々の実施例において、上述のレジスタのうちの何れか１つであり得る。
【００５２】
一実施例では、ハンドラ２５５などのハンドラは記憶エレメント２１０に登録される。プロセッサ２０５のハードウェアにハンドラ２５５を登録することは、プロセッサ２０５に対する、ハンドラ２５５又はその位置の識別を含む。例として、記憶エレメント２１０にハンドラ２５５を登録することは、記憶エレメント２１０に、ハンドラ２５５への参照を記憶することを含む。すなわち、登録されると、記憶エレメント２１０は、ハンドラ２５５に対する参照を保有する。
【００５３】
コードへの参照を登録する何れかの方法を、ハンドラ２５５への参照を保持するための記憶エレメント２１０を更新するよう利用し得る。一実施例では、非特権ソフトウェア／コードは、記憶エレメント２１０にハンドラ２５５を登録する。非特権ソフトウェアは、特定の高特権レベル（すなわち、特権レベル０）で実行することが可能でないソフトウェアなどの、特権化されていない何れかのコードを含み得る。しかし、一実施例では、非特権化ソフトウェアはユーザレベル・コードを含む。すなわち、トランザクショナル・ランタイム・コード、アプリケーション・コード、又は仮想マシン・コードは、トランザクションの実行前にプロセッサ２０５のハードウェアにハンドラ２５５を登録することができる。したがって、記憶エレメント２１０は、一実施例では、ハンドラ２５５への参照を保持するために更新されるよう、ユーザレベル又は非特権レベルのコードによって修正可能である。
【００５４】
例えば、アプリケーション・コードは、トランザクションを実行する前に、トランザクションの実行中にハンドラ・イベントが生じた場合、ユーザ登録されたハンドラ２５５がイベントを処理するために呼び出されるように記憶エレメント２１０にハンドラ２５５を登録する。よって、この実施例では、ユーザは、トランザクショナル・ハンドラ・イベントの場合に利用する対象のハンドラを定義し、ハンドラに対する最適化された制御フロー移行を提供するためにハードウェアに登録することができる。しかし、ハンドラは、他の実施例では、ＯＳなどの特権レベル・ソフトウェアによって登録し得る。
【００５５】
一実施例では、ハンドラ２５５への参照は、システム・メモリ２５０に保持されたハンドラ２５５の開始アドレス２５６への参照を含む。プロセッサにおいて利用されるアドレス指定手法が数多く存在しているので、メモリ・アドレスへの参照は潜在的には、アドレスへの何れかの既知のコンピュータ参照を含む。一例として、仮想アドレス及びオフセットは、ハンドラ２５５の開始アドレス２５６への参照として利用される。ここでは、プロセッサ２０５の記憶装置に保持された変換テーブル及びページ・テーブルは、仮想アドレスを参照ベース物理アドレスに変換し、それに対するオフセットを加えて物理アドレスを得る（ハンドラ２５５を参照する物理アドレス２５６）。コード・セグメントの値、又はオフセットの省略は、ハンドラの使用を現在のコード・セグメントに制限し得る。これは、潜在的には、実行されているトランザクション内の法的な命令も制限する。参照の別の例は、ハンドラ２５５を直接参照するための、記憶エレメント２１０に保持された直接物理アドレスを含む。
【００５６】
一実施例では、記憶エレメント２２０は、複数のハンドラ・イベントを特定する／示す。上述の通り、ハンドラ・イベントは、非同期ハンドラ・イベント、同期ハンドラ・イベント、又はそれらの組み合わせを含み得る。同期ハンドラ・イベントは、不正の命令／動作の実行や、無効な場所へのアクセスの実行などの命令に接続された／関連付けられたイベントを示す。対照的に、非同期イベントは、多くの場合、プログラム又は命令の制御フローに直接関係しないイベントを表す。ハンドラ・イベントの例は、属性情報の欠如、属性情報の喪失、トランザクションの範囲内で不正な命令の実行、不正の制御移行、非チェックポイント・レジスタへのアクセス、バッファリングされたデータの喪失、トランザクションの範囲内で禁止されたメモリ・タイプへのアクセス、例外、システム・コール、及び監視されたデータの喪失を含む。ここで、同期命令の一般的な例は、保護されたドメインに対して制御を不正に移行する旨の命令などの不正な命令の実行である一方、非同期イベントの通常の例は、属性情報の喪失を含む。しかし、ハンドラ・イベントは、ソフトウェア・ハンドラによって処理する対象の同期又は非同期の何れかの既知のイベントを含み得る。
【００５７】
一実施例では、記憶エレメント２２０は、ビット・ベクトル２２１などのビット・ベクトルを保持する。ビット・ベクトル２２１内の各ビットは、イベント２７０乃至２７４などのハンドラ・イベントに対応する。例えば、イベント２７０乃至２７４は、上述のイベント、及び本明細書に記載していない何れかの他の既知のハンドラ・イベントの何れかの組み合わせを表す。ビットがセットされると、対応するハンドラ・イベントがイネーブルされ、逆に、ビットがアンセットされると、対応するハンドラ・イベントがディセーブルされる。
【００５８】
図示したように、記憶エレメント２２０に保持する対象のベクトル２２１の第１のビットは、アンセットされ（すなわち、論理０にセットされ）、よって、ハンドラ・イベント２７４はディセーブルされる。論理値は例証的であり、反転し得る。すなわち、論理０はイネーブルし、論理１はディセーブルする。基本的に、ベクトル２２１はマスクとして動作する。ここでは、非チェックポイント・レジスタへのアクセスなどのイベント２７４は、検出されても、ディセーブルされていることが理由で、ハンドラ２５５の呼出しをもたらすものでない。このシナリオでは、前述のアクセスは、トランザクションの、変更できないか、又は頑強な特性によって許容可能であり得る。すなわち、トランザクションは、アボートする可能性が高くならないように優先度が与えられる。しかし、他のイネーブルされたイベント２７０乃至２７３の何れかが検出されると、記憶エレメント２１０に保持された参照に基づいてハンドラ２５５が実行される。ビット・ベクトルが例として利用されるが、コ―ド化された値又は命令の使用などによって、特定されたイベントを記憶する方法も利用し得る。
【００５９】
一実施例では、記憶エレメント２２０の一部分又は全部が、非特権ソフトウェアによって修正されていない。ここで、ソフトウェアは、記憶エレメント２１０にハンドラ２５５を登録し、ハンドラ２５５を実行させるようハンドラ・イベントを特定／登録することができる。しかし、一例では、記憶エレメント２２０の一部分が予約される。その結果、ハードウェアは、他のイベントがソフトウェアによってイネーブルすることができる一方で、ソフトウェアがディセーブルすることができない一部の予約されたハンドラ・イベントを定義することができる。
【００６０】
多くの場合、ハンドラは、検出されたハンドラ・イベントの状況に関して特定の通信を受け取る。したがって、一実施例では、記憶エレメント２２５は、ハンドラ２５５によって処理する対象のハンドラ・イベント（すなわち、検出されたハンドラ・イベント）を示すためのステータス値を保持するためのステータス記憶エレメントを含む。上記例から続ければ、スタータス記憶レメント２２５は、ビット・ベクトル２２６などのビット・ベクトルも保持し得る。ここで、ハンドラ・イベントをイネーブル又はディセーブルする代わりに、第１の論理値にセットされたビットは、ハンドラ・イベントが検出された旨を示す一方、第２の論理値にセットされたビットは、ハンドラ・イベントが検出されていない旨を示す。
【００６１】
一ビットのみが論理１にセットされてとして示しているが、複数のイベントが生じており、複数のイベントを処理する旨を示すために複数のビットをセットし得る。一実施例では、記憶エレメント２２５は、ユーザレベル又は非特権ソフトウェアによって読み出し可能である。その結果、アプリケーション・コード２６０又はハンドラ２５５は、プロファイリング目的で、又は実際のイベントの処理目的で、実行中に生じたハンドラ・イベントを判定するために記憶エレメント２２５を読み出すことができる。記憶エレメント２１０との記憶エレメント２２０の相互接続、又はプロセッサ２０５に保持された記憶エレメント２１０への参照により、ハンドラ・イベントの検出に応じて、記憶エレメント２１０に保持された参照（すなわち、アドレス２５６の表現）に基づいて、実行が、現在の点におけるアプリケーション・コード（すなわち、アドレス２５７における命令）の実行からハンドラ２５５（例えば、アドレス２５６）の実行に向けられる。
【００６２】
アプリケーション・コード２６０からハンドラ２５５に、制御フローを移行すること、又は実行を向けることは、プログラムの制御フローを誘導すること、又は実行を向けることの何れかの既知のやり方で行い得る。上述の通り、先行するシステムは多くの場合、ハンドラなどの、別々のプログラムに制御を渡す、ＯＳなどの制御ソフトウェアに依存する。ここで、イベントが発生したかを判定するようＯＳが情報をポーリングしている間に、イベントを検出し、収集し得る。ＯＳは、イベントが生じたことを知ると、ハンドラの実行のための時間をスケジューリングする。しかし、背景技術の部分の例に示すように、同期又は非同期であり得るトランザクショナル・イベントが更に効率的に（すなわち、より少ないスキッドで）処理される訳でない場合、無効な目標アドレスに基づいた分岐などの予期しない実行結果が生じ得る。
【００６３】
スキッドは通常、ハンドラ・シナリオの生起（すなわち、ハンドラ・イベントの検出）と、ハンドラの実際の呼出しとの間のレーテンシとして定義される。例えば、ハンドラ２５５は、バッファリングされた／専用で保持された読み出しデータの喪失が理由で、呼び出されており、スキッド値が３である場合、ハンドラが呼び出されるまで、バッファリングされたデータの喪失から最大、３命令分とり得る。スキッドを指し示すために命令カウントが利用されると、実行サイクルなどの何れかの他の処理メトリックも利用し得る。その結果、ハンドラ２５５への制御フロー移行は、潜在的には、より少ないスキッドを伴って行う。
【００６４】
制御フロー移行の例には、障害に似た態様（すなわち、スキッド・レベル０を示唆する、障害／イベントの退避を識別する命令の前）、トラップに似た態様（すなわち、これは、スキッド・レベル１を示唆する、割り込み可能な次ウィンドウにおいて）、又は、別々のイベントに対するそれらの組み合わせを含む。時には、スキッドはタイプ・イベントに基づく。例えば、予期しない実行結果を潜在的にもたらす一部の動作は、（スキッド・レベル０という）予期しない結果がシステム内で観測されないということを確実にするために退避させないものとする。一例は、先行してチェックポイントされなかった状態を変更する、トランザクションの範囲内の不正な動作を含む。ここでは、状態の変更が生じた場合、先行状態は失われ、トランザクション・アボートに応じて、先行状態を復元することは可能でない。その結果、動作の退避前に、実行がハンドラに向けられ、この場合、先行状態をチェックポイントし、次いで、動作が行われることを可能にし得る。
【００６５】
一実施例では、最適化された制御フロー移行は、特権レベル・ソフトウェアの介入なしで制御をハンドラ２５５に移行するためにプロセッサ２０５のハードウェアを利用して行われる。特権レベルのソフトウェアの例は、ＯＳソフトウェア、カーネル・コード、及び仮想マシン・モニタ（ＶＭＭ）コードを含む。ここでは、プロセッサ２０５は、記憶エレメント２１０に登録された参照に基づいてハンドラ２５５にアプリケーション・コード２６０の実行を向け得る。例証するに、仮想アドレスなどの参照がレジスタ２１０に保持され、物理アドレス２５６に関連付けられたオフセットが、アプリケーション・コード２６０により、レジスタ２１０に記憶される。更に、ユーザレベル・コード２６０などにより、ハンドラ・イベントがレジスタ２２０において特定されており、前述のハンドラ・イベントのうちのイベントが検出されており、これは、ステータス値を保持するためのレジスタ２２５に対する更新によって示される。
【００６６】
その結果、実行ロジックは、現在のプログラム・カウンタに対する参照（すなわち、現在の命令アドレス２５７に対する命令ポインタ）をレジスタ２１５に記憶する。レジスタ２１０に保持された参照と同様に、命令ポインタ・アドレスは、命令ポインタの実現形態に基づいた現在又は次の命令のアドレスなどの、実行が向けられる直前の現在の位置に対するオフセット又は他の参照、及び仮想アドレスを含み得る。基本的には、レジスタ２１５は、レジスタ２１０と同様に、戻りレジスタとして動作する。すなわち、レジスタ２１０内の参照は、ハンドラ２５５への制御フロー移行を最適化するよう利用され、戻りレジスタ２１５に保持された参照は、ハンドラ２５５からアプリケーション・コード２６０への制御フローの戻りを最適化するよう利用される。
【００６７】
この例では、プログラム２６０内の現在の位置がレジスタ２１５に記録された後、アプリケーション・コード２６０を実行する実行リソースは、レジスタ２１０に保持された参照に基づいてアプリケーション・コード２６０に実行を向けるよう利用される。ここでは、アドレス２５６への参照は基本的には、新たな命令ポインタになり、ハンドラ２５５の開始時の（すなわち、第１の命令の）実行が開始される。実行リソースは、図１を参照して上述した実行ロジックの何れか、又は何れかの他の既知の実行関連ロジックを含む。例えば、トランザクションの動作（すなわち、ロード／記憶実行装置上の実行がスケジューリングされたロード動作又は記憶動作）はアプリケーション・コード２６０で実行し得る。次に、ハンドラ・イベントに応じて、ジャンプ実行装置は、特権レベル・ソフトウェアの介入なしで、命令アドレス２５７からアドレス２５６へ実行をジャンプするためのジャンプ・タイプ動作を実行する。ここでは、ジャンプ対応動作は、通常ジャンプ動作、又はファー・ジャンプ動作を含み得る。
【００６８】
アドレス２５６に変換される対象のオフセット及び仮想アドレスなどの、レジスタ２１０において参照されるアドレスは、アプリケーション・コード２６０からハンドラ２５５に実行を向けるためのジャンプ・タイプ動作の目標アドレスとして利用される。このフレームワーク内では、ハンドラ２５５が実行を終えた後、すなわち、ハンドラ・イベントの処理を終了した後、アプリケーション・コード２６０に戻るために、同様なジャンプ・タイプ命令／動作が行われる。しかし、今回は、目標アドレスとしてレジスタ２１０に保持された参照の代わりに、戻りレジスタ２１５に保持された先行命令ポインタ参照が、アプリケーション・コード２６０内の先行位置への戻りジャンプの目標アドレスとして利用される。
【００６９】
ハンドラ２５５への上記参照は、同期イベント又は非同期イベントを処理するための何れかの既知のコードである。実際に、ハンドラ２５５は、検出されたハンドラ・イベントに応じて種々の動作を行い得る。例えば、一ハンドラ２５５は、一部のハンドラ・イベントに遭遇するとコミット機能又はアボート機能を行い、他のハンドラ・イベントに遭遇すると、レジスタ又は位置のチェックポイントなどの他の動作を行うことを試行し得る。その結果、ユーザは、ハンドラ・イベントを特定し、利用する対象のハンドラをハードウェアにおいて定義し得るので、ハンドラ・イベントに遭遇すると、ハードウェアは、特権ソフトウェアの介入の遅延なしで、ユーザレベル・コードによって特定されるハンドラに制御を移行することができる。更に、ハードウェアは、イベント、イベントに関連付けられたアドレス、及び他のイベント関連情報などの、ハンドラ・イベントに関する情報を通信するために提供し得る。図３乃至図４は、ハンドラに制御を向ける実施例を表している。
【００７０】
図３に移れば、特権レベルのソフトウェア介入なしで、トランザクショナル・ハンドラに実行を向ける方法のフロー図の実施例を表す。図３乃至図４におけるフローは、実質的に直列に示す。しかし、図示したフローは、他の実施例では、異なる順序で実行するか、互いに並列に実行するか、又は、全く実行しないことがあり得る。例えば、図４では、ハンドラ・アドレスは、ハンドラ・イベントがフロー４１０で規定される前にフロー４０５において第１のレジスタに記憶される。しかし、図４の目的から逸脱しない限り、イベントは、ハンドラ・アドレスが第１のレジスタに記憶される前に記憶し得る。
【００７１】
フロー３０５では、トランザクショナル・ハンドラがプロセッサのハードウェアに登録される。プロセッサにおいて保持されたテーブル又はスタックにハンドラへの参照を加えるなどの、ハードウェアにハンドラを登録する何れかの方法を利用することができる。一実施例では、トランザクショナル・ハンドラに関連付けられたアドレスへの参照がレジスタに入れられる。アドレスに対する参照は、何れかの既知のアドレス参照を含む。例として、参照は、プロセッサ内のハードウェア構造（すなわち、変換バッファ及び／又はページ・テーブル）によって変換することができるオフセット及び仮想アドレスを含む。上述のように、アプリケーション・コード又はトランザクショナル・ランタイム・コードが、トランザクションの開始時などのコードの本体内又はコードの初期化の際に、登録を行うようにレジスタはユーザ・アクセス可能であり得る。
【００７２】
フロー３１０では、ハンドラ・イベントが検出されたかを判定する。ハンドラ・イベントの例は、属性情報の欠如、属性情報の喪失、トランザクションの範囲内で不正な命令の実行、不正の制御移行、非チェックポイント・レジスタへのアクセス、バッファリングされたデータの喪失、トランザクションの範囲内で禁止されたメモリ・タイプへのアクセス、例外、システム・コール、及び監視されたデータの喪失を含む。この例におけるハンドラ・イベントは、同期イベント及び非同期イベントを含み得る。しかし、以下に更に詳細に説明するように、一実施例では、レーテンシに悩まされたソフトウェア・ポーリングを利用してイベントを処理する代わりに、同期イベント及び非同期イベントは、最適化されたスキッド処理を提供するためにすばやい非同期ハードウェア態様で処理し得る。図２は、ユーザレベル・コード又は特権コード及びユーザレベル・コードの組み合わせがハンドラ・イベントを規定する実施例を示す。しかし、ハンドラ・イベントは、ハードウェア、ファームウェア、又は他のソフトウェアによっても規定し得る。
【００７３】
イベントが検出されなかった場合、フロー３１５で、実行が通常通りに実行する。しかし、イベントがフロー３１０で検出された場合、フロー３２０で、特権レベル・ソフトウェアの介入なしで、実行が、トランザクショナル・ハンドラに向けられる。ＯＳ、カーネル、又は仮想マシン・モニタ・コードが実行されることなく、ハンドラに実行を向ける何れかの方法を利用し得る。図４を参照して説明した例は、プロセッサのレジスタに保持された値に基づいて実行を向ける工程を含む。
【００７４】
図４は、ハードウェアを利用したソフトウェア・ハンドラに制御フローを移す方法のフロー図の実施例を示す。フロー４０５では、トランザクショナル・ハンドラのハンドラ・アドレスは第１のレジスタに記憶され／書き込まれる。ここで、ユーザレベル・ソフトウェアは、仮想アドレス及びオフセットなどの、アドレスへの参照を書き込む。フロー４１０では、ユ―ザレベル・ソフトウェアは、第２のレジスタにおいて複数のハンドラ・イベントを規定する。上記例として、ユーザレベル・ソフトウェアは、ハードウェア定義されたハンドラ・イベントに対応するビット・ベクトルのビットをセットし／リセットする。ハンドラ・イベントは、同期イベント、非同期イベント、又はそれらの組み合わせであり得る。
【００７５】
フロー４１５では、複数のハンドラ・イベントのうちのハンドラ・イベントが検出される。イベント検出は、複数の機能的装置に及ぶいくつかの方法を含み得る。例えば、属性データ又は監視されたデータの喪失を検出するために、キャッシュ制御ロジックは、監視されたラインの退出を検出し、適宜、報告し得る。しかし、不正な命令の場合、不正な動作に関連付けられたオプコードをデコーダが検出することにより、イベントが潜在的に検出され、報告される。別の例として、レジスタの状態を更新するための動作は、プロセッサのパイプラインの段階で検出され、その段階に関連付けられたロジックはハンドラ・イベントを検出する。他のロジック、及びハードウェア・イベント又はハンドラ関連イベントを検出する方法を利用し得る。
【００７６】
イベントが検出されると、フロー４２０で、第３のレジスタは、複数のハンドラ・イベントのうちのハンドラ・イベントが検出されている旨を示すために、状態値に更新される。ここでは、ハードウェアがイベントを検出すると、報告ロジックはイベントをステータス・レジスタに報告する。例として、ハンドラ・イベントに対応するビットは、ハンドラ・イベントの生起を報告するために第３のレジスタに保持されたビット・ベクトルにセットされる。第３のレジスタは、ユーザレベル・ソフトウェアによって読み出し可能であるので、ハンドラは、どのハンドラ・イベントが検出されたかを判定することができる。第３のレジスタ、又は第３のレジスタに関する他のレジスタは、イベントに関連付けられ得た動作、イベントに関連付けられたレジスタ、及びイベントに関連付けられたアドレス／データ項目などの、ハンドラ・イベントに関する更なる情報を提供し得る。
【００７７】
ハンドラに実行を向ける前に、現在のプログラム・カウンタ値又は命令ポインタ値／アドレスが、ハンドラの実行後の現在の実行位置に戻ることを可能にするために、フロー４２５における第４のレジスタに書き込まれる。プロセッサ設計に基づいて、命令ポインタは、現在の命令又は次の命令を参照し得る。したがって、何れの実現形態においても、「現在の命令ポインタ」への参照は、現在の命令又は次命令であり得る現在の命令ポインタ値を含む。例として、適切な命令のアドレスを参照するための仮想アドレス及びオフセットがレジスタに記憶される。
【００７８】
フロー４３０では、実行が、第１のレジスタに保持されたハンドラ・アドレスにジャンプする。上記例から続ければ、ジャンプ・タイプの動作は、第１のレジスタに保持された仮想アドレス及びオフセットにジャンプするよう実行される。基本的には、フロー４２５では、現在の命令ポインタが記録され、フロー４３０では、現在の命令ポインタを、トランザクション・ハンドラの開始命令に対する「命令ポインタ」で置き換える。
【００７９】
フロー４３５では、トランザクショナル・ハンドラは、適宜、イベントを処理するよう実行される。上述の通り、ハンドラは、検出されたイベント、イベント・タイプ、イベントに関連付けられたアドレス若しくは動作、又は他のハンドラ関連情報を判定するための第３のレジスタなどのレジスタにアクセスすることができる。イベントが処理された後、フロー４４０で、実行は、第４のレジスタに保持された命令ポインタ・アドレスにもう一度、ジャンプする。上記とは逆に、ハンドラ内の命令ポインタは、次いで、先行して記録された命令ポインタで置き換える。その結果、ハンドラが呼び出された直前にもう一度、実行が向けられる。一実施例では、アボート又はコミットに応じて、ソフトウェア・ハンドラは、別の位置に実行をもう一度向けさせ得る。
【００８０】
本明細書及び特許請求の範囲記載のモジュールは、何れかのハードウェア、ソフトウェア、ファームウェア、又はそれらの組み合わせを表す。多くの場合、別個のものとして示すモジュール境界は一般に、変動し、潜在的に重なる。例えば、第１のモジュール及び第２のモジュールは、特定の独立したハードウェア、ソフトウェア、又はファームウェアを潜在的に維持しながら、ハードウェア、ソフトウェア、ファームウェア、又はそれらの組み合わせを共有し得る。一実施例では、ロジックという語の使用は、トランジスタ、レジスタ、又はプログラマブル論理デバイスなどの他のハードウェアなどのハードウェアを含む。しかし、別の実施例では、ロジックは、ファームウェアやマイクロコードなどの、ハードウェアと一体化されたソフトウェア又はコードも含む。
【００８１】
本明細書及び特許請求の範囲記載の値は、数、状態、論理状態、又は２進論理状態の何れかの既知の表現を含む。多くの場合、論理レベル、及び論理値の使用は、２進論理状態を単に表す１及び０としても表す。例えば、１は高論理レベルを表し、０は低論理レベルを表す。一実施例では、トランジスタ又はフラッシュ・セルなどの蓄電池は、単一の論理値又は複数の論理値を保持することができる。しかし、コンピュータ・システム内の値の他の表現を使用し得る。例えば、１０進数１０は、２進値「１０１０」及び１６進文字「Ａ」としても表し得る。よって、値は、コンピュータ・システムに保持することができる情報の何れかの表現を含む。
【００８２】
更に、状態は、値、又は値の一部分として表し得る。例として、論理０などの第２の値は非デフォルト状態を表し得る一方、論理１などの第１の値はデフォルト又は初期状態を表し得る。更に、一実施例では、リセット及びセットの語は、デフォルト、及び更新された値又は状態を表す。例えば、デフォルト値は潜在的には、高論理値（すなわち、リセット）を含む一方、更新された値は潜在的には、低論理値（すなわち、セット）を含む。値の何れかの組み合わせを、何れかの数の状態を表すために利用し得る。
【００８３】
上述の方法、ハードウェア、ソフトウェア、ファームウェア、又はコードの実施例は、処理エレメントによって実行可能なマシン・アクセス可能な媒体又はマシン読み取り可能な媒体上に記憶された命令又はコードによって実現し得る。マシン・アクセス可能／マシン読み取り可能な媒体は、コンピュータ又は電子システムなどのマシンによって読み取り可能な形式で情報を提供する（すなわち、記憶し、かつ／又は伝送する）何れかの機構を含む。例えば、マシン・アクセス可能な媒体は、スタティックＲＡＭ（ＳＲＡＭ）又はダイナミックＲＡＭ（ＤＲＡＭ）などのランダム・アクセス可能なメモリ（ＲＡＭ）、ＲＯＭ、磁気記憶媒体又は光記憶媒体、フラッシュ・メモリ・デバイス、電気記憶デバイス、光記憶デバイス、音響記憶デバイス、又は他の形式の伝搬信号（例えば、キャリア信号、赤外線信号、ディジタル信号）記憶デバイス等を含む。例えば、マシンは、伝搬信号上で伝送される対象の情報を保持することができる媒体から、キャリア波などの伝搬信号を受け取ることにより、記憶装置にアクセスし得る。
【００８４】
本明細書を通して、「一実施例」又は「実施例」に言及されていることは、実施例に関して説明した特定の構成、構造、又は特性が、本発明の少なくとも１つの実施例に含まれているということを意味する。よって、本明細書の随所に「一実施例」又は「実施例」の句が存在していることは、必ずしも、全て、同じ実施例を参照している訳でない。更に、特定の構成、構造、又は特性は、１つ又は複数の実施例において何れかの適切なやり方で組み合わせ得る。
【００８５】
上記明細書では、特定の例示的な実施例を参照して、詳細な説明を記載している。しかし、特許請求の範囲記載の本発明のより広い趣旨及び範囲から逸脱しない限り、種々の修正及び変更を行うことができるということは明らかとなるであろう。よって、本願の明細書及び図面は、限定的な意味合いでなく例証的な意味合いで解されるものとする。更に、実施例及び他の例示的な文言を上述していることは、同じ実施例又は同じ例を必ずしも表している訳でない一方、別々でかつ別個の実施例を表し得、更に、潜在的には、同じ実施例を表し得る。
【符号の説明】
【００８６】
１００  プロセッサ
【図１】
2014089752.tif 000003
【図２】
2014089752.tif 000004
【図３】
2014089752.tif 000005
【図４】
2014089752.tif 000006