(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-05-17
(45)【発行日】2023-05-25
(54)【発明の名称】トランザクショナル比較及び破棄命令
(51)【国際特許分類】
G06F 9/30 20180101AFI20230518BHJP
G06F 9/52 20060101ALI20230518BHJP
G06F 9/46 20060101ALI20230518BHJP
G06F 9/34 20180101ALI20230518BHJP
【FI】
G06F9/30 350A
G06F9/52 120B
G06F9/46 430
G06F9/34 350A
(21)【出願番号】P 2020573322
(86)(22)【出願日】2019-05-09
(86)【国際出願番号】 GB2019051275
(87)【国際公開番号】W WO2020012151
(87)【国際公開日】2020-01-16
【審査請求日】2022-05-02
(32)【優先日】2018-07-09
(33)【優先権主張国・地域又は機関】EP
(73)【特許権者】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】ホースネル、マシュー ジェイムズ
(72)【発明者】
【氏名】マグクリス、グリゴリオス
(72)【発明者】
【氏名】ディーステルホルスト、シュテファン
【審査官】漆原 孝治
(56)【参考文献】
【文献】特表2015-507254(JP,A)
【文献】米国特許出願公開第2015/0278120(US,A1)
【文献】米国特許出願公開第2012/0084477(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30
G06F 9/52
G06F 9/46
G06F 9/34
(57)【特許請求の範囲】
【請求項1】
データ処理のスレッドを処理するための処理回路と、
前記処理回路により処理されるスレッドの中のトランザクションの実行をサポートするためのトランザクショナル・メモリ・サポート回路であって、前記トランザクションは、トランザクション開始命令とトランザクション終了命令との間で投機的に実行される前記スレッドの命令を含み、前記トランザクションに対して、前記処理回路が、前記トランザクション終了命令に達するまで、投機的に実行される前記命令の結果のコミットメントを防止するように構成される、トランザクショナル・メモリ・サポート回路と
を備え、
前記トランザクショナル・メモリ・サポート回路は、前記トランザクションに対する、追跡されるワーキング・セットのアドレスのうちの1つへの、別のスレッドからの競合するアクセスを検出することに応答して、前記トランザクションのアボートをトリガするための競合検出回路を備え、
所与のトランザクションの中で実行されるトランザクショナル比較及び破棄命令であって、ターゲット・アドレス及び比較値を指定する、トランザクショナル比較及び破棄命令に応答して、前記処理回路は、
前記ターゲット・アドレスに対応するメモリ位置からターゲット・データ値をロードすることと、
前記ターゲット・データ値及び前記比較値を比較することの結果に依存して、少なくとも1つの条件ステータス指示をセットすることと、
前記ターゲット・アドレスを、前記所与のトランザクションに対する、アドレスの前記ワーキング・セットに追加することなく、前記ターゲット・データ値を破棄することと
を行うように構成される、装置。
【請求項2】
前記トランザクショナル比較及び破棄命令は、前記比較値を記憶するソース・レジスタを指定する、請求項1に記載の装置。
【請求項3】
前記トランザクショナル比較及び破棄命令に応答して、前記処理回路は、前記ターゲット・データ値を、前記処理回路のアーキテクチャ上のレジスタに書き込むことなく、前記ターゲット・データ値を破棄するように構成される、請求項1又は2に記載の装置。
【請求項4】
テスト条件を指定する条件付き命令に応答して、前記処理回路は、前記テスト条件を満たす前記少なくとも1つの条件ステータス指示を条件として処理演算を遂行するように構成される、請求項1から3までのいずれか一項に記載の装置。
【請求項5】
前記トランザクショナル・メモリ・サポート回路はまた、少なくとも1つのトランザクションに対する投機的に実行される命令の結果を記憶するための投機的結果記憶回路を備える、請求項1から4までのいずれか一項に記載の装置。
【請求項6】
前記トランザクショナル・メモリ・サポート回路はまた、前記トランザクションをアボートすることを機に復元されることになる、前記トランザクション開始命令に応答して捕捉される状態を記憶するための復元状態記憶回路を備える、請求項1から5までのいずれか一項に記載の装置。
【請求項7】
前記トランザクショナル比較及び破棄命令に応答して、前記処理回路は、メモリ・システムに前記ターゲット・データ値の前記ロードを要請するために、第1のバス・プロトコル・メッセージの発行をトリガするように構成され、
前記第1のバス・プロトコル・メッセージは、前記バス・プロトコル・メッセージを、メモリにデータ値のロードを要求する他のタイプの命令に対して発行される第2のバス・プロトコル・メッセージから区別する指示を含む、請求項1から6までのいずれか一項に記載の装置。
【請求項8】
前記トランザクショナル・メモリ・サポート回路を備える、さらなる処理要素を備え、
前記第1のバス・プロトコル・メッセージ、又は、前記第1のバス・プロトコル・メッセージによりトリガされるさらなるバス・プロトコル・メッセージの受信に応答して、前記ターゲット・アドレスが、前記さらなる処理要素において処理されているトランザクションに対する、追跡されるアドレスの書き込みセットの中にあるとき、前記さらなる処理要素は、前記さらなる処理要素においての前記トランザクションの継続されるアボートされない処理を許すように構成される、請求項7に記載の装置。
【請求項9】
トランザクション開始命令とトランザクション終了命令との間で投機的に実行されるスレッドの命令を含むトランザクションを実行するステップであって、前記トランザクションに対して、処理回路が、前記トランザクション終了命令に達するまで、投機的に実行される前記命令の結果のコミットメントを防止するように構成される、実行するステップと、
前記トランザクションに対する、追跡されるワーキング・セットのアドレスのうちの1つへの、別のスレッドからの競合するアクセスを検出し、競合するアクセスが検出されるとき、前記トランザクションをアボートするステップと、
前記トランザクションの中で実行される、ターゲット・アドレス及び比較値を指定する、トランザクショナル比較及び破棄命令に応答して、
前記ターゲット・アドレスに対応するメモリ位置からターゲット・データ値をロードするステップと、
前記ターゲット・データ値及び前記比較値を比較することの結果に依存して、少なくとも1つの条件ステータス指示をセットするステップと、
前記ターゲット・アドレスを、所与のトランザクションに対する、アドレスの前記ワーキング・セットに追加することなく、前記ターゲット・データ値を破棄するステップと
を含むデータ処理方法。
【請求項10】
スレッド・レベル投機を遂行して、処理の複数のスレッドを実行するステップであって、各々のスレッドは、プログラム・ループの複数の反復のうちのそれぞれの1つに対応し、少なくとも1つのトランザクションを含む、実行するステップを含む、請求項9に記載のデータ処理方法。
【請求項11】
前記トランザクショナル比較及び破棄命令は、前記ターゲット・アドレスとして、前記プログラム・ループの前記複数の反復に対してトランザクションをコミットすることにおいて経過を追跡するためのループ反復コミット変数のアドレスを指定する、請求項10に記載のデータ処理方法。
【請求項12】
1つ又は複数の命令を実行して、前記少なくとも1つの条件ステータス指示がテスト条件を満足させるかどうかに依存して、前記トランザクションをアボートするべきかどうかを決定するステップを含む、請求項9から11までのいずれか一項に記載のデータ処理方法。
【請求項13】
データ処理のスレッドの実行のための命令実行環境を提供するように、ホスト・データ処理装置を制御するためのコンピュータ・プログラムであって、
データ処理のスレッドを処理するための処理プログラム論理と、
前記処理プログラム論理により処理されるスレッドの中のトランザクションの実行をサポートするためのトランザクショナル・メモリ・プログラム論理であって、前記トランザクションは、トランザクション開始命令とトランザクション終了命令との間で投機的に実行される前記スレッドの命令を含み、前記トランザクションに対して、前記処理プログラム論理が、前記トランザクション終了命令に達するまで、投機的に実行される前記命令の結果のコミットメントを防止するように構成され、前記トランザクショ
ナル・メモリ・プログラム論理は、前記トランザクションに対する、追跡されるワーキング・セットのアドレスのうちの1つへの、別のスレッドからの競合するアクセスを検出することに応答して、前記トランザクションのアボートをトリガするための競合検出プログラム論理を含む、トランザクショナル・メモリ・プログラム論理と
を備え、
所与のトランザクションの中で実行されるトランザクショナル比較及び破棄命令であって、ターゲット・アドレス及び比較値を指定する、トランザクショナル比較及び破棄命令に応答して、前記処理プログラム論理は、
前記ターゲット・アドレスに対応するメモリ位置からターゲット・データ値をロードすることと、
前記ターゲット・データ値及び前記比較値を比較することの結果に依存して、少なくとも1つの条件ステータス指示をセットすることと、
前記ターゲット・アドレスを、前記所与のトランザクションに対する、アドレスの前記ワーキング・セットに追加することなく、前記ターゲット・データ値を破棄することと
を行うように構成される、コンピュータ・プログラム。
【請求項14】
請求項13に記載のコンピュータ・プログラムを記憶する記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本技法は、データ処理の分野に関係する。より詳しくは、本技法は、トランザクショナル・メモリに関係する。
【背景技術】
【0002】
データ処理システムは、データ処理の、いくつかのスレッドを実行し得る。時には、スレッドは、共有リソースにアクセスすることを必要とし得るものであり、データ処理演算の性質は、スレッドが共有リソースと相互作用することを開始すると、その間に、別のスレッドがリソースにアクセスすることなく、リソースを使用してアトミックに完了することが、演算のセットに対して必要であり得るようなものであり得る。
【0003】
スレッドの間のこの競合を統御するための1つの技法は、ロックを使用して、少なくとも1つのターゲット・リソースへの排他的アクセスを制御することであり得る。例えば、1つのスレッドが個別のアドレス領域内のデータにアクセスすることを開始するとき、スレッドは、ロック変数をセットして、ロックの所有権を主張し得るものであり、次いで、ロック所有スレッドがロックの所有権を有する間、ロック変数をチェックする他のスレッドは、ロックがすでに主張されていると決定し得るものであり、そのため、そのアドレス領域と相互作用するコードのセクションに進入しないことがある。そのようなロック・ベースの手法は、各々のスレッドが、デフォルトで、競合が発生し得ないということを保証するロックの所有権をそのスレッドが有さない限り、別のスレッドとの競合が発生し得るので、そのスレッドは、共有リソースにアクセスするコードのセクションに進入することができないということを想定するということにおいて、悲観的と見られ得る。しかしながら、しばしばロック識別子は、いくつかのリソース(例えば、アドレスのレンジ)への排他的アクセスを制御し得るものであり、そのため、1つのスレッドが、ロック変数により保護されるリソースのセットの中の所定のリソースにアクセスしている場合、別のスレッドが同じリソースに間違いなくアクセスすることになるということは保証されない。ゆえに、ロック・ベースの手法は、スレッドの間の競合がまれである事例において、性能の損失につながり得るものであり、なぜならば、スレッドは、共有リソースを使用するコードのクリティカル・セクションに進入する前に、ロックが解放されることに対して不必要に待機していることがあるからである。
【先行技術文献】
【非特許文献】
【0004】
【文献】「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、Winter 1990 USENIX Conference、53~63頁
【発明の概要】
【課題を解決するための手段】
【0005】
共有リソースにアクセスするスレッドの間の競合を統御するための、より楽観的な手法は、トランザクショナル・メモリ・サポートを使用することであり得る。データ処理システムは、処理回路によるデータ処理のスレッドの中のトランザクションの実行をサポートするための回路を有し得る。トランザクションは、トランザクションの始まりをマーキングするトランザクション開始命令と、トランザクションの終了をマーキングするトランザクション終了命令との間で実行されるスレッドの命令であり得る。トランザクション開始命令とトランザクション終了命令との間で、処理回路は、介在命令を投機的に実行し、トランザクション終了命令に達するまで、それらの投機的に実行される命令の結果のコミットメントを防止し得る。トランザクション開始命令の実行の後に続く(ただし、トランザクション終了命令に達する前の)アボート・イベントの発生は、トランザクションがアボートされること、及び、投機的結果が破棄されることを結果的に生じさせ得る。トランザクションをアボートすることに対するいくつかの理由が存し得るが、1つの理由は、別のスレッドによりなされるメモリ・アクセスとの検出される競合であり得る。ゆえに、この手法によって、各々のスレッドは、他のスレッドとの競合が発生しないであろうということを想定して、コードのクリティカル・セクションを処理することを楽観的に開始し得るものであり、次いで、クリティカル・セクションの終了に、いかなる競合も検出されることなく達するならば、トランザクションの結果はコミットされ得る。競合がまれである事例において、トランザクショナル・メモリ・サポートを使用することは、より多くのスレッドがコードのそれらのスレッドのクリティカル・セクションを同時的に処理することを可能とすることにより、性能を改善し得る。
【0006】
少なくとも一部の実例は、データ処理のスレッドを処理するための処理回路と、処理回路により処理されるスレッドの中のトランザクションの実行をサポートするためのトランザクショナル・メモリ・サポート回路であって、トランザクションは、トランザクション開始命令とトランザクション終了命令との間で投機的に実行されるスレッドの命令を含み、そのトランザクションに対して、処理回路が、トランザクション終了命令に達するまで、投機的に実行される命令の結果のコミットメントを防止するように構成される、トランザクショナル・メモリ・サポート回路とを備え、トランザクショナル・メモリ・サポート回路は、トランザクションに対する、追跡されるワーキング・セットのアドレスのうちの1つへの、別のスレッドからの競合するアクセスを検出することに応答して、トランザクションのアボートをトリガするための競合検出回路を備え、所与のトランザクションの中で実行されるトランザクショナル比較及び破棄命令であって、ターゲット・アドレス及び比較値を指定する、トランザクショナル比較及び破棄命令に応答して、処理回路は、ターゲット・アドレスに対応するメモリ位置からターゲット・データ値をロードすることと、ターゲット・データ値及び比較値を比較することの結果に依存して、少なくとも1つの条件ステータス指示をセットすることと、ターゲット・アドレスを、所与のトランザクションに対する、アドレスのワーキング・セットに追加することなく、ターゲット・データ値を破棄することとを行うように構成される、装置を提供する。
【0007】
少なくとも一部の実例は、トランザクション開始命令とトランザクション終了命令との間で投機的に実行されるスレッドの命令を含むトランザクションを実行するステップであって、そのトランザクションに対して、処理回路が、トランザクション終了命令に達するまで、投機的に実行される命令の結果のコミットメントを防止するように構成される、実行するステップと、トランザクションに対する、追跡されるワーキング・セットのアドレスのうちの1つへの、別のスレッドからの競合するアクセスを検出し、競合するアクセスが検出されるとき、トランザクションをアボートするステップと、トランザクションの中で実行される、ターゲット・アドレス及び比較値を指定する、トランザクショナル比較及び破棄命令に応答して、ターゲット・アドレスに対応するメモリ位置からターゲット・データ値をロードするステップと、ターゲット・データ値及び比較値を比較することの結果に依存して、少なくとも1つの条件ステータス指示をセットするステップと、ターゲット・アドレスを、所与のトランザクションに対する、アドレスのワーキング・セットに追加することなく、ターゲット・データ値を破棄するステップとを含むデータ処理方法を提供する。
【0008】
少なくとも一部の実例は、データ処理のスレッドの実行のための命令実行環境を提供するように、ホスト・データ処理装置を制御するためのコンピュータ・プログラムであって、データ処理のスレッドを処理するための処理プログラム論理と、処理プログラム論理により処理されるスレッドの中のトランザクションの実行をサポートするためのトランザクショナル・メモリ・プログラム論理であって、トランザクションは、トランザクション開始命令とトランザクション終了命令との間で投機的に実行されるスレッドの命令を含み、そのトランザクションに対して、処理プログラム論理が、トランザクション終了命令に達するまで、投機的に実行される命令の結果のコミットメントを防止するように構成され、トランザクション・メモリ・プログラム論理は、トランザクションに対する、追跡されるワーキング・セットのアドレスのうちの1つへの、別のスレッドからの競合するアクセスを検出することに応答して、トランザクションのアボートをトリガするための競合検出プログラム論理を含む、トランザクショナル・メモリ・プログラム論理とを含み、所与のトランザクションの中で実行されるトランザクショナル比較及び破棄命令であって、ターゲット・アドレス及び比較値を指定する、トランザクショナル比較及び破棄命令に応答して、処理プログラム論理は、ターゲット・アドレスに対応するメモリ位置からターゲット・データ値をロードすることと、ターゲット・データ値及び比較値を比較することの結果に依存して、少なくとも1つの条件ステータス指示をセットすることと、ターゲット・アドレスを、所与のトランザクションに対する、アドレスのワーキング・セットに追加することなく、ターゲット・データ値を破棄することとを行うように構成される、コンピュータ・プログラムを提供する。
【0009】
記憶媒体が、コンピュータ・プログラムを記憶し得る。記憶媒体は、非一時的記憶媒体であり得る。
【0010】
本技法のさらなる態様、特徴、及び利点は、添付図面と連関して読まれることになる、実例の、後に続く説明から明らかになることになる。
【図面の簡単な説明】
【0011】
【
図1】トランザクショナル・メモリ・サポート回路を有するデータ処理装置の実例を概略的に例示する図である。
【
図2】トランザクショナル・メモリ・リソースを使用してトランザクションを処理することの実例を示す図である。
【
図3】条件ステータス指示を記憶するステータス・レジスタ、及び、条件ステータス指示により指示され得る異なる条件を示す表の実例を示す図である。
【
図4】マルチ・コア処理システムの実例を示す図である。
【
図5】トランザクショナル・メモリをサポートするマルチ・コア・システム上でスレッド・レベル投機を遂行することの実例を示す図である。
【
図6】トランザクショナル比較及び破棄命令の実例を概略的に例示する図である。
【
図7】トランザクショナル・メモリ・サポート回路を使用してトランザクションを処理する方法を示すフロー線図である。
【
図8】トランザクションの中で実行されるトランザクショナル比較及び破棄命令を処理する方法を示すフロー線図である。
【
図9】メモリ・システムにデータのローディングを要請するために使用されるバス・プロトコル・メッセージの実例を示す図である。
【
図10】メモリ・システムにデータのローディングを要請するために使用されるバス・プロトコル・メッセージの実例を示す図である。
【
図11】使用され得るシミュレータ実例を示す図である。
【発明を実施するための形態】
【0012】
データ処理装置は、処理回路を有し得るものであり、その処理回路は、処理回路により処理されるデータ処理のスレッドの中のトランザクションの実行をサポートするためのトランザクショナル・メモリ・サポート回路を有する。トランザクションは、トランザクション開始命令とトランザクション終了命令との間で投機的に実行されるスレッドの命令を含み、そのトランザクションに対して、処理回路が、トランザクション終了命令に達するまで、トランザクションの投機的に実行される命令の結果のコミットメントを防止し得るものであり、トランザクション終了命令に達する前にアボート・イベントが発生するとき、トランザクションの処理をアボートし得る。トランザクショナル・メモリ・サポート回路は、トランザクションに対する、追跡されるワーキング・セットのアドレスのうちの1つへの、別のスレッドからの競合するアクセスを検出することに応答して、トランザクションのアボートをトリガするための競合検出回路を備え得る。
【0013】
下記で論考される技法において、処理回路は、ターゲット・アドレス及び比較値を指定する、トランザクショナル比較及び破棄命令をサポートする。トランザクショナル比較及び破棄命令が所与のトランザクションの中で実行されることに応答して、処理回路は、ターゲット・アドレスに対応するメモリ位置(例えば、キャッシュ位置又はシステム・メモリ位置)からターゲット・データ値をロードし、ターゲット・データ値及び比較値を比較することの結果に依存して、少なくとも1つの条件ステータス指示をセットし、ターゲット・アドレスを、所与のトランザクションに対する、追跡されるアドレスのワーキング・セットに追加することなく、ターゲット・データ値を破棄し得る。
【0014】
この手法は反直感的であり、なぜならば、トランザクションの中のメモリからのデータのいかなるロードも、トランザクションのワーキング・セットの中で追跡される対応するアドレスを有するべきであり、そのことによって、他のスレッドが、トランザクションがイン・フライトである間に同じアドレスに書き込むならば、トランザクションは、要されるアドレスからの、潜在的には新鮮でない(時期遅れの)値を使用するトランザクションを回避するためにアボートされ得るということを、通常は誰しも予想することになるからである。
【0015】
しかしながら、ターゲット・アドレスを、トランザクションに対する、アドレスのワーキング・セットに追加することなく、メモリから読み出される値と比較値との間の比較を実行するトランザクショナル比較及び破棄命令が、特に、スレッド・レベル投機を活用することにおいてトランザクショナル・メモリの使用をサポートすることに対して有用であり得るということを、本発明者らは認識した。一部のプログラム・ループは、各々の反復が所定のメモリ・アドレスにアクセスする、いくつかの反復を含み得るが、1つの反復によりアクセスされるアドレスと、別の反復によりアクセスされるアドレスとの間にエイリアシングが存することになるかどうかは、コンパイル時においては静的に知られていない。そのようなループを実行することに対する保守的な手法は、ループの間に依存性が存し得るということを想定すること、及びゆえに、所与の反復が、先立つ反復が完了すると実行されるのみである様態で、各々の反復を逐次的に実行することであり得る。スレッド・レベル投機において、異なる反復の間のそのようなエイリアシングは十分にまれであり得るので、性能は、データ処理の別々のスレッドを使用して、並列に、ループの複数個の反復を投機的に実行することにより改善され得るということが想定される。スレッド・レベル投機によって、複数個の反復に対応するスレッドは、各々、同時に実行され得るものであり、1つの反復によりアクセスされるアドレスが別の反復によりアクセスされるアドレスと競合するかどうかのランタイム・チェックが遂行され得るものであり、一部のスレッドは、並列に処理されるスレッドの間のアドレス競合が存するならば、キャンセルされ、より遅くに再実行され得る。トランザクショナル・メモリは、そのようなスレッド・レベル投機をサポートするために使用され得るものであり、なぜならば、トランザクショナル・メモリのアドレス追跡及びアボート機構は、プログラム・ループの異なる反復に対応するスレッドの間のアドレス・ハザードに対してチェックするために使用され得るからである。
【0016】
しかしながら、トランザクションを使用して、スレッド・レベル投機をサポートするために、ループの、各々の反復に対応するトランザクションが、元のプログラム・ループのループ反復の順序に対応する順序でコミットされるということを確実にする必要性が存し得る。典型的なトランザクショナル・メモリ・アーキテクチャは、トランザクションが他のトランザクションに相対的にコミットされる所定の順序を強いることの手立てを有さない。代わりに、大部分のトランザクショナル・メモリ・アーキテクチャは、各々のトランザクションが全体的に非依存的であるということを想定する。
【0017】
上記で論考されたトランザクショナル比較及び破棄命令は、トランザクショナル・メモリ・システムにおいてのスレッド・レベル投機の使用をサポートし得る。トランザクショナル比較及び破棄命令は、スレッド・レベル投機を使用して並列化されているループの最も近時にコミットされた反復を追跡する、メモリ内に記憶される変数をチェックするために使用され得る。トランザクショナル比較及び破棄命令は、比較の結果に基づいて条件ステータス指示をセットするので、このことは、トランザクションの他の命令が、ループの任意のより早い反復に対するトランザクションがコミットしたかどうかをチェックすることを可能にする。
【0018】
ターゲット・データ値は、ターゲット・アドレスを、アドレスのワーキング・セットに追加することなく破棄されるので、このことは、ループの最も近時にコミットされた反復を指示する共有変数が、複数個のスレッドにより読み出される/書き込まれるときでさえ、そのような明らかなアドレス競合は、トランザクションのいずれについてもそのアボートをトリガしないことになるということを意味する。このことは有用であり、なぜならば、トランザクションが、どの反復がコミットしたかを規定する共有変数にそれらのトランザクションがアクセスするときにアボートされたならば、このことは、事実上、トランザクションのすべてが直列化されることを結果的に生じさせることになり、そのことによって、それらのトランザクションは逐次的に実行され、そのことは、ゆえに、そもそも、トランザクションを使用して、スレッド・レベル投機をサポートすることのまさに利点を消失させるからである。トランザクショナル比較及び破棄命令は、この問題を回避するものであり、なぜならば、ロードにおいてアクセスされるターゲット・アドレスは、アドレスのワーキング・セットに追加されず、そのため、トランザクションは、1つのトランザクションが、別のトランザクションにより読み出されるのと同じ共有変数に書き込むときでさえ、アボートなしで投機的に実行されることを継続し得るからである。トランザクショナル比較及び破棄命令に対するアーキテクチャ上のサポートは、トランザクションが、この機能性を可能にすることの代替的手立てよりハードウェア集約的でない手立てで、トランザクショナル・メモリをサポートするために使用されることを可能にする。
【0019】
スレッド・レベル投機は、トランザクショナル比較及び破棄命令の使用から利益を得ることができる、ほんの1つの機能性であり、実際上は、この命令に対するアーキテクチャ上のサポートが提供されると、次いでプログラマ又はコンパイラは、このタイプの命令に対して有用に遂行され得る他の機能を見出し得るということが理解されるであろう。ゆえに、トランザクショナル比較及び破棄命令は、スレッド・レベル投機をサポートすることに対する個別のアーキテクチャ上の利益を提供するが、命令は、さらには、他の目的のために使用され得る。
【0020】
比較値は、トランザクショナル比較及び破棄命令により、異なる手立てで指定され得る。一部の事例において、比較値は、トランザクショナル比較及び破棄命令の命令エンコーディングにおいて即値として指定され得る。
【0021】
しかしながら、トランザクショナル比較及び破棄命令がソース・レジスタを使用して比較値を識別するアーキテクチャを提供することが、特に有用であり得る。実際上は、このタイプの命令が、スレッド・レベル投機をサポートするために使用されるとき、異なるループ反復に対応する異なるスレッドは、メモリからロードされた値を、そのスレッドが表す個別の反復に依存する比較値の異なる値に照らして比較することを必要とし得る。ソース・レジスタを使用して、比較値を規定することにより、このことは、それぞれのトランザクションにおいての異なる反復に対して実行されることになる命令の共通セットを書き込むことを、より簡単にする。
【0022】
トランザクショナル比較及び破棄命令に応答して、処理回路は、ターゲット・データ値を、処理回路のアーキテクチャ上のレジスタに書き込むことなく、ターゲットにされた値を破棄し得る。ゆえに、メモリから読み出されるターゲット・データ値は、トランザクショナル比較及び破棄命令を実行することの結果として、ソフトウェアにアクセス可能にされない。代わりに、トランザクショナル比較及び破棄命令は、ターゲット・データ値への制限されるアクセスを提供することを、そのターゲット・データ値を比較値と比較し、比較の結果に依存して、少なくとも1つの条件ステータス指示をセットすることの目的のために行うのみである。
【0023】
ソフトウェアがアーキテクチャ上のレジスタの中のターゲット・データ値へのアクセスを獲得する程度を制限することにより、このことは、比較及び破棄命令が、トランザクションの中で、他のスレッドにより潜在的にアクセスされ得るデータ値へのアクセスを試みるために、プログラマ又はコンパイラにより、不適切に使用され得るということの公算をより少なくする。対照的に、トランザクションの中で、メモリからロードされたターゲット値をアーキテクチャ上のレジスタ内へと(所与のトランザクションに対する、アドレスのワーキング・セット内の対応するアドレスを追跡することなく)書き込むために実行され得る、一般的な非トランザクショナル・ロード命令が提供されたならば、このことは、プログラマ又はコンパイラにより悪用するのに、より開放的であることになり、なぜならば、そのことは、現実には他のスレッドとの競合に対して追跡されるべきであるアドレスが、非トランザクショナル・ロードにより、不適切にアクセスされるということであり得るからである。
【0024】
一部のアーキテクチャにおいて、トランザクショナル比較及び破棄命令は、トランザクションがイン・フライトであるときに成功裏に実行するのみであるように限定され得る。ゆえに、トランザクショナル比較及び破棄命令が、トランザクションの中でないときに実行されることを試みられるならば、命令デコーダは、トランザクショナル比較及び破棄命令を未定義命令として取り扱い、例外をトリガして、未定義命令が例外ハンドラにより統御されることを引き起こし得る。
【0025】
代替的には、トランザクショナル比較及び破棄命令は、さらには、トランザクションの中で命令を実行しないときにサポートされ得る。この事例において、トランザクショナル比較及び破棄は、メモリからデータ値をロードし、ロードされたデータ値を、命令により指定される比較値と比較するように、処理回路をトリガし得る。
【0026】
トランザクショナル比較及び破棄命令をサポートするアーキテクチャは、さらには、テスト条件を指定する条件付き命令の少なくとも1つの形式をサポートし得る。条件付き命令は、テスト条件を満たす少なくとも1つの条件ステータス指示を条件として処理演算を遂行するように、処理回路を制御する。例えば、アーキテクチャは、条件ステータス指示を表す1つ又は複数の条件フラグを記憶するために用意されることになる、専用条件ステータス・レジスタを要し得る。例えば、条件フラグは、結果が、負であったかどうか、オーバーフローを併せもっていたかどうか、キャリーを併せもっていたかどうか、又は、0であったかどうかなどの、先の処理結果の特性を表し得る。少なくとも1つの条件ステータス指示は、トランザクショナル比較及び破棄命令以外の、他の形式の条件セッティング命令によりさらにはセットされる、同じ指示であり得る。
【0027】
トランザクショナル・メモリ・サポート回路は、競合検出回路に加えて、さらには他の要素を含み得る。例えば、トランザクショナル・メモリ・サポート回路は、少なくとも1つのトランザクションに対する投機的に実行される命令の結果を記憶するための投機的結果記憶回路、及び/又は、トランザクションがアボートされるならば復元され得る、トランザクションのトランザクション開始命令に応答して捕捉されるアーキテクチャ上の状態を記憶するための復元状態記憶回路を含み得る。例えば、投機的結果記憶回路は、トランザクションがトランザクション終了命令に応答してコミットされるまで、ストア命令の結果をバッファリングし得るものであり、そのことによって、トランザクションの中の投機的に実行されるストア命令は、トランザクションがコミットされ得るということが知られるまで、メモリ・システムを汚染しない。復元状態記憶回路は、例えば、トランザクションの開始において存在する状態のチェックポイントを保持することを、トランザクションがアボートされるときに、状態が、実行の、そのより早いポイントに巻き戻されることを必要とする事例において行うための、レジスタ・バンクの中のレジスタを含み得る。代替的には、復元状態は、レジスタ・リネーミングを使用して、同じレジスタ・ファイルの中の古いチェックポイントにされたアーキテクチャ上の状態を、現在のアーキテクチャ上の状態を記憶するレジスタとして追跡して維持され得る。
【0028】
トランザクションをアボートすることに対する別の考えられる理由は、トランザクショナル・メモリ・サポート回路がリソースを使い果たし、そのことによって、トランザクションが競合なしに正しく進行することになるということを保証することがもはや可能ではないかどうかであり得る。例えば、投機的結果記憶回路内に記憶されることになる投機的結果の数が、用意される記憶部の中で利用可能な容量を上回るならば、トランザクションはアボートされ得る。
【0029】
トランザクションをアボートすることに関して、トランザクションを再び実行することを試行するべきか、それとも、代わりに(例えば、ロック及びロード/ストア排他的命令を使用して)非トランザクショナル・フォールバック・パスを使用するべきかを決定することは、ソフトウェア次第であり得る。しかしながら、処理回路のマイクロ・アーキテクチャは、トランザクションのアボートの考えられる理由を指示するヒントを提供し得るものであり、それらのヒントは、ソフトウェアにより、トランザクションを再び実行することを試みることは価値があるか、それとも、(例えば、アボートの原因が、いかなる将来の試みも失敗する公算が大きいであろうというようなことであるならば)フォールバック・パスを使用することを試みることは価値があるかを決定するために使用され得る。
【0030】
上記で論考されたように、トランザクショナル比較及び破棄命令は、処理の2つ以上のスレッドが実行される、スレッド・レベル投機を遂行するために使用され得るものであり、各々のスレッドは、プログラム・ループのそれぞれの反復に対応し、各々のスレッドは、少なくとも1つのトランザクションを含む。そのような使用事例において、トランザクショナル比較及び破棄命令は、ターゲット・アドレスとして、プログラム・ループの複数の反復に対してトランザクションをコミットすることにおいてプロセスを追跡するためのループ反復コミット変数のアドレスを指定し得る。各々のスレッドは、トランザクションの中で、トランザクショナル比較及び破棄命令によりセットされる少なくとも1つの条件ステータス指示がテスト条件を満足させるかどうかに基づいて、トランザクションをアボートするべきかどうかを決定するための1つ又は複数の命令を含み得る。例えば、各々のスレッドは、トランザクションの中で、whileループを含み得るものであり、そのループは、トランザクショナル比較及び破棄命令を使用して、ループ反復コミット変数を、現在のループ反復に固有な比較値に照らして比較し、結果的に生じる条件ステータス指示を、条件付き命令を使用してテストし、次いで、現在のループ反復が、コミットする準備が整っているということを、条件ステータス指示がまだ指示しないならば、条件付きでループの開始に戻るように分岐する。現在のループ反復が、コミットする準備が整っているとき、プログラム実行は、トランザクション終了命令に進行して、全体のトランザクションの結果をコミットし得る。
【0031】
処理回路は、個別のバス・プロトコルによって定義されるバス・プロトコル・メッセージを使用して、メモリ・システムと相互作用し得る。トランザクショナル比較及び破棄命令に応答して、処理回路は、メモリ・システムにターゲット・データ値のロードを要請するために、第1のバス・プロトコル・メッセージの発行をトリガし得る。第1のバス・プロトコル・メッセージは、バス・プロトコル・メッセージを、メモリにデータ値のロードを要求する他のタイプの命令に対して発行される第2のバス・プロトコル・メッセージから区別する指示を含み得る。例えば、第1のバス・プロトコル・メッセージは、第2のバス・プロトコル・メッセージとは異なるメッセージ・タイプのものであり得るものであり、又は、第2のバス・プロトコル・メッセージと同じメッセージ・タイプのものであり得るが、第1のバス・プロトコル・メッセージを第2のバス・プロトコル・メッセージから区別するパラメータ若しくは制御フラグを指定し得る。トランザクショナル比較及び破棄命令によりトリガされるロードを、他のタイプの命令によりトリガされるロードから区別することは、バス・プロトコル・メッセージに対して有用であり得るものであり、なぜならば、トランザクショナル比較及び破棄命令にとって、一部の演算(他のやり方では、一般的なロード演算に対して、異なる処理要素に関して実行するトランザクションの間で、データ・コヒーレンシを確実にする、及び/又は、競合を管理するために要され得る)は、トランザクショナル比較及び破棄命令によりトリガされるロードに対して必要とされないことがあり、そのことが、いくらかの性能改善を可能にし得るからである。
【0032】
例えば、さらにはトランザクショナル・メモリ・サポート回路を備える、さらなる処理要素を備えるシステムにおいて、第1のバス・プロトコル・メッセージ、又は、第1のバス・プロトコル・メッセージによりトリガされるさらなるバス・プロトコル・メッセージ(例えば、第1のバス・プロトコル・メッセージに応答してインターコネクトによりトリガされるスヌープ・メッセージ)の受信に応答して、次いで、さらなる処理要素が、現在、トランザクションを実行しており、そのトランザクションに対して、ターゲット・アドレスが、そのトランザクションに対する、追跡されるアドレスの書き込みセットの一部分であるならば、さらなる処理要素に関するトランザクションをアボートすることは必要でない。代わりに、さらなる処理要素においてのトランザクションは、(アボートに対するいかなる他の原因も検出されない限り)そのトランザクションが、そのトランザクションのトランザクション終了命令に達するまで、アボートされない様態を継続することを許され得る。このことは反直感的であることになり、なぜならば、相互排他に対しては、1つのトランザクションによるアドレスへの書き込みは、同じアドレスが別のトランザクションにより読み出された後にはコミットし得ないということを確実にするために、トランザクションであって、その書き込みセット内のアドレスを伴うトランザクションを、別のトランザクションが同じアドレスを読み出すときにアボートすることは必要であるということを、通常は誰しも予想することになるからである。
【0033】
しかしながら、トランザクショナル比較及び破棄命令に対する予想される使用事例において、命令は、共有反復追跡変数が、要される値に達してしまうまで、続けて回るwhileループの中で使用され得るものであり、そのため、トランザクショナル比較及び破棄命令と関連付けられるロードが、異なる処理要素に関して実行する別のトランザクションによりすでに書き込まれた、時期遅れの値を使用してサービスされるかどうかは問題ではない。トランザクショナル比較及び破棄命令によりロードされる値が時期遅れであるとしても、この事例において、whileループは、他のトランザクションがコミットされるまで、いくらかの追加的なサイクルの間、単純に続けて回ることになり、更新された値が、次いで、whileループを通った後続の段階において返され得る。さらなる処理要素においてトランザクションをアボートすることは、いかなる事例においても、単純に、古い値(アボートされたトランザクションにより更新されない)が返されることを結果的に生じさせることになるので、トランザクショナル比較及び破棄命令を実行する第1の処理要素においての影響は同じであるが、さらなる処理要素においてトランザクションをアボートしないことにより、性能は改善され得るものであり、なぜならば、トランザクションを再び、より遅くに再開始することは必要でないからである。
【0034】
さらには、トランザクショナル比較及び破棄命令と関連付けられるロードをサービスするときに最新の値を提供することは、常に必要であるとは限らないので、このことが意味するのは、最新の値であることを保証される値が取得されなければならない場合、そのことは、一部の事例において、より長いアクセス・レイテンシを要し得るが、その場合より低いアクセス・レイテンシを伴うキャッシュからの(潜在的には時期遅れの)値を提供することにより、メモリ・システム(又はインターコネクト)は、より高速にロードをサービスすることができ得るということである。
【0035】
ゆえに、トランザクショナル比較及び破棄命令によりトリガされるロードを、他のタイプのロードから区別するメッセージ・フォーマットを伴うバス・プロトコルを提供することは、性能改善を可能にするために有用であり得る。
【0036】
対応するコンピュータ・プログラムは、データ処理のスレッドの実行のための命令実行環境を提供するように、ホスト・データ処理装置を制御するために提供され得るものであり、コンピュータ・プログラムは、データ処理のスレッドを処理するための処理プログラム論理と、(ハードウェア実施例に対して上記で論考されたトランザクションに対するサポートと同様の手立てで)処理プログラム論理により処理されるスレッドの中のトランザクションの実行をサポートするためのトランザクショナル・メモリ・プログラム論理とを含む。トランザクショナル・メモリ・プログラム論理は、トランザクションに対する、追跡されるワーキング・セットのアドレスのうちの1つへの、別のスレッドからの競合するアクセスが検出されるときに、トランザクションをアボートされるようにトリガするための競合検出プログラム論理を含み得る。コンピュータ・プログラムのプログラム論理は、上記で論考されたような対応する処理回路と同様の手立てで、トランザクショナル比較及び破棄命令の実行に応答し得る。
【0037】
ゆえに、コンピュータ・プログラムであって、上記でコンピュータ・プログラムを実行するソフトウェアに、上記で論考された特徴を有する実際のハードウェア装置により提供されることになるものと同様の命令環境を付与することを、これらの特徴を提供する、いかなる実際のハードウェアも、コンピュータ・プログラムを実行するホスト・コンピュータ内に存しないことがあるとしても行う、コンピュータ・プログラムが提供され得る。代わりに、例えばシミュレータ又は仮想機械であり得るコンピュータ・プログラムが、プログラム論理(命令又はデータ構造のセットなど)を提供することにより、ハードウェア・アーキテクチャの機能性をエミュレートし得るものであり、そのプログラム論理は、汎用的ホスト・データ処理装置が、トランザクショナル・メモリ・サポートを伴う装置上で達成されることになる結果と矛盾しない様式で、トランザクショナル・メモリ・サポートを伴う装置上での実行に対して意図されるコードを実行することを可能にする。
【0038】
コンピュータ・プログラムは、記憶媒体上に記憶され得る。記憶媒体は、非一時的記憶媒体であり得る。
【0039】
図1は、ハードウェア・トランザクショナル・メモリ(HTM:hardware transactional memory)サポートを伴うプロセッサ・コア2を備えるデータ処理装置の実例を例示する。コア2は、命令を実行して、データ処理演算を履行するための処理論理4を有する。例えば、処理論理4は、加算、乗算、AND、OR、その他などの算術若しくは論理演算を履行するための算術/論理ユニット(ALU:arithmetic/logic unit)、浮動小数点オペランドに関する演算を遂行するための浮動小数点ユニット、又は、複数個のデータ要素を含むベクトル・オペランドに関するベクトル処理を履行するためのベクトル処理ユニットなどの、様々なタイプの処理演算を実行するための実行ユニットを含み得る。アーキテクチャ上のレジスタ6のセットが、処理論理4により実行される命令に対するオペランドを記憶するために、及び、実行される命令の結果を記憶するために用意される。アーキテクチャ上のレジスタ6は、先に実行された命令の結果の特性を指示する少なくとも1つのステータス値(例えば条件フラグ)を記憶するためのステータス・レジスタ7を含む。命令デコーダ8は、命令キャッシュ10からフェッチされる命令をデコードして、処理論理4、又は、データ処理装置2の他の要素を制御するための制御信号を生成して、関連性のある演算を遂行する。ロード/ストア・ユニット12が、さらには、データ・キャッシュ14又は主メモリ16からのデータ値をアーキテクチャ上のレジスタ6内へとロードするための(命令デコーダ8によりデコードされるロード命令に応答しての)ロード演算、及び、アーキテクチャ上のレジスタ6からのデータ値をデータ・キャッシュ14又はメモリ16に記憶するための(命令デコーダ8によりデコードされるストア命令に応答しての)ストア演算を遂行するために用意される。
【0040】
プロセッサ・コア2は、さらには、ハードウェア・トランザクショナル・メモリ(HTM)をサポートするために様々なリソースを提供するトランザクショナル・メモリ・サポート回路20を有する。トランザクショナル・メモリ・サポート回路20内のHTMリソースは、例えば、トランザクションの投機的結果を記憶するための投機的結果記憶部22と、トランザクションによりアクセスされる、アドレスのワーキング・セットを追跡するためのアドレス追跡回路24と、トランザクションによりなされるデータ・アクセスと、他のスレッドによりなされるデータ・アクセスとの間の競合を検出することを、競合が検出されるときにトランザクションがアボートされ得るように行うための競合検出回路26と、トランザクションの開始においてのアーキテクチャ上のレジスタ6からのアーキテクチャ上の状態データのスナップショットを記憶することを、この状態が、トランザクションがアボートされるときにトランザクションの投機的結果に上書きするように復元され得るように行うための復元状態記憶回路28とを含み得る。一部の実例において、アドレスのワーキング・セットの追跡は、アドレスの読み出しセット(トランザクションにより読み出されるアドレスを表す)、及び、アドレスの書き込みセット(トランザクションにより書き込まれるアドレスを表す)の別々の追跡を含み得る。例えば、アドレスの読み出し/書き込みセットは、関連付けられるキャッシュ・ラインが、それぞれ所与のトランザクションに対する、読み出しセットの一部分であるか、それとも書き込みセットの一部分であるかを指示する、キャッシュ内のフラグをセットすることにより追跡され得る。
【0041】
さらには、リソースは、トランザクションのネスティングのレベルを追跡するネスティング深さ値を記憶するためのネスティング深さレジスタ30を含み得る。ネスティングされるトランザクション(その場合、第2のトランザクション開始命令は、第1のトランザクション開始命令の後に、ただし、第1のトランザクション開始命令に対応するトランザクション終了命令の前に遭遇される)を規定することができることは、プログラマ又はコンパイラに対して有用であり得る。このことは、コードのクリティカル・セクションが、第1のトランザクション開始命令を越えるコードの部分内への分岐が存するとしても、アトミックに取り扱われるということを確実にするために有用であり得る。しかしながら、投機的結果記憶部内に、アーキテクチャ上の状態の、複数個のチェックポイントを捕捉しなければならないことを回避するために、一部のマイクロアーキテクチャは、トランザクションのネスティングされるセットの「内方」トランザクションを事実上無視し、まさに第1のトランザクション開始命令に応答してアーキテクチャ上の状態のチェックポイントを捕捉するのみであり得る。トランザクション終了命令の前に生起するいかなる後続のトランザクション開始命令も、ネスティング深さレジスタ30が、どれだけ多くのトランザクション開始命令が遭遇されたかを追跡するためにインクリメントされ得るということを除いて、事実上無視され得るものであり、そのことによって、トランザクション終了命令に遭遇することを機に、マイクロ・アーキテクチャは、どのトランザクション終了命令が、トランザクションのネスティングされるセットの外方トランザクションに関係するかを追跡することができる。ゆえに、トランザクション終了命令に遭遇するとき、ネスティング深さが1以上であるならば、トランザクション終了命令は無視され、ネスティング深さがゼロである(トランザクションが、ネスティングされるセットの外方トランザクションであるということを指示する)ならば、トランザクションはコミットされ得る。
【0042】
図2は、トランザクショナル・メモリ・サポート回路20及び処理論理4を使用して、所与のスレッドの中のトランザクションを実行することの実例を示す。トランザクションは、トランザクション開始命令(tstart)及びトランザクション終了命令(tcommit)により境界設定されるプログラム・コードのセクションである。
図2において示されるように、トランザクション開始命令に応答して、アーキテクチャ上のレジスタ6内の現在のアーキテクチャ上の状態が、捕捉され、復元状態記憶回路28内に記憶される。処理論理4は、tstart命令の後に続く、後続の命令の投機的実行を遂行することを始め、これらの命令が実行される際、それらの命令によりアクセスされるアドレスが、アドレス追跡回路24により追跡され、競合検出回路26が、追跡されるアドレスと、他のスレッドに対してなされるメモリ・アクセスのアドレスとの間の競合を検出する。トランザクションの中の命令の、少なくとも一部の投機的結果が、投機的結果記憶回路22の中に記憶される。例えば、ストア命令STRに応答してキャッシュに、又はメモリに記憶される値は、トランザクションが保留中のままである間、投機的結果記憶部22内で保たれ得る。トランザクション終了命令(tcommit)に、その間に、アボート・イベントが発生することなく達するならば、トランザクション終了命令に応答して、投機的結果がコミットされる。トランザクションをコミットすることを機に、そのスレッドに対して投機的結果記憶部22内に記憶されるいかなる結果も、データ・キャッシュ14又はメモリ16に書き込まれ得るものであり、復元状態28は、破棄され得る、又は、上書きされることを許され得るものであり、なぜならば、アーキテクチャ上の状態を、トランザクション開始命令が遭遇された前のポイントに巻き戻すことは、もはや必要とされないからである。
【0043】
他方で、例えば、別のスレッドが、トランザクションによりすでにアクセスされたアドレスにアクセスするときに、競合が競合検出回路26により検出されるときに、アボート・イベントが発生するならば、トランザクションのアボートがトリガされ、復元状態記憶部28からの復元状態が、アーキテクチャ上のレジスタ6に対して復元される。アボート・イベントの他の原因は、例えば、トランザクションの中で実行されることを可能とされない命令の実行、投機的結果、若しくは、所与のトランザクションにより要されるアドレスを統御するための、投機的結果記憶部22若しくはアドレス追跡回路24の中の不十分なリソース、又は、割り込みがトランザクションの間に受信されることを含み得る。
【0044】
図3は、ステータス・レジスタ7において指示される条件ステータス指示40の実例を概略的に例示する。命令デコーダ8によりサポートされる命令セット・アーキテクチャは、算術/論理演算を遂行し、結果の特性に基づいて条件ステータス40をセットするための算術若しくは論理命令、又は、2つの値を比較し、比較の結果に基づいて条件ステータス指示40をセットするための専用比較命令であり得る、いくつかのタイプの条件セッティング命令を含み得る。比較命令は、事実上、比較されることになる値の一方を他方から減算し、減算結果に基づいて条件フラグ40をセットする減算命令であり得る。この実例において、4つの条件ステータス指示40:先の処理結果が負であったかどうかを指示する負フラグN、先の処理演算の結果がゼロであったかどうかを指示するゼロ・フラグZ、先の処理演算が、結果の最上位ビットから外へのキャリーを併せもっていたかどうかを指示するキャリー・フラグC、及び、(最上位ビットが結果の符号を指示する符号ビットを表す場合)処理演算が、2番目に上位のビットから最上位ビットへのオーバーフローを伴う符号付き結果を生み出すならばセットされるオーバーフロー・フラグVが存する。
【0045】
図3の下側の部分において、表において示されるように、いくつかの条件コードが、条件ステータス指示に対して、値の様々なセットに対応して割り当てられ得る。各々の条件コードの意味が、条件ステータス指示40の対応するフラグ値とともに、表において指示される。条件付き命令は、対応する条件付き演算が履行されるために満足させられることになる個別のテスト条件(例えば、EQ、NE、その他)を指示するパラメータを指定し得る。条件付き命令のテスト条件パラメータは、
図3において指定される条件コードのうちの1つを規定し得る。
【0046】
図4において示されるように、
図1において示されるプロセッサ・コア2は、マルチ・プロセッサ・システムにおいての複数個のコア2のうちの1つであり得る。プロセッサ・コア2は、コアの間の通信、及び、メモリ・システム16へのアクセスを統御し得るインターコネクト50を介して接続され得る。一部の事例において、インターコネクト50は、異なるコア2のそれぞれのキャッシュ10、14の間のコヒーレンシをさらには管理するコヒーレント・インターコネクトであり得る。
【0047】
一部の実例において、コア2のうちの少なくとも2つは、
図1において示されるハードウェア・トランザクショナル・メモリ・リソース20を含み得る。一部の事例において、コア2のすべてが、そのようなハードウェア・トランザクショナル・メモリ・リソース20を有し得る。しかしながら、このことは不可欠ではなく、一部の事例において、さらには、トランザクションを実行する能のない一部のプロセッサ・コアが存し得る。
図4の実例において、個々のコア2の各々は、個々のプロセッサ・コア2のマイクロ・アーキテクチャの中にトランザクショナル・メモリ・サポート回路20を有するように示されるが、このことは不可欠ではない。一部の事例において、いくらかのトランザクショナル・メモリ・リソースが、プロセッサ・コアの間で共有され得る。例えば、復元状態を捕捉する、又は、アドレスを追跡するための、いくらかの共通記憶部が用意され得るものであり、その記憶部は、複数個のプロセッサ・コアの間で使用のために共有され得る。
【0048】
図5は、スレッド・レベル投機(TLS:thread level speculation)を履行するために複数個のプロセッサ・コア2上で実行するトランザクションの使用を概略的に例示する。TLSは、ランタイムにおいて反復の間の依存性がないことが予想されるプログラム・ループの実行をスピード・アップするための技法であるが、その場合、反復は、コンパイル時において非依存的であることは証明され得ない。例えば、そのようなプログラム・ループは、プログラムに入力されるデータに依存するアドレス・アクセス・パターンを含む、又は、コンパイラに利用可能な静的分析により曖昧さが除かれ得ないメモリへの間接アクセスをなすことがある。ゆえに、しばしば、そのようなループは、複数個の反復が並列に遂行される様態で実行することができ得るが、時には、競合が、異なる反復によりアクセスされるアドレスの間で生起し得るものであり、そうであるならば、このことは、正しくない値をより遅くの反復が使用することを防止するために検出されることが、その値が、より遅くの反復によりすでに読み出された後に、その値が、ループ内のより早い反復により更新されるときに行われることを必要とし得る。
【0049】
上記で論考されたトランザクショナル・メモリ・リソース20は、アドレス競合チェッキングを履行することに対して有用であり得る。ゆえに、
図5において示されるように、所与のループに対して、各々の反復は、プロセッサ・コア2のうちの1つ上で遂行される処理の個別のスレッドに割り振られ得るものであり、その場合、反復の演算は、処理の対応するスレッド内で遂行されるトランザクション60の中で遂行される。例えば
図5において、ループの反復0に対応する演算は、コア0上のスレッド内で遂行されるトランザクション60-0に割り振られており、反復1に対応する演算は、コア1上のスレッド内で遂行されるトランザクション60-1に割り振られており、ループの他の反復に対しても同様である。この実例において、トランザクショナル・メモリをサポートする4つのプロセッサ・コアが存し、そのため、4つの反復が並列に処理され得る。
【0050】
所与のループ反復に対応するトランザクションは、ループの先立つ反復が、さらにはその先立つ反復のトランザクションをコミットされてしまうまでコミットされ得ないものであり、そのことによって、競合が、1つの反復によりアクセスされるアドレスと、別の反復によりアクセスされるアドレスとの間で検出されるならば、より遅くの反復は、競合するアドレスを有する、より早い反復がコミットしてしまうと、アボートされ、再開始され得る。このことは、総体的な結果が、反復のすべてが逐次的な様式で1つずつ実行された場合と同じであるということを確実にする。どの反復がコミットされたかを追跡する助けとなるように、ループ反復コミット変数70が、メモリ・システム16内に記憶され、トランザクション60の各々は、ループ反復コミット変数70の現在の値をチェックして、要される、より早い反復に対するトランザクションがコミットされたかどうか、及びゆえに、現在のトランザクションがさらにはコミットし得るかどうかを決定するための、いくらかの命令を含む。例えば、各々のトランザクションは、whileループを含み得るものであり、そのループは、ループ反復コミット変数が、関連性のある先立つ反復がコミットしたということを指示するまでループし、次いで、トランザクションが、トランザクション終了命令を実行することによりコミットされることを可能とする。ループ反復コミット変数70が表される個別の形式は変動し得る。例えば、ループ反復コミット変数は、一部の事例において、最も近時にコミットされた反復の反復番号を指示し得る。他の代替案において、ループ反復コミット変数70は、コミットされることになる次の反復の反復番号を指示し得る。一般的に、ループ反復コミット変数70は、コードが、どの反復がコミットする次のものであるかを推測することを可能にする、任意の値をとり得る。
【0051】
ゆえに、トランザクション60の各々は、ループ反復コミット変数をチェックして、現在のトランザクションをコミットすることが可能であるかどうかを決定するための、いくらかの命令を(トランザクション・コードの終了の方に)含む。
図5の実例において、反復0から5に対応するトランザクション60は、いかなる競合も、より早いトランザクションによりアクセスされるアドレスに照らして検出されることなく実行し、そのため、これらのトランザクションは、遅延なしにコミットすることができる。すなわち、反復0から5に対するトランザクション60-0から60-5は、互いから非依存的であったアドレスにアクセスした。
【0052】
しかしながら、反復6に対するトランザクション60-6を実行するとき、競合が、反復6においてアクセスされるアドレスと、反復5においてアクセスされるアドレスとの間で検出される。このことは、反復6に対応するトランザクション60-6のアボートをトリガする。トランザクション60-6を実行するプロセッサ・コア2は、次いで、ループ反復5に対するトランザクション60-5がすでにコミットしてしまうと、ループ反復6に対応するトランザクション60-6’を再試行する。
【0053】
しかしながら、ループ反復6に対するトランザクション60-6がアボートされ、再試行されることの帰結として、このことは、次いで、後続の反復7、8、及び9に対応するトランザクションに対するコミットを遅延させるものであり、なぜならば、それらの後続の反復は、それらがコミットし得る前に、ループ反復6がコミットすることに対して待機しなければならないからである。ゆえに、トランザクション60-7、60-8、及び60-9の間の実際の処理演算が、いかなる他の反復についても、その反復においてアクセスされるアドレスに非依存的であるアドレスにアクセスしているとしても、これらのトランザクションは、トランザクション60-6’が済んでしまうまで、コミットすることを防止される。
【0054】
ゆえに、一般的に、TLSを実現するためにトランザクションの使用をサポートするために、異なるトランザクションが、プログラム・ループの重んじられる反復のコミットメントを追跡するための共有変数70にアクセスすることを可能とするために、機構が必要とされる。共有ループ反復コミット変数70にアクセスするためのメモリからのロードは、同じアドレスについて読み出し/書き込みを行ういかなる他のトランザクションも、そのトランザクションのアボートをトリガしないということが望ましいものであり、なぜならば、さもなければ、プログラム・ループの反復の各々は、1つずつ逐次的に遂行されなければならないことになり、そのことは、そもそもTLSを使用して、同じプログラム・ループの異なる反復を並列化することのまさに利点を消失させることになるからである。
【0055】
複数個のトランザクションに対する共有変数へのそのような非アボートのアクセスをサポートするための1つの手法は、トランザクションが、トランザクションをアボートすることなくトランザクションの途中で一時停止されることを可能とする命令セット・アーキテクチャを提供することであり得るものであり、そのことによって、トランザクションが一時停止される時間の間、いくつかのメモリ・アクセスがなされ得るものであり、そのことは、対応するアドレスが、それらのアドレスを、トランザクションの、アドレスのワーキング・セットに追加することなく、メモリからアクセスされることを結果的に生じさせる。
【0056】
そのようなアーキテクチャにおいて、一時停止の期間の間、他のスレッドが、現在のトランザクションの一時停止より前に、アドレスのワーキング・セットに追加されたアドレスのうちの1つにアクセスしたならば、トランザクションは、一時停止の期間の後に続くトランザクションの再開を機にアボートされる。しかしながら、一時停止の間、一時停止されるトランザクションそれ自体によりアクセスされるアドレスは、アドレスのワーキング・セットに追加されない。この命令セット・アーキテクチャ機能性は、スレッドを一時停止することを、そのスレッドが共有ループ反復コミット変数をチェックすることを必要とする直前に行うことにより、TLSをサポートするために使用され得るものであり、そのことによって、その変数へのアクセスは、アドレスのワーキング・セット内で追跡されることになるアドレスとして取り扱われないことになる。しかしながら、この手法に関する問題は、トランザクションの中間でトランザクションを一時停止し、再開するために、マイクロアーキテクチャ上のサポートを提供することは、要される追加的なハードウェア論理の見地において、相対的に高価であるということである。これは、一部のアーキテクチャにおいて採用される公算が小さいものであり得る重厚な手法である。
【0057】
共有変数がチェックされることを、トランザクションに対する、アドレスのワーキング・セット内でそのアドレスを追跡することなく可能にするための別の手法は、指定されるメモリ・アドレスへの一般的なロード・アクセスを可能にする非トランザクショナル・ロード命令を提供することであり得るものであり、そのことによって、アドレス位置から読み出されるデータ値は、プロセッサ・コアに返され、プロセッサ・コア2のアーキテクチャ上のレジスタ6内に配置されるが、対応するメモリ・アドレスが、アドレス追跡回路24により追跡されるアドレスのワーキング・セットに追加されることを伴わない。この手法は望ましくないものであり得るものであり、なぜならば、コードが、随意のアドレスへのロードを実行することを、そのアドレスが、トランザクションに対する、アドレスのワーキング・セット内で追跡されることなく行う一般的な能力を提供することは、現実にはトランザクショナル様式で処理されることを意図されない演算に対する、トランザクションの不適切な使用につながり得るからである。このことは問題につながり得るものであり、なぜならば、そのことは、トランザクションが、実際上は、プログラマ又はコンパイラにより書き表されるプログラム・コードの中で、はるかに長い間保留中のままであることを結果的に生じさせ得るからであり、そのことは、利用可能なトランザクショナル・リソース20にストレスをかけ得る。非トランザクショナル・ロードをサポートしないことにより、プログラマ/コンパイラは、どの演算が現実にはトランザクション開始/終了命令により境界設定されることを必要とするかを、より慎重に考慮することを強いられる。さらには、プログラマ又はコンパイラが、現実にはトランザクショナルにアクセスされるべきである変数にアクセスするために非トランザクショナル・ロードを不注意にも使用し得るということは、さらには公算がより大きいものであり、そのことによって、その変数のアドレスは、アドレスのワーキング・セットに追加され、そのことによって、競合が検出され得るものであり、トランザクションは、必要ならばアボートされ得る。ゆえに、対応するアドレスが、トランザクションに対する、アドレスのワーキング・セット内で追跡されることを結果的に生じさせない、トランザクションの中のメモリへのロードに対する一般的なアーキテクチャ上のサポートを提供することは、一般的には望ましくないものであり得る。
【0058】
図6は、これらの問題に対処し得るトランザクショナル比較及び破棄命令を示す。命令デコーダ8は、個別のタイプの命令エンコーディング(コードの命令)を、トランザクショナル比較及び破棄命令を表すと認識する。そのような命令を検出することに応答して、デコーダ8は、メモリ・システム14、16からのターゲット・データ値80を、トランザクショナル比較及び破棄命令のパラメータにより指定されるターゲット・アドレス82により識別される位置からロードするように、並びに、ターゲット・データ値80を、アーキテクチャ上のレジスタ・ファイル6のソース・レジスタ86の中で指定される比較値84と比較するように、処理論理4を制御するための制御信号を生成する。トランザクショナル比較及び破棄命令は、命令のエンコーディングの中のこのソース・レジスタ86を識別する。ターゲット・アドレス82は、絶対アドレス、又は、トランザクショナル比較及び破棄命令それ自体のアドレスに相対的に識別される相対アドレスであり得るものであり、1つ又は複数のレジスタ内の、1つ又は複数の即値に基づいて識別され得る。ターゲット・データ値80を比較値84と比較することの結果に基づいて、処理論理4は、ステータス・レジスタ7の条件ステータス指示40を、比較の結果に依存する値にセットする。処理論理4は、次いで、ターゲット・データ値80を、プロセッサ・コア2のアーキテクチャ上のレジスタ6のいずれにも書き込むことなく、及び、ターゲット・アドレス82を、アドレス追跡回路24により追跡されるアドレスのワーキング・セット(読み出しセット)に追加することなく、ターゲット・データ値80を破棄する。ゆえに、トランザクショナル比較及び破棄命令を実行するコードは、ターゲット・データ値80の実際の値へのアクセスを獲得するのではなく、比較値84との比較に基づいてセットされた、結果的に生じる条件フラグ40を確認するにすぎない。例えば、条件フラグ40は、比較値84が、ターゲット・データ値80より大であったか、それともターゲット・データ値80未満であったか、それともターゲット・データ値80に等しかったかを指示し得る。
【0059】
ゆえに、トランザクションを使用して、
図5において示されるようなTLSを実現するとき、トランザクショナル比較及び削除命令は、ループ反復コミット変数70をチェックし、その変数を、現在のトランザクションにより遂行されている処理の反復番号を(直接的に、又は間接的に)指示する、レジスタ内で指定される比較値に照らして比較するために、各々のトランザクションの終了の方で使用され得る。このことは、トランザクションが、それが、コミットする準備が整っている、又は、他のトランザクションがコミットしてしまうまで待機するべきであるか否かを決定することを可能とする。比較及び破棄命令は、ターゲット・データ値80それ自体への一般的なアクセスを提供しないので、このトランザクションがプログラマ又はコンパイラにより悪用され得るということは、公算がより小さく、比較及び破棄命令に対するアーキテクチャ上のサポートは、トランザクションを通しの中程で一時停止する能力をサポートすることは必要でないということを意味し、そのことは、命令セット・アーキテクチャを実現することのマイクロアーキテクチャ上のオーバーヘッドを大幅に低減し得る。
【0060】
図7は、トランザクションを処理する方法を示すフロー線図を例示する。ステップ100において、トランザクション開始命令が、デコードされ、実行される。応答して、ステップ102において、復元状態記憶部28は、アーキテクチャ上のレジスタ6内のアーキテクチャ上の状態の現在のスナップショットを、トランザクションに対して維持されることになる復元状態として捕捉する。一部の事例において、このことは、捕捉されるアーキテクチャ上の状態が、別々のレジスタに書き込まれることを結果的に生じさせ得るが、他の実現例は、命令セット・アーキテクチャにおいてサポートされるレジスタの数より大である数のレジスタを有する、アーキテクチャ上のレジスタ6に対する物理レジスタ・ファイルを使用し得るものであり、レジスタ・リネーミングが、アーキテクチャにより要される個別のアーキテクチャ上のレジスタに対して、どの個別の物理レジスタがデータ値を記憶するために考慮されるかを再マッピングするために使用されるということが理解されるであろう。そのようなシステムにおいて、レジスタ・リネーミングは、トランザクション開始命令に遭遇することを機に、アーキテクチャ上のレジスタから物理レジスタへのマッピングを変化させるために使用され得るものであり、そのことによって、アーキテクチャ上の状態の、先に捕捉されたチェックポイントが、事実上、現在のアーキテクチャ上の状態それ自体と同じ物理レジスタ・ファイルの中で維持され得るものであり、そのことは、必要ならば、状態の復元をスピード・アップし得る。この事例において、復元状態の捕捉は、レジスタ・マッピングを変化させることにより行われ得るものであり、そのため、物理レジスタへの/からのデータの、いかなる実際の転送も必要としないことがある。
【0061】
ステップ104において、トランザクション開始命令の後に続く命令の投機的実行が始まる。命令はトランザクションの中で投機的に実行されるが、一部の投機的命令の結果は、投機的結果記憶回路22に割り振られ得る(例えば、データをメモリに記憶するためのストア命令の結果)。投機的に実行される命令によりアクセスされるアドレスは、アドレス追跡構造24に追加され得るものであり、トランザクションが保留中のままである間、トランザクションに対してアドレス追跡構造24により維持される、アドレスのワーキング・セットへの、他のスレッドによるアクセスが監視され得る。
【0062】
ステップ106において、競合検出回路は、アボート・イベントが発生したかどうかを検出する。例えば、アボート・イベントは、アドレス追跡構造24により追跡されるワーキング・セットのアドレスのうちの1つにアクセスする別のスレッド、割り込み若しくは例外の発生、トランザクションの中で実行されることを可能とされない命令タイプの実行、又は、アドレス追跡24若しくは投機的結果記憶部22に対して利用可能なリソースが最大限に利用され、そのことによって、トランザクションを安全に実行することを継続することがもはや可能でない(なぜならば、記憶されることを必要とし得る、一部の追加的アドレス又は投機的結果は、これ以上追跡され得ないことがあるからである)ということであり得る。他のタイプのアボートが、さらには、命令セット・アーキテクチャの制約に依存して規定され得るということが理解されるであろう。アボート・イベントが発生するならば、ステップ108において、トランザクションはアボートされ、復元状態記憶部28内に記憶される復元状態が、システムの現在のアーキテクチャ上の状態を表すアーキテクチャ上のレジスタ6に対して復元される。処理は、次いで、復元されたアーキテクチャ上の状態により表される、実行することのより早いポイントから再開し得る。一部の事例において、トランザクションをアボートすることを機に、マイクロアーキテクチャは、なぜトランザクションがアボートされるかの理由を指示するヒントを提供し得るものであり、そのヒントは、ソフトウェア内の例外ハンドラにより、要される演算をトランザクションとして再び実行することを試みることは価値があるかどうか、又は、フォールバック・パス(トランザクションを使用しない)を実行することへと後退して、対応する処理演算を実行することが好ましいかどうかを決定するために使用され得る。
【0063】
アボート・イベントが、ステップ106において発生しないならば、ステップ110において、何らかのトランザクション終了命令が、デコードされ、実行されたかどうかが決定される。そうでないならば、方法は、ステップ106に戻るようにループして、アボート・イベント、又は、トランザクション終了命令の実行のいずれかを待つ。命令の投機的実行、並びに、アドレスのワーキング・セット及び潜在的競合の追跡は、アボート・イベントが発生するか、トランザクション終了命令に達するかのいずれかまで、ステップ104から110の全体を通して継続するということが理解されるであろう。
【0064】
トランザクション終了命令が実行されるとき、ステップ112において、トランザクションのいかなる投機的結果も、状態に対してコミットされ、先に捕捉された復元状態が、破棄される、又は、上書きされることを許される。
【0065】
図8は、上記で論考されたようなトランザクショナル比較及び破棄命令の処理を示すフロー線図である。ステップ120において、トランザクションの中で命令を投機的に実行する間、命令デコーダ8は、ターゲット・アドレス及び比較値を指定する、トランザクショナル比較及び破棄命令を識別する。応答して、命令デコーダ8は、
図8の後続のステップを遂行するように、処理論理4及びロード/ストア・ユニット12(処理回路として一括して説明され得る)を制御するための制御信号を生成する。
【0066】
ステップ122において、ロード/ストア・ユニット12は、トランザクショナル比較及び破棄命令により指定されるターゲット・アドレスに対応する、キャッシュ14又はメモリ・システム16内のメモリ位置からのターゲット・データ値のロードをトリガする。ターゲット・データ値がメモリから返されるとき、ステップ124において、処理論理4は、ターゲット・データ値80を、トランザクショナル比較及び破棄命令により指定されるレジスタから取得される比較値84と比較する。例えば、比較は、ターゲット・データ値及び比較値の一方を他方から減算することを必然的に含み得る。ステップ126において、処理論理は、ステップ124においての比較の結果に依存して、ステータス・レジスタ7の条件ステータス・フラグ40をセットする。例えば、Zフラグは、ターゲット値及び比較値が等しかったならばセットされ得るものであり、Cフラグは、ターゲット・データ値及び比較値の一方が他方以上であったならばセットされ得る、等々である。ステップ128において、ターゲット・データ値は、次いで、ターゲット・アドレス82を、アドレス追跡回路24により追跡される、トランザクションの、アドレスの読み出しセットに追加することなく、及び、ターゲット・データ値80を、アーキテクチャ上のレジスタ6のいずれにも書き込むことなく破棄される。
【0067】
ゆえに、トランザクショナル比較及び破棄命令を実行したことで、条件付き分岐命令などの後続の条件付き命令が、次いで、トランザクションがコミットすることを可能とするために、条件ステータス指示40の値をテストして、ターゲット・データ値に依存して、後続のトランザクション終了命令が実行されるべきであるかどうか、又は、プログラム・フローが、戻るようにループして、ターゲット・データ値が、要される条件を満たすかどうかを再びチェックするべきであるかどうかを決定し得る。このことは、
図5において示されるようなスレッド・レベル投機をサポートすることに対して非常に有用である。
【0068】
図9及び10は、複数個のプロセッサ・コア2上の、メモリ・システム16へのデータ・アクセス、並びに、トランザクションの間のコヒーレンシ及び競合を管理するために、インターコネクト50により使用されるバス・プロトコルによりサポートされるバス・プロトコル・メッセージの実例を示す。
図9は、コア0上のトランザクションが、上記で論考されたタイプのトランザクショナル比較及び破棄命令を実行するときにトリガされるバス・プロトコル・メッセージの実例を示す。コア0においてのトランザクショナル比較及び破棄命令の実行は、インターコネクト50への第1のタイプの読み出しバス・プロトコル・メッセージの発行をトリガする。メッセージ種、トランザクショナル比較及び破棄命令により指定されるターゲット・アドレスに対応するアドレスX。第1のタイプの読み出しバス・プロトコル・メッセージに応答して、インターコネクト50は、第1のタイプのスヌープ・メッセージを他のコアに送出して、それらのコアにおいてキャッシュされるデータのコヒーレンシ・ステータスに対してチェックする。代替的には、インターコネクト50が、他のコアにおいてキャッシュされるデータを少なくとも部分的に追跡する追跡データを維持する、及び、その追跡データに基づいて、アドレスXに対するデータがいかなる他のコアによってもキャッシュされないと決定し得るならば、スヌープ・メッセージを送出することは必要でないものであり得る。インターコネクト50は、他のプロセッサ・コア2においてのキャッシュから、又は、インターコネクトの中のシステム・キャッシュから、又は、メモリ・システム16からのいずれかで取得され得る、ターゲット・アドレスに対応するデータを取得する。データは、コア0に返され、トランザクショナル比較及び破棄命令の比較値に照らしての比較のために使用され、次いで、データをアーキテクチャ上のレジスタに書き込むこと、又は、アドレスXをトランザクションの読み出しセット内へと追加することなく破棄される。
【0069】
トランザクショナル比較及び破棄命令がコア0上で実行されるとき、トランザクションであって、それに対してアドレスXが、トランザクションの、アドレスの書き込みセット内で指定される、トランザクションを実行している別のコア(例えばコア1)が存し得る(すなわち、コア0上のトランザクションは、アドレスXへの更新された値の書き込みをすでに要請しており、更新された値は、トランザクションがコミットされるまで、コア1の投機的結果記憶部22内にバッファリングされ得る)。コア0により要されるデータは、トランザクショナル比較及び破棄命令に対する比較のために、例えば、TLSを実現するトランザクションがコミットする際にインクリメントされることが予想されるループ反復コミット変数70のチェッキングのために使用されているのみであるので、コア1上のトランザクションによりまだ更新されていない時期遅れのデータを返すことは問題ではなく、なぜならば、このことは、単純に、コア0上のトランザクションにおいてのwhileループが、コア1上のトランザクションがコミットし、最新の値が利用可能になるまで、いくらかの追加的な反復に対して続けて回ることにつながることになるからである。実際上は、共有ループ反復コミット変数70への書き込みは、トランザクションの終了の付近であることが予想されることになるので、書き込みがコア1において投機的なままである期間は、相対的に短くあり得るものであり、そのため、コア0においてのwhileループが、多くの追加的なサイクルに対して続けて回ることを必要とすることになるということは、公算が小さい。ゆえに、コア1においての性能を改善するために、
図9において示される第1のタイプの読み出しバス・プロトコル・メッセージによりトリガされるスヌープ・メッセージに応答して、コア1上のトランザクションをアボートすることは、第1のタイプの読み出しバス・プロトコル・メッセージにより指定されるアドレスXがトランザクションの書き込みセット内にあったとしても、必要ではない。
【0070】
対照的に、
図10において示されるように、コア0が、アドレスXを指定する別のタイプのロード命令を実行するとき、第2のタイプの読み出しバス・プロトコル・メッセージが、インターコネクト50に発行される。第2のタイプの読み出しメッセージは、任意の手立てで、例えば、メッセージ・タイプ・インジケータにより、又は、メッセージのさらなるパラメータにより、第1のタイプの読み出しメッセージから区別され得る。第2のタイプの読み出しメッセージに応答して、
図9においてと比較して、異なるタイプのスヌープ・メッセージが、他のコアに送出される。第2のタイプの読み出しバス・プロトコル・メッセージが送出されるとき、別のコア(例えばコア1)が、現在トランザクションを実行しており、アドレスXが、そのトランザクションの書き込みセット内にあるならば、そのトランザクションは、相互排他を守り、コア1上のトランザクションが、アドレスXがコア0上のトランザクションにより読み出された後にアドレスXへの書き込みをコミットし得ないということを確実にするために、アボートされる。
【0071】
要約すると、インターコネクト上のコヒーレンス/バス・プロトコル・サポートは、
図9において示される第1のタイプの読み出しメッセージを使用して、返される値が、値をコアのアーキテクチャ上のレジスタ内へとロードする、より一般的なタイプのロードと対比されるものとして、比較において使用されるのみであることになるということを表し得る。このことが意味するのは、コア0が、トランザクション1において比較及び破棄命令を使用し、アドレスが、現在、コア1においてのトランザクション2の書き込みセット内にあり、そのため投機的に修正されるならば、インターコネクトは、トランザクション2をアボートし、ともかく古いデータによって応答することよりむしろ、(例えば、共有キャッシュからの)古い値によって応答することに決め得るということである。このことは、コア0及びコア1の両方において性能改善を可能にし得るものであり、コア0において、データは、それが共有キャッシュから、より低いアクセス・レイテンシを伴って返され得るならば、より高速に返され得るものであり、コア1において、トランザクションは、アボートされない様態を継続し得るものであり、そのトランザクションがアボートされ、より遅くに再試行されなければならなかった場合より早くコミットに達し得る。
【0072】
図11は、使用され得るシミュレータ実現例を例示する。より早く説明された実施例は、本技法を、当該の技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法の見地において実現するが、コンピュータ・プログラムの使用を通して実現される、本明細書において説明される実施例による命令実行環境を提供することが、さらには可能である。そのようなコンピュータ・プログラムは、しばしば、シミュレータと呼称されることが、それらのシミュレータが、ハードウェア・アーキテクチャのソフトウェア・ベースの実現例を提供する限りにおいて行われる。シミュレータ・コンピュータ・プログラムの異形は、エミュレータ、仮想機械、モデル、及び、動的バイナリ・トランスレータを含むバイナリ・トランスレータを含む。典型的には、シミュレータ実現例は、シミュレータ・プログラム310をサポートする、ホスト・オペレーティング・システム320を任意選択で作動させる、ホスト・プロセッサ330上で作動し得る。一部の配置構成において、ハードウェアと、提供される命令実行環境、及び/又は、同じホスト・プロセッサ上で提供される複数個の別個の命令実行環境との間に、シミュレーションの複数個の層が存し得る。歴史的には、強力なプロセッサが、程よいスピードで実行するシミュレータ実現例を提供するために要されてきたが、そのような手法は、互換性又は再使用の理由のために、別のプロセッサに対してネイティブなコードを作動させることの所望が存するときなど、所定の状況においてはもっともなことであり得る。例えば、シミュレータ実現例は、ホスト・プロセッサ・ハードウェアによりサポートされない追加的な機能性を伴う命令実行環境を提供し、又は、典型的には異なるハードウェア・アーキテクチャと関連付けられる命令実行環境を提供し得る。シミュレーションの概観は、「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、Winter 1990 USENIX Conference、53~63頁において与えられる。
【0073】
実施例が、個別のハードウェア構築物又は特徴を参照して先に説明された程度まで、シミュレートされる実施例において、等価の機能性が、適したソフトウェア構築物又は特徴により提供され得る。例えば、個別の回路は、シミュレートされる実施例において、コンピュータ・プログラム論理として実現され得る。同様に、レジスタ又はキャッシュなどのメモリ・ハードウェアは、シミュレートされる実施例において、ソフトウェア・データ構造として実現され得る。先に説明された実施例において言及されたハードウェア要素のうちの1つ又は複数が、ホスト・ハードウェア(例えば、ホスト・プロセッサ330)上に存在する配置構成において、一部のシミュレートされる実施例は、適する場合に、ホスト・ハードウェアの使用をなし得る。
【0074】
シミュレータ・プログラム310は、コンピュータ可読記憶媒体(非一時的媒体であり得る)上に記憶され得るものであり、シミュレータ・プログラム310によりモデリングされているハードウェア・アーキテクチャのアプリケーション・プログラム・インターフェイスと同じである、ターゲット・コード300(アプリケーションと、オペレーティング・システムと、ハイパーバイザとを含み得る)に対するプログラム・インターフェイス(命令実行環境)を提供する。かくして、上記で説明された、あらかじめ決定されたタイプのロード命令及びロード/ストア排他的命令を含む、ターゲット・コード300のプログラム命令は、シミュレータ・プログラム310を使用する命令実行環境の中から実行され得るものであり、そのことによって、上記で論考された装置2のハードウェア特徴を実際には有さないホスト・コンピュータ330は、これらの特徴をエミュレートし得る。シミュレータ・プログラム310は、処理論理4、ハードウェア・トランザクショナル・メモリ・リソース20、及び競合検出回路26それぞれに対応する機能性を提供する、処理プログラム論理312と、トランザクショナル・メモリ・プログラム論理314と、競合検出プログラム論理316とを含み得る。
【0075】
本出願において、単語「~するように構成される」は、装置の要素が、規定される動作を履行することができる構成を有するということを意味するように使用される。この文脈において、「構成」は、ハードウェア又はソフトウェアの相互接続の、配置構成又は様式を意味する。例えば、装置は、規定される動作を提供する専用ハードウェアを有し得るものであり、又は、プロセッサ若しくは他の処理デバイスは、機能を遂行するようにプログラムされ得る。「するように構成される」は、装置要素が、規定される動作を提供するために任意の手立てで変化させられることを必要とするということを含意しない。
【0076】
本発明の例示的な実施例が、添付図面を参照して、本明細書において詳細に説明されたが、本発明は、それらの寸分違わない実施例に限定されないということ、並びに、様々な変化及び変更が、それらの実施例において、当業者により、添付される特許請求の範囲により定義されるような本発明の範囲及び趣旨から逸脱することなくもたらされ得るということが理解されるべきである。