(57)【要約】  データ処理装置は、トランザクショナル・メモリを用いたトランザクションの実行をサポートするためのトランザクショナル・メモリ・サポート回路を備える処理回路を有する。例外マスク情報を更新して、トランザクションの処理の開始時に無効化された例外の少なくとも１つのサブセットを有効化する、例外マスク更新命令に応答して、処理回路４が、例外マスク更新命令に続くトランザクションの１つ又は複数の後続の命令のアボートされていない処理を許可する。
2020535512.tif 000002
【特許請求の範囲】
【請求項１】
命令に応答してデータ処理を実施する処理回路であって、前記処理回路が、前記処理回路によるデータ処理のスレッド内でのトランザクションの実行をサポートするための、トランザクショナル・メモリ・サポート回路を含み、前記トランザクションが、トランザクション開始命令とトランザクション終了命令との間で投機的に実行される前記スレッドの命令を含み、それについて、前記処理回路が、前記トランザクション終了命令に到達するまで、前記投機的に実行される命令の結果のコミットを回避し、且つ、前記トランザクション終了命令に到達する前にアボート・イベントが発生すると、前記トランザクションの処理をアボートするよう構成される、処理回路と、
例外の１つ又は複数のサブセットが有効であるか、又は無効であるかを指定する例外マスク情報に応じて、例外をマスクするかどうかを判定するための例外処理回路とを含み、
前記例外マスク情報を更新して、前記トランザクションの処理の開始時に無効化された例外の少なくとも１つのサブセットを有効化するための、トランザクション内で実行される例外マスク更新命令に応答して、前記処理回路が、前記例外マスク更新命令に続く前記トランザクションの１つ又は複数の後続の命令のアボートされてない処理を許可するよう構成される、装置。
【請求項２】
前記トランザクショナル・メモリ・サポート回路が、前記トランザクション開始命令に応答して取得された、トランザクション回復状態データを格納するための回復状態ストレージ回路を含む、請求項１に記載の装置。
【請求項３】
前記処理回路が、前記アボート・イベントに応答して、前記トランザクション回復状態データを復元するよう構成される、請求項２に記載の装置。
【請求項４】
前記トランザクション回復状態データが、前記例外マスク情報を含む、請求項２又は３に記載の装置。
【請求項５】
前記処理回路が、トランザクションの処理中の有効な例外の発生に応答して、前記アボート・イベントをトリガするよう構成される、請求項１から４までのいずれかに記載の装置。
【請求項６】
前記トランザクション回復状態データが前記例外マスク情報を含み、
トランザクションの処理中の有効な例外の発生に応答して、前記処理回路が、前記アボート・イベントをトリガし、前記トランザクション回復状態データが復元されるまで、例外の提供を保留するよう構成される、請求項３に記載の装置。
【請求項７】
トランザクションの処理中の有効な例外の発生に応答して、前記有効な例外が前記トランザクションの処理の開始時に無効化されていた場合に、前記処理回路がアボート状態情報を所定の値に設定するよう構成される、請求項５又は６に記載の装置。
【請求項８】
トランザクションのアボート・イベントが発生したことに応答して、前記アボート・イベントが、有効な例外の発生以外のイベントによってトリガされるか、又は、トランザクションの処理の開始時に有効化されていた有効な例外の発生によってトリガされる場合に、前記処理回路が、前記アボート状態情報を前記所定の値以外の値に設定するよう構成される、請求項７に記載の装置。
【請求項９】
前記例外マスク情報が、例外の複数の種別に対して別々に、例外の各種別が有効であるか、又は無効であるかを指定する、請求項１から８までのいずれかに記載の装置。
【請求項１０】
前記例外マスク情報が、例外優先閾値を指定し、前記例外処理回路が、例外の優先度と前記例外優先閾値との比較に応じて、前記例外をマスクするかどうかを判定するよう構成される、請求項１から９までのいずれかに記載の装置。
【請求項１１】
前記トランザクショナル・メモリ・サポート回路が、
前記投機的に実行された命令の前記結果を格納するための投機的実行結果ストレージ回路、及び、
トランザクション内の命令によってアクセスされるアドレスをトラッキングするためのアドレス・トラッキング回路のうちの、
少なくとも１つを含む、請求項１から１０までのいずれかに記載の装置。
【請求項１２】
前記トランザクショナル・メモリ・サポート回路が、第１のスレッドのトランザクション内で実行される所与のアドレスへのデータ・アクセスと、別のスレッドによって実行される同一アドレスへのデータ・アクセスとの競合を検出するための競合検出回路を含む、請求項１から１１までのいずれかに記載の装置。
【請求項１３】
前記競合検出回路が、前記競合の検出に応答して、前記アボート・イベントをトリガするよう構成される、請求項１２に記載の装置。
【請求項１４】
命令に応答して、処理回路を用いてデータ処理を実施するステップであって、前記処理回路が、前記処理回路によるデータ処理のスレッド内でのトランザクションの実行をサポートするためのトランザクショナル・メモリ・サポート回路を含み、前記トランザクションが、トランザクション開始命令とトランザクション終了命令との間で投機的に実行される前記スレッドの命令を含み、それについて、前記処理回路が、前記トランザクション終了命令に到達するまで、前記投機的に実行される命令の結果のコミットを回避し、且つ、前記トランザクション終了命令に到達する前にアボート・イベントが発生すると、前記トランザクションの処理をアボートするよう構成される、ステップと、
例外に応答して、例外の１つ又は複数のサブセットが有効であるか、又は無効であるかを指定する例外マスク情報に応じて、前記例外をマスクするかどうかを判定するステップと、
前記例外マスク情報を更新して、前記トランザクションの処理の開始時に無効化された例外の少なくとも１つのサブセットを有効化するための、トランザクション内で実行される例外マスク更新命令に応答して、前記例外マスク情報を更新し、前記例外マスク更新命令に続く前記トランザクションの１つ又は複数の後続の命令のアボートされていない処理を許可する、ステップとを含む、データ処理方法。
【請求項１５】
ホスト・データ処理装置を制御して、命令を実行するための命令実行環境を提供するためのコンピュータ・プログラムであって、
データ処理のスレッド内でのトランザクションの実行をサポートする処理プログラム・ロジックであって、前記トランザクションが、トンランザクション開始命令とトランザクション終了命令との間で投機的に実行されるスレッドの命令を含み、それについて、前記処理プログラム・ロジックが、前記トランザクション終了命令に到達するまで、前記投機的に実行される命令の結果のコミットを回避し、且つ、前記トランザクション終了命令に到達する前にアボート・イベントが発生すると、前記トランザクションの処理をアボートするよう構成される、処理プログラム・ロジックと、
例外の１つ又は複数のサブセットが有効であるか、又は無効化であるかを指定する例外マスク情報に応じて、例外をマスクするかどうかを判定するための例外処理プログラム・ロジックとを含み、
前記例外マスク情報を更新して、前記トランザクションの処理の開始時に無効化された例外の少なくとも１つのサブセットを有効化するための、トランザクション内で実行される例外マスク更新命令に応答して、前記処理プログラム・ロジックが、前記例外マスク情報を更新し、前記例外マスク更新命令に続く前記トランザクションの１つ又は複数の後続の命令のアボートされていない処理を許可するよう構成される、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、データ処理の分野に関する。より詳細には、本技術は、トランザクショナル・メモリに関する。
【背景技術】
【０００２】
データ処理システムは、データ処理の多数のスレッドを実行することができる。時には、スレッドは共有リソースにアクセスする必要があり、データ処理動作の特性上、一度スレッドが共有リソースとのやり取りを開始すると、動作のセットは、当該リソースを用いて、動作中に別のスレッドが当該リソースにアクセスすることなく、アトミックに完了しなければならないことがある。
【０００３】
このスレッド間の競合を処理するための１つの技術が、ロックを使用して、少なくとも１つのターゲット・リソースへの排他的アクセスを制御することであろう。例えば、１つのスレッドが、特定のアドレス領域内のデータへのアクセスを開始すると、当該スレッドは、ロック変数を設定してロックの所有権を主張し、その後、ロックを所有するスレッドがロックの所有権を有する間、ロック変数をチェックしている他のスレッドは、ロックが既に主張されていて、そのため当該アドレス領域とやり取りをするコードのセクションに入ることができないと判定することができる。このようなロック・ベースのアプローチは、競合が起こらないことを保証するロックの所有権を持たない限り、別スレッドとの競合が発生し得るため、各スレッドはデフォルトで、共有リソースにアクセスするコードのセクションに入ることができないと見なす、という点で悲観的と捉えることができる。しかし、ロック識別子はしばしば、多くのリソース（例えば、アドレスの範囲）への排他的アクセスを制御することができるため、１つのスレッドがロック変数によって保護されたリソース・セット内の特定のリソースにアクセスする場合に、別スレッドが同じリソースにアクセスすることが確約されているわけではない。従って、ロック・ベースのアプローチは、スレッド間の競合が稀な場合においては、スレッドが、共有リソースを使用するコードのクリティカル・セクションに入るまでに、ロックがリリースされるのを不必要に待つ可能性があるため、性能劣化を招くことがある。
【０００４】
共有リソースにアクセスするスレッド間の競合を処理するための、より楽観的なアプローチに、トランザクショナル・メモリ・サポートの使用がある。データ処理システムは、処理回路によるデータ処理のスレッド内でのトランザクションの実行をサポートするための回路を有することができる。トランザクションは、トランザクションの開始を標示するトランザクション開始命令と、トランザクションの終了を標示するトランザクション終了命令との間で実行される、スレッドの命令であってよい。トランザクション開始命令と終了命令との間では、処理回路が、それらの間にある命令を投機的に実行し、トランザクション終了命令に到達するまで、これらの投機的に実行される命令の結果のコミットを回避する。トランザクション開始命令の実行の後に（ただしトランザクション終了命令に到達する前に）アボート・イベントが発生すると、トランザクションがアボートされ、投機的実行結果は破棄され得る。トランザクションをアボートする原因は数多くあるが、１つの原因は、別のスレッドによるメモリ・アクセスとの競合の検出であろう。そのため、本アプローチでは、他のスレッドとの競合は発生しないものと見なして、コードのクリティカル・セクションの処理を楽観的に開始し、競合を検出することなくクリティカル・セクションの終了に到達すれば、トランザクションの結果はコミットされることができる。競合の発生が稀な場合においては、トランザクショナル・メモリ・サポートを使用することにより、より多くのスレッドがそれらのコードのクリティカル・セクションを同時に処理することが可能となり、性能を向上することができる。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】「Ｓｏｍｅ  Ｅｆｆｉｃｉｅｎｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｉｍｕｌａｔｉｏｎ  Ｔｅｃｈｎｉｑｕｅｓ」、Ｒｏｂｅｒｔ  Ｂｅｄｉｃｈｅｋ、Ｗｉｎｔｅｒ  １９９０  ＵＳＥＮＩＸ  Ｃｏｎｆｅｒｅｎｃｅ、５３〜６３頁
【発明の概要】
【課題を解決するための手段】
【０００６】
少なくともいくつかの実例は、命令に応答してデータ処理を実施するための処理回路であって、前記処理回路が、前記処理回路によるデータ処理のスレッド内でのトランザクションの実行をサポートするためのトランザクショナル・メモリ・サポート回路を含み、前記トランザクションが、トランザクション開始命令とトランザクション終了命令との間で投機的に実行される前記スレッドの命令を含み、それについて、前記処理回路が、前記トランザクション終了命令に到達するまで前記投機的に実行される命令の結果のコミットを回避し、前記トランザクション終了命令に到達する前にアボート・イベントが発生すると、前記トランザクションの処理をアボートするよう構成される、前記処理回路と、例外の１つ又は複数のサブセットが有効化であるか、又は無効化であるかを指定する例外マスク情報に応じて、例外をマスクするかどうかを判定するための例外処理回路とを含み、前記例外マスク情報を更新して、前記トランザクションの処理の開始時に無効化された、例外の少なくとも１つのサブセットを有効化するための、トランザクション内で実行される例外マスク更新命令に応答して、前記処理回路が、前記例外マスク情報を更新し、前記例外マスク更新命令に続く前記トランザクションの１つ又は複数の後続の命令のアボートされていない処理を許可するよう構成される、装置を提供する。
【０００７】
少なくともいくつかの実例は、命令に応答して、処理回路を用いてデータ処理を実施するステップであって、前記処理回路が、前記処理回路によるデータ処理のスレッド内でのトランザクションの実行をサポートするためのトランザクショナル・メモリ・サポート回路を含み、前記トランザクションが、トランザクション開始命令とトランザクション終了命令との間で投機的に実行される前記スレッドの命令を含み、それについて、前記処理回路が、前記トランザクション終了命令に到達するまで前記投機的に実行される命令の結果のコミットを回避し、前記トランザクション終了命令に到達する前にアボート・イベントが発生すると、前記トランザクションの処理をアボートするよう構成される、ステップと、例外に応答して、例外の１つ又は複数のサブセットが有効であるか、又は無効であるかを指定する例外マスク情報に応じて、前記例外をマスクするかどうかを判定するステップと、前記例外マスク情報を更新して、前記トランザクションの処理の開始時に無効化された、例外の少なくとも１つのサブセットを有効化するための、トランザクション内で実行される例外マスク更新命令に応答して、前記例外マスク情報を更新し、前記例外マスク更新命令に続く前記トランザクションの１つ又は複数の後続の命令のアボートされていない処理を許可するステップとを含む、データ処理方法を提供する。
【０００８】
少なくともいくつかの実例は、データ処理のスレッド内でのトランザクションの実行をサポートする処理プログラム・ロジックであって、前記トランザクションが、トンランザクション開始命令とトランザクション終了命令との間で投機的に実行されるスレッドの命令を含み、それについて、前記処理プログラム・ロジックが、前記トランザクション終了命令に到達するまで前記投機的に実行される命令の結果のコミットを回避し、前記トランザクション終了命令に到達する前にアボート・イベントが発生すると、前記トランザクションの処理をアボートするよう構成される、処理プログラム・ロジックと、例外の１つ又は複数のサブセットが有効であるか、又は無効であるかを指定する例外マスク情報に応じて、例外をマスクするかどうかを判定するための例外処理プログラム・ロジックとを含み、前記例外マスク情報を更新して、前記トランザクションの処理の開始時に無効化された例外の少なくとも１つのサブセットを有効化するための、トランザクション内で実行される例外マスク更新命令に応答して、前記処理プログラム・ロジックが、前記例外マスク情報を更新し、前記例外マスク更新命令に続く前記トランザクションの１つ又は複数の後続の命令のアボートされていない処理を許可するよう構成される、ホスト・データ処理装置を制御して命令を実行するための命令実行環境を提供するためのコンピュータ・プログラムを提供する。
【０００９】
上述したコンピュータ・プログラムを格納する記憶媒体が提供されてよい。記憶媒体は、非一時的なコンピュータ・プログラム記憶媒体であってよい。
【００１０】
本技術のさらなる態様、特徴、及び利点は、後述する実例の説明を添付図面と併せて読解することで明らかになるであろう。
【図面の簡単な説明】
【００１１】
【図１】トランザクショナル・メモリ・サポート回路を含む装置の実例を模式的に示す図である。
【図２】トランザクションの処理の実例を示す図である。
【図３】例外マスク情報の２つの実例を示す図である。
【図４】トランザクション内で例外マスク更新命令が実行される際の、トランザクションのアボートの比較例を示す図である。
【図５】トランザクションの途中で、例外マスク更新が、予め無効化された例外の処理を有効化することができる場合に起こり得る問題を示す図である。
【図６】マスク更新によって有効化された例外がトランザクションのアボートをトリガする場合に、トランザクション内での例外マスク更新を可能とし、状態情報をレポートすることによって、この問題に対処する技術を示す図である。
【図７】トランザクションの処理の方法を示すフロー図である。
【図８】使用され得るシミュレータの実例を示す図である。
【発明を実施するための形態】
【００１２】
データ処理装置は、処理回路によるデータ処理のスレッド内でのトランザクションの実行をサポートするためのトランザクショナル・メモリ・サポート回路を有する処理回路を有することができる。トランザクションは、トランザクション開始命令とトランザクション終了命令との間で投機的に実行されるスレッドの命令を含み、それについて、処理回路は、トランザクション終了命令に到達するまでトランザクションの投機的に実行される命令の結果のコミットを回避し、トランザクション終了命令に到達する前にアボート・イベントが発生すると、トランザクションの処理をアボートすることができる。
【００１３】
装置は、命令の処理中に起こり得る例外条件の処理を制御するための例外処理回路を有することができる。例外条件は、他の処理が実施され得るよう、処理回路によって実施される処理を停止するよう要求する、何らかのイベントであってよい。例えば、例外は、無効な、マッピングされていない、若しくはアクセス不可能なメモリ・アドレスにソフトウェアがアクセスを試みることによって起こるメモリ障害、未定義の命令の実行、又は、実施されているセキュリティ保護を侵害するソフトウェアによって実行される動作などの、ソフトウェアによってトリガされる例外を含んでよい。例外はまた、ユーザがデバイス上のボタンを押下する、外部装置が装置にリクエストを送信する、周辺装置が信号を送信する、又は、処理回路自体によって実行される命令に直接依らないその他のイベントなどの、外部イベントによってトリガされるハードウェアの割り込みを含み得る。例外処理回路は、例外の１つ又は複数のサブセットが有効であるか、又は無効であるかを指定することができる例外マスク情報に基づいて、特定の例外をマスクにより除外する機能性を有することができる。
【００１４】
典型的に、例外マスク情報を更新する命令は、トランザクション内で禁止されており、トランザクションの処理中に、例外マスク情報を更新する命令に遭遇する（ｅｎｃｏｕｎｔｅｒ）と、トランザクションがアボートされるよう、アボート・イベントを引き起こす。これは、典型的に、トランザクション開始時における例外マスク状態と、トランザクション内のその後の例外マスク状態との不一致によって起こるライブロック状態を回避するために実施される。
【００１５】
しかし、本発明者らにより、トランザクション中の例外マスク更新命令を抑止する必要がないことが判明した。例外マスク情報を更新して、トランザクションの処理の開始時に無効化された、例外の少なくとも１つのサブセットを有効化するための、トランザクション内で実行される例外マスク更新命令に応答して、処理回路は、例外マスク情報を更新し、例外マスク更新命令に続くトランザクションの１つ又は複数の後続の命令のアボートされていない処理を許可することができる。故に、例外マスク更新命令に遭遇した際に、アボートをトリガしたり、例外マスク情報の更新を抑止したりする必要はない。このことにより、従来は不可能であった、トランザクショナル・メモリのメカニズムを、例外マスク更新命令を含む処理のスレッドに対して使用する機会が増大する。このことが有用である理由は、１つの業者によって書かれたソフトウェアの一部が、しばしば、別の業者によって書かれたソフトウェアの一部、又は、前記１つ目のソフトウェア内で実行される、その他の業者によって書かれた特定の関数を参照するため、プログラマ又はコンパイラが、実行される全てのコードが例外マスク更新命令を含むかどうかを知ることは困難であり、故に、例外マスク更新命令があることで起こるアボートによって失敗し得るトランザクションを繰り返し実行しようとし、又、ロック・ベースのメカニズムを用いるような非トランザクショナルのアプローチを用いる場合は、十分な数のアボートが検出されるまでに時間がかかることがあるため、このようなコードは、前述した技術を用いなければ、低性能となり得ることである。これに対し、例外マスク更新を超えてトランザクションの処理を継続する機能性を用いれば、このようなコードの性能を向上することができる。
【００１６】
トランザクショナル・メモリ・サポート回路は、トランザクション開始命令に応答して取得されるトランザクション回復状態データを格納するための回復状態ストレージ回路を有することができる。処理回路は、アボート・イベントに応答して、トランザクション回復状態データを復元することができる。トランザクション回復状態データは、例外マスク情報を含むことができる。そのため、トランザクションの本体内に、トランザクションの処理の開始時に無効化された例外の少なくとも１つのサブセットを有効化する例外マスク更新命令がある場合、トランザクションがアボートされれば、例外マスク情報は前の値に復元されることができ、故に、例外の少なくとも１つのサブセットは再び無効化される。
【００１７】
このことにより、トランザクションの処理中の有効な例外の発生に応答して、処理回路がアボート・イベントをトリガするよう構成されるため、問題が生じ得る。例外が発生すると、例外を適用（ｔａｋｅ）した後に実施される後続の処理は、トランザクション内で実施される動作の一部でなく、当該トランザクションの投機的実行結果のセットの中に記録されてはならない結果を生成することになる。同様に、例外によってアクセスされるアドレスと、他のスレッドによってアクセスされるアドレスとの競合は、トランザクション自体と同じ方法でフラグ化されなくてもよい。例外処理をトランザクション処理と区別するための十分なハードウェアのリソースを用意し、トランザクションを後に再開することは、非常に複雑であり、追加費用を正当化することは難しく、それ故、トランザクションの処理中に有効な例外が発生した場合にはトランザクションを単にアボートする方が簡単であろう。
【００１８】
しかし、例外によってトランザクションをアボートすると、例外の提供は、トランザクションの回復状態データが復元されるまで保留される。これは、例外が、トランザクションがアボートされるならば、トランザクションは二度と発生しないものとするように、アーキテクチャの状態を参照するべきだからである。従って、予め無効化された例外のサブセットがトランザクション中に有効化されることができるよう、トランザクションをアボートすることなく、トランザクション中に例外マスク更新命令を実行できれば、これらの新たに有効化された例外の１つが発生し、これによりトランザクションがアボートされ、前に取得された回復状態の復元によって、例外を適用する前に例外のサブセットが無効化される。そして、例外は保留状態を維持し、ソフトウェアはトランザクションの再開を試みることができる。次にトランザクションの実行を試みる際、例外マスク更新命令に再び遭遇すると、サブセットの例外を再び有効化し、保留中の例外が再びアボートをトリガし、これが、いつまでも例外を解決することなく、又、いつまでもトランザクションを完了することなく、同じトランザクションの実行を何度も試みる長いループとなり、ライブロック状態を引き起こすことがある。実際には、ソフトウェアは通常、トランザクションの再開を試みることを中止し、アボートの数が閾値を超えると、非トランザクショナルな方法を用いて同等の動作を実行するためのメカニズムを有するため、無期限にプロセッサをハングアップさせるわけではない。しかしながら、これを判定するにはある程度の時間がかかり、その間に何度もトランザクションの処理を試みることで、多くの無駄な処理が発生し、非トランザクショナルな方法を用いて動作が最終的に実行されるまでに長い遅延が発生し得る。これが、トランザクショナル・メモリの典型的なアプローチが、トランザクション内の例外マスク更新命令を無効化してきた、又は、トランザクション中にアボートをトリガする、１つの理由である。
【００１９】
これに対して、上述したアプローチを用いると、例外マスク更新を実行することができ、トランザクションの処理は、トランザクションをアボートすることなく、例外マスク更新命令を超えて継続することを許可される。依然として例外マスク更新命令の後にトランザクションをアボートすることはできるが（例えば、例外又は競合が発生する場合）、これは少なくともトランザクションの処理を継続し、（アボートが発生しない場合）トランザクションの終了に到達し、例外マスク情報がトランザクションの途中で変更された状態を有するかに関わらず、結果をコミットする機会を供与する。
【００２０】
トランザクションの処理中の有効な例外の発生に応答して、有効な例外がトランザクションの処理の開始時に無効化された場合、処理回路は、アボート状態情報を所定の値に設定することができる。これに対して、トランザクションに対して発生するアボート・イベントに応答して、アボート・イベントが、有効な例外の発生以外のイベントによってトリガされる場合、又は、トランザクションの処理の開始時にも有効化された有効な例外の発生によってトリガされる場合、処理回路は、アボート状態値を所定の値以外の値に設定することができる。従って、トランザクションがアボートされた時のアボート状態情報を確認することによって、ソフトウェアは、トランザクションの途中で有効化された例外の結果としてトランザクションがアボートされたケースと、他の潜在的理由によるアボートとを区別することができる。ソフトウェアは続いて、例えば、アボート状態情報が所定の値を有する場合に、コードはトランザクショナル・モードでの実行を再試行するべきでないことを判定することができる。例えば、ソフトウェアは、代わりに非トランザクショナル・モードでの同等の関数を実行する（例えば、コード内で同等の非トランザクショナル・モードの動作を提供するパスへ分岐する）ことができ、例えば、ロック・ベースのメカニズムを使用して、複数スレッドによる共有リソースへの同時アクセスを回避することができる。従って、アボート状態情報を提供することによって、ライブロック状態のリスクを軽減し、重大な性能ボトルネックのリスクを伴わずに例外マスク状態情報をトランザクションの途中で変更することを可能にし、それ故に、例外が有効であるか、無効であるかの状態を変更する必要があるコードに対して、トランザクショナル・メモリ・ベースのメカニズムを使用する機会が増大する。
【００２１】
アボート状態情報は、様々な方法で表現され得る。いくつかの実例では、アボート状態情報は、状態レジスタ内のフラグであってよく、これは、有効な例外がトランザクションのアボートをトリガし、そのトランザクションが開始したときにその有効な例外が無効化されていた際に第１の値に設定され、その他の種別のアボートについては第２の値に設定されることができる。あるいは、アボート状態情報は、トランザクションのアボートに対する様々な要因を表す、様々な符号化を用いた複数のビットを有する、一般的なアボート要因コードであってよい。アボート状態コードの可能な値の１つは、アボートが、トランザクションをアボートする時点で有効であったが、トランザクション開始時には無効化されていた例外によるものであることを示すよう割り当てられた、特別な値であってよい。このケースでは、トランザクションが、トランザクションの途中で有効化された例外によってアボートされる場合、例外がトランザクションの処理の開始時に既に有効化されていたケースと比較して、アボート状態コードの異なる状態によって反映されることになる。
【００２２】
例外マスク情報は、様々な方法で表現される。いくつかのケースでは、例外マスク情報は、２つ以上の異なる種別の例外について、例外の各種別が有効であるか、又は無効であるかを別々に指定することができる。例えば、例外マスク情報内の１つのフラグが、デバッグ関連の例外が有効であるか、又は無効であるかを示し、別のフラグが、メモリ障害の例外が有効であるか、又は無効であるかを示すことなどが可能である。この種の例外マスク情報を用いる場合、例外マスク更新命令は、特定の種別の例外について（又は、２つ以上の種別の例外について）、有効／無効フラグを変更して、フラグを無効状態から有効状態へ変更する命令であってよい。
【００２３】
あるいは、例外マスク情報は、例外優先閾値を指定してもよい。例外処理回路は、例外の優先度と例外優先閾値との比較に応じて、例外をマスクするかどうかを判定することができる。そのため、現在無効な例外のサブセットは、例外優先閾値より低い優先度を有する例外である可能性がある（随意に、例外優先閾値と等しい優先度を有する例外も無効化され得る）。例外優先度が、数値によって様々に表現され得ることは理解されるであろう。例えば、最小の数値（例えば、ゼロ）が最も重要な種類の例外を示すことができ、例えば、優先度０の例外が、優先度３よりも高い優先度を有すると見なすことができる。あるいは、他のアプローチでは、優先順位の最大の数値を用いて最も重要な優先度を表してもよい（例えば、優先度１５が優先度１２よりも高い優先度の例外を表す）。従って、本願において優先度という用語は、当該重要度を表すために使用される実際の数値に関係なく、例外の相対的な重要度を意味する。例外マスク情報が例外優先閾値を指定する実例において、上述した例外マスク更新命令は、より大きな例外のサブセットが有効化されるように、より低い（より重要でない）優先度を示すよう、閾値の例外優先度を更新する命令であってよい。
【００２４】
上述の実例は、予め無効化された例外を有効化する例外マスク更新命令について論じているが、予め有効化された例外を無効化するよう例外マスク情報を更新する、他の種別の例外マスク更新命令もまた、トランザクションをアボートすることなく、トランザクション内で実行され得る。
【００２５】
トランザクショナル・メモリ・サポート回路は、トランザクショナル・メモリのメカニズムを用いたトランザクションの実行をサポートするための多くのリソースを含むことができる。例えば、トランザクショナル・メモリ・サポート回路は、トランザクション開始命令に応答して取得された、トランザクションのアボートに際して復元されるべきトランザクション回復状態を格納するための回復状態ストレージ回路を含むことができる。いくつかのケースでは、外側のトランザクションのトランザクション開始命令は、トランザクション回復状態の取得をトリガすることができ、内側のトランザクションについてのトランザクション回復状態の取得は抑制され得る（トランザクション開始命令に遭遇した時点におけるトランザクションのネスト深さがゼロより大きい場合）。
【００２６】
トランザクショナル・メモリ・サポート回路はまた、少なくとも１つのスレッドの少なくとも１のトランザクションについて、少なくともいくつかの投機的に実行された命令の結果を格納するための投機的実行結果ストレージ回路を含むことができる。レジスタ上で動作する一般的な演算命令は、回復状態により、状態が実行のより早い時点に巻き戻された際に、それらの結果を後に破棄させることができるため、単純にこれらのレジスタに書き込みを行うが、いくつかのケースでは、特定の種別の命令のみが、投機的実行結果ストレージ回路に格納される結果を有することができ、例えば、メモリに書き込みを行うためのストア命令は、トランザクションをコミットすることができるまで、投機的実行結果ストレージ回路に投機的に保持される格納データを有することができる。
【００２７】
トランザクショナル・メモリ・サポート回路はまた、第１のスレッドのトランザクション内で実施される所与のアドレスへのデータ・アクセスと、別のスレッドによって実施される同一アドレスへのデータ・アクセスとの競合を検出するための競合検知回路を含むことができる。アボート・イベントは、競合の検出に応答して、競合検出回路によってトリガされ得る。アボート・イベントのその他の要因には、トランザクションの処理中に発生する中断若しくは例外、トランザクションのさらなる投機的実行結果を収容するめの、トランザクショナル・メモリ・サポート回路内のストレージ容量の不足、又は、トランザクション内でアクセスを許可されていない特定の命令との遭遇が含まれ得る。トランザクショナル・メモリ・サポート回路はまた、トランザクション内の命令によってアクセスされるアドレスをトラッキングするためのアドレス・トラッキング回路を含むことができ、競合検出回路はトラッキングされたアドレスを使用して他のスレッドとの競合を識別することができる。
【００２８】
対応するコンピュータ・プログラムが、命令を実行するための命令実行環境を提供するよう、ホスト・データ処理装置を制御することができ、処理プログラム・ロジックが、上述したような例外マスク更新命令に続く命令のアボートされていない処理を有効化する。このようなコンピュータ・プログラムにより、それ自体がトランザクショナル・メモリ・サポート回路を持たない一般的なホスト・データ処理装置が、そのような特性を提供する実際のハードウェアが無いにも関わらず、トランザクショナル・メモリの機能性及び、ネスト深さの改善されたテスティングの恩恵を受けることが可能となり得る。むしろ、コンピュータ・プログラムは、この機能性をエミュレートし、一般的なホスト・データ処理装置が、そのようなハードウェア特性を提供する装置上での実行を意図したコードを実行できるようにする、命令のセット又はデータ構造などのプログラム・ロジックを提供する。
【００２９】
図１は、ハードウェア・トランザクショナル・メモリ（ＨＴＭ）をサポートするデータ処理装置２の実例を示す。本装置は、データ処理動作を実施するための命令を実行するための処理ロジック４を有する。例えば、処理ロジック４は、加算、乗算、ＡＮＤ、ＯＲなどの算術若しくは論理演算を実施するための算術論理演算ユニット（ＡＬＵ：Ａｒｉｔｈｍｅｔｉｃ／Ｌｏｇｉｃ  Ｕｎｉｔ）、浮動小数点オペランドに対する動作を実施するための浮動小数点ユニット、又は、複数のデータ要素を含むベクトル・オペランドに対するベクトル処理を実施するためのベクトル処理ユニットなどの、様々な種別の処理動作を実行するための実行ユニットを含むことができる。アーキテクチャ・レジスタ６のセットは、処理ロジック４によって実行される命令のオペランドを格納し、実行された命令の結果を格納するために提供される。命令デコーダ８は、命令キャッシュ１０からフェッチされた命令をデコードし、関連する動作を実施するよう処理ロジック４又はデータ処理装置２のその他の要素を制御するための制御信号を生成する。ロード／ストア・ユニット１２もまた、（命令デコーダ８によってデコードされたロード命令に応答して）データ・キャッシュ１４又は主メモリ１６からアーキテクチャ・レジスタ６にデータ値をロードするためのロード動作と、（命令デコーダ８によってデコードされたストア命令に応答して）アーキテクチャ・レジスタ６からデータ・キャッシュ１４又はメモリ１６にデータ値を格納するためのストア動作とを実施するために提供される。
【００３０】
装置２はまた、ハードウェア・トランザクショナル・メモリ（ＨＴＭ）をサポートするための様々なリソースを提供するトランザクショナル・メモリ・サポート回路２０を有する。トランザクショナル・メモリ・サポート回路２０内のＨＴＭリソースは、例えば、トランザクションの投機的実行結果を格納するための投機的実行結果ストレージ２２、トランザクションによってアクセスされるアドレスをトラッキングするためのアドレス・トラッキング回路２４、競合が検出された際にトランザクションをアボートすることができるよう、トランザクションによって実施されるデータ・アクセスと、他のスレッドによって実施されるデータ・アクセスとの競合を検出するための競合検出回路２６、及び、トランザクションがアボートされた際にトランザクションの投機的実行結果を上書きするために、アーキテクチャの状態を復元することができるよう、トランザクション開始時にアーキテクチャ・レジスタ６からアーキテクチャ状態データのスナップショットを格納するための回復状態ストレージ回路２８を含むことができる。
【００３１】
装置２はまた、現在の処理を停止し、他の何らかの動作に切り替えるよう処理ロジック４に要求するイベントを表す、例外３２の処理を制御する例外処理回路３０を有する。メモリ１６に格納された例外ハンドラ・コードは、特定の種別の例外に応答して実施されるべき動作を定義することができ、また、例外処理回路３０は、異なる種別の例外について対応する例外ハンドラのアドレスを示す例外ベクトル・テーブルを保持することができる。アーキテクチャ状態６は、例外処理回路３０が起こり得る例外３２のサブセットに対して対処するべきかを判定するための例外マスク情報を提供するための、例外マスク・レジスタ３４及び例外優先マスク・レジスタ３６を含むことができる。
【００３２】
図２は、トランザクショナル・メモリ・サポート回路２０及び処理ロジック４を用いた、所与のスレッド内におけるトランザクションの実行例を示す。トランザクションは、トランザクション開始命令（ｔｓｔａｒｔ）及びトランザクション終了命令（ｔｃｏｍｍｉｔ）によって挟まれた、プログラム・コードのセクションである。図２に示すように、トランザクション開始命令に応答して、アーキテクチャ・レジスタ６内の現在のアーキテクチャ状態が取得され、回復状態ストレージ回路２８に格納される。処理ロジック４が、ｔｓｔａｒｔ命令に続く後続の命令の投機的実行の実施を開始し、これらの命令が実行されるのに伴い、これらの命令によってアクセスされるアドレスが、アドレス・トラッキング回路２４によってトラッキングされ、また、競合検出回路２６が、トラッキングされたアドレスと、他のスレッドに応答してロード／ストア・ユニット１２を用いてアクセスされたアドレスとの競合を検出する。トランザクション内の命令の少なくともいくつかの投機的実行結果は、投機的実行結果ストレージ回路２２内に格納される。例えば、ストア命令ＳＴＲに応答してキャッシュ又はメモリに格納された値は、トランザクションが保留されている間、投機的実行結果ストレージ２２に保持されることができる。その間にアボート・イベントが発生することなく、トランザクション終了命令（ｔｃｏｍｍｉｔ）に到達すれば、トランザクション終了命令に応答して、投機的実行結果がコミットされる。トランザクションのコミットに際し、当該スレッドについての、投機的実行結果ストレージ２２に格納されたいずれの結果も、データ・キャッシュ１４又はメモリ１６に書き込まれることができ、もはやアーキテクチャ状態をトランザクション開始命令に遭遇する以前の時点に巻き戻す必要がないため、回復状態２８は破棄されるか、又は上書きを許可される。
【００３３】
一方、アボート・イベントが発生する場合、例えば、トランザクションによって既にアクセスされているアドレスに別のスレッドがアクセスする時に競合検出回路２６によって競合が検出された場合、トランザクションのアボートがトリガされ、回復状態が、回復状態ストレージ２８からアーキテクチャ・レジスタ６に復元される。アボート・イベントの他の要因には、例えば、トランザクション内で実行不可の命令の実行、所与のトランザクションによって要求される、投機的実行結果若しくはアドレスを処理するための、投機的実行結果ストレージ２２若しくはアドレス・トラッキング回路２４内のリソース不足、又は、トランザクション中に受信した中断がある。
【００３４】
図３は、例外マスク・レジスタ３４及び例外優先マスク・レジスタ３６のコンテンツ例を示す。例外マスク・レジスタは、一連のフラグ３８を含み、そのそれぞれが例外３２の特定の種別に対応し、且つ、例外が有効であるか、又は無効であるかを指定する。図３に示すマッピングにおいて、フラグ値１は、例外が有効である（マスクされない）ことを示し、フラグ値０は、例外種別が無効である（マスクされる）ことを示すが、その逆のマッピングもまた使用され得ることは理解されるであろう。例外種別が無効である場合、その例外が発生したとしても、処理ロジック４は中断されないことになる。しかし、無効な例外についての例外信号のアサーションは保留状態を維持し、例外が保留されている間に、例外がマスク解除される（有効化される）と、例外はプロセッサ４に伝達され得る。
【００３５】
同様に、例外優先マスク・レジスタ３６は、閾値の優先度を定義することができる。閾値より低いか、又はそれに等しい優先度を有する例外は、無効である（マスクされる）と考えることができ、閾値より高い優先度の例外は有効である（マスク解除される）と考えることができる。レジスタ３４、３６内のマスク情報は、処理される例外を処理ロジック４に伝達するかを判定するためだけに使用される情報ではないことは理解されるであろう。例えば、優先度は、複数の有効な例外が発生した場合に、優先度がより低い例外より先に優先度がより高い例外が伝達されるように、使用されることもできる。同様に、例外の処理ロジック４への伝達は、現在実行されているコードの優先度と、以後の例外に関する優先度との比較に依存してもよい。
【００３６】
図４は、トランザクション中の例外マスク・レジスタ３４、３６への変更を処理するための典型的なアプローチを、比較のために示す。例外マスク更新命令は例外マスク・レジスタ３４又は例外優先マスク・レジスタ３６内の値を変更することができる。典型的に、このような命令は、例外マスク・レジスタ３４、３６への更新を含むトランザクションが完了することができないよう、トランザクションのアボートを引き起こすことができる。これは、例外マスク更新命令が例外のサブセットを有効化するか、又は無効化するかに関わらず、実施されることができるが、図５に示すように、さらに重大な問題は、例外マスク更新命令の結果、トランザクション開始時に無効化された、さらなる命令のサブセットが有効化される場合に発生する。
【００３７】
図５は、例外マスク更新をトランザクション中に実施することができ、トランザクションが例外マスク更新の先に進むことができる場合に発生し得る、ライブロック問題を示す。図５は、トランザクション開始命令、ｔｓｔａｒｔが特定の例外Ａのサブセットが無効化される時点において実行される場合の例を示す。例外Ａのサブセットは、対応する例外マスク・フラグ３８が無効化される特定の種別の例外であるか、又は、レジスタ３６内の現在の優先閾値より低いか、若しくはそれに等しい優先度を有する例外のサブセットであってよい。次に、トランザクションの命令の投機処理が始まり、例外マスク・レジスタ３４、３６のうち１つ又は両方の更新をトリガする例外マスク更新命令５０に到達し、ここで例外Ａのサブセットが有効化される。続いて、サブセットＡ内の例外が発生し、これによってトランザクションがアボートされる。この時点で、回復ストレージ２８に格納された回復状態は、アーキテクチャ・レジスタ６に復元され、レジスタ３４及び３６に関連する例外マスク情報も復元される。トランザクション開始命令の時点で例外Ａのサブセットは無効であったため、この時点で、状態の復元により例外Ａが再び無効化される。通常、例外はトランザクションがアボートした後に適用されるが、状態の復元により例外Ａのサブセットが無効化されるため、例外はマスクされ、故に、適用されない。それでもなお、対応する例外信号３２は保留状態を維持する。
【００３８】
このトランザクションを含むソフトウェアは、続いて、トランザクションのスケジュール変更を試み、図５の右側に示すように、トランザクション開始命令から再び開始する。再び、回復状態が取得され、トランザクションの処理が始まるが、例外Ａは保留状態を維持する。従って、例外マスク更新命令に再び到達すると、例外Ａは有効化、且つ、マスク解除され、又、例外が依然として保留されているため、トランザクションは再びアボートすることになる。これにより、再びこの回復状態の復元がトリガされ、アボート時に保留されている状態と回復状態ストレージ２８が示す状態との相違に起因して、例外Ａの無効化がトリガされる。従って、これは、トランザクションを最初に実行しようと試みた際に発生したものと同じ条件である。ソフトウェアは、再びトランザクションの繰り返しを試みることがあり、これによって、ソフトウェアがトランザクションを繰り返し実行しようとし続けるライブロック・ループとなる可能性があり、例外Ａのサブセットが有効化された時点において、当該サブセットの保留されている例外があり、これが即座にトランザクションをアボートするために、トランザクションは失敗し続ける。このライブロック・ループは、例外がデアサートされるか、又は、ソフトウェアが、トランザクションの実行を十分に試みたと判定し、非トランザクショナル・モードでの実行に切り替えるまで、継続し得る。このようなライブロック・ループは、性能に悪影響を及ぼすため、典型的に、このことを理由に、例外マスク更新命令がいずれもトランザクションをアボートする、図４のアプローチが取られている。
【００３９】
これに対して、図６は異なるアプローチを示す。本実例では、例外マスク更新命令５０をトランザクション中に実行することができ、例外マスク更新命令５０に続くトランザクションの命令のアボートされていない実行が許可される。競合検出回路２６による競合の検出、投機的実行結果ストレージ２２若しくはアドレス・トラッキング回路２４内のリソース不足、又は、例外の発生などの他の理由から、例外マスク更新命令の後にトランザクションをアボートすることはあるが、アボートを要するイベントが他に発生しなければ、例外の少なくとも１つのサブセットについてマスク情報を無効状態から有効状態に切り替える例外マスク更新命令５０が含まれていたとしても、トランザクションは、トランザクション終了命令ｔｃｏｍｍｉｔに到達することができる。このことによって、従来はトランザクショナル・モードを使用することができなかった、さらなるコード・シーケンスが、これを使用可能となり、ロック・ベースのコードなどの、より悲観的なモデルよりも、むしろトランザクショナル・モードを使用することによって、性能確保の機会が増大する。
【００４０】
現在は有効であってトランザクション開始時には無効化されていた例外によってトランザクションをアボートする際のライブロック状態のリスクを軽減するため、トランザクション・アボート状態レジスタ５２内のアボート状態値は、アボートの要因を示す所定の値に設定される。図６は、２つの別のアプローチをアボート状態情報で示す。１つの実例では、アボート状態レジスタ５２は、トランザクション開始時に予め無効化された例外によってアボートがトリガされた際に、第１の値（例えば、バイナリ１）に設定されるフラグ５４を有することができる。別のアプローチでは、アボート状態レジスタ５２は、現在は有効であってトランザクション開始時に予め無効化された例外によってアボートがトリガされたことを示す、いくつかの特定のビット・パタン［ｘ  ｙ  ｚ］を有することができる状態コードを（異なるビット・パタンを用いた他の全てのアボート要因の状態コードと共に）格納することができる。アボート状態情報を表す方法に関わらず、これは、ソフトウェアがアボート要因を判定することを可能とするためのアーキテクチャ上のサポートを提供する。ソフトウェアは、アボート状態情報５２を読み取り、例外の有効化がアボートを引き起こしたことがアボートの要因であり、トランザクションが繰り返されれば、これが再び発生し得ることを判定することができる。従って、ソフトウェアは、トランザクションを再試行せず、例えば、代わりにロック・ベースの実行を使用することを判定することができる。故に、このことによって、ライブロックが起こる機会が減少し、一方で、例外マスク更新を含むコードにトランザクショナル・モードを使用する機会が増大する。
【００４１】
図７は、トランザクショナル・モードでの命令の処理を示すフロー図である。ステップ１００において、命令デコーダ８がトランザクション開始命令に遭遇する。命令デコーダ８は、制御信号を生成し、これがステップ１０２において、レジスタ６から現在のアーキテクチャ状態（レジスタ３４、３６内の例外マスク情報を含む）を取得するよう、処理ロジック４を制御し、取得した状態を回復状態ストレージ２８内に格納する。実装によっては、この回復状態の取得は、保留中のトランザクションが他に無い段階で実行される、最初のトランザクション開始命令についてのみ実施され得る。トランザクションのネスティングが発生する場合、前のトランザクションの終了に到達する前に第２のトランザクション開始命令に遭遇すると、複雑さを軽減するため、これらのさらにネスティングされたトランザクションに対する回復状態の取得が抑制される。
【００４２】
ステップ１０４において、トランザクション開始命令に続く命令の投機的実行を開始する。アドレス・トラッキング回路２４が、トランザクションの命令によってアクセスされるアドレスの記録を開始し、競合検出回路２６がこれらのアドレスと、他のスレッドによってアクセスされるアドレスとの競合をチェックする。
【００４３】
ステップ１０６において、命令デコーダ８が、トランザクション開始時に無効化された例外のサブセットを有効化する例外マスク更新命令に遭遇したかをチェックし、遭遇していれば、ステップ１０８において、レジスタ３４、３６のうち１つ又は両方の例外マスク情報を更新するよう処理ロジック４が制御され、続いてトランザクションのアボートされていない投機的実行を継続する。従って、例外マスク更新は、トランザクションのアボートをトリガしない。例外マスク更新に遭遇しなければ、ステップ１１０において、何らかのアボート・イベントが発生していないかをチェックする。アボート・イベントには、例えば、有効な例外（例外マスク・レジスタ３４若しくは例外優先マスク・レジスタ３６によって現在マスクされていない）の発生、競合検出回路２６によって検出された競合、トランザクション内で実行不可の命令の実行、又は、ＨＴＭトラッキング構造２２、２４のうち１つの、現在のトランザクションについての情報をさらに格納するための容量の不足がある。
【００４４】
アボート・イベントが発生する場合、ステップ１１２において、トランザクションがアボートされ、回復状態が回復状態ストレージ２８からアーキテクチャ・レジスタ３６に復元される。ステップ１１４において、処理ロジック４又は例外処理回路３０が、アボート・イベントがトランザクションの開始時に無効化された、有効な例外に起因するかを判定する。これは、新たに復元された例外マスク・レジスタ３４及び例外優先マスク・レジスタ３６を、アボートを引き起こした例外の属性と比較することによって判定される。アボート・イベントがトランザクションの開始時に無効化された、有効な例外に起因するならば、ステップ１１６において、アボート状態レジスタ５２が所定の値に設定される。そうでない場合、アボート状態レジスタ５２は、アボートの要因を表す別の値に設定される。これが、ソフトウェアに要因に関する通知を行い、ソフトウェアは、アボート状態情報に応じて、トランザクション実行の再試行の繰り返しへ、又は、代わりのロック・ベースのコードへ、条件分岐させることができる。従って、トランザクション中にマスク解除された、有効な例外によってトリガされるアボートを識別する特定の状態値を含むアボート状態情報によって、アボートされたトランザクションに対応する動作の再スケジュールの方法について、より良い判定を下すことが可能となる。
【００４５】
ステップ１１０においてアボート・イベントが発生しなければ、トランザクション処理は続行する。ステップ１２０において、命令デコーダ８が、トランザクション終了命令（ｔｃｏｍｍｉｔ）に遭遇したかを判定し、遭遇していれば、制御信号が生成され、ステップ１２２において、トランザクションのいずれの投機的実行結果もコミットし、トランザクションに関する回復状態ストレージ２８内の回復状態の破棄又は上書きを許可するよう処理ロジック４をトリガする。投機的実行結果のコミットには、例えば、投機的実行結果ストレージ２２からのストア命令の結果をデータ・キャッシュ１４又はメモリ１６に書き込むことが含まれる。場合によっては、投機的実行結果のコミットは、全てのトランザクション終了命令について実施されるとは限らない。例えば、ネスティングされたトランザクションでは、ネスティングされたセットの外側のトランザクションの最終的なトランザクション終了命令のみが、投機的実行結果のコミットをトリガすることができ、内側のトランザクションのトランザクション終了命令はいずれも無視される。また、場合によっては、トランザクション終了命令に到達する際、投機的実行結果が実際にコミットされるかどうかをチェックする他の基準があってもよい。
【００４６】
ステップ１２０において、トランザクション終了命令が未だ到達していなければ、本方法は、ステップ１０６に戻り、ステップ１０６、１１０、及び１２０でチェックされたイベントのうち少なくとも１つが発生するまで周回する。
【００４７】
図８は、使用され得るシミュレータ実装を示す。前述した実施例が、本発明を、関係技術をサポートする特定の処理ハードウェアを動作させる装置及び方法に関して実施する一方、コンピュータ・プログラムの使用を通じて実装される、本明細書に記載する実施例に従う命令実行環境を提供することもまた可能である。ハードウェア・アーキテクチャのソフトウェア・ベースでの実装を提供する限りにおいて、このようなコンピュータ・プログラムはしばしば、シミュレータと称される。シミュレータ・コンピュータ・プログラムの種類には、エミュレータ、仮想マシン、モデル、及び、ダイナミック・バイナリ・トランスレータを含むバイナリ・トランスレータが含まれる。典型的には、シミュレータ実装はホスト・プロセッサ２３０上で稼働し、任意に、シミュレータ・プログラム２１０をサポートするホスト・オペレーティング・システム２２０を実行する。いくつかの構成では、ハードウェアと提供された命令実行環境との間にシミュレーションの複数のレイヤを含み、且つ／又は、同一ホスト・プロセッサ上に提供される複数の個別の命令実行環境を含むことができる。従来、リーズナブルな速度で実行するシミュレータ実装を提供するために強力なプロセッサが必要とされてきたが、このようなアプローチは、互換性又は再使用の理由で別のプロセッサにネイティブなコードを実行する要求がある場合などの特定の状況で正当化される。例えば、シミュレータ実装は、ホスト・プロセッサ・ハードウェアによってサポートされていない、追加的な機能性を有する命令実行環境を提供するか、又は、典型的には異なるハードウェア・アーキテクチャに関する命令実行環境を提供することができる。シミュレーションの概要は、「Ｓｏｍｅ  Ｅｆｆｉｃｉｅｎｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｉｍｕｌａｔｉｏｎ  Ｔｅｃｈｎｉｑｕｅｓ」、Ｒｏｂｅｒｔ  Ｂｅｄｉｃｈｅｋ、Ｗｉｎｔｅｒ  １９９０  ＵＳＥＮＩＸ  Ｃｏｎｆｅｒｅｎｃｅ、５３〜６３頁に記載されている。
【００４８】
特定のハードウェア構成又は特性に関して上述された実施例の範囲において、シミュレートされた実施例では、適切なソフトウェア構成又は特性によって同等の機能性が提供され得る。例えば、シミュレートされた実施例において、特定の回路がコンピュータ・プログラム・ロジックとして実装され得る。同様に、レジスタ又はキャッシュなどのメモリ・ハードウェアは、シミュレートされた実施例においてはソフトウェア・データ構造として実装され得る。上述した実施例で参照したハードウェア要素のうち１つ又は複数がホスト・ハードウェア（例えば、ホスト・プロセッサ２３０）上にある構成において、いくつかのシミュレートされた実施例は、適切な場合に、このホスト・ハードウェアを利用することができる。
【００４９】
シミュレータ・プログラム２１０は、コンピュータ可読記憶媒体（非一時的な媒体であってよい）上に格納されることができ、ターゲット・コード２００（アプリケーション、オペレーティング・システム及びハイパーバイザを含んでよい）に、シミュレータ・プログラム２１０によってモデル化されるハードウェア・アーキテクチャのアプリケーション・プログラム・インタフェースと同じプログラム・インタフェース（命令実行環境）を提供する。そのため、ターゲット・コード２００のプログラム命令は、シミュレータ・プログラム２１０を用いて命令実行環境内から実行され、前述の装置２のハードウェア特性を実際には持たないホスト・コンピュータ２３０がこれらの特性をエミュレートできるよう、トランザクション内の例外マスク更新命令を前述した方法で処理する。
【００５０】
本願において、用語「〜ように構成された」は、装置の構成要素が所定の動作を実施することができる構成を有することを意味する。この文脈において、「構成」は、ハードウェア又はソフトウェアの相互接続の配置又は方法を意味する。例えば、装置は、所定の動作を提供する専用ハードウェアを有するか、又は、プロセッサ若しくは他の処理デバイスがその機能を実施するようプログラムされることができる。「〜よう構成される」は、装置の構成要素が、所定の動作を提供するために何らかの方法で変更される必要があることを含意するものではない。
【００５１】
本発明の例示的な実施例を、添付図面を参照して本明細書に詳述したが、本発明がこれらの詳細な実施例に制限されるものではなく、添付された特許請求の範囲によって定められた本発明の範囲及び思想から逸脱することなく、当業者によって様々な変更及び改善が成され得ることは理解されたい。
【図１】
2020535512.tif 000003
【図２】
2020535512.tif 000004
【図３】
2020535512.tif 000005
【図４】
2020535512.tif 000006
【図５】
2020535512.tif 000007
【図６】
2020535512.tif 000008
【図７】
2020535512.tif 000009
【図８】
2020535512.tif 000010
【国際調査報告】
2020535512.tif 000011
2020535512.tif 000012