(57)【要約】  トランザクショナルメモリを仮想化及び／又は拡張するための方法及び装置を記載する。トランザクションは、キャッシュメモリといったローカルの共有トランザクショナルメモリを用いて実行される。共有トランザクショナルメモリは、オーバーフローすると、システムメモリといった上位メモリ内へと仮想化／又は拡張される。現在ペンディングのトランザクションの間に前にアクセスされたキャッシュラインを退避させるといったオーバーフローイベントが発生すると、オーバーフローフラグがセットされて、トランザクショナルメモリはグローバルオーバーフローテーブル内に仮想化されるべきであることがプロセッサ／コアに通知される。グローバルオーバーフローテーブルのベースアドレスも上位メモリにおけるグローバルオーバーフローテーブルのベースを参照すべく格納されうる。【選択図】  なし
2009537053.tif 000002
【特許請求の範囲】
【請求項１】
トランザクションを実行する実行モジュールと、
前記実行モジュールに結合され、複数のメモリラインを有し、前記複数のメモリラインのうちの一のメモリラインは、前記トランザクションの実行中における前記メモリラインへのアクセスを追跡する対応追跡フィールドに関連付けられる、第１のメモリと、
前記トランザクションの実行中における前記メモリラインに関連するオーバーフローイベントに呼応して、前記第１のメモリを第２のメモリへと拡張することをサポートするオーバーフローロジックと、
を含む装置。
【請求項２】
前記第２のメモリは、前記オーバーフローイベントに呼応して、前記メモリラインに関連付けられたトランザクションステート情報を格納する、請求項１に記載の装置。
【請求項３】
前記オーバーフローロジックは、
前記オーバーフローイベントに呼応してセットされる一のオーバーフロービットを格納する格納エレメントと、
前記第２のメモリ内のグローバルオーバーフローテーブル用のベースアドレスの表示を格納するベースアドレス格納エレメントと、
を含み、
前記グローバルオーバーフローテーブルは、前記メモリラインに関連付けられた前記トランザクションステート情報を格納する、請求項２に記載の装置。
【請求項４】
前記トランザクションの実行中における前記メモリラインへのアクセスを追跡する前記対応追跡フィールドは、
前記トランザクションの実行中における前記メモリラインからのロードを追跡する第１のビットと、
前記トランザクションの実行中における前記メモリラインへのストアを追跡する第２のビットと、
を含む、請求項３に記載の装置。
【請求項５】
前記メモリラインに関連付けられた前記トランザクションステート情報を格納する前記グローバルオーバーフローテーブルは、
前記オーバーフローテーブル内のオーバーフローエントリ内に、メモリラインに関連付けられたエレメントを格納するエレメントフィールドと、
前記オーバーフローエントリ内に、前記エレメントに関連付けられた物理アドレスを格納するアドレスフィールドと、
前記オーバーフローエントリ内に、前記対応追跡フィールドの前記第１のビットのステートを格納するトランザクション読出しステートフィールドと、
前記オーバーフローエントリ内に、前記対応追跡フィールドの前記第２のビットのステートを格納するトランザクション書込みステートフィールドと、
を含む、請求項４に記載の装置。
【請求項６】
前記第１のメモリは、キャッシュメモリであり、
前記第２のメモリは、複数のコアのうちで共有される上位メモリであり、
前記複数のコアの各コアは、前記オーバーフロービットがセットされている場合は、バリデーション時にコンフリクトがあるか否か前記グローバルオーバーフローテーブルをチェックする、請求項５に記載の装置。
【請求項７】
オーバーフローイベントは、前記トランザクションの実行中に、前記第１のビットが前記メモリラインからの前のロードを追跡した場合に、又は、前記トランザクションの実行中に、前記第２のビットが前記メモリラインへの前のストアを追跡した場合に、退避すべき前記メモリラインを選択することである、請求項４に記載の装置。
【請求項８】
オーバーフローイベントは、前記トランザクションにおいてネストされた第２のトランザクション用のトランザクション開始命令を実行することである、請求項４に記載の装置。
【請求項９】
一のトランザクションにまとめられた複数のオペレーションを実行する実行ユニットと、
前記実行モジュールに結合され、複数のブロックを有するトランザクショナルメモリと、
前記実行ユニットに結合され、トランザクションオーバーフローフラグを格納するレジスタと、
を含み、
前記トランザクションオーバーフローフラグは、前記一のトランザクションにまとめられた前記複数のオペレーションのうちの一のオペレーションが、前記メモリをオーバーフローさせる場合にセットされる、装置。
【請求項１０】
前記レジスタ内の前記トランザクションオーバーフローフラグは、複数のコアに対して可視である、請求項９に記載の装置。
【請求項１１】
前記トランザクションオーバーフローフラグを格納する前記レジスタは、複数のコアのうちの、前記一のトランザクションにまとめられた前記複数のオペレーションを実行する一のコア内にある、請求項９に記載の装置。
【請求項１２】
前記複数のコアの各コアは、コンフリクトをチェックするときに、前記トランザクションオーバーフローフラグがセットされている場合に、コンフリクトをチェックすべくグローバルオーバーフローテーブルにアクセスする、請求項１０に記載の装置。
【請求項１３】
前記トランザクションオーバーフローフラグは、前記グローバルオーバーフローテーブル内の最後のエントリが解放されるとクリアされる、請求項１２に記載の装置。
【請求項１４】
前記トランザクションオーバーフローフラグを格納する前記レジスタは、マシン固有レジスタ（ＭＳＲ）である、請求項９に記載の装置。
【請求項１５】
前記メモリをオーバーフローさせる、前記一のトランザクションにまとめられた前記複数のオペレーションのうちの一のオペレーションは、実行されると、前記トランザクションの実行中に前にアクセスされた前記メモリ内の前記複数のブロックのうちの一のブロックを退避させる、前記複数のオペレーションのうちの一のオペレーションを含む、請求項９に記載の装置。
【請求項１６】
一のトランザクション内の複数のオペレーションを実行する実行ユニットと、
前記実行ユニットに結合され、複数のキャッシュラインを含むキャッシュと、
前記一のトランザクション内の前記複数のオペレーションのうちの一のオペレーションに関連するオーバーフローイベントに呼応して、グローバルオーバーフローテーブルのベースアドレスの表示を格納するベースアドレスレジスタと、
を有するプロセッサを含む、装置。
【請求項１７】
前記グローバルオーバーフローテーブルは、前記複数のオペレーションのうちの前記一のオペレーションによって参照される、前記複数のキャッシュラインのうちの一のキャッシュラインに関連付けられたエントリを格納し、
前記エントリは、前記一のキャッシュラインに関連付けられた物理アドレスと、トランザクションステート情報とを有する、請求項１６に記載の装置。
【請求項１８】
前記トランザクションステート情報は、前記一のオペレーションによって参照される前記一のキャッシュラインに関連付けられた第１のビットのステート及び第２のビットのステートを含み、
前記第１のビットは、前記一のキャッシュラインからの読出しを追跡し、
前記第２のビットは、前記一のキャッシュラインへの書込みを追跡する、請求項１７に記載の装置。
【請求項１９】
前記エントリは更に、前記一のキャッシュラインが変更ステートにある場合に、前記一のキャッシュラインに関連付けられたデータエレメントのコピーを有する、請求項１８に記載の装置。
【請求項２０】
前記エントリは更に、オペレーティングシステム（ＯＳ）コントロールフィールドを有する、請求項１８に記載の装置。
【請求項２１】
オーバーフローテーブルは更に、前記オーバーフローテーブルにおける次のページの物理アドレスを格納する、請求項１６に記載の装置。
【請求項２２】
トランザクションを実行する実行モジュールと、
前記実行モジュールに結合され、複数のブロックを有し、前記複数のブロックのうちの一のブロックは、前記トランザクションの実行中における前記ブロックへのアクセスを追跡する第１のビット及び第２のビットに関連付けられる、メモリと、
オーバーフローフラグを格納する第１の格納エレメントと、
前記オーバーフローフラグがセットされている場合に、グローバルオーバーフローテーブルのベースアドレスを格納する第２の格納エレメントと、
を含み、
前記オーバーフローフラグは、前記メモリへの現在のアクセスが前記一のブロックを退避させることであり、且つ、前記第１のビット又は前記第２のビットが前記トランザクションの実行中における前記ブロックへの前のアクセスを追跡した場合に、前記現在のアクセスが行われると、セットされる、装置。
【請求項２３】
トランザクションの実行中における前記ブロックへのアクセスを追跡する前記第１のビット及び前記第２のビットは、
前記トランザクションの実行中に前記ブロックからのロードがあると、前記第１のビットをセットするロジックと、
前記トランザクションの実行中に前記ブロックへのストアがあると、前記第２のビットをセットするロジックと、
前記トランザクションの実行中に前記第１のビットがセットされていた場合に、前記トランザクションをコミットして前記第１のビット及び前記第２のビットをクリアにするロジックと、
を含む、請求項２２に記載の装置。
【請求項２４】
前記グローバルオーバーフローテーブルは、前記グローバルオーバーフロービットがセットされている場合に、前記ブロックに関連付けられたエントリを格納し、
前記エントリは、
前記一のブロックに関連付けられた物理アドレスと
前記ブロックが第１のステートにある場合に、前記ブロックに関連付けられたデータエレメントと、
前記第１のビットのロジカル値と、
前記第２のビットのロジカル値と、
オペレーティングシステム（ＯＳ）コントロールフィールドと、
を含む、請求項２３に記載の装置。
【請求項２５】
前記メモリは、キャッシュであり、
前記第１のステートは、変更ステートである、請求項２４に記載の装置。
【請求項２６】
前記オーバーフローフラグ及び前記ベースアドレスは、マシン固有レジスタ（ＭＳＲ）内に格納される、請求項２２に記載の装置。
【請求項２７】
前記第１の格納エレメントは、オーバーフローレジスタであり、
前記第２の格納エレメントは、ベースアドレスレジスタである、請求項２２に記載の装置。
【請求項２８】
前記オーバーフローフラグは、一のオーバーフロービットであり、
前記メモリは、キャッシュメモリであり、
前記グローバルオーバーフローテーブルの前記ベースアドレスは、メモリ階層において、前記キャッシュメモリより上位のメモリ内の物理ベースアドレスである、請求項２２に記載の装置。
【請求項２９】
トランザクションを実行する実行ユニットと、前記実行ユニットに結合され、複数のラインを有し、各ラインは、前記トランザクションの実行中におけるアクセスを追跡する対応トランザクション追跡フィールドを有する、トランザクショナルメモリ（ＴＭ）と、前記トランザクションの実行中に発生するオーバーフローイベントに呼応して、前記ＴＭの仮想化をサポートするオーバーフローロジックとを有するマイクロプロセッサと、
前記仮想化されたＴＭを格納する、メモリ階層において前記ＴＭより上位の第２のメモリと、
を含むシステム。
【請求項３０】
前記ＴＭの仮想化は、前記トランザクションのステートをグローバルオーバーフローテーブル内に保存することであり、
前記第２のメモリは、前記グローバルオーバーフローテーブルを格納する、請求項２９に記載のシステム。
【請求項３１】
前記オーバーフローロジックは、
前記トランザクションの実行中に発生する前記オーバーフローイベントに呼応してセットされる一のオーバーフロービットを格納する第１のレジスタと、
前記システムメモリ内の前記グローバルオーバーフローテーブルの物理ベースアドレスを格納する第２のレジスタと、
を含む、請求項３０に記載のシステム。
【請求項３２】
前記第２のメモリ内の前記グローバルオーバーフローテーブルは、複数のページを有し、
前記複数のページの各ページは、前記グローバルオーバーフローテーブルの次のページ用の次の物理ベースアドレスを格納する、請求項３１に記載のシステム。
【請求項３３】
前記ＴＭは、キャッシュメモリであり、
前記第２のメモリは、システムメモリであり、
オーバーフローイベントは、前記複数のキャッシュラインのうちの退避させるべき一のキャッシュラインを、前記対応トランザクション追跡フィールドが、前記トランザクションの実行中における前記一のキャッシュラインへのアクセスを前に追跡した場合に、選択することである、請求項３１に記載のシステム。
【請求項３４】
退避させるべき前記複数のキャッシュラインのうちの一のキャッシュラインを選択することは、キャッシュコントローラによって行われ、
前記対応トランザクション追跡フィールドが、前記トランザクションの実行中における前記一のキャッシュラインへのアクセスを前に追跡した場合に、前記オーバーフロービットを、退避させるべく前記複数のキャッシュラインのうちの一のキャッシュラインを選択することに基づいてセットすることは、
前記対応トランザクション追跡フィールドが、前記トランザクションの実行中における前記キャッシュラインへのアクセスを前に追跡した場合に、インタラプトを生成することと、
前記インタラプトを処理すべく呼び出されたハンドラを用いて前記オーバーフロービットをセットすることと、
を含む、請求項３３に記載のシステム。
【請求項３５】
トランザクションの一部として実行され、トランザクショナルメモリ内のメモリラインを参照するオペレーションに関連するオーバーフローイベントを検出することと、
オーバーフロービットが現在セットされていない場合に、前記オーバーフローイベントに呼応して前記オーバーフロービットをセットすることと、
前記オーバーフロービットがセットされたことに呼応して、前記トランザクショナルメモリを第２のメモリに拡張することと、
を含む方法。
【請求項３６】
前記オーバーフロービットがセットされたことに呼応して、前記トランザクショナルメモリを第２のメモリに拡張することは、
前記オーバーフロービットがセットされたことに呼応して、前記トランザクションのステートをグローバルオーバーフローテーブル内に格納することを含む、請求項３５に記載の方法。
【請求項３７】
トランザクションの一部として実行されるオペレーションに関連するオーバーフローイベントを検出することは、
退避させるべく前記メモリラインを選択することと、
前記メモリラインに関連付けられたアクセス追跡フィールドから、前記メモリラインが前記トランザクションの実行中に前にアクセスされたか否かを判断することと、
前記メモリラインが前記トランザクションの実行中に前にアクセスされたと判断される場合に、オーバーフローイベントを検出することと、
を含む、請求項３５に記載の方法。
【請求項３８】
前記オーバーフロービットは、複数のコアによって可視であるマシン固有レジスタ（ＭＳＲ）内に格納される、請求項３５に記載の方法。
【請求項３９】
前記トランザクションの前記ステートを前記グローバルオーバーフローテーブル内に格納することは、前記グローバルオーバーフローテーブルにエントリを書込むことを含み、
前記エントリは、
前記メモリラインに関連付けられた物理アドレスと、
前記トランザクションの実行中における前記メモリラインからのロードを追跡する第１の追跡フィールドのステートと、
前記トランザクションの実行中における前記メモリラインへのストアを追跡する第２の追跡フィールドのステートと、
前記メモリラインが変更ステートにある場合に、前記物理アドレスに関連付けられたデータエレメントと、
を含む、請求項３６に記載の方法。
【請求項４０】
一のトランザクションにまとめられた複数のオペレーションのうちの一のオペレーションを実行することと、
前記一のオペレーションに基づいて、キャッシュ内の退避させるべきキャッシュラインを選択することと、
前記選択されたキャッシュラインが、前記一のトランザクションのペンディング中において前にアクセスされている場合に、
グローバルオーバーフロービットが現在セットされていない場合に前記グローバルオーバーフロービットをセットすることと、
前記一のトランザクションに関連付けられたステート情報を格納するグローバルオーバーフローテーブル用の第１のページが現在割り当てられていない場合に、メモリの前記第１のページを前記グローバルオーバーフローテーブル用の第２のメモリ内に割り当てることと、
前記グローバルオーバーフローテーブル用の前記第１のページが割り当てられると、前記システムメモリ内の前記第１のページのベースアドレスをベースアドレスレジスタに書込むことと、
を含む、方法。
【請求項４１】
前記選択されたキャッシュラインが、前記トランザクションのペンディング中において前にアクセスされている場合に、インタラプトを生成することと、
前記インタラプトを、ハンドラによって処理することと、
を含み、
前記グローバルオーバーフロービットは、前記インタラプトの前記処理に基づいてセットされる、請求項４０に記載の方法。
【請求項４２】
前記トランザクションに関連付けられたステート情報は、前記トランザクションのペンディング中において前記キャッシュラインへのアクセスを追跡するアクセス追跡フィールドのステートを有する、請求項４１に記載の方法。
【請求項４３】
前記グローバルオーバーフローテーブルは更に、
前記キャッシュラインに関連付けられた物理アドレスと、
オペレーティングシステム（ＯＳ）コントロールフィールド情報と、
を格納する、請求項４２に記載の方法。
【請求項４４】
前記ＯＳは、前記インタラプトに基づいて、メモリの前記第１のページを前記第２のメモリ内に割り当てる、請求項４３に記載の方法。
【請求項４５】
オーバーフローページフォルトが発生し、且つ、少なくとも前記第１のページが、前記グローバルオーバーフローテーブルに現在割り当てられている場合に、前記グローバルオーバーフローテーブル用の前記第２のメモリ内に追加のページを割り当てることと、
前記第２のメモリ内の前記追加のページの追加のベースアドレスを、前記第２のメモリ内の前のページに書込むことと、
を更に含み、
前記前のページは、前記グローバルオーバーフローテーブルにおいて前記追加のページに論理的に先行する、請求項４０に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサの実行の分野に係り、より具体的には、オペレーション群の実行に係る。
【背景技術】
【０００２】
半導体処理及びロジック設計における発展は、集積回路デバイス上に存在しうるロジックの量を増加可能にした。その結果、コンピュータシステム構成は、１つのシステム内に単一又は複数の集積回路という構成から、個々の集積回路上に複数のコア及び複数のロジカルプロセッサが存在するという構成に進化した。プロセッサ又は集積回路は、一般に、単一のプロセッサダイを含み、このプロセッサダイには、任意の数のコア又はロジカルプロセッサが含まれうる。
【０００３】
一例として、単一の集積回路が、１つの又は複数のコアを有しうる。「コア」という用語は、通常、アーキテクチャステートを維持する、集積回路上のロジックの独立した能力を指し、各独立したアーキテクチャステートは、少なくとも幾つかの専用実行リソースに関連付けられる。別の例として、単一の集積回路又は単一のコアは、複数のソフトウェアスレッドを実行するための複数のハードウェアスレッドを有してもよく、それゆえ、マルチスレッディング集積回路又はマルチスレッディングコアとも呼ばれる。複数のハードウェアスレッドは、通常、共通のデータキャッシュ、命令キャッシュ、実行ユニット、分岐予測器、制御ロジック、バスインターフェイス、及び他のプロセッサリソースを共有し、同時に、各ロジカルプロセッサについて一意のアーキテクチャステートを維持する。
【０００４】
集積回路上のコア及びロジカルプロセッサの数がかつてないほどに増加することにより、より多くのソフトウェアスレッドを実行することができる。しかし、同時に実行されうるソフトウェアスレッドの数が増加することによって、ソフトウェアスレッド間で共有されるデータを同期する際の問題をもたらした。複数のコア又は複数のロジカルプロセッサを有するシステムにおいて共有データにアクセスすることに対する一般的な解決策は、共有データへの複数アクセス間での相互排除を保証するロックを使用することである。しかし、複数のソフトウェアスレッドを実行する能力がかつてないほどに増加していることによって、実行の偽の競合及びシリアライゼーションをもたらしてしまいうる。
【０００５】
別のデータ同期化技術では、トランザクショナルメモリ（ＴＭ）を使用する。多くの場合、トランザクションの実行には、複数のマイクロオペレーション、オペレーション、又は命令を有する群を投機的に実行することが含まれる。しかし、従前のハードウェアＴＭシステムでは、１つのトランザクションが、１つのメモリに対して大きくなりすぎる、即ち、メモリをオーバーフローする場合、そのトランザクションは、通常、再スタートされる。このとき、オーバーフローとなるまでにトランザクションの実行にかかった時間は無駄となってしまいうる。
【図面の簡単な説明】
【０００６】
本発明を、添付図面によって限定的ではなく例示的に説明する。
【０００７】
【図１】トランザクショナルメモリを拡張可能なマルチコアプロセッサの一実施形態を示す図である。
【０００８】
【図２ａ】各コアがオーバーフローフラグを格納するレジスタを含むマルチコアプロセッサの一実施形態を示す図である。
【０００９】
【図２ｂ】オーバーフローフラグを格納するグローバルレジスタを含むマルチコアプロセッサの別の実施形態を示す図である。
【００１０】
【図３】各コアがオーバーフローテーブルのベースアドレスを格納するベースアドレスレジスタを含むマルチコアプロセッサの一実施形態を示す図である。
【００１１】
【図４ａ】オーバーフローテーブルの一実施形態を示す図である。
【００１２】
【図４ｂ】オーバーフローテーブルの別の実施形態を示す図である。
【００１３】
【図５】複数のページを含むオーバーフローテーブルの別の実施形態を示す図である。
【００１４】
【図６】トランザクショナルメモリを仮想化するシステムの一実施形態を示す図である。
【００１５】
【図７】トランザクショナルメモリを仮想化するためのフロー図の一実施形態を示す図である。
【００１６】
【図８】トランザクショナルメモリを仮想化するためのフロー図の別の実施形態を示す図である。
【発明を実施するための最良の形態】
【００１７】
以下の説明において、トランザクションの実行のための具体的なハードウェアサポート、プロセッサ内の具体的なローカル／メモリのタイプ、及び、メモリアクセスとロケーションの具体的なタイプ等の例といった多数の具体的な詳細を、本発明の完全な理解を与えるべく記載する。しかし、当業者には、これらの具体的な詳細は、本発明を実施するのに必ずしも用いなくともよいことは明らかであろう。また、ソフトウェアでのトランザクションのコーディング、トランザクションの境界設定、具体的なマルチコア及びマルチスレッドプロセッサアーキテクチャ、インタラプト発生／処理、キャッシュ編成、及びマイクロプロセッサの具体的なオペレーションの詳細といった周知の要素又は方法は、本発明を不必要に不明瞭とすることを回避すべく詳細には記載していない。
【００１８】
本願に記載する方法及び装置は、トランザクションの実行中におけるローカルメモリのオーバーフローをサポートすべくトランザクショナルメモリ（ＴＭ）を拡張及び／又は仮想化することを目的とする。具体的には、トランザクショナルメモリの仮想化及び／又は拡張は、主に、マルチコアプロセッサコンピュータシステムを参照して説明する。しかし、トランザクショナルメモリを拡張／仮想化する方法及び装置は、これに限定されず、この方法及び装置は、携帯電話機、携帯情報端末、組み込みコントローラ、モバイルプラットホーム、デスクトッププラットホーム、及びサーバプラットホームといった任意の集積回路デバイス又はシステム上で又は関連付けられて、トランザクショナルメモリを使用するハードウェア／ソフトウェアスレッドといった他のリソースとともに実施されうる。図１を参照するに、トランザクショナルメモリを拡張可能なマルチコアプロセッサ１００の一実施形態を示す。トランザクションの実行には、通常、複数の命令又はオペレーションを１つのトランザクション、コードのアトミックセクション、又は、コードのクリティカルセクションにまとめることが含まれる。「命令」という用語は、複数のオペレーションからなるマクロ命令をさす場合もある。トランザクションを特定する方法は概して２通りある。第１の例は、ソフトウェアでトランザクションを境界設定することである。ここでは、幾つかのソフトウェア境界設定（demarcation）がコード内に含まれてトランザクションを特定する。上記のソフトウェア境界設定とともに実施されうる別の実施形態では、複数のトランザクションは、ハードウェアによってまとめられるか、又は、トランザクションの開始とトランザクションの終了を示す命令によって認識される。
【００１９】
プロセッサにおいて、トランザクションは、投機的に又は非投機的に実行される。第２の場合では、複数の命令を有する群は、アクセスされるメモリロケーションに対するなんらかの形のロック又は保証された有効アクセスを用いて実行される。別の例では、トランザクションの投機的実行がより一般的であり、この場合、トランザクションは投機的に実行され、トランザクションが終了するとコミットされる。本願にて用いる「トランザクションのペンデンシ（pendency）」とは、トランザクションの実行は開始されたが、コミット又はアボートされていない、即ち、ペンディング（保留中）であることをさす。
【００２０】
一般に、トランザクションの投機的な実行時は、メモリの更新は、トランザクションがコミットされるまで他のデバイスには認識されない。トランザクションが依然としてペンディングである間、メモリからロードされ且つメモリ内に書込みされるロケーションは追跡される。これらのメモリロケーションのバリデーションが成功すると、トランザクションはコミットされ、トランザクション時に行われた更新は、他のデバイスにも認識されるようになる。しかし、トランザクションがそのペンデンシ中に無効となると、当該トランザクションは、更新をグローバルに可視化することなく再スタートされる。
【００２１】
図示する実施形態では、プロセッサ１００は、２つのコア、即ち、コア１０１及び１０２を含むが、任意の数のコアが存在しうる。コアとは、多くの場合、独立したアーキテクチャステートを維持可能な集積回路上に配置される任意のロジックであって、独立して維持されるアーキテクチャステートのそれぞれは、少なくとも幾つかの専用実行リソースに関連付けられるロジックを指す。例えば、図１では、コア１０１は、複数の実行ユニット１１０を含み、コア１０２は、複数の実行ユニット１１５を含む。実行ユニット１１０及び１１５は、論理的に別個のものとして示すが、これらは、同じユニットの一部として又は近接して物理的に配置されてもよい。しかし、例えば、スケジューラ１２０は、コア１０１用の実行を、実行ユニット１１５上で処理するようスケジュールすることはできない。
【００２２】
コアとは対照的に、ハードウェアスレッドは、一般に、独立したアーキテクチャステートを維持可能な集積回路上に配置される任意のロジックであって、独立して維持される複数のアーキテクチャステートは、実行リソースへのアクセスを共有するロジックを指す。以上のように、ある処理リソースは共有され、他の処理リソースは１つのアーキテクチャステート専用であるので、ハードウェアスレッドとコアの定義は重なる場合もある。しかし、多くの場合、コアとハードウェアスレッドは、オペレーティングシステムによって、それぞれスレッドを実行可能な個別のロジカルプロセッサとしてみなされる。したがって、プロセッサ１００といったプロセッサは、スレッド１６０、１６５、１７０、及び１７５といった複数のスレッドを実行可能である。コア１０１といったコアはそれぞれスレッド１６０及び１６５といった複数のソフトウェアスレッドを実行可能であるように図示するが、コアは単一のスレッドのみを実行可能であってもよい。
【００２３】
一実施形態では、プロセッサ１００は、対称のコア１０１及び１０２を含む。この場合、コア１０１及びコア１０２は、同様の構成要素及びアーキテクチャを有する同様のコアとなる。或いは、コア１０１及び１０２は、異なる構成要素及び構成を有する非対称のコアであってもよい。しかし、コア１０１及び１０２は対称コアとして記載するので、コア１０１の機能ブロックについて説明し、コア１０２に関して説明は繰り返さない。なお、図示する機能ブロックは、ロジカル機能ブロックであって、これらは、他の機能ブロック間で共有される又は他の機能ブロックと境界が重なるロジックを含みうる。更に、各機能ブロックは必ずしも必要ではなく、また、様々な構成で相互接続されうる。例えば、フェッチ／デコードブロック１４０は、フェッチ及び／又はプリフェッチユニットと、フェッチユニットに結合されたデコードユニットと、フェッチユニットの前で、デコードユニットの後に、又は、フェッチユニット及びデコードユニットの両方に結合された命令キャッシュとを含みうる。
【００２４】
一実施形態では、プロセッサ１００は、外部装置との通信用のバスインターフェイスユニット１５０と、コア１０１及び１０２間で共有される第２レベルキャッシュといった上位キャッシュ１４５とを含む。別の実施形態では、コア１０１及び１０２はそれぞれ別個の第２レベルキャッシュを含む。
【００２５】
フェッチ／デコード／分岐予測ユニット１４０は、第２レベルキャッシュ１４５に結合される。一例では、コア１０１は、命令をフェッチするフェッチユニットと、フェッチされた命令をデコードするデコードユニットと、フェッチされた命令、デコードされた命令、又はフェッチされた命令とデコードされた命令の組み合わせを格納する命令キャッシュ又はトレースキャッシュとを含む。別の実施形態では、フェッチ／デコードブロック１４０は、分岐予測器及び／又は分岐先バッファを有するプリフェッチャを含む。更に、マイクロコードＲＯＭ１３５といった読出し専用メモリを用いてより長い又はより複雑なデコード済み命令を格納してもよい。
【００２６】
一例では、アロケータ／リネーマブロック１３０は、命令処理結果を格納すべくレジスタファイルといったリソースを予約するアロケータを含む。しかし、コア１０１は、アウトオブオーダ実行が可能である場合があり、この場合、アロケータ／リネーマブロック１３０は、命令を追跡すべくリオーダバッファといった他のリソースも予約する。ブロック１３０は更に、プログラム／命令参照レジスタをコア１０１の内部の他のレジスタに名前を変更するレジスタリネーマを含みうる。リオーダ／リタイアメントユニット１２５は、上述したリオーダバッファといった構成要素を含み、アウトオブオーダ実行と、アウトオブオーダで実行された命令の後のリタイアメントをサポートする。一例として、リオーダバッファ内にロードされたマイクロオペレーションは、実行ユニットによってアウトオブオーダで実行され、次に、マイクロオペレーションがリオーダバッファに入れられた順序と同じ順序で、リオーダバッファから取り出される、即ち、リタイアされる。
【００２７】
スケジューラ／レジスタファイルブロック１２０は、一実施形態では、実行ユニット１１０での命令をスケジュールするスケジューラユニットを含む。実際には、命令は、命令のタイプ及び実行ユニット１１０の利用可能性とに応じて実行ユニット１１０にスケジューリングされうる。例えば、浮動小数点命令は、利用可能な浮動小数点実行ユニットを有する実行ユニット１１０のポートにスケジューリングされる。実行ユニット１１０に関連付けられるレジスタファイルは更に、情報命令処理結果を格納する。コア１０１において利用可能である例示的な実行ユニットには、浮動小数点実行ユニット、整数実行ユニット、ジャンプ実行ユニット、ロード実行ユニット、ストア実行ユニット、及び他の既知の実行ユニットが含まれる。一実施形態では、実行ユニット１１０は更に、リザベーションステーション及び／又はアドレス生成ユニットも含む。
【００２８】
図示する実施形態では、下位キャッシュ１０３をトランザクショナルメモリとして使用する。具体的には、下位キャッシュ１０３は、データオペランドといった最近に使用した／処理されたエレメントを格納する第１レベルキャッシュである。キャッシュ１０３は、ライン１０４、１０５、及び１０６といった複数のキャッシュラインを含み、これらは、キャッシュ１０３内のメモリロケーション又はブロックとも呼ばれうる。一実施形態では、キャッシュ１０３は、セット・アソシエティブ・キャッシュとして編成される。しかし、キャッシュ１０３は、フル・アソシエティブ・キャッシュ、セット・アソシエティブ・キャッシュ、ダイレクト・マップド・キャッシュ、又は他の既知のキャッシュ編成として編成されてもよい。
【００２９】
図示するように、ライン１０４、１０５、及び１０６は、ポーション１０４ａ及びフィールド１０４ｂといったポーション又はフィールドを含む。一実施形態では、ライン１０４、１０５、及び１０６のポーション１０４ａ、１０５ａ、及び１０６ａといったライン、ロケーション、ブロック、又はワードは、複数のエレメントを格納可能である。エレメントとは、任意の命令、オペランド、データオペランド、変数、又は、メモリ内に一般的に格納されるロジカル値の他の群を指す。一例として、キャッシュライン１０４は、１つの命令と３つのオペランドを含む４つのエレメントをポーション１０４ａに格納する。キャッシュライン１０４ａに格納されたエレメントは、パック又は圧縮された状態であっても、非圧縮状態であってもよい。更に、エレメントは、キャッシュ１０３のライン、セット、又はウェイの境界に合わされることなくキャッシュ１０３に格納されうる。メモリ１０３については、以下の例示的な実施形態を参照してより詳細に説明する。
【００３０】
キャッシュ１０３、並びにプロセッサ１００内の他の特徴及びデバイスは、ロジック値を格納及び／又は処理する。多くの場合、ロジックレベル、ロジック値、又はロジカル値の使用は、複数の１と複数の０として示され、これらは単純に２進法のロジックステートを表す。例えば、「１」は高ロジックレベルを指し、「０」は低ロジックレベルを指す。ロジカル値又は２進値の１０進法及び１６進法表現／表示といったコンピュータシステムにおける値の他の表現法も用いられてきている。例えば、１０進法による数「１０」を例とすると、これは、２進値では「１０１０」と表され、１６進法では文字「Ａ」として表される。
【００３１】
図１に示す実施形態では、ライン１０４、１０５、及び１０６へのアクセスは、トランザクションの実行をサポートすべく追跡される。フィールド１０４ｂ、１０５ｂ、及び１０６ｂといったアクセス追跡フィールドを用いて、フィールドの対応するメモリラインへのアクセスを追跡する。例えば、メモリライン／ポーション１０４ａは、対応する追跡フィールド１０４ｂに関連付けられる。この場合、アクセス追跡フィールド１０４ｂは、キャッシュライン１０４の一部である複数のビットを含むのでキャッシュライン１０４ａに関連付けられ且つ対応する。関連付けは、図示するように物理的な配置によって行われても、アクセス追跡フィールド１０４ｂを、ハードウェア又はソフトウェアルックアップテーブル内のアドレス参照メモリライン１０４ａ又は１０４ｂに関連させる又はマッピングするといった他の関連付けによって行われてもよい。実際には、トランザクションアクセスフィールドは、ハードウェア、ソフトウェア、ファームウェア、又はそれらの任意の組み合わせで実施される。
【００３２】
したがって、トランザクションの実行時にライン１０４ａがアクセスされると、アクセス追跡フィールド１０４ｂがアクセスを追跡する。アクセスには、読出し、書込み、ストア、ロード、退避、スヌープ、又は、メモリロケーションへの他の既知のアクセスといったオペレーションが含まれる。
【００３３】
例示的な簡略例として、アクセス追跡フィールド１０４ｂ、１０５ｂ、及び１０５ｂが、２つのトランザクションビット、即ち、第１の読出し追跡ビットと第２の書込み追跡ビットを含むと想定する。デフォルトステート、即ち、第１のロジカル値では、アクセス追跡フィールド１０４ｂ、１０５ｂ、及び１０５ｂにおける第１の及び第２のビットは、キャッシュライン１０４、１０５、及び１０６はそれぞれトランザクションが実行される間に、即ち、トランザクションのペンデンシの間にアクセスされなかったことを示す。キャッシュライン１０４ａからのロードオペレーションによって、又は、キャッシュライン１０４ａに関連付けられるシステムメモリロケーションがライン１０４ａからのロードがもたらされると、アクセスフィールド１０４ｂにおける第１の読出し追跡ビットは、第２のロジカル値といった第２のステート／値にセットされ、トランザクションが実行される間にキャッシュライン１０４からの読出しが行われたことを表す。同様に、キャッシュライン１０５ａに書込みが行われると、アクセスフィールド１０５ｂ内の第２の書込み追跡ビットは、第２のステートにセットされて、トランザクションが実行される間にキャッシュライン１０５への書込みが行われたことを表す。
【００３４】
したがって、ライン１０４ａに関連付けられるフィールド１０４ａ内のトランザクションビットがチェックされ、当該トランザクションビットがデフォルトステートを表す場合、キャッシュライン１０４は、トランザクションのペンデンシの間にアクセスされていない。反対に、第１の読出し追跡ビットが第２の値を表す場合、キャッシュライン１０４は、トランザクションのペンデンシの間に前にアクセスされている。より具体的には、トランザクションが実行される間に行われるライン１０４ａからのロードは、アクセスフィールド１０４ｂにおける第１の読出し追跡ビットがセットされることによって表される。
【００３５】
アクセスフィールド１０４ｂ、１０５ｂ、及び１０５ｂは、トランザクションの実行時に他の使用も有しうる。例えば、トランザクションのバリデーションが、従来から２つの方法で行われてきている。１つは、トランザクションをアボートしてしまう無効なアクセスが追跡される場合、無効アクセス時にトランザクションはアボートされ、再スタートされうる。或いは、トランザクションが実行される間にアクセスされたライン／ロケーションのバリデーションは、トランザクションの終了時、コミットメントの前に行われる。その際、トランザクションは、バリデーションが成功した場合は、コミットされ、バリデーションが失敗した場合には、アボートされる。いずれの場合においても、トランザクションの実行時にどのラインがアクセスされたのかを特定するのでアクセス追跡フィールド１０４ｂ、１０５ｂ、及び１０５ｂは有用である。
【００３６】
別の例示的な簡略例として、第１のトランザクションが実行されており、その第１のトランザクションが実行される間に、ライン１０５ａからのロードが行われたと想定する。結果として、対応するアクセス追跡フィールド１０５ｂが、トランザクションが実行される間にライン１０５へのアクセスが行われたことを示す。第２のトランザクションが、ライン１０５０に関してコンフリクトを引き起こす場合、アクセス追跡フィールド１０５ｂが、ライン１０５は第１のペンディングのトランザクションによってロードされたことを表すので、第２のトランザクションによるライン１０５へのアクセスに基づいて第１のトランザクション又は第２のトランザクションのどちらかがすぐにアボートされうる。
【００３７】
一実施形態では、第２のトランザクションがライン１０５に関してコンフリクトを引き起こし、対応するフィールド１０５ｂが第１のペンディングのトランザクションによって前にアクセスされたことを示すと、インタラプトが生成される。このインタラプトは、２つのペンディングのトランザクション間にコンフリクトが発生すると第１又は第２のトランザクションのどちらかのアボートを開始するデフォルトハンドラ及び／又はアボートハンドラによって処理される。
【００３８】
トランザクションがアボート又はコミットされると、トランザクションが実行される間にセットされたトランザクションビットはクリアにされて、トランザクションビットのステートが、後続のトランザクション時のアクセスの追跡のためにデフォルトステートにリセットすることが確実にされる。別の実施形態では、アクセス追跡フィールドは、コアＩＤ又はスレッドＩＤ、及びトランザクションＩＤといったリソースＩＤも格納しうる。
【００３９】
図１を参照して上述したように且つ以下に説明するように、下位キャッシュ１０３を、トランザクショナルメモリとして用いる。しかし、トランザクショナルメモリはこれに限定されない。実際には、上位キャッシュ１４５もトランザクショナルメモリとして用いてもよい。この場合、キャッシュ１４５のラインへのアクセスが追跡される。上述したように、スレッドＩＤ又はトランザクションＩＤといった識別子を、キャッシュ１４５といった上位メモリにおいて用いて、どのトランザクション、スレッド、又はリソースがキャッシュ１４５内で追跡されるアクセスを行ったか追跡しうる。
【００４０】
トランザクショナルメモリとして可能性のある更に別の例として、変数、命令、又はデータを格納する実行空間又はスクラッチパッドとして処理エレメント又はリソースに関連付けられる複数のレジスタを、トランザクショナルメモリとして用いてもよい。この例では、メモリロケーション１０４、１０５、及び１０６は、レジスタ１０４、１０５、及び１０６を含む複数のレジスタを有する群である。トランザクショナルメモリの他の例には、キャッシュ、複数のレジスタ、レジスタファイル、静的ランダムアクセスメモリ（ＳＲＡＭ）、複数のラッチ、又は、他の格納エレメントが含まれる。なお、プロセッサ１００、又は、プロセッサ１００上の任意の処理リソースが、メモリロケーションから読出す又はメモリロケーションに書込むときに、システムメモリロケーション、仮想メモリアドレス、物理アドレス、又は、他のアドレスをアドレス指定しうることに留意されたい。
【００４１】
トランザクションが、下位キャッシュ１０３といったトランザクショナルメモリをオーバーフローしない限り、トランザクション間のコンフリクトは、それぞれ、対応するライン１０４、１０５、及び１０５へのアクセスを追跡するアクセスフィールド１０４ｂ、１０５ｂ、及び１０５ｂのオペレーションによって検出される。上述したように、トランザクションは、アクセス追跡フィールド１０４ｂ、１０５ｂ、及び１０５ｂを用いて有効にされ、コミットされ、無効にされ、及び／又は、アボートされうる。しかし、トランザクションがメモリ１０３をオーバーフローする場合、オーバーフローモジュール１０７が、オーバーフローイベントに呼応して、トランザクショナルメモリ１０３の仮想化及び／又は拡張をサポートする、即ち、当該トランザクションのステートを第２のメモリに格納する。したがって、メモリ１０３がオーバーフローした際にトランザクションをアボートするのではなく（これは、トランザクション内のそれまでのオペレーションの実行にかかった実行時間の損失につながる）、当該トランザクションのステートは仮想化されて、実行を継続される。
【００４２】
オーバーフローイベントには、メモリ１０３の実際のオーバーフロー、又は、メモリ１０３のオーバーフローの予測が含まれうる。一実施形態では、オーバーフローイベントとは、現在ペンディングであるトランザクションが実行される時に前にアクセスされたメモリ１０３内のラインを退避のために選択すること、又は、そのラインの実際の退避である。つまり、オペレーションがメモリ１０３をオーバーフローするとは、当該メモリ１０３は、現在ペンディングのトランザクションによってアクセスされたことのあるメモリラインでフルであることを示す。この結果、メモリ１０３は、退避させるべき、ペンディングのトランザクションに関連付けられたラインを選択する。基本的に、メモリ１０３はフルであり、依然としてペンディングであるトランザクションに関連付けられるラインを退避させることによってスペースを作ろうと試みる。既知の又は利用可能である技術を、キャッシュの置換、ラインの退避、コミットメント、アクセスの追跡、トランザクションコンフリクトのチェック、及びトランザクションのバリデーションに用いうる。
【００４３】
しかし、オーバーフローイベントは、メモリ１０３の実際のオーバーフローに限定されない。例えば、トランザクションが、メモリ１０３に対して大きすぎるという予測も、オーバーフローイベントとなりうる。この場合、アルゴリズム又は他の予測方法を用いて、トランザクションのサイズを決定し、メモリ１０３が実際にオーバーフローする前にオーバーフローイベントを作成する。別の実施形態では、オーバーフローイベントは、ネスト式トランザクション（nested transaction）の開始である。ネスト式トランザクションはより複雑であり、また、従来ではサポートするためにはより多くのメモリを占有するので、第１レベルのネスト式トランザクション又は後続レベルのネスト式トランザクションの検出は、オーバーフローイベントをもたらしうる。
【００４４】
一実施形態では、オーバーフローロジック１０７は、オーバーフロービットを格納するレジスタといったオーバーフロー格納エレメントと、ベースアドレス格納エレメントを含む。オーバーフローロジック１０７を、キャッシュコントロールロジックと同じ機能ブロック内に示すが、オーバーフロービットを格納するオーバーフローレジスタ及びベースアドレスレジスタは、マイクロプロセッサ１００内のどこにでも存在しうる。一例として、プロセッサ１００上の各コアは、グローバルオーバーフローテーブル用のベースアドレスの表現とオーバーフロービットを格納するオーバーフローレジスタを含む。しかし、オーバーフロービット及びベースアドレスの実施は、これに限定されない。実際には、プロセッサ１００上の全てのコア又はスレッドに可視であるグローバルレジスタが、オーバーフロービット及びベースアドレスを含む場合がある。或いは、各コア又はハードウェアスレッドがベースアドレスレジスタを含み、グローバルレジスタがオーバーフロービットを含む。以上のように、オーバーフロービットと、オーバーフローテーブルのベースアドレスを格納するために任意の数の構成を実施することができる。
【００４５】
オーバーフロービットは、オーバーフローイベントに基づいてセットされる。上述した実施形態について説明を続けるに、ペンディングのトランザクションが実行される間に前にアクセスされたメモリ１０３内のラインを退避のために選択することがオーバーフローイベントとなる場合、オーバーフロービットは、ペンディングのトランザクションが実行される間に前にアクセスされたメモリ１０３内のラインを退避のために選択することに基づいてセットされる。
【００４６】
一実施形態では、オーバーフロービットは、ライン１０４といったラインが退避のために選択され、また、ペンディングのトランザクションの間に前にアクセスされている場合に、オーバーフロービットをセットするロジックといったハードウェアを使用してオーバーフロービットをセットする。例えば、キャッシュコントローラ１０７は、任意の数の既知又は利用可能であるキャッシュ置換アルゴリズムに基づいて退避用のライン１０４を選択する。実際には、キャッシュ置換アルゴリズムは、ペンディングのトランザクションが実行される間に前にアクセスされたライン１０４といったキャッシュラインの置換を行わないようにされうる。それにも関わらず、退避用にライン１０４を選択する場合、キャッシュコントローラ又は他のロジックは、アクセス追跡フィールド１０４ｂをチェックする。ロジックは、フィールド１０４ｂ内の値に基づいて、上述したように、キャッシュライン１０４がペンディングのトランザクションが実行される間にアクセスされたかどうかを判断する。キャッシュライン１０４が、ペンディングのトランザクション時に前にアクセスされている場合、プロセッサ１００内のロジックが、グローバルオーバーフロービットをセットする。
【００４７】
別の実施形態では、ソフトウェア又はファームウェアがグローバルオーバーフロービットをセットする。同様のシナリオにおいて、ライン１０４がペンディングのトランザクション時に前にアクセスされたことが判断されると、インタラプトが生成される。このインタラプトは、実行ユニット１１０内で実行されるユーザハンドラ及び／又はアボートハンドラによって処理され、グローバルオーバーフロービットがセットされる。なお、グローバルオーバーフロービットが現在セットされている場合、メモリ１０３は既にオーバーフローしている状態なのでハードウェア及び／又はソフトウェアは、当該ビットを再びセットする必要はないことに留意されたい。
【００４８】
オーバーフロービットの使用の例示的な例として、オーバーフロービットがセットされると、ハードウェア及び／又はソフトウェアは、キャッシュライン１０４、１０５、及び１０６へのアクセスを追跡し、トランザクションを有効にし、コンフリクトをチェックし、一般にメモリ１０３とアクセスフィールド１０４ｂ、１０５ｂ、及び１０６ｂに関連付けられる他のトランザクション関連のオペレーションを拡張トランザクショナルメモリを用いて行う。
【００４９】
ベースアドレスを用いて、仮想化されたトランザクショナルメモリのベースアドレスを特定する。一実施形態では、仮想化されたトランザクショナルメモリは、上位キャッシュ１４５といったメモリ１０３より大きい第２メモリデバイス、又は、プロセッサ１００に関連付けられるシステムメモリデバイスに格納される。この結果、第２メモリは、メモリ１０３をオーバーフローしたトランザクションを取り扱うことができるようになる。
【００５０】
一実施形態では、拡張トランザクショナルメモリは、トランザクションのステートを格納するグローバルオーバーフローテーブルと呼ばれる。したがって、ベースアドレスは、トランザクションのステートを格納するグローバルオーバーフローテーブルのベースアドレスを表す。グローバルオーバーフローテーブルのオペレーションは、アクセス追跡フィールド１０４ｂ、１０５ｂ、及び１０６ｂに関するメモリ１０３のオペレーションと同じである。例示的な例として、ライン１０６が退避のために選択されたと想定する。しかし、アクセスフィールド１０６ｂは、ライン１０６が、ペンディングのトランザクションが実行される間に前にアクセスされたことを表す。上述したように、グローバルオーバーフロービットが現在セットされていない場合には、オーバーフローイベントに基づいてグローバルオーバーフロービットがセットされる。
【００５１】
グローバルオーバーフローテーブルがセットアップされていない場合、第２メモリのある量が、テーブルに割り当てられる。一例として、オーバーフローテーブルの初期ページが割り当てられていないことを示すページフォルトが生成される。オペレーティングシステムは、次に、第２メモリのある範囲を、グローバルオーバーフローテーブルに割り当てる。第２メモリのこの範囲は、グローバルオーバーフローテーブルの１ページと呼ばれうる。そして、グローバルオーバーフローテーブルのベースアドレスの表示が、プロセッサ１００に格納される。
【００５２】
ライン１０６を退避させる前に、トランザクションのステートがグローバルオーバーフローテーブルに格納される。一実施形態では、トランザクションのステートの格納には、オーバーフローイベントに関連付けられるオペレーション及び／又はライン１０６に対応するエントリをグローバルオーバーフローテーブルに格納することが含まれる。当該エントリは、ライン１０６に関連付けられる物理アドレスといったアドレス、アクセス追跡フィールド１０６ｂのステート、ライン１０６に関連付けられるデータエレメント、ライン１０６のサイズ、オペレーティングシステムコントロールフィールド、及び／又は他のフィールドの任意の組み合わせを含みうる。グローバルオーバーフローテーブル及び第２メモリは、図３−５を参照して以下により詳細に説明する。
【００５３】
したがって、トランザクションの一部としての命令又はオペレーションが、プロセッサ１００のパイプラインを通ると、キャッシュ１０３といったトランザクショナルメモリへのアクセスが追跡される。更に、トランザクショナルメモリがフルである、即ち、オーバーフローする場合、トランザクショナルメモリは、プロセッサ１００上、又は、プロセッサ１００に関連付けられる／結合される他のメモリ内に拡張される。更に、プロセッサ１００内のいずれのレジスタも、トランザクショナルメモリがオーバーフローとなったことを表すオーバーフローフラグと、拡張トランザクショナルメモリのベースアドレスを特定するベースアドレスを格納しうる。
【００５４】
図１に示す例示的なマルチコアアーキテクチャを参照してトランザクショナルメモリを具体的に説明したが、トランザクショナルメモリの拡張及び／又は仮想化は、命令を実行する／データを処理する任意の処理システムにおいて実施されうる。一例として、複数のトランザクションを並列に実行可能な組み込みプロセッサが仮想化されたトランザクショナルメモリを実装しうる。
【００５５】
図２aを参照するに、マルチコアプロセッサ２００の一実施形態を示す。この場合、プロセッサ２００は、４つのコア、即ち、コア２０５−２０８を含むが、任意の数のコアを用いてよい。一実施形態では、メモリ２１０はキャッシュメモリである。ここでは、メモリ２１０は、コア２０５−２０８の機能ボックス外として示す。一実施形態では、メモリ２１０は、第２レベル又は他の上位キャッシュといった共有キャッシュである。しかし、一実施形態では、機能ブロック２０５−２０８は、コア２０５−２０８のアーキテクチャステートを表し、メモリ２１０は、コア２０５又はコア２０５−２０８といった複数のコアのうちの１つに割り当てられる／関連付けられる第１レベル又は下位キャッシュである。したがって、図示するメモリ２１０は、図１に示すメモリ１０３といったコア内の下位キャッシュであっても、図１に示すキャッシュ１４５といった上位キャッシュであっても、複数のレジスタの集合である上述した例のような他の格納エレメントであってもよい。
【００５６】
各コアは、レジスタ２３０、２３５、２４０、及び２４５といったレジスタを含む。一実施形態では、レジスタ２３０、２３５、２４０、及び２４５は、マシン固有レジスタ（ＭＳＲ）である。しかし、レジスタ２３０、２３５、２４０、及び２４５は、各コアのアーキテクチャステートレジスタのセットの一部であるレジスタといった、プロセッサ２００内の任意のレジスタであってよい。
【００５７】
各レジスタは、トランザクションオーバーフローフラグ、即ち、フラグ２３１、２３６、２４１、及び２４６を含む。上述したように、オーバーフローイベントが発生すると、トランザクションオーバーフローフラグがセットされる。オーバーフローフラグは、ハードウェア、ソフトウェア、ファームウェア、又は、これらの任意の組み合わせによってセットされる。一実施形態では、オーバーフローフラグは、２つのロジカルステートを有しうる１つのビットである。しかし、オーバーフローフラグは、任意の数のビットであっても、メモリがオーバーフローした場合を特定するステートの他の表示であってもよい。
【００５８】
例えば、コア２０５上で実行されるトランザクションの一部としてのオペレーションが、キャッシュ２１０をオーバーフローさせる場合、ロジックといったハードウェア、又は、オーバーフローインタラプトを処理すべく呼び出されたユーザハンドラといったソフトウェアが、フラグ２３１をセットする。デフォルトステートである第１のロジカルステートでは、コア２０５は、メモリ２１０を用いてトランザクションを実行する。通常の退避、アクセス追跡、コンフリクトチェック、及びバリデーションが、ブロック２１５、２２０、及び２２５と対応するフィールド２１６、２２１、及び２２６を含むキャッシュ２１０を用いて行われる。しかし、フラグ２３１が、第２のステートにセットされると、キャッシュ２１０は拡張される。フラグ２３１といった１つのフラグがセットされることに基づいて、残りのフラグ２３６、２４１、及び２４６もセットされうる。
【００５９】
例えば、コア２０５−２０８間で送信されるプロトコルメッセージが、１つのオーバーフロービットがセットされたことに基づいて他のフラグをセットする。一例として、オーバーフローフラグ２３１が、この例ではコア２０５内の第１レベルデータキャッシュであるメモリ２１０内で発生したオーバーフローイベントに基づいてセットされたと想定する。一実施形態では、フラグ２３１のセット後、ブロードキャストメッセージが、コア２０５−２０８を相互接続するバス上を送信されて、フラグ２３６、２４１、及び２４６がセットされる。コア２０５−２０８がポイント・ツー・ポイントで、リング、又は他の形式で接続される別の実施形態では、コア２０５からのメッセージが、各コアに送信されるか、又は、コアからコアに転送されて、フラグ２３６、２４１、及び２４６がセットされる。なお、以下に説明するように、同様のメッセージング等をマルチプロセッサフォーマットにおいても行いフラグが複数の物理プロセッサ間でセットされることを確実にしうることに留意されたい。コア２０５−２０８内のフラグがセットされると、次のトランザクションの実行は、アクセス追跡、コンフリクトチェック、及び／又はバリデーションについて仮想化／拡張メモリをチェックするよう通知される。
【００６０】
上記の説明は、複数のコアを有する単一の物理プロセッサ２００に関するものである。しかし、コア２０５−２０８が１つのシステム内の別個の物理プロセッサである場合も同様の構成、プロトコル、ハードウェア、及びソフトウェアを用いる。この場合、各プロセッサが、それぞれのオーバーフローフラグとともにレジスタ２３０、２３５、２４０、及び２４５といったオーバーフローレジスタを有する。１つのオーバーフローフラグがセットされると、残りのフラグも、プロセッサ間の相互接続部上のプロトコル通信を介して同様にセットされうる。ここでは、ブロードキャスティングバス又はポイント・ツー・ポイント相互接続部上での通信交換によって、発生したオーバーフローイベントを表す値にセットされたオーバーフローフラグの値を通信する。
【００６１】
次に、図２ｂを参照するに、オーバーフローフラグを有するマルチコアプロセッサの別の実施形態を示す。図２aとは対照的に、各コア２０５−２０８がオーバーフローレジスタとオーバーフローフラグを含むのではなく、単一のオーバーフローレジスタ２５０とオーバーフローフラグ２５１がプロセッサ２００内に存在する。したがって、オーバーフローイベントが発生すると、フラグ２５１がセットされ、これは、各コア２０５−２０８に対してグローバルに可視である。したがって、フラグ２５１がセットされると、アクセス追跡、バリデーション、コンフリクトチェック、及び、他のトランザクションの実行に関するオペレーションが、グローバルオーバーフローテーブルを用いて行われる。
【００６２】
例示的な実施例として、メモリ２１０が、トランザクションが実行される間にオーバーフローし、その結果、レジスタ２５０内のオーバーフロービット２５１がセットされたと想定する。更に、後続のオペレーションは、仮想化トランザクショナルメモリを用いて追跡されたとする。トランザクションをコミットする前に、メモリ２１０だけがコンフリクトチェック又はバリデーションに使用される場合、オーバーフローメモリによって追跡されたコンフリクト／アクセスは発見されない。しかし、コンフリクトチェック及びバリデーションがオーバーフローメモリを用いて行われる場合、当該コンフリクトは検出され、コンフリクトするトランザクションをコミットするのではなく当該トランザクションはアボートされる。
【００６３】
上述したように、現在セットされていないオーバーフローフラグをセットすると、既に割り当てられていない場合は、グローバルオーバーフローテーブルのためのスペースが要求される／割り当てられる。反対に、トランザクションがコミット又はアボートされると、当該トランザクションに対応するグローバルオーバーフローテーブル内のエントリは解放される。一実施形態では、エントリの解放には、エントリ内のアクセス追跡ステート又は他のフィールドをクリアすることが含まれる。別の実施形態では、エントリの解放には、グローバルオーバーフローテーブルからエントリを削除することが含まれる。オーバーフローテーブル内の最後のエントリが解放されると、グローバルオーバーフロービットは、デフォルトステートとなるようクリアされる。基本的に、グローバルオーバーフローテーブル内の最後のエントリを解放することは、任意のペンディングのトランザクションは、キャッシュ２１０内に納まり、トランザクションの実行のためにオーバーフローメモリが現在使用されないことを表す。図３−５は、オーバーフローメモリ、より具体的にはグローバルオーバーフローテーブルをより詳細に説明する。
【００６４】
図３を参照するに、上位メモリに結合された複数のコアを有するプロセッサの一実施形態を示す。メモリ３１０は、複数のライン３１５、３２０、及び３２５を含む。アクセス追跡フィールド３１６、３２１、及び３２６は、それぞれ、ライン３１５、３２０、及び３２５に対応する。各アクセスフィールドは、メモリ３１０内のこれらのフィールドに対応するラインへのアクセスを追跡する。プロセッサ３００は更に、複数のコア３０５−３０８も含む。なお、メモリ３１０は、コア３０５−３０８のうちの任意のコア内の下位キャッシュでも、コア３０５−３０８によって共有される上位キャッシュであっても、トランザクショナルメモリとして用いられるプロセッサ内の任意の他の既知の又は利用可能であるメモリであってよいことに留意されたい。各コアは、レジスタ３３０、３３５、３４０、及び３４５といった、グローバルオーバーフローテーブル６５５のベースアドレスを格納するレジスタを含む。メモリ３１０を用いてトランザクションを実行する場合は、ベースアドレス３３１、３３６、３４１、及び３４６は、グローバルオーバーフローテーブルは割り当てられていない場合があるので、グローバルオーバーフローテーブルのベースアドレスを格納しなくともよい。
【００６５】
しかし、メモリ３１０がオーバーフローすると、オーバーフローテーブル３５５が割り当てられる。一実施形態では、オーバーフローテーブル３５５がまだ割り当てられていない場合は、メモリ３１０をオーバーフローしたオペレーションに基づいてインタラプト又はページフォルトが生成される。ユーザハンドラ又はカーネルレベルのソフトウェアが、上位メモリ３５０のある範囲を、インタラプト又はページフォルトに基づいてオーバーフローテーブル３５５に割り当てる。別の例として、グローバルオーバーフローテーブルは、オーバーフローフラグがセットされたことに基づいて割り当てられる。この場合、オーバーフローフラグがセットされると、グローバルオーバーフローテーブルへの書込みが試みられる。この書込みが失敗する場合、グローバルオーバーフローテーブル内に新しいページが割り当てられる。
【００６６】
上位メモリ３５０は、上位キャッシュ、プロセッサ３００のみに関連付けられるメモリ、プロセッサ３００を含むシステムにより共有されるシステムメモリ、メモリ３１０より上位にある任意の他のメモリでありうる。オーバーフローテーブル３５５に割り当てられたメモリ３５０の第１の範囲は、オーバーフローテーブル３５５の第１のページと呼ぶ。複数のページを有するオーバーフローテーブルについて、図５を参照しながらより詳細に説明する。
【００６７】
オーバーフローテーブル３５５へのスペースの割り当てした際、又は、オーバーフローテーブル３５５へのメモリの割り当てした後、オーバーフローテーブル３５５のベースアドレスが、レジスタ３３０、３３５、３４０、及び／又は３４５に書込まれる。一実施形態では、カーネルレベルのコードが、グローバルオーバーフローテーブルのベースアドレスをベースアドレスレジスタ３３０、３３５、３４０、及び３４５のそれぞれに書込む。或いは、ハードウェア、ソフトウェア、又はファームウェアが、ベースアドレスをベースアドレスレジスタ３３０、３３５、３４０、及び３４５のうちの１つに書込み、そのベースアドレスは、コア３０５−３０８間のメッセージングプロトコルを介して残りのベースアドレスレジスタに伝えられる。
【００６８】
説明したように、オーバーフローテーブル３５５は、複数のエントリ３６０、３６５、及び３７０を含む。各エントリ３６０、３６５、及び３７０は、それぞれ、アドレスフィールド３６１、３６６、及び３７１と、トランザクションステート情報（ＴＳＩ）フィールド３６２、３６７、及び３７２を含む。オーバーフローテーブル３５５のオペレーションの非常に簡単化した例として、第１のトランザクションからのオペレーションが、対応するアクセスフィールド３１６、３２１、及び３２６のステートによって表されるように、ライン３１５、３２０、及び３２５をアクセスしたと想定する。第１のトランザクションのペンデンシの間に、ライン３１５が退避のために選択される。アクセス追跡フィールド３１６のステートは、ライン３１５が、まだペンディングされている第１のトランザクションの間に前にアクセスされたことを表すので、オーバーフローイベントが発生する。上述したように、オーバーフローフラグ／ビットがセットされうる。更に、ページが割り当てられていない又は追加のページが必要である場合、メモリ３５０内のページがオーバーフローテーブル３５５に割り当てられる。
【００６９】
ページ割り当てが必要ではない場合、グローバルオーバーフローテーブルの現在のベースアドレスがレジスタ３３０、３３５、３４０、又は３４５によって格納される。或いは、最初の割り当ての際に、オーバーフローテーブル３５５のベースアドレスは、レジスタ３３０、３３５、３４０、又は３４５に書込まれる／伝えられる。オーバーフローイベントに基づいて、エントリ３６０がオーバーフローテーブル３５５に書込まれる。エントリ３６０は、ライン３１５に関連付けられるアドレスの表示を格納するアドレスフィールド３６１を含む。
【００７０】
一実施形態では、ライン３１５に関連付けられるアドレスは、ライン３１５に格納されたエレメントのロケーションの物理アドレスである。例えば、物理アドレスは、当該エレメントが格納されるシステムメモリといったホスト格納デバイス内のロケーションの物理アドレスの表示である。オーバーフローテーブル３５５内に物理アドレスを格納することによって、オーバーフローテーブルは、コア３０５−３０８による全てのアクセス間のコンフリクトを検出しうる。
【００７１】
対照的に、仮想メモリアドレスが、アドレスフィールド３６１、３６６、及び３６７に格納される場合、異なる仮想メモリベースアドレスとオフセットを有するプロセッサ又はコアは、メモリの異なるロジカルビューを有する。この結果、同じ物理メモリロケーションへのアクセスはコンフリクトとして検出されない場合があり、これは、物理メモリロケーションの仮想メモリアドレスは、コア間で異なって見られうるからである。しかし、仮想アドレスメモリロケーションが、オペレーティングシステム（ＯＳ）コントロールフィールド内のコンテキスト識別子と組み合わされてオーバーフローテーブル３５５に格納される場合、グローバルのコンフリクトが発見されうる。
【００７２】
ライン３１５に関連付けられるアドレスの表示の他の実施形態は、仮想メモリアドレス、キャッシュラインアドレス、又は他の物理アドレスの一部又は全てを含む。アドレスの表示には、１０進値、１６進値、２進値、ハッシュ値、又は、１つのアドレスの全ての又は任意の一部の他の表示／操作を含む。一実施形態では、アドレスの一部であるタグ値が、アドレスの表示である。
【００７３】
エントリ３６０は、アドレスフィールド３６１に加えて、トランザクションステート情報（ＴＳＩ）フィールド３６２を含む。一実施形態では、ＴＳＩフィールド３６２は、アクセス追跡フィールド３１６のステートを格納する。例えば、アクセス追跡フィールド３１６が、ライン３１５に対する書込み及び読出しをそれぞれ追跡すべく、２つのビット、即ち、トランザクション書込みビット及びトランザクション読出しビットを含む場合、トランザクション書込みビット及びトランザクション読出しビットのロジカルステートが、ＴＳＩフィールド３６２に格納される。しかし、トランザクションに関連する任意の情報をＴＳＩフィールド３６２に格納してよい。オーバーフローテーブル３５５及びオーバーフローテーブル３５５に格納されうる他のフィールドを、図４ａ−４ｂを参照して説明する。
【００７４】
図４ａは、グローバルオーバーフローテーブルの一実施形態を示す。グローバルオーバーフローテーブル４００は、トランザクションが実行される間にメモリをオーバーフローさせたオペレーションに対応するエントリ４０５、４１０、及び４１５を含む。一例として、実行されたトランザクションのあるオペレーションがメモリをオーバーフローさせたとする。エントリ４０５が、グローバルオーバーフローテーブル４００に書込まれる。エントリ４０５は、物理アドレスフィールド４０６を含む。一実施形態では、物理アドレスフィールド４０６は、メモリをオーバーフローさせたオペレーションによって参照されるメモリ内のラインに関連付けられる物理アドレスを格納する。
【００７５】
例示的な例として、トランザクションの一部として実行される第１のオペレーションは、物理アドレスＡＢＣＤを有するシステムメモリロケーションを参照すると想定する。当該オペレーションに基づいて、キャッシュコントローラは、物理アドレスの一部、即ち、ＡＢＣによって退避用のキャッシュラインにマッピングされたキャッシュラインを選択し、その結果、オーバーフローイベントが発生する。なお、ＡＢＣのマッピングには、アドレスＡＢＣに関連付けられる仮想メモリアドレスへの変換も含まれうることに留意されたい。オーバーフローイベントが発生したので、オペレーション及び／又はキャッシュラインに関連付けられるエントリ４０５がオーバーフローテーブル４００に書込まれる。この例では、エントリ４０５は、物理アドレスフィールド４０６に物理アドレスＡＢＣＤの表示を含む。ダイレクト・マップド編成及びセット・アソシエティブ編成といった多くのキャッシュ編成によって、複数のシステムメモリロケーションが、単一のキャッシュライン又は複数のキャッシュラインを含むセットにマッピングされるので、キャッシュラインアドレスは、ＡＢＣＡ、ＡＢＣＢ、ＡＢＣＣ、ＡＢＣＥ等の複数のシステムメモリロケーションを参照しうる。したがって、物理アドレスＡＢＣＤ又はその何らかの表示を、物理アドレス４０６に格納することによって、トランザクションのコンフリクトはより容易に検出することができうる。
【００７６】
物理アドレスフィールド４０６に加えて、他のフィールドには、データフィールド４０７、トランザクションステートフィールド４０８、及びオペレーティングシステムコントロールフィールド４０９が含まれる。データフィールド４０７は、命令、オペランド、データ、又は、メモリをオーバーフローさせるオペレーションに関連付けられる他のロジカル情報といったエレメントを格納する。なお、各メモリラインは、複数のデータエレメント、命令、又は他のロジカル情報を格納可能でありうることに留意されたい。一実施形態では、データフィールド４０７は、退避されるべきメモリライン内の１つのデータエレメント又は複数のデータエレメントを格納する。この場合、データフィールド４０７は、オプションとして用いられうる。例えば、オーバーフローイベントが発生した場合、エレメントは、退避されるべきメモリラインが、変更（modified）ステート又は他のキャッシュコヒーレンシステートにない限り、エントリ４０５に格納されない。また、データフィールド４０７は、命令、オペランド、データエレメント、及び他のロジカル情報に加えて、メモリラインのサイズといった他の情報も含みうる。
【００７７】
トランザクションステートフィールド４０８は、トランザクショナルメモリをオーバーフローさせるオペレーションに関連付けられるトランザクションステート情報を格納する。一実施形態では、キャッシュラインの追加の複数のビットは、そのキャッシュラインへのアクセスに関するトランザクションステート情報を格納するアクセス追跡フィールドである。この場合、追加の複数ビットのロジカルステートが、トランザクションステートフィールド４０８に格納される。基本的に、退避されるメモリラインは仮想化され、物理アドレスとトランザクションステート情報とともに高位メモリに格納される。
【００７８】
更に、エントリ４０５は、オペレーティングシステム（ＯＳ）コントロールフィールド４０９を含む。一実施形態では、ＯＳコントロールフィールド４０９は、実行のコンテキストを追跡する。例えば、ＯＳコントロールフィールド４０９は、エントリ４０５に関連付けられる実行のコンテキストを追跡するコンテキストＩＤの表示を格納する６４ビットのフィールドである。エントリ４１０及び４１５といった複数のエントリも、物理アドレスフィールド４１１及び４１６、データフィールド４１２及び４１３、トランザクションステートフィールド４１３及び４１８、並びにＯＳフィールド４１４及び４１９といった同様のフィールドを含む。
【００７９】
次に、図４ｂを参照するに、トランザクションステート情報を格納するオーバーフローテーブルの具体的な例示的な実施形態を示す。オーバーフローテーブル４００は、図４ａを参照して説明したフィールドと同様のフィールドを含む。対照的に、エントリ４０５、４１０、及び４１５は、トランザクション読出し（Ｔｒ）フィールド４５１、４５６、及び４６１と、トランザクション書込み（Ｔｗ）フィールド４５２、４５７、及び４６２を含む。一実施形態では、Ｔｒフィールド４５１、４５６、及び４６１と、Ｔｗフィールド４５２、４５７、及び４６２は、それぞれ、読出しビット又は書込みビットのステートを格納する。一実施形態では、読出しビット及び書込みビットは、関連付けられたキャッシュラインに対する読出し及び書込みを追跡する。オーバーフローテーブル４００にエントリ４０５を書込むと、読出しビットのステートがＴｒフィールド４５１に格納され、書込みビットのステートがＴｗフィールド４５２に格納される。この結果、トランザクションのステートが、Ｔｒフィールド及びＴｗフィールドにおいてどのエントリがトランザクションのペンデンシ時にアクセスされたのかを示すことによってオーバーフローテーブル４００に格納される。
【００８０】
図５を参照するに、マルチページオーバーフローテーブルの一実施形態を示す。ここでは、メモリ５００内に格納されるオーバーフローテーブル５０５は、ページ５１０、５１５、及び５２０といった複数ページを含む。一実施形態では、プロセッサ内のレジスタが、第１のページ５１０のベースアドレスを格納する。テーブル５０５への書込みが行われると、オフセット、ベースアドレス、物理アドレス、仮想アドレス、又はこれらの組み合わせが、テーブル５０５内のロケーションを参照する。
【００８１】
ページ５１０、５１５、及び５２０は、オーバーフローテーブル５０５において連続的であってよいが連続的である必要はない。実際、一実施形態では、ページ５１０、５１５、及び５２０は、複数のページからなるリンク付けされたリストである。この場合、ページ５１０といった前のページが、次のページ５１５のベースアドレスを、エントリ５１１といったエントリに格納する。
【００８２】
最初は、オーバーフローテーブル５０５内には複数のページが存在しない場合がある。例えば、オーバーフローが発生していない場合は、オーバーフローテーブル５０５にはスペースは割り当てられない。図示しない別のメモリがオーバーフローされると、ページ５１０がオーバーフローテーブル５０５に割り当てられる。ページ５１０内のエントリは、オーバーフロー状態において続行されるトランザクション実行として書込まれる。
【００８３】
一実施形態では、ページ５１０がフルになると、オーバーフローテーブル５０５への書込みが試みられると、ページ５１０内にスペースが残っていないのでページフォルトが生成される。この場合、追加の、即ち、次のページ５１５が割り当てられる。前に試みられたエントリの書込みは、ページ５１５にそのエントリを書込むことにより完了される。更に、ページ５１５のベースアドレスはページ５１０のフィールド５１１に格納され、オーバーフローテーブル５０５用の複数のページからなるリンク付けされたリストが形成される。同様に、ページ５１５も、ページ５２０が割り当てられる場合に、フィールド５１６内にページ５２０のベースアドレスを格納する。
【００８４】
次に、図６を参照するに、トランザクショナルメモリを仮想化可能なシステムの一実施形態を示す。マイクロプロセッサ６００は、キャッシュメモリであるトランザクショナルメモリ（ＴＭ）６１０を含む。一実施形態では、ＴＭ６１０は、図１におけるキャッシュ１０３の例示と同様に、コア６３０内の第１レベルキャッシュである。また、ＴＭ６１０は、コア６３５内の下位キャッシュであってもよい。別の実施形態では、キャッシュ６１０は、上位キャッシュ、又は、プロセッサ６００内のメモリの利用可能なセクションである。キャッシュ６１０は、ライン６１５、６２０、及び６２５を含む。キャッシュライン６１５、６２０、及び６２５に関連付けられる追加のフィールドは、トランザクション読出し（Ｔｒ）フィールド６１６、６２１、及び６２６と、トランザクション書込み（Ｔｗ）フィールド６１７、６２２、及び６２７である。一例として、Ｔｒフィールド６１６とＴｗフィールド６１７はキャッシュライン６１５に対応し、また、キャッシュライン６１５へのアクセスを追跡する。
【００８５】
一実施形態では、Ｔｒフィールド６１６及びＴｗフィールド６１７は、それぞれ、キャッシュライン６１５における単一のビットである。デフォルトとして、Ｔｒフィールド６１６及びＴｗフィールド６１７は、ロジカル１といったデフォルト値にセットされる。ペンディングのトランザクションが実行される間にライン６１５からの読出し又はロードによって、Ｔｒフィールド６１６は、ロジカル０といった第２の値にセットされ、ペンディングのトランザクションが実行される間に読出し／ロードが発生したことを表す。対応して、ペンディングのトランザクション時にライン６１５への書込み又はロードが発生すると、Ｔｗフィールド６１７は第２の値にセットされて、ペンディングのトランザクションが実行される間に発生した書込み又は格納を表す。トランザクションをアボート又はコミットすると、コミット又はアボートされるべき当該トランザクションに関連付けられる全てのＴｒフィールド及びＴｗフィールドは、デフォルトステートにリセットされて、対応するキャッシュラインへのアクセスの次の追跡を可能にする。
【００８６】
マイクロプロセッサ６００は更に、トランザクションを実行するコア６３０及びコア６３５を含む。コア６３０は、オーバーフローフラグ６３２及びベースアドレス６３３を有するレジスタ６３１を含む。更に、ＴＭ６１０がコア６３０内にある実施形態では、ＴＭ６１０は、第１レベルのキャッシュ、又は、コア６３０内で利用可能な格納領域である。同様に、コア６３５は、オーバーフローフラグ６３７、ベースアドレス６３８、及び、可能な場合にはＴＭ６１０を上述したように含む。図６では、レジスタ６３１及び６３６は、別個のレジスタとして示すが、オーバーフローフラグ及びベースアドレスを格納する他の構成も可能である。例えば、マイクロプロセッサ６００上の単一のレジスタがオーバーフローフラグ及びベースアドレスを格納し、コア６３０及び６３５は、当該レジスタをグローバルに見る。或いは、マイクロプロセッサ４００上に別個のレジスタがある、又は、コア６３０及び６３５が、別個のオーバーフローレジスタ及び別個のベースアドレスレジスタを含む。
【００８７】
最初のトランザクションの実行は、トランザクショナルメモリ６１０を用いてトランザクションを実行する。アクセスの追跡、コンフリクトチェック、バリデーション、及びトランザクションの他の実行技術は、Ｔｒ及びＴｗフィールドを用いて行われる。しかし、トランザクションメモリ６１０がオーバーフローされると、トランザクションメモリ６１０は、メモリ６５０へと拡張される。図示するように、メモリ６５０は、プロセッサ６００専用、又は、システム全体で共有されるシステムメモリである。しかし、メモリ６５０は、上述したように第２レベルキャッシュといったプロセッサ６００上のメモリであってもよい。この場合、メモリ６５０内に格納されるオーバーフローテーブル６５５を用いてトランザクショナルメモリ６１０を拡張する。上位メモリへの拡張は、トランザクショナルメモリの仮想化、又は、仮想メモリへの拡張とも呼びうる。ベースアドレスフィールド６３３及び６３８は、システムメモリ６５０内のグローバルオーバーフローテーブルのベースアドレスを格納する。オーバーフローテーブル６５５はマルチページオーバーフローテーブルである一実施形態では、ページ６６０といった前のページが、オーバーフローテーブル６５５の次のページ、即ち、ページ６６５の次のベースアドレスを、フィールド６６１といったフィールドに格納する。次のページのアドレスを前のページに格納することにより、メモリ６５０内に複数のページからなるリンク付けされたリストが作成され、マルチページオーバーフローテーブル６５５が形成される。
【００８８】
トランザクショナルメモリを仮想化するシステムの一実施形態のオペレーションを例示するために以下の例を説明する。第１のトランザクションは、ライン６１５からロードし、ライン６２５からロードし、計算オペレーションを実行し、結果をライン６２０に書込み、バリデーション／コミットを試みる前に他の諸々のオペレーションを実行する。ライン６１５からロードされると、Ｔｒフィールド６１６は、デフォルトのロジカルステート１からロジカル値０にセットされて、ライン６１５からのロードが、まだペンディングである第１のトランザクションが実行される間に発生したことを表す。同様に、Ｔｒフィールド６２６は、ロジカル値０にセットされて、ライン６２５からのロードが表される。ライン６２０への書込みが発生すると、Ｔｗフィールド６２２は、ロジカル０にセットされて、第１のトランザクションのペンデンシ時に発生したライン６２０への書込みを表す。
【００８９】
第２のトランザクションは、第１のトランザクションがまだペンディングである間に、キャッシュライン６１５をミスし、最後に用いられてから最も長い時間が経過したアルゴリズムといった置換アルゴリズムを介して、キャッシュライン６１５が退避のために選択されるオペレーションを含むと想定する。キャッシュコントローラ、又は、図示しない他のロジックは、Ｔｒフィールド６１６が、まだペンディングである第１のトランザクションが実行される間にライン６１５が読出されたことを表すロジカル０にセットされるので、ライン６１５の退避を検出する。ラインの退避は、オーバーフローイベントをもたらす。一実施形態では、ロジックは、オーバーフローイベントに基づいて、オーバーフローフラグ６３２といったオーバーフローフラグをセットする。別の実施形態では、Ｔｒフィールド６１６がロジカル０にセットされてキャッシュライン６１５が退避のために選択されるとインタラプトが生成される。オーバーフローフラグ６３２は、インタラプトの処理に基づいてハンドラによってセットされる。コア６３０と６３６間の通信プロトコルを用いてオーバーフローフラグ６３７がセットされ、これにより、両方のコアは、オーバーフローイベントが発生し、トランザクショナルメモリ６１０が仮想化されるべきであることが通知される。
【００９０】
キャッシュライン６１５を退避させる前に、トランザクショナルメモリ６１０は、メモリ６５０へと拡張される。この場合、トランザクションステート情報が、オーバーフローテーブル６５５に格納される。最初にオーバーフローテーブル６５５が割り当てられていない場合、ページフォルト、インタラプト、又は、カーネルレベルのプログラムへの他の通信が生成されてオーバーフローテーブル６５５の割り当てを要求する。そうするとオーバーフローテーブル６５５のページ６６０が、メモリ６５０内に割り当てられる。オーバーフローテーブル６５５、即ち、ページ６６０のベースアドレスが、ベースアドレスフィールド６３３及び６３８に書込まれる。なお、上述したように、ベースアドレスは、コア６３５といった１つのコアに書込まれ、次に、メッセージングプロトコルを介して、オーバーフローテーブル６５５のベースアドレスはもう１つのベースアドレスフィールド６３３に書込まれてもよいことに留意されたい。
【００９１】
オーバーフローテーブル６５５のページ６６０が既に割り当てられている場合、エントリがページ６６０に書込まれる。一実施形態では、エントリには、ライン６１５に格納されたエレメントに関連付けられる物理アドレスの表示が含まれる。この物理アドレスは、キャッシュライン６１５と、トランザクションメモリ６１０をオーバーフローさせたオペレーションにも関連付けられると言える場合がある。このエントリには、トランザクションステート情報も含まれる。この場合、エントリは、それぞれ、ロジカル０及び１であるＴｒフィールド６１６及びＴｗフィールド６１７の現在のステートを含む。
【００９２】
エントリ内の他の可能なフィールドには、オペランド、命令、又はキャッシュライン６１５に格納された他の情報を格納するエレメントフィールドと、コンテキスト識別子といったオペレーティングシステム（ＯＳ）コントロール情報を格納するＯＳコントロールフィールドが含まれる。エレメントフィールド及び／又はエレメントサイズフィールドを、キャッシュライン６１５のキャッシュコヒーレンシステートに基づいてオプションとして用いうる。例えば、キャッシュラインがＭＥＳＩプロトコルの変更（modified）ステートにある場合、エレメントはエントリに格納される。或いは、エレメントが、排他的（exclusive）ステート、共有（shared）ステート、又は、無効（invalid）ステートにある場合、エントリ内にはエレメントは格納されない。
【００９３】
ページ６６０がエントリで一杯になったことによって、ページ６６０へのエントリの書込みがページフォルトをもたらすと想定すると、オペレーティングシステムといったカーネルレベルのプログラムに、追加のページの要求がなされる。追加のページ６６５は、オーバーフローテーブル６５５に割り当てられる。ページ６６５のベースアドレスは、前のページ６６０のフィールド６６１に格納されて、複数のページからなるリンク付けされたリストが形成される。それ以降、エントリは新しく追加されたページ６６７に書込まれる。
【００９４】
別の実施形態では、ライン６２５からのロード及びライン６２０への書込みに基づいたエントリといった、第１のトランザクションに関連付けられる他のエントリは、オーバーフローに基づいてオーバーフローテーブル６５５に書込まれ、それにより、第１のトランザクション全体を仮想化する。しかし、トランザクションによりアクセスされた全てのラインをオーバーフローテーブルにコピーすることは必要ではない。実際には、アクセスの追跡、バリデーション、コンフリクトチェック、及びトランザクションの他の実行技術は、トランザクショナルメモリ６１０及びメモリ６５０の両方において行われうる。
【００９５】
例えば、第２のトランザクションが、ライン６２５内に現在格納されているエレメントと同じ物理メモリロケーションに書込みを行うと、Ｔｒ６２６が第１のトランザクションはライン６２５からロードしたことを表すので、第１のトランザクションと第２のトランザクションとの間のコンフリクトが検出されうる。この結果、インタラプトが生成され、ユーザハンドラ／アボートハンドラが、第１のトランザクション又は第２のトランザクションのアボートを開始する。更に、第３のトランザクションが、ライン６１５に関連付けられるページ６６０内のエントリの一部である物理アドレスへの書込みである場合。オーバーフローテーブルを用いて、複数のアクセス間のコンフリクトを検出し、同様のインタラプト／アボートハンドラルーチンを開始する。
【００９６】
第１のトランザクションが実行される間に無効なアクセス／コンフリクトが検出されない場合、又は、バリデーションが成功した場合、第１のトランザクションはコミットされる。第１のトランザクションに関連付けられた、オーバーフローテーブル６５５内の全てのエントリは解放される。この場合、エントリを解放することには、オーバーフローテーブル６５５からエントリを削除することが含まれる。或いは、エントリを解放することには、エントリ内のＴｒフィールド及びＴｗフィールドをリセットすることが含まれる。オーバーフローテーブル６５５内の最後のエントリが解放されると、オーバーフローフラグ６３２及び６３７はデフォルトステートにリセットされ、トランザクショナルメモリ６１０は現在オーバーフローしていないことを示す。オーバーフローテーブル６５５は、メモリ６５０を効率よく使用することができるように、オプションとして、割り当てが解除されてもよい。
【００９７】
図７を参照するに、トランザクショナルメモリを仮想化する方法のフロー図の一実施形態を示す。段階７０５において、１つのトランザクションの一部として実行されるオペレーションに関連付けられたオーバーフローイベントが検出される。当該オペレーションは、トランザクショナルメモリにおけるメモリラインを参照する。一実施形態では、当該メモリは、物理プロセッサ上の複数のコアのうちの１つのコア内にある下位データキャッシュである。この場合、第１のコアがトランザクショナルメモリを含み、他のコアは、当該下位データキャッシュに格納されたエレメントに対してスヌープする／要求を出すことができることによってメモリへのアクセスを共有する。或いは、トランザクショナルメモリは、複数のコア間で直接共有される、第２レベル又は上位キャッシュである。
【００９８】
メモリラインを参照するアドレスは、変換、操作、又は他の計算を介して、メモリラインに関連付けられたアドレスを参照するアドレスへの参照を含む。例えば、オペレーションは、変換されると、システムメモリ内の物理ロケーションを参照する仮想メモリメモリアドレスを参照する。大抵の場合、キャッシュは、アドレスのポーション又はタグ値によってインデックス付けされる。したがって、キャッシュの共有ラインをインデックス付けするアドレスのタグ値が、タグ値となるよう変換及び／又は操作される仮想メモリアドレスにより参照される。
【００９９】
一実施形態では、オーバーフローイベントには、オペレーションによって参照されたメモリ内のラインを、そのメモリ内のラインがペンディングのトランザクションによって前にアクセスされている場合に、退避させる又は退避のために選択することが含まれる。或いは、オーバーフローの予測、又は、オーバーフローをもたらすイベントも、オーバーフローイベントとしてみなされうる。
【０１００】
段階７１０において、オーバーフローイベントに基づいてオーバーフロービット／フラグがセットされる。一実施形態では、メモリがオーバーフローすると、トランザクションを実行するようスケジューリングされるコア又はプロセッサ内にオーバーフロービット／フラグを格納するレジスタがアクセスされてオーバーフローフラグがセットされる。レジスタ内のオーバーフローを示すシングルビットは、全てのコア又はプロセッサがグローバルに見ることができ、それにより、どのコアもメモリがオーバーフローして仮想化されたことを認識していることを確実にする。或いは、各コア又はプロセッサは、各プロセッサにオーバーフロー及び仮想化を通知するメッセージングプロトコルを介してセットされるオーバーフロービットを含む。
【０１０１】
オーバーフロービットがセットされると、メモリは仮想化される。一実施形態では、メモリの仮想化には、メモリラインに関連付けられたトランザクションステート情報をグローバルオーバーフローテーブルに保存することを含む。基本的に、メモリのオーバーフローに関連するメモリのラインの表示が、上位メモリにおいて仮想化、拡張、及び／又は部分的に複製される。一実施形態では、アクセス追跡フィールドのステートと、オペレーションによって参照されたメモリのラインに関連付けられた物理アドレスが、上位メモリ内のグローバルオーバーフローテーブルに格納される。上位メモリにおけるエントリは、アクセスの追跡、コンフリクトの検出、トランザクションバリデーションの実行等に、メモリと同様に用いられる。
【０１０２】
図８を参照するに、トランザクショナルメモリを仮想化するシステムのためのフロー図の例示的な実施形態を示す。段階８０５において、１つのトランザクションが実行される。トランザクションには、複数のオペレーション又は命令を有する群が含まれる。上述したように、トランザクションは、ソフトウェア、ハードウェア、又は、それらの組み合わせによって境界設定される。オペレーションは、大抵の場合、仮想メモリアドレスを参照し、このアドレスは、変換されると、システムメモリ内のリニア及び／又は物理アドレスを参照する。キャッシュといった複数のプロセッサ又はコアによって共有されるトランザクショナルメモリは、トランザクションが実行される間にアクセスの追跡、コンフリクトの検出、バリデーションの実行等のために用いられる。一実施形態では、各キャッシュラインは、アクセスフィールドに対応し、これは、上述したオペレーションを実行する際に用いられる。
【０１０３】
段階８１０において、キャッシュ内のキャッシュラインが退避のために選択される。この場合、別のトランザクション又はオペレーションがメモリロケーションへのアクセスを試みることによって、退避すべきキャッシュラインが選択される。キャッシュコントローラ又は他のロジックにより任意の既知の又は利用可能なキャッシュ置換アルゴリズムを用いて退避のためのラインを選択しうる。
【０１０４】
次に、判断段階８１５において、選択されたキャッシュラインは、トランザクションのペンデンシの間に前にアクセスされたかどうか判断される。ここでは、アクセス追跡フィールドをチェックして、選択されたキャッシュラインへのアクセスが発生していたか否かを判断する。アクセスが追跡されない場合には、当該キャッシュラインは、段階８２０において退避される。退避が、トランザクション内のオペレーションによるものである場合、退避／アクセスは追跡されうる。しかし、依然としてペンディング中であるトランザクションの実行時にアクセスが追跡される場合、段階８２５において、グローバルオーバーフロービットが現在セットされているか否か判断される。
【０１０５】
グローバルオーバーフロービットが現在セットされていない場合、段階８３０において、ペンディングのトランザクションが実行される間にアクセスされたキャッシュラインを退避させることによりキャッシュのオーバーフローが発生すると、グローバルオーバーフロービットがセットされる。なお、別の実施形態では、段階８２５は、グローバルオーバーフロービットが現在セットされてキャッシュは既にオーバーフローしていることが示される場合、段階８１５、８２０、及び８３０の前に行っても、段階８１５、８２０、及び８３０は省略してもよい。基本的に、この別の実施形態では、オーバーフロービットは既にキャッシュがオーバーフローしたことを表しているので、オーバーフローイベントを検出する必要はない。
【０１０６】
フロー図を再び参照するに、グローバルオーバーフロービットがセットされている場合、段階８３５において、グローバルオーバーフローテーブルの第１のページが割り当てられているか否か判断される。一実施形態では、グローバルオーバーフローテーブルの第１のページが割り当てられているか否かの判断には、当該ページが割り当てられているか否かを判断すべくカーネルレベルのプログラムと通信することが含まれる。グローバルオーバーフローテーブルが割り当てられていない場合、段階８４０において、第１のページが割り当てられる。ここでは、オペレーティングシステムにメモリのページを割り当てるよう要求することによって、グローバルオーバーフローテーブルが割り当てられる。別の実施形態では、以下により詳細に説明する段階８５５−８７０を用いて、第１のページが割り当てられているか否かを判断し、第１のページを割り当てる。この実施形態には、テーブルが割り当てられていない場合にはページフォルトをもたらす、ベースアドレスを用いたグローバルオーバーフローテーブルへの書込みを試みることと、ページフォルトに基づいてページを割り当てることが含まれる。いずれの場合においても、オーバーフローテーブルの最初のページを割り当てた後、オーバーフローテーブルのベースアドレスは、トランザクションを実行するプロセッサ／コア内のレジスタに書込まれる。その結果、後続の書込みは、レジスタに書込まれたベースアドレスとともに任意のエントリに対して正しい物理メモリロケーションを参照するオフセット、又は、他のアドレスを参照しうる。
【０１０７】
段階８５０において、キャッシュラインに関連付けられたエントリが、グローバルオーバーフローテーブルに書込まれる。上述したように、グローバルオーバーフローテーブルは、次のフィールドの任意の組み合わせを含みうる。即ち、アドレスフィールド、エレメントフィールド、キャッシュラインのサイズフィールド、トランザクションステート情報フィールド、及びオペレーティングシステムコントロールフィールド。
【０１０８】
段階８５５において、書込みした際にページフォルトが発生した否かを判断する。上述したように、ページフォルトは、オーバーフローテーブルの初期の割り当てがないこと、又は、オーバーフローテーブルが現在フルであることによって発生されうる。書込みが成功した場合、通常の実行、バリデーション、アクセスの追跡、コミットメント、アボート等が続行され、段階８０５に戻る。しかし、ページフォルトが、オーバーフローテーブル内にスペースが必要であることを示すべく発生する場合、段階８６０において、グローバルオーバーフローテーブルに追加のページが割り当てられる。段階８７０において、追加のページのベースアドレスは、前のページに書込まれる。これにより、リンク付けされたリスト型の複数のページからなるテーブルが形成される。試みられた書込みは、新しく割り当てられた追加のページに当該エントリを書込むことにより完了される。
【０１０９】
上述したように、ローカルトランザクショナルメモリを用いてハードウェアにおいてトランザクションを実行することによる利点は、小さくあまり複雑でないトランザクションに対して得られる。更に、実行されるトランザクションの数とこれらのトランザクションの複雑さが増加するに従って、トランザクショナルメモリは仮想化されて、ローカルで共有されるトランザクショナルメモリがオーバーフローしても実行を続行することをサポートする。トランザクションをアボートして実行時間を無駄にするのではなく、トランザクションの実行、コンフリクトのチェック、バリデーション、及びコミットメントは、トランザクショナルメモリがオーバーフロー状態でなくなるまでグローバルオーバーフローテーブルを用いて完了される。グローバルオーバーフローは、仮想メモリの異なるビューを有するコンテキスト間のコンフリクトが検出されることを確実にすべく物理アドレスを格納しうる。
【０１１０】
上述した方法、ソフトウェア、ファームウェア、又はコードの実施形態は、処理エレメントによって実行可能な機械アクセス可能又は機械読出し可能媒体上に格納された命令又はコードを介して実施されうる。機械アクセス可能／読出し可能媒体には、コンピュータ又は電子システムといった機械によって読出し可能な形式で情報を提供する（即ち、格納及び／又は送信する）任意の機構が含まれる。例えば、機械アクセス可能媒体には、静的ＲＡＭ（ＳＲＡＭ）又は動的ＲＡＭ（ＤＲＡＭ）といったランダムアクセスメモリ（ＲＡＭ）、ＲＯＭ、磁気又は光格納媒体、フラッシュメモリデバイス、及び、電気、光、音響、又は他の形式の伝播信号（例えば、搬送波、赤外線信号、デジタル信号等）が含まれる。
【０１１１】
上記の明細書において、詳細な説明を具体的な例示的実施形態を参照して与えた。しかし、特許請求の範囲に示す本発明の広義の精神及び範囲から逸脱することなく様々な修正及び変更を実施形態に行いうることは明らかであろう。したがって、明細書及び図面は、限定的ではなく例示的に解釈されるべきである。また、実施形態という用語及び例示的であることを示す他の用語の使用は、必ずしも同じ実施形態又は実施例を指すものではなく、異なる別個の実施形態及び潜在的に同じ実施形態を指すものでありうる。
【図１】
2009537053.tif 000003
【図２ａ】
2009537053.tif 000004
【図２ｂ】
2009537053.tif 000005
【図３】
2009537053.tif 000006
【図４ａ】
2009537053.tif 000007
【図４ｂ】
2009537053.tif 000008
【図５】
2009537053.tif 000009
【図６】
2009537053.tif 000010
【図７】
2009537053.tif 000011
【図８】
2009537053.tif 000012
【国際調査報告】
2009537053.tif 000013