(57)【特許請求の範囲】
【請求項１】
データ項目と関連付けられたメモリアドレスを参照するトランザクション的メモリアクセスオペレーションを実行する実行ロジックと、
処理ロジックと接続され、前記トランザクション的メモリアクセスオペレーションを実行する前記実行ロジックに応答して、前記データ項目を保持するメモリと、
前記メモリと関連付けられ、前記実行ロジックが前記トランザクション的メモリアクセスオペレーションを実行するのに応答して、前記メモリの粒度に関わりなく、前記データ項目の制限付きアクセス監視を実行するハードウェア監視部と
を備え、
前記メモリはデータキャッシュを含み、
前記データキャッシュの複数のキャッシュラインのうち、２以上のキャッシュラインが、前記複数のキャッシュラインの境界で整列されていない前記データ項目を保持し、
前記ハードウェア監視部は、前記データ項目のサイズに基づいて、前記メモリと動的に関連付けられる
装置。
【請求項２】
前記実行ロジックがユーザーレベル命令を実行するのに応答して、前記ハードウェア監視部が読み出し可能及び変更可能である請求項１に記載の装置。
【請求項３】
前記データキャッシュと関連付けられたハードウェア監視部は、前記データキャッシュの複数のキャッシュラインに対応する複数の読み出し監視部及び複数の書き込み監視部を含む請求項１に記載の装置。
【請求項４】
前記トランザクション的メモリアクセスオペレーションは、トランザクション的ロードを含み、
前記データキャッシュと関連付けられ、前記実行ロジックが前記トランザクション的ロードを実行するのに応答して、前記メモリの粒度に関わりなく前記データ項目の制限付きアクセス監視を実行する前記ハードウェア監視部は、前記データ項目の少なくとも一部を保持する前記複数のキャッシュラインのうち前記２以上のキャッシュラインに対応する数の前記複数の読み出し監視部を含み、
前記実行ロジックが前記トランザクション的ロードを実行するのに応答して、前記複数の読み出し監視部は、監視読み出し状態に更新される請求項３に記載の装置。
【請求項５】
前記トランザクション的メモリアクセスオペレーションは、トランザクション的ストアを含み、
前記データキャッシュと関連付けられ、前記実行ロジックが前記トランザクション的ストアを実行するのに応答して、前記メモリの粒度に関わりなく前記データ項目の制限付きアクセス監視を実行する前記ハードウェア監視部は、前記データ項目の少なくとも一部を保持する前記複数のキャッシュラインのうち前記２以上のキャッシュラインに対応する数の前記複数の書き込み監視部を含み、
前記実行ロジックがトランザクション的書き込みを実行するのに応答して、前記複数の書き込み監視部は、監視書き込み状態に更新される請求項４に記載の装置。
【請求項６】
前記２以上のキャッシュラインのうちの１つのキャッシュラインに対応する前記複数の読み出し監視部のうちの１つの読み出し監視部が、前記監視読み出し状態に更新され、制御ロジックが、前記１つのキャッシュラインに対する外部からの書き込み要求を検出する場合に、前記制御ロジックは、トランザクション的競合を検出する請求項５に記載の装置。
【請求項７】
前記２以上のキャッシュラインのうちの１つのキャッシュラインに対応する前記複数の書き込み監視部のうちの１つの書き込み監視部が、前記監視書き込み状態に更新され、制御ロジックが、前記１つのキャッシュラインに対する外部からの読み出し要求を検出する場合に、前記制御ロジックは、トランザクション的競合を検出する請求項５または６に記載の装置。
【請求項８】
前記実行ロジックがユーザーレベル消去オペレーションを実行するのに応答して、前記複数の読み出し監視部及び前記複数の書き込み監視部が、非監視状態にリセットされる請求項５から７のいずれか一項に記載の装置。
【請求項９】
前記データ項目のサイズに基づいて前記メモリと動的に関連付けられる前記ハードウェア監視部は、
前記メモリの複数のラインに対して、読み出し監視部及び書き込み監視部のプールから、１つの読み出し監視部及び１つの書き込み監視部を動的に割り当てるロジックを含み、
前記データ項目の前記サイズが、前記メモリの１ラインよりも大きいこと、及び前記実行ロジックが前記トランザクション的メモリアクセスオペレーションを実行することに応答して、前記メモリは、前記データ項目の少なくとも一部を保持する請求項１から８のいずれか一項に記載の装置。
【請求項１０】
前記メモリと関連付けられ、前記実行ロジックが前記トランザクション的メモリアクセスオペレーションを実行するのに応答して、前記メモリの粒度に関わりなく前記データ項目の制限付きアクセス監視を実行する前記ハードウェア監視部は、
前記実行ロジックがトランザクション的ロードオペレーションを実行するのに応答して、読み出し監視状態に設定される前記複数のラインに割り当てられる前記読み出し監視部と、
前記実行ロジックがトランザクション的ストアオペレーションを実行するのに応答して、書き込み監視状態に設定される前記複数のラインに割り当てられる前記書き込み監視部とを含む請求項９に記載の装置。
【請求項１１】
データ項目を参照するメモリアクセスオペレーションを監視すべきかを決定する段階と、
キャッシュの２以上のラインに、複数のキャッシュラインの境界で整列されていない前記データ項目をキャッシュする段階と、
前記メモリアクセスオペレーションを監視すべきかの決定に応答して、前記データ項目を制限するべく前記キャッシュと関連付けられるハードウェア属性を決定する段階と、
前記メモリアクセスオペレーションの種類と関連付けられたアクセス状態を表すように、前記ハードウェア属性を更新する段階とを備え、
前記データ項目を制限するべく前記キャッシュと関連付けられるハードウェア属性を決定する段階は、前記データ項目と関連付けられて前記キャッシュの粒度に関わりなく前記データ項目の制限付きアクセス監視を実行するための前記ハードウェア属性を動的に割り当てる
方法。
【請求項１２】
前記データ項目を参照するメモリアクセスオペレーションを監視すべきかを決定する段階は、前記メモリアクセスオペレーションを実行するプロセッサの動作モードに基づいて行われる請求項１１に記載の方法。
【請求項１３】
前記データ項目を参照するメモリアクセスオペレーションを監視すべきかを決定する段階は、オペレーションが監視される時の前記メモリアクセスオペレーションのユーザーレベルソフトウェアによる特定に基づいて行われる請求項１１に記載の方法。
【請求項１４】
前記データ項目を制限するべく前記キャッシュと関連付けられるハードウェア属性を決定する段階は、前記２以上のラインと関連付けられるコヒーレンシ状態エントリ内に、ハードウェア属性ビットを決定することを含み、
前記メモリアクセスオペレーションの種類と関連付けられたアクセス状態を表すように前記ハードウェア属性を更新する段階は、前記２以上のラインと関連付けられるコヒーレンシ状態エントリ内の前記ハードウェア属性ビットを更新して、前記メモリアクセスオペレーションの前記種類と関連付けられる監視コヒーレンシ状態を表す請求項１１から１３のいずれか一項に記載の方法。
【請求項１５】
前記メモリアクセスオペレーションの前記種類と関連付けられる前記アクセス状態は、
前記メモリアクセスオペレーションの前記種類が、読み出しタイプを含むことに対応した、監視読み出し状態と、
前記メモリアクセスオペレーションの前記種類が、書き込みタイプを含むことに対応した、監視書き込み状態とを有する請求項１１から１４のいずれか一項に記載の方法。
【請求項１６】
前記メモリアクセスオペレーションに続いて外部からのアクセス要求があることに応答して、前記外部からのアクセスの種類、及び前記メモリアクセスオペレーションの種類と関連付けられる前記アクセス状態に基づいて、競合を検出する段階と、
前記競合が検出されたことに応答して、プロセッサ内の状態レジスタを使用して、前記競合をソフトウェアに報告する段階と、
前記プロセッサ内の状態レジスタを使用して前記競合がソフトウェアに報告されたことに応答して、前記競合を扱うソフトウェアハンドラを実行させる段階とを更に備える請求項１１から１５のいずれか一項に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサの実行に関し、特に、命令グループの実行に関する。
【０００２】
［関連出願］
本願は、以下に示す特許出願に関連する。２００８年１２月３０日出願、代理人整理番号Ｐ２９１３２、米国出願番号１２／３４６，５４３号明細書、発明者Gad Sheaffer他"Extending Cache Coherency Protocols to Support Locally Buffered Data（ローカルにバッファされたデータをサポートするための、拡張キャッシュコヒーレンシプロトコル）"、２００８年１２月３０日出願、代理人整理番号Ｐ２９１３１、米国出願番号１２／３４６，５３９号明細書、発明者Gad Sheaffer他"Memory Model for Hardware Attributes Within a Transactional Memory System（トランザクションナルメモリシステム内における、ハードウェア属性のためのメモリモデル）"、２００８年１２月３０日出願、代理人整理番号Ｐ２９１２９、米国出願番号１２／３４６，５１８号明細書、発明者Gad Sheaffer他"Registering a User-Handler in Hardware for Transactional Memory Event Handling（トランザクションナルメモリイベント取り扱いのための、ユーザーハンドラのハードウェアへの登録）"、２００８年１２月３０日出願、代理人整理番号Ｐ２９１２８、米国出願番号１２／３４６，５００号明細書、発明者Gad Sheaffer他"Metaphysical Address Space for Holding Lossy Meta-data in Hardware（ロッシーなメタデータをハードウェアに保持するためのメタフィジカルアドレス空間）"。
【背景技術】
【０００３】
半導体プロセス及びロジック設計の技術の発展に伴い、より多くの数のロジックを集積回路（ＩＣ）デバイスに組み込むことができるようになってきた。その結果、コンピュータシステム構成は、１つのシステムに１つのＩＣ又は複数のＩＣが設けられていた構成から、複数のコア及び複数の論理プロセッサが個々のＩＣに搭載される構成へと進化を遂げた。典型的なプロセッサ又はＩＣは、１つのプロセッサダイを含み、プロセッサダイは、１つ以上のコア又は論理プロセッサを含む。
【０００４】
コア及び論理プロセッサが数多くＩＣに設けられるようになり、より多くのソフトウェアスレッドを並行に処理できるようになった。しかしながら、同時に実行されるソフトウェアスレッドの数が増加すると、複数のソフトウェアスレッド間で共有されるデータの同期の問題が発生する。複数のコア又は複数の論理プロセッサシステムにおいて、共有データにアクセスするためのよく知られた解決策としては、共有データに対する複数のアクセスに対して、相互排除（排他制御）を保証するロックの使用がある。しかしながら、複数のソフトウェアスレッドを実行する能力が高まり、偽り競合及び実行の直列化につながる可能性が高くなっている。
【０００５】
例えば、共有データを保持するハッシュテーブルを考えてみる。ロックシステムの場合、プログラマーは、ハッシュテーブル全体をロックし、１つのスレッドが全ハッシュテーブルにアクセスできるようにする。しかしながらこの構成では、他のスレッドは、ロックが解除されるまでハッシュテーブルのいかなるエントリにもアクセスできなくなることから、他のスレッドのスループット及び性能には、悪影響となる可能性がある。別の構成として、ハッシュテーブルのエントリそれぞれをロックすることが考えられる。しかしながら、この単純な例から、大きな規模のプログラムの場合について推定すると、ロック競合、直列化、細分化された同期化及びデッドロック回避の複雑性は、プログロマにとって非常に煩雑な仕事となる。
【０００６】
最近のデータ同期技術の別の例として、トランザクショナルメモリ（ＴＭ）の使用が含まれる。トランザクションの実行は、複数のマイクロオペレーション、処理又は命令のグループを実行することを含む。上記の例では、２つのスレッドが共にハッシュテーブル内で実行され、これらのメモリアクセスが、監視／追跡される。２つのスレッドが共に、同じエントリにアクセス又は同じエントリを変更する場合には、データの有効性を確保するために、競合解消が行われる。ある種のトランザクション実行は、ソフトウェア・トランザクショナル・メモリ（ＳＴＭ）を含み、この場合、メモリアクセス、競合解消、停止（ａｂｏｒｔ）タスク、及びその他のトランザクションタスクが、多くの場合、ハードウェアのサポート無しで、ソフトウェアで実行される。
【０００７】
強固に不可分なソフトウェア・トランザクショナル・メモリ（ＳＴＭ）では、トランザクション的メモリオペレーションと非トランザクション的メモリオペレーションとの間の実行時間の衝突が発生しないようにするため、コンパイラは、各非トランザクション的メモリオペレーションを、１つのオペレーショントランザクションとして扱う。すなわち、トランザクション的障壁が、トランザクション的メモリアクセスと非トランザクション的メモリアクセスとの間に挿入され、トランザクションを互いに分離し、また非トランザクション的メモリアクセスを分離している。しかしながら、トランザクション的及び非トランザクション的メモリアクセスのそれぞれにおいて、トランザクション的障壁を実行するのは、高価及び複雑になる可能性がある。
【０００８】
別の種類のトランザクション実行は、ハードウェア・トランザクショナル・メモリ（ＨＴＭ）を含み、この場合、アクセス追跡、競合解消及びその他のトランザクションタスクをサポートするのにハードウェアが含まれる。しかしながら、これまでのところ、トランザクション実行をサポートすることを試みたハードウェアは、例えば、あらゆるデータ粒度レベルにおけるアクセス追跡及び競合検出といったソフトウェアトランザクションの有益な点を取り込めていない。
【０００９】
本発明は、以下、例示のために記載されており、添付の図面によって限定されることを意図していない。
【図面の簡単な説明】
【００１０】
【図１】複数のソフトウェアスレッドを並行に実行可能な複数の処理要素を含むプロセッサの一実施形態を示した図である。
【図２】トランザクション的実行をサポートするプロセッサにおける構造の一実施形態を示した図である。
【図３】メモリアクセス監視のための選択的関連付けモード、又はメモリアクセス監視のための非選択的関連付けモードで動作する方法を示したフローチャートの一実施形態を示した図である。
【図４】更なる監視されたキャッシュコヒーレンシ状態を含むキャッシュコヒーレンシ状態に対する状態遷移図の別の実施形態を示した図である。
【図５】メモリアクセスを監視する方法のフローチャートの一実施形態を示した図である。
【発明を実施するための形態】
【００１１】
以下、トランザクション実行のための特定のハードウェア構成例、アクセス監視の特定の種類及び実装、特定のキャッシュ実装、特定の種類のキャッシュコヒーレンシモデル、特定のデータ粒度、特定の種類のメモリアクセス及びロケーション等の様々な特定の詳細事項が記載されるが、これらは、本発明の深い理解を提供するためのものである。しかしながら、これらの特定の詳細事項を採用しなくとも、本発明を実行可能であることは、当業者にとって明らかである。また、ソフトウェアにおけるトランザクションのコーディング、トランザクションの境界設定、特定の及び代替のマルチコア及びマルチスレッドプロセッサ構成、特定のコンパイラ方法／実装、及びマイクロプロセッサの特定のオペレーション詳細等の、よく知られている要素又は方法については、本発明を不明瞭にすることを防ぐため、記載を省略する。
【００１２】
本明細書に記載する方法及び装置は、トランザクション実行をサポートするメモリアクセス監視を提供することに関する。具体的には、メモリアクセス監視の提供について、主に、メモリアドレスへのアクセスを追跡するキャッシュメモリ構造と関連付けられた監視を参照して説明する。図２及び図４に示されるキャッシュメモリと関連付けられた監視を特に参照して説明する。しかしながら、メモリアクセス監視を提供する方法及び装置は、これらに限定されず、データ要素へのメモリアクセスを追跡するあらゆる構造と関連して実装されてもよい。
【００１３】
図１には、複数のスレッドを並列して実行可能なプロセッサの一実施形態が示されている。プロセッサ１００は、ハードウェアトランザクション実行のためのハードウェアサポートを含んでもよい。ハードウェアトランザクション実行と関連して、又は別に、プロセッサ１００は、ソフトウェア・トランザクショナル・メモリ（ＳＴＭ）のハードウェア加速、ＳＴＭの個別実行、又はこれらの組み合わせに対するハードウェアサポートを提供してもよく、例えば、ハイブリッド・トランザクショナル・メモリ（ＴＭ）システムを提供してもよい。プロセッサ１００としては、マイクロプロセッサ、埋め込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、ネットワークプロセッサ、又はコードを実行する他のデバイスのようなあらゆるプロセッサが含まれる。図に示すように、プロセッサ１００は、複数の処理要素を含む。
【００１４】
ある実施形態では、処理要素とは、スレッドユニット、プロセスユニット、コンテキスト、論理プロセッサ、ハードウェアスレッド、コア、及び／若しくは実行状態又はアーキテクチャ状態のようなプロセッサの状態を保持可能な他の要素のことを指す。すなわち、ある実施形態では、処理要素は、ソフトウェアスレッドのようなコード、ＯＳ、アプリケーション又はその他のコードに独立して関連付けることが可能なあらゆるハードウェアを指す。物理的プロセッサとは、典型的には、コア又はハードウェアスレッド等の他の処理要素を１以上含む集積回路（ＩＣ）のことを指す。
【００１５】
コアとは、多くの場合、少なくとも幾つかの専用実行リソースと関連付けられたアーキテクチャの状態がそれぞれ独立して保持される独立アーキテクチャ状態を保持可能なＩＣに位置する論理を指す。一方コアに対して、ハードウェアスレッドとは、典型的には、独立して保持されている複数のアーキテクチャ状態が実行リソースへのアクセスを共有する独立アーキテクチャ状態を保持可能なＩＣに位置する論理を指す。このように、あるリソースは共有され、他のリソースは１つのアーキテクチャ状態に占有されている場合には、ハードウェアスレッド及びコアという命名の境界線が重複することとなる。しかしながら、やはりコアとハードウェアとは、ＯＳから見れば個別の論理プロセッサであり、ＯＳは、各論理プロセッサに対して独立してオペレーションをスケジュールすることができる。
【００１６】
図１に示すように、物理プロセッサ１００は、高レベルキャッシュ１１０へのアクセスを共有する２つのコア、すなわち、コア１０１及びコア１０２を含む。プロセッサ１００は、非対称なコア、すなわち、異なる構成、機能ユニット及び／又はロジックを持ったコアを含んでもよいし、例示したような対称なコアを含んでもよい。コア１０２は、コア１０１と同様な構成を持つため、説明の重複を避け、以下にはその構成を詳細に記載しない。コア１０１は、２つのハードウェアスレッド１０１ａ及び１０１ｂを含み、コア１０２は、２つのハードウェアスレッド１０２ａ及び１０２ｂを含む。したがって、ＯＳのようなソフトウェア実体は、プロセッサ１００を４つの別個のプロセッサとして見なすこともでき、すなわち、４つのソフトウェアスレッドを並列に実行可能な４つのプロセッサ又は処理要素として見なすことができる。
【００１７】
第１のスレッドは、複数のアーキテクチャ状態レジスタ１０１ａと関連付けられており、第２のスレッドは、複数のアーキテクチャ状態レジスタ１０１ｂと関連付けられており、第３のスレッドは、複数のアーキテクチャ状態レジスタ１０２ａと関連付けられており、第４のスレッドは、複数のアーキテクチャ状態レジスタ１０２ｂと関連付けられている。図に示すように、複数のアーキテクチャ状態レジスタ１０１ａは、複数のアーキテクチャ状態１０１ｂに複製されており、個々のアーキテクチャ状態／コンテキストは、論理プロセッサ１０１ａ及び論理プロセッサ１０１ｂに格納可能である。命令ポインタ及びリネーム割り当てロジック１３０におけるリネーム論理のようなその他の小さなリソースも、スレッド１０１ａ及びスレッド１０１ｂに対して複製されていてもよい。並べ替え（ｒｅ‐ｏｒｄｅｒ）／リタイアメントユニット１３５における並び換えバッファ、ＩＬＴＢ１２０、ロード／ストアバッファ及びキューのようなリソースは、領域割り当てを通じて共有されていてもよい。汎用内部レジスタ、ページ‐テーブルベースレジスタ、下位層データキャッシュ及びデータ‐ＴＬＢ１１５、１以上の実行ユニット１４０、及びアウト・オブ・オーダーユニット１３５の部分のような他のリソースについては、完全に共有されていてもよい。
【００１８】
プロセッサ１００は、多くの場合、完全に共有されている、領域割り当てを通じて共有されている、若しくは処理要素について占有の又は占有されている複数の他のリソースを含む。図１には、１つのプロセッサの例示的な複数の機能ユニット／リソースを持つプロセッサの純粋な例が示されている。プロセッサは、例示されている複数の機能ユニットのうち、幾つかを含んでもよいし、又は省略してもよく、図示しない他の既知の機能ユニット、論理又はファームウェアを含んでもよい。
【００１９】
図示するように、プロセッサ１００は、プロセッサ１００の外部のデバイス、例えば、システムメモリ１７５、チップセット、ノースブリッジ、又はその他のＩＣとの間で通信を行うためのバスインターフェースモジュール１０５を含む。メモリ１７５は、プロセッサ１００専用としてもよいし、システム内の他のデバイスと共有するとしてもよい。上位層に位置する又はより離れたところに位置するキャッシュ１１０は、上位層キャッシュ１１０から最近フェッチされた要素をキャッシュする。ここで、上位層又はより離れた位置とは、キャッシュレベルがより高い又は実行ユニットからより離れていることを指す。一実施形態では、上位層キャッシュ１１０は、第２レベルデータキャッシュである。上位層キャッシュ１１０はこれに限定されず、命令キャッシュに関連付けられてもよいし、命令キャッシュを含んでもよい。命令キャッシュの一種であるトレースキャッシュを、替わりに、デコーダ１２５の後に連結して、最近デコードされたトレースを記憶してもよい。モジュール１２０は、実行される／選択される分岐先を予測する分岐先バッファ（Ｂｒａｎｃｈ  Ｔａｒｇｅｔ  Ｂｕｆｆｅｒ：ＢＴＢ）及び命令についてのアドレス変換エントリを記憶する命令変換バッファ（Ｉ‐ＴＬＢ）を含む。
【００２０】
デコードモジュール１２５は、フェッチユニット１２０と連結され、フェッチされた要素をデコードする。ある実施形態では、プロセッサ１００は、プロセッサ１００で実行可能な命令を規定／特定する命令セットアーキテクチャ（ＩＳＡ）と関連付けられている。ＩＳＡによって認識される機械コード命令は、一般的に、実行すべき命令又はオペレーションを参照する／特定するオペコード（ｏｐｃｏｄｅ）と呼ばれる命令の一部を含む。
【００２１】
１つの例では、割り当て及びリネームブロック１３０は、命令処理結果を記憶するレジスタファイルのようなリソースをリザーブする割り当て部を含む。スレッド１０１ａ及び１０１ｂは、アウト・オブ・オーダー実行を行う能力を備え、割り当て及びリネームブロック１３０は、命令結果を追跡する記録バッファのように、他のリソースをリザーブする。ユニット１３０は、プログラム／命令参照レジスタを、プロセッサ１００の他の内部レジスタにリネームするレジスタリネーマーを含んでもよい。並べ替え／リタイアメントユニット１３５は、アウト・オブ・オーダー実行及びアウト・オブ・オーダーで実行される順番が最後の方の命令のリタイアメントをサポートするために、上述のような並び換えバッファ、ロードバッファ、及び記憶バッファのような要素を含んでもよい。
【００２２】
ある実施形態では、スケジューラ及び実行ユニットブロック１４０は、実行ユニットに対して命令／オペレーションをスケジューリングするスケジューラユニットを含むとしてよい。例えば、浮動小数点命令は、利用可能な浮動小数点実行ユニットを持つ実行ユニットの一部にスケジュールされる。また、情報命令処理結果を記憶するために、実行ユニットに関連付けられたレジスタファイルが含まれている。実行ユニットの例としては、浮動小数点実行ユニット、整数実行ユニット、ジャンプ実行ユニット、ロード実行ユニット、記憶実行ユニット、及びその他の既知の実行ユニットが挙げられる。
【００２３】
下位層データキャッシュ及びデータ変換バッファ（Ｄ‐ＴＬＢ）１５０は、実行ユニット１４０に接続されている。データキャッシュは、メモリコヒーレンシ状態で保持されているデータオペランドのような最近利用／処理されたものを、要素に記憶する。Ｄ‐ＴＬＢは、最近の仮想／線形アドレスから物理アドレスへの変換を記憶する。特別な例として、プロセッサは、物理メモリを複数の仮想ページに分割するためのページテーブル構造を持つとしてよい。
【００２４】
一実施形態において、プロセッサ１００は、トランザクション的実行（ｔｒａｎｓａｃｔｉｏｎａｌ ｅｘｅｃｕｔｉｏｎ）を行う能力を有する。トランザクション、すなわち、コードのクリティカルな又は不可分な部分は、不可分グループとして実効される命令、オペレーション又はマイクロオペレーションのグループ化を含む。例えば、命令又はオペレーションは、トランザクション又はクリティカル部分の境界を定めるのに使用されてもよい。以下に詳細に記載する一実施形態において、これらの命令は、上述のデコーダのようなプロセッサ１００のハードウェアによって認識可能な、例えば命令セットアーキテクチャ（ＩＳＡ）のような命令セットの一部である。しばしば、高水準（ハイレベル）言語からハードウェアが認識可能なアセンブリ言語へと一旦コンパイルされた命令は、デコード段階においてデコードが認識するオペレーションコード（オペコード）又は命令の別の部分を含む。
【００２５】
一般的には、トランザクションが実行されている間は、メモリへのアップデートは、トランザクションがコミットされるまでは、グローバルに可視化されない。一例として、あるロケーションへのトランザクション的書き込みが、別のスレッドからの読み出しに応答して、ローカルスレッドに対して可視化されたとしても、トランザクション的書き込みを含むトランザクションがコミットされるまでは、書き込みデータは転送されない。トランザクションが処理中である間、メモリ内に書き込まれた又はメモリからロードされたデータ項目／要素が追跡されるが、これについては、以下に詳細に説明する。トランザクションがコミット点に到達し、そのトランザクションについて競合が検出されなかった場合には、トランザクションがコミットされ、トランザクションがグローバルに可視化される間に更新が行われる。
【００２６】
しかしながら、トランザクションが処理中に無効とされた場合には、トランザクションは中止され、更新をグローバルに可視化することなく、リスタートされる可能性がある。したがって、トランザクションの未決の状態という言葉は、本明細書では、実行が始まって、コミットされていない又は中止されていない、すなわち未決の状態であるトランザクションを指す。トランザクション的実行の実装例としては、ハードウェア・トランザクショナル・メモリ（ＨＴＭ）システム、ソフトウェア・トランザクショナル・メモリ（ＳＴＭ）システム、及びこれらの組み合わせ、又はこれらのハイブリッドのシステムが含まれる。
【００２７】
ソフトウェア・トランザクショナル・メモリ（ＳＴＭ）システムは、多くの場合、アクセス追跡、競合解消、ソフトウェアにおける又は少なくとも一部がソフトウェアにおけるトランザクション的メモリタスクの実行を参照する。一実施形態において、プロセッサ１００は、トランザクション的実行をサポートするプログラムコードをコンパイルするコンパイラを実行可能である。ここで、コンパイラは、オペレーション、呼び出し、関数及びトランザクションを実行可能とするその他のコードを挿入してもよい。
【００２８】
コンパイラは、多くの場合、プログラム又はプログラムのセットを含み、ソーステキスト／コードを、目的のテキスト／コードへと変換する。通常、プログラム／アプリケーションコードをコンパイラを使用してコンパイルする場合には、高水準プログラム言語コードを、低水準機械言語コード又はアセンブリ言語へ変換する複数の段階又はパスに分けて実行される。しかしながら、簡単なコンパイルには、単一パスのコンパイラを使用することもできる。コンパイラは、既知のコンパイル技術を利用して、字句解析、前処理、構文解析、意味解析、コード生成、コード変換及びコード最適化のような、既知のコンパイルオペレーションを実行してもよい。
【００２９】
大きなコンパイラは、多くの場合、複数の段階を含み、これらの複数の段階は、主に大きく分けて２つの段階に分けられる。（１）フロントエンド、すなわち、通常では、構文処理、意味処理及び幾つかの変換／最適化が実行される段階、（２）バックエンド、すなわち、通常では、解析、変換、最適化及びコード生成が実行される段階の２つである。コンパイラの中には、ミドルエンドと呼ばれる段階を有し、これは、フロントエンドとバックエンドのコンパイラとの間の境界を曖昧にした例である。挿入、関連付け、生成又はその他のコンパイラのオペレーションは、上述の段階又はパス、及びその他のコンパイラの段階又はパスのいずれかにおいて実行される。一例として、コンパイラは、１以上のコンパイルの段階に、トランザクション的オペレーション、呼び出し、関数等を挿入してもよく、例えば、呼び出し／オペレーションを、コンパイルのフロントエンド段階に挿入し、トランザクショナルメモリ変換段階の間に、呼び出し／オペレーションを低水準コードへと変換してもよい。
【００３０】
実行環境及びコンパイラの動的又は静的性質に関わらず、一実施形態において、コンパイラは、プログラムコードをコンパイルし、トランザクション実行を可能にする。このように、一実施形態において、プログラムコードの実行は、（１）メインプログラムコードをコンパイルして、トランザクション構造を維持する又はオペレーションに関連する他のトランザクションを実行するべく、動的又は静的にコンパイラプログラムを実行すること、（２）トランザクションオペレーション／呼び出しを含むメインプログラムコードを実行すること、（３）ライブラリのようなメインプログラムコードと関連付けられた他のプログラムコードの実行、（４）及びこれらの組み合わせ、を指す。
【００３１】
一実施形態において、プロセッサ１００は、ハードウェア／ロジックを利用した、すなわち、ハードウェア・トランザクショナル・メモリ（ＨＴＭ）システム内で、トランザクションの実行が可能である。ＨＴＭの実装に関しては、アーキテクチャ及びマイクロアーキテクチャの両側面において、数多くの特定の実装形態の詳細が存在するが、ここでは、本発明を不必要に曖昧にしてしまうのを回避するために、これらについて説明しない。一部の構造及び実装形態については、例示を目的として開示されている。これらの構造及び実装形態は、必ずしも必要とされず、異なる実装詳細を有する別の構造に拡張及び／又は置き換えられてもよい。
【００３２】
実装設計の選択肢の例として、ＨＴＭは、インプレース更新方式、又は書き込みバッファリング方式で、動作してもよい。インプレース更新方式のＨＴＭでは、トランザクション的書き込みは、参照メモリアドレスに対して行われ、そこに保持されていたデータが変更される。変更されたデータは、外部の要求スレッドには提供されない、すなわち、データはグローバルに可視化されないが、ローカルのメモリの順位付けの目的によるローカルな読み出しに対しては提供される。また、すでに保持されているデータは、トランザクションが中止されたときに、そのデータを回復させ、トランザクションが開始される前のスレッドの状態を達成するために、多くの場合"ログ（記録）"されている。
【００３３】
例示のため、データキャッシュ１５０が、キャッシュ１１０及びシステムメモリ１７５のような高次のメモリからのデータを保持する一次データキャッシュを含むとする。データキャッシュ１５０へのトランザクション的書き込みが発生すると、一実施形態のライトバック・キャッシュにすでに保持されたデータ項目は、そのデータ項目を、高次のキャッシュ１１０へと書き戻す。あるいは、保持されていたデータが、プロセッサ内に又はプロセッサ１００の外側に設けられた別のメモリにログ（記録）されてもよい。保持されていたデータ項目を記録した後、トランザクション的書き込みが実行されて、キャッシュ１５０内のデータ項目が更新される。ローカルスレッド１０１ａのようなローカルスレッド、すなわち、トランザクション的書き込みと関連付けられたスレッドが、キャッシュ１５０における変更されたデータ項目から読み出しを行ってもよい。しかしながら、スレッド１０２ｂのような別のスレッドでは、トランザクション的書き込みを含むトランザクションがまだコミットされていない場合には、読み出し要求に応答して、変更されたデータではなく、記録されたデータが提供される。トランザクションがコミットされている場合には、記録されたデータは、無効化される又は無視される。トランザクションが中止された場合には、保持されていたデータが、有効なデータとしてリロードされる又はグローバルに特定される。
【００３４】
一方、書き込みバッファリング方式のＨＴＭでは、すでに保持されているデータは、そのロケーションにそのまま残り、トランザクション的書き込みは、書き込みバッファにバッファされる。そして、スレッド１０２ｂのようなローカルスレッドが、トランザクション的に書き込まれたデータの読み出しを実行する場合には、変更されたデータが、書き込みバッファから転送される。当然の結果として、トランザクション的書き込みを含むトランザクションが完了していない状態で、外部のスレッドがデータの読み出しを要求した場合、元のロケーションに保持されているデータが供給される。さらに、トランザクションがコミットされると、変更されたデータが対応するメモリアドレスにコピーされ、一方、中断が発生した場合には、バッファされたデータは無視される。
【００３５】
上記で説明したように、ローカル処理要素及び別の処理要素により、データ項目に対するアクセス及び要求がなされる。安全機構を設けずに、これらのアクセスの一部を実行すると、無効データ及び無効な実行となってしまう場合がある、すなわち、読み出しを無効にするデータの書き込み、又は無効データの読み出しとなってしまう場合がある。したがって、プロセッサ１００は、潜在的な競合を特定するための、データ項目からの及びデータ項目へのメモリアクセスを追跡又は監視するロジックを含んでもよい。
【００３６】
一実施形態において、プロセッサ１００は、メモリアクセスを監視及び／又は追跡する読み出し及び書き込み監視部を含む。第１の例として、データ要素を保持する物理メモリ構造／ロケーションの粒度に限定されることを考慮せずに、監視部が、データ要素の粒度でのデータ要素へのメモリアクセスを監視する場合を考える。データ項目又はデータ要素は、ハードウェア、ソフトウェア又はこれらの組み合わせによって規定されるように、あらゆる粒度レベルでのデータを含んでもよい。
【００３７】
データ、データ要素、データ項目又はこれらを参照するものの例には、メモリアドレス、データオブジェクト、クラス、動的言語コードの種類フィールド、動的言語コードの種類、変数、オペランド、データ構造、及びメモリアドレスの間接的参照が含まれる。データの既知のグループは、データ要素又はデータ項目と呼ばれる場合がある。上記の例のうち、動的言語コードの種類フィールド、動的言語コードの種類といった２、３の要素が、動的言語コードのデータ構造を参照する。例えば、サンマイクロシステム社のＪａｖａ（登録商標）のような動的言語コードは、強く定型化された言語である。各変数は、コンパイル時に理解される種類を有する。種類は、２つのカテゴリに分類され、１つは、プリミティブ型（例えば、ｉｎｔ、ｆｌｏａｔのような論理式や数値）であり、もう１つは、参照型（クラス、インターフェース及びアレイ）である。参照型の値は、オブジェクトを参照する。Ｊａｖａ（登録商標）では、複数フィールドから構成されるオブジェクトは、クラスインスタンス又はアレイである。クラスＡのオブジェクトａの場合、タイプＡのｘのフィールドを指すのにＡ：：ｘという表記が、クラスＡのオブジェクトａのフィールドｘを指すのにａ．ｘという表記が慣例的に使用される。例えば、式は、ａ．ｘ＝ａ．ｙ＋ａ．ｚと表すことができ、これは、フィールドｙとフィールドｚがロードされて加算され、その結果が、フィールドｘとして記載されることを意味する。
【００３８】
データ項目へのメモリアクセスの監視は、あらゆるレベルの粒度のデータで実行される。例えば、一実施形態では、データへのメモリアクセスは、タイプレベルで監視される。ここで、フィールドＡ：：ｘへのトランザクション的書き込み、及びフィールドＡ：：ｙの非トランザクション的ロードは、同じデータ項目、すなわちタイプＡ、へのアクセスとして監視される。別の実施形態においては、メモリアクセス監視／バッファリングは、フィールドレベルの粒度で実行される。ここで、Ａ：：ｘへのトランザクション的書き込み、及びフィールドＡ：：ｙの非トランザクション的ロードは、別々のフィールドへの参照であるので、同じデータ項目へのアクセスとして監視されない。データ項目へのメモリアクセスを追跡するのに、別のデータ構造又はプログラミング技術を考えてもよい。例えば、クラスＢのオブジェクトを指し示す、クラスＡのオブジェクトのフィールドｘ及びｙ、すなわち、Ａ：：ｘ及びＡ：：ｙを仮定すると、これらは、新たに割り当てられたオブジェクトに対して初期化され、初期化された後は、二度と書き込まれることがない。一実施形態において、Ａ：：ｘによって示されるオブジェクトのフィールドＢ：：ｚへのトランザクション的書き込みは、Ａ：：ｙによって示されるオブジェクトのフィールドＢ：：ｚの非トランザクション的ロードに対して、同じデータ項目へのメモリアクセスとしては監視されない。これらの例から推測するに、監視装置は、あらゆるデータ粒度レベルでの監視を実行可能であると判断できる。
【００３９】
一実施形態において、監視装置は、それぞれ監視すべきと判断されたロード（読み込み）及びストア（格納）を追跡する読み出し監視部、及び書き込み監視部を含む。例えば、ハードウェア読み出し監視部及び書き込み監視部は、データ項目を保持するためのストレージ（記憶領域）構造の粒度に関わらず、少なくともデータ項目の粒度で、データ項目の制限付き監視を実行する。一実施形態において、データ項目の読み出し監視は、データ項目と関連付けられた読み出し属性を第１個数含む。同様に、データ項目の書き込み監視は、データ項目と関連付けられた書き込み属性を第２個数含む。読み出し属性の第１個数と、書き込み属性の第２個数は同じであってもよいし、異なる数の属性が含まれる構成であってもよい。
【００４０】
読み出し属性又は書き込み属性は、データ項目と関連付けられた状態又は情報を保持するための、あらゆるロジック、ファームウェア又は構造を含む。例えば、データ項目に対する属性は、ビットベクトルを含み、ビットベクトルにおける各ビットは、データ項目の属性を表す。データ項目の属性としては、例えば、トランザクション的にロードされた、トランザクション的書き込まれた、非トランザクション的にロードされた、非トランザクション的に書き込まれた、トランザクション的にロードされなかった、トランザクション的に書き込みされなかった、非トランザクション的にロードされなかった、非トランザクション的に書き込みされなかった、アクセス競合が検出された、アクセス競合が検出無し、読み出し要求、読み出し要求無し、書き込み要求、書き込み要求無し、オーナーシップ要求、オーナーシップ要求無し、又は、データ項目に関連付けられたその他の属性又は状態、又はデータ項目を保持するメモリロケーションが含まれる。
【００４１】
別の例として、データ項目に対する属性には、エンコードされた値が含まれる。例えば、状態としては、次のような４つの状態が挙げられる。（１）トランザクション的書き込み、（２）トランザクション的読み出し、（３）トランザクション的に書き込まれない、（４）トランザクション的に読み出されない。これら４つの状態は、２つの属性ビット、すなわち、００、０１、１１及び１０の４つの２進値を利用してエンコードされる。これらの４つの状態は、監視される書き込み状態、監視される読み出し状態、監視されない書き込まれた状態、及び監視されない読み出された状態を含むでもよい。
【００４２】
上述したように、読み出し属性及び書き込み属性は、あらゆる既知の態様でデータ項目／要素と関連付けられてもよい。例えば、監視されるデータ項目の読み出し及び書き込みに対応する、読み出し及び書き込み属性を保持するのに、プロセッサ１００内の一般的なストレージを使用してもよい。属性をデータ項目と関連付ける方法は、数多く存在し、全ての方法を詳細に説明することはできない。
【００４３】
第１の例として、属性は、キャッシュラインの複数バイトのサブセットと関連付けられる。例えば、キャッシュ１５０の１つのキャッシュラインの長さが６４バイトであって、プロセッサ１００は、８バイトセグメントでアクセス可能であるとする。この場合、属性は、例えば、２、４、８、１６、３２、６４又は１２８バイトのデータといったように、あらゆる物理粒度の記憶領域と関連付けられていてもよく、また、キャッシュ１５０の一部分においては４バイト単位の物理記憶領域と、キャッシュ１５０の別の部分においては８バイト単位の物理記憶領域と関連付けるといったように、キャッシュ１５０の中で変化してもよい。
【００４４】
一実施形態において、物理的な記憶領域の境界とは関係なく、監視部／属性は、プロセッサ１００における物理的記憶領域の粒度、すなわちキャッシュ１５０の一方又は両方及び属性記憶領域の粒度に関係なく、データ項目の粒度レベルで、データ項目の制限付き監視を実行する。例えば、キャッシュ１５０が、４バイトセグメントでアクセス可能な１６バイトのラインを含む、すなわち、各キャッシュラインに、アクセス可能な４つのセグメントが含まれるとする。さらに、読み出し及び書き込み属性がそれぞれ、各１６バイトラインの８バイトセグメントに関連付けられているとする。この場合、キャッシュは、４バイト単位のデータを読み出し及び書き込みすることができ、属性は、８バイト単位のデータを監視することができる。
【００４５】
またこの例において、監視されたロードは、キャッシュ１５０の２つのキャッシュの一部にわたる２０バイトの大きさを有するデータ項目のロードとなる、すなわち、第１ラインの１６バイトと第２ラインの最初の４バイトにわたるデータ項目のロードとなる。したがって、キャッシュ１５０の第１キャッシュラインの１６バイトと関連付けられた読み出し属性は、監視されたロードが発生したことを示すべく、更新される。また、データ項目が占有するのは第２キャッシュラインのうちの４バイトのみであっても、キャッシュ１５０の第２キャッシュラインの最初の８バイトと関連付けられた読み出し属性は、同様に更新される。基本的には、この実施形態においては、データ項目の監視は、少なくともデータ項目の粒度レベルで提供されるが、完全なデータ項目の監視を確実にするために、より大きな粒度で監視を行う、すなわち、制限付き監視も考えられる。言い換えれば、データ項目の属性制限付き監視は、物理的な記憶領域の粒度の制限無しに行われる、又は、物理的記憶領域の粒度に起因して、大きいサイズのデータが含まれる場合であっても、データ項目が監視されることを確実にするために属性と関連付けられて行われる。反対に、属性が、キャッシュ１５０と比較して小さい粒度を提供する場合には、属性関連付けに基づくデータ項目を追跡する方が、キャッシュ１５０のアクセシビリティの粒度における監視よりも正確である可能性もある。
【００４６】
上記の例では、１６バイトキャッシュラインの８バイト毎に監視を行うといったように、所定のサイズに対する属性／監視の静的な関連付けを仮定している。この関連付けは、単なる一例に過ぎず、より大きな又は小さな監視関連付け粒度を含むといったように、大幅に変更してもよい。別の実施形態では、属性は、データ項目のロード又は格納に伴い、属性のプールから動的に割り当てられる。この観点で、上述の例を再考する。監視されたロードを使用して、２０バイトのデータ項目を読み込む時には、読み出し属性は、その時に、データ項目が読み出されたキャッシュ１５０の２０バイトと動的に関連付けられる。ここで、データ項目の監視は、物理的記憶構造の粒度から真に切り離される。上記の両方の例において、下層の記憶構造、すなわちキャッシュ１５０の粒度に関係なく、データが監視部によって制限される。しかしながら、第１の例においては、キャッシュ１５０の一部と関連付けられる監視の静的粒度は、データが正しい監視によって制限されていることが確かであることを考慮に入れなければならない。それに対して、第２の例では、監視部は、データ項目の特定の粒度で動的に関連付けられる。
【００４７】
一実施形態において、プロセッサ１００内の監視部は、第１モードでは、全てのメモリアクセスを監視する。例えば、トランザクションが実行されている時には、全てのトランザクション的メモリアクセスが監視される。また、別のモードでは、プロセッサ１００は、メモリアクセスを選択的に監視可能であってもよい。メモリアクセスの選択的監視は、図３を参照して以下に詳述する。
【００４８】
一実施形態において、メモリアクセスオペレーションを監視するハードウェア監視部が、トランザクションの中止を要求する場合がある無効メモリアクセス検出のような、競合検出に用いられる。どのようにハードウェア監視又は属性の関連付けが実装されているかに関わらず、以下に詳細に説明するように、監視部のアクセス状態が競合検出ロジック、ファームウェア、ソフトウェア、又はこれらの組み合わせにより使用され、潜在的なメモリアクセス競合を検出してもよい。例示のため、キャッシュ１５０に保持されるデータ項目と関連付けられる読み出しハードウェア監視部が、データ項目がトランザクションによって予めロードされたことを示し、その後、別のスレッドによるデータ項目の書き込み要求が、キャッシュ１５０のキャッシュ制御ロジックによって受信されたとする。書き込み要求、及び読み出し監視部の現在の状態、すなわちトランザクション的ロードに基づいて、一実施形態ではキャッシュ制御ロジックに含まれる又は接続される競合ロジックが、潜在的な競合を検出する。潜在的な競合に応答して、ハードウェア、ソフトウェア、又はこれらの組み合わせにおいて、１以上のアクションを取ってもよい。図２を参照して、状態レジスタにビットを設定し、又は競合に応答してフラグを設定し、ビット又はフラグの設定に応答して潜在的な競合を扱うハンドラに制御を移譲することを含む例を詳細に説明する。
【００４９】
上記の例から推論されるように、一実施形態においては、属性は、データキャッシュ１５０のようなキャッシュメモリと関連付けられ、既存のコヒーレンシ及び通信／スヌーププロトコルを、ハードウェア監視部／属性と組み合わせて使用して、競合を検出してもよい。設計に基づいて、競合が発生する可能性のある、キャッシュコヒーレンシ要求、及び監視部／属性の状態の様々な組み合わせが示される。発生する可能性のある競合としては、例えば、監視したデータ項目のロードを示す上記のような読み出し監視、及びそのデータ項目への書き込み要求を示すスヌープが含まれる。反対に、データ項目への監視された書き込みを示す書き込み監視、及びそのデータ項目に対する読み出し要求を示すスヌープの組み合わせを、競合が発生する可能性があるとして考慮してもよい。一実施形態において、このようなアクセス要求と属性状態との組み合わせを検出するために、監視部及び／又は競合検出／報告ロジックのような検出／報告ロジックに、スヌープロジックを接続する。
【００５０】
一実施形態において、検出は、共通のコヒーレンシプロトコルの利用に限定されない。例えば、プロセッサの構造が、図１に示されている。ここでは、別々の物理的スレッドが、データキャッシュ１５０及び高次キャッシュ１１０の両方へのアクセスを共有する。したがって、監視部が、キャッシュ１５０と関連付けられ、キャッシュ１５０が、スレッド１０１ａとスレッド１０１ｂとの間で共有される共有キャッシュである場合、スレッド１０１ａ及びスレッド１０１ｂからのアクセスに応答して、キャッシュ１５０に対する相互接続要求が生成されないことから、スレッド１０１ａ及び１０１ｂ間での、潜在的な競合は適切に検出されない場合がある。
【００５１】
そこで、一実施形態において、監視部／属性は、処理エレメント単位を基本として複製される。この例において、属性は、スレッド毎に複製されてもよい、すなわち、同じ属性が、スレッド１０１ａ及び１０１ｂに対して複製される。属性の複製は、属性の１グループを、様々なスレッド識別子と結び付けることを含む場合があり、この場合、どのスレッドが、属性の１グループの状態と関連付けられているかを示す。一方、複製は、複製された属性の個別のグループを複数含む場合もあり、複製された属性はそれぞれ、１つのスレッドと関連付けられている。例えば、データ項目に対する複数の属性の第１セットは、スレッド１０１ａと関連付けられ、同じデータ項目に対する複数の属性の第２セットは、スレッド１０１ｂと関連付けられている。
【００５２】
その結果、キャッシュ１５０へのアクセスを共有するスレッド１０１ａ及びスレッド１０１ｂの間の競合の検出は、１スレッド毎といったように、１処理要素単位でアクセストラッキングを行うことを含む。例えば、スレッド１０１ａが、データ項目Ｄと関連付けられる監視部を設定すると仮定する。この場合、スレッド１０１ａと関連付けられる複製された属性は、適切な監視値に設定される。そして、スレッド１０１ｂが、データ項目Ｄに対して競合する要求を行うと、競合が検出される。一実施形態において、報告ロジックが制御ロジックに接続され、適切なハンドリングを行うために競合報告を検出する。例えば、論理ＯＲのような論理オペレーションは、外部要因（追い出し又は外部のスヌープ）及び共有キャッシュスレッドアクセス競合が原因で起きる監視の失敗のような様々な競合イベントを組み合わせる。
【００５３】
一実施形態において、キャッシュ１５０に保持されたデータ項目と関連付けられた属性は、一時的な格納又は占有的な格納を利用して実装される。この場合、キャッシュ１５０内のどこに属性を保持してもよく、例えば、キャッシュ１５０のラインに保持してもよい。例えば、上述したＨＴＭの一例は、インプレース更新ＨＴＭを含む。ここで、トランザクション的に変更されたデータが、現在のメモリロケーションに保持され、元のデータが、例えば、高次メモリに記録／バックアップされている。その結果、一実施形態では、キャッシュ１５０は、データ項目に関してアクセスされ、属性は、一時的に、データ項目と共にキャッシュ１５０に格納される。ここで、データ項目が占有状態又は一時的なコヒーレンシ状態に保持されることによって、キャッシュ制御ロジックが、トランザクション的動作の維持を確かにすることができる。すなわち、一時的状態で保持されるデータ項目は、その他のスレッドに提供されることがない。
【００５４】
しかしながら、データ項目がキャッシュ１５０から追い出されてしまった場合には、占有的に保持されている属性が失われてしまう可能性がある。基本的に、属性は、データ項目を監視するためにシステムが生成し、高次のメモリに書き戻されない。属性が失われてしまう、すなわち、追い出し又はその他のイベントに伴って失われてしまうシナリオでは、上述したような潜在的なアクセス競合を検出するのと同様な態様で、潜在的な競合が誘発される場合がある。バッファ格納及びバッファされた状態のような一時的格納及び占有的状態のバージョンについては、関連出願の代理人整理番号Ｐ２９１３２"Extending the MESI protocol to support locally buffered data（バッファされたデータをローカルにサポートするためのＭＥＳＩプロトコルの拡張）"に記載されている。
【００５５】
上述した例に示されるように、キャッシュにおいてデータ項目と関連付けられるハードウェア属性は、キャッシュの外に保持されてもよく、キャッシュロジック内、キャッシュアレイ内、キャッシュのその他の構造内、又は、一時的であればキャッシュのデータ部分に保持されてもよい。多くの場合、これらのハードウェア属性は、ユーザー命令の実行によって直接操作されることなく、ハードウェアによって維持される。例えば、ソフトウェアプログラムは、データ項目に対するトランザクション的書き込みを含む。プロセッサがトランザクション的書き込みを受け付け、監視すべきと決定した時には、ハードウェアは、データ項目に関連付けられた書き込み属性を適切に更新する。例えば、一時的な格納が挿入されて実行され、キャッシュ１５０が、データ項目及び関連付けられた書き込み属性によって更新される。別の例では、属性が、キャッシュ１５０のコヒーレンシ状態ビットに付加されており、データ項目を保持するキャッシュ１５０のラインのコヒーレンシ状態が、トランザクション的書き込みに応じて更新される。
【００５６】
一実施形態において、ハードウェア監視部／属性のハードウェア管理に加えて、ハードウェアが、命令を認識して属性を直接操作する。例えば、命令又はオペレーションが、命令セットアーキテクチャ（ＩＳＡ）の一部であって、プロセッサ１００によって認識可能であり、プロセッサは、属性に対するオペレーションを実行する。例えば、ＩＳＡは、オペコード（ｏｐｃｏｄｅ）を含み、プロセッサ１００のデコーダによって検出され、属性がそれにしたがって変更される。利用される命令の例としては、データ項目に関連付けられた属性をある状態に設定する設定命令、データ項目に関連付けられた属性を初期状態にリセットするリセット命令、属性の状態を読み出すテスト又は読み出し命令、及びトランザクションに対する又はキャッシュ内の全ての属性を消去する消去命令が含まれる。
【００５７】
上記の例に含まれているうちの１つ、属性を消去する消去命令について記載する。一実施形態において、読み出し及び書き込み監視をまとめて消去するのに、バルク消去命令が使用される。バルク消去命令は、数多くのシナリオにおいて、有用である可能性がある。第１に、トランザクションがコミット又は中止されると、そのトランザクションに対する読み出し及び書き込み監視が、消去／リセットされる可能性がある。第２に、１のドメインから別のドメインへのプロセッサ１００の遷移に伴って、読み出し及び書き込み監視が、消去／リセットされてもよい。インテル（登録商標）のＩＡ３２アーキテクチャは、リード（ｒｅａｄ）ドメイン、ビッグリアル（ｂｉｇ  ｒｅａｌ）ドメイン、そして仮想ドメインを含む。第３に、例外又は割り込みの発生時に、それに伴って、読み出し及び書き込み監視を消去してもよい。このように、消去命令が発生すると、監視、監視範囲、特定の条件に合致する全ての監視、又はキャッシュ内の全ての監視が消去される。
【００５８】
最初に図１を参照して上記で説明したように、プロセッサ１００は、説明のために純粋に例示することだけを目的として示されている。同様に、属性をデータ項目／要素と関連付ける上記した特定の例は、単なる例示に過ぎず、ハードウェア監視／属性を様々な粒度でデータ項目と関連付けるあらゆる方法を使用してもよい。キャッシュ内のデータ項目と属性の関連付けの一例を、図２を参照してさらに説明する。
【００５９】
図２には、一実施形態に係る、キャッシュメモリ内のデータ項目と属性との関連付けが示されている。プロセッサ２５０としては、トランザクション的実行を行う能力を有する１以上の処理要素を有する既知のあらゆる型のプロセッサが含まれる。上述したように、属性は、あらゆる物理サイズの物理的記憶構造と静的に関連付けられてもよいし、動的にデータ項目に割り当てられてもよい。図２の実施形態には、属性、すなわち属性２１１．ｒ‐２２６．ｒ及び２１１．ｗ‐２２６．ｗが示されており、それぞれ、キャッシュ２０５の静的部分、すなわち、部分２１０−２２５と関連付けられる。例えば、部分２１０‐２２５は、キャッシュの複数のキャッシュラインである。キャッシュ２５０としては、プロセッサと関連付けられるあらゆるキャッシュが含まれ、例えば、１次キャッシュ又は２次キャッシュが含まれる。
【００６０】
図示されるように、読み出し属性２１１．ｒは、キャッシュライン２１０と関連付けられ、書き込み属性２１１．ｗも、キャッシュライン２１０と関連付けられている。一実施形態において、アレイ２３５は、属性２１１．ｒ及び２１１．ｗを有するタグアレイを含む。別の実施形態では、アレイ２３５としては、コヒーレンシ状態アレイのような、状態アレイが含まれ、状態ビット内に属性２１１．ｒ及び２１１．ｗが含まれて、キャッシュ２０５に対して新たなコヒーレンシ状態を生成している。コヒーレンシ状態を使用する例について、図４を参照して以下に詳細に説明する。もう１つの実施形態において、アレイ２３５は、図示するように、キャッシュ制御ロジック２３０内のあらゆるアレイを含み、又は、図示していないが、プロセッサ２５０内の制御ロジックの外側のその他の属性構造を含む。
【００６１】
一実施形態において、属性２１１．ｒ‐２２６．ｒ及び２１１．ｗ‐２２６．ｗは、キャッシュ２０５内のキャッシュライン境界のような記憶領域構造の物理的な境界に関わらず、データ要素２０１のようなデータ項目／要素に対するメモリアクセスを監視する。実際には、データ項目は、キャッシュ２０５のキャッシュラインのような境界で整列していなくてもよい。ここで、キャッシュ２０５の物理的境界に関わらずデータ項目を監視することは、キャッシュ２０５の部分と監視される属性との関連付けに基づいて、非整列データ項目を監視と結び付けることを含む。属性は、ライン単位を基本として関連付けられるため、監視されたデータ項目を含むあらゆるラインが、その他のデータを保持していたとしても監視されて、データ項目が適切に監視されるようにしている。
【００６２】
様々なデータ項目の例が、上記に記載されている。図２では、データ項目２０１は、キャッシュラインの１と２分の１の大きさで表されている。図に示した例では、トランザクション的ロードオペレーションは、データ要素２０１を参照するメモリデータアドレスからのロードを行うべく実行され、それにより、データ要素２０１のキャッシュライン２１０及び２１５への読み込みが行われる。プロセッサ２５０は、モード又は条件の設定により、トランザクション的ロードを監視すべきか判断する。
【００６３】
制御ロジック２３０は、データ項目２０１が制限されるべきと決定する、すわち、少なくともデータ項目が監視され、更に必要以上のデータが監視されることによって、競合の正確な検出を行う。ここで、制御ロジック２３０は、フィールド２１１ｒ及び２１６ｒを更新して、キャッシュ２１５及び２１６からの監視された読み込みが発生したことを示す。第１例としては、フィールド２１１ｒ及び２１６ｒが、例えば論理値０のような監視されていない論理値から、例えば論理値１のような監視された論理値へと更新される。アレイ２３５がコヒーレンシ状態アレイである場合の実施形態では、フィールド２１１及び２１６は、以下に記載するように、監視された読み出し共有コヒーレンシ状態のような、適切なコヒーレンシ状態へと遷移される。したがって、例えば、制御ロジック２３０におけるスヌープロジックが、キャッシュライン２１０又は２０５のいずれかへの書き込み要求を検出すると、潜在的な競合が検出される。
【００６４】
図２では、主に、属性がキャッシュのデータ部分２０５から切り離されている場合に注目して例示されているが、上述したように、属性は、データ部分２０５に保持されていてもよい。１つ前の例を使用すると、監視されたロードに応答して属性２１１ｒ及び２１６ｒを更新する替わりに、属性は、キャッシュライン２１０又はキャッシュライン２１５のどちらか、若しくは両方に占有的に格納される。キャッシュライン２１０及び２１５の状態は、バッファされた状態又は占有状態へと遷移する。書き込み要求が発生すると、占有的に保持された属性情報を使用して、同様な競合が検出される。しかしながら、ライン２１０又は２１５で追い出しが発生した場合には、属性情報の損失、すなわち属性情報が失われてしまう可能性がある。その結果、同様な競合プロセスが、トリガされる。図２を参照した説明には、キャッシュライン１つにつき、属性が１セットのみ含まれている例が示されている。しかしながら、図１のキャッシュ１５０を参照して説明したように、属性を、プロセッサ２５０のスレッド単位で複製してもよい。例えば、属性を、キャッシュ２０５を共有するスレッド毎に複製する。また、例示したように、読み出し属性と書き込み属性が等しい数提供されるのではなく、読み出し属性と書き込み属性との間で異なる数が提供されてもよい。
【００６５】
一実施形態において、キャッシュ制御ロジック２３０内に含まれる又はキャッシュ制御ロジック２３０と関連付けられる制御ロジックは、属性と関連付けられた競合を検出する。競合の存在を判断するのに、設計の実装形態に基づいて、属性状態、要求、通信プロトコル、又はコヒーレンシプロトコルのいかなる組み合わせを使用してもよい。単純化した基本的な例として、監視された読み出しへの書き込みは、競合となる可能性があり、監視された書き込みの読み出し又は書き込みも競合となる可能性がある。
【００６６】
一実施形態において、競合が検出されると、報告ロジックが競合を報告する。競合は、ハードウェア、ファームウェア、ソフトウェア又はこれらの組み合わせによって、対処されてもよい。一実施形態において、報告ロジックは、レジスタ２４５のような記憶要素を含む。記憶要素は、プロセッサ２５０内に、情報を保持するためのあらゆる構造を含んでもよく、例えば、メモリ、汎用レジスタ又はモデル固有レジスタ（ＭＳＲ）を含んでもよい。第１の例として、レジスタ２４５は、状態レジスタを含む。競合を検出した場合には、レジスタ２４５における値が競合値に設定されて、競合が発生したことを示す。ソフトウェアは、レジスタ２４５をポールして、値が競合値に設定されているかを確認してもよい。別の例として、プロセッサ２５０は、オーバフローフラグのようなフラグを含むフラグレジスタを備え、フラグは、ジャンプ命令のような命令によってテストされる。例えば、ロード命令に続く条件付きジャンプ命令は、命令の読み出しセットのコヒーレンシをテストするのに使用されてもよい。
【００６７】
上述したように、追い出し又はその他のイベントによる属性データの損失も、競合であると考えられる。この場合、レジスタ２４５を同様な方法で利用することによって、属性データの損失を示してもよい。一実施形態において、属性データの損失に応答して、報告ロジックは、プロセッサ２５０のオペレーションを、ソフトウェアハンドラにリダイレクトして、監視される属性のための限られた記憶容量を提供する。オバーフローイベントに応答したトランザクショナルメモリの仮想化の例については、同時係属中の米国特許出願番号１１／４７９，９０２"Global Overflow Method for Virtualized Transactional Memory（仮想化されたトランザクショナルメモリに対するグローバルオーバーフロー方法）"に記載されている。また、レジスタ２４５のような記憶要素を利用してユーザーハンドラを記録し、競合のようなトランザクション的イベントを扱う例については、２００８年１２月３０日出願、代理人整理番号Ｐ２９１２９、米国出願番号１２／３４６，５１８号明細書、発明者Gad Sheaffer他"Registering a User-Handler in Hardware for Transactional Memory Event Handling（トランザクショナルメモリイベント取り扱いのための、ユーザーハンドラのハードウェアへの登録）"に記載されている。
【００６８】
一実施形態において、レジスタ２４５は、非監視モード、非選択的監視モード、選択的監視モードといったように、プロセッサ２５０の動作モードを示す値を保持する。選択的監視モードにおいては、レジスタ２４５又はその他のレジスタは、アクセス監視に対する選択的基準を規定してもよい。状態レジスタ、動作モードを規定するレジスタ、及び選択基準を規定するレジスタとして使用される観点におけるレジスタ２４５の説明は、上記の記憶要素２４５の使用可能性のあらゆる組み合わせを実装する複数のレジスタ又は１つのレジスタを参照する。
【００６９】
次に、図３を参照して、様々なモードで監視を行う方法のフローチャートの実施形態を例示する。図３及び図５のフローチャートは、ほぼ順次的に記載されている。しかしながら、これらの図面に示された方法はこれらに限定されず、あらゆる順番で、少なくとも部分的に並行して、フローを実行してもよい。
【００７０】
フロー３０５において、データ要素を参照するメモリアクセスを監視すべきかを決定する。一実施形態において、非監視、非選択的監視及び選択的監視といったように監視の複数のモードが提供される。例えば、ソフトウェアが、監視モードを設定してもよい。例えば、ユーザー命令が、図２のレジスタ２４５のようなレジスタをアドレス指定することで、監視モードを示すこともできる。ここでは、ソフトウェアが、どの読み出し及び書き込みを監視すべきかを決定する。例えば、コンパイラのようなソフトウェアコードによって、静的に又は実行時間の間に、又は、アプリケーションコード、オペレーティングシステムコード、ハイパーバイザコード、又はトランザクション的ランタイムコードによって、この決定を行ってもよい。
【００７１】
一実施形態において、監視の選択的モードの間に、あらゆる態様で規定されてもよい特定の基準に当てはまるものを除いて、読み出し及び書き込みが監視される。監視されない場合があるメモリアドレスへのメモリアクセスに対する選択基準の例の不完全なリストとしては、ある範囲内又は外の仮想アドレス又はマスクに適合する仮想アドレス、範囲内外の物理的アドレス又はマスクにマ適合する物理アドレス、特定のメモリタイプに属するアドレス、入出力（Ｉ／Ｏ）空間内のアドレス、一の保護ドメインでのオペレーションの替わりに別の保護ドメインで実行されるアドレス、特定のオペコード又はプリフィックスによって特定される命令によってアクセスされるアドレス、及び浮動小数点オペレーション又はベクトルオペレーションのような特定のデータタイプに対するメモリアドレスが含まれる。また、ユーザーによって特定され、プロセッサ２５０のハードウェアによって認識可能な明示的トランザクション的ロード及び明示的トランザクション的格納オペレーションのみ、といったように、特定の認識される命令に応じて、監視する属性を設定してもよい。
【００７２】
フロー３５０において、監視が適応されるか否かが決定されると、フロー３１５において、データ要素と関連付けられた監視部の更新を通じて監視が適用される、又は、フロー３１０において、監視が実行されずアクセスが通常通り実行される。データ要素と関連付けられた属性のような監視部の更新は、本明細書に記載したように、属性を変更してアクセスを適切に監視するあらゆる方法を含む。監視された及び監視されていない読み出し／書き込みに基づいて、様々なコヒーレンシ状態に監視部を更新する例を、以下に記載する。
【００７３】
図４には、監視されたコヒーレンシ状態を含む複数のコヒーレンシ状態間を遷移する方法を示すための、状態遷移図の一実施形態が示されている。図４の状態遷移図は、図を簡略化するために状態図の一部のみを示しており、監視する属性の消去といった状態遷移の一部については図示されていない。また、状態、及び状態間の遷移は、単なる一例である。例えば、図４に例示されているような直接遷移の替わりに、状態間で複数段階の状態遷移が起きてもよい。
【００７４】
例示したキャッシュコヒーレンシ状態としては、以下のような状態が含まれる。（１）変更（Ｍ４２０）状態、すなわち、アドレスが書き込まれたが、それに関連付けられた属性がない、（２）変更読み出し（ＭＲ４３０）状態、すなわち、アドレスが読み出され、それに関連付けられた読み出し属性を有する、（例えば、前にアドレスに対する読み出しがあり、その後、トランザクションがアドレスを書き込んだ場合）、（３）変更書き込み（ＭＷ４２５）状態、すなわち、アドレスは書き込まれ、関連付けられた属性を有する、（４）変更読み出し書き込み（ＭＲＷ４３５）状態、すなわち、アドレスが読み出され、そして書き込まれて、関連付けられた読み出し属性及び書き込み属性の両方を有する、（５）排他的（Ｅ４４０）状態、すなわち、アドレスが読み出されたが、関連付けられた属性を有さない、（６）排他的読み出し（ＥＲ４４５）状態、すなわち、アドレスが読み出されたが、関連付けられた読み出し属性を有さない、（７）共有（Ｓ４１０）状態、すなわち、アドレスが読み出されたが、関連付けられた属性を有さない、（８）共有読み出し（ＳＲ４１５）状態、すなわち、アドレスが読み出され、関連付けられた読み出し属性を有する。
【００７５】
一実施形態において、属性が、キャッシュの状態ビット内に含まれ、新しく監視されるコヒーレンシ状態が生成される図２を参照して説明した例に従って、これらの状態を実装してもよい。例えば、１以上のラインが、共有状態４１０にあり、監視される読み出しが発生する場合には、ラインを含むデータ項目のメモリアドレスの参照が行われ、ラインのコヒーレンシ状態は、ＳＲ４１５状態へと遷移する。その結果、一実施形態において、ラインへの書き込みの外部からの要求は、コヒーレンシ状態がＳＲ４１５となっていることから、競合になる可能性がある。データ項目の少なくとも一部を含むキャッシュラインが、ＭＷコヒーレンシ状態４２５に保たれる時の、データ項目に対する外部の読み出し要求のような、その他のメモリアクセス要求の種類との組み合わせによるコヒーレンシ状態に基づくと、その他の潜在的な競合が存在することもある。
【００７６】
図５は、メモリアクセスを実行するためのフローチャートの一実施形態を示したものである。フロー５０５において、データ項目と関連付けられたメモリを参照するメモリアクセスが発生する。メモリアクセスの発生には、実行のあらゆる段階において実行されるあらゆるメモリアクセス検出方法が含まれる。様々な段階におけるオペレーションの発生の例には、デコーダがメモリアクセスに対するオペコードを認識する、命令キャッシュからメモリアクセスオペレーションを読み出す、メモリアクセスの実行をロード／ストアユニットのような実行ユニットにスケジュールする、メモリアクセスをリタイアさせる等がある。
【００７７】
フロー５１０において、プロセッサは、オペレーション選択モードで動作する。上述したように、一実施形態において、ソフトウェアは、プロセッサのモードを設定する。ここで、ソフトウェアは、実行の際に、レジスタのような記憶要素を更新して、オペレーションのモードを示す。例えば、トランザクションの実行が開始する時に、ソフトウェアは、モードを非選択モードへと設定する、すなわち、全てのメモリアクセスが監視される。トランザクションが終了する時に、モードは、選択監視又は非監視へと切り替えられる。しかしながら、別の実施形態においては、プロセッサ内のハードウェアが、オペレーションのモードを決定する。
【００７８】
モードが、選択的モードであると決定されると、フロー５１５において、特定のメモリアクセスを監視すべきかを決定する。この決定には、数多くの選択基準を適用してもよく、参照されたメモリアドレスが、アドレスの特定の範囲内であるか否か、又はデータ項目が特定の種類であるかといった条件が考えられる。加えて、条件は、単純に、メモリアクセスが、ソフトウェアによって特定され監視されるか否かを含んでもよく、明示的トランザクション的メモリアクセスとして特定されるかを含んでもよい。メモリアクセスが監視されない場合には、フロー５２５において、通常通りに実行される。メモリアクセスが監視される場合には、フロー５２０において、データ項目と関連付けられるアクセス監視部が更新される。アクセスは、フロー５２０において監視が更新される前、間、又は後に、フロー５２５においてアクセスが実行されてもよい。
【００７９】
したがって、上述したように、属性のような監視は、物理的記憶構造の粒度に制限されることなく、少なくともデータ項目／要素の粒度で、メモリアクセスの監視を提供する。その結果、ハードウェア属性が、メモリアドレス及び関連付けられたデータ項目へのアクセスの監視をハードウェア内で提供すると同時に、ソフトウェアのデータ構造レベルにおける競合の監視及び検出を行う能力を維持することができる。また、属性情報が失われてしまう場合には、属性は、ソフトウェアへのオーバーフローをサポートすることにより、大きなトランザクションに対するフィルタとして動作する可能性がある。また、一実施形態において、ユーザーメカニズムが含まれるので、属性にアクセスして、直接オペレーションが実行可能となる。
【００８０】
本明細書で用いられたモジュールとは、任意のハードウェア、ソフトウェア、ファームウェア又はこれらの組み合わせを意味する。別個のものとして図示されているモジュールの境界は、通常変わることが多く、重複する可能性もある。例えば、第１のモジュール及び第２のモジュールは、ハードウェア、ソフトウェア、ファームウェア又はこれらの組み合わせを共有しているとしてもよいし、独立したハードウェア、ソフトウェア又はファームウェアを持つとしてもよい。一実施形態では、ロジックという用語は、例えば、トランジスタ、レジスタのようなハードウェア、又はプログラム可能な論理デバイスのようなその他のハードウェアを含む。しかしながら、別の実施形態では、ロジックはまた、ハードウェアと一体化されたソフトウェア又はコード、例えば、ファームウェア又はマイクロコードを含む。
【００８１】
また、本明細書で使用されている"値"という言葉は、数、状態、論理状態又は２値論理状態のあらゆる既知の表現を含む。また、明細書で使用されている論理レベル、論理値、又は論理的値は、１又は０といった単純に２値論理状態を意味している場合もある。例えば、１は高い論理レベルを指し、０は低い論理レベルを指す。一実施形態では、トランジスタ又はフラッシュセルのような記憶セルは、１つの論理値又は複数の論理値を保持可能であってもよい。しかしながら、コンピュータシステムにおける値の他の表現が使用されてきている。例えば、１０進数の１０は、２進値表示では、１０１０と表され、１６進数表示ではＡと表される。したがって、ある１つの値は、コンピュータシステムに保持される情報のあらゆる表示形式を含む。
【００８２】
さらに、状態は、値又は値の一部によって表されていてもよい。例えば、論理値の１のような第１の値が、デフォルト状態又は最初の状態を表していてもよく、論理値の０のような第２の値が、非デフォルト状態を表していてもよい。加えて、リセット及びセットという言葉はそれぞれ、ある実施形態では、デフォルト値又は状態及び更新された値又は状態を指す。例えば、デフォルト値は、高い論理値、すなわち、リセットを含んでもよく、更新値は、低い論理値、すなわち、セットを含んでもよい。値のどのような組み合わせを、あらゆる数の状態を表すのに利用してもよい。
【００８３】
上記の方法、ハードウェア、ソフトウェア、ファームウェア、コードの実施形態を、機械アクセス可能な又は機械可読な媒体に記憶され、プロセッシング素子によって実効可能な命令又はコードを使用して実装してもよい。機械アクセス可能／機械可読な媒体としては、コンピュータ又は電子システムのような機械によって読み出し可能な形式の情報を提供する（すなわち、記憶及び／又は送信する）あらゆるメカニズムを含む。例えば、機械アクセス可能媒体は、スタティックＲＡＭ（ＳＲＡＭ）若しくはダイナミックＲＡＭ（ＤＲＡＭ）のようなランダム・アクセス・メモリ（ＲＡＭ）、ＲＯＭ，磁気的又は光学的記憶媒体、フラッシュメモリデバイス、電気記憶デバイス、光学記憶デバイス、音響的記憶デバイス、又は他の形態の伝播信号（例えば、搬送波、赤外線信号、デジタル信号）記憶デバイス等が含まれる。例えば、機械は、搬送波のような伝播信号を、搬送波信号によって送信可能な情報を保持可能な媒体から、受信することにより、記憶デバイスにアクセスしてもよい。
【００８４】
また、本明細書における「一実施形態」又は「ある実施形態」という言葉は、実施形態に関連する特定の特徴、構造及び特性が、少なくとも本発明の実施形態の一つに含まれていることを意味する。したがって、本明細書中の様々な箇所で使用されている「一実施形態において」又は「ある実施形態において」という表現は、必ずしも同一の実施形態を示していない。また、１以上の実施形態において、特定の構成、構造又は特徴を、適切な形で組み合わせてもよい。
【００８５】
明細書の上記において、特定の例示された実施形態を参照して、詳細な説明がなされた。しかしながら、添付の特許請求の範囲に記載される本発明の範囲内において、様々な変形及び変更を加えることが可能であることは、明らかである。したがって、明細書及び添付の図面は、発明を制限するものではなく、発明を例示するものであると見なされるべきである。また、上記の実施形態及び他の例で使用された言葉は、同じ実施形態又は同じ例を必ずしも指している必要はなく、異なる及び別の実施形態を指している場合もあるし、同じ実施形態を指している場合もある。
【図１】
0005462883.tif 000002
【図２】
0005462883.tif 000003
【図３】
0005462883.tif 000004
【図４】
0005462883.tif 000005
【図５】
0005462883.tif 000006