特許第6734760号(P6734760)IP Force 特許公報掲載プロジェクト 2015.5.11 β版

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

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧
特許6734760プリフェッチ・インセンシティブのトランザクション・メモリ
<>
  • 特許6734760-プリフェッチ・インセンシティブのトランザクション・メモリ 図000006
  • 特許6734760-プリフェッチ・インセンシティブのトランザクション・メモリ 図000007
  • 特許6734760-プリフェッチ・インセンシティブのトランザクション・メモリ 図000008
  • 特許6734760-プリフェッチ・インセンシティブのトランザクション・メモリ 図000009
  • 特許6734760-プリフェッチ・インセンシティブのトランザクション・メモリ 図000010
  • 特許6734760-プリフェッチ・インセンシティブのトランザクション・メモリ 図000011
  • 特許6734760-プリフェッチ・インセンシティブのトランザクション・メモリ 図000012
  • 特許6734760-プリフェッチ・インセンシティブのトランザクション・メモリ 図000013
  • 特許6734760-プリフェッチ・インセンシティブのトランザクション・メモリ 図000014
  • 特許6734760-プリフェッチ・インセンシティブのトランザクション・メモリ 図000015
  • 特許6734760-プリフェッチ・インセンシティブのトランザクション・メモリ 図000016
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6734760
(24)【登録日】2020年7月14日
(45)【発行日】2020年8月5日
(54)【発明の名称】プリフェッチ・インセンシティブのトランザクション・メモリ
(51)【国際特許分類】
   G06F 12/0862 20160101AFI20200728BHJP
   G06F 12/0806 20160101ALI20200728BHJP
   G06F 9/38 20060101ALI20200728BHJP
【FI】
   G06F12/0862 110
   G06F12/0806 100
   G06F9/38 310A
   G06F9/38 330G
