(57)【特許請求の範囲】
【請求項１】
プリフェッチ・メモリ操作およびトランザクションの処理におけるアボートを制御するための方法であって、
１つ又は複数のプロセッサのグループのローカル・プロセッサにより、遠隔プロセッサからプリフェッチ要求を受け取ることと、
前記１つ又は複数のプロセッサのグループにより、前記プリフェッチ要求が前記ローカル・プロセッサのトランザクションと競合するかどうかを判断することであって、前記プリフェッチ要求が前記トランザクションと競合すると判断する場合に、ｉ）前記プリフェッチ要求の優先順位と前記トランザクションの優先順位とを比較する第１比較、及びｉｉ）前記ローカル・プロセッサの優先順位と前記遠隔プロセッサの優先順位とを比較する第２比較のうちの少なくとも１つにより前記プリフェッチ要求を評価することを含む前記判断することと、
ｉ）前記プリフェッチ要求が前記トランザクションと競合しないとの判断、及びｉｉ）前記第１比較において前記プリフェッチ要求の前記優先順位がより高いまたは前記第２比較において前記遠隔プロセッサの前記優先順位がより高いと評価する肯定評価のうちの少なくとも１つに応答して、前記１つ又は複数のプロセッサのグループにより、要求されるプリフェッチ・データを提供することと、
前記トランザクションと競合すると判断された前記プリフェッチ要求に対し前記肯定評価が得られないことに応答して、前記１つ又は複数のプロセッサのグループにより、前記プリフェッチ要求の処理を抑止することと、
を含む方法。
【請求項２】
前記プリフェッチ要求は、ｉ）読み取りプリフェッチ要求、及びｉｉ）書き込みプリフェッチ要求のうちの少なくとも一方である、請求項１に記載の方法。
【請求項３】
前記プリフェッチ要求の処理を抑止することは、
前記１つ又は複数のプロセッサのグループにより、前記プリフェッチ要求のアボートを処理することを含む、請求項１に記載の方法。
【請求項４】
前記方法は、
前記１つ又は複数のプロセッサのグループにより、前記プリフェッチ要求がアボートされたことを示す通知を、前記遠隔プロセッサに送ることをさらに含む、請求項３に記載の方法。
【請求項５】
前記プリフェッチ要求の処理を抑止することは、
前記１つ又は複数のプロセッサのグループにより、前記プリフェッチ要求をキューにキューイングすることを含む、請求項１に記載の方法。
【請求項６】
前記方法は、
前記１つ又は複数のプロセッサのグループにより、前記プリフェッチ要求が前記キューにキューイングされていることを、前記遠隔プロセッサに通知することをさらに含む、請求項５に記載の方法。
【請求項７】
前記方法は、
前記１つ又は複数のプロセッサのグループにより、前記キューから前記プリフェッチ要求を除去することと、
前記１つ又は複数のプロセッサのグループにより、前記プリフェッチ要求と関連したメモリ・アドレスがトランザクションと競合を有していない場合、前記プリフェッチ要求を実行することと、
をさらに含む、請求項５に記載の方法。
【請求項８】
前記方法は、
前記１つ又は複数のプロセッサのグループにより、前記プリフェッチ要求が実行されたことを、前記遠隔プロセッサに通知することをさらに含む、請求項７に記載の方法。
【請求項９】
前記プリフェッチ要求の処理を抑止することは、
前記１つ又は複数のプロセッサのグループにより、前記プリフェッチ要求の実行前に遅延を実行することを含み、前記遅延の期間は、ｉ）前記ローカル・プロセッサにおける１つ又は複数の条件、及びｉｉ）前記遠隔プロセッサにおける１つ又は複数の条件のうちの一方又は両方によって決定される、請求項１に記載の方法。
【請求項１０】
プリフェッチ・メモリ操作およびトランザクションの処理におけるアボートを制御するためのコンピュータ・プログラムであって、
ローカル・プロセッサにより、遠隔プロセッサからプリフェッチ要求を受け取るためのプログラム命令と、
前記プリフェッチ要求が前記ローカル・プロセッサのトランザクションと競合するかどうかを判断するためのプログラム命令であって、前記プリフェッチ要求が前記トランザクションと競合すると判断する場合に、ｉ）前記プリフェッチ要求の優先順位と前記トランザクションの優先順位とを比較する第１比較、及びｉｉ）前記ローカル・プロセッサの優先順位と前記遠隔プロセッサの優先順位とを比較する第２比較のうちの少なくとも１つにより前記プリフェッチ要求を評価することを含む前記判断するためのプログラム命令と、
要求されるプリフェッチ・データを提供することにより、ｉ）前記プリフェッチ要求が前記トランザクションと競合しないとの判断、及びｉｉ）前記第１比較において前記プリフェッチ要求の前記優先順位がより高いまたは前記第２比較において前記遠隔プロセッサの前記優先順位がより高いと評価する肯定評価のうちの少なくとも１つに応答するためのプログラム命令と、
前記プリフェッチ要求の処理を抑止することにより、前記トランザクションと競合すると判断された前記プリフェッチ要求に対し前記肯定評価が得られないことに応答するためのプログラム命令と、
を含む、コンピュータ・プログラム。
【請求項１１】
前記プリフェッチ要求は、ｉ）読み取りプリフェッチ要求、及びｉｉ）書き込みプリフェッチ要求のうちの少なくとも一方である、請求項１０に記載のコンピュータ・プログラム。
【請求項１２】
前記プリフェッチ要求のアボートを処理することにより、前記プリフェッチ要求の前記処理を抑止するためのプログラム命令をさらに含む、請求項１０に記載のコンピュータ・プログラム。
【請求項１３】
前記プリフェッチ要求がアボートされたことを示す通知を、前記遠隔プロセッサに送るためのプログラム命令をさらに含む、請求項１２に記載のコンピュータ・プログラム。
【請求項１４】
前記プリフェッチ要求をキューにキューイングすることにより、前記プリフェッチ要求の前記処理を抑止するためのプログラム命令をさらに含む、請求項１０に記載のコンピュータ・プログラム。
【請求項１５】
前記プリフェッチ要求が前記キューにキューイングされることを、前記遠隔プロセッサに通知するためのプログラム命令をさらに含む、請求項１４に記載のコンピュータ・プログラム。
【請求項１６】
前記キューから前記プリフェッチ要求を除去するためのプログラム命令と、
前記プリフェッチ要求と関連したメモリ・アドレスがトランザクションと競合を有していない場合、前記プリフェッチ要求を実行するためのプログラム命令と、
をさらに含む、請求項１４に記載のコンピュータ・プログラム。
【請求項１７】
前記プリフェッチ要求が実行されたことを、前記遠隔プロセッサに通知するためのプログラム命令をさらに含む、請求項１６に記載のコンピュータ・プログラム。
【請求項１８】
前記プリフェッチ要求の実行前に遅延を実行することによって、前記プリフェッチ要求の前記処理を少なくとも部分的に抑止するためのプログラム命令をさらに含み、前記遅延の期間は、ｉ）前記ローカル・プロセッサにおける１つ又は複数の条件及びｉｉ）前記遠隔プロセッサにおける１つ又は複数の条件のうちの一方又は両方によって決定される、請求項１０に記載のコンピュータ・プログラム。
【請求項１９】
プリフェッチ・メモリ操作およびトランザクションの処理におけるアボートを制御するためのコンピュータ・システムであって、
１つ又は複数のコンピュータ・プロセッサ、１つ又は複数のコンピュータ可読ストレージ媒体、及び前記１つ又は複数のコンピュータ・プロセッサの少なくとも１つにより実行するための、前記１つ又は複数のコンピュータ可読ストレージ媒体上に格納されたプログラム命令を含み、前記プログラム命令は、
ローカル・プロセッサにより、遠隔プロセッサからプリフェッチ要求を受け取るためのプログラム命令と、
前記プリフェッチ要求が前記ローカル・プロセッサのトランザクションと競合するかどうかを判断するためのプログラム命令であって、前記プリフェッチ要求が前記トランザクションと競合すると判断する場合に、ｉ）前記プリフェッチ要求の優先順位と前記トランザクションの優先順位とを比較する第１比較、及びｉｉ）前記ローカル・プロセッサの優先順位と前記遠隔プロセッサの優先順位とを比較する第２比較のうちの少なくとも１つにより前記プリフェッチ要求を評価することを含む前記判断するためのプログラム命令と、
要求されるプリフェッチ・データを提供することにより、ｉ）前記プリフェッチ要求が前記トランザクションと競合しないとの判断、及びｉｉ）前記第１比較において前記プリフェッチ要求の前記優先順位がより高いまたは前記第２比較において前記遠隔プロセッサの前記優先順位がより高いと評価する肯定評価のうちの少なくとも１つに応答するためのプログラム命令と、
前記プリフェッチ要求の処理を抑止することにより、前記トランザクションと競合すると判断された前記プリフェッチ要求に対し前記肯定評価が得られないことに応答するためのプログラム命令と、
を含む、コンピュータ・システム。
【請求項２０】
前記プリフェッチ要求は、ｉ）読み取りプリフェッチ要求、及びｉｉ）書き込みプリフェッチ要求のうちの少なくとも一方である、請求項１９に記載のコンピュータ・システム。
【請求項２１】
前記プリフェッチ要求のアボートを処理することにより、前記プリフェッチ要求の前記処理を抑止するためのプログラム命令をさらに含む、請求項１９に記載のコンピュータ・システム。
【請求項２２】
前記プリフェッチ要求がアボートされたことを示す通知を、前記遠隔プロセッサに送るためのプログラム命令をさらに含む、請求項２１に記載のコンピュータ・システム。
【請求項２３】
前記プリフェッチ要求をキューにキューイングすることにより、前記プリフェッチ要求の前記処理を抑止するためのプログラム命令をさらに含む、請求項１９に記載のコンピュータ・システム。
【請求項２４】
前記プリフェッチ要求が前記キューにキューイングされることを、前記遠隔プロセッサに通知するためのプログラム命令をさらに含む、請求項２３に記載のコンピュータ・システム。
【請求項２５】
前記キューから前記プリフェッチ要求を除去するためのプログラム命令と、
前記プリフェッチ要求と関連したメモリ・アドレスがトランザクションと競合を有していない場合、前記プリフェッチ要求を実行するためのプログラム命令と、
をさらに含む、請求項２３に記載のコンピュータ・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、コンピュータ・メモリ管理の分野に関し、より具体的には、トランザクション・メモリ操作の効率を改善するための技術に関する。
【背景技術】
【０００２】
多くのコンピュータ・システムは、データ取得（data retrieval）動作の速度を上げるためにキャッシュ・メモリを用いる。キャッシュ・メモリは、頻繁に使用される主メモリ位置に見出されたデータのコピーを格納（ストア、store）する。キャッシュ・メモリには、典型的には、主メモリよりも速くアクセスすることができるので、キャッシュ・メモリからデータにアクセスすることにより、処理の速度が上がる。要求されるデータがキャッシュ・メモリ内に見出された場合、キャッシュ・メモリからデータにアクセスされる。しかしながら、要求されるデータがキャッシュ・メモリ内に見出されない場合、最初にキャッシュ・メモリにデータをコピーし、次に、キャッシュ・メモリからデータにアクセスする。
【０００３】
マルチレベル・キャッシュは、複数のキャッシュ・メモリが存在する構造体である。例えば、コンピューティング・システムは、３つのレベル、すなわち、Ｌ１キャッシュ、Ｌ２キャッシュ及びＬ３キャッシュを有することができる、典型的には、マルチレベル・キャッシュ構成において、Ｌ１は最も小容量であり、アクセス時間が短い。要求されるデータがＬ１キャッシュ内に見出されない場合、システムは、通常、Ｌ１キャッシュより大容量であり、Ｌ１キャッシュより物理的にさらに遠く、従って、アクセス時間がより長いＬ２キャッシュを検索する。同様の方法で、データがＬ２キャッシュ内に見出されない場合、Ｌ３キャッシュを検索する。要求されるデータがＬ１、Ｌ２又はＬ３キャッシュ内にない場合、主メモリにのみアクセスする。キャッシュ・メモリの多くの異なる実装がある。
【０００４】
性能を向上させるために、コンピュータ・アーキテクチャは、データへのアクセスを予測して、データを、主メモリ又は下位のキャッシュ・レベルから上位のキャッシュ・レベル（プロセッサにより近い）に移動させることができるプリフェッチ命令を含むことが多い。プリフェッチ命令の実行は、プリフェッチ命令により移動されるデータに実際にアクセスされることが分かる前に実行され得るという点で、本質的に投機的であり得る。読み取りアクセス又は書き込みアクセスのいずれかを予測して、データをプリフェッチすることができ、これはそれぞれ、読み取りプリフェッチ又は書き込みプリフェッチと呼ばれる。データの共有、同期及び並列処理を可能にする、コンピュータのキャッシュ・コヒーレンシ・プロトコルは、プロセッサが、データを書き込む（すなわち、変更する）ことができる前に、データの所有権を得ることを要求することが多い。データは、現在別のプロセッサが所有している場合があるので、所有権の取得は、長期にわたるプロセスであり得る。１つのメモリ位置から１つのプロセッサによって読み取られるデータが、同じ位置又は異なる位置（データのコピーが複数の異なる位置にある場合）に書き込みを行う別のプロセッサにより変更されるのを防止するために、所有権の概念が必要である。従って、多くの場合、プロセッサは、データへの書き込みを予測して、データの所有権を取得するために書き込みプリフェッチ命令を実行し、所有権を獲得する間、処理が遅延されないようにすることは有利である。
【０００５】
キャッシュのアクセス時間は、実行されているコードの性能にとって重要であることが多く、キャッシュは、多くの操作（例えば、ミスの処理）でビジー（busy）状態であることが多いので、可能であれば、キャッシュのワークロードを減らすことが有利である。キャッシュのワークロードを減らすために用いられる１つの一般的な技術は、共通のキャッシュラインに格納する複数のストアをキャッシュライン・バッファ内に蓄積し、キャッシュライン・バッファのコンテンツを単一の操作としてキャッシュに格納することを含む。これにより、キャッシュ・ワークロードが減少し、その応答時間が改善し、従って、潜在的に、実行されているコードの性能が向上する。こうした技術は、一般的に、ストア・キャッシュと呼ばれる機構において実行される。
【０００６】
トランザクション・メモリは、トランザクションが完了したとき、プロセッサにより実行される１以上のロード及びストア操作を、単一の操作として他のプロセッサに見える単一のトランザクションにまとめる、１つのタイプのメモリ操作である。単一のトランザクションに関与している複数のストア操作は、トランザクションが完了するまで、他のプロセッサに見えるようにならない。トランザクション・ロードは、トランザクションが完了するまでデータにアクセスし、これをバッファに入れるロードであり、トランザクションの完了後、データは、これを要求したプロセッサに転送される。ロードが発生した後、トランザクションが完了する前に、トランザクション・ロードからのデータが変更された場合（すなわち、書き込まれるメモリ内の位置）、トランザクションはアボートされる。トランザクション書き込みは、トランザクションが完了するまで、そのデータが見られない書き込みである。トランザクションにおけるトランザクション書き込みのターゲットである位置からの読み出し又は書き込みは、トランザクションをアボートする。トランザクション・メモリは、複数のＣＰＵ上で並列に実行される（任意の組のメモリ位置に対するアトミック操作を可能にすることによって）作業の同期の際、及び、複数の書き込みを中断してはならない場合に有用であることが多い。トランザクションに関与する書き込みは、トランザクションが完了するまで見えないので、トランザクションにおける書き込みにより書き込まれる予定の位置からの読み取りは、トランザクションをアボートさせる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】米国特許第６，３４９，３６１号明細書
【非特許文献】
【０００８】
【非特許文献１】「Ｉｎｔｅｌ（登録商標）  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｅｘｔｅｎｓｉｏｎｓ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｒｅｆｅｒｅｎｃｅ」３１９４３３−０１２Ａ、２０１２年２月
【非特許文献２】Ａｕｓｔｅｎ  ＭｃＤｏｎａｌｄ著、「ＡＲＣＨＩＴＥＣＴＵＲＥＳ  ＦＯＲ  ＴＲＡＮＳＡＣＴＩＯＮＡＬ  ＭＥＭＯＲＹ」、哲学博士号の要件の部分的履行において、スタンフォード大学のＣｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ学部及び大学院の委員会に提出された論文、２００９年６月
【非特許文献３】「Ｔｒａｎｓａｃｔｉｏｎａｌ  Ｍｅｍｏｒｙ  Ａｒｃｈｉｔｅｃｔｕｒｅ  ａｎｄ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ  ｆｏｒ  ＩＢＭ  Ｓｙｓｔｅｍ  ｚ」、カナダ国ブリティッシュ・コロンビア州バンクーバーにおいて２０１２年１２月１〜５日開催のＭＩＣＲＯ−４５予稿集、２５〜３６ページ、ＩＥＥＥ  Ｃｏｍｐｕｔｅｒ  Ｓｏｃｉｅｔｙ  Ｃｏｎｆｅｒｅｎｃｅ  Ｐｕｂｌｉｓｈｉｎｇ  Ｓｅｒｖｉｃｅｓ（ＣＰＳ）より入手可能
【非特許文献４】「ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ，Ｐｒｉｎｃｉｐｌｅｓ  ｏｆ  Ｏｐｅｒａｔｉｏｎ」、第１０版、ＩＢＭ（登録商標）ＳＡ２２−７８３２−０９、２０１２年９月
【非特許文献５】Ｐ．Ｍａｒｋ、Ｃ．Ｗａｌｔｅｒｓ、及びＧ．Ｓｔｒａｉｔ著、「ＩＢＭ  ｓｙｓｔｅｍ  ｚ１０  ｐｒｏｃｅｓｓｏｒ  ｃａｃｈｅ  ｓｕｂｓｙｓｔｅｍ  ｍｉｃｒｏａｒｃｈｉｔｅｃｔｕｒｅ」、ＩＢＭ  Ｊｏｕｒｎａｌ  ｏｆ  Ｒｅｓｅａｒｃｈ  ａｎｄ  Ｄｅｖｅｌｏｐｍｅｎｔ、Ｖｏｌ  ５３：１、２００９年
【発明の概要】
【発明が解決しようとする課題】
【０００９】
プリフェッチ・メモリ操作によりトランザクションがアボートするのを防止するための方法、コンピュータ・システム及びコンピュータ・プログラムを提供する。
【課題を解決するための手段】
【００１０】
本発明の実施形態は、プリフェッチ・メモリ操作によりトランザクションがアボートするのを防止するための方法、システム及びプログラム製品を提供する。１つ又は複数のプロセッサのグループのローカル・プロセッサが、遠隔プロセッサからプリフェッチ要求を受け取る。１つ又は複数のプロセッサのグループのローカル・プロセッサは、プリフェッチ要求がローカル・プロセッサのトランザクションと競合するかどうかを判断する。１つ又は複数のプロセッサのグループのローカル・プロセッサは、要求されるプリフェッチ・データを提供することにより、ｉ）ローカル・プロセッサがトランザクションを有していないとの判断、及びｉｉ）プリフェッチ要求がトランザクションと競合しないとの判断のうちの少なくとも１つに応答する。１つ又は複数のプロセッサのグループのローカル・プロセッサは、プリフェッチ要求の処理を抑止することにより、プリフェッチ要求がトランザクションと競合するとの判断に応答する。
【図面の簡単な説明】
【００１１】
【図１】例証となる実施形態による、例示的マルチコア・トランザクション・メモリ環境を示す。
【図２】例証となる実施形態による、例示的マルチコア・トランザクション・メモリ環境を示す。
【図３】例証となる実施形態による、例示的ＣＰＵの例示的コンポーネントを示す。
【図４】本発明の１つの実施形態による、コンピュータ・システムの一部のブロック図を示す。
【図５】本発明の１つの実施形態による、図４に示されるキャッシュ・システムを示す。
【図６】本発明の１つの実施形態による、読み取り要求及び読み取り要求への応答の形式を示す。
【図７】本発明の１つの実施形態による、プリフェッチ要求の形式を示す。
【図８】本発明の１つの実施形態による、パックされた（packed）プリフェッチ要求の形式を示す。
【図９】本発明の１つの実施形態による、図５に示されるトランザクション・メモリ・システムの動作についてのフローチャートを示す。
【図１０】本発明の１つの実施形態による、図５に示されるプリフェッチ・マネージャの動作についてのフローチャートを示す。
【図１１】本発明の１つの実施形態による、図４及び図５に示されるキャッシュ・システムを組み込むコンピュータ・システムのブロック図を示す。
【発明を実施するための形態】
【００１２】
本発明の詳細な実施形態が、添付図面を参照して本明細書に開示される。開示される実施形態は、本発明の潜在的な実施形態の例証にすぎず、種々の形態をとり得ることを理解されたい。さらに、種々の実施形態と関連して与えられる例の各々は、限定することを意図するものではなく、例証することを意図している。さらに、図面は必ずしも縮尺通りではなく、特定のコンポーネントの詳細を示すために、幾つかの特徴が強調される場合がある。従って、本明細書に開示される特定の構造及び機能の詳細は、限定としてではなく、単に本発明を様々に利用するために当業者に教示するための代表的な基礎として解釈されるべきである。
【００１３】
本明細書における、「一実施形態」、「１つの実施形態」、「１つの例示的な実施形態」等への言及は、説明される実施形態が、特定の特徴、構造、又は特性を含むことができるが、全ての実施形態が必ずしもその特定の特徴、構造、又は特性を含まないこともあることを示す。さらに、こうした語句は、必ずしも同じ実施形態を指すものではない。さらに、特定の特徴、構造、又は特性が、１つの実施形態と関連して説明されるとき、明示的に説明されても又はされなくても、他の実施形態と関連して、そうした特徴、構造、又は特性に影響を与えることは、当業者の知識の範囲内であることが明らかである。
【００１４】
今日のコンピュータにおけるメモリ階層は、多層のキャッシュ、すなわち、単一のプロセッサ専用であり、単一のプロセッサによりアクセス可能な幾つかの層、及び複数のプロセッサによりアクセス可能な他の、より下位かつ大容量の層のキャッシュを含むことが多い。キャッシュは、最近アクセスしたデータ又は最近アクセスしたデータに近いデータに迅速なアクセスを提供することが多い。キャッシュには、所定のプロセッサＬ１、Ｌ２、Ｌ３等に対する論理位置の順序でラベルが与えられており、Ｌ１キャッシュが論理的にプロセッサに最も近い。この順序付けはまた、プロセッサがデータを読み取ろうと試みるとき、キャッシュにアクセスする順序でもある。データに関して最初にＬ１にアクセスし、Ｌ１内にデータが見つからない場合、Ｌ２にアクセスし、以下同様である。小容量の、プロセッサと緊密に統合されたＬ０キャッシュが用いられることもあり、多くの場合、１サイクル・アクセスを与える。Ｌ０キャッシュは、存在する場合、論理的に、Ｌ１キャッシュよりもプロセッサに近い。コンピュータ・システム内のキャッシュ・レベルは、主メモリ（多くの場合、大容量の動的ＲＡＭ）と共に、コンピュータ・システムのメモリ階層を構成する。メモリ階層の文脈において、「下方（below）」という用語は、論理的に、プロセッサからより遠いことを意味する。
【００１５】
メモリ階層の効率を高めるために、多くの技術が開発されている。ベンチマーク・プログラムに対するメモリ階層の効率は、通常、ベンチマーク・プログラムの実行中に、その平均アクセス時間により測定される。ストア・キャッシュは、該ストア・キャッシュのものより下方の次のキャッシュ層内のキャッシュのワークロードを低減させることにより、平均アクセス時間を改善する技術である。ストア・キャッシュは、キャッシュラインへのストアをバッファに蓄積し、バッファのコンテンツを、１アクセスでキャッシュの次の層内のキャッシュラインに書き込み、それぞれ別個のストアがストア操作を行った場合に生じたであろう複数のアクセスを排除することによって、これを行う。
【００１６】
複数のプロセッサを有する今日のコンピューティング・システムにおいては、プロセッサがマルチスレッドである及び／又は複数の異なるプロセッサ上にある場合、同じプロセッサ上でプログラムの部分を並行して計算することによって性能を向上させ、かつ、実行中、必要に応じて結果を断続的に結合又は比較するための努力がなされている。このことは、同じ及び／又は異なるプロセッサ上の実行の複数のスレッドを同期させ、及び／又は１つの実行スレッドにより生成される結果を他の実行スレッドに見えるようにすることによって、達成されることが多い。同期化は、「アトミック（atomic）」命令及び命令のグループを実行することにより達成されることが多い。アトミック命令は、他の実行スレッド及び他のプロセッサに対して「同時に（一度に、all at once））」実行するように見える、すなわちアトミック命令は、決して、部分的に完了することが観察されることはない。同様に、他のスレッド及びプロセッサに対してその効果を同時に見えるようにすることによって、命令のグループをアトミックにすることができる。複数の実行スレッドは、多くの場合、全ての関与する実行スレッドに知られているメモリ位置に書き込んだ及びそこから読み取った値を介して互いに通信し、同期するので、メモリ操作は、アトミック・バージョンで利用可能であることが多い。例えば、アトミック命令は、メモリ位置を読み取ることができ、メモリ位置が特定の値を含む場合、別の値を元の同じメモリ位置に単一のアトミック操作で書き込む。このアクションは、変数を試験することができる（それを読み取ることによって）他のプロセスを見分ける。
【００１７】
プロセッサ上で実行されているアプリケーションの性能を改善できる今日の技術は、性能の改善を行うのに利用可能なリソースがあるときに、幾つかの命令を投機的に（speculatively）実行するというものである。投機的実行とは、将来おそらく起こるであろうが、実際に起こらないかもしれない実行を指す用語である。この投機的実行は、通常、実際の挙動を決定する情報がまだ利用可能でないため、命令ストリーム内に分岐命令が見られ、かつ、以前の挙動に基づいてその挙動が予測されるときに行われる。この情報が利用可能になるのを待つ代わりに、プロセッサは、この分岐が恐らくとるであろう予測経路に基づいて作業を行い、この予測経路上で命令を実行することができる。この予測経路上で実行される命令は、これらの命令が実行の実際の経路上にあること、すなわち分岐が正しく予測されたことが分かるまで、投機的命令である。これらの投機的命令が実行の間違った実際の経路上にある（間違った予測）ことが分かった場合、これらの命令の効果をスカッシュする（squash）、すなわち排除し、アンドゥ（undo）し、他のプロセッサに見えないようにする必要がある。
【００１８】
投機的に実行されたが、実行すべきでなかった命令は、多くを要求する設計課題であることがあり、特に、実行すべきでなかった投機的ストア命令に関して、多くを要求する。実行すべきでなかったストアがデータをメモリにストアする場合、ストアが上書きすべきでなかったデータを上書きし、アプリケーション内の同じ又は異なるプロセッサによって、書き込まれたデータが、読み取られ使用されることがある。コンピュータ・アーキテクチャは、投機的ストア命令を実行しないことによって、又は、それらを投機的に実行し、ストア結果を、（性能を低下させる）命令のイン・オーダー時点までストア・バッファ又はストア・キューにストアすることによって、この問題を解決する。代替的な手法は、それが正しい経路上にあることが分かるまで、他の実行スレッドが投機的ストアにより生成されたデータを見ることを防止し、それが正しくない経路上のストアの結果である場合には、データを削除することである。
【００１９】
同時マルチスレッディングは、シングル・プロセッサが、複数のアプリケーション（又は同じアプリケーションの複数の部分）を同時に実行するのを可能にする、今日のプロセッサに組み込まれることが多い技術であり、各アプリケーションは、それぞれの実行スレッドを有する。シングル・プロセッサは、各スレッド上の命令を別個に取り出し、プロセッサ内の共有実行ユニット（例えば、加算器、乗算器等）上で命令を実行し、その間、どの命令がどのスレッドに属するかを追跡する。そうしたスレッドがそれらの作業を他のスレッドと同期させる場合、それらのスレッドは、実行がアトミックに行われるアトミック命令又は命令のグループを介して、同期を行うことが多い。
【００２０】
従来より、コンピュータ・システム又はプロセッサは、シングル・プロセッサ（別名、処理ユニット又は中央処理ユニット）しか有していなかった。プロセッサは、命令処理ユニット（ＩＰＵ）、分岐ユニット、メモリ制御ユニット等を含んでいた。こうしたプロセッサは、一度に単一のプログラム・スレッドを実行することができた。一定の期間プロセッサ上で実行されるようにプロセッサをディスパッチし、次に、別の期間プロセッサ上で実行されるように別のプログラムをディスパッチすることによって、プロセッサを時分割する（time-share）ことが可能なオペレーティング・システムが開発された。技術が発展すると、メモリ・サブシステム・キャッシュ、並びに変換ルックアサイド・バッファ（ＴＬＢ）を含む複雑な動的アドレス変換が、プロセッサに付加されることが多くなった。ＩＰＵ自体が、多くの場合、プロセッサと呼ばれた。技術が発展し続けると、プロセッサ全体を単一の半導体チップ又はダイとしてパッケージ化できるようになり、こうしたプロセッサは、マイクロプロセッサと呼ばれた。その後、複数のＩＰＵを組み入れたプロセッサが開発され、こうしたプロセッサは、多くの場合、マルチプロセッサと呼ばれた。マルチプロセッサ・コンピュータ・システム（プロセッサ）のこうしたプロセッサの各々は、個々の又は共有のキャッシュ、メモリ・インターフェース、システム・バス、アドレス変換機構等を含むことができる。仮想マシン及び命令セット・アーキテクチャ（instruction set architecture、ＩＳＡ）エミュレータは、ソフトウェアの層をプロセッサに付加し、シングル・ハードウェア・プロセッサ内にシングルＩＰＵのタイムスライスを使用することにより、複数の「仮想プロセッサ」（別名、プロセッサ）を有する仮想マシンを提供した。技術がさらに発展すると、マルチスレッド・プロセッサが開発され、シングル・マルチスレッドＩＰＵを有するシングル・ハードウェア・プロセッサが異なるプログラムのスレッドを同時に実行する能力を提供することを可能にし、従って、コンピュータ・システムには、マルチスレッド・プロセッサの各スレッドが１つのプロセッサとして見えるようになった。技術がさらに発展すると、単一の半導体チップ又はダイ上に複数のプロセッサ（各々がＩＰＵを有する）をのせることが可能になった。これらのプロセッサは、プロセッサ・コア、又は単にコアと呼ばれた。従って、プロセッサ、中央処理ユニット、処理ユニット、マイクロプロセッサ、コア、プロセッサ・コア、プロセッサ・スレッド及びスレッドなどの用語は、交換可能に使用されることが多い。本明細書における実施形態の態様は、本明細書での教示から逸脱することなく、上に示されるものを含むいずれかの又は全てのプロセッサによって実施することができる。「スレッド」又は「プロセッサ・スレッド」という用語が本明細書で用いられる場合、プロセッサ・スレッドの実装において、実施形態の特定の利点を有することができたと考えられる。
【００２１】
Ｉｎｔｅｌ(登録商標)ベースの実施形態におけるトランザクション実行
非特許文献１において、第８章は、部分的に、マルチスレッド・アプリケーションが、より高い性能を達成するためにＣＰＵコアの数の増大を利用できることを教示する。しかしながら、マルチスレッド・アプリケーションの書き込みでは、プログラマーが、複数のスレッド間のデータ共有を理解し、考慮に入れる必要がある。共有データへのアクセスは、一般的に、同期機構を必要とする。これらの同期機構を用いて、多くの場合、ロックで保護されたクリティカル・セクション（critical section）を用いて、共有データに適用される動作をシリアル化することにより、複数のスレッドが共有データを更新することを保証する。シリアル化により、並行性（concurrency）が制限されるので、プログラマーは、同期に起因するオーバーヘッドを制限しようと試みる。
【００２２】
Ｉｎｔｅｌ(登録商標)  Ｔｒａｎｓａｃｔｉｏｎａｌ  Ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ  Ｅｘｔｅｎｓｉｏｎｓ（Ｉｎｔｅｌ(登録商標)ＴＳＸ）は、プロセッサが、ロックで保護されたクリティカル・セクションによりスレッドをシリアル化する必要があるかどうかを動的に判断し、必要な場合にのみこのシリアル化を行うことを可能にする。これにより、プロセッサは、動的な不要な同期のためにアプリケーション内に隠れている並行性を顕在化させ利用することができる。
【００２３】
Ｉｎｔｅｌ  ＴＳＸでは、プログラマーが指定したコード領域（「トランザクション領域」又は単に「トランザクション」とも呼ばれる）がトランザクション実行される。トランザクション実行が成功裏に完了すると、トランザクション領域内で実施された全てのメモリ操作は、他のプロセッサから見たときに瞬時に起こったように見える。プロセッサは、成功裏にコミットが行われる場合にのみ、即ち、トランザクションが成功裏に実行を完了した場合にのみ、他のプロセッサに見えるトランザクション領域内で実施される、実行されたトランザクションのメモリ操作を行う。このプロセスは、アトミック・コミットと呼ばれることが多い。
【００２４】
Ｉｎｔｅｌ  ＴＳＸは、トランザクション実行のためのコード領域を指定するための、２つのソフトウェア・インターフェースを提供する。Ｈａｒｄｗａｒｅ  Ｌｏｃｋ  Ｅｌｉｓｉｏｎ（ＨＬＥ）は、トランザクション領域を指定するための、従来の（legacy）互換命令セット拡張（compatible instruction setextension）（ＸＡＣＱＵＩＲＥ及びＸＲＥＬＥＡＳＥプリフィックスを含む）である。Ｒｅｓｔｒｉｃｔｅｄ  Ｔｒａｎｓａｃｔｉｏｎａｌ  Ｍｅｍｏｒｙ（ＲＴＭ）は、新しい命令セット・インターフェース（ＸＢＥＧＩＮ、ＸＥＮＤ、及びＸＡＢＯＲＴ命令を含む）であり、プログラマーは、ＨＬＥで可能なよりも柔軟性の高い手法でトランザクション領域を定義できる。ＨＬＥは、従来の相互排他プログラミング・モデルの後方互換性（backward compatibility）を好み、従来のハードウェア上でＨＬＥ対応のソフトウェアを実行したいが、ＨＬＥサポートを有するハードウェア上で新しいロック無効化機能を利用したいと望むプログラマー向けのものである。ＲＴＭは、トランザクション実行ハードウェアよりも柔軟なインターフェースを好むプログラマー向けのものである。さらに、Ｉｎｔｅｌ  ＴＳＸはまた、ＸＴＥＳＴ命令も提供する。この命令は、論理プロセッサが、ＨＬＥ又はＲＴＭのいずれかによって識別されたトランザクション領域においてトランザクション実行しているかどうかを、ソフトウェアが照会することを可能にする。
【００２５】
成功したトランザクション実行はアトミック・コミットを保証するので、プロセッサは、明示的な同期を行うことなく、コード領域を楽観的に実行する。特定の実行で同期が不要であった場合、いかなるクロススレッドのシリアル化も行うことなく、実行をコミットすることができる。プロセッサがアトミックにコミットできない場合、楽観的実行に失敗する。楽観的実行に失敗すると、プロセッサは実行をロールバックし、プロセスはトランザクション・アボートと呼ばれる。トランザクションがアボートすると、プロセッサは、トランザクションが使用するメモリ領域で実行された全ての更新を廃棄し、あたかも楽観的に実行が行われなかったように見えるようにアーキテクチャ上の状態を復元し、非トランザクションに実行を再開する。
【００２６】
プロセッサは、多くの理由によりトランザクションをアボートすることがある。トランザクションをアボートする主たる理由は、トランザクションを実行している論理プロセッサと別の論理プロセッサとの間のメモリ・アクセスの競合によるものである。このようなメモリ・アクセス競合は、トランザクション実行の成功の妨げとなり得る。トランザクション領域内から読み取られたメモリ・アドレスによりトランザクション領域の読み取りセット（read set）が構成され、トランザクション領域内に書き込まれたアドレスによりトランザクション領域の書き込みセット（write set）が構成される。Ｉｎｔｅｌ  ＴＳＸは、キャッシュラインの粒度で読み取りセットと書き込みセットを維持する。別の論理プロセッサがトランザクション領域の書き込みセットの一部の場所で読み取りを行うか又はトランザクション領域の読み取りセット若しくは書き込みセットの一部の場所で書き込みを行う場合、メモリ・アクセス競合が発生する。アクセス競合は、一般的には、そのコード領域に対してシリアル化が必要であることを意味する。Ｉｎｔｅｌ  ＴＳＸは、キャッシュラインの粒度でデータ競合を検出するため、同じキャッシュラインに置かれた無関係なデータ位置は競合として検出され、その結果、トランザクション・アボートがもたらされる。トランザクション・アボートはまた、トランザクション・リソースの制限により発生することもある。例えば、領域内でアクセスされるデータの量が、実装固有の能力を超えた場合である。さらに、一部の命令とシステム・イベントがトランザクション・アボートを引き起こすこともある。頻繁なトランザクション・アボートは無駄なサイクル及び非効率性の増大をもたらす。
【００２７】
Ｈａｒｄｗａｒｅ  Ｌｏｃｋ  Ｅｌｉｓｉｏｎ
Ｈａｒｄｗａｒｅ  Ｌｏｃｋ  Ｅｌｉｓｉｏｎ（ＨＬＥ）は、プログラマーがトランザクション実行を使用するための従来の互換命令セット・インターフェースである。ＨＬＥは、２つの新しい命令プリフィックス・ヒント、即ちＸＡＣＱＵＩＲＥ及びＸＲＥＬＥＡＳＥを提供する
【００２８】
ＨＬＥでは、プログラマーは、クリティカル・セクションを保護するロックの取得に使用する命令の前に、ＸＡＣＱＵＩＲＥプリフィックスを付加する。プロセッサは、ロック取得操作と関連付けられている書き込みを無効化する（elide）ヒントとしてプリフィックスを扱う。ロック取得がロックと関連付けられている書き込み操作を有していても、プロセッサは、トランザクション領域の書き込みセットにロックのアドレスを追加せず、ロックに対するいかなる書き込み要求も発行しない。代わりに、ロックのアドレスが読み取りセットに追加される。論理プロセッサがトランザクション実行に入る。ＸＡＣＱＵＩＲＥプリフィックス付加された命令の前にロックが利用可能であった場合、命令の後に他の全てのプロセッサはそのロックを利用可能なものとして見なし続ける。トランザクション実行する論理プロセッサは、書き込みセットにロックのアドレスを追加せず、外部に明確な書き込み操作を行わないため、他の論理プロセッサは、データ競合を引き起こすことなくロックを読み取ることができる。これにより、他の論理プロセッサがロックで保護されたクリティカル・セクションに入り、同時実行することが可能になる。プロセッサは、トランザクション実行中に引き起こされるあらゆるデータ競合を自動的に検出し、必要に応じてトランザクション・アボートを実行する。
【００２９】
無効化を行うプロセッサがロックに対するいかなる外部書き込み操作も行わないにもかかわらず、ハードウェアは、ロックに対する操作のプログラム順を保証する。無効化を行うプロセッサ自体がクリティカル・セクションにおいてロックの値を読み取ると、プロセッサがロックを取得したように見える、即ち、読み取りにより、非無効化（non-elide）値が戻される。この挙動は、ＨＬＥ実行が、ＨＬＥプリフィックスなしの実行と機能的に等しくなることを可能にする。
【００３０】
ＸＲＥＬＥＡＳＥプリフィックスは、クリティカル・セクションを保護するロックの解放（release）に使用される命令の前に追加することができる。ロックの解放には、ロックに対する書き込みが含まれる。この命令により、ロックの値が、同じロックのＸＡＣＱＵＩＲＥプリフィックスでロック取得操作の前にロックが有していた値に戻された場合、プロセッサは、ロックの解放に関連付けられている外部書き込み要求を無視し、書き込みセットにロックのアドレスを追加しない。次に、プロセッサは、トランザクション実行をコミットしようとする。
【００３１】
ＨＬＥでは、複数のスレッドが同じのロックで保護されたクリティカル・セクションを実行する場合でも、互いのデータに対していかなる競合が発生する操作も行わないのであれば、スレッドをシリアル化することなく同時に実行することができる。ソフトウェアが共通のロックでロック取得操作を使用した場合でも、ハードウェアはこれを認識し、ロックを無効化し、ロックを通じていずれの通信も行うことなく、２つのスレッドでクリティカル・セクションを実行する（こうした通信が動的に不要だった場合）。
【００３２】
プロセッサが領域をトランザクション実行できない場合、プロセッサは、その領域を、非トランザクションに且つ無効化を行わずに実行する。ＨＬＥ対応のソフトウェアは、基礎をなす非ＨＬＥのロック・ベースの実行と同じように前方進行を保証する。ＨＬＥ実行を成功させるためには、ロック及びクリティカル・セクションコードが特定のガイドラインに従わなければならない。これらのガイドラインは性能にのみ影響し、これらのガイドラインに従わなかった場合でも機能的不具合は生じない。ＨＬＥサポートを有していないハードウェアは、ＸＡＣＱＵＩＲＥ及びＸＲＥＬＥＡＳＥプリフィックス・ヒントを無視するが、これらのプリフィックスはＸＡＣＱＵＩＲＥ及びＸＲＥＬＥＡＳＥが有効な場合に命令で無視されるＲＥＰＮＥ／ＲＥＰＥ  ＩＡ−３２プリフィックスに対応しているので、いかなる無効化も行わない。重要なことに、ＨＬＥは既存のロック・ベースのプログラミング・モデルと互換性がある。ヒントを不適切に使用しても機能的なバグは起こらないが。コードに既に含まれている潜在的なバグが暴露する可能性がある。
【００３３】
Ｒｅｓｔｒｉｃｔｅｄ  Ｔｒａｎｓａｃｔｉｏｎａｌ  Ｍｅｍｏｒｙ（ＲＴＭ）は、トランザクション実行用の柔軟なソフトウェア・インターフェースを提供する。ＲＴＭは、プログラマーがトランザクション実行を開始、コミット、アボートする３つの新しい命令（ＸＢＥＧＩＮ、ＸＥＮＤ、及びＸＡＢＯＲＴ）を提供する。
【００３４】
プログラマーは、ＸＢＥＧＩＮ命令を使用してトランザクション・コード領域の開始を指定し、ＸＥＮＤ命令を使用してトランザクション・コード領域の終了を指定する。ＸＢＥＧＩＮ命令は、ＲＴＭ領域がトランザクション実行に成功しなかった場合、相対的なオフセットをフォールバック命令アドレスに与えるオペランドを利用する。
【００３５】
プロセッサは、多くの理由によりＲＴＭトランザクション実行をアボートすることがある。ハードウェアは、トランザクション・アボート条件を自動的に検出して、ＸＢＥＧＩＮ命令の開始、及びアボート・ステータスを説明するために更新されたＥＡＸレジスタに対応するアーキテクチャ状態で、フォールバック命令アドレスから実行を再開する。
【００３６】
ＸＡＢＯＲＴ命令は、プログラマーが、ＲＴＭ領域の実行を明示的にアボートすることを可能にする。ＸＡＢＯＲＴ命令には、ＲＴＭアボートの後にソフトウェアで利用可能になる、ＥＡＸレジスタにロードされる８ビットの即時引数を利用する。ＲＴＭ命令は、いずれのデータ・メモリ位置とも関連付けられない。ハードウェアは、ＲＴＭ領域がこれまでトランザクション・コミットに成功したかどうかに関して保証しないが、推奨されるガイドラインに従う大部分のトランザクションは、トランザクション・コミットに成功すると予想される。しかしながら、プログラマーは、前方進行を保証するため、フォールバック経路に代替コード・シーケンスを常に提供しなければならない。これは、ロックを取得して指定されたコード領域を非トランザクションに実行するのと同じくらい簡単であり得る。さらに、所与の実装では常にアボートされるトランザクションが、将来の実装ではトランザクションに完了する可能性がある。従って、プログラマーは、トランザクション領域と代替コード・シーケンスのコード経路が機能的にテストされることを保証しなければならない。
【００３７】
ＨＬＥサポートの検出
プロセッサは、ＣＰＵＩＤ．０７Ｈ．ＥＢＸ．ＨＬＥ［ｂｉｔ４］＝１の場合に、ＨＬＥ実行をサポートする。しかしながら、アプリケーションは、プロセッサがＨＬＥをサポートするかどうかをチェックすることなく、ＨＬＥプリフィックス（ＸＡＣＱＵＩＲＥ及びＸＲＥＬＥＡＳＥ）を使用することができる。ＨＬＥサポートを有していないプロセッサは、これらのプリフィックスを無視し、トランザクション実行に入ることなく、コードを実行する。
【００３８】
ＲＴＭサポートの検出
プロセッサは、ＣＰＵＩＤ．０７Ｈ．ＥＢＸ．ＲＴＭ［ｂｉｔ１１］＝１の場合に、ＲＴＭ実行をサポートする。アプリケーションは、ＲＴＭ命令（ＸＢＥＧＩＮ、ＸＥＮＤ、ＸＡＢＯＲＴ）を使用する前に、プロセッサがＲＴＭをサポートしているかどうかをチェックする必要がある。これらの命令は、ＲＴＭをサポートしていないプロセッサで使用されると、＃ＵＤ例外が発生する。
【００３９】
ＸＴＥＳＴ命令の検出
プロセッサが、ＨＬＥ又はＲＴＭのいずれかをサポートしている場合、ＸＴＥＳＴ命令をサポートする。アプリケーションは、ＸＴＥＳＴ命令を使用する前に、これらの特徴フラグのどちらかをチェックする必要がある。この命令は、ＨＬＥ又はＲＴＭのいずれもサポートしていないプロセッサで使用されると、＃ＵＤ例外が発生する。
【００４０】
トランザクション実行状態を照会する
ＸＴＥＳＴ命令は、ＨＬＥ又はＲＴＭによって指定されたトランザクション領域のトランザクション状態を判断するために使用することができる。ＨＬＥプリフィックスは、ＨＬＥをサポートしていないプロセッサ上で無視されるが、ＸＴＥＳＴ命令は、ＨＬＥ又はＲＴＭのいずれもサポートしていないプロセッサ上で使用されると、＃ＵＤ例外が発生することに留意されたい。
【００４１】
ＨＬＥロックの要件
ＨＬＥ実行がトランザクション・コミットに成功するために、ロックが特定の特性を満たし、ロックへのアクセスが次の特定のガイドラインに従っていなければならない。
【００４２】
ＸＲＥＬＥＡＳＥプリフィックスの付いた（prefixed）命令は、無効化されたロックの値を、ロック取得の前に有していた値に復元する必要がある。これにより、ハードウェアは、書き込みセットに追加することなく、安全にロックを無効化することができる。ロック解放（ＸＲＥＬＥＡＳＥプリフィックスが付加された）命令のデータ・サイズ及びデータ・アドレスは、ロック取得（ＸＡＣＱＵＩＲＥプリフィックスの付いた）命令のものと一致していなければならず、ロックはキャッシュライン境界をまたぐことはできない。
【００４３】
ソフトウェアは、ＸＲＥＬＥＡＳＥプリフィックス命令以外のいかなる命令によってもトランザクションＨＬＥ領域内の無効化されたロックに書き込みを行うべきではなく、さもなければ、こうした書き込みがトランザクション・アボートを引き起こすことがある。さらに、再帰ロック（recursive lock）（スレッドが、最初にロックを解放することなく、同じロックを複数回取得する場合）もトランザクション・アボートを引き起こすことがある。ソフトウェアは、クリティカル・セクション内で取得された無効化されたロックの結果を観察できることに留意されたい。こうした読み取り操作は、書き込みの値をロックに戻す。
【００４４】
プロセッサは、これらのガイドラインの違反を自動的に検出し、無効化を行うことなく、安全に非トランザクション実行に遷移する。Ｉｎｔｅｌ  ＴＳＸは、キャッシュラインの粒度で競合を検出するので、無効化されたロックと同じキャッシュライン上に配置されたデータへの書き込みは、同じロックを無効化する他の論理プロセッサによってデータ競合として検出される可能性がある。
【００４５】
トランザクション・ネスト化
ＨＬＥ及びＲＴＭの両方とも、ネスト化された（nested）トランザクション領域をサポートする。しかしながら、トランザクション・アボートは、状態を、トランザクション実行を開始した操作に、即ち、最外（outermost）ＸＡＣＱＵＩＲＥプリフィックスの付いたＨＬＥ適格（HLE-eligible）命令、又は最外ＸＢＥＧＩＮ命令のいずれかに復元する。プロセッサは、全てのネスト化トランザクションを１つのトランザクションとして扱う。
【００４６】
ＨＬＥのネスト化及び無効化
プログラマーは、ＨＬＥ領域を、ＭＡＸ＿ＨＬＥ＿ＮＥＳＴ＿ＣＯＵＮＴの実装指定深さまでネスト化することができる。各論理プロセッサは、ネスト化カウントを内部で追跡するが、このカウントはソフトウェアに利用可能でない。ＸＡＣＱＵＩＲＥプリフィックスの付いたＨＬＥ適格命令はネスト化カウントをインクリメントし、ＸＲＥＬＥＡＳＥプリフィックスの付いたＨＬＥ適格命令はこれをデクリメントする。論理プロセッサは、ネスト化カウントがゼロから１になったとき、トランザクション実行に入る。論理プロセッサは、ネスト化カウントがゼロになったときにのみ、コミットしようと試みる。ネスト化カウントがＭＡＸ＿ＨＬＥ＿ＮＥＳＴ＿ＣＯＵＮＴを上回った場合には、トランザクション・アボートが発生することがある。
【００４７】
ネスト化されたＨＬＥ領域をサポートすることに加えて、プロセッサはまた、複数のネスト化されたロックを無効化することもできる。プロセッサは、無効化に関してロックを追跡し、そのロックに対するＸＡＣＱＵＩＲＥプリフィックスの付いたＨＬＥ適格命令から開始し、その同じロックに対するＸＲＥＬＥＡＳＥプリフィックスの付いたＨＬＥ適格命令で終了する。プロセッサは、常に、ロックのＭＡＸ＿ＨＬＥ＿ＥＬＩＤＥＤ＿ＬＯＣＫＳ数まで追跡することができる。例えば、実装が２のＭＡＸ＿ＨＬＥ＿ＥＬＩＤＥＤ＿ＬＯＣＫＳ値をサポートし、プログラマーが３つのＨＬＥ識別クリティカル・セクションをネスト化する場合（ロックのどれに対しても介在するＸＲＥＬＥＡＳＥプリフィックスの付いたＨＬＥ適格命令を実行することなく、３つの個別ロックに対して介在するＸＡＣＱＵＩＲＥプリフィックスの付いたＨＬＥ適格命令を実行することによって）、最初の２つのロックは無効化されるが、第３のロックは無効化されない（しかし、トランザクションの書き込みセットに追加される）。しかしながら、実行は依然としてトランザクションに続行する。２つの無効化されたロックの１つに対してＸＲＥＬＥＡＳＥに遭遇すると、ＸＡＣＱＵＩＲＥプリフィックスの付いたＨＬＥ適格命令を介して取得された後続のロックが無効化される。
【００４８】
プロセッサは、全ての無効化されたＸＡＣＱＵＩＲＥ及びＸＲＥＬＥＡＳＥのペアが一致し、ネスト化カウントがゼロになり、ロックが要件を満たした場合に、ＨＬＥ実行をコミットしようと試みる。実行がアトミックにコミットできない場合、実行は、あたかも最初の命令がＸＡＣＱＵＩＲＥプリフィックスを有していなかったかのように、無効化を行わない非トランザクション実行に遷移する。
【００４９】
ＲＴＭのネスト化
プログラマーは、ＲＴＭ領域を、実装指定のＭＡＸ＿ＲＴＭ＿ＮＥＳＴ＿ＣＯＵＮＴまでネスト化することができる。論理プロセッサは、ネスト化カウントを内部で追跡するが、このカウントはソフトウェアに利用可能でない。ＸＢＥＧＩＮ命令はネスト化カウントをインクリメントし、ＸＥＮＤ命令はネスト化カウントをデクリメントする。論理プロセッサは、ネスト化カウントがゼロになった場合にのみ、コミットを試みる。ネスト化カウントがＭＡＸ＿ＲＴＭ＿ＮＥＳＴ＿ＣＯＵＮＴを上回った場合には、トランザクション・アボートが発生する。
【００５０】
ＨＬＥ及びＲＴＭのネスト化
ＨＬＥ及びＲＴＭは、２つの代替的なソフトウェア・インターフェースを一般的なトランザクション実行機能に提供する。トランザクション処理の挙動は、例えばＨＬＥがＲＴＭの内部にある又はＲＴＭがＨＬＥの内部にあるなど、ＨＬＥ及びＲＴＭが互いにネスト化された場合、実装固有のものである。しかしながら、全ての場合において、実装は、ＨＬＥ及びＲＴＭのセマンティクスを維持する。ある実装は、ＲＴＭ領域内で使用されるとき、ＨＬＥヒントを無視するように選択することができ、ＲＴＭ命令がＨＬＥ領域内で使用されるとき、トランザクション・アボートを発生させることがある。後者の場合、プロセッサは実際に無効化を行わずにＨＬＥ領域を再実行し、次にＲＴＭ命令を実行するので、トランザクション実行から非トランザクション実行への遷移はシームレスに行われる。
【００５１】
アボート・ステータスの定義
ＲＴＭは、ＥＡＸレジスタを使用して、アボート・ステータスをソフトウェアに伝える。ＲＴＭアボートの後、ＥＡＸレジスタは、以下の定義を有する。
【表１】
0006734760.tif 000002
【００５２】
ＲＴＭに関するＥＡＸアボート・ステータスは、アボートの原因のみを提供する。これ自体が、ＲＴＭ領域に関してアボートが発生したか又はコミットが発生したかをコード化するものではない。ＥＡＸの値は、ＲＴＭアボートの後に、０になることがある。例えば、ＲＴＭ領域の内部でＣＰＵＩＤ命令を使用すると、トランザクション・アボートを引き起こすが、ＥＡＸビットのいずれかを設定する要件を満たさない場合がある。これにより、ＥＡＸの値が０になる場合がある。
【００５３】
ＲＴＭメモリの順序付け
ＲＴＭがコミットに成功すると、ＲＴＭ領域内の全てのメモリ操作はアトミックに実行されるように見える。ＲＴＭ領域内でメモリ操作が行われない場合でも、ＸＢＥＧＩＮの後にＸＥＮＤが続き、コミットに成功したＲＴＭ領域は、ＬＯＣＫプリフィックス命令と同じ順序付けセマンティクスを有する。
【００５４】
ＸＢＥＧＩＮ命令には、フェンス・セマンティクスがない。しかしながら、ＲＴＭ実行がアボートした場合、ＲＴＭ領域内部から全てのメモリ更新が廃棄され、あらゆる他の論理プロセッサから見えなくなる。
【００５５】
ＲＴＭ対応デバッガのサポート
デフォルトでは、ＲＴＭ領域内部のあらゆるデバッグ例外がトランザクション・アボートを引き起こし、アーキテクチャ状態が復旧し、ビット４がＥＡＸ内に設定された状態で、制御フローをフォールバック命令アドレスにリダイレクトする。しかしながら、ソフトウェア・デバッガが、デバッグ例外時に実行をインターセプトするのを可能にするために、ＲＴＭアーキテクチャは付加的な機能を提供する。
【００５６】
ＤＲ７のビット１１及びＩＡ３２＿ＤＥＢＵＧＣＴＬ＿ＭＳＲのビット１５が両方とも１である場合、デバッグ例外（＃ＤＢ）又はブレークポイント例外（＃ＢＰ）に起因するいずれかのＲＴＭアボートにより、実行がロールバックし、フォールバック・アドレスの代わりにＸＢＥＧＩＮ命令から再開する。このシナリオでは、ＥＡＸレジスタもまた、ＸＢＥＧＩＮ命令の時点に復元される。
【００５７】
プログラミング上の考慮事項
一般的に、通常プログラマーが指定した領域は、トランザクション実行及びコミットに成功することが想定される。しかしながら、Ｉｎｔｅｌ(登録商標)ＴＳＸでは、そうした保証はない。トランザクション実行は、様々な理由によりアボートされることがある。トランザクション機能を最大限に利用するために、プログラマーは、特定のガイドラインに従い、トランザクション実行のコミットが成功する可能性を高める必要がある。
【００５８】
このセクションでは、トランザクション・アボートを引き起こし得る様々なイベントについて論じる。アーキテクチャは、後で実行をアボートするトランザクション内で行われた更新は決して見えるようにならないことを保証する。コミットされたトランザクション実行のみが、アーキテクチャ状態の更新を開始する。トランザクション・アボートは、決して機能的不具合を引き起こすことはなく、性能にのみに影響を与える。
【００５９】
命令ベースの考慮事項
プログラマーは、トランザクション（ＨＬＥ又はＲＴＭ）の内部であらゆる命令を安全に使用することができ、あらゆる特権レベルでトランザクションを使用することができる。しかしながら、一部の命令は常にトランザクション実行をアボートさせ、実行は非トランザクション経路にシームレスかつ安全に遷移される。
【００６０】
Ｉｎｔｅｌ  ＴＳＸでは、殆どの一般的な命令を、アボートを引き起こさずに、トランザクション内部で使用することができる。通常、以下の操作により、トランザクションでアボートが引き起こされることはない。
・命令ポインタ・レジスタ、汎用レジスタ（ＧＰＲ）及びステータス・ラグ（ＣＦ、ＯＦ、ＳＦ、ＰＦ、ＡＦ、及びＺＦ）に対する操作、及び、
・ＸＭＭレジスタ及びＹＭＭレジスタ、並びにＭＸＣＳＲレジスタに対する操作。
【００６１】
しかしながら、プログラマーは、トランザクション領域内でＳＳＥ操作及びＡＶＸ操作を混在させる際に注意深くなければならない。ＸＭＭレジスタにアクセスするＳＳＥ命令と、ＹＭＭレジスタにアクセスするＡＶＸ命令との混在により、トランザクションがアボートする可能性がある。プログラマーは、トランザクション内でＲＥＰ／ＲＥＰＮＥプリフィックスの付いた文字列操作を使用することができる。しかしながら、長い文字列はアボートを引き起こすことがある。さらに、ＣＬＤ及びＳＴＤ命令の使用は、これらがＤＦフラグの値を変えた場合に、アボートを引き起こすことがある。しかしながら、ＤＦが１である場合、ＳＴＤ命令はアボートを引き起こさない。同様に、ＤＦが０である場合、ＣＬＤ命令はアボートを引き起こさない。
【００６２】
トランザクション内部で使用されたときにアボートを引き起こすものとしてここで列挙されていない命令によりトランザクションがアボートされることは通常ない（例として、これらに限定されるものではないが、ＭＦＥＮＣＥ、ＬＦＥＮＣＥ、ＳＦＥＮＣＥ、ＲＤＴＳＣ、ＲＤＴＳＣＰ等が挙げられる）。
【００６３】
以下の命令は、あらゆる実装でトランザクション実行をアボートする。
・ＸＡＢＯＲＴ
・ＣＰＵＩＤ
・ＰＡＵＳＥ
【００６４】
さらに、一部の実装では、以下の命令は常にトランザクション・アボートを引き起こし得る。これらの命令は通常、トランザクション領域の内部で使用されることは想定されていない。しかしながら、これらの命令がトランザクション・アボートを引き起こすかどうかは実装に依存するため、プログラマーは、これらの命令に依存してトランザクション・アボートを強制すべきではない。
・Ｘ８７及びＭＭＸ（商標）のアーキテクチャ状態に対する操作。これには、ＦＸＲＳＴＯＲ及びＦＸＳＡＶＥ命令を含む、全てのＭＭＸ及びＸ８７命令が含まれる。
・ＥＦＬＡＧの非ステータス部分の更新：ＣＬＩ、ＳＴＩ、ＰＯＰＦＤ、ＰＯＰＦＱ、ＣＬＴＳ。
・セグメント・レジスタ、デバッグ・レジスタ、及び／又は制御レジスタを更新する命令：ＤＳ／ＥＳ／ＦＳ／ＧＳ／ＳＳに対するＭＯＶ、ＰＯＰ  ＤＳ／ＥＳ／ＦＳ／ＧＳ／ＳＳ、ＬＤＳ、ＬＥＳ、ＬＦＳ、ＬＧＳ、ＬＳＳ、ＳＷＡＰＧＳ、ＷＲＦＳＢＡＳＥ、ＷＲＧＳＢＡＳＥ、ＬＧＤＴ、ＳＧＤＴ、ＬＩＤＴ、ＳＩＤＴ、ＬＬＤＴ、ＳＬＤＴ、ＬＴＲ、ＳＴＲ、Ｆａｒ  ＣＡＬＬ、Ｆａｒ  ＪＭＰ、Ｆａｒ  ＲＥＴ、ＩＲＥＴ、ＤＲｘに対するＭＯＶ、ＣＲ０／ＣＲ２／ＣＲ３／ＣＲ４／ＣＲ８に対するＭＯＶ、及びＬＭＳＷ。
・リング遷移：ＳＹＳＥＮＴＥＲ、ＳＹＳＣＡＬＬ、ＳＹＳＥＸＩＴ、及びＳＹＳＲＥＴ。
・ＴＬＢ及びキャッシュ可能な制御：ＣＬＦＬＵＳＨ、ＩＮＶＤ、ＷＢＩＮＶＤ、ＩＮＶＬＰＧ、ＩＮＶＰＣＩＤ、及び非一時的ヒントを有するメモリ命令（ＭＯＶＮＴＤＱＡ、ＭＯＶＮＴＤＱ、ＭＯＶＮＴＩ、ＭＯＶＮＴＰＤ、ＭＯＶＮＴＰＳ、及びＭＯＶＮＴＱ）。
・プロセッサ状態の保存：ＸＳＡＶＥ、ＸＳＡＶＥＯＰＴ、及びＸＲＳＴＯＲ。
・割り込み：ＩＮＴｎ、ＩＮＴＯ。
・ＩＯ：ＩＮ、ＩＮＳ、ＲＥＰ  ＩＮＳ、ＯＵＴ、ＯＵＴＳ、ＲＥＰ  ＯＵＴＳ、及びその変形。
・ＶＭＸ：ＶＭＰＴＲＬＤ、ＶＭＰＴＲＳＴ、ＶＭＣＬＥＡＲ、ＶＭＲＥＡＤ、ＶＭＷＲＩＴＥ、ＶＭＣＡＬＬ、ＶＭＬＡＵＮＣＨ、ＶＭＲＥＳＵＭＥ、ＶＭＸＯＦＦ、ＶＭＸＯＮ、ＩＮＶＥＰＴ、及びＩＮＶＶＰＩＤ。
・ＳＭＸ：ＧＥＴＳＥＣ。
・ＵＤ２、ＲＳＭ、ＲＤＭＳＲ、ＷＲＭＳＲ、ＨＬＴ、ＭＯＮＩＴＯＲ、ＭＷＡＩＴ、ＸＳＥＴＢＶ、ＶＺＥＲＯＵＰＰＥＲ、ＭＡＳＫＭＯＶＱ、及びＶ／ＭＡＳＫＭＯＶＤＱＵ。
【００６５】
ランタイムの考慮事項
命令ベースの考慮事項に加えて、ランタイム・イベントによりトランザクション実行がアボートされる場合がある。これは、データ・アクセス・パターン又はマイクロ・アーキテクチャの実装機能に起因し得る。以下のリストは、全てのアボートの原因を包括的に説明したものではない。
【００６６】
ソフトウェアに対して暴露しなければならないトランザクションのフォルト又はトラップは抑止される。トランザクション実行がアボートすると、フォルト又はトラップが発生しなかったように、実行は非トランザクション実行に遷移する。例外がマスクされない場合、そのマスクされない例外はトランザクション・アボートを引き起こし、状態は、例外が発生しなかったように見える。
【００６７】
トランザクション実行中に同期例外イベント（＃ＤＥ、＃ＯＦ、＃ＮＰ、＃ＳＳ、＃ＧＰ、＃ＢＲ、＃ＵＤ、＃ＡＣ、＃ＸＦ、＃ＰＦ、＃ＮＭ、＃ＴＳ、＃ＭＦ、＃ＤＢ、＃ＢＰ／ＩＮＴ３）が発生すると、トランザクション実行はコミットされず、非トランザクション実行が必要となる場合がある。これらのイベントは、発生しなかったかのように抑止される。ＨＬＥでは、非トランザクション・コード経路はトランザクション・コード経路と同一であるため、例外を引き起こした命令が非トランザクションに再実行されると、これらのイベントは再度現れ、非トランザクション実行で関連する同期イベントが適切に配信される。トランザクション実行中に非同期イベント（ＮＭＩ、ＳＭＩ、ＩＮＴＲ、ＩＰＩ、ＰＭＩ等）が発生すると、トランザクション実行はアボートされ、非トランザクション実行に遷移し得る。非同期イベントは保留され、トランザクション・アボートが処理された後に処理される。
【００６８】
トランザクションは、ライトバック・キャッシュが可能なメモリ・タイプの操作のみをサポートする。トランザクションがいずれかの他のメモリ・タイプの操作を含む場合、トランザクションは常にアボートし得る。これには、ＵＣメモリ・タイプにフェッチする命令が含まれる。
【００６９】
トランザクション領域内のメモリ・アクセスには、プロセッサが参照するページ・テーブル・エントリのアクセス（Ａｃｃｅｓｓｅｄ）フラグ及びダーティ（Ｄｉｒｔｙ）フラグを設定しなければならないことがある。プロセッサがこの制御をどのように行うかの挙動は、実装固有である。一部の実装では、トランザクション領域が続いてアボートされた場合でも、これらのフラグに対する更新を外部から見えるようにすることが可能である。一部のＩｎｔｅｌ(登録商標)ＴＳＸの実装では、これらのフラグを更新する必要がある場合、トランザクション実行のアボートを選択することがある。さらに、プロセッサのページ・テーブル・ウォークが、それ自体に書き込まれるが、コミットされていない状態へのアクセスをもたらす場合がある。一部のＩｎｔｅｌ(登録商標)ＴＳＸの実装では、このような状況でトランザクション領域の実行のアボートを選択することがある。それにも関わらず、アーキテクチャは、トランザクション領域がアボートした場合、トランザクションに書き込まれた状態が、アーキテクチャ上、ＴＬＢのような構造の挙動により目に入らないようにすることを保証する。
【００７０】
自己修正（self-modifying）コードのトランザクション実行がトランザクション・アボートを引き起こすこともある。プログラマーは、ＨＬＥ及びＲＴＭを使用する場合でも、自己修正コード及びクロス修正コードの記述に際してＩｎｔｅｌが推奨するガイドラインに引き続き従う必要がある。ＲＴＭ及びＨＬＥの実装では通常、共通のトランザクション領域を実行するための十分なリソースが提供されるが、トランザクション領域の実装を制約し、サイズを必要以上に大きくすると、トランザクション実行がアボートされ、非トランザクション実行に遷移することがある。アーキテクチャは、トランザクション実行で利用可能なリソース量を保証せず、また、トランザクション実行が常に成功することを保証しない。
【００７１】
トランザクション領域内にアクセスするキャッシュラインに対して競合する要求を行うと、トランザクション実行の成功の妨げとなることがある。例えば、論理プロセッサＰ０がトランザクション領域内のラインＡを読み取り、別の論理プロセッサＰ１がラインＡ（トランザクション領域の内部又は外部のいずれか）に書き込み、論理プロセッサＰ１の書き込みがプロセッサＰ０のトランザクション実行能力を妨げる場合には、論理プロセッサＰ０はアボートし得る。
【００７２】
同様に、Ｐ０がトランザクション領域内のラインＡに書き込み、Ｐ１がラインＡ（トランザクション領域の内部又は外部のいずれか）を読み取る又は書き込む場合にも、Ｐ１のラインＡへのアクセスがＰ０のトランザクション実行能力を妨げる場合には、Ｐ０はアボートし得る。さらに、他のコヒーレンス・トラフィックが競合する要求として見え、アボートを引き起こすことがある。これら偽の競合（false conflict）が発生することはあるが、一般的ではないと考えられる。上記のシナリオにおいて、Ｐ０がアボートするか又はＰ１がアボートするかを決定するための競合解消ポリシーは、実装固有である。
【００７３】
一般的なトランザクション実行の実施形態：
非特許文献２によれば、基本的に、アトミックな及び分離された（isolated）トランザクション領域を実装するのに必要な３つの機構：即ち、バージョニング（versioning）、競合検出、及びコンテンション管理（contentionmanagement）が存在する。
【００７４】
トランザクション・コード領域がアトミックに見えるようにするために、そのトランザクション・コード領域により行われた全ての修正を、コミット時まで格納し、他のトランザクションから分離する必要がある。本システムは、バージョニング・ポリシーの実装によってこれを行う。２つのバージョニング・パラダイム：即ち、ｅａｇｅｒ及びｌａｚｙが存在する。ｅａｇｅｒバージョニング・システムは、新しく生成されたトランザクション値をイン・プレースに（in place）格納し、以前のメモリ値は、ｕｎｄｏ（取り消し）ログと呼ばれるものの中に別に格納する。ｌａｚｙバージョニング・システムは、新しい値を、書き込みバッファと呼ばれるものの中に一時的に格納し、コミット時にのみこれらをメモリにコピーする。どちらのシステムにおいても、新しいバージョンの格納の最適化のために、キャッシュが使用される。
【００７５】
トランザクションがアトミックに実行されるように見えることを保証するために、競合を検出し、解決する必要がある。２つのシステム、即ちｅａｇｅｒ及びｌａｚｙバージョニング・システムは、楽観的（optimistic）又は悲観的（pessimistic）のいずれかの競合検出ポリシーを実装することにより、競合を検出する。楽観的システムは、トランザクションを並行して実行し、トランザクションのコミット時にのみ競合をチェックする。悲観的システムは、ロード及びストアごとに競合をチェックする。バージョニングと同様に、競合検出もまたキャッシュを使用し、各ラインを読み取りセットの一部、書き込みセットの一部、又はその両方としてマーク付けする。２つのシステムは、コンテンション管理ポリシーを実装することにより、競合を解決する。多数のコンテンション管理ポリシーが存在し、一部は楽観的競合検出により適し、一部は悲観的競合検出により適している。幾つかの例示的なポリシーを以下に説明する。
【００７６】
各トランザクション・メモリ（ＴＭ）システムは、バージョニング検出と競合検出の両方を必要とするので、これらの選択肢は４つの個別のＴＭ設計：Ｅａｇｅｒ−悲観的（Ｐｅｓｓｉｍｉｓｔｉｃ）（ＥＰ）、Ｅａｇｅｒ−楽観的（Ｏｐｔｉｍｉｓｔｉｃ）（ＥＯ）、Ｌａｚｙ−悲観的（ＬＰ）、及びＬａｚｙ−楽観的（ＬＯ）を生み出す。表２は、４つの個別のＴＭ設計の全てを簡単に説明する。
【００７７】
図１及び図２は、マルチコアＴＭ環境の一例を示す。図１は、相互接続制御１２０ａ、１２０ｂの管理下で、相互接続１２２と接続された、１つのダイ１００上の多数のＴＭ対応ＣＰＵ（ＣＰＵ１  １１４ａ、ＣＰＵ２  １１４ｂ等）を示す。各々のＣＰＵ１１４ａ、１１４ｂ（プロセッサとしても知られる）は、実行されるメモリからの命令をキャッシュするための命令キャッシュ１１６ａ、１１６ｂと、ＣＰＵ１１４ａ、１１４ｂ（図１では、各々のＣＰＵ１１４ａ、１１４ｂ及びその関連したキャッシュは、１１２ａ、１１２ｂとして参照される）によって動作されるメモリ位置のデータ（オペランド）をキャッシュするためのＴＭサポートを有するデータ・キャッシュ１１８ａ、１１８ｂとから成る分割キャッシュ（split cache）を有することができる。１つの実装において、複数のダイ１００のキャッシュが相互接続され、複数のダイ１００のキャッシュ間のキャッシュ・コヒーレンシをサポートする。１つの実装においては、分割キャッシュではなく単一のキャッシュが使用され、命令及びデータの両方を保持する。１つの実装においては、ＣＰＵキャッシュは、階層キャッシュ構造におけるキャッシュ・レベル１である。例えば、各ダイ１００は、共有キャッシュ１２４を、ダイ１００上の全てのＣＰＵの間で共有されるように使用することができる。別の実装においては、各ダイは、全てのダイ１００の全てのプロセッサの間で共有される共有キャッシュ１２４へのアクセスを有することができる。
【００７８】
図２は、ＴＭをサポートするための追加を含む、ＣＰＵ１１４を有する例示的なトランザクションＣＰＵ環境１１２の詳細を示す。トランザクションＣＰＵ（プロセッサ）１１４は、レジスタ・チェックポイント１２６及び特殊ＴＭレジスタ１２８をサポートするためのハードウェアを含むことができる。トランザクションＣＰＵキャッシュは、従来のキャッシュのＭＥＳＩビット１３０、タグ１４０及びデータ１４２を含むことができるが、同様に、例えば、トランザクション実行中にＣＰＵ１１４によりラインが読み取られたことを示すＲビット１３２と、トランザクション実行中にＣＰＵ１１４によりラインに書き込まれたことを示すＷビット１３８とを含むことができる。
【００７９】
いずれのＴＭシステムにおいても、プログラマーにとって重要な詳細は、非トランザクション・アクセスがどのようにトランザクションと対話するかである。意図的に、トランザクション・アクセスは、上記の機構を用いて互いから遮蔽される。しかしながら、通常の非トランザクション・ロードと、そのアドレスについての新しい値を含むトランザクションとの間の対話を依然として考慮する必要がある。さらに、非トランザクション・ストアとそのアドレスを読み取ったトランザクションとの間の対話も検討する必要がある。これらは、データベースの概念分離の問題である。
【００８０】
あらゆる非トランザクション・ロード及びストアがアトミック・トランザクションのように動作する場合、ＴＭシステムは、強い分離性（strong isolation）（強いアトミック性（strong atomicity）と呼ばれることもある）を実装すると言われる。従って、非トランザクション・ロードは、コミットされないデータを見ることができず、非トランザクション・ストアは、そのアドレスを読み取ったいずれのトランザクションにおいても、アトミック性違反を引き起こす。これが当てはまらないシステムは、弱いアトミック性（weak atomicity）と呼ばれることもある、弱い分離性（weakisolation）を実装すると言われる。
【００８１】
強い分離性の概念化及び実装が相対的に容易であるため、強い分離性は、弱い分離性よりも望ましいことが多い。さらに、プログラマーが何らかの共有メモリ参照をトランザクションで囲うことを忘れた場合、バグが生じ、強い分離性では、プログラマーはアトミック性違反を引き起こす非トランザクション領域を見るので、プログラマーは、単一のデバッグ・インターフェースを用いて見落としを検出することが多い。また、１つのモデルにおいて書かれたプログラムは、別のモデル上では異なるように動作する場合がある。さらに、強い分離性は、弱い分離性よりもハードウェアＴＭにおいてサポートが容易であることが多い。強い分離性では、コヒーレンス・プロトコルが既にプロセッサ間のロード及びストア通信を管理しているので、トランザクションは、非トランザクション・ロード及びストアを検出し、適切に動作することができる。ソフトウェア・トランザクション・メモリ（ＴＭ）において強い分離性を実装するためには、非トランザクション・コードを、読み取りバリア（read barrier）及び書き込みバリア（write barrier）を含むように修正する必要があり、性能を損なう可能性がある。多くの不要なバリアを取り除くために多大な努力が費やされてきたが、こうした技術は複雑であることが多く、性能は、通常、ＨＴＭのものに比べてはるかに低い。
【表２】
0006734760.tif 000003
【００８２】
表２は、トランザクション・メモリの基本的な設計空間を示す（バーショニング及び競合検出）。
【００８３】
Ｅａｇｅｒ−悲観的（ＥＰ）
後述するこの最初のＴＭ設計は、Ｅａｇｅｒ−悲観的として知られる。ＥＰシステムは、その書き込みセットを「イン・プレースに」格納し（従って、「ｅａｇｅｒ」の名がある）、かつ、ロールバックをサポートするために、上書きされたラインの古い値を「ｕｎｄｏログ」に格納する。プロセッサは、Ｗキャッシュ・ビット１３８及びＲキャッシュ・ビット１３２を用いて、読み取り及び書き込みセットを追跡し、スヌープした（snooped）ロード要求を受信したときに競合を検出する。恐らく、既知の文献におけるＥＰシステムの最も顕著な例は、ＬｏｇＴＭ及びＵＴＭである。
【００８４】
ＥＰシステムにおけるトランザクションの開始は、他のシステムにおけるトランザクションの開始とよく似ている：ｔｍ＿ｂｅｇｉｎ（）がレジスタ・チェックポイントを取り、あらゆるステータス・レジスタを初期化する。ＥＰシステムはまたｕｎｄｏログの初期化も必要とし、この詳細はログ・フォーマットに依存するが、多くの場合、予め割り当てられたスレッド・プライベート・メモリの領域へのログ・ベース・ポインタを初期化すること、及びログ境界レジスタをクリアすることを含む。
【００８５】
バージョニング：ＥＰにおいては、ｅａｇｅｒバージョニングが機能するように設計される方法に起因して、ＭＥＳＩビット１３０の状態遷移（Ｍｏｄｉｆｉｅｄ（修正）、Ｅｘｃｌｕｓｉｖｅ（排他）、Ｓｈａｒｅｄ（共有）、及びＩｎｖａｌｉｄ（無効）のコード状態に対応するキャッシュライン・インジケータ）は、殆ど変更されないままである。トランザクションの外部では、ＭＥＳＩビット１３０の状態遷移は、全く変更されないままである。トランザクション内部のラインを読み取るとき、標準的コヒーレンス遷移が適用され（Ｓ（Ｓｈａｒｅｄ）→Ｓ、Ｉ（Ｉｎｖａｌｉｄ）→Ｓ、又はＩ→Ｅ（Ｅｘｃｌｕｓｉｖｅ））、必要に応じてロード・ミスを発行するが、Ｒ１３２ビットも設定される。同様に、ラインの書き込みに、標準的遷移が適用され（Ｓ→Ｍ、Ｅ→Ｉ、Ｉ→Ｍ）、必要に応じてミスを発行するが、加えてＷ１３８（Ｗｒｉｔｅ、書き込み）ビットも設定する。現トランザクションがアボートした場合には、ラインが初めて書き込まれる際、ライン全体の古いバージョンをロードし、次に、ｕｎｄｏログに書き込んで保存する。次に、新しく書き込まれたデータが、古いデータの上に「イン・プレースに」格納される。
【００８６】
競合検出：悲観的競合検出は、ミス、又はアップグレード時に交換されるコヒーレンス・メッセージを用いて、トランザクション間の競合を探す。トランザクション内で読み取りミスが発生すると、他のプロセッサはロード要求を受信するが、それらが必要とされるラインを有していない場合には、この要求を無視する。他のプロセッサが、必要とされるラインを非投機的に有する又はラインＲ１３２（Ｒｅａｄ、読み取り）を有する場合、このラインをＳにダウングレードし、ある場合には、それらがＭＥＳＩのビット１３０Ｍ又はＥ状態でラインを有する場合、キャッシュ間転送（cash-to-cash transfer）を発行する。しかしながら、キャッシュがラインＷ１３８を有する場合には、２つのトランザクション間に競合が検出され、追加のアクションを取らなければならない。
【００８７】
同様に、（最初の書き込み時に）トランザクションがラインをｓｈａｒｅｄからｍｏｄｉｆｉｅｄにアップグレードしようとした際、トランザクションは、競合の検出にも使用される排他的ロード要求を発行する。受信しているキャッシュがラインを非投機的に有する場合、次に、そのラインは無効にされ、特定の場合には、キャッシュ間転送（Ｍ又はＥ状態）が発行される。しかしながら、このラインがＲ１３２又はＷ１３８である場合には、競合が検出される。
【００８８】
妥当性検査：競合検出はあらゆるロードで実施されるので、トランザクションは常に、それぞれの書き込みセットに対する排他的アクセスを有する。従って、妥当性検査は、いずれの付加的な作業も必要としない。
【００８９】
コミット：ｅａｇｅｒバージョニングはデータ項目の新たなバージョンをイン・プレースに格納するので、コミット・プロセスは、単にＷビット１３８及びＲビット１３２をクリアし、ｕｎｄｏログを廃棄する。
【００９０】
アボート：トランザクションがロールバックすると、ｕｎｄｏログ内の各キャッシュラインのオリジナルのバージョンを復元しなければならず、プロセスは、ログの「アンロール（unrolling）」又は「適用」と呼ばれる。これは、ｔｍ＿ｄｉｓｃａｒｄ（）の間に行われ、他のトランザクションに関してアトミックでなければならない。具体的には、競合を検出するために、書き込みセットを依然として使用しなければならない：このトランザクションは、そのｕｎｄｏログ内にラインの正しいバージョンのみを有し、要求中のトランザクションは、そのログから正しいバージョンを復元するのを待たなくてはならない。こうしたログは、ハードウェア状態マシン又はソフトウェア・アボート・ハンドラを用いて適用することができる。
【００９１】
Ｅａｇｅｒ−悲観的は、以下の特徴を有する：コミットは単純であり、イン・プレースにあるため非常に高速である。同様に、妥当性検査はノー・オペレーション（ｎｏ−ｏｐ）である。悲観的競合検出は、競合を早期に検出し、それにより、「失敗させられた（doomed）」トランザクションの数が減少する。例えば、２つのトランザクションが、Ｗｒｉｔｅ−Ａｆｔｅｒ−Ｒｅａｄ依存関係に関与する場合、その依存関係は、悲観的競合検出において瞬時に検出される。しかしながら、楽観的競合検出においては、ライタ（writer）がコミットするまで、そうした競合は検出されない。
【００９２】
Ｅａｇｅｒ−悲観的はまた、以下の特徴も有する：上述したように、初めてキャッシュラインに書き込まれる際、古い値をログに書き込む必要があり、余分なキャッシュ・アクセスを招く。アボートはログの取り消し（ｕｎｄｏ）を必要とするため、費用がかかる。ロードは、ログ内のキャッシュラインごとに発行しなければならず、恐らく、次のラインに進む前にメインメモリまで前進する。悲観的競合検出はまた、特定のシリアル化可能なスケジュールの存在を防止する。
【００９３】
さらに、競合は、それらが発生した時に処理されるので、ライブロック（livelock）の可能性があり、前方進行を保証するために、慎重なコンテンション管理機構を利用しなければならない。
【００９４】
Ｌａｚｙ−楽観的（ＬＯ）
別の一般的なＴＭ設計は、Ｌａｚｙ−楽観的（ＬＯ）であり、これは、その書き込みセットを「書き込みバッファ」又は「ｒｅｄｏログ」に格納し、コミット時に競合を検出する（依然として、Ｒ１３２及びＷ１３８ビットを使用する）。
【００９５】
バージョニング：ＥＰシステムと同様に、ＬＯ設計のＭＥＳＩプロトコルが、トランザクションの外側で実施される。トランザクションの内部に入ると、ラインの読み取りは標準的ＭＥＳＩ遷移を招くが、同様にＲ１３２ビットも設定する。同様に、ラインの書き込みは、ラインのＷ１３８ビットを設定するが、ＬＯ設計のＭＥＳＩ遷移の処理は、ＥＰ設計のものとは異なる。第１に、ｌａｚｙバージョニングにおいては、書き込まれたデータの新しいバージョンは、コミットまでキャッシュ階層に格納されるが、他のトランザクションは、メモリ又は他のキャッシュにおいて利用可能な古いバージョンにアクセスすることができる。古いバージョンを利用可能にするために、トランザクションによる最初の書き込み時に、ダーティ・ライン（Ｍライン）を無効化しなければならない。第２に、楽観的競合検出の特徴のため、アップグレード・ミスは必要とされない：競合検出はコミット時に行われるので、トランザクションがＳ状態のラインを有する場合、トランザクションは単にラインに書き込み、変更を他のトランザクションと通信することなく、そのラインをＭ状態にアップグレードするだけでよい。
【００９６】
競合検出及び妥当性検査：トランザクションを検証し、競合を検出するために、ＬＯは、コミットの準備をしているときのみ、投機的に修正されたラインのアドレスを他のトランザクションに通信する。妥当性検査において、プロセッサは、書き込みセット内の全てのアドレスを含む、１つの、恐らくは大容量の、ネットワーク・パケットを送信する。データは送信されないが、コミッタ（committer）のキャッシュ内に残され、ダーティ（Ｍ）とマーク付けされる。Ｗとマーク付けされたラインを求めてキャッシュを検索することなくこのパケットを構築するために、これらの投機的に修正されたラインを追跡するために、キャッシュラインごとに１ビットを有する、「ストア・バッファ」と呼ばれる簡潔ビットベクトル（simple bit vector）を使用する。他のトランザクションは、このアドレス・パケットを使用して競合を検出する：アドレスがキャッシュ内に見つかり、Ｒビット１３２及び／又はＷビット１３８が設定された場合、競合が開始される。ラインは見つかったが、Ｒ１３２もＷ１３８も設定されない場合には、ラインは単に無効にされ、これは排他的ロードの処理に類似している。
【００９７】
トランザクションのアトミック性をサポートするために、これらのアドレス・パケットをアトミックに処理しなければならない、即ち、同じアドレスに対して２つのアドレス・パケットが同時に存在することはできない。ＬＯシステムにおいては、これは、アドレス・パケットを送信する前に、単にグローバル・コミット・トークンを獲得することにより達成することができる。しかしながら、最初にアドレス・パケットを送信し、応答を収集し、順序付けプロトコルを実施し（恐らく最も古いトランザクションを先頭に）、そして、全ての応答が満たされた場合にコミットすることによって、２段階コミット・スキームを用いることもできる。
【００９８】
コミット：ひとたび妥当性検査が行われると、コミットは、いかなる特別な処理も必要とせず、単にＷビット１３８及びＲビット１３２、並びにストア・バッファをクリアするだけである。トランザクションの書き込みは既にキャッシュ内でダーティとしてマーク付けされており、これらのラインの他のキャッシュのコピーは、アドレス・パケットにより無効にされる。次に、他のプロセッサは、通常のコヒーレンス・プロトコルを通じてコミットされたデータにアクセスすることができる。
【００９９】
アボート：ロールバックは等しく容易である：書き込みセットがローカル・キャッシュ内に含まれているので、これらのラインを無効にすることができ、次に、Ｗビット１３８及びＲビット１３２、並びにストア・バッファをクリアする。ストア・バッファは、キャッシュを検索する必要なしに、Ｗラインを見つけて無効にすることを可能にする。
【０１００】
Ｌａｚｙ−楽観的は、以下の特徴を有する：即ち、アボートは非常に高速であり、付加的なロード又はストアを必要とせず、ローカル変更のみを行う。ＥＰにおいて見出されるよりも多くのシリアル化可能なスケジュールが存在することができ、これにより、トランザクションが独立であることを、ＬＯシステムがより積極的に推測することが可能になり、そのことはより高い性能をもたらし得る。最終的に、競合検出が遅いと前方進行の可能性が高くなり得る。
【０１０１】
Ｌａｚｙ−楽観的はまた、以下の特徴を有する：即ち、妥当性検査では、書き込みセットのサイズに比例してグローバル通信時間を要する。コミット時にしか競合が検出されないので、失敗させられたトランザクションは無駄な作業になり得る。
【０１０２】
Ｌａｚｙ−悲観的（ＬＰ）
Ｌａｚｙ−悲観的（ＬＰ）は、ＥＰとＬＯとの間のどこかに位置する第３のＴＭ設計選択肢を表し：新しく書き込まれたラインを書き込みバッファに格納するが、アクセスごとに競合を検出する。
【０１０３】
バージョニング：バージョニングはＬＯのものと類似しているが、同一ではない：ラインの読み取りによりＲビット１３２が設定され、ラインの書き込みによりＷビット１３８が設定され、ストア・バッファは、キャッシュ内のＷラインを追跡するために使用される。また、ＬＯと同様に、トランザクションによる最初の書き込み時に、ダーティ（Ｍ）ラインを無効化しなければならない。しかしながら、競合検出は悲観的であるので、トランザクション・ラインをＩ，Ｓ→Ｍにアップグレードするときに、ｌｏａｄ  ｅｘｃｌｕｓｉｖｅを実行しなければならず、これはＬＯとは異なる。
【０１０４】
競合検出：ＬＰの競合検出は、ＥＰのものと同様に動作する：コヒーレンス・メッセージを用いて、トランザクション間の競合を探す。
【０１０５】
妥当性検査：ＥＰにおけるように、悲観的競合検出は、どの時点でも、実行中のトランザクションがいずれの他の実行中のトランザクションとも競合しないことを保証し、従って、妥当性検査はノー・オペレーションである。
【０１０６】
コミット：ＬＯにおけるように、コミットは、特別な処理を必要としない：単にＷビット１３８及びＲビット１３２、並びにストア・バッファをクリアするだけである。
【０１０７】
アボート：ロールバックもまた、ＬＯのものに類似している：単にストア・バッファを用いて書き込みセットを無効にし、Ｗビット及びＲビット、並びにストア・バッファをクリアするだけである。
【０１０８】
ＬＰは、以下の特徴を有する：ＬＯと同様に、アボートは非常に高速である。ＥＰと同様に、悲観的競合検出の使用により、「失敗させられた」トランザクションの数が低減する。ＥＰと同様に、一部のシリアル化可能なスケジュールは許容されず、キャッシュ・ミスごとに競合検出を実施しなければならない。
【０１０９】
Ｅａｇｅｒ−楽観的（ＥＯ）
バージョニングと競合検出の最終的な組み合わせは、Ｅａｇｅｒ−楽観的（ＥＯ）である。ＥＯは、ＨＴＭシステムにとって最適とはいえない選択肢であり得る：新しいトランザクション・バージョンはイン・プレースに書き込まれるので、競合の発生時に（即ち、キャッシュ・ミスの発生時に）競合に気付かざるを得ない。しかしながら、ＥＯはコミット時まで競合の検出を待つので、これらのトランザクションは「ゾンビー（zombie）」になり、実行を続行し、リソースを浪費し、しかもアボートする「運命にある」。
【０１１０】
ＥＯは、ＳＴＭにおいて有用であることが分かっており、Ｂａｒｔｏｋ−ＳＴＭ及びＭｃＲＴにより実装される。ｌａｚｙバージョニングＳＴＭは、読み取りごとに書き込みバッファをチェックし、最新の値を読み取っていることを保証する必要がある。書き込みバッファはハードウェア構造ではないので、高価であり、従って、ｗｒｉｔｅ−ｉｎ−ｐｌａｃｅを好む。付加的に、競合のチェックもまた、ＳＴＭにおいて高価であるので、楽観的競合検出は、この操作をまとめて実行する利点をもたらす。
【０１１１】
コンテンション管理
ひとたびシステムがそのトランザクションのアボートを決定すると、トランザクションがどのようにロールバックするかについて上述したが、競合には２つのトランザクションが関与するので、どのトランザクションをアボートすべきか、そのアボートをどのように開始すべきか、及びアボートされたトランザクションをいつ再試行すべきかのトピックを検討する必要がある。これらは、トランザクション・メモリの重要なコンポーネントである、コンテンション管理（ＣＭ）により対処されるトピックである。システムがどのようにアボートを開始するか、及び、競合においてどのトランザクションをアボートすべきかを管理する種々の確立された方法が後述される。
【０１１２】
コンテンション管理ポリシー
コンテンション管理（ＣＭ）ポリシーは、競合に関与するどのトランザクションをアボートすべきか、及び、アボートされたトランザクションをいつ再試行すべきかを決定する機構である。例えば、アボートされたトランザクションを瞬時に再試行することが最良の性能につながらない場合が多い。逆に、アボートされたトランザクションの再試行を遅延させるバックオフ機構を用いるが、より良い性能をもたらすことがある。ＳＴＭは最初に最良のコンテンション管理ポリシーを見出すことに取り組んでおり、以下に概説したポリシーの多くは、もともとＳＴＭ向けに開発されたものである。
【０１１３】
ＣＭポリシーは、トランザクションのエイジ（age）、読み取りセット及び書き込みセットのサイズ、以前のアボート数などを含む、判断を行うための多数の尺度を利用する。こうした判断を行うための尺度の組み合わせは無限にあるが、特定の組み合わせを、複雑性が高い順に大まかに後述する。
【０１１４】
幾つかの専門語を確立するために、最初に、競合においては、アタッカ（attacker）及びデフェンダ（defender）の両者が存在することに留意されたい。アタッカは、共有メモリ位置へのアクセスを要求しているトランザクションである。悲観的競合検出においては、アタッカは、ｌｏａｄ又はｌｏａｄ  ｅｘｃｌｕｓｉｖｅを発行するトランザクションである。楽観的競合検出においては、アタッカは、検証を行おうとするトランザクションである。デフェンダは、どちらの場合も、アタッカの要求を受け取るトランザクションである。
【０１１５】
積極的な（Aggressive）ＣＭポリシーは、瞬時にかつ常にアタッカ又はデフェンダのいずれかを再試行する。ＬＯにおいては、積極的とは、アタッカが常に勝つことを意味し、従って、積極的は、コミッタの勝利と呼ばれることもある。こうしたポリシーは、最も初期のＬＯシステムに使用された。ＥＰの場合には、積極的は、デフェンダの勝利、又はアタッカの勝利のいずれかとすることができる。
【０１１６】
直ちに別の競合に直面する競合するトランザクションの再開は、必ず作業の無駄を引き起こす、即ち、相互接続される帯域幅がキャッシュ・ミスを再充填する。丁寧な（Polite）ＣＭポリシーは、競合を再開する前に、指数関数的バックオフ（exponentialbackoff）を使用する（しかし、線形を用いることもできる）。スターベーション（starvation）、即ち、プロセスがスケジューラにより割り当てられたリソースを有していない状況を防止するために、指数関数的バックオフは、およそｎ回の再試行後、トランザクションの成功の勝算を大幅に高める。
【０１１７】
競合解決の別の手法は、アタッカ又はデフェンダをランダムにアボートすることである（ランダム化（Randomized）と呼ばれるポリシー）。こうしたポリシーは、不必要なコンテンションを回避するためのランダム化バックオフ・スキームと組み合わせることができる。
【０１１８】
しかしながら、アボートするトランザクションを選択する際、ランダムな選択を行うことは、「多くの作業」を完了したトランザクションのアボートをもたらすことがあり、これによりリソースが無駄になり得る。こうした無駄を回避するために、どのトランザクションをアボートするかを決定するときに、トランザクションにおける完了した作業の量を考慮に入れることができる。作業の１つの尺度は、トランザクションのエイジとすることができる。他の方法として、Ｏｌｄｅｓｔ、Ｂｕｌｋ  ＴＭ、Ｓｉｚｅ  Ｍａｔｔｅｒｓ、Ｋａｒｍａ、及びＰｏｌｋａが挙げられる。Ｏｌｄｅｓｔは、競合における若い方のトランザクションをアボートする単純なタイムスタンプである。Ｂｕｌｋ  ＴＭはこのスキームを使用する。Ｓｉｚｅ  Ｍａｔｔｅｒｓは、Ｏｌｄｅｓｔに類似しているが、トランザクションのエイジの代わりに、読み取り／書き込みワードの数が優先順位として用いられ、一定数のアボートの後、Ｏｌｄｅｓｔに戻る。Ｋａｒｍａは類似しており、書き込みセットのサイズを優先順位として用いる。次に、一定の時間バックオフした後、ロールバックが進行する。アボートされたトランザクションは、アボートされた後もその優先順位を保持する（従って、Ｋａｒｍａの名が付いている）。Ｐｏｌｋａは、Ｋａｒｍａと同様であるが、所定の時間バックオフする代わりに、毎回指数関数的により多くバックオフする。
【０１１９】
アボートは作業を無駄にするので、デフェンダがそのトランザクションを終了するまでアタッカをストールすることがより良い性能をもたらすという議論は理にかなっている。残念なことに、こうした単純なスキームは、容易にデッドロックをもたらす。
【０１２０】
この問題を解決するために、デッドロック回避技術を用いることができる。Ｇｒｅｅｄｙは、デッドロックを回避するために２つの規則を用いる。第１の規則は、第１のトランザクションＴ１が第２のトランザクションＴ０よりも低い優先順位を有する場合、又は、Ｔ１が別のトランザクションを待っている場合、Ｔ１は、Ｔ０との競合時にアボートするというものである。第２の規則は、Ｔ１がＴ０よりも高い優先順位を有し、待機していない場合、Ｔ０は、Ｔ１のコミットまで待つか、アボートするか、又は待機を開始する（この場合、第１の規則が適用される）というものである。Ｇｒｅｅｄｙは、トランザクションのセットを実行するための期限についての何らかの保証を提供する。１つのＥＰ設計（ＬｏｇＴＭ）は、Ｇｒｅｅｄｙに類似したＣＭポリシーを用いて、保守的なデッドロック回避によるストールを達成する。
【０１２１】
例示的なＭＥＳＩコヒーレンシ規則は、マルチプロセッサ・キャッシュ・システムのキャッシュラインが存在し得る４つの可能な状態、即ち、次のように定義される４つの可能な状態Ｍ、Ｅ、Ｓ、Ｉを提供する。：
Ｍｏｄｉｆｉｅｄ（Ｍ）：キャッシュラインは現キャッシュ内にのみ存在し、ダーティである。即ち、キャッシュラインは、メインメモリ内の値から修正されている。キャッシュは、（もはや有効ではない）メインメモリ状態のいずれかの他の読み取りを可能にする前に、将来のいずれかの時点で、データをメインメモリにライトバックしなければならない。ライトバックによりラインはＥｘｃｌｕｓｉｖｅ状態に変化する。
Ｅｘｃｌｕｓｉｖｅ（Ｅ）：キャッシュラインは現キャッシュ内にのみ存在するが、クリーンである。即ち、キャッシュラインはメインメモリと一致する。キャッシュラインは、読み取り要求に応答して、いつでもＳｈａｒｅｄ状態に変わることが可能である。代替的に、キャッシュラインは、書き込みがなされると、Ｍｏｄｉｆｉｅｄ状態に変わることが可能である。
Ｓｈａｒｅｄ（Ｓ）：このキャッシュラインは、マシンの他のキャッシュ内に格納することができ、「クリーン」であることを示す。即ち、このキャッシュラインはメインメモリと一致する。ラインは、いつでも廃棄する（Ｉｎｖａｌｉｄ状態に変更する）ことができる。
Ｉｎｖａｌｉｄ（Ｉ）：このキャッシュラインが、無効である（未使用である）ことを示す。
【０１２２】
ＭＥＳＩコヒーレンシ・ビットに加えて又はそこに符号化された、各キャッシュラインに対して、ＴＭコヒーレンシ状態インジケータ（Ｒ１３２、Ｗ１３８）を設けることができる。Ｒ１３２インジケータは、現トランザクションがキャッシュラインのデータから読み取りを行ったことを示し、Ｗ１３８インジケータは、現トランザクションがキャッシュラインのデータに書き込みを行ったことを示す。
【０１２３】
ＴＭ設計の別の態様において、システムは、トランザクション・ストア・バッファを用いて設計される。２０００年３月３１日に出願され、「Ｍｅｔｈｏｄｓ  ａｎｄ  Ａｐｐａｒａｔｕｓ  ｆｏｒ  Ｒｅｏｒｄｅｒｉｎｇ  ａｎｄ  Ｒｅｎａｍｉｎｇ  Ｍｅｍｏｒｙ  Ｒｅｆｅｒｅｎｃｅｓ  ｉｎ  ａ  Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ」という名称の特許文献１は、少なくとも第１及び第２のプロセッサを有するマルチプロセッサ・コンピュータ・システムにおいて、メモリ参照を再順序付けし、再命名するための方法を教示する。第１のプロセッサは、第１のプライベート・キャッシュ及び第１のバッファを有し、第２のプロセッサは、第２のプライベート・キャッシュ及び第２のバッファを有する。この方法は、第１のプロセッサが受信した、データを格納する複数のゲート付きストア要求（gated store request）の各々について、第１のプライベート・キャッシュによって、データを含むキャッシュラインを排他的に取得するステップと、データを第１のバッファに格納するステップとを含む。第１のバッファが、第１のプロセッサから、特定のデータをロードするロード要求を受信すると、ロード及びストア操作のイン・オーダー・シーケンスに基づいて、特定のデータが、第１のバッファに格納されたデータの中から第１のプロセッサに提供される。第１のキャッシュが所定データのロード要求を第２のキャッシュから受信すると、エラー条件が示され、所定データのロード要求が第１のバッファに格納されたデータに対応する場合、プロセッサの少なくとも１つの現在の状態が以前の状態にリセットされる。
【０１２４】
１つのこうしたトランザクション・メモリ機能の主要実装コンポーネントは、トランザクション前の（pre-transaction）ＧＲ（汎用レジスタ）のコンテンツを保持するためのトランザクション・バックアップ・レジスタ・ファイル、トランザクション中にアクセスされたキャッシュラインを追跡するためのキャッシュ・ディレクトリ、トランザクションが終了するまでストアをバッファするためのストア・キャッシュ、及び種々の複雑な機能を実施するためのファームウェア・ルーチンである。本セクションでは、詳細な実装を説明する。
【０１２５】
ＩＢＭ  ｚＥｎｔｅｒｐｒｉｓｅ  ＥＣ１２エンタープライズ・サーバの実施形態
ＩＢＭ  ｚＥｎｔｅｒｐｒｉｓｅ  ＥＣ１２エンタープライズ・サーバは、トランザクション・メモリにトランザクション実行（ＴＸ）を導入し、非特許文献３に部分的に説明される。
【０１２６】
表３は、例示的なトランザクションを示す。例えば他のＣＰＵとの競合の繰り返しが原因で、あらゆる実行の試行においてアボート条件に遭遇し得るので、ＴＢＥＧＩＮで開始されたトランザクションが、ＴＥＮＤで常に成功裏に完了することは保証されない。このことは、プログラムが、例えば従来のロック・スキームを用いることにより、同じ操作を非トランザクション的に実行するためにフォールバック経路をサポートすることを必要とする。このことは、特にフォールバック経路が信頼できるコンパイラによって自動的に生成されない場合、プログラミング及びソフトウェア検証チームに著しい負担をかける。
【表３】
0006734760.tif 000004
【０１２７】
アボートされたトランザクション実行（ＴＸ）のトランザクションに対してフォールバック経路を提供する要件は、負担になり得る。共有データ構造で動作する多くのトランザクションは短いものであり、ぼんの数個の個別メモリ位置にタッチし、単純な命令しか使用しないと考えられる。これらのトランザクションに対して、ＩＢＭ  ｚＥｎｔｅｒｐｒｉｓｅ  ＥＣ１２は、制約付き（constrained）トランザクションの概念を導入する。通常の条件下で、ＣＰＵ１１４（図１）は、制約付きトランザクションが、たとえ必要な再試行の数に厳密な制限を与えなくても最終的に成功裏に終了することを保証する。制約付きトランザクションは、ＴＢＥＧＩＮＣ命令で開始し、通常のＴＥＮＤで終了する。制約付きトランザクション又は制約なしトランザクションとしてのタスクの実装は、一般的に、極めて匹敵する機能をもたらすが、制約付きトランザクションは、フォールバック経路に対する必要性を取り除くことにより、ソフトウェア開発を簡単化する。ＩＢＭのトランザクション実行アーキテクチャは、非特許文献４にさらに説明される。
【０１２８】
制約付きトランザクションは、ＴＢＥＧＩＮＣ命令で開始する。ＴＢＥＧＩＮＣで開始されたトランザクションは、プログラミング上の制約のリストに従わなければならない。そうでない場合には、プログラムはフィルタリング可能でない制約違反割り込み（non-filterable constraint-violation interruption）を利用する。例示的な制約として、これらに限定されるものではないが、トランザクションは最大３２個の命令を実行することができる、全ての命令テキストはメモリの連続した２５６バイトの範囲内になければならない、トランザクションは前方を指示する相対分岐のみを含む（即ち、ループ又はサブルーチン呼び出しはない）、トランザクションはメモリの最大４つの位置合わせされたオクトワード（オクトワードは３２バイトである）にアクセスすることができる、及び１０進演算又は浮動小数点数演算のような複雑な命令を除外するための命令セットの制限を挙げることができる。最大４つの位置合わせされたオクトワードをターゲットにするアトミックｃｏｍｐａｒｅ−ａｎｄ−ｓｗａｐの非常に強力な概念を含む、二重連結リスト（doubly linked list）−挿入／削除演算のような多くの一般的な演算を実行できるように、制約が選択される。同時に、制約は、将来のＣＰＵ実装が、制約の調整を必要とせずにトランザクションの成功を保証できるように保守的に選択されるが、それは、そうでない場合にソフトウェアの非互換性を招くためである。
【０１２９】
ＴＢＥＧＩＮＣは、浮動小数点数レジスタ（ＦＰＲ）制御及びプログラム割り込みフィルタリング・フィールドが存在せず、制御はゼロであると見なされる点を除いて、大部分は、ＴＳＸにおけるＸＢＥＧＩＮ又はＩＢＭ（登録商標）のｚＥＣ１２サーバ上のＸＢＥＧＩＮのように挙動する。トランザクションがアボートすると、命令アドレスは、制約付きトランザクションについての即時再試行及びアボート経路の不存在を反映して、命令の後ではなく、直接ＴＢＥＧＩＮＣに戻される。
【０１３０】
ネスト化されたトランザクションは、制約付きトランザクション内で許容されないが、ＴＢＥＧＩＮＣが非制約付きトランザクション内で行われた場合には、ＴＢＥＧＩＮと同様に新しい非制約付きネスト・レベルを開くものとして扱われる。このことは、例えば、非制約付きトランザクションが制約付きトランザクションを内部で使用するサブルーチンを呼び出した場合などに起こり得る。割り込みフィルタリングは暗黙的にオフにされるので、制約付きトランザクション中の全ての例外は、オペレーティング・システム（ＯＳ）への割り込みをもたらす。最終的なトランザクションの終了の成功は、いずれかの制約付きトランザクションによりタッチされたせいぜい４ページをページインするＯＳの能力に依存する。ＯＳはまた、トランザクションが完了するのを可能にするのに十分に長いタイムスライスも保証しなければならない。
【表４】
0006734760.tif 000005
【０１３１】
表４は、制約付きトランザクションが他のロック・ベースのコードと対話しないと仮定する、表３のコードの制約付きトランザクション実装を示す。従って、ロック・テストは示されないが、制約付きトランザクションとロック・ベースのコードが混合された場合には、これを付加することができる。
【０１３２】
繰り返し障害が発生した場合、ソフトウェア・エミュレーションが、システム・ファームウェアの一部としてミリコードを用いて実施される。有利なことに、プログラマーから負担が取り除かれるので、制約付きトランザクションは所望の特性を有する。
【０１３３】
図３を参照すると、ＩＢＭ  ｚＥｎｔｅｒｐｒｉｓｅ  ＥＣ１２プロセッサは、トランザクション実行ファシリティを導入した。このプロセッサは、クロックサイクルごとに３つの命令をデコードすることができる。即ち、単純な命令は、単一のｍｉｃｒｏ−ｏｐ（マイクロ・オペレーション）としてディスパッチされ、より複雑な命令は、複数のｍｉｃｒｏ−ｏｐに分割される。ｍｉｃｒｏ−ｏｐ（Ｕｏｐｓ２３２ｂ）が、統合された発行キュー２１６に書き込まれ、そこから、それらをアウト・オブ・オーダー式に発行することができる。サイクルごとに、最大２つの固定小数点数命令、１つの浮動小数点数命令、２つのロード／ストア命令、及び２つの分岐命令を実行することができる。グローバル完了テーブル（ＧＣＴ）２３２は、あらゆるｍｉｃｒｏ−ｏｐ２３２ｂ及びトランザクション・ネスト化深さ（transaction nesting depth、ＴＮＤ）２３２ａを保持する。ＧＣＴ２３２は、デコード時にイン・オーダー式に書き込まれ、各ｍｉｃｒｏ−ｏｐ２３２ｂの実行ステータスを追跡し、最も古い命令グループの全てのｍｉｃｒｏ−ｏｐ２３２ｂが成功裏に実行されると、命令を完了する。
【０１３４】
レベル１（Ｌ１）データ・キャッシュ２４０は、２５６バイトのキャッシュライン及び４サイクルの使用待ち時間を有する９６ＫＢ（キロバイト）の６ウェイ・アソシアティブ・キャッシュ（6-way associative cache）であり、Ｌ１  ２４０ミスに対して７サイクルの使用待ち時間ペナルティを有して、プライベート１ＭＢ（メガバイト）の８ウェイ・アソシアティブ第２レベル（Ｌ２）データ・キャッシュ２６８に結合される。Ｌ１  ２４０キャッシュは、プロセッサに最も近いキャッシュであり、Ｌｎキャッシュは、第ｎ番目のキャッシュ・レベルのキャッシュである。Ｌ１  ２４０及びＬ２  ２６８キャッシュの両方とも、ストアスルー（store through）方式である。各々の中央処理装置（ＣＰ）チップ上の６つのコアは、４８ＭＢの第３レベル・ストアイン（store-in）方式キャッシュを共有し、６つのＣＰチップは、ガラス・セラミック・マルチチップ・モジュール（ＭＣＭ）上に一緒にパッケージ化されたオフ・チップの３８４ＭＢの第４レベル・キャッシュに接続される。最大４つのマルチチップ・モジュール（ＭＣＭ）を、最大１４４個のコアを有するコヒーレントな対称マルチプロセッサ（ＳＭＰ）システムに接続することができる（顧客のワークロードを実行するのに全てのコアが利用可能とは限らない）。
【０１３５】
コヒーレンシは、ＭＥＳＩプロトコルの変形により管理される。キャッシュラインは、読み出し専用（ｓｈａｒｅｄ）又はｅｘｃｌｕｓｉｖｅで所有することができ、Ｌ１  ２４０及びＬ２  ２６８はストアスルー方式であり、従って、ダーティラインを含まない。Ｌ３  ２７２及びＬ４キャッシュ（図示せず）はストアイン方式であり、ダーティ状態を追跡する。各キャッシュは接続された全ての下位レベルのキャッシュを含む。
【０１３６】
コヒーレンシ要求は「相互問い合わせ」（cross interrogate、ＸＩ）と呼ばれ、上位レベルのキャッシュから下位レベルのキャッシュにかつＬ４間で階層的に送信される。１つのコアがＬ１  ２４０及びＬ２  ２６８をミスし、ローカルＬ３  ２７２からキャッシュラインを要求すると、Ｌ３  ２７２は、Ｌ３  ２７２がこのラインを所有するかどうかをチェックし、必要に応じて、コヒーレンシを保証するために、そのＬ３  ２７２下で現在所有しているＬ２  ２６８／Ｌ１  ２４０にＸＩを送信してから、キャッシュラインを要求側に戻す。要求がＬ３  ２７２もミスした場合、Ｌ３  ２７２は要求をＬ４（図示せず）に送信し、Ｌ４は、ＸＩをそのＬ４下の全ての必要なＬ３及び近隣のＬ４に送信することによって、コヒーレンシを実施する。次に、Ｌ４は要求中のＬ３に応答し、Ｌ３は応答をＬ２  ２６８／Ｌ１  ２４０に転送する。
【０１３７】
キャッシュ階層の包含の規則のために、要求から他のキャッシュラインへのアソシアティビティ・オーバーフローにより引き起こされた上位レベルのキャッシュに対するエビクション（eviction）が原因で、キャッシュラインが下位レベルのキャッシュから相互問い合わせされる（ＸＩ）ことに留意されたい。これらのＸＩは「ＬＲＵ  ＸＩ」と呼ぶことができ、ここでＬＲＵは、最長時間未使用（least recently used）を意味する。
【０１３８】
さらに別のタイプのＸＩ要求を参照すると、Ｄｅｍｏｔｅ−ＸＩは、キャッシュ・オーナーシップを、ｅｘｃｌｕｓｉｖｅからｒｅａｄ−ｏｎｌｙ（読み出し専用）状態に遷移させ、Ｅｘｃｌｕｓｉｖｅ−ＸＩは、キャッシュ・オーナーシップをｅｘｃｌｕｓｉｖｅからｉｎｖａｌｉｄ状態に遷移させる。Ｄｅｍｏｔｅ−ＸＩ及びＥｘｃｌｕｓｉｖｅ−ＸＩは、元のＸＩ送信者への応答を必要とする。ターゲット・キャッシュは、ＸＩを「受け入れる」ことができ、又は、ＸＩを受け入れる前に最初にダーティ・データをエビクトする必要がある場合には、「拒否」応答を送信することができる。Ｌ１  ２４０／Ｌ２  ２６８キャッシュはストアスルー方式であるが、ストア・キュー内に、排他的状態をダウングレードする前にＬ３に送信する必要があるストアを有する場合には、ｄｅｍｏｔｅ−ＸＩ及びｅｘｃｌｕｓｉｖｅ−ＸＩを拒否することができる。拒否されたＸＩは、送信者により繰り返される。Ｒｅａｄ−ｏｎｌｙ−ＸＩは、ラインを読み出し専用で所有するキャッシュに送信され、こうしたＸＩを拒否することができないので、こうしたＸＩに対して応答は必要ない。ＳＭＰプロトコルの詳細は、非特許文献５により、ＩＢＭ  ｚ１０に関して説明されるものと類似している。
【０１３９】
トランザクション命令の実行
図３は、ＣＰＵ及びこれが対話するキャッシュ／コンポーネント（図１及び図２に示されるもののような）を含む、例示的なトランザクション実行環境の例を示す。命令デコード・ユニット２０８（ＩＤＵ）は、現トランザクション・ネスト化深さ２１２（ＴＮＤ）を常時監視している。ＩＤＵ２０８がＴＢＥＧＩＮ命令を受信すると、ネスト化深さ２１２がインクリメントされ、逆に、ＴＥＮＤ命令時にはデクリメントされる。あらゆるディスパッチされた命令について、ネスト化深さ２１２がＧＣＴ２３２に書き込まれる。ＴＢＥＧＩＮ又はＴＥＮＤが、後でフラッシュされる投機的経路上でデコードされると、ＩＤＵ２０８のネスト化深さ２１２は、フラッシュされない最も若いＧＣＴ２３２エントリからリフレッシュされる。トランザクション状態はまた、実行ユニットによる消費、大部分はロード／ストア・ユニット（ＬＳＵs）２８０による消費のために、発行キュー２１６にも書き込まれ、ロード／ストア・ユニット（ＬＳＵｓ）２８０は、該ＬＳＵｓ２８０内に実効アドレス計算器２３６を有している。ＴＢＥＧＩＮ命令は、ＴＥＮＤ命令に到達する前にトランザクションがアボートした場合に、状態情報を記録するためのトランザクション診断ブロック（ＴＤＢ）を指定することができる。
【０１４０】
ネスト化深さと同様に、ＩＤＵ２０８／ＧＣＵ２３２は、トランザクション・ネストを通じて、アクセス・レジスタ／浮動小数点数レジスタ（ＡＲ／ＦＰＲ）修正マスクを協調的に追跡する。即ち、ＡＲ／ＦＰＲ修正命令がデコードされ、修正マスクがそれをブロックすると、ＩＤＵ２０８は、アボート要求をＧＣＴ２３２内に配置することができる。命令がｎｅｘｔ−ｔｏ−ｃｏｍｐｌｅｔｅになると、完了がブロックされ、トランザクションがアボートする。制約付きトランザクション内にある間にデコードされた場合又は最大ネスト化深さを上回る場合、ＴＢＥＧＩＮも含む他の制限付き命令が同様に処理される。
【０１４１】
最外ＴＢＥＧＩＮは、ＧＲ−Ｓａｖｅ−Ｍａｓｋに応じて、複数のｍｉｃｒｏ−ｏｐに分割され、各ｍｉｃｒｏ−ｏｐ２３２ｂ（例えば、ｕｏｐ０、ｕｏｐ１及びｕｏｐ２を含む）は、２つの固定小数点数ユニット（ＦＸＵ）２２０の一方によって実行され、トランザクション・アボートに場合、１対のＧＲs２２８を、ＧＲs２２８のコンテンツを後で復元するために用いられる特殊トランザクション・バックアップ・レジスタ・ファイル２２４内に保存する。ＴＢＥＧＩＮはまた、１が指定されている場合、ＴＤＢのアクセシビリティ・テストを実施するためのｍｉｃｒｏ−ｏｐ２３２ｂも生成し、このアドレスは、アボートの場合に後で使用するために、専用レジスタ内に保存される。最外ＴＢＥＧＩＮのデコードにおいて、潜在的な後のアボート処理のために、ＴＢＥＧＩＮの命令アドレス及び命令テキストもまた、専用レジスタ内に保存される。
【０１４２】
ＴＥＮＤ及びＮＴＳＴＧは、単純なｍｉｃｒｏ−ｏｐ２３２ｂ命令である。ＮＴＳＴＧ（非トランザクション・ストア（non-transactional store））は、発行キュー２１６において非トランザクションとしてマーク付けされ、ＬＳＵｓ２８０がそれを適切に処理できるようにする点を除いて、通常のストアのように処理される。ＴＥＮＤは、実行時にノー・オペレーションであり、ＴＥＮＤが完了したときに、トランザクションの終了が行われる。
【０１４３】
上述のように、トランザクション内にある命令は、発行キュー２１６においてそのようにマーク付けされるが、他の点ではほぼ変更されずに実行され、ＬＳＵｓ２８０は、次のセクションで説明されるように、分離追跡（isolation track）を行う。
【０１４４】
デコードはイン・オーダー式であり、かつ、ＩＤＵ２０８は現在のトランザクション状態を常時監視し、これをトランザクションからの全ての命令と併せて発行キュー２１６内に書き込むことから、ＴＢＥＧＩＮ、ＴＥＮＤ、並びにトランザクションの前、内部及び後の命令の実行は、アウト・オブ・オーダー式に実行することができる。ＴＥＮＤを最初に、トランザクション全体を次に実行し、最後にＴＢＥＧＩＮを実行することさえ可能である（可能性は低いが）。プログラム順は、完了時にＧＣＴ２３２により復元される。汎用レジスタ（ＧＲs）２２８は、バックアップ・レジスタ・ファイル２２４から復元することができるので、トランザクションの長さは、ＧＣＴ２３２のサイズによって制限されない。
【０１４５】
実行中、プログラム・イベント記録（ＰＥＲ）イベントが、イベント抑止制御に基づいてフィルタリングされ、ＰＥＲ  ＴＥＮＤイベントは、イネーブルにされた場合に検出される。同様に、トランザクション・モードにある間、トランザクション診断制御によりイネーブルにされたときに、擬似乱数生成器がランダム・アボートを引き起こしていることがある。
【０１４６】
トランザクション分離の追跡
ロード／ストア・ユニット２８０は、トランザクション実行中にアクセスされたキャッシュラインを追跡し、別のＣＰＵからのＸＩ（又はＬＲＵ−ＸＩ）がフットプリントと競合する場合にアボートをトリガする。競合するＸＩがｅｘｃｌｕｓｉｖｅ又はｄｅｍｏｔｅ  ＸＩである場合、Ｌ３  ２７２がＸＩを繰り返す前にトランザクションが終了することを期待して、ＬＳＵｓ２８０はＸＩを拒否してＬ３  ２７２に戻す。この「押しのけ（stiff-arming）」は、高競合状態のトランザクションにおいて非常に有効である。２つのＣＰＵが互いに押しのけ合う際のハングアップを防止するために、ＸＩ拒否カウンタが実装され、該ＸＩ拒否カウンタは、閾値が満たされると、トランザクション・アボートをトリガする。
【０１４７】
Ｌ１キャッシュ・ディレクトリ２４０は、従来より、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）で実装される。トランザクション・メモリの実装では、ディレクトリの有効ビット２４４（６４行×６ウェイ）は通常の論理ラッチに移動され、キャッシュラインごとにさらに２つのビット、即ちＴＸ−読み取りビット２４８及びＴＸ−ダーティビット２５２が補充される。
【０１４８】
新しい最外ＴＢＥＧＩＮ（先のまだ保留中のトランザクションに対してインターロックされる）がデコードされると、ＴＸ−読み取り２４８ビットがリセットされる。ＴＸ−読み取り２４８ビットは、発行キュー内で「トランザクショナル（transactional）」としてマーク付けされた全てのロード命令によって実行時に設定される。これは、投機的ロードが、例えば誤って予測された分岐経路上で実行される場合に、過剰なマーク付けをもたらし得ることに留意されたい。ロード完了時にＴＸ−読み取りビット２４８を設定する代替案は、複数のロードが同時に完了することがあり、ロード・キュー上に多数の読み取りポートを必要とすることから、シリコン面積に対して高価すぎるものであった。
【０１４９】
ストアは、非トランザクション・モードと同じ方法で実行されるが、トランザクション・マークが、ストア命令のストア・キュー（ＳＴＱ）２６０エントリ内に置かれる。ライトバック時に、ＳＴＱ２６０からのデータがＬ１  ２４０内に書き込まれるとき、書き込まれたキャッシュラインに関して、Ｌ１キャッシュ・ディレクトリ２４０内のＴＸ−ダーティ２５２が設定される。Ｌ１  ２４０へのストア・ライトバックは、ストア命令が完了した後にのみ行われ、サイクルごとにせいぜい１つのストアがライトバックされる。完了及びライトバックの前に、ロードは、ストア転送により、ＳＴＱ２６０からのデータにアクセスすることができ、ライトバック後は、ＣＰＵ１１４（図１）は、Ｌ１  ２４０内の投機的に更新されたデータにアクセスすることができる。トランザクションが成功裏に終了した場合、全てのキャッシュラインのＴＸ−ダーティビット２５２はクリアされ、ＳＴＱ２６０において、まだ書き込まれていないストアのＴＸ−マークもクリアされ、有効に保留中のストアを通常のストアに変える。
【０１５０】
トランザクションがアボートすると、全ての保留中のトランザクション・ストアは、既に完了したものでさえ、ＳＴＱ２６０から無効にされる。Ｌ１  ２４０内のトランザクションにより修正された、つまり、ＴＸ−ダーティビット２５２がオンにされ、その有効ビットがオフにされた、全てのキャッシュラインが、有効に、これらをＬ１  ２４０キャッシュから瞬時に取り除く。
【０１５１】
アーキテクチャは、新しい命令を完了する前に、トランザクションの読み取りセット及び書き込みセットの分離が保持されることを必要とする。この分離は、ＸＩが保留中の適切な時点で命令の完了をストールすることにより確実にされる。投機的なアウト・オブ・オーダー式実行が許容され、保留中のＸＩが異なるアドレスに対するものであり且つ実際にトランザクション競合を引き起こさないと楽観的に仮定する。この設計は、アーキテクチャが必要とする強力なメモリ順序付けを保証するために従来のシステム上に実装されるＸＩ対完了（XI-vs-completion）インターロックに非常に自然に適合する。
【０１５２】
Ｌ１  ２４０がＸＩを受信すると、Ｌ１  ２４０はディレクトリにアクセスして、相互問い合わせ（ＸＩ）されたＬ１  ２４０内のアドレスの有効性をチェックし、相互問い合わせ（ＸＩ）されたライン上でＴＸ−読み取りビット２４８がアクティブであり、かつ、ＸＩが拒否されない場合、ＬＳＵｓ２８０がアボートをトリガする。アクティブなＴＸ−読み取りビット２４８を有するキャッシュラインがＬ１  ２４０から最長時間未使用（ＬＲＵ）にされると、特別なＬＲＵ拡張ベクトルは、Ｌ１  ２４０の６４行の各々について、その行上にＴＸ−読み取りラインが存在したことを思い出す。ＬＲＵ拡張に対して正確なアドレス追跡は存在しないので、あらゆる拒否されないＸＩが有効な拡張行にヒットし、ＬＳＵｓ２８０がアボートをトリガする。正確でないＬＲＵ拡張追跡に対する他のＣＰＵ１１４（図１及び図２）との競合がアボートを引き起こさなければ、ＬＲＵ拡張の提供は、Ｌ１サイズからＬ２サイズまでの読み取りフットプリント能力及びアソシアティビティを有効に向上させる。
【０１５３】
ストア・フットプリントは、ストア・キャッシュ・サイズ（ストア・キャッシュは、以下により詳細に説明される）によって、従って、Ｌ２  ２６８サイズ及びアソシアティビティによって暗黙的に、制限される。ＴＸ−ダーティ２５２キャッシュラインがＬ１  ２４０からＬＲＵ処理された場合、ＬＲＵ拡張アクションを実施する必要はない。
【０１５４】
ストア・キャッシュ
従来のシステムにおいて、Ｌ１  ２４０及びＬ２  ２６８はストアスルー・キャッシュであるので、全てのストア命令は、Ｌ３  ２７２ストア・アクセスを引き起こし、今やＬ３  ２７２ごとに６つのコアがあり、各コアの性能がさらに改善され、Ｌ３  ２７２に関する（及びより少ない程度ではあるがＬ２  ２６８に関する）ストア速度が、特定のワークロードに関して問題になる。ストア・キューイングの遅延を避けるために、ストアをＬ３  ２７２に送信する前にストアを近隣のアドレスと組み合わせる、収集ストア・キャッシュ２６４を付加する必要がある。
【０１５５】
トランザクション・メモリ性能については、Ｌ２  ２６８は、もう少しでクリーン・ラインを戻すので（７サイクルＬ１  ２４０ミス・ペナルティ）、トランザクション・アボート時に、Ｌ１  ２４０からのあらゆるＴＸ−ダーティ２５２キャッシュラインを無効にすることが許容可能である。しかしながら、性能（及び追跡のためのシリコン領域）に関して、トランザクションが終了する前にトランザクション・ストアにＬ２  ２６８を書き込ませ、次に、アボート時に（又はさらに悪いことには共有Ｌ３  ２７２で）全てのダーティＬ２  ２６８キャッシュラインを無効にすることは、許容可能でない。
【０１５６】
ストア帯域幅及びトランザクション・メモリ・ストア処理の２つの問題はどちらも、収集ストア・キャッシュ２６４で対処することができる。収集ストア・キャッシュ２６４は、６４エントリの循環キューであり、各エントリは、バイト精度（byte-precise）の有効ビットを有する１２８バイトのデータを保持する。非トランザクション操作において、ＬＳＵｓ２８０からストアを受信すると、ストア・キャッシュ２６４は、同じアドレスのエントリが存在するかどうかをチェックし、存在する場合には、新しいストアを既存のエントリに収集する。エントリが存在しない場合には、新しいエントリがキューに書き込まれ、空きエントリの数が閾値より下になる場合、最も古いエントリがＬ２キャッシュ２６８及びＬ３  ２７２キャッシュにライトバックされる。
【０１５７】
新しい最外トランザクションが開始すると、ストア・キャッシュ内の全ての既存のエントリは、新しいストアをそこに収集できないように、ｃｌｏｓｅｄとしてマーク付けされ、Ｌ２  ２６８及びＬ３  ２７２に対するこれらのエントリのエビクションが開始される。その時点から、ＬＳＵｓ２８０  ＳＴＱ２６０から得られるトランザクション・ストアは、新しいエントリを割り当てる、又は既存のトランザクション・エントリに集まる。Ｌ２  ２６８及びＬ３  ２７２へのこれらのストアのライトバックは、トランザクションが成功裏に終了するまでブロックされ、その時点で、後の（トランザクション後の）ストアは、次のトランザクションがそれらのエントリを再び閉じるまで、引き続き既存のエントリ内に集めることができる。
【０１５８】
ストア・キャッシュ２６４は、あらゆるｅｘｃｌｕｓｉｖｅ  ＸＩ又はｄｅｍｏｔｅ  ＸＩのたびに照会され、ＸＩがいずれかのアクティブ・エントリと比較された場合、ＸＩの拒否を引き起こす。継続的にＸＩを拒否する間、コアがさらなる命令を完了しない場合、トランザクションは、ハングアップを回避するために特定の閾値でアボートされる。
【０１５９】
ストア・キャッシュ２６４がオーバーフローすると、ＬＳＵｓ２８０は、トランザクション・アボートを要求する。ＬＳＵｓ２８０は、既存のエントリにマージする（merge）ことができない新しいストアを送信しようと試みたときに、この条件を検出し、ストア・キャッシュ２６４全体が現トランザクションからのストアで満たされる。ストア・キャッシュ２６４は、Ｌ２  ２６８のサブセットとして管理され、ダーティラインをＬ１  ２４０からトランザクション的にエビクトすることができるが、これらは、トランザクション全体を通じてＬ２  ２６８内に常駐しなければならない。従って、最大ストア・フットプリントは、６４×１２８バイトのストア・キャッシュ・サイズに制限され、Ｌ２  ２６８のアソシアティビティによっても制限される。Ｌ２  ２６８は、８ウェイ・アソシアティブであり、５１２行を有するので、一般的には、十分に大きく、トランザクション・アボートを引き起こさない。
【０１６０】
トランザクションがアボートした場合、ストア・キャッシュ２６４に通知され、トランザクション・データを保持する全てのエントリが無効にされる。ストア・キャッシュ２６４はまた、１ダブルワード（８バイト）ごとに、エントリがＮＴＳＴＧ命令により書き込まれたかどうかのマークを有し−これらのダブルワードは、トランザクション・アボートにわたって有効なままである。
【０１６１】
ミリコード実装の機能
従来より、ＩＢＭメインフレーム・サーバ・プロセッサは、特定のＣＩＳＣ命令実行、割り込み処理、システム同期、及びＲＡＳのような複雑な機能を実施する、ミリコードと呼ばれるファームウェアの層を含む。ミリコードは、マシン依存命令、並びに、アプリケーション・プログラム及びオペレーティング・システム（ＯＳ）の命令と同様にメモリからフェッチされ、実行される命令セット・アーキテクチャ（ＩＳＡ）の命令を含む。ファームウェアは、顧客プログラムがアクセスできないメインメモリの制限区域内に常駐する。ハードウェアが、ミリコードを呼び出す必要がある状況を検出すると、命令フェッチ・ユニット２０４が「ミリコード・モード」に切り替わり、ミリコード・メモリ領域内の適切な位置でフェッチを開始する。ミリコードは、命令セット・アーキテクチャ（ＩＳＡ）の命令と同じ手法でフェッチ及び実行することができ、ＩＳＡ命令を含むことができる。
【０１６２】
トランザクション・メモリに関して、ミリコードは、種々の複雑な状況に関与する。あらゆるトランザクション・アボートは、必要なアボート・ステップを行うために、専用ミリコード・サブルーチンを呼び出す。トランザクション・アボート・ミリコードは、ハードウェア内部のアボート原因、潜在的な例外原因、及びアボートされた命令アドレスを保持する特殊用途レジスタ（ＳＰＲ）を読み取ることで開始し、次に、ミリコードを用いて、１が指定されている場合には、ＴＤＢを格納する。ミリコードがどのＧＲｓ２３８を復元するかを知るのに必要とされるＧＲ保存マスクを取得するために、ＴＢＥＧＩＮ命令テキストがＳＰＲからロードされる。
【０１６３】
ＣＰＵ１１４（図１）は、バックアップＧＲｓ２２４を読み出し、それらをメインＧＲs２２８にコピーするための、特殊ミリコード専用命令をサポートする。ＴＢＥＧＩＮ命令アドレスもＳＰＲからロードされ、ひとたびミリコード・アボート・サブルーチンが終了すると、ＴＢＥＧＩＮ後の実行を続行するための新しい命令アドレスをＰＳＷ内に設定する。このＰＳＷは、アボートがフィルタリングされていないプログラム割り込みにより引き起こされた場合に、プログラム−旧ＰＳＷとして後に保存することができる。
【０１６４】
ＴＡＢＯＲＴ命令は、ミリコード実装することができる、即ち、ＩＤＵ２０８がＴＡＢＯＲＴをデコードすると、ＴＡＢＯＲＴ命令は、ＴＡＢＯＲＴのミリコードに分岐するように命令フェッチ・ユニットに指示し、そこからミリコードが共通のアボート・サブルーチンに分岐する。
【０１６５】
Ｅｘｔｒａｃｔ  Ｔｒａｎｓａｃｔｉｏｎａｌ  Ｎｅｓｔｉｎｇ  Ｄｅｐｔｈ（トランザクション・ネスト化深さ抽出）（ＥＴＮＤ）命令も、パフォーマンス・クリティカル（performance critical）ではないので、ミリコード化することができる。即ち、ミリコードは、特殊ハードウェア・レジスタから現在のネスト化深さをロードし、それをＧＲｓ２２８に入れる。ＰＰＡ命令はミリコード化することができる。ＰＰＡ命令は、ＰＰＡへのオペランドとしてソフトウェアにより提供される現在のアボート・カウントと、同じく他のハードウェア内部状態とに基づいて、最適な遅延を実施する。
【０１６６】
制約付きトランザクションに関して、ミリコードは、アボートの数を常時監視することができる。ＴＥＮＤが成功裏に完了したとき、又は、ＯＳへの割り込みが生じた場合、カウンタは０にリセットされる（ＯＳがプログラムに戻るかどうか、又はＯＳがいつプログラムに戻るかは知られていない）。現在のアボート・カウントに依存して、ミリコードは、特定の機構を呼び出して、後のトランザクションの再試行が成功する可能性を高めることができる。この機構は、例えば、再試行の間のランダムな遅延を連続的に増大させることと、投機的実行の量を低減させて、トランザクションが実際には使用していないデータへの投機的アクセスにより引き起こされるアボートに遭遇するのを回避することとを含む。最後の手段として、他のＣＰＵ１１４を解放して通常の処理を続行する前に、ミリコードを他のＣＰＵ１１４（図１）にブロードキャストして、全ての競合する作業を停止させ、ローカル・トランザクションを再試行することができる。デッドロックを引き起こさないように、複数のＣＰＵ１１４を連携させる必要があるので、異なるＣＰＵ１１４上のミリコード・インスタンス間の何らかのシリアル化が必要とされる。
【０１６７】
ストア命令のグループをアトミックにするための技術は、トランザクション・メモリ（ＴＭ）の使用である。ハードウェアＴＭに対する最も困難な課題は、書き込みの処理である。ＴＭシステムは、トランザクション中、ストアを追跡し、書き込みセット（ＷＳ）をアセンブルする必要がある。トランザクションが成功裏に完了するまで、実際のＷＳデータをバッファに入れる必要がある。成功の場合、一般的に、バッファに入れたデータをキャッシュに書き込むことによって、ＷＳ内の全てのストアが、アトミックな方法で（すなわち、同時に）グローバルに見えるようになる。代替的に、トランザクション・アボートの場合、メモリを修正することなく、バッファに入れられたストアが廃棄される。
【０１６８】
ロードは、これらはメモリを変更しないので、幾分単純である。ＴＭは、トランザクション・ロードを追跡しなければならず、各トランザクション・ロードのデータ及びアクセス・アドレスを含む読み取りセット（ＲＳ）を生成する。成功裏のトランザクションは、ＲＳ内のロードのデータをレジスタ・ファイルに転送する。
【０１６９】
トランザクション実行により実行される主要機能は、遠隔要求による干渉、すなわち現アプリケーション・スレッドに対応しないメモリ・アクセスを判断することである。
【０１７０】
多くの場合、ＴＭは、トランザクションの間、キャッシュライン（例えば、６４Ｂを含むキャッシュライン）のアドレス粒度における読み取りセット及び書き取りセットとの競合を監視する。つまり、ＲＳ及びＷＳは、キャッシュライン内のデータのアドレスではなく、トランザクション・データがあるキャッシュラインのアドレスを含む。読み取りセットのキャッシュライン内のいずれかのデータが別のスレッドにより書き込まれる場合、ＲＳ競合が発生する。ＷＳのキャッシュライン内のいずれかのデータが別のスレッドにより読み書きされる場合、ＷＳ競合が発生する。競合が発生すると、トランザクションはアボートし、影響を及ぼしたコンピュータの状態を有するトランザクションに関与するあらゆるロード及びストアの効果をスカッシュする（すなわち、それらの効果をアンドゥする）。しかしながら、これを達成するために、ＴＭの実装により、トランザクションが成功裏に完了するまで、トランザクションに関与するあらゆるロード及びストアは、コンピュータのアーキテクチャ化状態を変更することができない。
【０１７１】
性能を向上させるために、コンピュータ・アーキテクチャは、データへのアクセスを予測して、データを、主メモリ又は下位のキャッシュ・レベルから、より上位のキャッシュ・レベル（プロセッサにより近い）に移動させることができるプリフェッチ命令を含むことが多い。プリフェッチ命令の実行は、プリフェッチ命令により移動されるデータに実際にアクセスされることが分かる前に実行され得るという点で、本質的に投機的であり得る。読み取りアクセス又は書き込みアクセスのいずれかを予測して、データをプリフェッチすることができ、これはそれぞれ、読み取りプリフェッチ又は書き込みプリフェッチと呼ばれる。データの共有、同期及び並列処理を可能にする、コンピュータのキャッシュ・コヒーレンシ・プロトコルは、プロセッサが、データを書き込む（すなわち、変更する）ことができる前に、データの所有権を得ることを要求することが多い。データは、現在別のプロセッサが所有している場合があるので、所有権の取得は、長期にわたるプロセスであり得る。１つのメモリ位置から１つのプロセッサによって読み取られるデータが、同じ位置又は異なる位置（データのコピーが複数の異なる位置にある場合）に書き込みを行う別のプロセッサにより変更されるのを防止するために、所有権の概念が必要である。従って、多くの場合、プロセッサは、データへの書き込みを予測して、データの所有権を取得するために書き込みプリフェッチ命令を実行し、所有権を獲得する間、処理が遅延されないようにすることは有利である。
【０１７２】
本発明によると、実施形態は、プリフェッチ命令（すなわち、プリフェッチ要求）がトランザクションの失敗を引き起こす場合、既存のトランザクション・メモリ・システムにおけるプリフェッチ命令の実行と従来より関連している性能の低下を回避する。本発明の１つの実施形態において、プリフェッチ命令の実行は、ローカル・プロセッサにおけるトランザクション・メモリ・システム内のメモリ・トランザクションが、遠隔プロセッサからのプリフェッチ命令とのアドレス競合が原因でアボートすることを要求しない。本発明の１つの実施形態において、プリフェッチ命令（すなわち、プリフェッチ要求）が、特定の条件下で（例えば、プリフェッチの優先順位又は重要性がメモリ・トランザクションのものより高い場合）、アドレス競合が原因で、メモリ・トランザクション（すなわち、トランザクション）をアボートさせることがある。１つの実施形態において、トランザクションと競合するプリフェッチ要求を評価し、ここで、評価は、ｉ）プリフェッチ要求の優先順位をトランザクションの優先順位と比較すること、ｉｉ）ローカル・プロセッサの優先順位を遠隔プロセッサの優先順位と比較すること、及びｉｉｉ）プリフェッチ要求の重要性を判断することのうちの１つ又は複数を含む。１つの実施形態において、評価に基づいたアクションが実行され、このアクションは、ｉ）プリフェッチ要求をアボートすること、ｉｉ）プリフェッチ要求を休止すること（すなわち、アクションをとる前に条件の発生を待ちながら、プリフェッチ要求を休止状態であるが警戒状態にすること）、ｉｉｉ）一定の遅延期間、プリフェッチ要求を遅延させること（すなわち、アクションをとる前に、遅延期間が終わるまで、プリフェッチ要求を休止状態にすること）、及びｉｖ）プリエッチ要求を実行することのうちの１つ又は複数を含む。１つの実施形態において、所定の遅延期間は、ｉ）ローカル・プロセッサにおける１つ又は複数の条件、及びｉｉ）遠隔プロセッサにおける１つ又は複数の条件の１つ又は両方により判断される。例えば、１つの実施形態において、遅延期間、すなわち所定の遅延期間は、ローカル・プロセッサにおける条件（例えば、ＣＰＵ使用率、キャッシュ使用率、キューイングされた（キューに入れられた）ワークロードの数、及びサイクル毎に実行される現在の命令）によって決まる。別の例では、１つの実施形態において、遅延期間は、プリフェッチ要求を生成した遠隔プロセッサにおける条件（例えば、ＣＰＵ使用率、キャッシュ使用率、キューイングされたワークロードの数、及びサイクル毎に実行される現在の命令）によって決まる。
【０１７３】
１つの実施形態において、プリフェッチ要求がトランザクションと競合する場合、プリフェッチ要求が抑止され、ここで、抑止されるという用語の意味は、ｉ）プリフェッチ要求をすぐに処理しない（すなわち、プリフェッチ要求を遅延させる）こと、ｉｉ）プリフェッチ要求をキューイングすること、及びｉｉｉ）プリフェッチ要求をアボートすることのうちのいずれかの時間的シーケンス及びその組み合わせを含む。これらの操作の各々が、本発明におけるプリフェッチ要求の抑止を構成する。
【０１７４】
１つの実施形態において、プリフェッチ要求操作（すなわち、プリフェチ操作）は、プリフェッチ要求の実行中に行われるメモリ・アクセスである。プリフェッチ要求の実行に起因する性能向上は、メモリ・トランザクションのアボートの結果生じる性能の低下よりはるかに少ない可能性が高い。１つの実施形態において、プリフェッチ要求は、読み取り又は書き込みメモリ・アクセスをプリフェッチ要求として識別するプリフェッチ・プロトコル（本明細書で説明されるメモリ及びキャッシュ・コヒーレンス・プロトコルの一部である）に関与し、プリフェッチ要求についての情報を提供し、プリフェッチ要求と関連したメモリ操作がトランザクションと競合する場合、トランザクション・アボートを引き起こすことなく、プリフェッチ要求を管理できるようにする。１つの実施形態において、プリフェッチ・プロトコルは、読み取りプリフェッチ要求操作、及び書き込みプリフェッチ要求操作を含む。１つの実施形態において、プリフェッチ要求は、１つ又は複数のプリフェッチ操作を含む。１つの実施形態において、プリフェッチ・プロトコルは、プリフェッチ要求の受信側（receiver）からプリフェッチ要求の発信元（source）に送られる１つ又は複数のプリフェッチ確認応答（acknowledgement）（すなわち、プリフェッチ要求の発信元に、プリフェッチ要求の状態を通知すること）を含む。１つの実施形態において、プリフェッチ確認応答は、プリフェッチ要求の受信側（例えば、ローカル・プロセッサ）におけるプリフェッチの処置（disposition）（すなわち、状態）についての情報を含む。
【０１７５】
１つの実施形態において、プリフェッチ要求の処理がメモリ・トランザクション・アボートを引き起こすと判断される場合、受信ノードにおいて、プリフェッチ要求が廃棄される。１つの実施形態において、プリフェッチ要求の発信元（例えば、遠隔プロセッサ）がプリフェッチ要求を特に重要であるとして指定する場合、プリフェッチ要求は、受信ノードにキューイングされ、もはやメモリ・トランザクション・アボートを引き起こさなくなると、実行される。１つの実施形態において、各遠隔プロセッサについて別個のキューがあり、遠隔プロセッサからのプリフェッチ要求は、その遠隔プロセッサについてのキューにキューイングされる。１つの実施形態において、排他的所有権に関するデータのプリフェッチ要求についてのキュー、及び共有所有権に関するデータのプリフェッチ要求についてのキューがある。１つの実施形態において、プリフェッチ要求が複数のプリフェッチ要求操作（すなわち、プリフェッチ操作）を含む場合、各プリフェッチ操作は、別個にキューイングされる。１つの実施形態において、優先順位が、プリフェッチ要求（例えば、プリフェッチの発信元の優先順位）と関連付けられる。１つの実施形態において、プリフェッチ要求の受信側におけるキュー内のプリフェッチ操作は、プリフェッチ要求の優先順位に従ってサービスされる。１つの実施形態において、優先順位は、プリフェッチ要求の送信元及びプリフェッチ要求の受信側と関連付けられる。１つの実施形態において、プリフェッチ要求の送信元（例えば、遠隔プロセッサ）がプリフェッチ要求の受信側の優先順位より高い優先順位を有する場合、プリフェッチ要求がサービスされ、プリフェッチ要求がトランザクションと競合する場合、受信側においてトランザクションのアボートが可能になる。１つの実施形態において、各プリフェッチ要求の優先順位についての別個のキューがあり、その優先順位についてのキューにおいて、優先順位を有するプリフェッチ要求がキューイングされる。
【０１７６】
１つの実施形態において、プリフェッチ・プロトコルは、プリフェッチ要求の受信側がプリフェッチ要求を管理する方法を決定するために使用するサイクルにおいて測定される各プリフェッチ要求と関連付けられたプリフェッチ期間（time horizon）を含む。１つの実施形態において、プリフェッチ要求は、キューイングされ、まだサービスされていない場合に、プリフェッチ要求と関連したプリフェッチ期間が生じた後に廃棄される。１つの実施形態において、プリフェッチ要求の受信側によってプリフェッチ要求が廃棄される場合、プリフェッチ要求が廃棄されたという通知が、プリフェッチ要求の送信元に送られる。幾つかの実施形態において、期間は、例えば、実行される命令の数、実行されるメモリ命令の数、又はプログラム及び／又はプロセッサに関連したいずれかの他の測定基準などの他の測定基準で指定される。
【０１７７】
１つの実施形態において、プリフェッチ・プロトコルは、近い将来から遠い将来への時間ステップに分けられる、プリフェッチ操作と関連したプリフェッチ期間の仕様を含み、各時間ステップは、プリフェッチ要求の受信側がプリフェッチ要求を管理するために使用する所定数のサイクルで指定される。１つの実施形態において、プリフェッチ要求の実行は、遅延情報におけるプリフェッチ・プロトコルによりプリフェッチ要求の受信側に渡される時間ステップ数だけ、遅延される。１つの実施形態において、プリフェッチ要求の受信側は、指定された数の時間ステップの間（すなわち、遅延期間、又は同様な意味合いで遅延持続時間）、プリフェッチ要求を遅延させ、その後、プリフェッチ要求を実行する試みがなされる。１つの実施形態において、遅延が生じた後にプリフェッチ要求を実行しようとして、プリフェッチ要求がメモリ・トランザクションとの競合に遭遇した場合、プリフェッチ要求はアボートされる。１つの実施形態においては、遅延が生じた後にプリフェッチ要求を実行しようとして、プリフェッチ要求がメモリ・トランザクションとの競合に遭遇した場合、プリフェッチ要求は、キューにキューイングされる。
【０１７８】
１つの実施形態において、プリフェッチ要求がメモリ・トランザクションと競合を有し、プリフェッチ・プロトコルにおいて指定された時間ステップの数が閾値を下回る場合、プリフェッチ要求は廃棄され、そうでない場合、プリフェッチ要求はキューにキューイングされる。１つの実施形態において、プリフェッチ・プロトコル内のプリフェッチ要求は、短期プリフェッチ要求又は長期プリフェッチ要求として指定される。１つの実施形態において、短期プリフェッチ要求は、指定されたサイクル数の間、生きている（alive）（すなわち、プリフェッチ要求は、実行される可能性がある）。短期プリフェッチ要求が生きている間、短期プリフェッチ要求がメモリ・トランザクションと競合を有する場合、短期プリフェッチ要求はキューイングされ、短期プリフェッチ要求がもはや生きていない場合、短期プリフェッチ要求はアボートされる。１つの実施形態において、長期プリフェッチ要求は、これが実行されるまで生きているままである。１つの実施形態において、長期プリフェッチ要求は、これがメモリ・トランザクションとの競合を有する場合、キューにキューイングされ、長期プリフェッチ要求がもはやメモリ・トランザクションとの競合を有さない場合、キューから除去され、実行される。１つの実施形態において、キューが一杯であり、その長期プリフェッチ要求がキュー内で最も古いプリフェッチ要求である場合、長期プリフェッチ要求はキューから除去され、廃棄される。１つの実施形態において、長期プリフェッチ要求ではない少なくとも１つのエントリがキュー内にあり、キュー内の所定の長期プリフェッチ要求がキュー内で最も古いプリフェッチ要求である場合、長期プリフェッチ要求は、キューから除去されず、キューが一杯になった場合に廃棄される。１つのこうした実施形態及びシナリオにおいて、キューが一杯になり、少なくとも１つのエントリが長期プリフェッチ要求でない場合、長期プリフェッチ要求ではない、キュー内の少なくとも１つのエントリが、キューから除去される。１つの実施形態において、長期プリフェッチ要求は、キューから除去されず、キューが一杯になった場合に廃棄される。
【０１７９】
図４は、１つの実施形態において、キャッシュ・システムＡ  １１０３に接続されたプロセッサＡ  １１０２と、キャッシュ・システムＢ  １１０７に接続されたプロセッサＢ  １１０６とを含むプロセッサ・システム１１０１を示す。キャッシュ・システムＡ  １１０３及びキャッシュ・システムＢ  １１０７は、システム・バス１１１１に接続され、本質的に類似している。キャッシュ・システムＡ  １１０３は、トランザクション・メモリ・システムＡ  １１０４及びキャッシュＡ  １１０５を含む。キャッシュ・システムＢ  １１０７は、トランザクション・メモリ・システムＢ  １１０８及びキャッシュＢ  １１０９を含む。システム・メモリ１１１０は、システム・バス１１１１に取り付けられる。１つの実施形態において、キャッシュ・システムＡ  １１０３及びキャッシュ・システムＢ  １１０７は、プロセッサＡ  １１０２及びプロセッサＢ  １１０６が、組織された方法で、両方のプロセッサが共有するデータに対して操作を行う命令を実行することを可能にするキャッシュ・コヒーレンシ・プロトコルに関与する。例えば、プロセッサＢ  １１０６は、キャッシュ・システムＢ  １１０７からのデータにアクセスする読み取り命令を実行することができ、キャッシュ・システムＢ  １１０７がデータを有していない場合、キャッシュ・システムＢ  １１０７は、システム・バス１１１１上のデータに対するキャッシュ・コヒーレンシ・プロトコル要求をアサートする。キャッシュ・システムＡ  １１０３は、システム・バス１１１１上のキャッシュ・コヒーレンシ・プロトコル要求を監視（スヌープ）し、キャッシュ・システムＡ  １１０３が要求されるデータを有する場合、キャッシュ・システムＡ  １１０３は、システム・バス１１１１上のデータをアサートする。キャッシュ・システムＡ  １１０３はまた、要求されたデータのアドレスを比較して、アドレスがアクティブなトランザクション・メモリ操作と競合するかどうかを判断する。１つの実施形態において、キャッシュ・システムＡ  １１０３内のトランザクション・メモリ・システムＡ  １１０４は、メモリ・アクセス・アドレスがアクティブなトランザクション・メモリ操作のものと競合するかどうかを判断する。
【０１８０】
図５は、トランザクション・メモリ・システムＡ  １１０４をより詳細に示す。１つの実施形態において、トランザクション・メモリ・システムＡ  １１０４は、書き込みセット２２０５、読み取りセット２２０６、アボート・マネージャ２２０７、及びプリフェッチ・マネージャ２２０８を含む。書き込みセット２２０５は、トランザクションに関与している書き込み（ストア）のターゲット・アドレスを含む。読み取りセット２２０６は、トランザクションに関与している読み取り（ロード）のターゲット・アドレスを含む。１つの実施形態において、読み取りセット２２０６及び書き込みセット２２０５は、それぞれ、トランザクション内の１つ又は複数のメモリ読み取り及び書き込みアクセスの読み取り及び書き込みアドレスを含む。
【０１８１】
１つの実施形態において、トランザクション・メモリ・システムＡ  １１０４への入力は、非プリフェッチ操作バス２２１０上の非プリフェッチ操作（すなわち、非プリフェッチ・メモリ・アクセス）及びプリフェッチ操作バス２２０９上のプリフェッチ操作（すなわち、プリフェッチ要求メモリ・アクセス）を含む。アドレス・デコード２２１１は、非プリフェッチ操作のアドレスをデコードし、読み取りアドレス・バス２２０１上の非プリフェッチ読み取り操作のターゲット・アドレス及び書き込みアドレス・バス２２０２上の非プリフェッチ書き込み操作のターゲット・アドレスをアサートする。アドレス・デコード２２１２は、プリフェッチ操作のアドレスをデコードし、プリフェッチ読み取りアドレス・バス２２０３上のプリフェッチ読み取り操作のターゲット・アドレス及びプリフェッチ書き込みアドレス・バス２２０４上のプリフェッチ書き込み操作のターゲット・アドレスをアサートする。プリフェッチ・マネージャ２２０８は、アボート・マネージャ２２０７に接続され、プリフェッチ操作バス２２０９からトランザクション・メモリ・システムＡ  １１０４に入力される全てのプリフェッチ操作を受け取る。
【０１８２】
読み取りアドレス・バス２２０１及び書き込みアドレス・バス２２０２は、アボート・マネージャ２２０７への入力である。１つの実施形態において、アボート・マネージャ２２０７が、読み取りアドレス・バス２２０１上のアドレスが書き込みセット２２０５内のアドレスと合致することを検出した場合、アボート・マネージャ２２０７は、アドレスへの書き込みを含むトランザクション・メモリ操作をアボートする。１つの実施形態において、アボート・マネージャ２２０７が、書き込みアドレス・バス２２０２上のアドレスが書き込みセット２２０５内のアドレスと合致すること又は読み取りセット２２０６内のアドレスと合致することを検出した場合、アボート・マネージャ２２０７は、トランザクションをアボートする。
【０１８３】
プリフェッチ読み取りアドレス・バス２２０３及びプリフェッチ書き込みアドレス・バス２２０４は、アボート・マネージャ２２０７への入力である。１つの実施形態において、アボート・マネージャ２２０７が、プリフェッチ読み取りアドレス・バス２２０３上のアドレスが書き込みセット２２０５内のアドレスと合致することを検出した場合、アボート・マネージャ２２０７は、現在のプリフェッチ操作アドレスとの競合が生じたことを、プリフェッチ・マネージャ２２０８に通知する。１つの実施形態において、アボート・マネージャ２２０７は、アドレスへの書き込みを含むトランザクションをアボートしない。１つの実施形態において、アボート・マネージャ２２０７は、プリフェッチ・マネージャ２２０８によりアボートするように指示された場合、アドレスへの書き込みを含むトランザクションをアボートする。１つの実施形態において、アボート・マネージャ２２０７が、プリフェッチ書き込みアドレス・バス２２０４上のアドレスが書き込みセット２２０５内のアドレスと合致すること又は読み取りセット２２０６内のアドレスと合致することを検出した場合、アボート・マネージャ２２０７は、現在のプリフェッチ操作アドレスとの競合が生じたことを、プリフェッチ・マネージャ２２０８に通知する。１つの実施形態において、アボート・マネージャ２２０７は、トランザクションをアボートしない。１つの実施形態において、アボート・マネージャ２２０７は、プリフェッチ・マネージャ２２０８によりアボートするように指示された場合、トランザクションをアボートする。
【０１８４】
１つの実施形態において、プリフェッチ・マネージャ２２０８は、プリフェッチ・キュー２２１３、キュー・マネージャ２２１４及びローカル・遠隔プリフェッチ２２１６を含む。１つの実施形態において、ローカル・遠隔プリフェッチ２２１６は、プリフェッチ操作を、ローカル・プリフェッチ操作（例えば、ローカル・プロセッサからの）又は遠隔プリフェッチ操作(例えば、遠隔プロセッサからの）のいずれかとして分類する。プリフェッチ操作は、メモリ・トランザクションに対して、ローカル・プリフェッチ操作又は遠隔プリフェッチ操作のいずれかである。プリフェッチ操作がメモリ・トランザクションを生成した同じプロセッサ（例えば、ローカル・プロセッサ）上で生成され、メモリ・トランザクションによりアクセスされるキャッシュにアクセスする場合、プリフェッチ操作は、メモリ・トランザクションに対してローカルであり、そうでない場合、プリフェッチ操作は、メモリ・トランザクションに対して遠隔プリフェッチ操作（例えば、遠隔プロセッサからの）である。従って、プリフェッチ操作は、プリフェッチ操作を生成した実行スレッドによりもたらされる全てのトランザクション・メモリ操作に対してローカルである。１つの実施形態において、ローカル・遠隔プリフェッチ２２１６がトランザクションに対してローカルとして分類するプリフェッチ操作は、トランザクションと関連付けられる、書き込みセット２２０５又は読み取りセット２２０６内の読み取り又は書き込みと競合し得ない。特に、プリフェッチは、これが本トランザクション・メモリ・システムに取り付けられたとき（例えば、プロセッサ１１０２などのシングル・プロセッサ又は複数のプロセッサが本トランザクション・メモリ・システムに取り付けられたとき）、ローカルである。
【０１８５】
１つの実施形態において、プリフェッチ・マネージャ２２０８に、現在のプリフェッチ操作がトランザクションと競合することが通知された場合、プリフェッチ・マネージャ２２０８は、プリフェッチ操作及びプリフェッチ操作と関連したプリフェッチ要求を廃棄する。１つの実施形態において、プリフェッチ・マネージャ２２０８がプリフェッチ操作を廃棄した場合、プリフェッチ・マネージャ２２０８は、プリフェッチの発信元へ応答を送り、プリフェッチが廃棄されたことを送信元に通知する。１つの実施形態において、アボート・マネージャにより、プリフェッチ・マネージャ２２０８に、現在のプリフェッチ操作が既存のトランザクションと競合することが通知された場合、キュー・マネージャ２２１４は、プリフェッチ操作をプリフェッチ・キュー２２１３にキューイングする。１つの実施形態において、プリフェッチ・マネージャ２２０８は、競合するトランザクション・メモリ操作が完了された後又はアボートされた後、キューイングされたプリフェッチ操作を処理する。１つの実施形態において、キュー・マネージャ２２１４がプリフェッチ操作をプリフェッチ・キュー２２１３にキューイングした場合、プリフェッチ・マネージャ２２０８は、プリフェッチ要求の送信元に応答を送り、プリフェッチ操作がキューイングされたことを、送信元に通知する。
【０１８６】
１つの実施形態において、プリフェッチ操作バス２２０９上のプリフェッチ操作は、プリフェッチ要求を含むプリフェッチ・プロトコルに関与する。プリフェッチ要求は、プリフェッチ・メモリ・アクセスであり、データに対する必要性が確実である通常の読み取り又は書き込み・メモリ・アクセスではない、データに対するメモリ・アクセスを説明する。１つの実施形態において、プリフェッチ要求は、一意のタグを有するように識別される。１つの実施形態において、一意のタグは、該一意のタグの複製がシステム内に存在することができなくなるまで、システムで再使用できない。１つの実施形態において、プリフェッチ要求は、プリフェッチ操作が処理されるとき、プリフェッチ操作（プリフェッチ要求の結果である）を、プリフェッチ・マネージャ２２０８により効率的に管理されることを可能にするプリフェッチ情報（プリフェッチ要求の送信元においてプリフェッチ要求内に含まれる）を含む。１つの実施形態において、プリフェッチ情報は、プリフェッチ操作の送信元についての優先順位情報を含む。１つの実施形態において、プリフェッチ・マネージャが、プリフェッチ操作の送信元の優先順位が、トランザクション・メモリ操作（プリフェッチ操作と競合するアドレスを有する）を生成したプロセスの優先順位を上回ることを見出した場合、プリフェッチ・マネージャ２２０８は、プリフェッチ操作が進行することを可能にし、トランザクションは、アボート・マネージャ２２０７によりアボートされる。１つの実施形態において、プリフェッチ・マネージャが、プリフェッチ操作の発信元の優先順位の、トランザクション（プリフェッチ操作と競合するアドレスを有する）を生成したプロセスの優先順位に対する比が、閾値を上回ることを見出した場合、プリフェッチ操作は進行し、トランザクションはアボートされる。１つの実施形態において、プリフェッチ操作によりメモリ・トランザクションがアボートした場合、プリフェッチ・マネージャ２２０８は、プリフェッチ操作が、結果として起こるトランザクションのアボートを進行させることを示す通知を、プリフェッチ操作の送信元に送る。さらに、トランザクション・アボートは、トランザクションに対応するプロセッサに伝達され、トランザクション状態をロールバックし、トランザクションの実行又は代替的経路を再開する。
【０１８７】
１つの実施形態において、プリフェッチ要求内のプリフェッチ情報は、プリフェッチ期間（prefetch horizon）を含む。１つの実施形態において、プリフェッチ期間は、キュー・マネージャ２２１４がトランザクション・メモリ操作と競合するアドレスにある場合、プリフェッチ操作をプリフェッチ・キュー２２１３に入れることができるサイクルの数として指定される。１つの実施形態において、プリフェッチ期間は、プリフェッチの送信元における命令実行数として指定され、これは、プリフェッチの受信側におけるサイクル数に変換される。１つの実施形態において、送信元における命令実行数から受信側におけるサイクル数への変換は、静的変換係数を用いて実行され、これは実行中に変化しない。１つの実施形態において、送信元における命令実行数から受信側におけるサイクル数への変換は、プリフェッチの受信側により計算された動的に計算された変換係数を用いて（例えば、命令の数に、命令毎の現サイクル変換係数を乗算することによって）、実行中に行われる。
【０１８８】
１つの実施形態において、プリフェッチ要求を受け取るローカル・プロセッサは、プリフェッチが競合する１つ又は複数の現トランザクション内に残っていると考えられるサイクル数を追跡する。１つの実施形態において、１つ又は複数のトランザクション内の残りのサイクルの予想数のカウントが維持される。１つの実施形態において、プリフェッチについての期間の終了時間が、競合するトランザクション内に残っているサイクルの予想数の後の終了時間を下回る場合、プリフェッチ要求は廃棄され、そうでない場合、プリフェッチ要求はキューイングされる。
【０１８９】
１つの実施形態において、プリフェッチ操作がプリフェッチ期間のサイクル数内に処理されなかった場合、キュー・マネージャ２２１４は、プリフェッチ・キュー２２１３からプリフェッチ操作を除去し、これを廃棄する。１つの実施形態において、プリフェッチ操作が、プリフェッチ期間のサイクル数の後に廃棄された後、プリフェッチ・マネージャ２２０８は、プリフェッチ・ホライズンが超過したために、プリフェッチが廃棄されたことを、プリフェッチの送信元に通知する。
【０１９０】
１つの実施形態において、プリフェッチ要求内のプリフェッチ情報は、プリフェッチ要求の発信元の重要性を含む。１つの実施形態において、発信元の重要性が閾値を超えた場合、及び、プリフェッチ要求がトランザクション・メモリ操作とアドレス競合にある場合、プリフェッチ・マネージャ２２０８はプリフェッチ操作をキューイングし、そうでない場合、プリフェッチ要求は廃棄される。
【０１９１】
１つの実施形態において、プリフェッチ・キュー２２１３が一杯であるとき、受信するプリフェッチ要求は廃棄される。１つの実施形態において、プリフェッチ・キュー２２１３が一杯であるために入ってくるプリフェッチ要求が廃棄される場合、プリフェッチ要求への応答が、プリフェッチ要求の発信元に送られ、この応答は、プリフェッチ・キュー２２１３が一杯であったためにプリフェッチ要求が廃棄されたことを、プリフェッチ要求の発信元に知らせる。１つの実施形態において、プリフェッチ・キュー２２１３が一杯である場合、プリフェッチ・キュー２２１３から１つのエントリを選択し、廃棄する。１つの実施形態において、キュー・マネージャ２２１４は、廃棄されるプリフェッチ・キュー２２１３内のプリフェッチを選択する。１つの実施形態において、キュー・マネージャ２２１４が、別のプリフェッチ要求のためのスペースをあけるためにプリフェッチ・キュー２２１３から１つのプリフェッチを廃棄する場合、別のプリフェッチ要求のためのスペースをあけるためにプリフェッチ要求が廃棄されたことを、廃棄されるプリフェッチの発信元に通知する。１つの実施形態において、プリフェッチ要求によりプリフェッチ・キュー２２１３からの排除が行われる場合、プリフェッチ要求によりプリフェッチ・キュー２２１３からの排除が行われたことが、プリフェッチ要求の送信元に通知される。１つの実施形態において、プリフェッチ・キュー２２１３からの排除が行われる場合、プリフェッチ要求内の最も古いエントリが廃棄される。別の実施形態において、プリフェッチ・キュー２２１３から廃棄されるプリフェッチ要求は、プリフェッチ・キュー２２１３の先頭のプリフェッチ要求である。別の実施形態において、廃棄されるプリフェッチ・キュー２２１３内のプリフェッチ要求は、最も短い期間を有するプリフェッチ要求、つまり終了時間が最も早いプリフェッチ要求である。別の実施形態において、廃棄されるキューから選択されるプリフェッチ要求は、最も長い期間を有するプリフェッチ要求、つまり終了時間が最も先のプリフェッチ要求である。
【０１９２】
他の実施形態において、図５における種々のバスが組み合わせられる。従って、こうした実施形態の１つ又は複数において、限定されない例として、要求タイプ・インジケータを有する単一の読み取りバスにより、読み取りアドレス・バス２２０１及びプリフェッチ読み取りアドレス・バス２２０３の機能が実施され、要求タイプ・インジケータを有する単一の書き込みバスにより、書き込みアドレス・バス２２０２及びプリフェッチ書き込みアドレス・バス２２０４の機能が実施され、要求タイプ・インジケータを有する単一のプリフェッチ・バスにより、プリフェッチ・バス２２０３及び２２０４の機能が実施され、バス・インジケータを有する単一の非プリフェッチ・バスにより、非プリフェッチ・バス２２０１及び２２０３の機能が実施され、要求タイプ・インジケータを有する単一のアドレス・バスにより、全てのバスの機能が実施される。他の実施形態においては、要求及びアドレス・バスが組み合わせられる。
【０１９３】
幾つかのシナリオ及び実施形態において、プリフェッチ・プロトコルは、プリフェッチ要求の目的に関する情報を含むバス・ベース又はスイッチ・ベースの相互接続上でアサートされる読み取り要求を含む。１つの実施形態において、ＭＥＳＩキャッシュ・コヒーレンシ・プロトコルを組み込むシステムにおいて、キャッシュ・コヒーレンシ・プロトコルは、読み取り要求がデマンド要求（すなわち、データに対する非プリフェッチ要求）であるか又はプリフェッチ要求であるかに関する仕様を含む読み取り要求を含むように強化される。１つの実施形態において、プリフェッチ要求は、データの排他的所有権についてのプリフェッチ（例えば、データの読み書きのための）又はデータの共有所有権についてのプリフェッチ（例えば、データの読み取りのための）である。
【０１９４】
図６は、デマンド要求又はプリフェッチ要求を指定し、プリフェッチ要求がデータの排他的所有権のためのものか又はデータの共有所有権のためのプリフェッチであるかをさらに指定する読み取り要求の形式の実施形態を示す。１つの実施形態において、読み取り要求３３１１は、少なくとも６つの情報フィールド：すなわち、読み取り情報フィールド３３０１、タグ情報フィールド３３０２、排他的又は共有情報フィールド３３０３、ｐ（プリフェッチ）情報フィールド３３０４、アドレス情報フィールド３３０５、及びＣＲＣ（周期的冗長検査）情報フィールド３３０６からなる。１つの実施形態において、読み取り情報フィールド３３０１は、読み取り要求３３１１を読み取り要求として識別し、タグ情報フィールド３３０２は、読み取り要求３３１１の特定のインスタンスを識別し、排他的又は共有情報フィールド３３０３は、読み取り要求３３１１がデータへの排他的又は共有アクセスに関するものかを指定し、ｐ情報フィールド３３０４は、読み取り要求３３１１がプリフェッチ要求であるかどうかを指定し、アドレス情報フィールド３３０５は、読み取り要求３３１１により要求されるデータのアドレスを指定し、ＣＲＣ情報フィールド３３０６は、読み取り要求３３１１内の他の情報フィールドの値のビットパターンから計算され、読み取り要求３３１１の送信元から読み取り要求３３１１の宛先への読み取り要求３３１１の転送の際に生じたエラーを検出するために用いられる値を含む。
【０１９５】
図６はまた、読み取り要求３３１１への応答、すなわち読み取り応答３３１２の形式の実施形態も示す。１つの実施形態において、読み取り応答３３１２は、少なくとも４つの情報フィールド：すなわち、読み取り応答情報フィールド３３０７、タグ情報フィールド３３０８、データ情報フィールド３３０９、及びＣＲＣ情報フィールド３３１０からなる。１つの実施形態において、読み取り応答情報フィールド３３０７は、読み取り応答３３１２を読み取り応答として識別し、タグ情報フィールド３３０８は、読み取り応答３３１２を、タグ情報フィールド３３０８に等しいタグ情報フィールド３３０２を有する読み取り要求３３１１への応答として識別し、データ情報フィールド３３０９は、タグ情報フィールド３３０８に等しいタグ情報フィールド３３０２を有する読み取り要求３３１１により要求されるデータであるデータを含む。ＣＲＣ情報フィールド３３１０は、読み取り応答３３１２内の他の情報フィールドの値のビットパターンから計算され、読み取り応答３３１２の送信元から読み取り応答３３１２の宛先への読み取り応答３３１２の転送の際に生じたエラーを検出するために用いられる値を含む。
【０１９６】
幾つかのシナリオ及び実施形態において、プリフェッチ・プロトコルは、プリフェッチ要求の目的に関する情報を含むバス・ベース又はスイッチ・ベースの相互接続上でアサートされるプリフェッチ要求を含む。１つの実施形態において、ＭＥＳＩキャッシュ・コヒーレンシ・プロトコルを組み込むシステムにおいて、キャッシュ・コヒーレンシ・プロトコルは、プリフェッチ要求が、データの排他的所有権についてのプリフェッチであるか、又はデータの共有所有権についてのプリフェッチであるかに関する仕様を含むプリフェッチ要求を含むように強化される。
【０１９７】
図７は、プリフェッチ要求４４１６の形式の実施形態、及びプリフェッチ要求４４１６への３つのタイプの応答：すなわちプリフェッチ応答４４１７（プリフェッチ要求４４１６が実行されたことを示す）、プリフェッチ拒否（reject）応答４４１８（プリフェッチ要求４４１６が拒否されたことを示す）、及びプリフェッチ据え置き（deferred）応答４４１９（プリフェッチ要求４４１６が据え置かれたことを示す）の各々についての形式の実施形態を示す。１つの実施形態において、プリフェッチ要求４４１６は、プリフェッチ要求４４１６が、データの排他的所有権についてのプリフェッチか、又はデータの共有所有権についてのプリフェッチかを指定する。１つの実施形態において、プリフェッチ要求４４１６は、少なくとも５つの情報フィールド：すなわち、プリフェッチ情報フィールド４４０１、タグ情報フィールド４４０２、排他的又は共有情報フィールド４４０３、アドレス情報フィールド４４０４、及びＣＲＣ（周期的冗長検査）情報フィールド４４０５からなる。１つの実施形態において、プリフェッチ情報フィールド４４０１は、読み取り要求４４１６をプリフェッチ要求として識別し、タグ情報フィールド４４０２は、プリフェッチ要求４４１６の特定のインスタンスを識別し、排他的又は共有情報フィールド４４０３は、プリフェッチ要求４４１６が、排他的アクセスに対するプリフェッチ要求であるか又は共有アクセスに対するプリフェッチであるかのいずれかであることを指定し、アドレス情報フィールド４４０４は、プリフェッチ要求４４１６により要求されるデータのアドレスを指定し、ＣＲＣ情報フィールド４４０５は、プリフェッチ要求４４１６内の他の情報フィールドの値のビット・バターンから計算され、プリフェッチ要求４４１６の送信元からプリフェッチ要求４４１６の宛先へのプリフェッチ要求４４１６の転送の際に生じたエラーを検出するために使用される値を含む。
【０１９８】
図７はまた、プリフェッチ応答４４１７の形式の実施形態も示す。１つの実施形態において、プリフェッチ応答４４１７は、プリフェッチ要求４４１６におけるアクションが実行されたとき、プリフェッチ要求４４１６に応答して、プリフェッチ要求４４１６を受け取った宛先から送られる。１つの実施形態において、プリフェッチ応答４４１７は、少なくとも４つの情報フィールド：すなわち、プリフェッチ応答情報フィールド４４０６、タグ情報フィールド４４０７、データ情報フィールド４４０、及びＣＲＣ情報フィールド４４０９からなる。１つの実施形態において、プリフェッチ応答情報フィールド４４０６は、プリフェッチ応答４４１７をプリフェッチ応答として識別し、タグ情報フィールド４４０７は、プリフェッチ応答４４１７を、タグ情報フィールド４４０７に等しいタグ情報フィールド４４０２を有するプリフェッチ要求４４１６への応答として識別し、データ情報フィールド４４０８は、タグ情報フィールド４４０７と合致するタグ情報フィールド４４０２を有するプリフェッチ要求４４１６により要求されるデータを含み、ＣＲＣ情報フィールド４４０９は、プリフェッチ応答４４１７における他の情報フィールドの値のビット・バターンから計算され、プリフェッチ応答４４１７の送信元からプリフェッチ応答４４１７の宛先へのプリフェッチ応答４４１７の転送の際に生じたエラーを検出するために使用される値を含む。
【０１９９】
図７はまた、プリフェッチ要求４４１６への応答の第２のタイプ、すなわちプリフェッチ拒否応答４４１８の形式の実施形態も示す。１つの実施形態において、プリフェッチ拒否応答４４１８は、プリフェッチ要求４４１６により要求されるアクションが拒否されたとき（すなわち、アボートされたとき）、プリフェッチ要求４４１６に応答して、プリフェッチ要求４４１６を受け取った宛先から送られる。１つの実施形態において、プリフェッチ拒否応答４４１８は、少なくとも３つの情報フィールド：すなわち、プリフェッチ拒否情報フィールド４４１０、タグ情報フィールド４４１１、及びＣＲＣ情報フィールド４４１２からなる。１つの実施形態において、プリフェッチ拒否情報フィールド４４１０は、プリフェッチ応答４４１８をプリフェッチ拒否応答として識別し、タグ情報フィールド４４１１は、プリフェッチ拒否応答４４１８を、タグ情報フィールド４４１１に等しいタグ情報フィールド４４０２を有するプリフェッチ要求４４１６への応答として識別し、ＣＲＣ情報フィールド４４０９は、プリフェッチ拒否応答４４１８における他の情報フィールドの値のビット・バターンから計算され、プリフェッチ拒否応答４４１８の送信元からプリフェッチ拒否応答４４１８の宛先へのプリフェッチ拒否応答４４１８の転送の際に生じたエラーを検出するために使用される値を含む。
【０２００】
図７はまた、プリフェッチ要求４４１６への応答の第３のタイプ、すなわちプリフェッチ据え置き応答４４１９の形式の実施形態も示す。１つの実施形態において、プリフェッチ据え置き応答４４１９は、プリフェッチ要求４４１６により要求されるアクションが据え置かれる又は遅延されるとき（例えば、宛先においてキューイングされる）、プリフェッチ要求４４１６に応答して、プリフェッチ要求４４１６を受け取った宛先から送られる。１つの実施形態において、プリフェッチ据え置き応答４４１９は、少なくとも３つの情報フィールド：すなわちプリフェッチ据え置き情報フィールド４４１３、タグ情報フィールド４４１４、及びＣＲＣ情報フィールド４４１５からなる。１つの実施形態において、プリフェッチ据え置き情報フィールド４４１３は、プリフェッチ据え置き応答４４１９をプリフェッチ据え置き応答として識別し、タグ情報フィールド４４１４は、プリフェッチ据え置き応答４４１９を、タグ情報フィールド４４１４に等しいタグ情報フィールド４４０２を有するプリフェッチ要求４４１６への応答として識別し、ＣＲＣ情報フィールド４４１４は、プリフェッチ据え置き応答４４１９における他の情報フィールドの値のビット・バターンから計算され、プリフェッチ据え置き応答４４１９の送信元からプリフェッチ据え置き応答４４１９の宛先へのプリフェッチ据え置き応答４４１９の転送の際に生じたエラーを検出するために使用される値を含む。
【０２０１】
１つの実施形態において、プリフェッチ・プロトコルは、各々がパックされたプリフェッチ要求において指定された関連したアドレスを有する複数のプリフェッチ操作からなるパックされたプリフェッチ要求を含む。１つの実施形態において、パックされたプリフェッチ要求における全てのプリフェッチ操作は、同じタイプのパックされたプリフェッチ要求のものである。１つの実施形態において、パックされたプリフェッチ要求は、データの排他的所有権に対する複数のプリフェッチ要求又はデータの共有所有権に対する複数のプリフェッチ要求のいずれかを含むこと、又はそのどちらも含まないことがある。１つの実施形態において、パックされたプリフェッチ要求における各プリフェッチ操作は、パックされたプリフェッチ要求内に含まれる別のプリフェッチ操作のタイプとは独立しているプリフェッチ操作のタイプ（例えば、排他的所有権についてのプリフェッチ又は共有所有権についてのプリフェッチ）とすることができる。
【０２０２】
１つの実施形態において、パックされたプリフェッチ要求内の１つ又は複数のアドレスは、アドレスのシーケンスであり、各アドレスは、アドレスと関連した一意のインデックスを有する。１つの実施形態において、アドレスのインデックスの値（すなわち、アドレス・インデックス）は、パックされたプリフェッチ要求内のアドレス・シーケンスにおけるアドレスの位置の値をとる。１つの実施形態において、パックされたプリフェッチ要求は、パックされたプリフェッチ要求を識別するパックされたプリフェッチ要求タグを含む。１つの実施形態において、パックされたプリフェッチ要求タグは、パックされたプリフェッチ要求についての一意のタグと、アドレス・シーケンス内の各アドレスについての一意のタグとからなる。
【０２０３】
１つの実施形態において、プリフェッチ・プロトコルにおけるパックされたプリフェッチ要求への応答、（例えば、データに対する応答、プリフェッチ操作の拒否を示す応答、又は操作が据え置かれたことを示す応答）が、パックされたプリフェッチ要求内に含まれるプリフェッチ操作と関連付けられる。応答は、パックされたプリフェッチ要求のタグと、応答が関連付けられるパックされたプリフェッチ要求内のプリフェッチ操作のアドレスの識別子（すなわち、アドレス識別子）とを含む。パックされたプリフェッチ要求は、１つ又は複数のプリフェッチ操作を組み込むことができるので、パックされたプリフェッチ要求内の操作への応答は、応答が関連付けられる個々のプリフェッチ操作を識別する必要がある。１つの実施形態において、アドレス識別子は、パックされたプリフェッチ要求内の１つ又は複数のアドレス・シーケンスにおけるアドレスのインデックスである。１つの実施形態において、アドレス識別子は、パックされたプリフェッチ要求のパックされたプリフェッチ・タグ内に含まれるアドレスについての一意のタグである。
【０２０４】
図８は、パックされたプリフェッチ要求５５０１の形式の実施形態、及びパックされたプリフェッチ要求５５０１への３つのタイプの応答の各々：すなわち、パックされたプリフェッチ応答５５０２（パックされたプリフェッチ要求５５０１内のプリフェッチ操作が実行されたことを示す）、パックされたプリフェッチ拒否応答５５０３（パックされたプリフェッチ要求５５０１内のプリフェッチ操作が拒否されたことを示す）、及びパックされたプリフェッチ据え置き応答５５０４（パックされたプリフェッチ要求５５０１内のプリフェッチ操作が据え置かれたことを示す）についての形式の実施形態を示す。１つの実施形態において、パックされたプリフェッチ要求５５０１は、少なくとも５つの情報フィールド：すなわち、パックされたプリフェッチ情報フィールド５５０５、パックされたプリフェッチ・タグ情報フィールド５５０６、排他的又は共有情報フィールド５５０７、アドレス情報フィールド５５０８、及びＣＲＣ（周期的冗長検査）情報フィールド５５０９からなる。１つの実施形態において、パックされたプリフェッチ情報フィールド５５０５は、パックされたプリフェッチ要求５５０１をパックされたプリフェッチ要求として識別し、パックされたプリフェッチ・タグ情報フィールド５５０６は、パックされたプリフェッチ要求５５０１の特定のインスタンスを識別し、排他的又は共有情報フィールド５５０７は、そのプリフェッチ要求５５０１が排他的アクセスに対するプリフェッチ要求であるか又は共有アクセスに対するプリフェッチであるかのいずれかであることを指定し、アドレス情報フィールド５５０８は、パックされたプリフェッチ要求５５０１により要求されるデータの１つ又は複数のアドレスを指定し、ＣＲＣ情報フィールド５５０９は、パックされたプリフェッチ要求５５０９における他の情報フィールドの値のビット・バターンから計算され、プリフェッチ要求５５０９の送信元からパックされたプリフェッチ要求５５０９の宛先へのパックされたプリフェッチ要求５５０９の転送の際に生じたエラーを検出するために使用される値を含む。
【０２０５】
図８はまた、パックされたプリフェッチ５５０１におけるプリフェッチ操作への応答である、パックされたプリフェッチ応答５５０２の形式の実施形態も示す。１つの実施形態において、パックされたプリフェッチ応答５５０２は、パックされたプリフェッチ要求５５０１におけるプリフェッチ操作が実行されたとき、パックされたプリフェッチ要求５５０１に応答して、パックされたプリフェッチ要求５５０１を受け取った宛先から送られる。１つの実施形態において、パックされたプリフェッチ応答５５０２は、少なくとも４つの情報フィールド：すなわち、パックされたプリフェッチ応答情報フィールド５５１３、操作タグ情報フィールド５５１０、データ情報フィールド５５１４、及びＣＲＣ情報フィールド５５１５からなる。１つの実施形態において、パックされたプリフェッチ応答５５０２は、パックされたプリフェッチ応答５５０２をパックされたプリフェッチ応答として識別し、操作タグ情報フィールド５５１０は、パックされたプリフェッチ応答５５０２を、パックされたプリフェッチ・タグ５５０６を有するパックされたプリフェッチ要求５５０１内のプリフェッチ操作への応答として識別し、データ情報フィールド５５１４は、パックされたプリフェッチ５５０１の一意のインスタンスを識別する一意のタグと、パックされたプリフェッチ５５０１の一意のインスタンス内の一意のプリフェッチ操作を識別するアドレス識別子とを含む操作タグ情報フィールド５５１０を有するプリフェッチ要求５５０２におけるプリフェッチ操作により要求されるデータであるデータを含む。ＣＲＣ情報フィールド５５１５は、パックされたプリフェッチ応答５５０２における他の情報フィールドの値のビット・バターンから計算され、パックされたプリフェッチ応答５５０２の送信元からパックされたプリフェッチ応答５５０２の宛先へのパックされたプリフェッチ応答５５０２の転送の際に生じたエラーを検出するために使用される値を含む。１つの実施形態において、操作タグ５５１０内のアドレス識別子は、パックされたプリフェッチ・タグ情報フィールド５５０６内に含まれる一意のアドレス・タグである。１つの実施形態において、操作タグ５５１０内のアドレス識別子は、アドレス情報フィールド５５０８内に含まれるアドレスのインデックスである。
【０２０６】
図８はまた、パックされたプリフェッチ要求５５０１への応答の第２のタイプ、すなわち、パックされたプリフェッチ拒否応答５５０３の形式の実施形態も示す。１つの実施形態において、パックされたプリフェッチ拒否応答５５０３は、パックされたプリフェッチ要求５５０１内に含まれるプリフェッチ操作が拒否されたとき（すなわち、アボートされたとき）、パックされたプリフェッチ要求５５０１内のプリフェッチ操作に応答して、パックされたプリフェッチ要求５５０１を受け取った宛先から送られる。１つの実施形態において、パックされたプリフェッチ拒否応答５５０３は、少なくとも３つの情報フィールド：すなわち、パックされたプリフェッチ拒否応答情報フィールド５５１６、操作タグ情報フィールド５５１１、及びＣＲＣ情報フィールド５５１７からなる。１つの実施形態において、パックされたプリフェッチ拒否情報フィールド５５１６は、プリフェッチ拒否応答５５０３をプリフェッチ拒否応答として識別し、操作タグ情報フィールド５５１１は、パックされたプリフェッチ要求５５０１の一意のインスタンスを識別する一意のタグと、一意のプリフェッチ操作を識別するアドレス識別子とを含む操作タグ情報フィールド５５１１を有した、パックされたプリフェッチ拒否応答５５０３を、パックされたプリフェッチ要求５５０１内に含まれるプリフェッチ操作への応答として識別し、ＣＲＣ情報フィールド５５１７は、パックされたプリフェッチ拒否応答５５０３における他の情報フィールドの値のビット・バターンから計算され、パックされたプリフェッチ拒否応答５５０３の送信元からパックされたプリフェッチ拒否応答５５０３の宛先へのパックされたプリフェッチ拒否応答５５０３の転送の際に生じたエラーを検出するために使用される値を含む。１つの実施形態において、操作タグ５５１１内のアドレス識別子は、パックされたプリフェッチ・タグ情報フィールド５５０６内に含まれる一意のアドレス・タグである。１つの実施形態において、操作タグ５５１１内のアドレス識別子は、アドレス情報フィールド５５０８内に含まれるアドレスのインデックスである。
【０２０７】
図８はまた、パックされたプリフェッチ要求５５０１への応答の第３のタイプ、すなわちパックされたプリフェッチ据え置き応答５５０４の形式の実施形態も示す。１つの実施形態において、パックされたプリフェッチ据え置き要求５５０４は、パックされたプリフェッチ要求５５０１内に含まれるプリフェッチ操作が据え置かれるとき（例えば、ローカル・プロセッサ又は遠隔プロセッサにおける指定された条件が満たされるまで、遅延された実行についてキューイングされる又は遅延される）、パックされたプリフェッチ要求５５０１におけるプリフェッチ操作に応答して、パックされたプリフェッチ要求５５０１を受け取った宛先から送られる。１つの実施形態において、パックされたプリフェッチ据え置き応答５５０４は、少なくとも３つのフィールド：すなわち、パックされたプリフェッチ据え置き応答情報フィールド５５１８、操作タグ情報フィールド５５１２、及びＣＲＣ情報フィールド５５１９からなる。１つの実施形態において、パックされたプリフェッチ据え置き情報フィールド５５１８は、プリフェッチ据え置き応答５５０４をプリフェッチ据え置き応答として識別し、操作タグ情報フィールド５５１２は、パックされたプリフェッチ据え置き応答５５０４を、パックされたプリフェッチ要求５５０１の一意のインスタンスを識別する一意のタグと、一意のプリフェッチ操作を識別するアドレス識別子とを含む操作タグ情報フィールド５５１２を有した、パックされたプリフェッチ要求５５０１内に含まれるプリフェッチ操作への応答として識別し、ＣＲＣ情報フィールド５５１９は、パックされたプリフェッチ据え置き応答５５０４における他の情報フィールドの値のビットパターンから計算され、パックされたプリフェッチ据え置き応答５５０４の送信元からパックされたプリフェッチ据え置き応答５５０４の宛先へのプリフェッチ拒否応答５５０３の転送の際に生じたエラーを検出するために使用される値を含む。１つの実施形態において、操作タグ５５１１内のアドレス識別子は、パックされたプリフェッチ・タグ情報フィールド５５０６内に含まれる一意のアドレス・タグである。１つの実施形態において、操作タグ５５１１内のアドレス識別子は、アドレス情報フィールド５５０８内に含まれるアドレスのインデックスである。
【０２０８】
他の実施形態において、プリフェッチ・プロトコルは、プリフェッチ要求４４１６及びパックされたプリフェッチ要求５５０１に対する付加的な応答を含む。１つの実施形態において、プリフェッチ操作の送信元と関連付けられたキャッシュは、キャッシュがプリフェッチ・データとしてプリフェッチ操作から受け取るデータをマーク付けする。１つの実施形態において、キャッシュは、（例えば、新しいデータを適合させるためにどのデータを排出する（evict）かを判断するために）キャッシュのメモリ・スペースの管理において、キャッシュが収容するプリフェッチ・データについての情報を使用する。
【０２０９】
図９は、１つの実施形態における、トランザクション・メモリ・システムＡ  １１０４の動作を示すフローチャートである。１つの実施形態において、トランザクション・メモリ・システムＡ  １１０４は、非プリフェッチ操作バス２２１０又はプリフェッチ操作バス２２０９におけるメモリ操作に対するプロトコル要求を受け取る（ステップ３０１）。アボート・マネージャ２２０７は、メモリ操作が読み取りであるかどうか、すなわち読み取りタイプのメモリ操作であるかどうかを判断する（決定ステップ３０２）。メモリ操作が読み取りである場合（決定ステップ３０２、ＹＥＳ分岐）、アボート・マネージャ２２０７は、読み取りのアドレスがトランザクションの書き込みセット２２０５内のアドレスと合致するかどうかを判断する（決定ステップ３０３）。読み取りのアドレスがトランザクションの書き込みセット２２０５内のアドレスと合致しない場合（決定ステップ３０３、ＮＯ分岐）、読み取り操作が行われ、遠隔要求に関して、図７の例示的プロトコルに従って、アボート・マネージャ２２０７により、応答が送られ（ステップ３０４）、プロセスが終了する（ステップ３１３）。
【０２１０】
読み取りのアドレスがトランザクションの書き込みセット２２０５内のアドレスと合致する場合（決定ステップ３０３、ＹＥＳ分岐）、アボート・マネージャ２２０７は、読み取りがプリフェッチ操作であるかどうかを判断する（決定ステップ３０５）。読み取りがプリフェッチ操作である場合（決定ステップ３０５、ＹＥＳ分岐）、読み取りプリフェッチは、プリフェッチ・マネージャ２２０８により管理され（ステップ３１２）、プロセスは終了する（ステップ３１３）。読み取りがプリフェッチ操作でない場合（決定ステップ３０５、ＮＯ分岐）、読み取りのアドレスと関連付けられたトランザクションはアボートされ（ステップ３０７）、プロセスは終了する（ステップ３１３）。
【０２１１】
メモリ操作が読み取りでない場合（決定ステップ３０２、ＮＯ分岐）、アボート・マネージャ２２０７は、メモリ操作が書き込み操作であると判断し、書き込み操作のアドレスがトランザクションの読み取りセット２２０６内のアドレスと合致するかどうかを判断する（決定ステップ３０８）。書き込み操作のアドレスがトランザクションの読み取りセット２２０６内のアドレスと合致しない場合（決定ステップ３０８、ＮＯ分岐）、アボート・マネージャ２２０７は、書き込み操作のアドレスがトランザクションの書き込みセット２２０５内のアドレスと合致するかどうかを判断する（決定ステップ３０９）。書き込み操作のアドレスがトランザクションの書き込みセット２２０５内のアドレスと合致しない場合（決定ステップ３０９、ＮＯ分岐）書き込み操作が実行され（すなわち、ローカル書き込み要求に対して書き込みが行われ、書き込み要求が遠隔プロセッサ若しくはノードから発生した場合、適切なキャッシュラインが、排他的所有権を有した状態で遠隔プロセッサに転送され（ステップ３１４）、プロセッサは終了する（ステップ３１３）。書き込み操作のアドレスがトランザクション・メモリ操作の書き込みセット２２０５内のアドレスと合致する場合（決定ステップ３０９、ＹＥＳ分岐）、アボート・マネージャ２２０７は、書き込み操作がプリフェッチ操作であるかどうかを判断する（決定ステップ３１０）。書き込み操作のアドレスがトランザクションの読み取りセット２２０６内のアドレスと合致する場合（決定ステップ３０８、ＹＥＳ分岐）、アボート・マネージャ２２０７は、書き込み操作がプリフェッチ操作であるかどうかを判断する（決定ステップ３１０）。アボート・マネージャ２２０７が、書き込み操作がプリフェッチ操作ではないと判断する場合（ステップ３１０、ＮＯ分岐）、書き込み操作のアドレスと関連付けられるトランザクションは、アボート・マネージャ２２０７によりアボートされ（ステップ３１１）、プロセスは終了する（ステップ３１３）。書き込み操作が、書き込み操作についてのプリフェッチであると判断される場合（決定ステップ３１０、ＹＥＳ分岐）、書き込みプリフェッチは、プリフェッチ・マネージャ２２０８により管理され（ステップ３１２）、プロセスは終了する（ステップ３１３）。
【０２１２】
図１０は、図９のプリフェッチ管理ステップ３１２内で行われるプリフェッチ操作を管理するための、プリフェッチ・マネージャ２２０８の主要な動作を示すフローチャートである。プリフェッチ・マネージャ２２０８内のローカル・遠隔２２１６は、プリフェッチ操作がローカルであるか又は遠隔であるかを判断する（決定ステップ４０１）。プリフェッチ操作がローカルである場合（決定ステップ４０１、ＹＥＳ分岐）、プリフェッチ操作が行われ（ステップ４０３）、プロセスは終了する（ステップ４１９）。（少なくとも１つの実施形態において、要求者及び被要求者が同じキャッシュにアクセスしているときなど、プリフェッチの実行は、さらなるアクションを伴わない成功裏のプリフェッチを指し示すことを含む。）ローカル・遠隔２２１６が、プリフェッチ操作が遠隔であると判断した場合（決定ステップ４０１、ＮＯ分岐）、キュー・マネージャ２２１４は、プリフェッチ操作をプリフェッチ・キュー２２１３に挿入すべきかどうかを判断する（決定ステップ４２０）。キュー・マネージャ２２１４が、プリフェッチ操作をプリフェッチ・キュー２２１３内に挿入すべきでないと判断した場合（ステップ４２０、ＮＯ分岐）、プリフェッチ・マネージャ２２０８は、プリフェッチ操作を廃棄する（ステップ４１３）。プリフェッチ・マネージャ２２０８は、プリフェッチ操作が廃棄されたことを、プリフェッチ操作の発信元に通知すべきかどうかを判断する（決定ステップ４１４）。プリフェッチ・マネージャ２２０８が、プリフェッチ操作が廃棄されたことを、プリフェッチ操作の送信元に通知すべきであると判断した場合（決定ステップ４１４、ＹＥＳ分岐）、プリフェッチ・マネージャ２２０８により、プリフェッチ操作の送信元に通知され（ステップ４１５）、プリフェッチ・マネージャ２２０８における操作は完了する（ステップ４１９）。プリフェッチ・マネージャ２２０８が、プリフェッチ操作が廃棄されたことを、プリフェッチ操作の送信元に通知すべきではないと判断した場合（決定ステップ４１４、ＮＯ分岐）、プリフェッチ・マネージャ２２０８における操作は完了する（ステップ４１９）。
【０２１３】
キュー・マネージャ２２１４が、プリフェッチ操作をプリフェッチ・キュー２２１３に挿入すべきであると判断した場合（決定ステップ４２０、ＹＥＳ分岐）、キュー・マネージャ２２１４は、プリフェッチ・キュー２２１４が一杯であるかどうかを判断する（決定ステップ４２１）。プリフェッチ・キュー２２１４が一杯でない場合（決定ステップ４２１、ＮＯ分岐）、キュー・マネージャ２２１４は、プリフェッチ操作をプリフェッチ・キュー２２１３に挿入する（ステップ４１６）。プリフェッチ・マネージャ２２０８は、プリフェッチ操作がキューイングされたことを、プリフェッチ操作の送信元に知らせるかどうかを判断する（決定ステップ４１７）。プリフェッチ・マネージャ２２０８が、プリフェッチ操作の送信元に通知すべきであると判断した場合（決定ステップ４１７、ＹＥＳ分岐）、プリフェッチ・マネージャ２２０８は、プリフェッチ操作の送信元に通知し（ステップ４１８）、その後、プロセスは完了する（ステップ４１９）。プリフェッチ・マネージャ２２０８が、プリフェッチ操作の送信元に通知すべきではないと判断した場合（決定ステップ４１７、ＮＯ分岐）、プロセスは完了する（ステップ４１９）。
【０２１４】
キュー・マネージャ２２１４が、プリフェッチ・キュー２２１３が一杯であるかどうかを判断する場合（決定ステップ４２１、ＹＥＳ分岐）、キュー・マネージャ２２１４は、プリフェッチ・キュー２２１３からエントリを排出すべきかどうかを判断する（決定ステップ４０３）。キュー・マネージャ２２１４が、エントリを排出すべきであると判断した場合（決定ステップ４０３、ＹＥＳ分岐）、キュー・マネージャ２２１４は、プリフェッチ・キュー２２１５からエントリを排出する（ステップ４０７）。プリフェッチ・マネージャ２２０８は、プリフェッチ操作の排出（eviction）を、排出されたプリフェッチ操作の送信元に通知すべきかどうかを判断する（決定ステップ４０８）。プリフェッチ・マネージャ２２０８が、排出されたプリフェッチ操作の送信元に通知すべきであると判断した場合（決定ステップ４０８、ＹＥＳ分岐）、プリフェッチ・マネージャ２２０８により、排出されたプリフェッチ操作の送信元に、排出を通知し（ステップ４０９）、プリフェッチ・マネージャ２２０８により、新しいプリフェッチ操作が、プリフェッチ・キュー２２１３にキューイングされる（ステップ４１０）。プリフェッチ・マネージャ２２０８が、排出されたプリフェッチ操作の送信元に通知すべきではないと判断した場合（決定ステップ４０８、ＮＯ分岐）、プリフェッチ・マネージャ２２０８により、新しいプリフェッチ操作が、プリフェッチ・キュー２２１３にキューイングされる（ステップ４１０）。プリフェッチ・マネージャ２２０８は、新しいプリフェッチ操作のキューイングを、新しいプリフェッチ操作の送信元に通知すべきかどうかを判断する（決定ステップ４１１）。プリフェッチ・マネージャ２２０８が、新しいプリフェッチ操作のキューイングを、新しいプリフェッチ操作の送信元に通知すべきであると判断した場合（決定ステップ４１１、ＹＥＳ分岐）、プリフェッチ・マネージャ２２０８により、新しいプリフェッチ操作の送信元に通知し（ステップ４１０）、これにより、新しいプリフェッチ操作がキューイングされたことが示され（ステップ４１２）、プロセスは完了する（ステップ４１９）。プリフェッチ・マネージャ２２０８が、新しいプリフェッチ操作の送信元に通知すべきでないと判断した場合（決定ステップ４１１、ＮＯ分岐）、プロセスは完了する（ステップ４１９）。
【０２１５】
キュー・マネージャ２２１４が、プリフェッチ操作を排出すべきではないと判断した場合（決定ステップ４０３、ＮＯ分岐）、プリフェッチ・マネージャ２２０８により、新しいプリフェッチ操作は廃棄される（ステップ４０４）。プリフェッチ・マネージャ２２０８は、プリフェッチ操作の廃棄を、廃棄されたプリフェッチ操作の送信元に通知すべきかどうかを判断する（決定ステップ４０５）。プリフェッチ・マネージャ２２０８が、プリフェッチ操作が廃棄されたことを、廃棄されたプリフェッチ操作の送信元に通知すべきであると判断した場合（決定ステップ４０５、ＹＥＳ分岐）、プリフェッチ・マネージャ２２０８による廃棄を、廃棄されたプリフェッチ操作の送信元に通知し（ステップ４０６）、プロセスが完了する（ステップ４１９）。プリフェッチ・マネージャ２２０８が、プリフェッチ操作の廃棄を、排出されたプリフェッチ操作の送信元に通知すべきではないと判断した場合（決定ステップ４０５、ＮＯ分岐）、プロセスは完了する（ステップ４１９）。
【０２１６】
キュー・マネージャ２２１４が、プリフェッチ・キュー２２１３が一杯ではないと判断した場合（決定ステップ４０２、ＮＯ分岐）、キュー・マネージャ２２１４により、プリフェッチ操作がキューイングされ（ステップ４１６）、プリフェッチ・マネージャ２２０８は、プリフェッチ操作がキューイングされたことを、プリフェッチ操作の発信元に通知すべきかどうかを判断する（決定ステップ４１７）。プリフェッチ・マネージャ２２０８が、プリフェッチ操作がキューイングされたことを、プリフェッチ操作の発信元に通知すべきであると判断した場合（決定ステップ４１７、ＹＥＳ分岐）、プリフェッチ・マネージャ２２０８は、プリフェッチ操作の送信元に通知し、それにより、プリフェッチ操作がキューイングされたことが示され（ステップ４１８）、プロセスは完了する（ステップ４１９）。プリフェッチ・マネージャ２２０８が、プリフェッチ操作がキューイングされたことを、プリフェッチ操作の発信元に通知すべきではないと判断した場合（決定ステップ４１７、ＮＯ）分岐、プロセスは完了する（ステップ４１９）。
【０２１７】
一実施形態の一態様によると、成功裏の完了又はトランザクション・アボートによって、競合するトランザクションが終了したとき、キューイングされたプリフェッチが実行される。
【０２１８】
プリフェッチ・マネージャ２２０８の少なくとも１つの実施形態において、プリフェッチ要求の廃棄、キューイング、排出等に応答して通知を行うかどうかの判断は、プリフェッチ・マネージャ２２０８の設計時に設定され、プリフェッチ・マネージャ２２０８の論理に組み込まれる。一実施形態において、こうした判断は、１つ又は複数の制御値に対応し、これは、ソフトウェア・書き込み可能制御レジスタ、ファームウェア・書き込み可能制御レジスタなどの種々の方法を用いて構成することができ、制御値は、例えば、読み出し専用ストレージ（ブートＥＰＲＯＭなど）から、又は他の可逆的若しくは不可逆的手段によって、ブート時間に構成される（例えば、電気接続を制御可能に中断するためのヒューズ又は他の手段を用いて、チップ製造時間に電気接続を切断することによって。そうした接続の有無は選択を示す）。
【０２１９】
図１１は、コンピュータ・システム１１０１を含むシステムの一例であるコンピュータ・システム８００を示す。プロセッサ８０４及びキャッシュ８１６は、実質的に、プロセッサＡ  １１０２、キャッシュ・システムＡ  １１０３、プロセッサＢ  １１０６及びキャッシュ・システムＢ  １１０７に相当する。コンピュータ・システム８００は、コンピュータ・プロセッサ８０４、メモリ８０６、永続ストレージ８０８、通信ユニット８１０、及び入力／出力（Ｉ／Ｏ）インターフェース８１２の間の通信を提供する通信ファブリック８０２を含む。通信ファブリック８０２は、プロセッサ（マイクロプロセッサ、通信及びネットワーク・プロセッサなど）、システム・メモリ、周辺機器、及びシステム内の他のいずれかのハードウェア・コンポーネントの間で、データ及び／又は制御情報を送るように設計されたいずれかのアーキテクチャを有するように実装することができる。例えば、通信ファブリック８０２は、１つ又は複数のバスを有するように実装することができる。
【０２２０】
メモリ８０６及び永続ストレージ８０８は、コンピュータ可読ストレージ媒体である。この実施形態において、メモリ８０６は、ランダム・アクセス・メモリ（ＲＡＭ）を含む。一般に、メモリ８０６は、任意の適切な揮発性又は不揮発性コンピュータ可読ストレージ媒体を含むことができる。キャッシュ８１６は、メモリ８０６からの最近アクセスしたデータ及びアクセスしたデータに近いデータを保持することにより、プロセッサ８０４の性能を高める高速メモリである。
【０２２１】
本発明の実施形態を実施するのに用いられるプログラム命令及びデータは、キャッシュ８１６及びメモリ８０６の１つ又は複数のメモリを介して、それぞれのプロセッサ８０４の１つ又は複数により実行するために永続ストレージ８０８に格納することができる。１つの実施形態において、永続ストレージ８０８は、磁気ハードディスク・ドライブを含む。磁気ハードディスク・ドライブの代替として又はこれに加えて、永続ストレージ８０８は、ソリッドステート・ハードドライブ、半導体ストレージ・デバイス、読み出し専用メモリ（ＲＯＭ）、消去可能なプログラム可能読み出し専用メモリ（ＥＰＲＯＭ）、フラッシュメモリ、又はプログラム命令又はデジタル情報を格納することができる他のいずれかのコンポーネント可読ストレージ媒体を含むことができる。
【０２２２】
永続ストレージ８０８により使用される媒体は、取り外し可能であってもよい。例えば、永続ストレージ８０８に対して、取り外し可能ハードドライブを使用することができる。他の例として、光及び磁気ディスク、サムドライブ、及び同じく永続ストレージ８０８の部分である別のコンピュータ可読ストレージ媒体への転送のためにドライブに挿入されるスマートカードが挙げられる。
【０２２３】
通信ユニット８１０は、これらの例において、他のデータ処理システム又はデバイスとの通信を提供する。これらの例において、通信ユニット８１０は、１つ又は複数のネットワーク・インターフェース・カードを含む。通信ユニット８１０は、物理及び無線通信リンクのいずれか又は両方を用いて通信を提供することができる。本発明の実施形態を実施するために使用されるプログラム命令及びデータを、通信ユニット８１０を通じて永続ストレージ８０８にダウンロードすることができる。
【０２２４】
Ｉ／Ｏインターフェース８１２は、各コンピュータ・システムに接続することができる他のデバイスとのデータの入出力を可能にする。例えば、Ｉ／Ｏインターフェース８１２は、キーボード、キーパッド、タッチスクリーン、及び／又は他の何らかの適切な入力デバイスのような外部デバイス８１８への接続を提供することができる。外部デバイス８１８はまた、例えば、サムドライブ、携帯用光又は磁気ディスク、及びメモリカードのような携帯用コンピュータ可読ストレージ媒体を含むこともできる。本発明の実施形態を実施するために用いられるソフトウェア及びデータは、そうした携帯用コンピュータ可読ストレージ媒体上に格納することができ、Ｉ／Ｏインターフェース８１２を介して永続ストレージ８０８にロードすることができる。Ｉ／Ｏインターフェース８１２はまた、ディスプレイ８２０にも接続される。
【０２２５】
ディスプレイ８２０は、データをユーザに表示するための機構を提供し、例えば、コンピュータ・モニタにすることができる。
【０２２６】
本明細書で説明されるプログラムは、本発明の特定の実施形態において実施されるアプリケーションに基づいて特定される。しかしながら、本明細書でのいずれの特定のプログラムの命名も、便宜上用いられるにすぎず、従って、本発明は、そうした命令により特定及び／又は暗示されるいずれかの特定のアプリケーションのみに限定されるものではないことを認識されたい。
【０２２７】
本発明は、システム、方法、及び／又はコンピュータ・プログラム製品とすることができる。コンピュータ・プログラム製品は、プロセッサに、本発明の態様を実行させるための、コンピュータ可読プログラム命令をそこに有するコンピュータ可読ストレージ媒体（単数又は複数）を含むことができる。
【０２２８】
コンピュータ可読ストレージ媒体は、命令実行デバイスにより使用される命令を保持し、格納することができる有形デバイスとすることができる。コンピュータ可読ストレージ媒体は、例えば、これらに限定されるものではないが、電子記憶装置、磁気記憶装置、光記憶装置、電磁気記憶装置、半導体記憶装置、又は上記のいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例の非網羅的なリストとして、以下のもの：即ち、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能なプログラム可能読み出し専用メモリ（ＥＰＲＯＭ又はフラッシュメモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル、コンパクト・ディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、フロッピー・ディスク、パンチカード若しくはそこに命令が記録された溝内の隆起構造などの機械的符号化デバイス、及び上記のいずれかの適切な組み合わせが挙げられる。本明細書で使用される場合、コンピュータ可読ストレージ媒体は、電波又は他の自由に伝搬する電磁波、導波路若しくは他の伝送媒体を通じて伝搬する電磁波（例えば、光ファイバ・ケーブルを通る光パルス）、又は配線を通じて伝送される電気信号のような、一時的信号それ自体として解釈されるべきではない。
【０２２９】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピュータピューティング／処理デバイスに、又は、例えばインターネット、ローカル・エリア・ネットワーク、広域ネットワーク、及び／又は無線ネットワークなどのネットワークを介して外部コンピュータ若しくは外部ストレージ・デバイスにダウンロードすることができる。ネットワークは、銅製伝送ケーブル、光伝送ケーブル、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、及び／又はエッジ・サーバを含むことができる。各コンピューティング／処理デバイス内のネットワーク・アダプタ・カード又はネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受け取り、それぞれのコンピューティング／処理デバイス内のコンピュータ可読ストレージ媒体内に格納するためにコンピュータ可読プログラム命令を転送する。
【０２３０】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ）命令、マシン命令、マシン依存命令、ミリコード、ファームウェア命令、状態設定データ、又はＳｍａｌｌｔａｌｋ、Ｃ＋＋等などのオブジェクト指向型プログラミング言語、及び、「Ｃ」プログラミング言語、若しくは同様のプログラミング言語のような従来の手続き型プログラミング言語を含む１つ又は複数のプログラミング言語のいずれかの組み合わせで書かれたソース・コード若しくはオブジェクト・コードのいずれかとすることができる。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で実行される場合もあり、スタンドアロンのソフトウェア・パッケージとして、一部がユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。最後のシナリオにおいては、遠隔コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）若しくは広域ネットワーク（ＷＡＮ）を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある（例えば、インターネット・サービス・プロバイダを用いたインターネットを通じて）。幾つかの実施形態において、例えば、プログラム可能論理回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、又はプログラム可能論理アレイ（ＰＬＡ）を含む電子回路は、本発明の態様を実施するために、コンピュータ可読プログラム命令の状態情報を用いて電子回路を個人化することにより、コンピュータ可読プログラム命令を実行することができる。
【０２３１】
本発明の態様は、本発明の実施形態による方法、装置（システム）及びコンピュータ・プログラム製品のフローチャート図及び／又はブロック図を参照して、本明細書で説明される。フローチャート図及び／又はブロック図の各ブロック、並びにフローチャート図及び／又はブロック図内のブロックの組み合わせは、コンピュータ可読プログラム命令によって実装できることが理解されるであろう。
【０２３２】
これらのコンピュータ可読プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実装するための手段を作り出すようにすることができる。これらのコンピュータ可読プログラム命令を、コンピュータ、プログラム可能データ処理装置、及び／又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、内部に命令が格納されたコンピュータ可読ストレージ媒体が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実装する命令を含む製品を製造するようにすることもできる。
【０２３３】
コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実施のプロセスを生成し、それにより、コンピュータ又は他のプログラム可能装置、又は他のデバイス上で実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実行するためのプロセスを提供するようにもできる。
【０２３４】
図面内のフローチャート及びブロック図は、本発明の種々の実施形態によるシステム、方法及びコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能及び動作を示す。この点に関して、フローチャート又はブロック図内の各ブロックは、指定された論理機能を実装するための１つ又は複数の実行可能命令を含むモジュール、セグメント、又は命令の部分を表すことができる。幾つかの代替的な実装において、ブロック内に記載された機能は、図面内に記載された順序とは異なる順序で行われ得ることもある。例えば、連続して示された２つのブロックが、関与する機能に応じて、実際には、実質的に同時に実行されることもあり、又は、ときにはブロックが逆順に実行されることもある。また、ブロック図及び／又はフローチャート図の各ブロック、並びにブロック図及び／又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を行う専用ハードウェア・ベースのシステムによって、又は専用ハードウェアとコンピュータ命令との組み合わせによって実装できることにも留意されたい。
【０２３５】
本発明の種々の実施形態の説明は、例証のために提示されたものであり、網羅的であること又は開示された実施形態に限定することを意図したものではない。本発明の範囲及び趣旨から逸脱しない多くの修正及び変形が、当業者には明らかとなるであろう。本明細書で使用される用語は、実施形態の原理、実際的用途、及び市場に見出される技術に優る技術的改善点を最も良く説明するため、そして、当業者が本明細書に開示される実施形態を理解できるように、選択された。
【０２３６】
本明細書で用いられる用語は、特定の実施形態のみを説明するためのものであり、本発明を限定することを意図したものではない。本明細書で用いられる場合、単数形「１つの（a）」、「１つの（an）」及び「その（the）」は、文脈が明らかにそうでないことを示さない限り、複数形も同様に含むことを意図したものである。
【０２３７】
それぞれの図は、種々の段階における本発明の方法及び機能を示すことに加えて、１つ又は複数のデバイス及び構造体によって、全体的に又は部分的に実施されるような方法の論理も示す。こうしたデバイス及び構造体は、１つ又は複数の非一時的ストア及び１つ又は複数のスレッド特有のトランザクション・ストアを、ストア・キャッシュのストア・バッファ内の１つ又は複数のキャッシュライン・テンプレートに併合する方法を実装する（すなわち、プロセスの実行を可能にするように接続される、抵抗器、キャパシタ、トランジスタ等の１つ又は複数のコンポーネントを含むように）構成される。言い換えれば、図及びその対応する説明を参照して本明細書に説明される方法及びプロセスを実施するように構成された、１つ又は複数のコンピュータ・ハードウェア・デバイスを生成することができる。
【０２３８】
本発明の種々の実施形態の説明は、例証のために提示されたものであり、網羅的であること又は開示された実施形態に限定することを意図したものではない。本発明の範囲及び趣旨から逸脱しない多くの修正及び変形が、当業者には明らかとなるであろう。本明細書で使用される用語は、実施形態の原理、実際的用途、及び市場に見出される技術に優る技術的改善点を最も良く説明するために、そして、当業者が本明細書に開示される実施形態を理解できるように、選択され、説明された。
【０２３９】
本発明の実施形態は、これらに限定されるものではないが、高度なセンサ、メモリ／データ・ストレージ、半導体、マイクロプロセッサ及び他のアプリケーションを含む、種々の電子技術応用に用いることができる。
【０２４０】
集積回路（ＩＣ）チップなどの結果として得られるデバイス及び構造体は、製造者によって、生ウェハの形態（つまり、複数のパッケージ化されていないチップを有する単一のウェハ）、裸のダイ、又はパッケージ化された形態で配布することができる。後者の場合、チップは、単一のチップ・パッケージ（マザーボード又は他の高レベル・キャリアに取り付けられたリード線を有するプラスチック・キャリアなど）、又は、マルチチップ・パッケージ（表面相互接続又は埋込み相互接続のいずれか又は両方を有するセラミック・キャリアなど）内に取付けられる。いずれの場合にも、チップは次に、（ａ）マザーボードなどの中間製品又は（ｂ）最終製品の一部分として、他のチップ、別個の回路素子、及び／又は他の信号処理デバイスと集積化される。最終製品は、玩具又は他の低価格用途から、ディスプレイ、キーボード又は他の入力デバイス、及び中央処理装置を有する高性能のコンピュータ製品にまでわたる、集積回路チップを含む任意の製品とすることができる。
【０２４１】
以下の特許請求の範囲における全ての「手段又はステップと機能との組み合わせ（ミーンズ又はステップ・プラス・ファンクション）」要素の対応する構造、材料、動作、及び均等物は、その機能を、明確に特許請求される他の特許請求された要素との組み合わせで実行するためのあらゆる構造、材料、又は動作を含むことが意図されている。本発明の説明は、例証及び説明を目的として提示されたものであり、網羅的であること又は本発明を開示された形態に限定することを意図したものではない。本発明の範囲及び趣旨から逸脱しない多くの修正及び変形が当業者には明らかとなるであろう。実施形態は、本発明の原理及び実際的用途を最も良く説明するために、そして、当業者が、企図した特定の用途に適した種々の修正を伴う種々の実施形態に関して本発明を理解できるように、選択され、説明された。
【０２４２】
本発明が、限られた数の実施形態のみに関連して詳細に説明されたが、本発明は、こうした開示される実施形態に限定されないことを容易に理解すべきである。むしろ、本発明は、これまで説明されていないが、本発明の趣旨及び範囲に相応するいずれの数の変形、代替、置換、又は均等な構成を組み込むように修正することもできる。さらに、本発明の種々の実施形態が説明されているが、本発明の態様は、説明される実施形態の一部のみに含まれ得ることを理解されたい。従って、本発明は、上記の説明により限定されるとみなすべきではない。単数形での要素への言及は、他に具体的な定めがない限り、「唯一（one and only one）を意味することを意図するものではなく、「１つ又は複数」を意味することを意図している。当業者に既知の又は後で知られる、本開示の全体を通して説明される種々の実施形態の要素の全ての構造的及び機能的等価物は、参照により本明細書に明白に組み込まれ、本発明に含まれることが意図される。従って、開示される特定の実施形態において、添付の特許請求により概説されるような本発明の範囲内にある変更をなし得ることを理解されたい。
【符号の説明】
【０２４３】
１００：ダイ
１１２：トランザクションＣＰＵ環境
２８０：ロード命令デコード・ユニット（ＩＤＵ）
２１２：ネスト化深さ（ＴＮＤ）
１１０１：コンピュータ・システム
１１０２：プロセッサＡ
１１０３：キャッシュ・システムＡ
１１０４：トランザクション・メモリ・システムＡ
１１０５：キャッシュＡ
１１０６：プロセッサＢ
１１０７：キャッシュ・システムＢ
１１０９：キャッシュＢ
１１１１：システム・バス
２２０１：読み取りアドレス・バス
２２０２：書き込みアドレス・バス
２２０３：プリフェッチ読み取りアドレス・バス
２２０４：プリフェッチ書き込みアドレス・バス
２２０５：書き込みセット
２２０６：読み取りセット
２２０７：アボート・マネージャ
２２０８：プリフェッチ・マネージャ
２２０９：プリフェッチ操作バス
２２１０：非プリフェッチ操作バス
２２１１、２２１２：アドレス・デコード
２２１３：プリフェッチ・キュー
２２１４：キュー・マネージャ
２２１６：ローカル・遠隔プリフェッチ
３３１１：読み取り要求
３３１２：読み取り応答
４４１６：プリフェッチ要求
４４１７：プリフェッチ応答
４４１８：プリフェッチ拒否応答
４４１９：プリフェッチ据え置き応答
５５０１：パックされたプリフェッチ要求
５５０２：パックされたプリフェッチ応答
５５０３：パックされたプリフェッチ拒否応答
５５０４：パックされたプリフェッチ据え置き応答
【図１】
0006734760.tif 000006
【図２】
0006734760.tif 000007
【図３】
0006734760.tif 000008
【図４】
0006734760.tif 000009
【図５】
0006734760.tif 000010
【図６】
0006734760.tif 000011
【図７】
0006734760.tif 000012
【図８】
0006734760.tif 000013
【図９】
0006734760.tif 000014
【図１０】
0006734760.tif 000015
【図１１】
0006734760.tif 000016