説明

マルチプロセッサ環境におけるトランザクションベースの共有データオペレーション

【課題】トランザクショナル実行によるロックのない同期を利用して複数のプロセッサ間での共有メモリアクセスをハンドリングする。
【解決手段】ソフトウェアで境界設定されたトランザクションが投機的に実行される。実行中、共有メモリからロードされたアドレス及び共有メモリに書き込まれるアドレスに対する無効リモートアクセス/要求が、トランザクションバッファによって追跡される(605)。無効化アクセスに遭遇した場合、トランザクションは再実行される(610)。トランザクションを所定の回数だけ再実行した後(615)、トランザクションは、ロック/セマフォで非投機的に再実行することができる(620)。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、集積回路の分野に関し、詳細には、複数の集積回路、コア、及びスレッドの間の共有データオペレーションに関する。
【背景技術】
【0002】
半導体処理及び論理設計の進歩によって、集積回路デバイス上に存在できるロジックの量を増加させることが可能になった。その結果、コンピュータシステム構成は、集積回路がシステムに単一又は複数ある状態から、複数のコア及び複数の論理プロセッサが個々の集積回路上に存在する状態に発展した。集積回路は、通常、単一のプロセッサダイを備える。この場合、プロセッサダイは、任意の個数のコア又は論理プロセッサを含むことができる。
【0003】
一例として、単一の集積回路は、1つ又は複数のコアを有することができる。コアという用語は、通例、集積回路上のロジックが、独立したアーキテクチャ状態を保持する能力を指す。この場合、各独立したアーキテクチャ状態は、専用実行資源に関連付けられている。したがって、2つのコアを有する集積回路は、通常、2つの別個で且つ独立したアーキテクチャ状態を保持するためにロジックを備え、各アーキテクチャ状態は、低レベルキャッシュ、実行ユニット、及び制御ロジック等のそれ自身の実行資源に関連付けられている。各コアは、高レベルキャッシュ、バスインターフェース、及びフェッチ/デコードユニット等のいくつかの資源を共有することができる。
【0004】
別の例として、単一の集積回路又は単一のコアは、複数のソフトウェアスレッドを実行するための複数の論理プロセッサを有することができる。この単一の集積回路又は単一のコアは、マルチスレッディング集積回路又はマルチスレッディングコアとも呼ばれる。複数の論理プロセッサは、各論理プロセッサの固有のアーキテクチャ状態を保持する一方、通例、共通のデータキャッシュ、命令キャッシュ、実行ユニット、分岐予測器、制御ロジック、バスインターフェース、及び他のプロセッサ資源を共有する。マルチスレッディング技術の一例は、カリフォルニア州サンタクララ所在のIntel(登録商標)社が提供しているハイパースレッディング(Hyper-Threading)技術(HT)である。このHTは、信号物理プロセッサを使用して並列のスレッド実行を可能にする。
【0005】
現在のソフトウェアは、複数のコア又は論理プロセッサの並列実行をスケジューリングできる個々のソフトウェアスレッドを実行する能力を有する。集積回路上のコア及び論理プロセッサの個数が増加の一途をたどることによって、より多くのソフトウェアスレッドを実行することが可能になる。しかしながら、同時に実行できるソフトウェアスレッドの個数の増加によって、ソフトウェアスレッド間で共有されるデータの同期に関する問題が引き起こされている。
【0006】
複数のコアシステム又は複数の論理プロセッサシステムで共有データにアクセスする1つの一般的な解決策は、共有データへの複数のアクセス全体にわたって相互排除を保証するロックの使用を含む。一例として、第1のソフトウェアスレッドが或る共有メモリロケーションにアクセスしている場合、その共有メモリロケーションを保護するセマフォがロックされて、そのメモリロケーションを保護するセマフォがロック解除されるまで、システムの他のどのソフトウェアスレッドも、その共有メモリロケーションにアクセスすることが排除される。
【0007】
しかしながら、上述したように、複数のソフトウェアスレッドを実行する能力が増加の一途をたどることによって、フォールスコンテンション(false contention)及び実行のシリアル化がもたらされる可能性がある。フォールスコンテンションは、セマフォが、データの集まりを保護するように一般に配列されることに起因して起こる。これは、ソフトウェアによってサポートされる共有の粒度に応じて、非常に大量のデータを覆う場合がある。この理由により、たとえソフトウェアスレッドが全体として独立したデータアイテムにアクセスしている場合であっても、セマフォは、それらのセマフォについて複数のソフトウェアスレッドによるコンテンションが存在し得るという点で、コンテンション「増幅器」として働く。これによって、第2のソフトウェアスレッドが第1のソフトウェアスレッドの実行を妨げることなく安全にアクセスできるデータロケーションを保護するセマフォを、第1のソフトウェアスレッドがロックする状況がもたらされる。しかし、第1のソフトウェアスレッドがセマフォをロックしたので、第2のスレッドは、セマフォがロック解除されるまで待たなければならず、その結果、通常ならば並列実行であるものがシリアル化されることになる。
【0008】
本発明を、添付図面の図によって、限定のためではなく一例として説明する。
【発明を実施するための最良の形態】
【0009】
以下の説明では、本発明の完全な理解を提供するために、具体的な個数の物理/論理プロセッサ、具体的なトランザクションバッファフィールド、具体的なプロセッサロジック及び実施態様等、多数の具体的な詳細を述べる。しかしながら、本発明を実施するのに、これらの具体的な詳細を使用する必要はないことが当業者には明らかであろう。それ以外の場合には、マイクロプロセッサの既知の機能ブロック等、既知のコンポーネント又は方法は、本説明を不必要に分かりにくくすることを回避するために詳細に説明されていない。
【0010】
本明細書で説明する装置及び方法は、トランザクショナル実行によるロックのない同期を利用して、複数のソフトウェアスレッド間の共有メモリアクセスをハンドリングするためのものである。本明細書で開示する方法及び装置は、携帯情報端末、モバイルプラットフォーム、デスクトッププラットフォーム、及びサーバプラットフォーム等のあらゆるレベルのコンピュータシステム、並びに、任意の個数の集積回路、コア、又は論理プロセッサを用いて実施できることが当業者には容易に明らかであろう。たとえば、4つの集積回路を有するマルチプロセッサシステムは、本明細書で説明する方法及び装置を使用して、集積回路のいずれか4つによって共有されるメモリへの共有アクセスを管理することができる。
【0011】
図1には、集積回路105が示されている。この集積回路105は、トランザクショナル実行を実施することができる。一実施形態では、集積回路105は、他のマイクロプロセッサとは独立に動作できる1つのマイクロプロセッサである。代替的に、集積回路105は、複数の処理エレメントと共に動作する1つの処理エレメントである。
【0012】
集積回路105は、第1のコア110、第2のコア115、及び第Nのコア120を示している。コアは、本明細書で使用されるように、独立したアーキテクチャ状態を保持できる集積回路上に配置されるあらゆるロジックを指し、独立して保持される各アーキテクチャ状態は、少なくともいくつかの専用実行資源に関連付けられている。実行資源は、単一又は複数の整数データオペランド及び/又は浮動小数点データオペランドに対して直列又は並列に処理を行うための算術論理演算ユニット(ALU)、浮動小数点演算ユニット(FPU)、レジスタファイル、オペランドレジスタ、並びにコードを実行するための他のロジックを含むことができる。その上、複数のコアは、高レベルキャッシュ、バスインターフェース並びに制御ロジック及びフェッチ/デコードロジック等の他の資源へのアクセスを共有することもできる。
【0013】
1つの例示的な説明として、集積回路105は8つのコアを有し、各コアは、汎用レジスタ、制御レジスタ、アドバンストプログラマブル割り込み制御(APIC)レジスタ、マシン状態レジスタ(MSR)、又は命令ポインタの状態を記憶するためのレジスタ等、独立したアーキテクチャ状態を保持する一組のアーキテクチャ状態レジスタに関連付けられている。さらに、各一組のアーキテクチャ状態レジスタは、個々の実行ユニットにも排他的に関連付けられている。
【0014】
また、集積回路105は、第1の論理プロセッサ125、第2の論理プロセッサ130、及び第Mの論理プロセッサ135を備えるコア110も示している。論理プロセッサは、本明細書で使用されるように、独立したアーキテクチャ状態を保持できる集積回路上に配置される任意のロジックを指し、独立して保持されるアーキテクチャ状態は、実行資源へのアクセスを共有する。上記のように、各論理プロセッサは、独立したアーキテクチャ状態を保持する一組のアーキテクチャ状態レジスタを有する。一方、アーキテクチャ状態のそれぞれは、実行資源へのアクセスを共有する。その結果、どの単一の集積回路上にも、任意の個数のコア及び/又は任意の個数の論理プロセッサが存在することができる。例示の目的で、トランザクショナル実行に使用される装置及び方法を解説する際のコア及び/又は論理プロセッサのオペレーションの解説では、プロセッサという用語が引用される。
【0015】
図2を参照して、集積回路の一実施形態が、トランザクショナル実行の具体的な一実施態様を示すために図示されている。しかしながら、図2に関して説明する方法及び装置は、図5に図示するシステム等、あらゆるレベルのシステムで実施できることは容易に明らかである。一実施形態では、集積回路205は、アウトオブオーダの投機的なものとすることができ、この場合、命令は、プログラムで与えられたものとは異なる順序で実行することができる。代替的に、プロセッサ205は、インオーダ実行とすることもでき、この場合、命令は、当初のプログラムの順序で発行されて実行される。
【0016】
集積回路205は、任意の個数のプロセッサを備えることができる。これらのプロセッサは、コア又は論理プロセッサとすることができる。たとえば、集積回路205は8つのコアを有し、各コアは2つの論理プロセッサを有し、これによって、集積回路205上では、同時に16個のソフトウェアスレッドの実行が可能になる。その結果、集積回路205は、通常、マルチスレッディングマルチコアプロセッサと呼ばれる。図2では、集積回路205は、本発明を分かりにくくしないように単独で図示されている。しかし、集積回路205は、単独で動作することもできるし、又は他のプロセッサと協調して動作することもできる。
【0017】
また、集積回路205は、以下のもののいずれか1つ又はそれらの任意の組み合わせを含むこともできるが、含むように要求されるものではない。以下のものとは、具体的に図示されていないが、データパス、命令パス、仮想メモリアドレス変換ユニット(変換バッファ)、算術論理演算ユニット(ALU)、単一の命令又は複数の命令を実行できるだけでなく、単一又は複数のデータオペランドに対して直列又は並列に処理を行うことができる浮動小数点計算ユニット、レジスタ、割り込みコントローラ、アドバンストプログラマブル割り込みコントローラ(APIC)、プリフェッチユニット、命令再配列ユニット、及び、命令をフェッチ又は実行してデータに対して処理を行うのに使用される他のあらゆるロジックである。
【0018】
集積回路205は、フロントエンド210を示している。フロントエンド210は、命令フェッチ215、命令デコード220、及び分岐予測225を含むものとして示されている。フロントエンド210は、図示するロジックを含むもののみに限定されず、外部データインターフェース265及び低レベル命令キャッシュ等の他のロジックも含むことができる。フロントエンド210は、集積回路205によって実行される命令をフェッチしてデコードする。図示するように、フロントエンド210は、フェッチされてデコードされる命令を予測する分岐予測ロジック225も含む。フロントエンド210は、固定長命令、可変長命令、マクロ命令、又は個々のオペレーションを有する命令をフェッチしてデコードすることができる。
【0019】
命令は、通例、データオペランドに対して実行される複数のオペレーションを含み、一般に、マクロ命令と呼ばれるのに対して、実行される個々のオペレーションは、一般に、マイクロオペレーションと呼ばれる。一方、命令は、シングルオペレーションと呼ばれる場合もある。したがって、マイクロオペレーションは、本明細書で使用されるように、集積回路205によって実行されるあらゆるシングルオペレーションを指すのに対して、命令は、マクロ命令、シングルオペレーション命令、又はその両方を指す。一例として、加算マクロ命令は、第1の関連アドレスから第1のデータオペランドを読み出す第1のマイクロオペレーションと、第2の関連アドレスから第2のデータオペランドを読み出す第2のマイクロオペレーションと、第1のデータオペランド及び第2のデータオペランドを加算して結果を得る第3のマイクロオペレーションと、その結果をレジスタロケーションに記憶する第4のマイクロオペレーションとを含む。
【0020】
トランザクショナル実行は、通常、複数の命令又はオペレーションをトランザクション又はクリティカルコードセクションにグループ化することを含む。一実施形態では、集積回路205のハードウェアが、複数のマクロオペレーションをトランザクションにグループ化する。ハードウェアにおいてトランザクションを特定することは、いくつかの要素を含み、ロック獲得及びロック解放の使用、トランザクションのネスティング、非投機的メモリオペレーションの相互排除、及びトランザクションを組み立てるのに使用される構成体についてのメモリ順序付け要件のオーバレイ等を含む。別の実施形態では、トランザクションはソフトウェアで境界設定される。トランザクションのソフトウェア境界設定は、図5に関してより詳細に解説する。
【0021】
集積回路205は、トランザクション及びクリティカルセクションとも呼ばれる数群のマクロオペレーションを実行する実行ユニット275及びレジスタファイル270をさらに備える。従来のロック技法と異なり、トランザクショナル実行は、通例、トランザクション/クリティカルセクションを投機的に実行すること、及び、トランザクションの最終ステータスを決定する場合に、投機的実行の終了まで状態更新を延期することを伴う。一例として、クリティカルセクションは、フロントエンド210により特定されて、投機的に実行され、その後、別のコアや論理プロセッサ等のリモートエージェントが、クリティカルセクションの実行中にアクセスされたメモリロケーションに対する無効要求を行っていなかった場合に限り、リタイヤロジック235によってリタイヤされる。
【0022】
例示的な説明として、リモートエージェントはメモリ更新デバイスを含む。このメモリ更新デバイスは、保留トランザクションを実行するようにスケジューリングされていないか又は保留トランザクションを実行していない別の集積回路、処理エレメント、コア、論理プロセッサ、又は任意のプロセッサ/デバイスである。通常、無効要求は、トランザクション内のマイクロオペレーションにより操作されるメモリロケーションへのリモートエージェントによる要求/アクセス、トランザクション内のマイクロオペレーションにより操作されるメモリロケーションを保護するセマフォをロックする要求、又は、トランザクション内のマイクロオペレーションにより操作されるメモリロケーションの所有権のリモートエージェントによる要求を含む。無効要求は、図3に関してより詳細に解説する。
【0023】
トランザクション/クリティカルセクションの実行終了時に、結果が一致していないか又は無効であるとみなされる場合、トランザクション/クリティカルセクションは、リタイヤされず、状態更新は、レジスタにもメモリにもコミットされない。加えて、トランザクションがリタイヤされない場合、トランザクションを再実行するための2つの選択肢として、(1)トランザクションを前に実行されたように投機的に再実行すること、又は、(2)ロック/セマフォを利用してトランザクションを非投機的に再実行することが含まれる。
【0024】
トランザクションの投機的実行は、メモリ更新及びレジスタ状態更新を含むことができる。一実施形態では、集積回路205は、メモリ及びレジスタファイルを更新する前に、トランザクションの実行結果が確実に有効であり且つ一致しているようにするために、投機的なメモリ更新及びレジスタファイル状態更新を保持して融合することができる。1つの例示的な説明として、集積回路205は、同じトランザクションの一部として特定されたすべての命令/マイクロオペレーションの結果を、任意の期間の間、投機的/一時的な状態に保持する。投機的なメモリ更新及びレジスタファイル状態更新の保持及び融合を行うために、特別なレジスタチェックポイントハードウェア及びオペランドバイパスロジックが使用されて、投機的な結果が一時レジスタに記憶される。
【0025】
別の実施形態では、集積回路205は、レジスタ状態更新及び命令リタイヤをメモリ更新から切り離すことができる。この実施形態では、投機的な更新は、投機が解消される前にレジスタファイル370にコミットされる。一方、メモリ更新は、トランザクションがリタイヤされた後になるまでバッファリングされる。したがって、1つのあり得る利点は、トランザクション内の個々の各命令又は各マイクロオペレーションを実行直後にリタイヤさせることができるということである。さらに、レジスタ状態更新及びメモリ更新を切り離すことによって、アーキテクチャレジスタファイル270にコミットする前に投機的な結果を記憶するための余分なレジスタが削減される可能性がある。
【0026】
一方、この実施形態では、レジスタファイル270を投機的に更新することは、レジスタファイル270に対する各更新を投機的更新として取り扱うことを伴う。レジスタの再利用及びアロケーションのポリシーは、レジスタファイル270に対する更新を投機的更新として考慮することができる。1つの例示的な説明では、トランザクションのデータのバッファリングに使用される入力レジスタは、トランザクションのコミットの保留中に新しいデータを受信することに対してバイアスがかけられている。この例では、トランザクションの期間中に使用される入力レジスタは、新しいデータを受信することに対してバイアスがかけられている。したがって、投機的実行が失敗するか、又は、再起動する必要がある場合、入力レジスタセットは、通例、入力レジスタセットの一部でない他のレジスタが最初に使用されるように、再初期化することなく再利用することができる。
【0027】
別の例では、入力レジスタが、トランザクションの投機的実行中又はトランザクションのコミットの保留中に新しいデータを受信した場合、再利用された入力レジスタの状態は、別のレジスタ等の別個のストレージエリアに記憶される。入力レジスタの元の内容を記憶することによって、実行が失敗した場合又は再実行が開始した場合に入力レジスタの元の内容を入力レジスタに再ロードすることが可能になる。レジスタの内容を一時的に記憶し、その後、再実行時に再ロードするプロセッサは、通常、スピリング/リフィリングと呼ばれる。
【0028】
トランザクション/クリティカルセクション内におけるキャッシュ240等の共有メモリへのメモリアクセスの一致を追跡して、読み出されたメモリロケーションがまだ同じ情報を有し、更新される/書き込まれるメモリロケーションが別のエージェントによって読み出されたことも更新されたこともないことを確実にすることができる。第1の例として、メモリアクセスは、メモリロケーションのデータ、データオペランド、データライン、又は任意のコンテンツを読み出す/ロードするロードオペレーションである。第2の例として、メモリアクセスは、メモリ更新オペレーション、記憶オペレーション、又は書き込みオペレーションを含む。
【0029】
一実施形態では、トランザクションバッファ265が、キャッシュ240等の共有キャッシュにおける、キャッシュライン245、250、255等のデータラインへのアクセスを追跡する。1つの例示的な説明として、キャッシュライン245〜255は、データライン、関連する物理アドレス、及びタグを含む。関連する物理アドレスは、集積回路205の外部のメモリロケーション又は集積回路205に位置するメモリロケーションを参照する。
【0030】
図3に移って、トランザクションバッファ265の一実施形態が示されている。トランザクションバッファ265は、トランザクション内で共有メモリからロードされた各アドレス及び共有メモリに書き込まれる各アドレスに対するリモートエージェントによる無効要求/アクセスを追跡するトランザクション追跡ロジックを含むことができる。例示的な説明として、リモートエージェントは他の処理エレメントを含む。この他の処理エレメントは、保留トランザクションを実行するようにスケジューリングされていないか又は保留トランザクションを実行していない別の論理プロセッサ、コア、集積回路、処理エレメント、又は任意のプロセッサ/デバイス等である。
【0031】
一実施形態では、トランザクションバッファ265は、保留トランザクションの実行中に、ロード/読み出しを追跡するロード表305及び記憶/書き込みを追跡する記憶/書き込みバッファ325をそれぞれ含む。ここで、ロード表305は、保留トランザクション/クリティカルセクションの実行中に共有メモリからロードされた/読み出された各データラインに対応するロードエントリ307等のロードエントリを記憶する。一実施形態では、ロードエントリは、物理アドレス310の表示及び無効化アクセスフィールド(IAF)315を含む。第1の例として、物理アドレス310の表示は、メモリロケーションを参照するのに使用される実際の物理アドレスを含む。第2の例として、この表示は、長さ/サイズ情報と共に、ロードされたデータラインを参照するタグ値等の、物理アドレスのコード化されたバージョン又は物理アドレスの一部を含む。ロードされたデータの長さは、設計において暗黙的な場合がある。したがって、ロードされたデータの長さ/サイズの具体的な参照子は必要とされない。一実施形態では、ロードされたデータの暗黙的な長さ/サイズは単一のキャッシュラインである。
【0032】
1つの例示的な説明では、IAF315は、ロードエントリ307がロード表305に最初に記憶された時に第1の値を有し、リモートエージェントが、物理アドレス310により参照されるメモリロケーションに対して無効化アクセス又は無効化アクセス要求を行った時に第2の値に変更される。たとえば、無効要求/アクセスは、リモートエージェントが、保留クリティカルセクションの実行中に物理アドレス310によって参照されるメモリロケーションに書き込みを行うことに相当する。ここで、物理アドレス310は、保留クリティカルセクションの実行中に読み出されたメモリロケーションを表す。単純化された一例として、IAF315は、ロードエントリ307の記憶時に第1の論理値1に初期化される。ロードエントリ307は物理アドレス310を備える。物理アドレス310は、クリティカルセクションの実行中にロードされたメモリロケーションを参照する。リモートエージェントが、保留クリティカルセクションの実行中に物理アドレス310によって参照されるメモリロケーションに書き込みを行った場合、IAF315フィールドは、第2の値0に変更される。この第2の値0は、リモートエージェントが、ロードエントリ307によって参照されるメモリロケーションに対して無効化アクセスを行ったことを表す。
【0033】
一実施形態では、ロード表305は、リモートエージェントが行った無効ロック/セマフォ要求を追跡するのにも使用することもできる。トランザクションが実行されると、ロードエントリ307等のセマフォロードエントリ又は別個のロードエントリが、トランザクションのセマフォを追跡するのに使用される。セマフォ変数は、そのセマフォ変数の共通のロードオペレーションを使用して追跡することができる。このロードオペレーションは、上述したのと同様の方法で追跡される。実際には、セマフォに対する無効要求を追跡するロードエントリ307等のセマフォロードエントリは、物理アドレスフィールド310及びIAF315を含む。物理アドレスフィールド310は、セマフォ値が記憶される物理アドレスの表示を含むことができる。
【0034】
上述したロードエントリを作成するオペレーションと類似して、現在のトランザクションのロック変数/セマフォを追跡するためにセマフォロードエントリ307をロード表305に記憶する時に、IAF315には第1の値がロードされる。リモートエージェントが、保留トランザクションの実行中に、物理アドレス310によって参照されるセマフォでロックを要求又は獲得した場合、IAF315は第2の値に設定される。この第2の値は、リモートエージェントが実行中のトランザクションにおいてロックを要求/取得したことを表す。複数のエージェントがロックを追跡できることは明らかである。一方、無効は、それらのエージェントのうちの1つが実際のロックを獲得した時に実行される。
【0035】
ロード表305は、図4に示す実施形態に限定されない。一例として、トランザクションバッファ265は、ロードエントリ307等のどのロードエントリが空(エントリが現在のトランザクションにより使用されておらず、デフォルトデータ又はガベージデータを有する場合がある)であるか、及び、どのロードエントリがフル(エントリが現在のトランザクションによって作成されている)であるかを判断する。ここで、カウンタを使用して、現在のロードエントリを参照するアロケーションポインタの経過を追跡することができる。代替的に、アロケーション追跡フィールド(ATF)等の別のフィールドが各ロードエントリ内に存在し、そのロードエントリが空であるのか、又はフルであるのかを追跡する。一例として、ロードエントリ307は、論理1等の第1の値を備えたATFを有する。この第1の値は、現在のトランザクションによって作成されていない空のロードエントリを表す。ロードエントリ307のATFは、ロードエントリ307が現在のトランザクションによって作成されると、論理0等の第2の値に変更される。
【0036】
別の実施形態では、ロードされた/読み出されたデータラインのサイズ/長さは暗黙的ではなく、逆に、長さフィールド等の別のフィールドがロード表305内に存在し、ロードされたデータの長さ/サイズを設定する。ロード表305は、投機的ロードを追跡するための、この技術分野で既知のアドバンストロードアドレス表(advanced load address table)(ALAT)とすることができる。
【0037】
図3を再び参照して、記憶書き込みバッファ325は、保留トランザクション/クリティカルセクションの実行中に共有メモリ内で書き込み/更新が行われる各データライン又は部分的なデータラインに対応する、書き込みエントリ327等の書き込みエントリを記憶する。たとえば、書き込みエントリ327は、物理アドレス330の表示、無効化アクセスフィールド(IAF)335、及びデータ保持フィールド340を備える。第1の例として、物理アドレス330の表示は、保留クリティカルセクションの終了時又は実行中に書き込まれるメモリロケーションを参照するのに使用される実際の物理アドレスを含む。第2の例として、この表示は、保留クリティカルセクションの実行終了時に書き込まれるデータラインを参照するタグ値等の物理アドレスのコード化されたバージョン又は物理アドレスの一部を含む。
【0038】
上記例について、IAF335は、書き込みエントリ327が書き込み表325に最初に記憶された時に第1の値を有し、物理アドレス330によるメモリロケーション参照に対する無効化アクセスがリモートエージェントによって行われた時に第2の値に変更される。一実施形態では、無効化アクセスは、リモートエージェントが、保留クリティカルセクションの実行中に物理アドレス330によって参照されるメモリロケーションに書き込みを行うことに相当する。加えて、無効化アクセスは、リモートエージェントが、保留クリティカルセクションの実行中に物理アドレス330から読み出しを行うことに相当する。もう1つの無効化アクセスは、リモートエージェントが物理アドレス330によって参照されるメモリロケーションの所有権を得ることに相当し得る。単純化された一例として、IAF335は、書き込みエントリ327の記憶時に第1の論理値1に初期化される。リモートエージェントが、保留クリティカルセクションの実行中に、物理アドレス330によって参照されるメモリロケーションの読み出し又は書き込みを行う場合、IAF325は、第2の論理値0に変更される。この第2の論理値は、リモートエージェントが、書き込みエントリ327によって参照されるメモリロケーションに対する無効化アクセスを行ったことを表す。
【0039】
書き込みエントリ327は、書き込まれる投機的データをバッファリング/保持するデータ保持フィールド340をさらに示している。データ保持フィールド340は、どの部分が投機的記憶によって対象とされていなかったかということに対して追跡されたデータラインのどの部分が新しいデータを含むかを追跡するのにも使用することができる。変更された部分を追跡することによって、後のコミットプロセス中に実際のメモリロケーションに投機的データを融合することを助けることができる。
【0040】
一実施形態では、記憶オペレーションからの、書き込まれるラインの所有権は、トランザクション内の個々のオペレーションの実行時及びリタイヤ時に得られる。各個々の書き込み/記憶マイクロオペレーションのリタイヤ時に所有権をプリフェッチする一代替案として、書き込まれる物理アドレスの所有権は、トランザクションのリタイヤ前においてトランザクションが終了するまで得られない。いずれの実施形態でも、トランザクションの終了時に、所有権がトランザクションの実行中に放棄された場合、無効化アクセスが行われたので、トランザクションはリタイヤされない(失敗する)。トランザクションがリタイヤされることになると、書き込まれる各ラインの所有権は、メモリ更新のすべてがコミットされた後になるまで放棄されない。リモートエージェントが、リタイヤ中にラインの所有権を要求する場合、メモリ更新/書き込みのすべてがコミットされるまで、その要求をキューに入れて、保留状態にすることができる。
【0041】
書き込み表325は、図4に示したものに限定されない。書き込み表325は、たとえば、図示しないピニングフィールド(pinning field)を含むことができる。このピニングフィールドは、設定された時に、リモートエージェントからキャッシュ等の共有メモリへのスヌープをブロックする。書き込みエントリのピニングフィールドは、対応する物理アドレスに対するスヌープを可能にするために第1の値に設定され、キャッシュラインがピニングされた時は、リモートエージェントによるそのキャッシュラインに対するスヌープをブロックするために第2に値に設定される。ピニングフィールドは、コミットプロセス中に、スヌープをブロックしてどの所有権の変更も認めないようにするのに特に有益となり得る。上述したように、リモートエージェントからの所有権のどの要求も、トランザクションがコミットされた後になるまでキューに入れておくことができる。ピニングフィールドを実施する1つの例示的な方法は、ピニングフィールドが設定されている場合、所定の長さの時間の間、スヌープをブロックすることである。この所定の長さの時間は、存在する記憶バッファの個数に基づく。
【0042】
書き込み表325は、上記ロード表305に関して解説した長さフィールドのような、書き込まれる投機的データの長さを記憶するための長さフィールドも含むことができる。任意の個数の他のフィールド又はフィールドの組み合わせを記憶表/バッファ325に含めることができる。たとえば、無効化アクセスを行ったリモートエージェントを特定するプロセッサID又は他のIDを追跡するのに、リモートエージェントフィールドが使用される。
【0043】
トランザクションバッファ265は、ハードウェア又はファームウェアで実施することができる。別の例では、トランザクションバッファ365は、ソフトウェアで実施され、集積回路205によって実行される。さらに別の例では、トランザクションバッファはマイクロコードで実施される。
【0044】
クリティカルセクション/トランザクション内のすべてのマイクロオペレーションを実行した後、無効化アクセスが保留クリティカルセクションの実行中に行われていなかった場合、トランザクションは通常コミットされる。リタイヤの後、トランザクションは、通常、アトミックな方法(atomic manner)でコミットされる。一例として、保留クリティカルセクションをアトミックに書き込むこと/コミットすることは、クリティカルセクションの実行中にバッファリングされた1つ1つのデータラインを共有メモリに書き込むことを含む。
【0045】
一実施形態では、保留クリティカルセクションの実行中に追跡された無効化アクセスについてトランザクションバッファ265をチェックした後、保留トランザクションは、図2に示すリタイヤロジック235によってリタイヤされる。一例として、保留トランザクションをリタイヤさせるために、ロード表305に記憶された各ロードエントリIAF及び記憶表/バッファ325に記憶された各書き込みエントリIAFがチェックされる。これらのIAFは、保留トランザクションに関連付けられている。加えて、無効化アクセスが、ロック又はセマフォを要求するリモートエージェントによって行われていなかったことを確実にするために、保留トランザクションのロック変数又はセマフォを追跡するために作成されたあらゆるロードエントリもチェックされる。無効化アクセスが発見されなかった場合、トランザクションのリタイヤは許可され、記憶バッファはピニングされる。ピニングが行われ、リタイヤが許可されると、メモリ更新を直列に行うことができる。なお、ピニング及びリタイヤの許可は同時に行われる。メモリ更新が完了すると、「ピン」ステータスが取り除かれ、ラインは放棄され、トランザクションはコミットされたものとみなされる。
【0046】
単純化された一例として、トランザクションは、ロケーション0001から読み出すマイクロオペレーション及び値1010をロケーション0002に書き込むマイクロオペレーションを含む。第1のマイクロオペレーションが実行されると、ロード表305は、ロケーション0001を表す物理アドレスフィールド310と、第1の値1を有するIAF315とを含むロードエントリ307を記憶する。第2のマイクロオペレーションが実行されると、記憶表325は、ロケーション0002を表す物理アドレス330と、第1の値1を有するIAF335と、データフィールド340の1010とを含む書き込みエントリ327を記憶する。加えて、ロードエントリ及び書き込みエントリは、上述したサイズ/長さ情報又は他のフィールドをさらに含むこともできる。リモートエージェントが、実行中又はトランザクションがまだ保留中にロケーション0001に書き込みを行った場合、IAF315は、無効化アクセスが行われたことを表す第2の値0に設定される。トランザクションをリタイヤさせようと試みた時、IAF315は、無効化アクセスを表しており、したがって、トランザクションはリタイヤされず、値1010はロケーション0002に書き込まれない。一方、IAF315及び335で1によって表されるように、リモートエージェントがロケーション0001に書き込みを行わず、且つ、リモートエージェントがロケーション0002に対する読み出し/書き込みを行わない場合、トランザクションはリタイヤされ、値1010はロケーション0002に書き込まれる。
【0047】
無効化アクセスが保留トランザクションの期間中に行われたと判断され、したがって、トランザクションがリタイヤされなかった後、多数の選択肢が存在する。第1の選択肢は、トランザクションを再実行することを含む。上述したように、入力レジスタは、(1)入力レジスタがトランザクションの保留中に新しいデータを受信した場合に、その元の状態に再初期化されるか、又は、(2)入力レジスタがトランザクションの保留中に新しいデータを受信しなかった場合に、入力レジスタの元の状態ですでに存在するかのいずれかである。その結果、トランザクションは、上記と同じ方法で投機的に再実行される。第2の選択肢は、無効化アクセスを行ったリモートエージェントと共にバックオフアルゴリズムを使用してトランザクションを投機的に再実行することを含む。一例として、指数バックオフアルゴリズムが使用されて、リモートエージェントが同じデータを求めて競合することなくトランザクションの完了が試みられる。別の選択肢は、この技術分野で既知のソフトウェア非ブロックメカニズム(software non-blocking mechanism)を使用することであって、それによって、トランザクションを再実行する、使用することを含む。第4の選択肢は、所定の回数だけ投機的にトランザクションを再実行した後、ロック/セマフォで非投機的にトランザクションを再実行することを含む。セマフォは、トランザクション中に読み出されるアドレス及び書き込まれるアドレスを有効にロックする。
【0048】
第4の選択肢は、失敗メカニズムとしてロック/セマフォを利用するものであるが、ハードウェア、ソフトウェア、又はソフトウェアを実行するためのハードウェアの組み合わせで実施することができる。たとえば、ソフトウェアによって実施されるロックアウトメカニズムでは、セマフォは、あらゆる粒度のメモリロケーションに対するアクセスをロックするのに利用される。一定のメモリロケーションにアクセスしたい各プロセッサは、そのロケーションを保護するセマフォを求めて競合する。セマフォが、ロックがないことを表す第1の値に設定されている場合、第1のプロセッサは、そのアドレス/メモリロケーションがロックされていることを表す第2の値にセマフォを切り換える。セマフォを第2の値に切り換えることにより、セマフォを切り換えたプロセッサは、そのメモリロケーションと、おそらく、そのセマフォによって保護されるメモリロケーションの範囲とに対する排他的なアクセスをソフトウェアを通じて確実に得る。集積回路205は、ソフトウェアでセマフォを起動/実行する別個のロックアウトロジック260を有することもできるし、単に既存の実行ロジックを使用してソフトウェアロックアウトを実行/起動することもできる。セマフォは、ソフトウェアで実施することができ、したがって、セマフォはシステムメモリ(図示せず)内に存在する場合がある。
【0049】
図2に示すロックアウトロジック260を実施する別の例として、ロックアウトロジック260又はロックアウトロジック260で実行されるソフトウェアは、少なくとも1つのリモートエージェントが、共有メモリの指定されたラインにアクセスすることを阻止するためのロックアウトメカニズムを使用する。一実施形態では、ロックアウトロジックはロックビットを含む。第1の例として、ハードウェアにおいて、ロックビットは、レジスタ又はキャッシュライン内に存在する。第2の例として、ロックビットは、ロックアウトロジック260で実行され且つシステムメモリ内に存在するソフトウェアで表される。
【0050】
ロックビットが第1の値を有する場合、共有メモリの所定のライン又は指定されたラインへのアクセスが許可される。一方、ロックビットが第2の値を有する場合、共有メモリの指定されたラインへのアクセスは阻止される。ロックビットは、キャッシュ240、ロックアウトロジック260、プロセッサ205の他の任意のメモリ、又はシステムメモリ内に存在することができる。単一のセマフォにより、又は、単一のビットを設定することにより、あらゆる粒度のデータラインをロックすることができる。一例として、2個のラインが、単一のロックビットの設定によってロックされる。
【0051】
フェイルセーフメカニズムとしてセマフォを使用する一例として、トランザクションが、5回等の第1の回数だけ実行されるが、各実行中、リモートエージェントが、例示のアドレス0001等、そのトランザクションの実行中に読み出されたアドレスに対して無効化アクセスを行う。トランザクションコードの6回目のループで、6の実行しきい値が満たされる。実行のしきい値又は所定の回数が満たされると、セマフォが、トランザクションを実行するのに使用される。
【0052】
ソフトウェアの実施態様では、アドレス0001を保護するセマフォを求めて競合が起こる。アドレス0001が、現在セマフォによってロックされていない場合、セマフォは、現在ロックされていることを表す値に切り換えられる。トランザクションはその後非投機的に再実行される。
【0053】
一代替形態として、ハードウェアの実施態様では、ロック回路263等のロック回路が、トランザクションの6回目の実行中に、アドレス0001に関連付けられるロックビットを第2の値に設定し、リモートエージェントが、少なくともアドレス0001にアクセスすることを阻止する。ロック回路263は、単一のトランジスタ又は任意の個数のトランジスタから構成することができる。
【0054】
データラインのロックは、セマフォ又はロックビットの使用に限定されるものではなく、ハードウェアで実施されようとソフトウェアで実施されようと、データラインに対するアクセスを阻止するためのあらゆる方法又は装置を含む。別の例として、トライステートデバイスが、データラインの相互接続アクセスを阻止するのに使用される。
【0055】
図4に移って、ソフトウェアで境界設定されたトランザクションの一例が示されている。上述したように、トランザクションは、通常、実行される一群の命令/マイクロオペレーションを含む。したがって、トランザクション宣言は、トランザクションを境界設定する任意の方法とすることができる。図4では、トランザクション410は、メモリ読み出し、実行オペレーション、メモリ更新/書き込み等のいくつかのオペレーションの例を有する。トランザクション410は、トランザクション宣言/識別子405によって境界設定される。トランザクション宣言/識別子405は、Atomic {…}として図示されている。しかしながら、トランザクション宣言は、そのように限定されるものではない。簡単な例として、複数のオペレーション又は命令をグループ化する一対の括弧が、トランザクション/クリティカルセクションの境界を特定するトランザクション宣言/識別子となる。
【0056】
トランザクション宣言405がコンパイルされた一例が、コンパイル例415に示されている。トランザクション430の境界は、トランザクション識別子425によって特定される。したがって、トランザクションを実行するプロセッサは、この識別子からトランザクション/クリティカルセクションを構成するマイクロオペレーションを特定することができる。トランザクション宣言405がコンパイルされた別の例は、コンパイル例425に示されている。この例では、トランザクション宣言435が、トランザクション440の境界を特定する。
【0057】
この例を1ステップずつ進めていって、ライン1〜3は、トランザクショナル実行を特定し、述語Pxを1に設定し、述語Pyを0に設定し、Rmにおいてカウント変数を0に初期化し、Rnにおいてカウントのしきい値を設定する。述語は、通常、その述語が或る値を有する場合に或るタイプ又は或る実行パスを含み、その述語が別の値を有する場合に別のタイプ又は別の実行パスを含む。ライン4〜9において、カウント変数が、トランザクションが投機的に実行される回数を表す数値に初期化され、次に、カウント変数が、しきい値と比較されるか、又は、そうでない場合には、ロック述語がロック/セマフォ(非投機的)でトランザクションを実行するように設定されるべきかどうかを調べるために評価され、カウント変数は、設計に応じて、トランザクションが実行される回数を表すためにディクリメント又はインクリメントされ、そして、トランザクションが開始される。ライン10〜12は、トランザクション440のクリティカルセクション内の任意の数のオペレーションを含む。最後に、ライン14は、トランザクションの実行中にリモートエージェントによって行われた無効化アクセスの、上述したトランザクション追跡ロジック/バッファを調べるためのチェック命令を含む。
【0058】
図5に移って、トランザクショナル実行を使用するシステムの一実施形態が示されている。マイクロプロセッサ505及び510が示されているが、システムは、任意の個数の物理的なマイクロプロセッサを有することができ、各物理的なマイクロプロセッサは、トランザクショナル実行を利用する任意の個数のコア又は任意の個数の論理プロセッサを有する。一例として、マイクロプロセッサ505及び510はそれぞれ、そのダイ内に存在する複数のコアを有する。各コアは、複数のスレッドを有し、その結果、マルチスレッディングコアとなる。一実施形態では、マイクロプロセッサ505及び510は、アウトオブオーダの投機的実行及び非投機的実行を行うことができる。別の実施形態では、マイクロプロセッサ505及び510は、インオーダ実行のみを行うことができる。
【0059】
マイクロプロセッサ505及び510は、キャッシュ507及び512を有する。一実施形態では、キャッシュ507及び512は、システムメモリ530から近時にフェッチされたデータ及び/又は命令を記憶する。この実施形態では、キャッシュ507及びキャッシュ512は、それらのキャッシュの各マイクロプロセッサに私的なデータをキャッシュする。メモリ530は、トランザクショナル実行がアクセスするのに使用される共有メモリとすることができる。別の実施形態では、トランザクション中にアクセスされたシステム内に存在するあらゆるメモリが共有メモリである。たとえば、マイクロプロセッサ505及び510が、図5には図示しない高レベル共有キャッシュにアクセスした場合。
【0060】
マイクロプロセッサ505及び510は、相互接続515によりメモリコントローラ520に接続されて示されている。メモリコントローラは、それぞれ、相互接続535によりグラフィックスデバイス540に接続されている。一実施形態では、グラフィックスデバイス540は、メモリコントローラ520に統合されている。メモリコントローラは、相互接続525によってシステムメモリ530にも接続されている。システムメモリ530は、システムで使用される任意のタイプのアクセスメモリとすることができる。一実施形態では、システムメモリ530は、ランダムアクセスメモリ(RAM)デバイスとすることができる。ランダムアクセスメモリ(RAM)デバイスには、スタティックランダムアクセスメモリ(SRAM)、ダイナミックランダムアクセスメモリ(DRAM)、シングルデータレート(SDR)RAM、ダブルデータレート(DDR)RAM、他の任意のマルチデータレートRAM、又は他の任意のタイプのアクセスメモリ等がある。
【0061】
入出力(I/O)コントローラ550は、相互接続545を通じてメモリコントローラ545に接続されている。I/Oコントローラ550は、相互接続555によって、ストレージ560、ネットワークインターフェース565、及びI/Oデバイス570に接続されている。一実施形態では、ストレージ560はハードドライブである。別の実施形態では、ストレージ560はディスクドライブである。さらに別の実施形態では、ストレージ560は、システムにおける任意の静的ストレージデバイスである。一実施形態では、ネットワークインターフェース565は、ローカルエリアネットワーク(LAN)とインターフェースしている。別の実施形態では、ネットワークインターフェース565は、インターネット等のより大きなネットワークとインターフェースしている。入出力デバイス570は、キーボード、マウス、モニタ、プリンタ等のあらゆるユーザ入力デバイス又はシステム関連出力デバイスを含むことができる。
【0062】
次に図6を参照して、トランザクションを実行する方法のフロー図の一実施形態が示されている。ブロック605において、第1のトランザクションの実行中、第1のトランザクションによって参照される共有メモリの複数のラインに対する無効化アクセスが追跡される。
【0063】
一例では、トランザクションバッファが、無効化アクセスを追跡するのに使用される。このトランザクションバッファは、ロード表及び記憶表/バッファを含む。ロード表は、第1のトランザクションの実行中にロードされたアドレスに対する無効化アクセスを追跡する。ロードされたアドレス/メモリロケーションに対する無効化アクセスは、第1のトランザクションを実行するようにスケジューリングされていないプロセッサ、コア、スレッド、論理プロセッサ等のリモートエージェントが、第1のトランザクションの実行中にロードされたアドレス又はメモリロケーションに書き込みを行うことを含む。加えて、ロード表は、トランザクションの実行中のセマフォ又は他のロックアウトメカニズムに対する無効化アクセスを追跡するロックアウトメカニズムエントリも含むことができる。この例では、ロックアウトメカニズムに対する無効化アクセスは、リモートエージェントが、ロックアウトメカニズムによって保護/ロックされたアドレスのロックを要求するか又は得ることを含む。
【0064】
ロード表と同様に機能する記憶表/バッファは、トランザクションのコミット時に書き込まれるアドレス又はメモリロケーションに対する無効化アクセスを追跡する。ここでの無効化アクセスは、リモートエージェントが、上記アドレス若しくはメモリロケーションから読み出しを行うこと、又はそれらのアドレス若しくはメモリロケーションに書き込みを行うことのいずれかを含むことができる。
【0065】
ブロック610において、無効化アクセスが追跡された場合、第1のトランザクションは、第1の回数だけ再実行される。したがって、無効化アクセスが第1のトランザクションの実行中に追跡された場合、第1のトランザクションは、単に再実行されるだけである。一方、第1のトランザクションが、所定の回数だけ再実行された場合、第1のトランザクションによって参照される共有メモリの複数のラインがロックされる。この所定の回数は、ソフトウェアのカウント変数又はプロセッサ内のロジックによって表すことができる。ロックは、セマフォ等のソフトウェアによって実施されるロックアウトメカニズムを通じて行うことができる。このロックアウトメカニズムは、1つのプロセッサ複数のラインに対する排他的アクセスをロックアウトするか又は与える。また、ロックは、ロックアウトロジックを利用して、第1のトランザクションにより参照される複数のラインへのアクセスを物理的にロックアウトするハードウェアを通じて行うこともできる。
【0066】
ブロック620において、複数のラインに対するアクセスがロックされた後、トランザクションが再び再実行される。したがって、プロセッサは、第1のトランザクションによって参照される複数のラインに対する排他的アクセスを有する。なお、プロセッサは、トランザクションを投機的に再実行していたが、無効化アクセスが追跡されたために結果をコミットできなかったコア又は論理プロセッサとすることができる。その結果、排他的アクセスが実行プロセッサに利用可能であるので、第1のトランザクションを非投機的に実行することができる。
【0067】
次に図7に移って、トランザクショナル実行のコードフローの一実施形態が示されている。ブロック705において、一群のマイクロオペレーションが実行される。この一群のマイクロオペレーションは、共にグループ化された時に、複数の命令又はマクロオペレーションに及ぶ場合がある。上記のように、ブロック710において、各ロードマイクロオペレーション及び各記憶マイクロオペレーションに関連付けられた共有メモリロケーションに対する無効化アクセスが追跡される。
【0068】
ブロック715において、第1の群のマイクロオペレーションの実行が、(1)無効化アクセスが追跡されなくなるまで、又は、(2)第1の群のマイクロオペレーションが第1の回数だけ実行されるまで、ループされる。したがって、コードにおける新たなロケーションにジャンプしなければならない代わりに、同じ入力レジスタセットを使用でき、トランザクションは単に再びループすることができる。上述したように、これは、入力レジスタセットが、トランザクションの保留中に新しいデータを受信することに対してバイアスをかけられること、及び、入力レジスタの再利用時に入力レジスタの内容をスピリング/アンドリフィリングすることによって行われる。再度、ブロック720において、各ロードマイクロオペレーション及び各記憶マイクロオペレーションに関連した共有メモリロケーションがロックされ、第1の群のマイクロオペレーションが再実行される。
【0069】
上述したようなトランザクショナル実行は、トランザクションの実行中のメモリロケーションに対する無効化アクセスを追跡することによって、ロックアーキテクチャに起こる可能性のあるフォールスコンテンションを回避し、コンテンションを実際のコンテンションに限定する。さらに、トランザクションが所定の回数だけ再実行された場合、実際のコンテンションは発生し続けるので、トランザクションを所定の回数だけ投機的に実行することを試みた後、トランザクションは、ロック/セマフォを利用して非投機的に実行され、トランザクションが確実に実行されてコミットされるようにする。代替的に、非投機的実行方法の代わりに、ソフトウェア非ブロックメカニズムを使用することもできる。上述したように、投機的なレジスタ状態更新/コミットは、トランザクションの「存在する」(live-in)データが元の入力レジスタに確実に保存されるようにすることによるか、又は、入力データ値を保存ロケーションにコピーすることによって、ソフトウェアでサポートすることができる。保存ロケーションは、他のレジスタ又はメモリのいずれかとすることができ、トランザクションをリタイヤさせなければならない場合、この保存ロケーションから、入力データ値を元の状態に戻すことができる。また、プロセッサは、場合によっては、アウトオブオーダ実行をサポートするのに通常使用されるメカニズムを使用して、レジスタ状態をバッファリングするハードウェアメカニズムも含むことができる。
【0070】
上記明細書では、本発明を、その具体的な例示の実施形態に関して説明してきた。しかしながら、添付の特許請求の範囲で述べられるような本発明のより広い精神及び範囲から逸脱することなく、それらの実施形態にさまざまな修正及び変更を行えることが明らかであろう。したがって、本明細書及び図面は、限定的な意味ではなく例示の意味で考慮されるべきである。
【図面の簡単な説明】
【0071】
【図1】N個のコアを有し、且つ、N個のコアのそれぞれにM個の論理プロセッサを有する集積回路である。
【図2】トランザクショナル実行を実施するための集積回路の一実施形態である。
【図3】図3に示すトランザクションバッファの一実施形態である。
【図4】コンパイルされたコードの第1の実施形態及び第2の実施形態にコンパイルされて示されるソフトウェアコードで境界設定されたトランザクションである。
【図5】システムにおけるトランザクショナル実行の一実施形態である。
【図6】トランザクションを実行する方法のフロー図の一実施形態である。
【図7】トランザクショナル実行のコードフローの一実施形態である。