【請求項の数】25
【全頁数】62
(21)【出願番号】特願2016-214213(P2016-214213)
(22)【出願日】2016年11月1日
(65)【公開番号】特開2017-91521(P2017-91521A)
(43)【公開日】2017年5月25日
【審査請求日】2019年4月19日
(31)【優先権主張番号】14/937036
(32)【優先日】2015年11月10日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
(74)【代理人】
【識別番号】100108501
【弁理士】
【氏名又は名称】上野 剛史
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】マイケル・カール・グシュビント
(72)【発明者】
【氏名】バレンティナ・サラプラ
(72)【発明者】
【氏名】チャンラン・ケビン・シャム
(72)【発明者】
【氏名】ティモシー・ジェイ・スレゲル
【審査官】 後藤 彰
(56)【参考文献】
【文献】 特開昭57−137942(JP,A)
【文献】 特開2003−044456(JP,A)
【文献】 特開2011−076314(JP,A)
【文献】 特開平04−113442(JP,A)
【文献】 特開2010−198342(JP,A)
【文献】 特表2001−504968(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/0862
G06F 12/0806
G06F 9/38
(57)【特許請求の範囲】
【請求項1】
プリフェッチ・メモリ操作およびトランザクションの処理におけるアボートを制御するための方法であって、
1つ又は複数のプロセッサのグループのローカル・プロセッサにより、遠隔プロセッサからプリフェッチ要求を受け取ることと、
前記1つ又は複数のプロセッサのグループにより、前記プリフェッチ要求が前記ローカル・プロセッサのトランザクションと競合するかどうかを判断することであって、前記プリフェッチ要求が前記トランザクションと競合すると判断する場合に、i)前記プリフェッチ要求の優先順位と前記トランザクションの優先順位とを比較する第1比較、及びii)前記ローカル・プロセッサの優先順位と前記遠隔プロセッサの優先順位とを比較する第2比較のうちの少なくとも1つにより前記プリフェッチ要求を評価することを含む前記判断することと、
i)前記プリフェッチ要求が前記トランザクションと競合しないとの判断、及びii)前記第1比較において前記プリフェッチ要求の前記優先順位がより高いまたは前記第2比較において前記遠隔プロセッサの前記優先順位がより高いと評価する肯定評価のうちの少なくとも1つに応答して、前記1つ又は複数のプロセッサのグループにより、要求されるプリフェッチ・データを提供することと、
前記トランザクションと競合すると判断された前記プリフェッチ要求に対し前記肯定評価が得られないことに応答して、前記1つ又は複数のプロセッサのグループにより、前記プリフェッチ要求の処理を抑止することと、
を含む方法。
【請求項2】
前記プリフェッチ要求は、i)読み取りプリフェッチ要求、及びii)書き込みプリフェッチ要求のうちの少なくとも一方である、請求項1に記載の方法。
【請求項3】
前記プリフェッチ要求の処理を抑止することは、
前記1つ又は複数のプロセッサのグループにより、前記プリフェッチ要求のアボートを処理することを含む、請求項1に記載の方法。
【請求項4】
前記方法は、
前記1つ又は複数のプロセッサのグループにより、前記プリフェッチ要求がアボートされたことを示す通知を、前記遠隔プロセッサに送ることをさらに含む、請求項3に記載の方法。
【請求項5】
前記プリフェッチ要求の処理を抑止することは、
前記1つ又は複数のプロセッサのグループにより、前記プリフェッチ要求をキューにキューイングすることを含む、請求項1に記載の方法。
【請求項6】
前記方法は、
前記1つ又は複数のプロセッサのグループにより、前記プリフェッチ要求が前記キューにキューイングされていることを、前記遠隔プロセッサに通知することをさらに含む、請求項5に記載の方法。
【請求項7】
前記方法は、
前記1つ又は複数のプロセッサのグループにより、前記キューから前記プリフェッチ要求を除去することと、
前記1つ又は複数のプロセッサのグループにより、前記プリフェッチ要求と関連したメモリ・アドレスがトランザクションと競合を有していない場合、前記プリフェッチ要求を実行することと、
をさらに含む、請求項5に記載の方法。
【請求項8】
前記方法は、
前記1つ又は複数のプロセッサのグループにより、前記プリフェッチ要求が実行されたことを、前記遠隔プロセッサに通知することをさらに含む、請求項7に記載の方法。
【請求項9】
前記プリフェッチ要求の処理を抑止することは、
前記1つ又は複数のプロセッサのグループにより、前記プリフェッチ要求の実行前に遅延を実行することを含み、前記遅延の期間は、i)前記ローカル・プロセッサにおける1つ又は複数の条件、及びii)前記遠隔プロセッサにおける1つ又は複数の条件のうちの一方又は両方によって決定される、請求項1に記載の方法。
【請求項10】
プリフェッチ・メモリ操作およびトランザクションの処理におけるアボートを制御するためのコンピュータ・プログラムであって、
ローカル・プロセッサにより、遠隔プロセッサからプリフェッチ要求を受け取るためのプログラム命令と、
前記プリフェッチ要求が前記ローカル・プロセッサのトランザクションと競合するかどうかを判断するためのプログラム命令であって、前記プリフェッチ要求が前記トランザクションと競合すると判断する場合に、i)前記プリフェッチ要求の優先順位と前記トランザクションの優先順位とを比較する第1比較、及びii)前記ローカル・プロセッサの優先順位と前記遠隔プロセッサの優先順位とを比較する第2比較のうちの少なくとも1つにより前記プリフェッチ要求を評価することを含む前記判断するためのプログラム命令と、
要求されるプリフェッチ・データを提供することにより、i)前記プリフェッチ要求が前記トランザクションと競合しないとの判断、及びii)前記第1比較において前記プリフェッチ要求の前記優先順位がより高いまたは前記第2比較において前記遠隔プロセッサの前記優先順位がより高いと評価する肯定評価のうちの少なくとも1つに応答するためのプログラム命令と、
前記プリフェッチ要求の処理を抑止することにより、前記トランザクションと競合すると判断された前記プリフェッチ要求に対し前記肯定評価が得られないことに応答するためのプログラム命令と、
を含む、コンピュータ・プログラム。
【請求項11】
前記プリフェッチ要求は、i)読み取りプリフェッチ要求、及びii)書き込みプリフェッチ要求のうちの少なくとも一方である、請求項10に記載のコンピュータ・プログラム。
【請求項12】
前記プリフェッチ要求のアボートを処理することにより、前記プリフェッチ要求の前記処理を抑止するためのプログラム命令をさらに含む、請求項10に記載のコンピュータ・プログラム。
【請求項13】
前記プリフェッチ要求がアボートされたことを示す通知を、前記遠隔プロセッサに送るためのプログラム命令をさらに含む、請求項12に記載のコンピュータ・プログラム。
【請求項14】
前記プリフェッチ要求をキューにキューイングすることにより、前記プリフェッチ要求の前記処理を抑止するためのプログラム命令をさらに含む、請求項10に記載のコンピュータ・プログラム。
【請求項15】
前記プリフェッチ要求が前記キューにキューイングされることを、前記遠隔プロセッサに通知するためのプログラム命令をさらに含む、請求項14に記載のコンピュータ・プログラム。
【請求項16】
前記キューから前記プリフェッチ要求を除去するためのプログラム命令と、
前記プリフェッチ要求と関連したメモリ・アドレスがトランザクションと競合を有していない場合、前記プリフェッチ要求を実行するためのプログラム命令と、
をさらに含む、請求項14に記載のコンピュータ・プログラム。
【請求項17】
前記プリフェッチ要求が実行されたことを、前記遠隔プロセッサに通知するためのプログラム命令をさらに含む、請求項16に記載のコンピュータ・プログラム。
【請求項18】
前記プリフェッチ要求の実行前に遅延を実行することによって、前記プリフェッチ要求の前記処理を少なくとも部分的に抑止するためのプログラム命令をさらに含み、前記遅延の期間は、i)前記ローカル・プロセッサにおける1つ又は複数の条件及びii)前記遠隔プロセッサにおける1つ又は複数の条件のうちの一方又は両方によって決定される、請求項10に記載のコンピュータ・プログラム。
【請求項19】
プリフェッチ・メモリ操作およびトランザクションの処理におけるアボートを制御するためのコンピュータ・システムであって、
1つ又は複数のコンピュータ・プロセッサ、1つ又は複数のコンピュータ可読ストレージ媒体、及び前記1つ又は複数のコンピュータ・プロセッサの少なくとも1つにより実行するための、前記1つ又は複数のコンピュータ可読ストレージ媒体上に格納されたプログラム命令を含み、前記プログラム命令は、
ローカル・プロセッサにより、遠隔プロセッサからプリフェッチ要求を受け取るためのプログラム命令と、
前記プリフェッチ要求が前記ローカル・プロセッサのトランザクションと競合するかどうかを判断するためのプログラム命令であって、前記プリフェッチ要求が前記トランザクションと競合すると判断する場合に、i)前記プリフェッチ要求の優先順位と前記トランザクションの優先順位とを比較する第1比較、及びii)前記ローカル・プロセッサの優先順位と前記遠隔プロセッサの優先順位とを比較する第2比較のうちの少なくとも1つにより前記プリフェッチ要求を評価することを含む前記判断するためのプログラム命令と、
要求されるプリフェッチ・データを提供することにより、i)前記プリフェッチ要求が前記トランザクションと競合しないとの判断、及びii)前記第1比較において前記プリフェッチ要求の前記優先順位がより高いまたは前記第2比較において前記遠隔プロセッサの前記優先順位がより高いと評価する肯定評価のうちの少なくとも1つに応答するためのプログラム命令と、
前記プリフェッチ要求の処理を抑止することにより、前記トランザクションと競合すると判断された前記プリフェッチ要求に対し前記肯定評価が得られないことに応答するためのプログラム命令と、
を含む、コンピュータ・システム。
【請求項20】
前記プリフェッチ要求は、i)読み取りプリフェッチ要求、及びii)書き込みプリフェッチ要求のうちの少なくとも一方である、請求項19に記載のコンピュータ・システム。
【請求項21】
前記プリフェッチ要求のアボートを処理することにより、前記プリフェッチ要求の前記処理を抑止するためのプログラム命令をさらに含む、請求項19に記載のコンピュータ・システム。
【請求項22】
前記プリフェッチ要求がアボートされたことを示す通知を、前記遠隔プロセッサに送るためのプログラム命令をさらに含む、請求項21に記載のコンピュータ・システム。
【請求項23】
前記プリフェッチ要求をキューにキューイングすることにより、前記プリフェッチ要求の前記処理を抑止するためのプログラム命令をさらに含む、請求項19に記載のコンピュータ・システム。
【請求項24】
前記プリフェッチ要求が前記キューにキューイングされることを、前記遠隔プロセッサに通知するためのプログラム命令をさらに含む、請求項23に記載のコンピュータ・システム。
【請求項25】
前記キューから前記プリフェッチ要求を除去するためのプログラム命令と、
前記プリフェッチ要求と関連したメモリ・アドレスがトランザクションと競合を有していない場合、前記プリフェッチ要求を実行するためのプログラム命令と、
をさらに含む、請求項23に記載のコンピュータ・システム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般に、コンピュータ・メモリ管理の分野に関し、より具体的には、トランザクション・メモリ操作の効率を改善するための技術に関する。
【背景技術】
【0002】
多くのコンピュータ・システムは、データ取得(data retrieval)動作の速度を上げるためにキャッシュ・メモリを用いる。キャッシュ・メモリは、頻繁に使用される主メモリ位置に見出されたデータのコピーを格納(ストア、store)する。キャッシュ・メモリには、典型的には、主メモリよりも速くアクセスすることができるので、キャッシュ・メモリからデータにアクセスすることにより、処理の速度が上がる。要求されるデータがキャッシュ・メモリ内に見出された場合、キャッシュ・メモリからデータにアクセスされる。しかしながら、要求されるデータがキャッシュ・メモリ内に見出されない場合、最初にキャッシュ・メモリにデータをコピーし、次に、キャッシュ・メモリからデータにアクセスする。
【0003】
マルチレベル・キャッシュは、複数のキャッシュ・メモリが存在する構造体である。例えば、コンピューティング・システムは、3つのレベル、すなわち、L1キャッシュ、L2キャッシュ及びL3キャッシュを有することができる、典型的には、マルチレベル・キャッシュ構成において、L1は最も小容量であり、アクセス時間が短い。要求されるデータがL1キャッシュ内に見出されない場合、システムは、通常、L1キャッシュより大容量であり、L1キャッシュより物理的にさらに遠く、従って、アクセス時間がより長いL2キャッシュを検索する。同様の方法で、データがL2キャッシュ内に見出されない場合、L3キャッシュを検索する。要求されるデータがL1、L2又はL3キャッシュ内にない場合、主メモリにのみアクセスする。キャッシュ・メモリの多くの異なる実装がある。
【0004】
性能を向上させるために、コンピュータ・アーキテクチャは、データへのアクセスを予測して、データを、主メモリ又は下位のキャッシュ・レベルから上位のキャッシュ・レベル(プロセッサにより近い)に移動させることができるプリフェッチ命令を含むことが多い。プリフェッチ命令の実行は、プリフェッチ命令により移動されるデータに実際にアクセスされることが分かる前に実行され得るという点で、本質的に投機的であり得る。読み取りアクセス又は書き込みアクセスのいずれかを予測して、データをプリフェッチすることができ、これはそれぞれ、読み取りプリフェッチ又は書き込みプリフェッチと呼ばれる。データの共有、同期及び並列処理を可能にする、コンピュータのキャッシュ・コヒーレンシ・プロトコルは、プロセッサが、データを書き込む(すなわち、変更する)ことができる前に、データの所有権を得ることを要求することが多い。データは、現在別のプロセッサが所有している場合があるので、所有権の取得は、長期にわたるプロセスであり得る。1つのメモリ位置から1つのプロセッサによって読み取られるデータが、同じ位置又は異なる位置(データのコピーが複数の異なる位置にある場合)に書き込みを行う別のプロセッサにより変更されるのを防止するために、所有権の概念が必要である。従って、多くの場合、プロセッサは、データへの書き込みを予測して、データの所有権を取得するために書き込みプリフェッチ命令を実行し、所有権を獲得する間、処理が遅延されないようにすることは有利である。
【0005】
キャッシュのアクセス時間は、実行されているコードの性能にとって重要であることが多く、キャッシュは、多くの操作(例えば、ミスの処理)でビジー(busy)状態であることが多いので、可能であれば、キャッシュのワークロードを減らすことが有利である。キャッシュのワークロードを減らすために用いられる1つの一般的な技術は、共通のキャッシュラインに格納する複数のストアをキャッシュライン・バッファ内に蓄積し、キャッシュライン・バッファのコンテンツを単一の操作としてキャッシュに格納することを含む。これにより、キャッシュ・ワークロードが減少し、その応答時間が改善し、従って、潜在的に、実行されているコードの性能が向上する。こうした技術は、一般的に、ストア・キャッシュと呼ばれる機構において実行される。
【0006】
トランザクション・メモリは、トランザクションが完了したとき、プロセッサにより実行される1以上のロード及びストア操作を、単一の操作として他のプロセッサに見える単一のトランザクションにまとめる、1つのタイプのメモリ操作である。単一のトランザクションに関与している複数のストア操作は、トランザクションが完了するまで、他のプロセッサに見えるようにならない。トランザクション・ロードは、トランザクションが完了するまでデータにアクセスし、これをバッファに入れるロードであり、トランザクションの完了後、データは、これを要求したプロセッサに転送される。ロードが発生した後、トランザクションが完了する前に、トランザクション・ロードからのデータが変更された場合(すなわち、書き込まれるメモリ内の位置)、トランザクションはアボートされる。トランザクション書き込みは、トランザクションが完了するまで、そのデータが見られない書き込みである。トランザクションにおけるトランザクション書き込みのターゲットである位置からの読み出し又は書き込みは、トランザクションをアボートする。トランザクション・メモリは、複数のCPU上で並列に実行される(任意の組のメモリ位置に対するアトミック操作を可能にすることによって)作業の同期の際、及び、複数の書き込みを中断してはならない場合に有用であることが多い。トランザクションに関与する書き込みは、トランザクションが完了するまで見えないので、トランザクションにおける書き込みにより書き込まれる予定の位置からの読み取りは、トランザクションをアボートさせる。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】米国特許第6,349,361号明細書
【非特許文献】
【0008】
【非特許文献1】「Intel(登録商標) Architecture Instruction Set Extensions Programming Reference」319433−012A、2012年2月
【非特許文献2】Austen McDonald著、「ARCHITECTURES FOR TRANSACTIONAL MEMORY」、哲学博士号の要件の部分的履行において、スタンフォード大学のComputer Science学部及び大学院の委員会に提出された論文、2009年6月
【非特許文献3】「Transactional Memory Architecture and Implementation for IBM System z」、カナダ国ブリティッシュ・コロンビア州バンクーバーにおいて2012年12月1〜5日開催のMICRO−45予稿集、25〜36ページ、IEEE Computer Society Conference Publishing Services(CPS)より入手可能
【非特許文献4】「z/Architecture,Principles of Operation」、第10版、IBM(登録商標)SA22−7832−09、2012年9月
【非特許文献5】P.Mark、C.Walters、及びG.Strait著、「IBM system z10 processor cache subsystem microarchitecture」、IBM Journal of Research and Development、Vol 53:1、2009年
【発明の概要】
【発明が解決しようとする課題】
【0009】
プリフェッチ・メモリ操作によりトランザクションがアボートするのを防止するための方法、コンピュータ・システム及びコンピュータ・プログラムを提供する。
【課題を解決するための手段】
【0010】
本発明の実施形態は、プリフェッチ・メモリ操作によりトランザクションがアボートするのを防止するための方法、システム及びプログラム製品を提供する。1つ又は複数のプロセッサのグループのローカル・プロセッサが、遠隔プロセッサからプリフェッチ要求を受け取る。1つ又は複数のプロセッサのグループのローカル・プロセッサは、プリフェッチ要求がローカル・プロセッサのトランザクションと競合するかどうかを判断する。1つ又は複数のプロセッサのグループのローカル・プロセッサは、要求されるプリフェッチ・データを提供することにより、i)ローカル・プロセッサがトランザクションを有していないとの判断、及びii)プリフェッチ要求がトランザクションと競合しないとの判断のうちの少なくとも1つに応答する。1つ又は複数のプロセッサのグループのローカル・プロセッサは、プリフェッチ要求の処理を抑止することにより、プリフェッチ要求がトランザクションと競合するとの判断に応答する。
【図面の簡単な説明】
【0011】
図1】例証となる実施形態による、例示的マルチコア・トランザクション・メモリ環境を示す。
図2】例証となる実施形態による、例示的マルチコア・トランザクション・メモリ環境を示す。
図3】例証となる実施形態による、例示的CPUの例示的コンポーネントを示す。
図4】本発明の1つの実施形態による、コンピュータ・システムの一部のブロック図を示す。
図5】本発明の1つの実施形態による、図4に示されるキャッシュ・システムを示す。
図6】本発明の1つの実施形態による、読み取り要求及び読み取り要求への応答の形式を示す。
図7】本発明の1つの実施形態による、プリフェッチ要求の形式を示す。
図8】本発明の1つの実施形態による、パックされた(packed)プリフェッチ要求の形式を示す。
図9】本発明の1つの実施形態による、図5に示されるトランザクション・メモリ・システムの動作についてのフローチャートを示す。
図10】本発明の1つの実施形態による、図5に示されるプリフェッチ・マネージャの動作についてのフローチャートを示す。
図11】本発明の1つの実施形態による、図4及び図5に示されるキャッシュ・システムを組み込むコンピュータ・システムのブロック図を示す。
【発明を実施するための形態】
【0012】
本発明の詳細な実施形態が、添付図面を参照して本明細書に開示される。開示される実施形態は、本発明の潜在的な実施形態の例証にすぎず、種々の形態をとり得ることを理解されたい。さらに、種々の実施形態と関連して与えられる例の各々は、限定することを意図するものではなく、例証することを意図している。さらに、図面は必ずしも縮尺通りではなく、特定のコンポーネントの詳細を示すために、幾つかの特徴が強調される場合がある。従って、本明細書に開示される特定の構造及び機能の詳細は、限定としてではなく、単に本発明を様々に利用するために当業者に教示するための代表的な基礎として解釈されるべきである。
【0013】
本明細書における、「一実施形態」、「1つの実施形態」、「1つの例示的な実施形態」等への言及は、説明される実施形態が、特定の特徴、構造、又は特性を含むことができるが、全ての実施形態が必ずしもその特定の特徴、構造、又は特性を含まないこともあることを示す。さらに、こうした語句は、必ずしも同じ実施形態を指すものではない。さらに、特定の特徴、構造、又は特性が、1つの実施形態と関連して説明されるとき、明示的に説明されても又はされなくても、他の実施形態と関連して、そうした特徴、構造、又は特性に影響を与えることは、当業者の知識の範囲内であることが明らかである。
【0014】
今日のコンピュータにおけるメモリ階層は、多層のキャッシュ、すなわち、単一のプロセッサ専用であり、単一のプロセッサによりアクセス可能な幾つかの層、及び複数のプロセッサによりアクセス可能な他の、より下位かつ大容量の層のキャッシュを含むことが多い。キャッシュは、最近アクセスしたデータ又は最近アクセスしたデータに近いデータに迅速なアクセスを提供することが多い。キャッシュには、所定のプロセッサL1、L2、L3等に対する論理位置の順序でラベルが与えられており、L1キャッシュが論理的にプロセッサに最も近い。この順序付けはまた、プロセッサがデータを読み取ろうと試みるとき、キャッシュにアクセスする順序でもある。データに関して最初にL1にアクセスし、L1内にデータが見つからない場合、L2にアクセスし、以下同様である。小容量の、プロセッサと緊密に統合されたL0キャッシュが用いられることもあり、多くの場合、1サイクル・アクセスを与える。L0キャッシュは、存在する場合、論理的に、L1キャッシュよりもプロセッサに近い。コンピュータ・システム内のキャッシュ・レベルは、主メモリ(多くの場合、大容量の動的RAM)と共に、コンピュータ・システムのメモリ階層を構成する。メモリ階層の文脈において、「下方(below)」という用語は、論理的に、プロセッサからより遠いことを意味する。
【0015】
メモリ階層の効率を高めるために、多くの技術が開発されている。ベンチマーク・プログラムに対するメモリ階層の効率は、通常、ベンチマーク・プログラムの実行中に、その平均アクセス時間により測定される。ストア・キャッシュは、該ストア・キャッシュのものより下方の次のキャッシュ層内のキャッシュのワークロードを低減させることにより、平均アクセス時間を改善する技術である。ストア・キャッシュは、キャッシュラインへのストアをバッファに蓄積し、バッファのコンテンツを、1アクセスでキャッシュの次の層内のキャッシュラインに書き込み、それぞれ別個のストアがストア操作を行った場合に生じたであろう複数のアクセスを排除することによって、これを行う。
【0016】
複数のプロセッサを有する今日のコンピューティング・システムにおいては、プロセッサがマルチスレッドである及び/又は複数の異なるプロセッサ上にある場合、同じプロセッサ上でプログラムの部分を並行して計算することによって性能を向上させ、かつ、実行中、必要に応じて結果を断続的に結合又は比較するための努力がなされている。このことは、同じ及び/又は異なるプロセッサ上の実行の複数のスレッドを同期させ、及び/又は1つの実行スレッドにより生成される結果を他の実行スレッドに見えるようにすることによって、達成されることが多い。同期化は、「アトミック(atomic)」命令及び命令のグループを実行することにより達成されることが多い。アトミック命令は、他の実行スレッド及び他のプロセッサに対して「同時に(一度に、all at once))」実行するように見える、すなわちアトミック命令は、決して、部分的に完了することが観察されることはない。同様に、他のスレッド及びプロセッサに対してその効果を同時に見えるようにすることによって、命令のグループをアトミックにすることができる。複数の実行スレッドは、多くの場合、全ての関与する実行スレッドに知られているメモリ位置に書き込んだ及びそこから読み取った値を介して互いに通信し、同期するので、メモリ操作は、アトミック・バージョンで利用可能であることが多い。例えば、アトミック命令は、メモリ位置を読み取ることができ、メモリ位置が特定の値を含む場合、別の値を元の同じメモリ位置に単一のアトミック操作で書き込む。このアクションは、変数を試験することができる(それを読み取ることによって)他のプロセスを見分ける。
【0017】
プロセッサ上で実行されているアプリケーションの性能を改善できる今日の技術は、性能の改善を行うのに利用可能なリソースがあるときに、幾つかの命令を投機的に(speculatively)実行するというものである。投機的実行とは、将来おそらく起こるであろうが、実際に起こらないかもしれない実行を指す用語である。この投機的実行は、通常、実際の挙動を決定する情報がまだ利用可能でないため、命令ストリーム内に分岐命令が見られ、かつ、以前の挙動に基づいてその挙動が予測されるときに行われる。この情報が利用可能になるのを待つ代わりに、プロセッサは、この分岐が恐らくとるであろう予測経路に基づいて作業を行い、この予測経路上で命令を実行することができる。この予測経路上で実行される命令は、これらの命令が実行の実際の経路上にあること、すなわち分岐が正しく予測されたことが分かるまで、投機的命令である。これらの投機的命令が実行の間違った実際の経路上にある(間違った予測)ことが分かった場合、これらの命令の効果をスカッシュする(squash)、すなわち排除し、アンドゥ(undo)し、他のプロセッサに見えないようにする必要がある。
【0018】
投機的に実行されたが、実行すべきでなかった命令は、多くを要求する設計課題であることがあり、特に、実行すべきでなかった投機的ストア命令に関して、多くを要求する。実行すべきでなかったストアがデータをメモリにストアする場合、ストアが上書きすべきでなかったデータを上書きし、アプリケーション内の同じ又は異なるプロセッサによって、書き込まれたデータが、読み取られ使用されることがある。コンピュータ・アーキテクチャは、投機的ストア命令を実行しないことによって、又は、それらを投機的に実行し、ストア結果を、(性能を低下させる)命令のイン・オーダー時点までストア・バッファ又はストア・キューにストアすることによって、この問題を解決する。代替的な手法は、それが正しい経路上にあることが分かるまで、他の実行スレッドが投機的ストアにより生成されたデータを見ることを防止し、それが正しくない経路上のストアの結果である場合には、データを削除することである。
【0019】
同時マルチスレッディングは、シングル・プロセッサが、複数のアプリケーション(又は同じアプリケーションの複数の部分)を同時に実行するのを可能にする、今日のプロセッサに組み込まれることが多い技術であり、各アプリケーションは、それぞれの実行スレッドを有する。シングル・プロセッサは、各スレッド上の命令を別個に取り出し、プロセッサ内の共有実行ユニット(例えば、加算器、乗算器等)上で命令を実行し、その間、どの命令がどのスレッドに属するかを追跡する。そうしたスレッドがそれらの作業を他のスレッドと同期させる場合、それらのスレッドは、実行がアトミックに行われるアトミック命令又は命令のグループを介して、同期を行うことが多い。
【0020】
従来より、コンピュータ・システム又はプロセッサは、シングル・プロセッサ(別名、処理ユニット又は中央処理ユニット)しか有していなかった。プロセッサは、命令処理ユニット(IPU)、分岐ユニット、メモリ制御ユニット等を含んでいた。こうしたプロセッサは、一度に単一のプログラム・スレッドを実行することができた。一定の期間プロセッサ上で実行されるようにプロセッサをディスパッチし、次に、別の期間プロセッサ上で実行されるように別のプログラムをディスパッチすることによって、プロセッサを時分割する(time-share)ことが可能なオペレーティング・システムが開発された。技術が発展すると、メモリ・サブシステム・キャッシュ、並びに変換ルックアサイド・バッファ(TLB)を含む複雑な動的アドレス変換が、プロセッサに付加されることが多くなった。IPU自体が、多くの場合、プロセッサと呼ばれた。技術が発展し続けると、プロセッサ全体を単一の半導体チップ又はダイとしてパッケージ化できるようになり、こうしたプロセッサは、マイクロプロセッサと呼ばれた。その後、複数のIPUを組み入れたプロセッサが開発され、こうしたプロセッサは、多くの場合、マルチプロセッサと呼ばれた。マルチプロセッサ・コンピュータ・システム(プロセッサ)のこうしたプロセッサの各々は、個々の又は共有のキャッシュ、メモリ・インターフェース、システム・バス、アドレス変換機構等を含むことができる。仮想マシン及び命令セット・アーキテクチャ(instruction set architecture、ISA)エミュレータは、ソフトウェアの層をプロセッサに付加し、シングル・ハードウェア・プロセッサ内にシングルIPUのタイムスライスを使用することにより、複数の「仮想プロセッサ」(別名、プロセッサ)を有する仮想マシンを提供した。技術がさらに発展すると、マルチスレッド・プロセッサが開発され、シングル・マルチスレッドIPUを有するシングル・ハードウェア・プロセッサが異なるプログラムのスレッドを同時に実行する能力を提供することを可能にし、従って、コンピュータ・システムには、マルチスレッド・プロセッサの各スレッドが1つのプロセッサとして見えるようになった。技術がさらに発展すると、単一の半導体チップ又はダイ上に複数のプロセッサ(各々がIPUを有する)をのせることが可能になった。これらのプロセッサは、プロセッサ・コア、又は単にコアと呼ばれた。従って、プロセッサ、中央処理ユニット、処理ユニット、マイクロプロセッサ、コア、プロセッサ・コア、プロセッサ・スレッド及びスレッドなどの用語は、交換可能に使用されることが多い。本明細書における実施形態の態様は、本明細書での教示から逸脱することなく、上に示されるものを含むいずれかの又は全てのプロセッサによって実施することができる。「スレッド」又は「プロセッサ・スレッド」という用語が本明細書で用いられる場合、プロセッサ・スレッドの実装において、実施形態の特定の利点を有することができたと考えられる。
【0021】
Intel(登録商標)ベースの実施形態におけるトランザクション実行
非特許文献1において、第8章は、部分的に、マルチスレッド・アプリケーションが、より高い性能を達成するためにCPUコアの数の増大を利用できることを教示する。しかしながら、マルチスレッド・アプリケーションの書き込みでは、プログラマーが、複数のスレッド間のデータ共有を理解し、考慮に入れる必要がある。共有データへのアクセスは、一般的に、同期機構を必要とする。これらの同期機構を用いて、多くの場合、ロックで保護されたクリティカル・セクション(critical section)を用いて、共有データに適用される動作をシリアル化することにより、複数のスレッドが共有データを更新することを保証する。シリアル化により、並行性(concurrency)が制限されるので、プログラマーは、同期に起因するオーバーヘッドを制限しようと試みる。
【0022】
Intel(登録商標) Transactional Synchronization Extensions(Intel(登録商標)TSX)は、プロセッサが、ロックで保護されたクリティカル・セクションによりスレッドをシリアル化する必要があるかどうかを動的に判断し、必要な場合にのみこのシリアル化を行うことを可能にする。これにより、プロセッサは、動的な不要な同期のためにアプリケーション内に隠れている並行性を顕在化させ利用することができる。
【0023】
Intel TSXでは、プログラマーが指定したコード領域(「トランザクション領域」又は単に「トランザクション」とも呼ばれる)がトランザクション実行される。トランザクション実行が成功裏に完了すると、トランザクション領域内で実施された全てのメモリ操作は、他のプロセッサから見たときに瞬時に起こったように見える。プロセッサは、成功裏にコミットが行われる場合にのみ、即ち、トランザクションが成功裏に実行を完了した場合にのみ、他のプロセッサに見えるトランザクション領域内で実施される、実行されたトランザクションのメモリ操作を行う。このプロセスは、アトミック・コミットと呼ばれることが多い。
【0024】
Intel TSXは、トランザクション実行のためのコード領域を指定するための、2つのソフトウェア・インターフェースを提供する。Hardware Lock Elision(HLE)は、トランザクション領域を指定するための、従来の(legacy)互換命令セット拡張(compatible instruction setextension)(XACQUIRE及びXRELEASEプリフィックスを含む)である。Restricted Transactional Memory(RTM)は、新しい命令セット・インターフェース(XBEGIN、XEND、及びXABORT命令を含む)であり、プログラマーは、HLEで可能なよりも柔軟性の高い手法でトランザクション領域を定義できる。HLEは、従来の相互排他プログラミング・モデルの後方互換性(backward compatibility)を好み、従来のハードウェア上でHLE対応のソフトウェアを実行したいが、HLEサポートを有するハードウェア上で新しいロック無効化機能を利用したいと望むプログラマー向けのものである。RTMは、トランザクション実行ハードウェアよりも柔軟なインターフェースを好むプログラマー向けのものである。さらに、Intel TSXはまた、XTEST命令も提供する。この命令は、論理プロセッサが、HLE又はRTMのいずれかによって識別されたトランザクション領域においてトランザクション実行しているかどうかを、ソフトウェアが照会することを可能にする。
【0025】
成功したトランザクション実行はアトミック・コミットを保証するので、プロセッサは、明示的な同期を行うことなく、コード領域を楽観的に実行する。特定の実行で同期が不要であった場合、いかなるクロススレッドのシリアル化も行うことなく、実行をコミットすることができる。プロセッサがアトミックにコミットできない場合、楽観的実行に失敗する。楽観的実行に失敗すると、プロセッサは実行をロールバックし、プロセスはトランザクション・アボートと呼ばれる。トランザクションがアボートすると、プロセッサは、トランザクションが使用するメモリ領域で実行された全ての更新を廃棄し、あたかも楽観的に実行が行われなかったように見えるようにアーキテクチャ上の状態を復元し、非トランザクションに実行を再開する。
【0026】
プロセッサは、多くの理由によりトランザクションをアボートすることがある。トランザクションをアボートする主たる理由は、トランザクションを実行している論理プロセッサと別の論理プロセッサとの間のメモリ・アクセスの競合によるものである。このようなメモリ・アクセス競合は、トランザクション実行の成功の妨げとなり得る。トランザクション領域内から読み取られたメモリ・アドレスによりトランザクション領域の読み取りセット(read set)が構成され、トランザクション領域内に書き込まれたアドレスによりトランザクション領域の書き込みセット(write set)が構成される。Intel TSXは、キャッシュラインの粒度で読み取りセットと書き込みセットを維持する。別の論理プロセッサがトランザクション領域の書き込みセットの一部の場所で読み取りを行うか又はトランザクション領域の読み取りセット若しくは書き込みセットの一部の場所で書き込みを行う場合、メモリ・アクセス競合が発生する。アクセス競合は、一般的には、そのコード領域に対してシリアル化が必要であることを意味する。Intel TSXは、キャッシュラインの粒度でデータ競合を検出するため、同じキャッシュラインに置かれた無関係なデータ位置は競合として検出され、その結果、トランザクション・アボートがもたらされる。トランザクション・アボートはまた、トランザクション・リソースの制限により発生することもある。例えば、領域内でアクセスされるデータの量が、実装固有の能力を超えた場合である。さらに、一部の命令とシステム・イベントがトランザクション・アボートを引き起こすこともある。頻繁なトランザクション・アボートは無駄なサイクル及び非効率性の増大をもたらす。
【0027】
Hardware Lock Elision
Hardware Lock Elision(HLE)は、プログラマーがトランザクション実行を使用するための従来の互換命令セット・インターフェースである。HLEは、2つの新しい命令プリフィックス・ヒント、即ちXACQUIRE及びXRELEASEを提供する
【0028】
HLEでは、プログラマーは、クリティカル・セクションを保護するロックの取得に使用する命令の前に、XACQUIREプリフィックスを付加する。プロセッサは、ロック取得操作と関連付けられている書き込みを無効化する(elide)ヒントとしてプリフィックスを扱う。ロック取得がロックと関連付けられている書き込み操作を有していても、プロセッサは、トランザクション領域の書き込みセットにロックのアドレスを追加せず、ロックに対するいかなる書き込み要求も発行しない。代わりに、ロックのアドレスが読み取りセットに追加される。論理プロセッサがトランザクション実行に入る。XACQUIREプリフィックス付加された命令の前にロックが利用可能であった場合、命令の後に他の全てのプロセッサはそのロックを利用可能なものとして見なし続ける。トランザクション実行する論理プロセッサは、書き込みセットにロックのアドレスを追加せず、外部に明確な書き込み操作を行わないため、他の論理プロセッサは、データ競合を引き起こすことなくロックを読み取ることができる。これにより、他の論理プロセッサがロックで保護されたクリティカル・セクションに入り、同時実行することが可能になる。プロセッサは、トランザクション実行中に引き起こされるあらゆるデータ競合を自動的に検出し、必要に応じてトランザクション・アボートを実行する。
【0029】
無効化を行うプロセッサがロックに対するいかなる外部書き込み操作も行わないにもかかわらず、ハードウェアは、ロックに対する操作のプログラム順を保証する。無効化を行うプロセッサ自体がクリティカル・セクションにおいてロックの値を読み取ると、プロセッサがロックを取得したように見える、即ち、読み取りにより、非無効化(non-elide)値が戻される。この挙動は、HLE実行が、HLEプリフィックスなしの実行と機能的に等しくなることを可能にする。
【0030】
XRELEASEプリフィックスは、クリティカル・セクションを保護するロックの解放(release)に使用される命令の前に追加することができる。ロックの解放には、ロックに対する書き込みが含まれる。この命令により、ロックの値が、同じロックのXACQUIREプリフィックスでロック取得操作の前にロックが有していた値に戻された場合、プロセッサは、ロックの解放に関連付けられている外部書き込み要求を無視し、書き込みセットにロックのアドレスを追加しない。次に、プロセッサは、トランザクション実行をコミットしようとする。
【0031】
HLEでは、複数のスレッドが同じのロックで保護されたクリティカル・セクションを実行する場合でも、互いのデータに対していかなる競合が発生する操作も行わないのであれば、スレッドをシリアル化することなく同時に実行することができる。ソフトウェアが共通のロックでロック取得操作を使用した場合でも、ハードウェアはこれを認識し、ロックを無効化し、ロックを通じていずれの通信も行うことなく、2つのスレッドでクリティカル・セクションを実行する(こうした通信が動的に不要だった場合)。
【0032】
プロセッサが領域をトランザクション実行できない場合、プロセッサは、その領域を、非トランザクションに且つ無効化を行わずに実行する。HLE対応のソフトウェアは、基礎をなす非HLEのロック・ベースの実行と同じように前方進行を保証する。HLE実行を成功させるためには、ロック及びクリティカル・セクションコードが特定のガイドラインに従わなければならない。これらのガイドラインは性能にのみ影響し、これらのガイドラインに従わなかった場合でも機能的不具合は生じない。HLEサポートを有していないハードウェアは、XACQUIRE及びXRELEASEプリフィックス・ヒントを無視するが、これらのプリフィックスはXACQUIRE及びXRELEASEが有効な場合に命令で無視されるREPNE/REPE IA−32プリフィックスに対応しているので、いかなる無効化も行わない。重要なことに、HLEは既存のロック・ベースのプログラミング・モデルと互換性がある。ヒントを不適切に使用しても機能的なバグは起こらないが。コードに既に含まれている潜在的なバグが暴露する可能性がある。
【0033】
Restricted Transactional Memory(RTM)は、トランザクション実行用の柔軟なソフトウェア・インターフェースを提供する。RTMは、プログラマーがトランザクション実行を開始、コミット、アボートする3つの新しい命令(XBEGIN、XEND、及びXABORT)を提供する。
【0034】
プログラマーは、XBEGIN命令を使用してトランザクション・コード領域の開始を指定し、XEND命令を使用してトランザクション・コード領域の終了を指定する。XBEGIN命令は、RTM領域がトランザクション実行に成功しなかった場合、相対的なオフセットをフォールバック命令アドレスに与えるオペランドを利用する。
【0035】
プロセッサは、多くの理由によりRTMトランザクション実行をアボートすることがある。ハードウェアは、トランザクション・アボート条件を自動的に検出して、XBEGIN命令の開始、及びアボート・ステータスを説明するために更新されたEAXレジスタに対応するアーキテクチャ状態で、フォールバック命令アドレスから実行を再開する。
【0036】
XABORT命令は、プログラマーが、RTM領域の実行を明示的にアボートすることを可能にする。XABORT命令には、RTMアボートの後にソフトウェアで利用可能になる、EAXレジスタにロードされる8ビットの即時引数を利用する。RTM命令は、いずれのデータ・メモリ位置とも関連付けられない。ハードウェアは、RTM領域がこれまでトランザクション・コミットに成功したかどうかに関して保証しないが、推奨されるガイドラインに従う大部分のトランザクションは、トランザクション・コミットに成功すると予想される。しかしながら、プログラマーは、前方進行を保証するため、フォールバック経路に代替コード・シーケンスを常に提供しなければならない。これは、ロックを取得して指定されたコード領域を非トランザクションに実行するのと同じくらい簡単であり得る。さらに、所与の実装では常にアボートされるトランザクションが、将来の実装ではトランザクションに完了する可能性がある。従って、プログラマーは、トランザクション領域と代替コード・シーケンスのコード経路が機能的にテストされることを保証しなければならない。
【0037】
HLEサポートの検出
プロセッサは、CPUID.07H.EBX.HLE[bit4]=1の場合に、HLE実行をサポートする。しかしながら、アプリケーションは、プロセッサがHLEをサポートするかどうかをチェックすることなく、HLEプリフィックス(XACQUIRE及びXRELEASE)を使用することができる。HLEサポートを有していないプロセッサは、これらのプリフィックスを無視し、トランザクション実行に入ることなく、コードを実行する。
【0038】
RTMサポートの検出
プロセッサは、CPUID.07H.EBX.RTM[bit11]=1の場合に、RTM実行をサポートする。アプリケーションは、RTM命令(XBEGIN、XEND、XABORT)を使用する前に、プロセッサがRTMをサポートしているかどうかをチェックする必要がある。これらの命令は、RTMをサポートしていないプロセッサで使用されると、#UD例外が発生する。
【0039】
XTEST命令の検出
プロセッサが、HLE又はRTMのいずれかをサポートしている場合、XTEST命令をサポートする。アプリケーションは、XTEST命令を使用する前に、これらの特徴フラグのどちらかをチェックする必要がある。この命令は、HLE又はRTMのいずれもサポートしていないプロセッサで使用されると、#UD例外が発生する。
【0040】
トランザクション実行状態を照会する
XTEST命令は、HLE又はRTMによって指定されたトランザクション領域のトランザクション状態を判断するために使用することができる。HLEプリフィックスは、HLEをサポートしていないプロセッサ上で無視されるが、XTEST命令は、HLE又はRTMのいずれもサポートしていないプロセッサ上で使用されると、#UD例外が発生することに留意されたい。
【0041】
HLEロックの要件
HLE実行がトランザクション・コミットに成功するために、ロックが特定の特性を満たし、ロックへのアクセスが次の特定のガイドラインに従っていなければならない。
【0042】
XRELEASEプリフィックスの付いた(prefixed)命令は、無効化されたロックの値を、ロック取得の前に有していた値に復元する必要がある。これにより、ハードウェアは、書き込みセットに追加することなく、安全にロックを無効化することができる。ロック解放(XRELEASEプリフィックスが付加された)命令のデータ・サイズ及びデータ・アドレスは、ロック取得(XACQUIREプリフィックスの付いた)命令のものと一致していなければならず、ロックはキャッシュライン境界をまたぐことはできない。
【0043】
ソフトウェアは、XRELEASEプリフィックス命令以外のいかなる命令によってもトランザクションHLE領域内の無効化されたロックに書き込みを行うべきではなく、さもなければ、こうした書き込みがトランザクション・アボートを引き起こすことがある。さらに、再帰ロック(recursive lock)(スレッドが、最初にロックを解放することなく、同じロックを複数回取得する場合)もトランザクション・アボートを引き起こすことがある。ソフトウェアは、クリティカル・セクション内で取得された無効化されたロックの結果を観察できることに留意されたい。こうした読み取り操作は、書き込みの値をロックに戻す。
【0044】
プロセッサは、これらのガイドラインの違反を自動的に検出し、無効化を行うことなく、安全に非トランザクション実行に遷移する。Intel TSXは、キャッシュラインの粒度で競合を検出するので、無効化されたロックと同じキャッシュライン上に配置されたデータへの書き込みは、同じロックを無効化する他の論理プロセッサによってデータ競合として検出される可能性がある。
【0045】
トランザクション・ネスト化
HLE及びRTMの両方とも、ネスト化された(nested)トランザクション領域をサポートする。しかしながら、トランザクション・アボートは、状態を、トランザクション実行を開始した操作に、即ち、最外(outermost)XACQUIREプリフィックスの付いたHLE適格(HLE-eligible)命令、又は最外XBEGIN命令のいずれかに復元する。プロセッサは、全てのネスト化トランザクションを1つのトランザクションとして扱う。
【0046】
HLEのネスト化及び無効化
プログラマーは、HLE領域を、MAX_HLE_NEST_COUNTの実装指定深さまでネスト化することができる。各論理プロセッサは、ネスト化カウントを内部で追跡するが、このカウントはソフトウェアに利用可能でない。XACQUIREプリフィックスの付いたHLE適格命令はネスト化カウントをインクリメントし、XRELEASEプリフィックスの付いたHLE適格命令はこれをデクリメントする。論理プロセッサは、ネスト化カウントがゼロから1になったとき、トランザクション実行に入る。論理プロセッサは、ネスト化カウントがゼロになったときにのみ、コミットしようと試みる。ネスト化カウントがMAX_HLE_NEST_COUNTを上回った場合には、トランザクション・アボートが発生することがある。
【0047】
ネスト化されたHLE領域をサポートすることに加えて、プロセッサはまた、複数のネスト化されたロックを無効化することもできる。プロセッサは、無効化に関してロックを追跡し、そのロックに対するXACQUIREプリフィックスの付いたHLE適格命令から開始し、その同じロックに対するXRELEASEプリフィックスの付いたHLE適格命令で終了する。プロセッサは、常に、ロックのMAX_HLE_ELIDED_LOCKS数まで追跡することができる。例えば、実装が2のMAX_HLE_ELIDED_LOCKS値をサポートし、プログラマーが3つのHLE識別クリティカル・セクションをネスト化する場合(ロックのどれに対しても介在するXRELEASEプリフィックスの付いたHLE適格命令を実行することなく、3つの個別ロックに対して介在するXACQUIREプリフィックスの付いたHLE適格命令を実行することによって)、最初の2つのロックは無効化されるが、第3のロックは無効化されない(しかし、トランザクションの書き込みセットに追加される)。しかしながら、実行は依然としてトランザクションに続行する。2つの無効化されたロックの1つに対してXRELEASEに遭遇すると、XACQUIREプリフィックスの付いたHLE適格命令を介して取得された後続のロックが無効化される。
【0048】
プロセッサは、全ての無効化されたXACQUIRE及びXRELEASEのペアが一致し、ネスト化カウントがゼロになり、ロックが要件を満たした場合に、HLE実行をコミットしようと試みる。実行がアトミックにコミットできない場合、実行は、あたかも最初の命令がXACQUIREプリフィックスを有していなかったかのように、無効化を行わない非トランザクション実行に遷移する。
【0049】
RTMのネスト化
プログラマーは、RTM領域を、実装指定のMAX_RTM_NEST_COUNTまでネスト化することができる。論理プロセッサは、ネスト化カウントを内部で追跡するが、このカウントはソフトウェアに利用可能でない。XBEGIN命令はネスト化カウントをインクリメントし、XEND命令はネスト化カウントをデクリメントする。論理プロセッサは、ネスト化カウントがゼロになった場合にのみ、コミットを試みる。ネスト化カウントがMAX_RTM_NEST_COUNTを上回った場合には、トランザクション・アボートが発生する。
【0050】
HLE及びRTMのネスト化
HLE及びRTMは、2つの代替的なソフトウェア・インターフェースを一般的なトランザクション実行機能に提供する。トランザクション処理の挙動は、例えばHLEがRTMの内部にある又はRTMがHLEの内部にあるなど、HLE及びRTMが互いにネスト化された場合、実装固有のものである。しかしながら、全ての場合において、実装は、HLE及びRTMのセマンティクスを維持する。ある実装は、RTM領域内で使用されるとき、HLEヒントを無視するように選択することができ、RTM命令がHLE領域内で使用されるとき、トランザクション・アボートを発生させることがある。後者の場合、プロセッサは実際に無効化を行わずにHLE領域を再実行し、次にRTM命令を実行するので、トランザクション実行から非トランザクション実行への遷移はシームレスに行われる。
【0051】
アボート・ステータスの定義
RTMは、EAXレジスタを使用して、アボート・ステータスをソフトウェアに伝える。RTMアボートの後、EAXレジスタは、以下の定義を有する。
【表1】
【0052】
RTMに関するEAXアボート・ステータスは、アボートの原因のみを提供する。これ自体が、RTM領域に関してアボートが発生したか又はコミットが発生したかをコード化するものではない。EAXの値は、RTMアボートの後に、0になることがある。例えば、RTM領域の内部でCPUID命令を使用すると、トランザクション・アボートを引き起こすが、EAXビットのいずれかを設定する要件を満たさない場合がある。これにより、EAXの値が0になる場合がある。
【0053】
RTMメモリの順序付け
RTMがコミットに成功すると、RTM領域内の全てのメモリ操作はアトミックに実行されるように見える。RTM領域内でメモリ操作が行われない場合でも、XBEGINの後にXENDが続き、コミットに成功したRTM領域は、LOCKプリフィックス命令と同じ順序付けセマンティクスを有する。
【0054】
XBEGIN命令には、フェンス・セマンティクスがない。しかしながら、RTM実行がアボートした場合、RTM領域内部から全てのメモリ更新が廃棄され、あらゆる他の論理プロセッサから見えなくなる。
【0055】
RTM対応デバッガのサポート
デフォルトでは、RTM領域内部のあらゆるデバッグ例外がトランザクション・アボートを引き起こし、アーキテクチャ状態が復旧し、ビット4がEAX内に設定された状態で、制御フローをフォールバック命令アドレスにリダイレクトする。しかしながら、ソフトウェア・デバッガが、デバッグ例外時に実行をインターセプトするのを可能にするために、RTMアーキテクチャは付加的な機能を提供する。
【0056】
DR7のビット11及びIA32_DEBUGCTL_MSRのビット15が両方とも1である場合、デバッグ例外(#DB)又はブレークポイント例外(#BP)に起因するいずれかのRTMアボートにより、実行がロールバックし、フォールバック・アドレスの代わりにXBEGIN命令から再開する。このシナリオでは、EAXレジスタもまた、XBEGIN命令の時点に復元される。
【0057】
プログラミング上の考慮事項
一般的に、通常プログラマーが指定した領域は、トランザクション実行及びコミットに成功することが想定される。しかしながら、Intel(登録商標)TSXでは、そうした保証はない。トランザクション実行は、様々な理由によりアボートされることがある。トランザクション機能を最大限に利用するために、プログラマーは、特定のガイドラインに従い、トランザクション実行のコミットが成功する可能性を高める必要がある。
【0058】
このセクションでは、トランザクション・アボートを引き起こし得る様々なイベントについて論じる。アーキテクチャは、後で実行をアボートするトランザクション内で行われた更新は決して見えるようにならないことを保証する。コミットされたトランザクション実行のみが、アーキテクチャ状態の更新を開始する。トランザクション・アボートは、決して機能的不具合を引き起こすことはなく、性能にのみに影響を与える。
【0059】
命令ベースの考慮事項
プログラマーは、トランザクション(HLE又はRTM)の内部であらゆる命令を安全に使用することができ、あらゆる特権レベルでトランザクションを使用することができる。しかしながら、一部の命令は常にトランザクション実行をアボートさせ、実行は非トランザクション経路にシームレスかつ安全に遷移される。
【0060】
Intel TSXでは、殆どの一般的な命令を、アボートを引き起こさずに、トランザクション内部で使用することができる。通常、以下の操作により、トランザクションでアボートが引き起こされることはない。
・命令ポインタ・レジスタ、汎用レジスタ(GPR)及びステータス・ラグ(CF、OF、SF、PF、AF、及びZF)に対する操作、及び、
・XMMレジスタ及びYMMレジスタ、並びにMXCSRレジスタに対する操作。
【0061】
しかしながら、プログラマーは、トランザクション領域内でSSE操作及びAVX操作を混在させる際に注意深くなければならない。XMMレジスタにアクセスするSSE命令と、YMMレジスタにアクセスするAVX命令との混在により、トランザクションがアボートする可能性がある。プログラマーは、トランザクション内でREP/REPNEプリフィックスの付いた文字列操作を使用することができる。しかしながら、長い文字列はアボートを引き起こすことがある。さらに、CLD及びSTD命令の使用は、これらがDFフラグの値を変えた場合に、アボートを引き起こすことがある。しかしながら、DFが1である場合、STD命令はアボートを引き起こさない。同様に、DFが0である場合、CLD命令はアボートを引き起こさない。
【0062】
トランザクション内部で使用されたときにアボートを引き起こすものとしてここで列挙されていない命令によりトランザクションがアボートされることは通常ない(例として、これらに限定されるものではないが、MFENCE、LFENCE、SFENCE、RDTSC、RDTSCP等が挙げられる)。
【0063】
以下の命令は、あらゆる実装でトランザクション実行をアボートする。
・XABORT
・CPUID
・PAUSE
【0064】
さらに、一部の実装では、以下の命令は常にトランザクション・アボートを引き起こし得る。これらの命令は通常、トランザクション領域の内部で使用されることは想定されていない。しかしながら、これらの命令がトランザクション・アボートを引き起こすかどうかは実装に依存するため、プログラマーは、これらの命令に依存してトランザクション・アボートを強制すべきではない。
・X87及びMMX(商標)のアーキテクチャ状態に対する操作。これには、FXRSTOR及びFXSAVE命令を含む、全てのMMX及びX87命令が含まれる。
・EFLAGの非ステータス部分の更新:CLI、STI、POPFD、POPFQ、CLTS。
・セグメント・レジスタ、デバッグ・レジスタ、及び/又は制御レジスタを更新する命令:DS/ES/FS/GS/SSに対するMOV、POP DS/ES/FS/GS/SS、LDS、LES、LFS、LGS、LSS、SWAPGS、WRFSBASE、WRGSBASE、LGDT、SGDT、LIDT、SIDT、LLDT、SLDT、LTR、STR、Far CALL、Far JMP、Far RET、IRET、DRxに対するMOV、CR0/CR2/CR3/CR4/CR8に対するMOV、及びLMSW。
・リング遷移:SYSENTER、SYSCALL、SYSEXIT、及びSYSRET。
・TLB及びキャッシュ可能な制御:CLFLUSH、INVD、WBINVD、INVLPG、INVPCID、及び非一時的ヒントを有するメモリ命令(MOVNTDQA、MOVNTDQ、MOVNTI、MOVNTPD、MOVNTPS、及びMOVNTQ)。
・プロセッサ状態の保存:XSAVE、XSAVEOPT、及びXRSTOR。
・割り込み:INTn、INTO。
・IO:IN、INS、REP INS、OUT、OUTS、REP OUTS、及びその変形。
・VMX:VMPTRLD、VMPTRST、VMCLEAR、VMREAD、VMWRITE、VMCALL、VMLAUNCH、VMRESUME、VMXOFF、VMXON、INVEPT、及びINVVPID。
・SMX:GETSEC。
・UD2、RSM、RDMSR、WRMSR、HLT、MONITOR、MWAIT、XSETBV、VZEROUPPER、MASKMOVQ、及びV/MASKMOVDQU。
【0065】
ランタイムの考慮事項
命令ベースの考慮事項に加えて、ランタイム・イベントによりトランザクション実行がアボートされる場合がある。これは、データ・アクセス・パターン又はマイクロ・アーキテクチャの実装機能に起因し得る。以下のリストは、全てのアボートの原因を包括的に説明したものではない。
【0066】
ソフトウェアに対して暴露しなければならないトランザクションのフォルト又はトラップは抑止される。トランザクション実行がアボートすると、フォルト又はトラップが発生しなかったように、実行は非トランザクション実行に遷移する。例外がマスクされない場合、そのマスクされない例外はトランザクション・アボートを引き起こし、状態は、例外が発生しなかったように見える。
【0067】
トランザクション実行中に同期例外イベント(#DE、#OF、#NP、#SS、#GP、#BR、#UD、#AC、#XF、#PF、#NM、#TS、#MF、#DB、#BP/INT3)が発生すると、トランザクション実行はコミットされず、非トランザクション実行が必要となる場合がある。これらのイベントは、発生しなかったかのように抑止される。HLEでは、非トランザクション・コード経路はトランザクション・コード経路と同一であるため、例外を引き起こした命令が非トランザクションに再実行されると、これらのイベントは再度現れ、非トランザクション実行で関連する同期イベントが適切に配信される。トランザクション実行中に非同期イベント(NMI、SMI、INTR、IPI、PMI等)が発生すると、トランザクション実行はアボートされ、非トランザクション実行に遷移し得る。非同期イベントは保留され、トランザクション・アボートが処理された後に処理される。
【0068】
トランザクションは、ライトバック・キャッシュが可能なメモリ・タイプの操作のみをサポートする。トランザクションがいずれかの他のメモリ・タイプの操作を含む場合、トランザクションは常にアボートし得る。これには、UCメモリ・タイプにフェッチする命令が含まれる。
【0069】
トランザクション領域内のメモリ・アクセスには、プロセッサが参照するページ・テーブル・エントリのアクセス(Accessed)フラグ及びダーティ(Dirty)フラグを設定しなければならないことがある。プロセッサがこの制御をどのように行うかの挙動は、実装固有である。一部の実装では、トランザクション領域が続いてアボートされた場合でも、これらのフラグに対する更新を外部から見えるようにすることが可能である。一部のIntel(登録商標)TSXの実装では、これらのフラグを更新する必要がある場合、トランザクション実行のアボートを選択することがある。さらに、プロセッサのページ・テーブル・ウォークが、それ自体に書き込まれるが、コミットされていない状態へのアクセスをもたらす場合がある。一部のIntel(登録商標)TSXの実装では、このような状況でトランザクション領域の実行のアボートを選択することがある。それにも関わらず、アーキテクチャは、トランザクション領域がアボートした場合、トランザクションに書き込まれた状態が、アーキテクチャ上、TLBのような構造の挙動により目に入らないようにすることを保証する。
【0070】
自己修正(self-modifying)コードのトランザクション実行がトランザクション・アボートを引き起こすこともある。プログラマーは、HLE及びRTMを使用する場合でも、自己修正コード及びクロス修正コードの記述に際してIntelが推奨するガイドラインに引き続き従う必要がある。RTM及びHLEの実装では通常、共通のトランザクション領域を実行するための十分なリソースが提供されるが、トランザクション領域の実装を制約し、サイズを必要以上に大きくすると、トランザクション実行がアボートされ、非トランザクション実行に遷移することがある。アーキテクチャは、トランザクション実行で利用可能なリソース量を保証せず、また、トランザクション実行が常に成功することを保証しない。
【0071】
トランザクション領域内にアクセスするキャッシュラインに対して競合する要求を行うと、トランザクション実行の成功の妨げとなることがある。例えば、論理プロセッサP0がトランザクション領域内のラインAを読み取り、別の論理プロセッサP1がラインA(トランザクション領域の内部又は外部のいずれか)に書き込み、論理プロセッサP1の書き込みがプロセッサP0のトランザクション実行能力を妨げる場合には、論理プロセッサP0はアボートし得る。
【0072】
同様に、P0がトランザクション領域内のラインAに書き込み、P1がラインA(トランザクション領域の内部又は外部のいずれか)を読み取る又は書き込む場合にも、P1のラインAへのアクセスがP0のトランザクション実行能力を妨げる場合には、P0はアボートし得る。さらに、他のコヒーレンス・トラフィックが競合する要求として見え、アボートを引き起こすことがある。これら偽の競合(false conflict)が発生することはあるが、一般的ではないと考えられる。上記のシナリオにおいて、P0がアボートするか又はP1がアボートするかを決定するための競合解消ポリシーは、実装固有である。
【0073】
一般的なトランザクション実行の実施形態:
非特許文献2によれば、基本的に、アトミックな及び分離された(isolated)トランザクション領域を実装するのに必要な3つの機構:即ち、バージョニング(versioning)、競合検出、及びコンテンション管理(contentionmanagement)が存在する。
【0074】
トランザクション・コード領域がアトミックに見えるようにするために、そのトランザクション・コード領域により行われた全ての修正を、コミット時まで格納し、他のトランザクションから分離する必要がある。本システムは、バージョニング・ポリシーの実装によってこれを行う。2つのバージョニング・パラダイム:即ち、eager及びlazyが存在する。eagerバージョニング・システムは、新しく生成されたトランザクション値をイン・プレースに(in place)格納し、以前のメモリ値は、undo(取り消し)ログと呼ばれるものの中に別に格納する。lazyバージョニング・システムは、新しい値を、書き込みバッファと呼ばれるものの中に一時的に格納し、コミット時にのみこれらをメモリにコピーする。どちらのシステムにおいても、新しいバージョンの格納の最適化のために、キャッシュが使用される。
【0075】
トランザクションがアトミックに実行されるように見えることを保証するために、競合を検出し、解決する必要がある。2つのシステム、即ちeager及びlazyバージョニング・システムは、楽観的(optimistic)又は悲観的(pessimistic)のいずれかの競合検出ポリシーを実装することにより、競合を検出する。楽観的システムは、トランザクションを並行して実行し、トランザクションのコミット時にのみ競合をチェックする。悲観的システムは、ロード及びストアごとに競合をチェックする。バージョニングと同様に、競合検出もまたキャッシュを使用し、各ラインを読み取りセットの一部、書き込みセットの一部、又はその両方としてマーク付けする。2つのシステムは、コンテンション管理ポリシーを実装することにより、競合を解決する。多数のコンテンション管理ポリシーが存在し、一部は楽観的競合検出により適し、一部は悲観的競合検出により適している。幾つかの例示的なポリシーを以下に説明する。
【0076】
各トランザクション・メモリ(TM)システムは、バージョニング検出と競合検出の両方を必要とするので、これらの選択肢は4つの個別のTM設計:Eager−悲観的(Pessimistic)(EP)、Eager−楽観的(Optimistic)(EO)、Lazy−悲観的(LP)、及びLazy−楽観的(LO)を生み出す。表2は、4つの個別のTM設計の全てを簡単に説明する。
【0077】
図1及び図2は、マルチコアTM環境の一例を示す。図1は、相互接続制御120a、120bの管理下で、相互接続122と接続された、1つのダイ100上の多数のTM対応CPU(CPU1 114a、CPU2 114b等)を示す。各々のCPU114a、114b(プロセッサとしても知られる)は、実行されるメモリからの命令をキャッシュするための命令キャッシュ116a、116bと、CPU114a、114b(図1では、各々のCPU114a、114b及びその関連したキャッシュは、112a、112bとして参照される)によって動作されるメモリ位置のデータ(オペランド)をキャッシュするためのTMサポートを有するデータ・キャッシュ118a、118bとから成る分割キャッシュ(split cache)を有することができる。1つの実装において、複数のダイ100のキャッシュが相互接続され、複数のダイ100のキャッシュ間のキャッシュ・コヒーレンシをサポートする。1つの実装においては、分割キャッシュではなく単一のキャッシュが使用され、命令及びデータの両方を保持する。1つの実装においては、CPUキャッシュは、階層キャッシュ構造におけるキャッシュ・レベル1である。例えば、各ダイ100は、共有キャッシュ124を、ダイ100上の全てのCPUの間で共有されるように使用することができる。別の実装においては、各ダイは、全てのダイ100の全てのプロセッサの間で共有される共有キャッシュ124へのアクセスを有することができる。
【0078】
図2は、TMをサポートするための追加を含む、CPU114を有する例示的なトランザクションCPU環境112の詳細を示す。トランザクションCPU(プロセッサ)114は、レジスタ・チェックポイント126及び特殊TMレジスタ128をサポートするためのハードウェアを含むことができる。トランザクションCPUキャッシュは、従来のキャッシュのMESIビット130、タグ140及びデータ142を含むことができるが、同様に、例えば、トランザクション実行中にCPU114によりラインが読み取られたことを示すRビット132と、トランザクション実行中にCPU114によりラインに書き込まれたことを示すWビット138とを含むことができる。
【0079】
いずれのTMシステムにおいても、プログラマーにとって重要な詳細は、非トランザクション・アクセスがどのようにトランザクションと対話するかである。意図的に、トランザクション・アクセスは、上記の機構を用いて互いから遮蔽される。しかしながら、通常の非トランザクション・ロードと、そのアドレスについての新しい値を含むトランザクションとの間の対話を依然として考慮する必要がある。さらに、非トランザクション・ストアとそのアドレスを読み取ったトランザクションとの間の対話も検討する必要がある。これらは、データベースの概念分離の問題である。
【0080】
あらゆる非トランザクション・ロード及びストアがアトミック・トランザクションのように動作する場合、TMシステムは、強い分離性(strong isolation)(強いアトミック性(strong atomicity)と呼ばれることもある)を実装すると言われる。従って、非トランザクション・ロードは、コミットされないデータを見ることができず、非トランザクション・ストアは、そのアドレスを読み取ったいずれのトランザクションにおいても、アトミック性違反を引き起こす。これが当てはまらないシステムは、弱いアトミック性(weak atomicity)と呼ばれることもある、弱い分離性(weakisolation)を実装すると言われる。
【0081】
強い分離性の概念化及び実装が相対的に容易であるため、強い分離性は、弱い分離性よりも望ましいことが多い。さらに、プログラマーが何らかの共有メモリ参照をトランザクションで囲うことを忘れた場合、バグが生じ、強い分離性では、プログラマーはアトミック性違反を引き起こす非トランザクション領域を見るので、プログラマーは、単一のデバッグ・インターフェースを用いて見落としを検出することが多い。また、1つのモデルにおいて書かれたプログラムは、別のモデル上では異なるように動作する場合がある。さらに、強い分離性は、弱い分離性よりもハードウェアTMにおいてサポートが容易であることが多い。強い分離性では、コヒーレンス・プロトコルが既にプロセッサ間のロード及びストア通信を管理しているので、トランザクションは、非トランザクション・ロード及びストアを検出し、適切に動作することができる。ソフトウェア・トランザクション・メモリ(TM)において強い分離性を実装するためには、非トランザクション・コードを、読み取りバリア(read barrier)及び書き込みバリア(write barrier)を含むように修正する必要があり、性能を損なう可能性がある。多くの不要なバリアを取り除くために多大な努力が費やされてきたが、こうした技術は複雑であることが多く、性能は、通常、HTMのものに比べてはるかに低い。
【表2】
【0082】
表2は、トランザクション・メモリの基本的な設計空間を示す(バーショニング及び競合検出)。
【0083】
Eager−悲観的(EP)
後述するこの最初のTM設計は、Eager−悲観的として知られる。EPシステムは、その書き込みセットを「イン・プレースに」格納し(従って、「eager」の名がある)、かつ、ロールバックをサポートするために、上書きされたラインの古い値を「undoログ」に格納する。プロセッサは、Wキャッシュ・ビット138及びRキャッシュ・ビット132を用いて、読み取り及び書き込みセットを追跡し、スヌープした(snooped)ロード要求を受信したときに競合を検出する。恐らく、既知の文献におけるEPシステムの最も顕著な例は、LogTM及びUTMである。
【0084】
EPシステムにおけるトランザクションの開始は、他のシステムにおけるトランザクションの開始とよく似ている:tm_begin()がレジスタ・チェックポイントを取り、あらゆるステータス・レジスタを初期化する。EPシステムはまたundoログの初期化も必要とし、この詳細はログ・フォーマットに依存するが、多くの場合、予め割り当てられたスレッド・プライベート・メモリの領域へのログ・ベース・ポインタを初期化すること、及びログ境界レジスタをクリアすることを含む。
【0085】
バージョニング:EPにおいては、eagerバージョニングが機能するように設計される方法に起因して、MESIビット130の状態遷移(Modified(修正)、Exclusive(排他)、Shared(共有)、及びInvalid(無効)のコード状態に対応するキャッシュライン・インジケータ)は、殆ど変更されないままである。トランザクションの外部では、MESIビット130の状態遷移は、全く変更されないままである。トランザクション内部のラインを読み取るとき、標準的コヒーレンス遷移が適用され(S(Shared)→S、I(Invalid)→S、又はI→E(Exclusive))、必要に応じてロード・ミスを発行するが、R132ビットも設定される。同様に、ラインの書き込みに、標準的遷移が適用され(S→M、E→I、I→M)、必要に応じてミスを発行するが、加えてW138(Write、書き込み)ビットも設定する。現トランザクションがアボートした場合には、ラインが初めて書き込まれる際、ライン全体の古いバージョンをロードし、次に、undoログに書き込んで保存する。次に、新しく書き込まれたデータが、古いデータの上に「イン・プレースに」格納される。
【0086】
競合検出:悲観的競合検出は、ミス、又はアップグレード時に交換されるコヒーレンス・メッセージを用いて、トランザクション間の競合を探す。トランザクション内で読み取りミスが発生すると、他のプロセッサはロード要求を受信するが、それらが必要とされるラインを有していない場合には、この要求を無視する。他のプロセッサが、必要とされるラインを非投機的に有する又はラインR132(Read、読み取り)を有する場合、このラインをSにダウングレードし、ある場合には、それらがMESIのビット130M又はE状態でラインを有する場合、キャッシュ間転送(cash-to-cash transfer)を発行する。しかしながら、キャッシュがラインW138を有する場合には、2つのトランザクション間に競合が検出され、追加のアクションを取らなければならない。
【0087】
同様に、(最初の書き込み時に)トランザクションがラインをsharedからmodifiedにアップグレードしようとした際、トランザクションは、競合の検出にも使用される排他的ロード要求を発行する。受信しているキャッシュがラインを非投機的に有する場合、次に、そのラインは無効にされ、特定の場合には、キャッシュ間転送(M又はE状態)が発行される。しかしながら、このラインがR132又はW138である場合には、競合が検出される。
【0088】
妥当性検査:競合検出はあらゆるロードで実施されるので、トランザクションは常に、それぞれの書き込みセットに対する排他的アクセスを有する。従って、妥当性検査は、いずれの付加的な作業も必要としない。
【0089】
コミット:eagerバージョニングはデータ項目の新たなバージョンをイン・プレースに格納するので、コミット・プロセスは、単にWビット138及びRビット132をクリアし、undoログを廃棄する。
【0090】
アボート:トランザクションがロールバックすると、undoログ内の各キャッシュラインのオリジナルのバージョンを復元しなければならず、プロセスは、ログの「アンロール(unrolling)」又は「適用」と呼ばれる。これは、tm_discard()の間に行われ、他のトランザクションに関してアトミックでなければならない。具体的には、競合を検出するために、書き込みセットを依然として使用しなければならない:このトランザクションは、そのundoログ内にラインの正しいバージョンのみを有し、要求中のトランザクションは、そのログから正しいバージョンを復元するのを待たなくてはならない。こうしたログは、ハードウェア状態マシン又はソフトウェア・アボート・ハンドラを用いて適用することができる。
【0091】
Eager−悲観的は、以下の特徴を有する:コミットは単純であり、イン・プレースにあるため非常に高速である。同様に、妥当性検査はノー・オペレーション(no−op)である。悲観的競合検出は、競合を早期に検出し、それにより、「失敗させられた(doomed)」トランザクションの数が減少する。例えば、2つのトランザクションが、Write−After−Read依存関係に関与する場合、その依存関係は、悲観的競合検出において瞬時に検出される。しかしながら、楽観的競合検出においては、ライタ(writer)がコミットするまで、そうした競合は検出されない。
【0092】
Eager−悲観的はまた、以下の特徴も有する:上述したように、初めてキャッシュラインに書き込まれる際、古い値をログに書き込む必要があり、余分なキャッシュ・アクセスを招く。アボートはログの取り消し(undo)を必要とするため、費用がかかる。ロードは、ログ内のキャッシュラインごとに発行しなければならず、恐らく、次のラインに進む前にメインメモリまで前進する。悲観的競合検出はまた、特定のシリアル化可能なスケジュールの存在を防止する。
【0093】
さらに、競合は、それらが発生した時に処理されるので、ライブロック(livelock)の可能性があり、前方進行を保証するために、慎重なコンテンション管理機構を利用しなければならない。
【0094】
Lazy−楽観的(LO)
別の一般的なTM設計は、Lazy−楽観的(LO)であり、これは、その書き込みセットを「書き込みバッファ」又は「redoログ」に格納し、コミット時に競合を検出する(依然として、R132及びW138ビットを使用する)。
【0095】
バージョニング:EPシステムと同様に、LO設計のMESIプロトコルが、トランザクションの外側で実施される。トランザクションの内部に入ると、ラインの読み取りは標準的MESI遷移を招くが、同様にR132ビットも設定する。同様に、ラインの書き込みは、ラインのW138ビットを設定するが、LO設計のMESI遷移の処理は、EP設計のものとは異なる。第1に、lazyバージョニングにおいては、書き込まれたデータの新しいバージョンは、コミットまでキャッシュ階層に格納されるが、他のトランザクションは、メモリ又は他のキャッシュにおいて利用可能な古いバージョンにアクセスすることができる。古いバージョンを利用可能にするために、トランザクションによる最初の書き込み時に、ダーティ・ライン(Mライン)を無効化しなければならない。第2に、楽観的競合検出の特徴のため、アップグレード・ミスは必要とされない:競合検出はコミット時に行われるので、トランザクションがS状態のラインを有する場合、トランザクションは単にラインに書き込み、変更を他のトランザクションと通信することなく、そのラインをM状態にアップグレードするだけでよい。
【0096】
競合検出及び妥当性検査:トランザクションを検証し、競合を検出するために、LOは、コミットの準備をしているときのみ、投機的に修正されたラインのアドレスを他のトランザクションに通信する。妥当性検査において、プロセッサは、書き込みセット内の全てのアドレスを含む、1つの、恐らくは大容量の、ネットワーク・パケットを送信する。データは送信されないが、コミッタ(committer)のキャッシュ内に残され、ダーティ(M)とマーク付けされる。Wとマーク付けされたラインを求めてキャッシュを検索することなくこのパケットを構築するために、これらの投機的に修正されたラインを追跡するために、キャッシュラインごとに1ビットを有する、「ストア・バッファ」と呼ばれる簡潔ビットベクトル(simple bit vector)を使用する。他のトランザクションは、このアドレス・パケットを使用して競合を検出する:アドレスがキャッシュ内に見つかり、Rビット132及び/又はWビット138が設定された場合、競合が開始される。ラインは見つかったが、R132もW138も設定されない場合には、ラインは単に無効にされ、これは排他的ロードの処理に類似している。
【0097】
トランザクションのアトミック性をサポートするために、これらのアドレス・パケットをアトミックに処理しなければならない、即ち、同じアドレスに対して2つのアドレス・パケットが同時に存在することはできない。LOシステムにおいては、これは、アドレス・パケットを送信する前に、単にグローバル・コミット・トークンを獲得することにより達成することができる。しかしながら、最初にアドレス・パケットを送信し、応答を収集し、順序付けプロトコルを実施し(恐らく最も古いトランザクションを先頭に)、そして、全ての応答が満たされた場合にコミットすることによって、2段階コミット・スキームを用いることもできる。
【0098】
コミット:ひとたび妥当性検査が行われると、コミットは、いかなる特別な処理も必要とせず、単にWビット138及びRビット132、並びにストア・バッファをクリアするだけである。トランザクションの書き込みは既にキャッシュ内でダーティとしてマーク付けされており、これらのラインの他のキャッシュのコピーは、アドレス・パケットにより無効にされる。次に、他のプロセッサは、通常のコヒーレンス・プロトコルを通じてコミットされたデータにアクセスすることができる。
【0099】
アボート:ロールバックは等しく容易である:書き込みセットがローカル・キャッシュ内に含まれているので、これらのラインを無効にすることができ、次に、Wビット138及びRビット132、並びにストア・バッファをクリアする。ストア・バッファは、キャッシュを検索する必要なしに、Wラインを見つけて無効にすることを可能にする。
【0100】
Lazy−楽観的は、以下の特徴を有する:即ち、アボートは非常に高速であり、付加的なロード又はストアを必要とせず、ローカル変更のみを行う。EPにおいて見出されるよりも多くのシリアル化可能なスケジュールが存在することができ、これにより、トランザクションが独立であることを、LOシステムがより積極的に推測することが可能になり、そのことはより高い性能をもたらし得る。最終的に、競合検出が遅いと前方進行の可能性が高くなり得る。
【0101】
Lazy−楽観的はまた、以下の特徴を有する:即ち、妥当性検査では、書き込みセットのサイズに比例してグローバル通信時間を要する。コミット時にしか競合が検出されないので、失敗させられたトランザクションは無駄な作業になり得る。
【0102】
Lazy−悲観的(LP)
Lazy−悲観的(LP)は、EPとLOとの間のどこかに位置する第3のTM設計選択肢を表し:新しく書き込まれたラインを書き込みバッファに格納するが、アクセスごとに競合を検出する。
【0103】
バージョニング:バージョニングはLOのものと類似しているが、同一ではない:ラインの読み取りによりRビット132が設定され、ラインの書き込みによりWビット138が設定され、ストア・バッファは、キャッシュ内のWラインを追跡するために使用される。また、LOと同様に、トランザクションによる最初の書き込み時に、ダーティ(M)ラインを無効化しなければならない。しかしながら、競合検出は悲観的であるので、トランザクション・ラインをI,S→Mにアップグレードするときに、load exclusiveを実行しなければならず、これはLOとは異なる。
【0104】
競合検出:LPの競合検出は、EPのものと同様に動作する:コヒーレンス・メッセージを用いて、トランザクション間の競合を探す。
【0105】
妥当性検査:EPにおけるように、悲観的競合検出は、どの時点でも、実行中のトランザクションがいずれの他の実行中のトランザクションとも競合しないことを保証し、従って、妥当性検査はノー・オペレーションである。
【0106】
コミット:LOにおけるように、コミットは、特別な処理を必要としない:単にWビット138及びRビット132、並びにストア・バッファをクリアするだけである。
【0107】
アボート:ロールバックもまた、LOのものに類似している:単にストア・バッファを用いて書き込みセットを無効にし、Wビット及びRビット、並びにストア・バッファをクリアするだけである。
【0108】
LPは、以下の特徴を有する:LOと同様に、アボートは非常に高速である。EPと同様に、悲観的競合検出の使用により、「失敗させられた」トランザクションの数が低減する。EPと同様に、一部のシリアル化可能なスケジュールは許容されず、キャッシュ・ミスごとに競合検出を実施しなければならない。
【0109】
Eager−楽観的(EO)
バージョニングと競合検出の最終的な組み合わせは、Eager−楽観的(EO)である。EOは、HTMシステムにとって最適とはいえない選択肢であり得る:新しいトランザクション・バージョンはイン・プレースに書き込まれるので、競合の発生時に(即ち、キャッシュ・ミスの発生時に)競合に気付かざるを得ない。しかしながら、EOはコミット時まで競合の検出を待つので、これらのトランザクションは「ゾンビー(zombie)」になり、実行を続行し、リソースを浪費し、しかもアボートする「運命にある」。
【0110】
EOは、STMにおいて有用であることが分かっており、Bartok−STM及びMcRTにより実装される。lazyバージョニングSTMは、読み取りごとに書き込みバッファをチェックし、最新の値を読み取っていることを保証する必要がある。書き込みバッファはハードウェア構造ではないので、高価であり、従って、write−in−placeを好む。付加的に、競合のチェックもまた、STMにおいて高価であるので、楽観的競合検出は、この操作をまとめて実行する利点をもたらす。
【0111】
コンテンション管理
ひとたびシステムがそのトランザクションのアボートを決定すると、トランザクションがどのようにロールバックするかについて上述したが、競合には2つのトランザクションが関与するので、どのトランザクションをアボートすべきか、そのアボートをどのように開始すべきか、及びアボートされたトランザクションをいつ再試行すべきかのトピックを検討する必要がある。これらは、トランザクション・メモリの重要なコンポーネントである、コンテンション管理(CM)により対処されるトピックである。システムがどのようにアボートを開始するか、及び、競合においてどのトランザクションをアボートすべきかを管理する種々の確立された方法が後述される。
【0112】
コンテンション管理ポリシー
コンテンション管理(CM)ポリシーは、競合に関与するどのトランザクションをアボートすべきか、及び、アボートされたトランザクションをいつ再試行すべきかを決定する機構である。例えば、アボートされたトランザクションを瞬時に再試行することが最良の性能につながらない場合が多い。逆に、アボートされたトランザクションの再試行を遅延させるバックオフ機構を用いるが、より良い性能をもたらすことがある。STMは最初に最良のコンテンション管理ポリシーを見出すことに取り組んでおり、以下に概説したポリシーの多くは、もともとSTM向けに開発されたものである。
【0113】
CMポリシーは、トランザクションのエイジ(age)、読み取りセット及び書き込みセットのサイズ、以前のアボート数などを含む、判断を行うための多数の尺度を利用する。こうした判断を行うための尺度の組み合わせは無限にあるが、特定の組み合わせを、複雑性が高い順に大まかに後述する。
【0114】
幾つかの専門語を確立するために、最初に、競合においては、アタッカ(attacker)及びデフェンダ(defender)の両者が存在することに留意されたい。アタッカは、共有メモリ位置へのアクセスを要求しているトランザクションである。悲観的競合検出においては、アタッカは、load又はload exclusiveを発行するトランザクションである。楽観的競合検出においては、アタッカは、検証を行おうとするトランザクションである。デフェンダは、どちらの場合も、アタッカの要求を受け取るトランザクションである。
【0115】
積極的な(Aggressive)CMポリシーは、瞬時にかつ常にアタッカ又はデフェンダのいずれかを再試行する。LOにおいては、積極的とは、アタッカが常に勝つことを意味し、従って、積極的は、コミッタの勝利と呼ばれることもある。こうしたポリシーは、最も初期のLOシステムに使用された。EPの場合には、積極的は、デフェンダの勝利、又はアタッカの勝利のいずれかとすることができる。
【0116】
直ちに別の競合に直面する競合するトランザクションの再開は、必ず作業の無駄を引き起こす、即ち、相互接続される帯域幅がキャッシュ・ミスを再充填する。丁寧な(Polite)CMポリシーは、競合を再開する前に、指数関数的バックオフ(exponentialbackoff)を使用する(しかし、線形を用いることもできる)。スターベーション(starvation)、即ち、プロセスがスケジューラにより割り当てられたリソースを有していない状況を防止するために、指数関数的バックオフは、およそn回の再試行後、トランザクションの成功の勝算を大幅に高める。
【0117】
競合解決の別の手法は、アタッカ又はデフェンダをランダムにアボートすることである(ランダム化(Randomized)と呼ばれるポリシー)。こうしたポリシーは、不必要なコンテンションを回避するためのランダム化バックオフ・スキームと組み合わせることができる。
【0118】
しかしながら、アボートするトランザクションを選択する際、ランダムな選択を行うことは、「多くの作業」を完了したトランザクションのアボートをもたらすことがあり、これによりリソースが無駄になり得る。こうした無駄を回避するために、どのトランザクションをアボートするかを決定するときに、トランザクションにおける完了した作業の量を考慮に入れることができる。作業の1つの尺度は、トランザクションのエイジとすることができる。他の方法として、Oldest、Bulk TM、Size Matters、Karma、及びPolkaが挙げられる。Oldestは、競合における若い方のトランザクションをアボートする単純なタイムスタンプである。Bulk TMはこのスキームを使用する。Size Mattersは、Oldestに類似しているが、トランザクションのエイジの代わりに、読み取り/書き込みワードの数が優先順位として用いられ、一定数のアボートの後、Oldestに戻る。Karmaは類似しており、書き込みセットのサイズを優先順位として用いる。次に、一定の時間バックオフした後、ロールバックが進行する。アボートされたトランザクションは、アボートされた後もその優先順位を保持する(従って、Karmaの名が付いている)。Polkaは、Karmaと同様であるが、所定の時間バックオフする代わりに、毎回指数関数的により多くバックオフする。
【0119】
アボートは作業を無駄にするので、デフェンダがそのトランザクションを終了するまでアタッカをストールすることがより良い性能をもたらすという議論は理にかなっている。残念なことに、こうした単純なスキームは、容易にデッドロックをもたらす。
【0120】
この問題を解決するために、デッドロック回避技術を用いることができる。Greedyは、デッドロックを回避するために2つの規則を用いる。第1の規則は、第1のトランザクションT1が第2のトランザクションT0よりも低い優先順位を有する場合、又は、T1が別のトランザクションを待っている場合、T1は、T0との競合時にアボートするというものである。第2の規則は、T1がT0よりも高い優先順位を有し、待機していない場合、T0は、T1のコミットまで待つか、アボートするか、又は待機を開始する(この場合、第1の規則が適用される)というものである。Greedyは、トランザクションのセットを実行するための期限についての何らかの保証を提供する。1つのEP設計(LogTM)は、Greedyに類似したCMポリシーを用いて、保守的なデッドロック回避によるストールを達成する。
【0121】
例示的なMESIコヒーレンシ規則は、マルチプロセッサ・キャッシュ・システムのキャッシュラインが存在し得る4つの可能な状態、即ち、次のように定義される4つの可能な状態M、E、S、Iを提供する。:
Modified(M):キャッシュラインは現キャッシュ内にのみ存在し、ダーティである。即ち、キャッシュラインは、メインメモリ内の値から修正されている。キャッシュは、(もはや有効ではない)メインメモリ状態のいずれかの他の読み取りを可能にする前に、将来のいずれかの時点で、データをメインメモリにライトバックしなければならない。ライトバックによりラインはExclusive状態に変化する。
Exclusive(E):キャッシュラインは現キャッシュ内にのみ存在するが、クリーンである。即ち、キャッシュラインはメインメモリと一致する。キャッシュラインは、読み取り要求に応答して、いつでもShared状態に変わることが可能である。代替的に、キャッシュラインは、書き込みがなされると、Modified状態に変わることが可能である。
Shared(S):このキャッシュラインは、マシンの他のキャッシュ内に格納することができ、「クリーン」であることを示す。即ち、このキャッシュラインはメインメモリと一致する。ラインは、いつでも廃棄する(Invalid状態に変更する)ことができる。
Invalid(I):このキャッシュラインが、無効である(未使用である)ことを示す。
【0122】
MESIコヒーレンシ・ビットに加えて又はそこに符号化された、各キャッシュラインに対して、TMコヒーレンシ状態インジケータ(R132、W138)を設けることができる。R132インジケータは、現トランザクションがキャッシュラインのデータから読み取りを行ったことを示し、W138インジケータは、現トランザクションがキャッシュラインのデータに書き込みを行ったことを示す。
【0123】
TM設計の別の態様において、システムは、トランザクション・ストア・バッファを用いて設計される。2000年3月31日に出願され、「Methods and Apparatus for Reordering and Renaming Memory References in a Multiprocessor Computer System」という名称の特許文献1は、少なくとも第1及び第2のプロセッサを有するマルチプロセッサ・コンピュータ・システムにおいて、メモリ参照を再順序付けし、再命名するための方法を教示する。第1のプロセッサは、第1のプライベート・キャッシュ及び第1のバッファを有し、第2のプロセッサは、第2のプライベート・キャッシュ及び第2のバッファを有する。この方法は、第1のプロセッサが受信した、データを格納する複数のゲート付きストア要求(gated store request)の各々について、第1のプライベート・キャッシュによって、データを含むキャッシュラインを排他的に取得するステップと、データを第1のバッファに格納するステップとを含む。第1のバッファが、第1のプロセッサから、特定のデータをロードするロード要求を受信すると、ロード及びストア操作のイン・オーダー・シーケンスに基づいて、特定のデータが、第1のバッファに格納されたデータの中から第1のプロセッサに提供される。第1のキャッシュが所定データのロード要求を第2のキャッシュから受信すると、エラー条件が示され、所定データのロード要求が第1のバッファに格納されたデータに対応する場合、プロセッサの少なくとも1つの現在の状態が以前の状態にリセットされる。
【0124】
1つのこうしたトランザクション・メモリ機能の主要実装コンポーネントは、トランザクション前の(pre-transaction)GR(汎用レジスタ)のコンテンツを保持するためのトランザクション・バックアップ・レジスタ・ファイル、トランザクション中にアクセスされたキャッシュラインを追跡するためのキャッシュ・ディレクトリ、トランザクションが終了するまでストアをバッファするためのストア・キャッシュ、及び種々の複雑な機能を実施するためのファームウェア・ルーチンである。本セクションでは、詳細な実装を説明する。
【0125】
IBM zEnterprise EC12エンタープライズ・サーバの実施形態
IBM zEnterprise EC12エンタープライズ・サーバは、トランザクション・メモリにトランザクション実行(TX)を導入し、非特許文献3に部分的に説明される。
【0126】
表3は、例示的なトランザクションを示す。例えば他のCPUとの競合の繰り返しが原因で、あらゆる実行の試行においてアボート条件に遭遇し得るので、TBEGINで開始されたトランザクションが、TENDで常に成功裏に完了することは保証されない。このことは、プログラムが、例えば従来のロック・スキームを用いることにより、同じ操作を非トランザクション的に実行するためにフォールバック経路をサポートすることを必要とする。このことは、特にフォールバック経路が信頼できるコンパイラによって自動的に生成されない場合、プログラミング及びソフトウェア検証チームに著しい負担をかける。
【表3】
【0127】
アボートされたトランザクション実行(TX)のトランザクションに対してフォールバック経路を提供する要件は、負担になり得る。共有データ構造で動作する多くのトランザクションは短いものであり、ぼんの数個の個別メモリ位置にタッチし、単純な命令しか使用しないと考えられる。これらのトランザクションに対して、IBM zEnterprise EC12は、制約付き(constrained)トランザクションの概念を導入する。通常の条件下で、CPU114(図1)は、制約付きトランザクションが、たとえ必要な再試行の数に厳密な制限を与えなくても最終的に成功裏に終了することを保証する。制約付きトランザクションは、TBEGINC命令で開始し、通常のTENDで終了する。制約付きトランザクション又は制約なしトランザクションとしてのタスクの実装は、一般的に、極めて匹敵する機能をもたらすが、制約付きトランザクションは、フォールバック経路に対する必要性を取り除くことにより、ソフトウェア開発を簡単化する。IBMのトランザクション実行アーキテクチャは、非特許文献4にさらに説明される。
【0128】
制約付きトランザクションは、TBEGINC命令で開始する。TBEGINCで開始されたトランザクションは、プログラミング上の制約のリストに従わなければならない。そうでない場合には、プログラムはフィルタリング可能でない制約違反割り込み(non-filterable constraint-violation interruption)を利用する。例示的な制約として、これらに限定されるものではないが、トランザクションは最大32個の命令を実行することができる、全ての命令テキストはメモリの連続した256バイトの範囲内になければならない、トランザクションは前方を指示する相対分岐のみを含む(即ち、ループ又はサブルーチン呼び出しはない)、トランザクションはメモリの最大4つの位置合わせされたオクトワード(オクトワードは32バイトである)にアクセスすることができる、及び10進演算又は浮動小数点数演算のような複雑な命令を除外するための命令セットの制限を挙げることができる。最大4つの位置合わせされたオクトワードをターゲットにするアトミックcompare−and−swapの非常に強力な概念を含む、二重連結リスト(doubly linked list)−挿入/削除演算のような多くの一般的な演算を実行できるように、制約が選択される。同時に、制約は、将来のCPU実装が、制約の調整を必要とせずにトランザクションの成功を保証できるように保守的に選択されるが、それは、そうでない場合にソフトウェアの非互換性を招くためである。
【0129】
TBEGINCは、浮動小数点数レジスタ(FPR)制御及びプログラム割り込みフィルタリング・フィールドが存在せず、制御はゼロであると見なされる点を除いて、大部分は、TSXにおけるXBEGIN又はIBM(登録商標)のzEC12サーバ上のXBEGINのように挙動する。トランザクションがアボートすると、命令アドレスは、制約付きトランザクションについての即時再試行及びアボート経路の不存在を反映して、命令の後ではなく、直接TBEGINCに戻される。
【0130】
ネスト化されたトランザクションは、制約付きトランザクション内で許容されないが、TBEGINCが非制約付きトランザクション内で行われた場合には、TBEGINと同様に新しい非制約付きネスト・レベルを開くものとして扱われる。このことは、例えば、非制約付きトランザクションが制約付きトランザクションを内部で使用するサブルーチンを呼び出した場合などに起こり得る。割り込みフィルタリングは暗黙的にオフにされるので、制約付きトランザクション中の全ての例外は、オペレーティング・システム(OS)への割り込みをもたらす。最終的なトランザクションの終了の成功は、いずれかの制約付きトランザクションによりタッチされたせいぜい4ページをページインするOSの能力に依存する。OSはまた、トランザクションが完了するのを可能にするのに十分に長いタイムスライスも保証しなければならない。
【表4】
【0131】
表4は、制約付きトランザクションが他のロック・ベースのコードと対話しないと仮定する、表3のコードの制約付きトランザクション実装を示す。従って、ロック・テストは示されないが、制約付きトランザクションとロック・ベースのコードが混合された場合には、これを付加することができる。
【0132】
繰り返し障害が発生した場合、ソフトウェア・エミュレーションが、システム・ファームウェアの一部としてミリコードを用いて実施される。有利なことに、プログラマーから負担が取り除かれるので、制約付きトランザクションは所望の特性を有する。
【0133】
図3を参照すると、IBM zEnterprise EC12プロセッサは、トランザクション実行ファシリティを導入した。このプロセッサは、クロックサイクルごとに3つの命令をデコードすることができる。即ち、単純な命令は、単一のmicro−op(マイクロ・オペレーション)としてディスパッチされ、より複雑な命令は、複数のmicro−opに分割される。micro−op(Uops232b)が、統合された発行キュー216に書き込まれ、そこから、それらをアウト・オブ・オーダー式に発行することができる。サイクルごとに、最大2つの固定小数点数命令、1つの浮動小数点数命令、2つのロード/ストア命令、及び2つの分岐命令を実行することができる。グローバル完了テーブル(GCT)232は、あらゆるmicro−op232b及びトランザクション・ネスト化深さ(transaction nesting depth、TND)232aを保持する。GCT232は、デコード時にイン・オーダー式に書き込まれ、各micro−op232bの実行ステータスを追跡し、最も古い命令グループの全てのmicro−op232bが成功裏に実行されると、命令を完了する。
【0134】
レベル1(L1)データ・キャッシュ240は、256バイトのキャッシュライン及び4サイクルの使用待ち時間を有する96KB(キロバイト)の6ウェイ・アソシアティブ・キャッシュ(6-way associative cache)であり、L1 240ミスに対して7サイクルの使用待ち時間ペナルティを有して、プライベート1MB(メガバイト)の8ウェイ・アソシアティブ第2レベル(L2)データ・キャッシュ268に結合される。L1 240キャッシュは、プロセッサに最も近いキャッシュであり、Lnキャッシュは、第n番目のキャッシュ・レベルのキャッシュである。L1 240及びL2 268キャッシュの両方とも、ストアスルー(store through)方式である。各々の中央処理装置(CP)チップ上の6つのコアは、48MBの第3レベル・ストアイン(store-in)方式キャッシュを共有し、6つのCPチップは、ガラス・セラミック・マルチチップ・モジュール(MCM)上に一緒にパッケージ化されたオフ・チップの384MBの第4レベル・キャッシュに接続される。最大4つのマルチチップ・モジュール(MCM)を、最大144個のコアを有するコヒーレントな対称マルチプロセッサ(SMP)システムに接続することができる(顧客のワークロードを実行するのに全てのコアが利用可能とは限らない)。
【0135】
コヒーレンシは、MESIプロトコルの変形により管理される。キャッシュラインは、読み出し専用(shared)又はexclusiveで所有することができ、L1 240及びL2 268はストアスルー方式であり、従って、ダーティラインを含まない。L3 272及びL4キャッシュ(図示せず)はストアイン方式であり、ダーティ状態を追跡する。各キャッシュは接続された全ての下位レベルのキャッシュを含む。
【0136】
コヒーレンシ要求は「相互問い合わせ」(cross interrogate、XI)と呼ばれ、上位レベルのキャッシュから下位レベルのキャッシュにかつL4間で階層的に送信される。1つのコアがL1 240及びL2 268をミスし、ローカルL3 272からキャッシュラインを要求すると、L3 272は、L3 272がこのラインを所有するかどうかをチェックし、必要に応じて、コヒーレンシを保証するために、そのL3 272下で現在所有しているL2 268/L1 240にXIを送信してから、キャッシュラインを要求側に戻す。要求がL3 272もミスした場合、L3 272は要求をL4(図示せず)に送信し、L4は、XIをそのL4下の全ての必要なL3及び近隣のL4に送信することによって、コヒーレンシを実施する。次に、L4は要求中のL3に応答し、L3は応答をL2 268/L1 240に転送する。
【0137】
キャッシュ階層の包含の規則のために、要求から他のキャッシュラインへのアソシアティビティ・オーバーフローにより引き起こされた上位レベルのキャッシュに対するエビクション(eviction)が原因で、キャッシュラインが下位レベルのキャッシュから相互問い合わせされる(XI)ことに留意されたい。これらのXIは「LRU XI」と呼ぶことができ、ここでLRUは、最長時間未使用(least recently used)を意味する。
【0138】
さらに別のタイプのXI要求を参照すると、Demote−XIは、キャッシュ・オーナーシップを、exclusiveからread−only(読み出し専用)状態に遷移させ、Exclusive−XIは、キャッシュ・オーナーシップをexclusiveからinvalid状態に遷移させる。Demote−XI及びExclusive−XIは、元のXI送信者への応答を必要とする。ターゲット・キャッシュは、XIを「受け入れる」ことができ、又は、XIを受け入れる前に最初にダーティ・データをエビクトする必要がある場合には、「拒否」応答を送信することができる。L1 240/L2 268キャッシュはストアスルー方式であるが、ストア・キュー内に、排他的状態をダウングレードする前にL3に送信する必要があるストアを有する場合には、demote−XI及びexclusive−XIを拒否することができる。拒否されたXIは、送信者により繰り返される。Read−only−XIは、ラインを読み出し専用で所有するキャッシュに送信され、こうしたXIを拒否することができないので、こうしたXIに対して応答は必要ない。SMPプロトコルの詳細は、非特許文献5により、IBM z10に関して説明されるものと類似している。
【0139】
トランザクション命令の実行
図3は、CPU及びこれが対話するキャッシュ/コンポーネント(図1及び図2に示されるもののような)を含む、例示的なトランザクション実行環境の例を示す。命令デコード・ユニット208(IDU)は、現トランザクション・ネスト化深さ212(TND)を常時監視している。IDU208がTBEGIN命令を受信すると、ネスト化深さ212がインクリメントされ、逆に、TEND命令時にはデクリメントされる。あらゆるディスパッチされた命令について、ネスト化深さ212がGCT232に書き込まれる。TBEGIN又はTENDが、後でフラッシュされる投機的経路上でデコードされると、IDU208のネスト化深さ212は、フラッシュされない最も若いGCT232エントリからリフレッシュされる。トランザクション状態はまた、実行ユニットによる消費、大部分はロード/ストア・ユニット(LSUs)280による消費のために、発行キュー216にも書き込まれ、ロード/ストア・ユニット(LSUs)280は、該LSUs280内に実効アドレス計算器236を有している。TBEGIN命令は、TEND命令に到達する前にトランザクションがアボートした場合に、状態情報を記録するためのトランザクション診断ブロック(TDB)を指定することができる。
【0140】
ネスト化深さと同様に、IDU208/GCU232は、トランザクション・ネストを通じて、アクセス・レジスタ/浮動小数点数レジスタ(AR/FPR)修正マスクを協調的に追跡する。即ち、AR/FPR修正命令がデコードされ、修正マスクがそれをブロックすると、IDU208は、アボート要求をGCT232内に配置することができる。命令がnext−to−completeになると、完了がブロックされ、トランザクションがアボートする。制約付きトランザクション内にある間にデコードされた場合又は最大ネスト化深さを上回る場合、TBEGINも含む他の制限付き命令が同様に処理される。
【0141】
最外TBEGINは、GR−Save−Maskに応じて、複数のmicro−opに分割され、各micro−op232b(例えば、uop0、uop1及びuop2を含む)は、2つの固定小数点数ユニット(FXU)220の一方によって実行され、トランザクション・アボートに場合、1対のGRs228を、GRs228のコンテンツを後で復元するために用いられる特殊トランザクション・バックアップ・レジスタ・ファイル224内に保存する。TBEGINはまた、1が指定されている場合、TDBのアクセシビリティ・テストを実施するためのmicro−op232bも生成し、このアドレスは、アボートの場合に後で使用するために、専用レジスタ内に保存される。最外TBEGINのデコードにおいて、潜在的な後のアボート処理のために、TBEGINの命令アドレス及び命令テキストもまた、専用レジスタ内に保存される。
【0142】
TEND及びNTSTGは、単純なmicro−op232b命令である。NTSTG(非トランザクション・ストア(non-transactional store))は、発行キュー216において非トランザクションとしてマーク付けされ、LSUs280がそれを適切に処理できるようにする点を除いて、通常のストアのように処理される。TENDは、実行時にノー・オペレーションであり、TENDが完了したときに、トランザクションの終了が行われる。
【0143】
上述のように、トランザクション内にある命令は、発行キュー216においてそのようにマーク付けされるが、他の点ではほぼ変更されずに実行され、LSUs280は、次のセクションで説明されるように、分離追跡(isolation track)を行う。
【0144】
デコードはイン・オーダー式であり、かつ、IDU208は現在のトランザクション状態を常時監視し、これをトランザクションからの全ての命令と併せて発行キュー216内に書き込むことから、TBEGIN、TEND、並びにトランザクションの前、内部及び後の命令の実行は、アウト・オブ・オーダー式に実行することができる。TENDを最初に、トランザクション全体を次に実行し、最後にTBEGINを実行することさえ可能である(可能性は低いが)。プログラム順は、完了時にGCT232により復元される。汎用レジスタ(GRs)228は、バックアップ・レジスタ・ファイル224から復元することができるので、トランザクションの長さは、GCT232のサイズによって制限されない。
【0145】
実行中、プログラム・イベント記録(PER)イベントが、イベント抑止制御に基づいてフィルタリングされ、PER TENDイベントは、イネーブルにされた場合に検出される。同様に、トランザクション・モードにある間、トランザクション診断制御によりイネーブルにされたときに、擬似乱数生成器がランダム・アボートを引き起こしていることがある。
【0146】
トランザクション分離の追跡
ロード/ストア・ユニット280は、トランザクション実行中にアクセスされたキャッシュラインを追跡し、別のCPUからのXI(又はLRU−XI)がフットプリントと競合する場合にアボートをトリガする。競合するXIがexclusive又はdemote XIである場合、L3 272がXIを繰り返す前にトランザクションが終了することを期待して、LSUs280はXIを拒否してL3 272に戻す。この「押しのけ(stiff-arming)」は、高競合状態のトランザクションにおいて非常に有効である。2つのCPUが互いに押しのけ合う際のハングアップを防止するために、XI拒否カウンタが実装され、該XI拒否カウンタは、閾値が満たされると、トランザクション・アボートをトリガする。
【0147】
L1キャッシュ・ディレクトリ240は、従来より、スタティック・ランダム・アクセス・メモリ(SRAM)で実装される。トランザクション・メモリの実装では、ディレクトリの有効ビット244(64行×6ウェイ)は通常の論理ラッチに移動され、キャッシュラインごとにさらに2つのビット、即ちTX−読み取りビット248及びTX−ダーティビット252が補充される。
【0148】
新しい最外TBEGIN(先のまだ保留中のトランザクションに対してインターロックされる)がデコードされると、TX−読み取り248ビットがリセットされる。TX−読み取り248ビットは、発行キュー内で「トランザクショナル(transactional)」としてマーク付けされた全てのロード命令によって実行時に設定される。これは、投機的ロードが、例えば誤って予測された分岐経路上で実行される場合に、過剰なマーク付けをもたらし得ることに留意されたい。ロード完了時にTX−読み取りビット248を設定する代替案は、複数のロードが同時に完了することがあり、ロード・キュー上に多数の読み取りポートを必要とすることから、シリコン面積に対して高価すぎるものであった。
【0149】
ストアは、非トランザクション・モードと同じ方法で実行されるが、トランザクション・マークが、ストア命令のストア・キュー(STQ)260エントリ内に置かれる。ライトバック時に、STQ260からのデータがL1 240内に書き込まれるとき、書き込まれたキャッシュラインに関して、L1キャッシュ・ディレクトリ240内のTX−ダーティ252が設定される。L1 240へのストア・ライトバックは、ストア命令が完了した後にのみ行われ、サイクルごとにせいぜい1つのストアがライトバックされる。完了及びライトバックの前に、ロードは、ストア転送により、STQ260からのデータにアクセスすることができ、ライトバック後は、CPU114(図1)は、L1 240内の投機的に更新されたデータにアクセスすることができる。トランザクションが成功裏に終了した場合、全てのキャッシュラインのTX−ダーティビット252はクリアされ、STQ260において、まだ書き込まれていないストアのTX−マークもクリアされ、有効に保留中のストアを通常のストアに変える。
【0150】
トランザクションがアボートすると、全ての保留中のトランザクション・ストアは、既に完了したものでさえ、STQ260から無効にされる。L1 240内のトランザクションにより修正された、つまり、TX−ダーティビット252がオンにされ、その有効ビットがオフにされた、全てのキャッシュラインが、有効に、これらをL1 240キャッシュから瞬時に取り除く。
【0151】
アーキテクチャは、新しい命令を完了する前に、トランザクションの読み取りセット及び書き込みセットの分離が保持されることを必要とする。この分離は、XIが保留中の適切な時点で命令の完了をストールすることにより確実にされる。投機的なアウト・オブ・オーダー式実行が許容され、保留中のXIが異なるアドレスに対するものであり且つ実際にトランザクション競合を引き起こさないと楽観的に仮定する。この設計は、アーキテクチャが必要とする強力なメモリ順序付けを保証するために従来のシステム上に実装されるXI対完了(XI-vs-completion)インターロックに非常に自然に適合する。
【0152】
L1 240がXIを受信すると、L1 240はディレクトリにアクセスして、相互問い合わせ(XI)されたL1 240内のアドレスの有効性をチェックし、相互問い合わせ(XI)されたライン上でTX−読み取りビット248がアクティブであり、かつ、XIが拒否されない場合、LSUs280がアボートをトリガする。アクティブなTX−読み取りビット248を有するキャッシュラインがL1 240から最長時間未使用(LRU)にされると、特別なLRU拡張ベクトルは、L1 240の64行の各々について、その行上にTX−読み取りラインが存在したことを思い出す。LRU拡張に対して正確なアドレス追跡は存在しないので、あらゆる拒否されないXIが有効な拡張行にヒットし、LSUs280がアボートをトリガする。正確でないLRU拡張追跡に対する他のCPU114(図1及び図2)との競合がアボートを引き起こさなければ、LRU拡張の提供は、L1サイズからL2サイズまでの読み取りフットプリント能力及びアソシアティビティを有効に向上させる。
【0153】
ストア・フットプリントは、ストア・キャッシュ・サイズ(ストア・キャッシュは、以下により詳細に説明される)によって、従って、L2 268サイズ及びアソシアティビティによって暗黙的に、制限される。TX−ダーティ252キャッシュラインがL1 240からLRU処理された場合、LRU拡張アクションを実施する必要はない。
【0154】
ストア・キャッシュ
従来のシステムにおいて、L1 240及びL2 268はストアスルー・キャッシュであるので、全てのストア命令は、L3 272ストア・アクセスを引き起こし、今やL3 272ごとに6つのコアがあり、各コアの性能がさらに改善され、L3 272に関する(及びより少ない程度ではあるがL2 268に関する)ストア速度が、特定のワークロードに関して問題になる。ストア・キューイングの遅延を避けるために、ストアをL3 272に送信する前にストアを近隣のアドレスと組み合わせる、収集ストア・キャッシュ264を付加する必要がある。
【0155】
トランザクション・メモリ性能については、L2 268は、もう少しでクリーン・ラインを戻すので(7サイクルL1 240ミス・ペナルティ)、トランザクション・アボート時に、L1 240からのあらゆるTX−ダーティ252キャッシュラインを無効にすることが許容可能である。しかしながら、性能(及び追跡のためのシリコン領域)に関して、トランザクションが終了する前にトランザクション・ストアにL2 268を書き込ませ、次に、アボート時に(又はさらに悪いことには共有L3 272で)全てのダーティL2 268キャッシュラインを無効にすることは、許容可能でない。
【0156】
ストア帯域幅及びトランザクション・メモリ・ストア処理の2つの問題はどちらも、収集ストア・キャッシュ264で対処することができる。収集ストア・キャッシュ264は、64エントリの循環キューであり、各エントリは、バイト精度(byte-precise)の有効ビットを有する128バイトのデータを保持する。非トランザクション操作において、LSUs280からストアを受信すると、ストア・キャッシュ264は、同じアドレスのエントリが存在するかどうかをチェックし、存在する場合には、新しいストアを既存のエントリに収集する。エントリが存在しない場合には、新しいエントリがキューに書き込まれ、空きエントリの数が閾値より下になる場合、最も古いエントリがL2キャッシュ268及びL3 272キャッシュにライトバックされる。
【0157】
新しい最外トランザクションが開始すると、ストア・キャッシュ内の全ての既存のエントリは、新しいストアをそこに収集できないように、closedとしてマーク付けされ、L2 268及びL3 272に対するこれらのエントリのエビクションが開始される。その時点から、LSUs280 STQ260から得られるトランザクション・ストアは、新しいエントリを割り当てる、又は既存のトランザクション・エントリに集まる。L2 268及びL3 272へのこれらのストアのライトバックは、トランザクションが成功裏に終了するまでブロックされ、その時点で、後の(トランザクション後の)ストアは、次のトランザクションがそれらのエントリを再び閉じるまで、引き続き既存のエントリ内に集めることができる。
【0158】
ストア・キャッシュ264は、あらゆるexclusive XI又はdemote XIのたびに照会され、XIがいずれかのアクティブ・エントリと比較された場合、XIの拒否を引き起こす。継続的にXIを拒否する間、コアがさらなる命令を完了しない場合、トランザクションは、ハングアップを回避するために特定の閾値でアボートされる。
【0159】
ストア・キャッシュ264がオーバーフローすると、LSUs280は、トランザクション・アボートを要求する。LSUs280は、既存のエントリにマージする(merge)ことができない新しいストアを送信しようと試みたときに、この条件を検出し、ストア・キャッシュ264全体が現トランザクションからのストアで満たされる。ストア・キャッシュ264は、L2 268のサブセットとして管理され、ダーティラインをL1 240からトランザクション的にエビクトすることができるが、これらは、トランザクション全体を通じてL2 268内に常駐しなければならない。従って、最大ストア・フットプリントは、64×128バイトのストア・キャッシュ・サイズに制限され、L2 268のアソシアティビティによっても制限される。L2 268は、8ウェイ・アソシアティブであり、512行を有するので、一般的には、十分に大きく、トランザクション・アボートを引き起こさない。
【0160】
トランザクションがアボートした場合、ストア・キャッシュ264に通知され、トランザクション・データを保持する全てのエントリが無効にされる。ストア・キャッシュ264はまた、1ダブルワード(8バイト)ごとに、エントリがNTSTG命令により書き込まれたかどうかのマークを有し−これらのダブルワードは、トランザクション・アボートにわたって有効なままである。
【0161】
ミリコード実装の機能
従来より、IBMメインフレーム・サーバ・プロセッサは、特定のCISC命令実行、割り込み処理、システム同期、及びRASのような複雑な機能を実施する、ミリコードと呼ばれるファームウェアの層を含む。ミリコードは、マシン依存命令、並びに、アプリケーション・プログラム及びオペレーティング・システム(OS)の命令と同様にメモリからフェッチされ、実行される命令セット・アーキテクチャ(ISA)の命令を含む。ファームウェアは、顧客プログラムがアクセスできないメインメモリの制限区域内に常駐する。ハードウェアが、ミリコードを呼び出す必要がある状況を検出すると、命令フェッチ・ユニット204が「ミリコード・モード」に切り替わり、ミリコード・メモリ領域内の適切な位置でフェッチを開始する。ミリコードは、命令セット・アーキテクチャ(ISA)の命令と同じ手法でフェッチ及び実行することができ、ISA命令を含むことができる。
【0162】
トランザクション・メモリに関して、ミリコードは、種々の複雑な状況に関与する。あらゆるトランザクション・アボートは、必要なアボート・ステップを行うために、専用ミリコード・サブルーチンを呼び出す。トランザクション・アボート・ミリコードは、ハードウェア内部のアボート原因、潜在的な例外原因、及びアボートされた命令アドレスを保持する特殊用途レジスタ(SPR)を読み取ることで開始し、次に、ミリコードを用いて、1が指定されている場合には、TDBを格納する。ミリコードがどのGRs238を復元するかを知るのに必要とされるGR保存マスクを取得するために、TBEGIN命令テキストがSPRからロードされる。
【0163】
CPU114(図1)は、バックアップGRs224を読み出し、それらをメインGRs228にコピーするための、特殊ミリコード専用命令をサポートする。TBEGIN命令アドレスもSPRからロードされ、ひとたびミリコード・アボート・サブルーチンが終了すると、TBEGIN後の実行を続行するための新しい命令アドレスをPSW内に設定する。このPSWは、アボートがフィルタリングされていないプログラム割り込みにより引き起こされた場合に、プログラム−旧PSWとして後に保存することができる。
【0164】
TABORT命令は、ミリコード実装することができる、即ち、IDU208がTABORTをデコードすると、TABORT命令は、TABORTのミリコードに分岐するように命令フェッチ・ユニットに指示し、そこからミリコードが共通のアボート・サブルーチンに分岐する。
【0165】
Extract Transactional Nesting Depth(トランザクション・ネスト化深さ抽出)(ETND)命令も、パフォーマンス・クリティカル(performance critical)ではないので、ミリコード化することができる。即ち、ミリコードは、特殊ハードウェア・レジスタから現在のネスト化深さをロードし、それをGRs228に入れる。PPA命令はミリコード化することができる。PPA命令は、PPAへのオペランドとしてソフトウェアにより提供される現在のアボート・カウントと、同じく他のハードウェア内部状態とに基づいて、最適な遅延を実施する。
【0166】
制約付きトランザクションに関して、ミリコードは、アボートの数を常時監視することができる。TENDが成功裏に完了したとき、又は、OSへの割り込みが生じた場合、カウンタは0にリセットされる(OSがプログラムに戻るかどうか、又はOSがいつプログラムに戻るかは知られていない)。現在のアボート・カウントに依存して、ミリコードは、特定の機構を呼び出して、後のトランザクションの再試行が成功する可能性を高めることができる。この機構は、例えば、再試行の間のランダムな遅延を連続的に増大させることと、投機的実行の量を低減させて、トランザクションが実際には使用していないデータへの投機的アクセスにより引き起こされるアボートに遭遇するのを回避することとを含む。最後の手段として、他のCPU114を解放して通常の処理を続行する前に、ミリコードを他のCPU114(図1)にブロードキャストして、全ての競合する作業を停止させ、ローカル・トランザクションを再試行することができる。デッドロックを引き起こさないように、複数のCPU114を連携させる必要があるので、異なるCPU114上のミリコード・インスタンス間の何らかのシリアル化が必要とされる。
【0167】
ストア命令のグループをアトミックにするための技術は、トランザクション・メモリ(TM)の使用である。ハードウェアTMに対する最も困難な課題は、書き込みの処理である。TMシステムは、トランザクション中、ストアを追跡し、書き込みセット(WS)をアセンブルする必要がある。トランザクションが成功裏に完了するまで、実際のWSデータをバッファに入れる必要がある。成功の場合、一般的に、バッファに入れたデータをキャッシュに書き込むことによって、WS内の全てのストアが、アトミックな方法で(すなわち、同時に)グローバルに見えるようになる。代替的に、トランザクション・アボートの場合、メモリを修正することなく、バッファに入れられたストアが廃棄される。
【0168】
ロードは、これらはメモリを変更しないので、幾分単純である。TMは、トランザクション・ロードを追跡しなければならず、各トランザクション・ロードのデータ及びアクセス・アドレスを含む読み取りセット(RS)を生成する。成功裏のトランザクションは、RS内のロードのデータをレジスタ・ファイルに転送する。
【0169】
トランザクション実行により実行される主要機能は、遠隔要求による干渉、すなわち現アプリケーション・スレッドに対応しないメモリ・アクセスを判断することである。
【0170】
多くの場合、TMは、トランザクションの間、キャッシュライン(例えば、64Bを含むキャッシュライン)のアドレス粒度における読み取りセット及び書き取りセットとの競合を監視する。つまり、RS及びWSは、キャッシュライン内のデータのアドレスではなく、トランザクション・データがあるキャッシュラインのアドレスを含む。読み取りセットのキャッシュライン内のいずれかのデータが別のスレッドにより書き込まれる場合、RS競合が発生する。WSのキャッシュライン内のいずれかのデータが別のスレッドにより読み書きされる場合、WS競合が発生する。競合が発生すると、トランザクションはアボートし、影響を及ぼしたコンピュータの状態を有するトランザクションに関与するあらゆるロード及びストアの効果をスカッシュする(すなわち、それらの効果をアンドゥする)。しかしながら、これを達成するために、TMの実装により、トランザクションが成功裏に完了するまで、トランザクションに関与するあらゆるロード及びストアは、コンピュータのアーキテクチャ化状態を変更することができない。
【0171】
性能を向上させるために、コンピュータ・アーキテクチャは、データへのアクセスを予測して、データを、主メモリ又は下位のキャッシュ・レベルから、より上位のキャッシュ・レベル(プロセッサにより近い)に移動させることができるプリフェッチ命令を含むことが多い。プリフェッチ命令の実行は、プリフェッチ命令により移動されるデータに実際にアクセスされることが分かる前に実行され得るという点で、本質的に投機的であり得る。読み取りアクセス又は書き込みアクセスのいずれかを予測して、データをプリフェッチすることができ、これはそれぞれ、読み取りプリフェッチ又は書き込みプリフェッチと呼ばれる。データの共有、同期及び並列処理を可能にする、コンピュータのキャッシュ・コヒーレンシ・プロトコルは、プロセッサが、データを書き込む(すなわち、変更する)ことができる前に、データの所有権を得ることを要求することが多い。データは、現在別のプロセッサが所有している場合があるので、所有権の取得は、長期にわたるプロセスであり得る。1つのメモリ位置から1つのプロセッサによって読み取られるデータが、同じ位置又は異なる位置(データのコピーが複数の異なる位置にある場合)に書き込みを行う別のプロセッサにより変更されるのを防止するために、所有権の概念が必要である。従って、多くの場合、プロセッサは、データへの書き込みを予測して、データの所有権を取得するために書き込みプリフェッチ命令を実行し、所有権を獲得する間、処理が遅延されないようにすることは有利である。
【0172】
本発明によると、実施形態は、プリフェッチ命令(すなわち、プリフェッチ要求)がトランザクションの失敗を引き起こす場合、既存のトランザクション・メモリ・システムにおけるプリフェッチ命令の実行と従来より関連している性能の低下を回避する。本発明の1つの実施形態において、プリフェッチ命令の実行は、ローカル・プロセッサにおけるトランザクション・メモリ・システム内のメモリ・トランザクションが、遠隔プロセッサからのプリフェッチ命令とのアドレス競合が原因でアボートすることを要求しない。本発明の1つの実施形態において、プリフェッチ命令(すなわち、プリフェッチ要求)が、特定の条件下で(例えば、プリフェッチの優先順位又は重要性がメモリ・トランザクションのものより高い場合)、アドレス競合が原因で、メモリ・トランザクション(すなわち、トランザクション)をアボートさせることがある。1つの実施形態において、トランザクションと競合するプリフェッチ要求を評価し、ここで、評価は、i)プリフェッチ要求の優先順位をトランザクションの優先順位と比較すること、ii)ローカル・プロセッサの優先順位を遠隔プロセッサの優先順位と比較すること、及びiii)プリフェッチ要求の重要性を判断することのうちの1つ又は複数を含む。1つの実施形態において、評価に基づいたアクションが実行され、このアクションは、i)プリフェッチ要求をアボートすること、ii)プリフェッチ要求を休止すること(すなわち、アクションをとる前に条件の発生を待ちながら、プリフェッチ要求を休止状態であるが警戒状態にすること)、iii)一定の遅延期間、プリフェッチ要求を遅延させること(すなわち、アクションをとる前に、遅延期間が終わるまで、プリフェッチ要求を休止状態にすること)、及びiv)プリエッチ要求を実行することのうちの1つ又は複数を含む。1つの実施形態において、所定の遅延期間は、i)ローカル・プロセッサにおける1つ又は複数の条件、及びii)遠隔プロセッサにおける1つ又は複数の条件の1つ又は両方により判断される。例えば、1つの実施形態において、遅延期間、すなわち所定の遅延期間は、ローカル・プロセッサにおける条件(例えば、CPU使用率、キャッシュ使用率、キューイングされた(キューに入れられた)ワークロードの数、及びサイクル毎に実行される現在の命令)によって決まる。別の例では、1つの実施形態において、遅延期間は、プリフェッチ要求を生成した遠隔プロセッサにおける条件(例えば、CPU使用率、キャッシュ使用率、キューイングされたワークロードの数、及びサイクル毎に実行される現在の命令)によって決まる。
【0173】
1つの実施形態において、プリフェッチ要求がトランザクションと競合する場合、プリフェッチ要求が抑止され、ここで、抑止されるという用語の意味は、i)プリフェッチ要求をすぐに処理しない(すなわち、プリフェッチ要求を遅延させる)こと、ii)プリフェッチ要求をキューイングすること、及びiii)プリフェッチ要求をアボートすることのうちのいずれかの時間的シーケンス及びその組み合わせを含む。これらの操作の各々が、本発明におけるプリフェッチ要求の抑止を構成する。
【0174】
1つの実施形態において、プリフェッチ要求操作(すなわち、プリフェチ操作)は、プリフェッチ要求の実行中に行われるメモリ・アクセスである。プリフェッチ要求の実行に起因する性能向上は、メモリ・トランザクションのアボートの結果生じる性能の低下よりはるかに少ない可能性が高い。1つの実施形態において、プリフェッチ要求は、読み取り又は書き込みメモリ・アクセスをプリフェッチ要求として識別するプリフェッチ・プロトコル(本明細書で説明されるメモリ及びキャッシュ・コヒーレンス・プロトコルの一部である)に関与し、プリフェッチ要求についての情報を提供し、プリフェッチ要求と関連したメモリ操作がトランザクションと競合する場合、トランザクション・アボートを引き起こすことなく、プリフェッチ要求を管理できるようにする。1つの実施形態において、プリフェッチ・プロトコルは、読み取りプリフェッチ要求操作、及び書き込みプリフェッチ要求操作を含む。1つの実施形態において、プリフェッチ要求は、1つ又は複数のプリフェッチ操作を含む。1つの実施形態において、プリフェッチ・プロトコルは、プリフェッチ要求の受信側(receiver)からプリフェッチ要求の発信元(source)に送られる1つ又は複数のプリフェッチ確認応答(acknowledgement)(すなわち、プリフェッチ要求の発信元に、プリフェッチ要求の状態を通知すること)を含む。1つの実施形態において、プリフェッチ確認応答は、プリフェッチ要求の受信側(例えば、ローカル・プロセッサ)におけるプリフェッチの処置(disposition)(すなわち、状態)についての情報を含む。
【0175】
1つの実施形態において、プリフェッチ要求の処理がメモリ・トランザクション・アボートを引き起こすと判断される場合、受信ノードにおいて、プリフェッチ要求が廃棄される。1つの実施形態において、プリフェッチ要求の発信元(例えば、遠隔プロセッサ)がプリフェッチ要求を特に重要であるとして指定する場合、プリフェッチ要求は、受信ノードにキューイングされ、もはやメモリ・トランザクション・アボートを引き起こさなくなると、実行される。1つの実施形態において、各遠隔プロセッサについて別個のキューがあり、遠隔プロセッサからのプリフェッチ要求は、その遠隔プロセッサについてのキューにキューイングされる。1つの実施形態において、排他的所有権に関するデータのプリフェッチ要求についてのキュー、及び共有所有権に関するデータのプリフェッチ要求についてのキューがある。1つの実施形態において、プリフェッチ要求が複数のプリフェッチ要求操作(すなわち、プリフェッチ操作)を含む場合、各プリフェッチ操作は、別個にキューイングされる。1つの実施形態において、優先順位が、プリフェッチ要求(例えば、プリフェッチの発信元の優先順位)と関連付けられる。1つの実施形態において、プリフェッチ要求の受信側におけるキュー内のプリフェッチ操作は、プリフェッチ要求の優先順位に従ってサービスされる。1つの実施形態において、優先順位は、プリフェッチ要求の送信元及びプリフェッチ要求の受信側と関連付けられる。1つの実施形態において、プリフェッチ要求の送信元(例えば、遠隔プロセッサ)がプリフェッチ要求の受信側の優先順位より高い優先順位を有する場合、プリフェッチ要求がサービスされ、プリフェッチ要求がトランザクションと競合する場合、受信側においてトランザクションのアボートが可能になる。1つの実施形態において、各プリフェッチ要求の優先順位についての別個のキューがあり、その優先順位についてのキューにおいて、優先順位を有するプリフェッチ要求がキューイングされる。
【0176】
1つの実施形態において、プリフェッチ・プロトコルは、プリフェッチ要求の受信側がプリフェッチ要求を管理する方法を決定するために使用するサイクルにおいて測定される各プリフェッチ要求と関連付けられたプリフェッチ期間(time horizon)を含む。1つの実施形態において、プリフェッチ要求は、キューイングされ、まだサービスされていない場合に、プリフェッチ要求と関連したプリフェッチ期間が生じた後に廃棄される。1つの実施形態において、プリフェッチ要求の受信側によってプリフェッチ要求が廃棄される場合、プリフェッチ要求が廃棄されたという通知が、プリフェッチ要求の送信元に送られる。幾つかの実施形態において、期間は、例えば、実行される命令の数、実行されるメモリ命令の数、又はプログラム及び/又はプロセッサに関連したいずれかの他の測定基準などの他の測定基準で指定される。
【0177】
1つの実施形態において、プリフェッチ・プロトコルは、近い将来から遠い将来への時間ステップに分けられる、プリフェッチ操作と関連したプリフェッチ期間の仕様を含み、各時間ステップは、プリフェッチ要求の受信側がプリフェッチ要求を管理するために使用する所定数のサイクルで指定される。1つの実施形態において、プリフェッチ要求の実行は、遅延情報におけるプリフェッチ・プロトコルによりプリフェッチ要求の受信側に渡される時間ステップ数だけ、遅延される。1つの実施形態において、プリフェッチ要求の受信側は、指定された数の時間ステップの間(すなわち、遅延期間、又は同様な意味合いで遅延持続時間)、プリフェッチ要求を遅延させ、その後、プリフェッチ要求を実行する試みがなされる。1つの実施形態において、遅延が生じた後にプリフェッチ要求を実行しようとして、プリフェッチ要求がメモリ・トランザクションとの競合に遭遇した場合、プリフェッチ要求はアボートされる。1つの実施形態においては、遅延が生じた後にプリフェッチ要求を実行しようとして、プリフェッチ要求がメモリ・トランザクションとの競合に遭遇した場合、プリフェッチ要求は、キューにキューイングされる。
【0178】
1つの実施形態において、プリフェッチ要求がメモリ・トランザクションと競合を有し、プリフェッチ・プロトコルにおいて指定された時間ステップの数が閾値を下回る場合、プリフェッチ要求は廃棄され、そうでない場合、プリフェッチ要求はキューにキューイングされる。1つの実施形態において、プリフェッチ・プロトコル内のプリフェッチ要求は、短期プリフェッチ要求又は長期プリフェッチ要求として指定される。1つの実施形態において、短期プリフェッチ要求は、指定されたサイクル数の間、生きている(alive)(すなわち、プリフェッチ要求は、実行される可能性がある)。短期プリフェッチ要求が生きている間、短期プリフェッチ要求がメモリ・トランザクションと競合を有する場合、短期プリフェッチ要求はキューイングされ、短期プリフェッチ要求がもはや生きていない場合、短期プリフェッチ要求はアボートされる。1つの実施形態において、長期プリフェッチ要求は、これが実行されるまで生きているままである。1つの実施形態において、長期プリフェッチ要求は、これがメモリ・トランザクションとの競合を有する場合、キューにキューイングされ、長期プリフェッチ要求がもはやメモリ・トランザクションとの競合を有さない場合、キューから除去され、実行される。1つの実施形態において、キューが一杯であり、その長期プリフェッチ要求がキュー内で最も古いプリフェッチ要求である場合、長期プリフェッチ要求はキューから除去され、廃棄される。1つの実施形態において、長期プリフェッチ要求ではない少なくとも1つのエントリがキュー内にあり、キュー内の所定の長期プリフェッチ要求がキュー内で最も古いプリフェッチ要求である場合、長期プリフェッチ要求は、キューから除去されず、キューが一杯になった場合に廃棄される。1つのこうした実施形態及びシナリオにおいて、キューが一杯になり、少なくとも1つのエントリが長期プリフェッチ要求でない場合、長期プリフェッチ要求ではない、キュー内の少なくとも1つのエントリが、キューから除去される。1つの実施形態において、長期プリフェッチ要求は、キューから除去されず、キューが一杯になった場合に廃棄される。
【0179】
図4は、1つの実施形態において、キャッシュ・システムA 1103に接続されたプロセッサA 1102と、キャッシュ・システムB 1107に接続されたプロセッサB 1106とを含むプロセッサ・システム1101を示す。キャッシュ・システムA 1103及びキャッシュ・システムB 1107は、システム・バス1111に接続され、本質的に類似している。キャッシュ・システムA 1103は、トランザクション・メモリ・システムA 1104及びキャッシュA 1105を含む。キャッシュ・システムB 1107は、トランザクション・メモリ・システムB 1108及びキャッシュB 1109を含む。システム・メモリ1110は、システム・バス1111に取り付けられる。1つの実施形態において、キャッシュ・システムA 1103及びキャッシュ・システムB 1107は、プロセッサA 1102及びプロセッサB 1106が、組織された方法で、両方のプロセッサが共有するデータに対して操作を行う命令を実行することを可能にするキャッシュ・コヒーレンシ・プロトコルに関与する。例えば、プロセッサB 1106は、キャッシュ・システムB 1107からのデータにアクセスする読み取り命令を実行することができ、キャッシュ・システムB 1107がデータを有していない場合、キャッシュ・システムB 1107は、システム・バス1111上のデータに対するキャッシュ・コヒーレンシ・プロトコル要求をアサートする。キャッシュ・システムA 1103は、システム・バス1111上のキャッシュ・コヒーレンシ・プロトコル要求を監視(スヌープ)し、キャッシュ・システムA 1103が要求されるデータを有する場合、キャッシュ・システムA 1103は、システム・バス1111上のデータをアサートする。キャッシュ・システムA 1103はまた、要求されたデータのアドレスを比較して、アドレスがアクティブなトランザクション・メモリ操作と競合するかどうかを判断する。1つの実施形態において、キャッシュ・システムA 1103内のトランザクション・メモリ・システムA 1104は、メモリ・アクセス・アドレスがアクティブなトランザクション・メモリ操作のものと競合するかどうかを判断する。
【0180】
図5は、トランザクション・メモリ・システムA 1104をより詳細に示す。1つの実施形態において、トランザクション・メモリ・システムA 1104は、書き込みセット2205、読み取りセット2206、アボート・マネージャ2207、及びプリフェッチ・マネージャ2208を含む。書き込みセット2205は、トランザクションに関与している書き込み(ストア)のターゲット・アドレスを含む。読み取りセット2206は、トランザクションに関与している読み取り(ロード)のターゲット・アドレスを含む。1つの実施形態において、読み取りセット2206及び書き込みセット2205は、それぞれ、トランザクション内の1つ又は複数のメモリ読み取り及び書き込みアクセスの読み取り及び書き込みアドレスを含む。
【0181】
1つの実施形態において、トランザクション・メモリ・システムA 1104への入力は、非プリフェッチ操作バス2210上の非プリフェッチ操作(すなわち、非プリフェッチ・メモリ・アクセス)及びプリフェッチ操作バス2209上のプリフェッチ操作(すなわち、プリフェッチ要求メモリ・アクセス)を含む。アドレス・デコード2211は、非プリフェッチ操作のアドレスをデコードし、読み取りアドレス・バス2201上の非プリフェッチ読み取り操作のターゲット・アドレス及び書き込みアドレス・バス2202上の非プリフェッチ書き込み操作のターゲット・アドレスをアサートする。アドレス・デコード2212は、プリフェッチ操作のアドレスをデコードし、プリフェッチ読み取りアドレス・バス2203上のプリフェッチ読み取り操作のターゲット・アドレス及びプリフェッチ書き込みアドレス・バス2204上のプリフェッチ書き込み操作のターゲット・アドレスをアサートする。プリフェッチ・マネージャ2208は、アボート・マネージャ2207に接続され、プリフェッチ操作バス2209からトランザクション・メモリ・システムA 1104に入力される全てのプリフェッチ操作を受け取る。
【0182】
読み取りアドレス・バス2201及び書き込みアドレス・バス2202は、アボート・マネージャ2207への入力である。1つの実施形態において、アボート・マネージャ2207が、読み取りアドレス・バス2201上のアドレスが書き込みセット2205内のアドレスと合致することを検出した場合、アボート・マネージャ2207は、アドレスへの書き込みを含むトランザクション・メモリ操作をアボートする。1つの実施形態において、アボート・マネージャ2207が、書き込みアドレス・バス2202上のアドレスが書き込みセット2205内のアドレスと合致すること又は読み取りセット2206内のアドレスと合致することを検出した場合、アボート・マネージャ2207は、トランザクションをアボートする。
【0183】
プリフェッチ読み取りアドレス・バス2203及びプリフェッチ書き込みアドレス・バス2204は、アボート・マネージャ2207への入力である。1つの実施形態において、アボート・マネージャ2207が、プリフェッチ読み取りアドレス・バス2203上のアドレスが書き込みセット2205内のアドレスと合致することを検出した場合、アボート・マネージャ2207は、現在のプリフェッチ操作アドレスとの競合が生じたことを、プリフェッチ・マネージャ2208に通知する。1つの実施形態において、アボート・マネージャ2207は、アドレスへの書き込みを含むトランザクションをアボートしない。1つの実施形態において、アボート・マネージャ2207は、プリフェッチ・マネージャ2208によりアボートするように指示された場合、アドレスへの書き込みを含むトランザクションをアボートする。1つの実施形態において、アボート・マネージャ2207が、プリフェッチ書き込みアドレス・バス2204上のアドレスが書き込みセット2205内のアドレスと合致すること又は読み取りセット2206内のアドレスと合致することを検出した場合、アボート・マネージャ2207は、現在のプリフェッチ操作アドレスとの競合が生じたことを、プリフェッチ・マネージャ2208に通知する。1つの実施形態において、アボート・マネージャ2207は、トランザクションをアボートしない。1つの実施形態において、アボート・マネージャ2207は、プリフェッチ・マネージャ2208によりアボートするように指示された場合、トランザクションをアボートする。
【0184】
1つの実施形態において、プリフェッチ・マネージャ2208は、プリフェッチ・キュー2213、キュー・マネージャ2214及びローカル・遠隔プリフェッチ2216を含む。1つの実施形態において、ローカル・遠隔プリフェッチ2216は、プリフェッチ操作を、ローカル・プリフェッチ操作(例えば、ローカル・プロセッサからの)又は遠隔プリフェッチ操作(例えば、遠隔プロセッサからの)のいずれかとして分類する。プリフェッチ操作は、メモリ・トランザクションに対して、ローカル・プリフェッチ操作又は遠隔プリフェッチ操作のいずれかである。プリフェッチ操作がメモリ・トランザクションを生成した同じプロセッサ(例えば、ローカル・プロセッサ)上で生成され、メモリ・トランザクションによりアクセスされるキャッシュにアクセスする場合、プリフェッチ操作は、メモリ・トランザクションに対してローカルであり、そうでない場合、プリフェッチ操作は、メモリ・トランザクションに対して遠隔プリフェッチ操作(例えば、遠隔プロセッサからの)である。従って、プリフェッチ操作は、プリフェッチ操作を生成した実行スレッドによりもたらされる全てのトランザクション・メモリ操作に対してローカルである。1つの実施形態において、ローカル・遠隔プリフェッチ2216がトランザクションに対してローカルとして分類するプリフェッチ操作は、トランザクションと関連付けられる、書き込みセット2205又は読み取りセット2206内の読み取り又は書き込みと競合し得ない。特に、プリフェッチは、これが本トランザクション・メモリ・システムに取り付けられたとき(例えば、プロセッサ1102などのシングル・プロセッサ又は複数のプロセッサが本トランザクション・メモリ・システムに取り付けられたとき)、ローカルである。
【0185】
1つの実施形態において、プリフェッチ・マネージャ2208に、現在のプリフェッチ操作がトランザクションと競合することが通知された場合、プリフェッチ・マネージャ2208は、プリフェッチ操作及びプリフェッチ操作と関連したプリフェッチ要求を廃棄する。1つの実施形態において、プリフェッチ・マネージャ2208がプリフェッチ操作を廃棄した場合、プリフェッチ・マネージャ2208は、プリフェッチの発信元へ応答を送り、プリフェッチが廃棄されたことを送信元に通知する。1つの実施形態において、アボート・マネージャにより、プリフェッチ・マネージャ2208に、現在のプリフェッチ操作が既存のトランザクションと競合することが通知された場合、キュー・マネージャ2214は、プリフェッチ操作をプリフェッチ・キュー2213にキューイングする。1つの実施形態において、プリフェッチ・マネージャ2208は、競合するトランザクション・メモリ操作が完了された後又はアボートされた後、キューイングされたプリフェッチ操作を処理する。1つの実施形態において、キュー・マネージャ2214がプリフェッチ操作をプリフェッチ・キュー2213にキューイングした場合、プリフェッチ・マネージャ2208は、プリフェッチ要求の送信元に応答を送り、プリフェッチ操作がキューイングされたことを、送信元に通知する。
【0186】
1つの実施形態において、プリフェッチ操作バス2209上のプリフェッチ操作は、プリフェッチ要求を含むプリフェッチ・プロトコルに関与する。プリフェッチ要求は、プリフェッチ・メモリ・アクセスであり、データに対する必要性が確実である通常の読み取り又は書き込み・メモリ・アクセスではない、データに対するメモリ・アクセスを説明する。1つの実施形態において、プリフェッチ要求は、一意のタグを有するように識別される。1つの実施形態において、一意のタグは、該一意のタグの複製がシステム内に存在することができなくなるまで、システムで再使用できない。1つの実施形態において、プリフェッチ要求は、プリフェッチ操作が処理されるとき、プリフェッチ操作(プリフェッチ要求の結果である)を、プリフェッチ・マネージャ2208により効率的に管理されることを可能にするプリフェッチ情報(プリフェッチ要求の送信元においてプリフェッチ要求内に含まれる)を含む。1つの実施形態において、プリフェッチ情報は、プリフェッチ操作の送信元についての優先順位情報を含む。1つの実施形態において、プリフェッチ・マネージャが、プリフェッチ操作の送信元の優先順位が、トランザクション・メモリ操作(プリフェッチ操作と競合するアドレスを有する)を生成したプロセスの優先順位を上回ることを見出した場合、プリフェッチ・マネージャ2208は、プリフェッチ操作が進行することを可能にし、トランザクションは、アボート・マネージャ2207によりアボートされる。1つの実施形態において、プリフェッチ・マネージャが、プリフェッチ操作の発信元の優先順位の、トランザクション(プリフェッチ操作と競合するアドレスを有する)を生成したプロセスの優先順位に対する比が、閾値を上回ることを見出した場合、プリフェッチ操作は進行し、トランザクションはアボートされる。1つの実施形態において、プリフェッチ操作によりメモリ・トランザクションがアボートした場合、プリフェッチ・マネージャ2208は、プリフェッチ操作が、結果として起こるトランザクションのアボートを進行させることを示す通知を、プリフェッチ操作の送信元に送る。さらに、トランザクション・アボートは、トランザクションに対応するプロセッサに伝達され、トランザクション状態をロールバックし、トランザクションの実行又は代替的経路を再開する。
【0187】
1つの実施形態において、プリフェッチ要求内のプリフェッチ情報は、プリフェッチ期間(prefetch horizon)を含む。1つの実施形態において、プリフェッチ期間は、キュー・マネージャ2214がトランザクション・メモリ操作と競合するアドレスにある場合、プリフェッチ操作をプリフェッチ・キュー2213に入れることができるサイクルの数として指定される。1つの実施形態において、プリフェッチ期間は、プリフェッチの送信元における命令実行数として指定され、これは、プリフェッチの受信側におけるサイクル数に変換される。1つの実施形態において、送信元における命令実行数から受信側におけるサイクル数への変換は、静的変換係数を用いて実行され、これは実行中に変化しない。1つの実施形態において、送信元における命令実行数から受信側におけるサイクル数への変換は、プリフェッチの受信側により計算された動的に計算された変換係数を用いて(例えば、命令の数に、命令毎の現サイクル変換係数を乗算することによって)、実行中に行われる。
【0188】
1つの実施形態において、プリフェッチ要求を受け取るローカル・プロセッサは、プリフェッチが競合する1つ又は複数の現トランザクション内に残っていると考えられるサイクル数を追跡する。1つの実施形態において、1つ又は複数のトランザクション内の残りのサイクルの予想数のカウントが維持される。1つの実施形態において、プリフェッチについての期間の終了時間が、競合するトランザクション内に残っているサイクルの予想数の後の終了時間を下回る場合、プリフェッチ要求は廃棄され、そうでない場合、プリフェッチ要求はキューイングされる。
【0189】
1つの実施形態において、プリフェッチ操作がプリフェッチ期間のサイクル数内に処理されなかった場合、キュー・マネージャ2214は、プリフェッチ・キュー2213からプリフェッチ操作を除去し、これを廃棄する。1つの実施形態において、プリフェッチ操作が、プリフェッチ期間のサイクル数の後に廃棄された後、プリフェッチ・マネージャ2208は、プリフェッチ・ホライズンが超過したために、プリフェッチが廃棄されたことを、プリフェッチの送信元に通知する。
【0190】
1つの実施形態において、プリフェッチ要求内のプリフェッチ情報は、プリフェッチ要求の発信元の重要性を含む。1つの実施形態において、発信元の重要性が閾値を超えた場合、及び、プリフェッチ要求がトランザクション・メモリ操作とアドレス競合にある場合、プリフェッチ・マネージャ2208はプリフェッチ操作をキューイングし、そうでない場合、プリフェッチ要求は廃棄される。
【0191】
1つの実施形態において、プリフェッチ・キュー2213が一杯であるとき、受信するプリフェッチ要求は廃棄される。1つの実施形態において、プリフェッチ・キュー2213が一杯であるために入ってくるプリフェッチ要求が廃棄される場合、プリフェッチ要求への応答が、プリフェッチ要求の発信元に送られ、この応答は、プリフェッチ・キュー2213が一杯であったためにプリフェッチ要求が廃棄されたことを、プリフェッチ要求の発信元に知らせる。1つの実施形態において、プリフェッチ・キュー2213が一杯である場合、プリフェッチ・キュー2213から1つのエントリを選択し、廃棄する。1つの実施形態において、キュー・マネージャ2214は、廃棄されるプリフェッチ・キュー2213内のプリフェッチを選択する。1つの実施形態において、キュー・マネージャ2214が、別のプリフェッチ要求のためのスペースをあけるためにプリフェッチ・キュー2213から1つのプリフェッチを廃棄する場合、別のプリフェッチ要求のためのスペースをあけるためにプリフェッチ要求が廃棄されたことを、廃棄されるプリフェッチの発信元に通知する。1つの実施形態において、プリフェッチ要求によりプリフェッチ・キュー2213からの排除が行われる場合、プリフェッチ要求によりプリフェッチ・キュー2213からの排除が行われたことが、プリフェッチ要求の送信元に通知される。1つの実施形態において、プリフェッチ・キュー2213からの排除が行われる場合、プリフェッチ要求内の最も古いエントリが廃棄される。別の実施形態において、プリフェッチ・キュー2213から廃棄されるプリフェッチ要求は、プリフェッチ・キュー2213の先頭のプリフェッチ要求である。別の実施形態において、廃棄されるプリフェッチ・キュー2213内のプリフェッチ要求は、最も短い期間を有するプリフェッチ要求、つまり終了時間が最も早いプリフェッチ要求である。別の実施形態において、廃棄されるキューから選択されるプリフェッチ要求は、最も長い期間を有するプリフェッチ要求、つまり終了時間が最も先のプリフェッチ要求である。
【0192】
他の実施形態において、図5における種々のバスが組み合わせられる。従って、こうした実施形態の1つ又は複数において、限定されない例として、要求タイプ・インジケータを有する単一の読み取りバスにより、読み取りアドレス・バス2201及びプリフェッチ読み取りアドレス・バス2203の機能が実施され、要求タイプ・インジケータを有する単一の書き込みバスにより、書き込みアドレス・バス2202及びプリフェッチ書き込みアドレス・バス2204の機能が実施され、要求タイプ・インジケータを有する単一のプリフェッチ・バスにより、プリフェッチ・バス2203及び2204の機能が実施され、バス・インジケータを有する単一の非プリフェッチ・バスにより、非プリフェッチ・バス2201及び2203の機能が実施され、要求タイプ・インジケータを有する単一のアドレス・バスにより、全てのバスの機能が実施される。他の実施形態においては、要求及びアドレス・バスが組み合わせられる。
【0193】
幾つかのシナリオ及び実施形態において、プリフェッチ・プロトコルは、プリフェッチ要求の目的に関する情報を含むバス・ベース又はスイッチ・ベースの相互接続上でアサートされる読み取り要求を含む。1つの実施形態において、MESIキャッシュ・コヒーレンシ・プロトコルを組み込むシステムにおいて、キャッシュ・コヒーレンシ・プロトコルは、読み取り要求がデマンド要求(すなわち、データに対する非プリフェッチ要求)であるか又はプリフェッチ要求であるかに関する仕様を含む読み取り要求を含むように強化される。1つの実施形態において、プリフェッチ要求は、データの排他的所有権についてのプリフェッチ(例えば、データの読み書きのための)又はデータの共有所有権についてのプリフェッチ(例えば、データの読み取りのための)である。
【0194】
図6は、デマンド要求又はプリフェッチ要求を指定し、プリフェッチ要求がデータの排他的所有権のためのものか又はデータの共有所有権のためのプリフェッチであるかをさらに指定する読み取り要求の形式の実施形態を示す。1つの実施形態において、読み取り要求3311は、少なくとも6つの情報フィールド:すなわち、読み取り情報フィールド3301、タグ情報フィールド3302、排他的又は共有情報フィールド3303、p(プリフェッチ)情報フィールド3304、アドレス情報フィールド3305、及びCRC(周期的冗長検査)情報フィールド3306からなる。1つの実施形態において、読み取り情報フィールド3301は、読み取り要求3311を読み取り要求として識別し、タグ情報フィールド3302は、読み取り要求3311の特定のインスタンスを識別し、排他的又は共有情報フィールド3303は、読み取り要求3311がデータへの排他的又は共有アクセスに関するものかを指定し、p情報フィールド3304は、読み取り要求3311がプリフェッチ要求であるかどうかを指定し、アドレス情報フィールド3305は、読み取り要求3311により要求されるデータのアドレスを指定し、CRC情報フィールド3306は、読み取り要求3311内の他の情報フィールドの値のビットパターンから計算され、読み取り要求3311の送信元から読み取り要求3311の宛先への読み取り要求3311の転送の際に生じたエラーを検出するために用いられる値を含む。
【0195】
図6はまた、読み取り要求3311への応答、すなわち読み取り応答3312の形式の実施形態も示す。1つの実施形態において、読み取り応答3312は、少なくとも4つの情報フィールド:すなわち、読み取り応答情報フィールド3307、タグ情報フィールド3308、データ情報フィールド3309、及びCRC情報フィールド3310からなる。1つの実施形態において、読み取り応答情報フィールド3307は、読み取り応答3312を読み取り応答として識別し、タグ情報フィールド3308は、読み取り応答3312を、タグ情報フィールド3308に等しいタグ情報フィールド3302を有する読み取り要求3311への応答として識別し、データ情報フィールド3309は、タグ情報フィールド3308に等しいタグ情報フィールド3302を有する読み取り要求3311により要求されるデータであるデータを含む。CRC情報フィールド3310は、読み取り応答3312内の他の情報フィールドの値のビットパターンから計算され、読み取り応答3312の送信元から読み取り応答3312の宛先への読み取り応答3312の転送の際に生じたエラーを検出するために用いられる値を含む。
【0196】
幾つかのシナリオ及び実施形態において、プリフェッチ・プロトコルは、プリフェッチ要求の目的に関する情報を含むバス・ベース又はスイッチ・ベースの相互接続上でアサートされるプリフェッチ要求を含む。1つの実施形態において、MESIキャッシュ・コヒーレンシ・プロトコルを組み込むシステムにおいて、キャッシュ・コヒーレンシ・プロトコルは、プリフェッチ要求が、データの排他的所有権についてのプリフェッチであるか、又はデータの共有所有権についてのプリフェッチであるかに関する仕様を含むプリフェッチ要求を含むように強化される。
【0197】
図7は、プリフェッチ要求4416の形式の実施形態、及びプリフェッチ要求4416への3つのタイプの応答:すなわちプリフェッチ応答4417(プリフェッチ要求4416が実行されたことを示す)、プリフェッチ拒否(reject)応答4418(プリフェッチ要求4416が拒否されたことを示す)、及びプリフェッチ据え置き(deferred)応答4419(プリフェッチ要求4416が据え置かれたことを示す)の各々についての形式の実施形態を示す。1つの実施形態において、プリフェッチ要求4416は、プリフェッチ要求4416が、データの排他的所有権についてのプリフェッチか、又はデータの共有所有権についてのプリフェッチかを指定する。1つの実施形態において、プリフェッチ要求4416は、少なくとも5つの情報フィールド:すなわち、プリフェッチ情報フィールド4401、タグ情報フィールド4402、排他的又は共有情報フィールド4403、アドレス情報フィールド4404、及びCRC(周期的冗長検査)情報フィールド4405からなる。1つの実施形態において、プリフェッチ情報フィールド4401は、読み取り要求4416をプリフェッチ要求として識別し、タグ情報フィールド4402は、プリフェッチ要求4416の特定のインスタンスを識別し、排他的又は共有情報フィールド4403は、プリフェッチ要求4416が、排他的アクセスに対するプリフェッチ要求であるか又は共有アクセスに対するプリフェッチであるかのいずれかであることを指定し、アドレス情報フィールド4404は、プリフェッチ要求4416により要求されるデータのアドレスを指定し、CRC情報フィールド4405は、プリフェッチ要求4416内の他の情報フィールドの値のビット・バターンから計算され、プリフェッチ要求4416の送信元からプリフェッチ要求4416の宛先へのプリフェッチ要求4416の転送の際に生じたエラーを検出するために使用される値を含む。
【0198】
図7はまた、プリフェッチ応答4417の形式の実施形態も示す。1つの実施形態において、プリフェッチ応答4417は、プリフェッチ要求4416におけるアクションが実行されたとき、プリフェッチ要求4416に応答して、プリフェッチ要求4416を受け取った宛先から送られる。1つの実施形態において、プリフェッチ応答4417は、少なくとも4つの情報フィールド:すなわち、プリフェッチ応答情報フィールド4406、タグ情報フィールド4407、データ情報フィールド440、及びCRC情報フィールド4409からなる。1つの実施形態において、プリフェッチ応答情報フィールド4406は、プリフェッチ応答4417をプリフェッチ応答として識別し、タグ情報フィールド4407は、プリフェッチ応答4417を、タグ情報フィールド4407に等しいタグ情報フィールド4402を有するプリフェッチ要求4416への応答として識別し、データ情報フィールド4408は、タグ情報フィールド4407と合致するタグ情報フィールド4402を有するプリフェッチ要求4416により要求されるデータを含み、CRC情報フィールド4409は、プリフェッチ応答4417における他の情報フィールドの値のビット・バターンから計算され、プリフェッチ応答4417の送信元からプリフェッチ応答4417の宛先へのプリフェッチ応答4417の転送の際に生じたエラーを検出するために使用される値を含む。
【0199】
図7はまた、プリフェッチ要求4416への応答の第2のタイプ、すなわちプリフェッチ拒否応答4418の形式の実施形態も示す。1つの実施形態において、プリフェッチ拒否応答4418は、プリフェッチ要求4416により要求されるアクションが拒否されたとき(すなわち、アボートされたとき)、プリフェッチ要求4416に応答して、プリフェッチ要求4416を受け取った宛先から送られる。1つの実施形態において、プリフェッチ拒否応答4418は、少なくとも3つの情報フィールド:すなわち、プリフェッチ拒否情報フィールド4410、タグ情報フィールド4411、及びCRC情報フィールド4412からなる。1つの実施形態において、プリフェッチ拒否情報フィールド4410は、プリフェッチ応答4418をプリフェッチ拒否応答として識別し、タグ情報フィールド4411は、プリフェッチ拒否応答4418を、タグ情報フィールド4411に等しいタグ情報フィールド4402を有するプリフェッチ要求4416への応答として識別し、CRC情報フィールド4409は、プリフェッチ拒否応答4418における他の情報フィールドの値のビット・バターンから計算され、プリフェッチ拒否応答4418の送信元からプリフェッチ拒否応答4418の宛先へのプリフェッチ拒否応答4418の転送の際に生じたエラーを検出するために使用される値を含む。
【0200】
図7はまた、プリフェッチ要求4416への応答の第3のタイプ、すなわちプリフェッチ据え置き応答4419の形式の実施形態も示す。1つの実施形態において、プリフェッチ据え置き応答4419は、プリフェッチ要求4416により要求されるアクションが据え置かれる又は遅延されるとき(例えば、宛先においてキューイングされる)、プリフェッチ要求4416に応答して、プリフェッチ要求4416を受け取った宛先から送られる。1つの実施形態において、プリフェッチ据え置き応答4419は、少なくとも3つの情報フィールド:すなわちプリフェッチ据え置き情報フィールド4413、タグ情報フィールド4414、及びCRC情報フィールド4415からなる。1つの実施形態において、プリフェッチ据え置き情報フィールド4413は、プリフェッチ据え置き応答4419をプリフェッチ据え置き応答として識別し、タグ情報フィールド4414は、プリフェッチ据え置き応答4419を、タグ情報フィールド4414に等しいタグ情報フィールド4402を有するプリフェッチ要求4416への応答として識別し、CRC情報フィールド4414は、プリフェッチ据え置き応答4419における他の情報フィールドの値のビット・バターンから計算され、プリフェッチ据え置き応答4419の送信元からプリフェッチ据え置き応答4419の宛先へのプリフェッチ据え置き応答4419の転送の際に生じたエラーを検出するために使用される値を含む。
【0201】
1つの実施形態において、プリフェッチ・プロトコルは、各々がパックされたプリフェッチ要求において指定された関連したアドレスを有する複数のプリフェッチ操作からなるパックされたプリフェッチ要求を含む。1つの実施形態において、パックされたプリフェッチ要求における全てのプリフェッチ操作は、同じタイプのパックされたプリフェッチ要求のものである。1つの実施形態において、パックされたプリフェッチ要求は、データの排他的所有権に対する複数のプリフェッチ要求又はデータの共有所有権に対する複数のプリフェッチ要求のいずれかを含むこと、又はそのどちらも含まないことがある。1つの実施形態において、パックされたプリフェッチ要求における各プリフェッチ操作は、パックされたプリフェッチ要求内に含まれる別のプリフェッチ操作のタイプとは独立しているプリフェッチ操作のタイプ(例えば、排他的所有権についてのプリフェッチ又は共有所有権についてのプリフェッチ)とすることができる。
【0202】
1つの実施形態において、パックされたプリフェッチ要求内の1つ又は複数のアドレスは、アドレスのシーケンスであり、各アドレスは、アドレスと関連した一意のインデックスを有する。1つの実施形態において、アドレスのインデックスの値(すなわち、アドレス・インデックス)は、パックされたプリフェッチ要求内のアドレス・シーケンスにおけるアドレスの位置の値をとる。1つの実施形態において、パックされたプリフェッチ要求は、パックされたプリフェッチ要求を識別するパックされたプリフェッチ要求タグを含む。1つの実施形態において、パックされたプリフェッチ要求タグは、パックされたプリフェッチ要求についての一意のタグと、アドレス・シーケンス内の各アドレスについての一意のタグとからなる。
【0203】
1つの実施形態において、プリフェッチ・プロトコルにおけるパックされたプリフェッチ要求への応答、(例えば、データに対する応答、プリフェッチ操作の拒否を示す応答、又は操作が据え置かれたことを示す応答)が、パックされたプリフェッチ要求内に含まれるプリフェッチ操作と関連付けられる。応答は、パックされたプリフェッチ要求のタグと、応答が関連付けられるパックされたプリフェッチ要求内のプリフェッチ操作のアドレスの識別子(すなわち、アドレス識別子)とを含む。パックされたプリフェッチ要求は、1つ又は複数のプリフェッチ操作を組み込むことができるので、パックされたプリフェッチ要求内の操作への応答は、応答が関連付けられる個々のプリフェッチ操作を識別する必要がある。1つの実施形態において、アドレス識別子は、パックされたプリフェッチ要求内の1つ又は複数のアドレス・シーケンスにおけるアドレスのインデックスである。1つの実施形態において、アドレス識別子は、パックされたプリフェッチ要求のパックされたプリフェッチ・タグ内に含まれるアドレスについての一意のタグである。
【0204】
図8は、パックされたプリフェッチ要求5501の形式の実施形態、及びパックされたプリフェッチ要求5501への3つのタイプの応答の各々:すなわち、パックされたプリフェッチ応答5502(パックされたプリフェッチ要求5501内のプリフェッチ操作が実行されたことを示す)、パックされたプリフェッチ拒否応答5503(パックされたプリフェッチ要求5501内のプリフェッチ操作が拒否されたことを示す)、及びパックされたプリフェッチ据え置き応答5504(パックされたプリフェッチ要求5501内のプリフェッチ操作が据え置かれたことを示す)についての形式の実施形態を示す。1つの実施形態において、パックされたプリフェッチ要求5501は、少なくとも5つの情報フィールド:すなわち、パックされたプリフェッチ情報フィールド5505、パックされたプリフェッチ・タグ情報フィールド5506、排他的又は共有情報フィールド5507、アドレス情報フィールド5508、及びCRC(周期的冗長検査)情報フィールド5509からなる。1つの実施形態において、パックされたプリフェッチ情報フィールド5505は、パックされたプリフェッチ要求5501をパックされたプリフェッチ要求として識別し、パックされたプリフェッチ・タグ情報フィールド5506は、パックされたプリフェッチ要求5501の特定のインスタンスを識別し、排他的又は共有情報フィールド5507は、そのプリフェッチ要求5501が排他的アクセスに対するプリフェッチ要求であるか又は共有アクセスに対するプリフェッチであるかのいずれかであることを指定し、アドレス情報フィールド5508は、パックされたプリフェッチ要求5501により要求されるデータの1つ又は複数のアドレスを指定し、CRC情報フィールド5509は、パックされたプリフェッチ要求5509における他の情報フィールドの値のビット・バターンから計算され、プリフェッチ要求5509の送信元からパックされたプリフェッチ要求5509の宛先へのパックされたプリフェッチ要求5509の転送の際に生じたエラーを検出するために使用される値を含む。
【0205】
図8はまた、パックされたプリフェッチ5501におけるプリフェッチ操作への応答である、パックされたプリフェッチ応答5502の形式の実施形態も示す。1つの実施形態において、パックされたプリフェッチ応答5502は、パックされたプリフェッチ要求5501におけるプリフェッチ操作が実行されたとき、パックされたプリフェッチ要求5501に応答して、パックされたプリフェッチ要求5501を受け取った宛先から送られる。1つの実施形態において、パックされたプリフェッチ応答5502は、少なくとも4つの情報フィールド:すなわち、パックされたプリフェッチ応答情報フィールド5513、操作タグ情報フィールド5510、データ情報フィールド5514、及びCRC情報フィールド5515からなる。1つの実施形態において、パックされたプリフェッチ応答5502は、パックされたプリフェッチ応答5502をパックされたプリフェッチ応答として識別し、操作タグ情報フィールド5510は、パックされたプリフェッチ応答5502を、パックされたプリフェッチ・タグ5506を有するパックされたプリフェッチ要求5501内のプリフェッチ操作への応答として識別し、データ情報フィールド5514は、パックされたプリフェッチ5501の一意のインスタンスを識別する一意のタグと、パックされたプリフェッチ5501の一意のインスタンス内の一意のプリフェッチ操作を識別するアドレス識別子とを含む操作タグ情報フィールド5510を有するプリフェッチ要求5502におけるプリフェッチ操作により要求されるデータであるデータを含む。CRC情報フィールド5515は、パックされたプリフェッチ応答5502における他の情報フィールドの値のビット・バターンから計算され、パックされたプリフェッチ応答5502の送信元からパックされたプリフェッチ応答5502の宛先へのパックされたプリフェッチ応答5502の転送の際に生じたエラーを検出するために使用される値を含む。1つの実施形態において、操作タグ5510内のアドレス識別子は、パックされたプリフェッチ・タグ情報フィールド5506内に含まれる一意のアドレス・タグである。1つの実施形態において、操作タグ5510内のアドレス識別子は、アドレス情報フィールド5508内に含まれるアドレスのインデックスである。
【0206】
図8はまた、パックされたプリフェッチ要求5501への応答の第2のタイプ、すなわち、パックされたプリフェッチ拒否応答5503の形式の実施形態も示す。1つの実施形態において、パックされたプリフェッチ拒否応答5503は、パックされたプリフェッチ要求5501内に含まれるプリフェッチ操作が拒否されたとき(すなわち、アボートされたとき)、パックされたプリフェッチ要求5501内のプリフェッチ操作に応答して、パックされたプリフェッチ要求5501を受け取った宛先から送られる。1つの実施形態において、パックされたプリフェッチ拒否応答5503は、少なくとも3つの情報フィールド:すなわち、パックされたプリフェッチ拒否応答情報フィールド5516、操作タグ情報フィールド5511、及びCRC情報フィールド5517からなる。1つの実施形態において、パックされたプリフェッチ拒否情報フィールド5516は、プリフェッチ拒否応答5503をプリフェッチ拒否応答として識別し、操作タグ情報フィールド5511は、パックされたプリフェッチ要求5501の一意のインスタンスを識別する一意のタグと、一意のプリフェッチ操作を識別するアドレス識別子とを含む操作タグ情報フィールド5511を有した、パックされたプリフェッチ拒否応答5503を、パックされたプリフェッチ要求5501内に含まれるプリフェッチ操作への応答として識別し、CRC情報フィールド5517は、パックされたプリフェッチ拒否応答5503における他の情報フィールドの値のビット・バターンから計算され、パックされたプリフェッチ拒否応答5503の送信元からパックされたプリフェッチ拒否応答5503の宛先へのパックされたプリフェッチ拒否応答5503の転送の際に生じたエラーを検出するために使用される値を含む。1つの実施形態において、操作タグ5511内のアドレス識別子は、パックされたプリフェッチ・タグ情報フィールド5506内に含まれる一意のアドレス・タグである。1つの実施形態において、操作タグ5511内のアドレス識別子は、アドレス情報フィールド5508内に含まれるアドレスのインデックスである。
【0207】
図8はまた、パックされたプリフェッチ要求5501への応答の第3のタイプ、すなわちパックされたプリフェッチ据え置き応答5504の形式の実施形態も示す。1つの実施形態において、パックされたプリフェッチ据え置き要求5504は、パックされたプリフェッチ要求5501内に含まれるプリフェッチ操作が据え置かれるとき(例えば、ローカル・プロセッサ又は遠隔プロセッサにおける指定された条件が満たされるまで、遅延された実行についてキューイングされる又は遅延される)、パックされたプリフェッチ要求5501におけるプリフェッチ操作に応答して、パックされたプリフェッチ要求5501を受け取った宛先から送られる。1つの実施形態において、パックされたプリフェッチ据え置き応答5504は、少なくとも3つのフィールド:すなわち、パックされたプリフェッチ据え置き応答情報フィールド5518、操作タグ情報フィールド5512、及びCRC情報フィールド5519からなる。1つの実施形態において、パックされたプリフェッチ据え置き情報フィールド5518は、プリフェッチ据え置き応答5504をプリフェッチ据え置き応答として識別し、操作タグ情報フィールド5512は、パックされたプリフェッチ据え置き応答5504を、パックされたプリフェッチ要求5501の一意のインスタンスを識別する一意のタグと、一意のプリフェッチ操作を識別するアドレス識別子とを含む操作タグ情報フィールド5512を有した、パックされたプリフェッチ要求5501内に含まれるプリフェッチ操作への応答として識別し、CRC情報フィールド5519は、パックされたプリフェッチ据え置き応答5504における他の情報フィールドの値のビットパターンから計算され、パックされたプリフェッチ据え置き応答5504の送信元からパックされたプリフェッチ据え置き応答5504の宛先へのプリフェッチ拒否応答5503の転送の際に生じたエラーを検出するために使用される値を含む。1つの実施形態において、操作タグ5511内のアドレス識別子は、パックされたプリフェッチ・タグ情報フィールド5506内に含まれる一意のアドレス・タグである。1つの実施形態において、操作タグ5511内のアドレス識別子は、アドレス情報フィールド5508内に含まれるアドレスのインデックスである。
【0208】
他の実施形態において、プリフェッチ・プロトコルは、プリフェッチ要求4416及びパックされたプリフェッチ要求5501に対する付加的な応答を含む。1つの実施形態において、プリフェッチ操作の送信元と関連付けられたキャッシュは、キャッシュがプリフェッチ・データとしてプリフェッチ操作から受け取るデータをマーク付けする。1つの実施形態において、キャッシュは、(例えば、新しいデータを適合させるためにどのデータを排出する(evict)かを判断するために)キャッシュのメモリ・スペースの管理において、キャッシュが収容するプリフェッチ・データについての情報を使用する。
【0209】
図9は、1つの実施形態における、トランザクション・メモリ・システムA 1104の動作を示すフローチャートである。1つの実施形態において、トランザクション・メモリ・システムA 1104は、非プリフェッチ操作バス2210又はプリフェッチ操作バス2209におけるメモリ操作に対するプロトコル要求を受け取る(ステップ301)。アボート・マネージャ2207は、メモリ操作が読み取りであるかどうか、すなわち読み取りタイプのメモリ操作であるかどうかを判断する(決定ステップ302)。メモリ操作が読み取りである場合(決定ステップ302、YES分岐)、アボート・マネージャ2207は、読み取りのアドレスがトランザクションの書き込みセット2205内のアドレスと合致するかどうかを判断する(決定ステップ303)。読み取りのアドレスがトランザクションの書き込みセット2205内のアドレスと合致しない場合(決定ステップ303、NO分岐)、読み取り操作が行われ、遠隔要求に関して、図7の例示的プロトコルに従って、アボート・マネージャ2207により、応答が送られ(ステップ304)、プロセスが終了する(ステップ313)。
【0210】
読み取りのアドレスがトランザクションの書き込みセット2205内のアドレスと合致する場合(決定ステップ303、YES分岐)、アボート・マネージャ2207は、読み取りがプリフェッチ操作であるかどうかを判断する(決定ステップ305)。読み取りがプリフェッチ操作である場合(決定ステップ305、YES分岐)、読み取りプリフェッチは、プリフェッチ・マネージャ2208により管理され(ステップ312)、プロセスは終了する(ステップ313)。読み取りがプリフェッチ操作でない場合(決定ステップ305、NO分岐)、読み取りのアドレスと関連付けられたトランザクションはアボートされ(ステップ307)、プロセスは終了する(ステップ313)。
【0211】
メモリ操作が読み取りでない場合(決定ステップ302、NO分岐)、アボート・マネージャ2207は、メモリ操作が書き込み操作であると判断し、書き込み操作のアドレスがトランザクションの読み取りセット2206内のアドレスと合致するかどうかを判断する(決定ステップ308)。書き込み操作のアドレスがトランザクションの読み取りセット2206内のアドレスと合致しない場合(決定ステップ308、NO分岐)、アボート・マネージャ2207は、書き込み操作のアドレスがトランザクションの書き込みセット2205内のアドレスと合致するかどうかを判断する(決定ステップ309)。書き込み操作のアドレスがトランザクションの書き込みセット2205内のアドレスと合致しない場合(決定ステップ309、NO分岐)書き込み操作が実行され(すなわち、ローカル書き込み要求に対して書き込みが行われ、書き込み要求が遠隔プロセッサ若しくはノードから発生した場合、適切なキャッシュラインが、排他的所有権を有した状態で遠隔プロセッサに転送され(ステップ314)、プロセッサは終了する(ステップ313)。書き込み操作のアドレスがトランザクション・メモリ操作の書き込みセット2205内のアドレスと合致する場合(決定ステップ309、YES分岐)、アボート・マネージャ2207は、書き込み操作がプリフェッチ操作であるかどうかを判断する(決定ステップ310)。書き込み操作のアドレスがトランザクションの読み取りセット2206内のアドレスと合致する場合(決定ステップ308、YES分岐)、アボート・マネージャ2207は、書き込み操作がプリフェッチ操作であるかどうかを判断する(決定ステップ310)。アボート・マネージャ2207が、書き込み操作がプリフェッチ操作ではないと判断する場合(ステップ310、NO分岐)、書き込み操作のアドレスと関連付けられるトランザクションは、アボート・マネージャ2207によりアボートされ(ステップ311)、プロセスは終了する(ステップ313)。書き込み操作が、書き込み操作についてのプリフェッチであると判断される場合(決定ステップ310、YES分岐)、書き込みプリフェッチは、プリフェッチ・マネージャ2208により管理され(ステップ312)、プロセスは終了する(ステップ313)。
【0212】
図10は、図9のプリフェッチ管理ステップ312内で行われるプリフェッチ操作を管理するための、プリフェッチ・マネージャ2208の主要な動作を示すフローチャートである。プリフェッチ・マネージャ2208内のローカル・遠隔2216は、プリフェッチ操作がローカルであるか又は遠隔であるかを判断する(決定ステップ401)。プリフェッチ操作がローカルである場合(決定ステップ401、YES分岐)、プリフェッチ操作が行われ(ステップ403)、プロセスは終了する(ステップ419)。(少なくとも1つの実施形態において、要求者及び被要求者が同じキャッシュにアクセスしているときなど、プリフェッチの実行は、さらなるアクションを伴わない成功裏のプリフェッチを指し示すことを含む。)ローカル・遠隔2216が、プリフェッチ操作が遠隔であると判断した場合(決定ステップ401、NO分岐)、キュー・マネージャ2214は、プリフェッチ操作をプリフェッチ・キュー2213に挿入すべきかどうかを判断する(決定ステップ420)。キュー・マネージャ2214が、プリフェッチ操作をプリフェッチ・キュー2213内に挿入すべきでないと判断した場合(ステップ420、NO分岐)、プリフェッチ・マネージャ2208は、プリフェッチ操作を廃棄する(ステップ413)。プリフェッチ・マネージャ2208は、プリフェッチ操作が廃棄されたことを、プリフェッチ操作の発信元に通知すべきかどうかを判断する(決定ステップ414)。プリフェッチ・マネージャ2208が、プリフェッチ操作が廃棄されたことを、プリフェッチ操作の送信元に通知すべきであると判断した場合(決定ステップ414、YES分岐)、プリフェッチ・マネージャ2208により、プリフェッチ操作の送信元に通知され(ステップ415)、プリフェッチ・マネージャ2208における操作は完了する(ステップ419)。プリフェッチ・マネージャ2208が、プリフェッチ操作が廃棄されたことを、プリフェッチ操作の送信元に通知すべきではないと判断した場合(決定ステップ414、NO分岐)、プリフェッチ・マネージャ2208における操作は完了する(ステップ419)。
【0213】
キュー・マネージャ2214が、プリフェッチ操作をプリフェッチ・キュー2213に挿入すべきであると判断した場合(決定ステップ420、YES分岐)、キュー・マネージャ2214は、プリフェッチ・キュー2214が一杯であるかどうかを判断する(決定ステップ421)。プリフェッチ・キュー2214が一杯でない場合(決定ステップ421、NO分岐)、キュー・マネージャ2214は、プリフェッチ操作をプリフェッチ・キュー2213に挿入する(ステップ416)。プリフェッチ・マネージャ2208は、プリフェッチ操作がキューイングされたことを、プリフェッチ操作の送信元に知らせるかどうかを判断する(決定ステップ417)。プリフェッチ・マネージャ2208が、プリフェッチ操作の送信元に通知すべきであると判断した場合(決定ステップ417、YES分岐)、プリフェッチ・マネージャ2208は、プリフェッチ操作の送信元に通知し(ステップ418)、その後、プロセスは完了する(ステップ419)。プリフェッチ・マネージャ2208が、プリフェッチ操作の送信元に通知すべきではないと判断した場合(決定ステップ417、NO分岐)、プロセスは完了する(ステップ419)。
【0214】
キュー・マネージャ2214が、プリフェッチ・キュー2213が一杯であるかどうかを判断する場合(決定ステップ421、YES分岐)、キュー・マネージャ2214は、プリフェッチ・キュー2213からエントリを排出すべきかどうかを判断する(決定ステップ403)。キュー・マネージャ2214が、エントリを排出すべきであると判断した場合(決定ステップ403、YES分岐)、キュー・マネージャ2214は、プリフェッチ・キュー2215からエントリを排出する(ステップ407)。プリフェッチ・マネージャ2208は、プリフェッチ操作の排出(eviction)を、排出されたプリフェッチ操作の送信元に通知すべきかどうかを判断する(決定ステップ408)。プリフェッチ・マネージャ2208が、排出されたプリフェッチ操作の送信元に通知すべきであると判断した場合(決定ステップ408、YES分岐)、プリフェッチ・マネージャ2208により、排出されたプリフェッチ操作の送信元に、排出を通知し(ステップ409)、プリフェッチ・マネージャ2208により、新しいプリフェッチ操作が、プリフェッチ・キュー2213にキューイングされる(ステップ410)。プリフェッチ・マネージャ2208が、排出されたプリフェッチ操作の送信元に通知すべきではないと判断した場合(決定ステップ408、NO分岐)、プリフェッチ・マネージャ2208により、新しいプリフェッチ操作が、プリフェッチ・キュー2213にキューイングされる(ステップ410)。プリフェッチ・マネージャ2208は、新しいプリフェッチ操作のキューイングを、新しいプリフェッチ操作の送信元に通知すべきかどうかを判断する(決定ステップ411)。プリフェッチ・マネージャ2208が、新しいプリフェッチ操作のキューイングを、新しいプリフェッチ操作の送信元に通知すべきであると判断した場合(決定ステップ411、YES分岐)、プリフェッチ・マネージャ2208により、新しいプリフェッチ操作の送信元に通知し(ステップ410)、これにより、新しいプリフェッチ操作がキューイングされたことが示され(ステップ412)、プロセスは完了する(ステップ419)。プリフェッチ・マネージャ2208が、新しいプリフェッチ操作の送信元に通知すべきでないと判断した場合(決定ステップ411、NO分岐)、プロセスは完了する(ステップ419)。
【0215】
キュー・マネージャ2214が、プリフェッチ操作を排出すべきではないと判断した場合(決定ステップ403、NO分岐)、プリフェッチ・マネージャ2208により、新しいプリフェッチ操作は廃棄される(ステップ404)。プリフェッチ・マネージャ2208は、プリフェッチ操作の廃棄を、廃棄されたプリフェッチ操作の送信元に通知すべきかどうかを判断する(決定ステップ405)。プリフェッチ・マネージャ2208が、プリフェッチ操作が廃棄されたことを、廃棄されたプリフェッチ操作の送信元に通知すべきであると判断した場合(決定ステップ405、YES分岐)、プリフェッチ・マネージャ2208による廃棄を、廃棄されたプリフェッチ操作の送信元に通知し(ステップ406)、プロセスが完了する(ステップ419)。プリフェッチ・マネージャ2208が、プリフェッチ操作の廃棄を、排出されたプリフェッチ操作の送信元に通知すべきではないと判断した場合(決定ステップ405、NO分岐)、プロセスは完了する(ステップ419)。
【0216】
キュー・マネージャ2214が、プリフェッチ・キュー2213が一杯ではないと判断した場合(決定ステップ402、NO分岐)、キュー・マネージャ2214により、プリフェッチ操作がキューイングされ(ステップ416)、プリフェッチ・マネージャ2208は、プリフェッチ操作がキューイングされたことを、プリフェッチ操作の発信元に通知すべきかどうかを判断する(決定ステップ417)。プリフェッチ・マネージャ2208が、プリフェッチ操作がキューイングされたことを、プリフェッチ操作の発信元に通知すべきであると判断した場合(決定ステップ417、YES分岐)、プリフェッチ・マネージャ2208は、プリフェッチ操作の送信元に通知し、それにより、プリフェッチ操作がキューイングされたことが示され(ステップ418)、プロセスは完了する(ステップ419)。プリフェッチ・マネージャ2208が、プリフェッチ操作がキューイングされたことを、プリフェッチ操作の発信元に通知すべきではないと判断した場合(決定ステップ417、NO)分岐、プロセスは完了する(ステップ419)。
【0217】
一実施形態の一態様によると、成功裏の完了又はトランザクション・アボートによって、競合するトランザクションが終了したとき、キューイングされたプリフェッチが実行される。
【0218】
プリフェッチ・マネージャ2208の少なくとも1つの実施形態において、プリフェッチ要求の廃棄、キューイング、排出等に応答して通知を行うかどうかの判断は、プリフェッチ・マネージャ2208の設計時に設定され、プリフェッチ・マネージャ2208の論理に組み込まれる。一実施形態において、こうした判断は、1つ又は複数の制御値に対応し、これは、ソフトウェア・書き込み可能制御レジスタ、ファームウェア・書き込み可能制御レジスタなどの種々の方法を用いて構成することができ、制御値は、例えば、読み出し専用ストレージ(ブートEPROMなど)から、又は他の可逆的若しくは不可逆的手段によって、ブート時間に構成される(例えば、電気接続を制御可能に中断するためのヒューズ又は他の手段を用いて、チップ製造時間に電気接続を切断することによって。そうした接続の有無は選択を示す)。
【0219】
図11は、コンピュータ・システム1101を含むシステムの一例であるコンピュータ・システム800を示す。プロセッサ804及びキャッシュ816は、実質的に、プロセッサA 1102、キャッシュ・システムA 1103、プロセッサB 1106及びキャッシュ・システムB 1107に相当する。コンピュータ・システム800は、コンピュータ・プロセッサ804、メモリ806、永続ストレージ808、通信ユニット810、及び入力/出力(I/O)インターフェース812の間の通信を提供する通信ファブリック802を含む。通信ファブリック802は、プロセッサ(マイクロプロセッサ、通信及びネットワーク・プロセッサなど)、システム・メモリ、周辺機器、及びシステム内の他のいずれかのハードウェア・コンポーネントの間で、データ及び/又は制御情報を送るように設計されたいずれかのアーキテクチャを有するように実装することができる。例えば、通信ファブリック802は、1つ又は複数のバスを有するように実装することができる。
【0220】
メモリ806及び永続ストレージ808は、コンピュータ可読ストレージ媒体である。この実施形態において、メモリ806は、ランダム・アクセス・メモリ(RAM)を含む。一般に、メモリ806は、任意の適切な揮発性又は不揮発性コンピュータ可読ストレージ媒体を含むことができる。キャッシュ816は、メモリ806からの最近アクセスしたデータ及びアクセスしたデータに近いデータを保持することにより、プロセッサ804の性能を高める高速メモリである。
【0221】
本発明の実施形態を実施するのに用いられるプログラム命令及びデータは、キャッシュ816及びメモリ806の1つ又は複数のメモリを介して、それぞれのプロセッサ804の1つ又は複数により実行するために永続ストレージ808に格納することができる。1つの実施形態において、永続ストレージ808は、磁気ハードディスク・ドライブを含む。磁気ハードディスク・ドライブの代替として又はこれに加えて、永続ストレージ808は、ソリッドステート・ハードドライブ、半導体ストレージ・デバイス、読み出し専用メモリ(ROM)、消去可能なプログラム可能読み出し専用メモリ(EPROM)、フラッシュメモリ、又はプログラム命令又はデジタル情報を格納することができる他のいずれかのコンポーネント可読ストレージ媒体を含むことができる。
【0222】
永続ストレージ808により使用される媒体は、取り外し可能であってもよい。例えば、永続ストレージ808に対して、取り外し可能ハードドライブを使用することができる。他の例として、光及び磁気ディスク、サムドライブ、及び同じく永続ストレージ808の部分である別のコンピュータ可読ストレージ媒体への転送のためにドライブに挿入されるスマートカードが挙げられる。
【0223】
通信ユニット810は、これらの例において、他のデータ処理システム又はデバイスとの通信を提供する。これらの例において、通信ユニット810は、1つ又は複数のネットワーク・インターフェース・カードを含む。通信ユニット810は、物理及び無線通信リンクのいずれか又は両方を用いて通信を提供することができる。本発明の実施形態を実施するために使用されるプログラム命令及びデータを、通信ユニット810を通じて永続ストレージ808にダウンロードすることができる。
【0224】
I/Oインターフェース812は、各コンピュータ・システムに接続することができる他のデバイスとのデータの入出力を可能にする。例えば、I/Oインターフェース812は、キーボード、キーパッド、タッチスクリーン、及び/又は他の何らかの適切な入力デバイスのような外部デバイス818への接続を提供することができる。外部デバイス818はまた、例えば、サムドライブ、携帯用光又は磁気ディスク、及びメモリカードのような携帯用コンピュータ可読ストレージ媒体を含むこともできる。本発明の実施形態を実施するために用いられるソフトウェア及びデータは、そうした携帯用コンピュータ可読ストレージ媒体上に格納することができ、I/Oインターフェース812を介して永続ストレージ808にロードすることができる。I/Oインターフェース812はまた、ディスプレイ820にも接続される。
【0225】
ディスプレイ820は、データをユーザに表示するための機構を提供し、例えば、コンピュータ・モニタにすることができる。
【0226】
本明細書で説明されるプログラムは、本発明の特定の実施形態において実施されるアプリケーションに基づいて特定される。しかしながら、本明細書でのいずれの特定のプログラムの命名も、便宜上用いられるにすぎず、従って、本発明は、そうした命令により特定及び/又は暗示されるいずれかの特定のアプリケーションのみに限定されるものではないことを認識されたい。
【0227】
本発明は、システム、方法、及び/又はコンピュータ・プログラム製品とすることができる。コンピュータ・プログラム製品は、プロセッサに、本発明の態様を実行させるための、コンピュータ可読プログラム命令をそこに有するコンピュータ可読ストレージ媒体(単数又は複数)を含むことができる。
【0228】
コンピュータ可読ストレージ媒体は、命令実行デバイスにより使用される命令を保持し、格納することができる有形デバイスとすることができる。コンピュータ可読ストレージ媒体は、例えば、これらに限定されるものではないが、電子記憶装置、磁気記憶装置、光記憶装置、電磁気記憶装置、半導体記憶装置、又は上記のいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例の非網羅的なリストとして、以下のもの:即ち、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、消去可能なプログラム可能読み出し専用メモリ(EPROM又はフラッシュメモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル、コンパクト・ディスク読み出し専用メモリ(CD−ROM)、デジタル多用途ディスク(DVD)、メモリ・スティック、フロッピー・ディスク、パンチカード若しくはそこに命令が記録された溝内の隆起構造などの機械的符号化デバイス、及び上記のいずれかの適切な組み合わせが挙げられる。本明細書で使用される場合、コンピュータ可読ストレージ媒体は、電波又は他の自由に伝搬する電磁波、導波路若しくは他の伝送媒体を通じて伝搬する電磁波(例えば、光ファイバ・ケーブルを通る光パルス)、又は配線を通じて伝送される電気信号のような、一時的信号それ自体として解釈されるべきではない。
【0229】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピュータピューティング/処理デバイスに、又は、例えばインターネット、ローカル・エリア・ネットワーク、広域ネットワーク、及び/又は無線ネットワークなどのネットワークを介して外部コンピュータ若しくは外部ストレージ・デバイスにダウンロードすることができる。ネットワークは、銅製伝送ケーブル、光伝送ケーブル、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、及び/又はエッジ・サーバを含むことができる。各コンピューティング/処理デバイス内のネットワーク・アダプタ・カード又はネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受け取り、それぞれのコンピューティング/処理デバイス内のコンピュータ可読ストレージ媒体内に格納するためにコンピュータ可読プログラム命令を転送する。
【0230】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、マシン命令、マシン依存命令、ミリコード、ファームウェア命令、状態設定データ、又はSmalltalk、C++等などのオブジェクト指向型プログラミング言語、及び、「C」プログラミング言語、若しくは同様のプログラミング言語のような従来の手続き型プログラミング言語を含む1つ又は複数のプログラミング言語のいずれかの組み合わせで書かれたソース・コード若しくはオブジェクト・コードのいずれかとすることができる。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で実行される場合もあり、スタンドアロンのソフトウェア・パッケージとして、一部がユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。最後のシナリオにおいては、遠隔コンピュータは、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある(例えば、インターネット・サービス・プロバイダを用いたインターネットを通じて)。幾つかの実施形態において、例えば、プログラム可能論理回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、又はプログラム可能論理アレイ(PLA)を含む電子回路は、本発明の態様を実施するために、コンピュータ可読プログラム命令の状態情報を用いて電子回路を個人化することにより、コンピュータ可読プログラム命令を実行することができる。
【0231】
本発明の態様は、本発明の実施形態による方法、装置(システム)及びコンピュータ・プログラム製品のフローチャート図及び/又はブロック図を参照して、本明細書で説明される。フローチャート図及び/又はブロック図の各ブロック、並びにフローチャート図及び/又はブロック図内のブロックの組み合わせは、コンピュータ可読プログラム命令によって実装できることが理解されるであろう。
【0232】
これらのコンピュータ可読プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実装するための手段を作り出すようにすることができる。これらのコンピュータ可読プログラム命令を、コンピュータ、プログラム可能データ処理装置、及び/又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、内部に命令が格納されたコンピュータ可読ストレージ媒体が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実装する命令を含む製品を製造するようにすることもできる。
【0233】
コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実施のプロセスを生成し、それにより、コンピュータ又は他のプログラム可能装置、又は他のデバイス上で実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実行するためのプロセスを提供するようにもできる。
【0234】
図面内のフローチャート及びブロック図は、本発明の種々の実施形態によるシステム、方法及びコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能及び動作を示す。この点に関して、フローチャート又はブロック図内の各ブロックは、指定された論理機能を実装するための1つ又は複数の実行可能命令を含むモジュール、セグメント、又は命令の部分を表すことができる。幾つかの代替的な実装において、ブロック内に記載された機能は、図面内に記載された順序とは異なる順序で行われ得ることもある。例えば、連続して示された2つのブロックが、関与する機能に応じて、実際には、実質的に同時に実行されることもあり、又は、ときにはブロックが逆順に実行されることもある。また、ブロック図及び/又はフローチャート図の各ブロック、並びにブロック図及び/又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を行う専用ハードウェア・ベースのシステムによって、又は専用ハードウェアとコンピュータ命令との組み合わせによって実装できることにも留意されたい。
【0235】
本発明の種々の実施形態の説明は、例証のために提示されたものであり、網羅的であること又は開示された実施形態に限定することを意図したものではない。本発明の範囲及び趣旨から逸脱しない多くの修正及び変形が、当業者には明らかとなるであろう。本明細書で使用される用語は、実施形態の原理、実際的用途、及び市場に見出される技術に優る技術的改善点を最も良く説明するため、そして、当業者が本明細書に開示される実施形態を理解できるように、選択された。
【0236】
本明細書で用いられる用語は、特定の実施形態のみを説明するためのものであり、本発明を限定することを意図したものではない。本明細書で用いられる場合、単数形「1つの(a)」、「1つの(an)」及び「その(the)」は、文脈が明らかにそうでないことを示さない限り、複数形も同様に含むことを意図したものである。
【0237】
それぞれの図は、種々の段階における本発明の方法及び機能を示すことに加えて、1つ又は複数のデバイス及び構造体によって、全体的に又は部分的に実施されるような方法の論理も示す。こうしたデバイス及び構造体は、1つ又は複数の非一時的ストア及び1つ又は複数のスレッド特有のトランザクション・ストアを、ストア・キャッシュのストア・バッファ内の1つ又は複数のキャッシュライン・テンプレートに併合する方法を実装する(すなわち、プロセスの実行を可能にするように接続される、抵抗器、キャパシタ、トランジスタ等の1つ又は複数のコンポーネントを含むように)構成される。言い換えれば、図及びその対応する説明を参照して本明細書に説明される方法及びプロセスを実施するように構成された、1つ又は複数のコンピュータ・ハードウェア・デバイスを生成することができる。
【0238】
本発明の種々の実施形態の説明は、例証のために提示されたものであり、網羅的であること又は開示された実施形態に限定することを意図したものではない。本発明の範囲及び趣旨から逸脱しない多くの修正及び変形が、当業者には明らかとなるであろう。本明細書で使用される用語は、実施形態の原理、実際的用途、及び市場に見出される技術に優る技術的改善点を最も良く説明するために、そして、当業者が本明細書に開示される実施形態を理解できるように、選択され、説明された。
【0239】
本発明の実施形態は、これらに限定されるものではないが、高度なセンサ、メモリ/データ・ストレージ、半導体、マイクロプロセッサ及び他のアプリケーションを含む、種々の電子技術応用に用いることができる。
【0240】
集積回路(IC)チップなどの結果として得られるデバイス及び構造体は、製造者によって、生ウェハの形態(つまり、複数のパッケージ化されていないチップを有する単一のウェハ)、裸のダイ、又はパッケージ化された形態で配布することができる。後者の場合、チップは、単一のチップ・パッケージ(マザーボード又は他の高レベル・キャリアに取り付けられたリード線を有するプラスチック・キャリアなど)、又は、マルチチップ・パッケージ(表面相互接続又は埋込み相互接続のいずれか又は両方を有するセラミック・キャリアなど)内に取付けられる。いずれの場合にも、チップは次に、(a)マザーボードなどの中間製品又は(b)最終製品の一部分として、他のチップ、別個の回路素子、及び/又は他の信号処理デバイスと集積化される。最終製品は、玩具又は他の低価格用途から、ディスプレイ、キーボード又は他の入力デバイス、及び中央処理装置を有する高性能のコンピュータ製品にまでわたる、集積回路チップを含む任意の製品とすることができる。
【0241】
以下の特許請求の範囲における全ての「手段又はステップと機能との組み合わせ(ミーンズ又はステップ・プラス・ファンクション)」要素の対応する構造、材料、動作、及び均等物は、その機能を、明確に特許請求される他の特許請求された要素との組み合わせで実行するためのあらゆる構造、材料、又は動作を含むことが意図されている。本発明の説明は、例証及び説明を目的として提示されたものであり、網羅的であること又は本発明を開示された形態に限定することを意図したものではない。本発明の範囲及び趣旨から逸脱しない多くの修正及び変形が当業者には明らかとなるであろう。実施形態は、本発明の原理及び実際的用途を最も良く説明するために、そして、当業者が、企図した特定の用途に適した種々の修正を伴う種々の実施形態に関して本発明を理解できるように、選択され、説明された。
【0242】
本発明が、限られた数の実施形態のみに関連して詳細に説明されたが、本発明は、こうした開示される実施形態に限定されないことを容易に理解すべきである。むしろ、本発明は、これまで説明されていないが、本発明の趣旨及び範囲に相応するいずれの数の変形、代替、置換、又は均等な構成を組み込むように修正することもできる。さらに、本発明の種々の実施形態が説明されているが、本発明の態様は、説明される実施形態の一部のみに含まれ得ることを理解されたい。従って、本発明は、上記の説明により限定されるとみなすべきではない。単数形での要素への言及は、他に具体的な定めがない限り、「唯一(one and only one)を意味することを意図するものではなく、「1つ又は複数」を意味することを意図している。当業者に既知の又は後で知られる、本開示の全体を通して説明される種々の実施形態の要素の全ての構造的及び機能的等価物は、参照により本明細書に明白に組み込まれ、本発明に含まれることが意図される。従って、開示される特定の実施形態において、添付の特許請求により概説されるような本発明の範囲内にある変更をなし得ることを理解されたい。
【符号の説明】
【0243】
100:ダイ
112:トランザクションCPU環境
280:ロード命令デコード・ユニット(IDU)
212:ネスト化深さ(TND)
1101:コンピュータ・システム
1102:プロセッサA
1103:キャッシュ・システムA
1104:トランザクション・メモリ・システムA
1105:キャッシュA
1106:プロセッサB
1107:キャッシュ・システムB
1109:キャッシュB
1111:システム・バス
2201:読み取りアドレス・バス
2202:書き込みアドレス・バス
2203:プリフェッチ読み取りアドレス・バス
2204:プリフェッチ書き込みアドレス・バス
2205:書き込みセット
2206:読み取りセット
2207:アボート・マネージャ
2208:プリフェッチ・マネージャ
2209:プリフェッチ操作バス
2210:非プリフェッチ操作バス
2211、2212:アドレス・デコード
2213:プリフェッチ・キュー
2214:キュー・マネージャ
2216:ローカル・遠隔プリフェッチ
3311:読み取り要求
3312:読み取り応答
4416:プリフェッチ要求
4417:プリフェッチ応答
4418:プリフェッチ拒否応答
4419:プリフェッチ据え置き応答
5501:パックされたプリフェッチ要求
5502:パックされたプリフェッチ応答
5503:パックされたプリフェッチ拒否応答
5504:パックされたプリフェッチ据え置き応答
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11