(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-04-30
(45)【発行日】2024-05-10
(54)【発明の名称】トランザクショナル・メモリのための装置及びデータ処理方法
(51)【国際特許分類】
G06F 12/00 20060101AFI20240501BHJP
G06F 9/46 20060101ALI20240501BHJP
G06F 9/38 20180101ALI20240501BHJP
G06F 9/30 20180101ALI20240501BHJP
G06F 9/34 20180101ALI20240501BHJP
G06F 12/0808 20160101ALI20240501BHJP
【FI】
G06F12/00 571A
G06F9/46 430
G06F9/38 350A
G06F9/30 350A
G06F9/34 350A
G06F12/0808
(21)【出願番号】P 2021517582
(86)(22)【出願日】2019-10-17
(86)【国際出願番号】 GB2019052967
(87)【国際公開番号】W WO2020109749
(87)【国際公開日】2020-06-04
【審査請求日】2022-10-07
(32)【優先日】2018-11-28
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】ホースネル、マシュー ジェイムズ
(72)【発明者】
【氏名】グリセンスウェイト、リチャード ロイ
【審査官】田中 啓介
(56)【参考文献】
【文献】米国特許出願公開第2015/0378777(US,A1)
【文献】特表2015-525406(JP,A)
【文献】特開2016-207130(JP,A)
【文献】特表2018-511119(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F9/30-9/38
G06F9/455-9/54
G06F11/07、11/14
G06F11/28-11/36
G06F12/00-12/128
G06F13/16-13/18
G06F15/16-15/177
(57)【特許請求の範囲】
【請求項1】
命令を復号するための命令デコーダと、
前記命令デコーダによって復号された前記命令に応答してデータ処理を実施するための処理回路と、
前記処理回路によるデータ処理のスレッド内のトランザクションの実行をサポートするためのトランザクショナル・メモリ・サポート回路であって、前記トランザクショナル・メモリ・サポート回路が、前記トランザクション内の命令によってアクセスされるアドレスを追跡するためのアドレス追跡回路を備える、トランザクショナル・メモリ・サポート回路と
を備える装置であって、
第1のタイプのトランザクション開始命令を使用して開始される第1のタイプのトランザクションについて、前記命令デコーダが、トランザクション終了命令に達するまで、前記第1のタイプのトランザクション開始命令に続いて投機的に実行される命令の結果のコミットメントを防ぐように前記処理回路を制御するように構成され、前記トランザクショナル・メモリ・サポート回路は、別のスレッドからのメモリ・アクセスのアドレスと、前記
第1のタイプのトランザクションについての前記アドレス追跡回路によって追跡される前記アドレスとの間の競合が検出されたとき、前記
第1のタイプのトランザクションのアボートをトリガするように構成され、
第2のタイプのトランザクション開始命令を使用して開始される第2のタイプのトランザクションについて、前記命令デコーダが、前記
第2のタイプのトランザクション内の読取り動作の実行に、前記アドレス追跡回路によって追跡可能として前記読取り動作のアドレスをマークすることによって応答することと、前記
第2のタイプのトランザクション内の書込み動作の実行に、前記アドレス追跡回路によって追跡可能として前記書込み動作のアドレスをマークすることを省略することによって応答することとを行うように、前記処理回路を制御するように構成さ
れ、
前記第2のタイプのトランザクションについて、前記トランザクショナル・メモリ・サポート回路は、前記第2のタイプのトランザクション内で実行される前記読取り動作の前記アドレスと、別のスレッドからの書込み動作のアドレスとの間の競合が検出されたとき、前記第2のタイプのトランザクションのアボートをトリガするように構成され、
前記第2のタイプのトランザクションについて、前記命令デコーダが、前記第2のタイプのトランザクションの前記アボートに応答してアーキテクチャ状態の復元を省略するように前記処理回路を制御するように構成され、前記復元が省略されるアーキテクチャ状態は、前記トランザクションの間に変更されるアーキテクチャ状態を含む、
装置。
【請求項2】
前記第1のタイプのトランザクションについて、前記トランザクショナル・メモリ・サポート回路が、前記
第1のタイプのトランザクションをアボートすると復元されるべきアーキテクチャ状態のキャプチャをトリガするように構成され、
前記第2のタイプのトランザクションについて、前記トランザクショナル・メモリ・サポート回路が、前記アーキテクチャ状態の前記キャプチャを省略するように構成された、
請求項1に記載の装置。
【請求項3】
前記第1のタイプのトランザクションについて、前記トランザクション終了命令に続いて、前記命令デコーダは、前記キャプチャされたアーキテクチャ状態を廃棄するように、又は前記キャプチャされたアーキテクチャ状態が上書きされることを可能にするように、前記処理回路を制御するように構成された、請求項2に記載の装置。
【請求項4】
前記トランザクショナル・メモリ・サポート回路が、少なくとも1つの他のイベントに応答して、前記第2のタイプのトランザクションの前記アボートをトリガするように構成された、請求項
1から3までのいずれか一項に記載の装置。
【請求項5】
前記第2のタイプのトランザクションについて、前記処理回路が、
前記第2のタイプのトランザクションの前記アボートに応答して、前記
第2のタイプのトランザクションの介在する命令の結果をコミットすること、又は
前記トランザクション終了命令を待つことなしに、前記第2のタイプのトランザクション内の命令の結果をコミットすること
のうちの少なくとも1つを行うように構成された、請求項
1から
4までのいずれか一項に記載の装置。
【請求項6】
前記第2のタイプのトランザクションについて、前記命令デコーダは、所定のタイプの命令に応答して、
前記第2のタイプのトランザクションの前記アボートがトリガされたという通知が受信されるまで命令の処理を休止するように前記処理回路を制御する、請求項
1から
5までのいずれか一項に記載の装置。
【請求項7】
前記所定のタイプの命令が、
前記第2のタイプのトランザクションの前記アボートをトリガした他のスレッドからの前記メモリ・アクセスの前記アドレスを指示するアドレス指示を記憶するためのレジスタを指定する、請求項
6に記載の装置。
【請求項8】
前記第2のタイプのトランザクションの前記アボートがトリガされたことに応答して、前記処理回路は、
前記第2のタイプのトランザクションの前記アボートが競合によってトリガされたかどうかを指示するアボート原因指示を記憶するように構成された、請求項
6又は7に記載の装置。
【請求項9】
前記所定のタイプの命令が、
前記第2のタイプのトランザクションの前記アボートをトリガし
た他のスレッドからの前記メモリ・アクセスの前記アドレスを指示するアドレス指示を記憶するためのレジスタを指定する、請求項
8に記載の装置。
【請求項10】
前記アボート原因指示が、前記アドレス指示と同じレジスタに記憶される、請求項
9に記載の装置。
【請求項11】
前記アボート原因指示が、前記アドレス指示とは別個の汎用レジスタに記憶される、請求項
9に記載の装置。
【請求項12】
前の処理結果のプロパティを指示する少なくとも1つの条件ステータス指示を記憶するための制御レジスタを備え、
条件付き命令に応答して、前記命令デコーダは、前記制御レジスタに記憶された前記少なくとも1つの条件ステータス指示がテスト条件を満たすかどうかを条件とする条件付き動作を実施するように前記処理回路を制御するように構成され、
前記アボート原因指示が、前記少なくとも1つの条件ステータス指示のうちの少なくとも1つを備える、
請求項
8から
11までのいずれか一項に記載の装置。
【請求項13】
命令デコーダを使用して命令を復号することと、
装置の処理回路を使用して、前記復号された命令に応答してデータ処理を実施することであって、前記装置が、前記処理回路によるデータ処理のスレッド内のトランザクションの実行をサポートするためのトランザクショナル・メモリ・サポート回路を備え、前記トランザクショナル・メモリ・サポート回路が、前記トランザクション内の命令によってアクセスされるアドレスを追跡するためのアドレス追跡回路を備え、第1のタイプのトランザクション開始命令を使用して開始される第1のタイプのトランザクションについて、前記命令デコーダが、トランザクション終了命令に達するまで、前記第1のタイプのトランザクション開始命令に続いて投機的に実行される命令の結果のコミットメントを防ぐように前記処理回路を制御するように構成され、前記トランザクショナル・メモリ・サポート回路が、別のスレッドからのメモリ・アクセスのアドレスと、前記
第1のタイプのトランザクションについての前記アドレス追跡回路によって追跡される前記アドレスとの間の競合を検出したことに応答して、前記
第1のタイプのトランザクションのアボートをトリガするように構成された、実施することと、
第2のタイプのトランザクション開始命令を使用して開始される第2のタイプのトランザクションに応答して、前記命令デコーダによって、前記
第2のタイプのトランザクション内の読取り動作の実行に、前記アドレス追跡回路によって追跡可能として前記読取り動作のアドレスをマークすることによって応答することと、前記
第2のタイプのトランザクション内の書込み動作の実行に、前記アドレス追跡回路によって追跡可能として前記書込み動作のアドレスをマークすることを省略することによって応答することとを行うように、前記処理回路を制御することと
を含
み、
前記第2のタイプのトランザクションについて、前記第2のタイプのトランザクション内で実行される前記読取り動作の前記アドレスと、別のスレッドからの書込み動作のアドレスとの間の競合が検出されたとき、前記第2のタイプのトランザクションのアボートがトリガされ、
前記第2のタイプのトランザクションについて、前記第2のタイプのトランザクションの前記アボートに応答してアーキテクチャ状態の復元が省略され、前記復元が省略されるアーキテクチャ状態は、前記トランザクションの間に変更されるアーキテクチャ状態を含む、
データ処理方法。
【請求項14】
命令の実行のための命令実行環境を提供するようにホスト・データ処理装置を制御するためのコンピュータ・プログラムであって、
データ処理を実施するように前記ホスト・データ処理装置を制御するためにターゲット・コードの命令を復号するための命令復号プログラム論理と、
データ処理のスレッド内のトランザクションの実行をサポートするためのトランザクショナル・メモリ・サポート・プログラム論理であって、前記トランザクショナル・メモリ・サポート・プログラム論理が、前記トランザクション内の命令によってアクセスされるアドレスを追跡するためのアドレス追跡プログラム論理を備え、第1のタイプのトランザクション開始命令を使用して開始される第1のタイプのトランザクションについて、前記第1のタイプのトランザクション開始命令に続いて投機的に実行される命令の結果が、トランザクション終了命令に達するまで、コミットされることを防がれ、前記トランザクショナル・メモリ・サポート・プログラム論理が、別のスレッドからのメモリ・アクセスのアドレスと、前記
第1のタイプのトランザクションについての前記アドレス追跡プログラム論理によって追跡される前記アドレスとの間の競合を検出したことに応答して、前記
第1のタイプのトランザクションのアボートをトリガするように構成された、トランザクショナル・メモリ・サポート・プログラム論理と
を備え、
第2のタイプのトランザクション開始命令を使用して開始される第2のタイプのトランザクションに応答して、前記命令復号プログラム論理は、前記トランザクショナル・メモリ・サポート・プログラム論理が、前記
第2のタイプのトランザクション内の読取り動作の実行に、前記アドレス追跡プログラム論理によって追跡可能として前記読取り動作のアドレスをマークすることによって応答することと、前記
第2のタイプのトランザクション内の書込み動作の実行に、前記アドレス追跡プログラム論理によって追跡可能として前記書込み動作のアドレスをマークすることを省略することによって応答することとを行うよう
に制御するように構成さ
れ、
前記第2のタイプのトランザクションについて、前記トランザクショナル・メモリ・サポート・プログラム論理は、前記第2のタイプのトランザクション内で実行される前記読取り動作の前記アドレスと、別のスレッドからの書込み動作のアドレスとの間の競合が検出されたとき、前記第2のタイプのトランザクションのアボートをトリガするように構成され、
前記第2のタイプのトランザクションについて、前記命令復号プログラム論理が、前記第2のタイプのトランザクションの前記アボートに応答してアーキテクチャ状態の復元を省略するように処理回路を制御するように構成され、前記復元が省略されるアーキテクチャ状態は、前記トランザクションの間に変更されるアーキテクチャ状態を含む、
コンピュータ・プログラム。
【請求項15】
請求項
14に記載のコンピュータ・プログラムを記憶する記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、データ処理の分野に関する。より詳細には、本発明は、トランザクショナル・メモリに関する。
【背景技術】
【0002】
データ処理システムは、データ処理のいくつかのスレッドを実行し得る。時々、スレッドは、共用リソースにアクセスする必要があり得、データ処理動作の性質が、スレッドが共用リソースと相互作用することを開始すると、動作のセットが、別のスレッドがその間にリソースにアクセスすることなしに、リソースを使用してアトミックに(atomically)完了することが必要であり得るようなものであり得る。
【0003】
スレッド間のこの競合を扱うための1つの技法は、少なくとも1つのターゲット・リソースへの排他的アクセスを制御するためのロックを使用することであり得る。たとえば、1つのスレッドが特定のアドレス領域におけるデータにアクセスすることを開始するとき、スレッドは、ロックの所有権を主張するためにロック変数を設定し得、次いで、ロックを所有するスレッドがロックの所有権を有する間、ロック変数をチェックする他のスレッドは、ロックがすでに主張されたと決定し得、したがって、そのアドレス領域と相互作用するコードのセクションに入らないことがある。そのようなロック・ベースの手法は、各スレッドが、競合が発生し得ないことを保証するロックの所有権を有しない限り、別のスレッドとの競合が発生し得るので、各スレッドが、デフォルトで、共用リソースにアクセスするコードのセクションに入ることができないと仮定するという点で、悲観的と見られ得る。しかしながら、しばしば、ロック識別子が、いくつかのリソース(たとえば、アドレスの範囲)への排他的アクセスを制御し得、したがって、あるスレッドが、ロック変数によって保護されたリソースのセット内のあるリソースにアクセスしている場合、別のスレッドが、同じリソースに明確にアクセスすることになることは保証されない。したがって、ロック・ベースの手法は、スレッド間の競合がまれである場合、スレッドが、共用リソースを使用するコードのクリティカル・セクションに入る前にロックが解放されることを不必要に待っていることがあるので、性能の損失をもたらし得る。
【0004】
共用リソースにアクセスするスレッド間の競合を扱うためのより楽観的な手法は、トランザクショナル・メモリ・サポートを使用することであり得る。データ処理システムは、処理回路によるデータ処理のスレッド内のトランザクションの実行をサポートするための回路を有し得る。トランザクションは、トランザクションの始まりをマークするトランザクション開始命令とトランザクションの終了をマークするトランザクション終了命令との間に実行されるスレッドの命令であり得る。トランザクション開始命令とトランザクション終了命令との間に、処理回路は、介在する命令を投機的に実行し、トランザクション終了命令に達するまで、それらの投機的に実行される命令の結果のコミットメントを防ぎ得る。トランザクション開始命令の実行に続く(ただし、トランザクション終了命令に達する前の)アボート・イベントの発生により、トランザクションがアボートされ、投機的結果が廃棄され得る。トランザクションをアボートすることについてのいくつかの理由があり得るが、1つの理由は、別のスレッドによって行われたメモリ・アクセスとの検出された競合であり得る。したがって、この手法の場合、各スレッドは、楽観的に、他のスレッドとの競合が発生しないと仮定してコードのクリティカル・セクションを処理することを開始し得、次いで、競合が検出されることなしにクリティカル・セクションの終了に達した場合、トランザクションの結果がコミットされ得る。競合がまれである場合、トランザクショナル・メモリ・サポートを使用することは、より多くのスレッドがコードのそれらのクリティカル・セクションをコンカレントに処理することを可能にすることによって、性能を改善することができる。
【先行技術文献】
【非特許文献】
【0005】
【文献】「Some Efficent Architecture Simulation Techniques」、Robert Bedichek、Winter 1990 USENIX Conference、53~63頁
【発明の概要】
【課題を解決するための手段】
【0006】
本明細書で説明される例示的な一実施例では、命令を復号するための命令デコーダと、命令デコーダによって復号された命令に応答してデータ処理を実施するための処理回路と、処理回路によるデータ処理のスレッド内のトランザクションの実行をサポートするためのトランザクショナル・メモリ・サポート回路であって、トランザクショナル・メモリ・サポート回路が、トランザクション内の命令によってアクセスされるアドレスを追跡するためのアドレス追跡回路を備える、トランザクショナル・メモリ・サポート回路とを備える装置であって、第1のタイプのトランザクション開始命令を使用して開始される第1のタイプのトランザクションについて、命令デコーダが、トランザクション終了命令に達するまで、第1のタイプのトランザクション開始命令に続いて投機的に実行される命令の結果のコミットメントを防ぐように処理回路を制御するように構成され、トランザクショナル・メモリ・サポート回路は、別のスレッドからのメモリ・アクセスのアドレスと、トランザクションについてのアドレス追跡回路によって追跡されるアドレスとの間の競合が検出されたとき、トランザクションのアボートをトリガするように構成され、第2のタイプのトランザクション開始命令を使用して開始される第2のタイプのトランザクションについて、命令デコーダが、トランザクション内の読取り動作の実行に、アドレス追跡回路によって追跡可能として読取り動作のアドレスをマークすることによって応答することと、トランザクション内の書込み動作の実行に、アドレス追跡回路によって追跡可能として書込み動作のアドレスをマークすることを省略することによって応答することとを行うように、処理回路を制御するように構成された、装置がある。
【0007】
また、本明細書で説明される、命令デコーダを使用して命令を復号することと、装置の処理回路を使用して、復号された命令に応答してデータ処理を実施することであって、装置が、処理回路によるデータ処理のスレッド内のトランザクションの実行をサポートするためのトランザクショナル・メモリ・サポート回路を備え、トランザクショナル・メモリ・サポート回路が、トランザクション内の命令によってアクセスされるアドレスを追跡するためのアドレス追跡回路を備え、第1のタイプのトランザクション開始命令を使用して開始される第1のタイプのトランザクションについて、命令デコーダが、トランザクション終了命令に達するまで、第1のタイプのトランザクション開始命令に続いて投機的に実行される命令の結果のコミットメントを防ぐように処理回路を制御するように構成され、トランザクショナル・メモリ・サポート回路が、別のスレッドからのメモリ・アクセスのアドレスと、トランザクションについてのアドレス追跡回路によって追跡されるアドレスとの間の競合を検出したことに応答して、トランザクションのアボートをトリガするように構成された、実施することと、第2のタイプのトランザクション開始命令を使用して開始される第2のタイプのトランザクションに応答して、命令デコーダによって、トランザクション内の読取り動作の実行に、アドレス追跡回路によって追跡可能として読取り動作のアドレスをマークすることによって応答することと、トランザクション内の書込み動作の実行に、アドレス追跡回路によって追跡可能として書込み動作のアドレスをマークすることを省略することによって応答することとを行うように、処理回路を制御することとを含む、データ処理方法がある。
【0008】
また、本明細書で説明される、命令の実行のための命令実行環境を提供するようにホスト・データ処理装置を制御するためのコンピュータ・プログラムであって、データ処理を実施するようにホスト・データ処理装置を制御するためにターゲット・コードの命令を復号するための命令復号プログラム論理と、データ処理のスレッド内のトランザクションの実行をサポートするためのトランザクショナル・メモリ・サポート・プログラム論理であって、トランザクショナル・メモリ・サポート・プログラム論理が、トランザクション内の命令によってアクセスされるアドレスを追跡するためのアドレス追跡プログラム論理を備え、第1のタイプのトランザクション開始命令を使用して開始される第1のタイプのトランザクションについて、第1のタイプのトランザクション開始命令に続いて投機的に実行される命令の結果が、トランザクション終了命令に達するまで、コミットされることを防がれ、トランザクショナル・メモリ・サポート・プログラム論理が、別のスレッドからのメモリ・アクセスのアドレスと、トランザクションについてのアドレス追跡プログラム論理によって追跡されるアドレスとの間の競合を検出したことに応答して、トランザクションのアボートをトリガするように構成された、トランザクショナル・メモリ・サポート・プログラム論理とを備え、第2のタイプのトランザクション開始命令を使用して開始される第2のタイプのトランザクションに応答して、命令復号プログラム論理は、トランザクショナル・メモリ・サポート・プログラム論理が、トランザクション内の読取り動作の実行に、アドレス追跡プログラム論理によって追跡可能として読取り動作のアドレスをマークすることによって応答することと、トランザクション内の書込み動作の実行に、アドレス追跡プログラム論理によって追跡可能として書込み動作のアドレスをマークすることを省略することによって応答することとを行うように構成されることを制御するように構成された、コンピュータ・プログラムがある。
【0009】
また、本明細書で説明される、コンピュータ・プログラムを記憶する記憶媒体がある。
【0010】
本発明は、単に実例として、添付の図面に示されているその実施例を参照しながらさらに説明される。
【図面の簡単な説明】
【0011】
【
図1】トランザクショナル・メモリ・サポート回路を有するデータ処理装置の一実例を概略的に示す図である。
【
図2】トランザクショナル・メモリ・サポートを用いたシステムにおける第1のトランザクションの処理の一実例を示す図である。
【
図3】トランザクショナル・メモリ・サポートを用いたシステムにおける第2のトランザクションの処理の一実例を示す図である。
【
図4】トランザクショナル・メモリ・サポートを用いたシステムにおける第2のトランザクションの処理の別の実例を示す図である。
【
図5】2つ又はそれ以上のプロセッサ・コアと、キャッシュ・コヒーレント相互接続とを備えるシステムの一実例を概略的に示す図である。
【
図6】トランザクションの一実例の処理を示す流れ図である。
【
図7】使用され得るシミュレータ実施例を示す図である。
【0012】
添付図を参照しながら実施例について説明する前に、実施例の以下の説明が提供される。
【0013】
1つの例示的な構成によれば、第1のタイプのトランザクション開始命令を使用して開始される第1のタイプのトランザクションと、第2のタイプのトランザクション開始命令を使用して開始される第2のタイプのトランザクションとをサポートすることが可能な装置が提供される。第2のタイプのトランザクション開始命令に続いて、読取り動作のアドレスは、追跡可能としてマークされ、書込み動作のアドレスは、追跡可能としてマークされることを省略される。
【0014】
トランザクションについての書込みを追跡しないことを企図することは、これが、一見したところ、共用リソースへの排他的アクセスを確実にするための動作のアトミックに分割不可能なセットを提供することであり得る、トランザクションの本来の目的を完全に損なうように見えるので、反直観的であるように見られ得る。しかしながら、発明者は、トランザクションが、トランザクションによる排他的アクセスの保証が必要とされないことがある、他の目的のためにも使用され得ることを認識した。
【0015】
たとえば、アドレス監視(address watching)は、あるスレッド上で実行するソフトウェアが、特定のメモリ・アドレスが別のスレッド又は別のプロセッサ・コアによっていつ更新されるかを検出することを可能にするための技法である。アドレス監視を実装するための1つの手法は、ポーリングであり、スレッド上で実行するソフトウェアは、アドレスが変化したかどうかをチェックするために、そのアドレスを繰り返し読み取らなければならないが、これは、遅く、電力集約的である。別の手法では、アーキテクチャが、特定のアドレスについての「排他的」ステータスを設定するためのロード排他的命令(load exclusive instruction)を実行することによって、単一のアドレスの自動(非ポーリング)モニタリングを提供することができる。他のスレッド又はコアによるアクセスをモニタすることと、排他的としてマークされたアドレスへの書込みが検出されたとき、排他的ステータスを削除することとを行うために、排他的モニタ・ハードウェア(exclusive monitor hardware)が提供される。排他的ステータスがターゲット・アドレスから削除された場合、後続のストア排他的命令(store exclusive instruction)が失敗し、元のソフトウェアは、これを使用して、そのアドレスに書き込まれたかどうかを見つけ出すことができる。しかしながら、この手法は、同時に複数のアドレスをポーリングすることにうまくスケーリングせず、したがって、たいていのアーキテクチャが、一度に1つのアドレスのみに排他的ステータスの設定を制限する。代替手法は、マッピング又は仮想メールボックスを使用することであり、ハードウェアにおいて監視される単一のアドレスが、他のアドレスのグループ/範囲が更新されたかどうかを指示するメールボックスとして使用される。この手法の場合、アドレスのうちの1つを更新する他のソフトウェアが、更新が行われたことをシグナリングするために、仮想メールボックス・アドレスをも更新しなければならない。次いで、メールボックス・アドレスが更新されたとき、更新を通知されるべきであるスレッドが、割り込まれるが、次いで、どの他のアドレスが他のソフトウェアによって実際に更新されたものであるかを決定するために、この数又は範囲における各アドレスが、依然として、割り込まれたスレッドによって個々にポーリングされる必要があることになる。したがって、アドレス監視へのこれらの手法は、監視されるべきアドレスの増加する数とうまくスケーリングしない。
【0016】
発明者は、トランザクショナル・メモリをサポートするシステムにおいて、すでに、複数のアドレスへのアクセスをモニタし、これらのアドレスのうちの1つがアクセスされたときにソフトウェア処理に割り込むための論理があり、すなわち、トランザクションをいつアボートすべきかを検出するための競合検出論理があることを了解した。したがって、比較的わずかな追加のハードウェアを伴って複数のアドレス監視が実装され得る。第1のタイプのトランザクションに入ることは、アドレス監視のためにのみ使用されるとき、すべての読取り及び書込み動作のアドレスが追跡される必要があるので、不必要に計算集約的であることがさらに了解された。したがって、読取り動作のアドレスが追跡可能としてマークされるが、書込みアドレスが追跡可能としてマークされることを省略される、第2のタイプのトランザクションをサポートすることができる装置を提供し、これにより、第1のタイプのトランザクションの完全な計算負担なしに複数のアドレスを監視することが可能な装置を提供することがより効率的であり得ることが了解された。
【0017】
いくつかの例示的な構成では、第1のタイプのトランザクションについて、トランザクショナル・メモリ・サポート回路は、トランザクションをアボートすると復元されるべきアーキテクチャ状態のキャプチャをトリガするように構成され、第2のタイプのトランザクションについて、トランザクショナル・メモリ・サポート回路は、アーキテクチャ状態のキャプチャを省略するように構成される。これは、復元状態が、第1のタイプのトランザクションのアボートの場合にキャプチャ及び使用されるが、そのキャプチャが、第2のタイプのトランザクションについて省略されることを可能にし、それにより、第2のタイプのトランザクションを開始する際のオーバーヘッド及び処理遅延を低減する。
【0018】
いくつかの例示的な構成では、第1のタイプのトランザクションについて、トランザクション終了命令に続いて、命令デコーダは、キャプチャされたアーキテクチャ状態を廃棄するように、又はキャプチャされたアーキテクチャ状態が後で上書きされることを可能にするように、処理回路を制御するように構成される。トランザクション終了命令に達することによって、第1のタイプのトランザクションは、正常に実行されたことになり、したがって、アーキテクチャ状態は、復元される必要がないことになる。キャプチャされたアーキテクチャ状態を廃棄することによって、メモリ又はレジスタ空間が他の処理動作のために解放され得る。
【0019】
いくつかの例示的な構成では、第2のタイプのトランザクションについて、トランザクショナル・メモリ・サポート回路は、トランザクション内で実行される読取り動作のアドレスと、別のスレッドからの書込み動作のアドレスとの間の競合が検出されたとき、トランザクションのアボートをトリガするように構成される。したがって、これは、競合が検出されたとき、トランザクションを停止するための手段を提供する。特に、この場合、競合は、トランザクション内で実行される読取り動作のアドレスと、別のスレッドからの書込み動作のアドレスとの間のものであり、言い換えれば、別のスレッドが、追跡可能としてマークされたトランザクション中のアドレスのうちの1つに書き込むことを試みているときのものである。対照的に、第1のタイプ・トランザクションについて、競合は、トランザクション中の読取り動作と別のスレッドからの書込み動作との間のものであるか、又はトランザクション中の書込み動作と別のスレッドからの読取り動作との間のものであり得る。
【0020】
いくつかの例示的な構成では、トランザクショナル・メモリ・サポート回路は、少なくとも1つの他のイベントに応答して、第2のタイプのトランザクションのアボートをトリガするように構成される。たとえば、アボートをトリガし得る別のイベントは、システム・リセット、割込み、トランザクション内で実行されることを可能にされない命令の実行、又は不十分な記憶域であり得る。これは、アボート並びに競合をトリガするための多数の異なる機構を提供する。
【0021】
いくつかの例示的な構成では、第2のタイプのトランザクションについて、命令デコーダは、アボートに応答してアーキテクチャ状態の復元を省略するように処理回路を制御するように構成される。第2のタイプのトランザクションについて、書込みアドレスは、トランザクションによってアクセスされたとしてマークされないが、アーキテクチャ状態は、依然として、トランザクション中に変化し得る(たとえば、任意のロード又は算術命令が、トランザクションがその上で実行しているコアのレジスタ中のアーキテクチャ状態を更新し得る)。しかしながら、第2のタイプのトランザクションは、通常トランザクショナル・メモリの場合のように、動作のセットのアトミックな処置を確実にするために使用されておらず、代わりに、動作のセットがアトミックに完了することについての要件がないアドレス監視のために使用されている。したがって、第2のタイプのトランザクションがアボートされた場合、任意の介在する命令の結果が依然として有効であるので、前の状態を復元する必要がない。復元ステップを省略することが、したがって、トランザクションのアボートに続く計算負担(及び処理遅延)を低減し、処理効率を増加させる。
【0022】
いくつかの例示的な構成では、第2のタイプのトランザクションについて、処理回路は、第2のタイプのトランザクションのアボートに応答して、トランザクションの介在する命令の結果をコミットすること、又はトランザクション終了命令を待つことなしに、第2のタイプのトランザクション内の命令の結果をコミットすることのうちの少なくとも1つを行うように構成される。第1のタイプのトランザクションとは異なり、第2のタイプについて、アボートがある場合でも、介在する結果が有効であり得る。したがって、アボート時にコミットするか、又はトランザクション終了命令を待つことなしに、トランザクション全体にわたる限り、単に任意の介在する結果をコミットすることがよい。トランザクション終了命令を待つことなしに、第2のタイプのトランザクション内の命令の結果をコミットすることは、介在する結果がバッファ中でバッファされる必要がなく、これが、よりエネルギー効率が高いことを意味する。第2のタイプのトランザクションのアボートに応答してトランザクションの介在する命令の結果をコミットすることは、第2のタイプのトランザクションのハンドリングが第1のタイプのトランザクションのハンドリングにより似ており、したがって、より少数の制御修正が必要とされることを意味する。
【0023】
いくつかの例示的な構成では、第2のタイプのトランザクションについて、命令デコーダは、所定のタイプの命令に応答して、アボートがトリガされたという通知が受信されるまで命令の処理を休止するように処理回路を制御する。これは、処理回路を監視構成に入れ、アボートがトリガされるまでトランザクション内でさらなる動作が処理されず、それにより、アドレス追跡の低いオーバーヘッド(たとえば、低電力)手段を提供する。
【0024】
いくつかの例示的な構成では、所定のタイプの命令が、アボートをトリガした他のスレッドからのメモリ・アクセスのアドレスを指示するアドレス指示を記憶するためのレジスタを指定する。これは、アボートをトリガしたメモリ・アクセスのアドレスを記録する手段を提供する。
【0025】
いくつかの例示的な構成では、第2のタイプのトランザクションのアボートがトリガされたことに応答して、処理回路は、アボートが競合によってトリガされたかどうかを指示するアボート原因指示を記憶するように構成される。これは、アボートの原因を記録する手段を提供し、これは、アボートが、実際に、追跡されるアドレスのうちの1つへの更新によって引き起こされたのか、(割込みなどの)何らかの他の理由で引き起こされたのかをスレッドが判断するために有用であり得る。これは、ソフトウェアが、トランザクション・アボートの後にどのように処理を続けるのかを判断するのを助ける。
【0026】
いくつかの例示的な構成では、所定のタイプの命令が、アボートをトリガした他のスレッドからのメモリ・アクセスのアドレスを指示するアドレス指示を記憶するためのレジスタを指定する。これは、ソフトウェアが、追跡されている複数のアドレスのうちのどの特定のアドレスが更新されたのかを決定し、それに応じて応答することを可能にする。これは、上記で説明された代替手法の場合のように、どのアドレスが更新されたかを見つけ出すために、追跡されている複数のアドレスの各々をポーリングする必要を回避する。
【0027】
いくつかの例示的な構成では、アボート原因指示は、アドレス指示と同じレジスタに記憶される。これは、アボートの原因と、アボートをトリガしたメモリ・アクセスのアドレスとが、同じロケーションにおいて記録されることを可能にし、他の処理動作による容易なアクセスを可能にする。メモリ・アドレスがレジスタと同じ幅であるべきであることが予想され得、したがって、同じレジスタ中にアボート原因指示のための場所をも有することは反直観的であるように見られ得る。しかしながら、メモリ・アドレスがあるサイズ数のバイトに整合されることを必要とし得る、アドレス整合制約のために、アドレスの下側部分が常にすべて0であり得、したがって、アボート原因指示を指定するために再使用され得る。代替的に、いくつかのアーキテクチャは、アドレス空間全体を十分には使用しない(たとえば、潜在的64ビット・アドレス空間のうちの48ビットのみを使用する)ことがあり、したがって、上部において、アボート原因指示を提供するために使用され得るスペア・ビットがあり得る。1つの宛先レジスタのみが命令によって更新されるようにすることは、マイクロアーキテクチャにおいて実装することがより簡単であり得、レジスタの使用におけるレジスタ圧力が少なくなる。
【0028】
しかしながら、他の実例では、アボート原因指示は、アドレス指示とは別個の汎用レジスタに記憶され得る。この手法の利点は、レジスタ中で提供されるアドレス指示が、最初にアボート原因指示をマスク・アウトする必要なしに、さらなるメモリ・アクセスをトリガするために直接使用され得ることであり得る。
【0029】
いくつかの例示的な構成では、装置は、前の処理結果のプロパティを指示する少なくとも1つの条件ステータス指示を記憶するための制御レジスタを備え、条件付き命令に応答して、命令デコーダは、制御レジスタに記憶された少なくとも1つの条件ステータス指示がテスト条件を満たすかどうかを条件とする条件付き動作を実施するように処理回路を制御するように構成され、アボート原因指示は、少なくとも1つの条件ステータス指示のうちの少なくとも1つを備える。したがって、アボート原因指示は、条件付き命令によって直接テストされ得る(1つ又は複数の)条件ステータス指示に直接記録され得、したがって、アボート原因指示をテストし、それに応じて条件ステータス指示をセット・アップするために、介在する比較命令を必要とすることなしに、アボート原因指示が条件付き動作への入力として使用されるので、アボートに続いて必要とされる処理ステップの数を低減する。
【0030】
対応するコンピュータ・プログラムが、命令の実行のための命令実行環境を提供するように、ホスト・データ処理装置を制御し得、処理プログラム論理が、第2のタイプのトランザクション開始命令に応答して、追跡可能として読取り動作のアドレスをマークし、追跡可能として書込み動作のアドレスをマークすることを省略する。そのようなコンピュータ・プログラムは、それ自体、第2のタイプのトランザクションのトランザクショナル・メモリ機能性及びアドレス監視能力から恩恵を受けるために、第1のタイプのトランザクション開始命令又は第2のタイプのトランザクション開始命令についてトランザクショナル・メモリ・サポート回路又は命令デコーダ・サポートを有しない、一般的なホスト・データ処理装置を可能にし得るが、これらの特徴を提供する実際のハードウェアがないことがあり得る。代わりに、コンピュータ・プログラムは、この機能性をエミュレートする命令又はデータ構造のセットなど、プログラム論理を提供し、一般的なホスト・データ処理装置が、そのようなハードウェア特徴を提供する装置上での実行を意図されたコードを実行することを可能にする。
【0031】
次に、図を参照しながら特定の実施例が説明される。
【0032】
図1は、ハードウェア・トランザクショナル・メモリ(HTM)サポートをもつデータ処理装置2の一実例を示す。装置は、データ処理動作を行うための命令を実行するための処理回路(処理論理)4を有する。たとえば、処理回路4は、加算、乗算、AND、ORなどの算術又は論理動作を行うための算術/論理ユニット(ALU)など、様々なタイプの処理動作を実行するための実行ユニット、浮動小数点オペランドに対する動作を実施するための浮動小数点ユニット、又は複数のデータ要素を備えるベクトル・オペランドに対するベクトル処理を行うためのベクトル処理ユニットを含み得る。処理回路4によって実行される命令のためのオペランドを記憶することと、実行された命令の結果を記憶することとを行うためのアーキテクチャ・レジスタ6のセットが提供される。命令デコーダ8が、関連する動作を実施するように処理回路4又はデータ処理装置2の他の要素を制御するための制御信号を生成するために、命令キャッシュ10からフェッチされた命令を復号する。また、データ・キャッシュ14又はメイン・メモリ16からのデータ値をアーキテクチャ・レジスタ6にロードするための(命令デコーダ8によって復号されたロード命令に応答する)ロード動作と、アーキテクチャ・レジスタ6からのデータ値をデータ・キャッシュ14又はメモリ16に記憶するための(命令デコーダ8によって復号されたストア命令に応答する)ストア動作とを実施するためのロード/ストア・ユニット12が提供され得る。
【0033】
装置2は、ハードウェア・トランザクショナル・メモリ(HTM)をサポートするための様々なリソースを提供するトランザクショナル・メモリ・サポート回路20をも有する。トランザクショナル・メモリ・サポート回路20中のHTMリソースは、たとえば、トランザクションの投機的結果を記憶するための投機的結果記憶域22、トランザクションによってアクセスされるアドレスを追跡するためのアドレス追跡回路24、競合が検出されたとき、トランザクションがアボートされ得るように、トランザクションによって行われたデータ・アクセスと、他のスレッドによって行われたデータ・アクセスとの間の競合を検出するための競合検出回路26、及び、トランザクションがアボートされたとき、トランザクションの投機的結果を上書きするようにアーキテクチャ状態が復元され得るように、トランザクションの開始時にアーキテクチャ・レジスタ6からアーキテクチャ状態データのスナップショットを記憶するための復元状態記憶回路28を含み得る。また、リソースは、後でより詳細に説明される、強いロック識別子のためのロック記憶構造30と、トランザクションのネスティングのレベルを追跡するネスティング深度値を記憶するためのネスティング深度レジスタ32とを含み得る。
【0034】
図2は、トランザクショナル・メモリ・サポート回路20及び処理回路4を使用して、所与のスレッド内で第1のタイプのトランザクションを実行することの一実例を示す。第1のタイプのトランザクションは、第1のタイプのトランザクション開始命令(tstart)とトランザクション終了命令(tcommit)とによって画定されたプログラム・コードのセクションである。
図2に示されているように、第1のタイプのトランザクション開始命令に応答して、アーキテクチャ・レジスタ6中の現在のアーキテクチャ状態が、復元状態記憶回路28にキャプチャ及び記憶される。処理回路4は、tstart命令に続く後続の命令の投機的実行を実施し始め、これらの命令が実行されたとき、それらの命令によってアクセスされるアドレスがアドレス追跡回路24によって追跡され、競合検出回路26は、追跡されるアドレスと、他のスレッドに応答してロード/ストア・ユニット12を使用して行われたアクセスのアドレスとの間の競合を検出する。トランザクション内の命令の少なくともいくつかの投機的結果が、投機的結果記憶回路22内に記憶される。たとえば、ストア命令STRに応答してキャッシュ又はメモリに記憶された値が、投機的結果記憶域22中に保持され得、トランザクションは保留中のままである。アボート・イベントがその間に生じることなしにトランザクション終了命令(tcommit)に達した場合、トランザクション終了命令に応答して、投機的結果がコミットされる。トランザクションをコミットすると、そのスレッドについて投機的結果記憶域22に記憶された結果が、データ・キャッシュ14又はメモリ16に書き込まれ得、キャプチャされたアーキテクチャ状態復元状態28は、もはや、第1のタイプのトランザクション開始命令に遭遇する前のポイントにアーキテクチャ状態を巻き戻すことを必要とされないので、廃棄されるか、又は上書きされることを許可され得る。
【0035】
一方、アボート・イベントが発生した場合、たとえば、トランザクションによってすでにアクセスされたアドレスに別のスレッドがアクセスするときに、競合検出回路26によって競合が検出されたとき、トランザクションのアボートがトリガされ、復元状態記憶域28からのキャプチャされたアーキテクチャ状態がアーキテクチャ・レジスタ6に復元される。アボート・イベントの他の原因は、たとえば、トランザクション内で実行されることを可能にされない命令の実行、所与のトランザクションによって必要とされる投機的結果又はアドレスをハンドリングするための投機的結果記憶域22又はアドレス追跡回路24内の不十分なリソース、或いはトランザクション中に割込みが受信されることを含み得る。
【0036】
図3は、トランザクショナル・メモリ・サポート回路20及び処理回路4を使用して、所与のスレッド内で第2のタイプのトランザクションを実行することの一実例を示す。第2のタイプのトランザクションは、第2のタイプのトランザクション開始命令から始まるプログラム・コードのセクションである。
図3中の実例では、第2のタイプのトランザクション開始命令は、特定の命令(startl)である。代替的に、前に制御レジスタ中にセットされたフラグは、トランザクション開始命令が、第1のタイプのものであるのか、第2のタイプのものであるのかをシグナリングするために使用され得る。
図3に示されているように、第2のタイプのトランザクション開始命令に応答して、処理回路26は、トランザクション内の(ロード命令LD x0,[A]~LD x4,[E]などの)読取り動作の実行に、アドレス追跡回路24によって追跡可能として読取り動作のアドレス(たとえば、
図3に示されているアドレス[A]~[E])をマークすることによって応答する。第1のタイプのトランザクションとは対照的に、処理回路26は、トランザクション内の書込み動作の実行に、アドレス追跡回路24によって追跡可能として書込み動作のアドレスをマークすることを省略することによって応答する。言い換えれば、
図3の実例におけるSTR[#add2]などのストア命令に遭遇すると、メモリ・アドレスについての書込みフラグはマークされない。
【0037】
図3に示されているように、トランザクショナル・メモリ・サポート回路20はまた、第2のタイプのトランザクションについてアーキテクチャ状態のキャプチャを省略するように構成され得る。言い換えれば、第2のタイプのトランザクションについて、
図2に示されている第1のタイプのトランザクション開始命令tstartについてキャプチャされることになるアーキテクチャ状態をキャプチャすることなしに、tstartl命令に続く命令が実施される。
【0038】
別のスレッドが、第2のタイプのトランザクションの読取りセットの一部としてすでに追跡されたアドレスに書き込むときに、競合検出回路26によって競合が検出された場合、トランザクショナル・メモリ・サポート回路20は、第2のタイプのトランザクションのアボートをトリガするように構成される。トランザクショナル・メモリ・サポート回路は、少なくとも1つの他のイベント、たとえば、トランザクション内で実行されることを可能にされない命令の実行、システム・リセット、投機的結果記憶域22又はアドレス追跡回路24内の不十分なリソース、或いはトランザクション中に割込みが受信されることに応答して、第2のタイプのトランザクションのアボートをトリガするようにも構成され得る。第2のタイプのトランザクションのアボートに応答して、処理回路4は、様々な異なるアクションを実施するように構成され得る。たとえば、処理回路4は、第2のタイプのトランザクションのアボートに応答して、トランザクションの介在する命令の結果をコミットするように構成され得る。代替的に又は追加として、処理回路4は、トランザクション終了命令を待つことなしに、第2のタイプのトランザクション内の命令の結果をコミットするように構成され得る。代替的に又は追加として、処理回路4は、アボートが競合によってトリガされたかどうかを指示するアボート原因指示を記憶するように構成され得る。
【0039】
図3は、第2のタイプのトランザクションとともに使用するための所定のタイプの命令(wft)をも示す。wft命令に応答して、処理回路は、アボートがトリガされたという通知が受信されるまで命令の処理を休止する。言い換えれば、たとえば、追跡可能としてマークされたアドレスと、別のスレッドからの書込み動作との間の競合によって引き起こされたアボートがあるまで、トランザクション中の命令の処理が休止される。
図3に示されているように、wft命令は、アボートをトリガした他のスレッドからのメモリ・アクセスのアドレスを指示するアドレス指示を記憶するためのレジスタx5を指定する。この指示は、アボートをトリガした個々のアドレスではなくセット中の第1のアドレスの指示であり得る。処理回路4が、アボートに応答してアボート原因指示を記憶するとき、このアボート原因指示は、アドレス指示と同じレジスタに記憶され得る。代替的に、アボート原因指示は、アドレス指示に対して別個の汎用レジスタ、たとえば、状態レジスタに記憶され得る。
【0040】
装置2は、前の処理結果のプロパティを指示する少なくとも1つの条件ステータス指示を記憶するための制御レジスタをも備えることができる。条件付き命令に応答して、命令デコーダ8は、制御レジスタに記憶された少なくとも1つの条件ステータス指示がテスト条件を満たすかどうかを条件とする条件付き動作を実施するように処理回路4を制御するように構成される。アボート原因指示は、その場合、前記少なくとも1つの条件ステータス指示のうちの少なくとも1つを備える。
【0041】
図4は、トランザクショナル・メモリ・サポート回路20及び処理回路4を使用して、所与のスレッド内で第2のタイプのトランザクションを実行することの別の実例を示す。
図3に示されている実例の場合と同様に、第2のタイプのトランザクションは、第2のタイプのトランザクション開始命令(startl)から始まる。第2のタイプのトランザクション開始命令に応答して、処理回路26は、トランザクション内の読取り動作の実行に、アドレス追跡回路24によって追跡可能として読取り動作のアドレスをマークすることと、アドレス追跡回路24によって追跡可能として書込み動作のアドレスをマークすることを省略することとを行うことによって応答する。さらに、トランザクショナル・メモリ・サポート回路20はまた、アーキテクチャ状態のキャプチャを省略するように構成され得る。
図4中の第2のタイプのトランザクション開始命令に続いて、ロード排他的(LDX)命令及びストア排他的(STX)命令がある。ロード排他的命令及びストア排他的命令は、メモリをアトミックに更新する動作を2つの別個のステップにスプリットし、また、排他的メモリ・アクセスを追跡する排他的モニタとともにアトミックな更新を証明するために使用され得る。これは、
図5を参照しながら以下でさらに説明される。ストア排他的命令より前に、通常(非排他的)ロード及びストア命令など、(省略記法によって指示されている)他の動作があり得る。
【0042】
図5は、キャッシュ・コヒーレント相互接続システム100の一実例を概略的に示す。示されているシステムは、各々それ自体のローカル・キャッシュ115、125をもつ、2つの処理要素110、120を備える。2つの処理要素110、120のみが
図5に示されているが、より多くの処理要素が提供され得ることが諒解されよう。メモリ140は、処理要素110、120間で共有され、コヒーレント相互接続130は、処理要素110、120と、メモリ140との間のコヒーレンシを維持する。また、スヌープ・フィルタ135が
図5に示されている。
図5において、スヌープ・フィルタ135は、コヒーレント相互接続130上に位置するものとして示されているが、これは必須でなく、スヌープ・フィルタは、コヒーレント相互接続130を介して処理要素110、120に接続された別個の要素として提供され得る。代替的に、スヌープ・フィルタは、処理要素110、120のうちの1つの一部を形成し得る。
図5に示されているシステムでは、スヌープ・フィルタ135は、共有可能としてマークされたメモリ領域への排他的アクセスを追跡するための排他的モニタとして働く。代替的に、排他的モニタは、処理要素110、120と、メモリ140との間の別個の回路として実装され、排他的アクセスをサポートする各処理要素110、120についてのアドレスを割り振ることによって動作し得る。
【0043】
第1の処理要素110上のロード排他的(LDX)動作が、ロードされた値で書き込まれるべき宛先レジスタ(
図4中のx0)を指定し、ロードに加えて、ロード排他的動作のターゲット・アドレス(
図4中の[A])が、たとえば、キャッシュにおいて、スヌープ・フィルタにおいて又は別個の排他的モニタにおいて、第1の処理要素110に排他的としてタグ付けされることを引き起こす。第2の処理要素120が、第1の処理要素110に排他的としてマークされたアドレス[A]へのストアを実行する場合、排他的ステータスは削除される。排他的ステータスが削除されることにもつながり得る他のイベントがあり得ることが諒解されよう。ストア排他的(STX)命令は、ターゲット・アドレス(
図4中の[A])、データがそこからターゲット・アドレスに記憶されるべきであるソース・レジスタ(
図4中のx20)、及びストアが成功したかどうかを指示する値が書き込まれるべきである宛先レジスタ(
図4中のw21)を指定する。第1の処理要素110によって実行されたストア排他的命令に応答して、排他的モニタが、ストア排他的命令によって言及されたターゲット・アドレス[A]について設定されたかどうかがチェックされる。排他的モニタが依然として設定される場合、ストアは成功しており、宛先レジスタw21はパス指示に設定される。排他的モニタがターゲット・アドレス[A]について依然として設定されない場合、ストアは行われず、宛先レジスタw21は失敗指示に設定される。
【0044】
図4の実例は、アドレス[A]がアドレス[B]、[C]、[D]におけるデータ構造へのポインタを表す場合に有用であり得る。アドレス[B]、[C]、[D]から読み取られた値に基づいていくつかの更新が実施され得、更新された値を(アドレス[B]~[D]とは異なる)別個のアドレス範囲に記憶するために非排他的ストア命令が使用され得る。ハードウェアで提供される(アドレス監視及び競合検出論理を含む)トランザクション機構は、別のスレッドが、トランザクションがまだ完了していなかったときにアドレス[B]~[D]のうちの1つを更新する場合、トランザクションがアボートされ、ストア排他的命令が実行されないことを保証し得る。しかしながら、トランザクションが、いかなるそのようなアボートもなしにストア排他的命令に達した場合、ストア排他的命令は、新しいデータ構造を指すように、アドレス[A]において記憶されたポインタを更新することができ、新しいデータ構造がアトミックに効果を生じるようにポインタの向きを変えるが、命令のLDX/STXペアと組み合わせたtstartl命令の使用によって、これは、第1のタイプのトランザクション開始命令が使用された場合のような、復元状態を保存/復元することに関連する遅延を招く必要なしに達成され得る。したがって、[A]におけるポインタは、元のデータ構造におけるアドレス[B]~[D]のセットが変えられなかった場合、変更されることになるにすぎず、したがって、ストア排他的命令に関連する指示は、ストア排他的命令が成功したことを指示する。
【0045】
図6は、トランザクションを処理する方法600を示す流れ図である。ステップ605において、上記で説明されたtstart又はstartlなど、トランザクション開始命令が復号及び実行される。ステップ610において、トランザクション開始命令が、第1のタイプ(tstart)のものであるのか、第2のタイプ(tstartl)のものであるのかが決定される。トランザクション開始命令が第1のタイプのものである場合、方法は、ステップ615に進み、アーキテクチャ状態がキャプチャされる。方法は、次いで、ステップ620に進み、アドレスの読取り及び書込みセットの追跡(ステップ625)を含む、トランザクション中の命令の投機的実行が始められる。方法は、次いでステップ645に進む。ステップ610において、トランザクション開始命令が第2のタイプのものであると決定された場合、方法は、ステップ630に進み、アドレスの読取りセットは、トランザクション中の命令の実行中に追跡される。ステップ635において、トランザクション中の命令の実行中に所定の命令タイプ(wft)に遭遇したかどうかが決定される。所定の命令タイプに遭遇した場合、方法は、ステップ640に進み、命令のさらなる処理が休止される。方法は、次いでステップ645に進む。所定の命令タイプに遭遇しなかった場合、トランザクション中の命令が実行され続け、方法は、ステップ645に直接進む。ステップ645において、アボート・イベントが発生したか否かが決定される。アボート・イベントが発生しなかった場合、方法は、ステップ650に進み、トランザクション終了(tend)命令に遭遇したかどうか(言い換えれば、tend命令が復号及び実行されたかどうか)が決定される。トランザクション終了命令に遭遇しなかった場合、方法は、ステップ645に戻る。トランザクション終了命令に遭遇した場合、方法は、ステップ655に進み、トランザクションからの投機的結果がコミットされ、キャプチャされたアーキテクチャ状態は、もはや、このトランザクションのために必要とされないので、上書きされることを許可される。方法は、次いで、受信されるべき次のトランザクション開始命令に備えて、ステップ605に戻る。ステップ645において、アボート・イベントに遭遇したと決定された場合、方法は、ステップ660に進み、トランザクションがアボートされる。ステップ665において、遭遇したトランザクション開始命令が、第1のタイプのものであるのか、第2のタイプのものであるのか(言い換えれば、トランザクションが、第1のタイプのものであるのか、第2のタイプのものであるのか)が再び決定される。遭遇したトランザクション開始命令が、第2のタイプのものでなかった(言い換えれば、それが第1のタイプのものであった)と決定された場合、方法は、ステップ670に進み、キャプチャされたアーキテクチャ状態が復元される。方法は、次いで、受信されるべき次のトランザクション開始命令に備えて、ステップ605に戻る。ステップ665において、遭遇したトランザクション開始命令が第2のタイプであったと決定された場合、方法は、ステップ675に進み、介在する命令の結果がコミットされ、及び/又はトランザクション終了命令を待つことなしに、命令の結果がコミットされる。方法は、次いで、受信されるべき次のトランザクション開始命令に備えて、ステップ605に戻る。
図6に示されている方法600は閉ループとして示されているが、本方法は単一のトランザクションで行われ得、本方法はステップ655、670又は675のうちの1つにおいて終結することが諒解されよう。
【0046】
図7は、使用され得るシミュレータ実装形態を示す。前に説明された実施例は、関係する技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法に関して本発明を実装するが、コンピュータ・プログラムの使用によって実装される本明細書で説明される実施例による命令実行環境を提供することも可能である。そのようなコンピュータ・プログラムは、それらがハードウェア・アーキテクチャのソフトウェア・ベースの実装形態を提供する限り、しばしば、シミュレータと呼ばれる。様々なシミュレータ・コンピュータ・プログラムは、エミュレータ、仮想マシン、モデル、及び動的バイナリ・トランスレータを含むバイナリ・トランスレータを含む。一般に、シミュレータ実装形態は、随意に、シミュレータ・プログラム210をサポートするホスト・オペレーティング・システム220を動作させる、ホスト・プロセッサ230上で動作し得る。いくつかの配列では、ハードウェアと、提供された命令実行環境、及び/又は同じホスト・プロセッサ上に設けられた複数の別個の命令実行環境との間にシミュレーションの複数のレイヤがあり得る。歴史的に、妥当な速度において実行するシミュレータ実装形態を提供するために、強力なプロセッサが必要とされたが、そのような手法は、適合性又は再使用の理由のために、別のプロセッサにネイティブなコードを実行する要望があるときなど、いくつかの状況で正当化され得る。たとえば、シミュレータ実装形態は、ホスト・プロセッサ・ハードウェアによってサポートされない追加の機能性をもつ命令実行環境を提供するか、又は一般に、異なるハードウェア・アーキテクチャに関連する命令実行環境を提供し得る。シミュレーションの概観が「Some Efficent Architecture Simulation Techniques」、Robert Bedichek、Winter 1990 USENIX Conference、53~63頁において与えられる。
【0047】
実施例が特定のハードウェア構成体又は特徴に関して前に説明された限りにおいて、シミュレートされた実施例において、等価な機能性が、好適なソフトウェア構成体又は特徴によって提供され得る。たとえば、特定の回路が、コンピュータ・プログラム論理として、シミュレートされた実施例において実装され得る。同様に、レジスタ又はキャッシュなど、メモリ・ハードウェアが、ソフトウェア・データ構造として、シミュレートされた実施例において実装され得る。前に説明された実施例において参照されたハードウェア要素のうちの1つ又は複数がホスト・ハードウェア(たとえば、ホスト・プロセッサ230)上に存在する配列では、いくつかのシミュレートされた実施例が、好適な場合、ホスト・ハードウェアを利用し得る。
【0048】
シミュレータ・プログラム210は、(非一時的媒体であり得る)コンピュータ可読記憶媒体に記憶され得、シミュレータ・プログラム210によってモデル化されているハードウェア・アーキテクチャのアプリケーション・プログラム・インターフェースと同じであるプログラム・インターフェース(命令実行環境)を、(アプリケーション、オペレーティング・システム及びハイパーバイザを含み得る)ターゲット・コード200に提供する。したがって、上記で説明された第1のタイプのトランザクション開始命令と第2のタイプのトランザクション開始命令とを含む、ターゲット・コード200のプログラム命令は、上記で説明された装置2のハードウェア特徴を実際に有しないホスト・コンピュータ230が、これらの特徴をエミュレートすることができるように、シミュレータ・プログラム210を使用して命令実行環境内から実行され得る。
【0049】
本出願では、「...ように構成された(configured to...)」という言葉は、装置の要素が、定義された動作を行うことが可能である構成を有することを意味するために使用される。このコンテキストにおいて、「構成」は、ハードウェア又はソフトウェアの相互接続の配列又は様式を意味する。たとえば、装置が、定義された動作を提供する専用ハードウェアを有し得るか、又は、プロセッサ若しくは他の処理デバイスが、機能を実施するようにプログラムされ得る。「ように構成された」は、装置要素が定義された動作を提供するために、何らかのやり方で変更されることを必要とすることを暗示しない。
【0050】
本発明の例示的な実施例が、添付の図面を参照しながら本明細書では詳細に説明されたが、本発明がそれらの正確な実施例に限定されないこと、並びに、そこで様々な変更及び修正が、添付の特許請求の範囲によって規定される本発明の範囲及び趣旨から逸脱することなく、当業者によって実施され得ることを理解されたい。