IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アーム・リミテッドの特許一覧

特許7526674トランザクショナル・メモリをサポートするための装置においてロード排他命令を取り扱うこと
<>
  • 特許-トランザクショナル・メモリをサポートするための装置においてロード排他命令を取り扱うこと 図1
  • 特許-トランザクショナル・メモリをサポートするための装置においてロード排他命令を取り扱うこと 図2
  • 特許-トランザクショナル・メモリをサポートするための装置においてロード排他命令を取り扱うこと 図3
  • 特許-トランザクショナル・メモリをサポートするための装置においてロード排他命令を取り扱うこと 図4
  • 特許-トランザクショナル・メモリをサポートするための装置においてロード排他命令を取り扱うこと 図5
  • 特許-トランザクショナル・メモリをサポートするための装置においてロード排他命令を取り扱うこと 図6
  • 特許-トランザクショナル・メモリをサポートするための装置においてロード排他命令を取り扱うこと 図7
  • 特許-トランザクショナル・メモリをサポートするための装置においてロード排他命令を取り扱うこと 図8
  • 特許-トランザクショナル・メモリをサポートするための装置においてロード排他命令を取り扱うこと 図9
  • 特許-トランザクショナル・メモリをサポートするための装置においてロード排他命令を取り扱うこと 図10
  • 特許-トランザクショナル・メモリをサポートするための装置においてロード排他命令を取り扱うこと 図11
  • 特許-トランザクショナル・メモリをサポートするための装置においてロード排他命令を取り扱うこと 図12
  • 特許-トランザクショナル・メモリをサポートするための装置においてロード排他命令を取り扱うこと 図13
  • 特許-トランザクショナル・メモリをサポートするための装置においてロード排他命令を取り扱うこと 図14
  • 特許-トランザクショナル・メモリをサポートするための装置においてロード排他命令を取り扱うこと 図15
  • 特許-トランザクショナル・メモリをサポートするための装置においてロード排他命令を取り扱うこと 図16
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-07-24
(45)【発行日】2024-08-01
(54)【発明の名称】トランザクショナル・メモリをサポートするための装置においてロード排他命令を取り扱うこと
(51)【国際特許分類】
   G06F 9/34 20180101AFI20240725BHJP
   G06F 9/38 20180101ALI20240725BHJP
   G06F 9/46 20060101ALI20240725BHJP
   G06F 9/52 20060101ALI20240725BHJP