【特許請求の範囲】
【請求項1】
第1のエージェント及びリモートエージェントによって共有される共有メモリと、
トランザクションを実行する実行ロジックであって、該トランザクションは複数の命令を含む、実行ロジックと、
前記複数の命令の実行中に前記共有メモリからロードされた各アドレス及び該共有メモリに書き込まれる各アドレスに対して前記リモートエージェントにより行われる無効化アクセスを追跡するトランザクション追跡ロジックと、
(1)前記共有メモリからロードされた各アドレス及び該共有メモリに書き込まれる各アドレスに対する無効化アクセスが、前記トランザクションの実行中に前記トランザクション追跡ロジックによって追跡されなかった場合に、前記トランザクションをリタイヤさせ、(2)前記共有メモリからロードされたいずれかのアドレス又は該共有メモリに書き込まれるいずれかのアドレスに対する無効化アクセスが、前記トランザクションの実行中に前記トランザクション追跡ロジックによって追跡された場合に、前記トランザクションの再実行を開始する、トランザクションリタイヤロジックと
を備える、装置。
【請求項2】
前記トランザクションが、該トランザクションをリタイヤさせることなく第1の回数だけ再実行される場合、前記トランザクションの実行中に、前記共有メモリからロードされた各アドレス及び該共有メモリに書き込まれる各アドレスに対する前記リモートエージェントのアクセスを拒否するロックアウトメカニズムをさらに備える、請求項1に記載のマイクロプロセッサ。
【請求項3】
前記トランザクションが、該トランザクションをリタイヤさせることなく第1の回数だけ再実行される場合、前記ロックアウトメカニズムは、前記トランザクションの実行中に、前記共有メモリからロードされた各アドレス及び該共有メモリに書き込まれる各アドレスに対する少なくとも1つのリモートエージェントのアクセスを拒否するロックアウトビットを設定するように動作可能なロックアウト回路を備える、請求項2に記載のマイクロプロセッサ。
【請求項4】
前記トランザクションが、該トランザクションをリタイヤさせることなく第1の回数だけ再実行される場合、前記ロックアウトメカニズムは、前記トランザクションの実行中に、前記共有メモリからロードされた各アドレス及び該共有メモリに書き込まれる各アドレスに対する少なくとも1つのリモートエージェントのアクセスを拒否するセマフォを起動するコードを実行するように動作可能なロジックを備える、請求項2に記載のマイクロプロセッサ。
【請求項5】
前記トランザクション追跡ロジックは、複数のマクロオペレーションの実行中に、前記共有メモリからロードされた各アドレスを追跡するロード表と、該共有メモリに書き込まれる各アドレスを追跡する書き込みバッファとを記憶するように動作可能なロジックを備える、請求項1に記載のマイクロプロセッサ。
【請求項6】
ロード表を記憶するように動作可能なロジックは、アドバンストロードアドレス表(ALAT)を含む、請求項1に記載のマイクロプロセッサ。
【請求項7】
前記ロード表は、前記共有メモリからロードされた各アドレスのロードエントリを記憶するように動作可能であり、各ロードエントリは、前記共有メモリからロードされた前記アドレスの表示と無効化アクセスフィールドとを含み、前記書き込みバッファは、前記共有メモリに書き込まれる各アドレスの書き込みエントリを記憶するように動作可能であり、各書き込みエントリは、書き込まれる前記アドレスと、書き込むデータラインと、無効化アクセスフィールドとを含む、請求項5に記載のマイクロプロセッサ。
【請求項8】
前記ロード表は、ロックメカニズムロードエントリをさらに含み、該ロックメカニズムロードエントリは、ソフトウェアによって実施されるロックアウトメカニズムに対するリモートエージェントのアクセスを追跡する、請求項5に記載のマイクロプロセッサ。
【請求項9】
無効化アクセスは、(1)前記リモートエージェントが、前記複数の命令の実行中に前記共有メモリからロードされたアドレスに書き込みを行うこと、又は、(2)前記リモートエージェントが、複数のマイクロオペレーションの実行中に前記共有メモリに書き込まれるアドレスから読み出すこと、若しくは、該アドレスに書き込むことを含む、請求項1に記載のマイクロプロセッサ。
【請求項10】
前記リモートエージェントは、前記エージェントを含む集積回路上のコア、該エージェントを含む集積回路上のスレッド、該エージェントを含む集積回路上の論理プロセッサ、物理プロセッサ、及び前記エージェントを含む集積回路に接続されるプロセッサから成る群から選択される、請求項9に記載のマイクロプロセッサ。
【請求項11】
前記共有メモリはキャッシュであり、前記エージェント及び前記リモートエージェントは、前記キャッシュを共有する論理プロセッサである、請求項1に記載のマイクロプロセッサ。
【請求項12】
トランザクション宣言でトランザクションを境界設定するソフトウェアであって、該トランザクションは、実行される複数のマイクロオペレーションを有するクリティカルセクションを含み、前記トランザクション宣言は、前記トランザクションの境界を特定する識別子と、前記クリティカルセクションが実行された回数を表すカウント変数と、チェック命令とを含む、ソフトウェアと、
前記トランザクションを実行する第1のマイクロプロセッサであって、前記複数のマイクロオペレーション内のロードマイクロオペレーションに関連付けられたアドレスに対する無効化アクセスを追跡するためのロード追跡表を記憶するロジックと、前記複数のマイクロオペレーション内の記憶マイクロオペレーションに関連付けられたアドレスに対する無効化アクセスを追跡するための書き込み追跡表を記憶するロジックと、無効化アクセスの前記ロード追跡表及び前記記憶追跡表を調べるための前記チェック命令を実行するチェックロジックと、(1)前記チェック命令の実行が無効化アクセスのないことを返す場合に、前記トランザクションをリタイヤさせ、(2)前記チェック命令の実行が少なくとも1つの無効化アクセスを返す場合に、前記トランザクションの再実行を開始して前記カウント変数を変更するリタイヤロジックとを備える、第1のマイクロプロセッサと
を備える、システム。
【請求項13】
前記トランザクション宣言は、設定されると、ロックアウトメカニズムを使用して前記トランザクションを実行するロック述語をさらに含み、前記トランザクションが所定の回数だけ再実行されたことを前記カウント変数が表す場合に、前記ロック述語は設定される、請求項12に記載のシステム。
【請求項14】
前記第1のマイクロプロセッサに接続される、前記ソフトウェアを記憶するためのストレージ媒体と、データラインを記憶するためのシステムメモリと、該システムメモリからの近時にアクセスされたデータラインを記憶するための、前記第1のマイクロプロセッサのキャッシュとをさらに備える、請求項12に記載のシステム。
【請求項15】
前記ロードマイクロオペレーションに関連付けられたアドレスに対する無効化アクセスは、第1のリモートエージェントが、前記トランザクションの実行中に前記キャッシュからロードされたアドレスに書き込みを行うことを含み、前記記憶マイクロオペレーションに関連付けられたアドレスに対する無効化アクセスは、第2のリモートエージェントが、前記トランザクションの実行中に前記キャッシュに書き込まれるアドレスを読み出すこと又は該アドレスに書き込みを行うことを含む、請求項14に記載のシステム。
【請求項16】
前記第1のマイクロプロセッサは複数のコアをさらに備え、各コアは複数の論理プロセッサを有し、前記第1のリモートエージェント及び前記第2のリモートエージェントは、前記トランザクションを実行するようにスケジューリングされていない前記複数のコア又は前記複数の論理プロセッサのいずれか1つである、請求項15に記載のシステム。
【請求項17】
第1のトランザクションの投機的実行中に該第1のトランザクションによって参照される共有メモリの複数のラインに対する無効化アクセスを追跡すること、
前記共有メモリの前記複数のラインに対する無効化アクセスが、前記第1のトランザクションの実行中に追跡されるたびに、該第1のトランザクションを投機的に再実行すること、
前記第1のトランザクションを第1の回数だけ投機的に再実行した後、該第1のトランザクションによって参照される前記共有メモリの前記複数のラインに対するアクセスをロックアウトすること、及び
前記共有メモリの前記複数のラインに対するアクセスをロックアウトした後、前記第1のトランザクションを非投機的に再実行すること
を含む、方法。
【請求項18】
前記共有メモリの前記複数のラインに対する無効化アクセスは、(1)リモートエージェントが、前記第1のトランザクションの投機的実行中にロードされた前記共有メモリの前記複数のラインの1つに書き込みを行うこと、又は、(2)リモートエージェントが、前記第1のトランザクションのコミット時に書き込まれる前記共有メモリの前記複数のラインの1つに書き込みを行うこと若しくは該1つから読み出しを行うことを含む、請求項17に記載の方法。
【請求項19】
前記共有メモリのラインに対する無効化アクセスを追跡することは、前記第1のトランザクションの実行中にロードされた前記共有メモリの各ラインについてロード表にロードエントリを記憶することを含み、各ロードエントリは、ロードされた前記ラインに関連付けられたアドレスの表示と、(1)無効化アクセスが前記第1のトランザクションの実行中に行われなかったことを表す第1の値を、前記ロード表に前記ロードエントリを記憶する時に記憶し、且つ、(2)無効化アクセスが前記第1のトランザクションの実行中に行われた場合に第2の値を記憶する、無効化アクセスフィールドとを含む、請求項17に記載の方法。
【請求項20】
前記共有メモリのラインに対する無効化アクセスを追跡することは、前記第1のトランザクションの実行の終了時に書き込まれる前記共有メモリの各ラインについて書き込み表に書き込みエントリを記憶することをさらに含み、各書き込みエントリは、書き込まれる前記ラインに関連付けられた物理アドレスの表示と、データフィールドと、(1)無効化アクセスが前記第1のトランザクションの実行中に行われなかったことを表す第1の値を、前記ロード表に前記ロードエントリを記憶する時に記憶し、且つ、(2)無効化アクセスが前記第1のトランザクションの実行中に行われた場合に第2の値を記憶する、無効化アクセスフィールドとを含む、請求項19に記載の方法。
【請求項21】
各書き込みエントリ及び各ロードエントリは、前記ロードされたライン又は前記書き込まれるラインの長さを記憶するための長さフィールドをさらに含む、請求項20に記載の方法。
【請求項22】
ロードされた各ライン及び書き込まれる各ラインの長さは、プロセッサの設計において暗黙的である、請求項20に記載の方法。
【請求項23】
前記第1のトランザクションの実行中に使用される入力レジスタが新しいデータを受信することにバイアスをかける(biasing)ことをさらに含む、請求項17に記載の方法。
【請求項24】
第1の入力レジスタが前記第1のトランザクションの実行中に再利用される場合、該第1の入力レジスタの内容を第2のレジスタにスピリングすることをさらに含む、請求項23に記載の方法。
【請求項25】
前記トランザクションを投機的に再実行する時に、前記第2のレジスタに記憶された前記内容で前記第1の入力レジスタをリフィリングすることをさらに含む、請求項24に記載の方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2011−28774(P2011−28774A)
【公開日】平成23年2月10日(2011.2.10)
【国際特許分類】
【外国語出願】
【出願番号】特願2010−217662(P2010−217662)
【出願日】平成22年9月28日(2010.9.28)
【分割の表示】特願2007−549621(P2007−549621)の分割
【原出願日】平成17年12月23日(2005.12.23)
【出願人】(591003943)インテル・コーポレーション (1,101)
【Fターム(参考)】