(57)【要約】  データ処理のスレッドを処理するための処理回路と、処理回路により処理されるスレッドの中のトランザクションの実行をサポートするためのトランザクショナル・メモリ・サポート回路とを備える装置。ターゲット・アドレス及び比較値を指定する、所与のトランザクションの中で実行されるトランザクショナル比較及び破棄命令に応答して、処理回路は、ターゲット・アドレスに対応するメモリ位置からターゲット・データ値をロードし、ターゲット・データ値及び比較値を比較することの結果に依存して、少なくとも１つの条件ステータス指示をセットし、ターゲット・アドレスを、所与のトランザクションに対する、追跡されるアドレスのワーキング・セットに追加することなく、ターゲット・データ値を破棄する。このことは、スレッド・レベル投機が、トランザクショナル・メモリ・アーキテクチャ上で実現されることを可能にすることに対して有用である。
2021531555.tif 000002
【特許請求の範囲】
【請求項１】
データ処理のスレッドを処理するための処理回路と、
前記処理回路により処理されるスレッドの中のトランザクションの実行をサポートするためのトランザクショナル・メモリ・サポート回路であって、前記トランザクションは、トランザクション開始命令とトランザクション終了命令との間で投機的に実行される前記スレッドの命令を含み、前記トランザクションに対して、前記処理回路が、前記トランザクション終了命令に達するまで、投機的に実行される前記命令の結果のコミットメントを防止するように構成される、トランザクショナル・メモリ・サポート回路と
を備え、
前記トランザクショナル・メモリ・サポート回路は、前記トランザクションに対する、追跡されるワーキング・セットのアドレスのうちの１つへの、別のスレッドからの競合するアクセスを検出することに応答して、前記トランザクションのアボートをトリガするための競合検出回路を備え、
所与のトランザクションの中で実行されるトランザクショナル比較及び破棄命令であって、ターゲット・アドレス及び比較値を指定する、トランザクショナル比較及び破棄命令に応答して、前記処理回路は、
前記ターゲット・アドレスに対応するメモリ位置からターゲット・データ値をロードすることと、
前記ターゲット・データ値及び前記比較値を比較することの結果に依存して、少なくとも１つの条件ステータス指示をセットすることと、
前記ターゲット・アドレスを、前記所与のトランザクションに対する、アドレスの前記ワーキング・セットに追加することなく、前記ターゲット・データ値を破棄することと
を行うように構成される、装置。
【請求項２】
前記トランザクショナル比較及び破棄命令は、前記比較値を記憶するソース・レジスタを指定する、請求項１に記載の装置。
【請求項３】
前記トランザクショナル比較及び破棄命令に応答して、前記処理回路は、前記ターゲット・データ値を、前記処理回路のアーキテクチャ上のレジスタに書き込むことなく、前記ターゲット・データ値を破棄するように構成される、請求項１又は２に記載の装置。
【請求項４】
テスト条件を指定する条件付き命令に応答して、前記処理回路は、前記テスト条件を満たす前記少なくとも１つの条件ステータス指示を条件として処理演算を遂行するように構成される、請求項１から３までのいずれか一項に記載の装置。
【請求項５】
前記トランザクショナル・メモリ・サポート回路はまた、少なくとも１つのトランザクションに対する投機的に実行される命令の結果を記憶するための投機的結果記憶回路を備える、請求項１から４までのいずれか一項に記載の装置。
【請求項６】
前記トランザクショナル・メモリ・サポート回路はまた、前記トランザクションをアボートすることを機に復元されることになる、前記トランザクション開始命令に応答して捕捉される状態を記憶するための復元状態記憶回路を備える、請求項１から５までのいずれか一項に記載の装置。
【請求項７】
前記トランザクショナル比較及び破棄命令に応答して、前記処理回路は、メモリ・システムに前記ターゲット・データ値の前記ロードを要請するために、第１のバス・プロトコル・メッセージの発行をトリガするように構成され、
前記第１のバス・プロトコル・メッセージは、前記バス・プロトコル・メッセージを、メモリにデータ値のロードを要求する他のタイプの命令に対して発行される第２のバス・プロトコル・メッセージから区別する指示を含む、請求項１から６までのいずれか一項に記載の装置。
【請求項８】
前記トランザクショナル・メモリ・サポート回路を備える、さらなる処理要素を備え、
前記第１のバス・プロトコル・メッセージ、又は、前記第１のバス・プロトコル・メッセージによりトリガされるさらなるバス・プロトコル・メッセージの受信に応答して、前記ターゲット・アドレスが、前記さらなる処理要素において処理されているトランザクションに対する、追跡されるアドレスの書き込みセットの中にあるとき、前記さらなる処理要素は、前記さらなる処理要素においての前記トランザクションの継続されるアボートされない処理を許すように構成される、請求項７に記載の装置。
【請求項９】
トランザクション開始命令とトランザクション終了命令との間で投機的に実行されるスレッドの命令を含むトランザクションを実行するステップであって、前記トランザクションに対して、処理回路が、前記トランザクション終了命令に達するまで、投機的に実行される前記命令の結果のコミットメントを防止するように構成される、実行するステップと、
前記トランザクションに対する、追跡されるワーキング・セットのアドレスのうちの１つへの、別のスレッドからの競合するアクセスを検出し、競合するアクセスが検出されるとき、前記トランザクションをアボートするステップと、
前記トランザクションの中で実行される、ターゲット・アドレス及び比較値を指定する、トランザクショナル比較及び破棄命令に応答して、
前記ターゲット・アドレスに対応するメモリ位置からターゲット・データ値をロードするステップと、
前記ターゲット・データ値及び前記比較値を比較することの結果に依存して、少なくとも１つの条件ステータス指示をセットするステップと、
前記ターゲット・アドレスを、所与のトランザクションに対する、アドレスの前記ワーキング・セットに追加することなく、前記ターゲット・データ値を破棄するステップと
を含むデータ処理方法。
【請求項１０】
スレッド・レベル投機を遂行して、処理の複数のスレッドを実行するステップであって、各々のスレッドは、プログラム・ループの複数の反復のうちのそれぞれの１つに対応し、少なくとも１つのトランザクションを含む、実行するステップを含む、請求項９に記載のデータ処理方法。
【請求項１１】
前記トランザクショナル比較及び破棄命令は、前記ターゲット・アドレスとして、前記プログラム・ループの前記複数の反復に対してトランザクションをコミットすることにおいて経過を追跡するためのループ反復コミット変数のアドレスを指定する、請求項１０に記載のデータ処理方法。
【請求項１２】
１つ又は複数の命令を実行して、前記少なくとも１つの条件ステータス指示がテスト条件を満足させるかどうかに依存して、前記トランザクションをアボートするべきかどうかを決定するステップを含む、請求項９から１１までのいずれか一項に記載のデータ処理方法。
【請求項１３】
データ処理のスレッドの実行のための命令実行環境を提供するように、ホスト・データ処理装置を制御するためのコンピュータ・プログラムであって、
データ処理のスレッドを処理するための処理プログラム論理と、
前記処理プログラム論理により処理されるスレッドの中のトランザクションの実行をサポートするためのトランザクショナル・メモリ・プログラム論理であって、前記トランザクションは、トランザクション開始命令とトランザクション終了命令との間で投機的に実行される前記スレッドの命令を含み、前記トランザクションに対して、前記処理プログラム論理が、前記トランザクション終了命令に達するまで、投機的に実行される前記命令の結果のコミットメントを防止するように構成され、前記トランザクション・メモリ・プログラム論理は、前記トランザクションに対する、追跡されるワーキング・セットのアドレスのうちの１つへの、別のスレッドからの競合するアクセスを検出することに応答して、前記トランザクションのアボートをトリガするための競合検出プログラム論理を含む、トランザクショナル・メモリ・プログラム論理と
を備え、
所与のトランザクションの中で実行されるトランザクショナル比較及び破棄命令であって、ターゲット・アドレス及び比較値を指定する、トランザクショナル比較及び破棄命令に応答して、前記処理プログラム論理は、
前記ターゲット・アドレスに対応するメモリ位置からターゲット・データ値をロードすることと、
前記ターゲット・データ値及び前記比較値を比較することの結果に依存して、少なくとも１つの条件ステータス指示をセットすることと、
前記ターゲット・アドレスを、前記所与のトランザクションに対する、アドレスの前記ワーキング・セットに追加することなく、前記ターゲット・データ値を破棄することと
を行うように構成される、コンピュータ・プログラム。
【請求項１４】
請求項１３に記載のコンピュータ・プログラムを記憶する記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本技法は、データ処理の分野に関係する。より詳しくは、本技法は、トランザクショナル・メモリに関係する。
【背景技術】
【０００２】
データ処理システムは、データ処理の、いくつかのスレッドを実行し得る。時には、スレッドは、共有リソースにアクセスすることを必要とし得るものであり、データ処理演算の性質は、スレッドが共有リソースと相互作用することを開始すると、その間に、別のスレッドがリソースにアクセスすることなく、リソースを使用してアトミックに完了することが、演算のセットに対して必要であり得るようなものであり得る。
【０００３】
スレッドの間のこの競合を統御するための１つの技法は、ロックを使用して、少なくとも１つのターゲット・リソースへの排他的アクセスを制御することであり得る。例えば、１つのスレッドが個別のアドレス領域内のデータにアクセスすることを開始するとき、スレッドは、ロック変数をセットして、ロックの所有権を主張し得るものであり、次いで、ロック所有スレッドがロックの所有権を有する間、ロック変数をチェックする他のスレッドは、ロックがすでに主張されていると決定し得るものであり、そのため、そのアドレス領域と相互作用するコードのセクションに進入しないことがある。そのようなロック・ベースの手法は、各々のスレッドが、デフォルトで、競合が発生し得ないということを保証するロックの所有権をそのスレッドが有さない限り、別のスレッドとの競合が発生し得るので、そのスレッドは、共有リソースにアクセスするコードのセクションに進入することができないということを想定するということにおいて、悲観的と見られ得る。しかしながら、しばしばロック識別子は、いくつかのリソース（例えば、アドレスのレンジ）への排他的アクセスを制御し得るものであり、そのため、１つのスレッドが、ロック変数により保護されるリソースのセットの中の所定のリソースにアクセスしている場合、別のスレッドが同じリソースに間違いなくアクセスすることになるということは保証されない。ゆえに、ロック・ベースの手法は、スレッドの間の競合がまれである事例において、性能の損失につながり得るものであり、なぜならば、スレッドは、共有リソースを使用するコードのクリティカル・セクションに進入する前に、ロックが解放されることに対して不必要に待機していることがあるからである。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】「Ｓｏｍｅ  Ｅｆｆｉｃｉｅｎｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｉｍｕｌａｔｉｏｎ  Ｔｅｃｈｎｉｑｕｅｓ」、Ｒｏｂｅｒｔ  Ｂｅｄｉｃｈｅｋ、Ｗｉｎｔｅｒ  １９９０  ＵＳＥＮＩＸ  Ｃｏｎｆｅｒｅｎｃｅ、５３〜６３頁
【発明の概要】
【課題を解決するための手段】
【０００５】
共有リソースにアクセスするスレッドの間の競合を統御するための、より楽観的な手法は、トランザクショナル・メモリ・サポートを使用することであり得る。データ処理システムは、処理回路によるデータ処理のスレッドの中のトランザクションの実行をサポートするための回路を有し得る。トランザクションは、トランザクションの始まりをマーキングするトランザクション開始命令と、トランザクションの終了をマーキングするトランザクション終了命令との間で実行されるスレッドの命令であり得る。トランザクション開始命令とトランザクション終了命令との間で、処理回路は、介在命令を投機的に実行し、トランザクション終了命令に達するまで、それらの投機的に実行される命令の結果のコミットメントを防止し得る。トランザクション開始命令の実行の後に続く（ただし、トランザクション終了命令に達する前の）アボート・イベントの発生は、トランザクションがアボートされること、及び、投機的結果が破棄されることを結果的に生じさせ得る。トランザクションをアボートすることに対するいくつかの理由が存し得るが、１つの理由は、別のスレッドによりなされるメモリ・アクセスとの検出される競合であり得る。ゆえに、この手法によって、各々のスレッドは、他のスレッドとの競合が発生しないであろうということを想定して、コードのクリティカル・セクションを処理することを楽観的に開始し得るものであり、次いで、クリティカル・セクションの終了に、いかなる競合も検出されることなく達するならば、トランザクションの結果はコミットされ得る。競合がまれである事例において、トランザクショナル・メモリ・サポートを使用することは、より多くのスレッドがコードのそれらのスレッドのクリティカル・セクションを同時的に処理することを可能とすることにより、性能を改善し得る。
【０００６】
少なくとも一部の実例は、データ処理のスレッドを処理するための処理回路と、処理回路により処理されるスレッドの中のトランザクションの実行をサポートするためのトランザクショナル・メモリ・サポート回路であって、トランザクションは、トランザクション開始命令とトランザクション終了命令との間で投機的に実行されるスレッドの命令を含み、そのトランザクションに対して、処理回路が、トランザクション終了命令に達するまで、投機的に実行される命令の結果のコミットメントを防止するように構成される、トランザクショナル・メモリ・サポート回路とを備え、トランザクショナル・メモリ・サポート回路は、トランザクションに対する、追跡されるワーキング・セットのアドレスのうちの１つへの、別のスレッドからの競合するアクセスを検出することに応答して、トランザクションのアボートをトリガするための競合検出回路を備え、所与のトランザクションの中で実行されるトランザクショナル比較及び破棄命令であって、ターゲット・アドレス及び比較値を指定する、トランザクショナル比較及び破棄命令に応答して、処理回路は、ターゲット・アドレスに対応するメモリ位置からターゲット・データ値をロードすることと、ターゲット・データ値及び比較値を比較することの結果に依存して、少なくとも１つの条件ステータス指示をセットすることと、ターゲット・アドレスを、所与のトランザクションに対する、アドレスのワーキング・セットに追加することなく、ターゲット・データ値を破棄することとを行うように構成される、装置を提供する。
【０００７】
少なくとも一部の実例は、トランザクション開始命令とトランザクション終了命令との間で投機的に実行されるスレッドの命令を含むトランザクションを実行するステップであって、そのトランザクションに対して、処理回路が、トランザクション終了命令に達するまで、投機的に実行される命令の結果のコミットメントを防止するように構成される、実行するステップと、トランザクションに対する、追跡されるワーキング・セットのアドレスのうちの１つへの、別のスレッドからの競合するアクセスを検出し、競合するアクセスが検出されるとき、トランザクションをアボートするステップと、トランザクションの中で実行される、ターゲット・アドレス及び比較値を指定する、トランザクショナル比較及び破棄命令に応答して、ターゲット・アドレスに対応するメモリ位置からターゲット・データ値をロードするステップと、ターゲット・データ値及び比較値を比較することの結果に依存して、少なくとも１つの条件ステータス指示をセットするステップと、ターゲット・アドレスを、所与のトランザクションに対する、アドレスのワーキング・セットに追加することなく、ターゲット・データ値を破棄するステップとを含むデータ処理方法を提供する。
【０００８】
少なくとも一部の実例は、データ処理のスレッドの実行のための命令実行環境を提供するように、ホスト・データ処理装置を制御するためのコンピュータ・プログラムであって、データ処理のスレッドを処理するための処理プログラム論理と、処理プログラム論理により処理されるスレッドの中のトランザクションの実行をサポートするためのトランザクショナル・メモリ・プログラム論理であって、トランザクションは、トランザクション開始命令とトランザクション終了命令との間で投機的に実行されるスレッドの命令を含み、そのトランザクションに対して、処理プログラム論理が、トランザクション終了命令に達するまで、投機的に実行される命令の結果のコミットメントを防止するように構成され、トランザクション・メモリ・プログラム論理は、トランザクションに対する、追跡されるワーキング・セットのアドレスのうちの１つへの、別のスレッドからの競合するアクセスを検出することに応答して、トランザクションのアボートをトリガするための競合検出プログラム論理を含む、トランザクショナル・メモリ・プログラム論理とを含み、所与のトランザクションの中で実行されるトランザクショナル比較及び破棄命令であって、ターゲット・アドレス及び比較値を指定する、トランザクショナル比較及び破棄命令に応答して、処理プログラム論理は、ターゲット・アドレスに対応するメモリ位置からターゲット・データ値をロードすることと、ターゲット・データ値及び比較値を比較することの結果に依存して、少なくとも１つの条件ステータス指示をセットすることと、ターゲット・アドレスを、所与のトランザクションに対する、アドレスのワーキング・セットに追加することなく、ターゲット・データ値を破棄することとを行うように構成される、コンピュータ・プログラムを提供する。
【０００９】
記憶媒体が、コンピュータ・プログラムを記憶し得る。記憶媒体は、非一時的記憶媒体であり得る。
【００１０】
本技法のさらなる態様、特徴、及び利点は、添付図面と連関して読まれることになる、実例の、後に続く説明から明らかになることになる。
【図面の簡単な説明】
【００１１】
【図１】トランザクショナル・メモリ・サポート回路を有するデータ処理装置の実例を概略的に例示する図である。
【図２】トランザクショナル・メモリ・リソースを使用してトランザクションを処理することの実例を示す図である。
【図３】条件ステータス指示を記憶するステータス・レジスタ、及び、条件ステータス指示により指示され得る異なる条件を示す表の実例を示す図である。
【図４】マルチ・コア処理システムの実例を示す図である。
【図５】トランザクショナル・メモリをサポートするマルチ・コア・システム上でスレッド・レベル投機を遂行することの実例を示す図である。
【図６】トランザクショナル比較及び破棄命令の実例を概略的に例示する図である。
【図７】トランザクショナル・メモリ・サポート回路を使用してトランザクションを処理する方法を示すフロー線図である。
【図８】トランザクションの中で実行されるトランザクショナル比較及び破棄命令を処理する方法を示すフロー線図である。
【図９】メモリ・システムにデータのローディングを要請するために使用されるバス・プロトコル・メッセージの実例を示す図である。
【図１０】メモリ・システムにデータのローディングを要請するために使用されるバス・プロトコル・メッセージの実例を示す図である。
【図１１】使用され得るシミュレータ実例を示す図である。
【発明を実施するための形態】
【００１２】
データ処理装置は、処理回路を有し得るものであり、その処理回路は、処理回路により処理されるデータ処理のスレッドの中のトランザクションの実行をサポートするためのトランザクショナル・メモリ・サポート回路を有する。トランザクションは、トランザクション開始命令とトランザクション終了命令との間で投機的に実行されるスレッドの命令を含み、そのトランザクションに対して、処理回路が、トランザクション終了命令に達するまで、トランザクションの投機的に実行される命令の結果のコミットメントを防止し得るものであり、トランザクション終了命令に達する前にアボート・イベントが発生するとき、トランザクションの処理をアボートし得る。トランザクショナル・メモリ・サポート回路は、トランザクションに対する、追跡されるワーキング・セットのアドレスのうちの１つへの、別のスレッドからの競合するアクセスを検出することに応答して、トランザクションのアボートをトリガするための競合検出回路を備え得る。
【００１３】
下記で論考される技法において、処理回路は、ターゲット・アドレス及び比較値を指定する、トランザクショナル比較及び破棄命令をサポートする。トランザクショナル比較及び破棄命令が所与のトランザクションの中で実行されることに応答して、処理回路は、ターゲット・アドレスに対応するメモリ位置（例えば、キャッシュ位置又はシステム・メモリ位置）からターゲット・データ値をロードし、ターゲット・データ値及び比較値を比較することの結果に依存して、少なくとも１つの条件ステータス指示をセットし、ターゲット・アドレスを、所与のトランザクションに対する、追跡されるアドレスのワーキング・セットに追加することなく、ターゲット・データ値を破棄し得る。
【００１４】
この手法は反直感的であり、なぜならば、トランザクションの中のメモリからのデータのいかなるロードも、トランザクションのワーキング・セットの中で追跡される対応するアドレスを有するべきであり、そのことによって、他のスレッドが、トランザクションがイン・フライトである間に同じアドレスに書き込むならば、トランザクションは、要されるアドレスからの、潜在的には新鮮でない（時期遅れの）値を使用するトランザクションを回避するためにアボートされ得るということを、通常は誰しも予想することになるからである。
【００１５】
しかしながら、ターゲット・アドレスを、トランザクションに対する、アドレスのワーキング・セットに追加することなく、メモリから読み出される値と比較値との間の比較を実行するトランザクショナル比較及び破棄命令が、特に、スレッド・レベル投機を活用することにおいてトランザクショナル・メモリの使用をサポートすることに対して有用であり得るということを、本発明者らは認識した。一部のプログラム・ループは、各々の反復が所定のメモリ・アドレスにアクセスする、いくつかの反復を含み得るが、１つの反復によりアクセスされるアドレスと、別の反復によりアクセスされるアドレスとの間にエイリアシングが存することになるかどうかは、コンパイル時においては静的に知られていない。そのようなループを実行することに対する保守的な手法は、ループの間に依存性が存し得るということを想定すること、及びゆえに、所与の反復が、先立つ反復が完了すると実行されるのみである様態で、各々の反復を逐次的に実行することであり得る。スレッド・レベル投機において、異なる反復の間のそのようなエイリアシングは十分にまれであり得るので、性能は、データ処理の別々のスレッドを使用して、並列に、ループの複数個の反復を投機的に実行することにより改善され得るということが想定される。スレッド・レベル投機によって、複数個の反復に対応するスレッドは、各々、同時に実行され得るものであり、１つの反復によりアクセスされるアドレスが別の反復によりアクセスされるアドレスと競合するかどうかのランタイム・チェックが遂行され得るものであり、一部のスレッドは、並列に処理されるスレッドの間のアドレス競合が存するならば、キャンセルされ、より遅くに再実行され得る。トランザクショナル・メモリは、そのようなスレッド・レベル投機をサポートするために使用され得るものであり、なぜならば、トランザクショナル・メモリのアドレス追跡及びアボート機構は、プログラム・ループの異なる反復に対応するスレッドの間のアドレス・ハザードに対してチェックするために使用され得るからである。
【００１６】
しかしながら、トランザクションを使用して、スレッド・レベル投機をサポートするために、ループの、各々の反復に対応するトランザクションが、元のプログラム・ループのループ反復の順序に対応する順序でコミットされるということを確実にする必要性が存し得る。典型的なトランザクショナル・メモリ・アーキテクチャは、トランザクションが他のトランザクションに相対的にコミットされる所定の順序を強いることの手立てを有さない。代わりに、大部分のトランザクショナル・メモリ・アーキテクチャは、各々のトランザクションが全体的に非依存的であるということを想定する。
【００１７】
上記で論考されたトランザクショナル比較及び破棄命令は、トランザクショナル・メモリ・システムにおいてのスレッド・レベル投機の使用をサポートし得る。トランザクショナル比較及び破棄命令は、スレッド・レベル投機を使用して並列化されているループの最も近時にコミットされた反復を追跡する、メモリ内に記憶される変数をチェックするために使用され得る。トランザクショナル比較及び破棄命令は、比較の結果に基づいて条件ステータス指示をセットするので、このことは、トランザクションの他の命令が、ループの任意のより早い反復に対するトランザクションがコミットしたかどうかをチェックすることを可能にする。
【００１８】
ターゲット・データ値は、ターゲット・アドレスを、アドレスのワーキング・セットに追加することなく破棄されるので、このことは、ループの最も近時にコミットされた反復を指示する共有変数が、複数個のスレッドにより読み出される／書き込まれるときでさえ、そのような明らかなアドレス競合は、トランザクションのいずれについてもそのアボートをトリガしないことになるということを意味する。このことは有用であり、なぜならば、トランザクションが、どの反復がコミットしたかを規定する共有変数にそれらのトランザクションがアクセスするときにアボートされたならば、このことは、事実上、トランザクションのすべてが直列化されることを結果的に生じさせることになり、そのことによって、それらのトランザクションは逐次的に実行され、そのことは、ゆえに、そもそも、トランザクションを使用して、スレッド・レベル投機をサポートすることのまさに利点を消失させるからである。トランザクショナル比較及び破棄命令は、この問題を回避するものであり、なぜならば、ロードにおいてアクセスされるターゲット・アドレスは、アドレスのワーキング・セットに追加されず、そのため、トランザクションは、１つのトランザクションが、別のトランザクションにより読み出されるのと同じ共有変数に書き込むときでさえ、アボートなしで投機的に実行されることを継続し得るからである。トランザクショナル比較及び破棄命令に対するアーキテクチャ上のサポートは、トランザクションが、この機能性を可能にすることの代替的手立てよりハードウェア集約的でない手立てで、トランザクショナル・メモリをサポートするために使用されることを可能にする。
【００１９】
スレッド・レベル投機は、トランザクショナル比較及び破棄命令の使用から利益を得ることができる、ほんの１つの機能性であり、実際上は、この命令に対するアーキテクチャ上のサポートが提供されると、次いでプログラマ又はコンパイラは、このタイプの命令に対して有用に遂行され得る他の機能を見出し得るということが理解されるであろう。ゆえに、トランザクショナル比較及び破棄命令は、スレッド・レベル投機をサポートすることに対する個別のアーキテクチャ上の利益を提供するが、命令は、さらには、他の目的のために使用され得る。
【００２０】
比較値は、トランザクショナル比較及び破棄命令により、異なる手立てで指定され得る。一部の事例において、比較値は、トランザクショナル比較及び破棄命令の命令エンコーディングにおいて即値として指定され得る。
【００２１】
しかしながら、トランザクショナル比較及び破棄命令がソース・レジスタを使用して比較値を識別するアーキテクチャを提供することが、特に有用であり得る。実際上は、このタイプの命令が、スレッド・レベル投機をサポートするために使用されるとき、異なるループ反復に対応する異なるスレッドは、メモリからロードされた値を、そのスレッドが表す個別の反復に依存する比較値の異なる値に照らして比較することを必要とし得る。ソース・レジスタを使用して、比較値を規定することにより、このことは、それぞれのトランザクションにおいての異なる反復に対して実行されることになる命令の共通セットを書き込むことを、より簡単にする。
【００２２】
トランザクショナル比較及び破棄命令に応答して、処理回路は、ターゲット・データ値を、処理回路のアーキテクチャ上のレジスタに書き込むことなく、ターゲットにされた値を破棄し得る。ゆえに、メモリから読み出されるターゲット・データ値は、トランザクショナル比較及び破棄命令を実行することの結果として、ソフトウェアにアクセス可能にされない。代わりに、トランザクショナル比較及び破棄命令は、ターゲット・データ値への制限されるアクセスを提供することを、そのターゲット・データ値を比較値と比較し、比較の結果に依存して、少なくとも１つの条件ステータス指示をセットすることの目的のために行うのみである。
【００２３】
ソフトウェアがアーキテクチャ上のレジスタの中のターゲット・データ値へのアクセスを獲得する程度を制限することにより、このことは、比較及び破棄命令が、トランザクションの中で、他のスレッドにより潜在的にアクセスされ得るデータ値へのアクセスを試みるために、プログラマ又はコンパイラにより、不適切に使用され得るということの公算をより少なくする。対照的に、トランザクションの中で、メモリからロードされたターゲット値をアーキテクチャ上のレジスタ内へと（所与のトランザクションに対する、アドレスのワーキング・セット内の対応するアドレスを追跡することなく）書き込むために実行され得る、一般的な非トランザクショナル・ロード命令が提供されたならば、このことは、プログラマ又はコンパイラにより悪用するのに、より開放的であることになり、なぜならば、そのことは、現実には他のスレッドとの競合に対して追跡されるべきであるアドレスが、非トランザクショナル・ロードにより、不適切にアクセスされるということであり得るからである。
【００２４】
一部のアーキテクチャにおいて、トランザクショナル比較及び破棄命令は、トランザクションがイン・フライトであるときに成功裏に実行するのみであるように限定され得る。ゆえに、トランザクショナル比較及び破棄命令が、トランザクションの中でないときに実行されることを試みられるならば、命令デコーダは、トランザクショナル比較及び破棄命令を未定義命令として取り扱い、例外をトリガして、未定義命令が例外ハンドラにより統御されることを引き起こし得る。
【００２５】
代替的には、トランザクショナル比較及び破棄命令は、さらには、トランザクションの中で命令を実行しないときにサポートされ得る。この事例において、トランザクショナル比較及び破棄は、メモリからデータ値をロードし、ロードされたデータ値を、命令により指定される比較値と比較するように、処理回路をトリガし得る。
【００２６】
トランザクショナル比較及び破棄命令をサポートするアーキテクチャは、さらには、テスト条件を指定する条件付き命令の少なくとも１つの形式をサポートし得る。条件付き命令は、テスト条件を満たす少なくとも１つの条件ステータス指示を条件として処理演算を遂行するように、処理回路を制御する。例えば、アーキテクチャは、条件ステータス指示を表す１つ又は複数の条件フラグを記憶するために用意されることになる、専用条件ステータス・レジスタを要し得る。例えば、条件フラグは、結果が、負であったかどうか、オーバーフローを併せもっていたかどうか、キャリーを併せもっていたかどうか、又は、０であったかどうかなどの、先の処理結果の特性を表し得る。少なくとも１つの条件ステータス指示は、トランザクショナル比較及び破棄命令以外の、他の形式の条件セッティング命令によりさらにはセットされる、同じ指示であり得る。
【００２７】
トランザクショナル・メモリ・サポート回路は、競合検出回路に加えて、さらには他の要素を含み得る。例えば、トランザクショナル・メモリ・サポート回路は、少なくとも１つのトランザクションに対する投機的に実行される命令の結果を記憶するための投機的結果記憶回路、及び／又は、トランザクションがアボートされるならば復元され得る、トランザクションのトランザクション開始命令に応答して捕捉されるアーキテクチャ上の状態を記憶するための復元状態記憶回路を含み得る。例えば、投機的結果記憶回路は、トランザクションがトランザクション終了命令に応答してコミットされるまで、ストア命令の結果をバッファリングし得るものであり、そのことによって、トランザクションの中の投機的に実行されるストア命令は、トランザクションがコミットされ得るということが知られるまで、メモリ・システムを汚染しない。復元状態記憶回路は、例えば、トランザクションの開始において存在する状態のチェックポイントを保持することを、トランザクションがアボートされるときに、状態が、実行の、そのより早いポイントに巻き戻されることを必要とする事例において行うための、レジスタ・バンクの中のレジスタを含み得る。代替的には、復元状態は、レジスタ・リネーミングを使用して、同じレジスタ・ファイルの中の古いチェックポイントにされたアーキテクチャ上の状態を、現在のアーキテクチャ上の状態を記憶するレジスタとして追跡して維持され得る。
【００２８】
トランザクションをアボートすることに対する別の考えられる理由は、トランザクショナル・メモリ・サポート回路がリソースを使い果たし、そのことによって、トランザクションが競合なしに正しく進行することになるということを保証することがもはや可能ではないかどうかであり得る。例えば、投機的結果記憶回路内に記憶されることになる投機的結果の数が、用意される記憶部の中で利用可能な容量を上回るならば、トランザクションはアボートされ得る。
【００２９】
トランザクションをアボートすることに関して、トランザクションを再び実行することを試行するべきか、それとも、代わりに（例えば、ロック及びロード／ストア排他的命令を使用して）非トランザクショナル・フォールバック・パスを使用するべきかを決定することは、ソフトウェア次第であり得る。しかしながら、処理回路のマイクロ・アーキテクチャは、トランザクションのアボートの考えられる理由を指示するヒントを提供し得るものであり、それらのヒントは、ソフトウェアにより、トランザクションを再び実行することを試みることは価値があるか、それとも、（例えば、アボートの原因が、いかなる将来の試みも失敗する公算が大きいであろうというようなことであるならば）フォールバック・パスを使用することを試みることは価値があるかを決定するために使用され得る。
【００３０】
上記で論考されたように、トランザクショナル比較及び破棄命令は、処理の２つ以上のスレッドが実行される、スレッド・レベル投機を遂行するために使用され得るものであり、各々のスレッドは、プログラム・ループのそれぞれの反復に対応し、各々のスレッドは、少なくとも１つのトランザクションを含む。そのような使用事例において、トランザクショナル比較及び破棄命令は、ターゲット・アドレスとして、プログラム・ループの複数の反復に対してトランザクションをコミットすることにおいてプロセスを追跡するためのループ反復コミット変数のアドレスを指定し得る。各々のスレッドは、トランザクションの中で、トランザクショナル比較及び破棄命令によりセットされる少なくとも１つの条件ステータス指示がテスト条件を満足させるかどうかに基づいて、トランザクションをアボートするべきかどうかを決定するための１つ又は複数の命令を含み得る。例えば、各々のスレッドは、トランザクションの中で、ｗｈｉｌｅループを含み得るものであり、そのループは、トランザクショナル比較及び破棄命令を使用して、ループ反復コミット変数を、現在のループ反復に固有な比較値に照らして比較し、結果的に生じる条件ステータス指示を、条件付き命令を使用してテストし、次いで、現在のループ反復が、コミットする準備が整っているということを、条件ステータス指示がまだ指示しないならば、条件付きでループの開始に戻るように分岐する。現在のループ反復が、コミットする準備が整っているとき、プログラム実行は、トランザクション終了命令に進行して、全体のトランザクションの結果をコミットし得る。
【００３１】
処理回路は、個別のバス・プロトコルによって定義されるバス・プロトコル・メッセージを使用して、メモリ・システムと相互作用し得る。トランザクショナル比較及び破棄命令に応答して、処理回路は、メモリ・システムにターゲット・データ値のロードを要請するために、第１のバス・プロトコル・メッセージの発行をトリガし得る。第１のバス・プロトコル・メッセージは、バス・プロトコル・メッセージを、メモリにデータ値のロードを要求する他のタイプの命令に対して発行される第２のバス・プロトコル・メッセージから区別する指示を含み得る。例えば、第１のバス・プロトコル・メッセージは、第２のバス・プロトコル・メッセージとは異なるメッセージ・タイプのものであり得るものであり、又は、第２のバス・プロトコル・メッセージと同じメッセージ・タイプのものであり得るが、第１のバス・プロトコル・メッセージを第２のバス・プロトコル・メッセージから区別するパラメータ若しくは制御フラグを指定し得る。トランザクショナル比較及び破棄命令によりトリガされるロードを、他のタイプの命令によりトリガされるロードから区別することは、バス・プロトコル・メッセージに対して有用であり得るものであり、なぜならば、トランザクショナル比較及び破棄命令にとって、一部の演算（他のやり方では、一般的なロード演算に対して、異なる処理要素に関して実行するトランザクションの間で、データ・コヒーレンシを確実にする、及び／又は、競合を管理するために要され得る）は、トランザクショナル比較及び破棄命令によりトリガされるロードに対して必要とされないことがあり、そのことが、いくらかの性能改善を可能にし得るからである。
【００３２】
例えば、さらにはトランザクショナル・メモリ・サポート回路を備える、さらなる処理要素を備えるシステムにおいて、第１のバス・プロトコル・メッセージ、又は、第１のバス・プロトコル・メッセージによりトリガされるさらなるバス・プロトコル・メッセージ（例えば、第１のバス・プロトコル・メッセージに応答してインターコネクトによりトリガされるスヌープ・メッセージ）の受信に応答して、次いで、さらなる処理要素が、現在、トランザクションを実行しており、そのトランザクションに対して、ターゲット・アドレスが、そのトランザクションに対する、追跡されるアドレスの書き込みセットの一部分であるならば、さらなる処理要素に関するトランザクションをアボートすることは必要でない。代わりに、さらなる処理要素においてのトランザクションは、（アボートに対するいかなる他の原因も検出されない限り）そのトランザクションが、そのトランザクションのトランザクション終了命令に達するまで、アボートされない様態を継続することを許され得る。このことは反直感的であることになり、なぜならば、相互排他に対しては、１つのトランザクションによるアドレスへの書き込みは、同じアドレスが別のトランザクションにより読み出された後にはコミットし得ないということを確実にするために、トランザクションであって、その書き込みセット内のアドレスを伴うトランザクションを、別のトランザクションが同じアドレスを読み出すときにアボートすることは必要であるということを、通常は誰しも予想することになるからである。
【００３３】
しかしながら、トランザクショナル比較及び破棄命令に対する予想される使用事例において、命令は、共有反復追跡変数が、要される値に達してしまうまで、続けて回るｗｈｉｌｅループの中で使用され得るものであり、そのため、トランザクショナル比較及び破棄命令と関連付けられるロードが、異なる処理要素に関して実行する別のトランザクションによりすでに書き込まれた、時期遅れの値を使用してサービスされるかどうかは問題ではない。トランザクショナル比較及び破棄命令によりロードされる値が時期遅れであるとしても、この事例において、ｗｈｉｌｅループは、他のトランザクションがコミットされるまで、いくらかの追加的なサイクルの間、単純に続けて回ることになり、更新された値が、次いで、ｗｈｉｌｅループを通った後続の段階において返され得る。さらなる処理要素においてトランザクションをアボートすることは、いかなる事例においても、単純に、古い値（アボートされたトランザクションにより更新されない）が返されることを結果的に生じさせることになるので、トランザクショナル比較及び破棄命令を実行する第１の処理要素においての影響は同じであるが、さらなる処理要素においてトランザクションをアボートしないことにより、性能は改善され得るものであり、なぜならば、トランザクションを再び、より遅くに再開始することは必要でないからである。
【００３４】
さらには、トランザクショナル比較及び破棄命令と関連付けられるロードをサービスするときに最新の値を提供することは、常に必要であるとは限らないので、このことが意味するのは、最新の値であることを保証される値が取得されなければならない場合、そのことは、一部の事例において、より長いアクセス・レイテンシを要し得るが、その場合より低いアクセス・レイテンシを伴うキャッシュからの（潜在的には時期遅れの）値を提供することにより、メモリ・システム（又はインターコネクト）は、より高速にロードをサービスすることができ得るということである。
【００３５】
ゆえに、トランザクショナル比較及び破棄命令によりトリガされるロードを、他のタイプのロードから区別するメッセージ・フォーマットを伴うバス・プロトコルを提供することは、性能改善を可能にするために有用であり得る。
【００３６】
対応するコンピュータ・プログラムは、データ処理のスレッドの実行のための命令実行環境を提供するように、ホスト・データ処理装置を制御するために提供され得るものであり、コンピュータ・プログラムは、データ処理のスレッドを処理するための処理プログラム論理と、（ハードウェア実施例に対して上記で論考されたトランザクションに対するサポートと同様の手立てで）処理プログラム論理により処理されるスレッドの中のトランザクションの実行をサポートするためのトランザクショナル・メモリ・プログラム論理とを含む。トランザクショナル・メモリ・プログラム論理は、トランザクションに対する、追跡されるワーキング・セットのアドレスのうちの１つへの、別のスレッドからの競合するアクセスが検出されるときに、トランザクションをアボートされるようにトリガするための競合検出プログラム論理を含み得る。コンピュータ・プログラムのプログラム論理は、上記で論考されたような対応する処理回路と同様の手立てで、トランザクショナル比較及び破棄命令の実行に応答し得る。
【００３７】
ゆえに、コンピュータ・プログラムであって、上記でコンピュータ・プログラムを実行するソフトウェアに、上記で論考された特徴を有する実際のハードウェア装置により提供されることになるものと同様の命令環境を付与することを、これらの特徴を提供する、いかなる実際のハードウェアも、コンピュータ・プログラムを実行するホスト・コンピュータ内に存しないことがあるとしても行う、コンピュータ・プログラムが提供され得る。代わりに、例えばシミュレータ又は仮想機械であり得るコンピュータ・プログラムが、プログラム論理（命令又はデータ構造のセットなど）を提供することにより、ハードウェア・アーキテクチャの機能性をエミュレートし得るものであり、そのプログラム論理は、汎用的ホスト・データ処理装置が、トランザクショナル・メモリ・サポートを伴う装置上で達成されることになる結果と矛盾しない様式で、トランザクショナル・メモリ・サポートを伴う装置上での実行に対して意図されるコードを実行することを可能にする。
【００３８】
コンピュータ・プログラムは、記憶媒体上に記憶され得る。記憶媒体は、非一時的記憶媒体であり得る。
【００３９】
図１は、ハードウェア・トランザクショナル・メモリ（ＨＴＭ：ｈａｒｄｗａｒｅ  ｔｒａｎｓａｃｔｉｏｎａｌ  ｍｅｍｏｒｙ）サポートを伴うプロセッサ・コア２を備えるデータ処理装置の実例を例示する。コア２は、命令を実行して、データ処理演算を履行するための処理論理４を有する。例えば、処理論理４は、加算、乗算、ＡＮＤ、ＯＲ、その他などの算術若しくは論理演算を履行するための算術／論理ユニット（ＡＬＵ：ａｒｉｔｈｍｅｔｉｃ／ｌｏｇｉｃ  ｕｎｉｔ）、浮動小数点オペランドに関する演算を遂行するための浮動小数点ユニット、又は、複数個のデータ要素を含むベクトル・オペランドに関するベクトル処理を履行するためのベクトル処理ユニットなどの、様々なタイプの処理演算を実行するための実行ユニットを含み得る。アーキテクチャ上のレジスタ６のセットが、処理論理４により実行される命令に対するオペランドを記憶するために、及び、実行される命令の結果を記憶するために用意される。アーキテクチャ上のレジスタ６は、先に実行された命令の結果の特性を指示する少なくとも１つのステータス値（例えば条件フラグ）を記憶するためのステータス・レジスタ７を含む。命令デコーダ８は、命令キャッシュ１０からフェッチされる命令をデコードして、処理論理４、又は、データ処理装置２の他の要素を制御するための制御信号を生成して、関連性のある演算を遂行する。ロード／ストア・ユニット１２が、さらには、データ・キャッシュ１４又は主メモリ１６からのデータ値をアーキテクチャ上のレジスタ６内へとロードするための（命令デコーダ８によりデコードされるロード命令に応答しての）ロード演算、及び、アーキテクチャ上のレジスタ６からのデータ値をデータ・キャッシュ１４又はメモリ１６に記憶するための（命令デコーダ８によりデコードされるストア命令に応答しての）ストア演算を遂行するために用意される。
【００４０】
プロセッサ・コア２は、さらには、ハードウェア・トランザクショナル・メモリ（ＨＴＭ）をサポートするために様々なリソースを提供するトランザクショナル・メモリ・サポート回路２０を有する。トランザクショナル・メモリ・サポート回路２０内のＨＴＭリソースは、例えば、トランザクションの投機的結果を記憶するための投機的結果記憶部２２と、トランザクションによりアクセスされる、アドレスのワーキング・セットを追跡するためのアドレス追跡回路２４と、トランザクションによりなされるデータ・アクセスと、他のスレッドによりなされるデータ・アクセスとの間の競合を検出することを、競合が検出されるときにトランザクションがアボートされ得るように行うための競合検出回路２６と、トランザクションの開始においてのアーキテクチャ上のレジスタ６からのアーキテクチャ上の状態データのスナップショットを記憶することを、この状態が、トランザクションがアボートされるときにトランザクションの投機的結果に上書きするように復元され得るように行うための復元状態記憶回路２８とを含み得る。一部の実例において、アドレスのワーキング・セットの追跡は、アドレスの読み出しセット（トランザクションにより読み出されるアドレスを表す）、及び、アドレスの書き込みセット（トランザクションにより書き込まれるアドレスを表す）の別々の追跡を含み得る。例えば、アドレスの読み出し／書き込みセットは、関連付けられるキャッシュ・ラインが、それぞれ所与のトランザクションに対する、読み出しセットの一部分であるか、それとも書き込みセットの一部分であるかを指示する、キャッシュ内のフラグをセットすることにより追跡され得る。
【００４１】
さらには、リソースは、トランザクションのネスティングのレベルを追跡するネスティング深さ値を記憶するためのネスティング深さレジスタ３０を含み得る。ネスティングされるトランザクション（その場合、第２のトランザクション開始命令は、第１のトランザクション開始命令の後に、ただし、第１のトランザクション開始命令に対応するトランザクション終了命令の前に遭遇される）を規定することができることは、プログラマ又はコンパイラに対して有用であり得る。このことは、コードのクリティカル・セクションが、第１のトランザクション開始命令を越えるコードの部分内への分岐が存するとしても、アトミックに取り扱われるということを確実にするために有用であり得る。しかしながら、投機的結果記憶部内に、アーキテクチャ上の状態の、複数個のチェックポイントを捕捉しなければならないことを回避するために、一部のマイクロアーキテクチャは、トランザクションのネスティングされるセットの「内方」トランザクションを事実上無視し、まさに第１のトランザクション開始命令に応答してアーキテクチャ上の状態のチェックポイントを捕捉するのみであり得る。トランザクション終了命令の前に生起するいかなる後続のトランザクション開始命令も、ネスティング深さレジスタ３０が、どれだけ多くのトランザクション開始命令が遭遇されたかを追跡するためにインクリメントされ得るということを除いて、事実上無視され得るものであり、そのことによって、トランザクション終了命令に遭遇することを機に、マイクロ・アーキテクチャは、どのトランザクション終了命令が、トランザクションのネスティングされるセットの外方トランザクションに関係するかを追跡することができる。ゆえに、トランザクション終了命令に遭遇するとき、ネスティング深さが１以上であるならば、トランザクション終了命令は無視され、ネスティング深さがゼロである（トランザクションが、ネスティングされるセットの外方トランザクションであるということを指示する）ならば、トランザクションはコミットされ得る。
【００４２】
図２は、トランザクショナル・メモリ・サポート回路２０及び処理論理４を使用して、所与のスレッドの中のトランザクションを実行することの実例を示す。トランザクションは、トランザクション開始命令（ｔｓｔａｒｔ）及びトランザクション終了命令（ｔｃｏｍｍｉｔ）により境界設定されるプログラム・コードのセクションである。図２において示されるように、トランザクション開始命令に応答して、アーキテクチャ上のレジスタ６内の現在のアーキテクチャ上の状態が、捕捉され、復元状態記憶回路２８内に記憶される。処理論理４は、ｔｓｔａｒｔ命令の後に続く、後続の命令の投機的実行を遂行することを始め、これらの命令が実行される際、それらの命令によりアクセスされるアドレスが、アドレス追跡回路２４により追跡され、競合検出回路２６が、追跡されるアドレスと、他のスレッドに対してなされるメモリ・アクセスのアドレスとの間の競合を検出する。トランザクションの中の命令の、少なくとも一部の投機的結果が、投機的結果記憶回路２２の中に記憶される。例えば、ストア命令ＳＴＲに応答してキャッシュに、又はメモリに記憶される値は、トランザクションが保留中のままである間、投機的結果記憶部２２内で保たれ得る。トランザクション終了命令（ｔｃｏｍｍｉｔ）に、その間に、アボート・イベントが発生することなく達するならば、トランザクション終了命令に応答して、投機的結果がコミットされる。トランザクションをコミットすることを機に、そのスレッドに対して投機的結果記憶部２２内に記憶されるいかなる結果も、データ・キャッシュ１４又はメモリ１６に書き込まれ得るものであり、復元状態２８は、破棄され得る、又は、上書きされることを許され得るものであり、なぜならば、アーキテクチャ上の状態を、トランザクション開始命令が遭遇された前のポイントに巻き戻すことは、もはや必要とされないからである。
【００４３】
他方で、例えば、別のスレッドが、トランザクションによりすでにアクセスされたアドレスにアクセスするときに、競合が競合検出回路２６により検出されるときに、アボート・イベントが発生するならば、トランザクションのアボートがトリガされ、復元状態記憶部２８からの復元状態が、アーキテクチャ上のレジスタ６に対して復元される。アボート・イベントの他の原因は、例えば、トランザクションの中で実行されることを可能とされない命令の実行、投機的結果、若しくは、所与のトランザクションにより要されるアドレスを統御するための、投機的結果記憶部２２若しくはアドレス追跡回路２４の中の不十分なリソース、又は、割り込みがトランザクションの間に受信されることを含み得る。
【００４４】
図３は、ステータス・レジスタ７において指示される条件ステータス指示４０の実例を概略的に例示する。命令デコーダ８によりサポートされる命令セット・アーキテクチャは、算術／論理演算を遂行し、結果の特性に基づいて条件ステータス４０をセットするための算術若しくは論理命令、又は、２つの値を比較し、比較の結果に基づいて条件ステータス指示４０をセットするための専用比較命令であり得る、いくつかのタイプの条件セッティング命令を含み得る。比較命令は、事実上、比較されることになる値の一方を他方から減算し、減算結果に基づいて条件フラグ４０をセットする減算命令であり得る。この実例において、４つの条件ステータス指示４０：先の処理結果が負であったかどうかを指示する負フラグＮ、先の処理演算の結果がゼロであったかどうかを指示するゼロ・フラグＺ、先の処理演算が、結果の最上位ビットから外へのキャリーを併せもっていたかどうかを指示するキャリー・フラグＣ、及び、（最上位ビットが結果の符号を指示する符号ビットを表す場合）処理演算が、２番目に上位のビットから最上位ビットへのオーバーフローを伴う符号付き結果を生み出すならばセットされるオーバーフロー・フラグＶが存する。
【００４５】
図３の下側の部分において、表において示されるように、いくつかの条件コードが、条件ステータス指示に対して、値の様々なセットに対応して割り当てられ得る。各々の条件コードの意味が、条件ステータス指示４０の対応するフラグ値とともに、表において指示される。条件付き命令は、対応する条件付き演算が履行されるために満足させられることになる個別のテスト条件（例えば、ＥＱ、ＮＥ、その他）を指示するパラメータを指定し得る。条件付き命令のテスト条件パラメータは、図３において指定される条件コードのうちの１つを規定し得る。
【００４６】
図４において示されるように、図１において示されるプロセッサ・コア２は、マルチ・プロセッサ・システムにおいての複数個のコア２のうちの１つであり得る。プロセッサ・コア２は、コアの間の通信、及び、メモリ・システム１６へのアクセスを統御し得るインターコネクト５０を介して接続され得る。一部の事例において、インターコネクト５０は、異なるコア２のそれぞれのキャッシュ１０、１４の間のコヒーレンシをさらには管理するコヒーレント・インターコネクトであり得る。
【００４７】
一部の実例において、コア２のうちの少なくとも２つは、図１において示されるハードウェア・トランザクショナル・メモリ・リソース２０を含み得る。一部の事例において、コア２のすべてが、そのようなハードウェア・トランザクショナル・メモリ・リソース２０を有し得る。しかしながら、このことは不可欠ではなく、一部の事例において、さらには、トランザクションを実行する能のない一部のプロセッサ・コアが存し得る。図４の実例において、個々のコア２の各々は、個々のプロセッサ・コア２のマイクロ・アーキテクチャの中にトランザクショナル・メモリ・サポート回路２０を有するように示されるが、このことは不可欠ではない。一部の事例において、いくらかのトランザクショナル・メモリ・リソースが、プロセッサ・コアの間で共有され得る。例えば、復元状態を捕捉する、又は、アドレスを追跡するための、いくらかの共通記憶部が用意され得るものであり、その記憶部は、複数個のプロセッサ・コアの間で使用のために共有され得る。
【００４８】
図５は、スレッド・レベル投機（ＴＬＳ：ｔｈｒｅａｄ  ｌｅｖｅｌ  ｓｐｅｃｕｌａｔｉｏｎ）を履行するために複数個のプロセッサ・コア２上で実行するトランザクションの使用を概略的に例示する。ＴＬＳは、ランタイムにおいて反復の間の依存性がないことが予想されるプログラム・ループの実行をスピード・アップするための技法であるが、その場合、反復は、コンパイル時において非依存的であることは証明され得ない。例えば、そのようなプログラム・ループは、プログラムに入力されるデータに依存するアドレス・アクセス・パターンを含む、又は、コンパイラに利用可能な静的分析により曖昧さが除かれ得ないメモリへの間接アクセスをなすことがある。ゆえに、しばしば、そのようなループは、複数個の反復が並列に遂行される様態で実行することができ得るが、時には、競合が、異なる反復によりアクセスされるアドレスの間で生起し得るものであり、そうであるならば、このことは、正しくない値をより遅くの反復が使用することを防止するために検出されることが、その値が、より遅くの反復によりすでに読み出された後に、その値が、ループ内のより早い反復により更新されるときに行われることを必要とし得る。
【００４９】
上記で論考されたトランザクショナル・メモリ・リソース２０は、アドレス競合チェッキングを履行することに対して有用であり得る。ゆえに、図５において示されるように、所与のループに対して、各々の反復は、プロセッサ・コア２のうちの１つ上で遂行される処理の個別のスレッドに割り振られ得るものであり、その場合、反復の演算は、処理の対応するスレッド内で遂行されるトランザクション６０の中で遂行される。例えば図５において、ループの反復０に対応する演算は、コア０上のスレッド内で遂行されるトランザクション６０−０に割り振られており、反復１に対応する演算は、コア１上のスレッド内で遂行されるトランザクション６０−１に割り振られており、ループの他の反復に対しても同様である。この実例において、トランザクショナル・メモリをサポートする４つのプロセッサ・コアが存し、そのため、４つの反復が並列に処理され得る。
【００５０】
所与のループ反復に対応するトランザクションは、ループの先立つ反復が、さらにはその先立つ反復のトランザクションをコミットされてしまうまでコミットされ得ないものであり、そのことによって、競合が、１つの反復によりアクセスされるアドレスと、別の反復によりアクセスされるアドレスとの間で検出されるならば、より遅くの反復は、競合するアドレスを有する、より早い反復がコミットしてしまうと、アボートされ、再開始され得る。このことは、総体的な結果が、反復のすべてが逐次的な様式で１つずつ実行された場合と同じであるということを確実にする。どの反復がコミットされたかを追跡する助けとなるように、ループ反復コミット変数７０が、メモリ・システム１６内に記憶され、トランザクション６０の各々は、ループ反復コミット変数７０の現在の値をチェックして、要される、より早い反復に対するトランザクションがコミットされたかどうか、及びゆえに、現在のトランザクションがさらにはコミットし得るかどうかを決定するための、いくらかの命令を含む。例えば、各々のトランザクションは、ｗｈｉｌｅループを含み得るものであり、そのループは、ループ反復コミット変数が、関連性のある先立つ反復がコミットしたということを指示するまでループし、次いで、トランザクションが、トランザクション終了命令を実行することによりコミットされることを可能とする。ループ反復コミット変数７０が表される個別の形式は変動し得る。例えば、ループ反復コミット変数は、一部の事例において、最も近時にコミットされた反復の反復番号を指示し得る。他の代替案において、ループ反復コミット変数７０は、コミットされることになる次の反復の反復番号を指示し得る。一般的に、ループ反復コミット変数７０は、コードが、どの反復がコミットする次のものであるかを推測することを可能にする、任意の値をとり得る。
【００５１】
ゆえに、トランザクション６０の各々は、ループ反復コミット変数をチェックして、現在のトランザクションをコミットすることが可能であるかどうかを決定するための、いくらかの命令を（トランザクション・コードの終了の方に）含む。図５の実例において、反復０から５に対応するトランザクション６０は、いかなる競合も、より早いトランザクションによりアクセスされるアドレスに照らして検出されることなく実行し、そのため、これらのトランザクションは、遅延なしにコミットすることができる。すなわち、反復０から５に対するトランザクション６０−０から６０−５は、互いから非依存的であったアドレスにアクセスした。
【００５２】
しかしながら、反復６に対するトランザクション６０−６を実行するとき、競合が、反復６においてアクセスされるアドレスと、反復５においてアクセスされるアドレスとの間で検出される。このことは、反復６に対応するトランザクション６０−６のアボートをトリガする。トランザクション６０−６を実行するプロセッサ・コア２は、次いで、ループ反復５に対するトランザクション６０−５がすでにコミットしてしまうと、ループ反復６に対応するトランザクション６０−６’を再試行する。
【００５３】
しかしながら、ループ反復６に対するトランザクション６０−６がアボートされ、再試行されることの帰結として、このことは、次いで、後続の反復７、８、及び９に対応するトランザクションに対するコミットを遅延させるものであり、なぜならば、それらの後続の反復は、それらがコミットし得る前に、ループ反復６がコミットすることに対して待機しなければならないからである。ゆえに、トランザクション６０−７、６０−８、及び６０−９の間の実際の処理演算が、いかなる他の反復についても、その反復においてアクセスされるアドレスに非依存的であるアドレスにアクセスしているとしても、これらのトランザクションは、トランザクション６０−６’が済んでしまうまで、コミットすることを防止される。
【００５４】
ゆえに、一般的に、ＴＬＳを実現するためにトランザクションの使用をサポートするために、異なるトランザクションが、プログラム・ループの重んじられる反復のコミットメントを追跡するための共有変数７０にアクセスすることを可能とするために、機構が必要とされる。共有ループ反復コミット変数７０にアクセスするためのメモリからのロードは、同じアドレスについて読み出し／書き込みを行ういかなる他のトランザクションも、そのトランザクションのアボートをトリガしないということが望ましいものであり、なぜならば、さもなければ、プログラム・ループの反復の各々は、１つずつ逐次的に遂行されなければならないことになり、そのことは、そもそもＴＬＳを使用して、同じプログラム・ループの異なる反復を並列化することのまさに利点を消失させることになるからである。
【００５５】
複数個のトランザクションに対する共有変数へのそのような非アボートのアクセスをサポートするための１つの手法は、トランザクションが、トランザクションをアボートすることなくトランザクションの途中で一時停止されることを可能とする命令セット・アーキテクチャを提供することであり得るものであり、そのことによって、トランザクションが一時停止される時間の間、いくつかのメモリ・アクセスがなされ得るものであり、そのことは、対応するアドレスが、それらのアドレスを、トランザクションの、アドレスのワーキング・セットに追加することなく、メモリからアクセスされることを結果的に生じさせる。
【００５６】
そのようなアーキテクチャにおいて、一時停止の期間の間、他のスレッドが、現在のトランザクションの一時停止より前に、アドレスのワーキング・セットに追加されたアドレスのうちの１つにアクセスしたならば、トランザクションは、一時停止の期間の後に続くトランザクションの再開を機にアボートされる。しかしながら、一時停止の間、一時停止されるトランザクションそれ自体によりアクセスされるアドレスは、アドレスのワーキング・セットに追加されない。この命令セット・アーキテクチャ機能性は、スレッドを一時停止することを、そのスレッドが共有ループ反復コミット変数をチェックすることを必要とする直前に行うことにより、ＴＬＳをサポートするために使用され得るものであり、そのことによって、その変数へのアクセスは、アドレスのワーキング・セット内で追跡されることになるアドレスとして取り扱われないことになる。しかしながら、この手法に関する問題は、トランザクションの中間でトランザクションを一時停止し、再開するために、マイクロアーキテクチャ上のサポートを提供することは、要される追加的なハードウェア論理の見地において、相対的に高価であるということである。これは、一部のアーキテクチャにおいて採用される公算が小さいものであり得る重厚な手法である。
【００５７】
共有変数がチェックされることを、トランザクションに対する、アドレスのワーキング・セット内でそのアドレスを追跡することなく可能にするための別の手法は、指定されるメモリ・アドレスへの一般的なロード・アクセスを可能にする非トランザクショナル・ロード命令を提供することであり得るものであり、そのことによって、アドレス位置から読み出されるデータ値は、プロセッサ・コアに返され、プロセッサ・コア２のアーキテクチャ上のレジスタ６内に配置されるが、対応するメモリ・アドレスが、アドレス追跡回路２４により追跡されるアドレスのワーキング・セットに追加されることを伴わない。この手法は望ましくないものであり得るものであり、なぜならば、コードが、随意のアドレスへのロードを実行することを、そのアドレスが、トランザクションに対する、アドレスのワーキング・セット内で追跡されることなく行う一般的な能力を提供することは、現実にはトランザクショナル様式で処理されることを意図されない演算に対する、トランザクションの不適切な使用につながり得るからである。このことは問題につながり得るものであり、なぜならば、そのことは、トランザクションが、実際上は、プログラマ又はコンパイラにより書き表されるプログラム・コードの中で、はるかに長い間保留中のままであることを結果的に生じさせ得るからであり、そのことは、利用可能なトランザクショナル・リソース２０にストレスをかけ得る。非トランザクショナル・ロードをサポートしないことにより、プログラマ／コンパイラは、どの演算が現実にはトランザクション開始／終了命令により境界設定されることを必要とするかを、より慎重に考慮することを強いられる。さらには、プログラマ又はコンパイラが、現実にはトランザクショナルにアクセスされるべきである変数にアクセスするために非トランザクショナル・ロードを不注意にも使用し得るということは、さらには公算がより大きいものであり、そのことによって、その変数のアドレスは、アドレスのワーキング・セットに追加され、そのことによって、競合が検出され得るものであり、トランザクションは、必要ならばアボートされ得る。ゆえに、対応するアドレスが、トランザクションに対する、アドレスのワーキング・セット内で追跡されることを結果的に生じさせない、トランザクションの中のメモリへのロードに対する一般的なアーキテクチャ上のサポートを提供することは、一般的には望ましくないものであり得る。
【００５８】
図６は、これらの問題に対処し得るトランザクショナル比較及び破棄命令を示す。命令デコーダ８は、個別のタイプの命令エンコーディング（コードの命令）を、トランザクショナル比較及び破棄命令を表すと認識する。そのような命令を検出することに応答して、デコーダ８は、メモリ・システム１４、１６からのターゲット・データ値８０を、トランザクショナル比較及び破棄命令のパラメータにより指定されるターゲット・アドレス８２により識別される位置からロードするように、並びに、ターゲット・データ値８０を、アーキテクチャ上のレジスタ・ファイル６のソース・レジスタ８６の中で指定される比較値８４と比較するように、処理論理４を制御するための制御信号を生成する。トランザクショナル比較及び破棄命令は、命令のエンコーディングの中のこのソース・レジスタ８６を識別する。ターゲット・アドレス８２は、絶対アドレス、又は、トランザクショナル比較及び破棄命令それ自体のアドレスに相対的に識別される相対アドレスであり得るものであり、１つ又は複数のレジスタ内の、１つ又は複数の即値に基づいて識別され得る。ターゲット・データ値８０を比較値８４と比較することの結果に基づいて、処理論理４は、ステータス・レジスタ７の条件ステータス指示４０を、比較の結果に依存する値にセットする。処理論理４は、次いで、ターゲット・データ値８０を、プロセッサ・コア２のアーキテクチャ上のレジスタ６のいずれにも書き込むことなく、及び、ターゲット・アドレス８２を、アドレス追跡回路２４により追跡されるアドレスのワーキング・セット（読み出しセット）に追加することなく、ターゲット・データ値８０を破棄する。ゆえに、トランザクショナル比較及び破棄命令を実行するコードは、ターゲット・データ値８０の実際の値へのアクセスを獲得するのではなく、比較値８４との比較に基づいてセットされた、結果的に生じる条件フラグ４０を確認するにすぎない。例えば、条件フラグ４０は、比較値８４が、ターゲット・データ値８０より大であったか、それともターゲット・データ値８０未満であったか、それともターゲット・データ値８０に等しかったかを指示し得る。
【００５９】
ゆえに、トランザクションを使用して、図５において示されるようなＴＬＳを実現するとき、トランザクショナル比較及び削除命令は、ループ反復コミット変数７０をチェックし、その変数を、現在のトランザクションにより遂行されている処理の反復番号を（直接的に、又は間接的に）指示する、レジスタ内で指定される比較値に照らして比較するために、各々のトランザクションの終了の方で使用され得る。このことは、トランザクションが、それが、コミットする準備が整っている、又は、他のトランザクションがコミットしてしまうまで待機するべきであるか否かを決定することを可能とする。比較及び破棄命令は、ターゲット・データ値８０それ自体への一般的なアクセスを提供しないので、このトランザクションがプログラマ又はコンパイラにより悪用され得るということは、公算がより小さく、比較及び破棄命令に対するアーキテクチャ上のサポートは、トランザクションを通しの中程で一時停止する能力をサポートすることは必要でないということを意味し、そのことは、命令セット・アーキテクチャを実現することのマイクロアーキテクチャ上のオーバーヘッドを大幅に低減し得る。
【００６０】
図７は、トランザクションを処理する方法を示すフロー線図を例示する。ステップ１００において、トランザクション開始命令が、デコードされ、実行される。応答して、ステップ１０２において、復元状態記憶部２８は、アーキテクチャ上のレジスタ６内のアーキテクチャ上の状態の現在のスナップショットを、トランザクションに対して維持されることになる復元状態として捕捉する。一部の事例において、このことは、捕捉されるアーキテクチャ上の状態が、別々のレジスタに書き込まれることを結果的に生じさせ得るが、他の実現例は、命令セット・アーキテクチャにおいてサポートされるレジスタの数より大である数のレジスタを有する、アーキテクチャ上のレジスタ６に対する物理レジスタ・ファイルを使用し得るものであり、レジスタ・リネーミングが、アーキテクチャにより要される個別のアーキテクチャ上のレジスタに対して、どの個別の物理レジスタがデータ値を記憶するために考慮されるかを再マッピングするために使用されるということが理解されるであろう。そのようなシステムにおいて、レジスタ・リネーミングは、トランザクション開始命令に遭遇することを機に、アーキテクチャ上のレジスタから物理レジスタへのマッピングを変化させるために使用され得るものであり、そのことによって、アーキテクチャ上の状態の、先に捕捉されたチェックポイントが、事実上、現在のアーキテクチャ上の状態それ自体と同じ物理レジスタ・ファイルの中で維持され得るものであり、そのことは、必要ならば、状態の復元をスピード・アップし得る。この事例において、復元状態の捕捉は、レジスタ・マッピングを変化させることにより行われ得るものであり、そのため、物理レジスタへの／からのデータの、いかなる実際の転送も必要としないことがある。
【００６１】
ステップ１０４において、トランザクション開始命令の後に続く命令の投機的実行が始まる。命令はトランザクションの中で投機的に実行されるが、一部の投機的命令の結果は、投機的結果記憶回路２２に割り振られ得る（例えば、データをメモリに記憶するためのストア命令の結果）。投機的に実行される命令によりアクセスされるアドレスは、アドレス追跡構造２４に追加され得るものであり、トランザクションが保留中のままである間、トランザクションに対してアドレス追跡構造２４により維持される、アドレスのワーキング・セットへの、他のスレッドによるアクセスが監視され得る。
【００６２】
ステップ１０６において、競合検出回路は、アボート・イベントが発生したかどうかを検出する。例えば、アボート・イベントは、アドレス追跡構造２４により追跡されるワーキング・セットのアドレスのうちの１つにアクセスする別のスレッド、割り込み若しくは例外の発生、トランザクションの中で実行されることを可能とされない命令タイプの実行、又は、アドレス追跡２４若しくは投機的結果記憶部２２に対して利用可能なリソースが最大限に利用され、そのことによって、トランザクションを安全に実行することを継続することがもはや可能でない（なぜならば、記憶されることを必要とし得る、一部の追加的アドレス又は投機的結果は、これ以上追跡され得ないことがあるからである）ということであり得る。他のタイプのアボートが、さらには、命令セット・アーキテクチャの制約に依存して規定され得るということが理解されるであろう。アボート・イベントが発生するならば、ステップ１０８において、トランザクションはアボートされ、復元状態記憶部２８内に記憶される復元状態が、システムの現在のアーキテクチャ上の状態を表すアーキテクチャ上のレジスタ６に対して復元される。処理は、次いで、復元されたアーキテクチャ上の状態により表される、実行することのより早いポイントから再開し得る。一部の事例において、トランザクションをアボートすることを機に、マイクロアーキテクチャは、なぜトランザクションがアボートされるかの理由を指示するヒントを提供し得るものであり、そのヒントは、ソフトウェア内の例外ハンドラにより、要される演算をトランザクションとして再び実行することを試みることは価値があるかどうか、又は、フォールバック・パス（トランザクションを使用しない）を実行することへと後退して、対応する処理演算を実行することが好ましいかどうかを決定するために使用され得る。
【００６３】
アボート・イベントが、ステップ１０６において発生しないならば、ステップ１１０において、何らかのトランザクション終了命令が、デコードされ、実行されたかどうかが決定される。そうでないならば、方法は、ステップ１０６に戻るようにループして、アボート・イベント、又は、トランザクション終了命令の実行のいずれかを待つ。命令の投機的実行、並びに、アドレスのワーキング・セット及び潜在的競合の追跡は、アボート・イベントが発生するか、トランザクション終了命令に達するかのいずれかまで、ステップ１０４から１１０の全体を通して継続するということが理解されるであろう。
【００６４】
トランザクション終了命令が実行されるとき、ステップ１１２において、トランザクションのいかなる投機的結果も、状態に対してコミットされ、先に捕捉された復元状態が、破棄される、又は、上書きされることを許される。
【００６５】
図８は、上記で論考されたようなトランザクショナル比較及び破棄命令の処理を示すフロー線図である。ステップ１２０において、トランザクションの中で命令を投機的に実行する間、命令デコーダ８は、ターゲット・アドレス及び比較値を指定する、トランザクショナル比較及び破棄命令を識別する。応答して、命令デコーダ８は、図８の後続のステップを遂行するように、処理論理４及びロード／ストア・ユニット１２（処理回路として一括して説明され得る）を制御するための制御信号を生成する。
【００６６】
ステップ１２２において、ロード／ストア・ユニット１２は、トランザクショナル比較及び破棄命令により指定されるターゲット・アドレスに対応する、キャッシュ１４又はメモリ・システム１６内のメモリ位置からのターゲット・データ値のロードをトリガする。ターゲット・データ値がメモリから返されるとき、ステップ１２４において、処理論理４は、ターゲット・データ値８０を、トランザクショナル比較及び破棄命令により指定されるレジスタから取得される比較値８４と比較する。例えば、比較は、ターゲット・データ値及び比較値の一方を他方から減算することを必然的に含み得る。ステップ１２６において、処理論理は、ステップ１２４においての比較の結果に依存して、ステータス・レジスタ７の条件ステータス・フラグ４０をセットする。例えば、Ｚフラグは、ターゲット値及び比較値が等しかったならばセットされ得るものであり、Ｃフラグは、ターゲット・データ値及び比較値の一方が他方以上であったならばセットされ得る、等々である。ステップ１２８において、ターゲット・データ値は、次いで、ターゲット・アドレス８２を、アドレス追跡回路２４により追跡される、トランザクションの、アドレスの読み出しセットに追加することなく、及び、ターゲット・データ値８０を、アーキテクチャ上のレジスタ６のいずれにも書き込むことなく破棄される。
【００６７】
ゆえに、トランザクショナル比較及び破棄命令を実行したことで、条件付き分岐命令などの後続の条件付き命令が、次いで、トランザクションがコミットすることを可能とするために、条件ステータス指示４０の値をテストして、ターゲット・データ値に依存して、後続のトランザクション終了命令が実行されるべきであるかどうか、又は、プログラム・フローが、戻るようにループして、ターゲット・データ値が、要される条件を満たすかどうかを再びチェックするべきであるかどうかを決定し得る。このことは、図５において示されるようなスレッド・レベル投機をサポートすることに対して非常に有用である。
【００６８】
図９及び１０は、複数個のプロセッサ・コア２上の、メモリ・システム１６へのデータ・アクセス、並びに、トランザクションの間のコヒーレンシ及び競合を管理するために、インターコネクト５０により使用されるバス・プロトコルによりサポートされるバス・プロトコル・メッセージの実例を示す。図９は、コア０上のトランザクションが、上記で論考されたタイプのトランザクショナル比較及び破棄命令を実行するときにトリガされるバス・プロトコル・メッセージの実例を示す。コア０においてのトランザクショナル比較及び破棄命令の実行は、インターコネクト５０への第１のタイプの読み出しバス・プロトコル・メッセージの発行をトリガする。メッセージ種、トランザクショナル比較及び破棄命令により指定されるターゲット・アドレスに対応するアドレスＸ。第１のタイプの読み出しバス・プロトコル・メッセージに応答して、インターコネクト５０は、第１のタイプのスヌープ・メッセージを他のコアに送出して、それらのコアにおいてキャッシュされるデータのコヒーレンシ・ステータスに対してチェックする。代替的には、インターコネクト５０が、他のコアにおいてキャッシュされるデータを少なくとも部分的に追跡する追跡データを維持する、及び、その追跡データに基づいて、アドレスＸに対するデータがいかなる他のコアによってもキャッシュされないと決定し得るならば、スヌープ・メッセージを送出することは必要でないものであり得る。インターコネクト５０は、他のプロセッサ・コア２においてのキャッシュから、又は、インターコネクトの中のシステム・キャッシュから、又は、メモリ・システム１６からのいずれかで取得され得る、ターゲット・アドレスに対応するデータを取得する。データは、コア０に返され、トランザクショナル比較及び破棄命令の比較値に照らしての比較のために使用され、次いで、データをアーキテクチャ上のレジスタに書き込むこと、又は、アドレスＸをトランザクションの読み出しセット内へと追加することなく破棄される。
【００６９】
トランザクショナル比較及び破棄命令がコア０上で実行されるとき、トランザクションであって、それに対してアドレスＸが、トランザクションの、アドレスの書き込みセット内で指定される、トランザクションを実行している別のコア（例えばコア１）が存し得る（すなわち、コア０上のトランザクションは、アドレスＸへの更新された値の書き込みをすでに要請しており、更新された値は、トランザクションがコミットされるまで、コア１の投機的結果記憶部２２内にバッファリングされ得る）。コア０により要されるデータは、トランザクショナル比較及び破棄命令に対する比較のために、例えば、ＴＬＳを実現するトランザクションがコミットする際にインクリメントされることが予想されるループ反復コミット変数７０のチェッキングのために使用されているのみであるので、コア１上のトランザクションによりまだ更新されていない時期遅れのデータを返すことは問題ではなく、なぜならば、このことは、単純に、コア０上のトランザクションにおいてのｗｈｉｌｅループが、コア１上のトランザクションがコミットし、最新の値が利用可能になるまで、いくらかの追加的な反復に対して続けて回ることにつながることになるからである。実際上は、共有ループ反復コミット変数７０への書き込みは、トランザクションの終了の付近であることが予想されることになるので、書き込みがコア１において投機的なままである期間は、相対的に短くあり得るものであり、そのため、コア０においてのｗｈｉｌｅループが、多くの追加的なサイクルに対して続けて回ることを必要とすることになるということは、公算が小さい。ゆえに、コア１においての性能を改善するために、図９において示される第１のタイプの読み出しバス・プロトコル・メッセージによりトリガされるスヌープ・メッセージに応答して、コア１上のトランザクションをアボートすることは、第１のタイプの読み出しバス・プロトコル・メッセージにより指定されるアドレスＸがトランザクションの書き込みセット内にあったとしても、必要ではない。
【００７０】
対照的に、図１０において示されるように、コア０が、アドレスＸを指定する別のタイプのロード命令を実行するとき、第２のタイプの読み出しバス・プロトコル・メッセージが、インターコネクト５０に発行される。第２のタイプの読み出しメッセージは、任意の手立てで、例えば、メッセージ・タイプ・インジケータにより、又は、メッセージのさらなるパラメータにより、第１のタイプの読み出しメッセージから区別され得る。第２のタイプの読み出しメッセージに応答して、図９においてと比較して、異なるタイプのスヌープ・メッセージが、他のコアに送出される。第２のタイプの読み出しバス・プロトコル・メッセージが送出されるとき、別のコア（例えばコア１）が、現在トランザクションを実行しており、アドレスＸが、そのトランザクションの書き込みセット内にあるならば、そのトランザクションは、相互排他を守り、コア１上のトランザクションが、アドレスＸがコア０上のトランザクションにより読み出された後にアドレスＸへの書き込みをコミットし得ないということを確実にするために、アボートされる。
【００７１】
要約すると、インターコネクト上のコヒーレンス／バス・プロトコル・サポートは、図９において示される第１のタイプの読み出しメッセージを使用して、返される値が、値をコアのアーキテクチャ上のレジスタ内へとロードする、より一般的なタイプのロードと対比されるものとして、比較において使用されるのみであることになるということを表し得る。このことが意味するのは、コア０が、トランザクション１において比較及び破棄命令を使用し、アドレスが、現在、コア１においてのトランザクション２の書き込みセット内にあり、そのため投機的に修正されるならば、インターコネクトは、トランザクション２をアボートし、ともかく古いデータによって応答することよりむしろ、（例えば、共有キャッシュからの）古い値によって応答することに決め得るということである。このことは、コア０及びコア１の両方において性能改善を可能にし得るものであり、コア０において、データは、それが共有キャッシュから、より低いアクセス・レイテンシを伴って返され得るならば、より高速に返され得るものであり、コア１において、トランザクションは、アボートされない様態を継続し得るものであり、そのトランザクションがアボートされ、より遅くに再試行されなければならなかった場合より早くコミットに達し得る。
【００７２】
図１１は、使用され得るシミュレータ実現例を例示する。より早く説明された実施例は、本技法を、当該の技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法の見地において実現するが、コンピュータ・プログラムの使用を通して実現される、本明細書において説明される実施例による命令実行環境を提供することが、さらには可能である。そのようなコンピュータ・プログラムは、しばしば、シミュレータと呼称されることが、それらのシミュレータが、ハードウェア・アーキテクチャのソフトウェア・ベースの実現例を提供する限りにおいて行われる。シミュレータ・コンピュータ・プログラムの異形は、エミュレータ、仮想機械、モデル、及び、動的バイナリ・トランスレータを含むバイナリ・トランスレータを含む。典型的には、シミュレータ実現例は、シミュレータ・プログラム３１０をサポートする、ホスト・オペレーティング・システム３２０を任意選択で作動させる、ホスト・プロセッサ３３０上で作動し得る。一部の配置構成において、ハードウェアと、提供される命令実行環境、及び／又は、同じホスト・プロセッサ上で提供される複数個の別個の命令実行環境との間に、シミュレーションの複数個の層が存し得る。歴史的には、強力なプロセッサが、程よいスピードで実行するシミュレータ実現例を提供するために要されてきたが、そのような手法は、互換性又は再使用の理由のために、別のプロセッサに対してネイティブなコードを作動させることの所望が存するときなど、所定の状況においてはもっともなことであり得る。例えば、シミュレータ実現例は、ホスト・プロセッサ・ハードウェアによりサポートされない追加的な機能性を伴う命令実行環境を提供し、又は、典型的には異なるハードウェア・アーキテクチャと関連付けられる命令実行環境を提供し得る。シミュレーションの概観は、「Ｓｏｍｅ  Ｅｆｆｉｃｉｅｎｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｉｍｕｌａｔｉｏｎ  Ｔｅｃｈｎｉｑｕｅｓ」、Ｒｏｂｅｒｔ  Ｂｅｄｉｃｈｅｋ、Ｗｉｎｔｅｒ  １９９０  ＵＳＥＮＩＸ  Ｃｏｎｆｅｒｅｎｃｅ、５３〜６３頁において与えられる。
【００７３】
実施例が、個別のハードウェア構築物又は特徴を参照して先に説明された程度まで、シミュレートされる実施例において、等価の機能性が、適したソフトウェア構築物又は特徴により提供され得る。例えば、個別の回路は、シミュレートされる実施例において、コンピュータ・プログラム論理として実現され得る。同様に、レジスタ又はキャッシュなどのメモリ・ハードウェアは、シミュレートされる実施例において、ソフトウェア・データ構造として実現され得る。先に説明された実施例において言及されたハードウェア要素のうちの１つ又は複数が、ホスト・ハードウェア（例えば、ホスト・プロセッサ３３０）上に存在する配置構成において、一部のシミュレートされる実施例は、適する場合に、ホスト・ハードウェアの使用をなし得る。
【００７４】
シミュレータ・プログラム３１０は、コンピュータ可読記憶媒体（非一時的媒体であり得る）上に記憶され得るものであり、シミュレータ・プログラム３１０によりモデリングされているハードウェア・アーキテクチャのアプリケーション・プログラム・インターフェイスと同じである、ターゲット・コード３００（アプリケーションと、オペレーティング・システムと、ハイパーバイザとを含み得る）に対するプログラム・インターフェイス（命令実行環境）を提供する。かくして、上記で説明された、あらかじめ決定されたタイプのロード命令及びロード／ストア排他的命令を含む、ターゲット・コード３００のプログラム命令は、シミュレータ・プログラム３１０を使用する命令実行環境の中から実行され得るものであり、そのことによって、上記で論考された装置２のハードウェア特徴を実際には有さないホスト・コンピュータ３３０は、これらの特徴をエミュレートし得る。シミュレータ・プログラム３１０は、処理論理４、ハードウェア・トランザクショナル・メモリ・リソース２０、及び競合検出回路２６それぞれに対応する機能性を提供する、処理プログラム論理３１２と、トランザクショナル・メモリ・プログラム論理３１４と、競合検出プログラム論理３１６とを含み得る。
【００７５】
本出願において、単語「〜するように構成される」は、装置の要素が、規定される動作を履行することができる構成を有するということを意味するように使用される。この文脈において、「構成」は、ハードウェア又はソフトウェアの相互接続の、配置構成又は様式を意味する。例えば、装置は、規定される動作を提供する専用ハードウェアを有し得るものであり、又は、プロセッサ若しくは他の処理デバイスは、機能を遂行するようにプログラムされ得る。「するように構成される」は、装置要素が、規定される動作を提供するために任意の手立てで変化させられることを必要とするということを含意しない。
【００７６】
本発明の例示的な実施例が、添付図面を参照して、本明細書において詳細に説明されたが、本発明は、それらの寸分違わない実施例に限定されないということ、並びに、様々な変化及び変更が、それらの実施例において、当業者により、添付される特許請求の範囲により定義されるような本発明の範囲及び趣旨から逸脱することなくもたらされ得るということが理解されるべきである。
【図１】
2021531555.tif 000003
【図２】
2021531555.tif 000004
【図３】
2021531555.tif 000005
【図４】
2021531555.tif 000006
【図５】
2021531555.tif 000007
【図６】
2021531555.tif 000008
【図７】
2021531555.tif 000009
【図８】
2021531555.tif 000010
【図９】
2021531555.tif 000011
【図１０】
2021531555.tif 000012
【図１１】
2021531555.tif 000013
【国際調査報告】
2021531555.tif 000014
2021531555.tif 000015