【FI】
G06F9/34 350A
G06F9/38 350X
G06F9/46 430
G06F9/52 120B
【請求項の数】 11
(21)【出願番号】P 2020570061
(86)(22)【出願日】2019-05-09
(65)【公表番号】
(43)【公表日】2021-10-28
(86)【国際出願番号】 GB2019051276
(87)【国際公開番号】W WO2020002869
(87)【国際公開日】2020-01-02
【審査請求日】2022-05-02
(31)【優先権主張番号】18386018.8
(32)【優先日】2018-06-25
(33)【優先権主張国・地域又は機関】EP
(73)【特許権者】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】ホースネル、マシュー ジェイムズ
(72)【発明者】
【氏名】マグクリス、グリゴリオス
(72)【発明者】
【氏名】グリセンスウェイト、リチャード ロイ
(72)【発明者】
【氏名】チョン、ネイサン ヨン セン
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許出願公開第2015/0378927(US,A1)
【文献】米国特許出願公開第2009/0089520(US,A1)
【文献】米国特許出願公開第2016/0378658(US,A1)
【文献】米国特許出願公開第2017/0004004(US,A1)
【文献】特表2017-507429(JP,A)
【文献】特表2019-534504(JP,A)
【文献】特表2012-513067(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/34
G06F 9/38
G06F 9/46
G06F 9/52
(57)【特許請求の範囲】
【請求項1】
データ処理のスレッドを処理する処理回路と、
前記処理回路により処理される前記スレッド内のトランザクションの実行をサポートするトランザクショナル・メモリ・サポート回路であって、前記トランザクションが、トランザクション開始命令とトランザクション終了命令との間に投機的に実行される前記スレッドの命令を含み、前記命令に対して、前記処理回路が、前記トランザクション終了命令への到達が発生するまで、投機的に実行された前記命令の結果のコミットメントを防止するように構成され、前記トランザクショナル・メモリ・サポート回路が、前記トランザクションに対して追跡されるワーキング・アドレス・セットのうちの1つに対する別のスレッドからのコンフリクトするアクセスを検出したことに応答して、前記トランザクションの停止をトリガーするコンフリクト検出回路を備える、トランザクショナル・メモリ・サポート回路と、
を備え、
所与のアドレスを指定したロード排他命令に応答して、前記処理回路が、前記所与のアドレスに対して排他モニター標示をセットするように構成され、
前記所与のアドレスを指定したストア排他命令に応答して、前記処理回路が、前記所与のアドレスが前記排他モニター標示をもはやセットさせないとき、ストア排他失敗標示を返信するように構成され、
前記所与のアドレスを指定する前記ロード排他命令に応答して、前記処理回路と前記トランザクショナル・メモリ・サポート回路とのうちの少なくとも1つが、前記ワーキング・アドレス・セットの1つとして前記所与のアドレスが指定されたトランザクションの停止をトリガーするように構成され、
所与のトランザクション内において実行されるロード対象アドレスを指定した所定のタイプのロード命令に応答して、前記処理回路が、前記ロード対象アドレスを指定する前記ロード排他命令に応答して前記ロード対象アドレスに対して以前にセットされ、前記ロード対象アドレスを指定するストア排他命令に応答して確認された任意の前記排他モニター標示をクリアすることをトリガーするように構成される、装置。
【請求項2】
前記処理回路が、処理の複数の前記スレッドの並列な実行が可能な複数の処理要素を備える、
請求項1に記載の装置。
【請求項3】
前記ロード排他命令が複数の前記処理要素のうちの所与の処理要素において実行されたことに応答して、前記所与の処理要素が、少なくとも1つの他の前記処理要素へのメッセージの送信をトリガーするように構成され、前記メッセージが、前記排他モニター標示が前記所与のアドレスに対してセットされたことを示す、
請求項2に記載の装置。
【請求項4】
前記所定のタイプの前記ロード命令が複数の前記処理要素のうちの所与の処理要素において実行されたことに応答して、前記所与の処理要素が、複数の前記処理要素のうちの少なくとも1つの他の前記処理要素へのメッセージの送信をトリガーするように構成され、前記メッセージが、前記ロード対象アドレスに対して少なくとも1つの他の前記処理要素により以前にセットされた任意の前記排他モニター標示がクリアされなければならないことを示す、
請求項2及び請求項3のいずれか一項に記載の装置。
【請求項5】
前記所与のトランザクション内において実行された前記所定のタイプの前記ロード命令に応答して、前記処理回路が、前記所与のトランザクションのための前記ワーキング・アドレス・セットに前記ロード対象アドレスを追加するように構成される、
請求項1から請求項4のいずれか一項に記載の装置。
【請求項6】
前記所与のトランザクション内において実行されたロード対象アドレスを指定した第2のタイプの前記ロード命令に応答して、前記処理回路が、前記ロード対象アドレスに対して任意の以前にセットされた前記排他モニター標示を保有するように構成される、
請求項1から請求項5のいずれか一項に記載の装置。
【請求項7】
対象アドレスへの排他アクセスを制御するためのロック変数が所与のスレッドにより成功のうちにクレームされたか否かを前記処理回路が解決する前に、前記処理回路が、前記対象アドレスからデータ値をロードするためにロード命令を投機的に実行する前記所与のスレッドをサポートするように構成される、
請求項1から請求項6のいずれか一項に記載の装置。
【請求項8】
前記処理回路が、前記所与のアドレス又は別のアドレスを指定したロード排他命令を実行したことと、
前記処理回路が、前記ロード対象アドレスとして前記所与のアドレスを指定した前記所定のタイプの前記ロード命令を実行したことと、
ストア演算が、前記所与のアドレスに対応したメモリ位置にデータを記憶したことと、
のうちの1つを検出したことに応答して、前記所与のアドレスに対してセットされた前記排他モニター標示のクリアをトリガーする排他モニター回路を備える、
請求項1から請求項7のいずれか一項に記載の装置。
【請求項9】
前記トランザクショナル・メモリ・サポート回路が、
少なくとも1つの前記トランザクションに対する投機的に実行された前記命令の前記結果を記憶する投機的結果記憶回路と、
前記トランザクションを前記停止したときにリストアされる、前記トランザクション開始命令に応答してキャプチャされた状態を記憶するリストア状態記憶回路と、
のうちの少なくとも1つをさらに備える、
請求項1から請求項8のいずれか一項に記載の装置。
【請求項10】
所与のアドレスを指定したロード排他命令に応答して、前記所与のアドレスに対して排他モニター標示をセットすることと、
前記所与のアドレスを指定したストア排他命令に応答して、前記所与のアドレスが前記排他モニター標示をもはやセットさせないとき、ストア排他失敗標示を返信することと、
ード対象アドレスを指定する前記ロード排他命令に応答してトランザクション内において実行される前記ロード対象アドレスを指定した所定のタイプのロード命令に応答して、前記ロード対象アドレスに対して以前にセットされ、前記ロード対象アドレスを指定するストア排他命令に応答して確認された任意の前記排他モニター標示をクリアすることであって、前記トランザクションが、トランザクション開始命令とトランザクション終了命令との間に投機的に実行される所与のスレッドの命令を含み、前記命令に対して、前記トランザクション終了命令への到達が発生するまで、投機的に実行された前記命令の結果のコミットメントが防止され、前記トランザクションに対して追跡されるワーキング・アドレス・セットのうちの1つに対する別のスレッドからのコンフリクトするアクセスを検出したことに応答して、前記トランザクションが停止される、クリアすることと、
前記ロード対象アドレスを指定する前記ロード排他命令に応答して、前記ワーキング・アドレス・セットのうちの1つとして前記所与のアドレスが指定された対象であるトランザクションの停止をトリガーすることと、
を含む、データ処理方法。
【請求項11】
データ処理のスレッドの実行のための命令実行環境を提供するようにホスト・データ処理装置を制御するためのコンピュータ・プログラムであって、前記コンピュータ・プログラムが、
前記データ処理の前記スレッドを処理する処理プログラム論理部と、
前記処理プログラム論理部により処理される前記スレッド内のトランザクションの実行をサポートするトランザクショナル・メモリ・プログラム論理部であって、前記トランザクションが、トランザクション開始命令とトランザクション終了命令との間に投機的に実行される前記スレッドの命令を含み、前記命令に対して、前記処理プログラム論理部が、前記トランザクション終了命令への到達が発生するまで、投機的に実行された前記命令の結果のコミットメントを防止するように構成され、トランザクショナル・メモリ・プログラム論理部が、前記トランザクションに対して追跡されるワーキング・アドレス・セットのうちの1つに対する別のスレッドからのコンフリクトするアクセスを検出したことに応答して前記トランザクションの停止をトリガーするコンフリクト検出プログラム論理部を備える、トランザクショナル・メモリ・プログラム論理部と、
を備え、
所与のアドレスを指定したロード排他命令に応答して、前記処理プログラム論理部が、前記所与のアドレスに対して排他モニター標示をセットするように構成され、
前記所与のアドレスを指定したストア排他命令に応答して、前記処理プログラム論理部が、前記所与のアドレスが前記排他モニター標示をもはやセットさせないとき、ストア排他失敗標示を返信するように構成され、
前記所与のアドレスを指定する前記ロード排他命令に応答して、前記処理プログラム論理部と前記トランザクショナル・メモリ・プログラム論理部とのうちの少なくとも1つが、前記ワーキング・アドレス・セットの1つとして前記所与のアドレスが指定されたトランザクションの停止をトリガーするように構成され、
所与のトランザクション内において実行されるロード対象アドレスを指定した所定のタイプのロード命令に応答して、前記処理プログラム論理部が、前記ロード対象アドレスを指定する前記ロード排他命令に応答して前記ロード対象アドレスに対して以前にセットされ、前記ロード対象アドレスを指定するストア排他命令に応答して確認された任意の前記排他モニター標示をクリアすることをトリガーするように構成され
る、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本技術は、データ処理の分野に関する。より具体的には、トランザクショナル・メモリに対するサポートを備えるデータ処理装置に関する。
【背景技術】
【0002】
データ処理システムは、データ処理の多くのスレッドを実行し得る。場合によっては、スレッドはシェアされたリソースにアクセスすることを必要とし得、データ処理演算の本質は、スレッドがシェアされたリソースと相互作用し始めた後、同時に別のスレッドがそのリソースにアクセスすることなく、そのリソースを使用する演算のセットがアトミックに履行されることが必要であり得る、というものであり得る。
【0003】
第1のスレッドにおけるコードのクリティカル・セクションが第2のスレッドにおけるコードのクリティカル・セクションに対してアトミックに実施されるという性質は、「相互排他」と呼ばれ得る。クリティカル・セクションは、それぞれのスレッドにおける命令の同一のシーケンスを含み得、又は、シェアされたリソースを両方が更新するコードの異なるセクションを含み得る。両方のクリティカル・セクションが実施された結果が次のいずれかの場合、すなわち、第1のスレッドがクリティカル・セクションを実施した後、第1のスレッドにおけるクリティカル・セクションの結果を使用して第2のスレッドが第2のスレッドのクリティカル・セクションを実施することに結果が等しいか、又はその逆に、第1のスレッドが第1のスレッドにおけるシェアされたリソースの処理のために第2のスレッドにおけるクリティカル・セクションの結果を使用するような結果を伴う場合に、相互排他が満たされ得る。第1のスレッド及び第2のスレッドの両方のクリティカル・セクションが並列に処理されるが、1つのスレッドにおけるクリティカル・セクションが他のスレッドにおけるクリティカル・セクションにより結果的にもたらされるシェアされたリソースの更新された値を考慮しない場合の帰結は、相互排他に違反し得る。
【0004】
スレッド間の相互排他を維持するための1つの技術は、少なくとも1つの対象リソースに対する排他アクセスを制御するためにロックを使用することであり得る。例えば、あるスレッドが特定のアドレス領域におけるデータにアクセスし始めたとき、そのスレッドが、ロックのオーナーシップをクレームするためにロック変数をセットし得、次に、ロック所有スレッドがロックのオーナーシップをもっている間に、ロック変数を確認する他のスレッドが、ロックが既にクレームされていることを特定し得、その結果、そのアドレス領域と相互作用するコードのセクションに入らない場合があり得る。コンフリクトが起こり得ないことを保証するロックのオーナーシップを各スレッドがもっていない限り、別のスレッドとのコンフリクトが発生し得るので、シェアされたリソースにアクセスするコードのセクションに各スレッドが入ることができないということを、各スレッドがデフォルト設定により仮定するという点で、このようなロック・ベースのアプローチは悲観的という見方がされ得る。しかし、多くの場合、ロック識別子は多くのリソース(例えばある範囲のアドレス)に対する排他アクセスを制御し得、したがって、あるスレッドがロック変数により保護されたリソースのセット内の特定のリソースにアクセスしている場合、別のスレッドが同じリソースに無条件にアクセスすることが保証されない。したがって、スレッドは、シェアされたリソースを使用するコードのクリティカル・セクションに入る前に、ロックが解放されることを不必要に待ち得るので、ロック・ベースのアプローチは、スレッド間のコンフリクトがまれである場合にパフォーマンスの低下につながり得る。
【先行技術文献】
【非特許文献】
【0005】
【文献】「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、Winter 1990 USENIX Conference、53~63頁
【発明の概要】
【発明が解決しようとする課題】
【0006】
シェアされたリソースにアクセスするスレッド間のコンフリクトを取り扱うための、より楽観的なアプローチはトランザクショナル・メモリ・サポートを使用することであり得る。データ処理システムは、処理回路によるデータ処理のスレッド内のトランザクションの実行をサポートする回路を含み得る。本トランザクションは、トランザクションの開始をマーキングするトランザクション開始命令とトランザクションの終了をマーキングするトランザクション終了命令との間に実行されるスレッドの命令であり得る。トランザクション開始命令とトランザクション終了命令との間に、処理回路が介入的な命令を投機的に実行し、トランザクション終了命令への到達が発生するまで、それらの投機的に実行された命令の結果のコミットメントを防止し得る。トランザクション開始命令の実行の後の(しかしトランザクション終了命令への到達が発生する前の)停止イベントの発生は、トランザクションが停止されること、及び、投機的な結果が破棄されることを結果的にもたらし得る。トランザクションを停止する多くの理由が存在し得るが、1つの理由は、別のスレッドにより行われたメモリ・アクセスとの間で検出されたコンフリクトであり得る。したがって、このアプローチによると、各スレッドは、他のスレッドとのコンフリクトが発生しないと仮定して、コードのクリティカル・セクションを処理することを楽観的に開始し得、次に、コンフリクトが一切検出されずに、クリティカル・セクションの終了への到達が発生した場合、トランザクションの結果がコミットされ得る。コンフリクトがまれである場合、トランザクショナル・メモリ・サポートを使用することは、より多くのスレッドがそれらのコードのクリティカル・セクションを同時に処理することを可能にすることにより、(ロック・ベースのアプローチに比べて)パフォーマンスを改善し得る。
【課題を解決するための手段】
【0007】
少なくともいくつかの実例は、
データ処理のスレッドを処理する処理回路と、
処理回路により処理されるスレッド内のトランザクションの実行をサポートするトランザクショナル・メモリ・サポート回路であって、トランザクションが、トランザクション開始命令とトランザクション終了命令との間に投機的に実行されるスレッドの命令を含み、命令に対して、処理回路が、トランザクション終了命令への到達が発生するまで投機的に実行された命令の結果のコミットメントを防止するように構成され、トランザクション・メモリ・サポート回路が、トランザクションに対して追跡されるワーキング・アドレス・セットのうちの1つに対する別のスレッドからのコンフリクトするアクセスを検出したことに応答して、トランザクションの停止をトリガーするコンフリクト検出回路を備える、トランザクショナル・メモリ・サポート回路と、
を備え、ここで、
所与のアドレスを指定したロード排他命令に応答して、処理回路が、所与のアドレスに対して排他モニター標示をセットするように構成され、
所与のアドレスを指定したストア排他命令に応答して、処理回路が、所与のアドレスが排他モニター標示をもはやセットさせないとき、ストア排他失敗標示を返信するように構成され、
所与のトランザクション内において実行される、ロード対象アドレスを指定した所定のタイプのロード命令に応答して、処理回路が、ロード対象アドレスに対して以前にセットされた任意の排他モニター標示をクリアすることをトリガーするように構成され、
ロード排他命令に応答して、処理回路とトランザクショナル・メモリ・サポート回路とのうちの少なくとも1つが、ワーキング・アドレス・セットのうちの1つとして所与のアドレスが指定された対象であるトランザクションの停止をトリガーするように構成される、
装置を提供する。
【0008】
少なくともいくつかの実例が、
所与のアドレスを指定したロード排他命令に応答して、所与のアドレスに対して排他モニター標示をセットすることと、
所与のアドレスを指定したストア排他命令に応答して、所与のアドレスが排他モニター標示をもはやセットさせないとき、ストア排他失敗標示を返信することと、
トランザクション内において実行されるロード対象アドレスを指定した所定のタイプのロード命令に応答して、ロード対象アドレスに対して以前にセットされた任意の排他モニター標示をクリアすることであって、トランザクションが、トランザクション開始命令とトランザクション終了命令との間に投機的に実行される所与のスレッドの命令を含み、命令に対して、トランザクション終了命令への到達が発生するまで、投機的に実行された命令の結果のコミットメントが防止され、トランザクションに対して追跡されるワーキング・アドレス・セットのうちの1つに対する別のスレッドからのコンフリクトするアクセスを検出したことに応答して、トランザクションが停止される、クリアすることと、
ロード排他命令に応答して、ワーキング・アドレス・セットのうちの1つとして所与のアドレスが指定された対象であるトランザクションの停止をトリガーすることと、
を含む、データ処理方法を提供する。
【0009】
少なくともいくつかの実例が、データ処理のスレッドの実行のための命令実行環境を提供するようにホスト・データ処理装置を制御するためのコンピュータ・プログラムであって、コンピュータ・プログラムが、
データ処理のスレッドを処理する処理プログラム論理部と、
処理プログラム論理部により処理されるスレッド内のトランザクションの実行をサポートするトランザクショナル・メモリ・プログラム論理部であって、トランザクションが、トランザクション開始命令とトランザクション終了命令との間に投機的に実行されるスレッドの命令を含み、命令に対して、処理プログラム論理部が、トランザクション終了命令への到達が発生するまで、投機的に実行された命令の結果のコミットメントを防止するように構成され、トランザクション・メモリ・プログラム論理部が、トランザクションに対して追跡されるワーキング・アドレス・セットのうちの1つに対する別のスレッドからのコンフリクトするアクセスを検出したことに応答して、トランザクションの停止をトリガーするコンフリクト検出プログラム論理部を備える、トランザクショナル・メモリ・プログラム論理部と、
を備え、ここで、
所与のアドレスを指定したロード排他命令に応答して、処理プログラム論理部が、所与のアドレスに対して排他モニター標示をセットするように構成され、
所与のアドレスを指定したストア排他命令に応答して、処理プログラム論理部が、所与のアドレスが排他モニター標示をもはやセットさせないとき、ストア排他失敗標示を返信するように構成され、
所与のトランザクション内において実行されるロード対象アドレスを指定した所定のタイプのロード命令に応答して、処理プログラム論理部が、ロード対象アドレスに対して以前にセットされた任意の排他モニター標示をクリアすることをトリガーするように構成され、
ロード排他命令に応答して、処理プログラム論理部とトランザクショナル・メモリ・プログラム論理部とのうちの少なくとも1つが、ワーキング・アドレス・セットのうちの1つとして所与のアドレスが指定された対象であるトランザクションの停止をトリガーするように構成される、
コンピュータ・プログラムを提供する。
【0010】
少なくともいくつかの実例が、
複数の処理要素とメッセージを交換する複数のインターフェースと、
複数の処理要素間のコヒーレンシーを管理するように構成された制御回路と、
を備え、ここで、
所与のアドレスに対する排他アクセスを追跡するための所与のアドレスに関連した排他モニター標示のセッティングを示す所与の処理要素からの排他モニター・セッティング・メッセージに応答して、制御回路が、少なくとも1つの他の処理要素に排他モニター・セッティング・メッセージをインターフェースが送信することをトリガーするように構成され、
第1のタイプの読み出し要求により指定された対象アドレスに関連した読み出しデータ値の返信を要求する、第1の処理要素から受信された所定のタイプの読み出し要求に応答して、制御回路が、対象アドレスに関連した任意の排他モニター標示のキャンセルをトリガーするように、少なくとも1つの他の処理要素に排他モニター・キャンセル・メッセージをインターフェースが送信することをトリガーするように構成された、
相互接続体を提供する。
【0011】
本技術のさらなる態様、特徴、及び利点が、添付図面とともに読まれる以下の実例の説明から明らかとなる。
【図面の簡単な説明】
【0012】
図1】複数の処理要素と相互接続体とを含むデータ処理システムの実例を概略的に示す図である。
図2】トランザクショナル・メモリ・サポート回路を備える処理要素の実例を示す図である。
図3】トランザクショナル・メモリ・サポートを含むシステムにおいてトランザクションを処理する実例を示す図である。
図4】ロックを使用した非トランザクショナル手法により図3のトランザクションに同等な演算を実行するための代替的なコード・シーケンスを示す図である。
図5】ロード投機の存在下におけるロード/ストア排他命令とトランザクションとの間の相互作用がどのように相互排他のロスをもたらし得るかを示すコードの実例を示す図である。
図6】ロード投機の存在下におけるロード/ストア排他命令とトランザクションとの間の相互作用がどのように相互排他のロスをもたらし得るかを示すコードの実例を示す図である。
図7】ロード投機の存在下におけるロード/ストア排他命令とトランザクションとの間の相互作用がどのように相互排他のロスをもたらし得るかを示すコードの実例を示す図である。
図8】ロード投機の存在下におけるロード/ストア排他命令とトランザクションとの間の相互作用がどのように相互排他のロスをもたらし得るかを示すコードの実例を示す図である。
図9】ロード排他命令を取り扱う方法を示すフロー図である。
図10】ストア排他命令を取り扱う方法を示すフロー図である。
図11】ストア命令を取り扱う方法を示すフロー図である。
図12】トランザクション内において実行されるロード命令を取り扱う方法を示すフロー図である。
図13】相互接続体によりサポートされたコヒーレンシー・メッセージの実例を示す図である。
図14】相互接続体によりサポートされたコヒーレンシー・メッセージの実例を示す図である。
図15】相互接続体によりサポートされたコヒーレンシー・メッセージの実例を示す図である。
図16】使用され得るシミュレーターの実施態様を示す図である。
【発明を実施するための形態】
【0013】
いくつかの特定の実例が以下で開示される。特許請求の範囲がこれらの特定の実例に限定されないことが理解される。
【0014】
処理回路は、処理回路により処理されるスレッド内のトランザクションの実行をサポートするトランザクショナル・メモリ・サポート回路を含み得る。トランザクションは、トランザクション開始命令とトランザクション終了命令との間に投機的に実行されるスレッドの命令を含む。処理回路は、トランザクション終了命令への到達が発生するまで、投機的に実行された命令の結果のコミットメントを防止し得る。トランザクション・メモリ・サポート回路は、トランザクションに対して追跡されるワーキング・アドレス・セットのうちの1つに対する別のスレッドからのコンフリクトするアクセスを検出したことに応答してトランザクションの停止をトリガーするコンフリクト検出回路を含み得る。
【0015】
トランザクショナル・メモリ・サポート回路は、トランザクションが停止される必要がある場合に投機的な結果がアンワインドされ得るように、トランザクション内における命令の投機的な実行を提供するので、トランザクションを実行する2つのスレッド間のコンフリクトを避けるためにロック変数を使用する必要がない。しかし、非トランザクション・ベースのアプローチにおいて実行されるいくつかのスレッドも存在し得る。例えばこのような非トランザクショナル・スレッドは、(トランザクション開始/終了命令を全く含まない)トランザクションの使用を伴わずに元々記述又はコンパイルされているコードのセクションを実行するスレッドであり得る。代替的に、非トランザクショナル・スレッドは、以前はトランザクション・ベース・モードにより命令を処理していたが、これに対して、トランザクションが(例えば他のスレッドとのコンフリクトに起因して)高頻度の停止イベントに直面し、そのように処理することが、現在は非トランザクション・ベース・モードにスイッチングされているスレッドを含み得る。簡潔にするために、「非トランザクショナル・スレッド」という用語は、トランザクションを全く使用しないスレッド、又は、トランザクションを使用して実行しようとする特定の数の試行が失敗した場合に選択されたフォールバック・パスを現在実行しているトランザクショナル・スレッドを表すように以下で使用される。
【0016】
このような非トランザクショナル・スレッドが少なくとも1つの対象リソースに対する排他アクセスを必要とする場合、多くの場合、ロック変数が、少なくとも1つの対象リソースに対する排他アクセスを制御するために使用され得る。直感に反して、任意の非トランザクショナル・スレッドに対する正しい結果を確実なものとするために、トランザクショナル・スレッドは、非トランザクショナル・スレッドがロックを保持している間におけるシェアされたリソースに対する書き込みを伴うトランザクションをコミットすることを防止されなければならないので、トランザクショナル・スレッドは、(フォールバック・コード・パスにおいてだけでなく)トランザクション・ベースのコード・パス内において依然としてロック変数を確認する必要があり得る。したがって、多くの場合、トランザクショナル・モードにおいて実行されるスレッドのトランザクション内においてさえ、トランザクションは、任意の他のスレッドがリソースに対する排他アクセスを保持か否かを判定するためにロック変数を確認するための、及び、ロックが別のスレッドにより現在保持されている場合、後続の演算を保留するための、トランザクションのコミットメントを防止するための、又は、トランザクションを停止するための命令を依然として含み得る。
【0017】
ロックを確認及び獲得する非トランザクショナル・スレッドのための一手法は、ロード排他及びストア排他命令を使用することであり得る。ロード排他命令が所与のアドレスを指定して実行されたとき、処理回路は、所与のアドレスに対して排他モニター標示をセットし得る。ロード排他命令は、所与のアドレスに対応した記憶位置から読み出された値をさらに返信し得る。所与のアドレスを指定したストア排他命令が実行された場合、処理回路は、所与のアドレスが排他モニター標示をもはやセットさせないとき、ストア排他失敗標示を返信し得る。その一方で、ストア排他命令を実行する時点において排他モニター標示が依然としてセットされる場合、ストア演算が所与のアドレスに更新された値を書き込むように実施され得、ストア排他成功標示が返信され得る。例えば別のスレッドがストア演算を実行して所与のアドレスに関連したデータ値を更新すること、又は、別のスレッドが所与のアドレスを指定した別のロード排他命令を実行することといった、様々なイベントが、以前にセットされた排他モニター標示がクリアされることをトリガーし得る。以前にセットされた排他モニター標示のクリアを必要とするイベントの追跡は、これらのイベントを確認するためのプログラム・コードにおいて実行される明示的な命令を必要とせずにデータ処理システムのマイクロ・アーキテクチャにより実行され得る。したがって、非トランザクショナル・スレッドは、ロック変数を読み出すように、及び排他モニターをセットするようにロード排他命令を使用し得、次に、後続のストア排他命令がロック変数に更新された値を書き込むことによりロックをクレームしようと試行し得るが、この場合、排他モニターがもはやセットされないものであり得るので、別のスレッドがその間に既にロックをクレームしていた場合、失敗し得る。排他モニター標示を使用したロード及びストア排他命令に対するサポートは、スレッド間の相互排他を遂行することを簡略化し得る。
【0018】
したがって、いくつかのスレッドは、何らかのリソースの相互排他を遂行して、そのリソースが別のスレッドからの干渉を伴わずにアトミックに使用され得るように現在のスレッドのためにそのリソースを確保するために、ロード/ストア排他命令により使用される排他モニター標示を使用し得る。他のスレッドは、スレッド間のこのような相互排他を遂行するためにトランザクショナル・メモリを使用し得る。トランザクショナル・スレッドと非トランザクショナル・スレッドとの間の正しい相互作用を確実なものとするために、トランザクショナル・スレッドは、非トランザクショナル・スレッドにおけるロード/ストア排他命令によりアクセスされたロック変数を確認するための命令を含み得る。
【0019】
しかし、本発明者らは、いくつかのシナリオにおいて、ロック変数を確認し、別のスレッドが既にロックを保持している場合に、シェアされたリソースに対する書き込みがコミットされることを防止するようにトランザクションがアレンジされている場合でも、これは、場合によっては、相互排他を遂行するためにロード及びストア排他命令を使用するスレッドに対して相互排他のロスを結果的にもたらし得ることを認識した。これは、いくつかのマイクロ・アーキテクチャが、そのロードが実際に要求されたか否かが知られる前に、ロード命令の投機的な実行をサポートし得ることが理由である。したがって、いくつかの場合において、処理回路のマイクロ・アーキテクチャは、より以前のストア排他命令が成功のうちに履行されたか否かを確認する命令より早く、非トランザクショナル・スレッドの後続のロード命令をプルし得る。すべてのスレッドが相互排他を遂行するためにロード/ストア排他命令を使用する非トランザクショナル・スレッドである場合、これは問題にならず、その理由は、最終的にストア排他命令が失敗したと判定された場合、既に投機的に実行された後続のロード命令が不正確に実行されたと判定され、そのロードの任意の結果が破棄され得るからである。
【0020】
しかし、相互排他を遂行するためにトランザクションを使用して実行される他のスレッドも存在する場合、順番によらずに投機的に実行されるより若いロードと、ロックをセットする、より古いストア排他命令との間の期間内に、トランザクションが開始及び終了し得ることが起こり得る。このイベントでは、トランザクションが実行されたとき、ロックが非トランザクショナル・スレッドによりまだクレームされていないので、トランザクションが非トランザクショナル・スレッドのアクションを検出せず、さらに、トランザクショナル・スレッドがロック・ベースのフォールバック・コード・パスに頼らない限り、トランザクショナル・スレッド自体は典型的にはロックをクレームしないので、非トランザクショナル・スレッドはトランザクショナル・スレッドを検出しないという理由から、相互排他が失われ得ることが起こり得る。したがって、より若いロードの投機的な実行がコミットされることが可能とされ、トランザクションにより提供される更新された値ではなく、トランザクションが実行される前に存在していた、シェアされたリソースの古くなった値を非トランザクショナル・スレッドが使用することをもたらし得る。したがって、トランザクションの効果が事実上、失われ得、相互排他の違反が存在し得る。
【0021】
この問題を軽減する1つの考えられる手法は、非トランザクショナル・スレッドに関連したコード内に投機バリア命令を含めることであり得る。投機バリア命令は、バリアより前の、より以前の命令のすべてが履行されるまで、処理回路のマイクロ・アーキテクチャがバリア命令の後のどの命令も実行することを可能にされないことを要求し得る。ロックをクレームするためのストア排他命令の後に、及び、コードのクリティカル・セクションに関連したシェアされたデータをロードする後続のロード命令の前にバリアを含むことにより、これがストア排他命令より早い後続のロードの投機的なホイスティングを防止し、したがって、コードのクリティカル・セクションに関連した任意の値が読み出される前にストア排他命令の結果が知られる。これは、トランザクショナル・スレッドが同じシェアされたリソースを使用するトランザクションを開始し、ストア排他命令が解決される前にトランザクションが履行される場合でも、非トランザクショナル・スレッドの後続のロードが、トランザクションが実行される前に存在していた値ではなくトランザクションの履行により結果的にもたらされる値をロードして、相互排他を維持することを意味する。
【0022】
しかし、このようなバリアを含むことに付随する問題は、トランザクショナル・スレッドとのコンフリクトが存在しない場合、後のロードがより早いタイミングにおいて投機的に実行されることが防止され得、これが不必要にメモリへのアクセスを遅延させることによりパフォーマンスを下げ得るという理由により、このようなバリアを含むことが非トランザクショナル・スレッドのパフォーマンスを下げ得ることである。さらに、このような追加的なバリア命令を含むようにコードを書き換えることは、比較的大きなソフトウェアの開発及び配布のオーバーヘッドを結果的にもたらし得る。例えば、相互排他を遂行するためにロード及びストア排他命令を使用して記述された、トランザクショナル・メモリをサポートしていないシステムのために記述された従来のコードは、トランザクショナル・メモリをサポートするシステムにおいてもはや安全に実行し得ず、したがって、このようなコードはバリアを含むように書き換えられる対象となることが必要であり、これは望ましくないものであり得る。
【0023】
投機バリアを必要とすることを避ける手法は、ロード対象アドレスを指定した所与のトランザクションにおいて実行されたときに、ロード排他命令に応答してロード対象アドレスに対して以前にセットされた任意の排他モニター標示をクリアすることをトリガーするように処理回路をトリガーする所定のタイプのロード命令を提供することである。ロード/ストア排他を実装した比較されるシステムでは、ロードが排他モニタリング標示に関連したアドレスにおけるデータの値を変えることは想定されないので、排他モニター標示がセットされた対象であるアドレスに対するロードは典型的には排他モニターのクリアをもたらさず、したがって、排他モニターにより追跡されるアドレスへのアクセスの排他性を乱すリスクを抱えるとは考えられない。しかし、所定のタイプのロードがトランザクション内において実行されたとき、排他モニター標示をクリアすることにより、これは、非トランザクショナル・スレッドにおいてロックをクレームするためにストア排他命令が実行される前に、トランザクションが実行される場合でも、非トランザクショナル・スレッドがトランザクションの介入的なアクションを検出し、(クリティカル・セクションからのロードが既に投機的に実行されている場合でも、シェアされたリソースの古くなった値を使用して非トランザクショナル・スレッドがクリティカル・セクションを進めることを、ストア排他命令の結果として得られる失敗が防止するので)相互排他のロスを防止し得ることを意味する。
【0024】
さらに、ロード排他命令に応答して、処理回路及び/又はトランザクショナル・メモリ・サポート回路は、ロード排他命令により指定された所与のアドレスがトランザクションに関連したワーキング・アドレス・セットのうちの1つとして指定される対象のトランザクションの停止をトリガーし得る。これは、ロード排他命令が非トランザクショナル・スレッドにおいて実行される前にトランザクションが開始するように、及び、トランザクショナル・スレッドがシェアされた変数を更新する前にシェアされた変数のロードが投機的に実施されることを結果的にもたらし得る非トランザクショナル・スレッドにおいてロード投機が実施されるように、トランザクショナル・スレッドと非トランザクショナル・スレッドとの間の相対的なタイミングがなされている場合でも、トランザクションを停止することにより、トランザクショナル・スレッドに対するシェアされた変数の更新が行われることが防止されて相互排他を確実なものとすることを意味する。非トランザクショナル・スレッドにおいてクリティカル・セクションにより行われた更新が既に行われた後、トランザクションが後で再試行され得る。
【0025】
したがって、非トランザクショナル・スレッドにおけるロード/ストア排他命令の実行とトランザクショナル・スレッドにおけるトランザクションとの間の相対的なタイミングにかかわらず、いくつかのロード命令が順番によらずに投機的に実行された場合でも、相互排他が遂行され得る。これは、追加的なバリアを含むように非トランザクショナル・コードが書き換えられる対象となることを必要とせずに、トランザクションを使用した排他モニター標示及びスレッドに依存したスレッド間の安全な連係動作を可能にする。
【0026】
本出願において説明される技術は、1つの処理要素を含む装置において使用され得る。例えば、1つの処理要素は、タイム・シェア・リング手法によりデータ処理の複数のスレッドを処理し得、又は、同時に複数のスレッドに対するアーキテクチャ状態を追跡するパーティションに区切られたレジスタ・セットを使用して、複数のスレッドからの命令が処理パイプラインに同時に存在する同時マルチ・スレッド(SMT:simultaneous multi-threading)を使用し得る。
【0027】
しかし、この技術は、処理回路が処理の複数のスレッドを並列に実行し得る複数の処理要素(例えばプロセッサ・コア、CPU、又はGPU)を含むシステムにおいて特に有用である。複数の処理要素を含むシステムにおいて、1つの処理要素が、非トランザクショナル・スレッドを実行する別の処理要素と並列にトランザクショナル・スレッドを実行し得ることが起こり得る。この場合、非トランザクショナル・スレッド内における投機によりもたらされる上述のタイプのコンフリクト、及び、相互排他のロスとなり得るものは可能性が高いものであり得、上述の技術により軽減され得る。
【0028】
したがって、処理回路が2つ以上の処理要素を含むシステムでは、ロード排他命令が所与の処理要素において実行されている場合、所与の処理要素が、少なくとも1つの他の処理要素へのメッセージの送信をトリガーし得、メッセージが、排他モニター標示がロード排他命令により指定された所与のアドレスに対してセットされたことを示す。典型的には排他モニターをサポートするシステムでは、排他モニター標示のクリアを要求するイベントが、マルチ・プロセッサ・システム内における他の処理要素にブロードキャストされ得る一方で、他の処理要素に排他モニター標示のセッティングをブロードキャストすることは普通でない。しかし、少なくとも1つの他の処理要素に、排他モニター標示がセットされたことを示すメッセージを送信することにより、これは、そのワーキング・アドレス・セットに所与のアドレスを含む別の処理要素において実行されているトランザクションが上述のように停止されることを可能にする。
【0029】
いくつかの実施態様において、排他モニタリング標示がセットされたことを示すメッセージが、ロード排他命令を実行した所与の処理要素以外のすべての他の処理要素にブロードキャストされ得る。しかし、他の場合において他の処理要素のすべてにメッセージを送信することは不要であり得る。例えばいくつかの処理要素は、トランザクショナル・メモリ・サポート回路をもたないことがあり得、したがって、トランザクションを実行することができず、この場合、このような処理要素にメッセージを送る必要がない。さらに、いくつかの場合において、様々な処理要素を接続する相互接続体は、スヌープ・フィルタ、又は、どの処理要素がトランザクションを実行しているか、又は、どのアドレスが処理要素によりキャッシュ/アクセスされたかを追跡する他の論理部を含み得、したがって、所与のアドレスが、所与の処理要素におけるトランザクションに対して追跡されるワーキング・アドレス・セット内にあり得るか否かを、相互接続体内に保持されたデータから特定することが可能であり得、この場合、現在どのトランザクションも処理していない処理要素、又は、所与のアドレスを含まないワーキング・アドレス・セットを含むことが相互接続体における論理部から特定され得る処理要素に対して、排他モニター・キャンセル・メッセージが省略され得る。
【0030】
同様に、所定のタイプのロード・トランザクションが所与の処理要素において実行されているとき、所与の処理要素は、非トランザクショナル・スレッドのために実施されるロード投機の存在下であっても、相互排他が処理要素にわたって維持されることを確実なものとするために、ロード対象アドレスに対して少なくとも1つの他の処理要素により以前にセットされた任意の排他モニター標示がクリアされなければならないことを示すように、少なくとも1つの他の処理要素へのメッセージの送信をトリガーし得る。
【0031】
所与のトランザクション内において実行される所定のタイプのロード命令に応答して、処理回路は、所与のトランザクションのためのワーキング・アドレス・セットにロード対象アドレスを追加し得る。これは、非トランザクショナル・スレッドが後から同じアドレスに対する排他モニターをセットするようにロード排他命令を実行しようと試みた場合、トランザクションが相互排他を維持するために停止されることを意味する。
【0032】
いくつかの実例において、ワーキング・アドレス・セットの追跡は、(トランザクションにより読み出されるアドレスを表す)読み出しアドレス・セット、及び、(トランザクションにより書き込まれる対象のアドレスを表す)書き込みアドレス・セットの独立した追跡を含み得る。例えば、読み出し/書き込みアドレス・セットは、関連するキャッシュ・ラインがそれぞれ所与のトランザクションに対する読み出しセット又は書き込みセットの一部であるか否かを示すキャッシュにフラグをセットすることにより追跡され得る。読み出し及び書き込みセットの独立した追跡を伴う実施態様では、所定のタイプのロードが、読み出しアドレス・セットにロード対象アドレスを追加することをトリガーし得、ロード排他命令の実行は、トランザクションであって、そのトランザクションに対するロード排他命令により指定された所与のアドレスが、そのトランザクションに対して追跡される読み出しセット内にある、そのトランザクションを停止することをトリガーし得る。
【0033】
所定のタイプのロード命令の実行は、その書き込みセット内において指定されたロード対象アドレスを含む他のトランザクションの停止をさらにもたらし得る。その読み出しセットにおいて指定されたロード対象アドレスを含む他のトランザクションは、所定のタイプのロード命令の実行の後、停止していない状態を継続し得る。実際には、所定のタイプのロード命令に対する想定される使用ケースは、非トランザクショナル・スレッドにより使用されるロック変数を読み出すことであり得、したがって、トランザクショナル・スレッドが(非トランザクショナル・フォールバック・パスにフォールバックしない限り)ロック変数に書き込む必要がある可能性は低く、したがって、所定のタイプのロード命令のアドレスがトランザクションに対して追跡される書き込みセット内にある可能性は低い。したがって、複数のトランザクションの各々が同じロック変数を読み出す場合、ロック変数の読み出しが別のトランザクションの停止をもたらすことなく、複数のトランザクションが並列に処理され得ることにより、ロック変数の確認の結果としてトランザクションの不必要なシリアライゼーションが導入されることなく、トランザクションの並列処理を可能にする。
【0034】
所定のタイプのロード命令に加えて、処理回路は、所与のトランザクション内において実行されたときに、ロード対象アドレスに対して以前にセットされた任意の排他モニター標示を処理回路が保有することをトリガーする第2のタイプのロード命令をさらにサポートし得る。異なるタイプのロード命令を区別することにより、以前にセットされた排他モニターがクリアされることをトランザクションにおける各ロードがもたらすことをこれが防止し、このことがストア排他命令のより高頻度の失敗をもたらすので、このことがパフォーマンスの低下をもたらし得る。上述のようにトランザクショナル・スレッドと非トランザクショナル・スレッドとを連係動作させるとき、ロード投機によりもたらされる排他のロスとなり得るものをガードするために、ロードに応答して排他モニターをクリアすることがロック変数のロードに対して有用であり得る一方で、(読み出しは排他モニターに関連したアドレスにおける記憶されたデータ値を変えないので)値に対する読み出し自体は排他モニターにより示されるアクセスの排他性を妨害するには十分ではないので、他のロード演算に対して排他モニターを保有することが好ましい場合があり得る。例えば、所定のタイプのロード命令が、シェアされたリソースへのアクセスを支配するために他の非トランザクショナル・スレッドにより使用されるロック変数にアクセスするトランザクション内におけるコードの一部のために使用され得る一方で、第2のタイプのロード命令は、シェアされたリソースから関心のあるデータを実際にロードするトランザクション内におけるロードのために、アトミックに実行される必要があるコードのクリティカル・セクションにおいて使用され得る。
【0035】
ロード及びストア排他トランザクションを実行する処理回路は、対象アドレスへの排他アクセスを制御するためのロック変数が所与のスレッドにより成功のうちにクレームされたか否かを処理回路が解決する前に、対象アドレスからデータ値をロードするためにロード命令を投機的に実行する所与のスレッドをサポートし得る。言い換えると、ロード投機は、ストア排他命令が成功のうちに実行をしたか否かを査定する条件命令の解決前にロード命令が実行されることを結果的にもたらし得る。このようなロード投機は、パフォーマンスを改善し得る。上述のアプローチは、このような投機が実施された場合でも、非トランザクショナル・スレッド及びトランザクショナル・スレッドが、相互排他を依然として達成し得ることを確実にし得る。
【0036】
トランザクショナル・メモリ・サポート回路は、多くの形態を含み得る。様々な停止イベントは、そのトランザクション終了命令への到達が発生する前に、コンフリクト検出回路がトランザクションの停止をトリガーすることをもたらし得る。1つの実例は、別のスレッドから、第1のスレッドのトランザクションが停止されることをトリガーし得る第1のスレッドのトランザクションに対して追跡されるワーキング・アドレス・セットのうちの1つへのコンフリクトするアクセスを、コンフリクト検出回路が検出したときであり得る。トランザクションが停止されることをもたらし得る他のイベントは、トランザクション内において実行されることが可能にされないあるタイプの命令の実行、例外イベント若しくは妨害の発生、又は、上述のようにワーキング・アドレス・セット内におけるアドレスを指定したロード排他命令の実行を含み得る。
【0037】
トランザクショナル・メモリ・サポート回路は、コンフリクト検出回路に加えて、他の要素も含み得る。例えば、トランザクショナル・メモリ・サポート回路は、少なくとも1つのトランザクションに対する投機的に実行された命令の結果を記憶する投機的結果記憶回路、及び/又は、トランザクションが停止された場合にリストアされ得る、トランザクションのトランザクション開始命令に応答してキャプチャされたアーキテクチャ状態を記憶するリストア状態記憶回路を含み得る。例えば、投機的結果記憶回路は、トランザクション終了命令に応答してトランザクションがコミットされるまで、ストア命令の結果をバッファリングし得るので、トランザクションがコミットされ得ることが知られるまで、トランザクション内における投機的に実行されたストア命令がメモリ・システムを汚染しない。リストア状態記憶回路は、例えば、トランザクションが停止されたとき、状態が実行のそのより以前のポイントに巻き戻される必要がある場合に備えて、トランザクションの開始時に存在する状態のチェック・ポイントを保有するためにレジスタ・バンク内にレジスタを含み得る。代替的に、リストア状態は、現在のアーキテクチャ状態を記憶するレジスタと同じレジスタ・ファイル内における古いチェック・ポイント処理されたアーキテクチャ状態を追跡するために、レジスタ・リネーミングを使用して維持され得る。
【0038】
トランザクションを停止する別の可能性のある理由は、トランザクショナル・メモリ・サポート回路がリソースの不足状態にある結果、もはやトランザクションがコンフリクトを伴わずに正しく進むことを保証することができない場合であり得る。例えば、投機的結果記憶回路に記憶される投機的な結果の数が、提供された記憶装置内において利用可能な容量を上回った場合、トランザクションが停止され得る。
【0039】
トランザクションを停止したとき、トランザクションを再度実行すること、又は、(例えばロック及びロード/ストア排他命令を使用して)代替的に非トランザクショナル・フォールバック・パスを使用することを試みるか否かを判定することはソフトウェア次第であり得る。しかし、処理回路のマイクロ・アーキテクチャは、トランザクションの停止の可能性のある理由を示すための手がかりを提供し得、この手がかりは(例えば、停止の原因が、任意の将来の試みが失敗する可能性があるものである場合)トランザクションを再度実行すること、又は、フォールバック・パスを使用することを試みる価値があるか否かを判定するためにソフトウェアにより使用され得る。
【0040】
対応するコンピュータ・プログラムが、データ処理のスレッドの実行のための命令実行環境を提供するようにホスト・データ処理装置を制御するために提供され得、コンピュータ・プログラムは、データ処理のスレッドを処理する処理プログラム論理部、及び、(ハードウェアの実施例に対する上述のトランザクションに対するサポートと同様の手法により)処理プログラム論理部により処理されるスレッド内のトランザクションの実行をサポートするトランザクショナル・メモリ・プログラム論理部を備える。トランザクショナル・メモリ・プログラム論理部は、トランザクションに対して追跡されるワーキング・アドレス・セットのうちの1つに対する別のスレッドからのコンフリクトするアクセスが検出されたとき、トランザクションが停止されることをトリガーするためのコンフリクト検出プログラム論理部を備え得る。コンピュータ・プログラムのプログラム論理部は、上述の対応する処理回路及びトランザクショナル・メモリ・サポート回路と同様の手法により、ロード/ストア排他命令の実行に、及び、所定のロード命令に応答し得る。
【0041】
したがって、コンピュータ・プログラムを実行するホスト・コンピュータにおいてこれらの特徴を提供するどのような実際のハードウェアも存在しない場合があり得るとしても、上述の特徴をもつ実際のハードウェア装置により提供されるものと同様の命令環境を上述のコンピュータ・プログラムを実行するソフトウェアに提示するコンピュータ・プログラムが提供され得る。代替的に、例えばシミュレーター又は仮想マシンであり得るコンピュータ・プログラムは、トランザクショナル・メモリ・サポートを含む装置において達成される結果に適合する手法により、トランザクショナル・メモリ・サポートを含む装置における実行を対象としたコードを一般的なホスト・データ処理装置が実行することを可能にするプログラム論理部(例えば命令セット又はデータ構造体)を提供することにより、ハードウェア・アーキテクチャの機能をエミュレートし得る。
【0042】
それぞれの処理要素とメッセージを交換する多くのインターフェース、及び、処理要素間のコヒーレンシーを管理する制御回路を含む相互接続体がさらに提供され得る。所与のアドレスに対する排他アクセスを追跡するための所与のアドレスに関連した排他モニター標示のセッティングを示す所与の処理要素からの排他モニター・セッティング・メッセージに応答して、制御回路は、少なくとも1つの他の処理要素に排他モニター・セッティング・メッセージをインターフェースが送信することをトリガーし得る。第1のタイプの読み出し要求により指定された対象アドレスに関連した読み出しデータ値の返信を要求する第1の処理要素から受信された所定のタイプの読み出し要求に応答して、制御回路は、対象アドレスに関連した任意の排他モニター標示のキャンセルをトリガーするように、少なくとも1つの他の処理要素に排他モニター・キャンセル・メッセージをインターフェースが送信することをトリガーし得る。
【0043】
したがって、従来の相互接続体は通常は他の処理要素に排他モニター標示のセッティングをブロードキャストしないとともに、そうすることにより、排他モニター標示をセットする非トランザクショナル・スレッドが順番によらずにシェアされたリソースに対するロードを実行するロード投機を使用する場合でも、その読み出しセットにおいて所与のアドレスを使用してトランザクションを実行する他の処理要素がトランザクションを停止して相互排他を確実なものとすることを、これが可能にする。さらに、所与の処理要素において実行される所定のロード命令は、所与の処理要素が第1のタイプの読み出し要求を発行することをトリガーし得、このことが、相互接続体が他の処理要素に排他モニター・キャンセル・メッセージを転送することをもたらし、同様に、非トランザクショナル・スレッドとトランザクショナル・スレッドとの間の相互排他を維持することに役立つ。
【0044】
図1は、データ処理の多くのスレッドの実行をサポートする処理回路4を含むデータ処理システム2の実例を概略的に示す。この実例において、処理回路4は、互いに並列な処理のそれぞれのスレッドの実行を各々が実施し得る多くの別々の処理要素6を含む。個々の処理要素6の各々は、例えば、中央処理ユニット(CPU:central processing unit)、グラフィックス処理ユニット(GPU:graphics processing unit)、又は、命令を実行可能な任意の他のプログラム可能ユニットであってよい。各処理要素は、メモリ・システム20、16からのデータをキャッシュするための少なくとも1つのキャッシュ8を含み得、キャッシュ8におけるデータにアクセスすることは、メモリ・システムからデータにアクセスするより小さいレイテンシしか必要としない。
【0045】
処理要素6間の通信を管理するように、及び、処理要素6のそれぞれのキャッシュ8におけるデータ間のコヒーレンシーを管理するように、相互接続体10が提供される。相互接続体10は、個々の処理要素6と通信するための多くのインターフェース12、並びにメモリ・デバイス16、例えばDRAM又は不揮発性メモリと通信するためのメモリ・デバイス・インターフェース14を含む。相互接続体10は、処理要素6によるデータに対する読み出し又は書き込み要求を追跡するための、及び、コヒーレンシーを維持するための要求を伴って応答するためのコヒーレンシー制御ユニット18を含み、例えば、コヒーレンシー制御回路18は、他の処理要素のローカル・キャッシュ8にキャッシュされたデータの状態についてクエリを出す、及び/又は、対応するアドレスに対するキャッシュされたデータの返信及び/又は無効化を要求する、他の処理要素に対するスヌープ・メッセージを送ることにより、読み出し又は書き込み要求に応答するように相互接続体10を制御し得る。例えば、ある処理要素が相互接続体に対するさらなる要求を発行することを伴わずに読み出されたデータが書き込まれ得るユニークな状態において、そのキャッシュにデータを読み込もうと試みるとき、コヒーレンシー制御装置18は、他の処理要素がそのデータを保持するか否か、及び、必要な場合に他の処理要素8からそれを無効化するか否かを確認し得る。いくつかの場合において、スヌープ・フィルタ及び/又はシステム・キャッシュ20は、相互接続体内に提供され得る。システム・キャッシュが提供される場合、わざわざメモリからフェッチされる必要がある(が、データが処理要素8のローカル・キャッシュにある場合より長いレイテンシを伴う)場合より高速なアクセスのために、システム・キャッシュがメモリ16からのデータをキャッシュし得る。スヌープ・フィルタは、各処理要素のキャッシュ8にどのデータがキャッシュされるかを部分的に、又は完全に追跡し得るので、送る必要のあるコヒーレンシー・メッセージの数は少なくされ得る(例えば、要求されたデータを処理要素が保持しないことが知られている場合、所与の処理要素に対してスヌープ要求が省略され得る)。いくつかの場合において、システム・キャッシュ及びスヌープ・フィルタは、共通記憶構造物を使用して(例えば、データが各処理要素のキャッシュ8にもキャッシュされているか否かを示すシステム・キャッシュ20の各キャッシュ・ラインに関連した追跡ビットにより表されたスヌープ・フィルタを使用して)実装され得る。任意の知られたコヒーレンシー・プロトコルが、処理要素間のコヒーレンシーを管理するために相互接続体10により使用され得る。例えば、Cambridge、UKのArm(登録商標)Limitedにより提供されるAMBA(登録商標)ACE又はCHIプロトコルが使用され得る。
【0046】
図2は、処理要素6のうちの1つの一部の実例をより詳細に示す。処理要素6は、データ処理演算を行う命令を実行するための処理論理部104を含む。例えば、処理論理部104は、例えば、算術又は理論演算、例えば加算、乗算、AND、ORなどを行うための算術/論理ユニット(ALU:arithmetic/logic unit)、浮動小数点オペランドに対して演算を実施するための浮動小数点ユニット、又は、複数のデータ要素を含むベクトル・オペランドに対するベクトル処理を行うためのベクトル処理ユニットといった、様々なタイプの処理演算を実行するための実行ユニットを含み得る。アーキテクチャ・レジスタ106のセットが、処理論理部104により実行される命令に対するオペランドを記憶するために、及び、実行される命令の結果を記憶するために提供される。命令デコーダ108は、命令キャッシュ110からフェッチされた命令をデコードして、関連する演算を実施するように処理論理部104、又はデータ処理装置102の他の要素を制御するための制御信号を生成する。レベル1キャッシュ114若しくはレベル2キャッシュ116又は主メモリ16からのデータ値をアーキテクチャ・レジスタ106にロードする(命令デコーダ108によりデコードされたロード命令に応答した)ロード演算、及びアーキテクチャ・レジスタ106からのデータ値をキャッシュ114、116又は主メモリ16に記憶させる(命令デコーダ108によりデコードされたストア命令に応答した)ストア演算を実施するための、ロード/ストア・ユニット112がさらに提供される。図1に示されるローカル・キャッシュ8は、図2のレベル1命令及びデータ・キャッシュ110、114又はレベル2キャッシュ116のうちの任意のものに対応し得ることに留意されたい。
【0047】
本装置102はハードウェア・トランザクショナル・メモリ(HTM:hardware transactional memory)をサポートするための様々なリソース提供するトランザクショナル・メモリ・サポート回路120をさらに含む。トランザクショナル・メモリ・サポート回路120におけるHTMリソースは、例えば、トランザクションの投機的な結果を記憶するための投機的結果記憶装置122、トランザクションによりアクセスされたアドレスを追跡するためのアドレス追跡回路124、コンフリクトが検出された場合にトランザクションが停止され得るように、トランザクションにより行われたデータ・アクセスと他のスレッドにより行われたデータ・アクセスとの間のコンフリクトを検出するためのコンフリクト検出回路126、及び、トランザクションの開始時にアーキテクチャ・レジスタ106からのアーキテクチャ状態データのスナップショットを記憶することにより、トランザクションが停止された場合に、この状態がトランザクションの投機的な結果を上書きしてリストアされ得るようにするためのリストア状態記憶回路128を含み得る。アドレス追跡回路124は、図2において独立したコンポーネントとして示されるが、いくつかの場合において、アドレス追跡回路124は、トランザクションにおいて所与のアドレスが読み出されたか又は書き込まれる対象となったかを追跡するレベル1キャッシュ114又はレベル2キャッシュ116の各キャッシュ・ラインにおけるメタデータを使用して実装され得る。いくつかの場合において、独立した読み出し及び書き込みアドレス・セットが、アドレス追跡回路124により所与のトランザクションに対して区別され得る。
【0048】
さらに本リソースは、トランザクションのネスティングのレベルを追跡するネスティング深さ値を記憶するためのネスティング深さレジスタ132を含み得る。(第1のトランザクション開始命令の後だが第1のトランザクション開始命令に対応したトランザクション終了命令の前に、第2のトランザクション開始命令が行き着かれた場合)ネスト化されたトランザクションを規定することができることはプログラマー又はコンパイラにとって有用であり得る。これは、コードのクリティカル・セクションが、第1のトランザクション開始命令を越えてコードの一部内への分岐が存在する場合でもアトミックに処置されることを確実なものとするために有用であり得る。しかし、投機的結果記憶装置にアーキテクチャ状態の複数のチェック・ポイントをキャプチャする必要性をなくすために、いくつかのマイクロ・アーキテクチャは、ネスト化されたトランザクション・セットの「内側」トランザクションを効果的に無視し、まさに最初のトランザクション開始命令に応答してアーキテクチャ状態のチェック・ポイントのみをキャプチャし得る。いくつのトランザクション開始命令が行き着かれたかを追跡するためにネスティング深さレジスタ132がインクリメントされ得ることを除いて、トランザクション終了命令の前に発生した任意の後続のトランザクション開始命令が効果的に無視され得るので、トランザクション終了命令に行き着いたとき、どのトランザクション終了命令がネスト化されたトランザクション・セットの外側のトランザクションに関連しているかをマイクロ・アーキテクチャが追跡し得る。したがって、トランザクション終了命令に行き着いた場合、ネスティング深さが1つ又は複数であるとき、トランザクション終了命令が無視され、ネスティング深さが(トランザクションがネスト化されたセットの外側のトランザクションであることを示す)ゼロであるとき、トランザクションがコミットされ得る。
【0049】
図2は、トランザクショナル・メモリ・サポート回路120を含む処理要素の実例を示す。いくつかの場合において、図1に示されるシステム2のいくつかの処理要素6が、このようなトランザクショナル・メモリ・サポート回路120を含み得る。しかし、すべての処理要素6がトランザクショナル・メモリ・サポート回路を含むことが必須というわけではない-トランザクションを実行することができないいくつかの処理要素が存在してよい。さらに、図2は、個々の処理要素6のマイクロ・アーキテクチャ内におけるトランザクショナル・メモリ・サポート回路120を示すが、これが必須というわけではない。いくつかの場合において、いくつかのトランザクショナル・メモリ・リソースは、処理要素間においてシェアされ得る。-例えば、複数の処理要素間における使用のためにシェアされ得る、リストア状態128をキャプチャするための又はアドレスを追跡124するための何らかの共通記憶装置が提供され得る。
【0050】
図3は、トランザクショナル・メモリ・サポート回路120及び処理論理部104を使用して所与のスレッド内におけるトランザクションを実行することの実例を示す。トランザクションは、トランザクション開始命令(tstart)とトランザクション終了命令(tcommit)とにより囲まれたプログラム・コードのセクションである。図3に示されるように、トランザクション開始命令に応答して、アーキテクチャ・レジスタ106における現在のアーキテクチャ状態がリストア状態記憶回路128にキャプチャ及び記憶される(ネスト化されたトランザクションに対しては、ネスト化されたトランザクション・セットの外側のトランザクションのみが、アーキテクチャ状態のキャプチャをトリガーし得る)。処理論理部104は、tstart命令の後に後続の命令の投機的な実行を実施し始め、これらの命令が実行されるとき、それらの命令によりアクセスされたアドレスがアドレス追跡回路124により追跡され、コンフリクト検出回路126が、追跡されるアドレスと他のスレッドに応答してロード/ストア・ユニット112を使用して行われたアクセスのアドレスとの間におけるコンフリクトを検出する。トランザクション内における命令の少なくともいくつかの投機的な結果が、投機的結果記憶回路122内に記憶される。例えばキャッシュ又はメモリに記憶された値は、ストア命令STRに応答して、トランザクションがペンディング状態に留まっている間、投機的結果記憶装置122に保持され得る。停止イベントがその間に発生することなくトランザクション終了命令(tcommit)への到達が発生した場合、トランザクション終了命令に応答して投機的な結果がコミットされる。トランザクションをコミットしたとき、そのスレッドに対して投機的結果記憶装置122に記憶された任意の結果が、データ・キャッシュ114又はメモリ116に書き込まれ得、トランザクション開始命令が行き着かれる前のポイントにアーキテクチャ状態を巻き戻すことがもはや必要とされないので、リストア状態128が破棄され、又は、上書きされることを許可され得る。
【0051】
その一方で、停止イベントが発生した場合、例えば、別のスレッドがトランザクションにより既にアクセスされたアドレスにアクセスした場合、コンフリクト検出回路126によりコンフリクトが検出されたとき、トランザクションの停止がトリガーされ、及びリストア状態記憶装置128からのリストア状態が、アーキテクチャ・レジスタ106にリストアされる。停止イベントの他の原因として、例えば、トランザクション内において実行されることが可能にされない命令の実行、投機的な結果又は所与のトランザクションにより要求されたアドレスを取り扱うための投機的結果記憶装置122又はアドレス追跡回路124内における不十分なリソース、又は、トランザクション中に受ける妨害が挙げられ得る。
【0052】
図3は、処理演算の特定のセットがトランザクション開始命令及びトランザクション終了命令を使用してトランザクショナル・モードにおいてどのように実施され得るかを示す。非トランザクショナル・スレッドに対するロックを管理する別の手法は、排他モニターを使用することであり得る。処理回路4は、ロード排他命令の実行とストア排他命令の実行との間にどの他の処理も所与のアドレスと相互作用していない限り、処理がコードの後続のセクションに進まないことを確実なものとするために使用され得るロード排他及びストア排他命令の使用をサポートし得る。ロード排他命令の実行に応答して、ロード排他命令を実行した処理要素6がロード排他命令の対象アドレスに関連した排他モニター標示のセッティングをトリガーする。図1に示されるように、この排他モニター標示は、処理要素自体内において提供されるローカル排他モニター30内に、又は、相互接続体内に提供されるグローバル排他モニター32内に保持され得る。例えば、ロード排他命令により指定されたアドレスが他の処理要素によりアクセスされないことを保証される非シェア可能アドレスである場合に、ローカル排他モニター30が使用され得るのに対し、グローバル排他モニター32は、複数の処理要素6によりアクセスされ得るシェア可能アドレスに対して使用され得る。いくつかの実施態様において、ローカル排他モニター30とグローバル排他モニター32との両方を提供することが必要とは限らない場合があり得、これらの機能は組み合わされ得る。
【0053】
ロード排他命令の対象アドレスに対してセットされた排他モニター標示は、例えば、他のスレッド若しくは他の処理要素によりトリガーされた同じアドレスに対するストア演算、又は、別のスレッド若しくは別の処理要素による同じアドレスに対するさらなるロード排他命令の実行といった、その特定のアドレスに対する排他アクセスがもはや保証されることができないことを示し得るイベントを、ローカル排他モニター30/グローバル排他モニター32がモニターしなければならないことをローカル排他モニター30/グローバル排他モニター32が検出することを可能にする任意の標示であり得る。いくつかの実例において、アドレスのブロックごとにインデックス処理された記憶装置構造物が、そのブロックに対して排他モニターがセットされているか否かを示す、各ブロックに対してセットされたフラグを含み得る。しかし、実際には、排他モニターがセットされることを必要とし得る対象のアドレスの数は、比較的少ないものであり得、したがって、より効率的な実施態様は、排他モニター標示がセットされている対象の位置のアドレスを記憶する単に1つ又は複数のレジスタを提供するものであり得る。
【0054】
相互接続体10は、所与のアドレスに対する排他アクセスの保証がもはやないことを示し得るイベントを検出したとき、任意の排他モニターが関連するアドレスに対してセットされている場合、排他モニターがクリアされ得るように、各処理要素にこのようなイベントが発生したことを示すメッセージを送信し得る。排他標示がどのように管理されるかの正確な詳細は、特定のプロセッサの実施態様に対して選択された特定のマイクロ・アーキテクチャの一態様であり得る。したがって、概して、本アーキテクチャは、多くのイベントが排他モニターのクリアをトリガーしなければならないことを指定し得るが、これが相互接続体10により通知される、又は、排他モニター論理部30、32内において追跡される正確な手法は様々であってよい。
【0055】
ストア排他命令が所与の処理要素6により実行される場合、処理要素6は、ストア排他命令の要求されたアドレスに対して以前にセットされた排他モニター標示が依然としてセットされているか否かを確認し得、セットされている場合、ストア命令は、所与のメモリ・アドレスにデータを記憶することを成功のうちに実行し得、処理要素は、例えば記憶が正しく履行されたことを確かめるためにレジスタにフラグをセットするストア排他成功標示をさらに返信し得る。後続の条件命令は、次に、排他アクセスが要求される対象のリソースを使用する後続のコードを進めるか否かを判定するためにストア排他成功標示を確認し得る。したがって、ロック変数を提供するために使用されるアドレスを指定したロード及びストア排他ペアを実行することにより、これは、非トランザクショナル・スレッドにおけるコードの何らかの後続のセクションに対するアトミックなアクセスを保証する手法を提供し得る。排他モニター標示が既にクリアされている場合にストア排他命令が実行されるとき、ストア排他失敗標示が返信され、このことが、後続の条件命令がその条件コードに失敗することをもたらし得、より以前のリソースに対する排他アクセスが保証されることができない場合にコードのクリティカル・セクションが立ち入られないように、プログラム・フローがその条件命令を越えて進むことを防止する。
【0056】
いくつかの場合において排他モニター論理部30、32は、排他モニター標示をセットさせるものとして同時に限られた数のアドレスを追跡するためのリソースを含むのみであり得る。例えば、いくつかの実施態様において、排他モニター標示は、排他モニター標示がセットされるとみなされる対象の1つのアドレスの標示を含むだけであり得、異なるアドレスを指定した別のロード排他命令が実行された場合、これは、より以前のロード排他命令により指定されたアドレスに対する任意の以前にセットされた標示をクリアし得る。
【0057】
したがって、処理回路4により実行される処理のいくつかのスレッドが、何らかの範囲のアドレスに対して相互排他を遂行するために図3に示されるようにトランザクショナル・モードを使用し得る一方で、他のスレッドが、トランザクションを使用せずにアトミックなアクセスを遂行するためにロード及びストア排他命令を使用するロック・ベースのモードを使用し得る。例えば、図4は、コードのクリティカル・セクションの開始時にロックをセットし、次に、クリティカル・セクションが履行されたときにロックを解放するアプローチを示す(ロード/ストア排他命令は、図4のステップ140においてロックの読み出し及びクレームを取り扱うために使用され得る)。例えばハードウェア・トランザクショナル・メモリ・リソース120を含まないのでロック・ベースのアプローチを使用することに制限されたいくつかの処理要素6が存在し得る一方で、他の処理要素6がハードウェア・トランザクショナル・メモリ・リソース120を含み得る。さらに、トランザクショナル・モードを使用することを最初に試みられたスレッドが、それらのトランザクションに対して高頻度の停止が発生した場合、ロックを使用した非トランザクショナル・モードを使用することに切り替わり得る。例えばコンフリクトに直面し続けるスレッド・セットが存在し得るので、それらのスレッドのすべてに対してトランザクションを使用することを継続することは効果的ではない。したがって、図3に示されるものと同様に1つのスレッドがトランザクショナル・モードを使用している間であっても、ロック・ベースのメカニズムを使用する必要がある他のスレッドが依然として存在し得る。さらに、トランザクショナル・モードにおいて動作するスレッドが、非トランザクショナル・スレッドによってもアクセスされるシェアされたリソースにアクセスすることを依然として必要とし得る。いくつかの場合において、非トランザクショナル・スレッドは、トランザクショナル・スレッドと同じコードを実際に実行している場合があり得るが、コードは、トランザクションが以前の場合に効果的であることが見出されているか否かに応じて選択され得る、コード内におけるトランザクショナル・パスと非トランザクショナル・パスとの両方を含み得る(例えばトランザクショナル・パスが停止し続ける場合ソフトウェアが非トランザクショナル・パスに切り替わり得る)。
【0058】
ロックによりガードされるリソースに対するアクセスをシェアする必要があるトランザクショナル・スレッドと非トランザクショナル・スレッドとの両方が存在し得るので、場合によっては、トランザクショナル・スレッドは、ロック・アドレスを読み出す、及び、ロックが現在クレーム又はセットされている場合に、トランザクションを停止する、又はある期間待ついくつかの命令を含むことを依然として必要とし得る。このようなロック確認命令は、トランザクショナル・スレッド自体の正しい処理を確実なものとするためには必要とされない一方で、コンフリクト確認回路126は、別のスレッドがトランザクションとコンフリクトしたか否かを検出し、検出した場合に不正確な結果を防止するためにトランザクションを停止することができるので、ロック確認は、非トランザクショナル・スレッドの演算を損ないかねない、別のスレッドがロックを保持しているときのトランザクションの結果のコミットを防止するために必要とされる。
【0059】
処理回路4は、命令がそもそも実際に実行されなければならないか否か、又は、命令に対する入力が正しいか否かが知られる前にいくつかの命令が実行される、命令の投機的な実行をさらにサポートし得る。例えば所与の処理要素は、条件分岐命令の帰結(分岐の帰結はメモリ・システムからロードされた値、又は、まだ利用可能ではない、より以前の命令の結果に依存し得る)が実際に特定される前に条件分岐命令の帰結を予測する分岐プレディクタを含み得、後の命令は予測された結果に基づいて実行され得る。分岐が正しく予測された場合、これはパフォーマンスを改善し得るが、予測ミスが存在する場合、次に任意の投機的に実行された命令の結果が破棄され得、レジスタ106におけるアーキテクチャ状態は、分岐のポイントまで巻き戻され得、正しい分岐の帰結に関連した後続の命令が次に実行され得る。予測ミスを解決することに関連したレイテンシ・ペナルティーよりも、予測が正しい場合において命令がより早くフェッチ、デコード、及び実行されることを可能にすることにおけるパフォーマンスの利益の方が上回り得る。場合によっては、このような投機的な処理は、ロードが実際に実行されなければならないかを支配する、より以前の条件分岐が解決される前に、メモリ・システム8、20、16からデータをロードするためのロード命令が実行されることを結果的にもたらし得る。この分岐が予測ミスされた場合、これは、トランザクショナル・スレッドとロード/ストア排他命令を使用する非トランザクショナル・スレッドとの間における相互作用の問題を引起し、相互排他のロスをもたらす可能性があり得る。この問題を示すために次の実例が与えられる。
【0060】
相互排他が要求される対象となる特定の変数xに対する演算を各々が実施する2つの処理要素(P0及びP1)を検討する。
P0 P1
lock() lock()
x:=x+2 x:=1
unlock() unlock()
xが最初に0の値をもっていた場合、xに対する最終結果は次のいずれかであると想定される。すなわち、
・まずP0の更新が実施された後、P1がP0により結果的にもたらされるxの値に作用する場合は1である。又は、
・まずP1の更新が実施された後、P0がP1により結果的にもたらされるxの値に作用する場合は3である。
2という最終結果は、P1がxを処理し始めた後だが、P1がメモリにxの新しい値を書き戻す前にP0がxの現在の値を読み出したことを意味するので、2という最終結果は相互排他の違反である。この実例は、考え出されたものであり、実際には、シェアされたデータ・リソースに対する処理の各スレッドにより実施される処理演算は、より複雑であり得ることが理解される。しかし、この簡略化された実例は、問題を説明するために有用である。
【0061】
図5は、処理要素P0において実施されるスレッドに対する可能な実施態様を示す「spinlock」コードの実例を示し、ここで、ロード/ストア排他命令LDAXR、STXRは、ロックが現在クレームされているか否かを確認するために、及び、どの他のスレッドもロックをクレームしていない場合にロックをクレームするために使用され(排他モニター論理部30がロード排他とストア排他命令との間の期間に別のスレッドがロックをクレームした場合にインスタンスを検出する)、したがって、シェアされた「x」という変数を使用して処理を進めることが安全であるか否かを確認するために使用される。
【0062】
図6及び図7は、トランザクションがロックを抹消することを試みるために使用される代替的な実施態様を示すコードの実例を示す。図7は、図6に示される関数CHECK、WAIT_ACQ、LOCK、CHECK_ACQ、及びUNLOCKをより詳細に示す。図6に示されるコードが、トランザクションを開始するためのコードとトランザクションをコミットするためのコードとの両方だけでなく、トランザクションを実施する時点において別のスレッドがロックを保持している場合にトランザクションを再試行するための(「fallback:」とラベル付けされた)フォールバック・コード・パス、及び、抹消が失敗した場合(トランザクションが既に特定の回数、成功せずに再試行をしている場合)実行される(「lock:」とラベル付けされた)ロック・パスを含むことに留意されたい。図7に示されるように、関数LOCK(Xx)におけるロック・パスは、図5に示される実例と同様の手法によりロード/ストア排他命令を使用する。図6において、トランザクションの使用が成功した(どの他の処理もロックを保持していない)場合、図6に示されるコードは、それ自体がロックをクレームしたことがない状態で「enter:」とラベル付けされたクリティカル・セクションに入る(ロック・アドレスが、CHECK(X1)においてトランザクションのワーキング読み出しセットに追加される一方で、トランザクションが失敗した場合にロック・パスが実行されない限り、ロックは書き込まれる対象とならない)ことにさらに留意されたい。
【0063】
図8に示されるように、図5のspinlockコードを実行する処理要素P0は、ロードが実際に実行されなければならないか否かが知られる前にいくつかのロード命令を実行するロード投機を実施し得る。これは、ストア排他命令が成功したか否かをテストする条件分岐の解決の前に、(ロックが獲得されていない場合に実行してはならない)シェアされた変数xをロードするロード命令が実行されることを結果的にもたらし得る(すなわち場合によっては、ロックが実際に獲得される前に、シェアされた変数「x」のロードが実施され得る)。相互排他を確実なものとするために、すべての処理要素が同じメカニズム(ロード/ストア排他命令)を使用するのであれば、これは許容可能であり、その理由は、ストア排他命令が、失敗したと後から特定された場合、すなわち、図8の条件分岐命令CBNZが行われるべきであった場合、不正確な投機を解決するために提供されたメカニズムが、変数「x」のロードが実施されていないかのように、シェアされた変数「x」のロード、及び任意の後続の命令の効果をキャンセルし、正しい分岐の帰結に基づいて処理をリセットするからである。これは、ループが再度試みられることを確実なものとするので、任意の他のスレッドがその間に変数「x」を更新していた場合、図8に示される現在のスレッドが「x」に対する最新の値を読み出し、ストア排他命令STXRが成功した場合、すなわち、STXR命令がロックをクレームするために実行される前に、LDAXR命令に応答してセットされた排他モニターがクリアされることをどの他のスレッドももたらさない場合にのみ、現在のスレッドの結果がアーキテクチャ状態にコミットされる。
【0064】
しかし、処理要素P0がロード/ストア排他命令を使用してクリティカル・セクションを処理する一方で、処理要素P1がロックを抹消するようにトランザクションを使用してクリティカル・セクションを処理する場合、処理要素P0による順番によらない変数「x」のロードの投機的な実行は、相互排他の違反をもたらし得、例えば、P0及びP1により実行される命令の相対的なタイミングは、次のとおりである。
・P0がロック変数のLDAXRを実行し(0=フリーとみなす)、且つ、ロック変数アドレスに対して排他モニター標示をセットする。
・P0が変数x(0とみなす)のLDRを実行する。

・P1がロック変数(0=フリーとみなす)のTSTART及びLDRを実行する。
・P1が変数xのSTRを実行する(変数xを1にセットする)。
・P1がTCOMMITを実行して成功する。

・P0がロック変数のSTXRを実行(ロック変数を1にセット)し、ロック変数に対するどの介入的な書き込みも、ロック変数アドレス保有のためにセットされた排他モニター標示をクリアしていないので、ストア排他が成功する。
・P0が変数xのSTRを実行する(変数xを2にセットする)。
・P0がロック変数のSTLRを実行する(ロック変数を0にセットする)。
【0065】
最終的なxの値が2であるので、このシーケンスは相互排他に違反する。抹消(トランザクショナル)パスがロック変数に書き込まないので相互排他違反が起こり得、したがって、spinlockコードによりセットされた排他モニターが無傷に留まる。ロード投機は、P0によるロック・ストアより早くクリティカル・セクション・ロードをホイスティングし得、したがって、ロックがP0により記憶される対象となる前に、P1におけるトランザクションが開始することと終了することとの両方を行った場合、P0によりロードされた「x」に対する値はクリティカル・セクションにおいて古くなっている(古い)。
【0066】
この問題を解決する1つの手法が、ロードがより以前の条件分岐より上方においてホイスティングされることを防止するように、非トランザクショナル・スピンロック・コードに投機バリアを導入することであり得る。しかし、これは、トランザクショナル・メモリをサポートしていないシステムに対して既に記述された多くのプログラムが書き換えられることを必要とし得、このことが、ソフトウェア開発者に対する不当な負担となる。
【0067】
トランザクショナル・メモリをサポートしていないシステムに対して記述された従来のコードとの後方互換を確実なものとすることができるアプローチは、トランザクショナル・スレッドと非トランザクショナル・スレッドとの間の互換性を確実なものとするために、アーキテクチャに2つの追加的な手段を導入することであり得る。第1に、ロード排他命令がある処理要素6において実行されたとき、そのワーキング・アドレス・セット(読み出しアドレス・セット)において同じアドレスを指定した任意のトランザクションが停止されるように、命令により指定されたアドレスに対する排他標示のセッティングが他の処理要素(少なくとも、HTMリソース120を含む処理要素)にブロードキャストされる。第2に、トランザクション内において実行されたとき、トランザクションのワーキング・アドレスの読み出しセットにロード命令により指定されたアドレスをロードする、且つ、同じアドレスに対する任意の以前にセットされた排他モニター標示がクリアされることを要求する信号を相互接続体10に送る。以下で所定のタイプのロード命令と呼ばれるトランザクショナル・ロード命令の新しいクラスが導入される。図7の「CHECK(Xx)」関数内のロード命令LDRが、所定のタイプのロードと置換され得る。
【0068】
上記の実例において、処理要素P1におけるトランザクションがロック変数において所定のタイプのロードを実行したとき、これが処理要素P0によりロック変数に対してセットされた排他モニター標示をクリアし、したがって、後続のストア排他命令STXRが処理要素P0において実行されたとき、排他モニターがもはやセットされないのでこの命令が失敗するという理由から、これらの手段は相互排他を確実なものとする。これは、変数xのロードが処理要素P1におけるトランザクションの実行より上方においてホイスティングされることを、投機的な実行が結果的にもたらす場合でも、スピンロック・コードが処理要素P0において失敗されるので、スピンロック・コードが変数xを使用してコードのクリティカル・セクションを実行しようとするその現在の試みを停止し、次に、別の時点においてロックをクレームしようと試みることにループ・バックし、この時にロック・クレームが成功した場合、変数xのロードは、トランザクションが実行される前に読み出された古くなった値ではなく、処理要素P1におけるトランザクションにより提供されるコミットされた更新により結果的にもたらされる値を読むことを意味する。
【0069】
同様に、処理要素P0におけるロード排他命令の前に、処理要素P1におけるトランザクション内におけるロック変数のロードが発生するように、処理要素P0及びP1における演算間のタイミングが異なっていた場合、アドレス追跡回路124により追跡されるその読み出しアドレス・セットに同じアドレスを含むトランザクションを他の処理要素が停止することを可能にするように、排他標示のセッティングが他の処理要素にブロードキャストされる。これが相互排他が失われることを防止し、その理由は、この時、トランザクションが失敗し、及び、ロック変数が処理要素P0においてスピンロック・コードにより解放された後にトランザクションを実行しようとする後続の試みにおいて、トランザクションが、この時点で、他の処理要素P0におけるコードのクリティカル・セクションの成功した履行により結果的にもたらされる変数xの値を読むからである。
【0070】
図9は、所与のアドレスXを指定したロード排他命令に応答する方法を示す。ロード排他命令は、ステップ200において所与の処理要素6により実行される。それに応答して、ステップ202において、処理要素6がアドレスXに対する排他モニター標示のセッティングをトリガーする。排他モニター標示が同時にセットされ得る対象となるアドレスの最大数への到達が既に発生している場合、ステップ202は、以前にセットされたアドレスに関連した排他モニター標示のクリアをさらにトリガーし得る。
【0071】
ステップ204において、アドレスXに対する排他モニターのセットは、他の処理要素6又はスレッドがアドレスXに対して既にセットされた任意の排他モニターをクリアすることをトリガーし、且つ/又は、グローバル排他モニター32がアドレスXに対して他の処理要素又はスレッドによりセットされた任意の排他モニターをクリアすることをトリガーする。さらに、ステップ206において、ある処理要素におけるアドレスXに対する排他モニターのセットは、そのワーキング・アドレス・セット(読み出しアドレス・セット)におけるアドレスXを使用した任意のトランザクションが停止されることをトリガーする。いくつかの場合において、ステップ204及びステップ206に示されるアクションは、相互接続体10によりルーティングされた独立したメッセージによりトリガーされ得、又は代替的に、両方のアクションが同じメッセージによりトリガーされ得る。
【0072】
ステップ208において、ロード排他命令に応答して、アドレスXからのデータが、ロード排他命令を実行した処理要素6のレジスタにロードされる。例えばこのデータは、その処理要素のキャッシュ8から、又は、他の処理要素における、若しくは、相互接続体10におけるキャッシュから、又は主メモリ16から取得され得る。
【0073】
図10は、所与の処理要素6により処理されるストア排他命令を処理する方法を示す。ステップ210において、所与のアドレスXを指定したストア排他命令が所与の処理要素6により実行される。それに応答して、ステップ212において、処理要素6が、アドレスXに対して所与の処理要素により排他モニターがセットされているか否かを判定する。セットされていない場合、ステップ214において、ストア排他失敗標示が返信される(例えばレジスタにセットされた所定の値)、及び、ストア演算が行われない(ストア排他命令により指定されたレジスタにおけるデータ値が、キャッシュ又はメモリに書き込まれない)。所与の処理要素に対する排他モニターがアドレスXに対して依然としてセットされている場合、ステップ216において、ストア排他命令により指定されたレジスタからのデータがアドレスXに関連したキャッシュ又はメモリにおける位置に記憶され、ステップ218において、処理要素が、ストア排他成功標示、例えば、ステップ214において失敗ケースにおいて返信される値と異なる、レジスタに記憶された値を返信する。この値は、例えば、相互排他が遂行される必要がある対象のリソースにアクセスするコードのセクションに進むか否かを判定するために、後続の条件分岐命令により確認され得る。
【0074】
図11は、ストア排他命令ではないストア命令の取扱いを示す。ステップ220において、アドレスXを指定したストア命令が所与の処理要素により実行され、それに応答して、ステップ222において、アドレスXに対して他のスレッド又は処理要素によりセットされた任意の排他モニター標示がクリアされる。ステップ224において、ストア命令により指定されたレジスタからのデータが、アドレスXに関連した位置においてキャッシュ又はメモリに記憶される。ストア命令は、アドレス追跡回路124により追跡されるそれらの読み出し又は書き込みアドレス・セット内におけるアドレスXを指定した任意のトランザクションに対するコンフリクトするアクセスとしても検出され得る。
【0075】
図12は、トランザクション内において処理要素6により実行されるロード命令を取り扱う方法を示す。ステップ240において、ロード命令がトランザクション内において実行され、ロード命令は、所与のロード対象アドレスXを指定する。それに応答して、ステップ242において、アドレス追跡回路は、そのワーキング・アドレス・セット(読み出しアドレス・セット)にアドレスXを追加する。ステップ244において、それらの書き込みアドレス・セットにアドレスXを含む任意の他のトランザクションが停止される(それらの読み出しセットにアドレスXを含むトランザクションを停止する必要はない)。
【0076】
ステップ246において、ロード命令のタイプが特定される。ロード命令が所定のタイプのもの(排他モニター・クリア・タイプ)である場合、ステップ248において、ロード命令を実行した処理要素6が、アドレスXに対して他の処理要素又はスレッドによりセットされた任意の排他モニター標示をクリアすることをトリガーするタイプの読み出し要求を、相互接続体10に発行する。その一方で、ロードのタイプが第2のタイプ(非排他モニター・クリア・タイプ)のロード命令である場合、ステップ250において、他のスレッド又は処理要素によりアドレスXに対して既にセットされた排他モニターが保有されることを可能にするタイプの読み出し要求を処理要素6が発行する。ロード命令のタイプにかかわらず、ステップ252において、(別の処理要素のキャッシュ8又は主メモリ16からデータをフェッチした後、処理要素6のローカル・キャッシュ8から、又は相互接続体10から)読み出し要求に応答してデータが返信されたとき、データがロード命令により指定されたレジスタ106に書き戻され、処理要素6のローカル・キャッシュ8にまだない場合、ローカル・キャッシュ8にさらに割り当てられ得る。
【0077】
したがって、(第2のタイプのロードと異なり)排他モニターのクリアをトリガーする特別なタイプのロード命令を提供することにより、これは、トランザクション内におけるロック変数を確認するためのロードが、非トランザクショナル・スレッドによりセットされたロック・アドレスに対する任意の以前にセットされた排他モニターをクリアすることを可能にし、したがって、ロード投機が存在する場合でも相互排他が維持され得る。
【0078】
図13から図15は、2つの処理要素RE0、PE1(6)及び相互接続体10の間におけるメッセージングの実例を示す。これらの実例において、処理要素PE1は、ロック変数としてアドレスXを確認するトランザクショナル・スレッドを実行し、及び、RE0は(上記の実例と同様の)ロック変数アドレスXに対する排他モニター標示をセットする非トランザクショナル・スレッドを実行すると仮定される。
【0079】
図13は、図12に示される第2のタイプのロード命令の取扱いを示す。第2のタイプのロード命令に応答して、PE1は、ロード命令の対象アドレスXを指定する相互接続体10にReadShared要求を発行する。相互接続体10は、アドレスXに対するデータのまさに最新の値を識別するために必要とされる任意のスヌープ・メッセージを送り、別の処理要素6のローカル・キャッシュ8に、又は、システム・キャッシュ20若しくはメモリ16内にあり得るデータを取得する。相互接続体10は、処理要素6にデータを返信し、処理要素6は、(他の位置に保持されたデータは、そのローカルにキャッシュされたコピーに対するPE1による書き込みが発生した場合に無効化されることを必要とし得るので)データに対する任意の将来の書き込みが相互接続体を使用した確認を要求することを示す「シェアされた」状態において、データをキャッシュする。第2のタイプのロード命令を使用すると、アドレスXに対する任意の以前にセットされた排他モニター標示をクリアする必要がない。したがって、RE0は、非トランザクショナル・スレッドにより以前にセットされている場合、アドレスXに対する任意の排他モニターを保有し得る。
【0080】
図14は、所定のタイプのロード命令の取扱いを示し、このロード命令に応答して、データに対するさらなる書き込みが相互接続体10に確認することなく実施され得る状態でPE1にデータが戻されることを要求する「ReadUnique」要求を、PE1が相互接続体10に送る。ReadUniqueメッセージは、相互接続体10が他の処理要素に排他モニター・キャンセル・メッセージ260を送信することをもたらし、このことが、この実例において、PE0がアドレスXに対して既にセットされたその排他モニターをキャンセルすることをトリガーする。データを取得した場合、相互接続体10に再度確認することなく、ローカルにキャッシュされたデータに対して書き込みが許可にされる「ユニークな」状態で、データがPE1に戻される。ReadUniqueメッセージは、システムの他のキャッシュ8、20に保持されたアドレスXに対するデータのキャッシュされたコピーを相互接続体が無効化することをさらにトリガーし得る。
【0081】
他の実例において、「ユニークな」状態でデータを返信する「ReadUnique」要求を使用するのではなく、ユニークな状態においてデータを返信しない(例えば、代替的に、キャッシュされたデータに対する書き込みが容認されるように、相互接続体10に対するさらなるメッセージが要求される「シェアされた」状態においてデータが返信され得、したがって、必要な場合に他のキャッシュされたコピーが無効化され得る)が、アドレスXに対して以前にセットされた排他モニター標示がキャンセルされることを排他モニター・キャンセル・メッセージ260が確実なものとすることを依然としてトリガーする所定の形態のロード命令に応答した、異なる形態のコヒーレンシー・メッセージがPE1により相互接続体10に発行され得る。実際には、所定のタイプのロードに対する想定される使用ケースは、書き込みがトランザクション内において想定されていない対象のロック変数を確認するためのものであり、したがって、「ユニークな」状態でデータを返信することが必須というわけではない。それにもかかわらず、ロード命令に応答して排他モニターのキャンセルをトリガーするようにコヒーレンシー・メッセージの形態を規定することにより、これは、上述のトランザクショナル・スレッドと非トランザクショナル・スレッドとの間の連係動作を改善することに役立ち得る。
【0082】
図15は、RE0がその対象アドレスとしてアドレスXを指定したロード排他命令を実行するときのメッセージングを示す。それに応答して、排他モニター・セッティング・メッセージ270が相互接続体10に送られ、排他モニター・セッティング・メッセージ270は、トランザクショナル・メモリをサポートする任意の他の処理要素6に伝達される。排他モニター・セッティング・メッセージ270に応答して、PE1は読み出しセットにアドレスXを含むトランザクションを停止する。PE0から相互接続体10に送信される排他モニター・セッティング・メッセージ270の形態は、相互接続体10から他の処理要素6、例えばPE1に送られる排他モニター・セッティング・メッセージの形態と同じであり、又は異なり得る。
【0083】
図16は、使用され得るシミュレーターの実施態様を示す。ここまでに説明される実施例は、関心のある技術をサポートする特定の処理ハードウェアを動作させるための装置及び方法の観点から本技術を実装しているが、コンピュータ・プログラムの使用を通して実装される本明細書において説明される実施例による命令実行環境を提供することも可能である。このようなコンピュータ・プログラムは、多くの場合、このようなコンピュータ・プログラムがハードウェア・アーキテクチャのソフトウェア・ベースの実施態様を提供する限り、シミュレーターと呼ばれる。様々なシミュレーター・コンピュータ・プログラムとして、エミュレーター、仮想マシン、モデル、及び動的バイナリ変換部を含むバイナリ変換部が挙げられる。典型的には、シミュレーターの実施態様は、シミュレーター・プログラム310をサポートした、ホスト・オペレーティング・システム320を任意選択的に動作させるホスト・プロセッサ330において動作してよい。いくつかのアレンジにおいて、ハードウェアと、提供される命令実行環境、及び/又は、同じホスト・プロセッサにおいて提供される複数の別個の命令実行環境との間に複数のシミュレーション・レイヤーが存在してよい。歴史的には、相応の速度において実行するシミュレーターの実施態様を提供するために強力なプロセッサが必要とされてきたが、このようなアプローチは、例えば、互換性又は再使用を理由として別のプロセッサに対してネイティブなコードを走らせたいという要望が存在するときといった特定の状況において妥当であり得る。例えば、シミュレーターの実施態様は、ホスト・プロセッサ・ハードウェアによりサポートされていない追加的な機能を含む命令実行環境を提供してよく、又は、異なるハードウェア・アーキテクチャに典型的には関連した命令実行環境を提供してよい。シミュレーションの概観が、「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、Winter 1990 USENIX Conference、53~63頁に記載されている。
【0084】
実施例が特定のハードウェア構築部又は機能部を参照しながらここまでに説明されている範囲において、シミュレーションによる実施例では、同等な機能が適切なソフトウェア構築部又は機能部により提供されてよい。例えば、特定の回路が、シミュレーションによる実施例においてコンピュータ・プログラム論理部として実装されてよい。同様に、メモリ・ハードウェア、例えばレジスタ又はキャッシュは、シミュレーションによる実施例においてソフトウェア・データ構造体として実装されてよい。前述の実施例において参照されているハードウェア要素のうちの1つ又は複数がホスト・ハードウェア(例えば、ホスト・プロセッサ330)に存在するアレンジにおいて、適切な場合には、いくつかのシミュレーションによる実施例がホスト・ハードウェアを使用してよい。
【0085】
シミュレーター・プログラム310は、(非一時的媒体であってよい)コンピュータ可読記憶媒体に格納されてよく、シミュレーター・プログラム310によりモデル化されたハードウェア・アーキテクチャのアプリケーション・プログラム・インターフェースと同じである(アプリケーション、オペレーティング・システム、及びハイパーバイザーを含んでよい)ターゲット・コード300に対するプログラム・インターフェース(命令実行環境)を提供してよい。したがって、所定のタイプのロード命令及び上述のロード/ストア排他命令を含むターゲット・コード300のプログラム命令が、シミュレーター・プログラム310を使用して命令実行環境内から実行されてよく、したがって、上述の装置2のハードウェア機能部を実際には含まないホスト・コンピュータ330がこれらの特徴をエミュレートし得る。シミュレーター・プログラム310は、処理論理部104、ハードウェア・トランザクショナル・メモリ・リソース120、及び排他モニター30、32にそれぞれ対応した機能を提供する、処理プログラム論理部312、トランザクショナル・メモリ・プログラム論理部314、及び排他モニター・プログラム論理部316を含んでよい。
【0086】
本出願において、「するように構成された~」という表現は、装置の要素が規定の動作を行うことができる構成をもつことを意味するように使用される。この文脈において、「構成」はハードウェア又はソフトウェアの相互接続のアレンジ又は手法を意味する。例えば、装置は、規定の動作を提供する専用ハードウェアを含んでよく、又は、プロセッサ又は他の処理デバイスが機能を実施するようにプログラムされてよい。「するように構成された」とは、規定の動作を提供するために装置要素が何らかの手法により変えられる必要があることを意味するわけではない。
【0087】
本発明の例示的な実施例が添付図面を参照しながら本明細書において詳細に説明されているが、本発明はそれらの実施例そのものに限定されないこと、及び、添付の請求項により規定されている本発明の範囲及び趣旨から逸脱することなく、当業者によりその中において様々な変形及び変更が行われ得ることが理解される。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16