(57)【要約】      （修正有）【課題】トランザクショナル実行によるロックのない同期を利用して複数のプロセッサ間での共有メモリアクセスをハンドリングする。【解決手段】ソフトウェアで境界設定されたトランザクションが投機的に実行される。実行中、共有メモリからロードされたアドレス及び共有メモリに書き込まれるアドレスに対する無効リモートアクセス／要求が、トランザクションバッファによって追跡される（６０５）。無効化アクセスに遭遇した場合、トランザクションは再実行される（６１０）。トランザクションを所定の回数だけ再実行した後（６１５）、トランザクションは、ロック／セマフォで非投機的に再実行することができる（６２０）。【選択図】図６
2011028774.tif 000002
【特許請求の範囲】
【請求項１】
第１のエージェント及びリモートエージェントによって共有される共有メモリと、
トランザクションを実行する実行ロジックであって、該トランザクションは複数の命令を含む、実行ロジックと、
前記複数の命令の実行中に前記共有メモリからロードされた各アドレス及び該共有メモリに書き込まれる各アドレスに対して前記リモートエージェントにより行われる無効化アクセスを追跡するトランザクション追跡ロジックと、
（１）前記共有メモリからロードされた各アドレス及び該共有メモリに書き込まれる各アドレスに対する無効化アクセスが、前記トランザクションの実行中に前記トランザクション追跡ロジックによって追跡されなかった場合に、前記トランザクションをリタイヤさせ、（２）前記共有メモリからロードされたいずれかのアドレス又は該共有メモリに書き込まれるいずれかのアドレスに対する無効化アクセスが、前記トランザクションの実行中に前記トランザクション追跡ロジックによって追跡された場合に、前記トランザクションの再実行を開始する、トランザクションリタイヤロジックと
を備える、装置。
【請求項２】
前記トランザクションが、該トランザクションをリタイヤさせることなく第１の回数だけ再実行される場合、前記トランザクションの実行中に、前記共有メモリからロードされた各アドレス及び該共有メモリに書き込まれる各アドレスに対する前記リモートエージェントのアクセスを拒否するロックアウトメカニズムをさらに備える、請求項１に記載のマイクロプロセッサ。
【請求項３】
前記トランザクションが、該トランザクションをリタイヤさせることなく第１の回数だけ再実行される場合、前記ロックアウトメカニズムは、前記トランザクションの実行中に、前記共有メモリからロードされた各アドレス及び該共有メモリに書き込まれる各アドレスに対する少なくとも１つのリモートエージェントのアクセスを拒否するロックアウトビットを設定するように動作可能なロックアウト回路を備える、請求項２に記載のマイクロプロセッサ。
【請求項４】
前記トランザクションが、該トランザクションをリタイヤさせることなく第１の回数だけ再実行される場合、前記ロックアウトメカニズムは、前記トランザクションの実行中に、前記共有メモリからロードされた各アドレス及び該共有メモリに書き込まれる各アドレスに対する少なくとも１つのリモートエージェントのアクセスを拒否するセマフォを起動するコードを実行するように動作可能なロジックを備える、請求項２に記載のマイクロプロセッサ。
【請求項５】
前記トランザクション追跡ロジックは、複数のマクロオペレーションの実行中に、前記共有メモリからロードされた各アドレスを追跡するロード表と、該共有メモリに書き込まれる各アドレスを追跡する書き込みバッファとを記憶するように動作可能なロジックを備える、請求項１に記載のマイクロプロセッサ。
【請求項６】
ロード表を記憶するように動作可能なロジックは、アドバンストロードアドレス表（ＡＬＡＴ）を含む、請求項１に記載のマイクロプロセッサ。
【請求項７】
前記ロード表は、前記共有メモリからロードされた各アドレスのロードエントリを記憶するように動作可能であり、各ロードエントリは、前記共有メモリからロードされた前記アドレスの表示と無効化アクセスフィールドとを含み、前記書き込みバッファは、前記共有メモリに書き込まれる各アドレスの書き込みエントリを記憶するように動作可能であり、各書き込みエントリは、書き込まれる前記アドレスと、書き込むデータラインと、無効化アクセスフィールドとを含む、請求項５に記載のマイクロプロセッサ。
【請求項８】
前記ロード表は、ロックメカニズムロードエントリをさらに含み、該ロックメカニズムロードエントリは、ソフトウェアによって実施されるロックアウトメカニズムに対するリモートエージェントのアクセスを追跡する、請求項５に記載のマイクロプロセッサ。
【請求項９】
無効化アクセスは、（１）前記リモートエージェントが、前記複数の命令の実行中に前記共有メモリからロードされたアドレスに書き込みを行うこと、又は、（２）前記リモートエージェントが、複数のマイクロオペレーションの実行中に前記共有メモリに書き込まれるアドレスから読み出すこと、若しくは、該アドレスに書き込むことを含む、請求項１に記載のマイクロプロセッサ。
【請求項１０】
前記リモートエージェントは、前記エージェントを含む集積回路上のコア、該エージェントを含む集積回路上のスレッド、該エージェントを含む集積回路上の論理プロセッサ、物理プロセッサ、及び前記エージェントを含む集積回路に接続されるプロセッサから成る群から選択される、請求項９に記載のマイクロプロセッサ。
【請求項１１】
前記共有メモリはキャッシュであり、前記エージェント及び前記リモートエージェントは、前記キャッシュを共有する論理プロセッサである、請求項１に記載のマイクロプロセッサ。
【請求項１２】
トランザクション宣言でトランザクションを境界設定するソフトウェアであって、該トランザクションは、実行される複数のマイクロオペレーションを有するクリティカルセクションを含み、前記トランザクション宣言は、前記トランザクションの境界を特定する識別子と、前記クリティカルセクションが実行された回数を表すカウント変数と、チェック命令とを含む、ソフトウェアと、
前記トランザクションを実行する第１のマイクロプロセッサであって、前記複数のマイクロオペレーション内のロードマイクロオペレーションに関連付けられたアドレスに対する無効化アクセスを追跡するためのロード追跡表を記憶するロジックと、前記複数のマイクロオペレーション内の記憶マイクロオペレーションに関連付けられたアドレスに対する無効化アクセスを追跡するための書き込み追跡表を記憶するロジックと、無効化アクセスの前記ロード追跡表及び前記記憶追跡表を調べるための前記チェック命令を実行するチェックロジックと、（１）前記チェック命令の実行が無効化アクセスのないことを返す場合に、前記トランザクションをリタイヤさせ、（２）前記チェック命令の実行が少なくとも１つの無効化アクセスを返す場合に、前記トランザクションの再実行を開始して前記カウント変数を変更するリタイヤロジックとを備える、第１のマイクロプロセッサと
を備える、システム。
【請求項１３】
前記トランザクション宣言は、設定されると、ロックアウトメカニズムを使用して前記トランザクションを実行するロック述語をさらに含み、前記トランザクションが所定の回数だけ再実行されたことを前記カウント変数が表す場合に、前記ロック述語は設定される、請求項１２に記載のシステム。
【請求項１４】
前記第１のマイクロプロセッサに接続される、前記ソフトウェアを記憶するためのストレージ媒体と、データラインを記憶するためのシステムメモリと、該システムメモリからの近時にアクセスされたデータラインを記憶するための、前記第１のマイクロプロセッサのキャッシュとをさらに備える、請求項１２に記載のシステム。
【請求項１５】
前記ロードマイクロオペレーションに関連付けられたアドレスに対する無効化アクセスは、第１のリモートエージェントが、前記トランザクションの実行中に前記キャッシュからロードされたアドレスに書き込みを行うことを含み、前記記憶マイクロオペレーションに関連付けられたアドレスに対する無効化アクセスは、第２のリモートエージェントが、前記トランザクションの実行中に前記キャッシュに書き込まれるアドレスを読み出すこと又は該アドレスに書き込みを行うことを含む、請求項１４に記載のシステム。
【請求項１６】
前記第１のマイクロプロセッサは複数のコアをさらに備え、各コアは複数の論理プロセッサを有し、前記第１のリモートエージェント及び前記第２のリモートエージェントは、前記トランザクションを実行するようにスケジューリングされていない前記複数のコア又は前記複数の論理プロセッサのいずれか１つである、請求項１５に記載のシステム。
【請求項１７】
第１のトランザクションの投機的実行中に該第１のトランザクションによって参照される共有メモリの複数のラインに対する無効化アクセスを追跡すること、
前記共有メモリの前記複数のラインに対する無効化アクセスが、前記第１のトランザクションの実行中に追跡されるたびに、該第１のトランザクションを投機的に再実行すること、
前記第１のトランザクションを第１の回数だけ投機的に再実行した後、該第１のトランザクションによって参照される前記共有メモリの前記複数のラインに対するアクセスをロックアウトすること、及び
前記共有メモリの前記複数のラインに対するアクセスをロックアウトした後、前記第１のトランザクションを非投機的に再実行すること
を含む、方法。
【請求項１８】
前記共有メモリの前記複数のラインに対する無効化アクセスは、（１）リモートエージェントが、前記第１のトランザクションの投機的実行中にロードされた前記共有メモリの前記複数のラインの１つに書き込みを行うこと、又は、（２）リモートエージェントが、前記第１のトランザクションのコミット時に書き込まれる前記共有メモリの前記複数のラインの１つに書き込みを行うこと若しくは該１つから読み出しを行うことを含む、請求項１７に記載の方法。
【請求項１９】
前記共有メモリのラインに対する無効化アクセスを追跡することは、前記第１のトランザクションの実行中にロードされた前記共有メモリの各ラインについてロード表にロードエントリを記憶することを含み、各ロードエントリは、ロードされた前記ラインに関連付けられたアドレスの表示と、（１）無効化アクセスが前記第１のトランザクションの実行中に行われなかったことを表す第１の値を、前記ロード表に前記ロードエントリを記憶する時に記憶し、且つ、（２）無効化アクセスが前記第１のトランザクションの実行中に行われた場合に第２の値を記憶する、無効化アクセスフィールドとを含む、請求項１７に記載の方法。
【請求項２０】
前記共有メモリのラインに対する無効化アクセスを追跡することは、前記第１のトランザクションの実行の終了時に書き込まれる前記共有メモリの各ラインについて書き込み表に書き込みエントリを記憶することをさらに含み、各書き込みエントリは、書き込まれる前記ラインに関連付けられた物理アドレスの表示と、データフィールドと、（１）無効化アクセスが前記第１のトランザクションの実行中に行われなかったことを表す第１の値を、前記ロード表に前記ロードエントリを記憶する時に記憶し、且つ、（２）無効化アクセスが前記第１のトランザクションの実行中に行われた場合に第２の値を記憶する、無効化アクセスフィールドとを含む、請求項１９に記載の方法。
【請求項２１】
各書き込みエントリ及び各ロードエントリは、前記ロードされたライン又は前記書き込まれるラインの長さを記憶するための長さフィールドをさらに含む、請求項２０に記載の方法。
【請求項２２】
ロードされた各ライン及び書き込まれる各ラインの長さは、プロセッサの設計において暗黙的である、請求項２０に記載の方法。
【請求項２３】
前記第１のトランザクションの実行中に使用される入力レジスタが新しいデータを受信することにバイアスをかける（biasing）ことをさらに含む、請求項１７に記載の方法。
【請求項２４】
第１の入力レジスタが前記第１のトランザクションの実行中に再利用される場合、該第１の入力レジスタの内容を第２のレジスタにスピリングすることをさらに含む、請求項２３に記載の方法。
【請求項２５】
前記トランザクションを投機的に再実行する時に、前記第２のレジスタに記憶された前記内容で前記第１の入力レジスタをリフィリングすることをさらに含む、請求項２４に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、集積回路の分野に関し、詳細には、複数の集積回路、コア、及びスレッドの間の共有データオペレーションに関する。
【背景技術】
【０００２】
半導体処理及び論理設計の進歩によって、集積回路デバイス上に存在できるロジックの量を増加させることが可能になった。その結果、コンピュータシステム構成は、集積回路がシステムに単一又は複数ある状態から、複数のコア及び複数の論理プロセッサが個々の集積回路上に存在する状態に発展した。集積回路は、通常、単一のプロセッサダイを備える。この場合、プロセッサダイは、任意の個数のコア又は論理プロセッサを含むことができる。
【０００３】
一例として、単一の集積回路は、１つ又は複数のコアを有することができる。コアという用語は、通例、集積回路上のロジックが、独立したアーキテクチャ状態を保持する能力を指す。この場合、各独立したアーキテクチャ状態は、専用実行資源に関連付けられている。したがって、２つのコアを有する集積回路は、通常、２つの別個で且つ独立したアーキテクチャ状態を保持するためにロジックを備え、各アーキテクチャ状態は、低レベルキャッシュ、実行ユニット、及び制御ロジック等のそれ自身の実行資源に関連付けられている。各コアは、高レベルキャッシュ、バスインターフェース、及びフェッチ／デコードユニット等のいくつかの資源を共有することができる。
【０００４】
別の例として、単一の集積回路又は単一のコアは、複数のソフトウェアスレッドを実行するための複数の論理プロセッサを有することができる。この単一の集積回路又は単一のコアは、マルチスレッディング集積回路又はマルチスレッディングコアとも呼ばれる。複数の論理プロセッサは、各論理プロセッサの固有のアーキテクチャ状態を保持する一方、通例、共通のデータキャッシュ、命令キャッシュ、実行ユニット、分岐予測器、制御ロジック、バスインターフェース、及び他のプロセッサ資源を共有する。マルチスレッディング技術の一例は、カリフォルニア州サンタクララ所在のＩｎｔｅｌ（登録商標）社が提供しているハイパースレッディング（Hyper-Threading）技術（ＨＴ）である。このＨＴは、信号物理プロセッサを使用して並列のスレッド実行を可能にする。
【０００５】
現在のソフトウェアは、複数のコア又は論理プロセッサの並列実行をスケジューリングできる個々のソフトウェアスレッドを実行する能力を有する。集積回路上のコア及び論理プロセッサの個数が増加の一途をたどることによって、より多くのソフトウェアスレッドを実行することが可能になる。しかしながら、同時に実行できるソフトウェアスレッドの個数の増加によって、ソフトウェアスレッド間で共有されるデータの同期に関する問題が引き起こされている。
【０００６】
複数のコアシステム又は複数の論理プロセッサシステムで共有データにアクセスする１つの一般的な解決策は、共有データへの複数のアクセス全体にわたって相互排除を保証するロックの使用を含む。一例として、第１のソフトウェアスレッドが或る共有メモリロケーションにアクセスしている場合、その共有メモリロケーションを保護するセマフォがロックされて、そのメモリロケーションを保護するセマフォがロック解除されるまで、システムの他のどのソフトウェアスレッドも、その共有メモリロケーションにアクセスすることが排除される。
【０００７】
しかしながら、上述したように、複数のソフトウェアスレッドを実行する能力が増加の一途をたどることによって、フォールスコンテンション（false contention）及び実行のシリアル化がもたらされる可能性がある。フォールスコンテンションは、セマフォが、データの集まりを保護するように一般に配列されることに起因して起こる。これは、ソフトウェアによってサポートされる共有の粒度に応じて、非常に大量のデータを覆う場合がある。この理由により、たとえソフトウェアスレッドが全体として独立したデータアイテムにアクセスしている場合であっても、セマフォは、それらのセマフォについて複数のソフトウェアスレッドによるコンテンションが存在し得るという点で、コンテンション「増幅器」として働く。これによって、第２のソフトウェアスレッドが第１のソフトウェアスレッドの実行を妨げることなく安全にアクセスできるデータロケーションを保護するセマフォを、第１のソフトウェアスレッドがロックする状況がもたらされる。しかし、第１のソフトウェアスレッドがセマフォをロックしたので、第２のスレッドは、セマフォがロック解除されるまで待たなければならず、その結果、通常ならば並列実行であるものがシリアル化されることになる。
【０００８】
本発明を、添付図面の図によって、限定のためではなく一例として説明する。
【発明を実施するための最良の形態】
【０００９】
以下の説明では、本発明の完全な理解を提供するために、具体的な個数の物理／論理プロセッサ、具体的なトランザクションバッファフィールド、具体的なプロセッサロジック及び実施態様等、多数の具体的な詳細を述べる。しかしながら、本発明を実施するのに、これらの具体的な詳細を使用する必要はないことが当業者には明らかであろう。それ以外の場合には、マイクロプロセッサの既知の機能ブロック等、既知のコンポーネント又は方法は、本説明を不必要に分かりにくくすることを回避するために詳細に説明されていない。
【００１０】
本明細書で説明する装置及び方法は、トランザクショナル実行によるロックのない同期を利用して、複数のソフトウェアスレッド間の共有メモリアクセスをハンドリングするためのものである。本明細書で開示する方法及び装置は、携帯情報端末、モバイルプラットフォーム、デスクトッププラットフォーム、及びサーバプラットフォーム等のあらゆるレベルのコンピュータシステム、並びに、任意の個数の集積回路、コア、又は論理プロセッサを用いて実施できることが当業者には容易に明らかであろう。たとえば、４つの集積回路を有するマルチプロセッサシステムは、本明細書で説明する方法及び装置を使用して、集積回路のいずれか４つによって共有されるメモリへの共有アクセスを管理することができる。
【００１１】
図１には、集積回路１０５が示されている。この集積回路１０５は、トランザクショナル実行を実施することができる。一実施形態では、集積回路１０５は、他のマイクロプロセッサとは独立に動作できる１つのマイクロプロセッサである。代替的に、集積回路１０５は、複数の処理エレメントと共に動作する１つの処理エレメントである。
【００１２】
集積回路１０５は、第１のコア１１０、第２のコア１１５、及び第Ｎのコア１２０を示している。コアは、本明細書で使用されるように、独立したアーキテクチャ状態を保持できる集積回路上に配置されるあらゆるロジックを指し、独立して保持される各アーキテクチャ状態は、少なくともいくつかの専用実行資源に関連付けられている。実行資源は、単一又は複数の整数データオペランド及び／又は浮動小数点データオペランドに対して直列又は並列に処理を行うための算術論理演算ユニット（ＡＬＵ）、浮動小数点演算ユニット（ＦＰＵ）、レジスタファイル、オペランドレジスタ、並びにコードを実行するための他のロジックを含むことができる。その上、複数のコアは、高レベルキャッシュ、バスインターフェース並びに制御ロジック及びフェッチ／デコードロジック等の他の資源へのアクセスを共有することもできる。
【００１３】
１つの例示的な説明として、集積回路１０５は８つのコアを有し、各コアは、汎用レジスタ、制御レジスタ、アドバンストプログラマブル割り込み制御（ＡＰＩＣ）レジスタ、マシン状態レジスタ（ＭＳＲ）、又は命令ポインタの状態を記憶するためのレジスタ等、独立したアーキテクチャ状態を保持する一組のアーキテクチャ状態レジスタに関連付けられている。さらに、各一組のアーキテクチャ状態レジスタは、個々の実行ユニットにも排他的に関連付けられている。
【００１４】
また、集積回路１０５は、第１の論理プロセッサ１２５、第２の論理プロセッサ１３０、及び第Ｍの論理プロセッサ１３５を備えるコア１１０も示している。論理プロセッサは、本明細書で使用されるように、独立したアーキテクチャ状態を保持できる集積回路上に配置される任意のロジックを指し、独立して保持されるアーキテクチャ状態は、実行資源へのアクセスを共有する。上記のように、各論理プロセッサは、独立したアーキテクチャ状態を保持する一組のアーキテクチャ状態レジスタを有する。一方、アーキテクチャ状態のそれぞれは、実行資源へのアクセスを共有する。その結果、どの単一の集積回路上にも、任意の個数のコア及び／又は任意の個数の論理プロセッサが存在することができる。例示の目的で、トランザクショナル実行に使用される装置及び方法を解説する際のコア及び／又は論理プロセッサのオペレーションの解説では、プロセッサという用語が引用される。
【００１５】
図２を参照して、集積回路の一実施形態が、トランザクショナル実行の具体的な一実施態様を示すために図示されている。しかしながら、図２に関して説明する方法及び装置は、図５に図示するシステム等、あらゆるレベルのシステムで実施できることは容易に明らかである。一実施形態では、集積回路２０５は、アウトオブオーダの投機的なものとすることができ、この場合、命令は、プログラムで与えられたものとは異なる順序で実行することができる。代替的に、プロセッサ２０５は、インオーダ実行とすることもでき、この場合、命令は、当初のプログラムの順序で発行されて実行される。
【００１６】
集積回路２０５は、任意の個数のプロセッサを備えることができる。これらのプロセッサは、コア又は論理プロセッサとすることができる。たとえば、集積回路２０５は８つのコアを有し、各コアは２つの論理プロセッサを有し、これによって、集積回路２０５上では、同時に１６個のソフトウェアスレッドの実行が可能になる。その結果、集積回路２０５は、通常、マルチスレッディングマルチコアプロセッサと呼ばれる。図２では、集積回路２０５は、本発明を分かりにくくしないように単独で図示されている。しかし、集積回路２０５は、単独で動作することもできるし、又は他のプロセッサと協調して動作することもできる。
【００１７】
また、集積回路２０５は、以下のもののいずれか１つ又はそれらの任意の組み合わせを含むこともできるが、含むように要求されるものではない。以下のものとは、具体的に図示されていないが、データパス、命令パス、仮想メモリアドレス変換ユニット（変換バッファ）、算術論理演算ユニット（ＡＬＵ）、単一の命令又は複数の命令を実行できるだけでなく、単一又は複数のデータオペランドに対して直列又は並列に処理を行うことができる浮動小数点計算ユニット、レジスタ、割り込みコントローラ、アドバンストプログラマブル割り込みコントローラ（ＡＰＩＣ）、プリフェッチユニット、命令再配列ユニット、及び、命令をフェッチ又は実行してデータに対して処理を行うのに使用される他のあらゆるロジックである。
【００１８】
集積回路２０５は、フロントエンド２１０を示している。フロントエンド２１０は、命令フェッチ２１５、命令デコード２２０、及び分岐予測２２５を含むものとして示されている。フロントエンド２１０は、図示するロジックを含むもののみに限定されず、外部データインターフェース２６５及び低レベル命令キャッシュ等の他のロジックも含むことができる。フロントエンド２１０は、集積回路２０５によって実行される命令をフェッチしてデコードする。図示するように、フロントエンド２１０は、フェッチされてデコードされる命令を予測する分岐予測ロジック２２５も含む。フロントエンド２１０は、固定長命令、可変長命令、マクロ命令、又は個々のオペレーションを有する命令をフェッチしてデコードすることができる。
【００１９】
命令は、通例、データオペランドに対して実行される複数のオペレーションを含み、一般に、マクロ命令と呼ばれるのに対して、実行される個々のオペレーションは、一般に、マイクロオペレーションと呼ばれる。一方、命令は、シングルオペレーションと呼ばれる場合もある。したがって、マイクロオペレーションは、本明細書で使用されるように、集積回路２０５によって実行されるあらゆるシングルオペレーションを指すのに対して、命令は、マクロ命令、シングルオペレーション命令、又はその両方を指す。一例として、加算マクロ命令は、第１の関連アドレスから第１のデータオペランドを読み出す第１のマイクロオペレーションと、第２の関連アドレスから第２のデータオペランドを読み出す第２のマイクロオペレーションと、第１のデータオペランド及び第２のデータオペランドを加算して結果を得る第３のマイクロオペレーションと、その結果をレジスタロケーションに記憶する第４のマイクロオペレーションとを含む。
【００２０】
トランザクショナル実行は、通常、複数の命令又はオペレーションをトランザクション又はクリティカルコードセクションにグループ化することを含む。一実施形態では、集積回路２０５のハードウェアが、複数のマクロオペレーションをトランザクションにグループ化する。ハードウェアにおいてトランザクションを特定することは、いくつかの要素を含み、ロック獲得及びロック解放の使用、トランザクションのネスティング、非投機的メモリオペレーションの相互排除、及びトランザクションを組み立てるのに使用される構成体についてのメモリ順序付け要件のオーバレイ等を含む。別の実施形態では、トランザクションはソフトウェアで境界設定される。トランザクションのソフトウェア境界設定は、図５に関してより詳細に解説する。
【００２１】
集積回路２０５は、トランザクション及びクリティカルセクションとも呼ばれる数群のマクロオペレーションを実行する実行ユニット２７５及びレジスタファイル２７０をさらに備える。従来のロック技法と異なり、トランザクショナル実行は、通例、トランザクション／クリティカルセクションを投機的に実行すること、及び、トランザクションの最終ステータスを決定する場合に、投機的実行の終了まで状態更新を延期することを伴う。一例として、クリティカルセクションは、フロントエンド２１０により特定されて、投機的に実行され、その後、別のコアや論理プロセッサ等のリモートエージェントが、クリティカルセクションの実行中にアクセスされたメモリロケーションに対する無効要求を行っていなかった場合に限り、リタイヤロジック２３５によってリタイヤされる。
【００２２】
例示的な説明として、リモートエージェントはメモリ更新デバイスを含む。このメモリ更新デバイスは、保留トランザクションを実行するようにスケジューリングされていないか又は保留トランザクションを実行していない別の集積回路、処理エレメント、コア、論理プロセッサ、又は任意のプロセッサ／デバイスである。通常、無効要求は、トランザクション内のマイクロオペレーションにより操作されるメモリロケーションへのリモートエージェントによる要求／アクセス、トランザクション内のマイクロオペレーションにより操作されるメモリロケーションを保護するセマフォをロックする要求、又は、トランザクション内のマイクロオペレーションにより操作されるメモリロケーションの所有権のリモートエージェントによる要求を含む。無効要求は、図３に関してより詳細に解説する。
【００２３】
トランザクション／クリティカルセクションの実行終了時に、結果が一致していないか又は無効であるとみなされる場合、トランザクション／クリティカルセクションは、リタイヤされず、状態更新は、レジスタにもメモリにもコミットされない。加えて、トランザクションがリタイヤされない場合、トランザクションを再実行するための２つの選択肢として、（１）トランザクションを前に実行されたように投機的に再実行すること、又は、（２）ロック／セマフォを利用してトランザクションを非投機的に再実行することが含まれる。
【００２４】
トランザクションの投機的実行は、メモリ更新及びレジスタ状態更新を含むことができる。一実施形態では、集積回路２０５は、メモリ及びレジスタファイルを更新する前に、トランザクションの実行結果が確実に有効であり且つ一致しているようにするために、投機的なメモリ更新及びレジスタファイル状態更新を保持して融合することができる。１つの例示的な説明として、集積回路２０５は、同じトランザクションの一部として特定されたすべての命令／マイクロオペレーションの結果を、任意の期間の間、投機的／一時的な状態に保持する。投機的なメモリ更新及びレジスタファイル状態更新の保持及び融合を行うために、特別なレジスタチェックポイントハードウェア及びオペランドバイパスロジックが使用されて、投機的な結果が一時レジスタに記憶される。
【００２５】
別の実施形態では、集積回路２０５は、レジスタ状態更新及び命令リタイヤをメモリ更新から切り離すことができる。この実施形態では、投機的な更新は、投機が解消される前にレジスタファイル３７０にコミットされる。一方、メモリ更新は、トランザクションがリタイヤされた後になるまでバッファリングされる。したがって、１つのあり得る利点は、トランザクション内の個々の各命令又は各マイクロオペレーションを実行直後にリタイヤさせることができるということである。さらに、レジスタ状態更新及びメモリ更新を切り離すことによって、アーキテクチャレジスタファイル２７０にコミットする前に投機的な結果を記憶するための余分なレジスタが削減される可能性がある。
【００２６】
一方、この実施形態では、レジスタファイル２７０を投機的に更新することは、レジスタファイル２７０に対する各更新を投機的更新として取り扱うことを伴う。レジスタの再利用及びアロケーションのポリシーは、レジスタファイル２７０に対する更新を投機的更新として考慮することができる。１つの例示的な説明では、トランザクションのデータのバッファリングに使用される入力レジスタは、トランザクションのコミットの保留中に新しいデータを受信することに対してバイアスがかけられている。この例では、トランザクションの期間中に使用される入力レジスタは、新しいデータを受信することに対してバイアスがかけられている。したがって、投機的実行が失敗するか、又は、再起動する必要がある場合、入力レジスタセットは、通例、入力レジスタセットの一部でない他のレジスタが最初に使用されるように、再初期化することなく再利用することができる。
【００２７】
別の例では、入力レジスタが、トランザクションの投機的実行中又はトランザクションのコミットの保留中に新しいデータを受信した場合、再利用された入力レジスタの状態は、別のレジスタ等の別個のストレージエリアに記憶される。入力レジスタの元の内容を記憶することによって、実行が失敗した場合又は再実行が開始した場合に入力レジスタの元の内容を入力レジスタに再ロードすることが可能になる。レジスタの内容を一時的に記憶し、その後、再実行時に再ロードするプロセッサは、通常、スピリング／リフィリングと呼ばれる。
【００２８】
トランザクション／クリティカルセクション内におけるキャッシュ２４０等の共有メモリへのメモリアクセスの一致を追跡して、読み出されたメモリロケーションがまだ同じ情報を有し、更新される／書き込まれるメモリロケーションが別のエージェントによって読み出されたことも更新されたこともないことを確実にすることができる。第１の例として、メモリアクセスは、メモリロケーションのデータ、データオペランド、データライン、又は任意のコンテンツを読み出す／ロードするロードオペレーションである。第２の例として、メモリアクセスは、メモリ更新オペレーション、記憶オペレーション、又は書き込みオペレーションを含む。
【００２９】
一実施形態では、トランザクションバッファ２６５が、キャッシュ２４０等の共有キャッシュにおける、キャッシュライン２４５、２５０、２５５等のデータラインへのアクセスを追跡する。１つの例示的な説明として、キャッシュライン２４５〜２５５は、データライン、関連する物理アドレス、及びタグを含む。関連する物理アドレスは、集積回路２０５の外部のメモリロケーション又は集積回路２０５に位置するメモリロケーションを参照する。
【００３０】
図３に移って、トランザクションバッファ２６５の一実施形態が示されている。トランザクションバッファ２６５は、トランザクション内で共有メモリからロードされた各アドレス及び共有メモリに書き込まれる各アドレスに対するリモートエージェントによる無効要求／アクセスを追跡するトランザクション追跡ロジックを含むことができる。例示的な説明として、リモートエージェントは他の処理エレメントを含む。この他の処理エレメントは、保留トランザクションを実行するようにスケジューリングされていないか又は保留トランザクションを実行していない別の論理プロセッサ、コア、集積回路、処理エレメント、又は任意のプロセッサ／デバイス等である。
【００３１】
一実施形態では、トランザクションバッファ２６５は、保留トランザクションの実行中に、ロード／読み出しを追跡するロード表３０５及び記憶／書き込みを追跡する記憶／書き込みバッファ３２５をそれぞれ含む。ここで、ロード表３０５は、保留トランザクション／クリティカルセクションの実行中に共有メモリからロードされた／読み出された各データラインに対応するロードエントリ３０７等のロードエントリを記憶する。一実施形態では、ロードエントリは、物理アドレス３１０の表示及び無効化アクセスフィールド（ＩＡＦ）３１５を含む。第１の例として、物理アドレス３１０の表示は、メモリロケーションを参照するのに使用される実際の物理アドレスを含む。第２の例として、この表示は、長さ／サイズ情報と共に、ロードされたデータラインを参照するタグ値等の、物理アドレスのコード化されたバージョン又は物理アドレスの一部を含む。ロードされたデータの長さは、設計において暗黙的な場合がある。したがって、ロードされたデータの長さ／サイズの具体的な参照子は必要とされない。一実施形態では、ロードされたデータの暗黙的な長さ／サイズは単一のキャッシュラインである。
【００３２】
１つの例示的な説明では、ＩＡＦ３１５は、ロードエントリ３０７がロード表３０５に最初に記憶された時に第１の値を有し、リモートエージェントが、物理アドレス３１０により参照されるメモリロケーションに対して無効化アクセス又は無効化アクセス要求を行った時に第２の値に変更される。たとえば、無効要求／アクセスは、リモートエージェントが、保留クリティカルセクションの実行中に物理アドレス３１０によって参照されるメモリロケーションに書き込みを行うことに相当する。ここで、物理アドレス３１０は、保留クリティカルセクションの実行中に読み出されたメモリロケーションを表す。単純化された一例として、ＩＡＦ３１５は、ロードエントリ３０７の記憶時に第１の論理値１に初期化される。ロードエントリ３０７は物理アドレス３１０を備える。物理アドレス３１０は、クリティカルセクションの実行中にロードされたメモリロケーションを参照する。リモートエージェントが、保留クリティカルセクションの実行中に物理アドレス３１０によって参照されるメモリロケーションに書き込みを行った場合、ＩＡＦ３１５フィールドは、第２の値０に変更される。この第２の値０は、リモートエージェントが、ロードエントリ３０７によって参照されるメモリロケーションに対して無効化アクセスを行ったことを表す。
【００３３】
一実施形態では、ロード表３０５は、リモートエージェントが行った無効ロック／セマフォ要求を追跡するのにも使用することもできる。トランザクションが実行されると、ロードエントリ３０７等のセマフォロードエントリ又は別個のロードエントリが、トランザクションのセマフォを追跡するのに使用される。セマフォ変数は、そのセマフォ変数の共通のロードオペレーションを使用して追跡することができる。このロードオペレーションは、上述したのと同様の方法で追跡される。実際には、セマフォに対する無効要求を追跡するロードエントリ３０７等のセマフォロードエントリは、物理アドレスフィールド３１０及びＩＡＦ３１５を含む。物理アドレスフィールド３１０は、セマフォ値が記憶される物理アドレスの表示を含むことができる。
【００３４】
上述したロードエントリを作成するオペレーションと類似して、現在のトランザクションのロック変数／セマフォを追跡するためにセマフォロードエントリ３０７をロード表３０５に記憶する時に、ＩＡＦ３１５には第１の値がロードされる。リモートエージェントが、保留トランザクションの実行中に、物理アドレス３１０によって参照されるセマフォでロックを要求又は獲得した場合、ＩＡＦ３１５は第２の値に設定される。この第２の値は、リモートエージェントが実行中のトランザクションにおいてロックを要求／取得したことを表す。複数のエージェントがロックを追跡できることは明らかである。一方、無効は、それらのエージェントのうちの１つが実際のロックを獲得した時に実行される。
【００３５】
ロード表３０５は、図４に示す実施形態に限定されない。一例として、トランザクションバッファ２６５は、ロードエントリ３０７等のどのロードエントリが空（エントリが現在のトランザクションにより使用されておらず、デフォルトデータ又はガベージデータを有する場合がある）であるか、及び、どのロードエントリがフル（エントリが現在のトランザクションによって作成されている）であるかを判断する。ここで、カウンタを使用して、現在のロードエントリを参照するアロケーションポインタの経過を追跡することができる。代替的に、アロケーション追跡フィールド（ＡＴＦ）等の別のフィールドが各ロードエントリ内に存在し、そのロードエントリが空であるのか、又はフルであるのかを追跡する。一例として、ロードエントリ３０７は、論理１等の第１の値を備えたＡＴＦを有する。この第１の値は、現在のトランザクションによって作成されていない空のロードエントリを表す。ロードエントリ３０７のＡＴＦは、ロードエントリ３０７が現在のトランザクションによって作成されると、論理０等の第２の値に変更される。
【００３６】
別の実施形態では、ロードされた／読み出されたデータラインのサイズ／長さは暗黙的ではなく、逆に、長さフィールド等の別のフィールドがロード表３０５内に存在し、ロードされたデータの長さ／サイズを設定する。ロード表３０５は、投機的ロードを追跡するための、この技術分野で既知のアドバンストロードアドレス表（advanced load address table）（ＡＬＡＴ）とすることができる。
【００３７】
図３を再び参照して、記憶書き込みバッファ３２５は、保留トランザクション／クリティカルセクションの実行中に共有メモリ内で書き込み／更新が行われる各データライン又は部分的なデータラインに対応する、書き込みエントリ３２７等の書き込みエントリを記憶する。たとえば、書き込みエントリ３２７は、物理アドレス３３０の表示、無効化アクセスフィールド（ＩＡＦ）３３５、及びデータ保持フィールド３４０を備える。第１の例として、物理アドレス３３０の表示は、保留クリティカルセクションの終了時又は実行中に書き込まれるメモリロケーションを参照するのに使用される実際の物理アドレスを含む。第２の例として、この表示は、保留クリティカルセクションの実行終了時に書き込まれるデータラインを参照するタグ値等の物理アドレスのコード化されたバージョン又は物理アドレスの一部を含む。
【００３８】
上記例について、ＩＡＦ３３５は、書き込みエントリ３２７が書き込み表３２５に最初に記憶された時に第１の値を有し、物理アドレス３３０によるメモリロケーション参照に対する無効化アクセスがリモートエージェントによって行われた時に第２の値に変更される。一実施形態では、無効化アクセスは、リモートエージェントが、保留クリティカルセクションの実行中に物理アドレス３３０によって参照されるメモリロケーションに書き込みを行うことに相当する。加えて、無効化アクセスは、リモートエージェントが、保留クリティカルセクションの実行中に物理アドレス３３０から読み出しを行うことに相当する。もう１つの無効化アクセスは、リモートエージェントが物理アドレス３３０によって参照されるメモリロケーションの所有権を得ることに相当し得る。単純化された一例として、ＩＡＦ３３５は、書き込みエントリ３２７の記憶時に第１の論理値１に初期化される。リモートエージェントが、保留クリティカルセクションの実行中に、物理アドレス３３０によって参照されるメモリロケーションの読み出し又は書き込みを行う場合、ＩＡＦ３２５は、第２の論理値０に変更される。この第２の論理値は、リモートエージェントが、書き込みエントリ３２７によって参照されるメモリロケーションに対する無効化アクセスを行ったことを表す。
【００３９】
書き込みエントリ３２７は、書き込まれる投機的データをバッファリング／保持するデータ保持フィールド３４０をさらに示している。データ保持フィールド３４０は、どの部分が投機的記憶によって対象とされていなかったかということに対して追跡されたデータラインのどの部分が新しいデータを含むかを追跡するのにも使用することができる。変更された部分を追跡することによって、後のコミットプロセス中に実際のメモリロケーションに投機的データを融合することを助けることができる。
【００４０】
一実施形態では、記憶オペレーションからの、書き込まれるラインの所有権は、トランザクション内の個々のオペレーションの実行時及びリタイヤ時に得られる。各個々の書き込み／記憶マイクロオペレーションのリタイヤ時に所有権をプリフェッチする一代替案として、書き込まれる物理アドレスの所有権は、トランザクションのリタイヤ前においてトランザクションが終了するまで得られない。いずれの実施形態でも、トランザクションの終了時に、所有権がトランザクションの実行中に放棄された場合、無効化アクセスが行われたので、トランザクションはリタイヤされない（失敗する）。トランザクションがリタイヤされることになると、書き込まれる各ラインの所有権は、メモリ更新のすべてがコミットされた後になるまで放棄されない。リモートエージェントが、リタイヤ中にラインの所有権を要求する場合、メモリ更新／書き込みのすべてがコミットされるまで、その要求をキューに入れて、保留状態にすることができる。
【００４１】
書き込み表３２５は、図４に示したものに限定されない。書き込み表３２５は、たとえば、図示しないピニングフィールド（pinning field）を含むことができる。このピニングフィールドは、設定された時に、リモートエージェントからキャッシュ等の共有メモリへのスヌープをブロックする。書き込みエントリのピニングフィールドは、対応する物理アドレスに対するスヌープを可能にするために第１の値に設定され、キャッシュラインがピニングされた時は、リモートエージェントによるそのキャッシュラインに対するスヌープをブロックするために第２に値に設定される。ピニングフィールドは、コミットプロセス中に、スヌープをブロックしてどの所有権の変更も認めないようにするのに特に有益となり得る。上述したように、リモートエージェントからの所有権のどの要求も、トランザクションがコミットされた後になるまでキューに入れておくことができる。ピニングフィールドを実施する１つの例示的な方法は、ピニングフィールドが設定されている場合、所定の長さの時間の間、スヌープをブロックすることである。この所定の長さの時間は、存在する記憶バッファの個数に基づく。
【００４２】
書き込み表３２５は、上記ロード表３０５に関して解説した長さフィールドのような、書き込まれる投機的データの長さを記憶するための長さフィールドも含むことができる。任意の個数の他のフィールド又はフィールドの組み合わせを記憶表／バッファ３２５に含めることができる。たとえば、無効化アクセスを行ったリモートエージェントを特定するプロセッサＩＤ又は他のＩＤを追跡するのに、リモートエージェントフィールドが使用される。
【００４３】
トランザクションバッファ２６５は、ハードウェア又はファームウェアで実施することができる。別の例では、トランザクションバッファ３６５は、ソフトウェアで実施され、集積回路２０５によって実行される。さらに別の例では、トランザクションバッファはマイクロコードで実施される。
【００４４】
クリティカルセクション／トランザクション内のすべてのマイクロオペレーションを実行した後、無効化アクセスが保留クリティカルセクションの実行中に行われていなかった場合、トランザクションは通常コミットされる。リタイヤの後、トランザクションは、通常、アトミックな方法（atomic manner）でコミットされる。一例として、保留クリティカルセクションをアトミックに書き込むこと／コミットすることは、クリティカルセクションの実行中にバッファリングされた１つ１つのデータラインを共有メモリに書き込むことを含む。
【００４５】
一実施形態では、保留クリティカルセクションの実行中に追跡された無効化アクセスについてトランザクションバッファ２６５をチェックした後、保留トランザクションは、図２に示すリタイヤロジック２３５によってリタイヤされる。一例として、保留トランザクションをリタイヤさせるために、ロード表３０５に記憶された各ロードエントリＩＡＦ及び記憶表／バッファ３２５に記憶された各書き込みエントリＩＡＦがチェックされる。これらのＩＡＦは、保留トランザクションに関連付けられている。加えて、無効化アクセスが、ロック又はセマフォを要求するリモートエージェントによって行われていなかったことを確実にするために、保留トランザクションのロック変数又はセマフォを追跡するために作成されたあらゆるロードエントリもチェックされる。無効化アクセスが発見されなかった場合、トランザクションのリタイヤは許可され、記憶バッファはピニングされる。ピニングが行われ、リタイヤが許可されると、メモリ更新を直列に行うことができる。なお、ピニング及びリタイヤの許可は同時に行われる。メモリ更新が完了すると、「ピン」ステータスが取り除かれ、ラインは放棄され、トランザクションはコミットされたものとみなされる。
【００４６】
単純化された一例として、トランザクションは、ロケーション０００１から読み出すマイクロオペレーション及び値１０１０をロケーション０００２に書き込むマイクロオペレーションを含む。第１のマイクロオペレーションが実行されると、ロード表３０５は、ロケーション０００１を表す物理アドレスフィールド３１０と、第１の値１を有するＩＡＦ３１５とを含むロードエントリ３０７を記憶する。第２のマイクロオペレーションが実行されると、記憶表３２５は、ロケーション０００２を表す物理アドレス３３０と、第１の値１を有するＩＡＦ３３５と、データフィールド３４０の１０１０とを含む書き込みエントリ３２７を記憶する。加えて、ロードエントリ及び書き込みエントリは、上述したサイズ／長さ情報又は他のフィールドをさらに含むこともできる。リモートエージェントが、実行中又はトランザクションがまだ保留中にロケーション０００１に書き込みを行った場合、ＩＡＦ３１５は、無効化アクセスが行われたことを表す第２の値０に設定される。トランザクションをリタイヤさせようと試みた時、ＩＡＦ３１５は、無効化アクセスを表しており、したがって、トランザクションはリタイヤされず、値１０１０はロケーション０００２に書き込まれない。一方、ＩＡＦ３１５及び３３５で１によって表されるように、リモートエージェントがロケーション０００１に書き込みを行わず、且つ、リモートエージェントがロケーション０００２に対する読み出し／書き込みを行わない場合、トランザクションはリタイヤされ、値１０１０はロケーション０００２に書き込まれる。
【００４７】
無効化アクセスが保留トランザクションの期間中に行われたと判断され、したがって、トランザクションがリタイヤされなかった後、多数の選択肢が存在する。第１の選択肢は、トランザクションを再実行することを含む。上述したように、入力レジスタは、（１）入力レジスタがトランザクションの保留中に新しいデータを受信した場合に、その元の状態に再初期化されるか、又は、（２）入力レジスタがトランザクションの保留中に新しいデータを受信しなかった場合に、入力レジスタの元の状態ですでに存在するかのいずれかである。その結果、トランザクションは、上記と同じ方法で投機的に再実行される。第２の選択肢は、無効化アクセスを行ったリモートエージェントと共にバックオフアルゴリズムを使用してトランザクションを投機的に再実行することを含む。一例として、指数バックオフアルゴリズムが使用されて、リモートエージェントが同じデータを求めて競合することなくトランザクションの完了が試みられる。別の選択肢は、この技術分野で既知のソフトウェア非ブロックメカニズム（software non-blocking mechanism）を使用することであって、それによって、トランザクションを再実行する、使用することを含む。第４の選択肢は、所定の回数だけ投機的にトランザクションを再実行した後、ロック／セマフォで非投機的にトランザクションを再実行することを含む。セマフォは、トランザクション中に読み出されるアドレス及び書き込まれるアドレスを有効にロックする。
【００４８】
第４の選択肢は、失敗メカニズムとしてロック／セマフォを利用するものであるが、ハードウェア、ソフトウェア、又はソフトウェアを実行するためのハードウェアの組み合わせで実施することができる。たとえば、ソフトウェアによって実施されるロックアウトメカニズムでは、セマフォは、あらゆる粒度のメモリロケーションに対するアクセスをロックするのに利用される。一定のメモリロケーションにアクセスしたい各プロセッサは、そのロケーションを保護するセマフォを求めて競合する。セマフォが、ロックがないことを表す第１の値に設定されている場合、第１のプロセッサは、そのアドレス／メモリロケーションがロックされていることを表す第２の値にセマフォを切り換える。セマフォを第２の値に切り換えることにより、セマフォを切り換えたプロセッサは、そのメモリロケーションと、おそらく、そのセマフォによって保護されるメモリロケーションの範囲とに対する排他的なアクセスをソフトウェアを通じて確実に得る。集積回路２０５は、ソフトウェアでセマフォを起動／実行する別個のロックアウトロジック２６０を有することもできるし、単に既存の実行ロジックを使用してソフトウェアロックアウトを実行／起動することもできる。セマフォは、ソフトウェアで実施することができ、したがって、セマフォはシステムメモリ（図示せず）内に存在する場合がある。
【００４９】
図２に示すロックアウトロジック２６０を実施する別の例として、ロックアウトロジック２６０又はロックアウトロジック２６０で実行されるソフトウェアは、少なくとも１つのリモートエージェントが、共有メモリの指定されたラインにアクセスすることを阻止するためのロックアウトメカニズムを使用する。一実施形態では、ロックアウトロジックはロックビットを含む。第１の例として、ハードウェアにおいて、ロックビットは、レジスタ又はキャッシュライン内に存在する。第２の例として、ロックビットは、ロックアウトロジック２６０で実行され且つシステムメモリ内に存在するソフトウェアで表される。
【００５０】
ロックビットが第１の値を有する場合、共有メモリの所定のライン又は指定されたラインへのアクセスが許可される。一方、ロックビットが第２の値を有する場合、共有メモリの指定されたラインへのアクセスは阻止される。ロックビットは、キャッシュ２４０、ロックアウトロジック２６０、プロセッサ２０５の他の任意のメモリ、又はシステムメモリ内に存在することができる。単一のセマフォにより、又は、単一のビットを設定することにより、あらゆる粒度のデータラインをロックすることができる。一例として、２Ｓ個のラインが、単一のロックビットの設定によってロックされる。
【００５１】
フェイルセーフメカニズムとしてセマフォを使用する一例として、トランザクションが、５回等の第１の回数だけ実行されるが、各実行中、リモートエージェントが、例示のアドレス０００１等、そのトランザクションの実行中に読み出されたアドレスに対して無効化アクセスを行う。トランザクションコードの６回目のループで、６の実行しきい値が満たされる。実行のしきい値又は所定の回数が満たされると、セマフォが、トランザクションを実行するのに使用される。
【００５２】
ソフトウェアの実施態様では、アドレス０００１を保護するセマフォを求めて競合が起こる。アドレス０００１が、現在セマフォによってロックされていない場合、セマフォは、現在ロックされていることを表す値に切り換えられる。トランザクションはその後非投機的に再実行される。
【００５３】
一代替形態として、ハードウェアの実施態様では、ロック回路２６３等のロック回路が、トランザクションの６回目の実行中に、アドレス０００１に関連付けられるロックビットを第２の値に設定し、リモートエージェントが、少なくともアドレス０００１にアクセスすることを阻止する。ロック回路２６３は、単一のトランジスタ又は任意の個数のトランジスタから構成することができる。
【００５４】
データラインのロックは、セマフォ又はロックビットの使用に限定されるものではなく、ハードウェアで実施されようとソフトウェアで実施されようと、データラインに対するアクセスを阻止するためのあらゆる方法又は装置を含む。別の例として、トライステートデバイスが、データラインの相互接続アクセスを阻止するのに使用される。
【００５５】
図４に移って、ソフトウェアで境界設定されたトランザクションの一例が示されている。上述したように、トランザクションは、通常、実行される一群の命令／マイクロオペレーションを含む。したがって、トランザクション宣言は、トランザクションを境界設定する任意の方法とすることができる。図４では、トランザクション４１０は、メモリ読み出し、実行オペレーション、メモリ更新／書き込み等のいくつかのオペレーションの例を有する。トランザクション４１０は、トランザクション宣言／識別子４０５によって境界設定される。トランザクション宣言／識別子４０５は、Atomic {…}として図示されている。しかしながら、トランザクション宣言は、そのように限定されるものではない。簡単な例として、複数のオペレーション又は命令をグループ化する一対の括弧が、トランザクション／クリティカルセクションの境界を特定するトランザクション宣言／識別子となる。
【００５６】
トランザクション宣言４０５がコンパイルされた一例が、コンパイル例４１５に示されている。トランザクション４３０の境界は、トランザクション識別子４２５によって特定される。したがって、トランザクションを実行するプロセッサは、この識別子からトランザクション／クリティカルセクションを構成するマイクロオペレーションを特定することができる。トランザクション宣言４０５がコンパイルされた別の例は、コンパイル例４２５に示されている。この例では、トランザクション宣言４３５が、トランザクション４４０の境界を特定する。
【００５７】
この例を１ステップずつ進めていって、ライン１〜３は、トランザクショナル実行を特定し、述語Ｐｘを１に設定し、述語Ｐｙを０に設定し、Ｒｍにおいてカウント変数を０に初期化し、Ｒｎにおいてカウントのしきい値を設定する。述語は、通常、その述語が或る値を有する場合に或るタイプ又は或る実行パスを含み、その述語が別の値を有する場合に別のタイプ又は別の実行パスを含む。ライン４〜９において、カウント変数が、トランザクションが投機的に実行される回数を表す数値に初期化され、次に、カウント変数が、しきい値と比較されるか、又は、そうでない場合には、ロック述語がロック／セマフォ（非投機的）でトランザクションを実行するように設定されるべきかどうかを調べるために評価され、カウント変数は、設計に応じて、トランザクションが実行される回数を表すためにディクリメント又はインクリメントされ、そして、トランザクションが開始される。ライン１０〜１２は、トランザクション４４０のクリティカルセクション内の任意の数のオペレーションを含む。最後に、ライン１４は、トランザクションの実行中にリモートエージェントによって行われた無効化アクセスの、上述したトランザクション追跡ロジック／バッファを調べるためのチェック命令を含む。
【００５８】
図５に移って、トランザクショナル実行を使用するシステムの一実施形態が示されている。マイクロプロセッサ５０５及び５１０が示されているが、システムは、任意の個数の物理的なマイクロプロセッサを有することができ、各物理的なマイクロプロセッサは、トランザクショナル実行を利用する任意の個数のコア又は任意の個数の論理プロセッサを有する。一例として、マイクロプロセッサ５０５及び５１０はそれぞれ、そのダイ内に存在する複数のコアを有する。各コアは、複数のスレッドを有し、その結果、マルチスレッディングコアとなる。一実施形態では、マイクロプロセッサ５０５及び５１０は、アウトオブオーダの投機的実行及び非投機的実行を行うことができる。別の実施形態では、マイクロプロセッサ５０５及び５１０は、インオーダ実行のみを行うことができる。
【００５９】
マイクロプロセッサ５０５及び５１０は、キャッシュ５０７及び５１２を有する。一実施形態では、キャッシュ５０７及び５１２は、システムメモリ５３０から近時にフェッチされたデータ及び／又は命令を記憶する。この実施形態では、キャッシュ５０７及びキャッシュ５１２は、それらのキャッシュの各マイクロプロセッサに私的なデータをキャッシュする。メモリ５３０は、トランザクショナル実行がアクセスするのに使用される共有メモリとすることができる。別の実施形態では、トランザクション中にアクセスされたシステム内に存在するあらゆるメモリが共有メモリである。たとえば、マイクロプロセッサ５０５及び５１０が、図５には図示しない高レベル共有キャッシュにアクセスした場合。
【００６０】
マイクロプロセッサ５０５及び５１０は、相互接続５１５によりメモリコントローラ５２０に接続されて示されている。メモリコントローラは、それぞれ、相互接続５３５によりグラフィックスデバイス５４０に接続されている。一実施形態では、グラフィックスデバイス５４０は、メモリコントローラ５２０に統合されている。メモリコントローラは、相互接続５２５によってシステムメモリ５３０にも接続されている。システムメモリ５３０は、システムで使用される任意のタイプのアクセスメモリとすることができる。一実施形態では、システムメモリ５３０は、ランダムアクセスメモリ（ＲＡＭ）デバイスとすることができる。ランダムアクセスメモリ（ＲＡＭ）デバイスには、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、シングルデータレート（ＳＤＲ）ＲＡＭ、ダブルデータレート（ＤＤＲ）ＲＡＭ、他の任意のマルチデータレートＲＡＭ、又は他の任意のタイプのアクセスメモリ等がある。
【００６１】
入出力（Ｉ／Ｏ）コントローラ５５０は、相互接続５４５を通じてメモリコントローラ５４５に接続されている。Ｉ／Ｏコントローラ５５０は、相互接続５５５によって、ストレージ５６０、ネットワークインターフェース５６５、及びＩ／Ｏデバイス５７０に接続されている。一実施形態では、ストレージ５６０はハードドライブである。別の実施形態では、ストレージ５６０はディスクドライブである。さらに別の実施形態では、ストレージ５６０は、システムにおける任意の静的ストレージデバイスである。一実施形態では、ネットワークインターフェース５６５は、ローカルエリアネットワーク（ＬＡＮ）とインターフェースしている。別の実施形態では、ネットワークインターフェース５６５は、インターネット等のより大きなネットワークとインターフェースしている。入出力デバイス５７０は、キーボード、マウス、モニタ、プリンタ等のあらゆるユーザ入力デバイス又はシステム関連出力デバイスを含むことができる。
【００６２】
次に図６を参照して、トランザクションを実行する方法のフロー図の一実施形態が示されている。ブロック６０５において、第１のトランザクションの実行中、第１のトランザクションによって参照される共有メモリの複数のラインに対する無効化アクセスが追跡される。
【００６３】
一例では、トランザクションバッファが、無効化アクセスを追跡するのに使用される。このトランザクションバッファは、ロード表及び記憶表／バッファを含む。ロード表は、第１のトランザクションの実行中にロードされたアドレスに対する無効化アクセスを追跡する。ロードされたアドレス／メモリロケーションに対する無効化アクセスは、第１のトランザクションを実行するようにスケジューリングされていないプロセッサ、コア、スレッド、論理プロセッサ等のリモートエージェントが、第１のトランザクションの実行中にロードされたアドレス又はメモリロケーションに書き込みを行うことを含む。加えて、ロード表は、トランザクションの実行中のセマフォ又は他のロックアウトメカニズムに対する無効化アクセスを追跡するロックアウトメカニズムエントリも含むことができる。この例では、ロックアウトメカニズムに対する無効化アクセスは、リモートエージェントが、ロックアウトメカニズムによって保護／ロックされたアドレスのロックを要求するか又は得ることを含む。
【００６４】
ロード表と同様に機能する記憶表／バッファは、トランザクションのコミット時に書き込まれるアドレス又はメモリロケーションに対する無効化アクセスを追跡する。ここでの無効化アクセスは、リモートエージェントが、上記アドレス若しくはメモリロケーションから読み出しを行うこと、又はそれらのアドレス若しくはメモリロケーションに書き込みを行うことのいずれかを含むことができる。
【００６５】
ブロック６１０において、無効化アクセスが追跡された場合、第１のトランザクションは、第１の回数だけ再実行される。したがって、無効化アクセスが第１のトランザクションの実行中に追跡された場合、第１のトランザクションは、単に再実行されるだけである。一方、第１のトランザクションが、所定の回数だけ再実行された場合、第１のトランザクションによって参照される共有メモリの複数のラインがロックされる。この所定の回数は、ソフトウェアのカウント変数又はプロセッサ内のロジックによって表すことができる。ロックは、セマフォ等のソフトウェアによって実施されるロックアウトメカニズムを通じて行うことができる。このロックアウトメカニズムは、１つのプロセッサ複数のラインに対する排他的アクセスをロックアウトするか又は与える。また、ロックは、ロックアウトロジックを利用して、第１のトランザクションにより参照される複数のラインへのアクセスを物理的にロックアウトするハードウェアを通じて行うこともできる。
【００６６】
ブロック６２０において、複数のラインに対するアクセスがロックされた後、トランザクションが再び再実行される。したがって、プロセッサは、第１のトランザクションによって参照される複数のラインに対する排他的アクセスを有する。なお、プロセッサは、トランザクションを投機的に再実行していたが、無効化アクセスが追跡されたために結果をコミットできなかったコア又は論理プロセッサとすることができる。その結果、排他的アクセスが実行プロセッサに利用可能であるので、第１のトランザクションを非投機的に実行することができる。
【００６７】
次に図７に移って、トランザクショナル実行のコードフローの一実施形態が示されている。ブロック７０５において、一群のマイクロオペレーションが実行される。この一群のマイクロオペレーションは、共にグループ化された時に、複数の命令又はマクロオペレーションに及ぶ場合がある。上記のように、ブロック７１０において、各ロードマイクロオペレーション及び各記憶マイクロオペレーションに関連付けられた共有メモリロケーションに対する無効化アクセスが追跡される。
【００６８】
ブロック７１５において、第１の群のマイクロオペレーションの実行が、（１）無効化アクセスが追跡されなくなるまで、又は、（２）第１の群のマイクロオペレーションが第１の回数だけ実行されるまで、ループされる。したがって、コードにおける新たなロケーションにジャンプしなければならない代わりに、同じ入力レジスタセットを使用でき、トランザクションは単に再びループすることができる。上述したように、これは、入力レジスタセットが、トランザクションの保留中に新しいデータを受信することに対してバイアスをかけられること、及び、入力レジスタの再利用時に入力レジスタの内容をスピリング／アンドリフィリングすることによって行われる。再度、ブロック７２０において、各ロードマイクロオペレーション及び各記憶マイクロオペレーションに関連した共有メモリロケーションがロックされ、第１の群のマイクロオペレーションが再実行される。
【００６９】
上述したようなトランザクショナル実行は、トランザクションの実行中のメモリロケーションに対する無効化アクセスを追跡することによって、ロックアーキテクチャに起こる可能性のあるフォールスコンテンションを回避し、コンテンションを実際のコンテンションに限定する。さらに、トランザクションが所定の回数だけ再実行された場合、実際のコンテンションは発生し続けるので、トランザクションを所定の回数だけ投機的に実行することを試みた後、トランザクションは、ロック／セマフォを利用して非投機的に実行され、トランザクションが確実に実行されてコミットされるようにする。代替的に、非投機的実行方法の代わりに、ソフトウェア非ブロックメカニズムを使用することもできる。上述したように、投機的なレジスタ状態更新／コミットは、トランザクションの「存在する」（live-in）データが元の入力レジスタに確実に保存されるようにすることによるか、又は、入力データ値を保存ロケーションにコピーすることによって、ソフトウェアでサポートすることができる。保存ロケーションは、他のレジスタ又はメモリのいずれかとすることができ、トランザクションをリタイヤさせなければならない場合、この保存ロケーションから、入力データ値を元の状態に戻すことができる。また、プロセッサは、場合によっては、アウトオブオーダ実行をサポートするのに通常使用されるメカニズムを使用して、レジスタ状態をバッファリングするハードウェアメカニズムも含むことができる。
【００７０】
上記明細書では、本発明を、その具体的な例示の実施形態に関して説明してきた。しかしながら、添付の特許請求の範囲で述べられるような本発明のより広い精神及び範囲から逸脱することなく、それらの実施形態にさまざまな修正及び変更を行えることが明らかであろう。したがって、本明細書及び図面は、限定的な意味ではなく例示の意味で考慮されるべきである。
【図面の簡単な説明】
【００７１】
【図１】Ｎ個のコアを有し、且つ、Ｎ個のコアのそれぞれにＭ個の論理プロセッサを有する集積回路である。
【図２】トランザクショナル実行を実施するための集積回路の一実施形態である。
【図３】図３に示すトランザクションバッファの一実施形態である。
【図４】コンパイルされたコードの第１の実施形態及び第２の実施形態にコンパイルされて示されるソフトウェアコードで境界設定されたトランザクションである。
【図５】システムにおけるトランザクショナル実行の一実施形態である。
【図６】トランザクションを実行する方法のフロー図の一実施形態である。
【図７】トランザクショナル実行のコードフローの一実施形態である。
【図１】
2011028774.tif 000003
【図２】
2011028774.tif 000004
【図３】
2011028774.tif 000005
【図４】
2011028774.tif 000006
【図５】
2011028774.tif 000007
【図６】
2011028774.tif 000008
【図７】
2011028774.tif 000009
【手続補正書】
【提出日】平成22年10月1日(2010.10.1)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
トランザクションを実行する装置であって、
キャッシュメモリと、
トランザクションを実行する実行ロジックと、
前記キャッシュメモリから前記トランザクション内のトランザクショナルロードを追跡すべくロードバッファエントリを保持するロードバッファと、
前記トランザクション内のトランザクショナル書き込みから書き込みデータをバッファする書き込みバッファと、
前記ロードバッファエントリにおける前記トランザクショナルロードに関連するアドレスに対するリモート書き込みを含む無効アクセスを前記トランザクションの実行中に追跡する追跡ロジックと、
前記トランザクション内のコミットオペレーションが生じ、かつ前記追跡ロジックが前記トランザクションの実行中に無効アクセスを追跡しなかったことに対応して、前記キャッシュメモリに対して前記書き込みバッファ内の前記書き込みデータをコミットするコミットロジックと、
前記追跡ロジックが前記トランザクションの実行中に無効化アクセスを追跡したことに対応して前記書き込みバッファ内の前記書き込みデータを放棄する中断ロジックと
を備える装置。
【請求項２】
前記ロードバッファエントリは無効化アクセスフィールドに関連付けられたアドレスを含み、
前記追跡ロジックは、前記アドレスに対する前記リモート書き込みを検出したことに対応して前記無効化アクセスフィールドに無効化値を設定する請求項１に記載の装置。
【請求項３】
前記ロードバッファエントリは、さらに前記トランザクショナルロードによってロードされるデータの長さを含む請求項２に記載の装置。
【請求項４】
トランザクションを実行する方法であって、
トランザクションの実行を開始すること、
トランザクション内のアドレスからトランザクショナルロードを追跡すべくロードバッファにロードバッファエントリを割り当てること、
前記トランザクション内のトランザクショナル書き込みから書き込みデータをバッファすべく書き込みバッファに書き込みバッファエントリを割り当てること、
前記トランザクションの実行中に前記ロードバッファエントリにおける前記トランザクショナルロードに関連する前記アドレスに対するリモート書き込みを追跡したことに対応して、前記トランザクションを中断して前記書き込みバッファから前記書き込みデータを放棄すること、
前記トランザクションの実行中に無効化アクセスを追跡しなかったことに対応して、前記書き込みバッファにおける前記書き込みデータをキャッシュメモリに移動することを含む前記トランザクションをコミットすること
を備える方法。
【請求項５】
前記ロードバッファエントリは、無効化アクセスフィールドに関連するアドレスを含み、
前記トランザクションの実行中に前記アドレスに対するリモート書き込みを追跡したことに対応して、前記無効化アクセスフィールドを無効化値に更新することをさらに備える請求項４に記載の方法。
【請求項６】
前記ロードバッファエントリは、さらに前記トランザクショナルロードによってロードされるデータの長さを含む請求項５に記載の方法。
【請求項７】
トランザクションの実行を開始すること、
トランザクション内のアドレスからトランザクショナルロードを追跡すべくロードバッファにロードバッファエントリを割り当てること、
前記トランザクション内のトランザクショナル書き込みから書き込みデータをバッファすべく書き込みバッファに書き込みバッファエントリを割り当てること、
前記トランザクションの実行中に前記ロードバッファエントリにおける前記トランザクショナルロードに関連する前記アドレスに対するリモート書き込みを追跡したことに対応して、前記トランザクションを中断して前記書き込みバッファから前記書き込みデータを放棄すること、
前記トランザクションの実行中に無効化アクセスを追跡しなかったことに対応して、前記書き込みバッファにおける前記書き込みデータをキャッシュメモリに移動することを含む前記トランザクションをコミットすること
をコンピュータに実行させるためのプログラム。
【請求項８】
前記ロードバッファエントリは、無効化アクセスフィールドに関連するアドレスを含み、
前記トランザクションの実行中に前記アドレスに対するリモート書き込みを追跡したことに対応して、前記無効化アクセスフィールドを無効化値に更新することをさらに前記コンピュータに実行させる請求項７に記載のプログラム。
【請求項９】
前記ロードバッファエントリは、さらに前記トランザクショナルロードによってロードされるデータの長さを含む請求項８に記載のプログラム。
【外国語明細書】
2011028774000001.pdf