説明

スレッドレベルの投機実行を拡張するためのプリミティブ

【課題】プロセッサは、投機的スレッド化をサポートするためにアドレス監視テーブル及びアトミック更新テーブルを含み得る。
【解決手段】プロセッサは、投機的スレッドの実行に関連した状態を維持するために1つ又は複数のレジスタを含むこともできる。プロセッサは、プリミティブ(状態のレジスタに書き込むための命令、バッファリングされたメモリ更新のコミットをトリガするための命令、状態のステータス・レジスタを読み出すための命令、及び/又は、トラップ/例外/割り込み処理に関連した状態ビットの1つをクリアするための命令)の1つ又は複数をサポートすることができる。その他の実施例も本明細書及び特許請求の範囲で記載する。

【発明の詳細な説明】
【技術分野】
【0001】
本願の開示は、一般に情報処理システムに関し、特にスレッドレベルの投機実行のサポートに関する。
【背景技術】
【0002】
ハードウェアにおけるマルチスレッド化のサポートが一層増えてきている。例えば、一手法では、マルチプロセッサ・システム(チップ・マルチプロセッサ(「CMP」システムなど))におけるプロセッサはそれぞれ、複数のソフトウェア・スレッドの1つを同時に処理することができる。同時マルチスレッド化(「SMT」)と呼ばれている別の手法では、単一の物理プロセッサは、オペレーティング・システム及びユーザ・プログラムには複数の論理プロセッサとしてみえるようにされる。SMTの場合、複数のソフトウェア・スレッドが、スイッチングなしで単一のプロセッサ上でアクティブであり、同時に実行することが可能である。すなわち、各論理プロセッサは完全なアーキテクチャ状態組を維持するが、物理プロセッサのその他の多くの資源(キャッシュ、実行ユニット、分岐予測器、制御ロジックやバスなど)は共有される。SMTの場合、複数のソフトウェア・スレッドからの命令がよって、各論理プロセッサに対して同時に実行する。
【0003】
ソフトウェア・スレッドの同時の実行をサポートするシステム(SMT及び/又はSMPシステムなど)の場合、アプリケーションをマルチスレッド・コードに並列化して、システムの同時実行の潜在性を利用することができる。マルチスレッド・アプリケーションのスレッドは、通信し、同期化する必要があり得る。これは、共有メモリを介して行われることが多い。さもなければ、単一スレッド・プログラムは、プログラムを複数のスレッドに編成し、別個のスレッド・ユニット上にそれぞれがあるスレッドを同時に実行することによってマルチスレッド・コードに並列化することもできる。さもなければ単一のスレッド・プログラムの並列化処理中に、依存性に関する特定の前提が設けられる場合、この手法は時には、投機的マルチスレッド化と呼ばれる。
【0004】
マルチスレッド・プログラムの性能を向上させ、かつ/又は、マルチスレッド・プログラムの書き込みを容易にするため、スレッドレベルの投機実行を用いることが可能である。スレッドレベル投機実行は、投機命令のブロックのスレッドの実行を表す。すなわち、スレッドは命令を実行するが、その他のスレッドは、投機的に実行された作業をコミットするか又は廃棄(アボートとしても知られている)する決定をスレッドが行うまで命令の結果をみることが可能でない。
【0005】
プロセッサは、投機命令ブロックの一部として行われるメモリ更新をバッファリングし、含めるための機能を提供することによって、より効率的なスレッドレベル投機実行を行うことが可能である。投機的メモリ更新を実行又は廃棄するよう命令されるまでメモリ更新をバッファリングすることができる。
【発明の概要】
【発明が解決しようとする課題】
【0006】
プログラムが投機実行したいことがあり得る対象の1つには、コード・ブロックが、その他のスレッド上で同時に実行しているその他のコードに依存するか否かということがある。プロセッサは、依存性の検出のサポートを提供するために、これをより効率的に行うことが可能である。例えば、プロセッサは、別の同時スレッドによって後に修正されるメモリ位置をコードの投機的ブロックが読み出すか否かを検出するためのサポートを提供することができる。
【課題を解決するための手段】
【0007】
本発明の実施例は、以下の図面(同じ構成要素は同じ参照符号で示す)を参照して分かり得る。前述の図面は、限定的であることを意図するものでなく、その代わりに、トラザクション実行サポートを備えた投機的マルチスレッド化を提供するためのシステム、方法及び機構の、選択された実施例を示すよう備えている。
【図面の簡単な説明】
【0008】
【図1】一般的な並列プログラミング手法を図で表すブロック図である。
【図2】本発明の少なくとも1つの実施例によるプロセッサの選択された特徴を示すブロック図である。
【図3】トランザクション実行サポートを備えた投機的マルチスレッド化を行う方法の少なくとも一実施例のデータ及び制御フローを示すフロー図である。
【図4】トランザクション実行サポートを備えた投機的マルチスレッド化を行う方法の少なくとも一実施例のデータ及び制御フローを示すフロー図である。
【図5】トランザクション実行サポートを備えた投機的マルチスレッド化を行う方法の少なくとも一実施例のデータ及び制御フローを示すフロー図である。
【図6】トランザクション・ブロックの実行に障害が生じた旨を判定するための機構の少なくとも1つの実施例を示すデータフロー図である。
【図7】本願開示の手法を行うことができるシステムの少なくとも1つの実施例を示すブロック図である。
【図8】トランザクション実行をサポートするためにアドレス・モニタ・テーブル及びアトミック更新テーブルを含むプロセッサの少なくとも1つの実施例を示すブロック図である。
【発明を実施するための形態】
【0009】
以下の説明では、スレッドレベルの同期実行に対するハードウェア・サポートを提供するための方法、システム及び機構の選択された実施例を表す。本明細書及び特許請求の範囲記載の装置、システム及び方法の実施例は、単一コア又はマルチコアのマルチスレッド化システムに利用することができる。以下の説明では、具体的な多くの詳細(プロセッサ・タイプ、マルチスレッド化環境、システム構成、データ構造や、命令のニーモニック及びセマンティックなど)を記載して、本発明の実施例のより徹底的な理解を提供する。しかし、前述の具体的な詳細なしで本発明を実施することができるということは当業者によって認識されるであろう。更に、本発明を不必要に分かりにくくすることがないよう、周知の特定の構造、回路及び同様なものは詳細に示していない。
【0010】
スレッドレベルの投機実行を利用するマルチスレッド作業負荷の場合、同時に実行するスレッドの少なくとも一部は(全部でなくても)同じメモリ空間を共有することができる。本明細書及び特許請求の範囲使用の語「協調型スレッド」は、同じメモリ空間を共有するスレッド群を表す。協調型スレッドはメモリ空間を共有するので、同じメモリ項目との間で読み出し及び/又は書き込みを行うことができる。よって、正確で有意義な作業を行うために、同時実行される協調型スレッドは互いに同期化されるべきである。
【実施例】
【0011】
図1は、メモリの共通の論理ビューを共有する2つの協調型スレッド125、126を図で示すブロック図である。前述の共有メモリ・マルチプロセッシングのパラダイムを、並列プログラミングと呼ばれる手法に用いることができる。この手法によれば、アプリケーション・プログラマは、「アプリケーション」又は「処理」と場合によっては呼ばれるソフトウェア・プログラムを、ソフトウェア・プログラムの並行処理を表すために同時に実行する対象の複数のスレッドに分割することができる。すなわち、さもなければ単一スレッド化されたプログラム又は「処理」120は、同時に実行することができる2つのスレッド126、125に分割することができる。
【0012】
図1は、各スレッド125、126がそれ自身のアプリケーション及びシステム状態202a、202bそれぞれを有することを示す。メモリの特定のロジカル・ビュー204が、特定の処理120に関連した協調型スレッド125、126によって共有される。よって、少なくとも1つの実施例の場合、協調型スレッド125、156はそれぞれ、処理120のオペレーティング・システムによって構成される仮想メモリの同じビューを供給することができ、互いの仮想アドレス空間に対する可視度を有し得る。
【0013】
図1は、記載を単純にするために、処理120の2つのスレッド125、126のみを示す。しかし、前述の例の例証は、限定するものと解されるべきでない。処理120に関連した協調型スレッドの数は、3以上であり得る。処理120に関連したスレッドの数の上限は、OSプログラム(図示せず)によって制限され得る。
【0014】
協調型スレッドのメモリ・アクセスの同期化を扱うための種々の手法が考え出されている。協調型スレッドの同期化を扱う一般的な手法には、メモリ・ロックの使用がある。特定のコード部分の共有データに対する排他的なアクセスを特定のスレッドが有することを保証するためにメモリ・ロックを用いることができる。従来のマルチスレッド・アルゴリズムでは、クリティカルな部分を複数のスレッドが同時に実行した場合に誤った挙動を生じ得る何れかのクリティカルなコード部分近くでロックを用い得る。前述の手法の場合、スレッドはロックを獲得し、そのクリティカルな部分を実行し、次いで、ロックを解除することができる。複数のスレッドが同時に実行することを阻止し得るので、性能がロックによって劣化し得る。必要以上に「念のために」、ロックが保有されている場合、性能が更に劣化し得る。すなわち、多くの場合、ロックは幾分悲観的に用いられ得る。
【0015】
ロックの性能の影響を最小にするために、別々のコード部分に関連するか、又は別々のコード・ブロックに関連した細かい粒度でロックが行われるように別々の複数のロックをアプリケーションによって用いることが可能である。細粒度ロックはコードで実現するのが面倒であり得るものであり、複数のロックのオーナシップを単一スレッドが獲得しなければならない場合、デッドロックを起こしやすいことがあり得る。
【0016】
種々の理由で、クリティカルな部分内の複数のスレッドによる共有データ構造組への同時アクセスは実際に、如何なる特定の生起の場合にも競合しないことがあり得る。前述の場合、ロックによって提供される直列化は、正確な実行を確実にするうえで必要でない。一スレッドが、開放されたロックを待ち、次いで、直列的にロックを、正確なメモリ値を維持するためにそうした直列化が必要でない場合であっても、獲得するので、前述の場合におけるロックの悲観的な使用によって、並列処理の利点の完全な実現が阻止され得る。
【0017】
よって、不必要な直列化を回避するための一手法は、投機的ロック回避(「SPE」)として知られている。SPE手法はロックのコストを削減することができる。前述の手法は、「Speculative Lock Elision: Enabling Highly Concurrent Multithreaded Execution, Rajwar et al., Proc. 30th ACM/IEEE Int’l. Symp. On Microarchitecture, 2001」に開示されている。前述の手法の場合、特定の同期化命令は悲観的に使用されており、必要でない。SPEの場合、特定の同期化命令は、必要でないとして予測され、回避される。同時に実行される2つのクリティカルな部分が同じメモリ位置の何れにも接触しない場合、ロックの人工的な直列化は回避される。
【0018】
前述のロッキング手法及びSPE手法とは別の手法として、トランザクション実行が登場している。トランザクション実行手法の下では、命令ブロックをアトミック・ブロックとして区分することができ、ロックの必要なくアトミックに実行することができる。(本明細書及び特許請求の範囲使用の「アトミック・ブロック」及び「トランザクション・ブロック」は同義で用いることができる。)区分された命令それぞれの正味の影響全てがみられ、プロセッサ状態にコミットされるか、又は、区分された命令の何れかの影響が何らみられないか、若しくはコミットされないように意味論を備えることができる。これは、同時処理の点で、かつ、プログラム・ライタによって行われることが必要な推論の点でもいくつかの利点を有する、共有メモリのアクセスのための同期化の別の形態を提供する。
【0019】
投機的ロック回避、及びトラザクション実行は何れも、スレッドレベルの投機的サポートによって達成することが可能である。何れの場合にも、意味論は、データ依存性の監視中にコード・ブロックを投機的に実行することを必要とする。必要なサポートは、投機的な領域内で行われるメモリ更新をバッファリングし、次いで、更新をコミット又は廃棄するための特定のやり方を含む。必要なサポートは、投機実行の期間中に別のスレッドによって修正された値が投機的領域内で読み出されたメモリに存在していることを検出する特定のやり方も含む。これは、投機的領域内で読み出されるメモリ・アドレス全てを記憶し、他のスレッドによる更新を求めてそれらを監視するための特定のやり方を必要とする。
【0020】
投機的マルチスレッド化は、プログラムをマルチスレッド化し、スレッドレベルの投機実行を用いるための別の手法である。投機的マルチスレッド化の場合、シーケンシャル・プログラムがシーケンシャル・タスク(又は、次いで並列に実行されるコード・ブロック)に分割される。元のシーケンシャルな意味論を維持するためにタスクはその更新をコミットすることが確実にされる。タスクは更に、観察した値を先行タスクによる更新が変えたかを求めて監視される。その場合、投機的更新を廃棄し、作業をやり直すことが必要である。これに対するハードウェア・サポートは、前述と基本的に同様のスレッドレベル投機実行サポートである。
【0021】
スレッドレベル投機実行に対するハードウェア・サポートをどのようにして構築するか、及び、ソフトウェア・インタフェースをどのようにして設けるかについて種々の多くの提案がされている。前述の手法の大半は、種々のインタフェースを介して、同様の基本機能を提供している。事実上、それらは、アーキテクチャ状態の一部をチェックポイントする。次いで、メモリ更新をバッファリングし、外部書き込みのために読み出されるメモリ位置を監視して、実行し続ける。
【0022】
協調型スレッドのアトミック・ブロックの実行中に、少なくとも1つの既知のトランザクション実行手法の場合、スレッドによって生成されるメモリ状態は投機的である。アトミック命令ブロックが、実行を首尾良く完了するか否かは分からないからである。すなわち、第2の協調型スレッドは同じデータを求めて競合し得るものであり、その場合、第1の協調型スレッドはアトミックに実行することが可能でないことが分かる。すなわち、第1の協調型スレッド及び/第2の協調型スレッドに関する誤投機実行が存在している。誤投機実行をもたらすために、少なくとも特定の本願提案のトラザクション実行手法によってアトミック・ブロックの命令の実行中に、プロセッサ状態は更新されない。その代わりに、プロセッサ状態は、アトミック・ブロックが実行を完了するまで、未定義の中間状態として維持される。
【0023】
前述の手法の場合、アトミック・ブロックの各命令におけるプロセッサの状態は、アトミック・ブロックの状態が最終的にコミットされるか否かに依存する。よって、アトミック・ブロックの実行中に、中間状態は、1)状態が最終的にコミットされる場合(前述の投機的メモリ・バッファにおいて維持される状態と同等である場合)、第1の状態であり、2)状態が最終的にコミットされない場合、第2の状態である。
【0024】
よって、特定の一般的なトランザクション実行手法の場合、アトミック・ブロックの中間状態は未定義である。これは、アトミック・ブロック内の命令に対する特定の処理(高精度のトラップ処理や単一ステップのデバッグなど)を実行不能にする。しかし、図2は、投機的スレッド化及びトランザクション実行をサポートし、アトミック・ブロック内の各命令の境界(確定など)における厳密なアーキテクチャ状態も提供する。
【0025】
図2は、トランザクション・ブロック内の命令を含む各命令の境界において、厳密なアーキテクチャ状態を提供する一方でトランザクション実行を実現する機能を提供するマルチスレッド・プロセッサ200を示すブロック図である。プロセッサ200は、一度に2つ以上のスレッドの同時実行をサポートする。本明細書及び特許請求の範囲使用の「スレッド」の語は、少なくとも、処理のその他のスレッドと同時に実行することができる命令ストリームの独立した実行の概念を含む。したがって、「スレッド」の語は、関連したプロセッサ状態とともにソフトウェア命令ストリームを実行するという考えを包含する。
【0026】
少なくとも一実施例の場合、プロセッサ200は、協調型スレッドの使用によって並列化されているアプリケーション・コードの一部分を実行することができる。例えば、スポーニー・スレッドと呼ばれる投機的スレッドは、スポーンを実行したスレッドによってプロセッサ200上で実行されるコードに、プログラム順序において先の命令を実行するようプロセッサ200上で実行することができる。スポーンを実行したスレッドは、スポーナ・スレッドと呼ばれる。
【0027】
図2は少なくとも1つのCMP実施例を示す。複数スレッド・ユニット104それぞれはプロセッサ・コアであり、複数のコア104a乃至104nが単一チップ・パッケージ103に存在している。各コア104は、単一スレッド・プロセッサ又はマルチスレッド・プロセッサである。少なくとも1つの実施例の場合、スポーナー・スレッド(例えば、104cなど)を実行するコアとは別個のCMPコア(例えば、104aなど)がスポーニー・スレッドを実行する。
【0028】
少なくとも1つの別の実施例の場合、プロセッサ200は、同時マルチスレッド化をサポートする単一コア・プロセッサであり得る。前述の実施例の場合、各スレッド・ユニット104は、それ自身の次命令ポインタ及びフェッチ・ロジックを有する論理プロセッサであるが、同じプロセッサ・コアが全スレッド命令を実行する。(「スレッド・ユニット」及び「シーケンサ」の語は本明細書及び特許請求の範囲では同義に用いている場合がある。)前述の実施例の場合、論理プロセッサ104はその自身のアーキテクチャ状態のバージョンを維持するが、単一のプロセッサ・コアの実行資源が全スレッド間で共有される。
【0029】
前述の別の実施例の場合、スポーニー・スレッドは、投機的マルチスレッド化をサポートする単一コア同時マルチスレッド化システムにおいて実行される。前述の実施例の場合、スポーニー・スレッドが、スポーナ・スレッドと同じ物理プロセッサ200上の第2のSMT論理プロセッサ(例えば、104aなど)によって実行される一方、スポーナ・スレッドは、別のSMT論理プロセッサ(例えば、104nなど)によって実行される。本明細書及び特許請求の範囲記載のトランザクション実行の実施例は何れかのマルチスレッド化手法(SMT、CMPマルチスレッド化やその他のマルチプロセッサ・マルチスレッド化や何れかのその他の既知のマルチスレッド化手法を含む)において利用することができる。
【0030】
本明細書及び特許請求の範囲記載のプロセッサ200のCMPの実施例は、プロセッサ・コア毎の単一スレッド104を表すが、本明細書及び特許請求の範囲記載の開示が、単一スレッド・プロセッサに限定されるとみなすべきでない。本明細書及び特許請求の範囲記載の手法は、何れのCMPシステム(単一チップ・パッケージ103内に複数のマルチスレッド・プロセッサ・コアを含むものを含む)においても利用することができる。
【0031】
よって、図2は、2つ以上のスレッド・ユニット104a乃至104nをプロセッサ200が含むことを示す。説明の目的で、スレッド・ユニットの数は「N」として表す。前述のスレッド・ユニット104が2つを超えることが任意の特性であることは、図2において点線及び省略で表す。すなわち、図2はN>2を示す。記載を単純にするために、CMP実施例を本明細書及び特許請求の範囲において更に詳細に記載する。すなわち、各スレッド・ユニット104は、32ビット・プロセッサ及び/又は64ビット・プロセッサ(ペンティアム(登録商標)、ペンティアム(登録商標)プロ、ペンティアム(登録商標)II、ペンティアム(登録商標)III、ペンティアム(登録商標)4、並びにアイテニアム(登録商標)及びアイテニアム(登録商標)2マイクロプロセッサなど)を表し得る。しかし、前述の部分的なリストは限定的に解されないものとする。
【0032】
図2に示すプロセッサ200の実施例は、投機的マルチスレッド化をサポートする特定の意味論を備えるよう構成される。(それぞれは、以下に更に詳細に説明する。)前述の構成の特定の具体的な実現形態を以下に説明するが、前述の実現形態の詳細は、例示の目的でのみ備えるものであり、限定的に解されないものとする。
【0033】
まず、プロセッサ200は、共有データのメモリ処理を含む命令組の最初及び最後を区分する特定のやり方(本明細書及び特許請求の範囲では「アトミック・ブロック」又は「トランザクション・ブロック」として同義で表す)を提供する。
【0034】
第2に、プロセッサ200は、協調型スレッド間の競合を検出するためにロード(メモリ・ロード)アドレスを監視するハードウェアを含む。
【0035】
第3に、プロセッサ200は、演算をバッファ記憶(メモリ書き込み)するためのハードウェア(「記憶バッファ」)を含む。
【0036】
第4に、プロセッサ200は、(アトミック・ブロックの実行中に競合が認識されない場合、記憶バッファからメモリのアトミック更新を行うよう構成される。
【0037】
最後に、プロセッサ200は、アトミック・ブロックの実行中に競合が検出された場合、記憶バッファのメモリ更新を廃棄し、障害を通知する。前述の一般的な機能は、プロセッサ200の少なくとも1つの実施例によって提供される。
【0038】
アトミック・ブロックの区分に関しては、プロセッサ200は、いくつかのやり方の何れかで前述のサポートを提供することができる。少なくとも1つの実施例の場合、プログラマは、命令演算コード自体に特定のビットをセットすることによって読み出し命令又は書き込み命令がアトミック・ブロックの一部である旨を示すことができる。例えば、「アトミック」インディケータは、命令演算コードの一部であり得るか、又は、ロード命令若しくは記憶命令の特定のプリフィックスによって示し得る。
【0039】
少なくとも1つの別の実施例の場合、プロセッサ200によってサポートされる命令セットは、明示的なアーキテクチャ区分命令を含み得る。すなわち、プロセッサ200の命令セットは、プログラマによってアトミック・ブロックの最初に配置し得る「監視開始」命令を含み得る。同様に、プロセッサ200の命令セットは、プログラマによってアトミック・ブロックの最後の命令の後に配置し得る「監視停止」命令も含み得る。少なくとも1つの実施例の場合、「監視開始」命令及び「監視停止」命令を行うよう制御レジスタを操作するために単一の命令を用いることができる。前述の命令及び制御レジスタの少なくとも1つの実施例の更なる説明は、図7に関して以下に記載する。
【0040】
前述の通り、投機的マルチスレッド化及びトランザクション実行をサポートするプロセッサ200の実施例は、協調型スレッド間の競合を検出するためにロード(メモリ読み取り)アドレスのハードウェアベースの監視を提供することができる。図2は、外部更新を求めて監視する対象の1つ又は複数のアドレスを記憶するためのテーブル106を含み得る。前述のテーブル106は、アドレス監視テーブル(「AMT」)と呼び得る。AMT106の論理コンセプトは、スレッド・ユニット104についてアーキテクチャ的に定義することができるが、必ずしも、別個のハードウェア・テーブル構造として実現されなくてよい。
【0041】
前述の通り、アトミック・ブロック内の潜在的な依存関係及び/又は共有データ競合があいまいであり得るので、AMT106は有用であり得る。プログラマは、アトミック・ブロックの実行中にアトミック・ブロックにおいて用いるアドレスに別のスレッドが書き込もうとすることを知っていた場合、同時実行中にその位置を読み出そうとしなかったであろうと思われる。すなわち、元のプログラムに競合/依存関係が存在していたことをプログラマが知っていた場合、前述のコード並列化は試行されなかったであろう。コードは、元々書き込まれていたように、順次に競合命令を実行することが可能であったであろう。よって、AMT106は、誤投機実行の識別に有用であり得る。
【0042】
更に、図2は、更新を行うスレッドが誤投機実行していないことが判定された場合、その後に行い得るメモリ更新をバッファリングするためのテーブル108も含むことができる。前述のテーブル108は、アトミック更新テーブル(「AUT」)と呼び得る。(SMT実施例の場合、テーブルの別々の部分を各論理プロセッサに割り当てて、単一のAMT106及びAUT108を論理プロセッサ間で共有することができる。)AUT108は、アトミック・ブロック中に行われるメモリ書き込みをバッファリングすることができる。前述の手法は、アトミック・ブロックの中間状態を利用するその他のスレッドを行うことを回避する。
【0043】
別のスレッドとの未解決の依存関係又は競合なしでアトミック・ブロックが実行を完了することができたか否かが最終的に判定されると、AUT108にバッファリングされたメモリ更新をアトミックに行うことができる。しかし、トランザクション・ファイルに障害が生じた場合(すなわち、競合、又は未解決のデータ依存関係が理由で、完全な実行をアトミック・ブロックが完了することができない場合)、AUT108はクリアリングすることができ、バッファリングされた更新は行われない。このようにして、誤投機実行が行われた旨の判定に応じて、既に行われたメモリ書き込みはアンロールしなくてよい。
【0044】
図2に示すプロセッサ200の少なくとも1つの実施例は、アトミック・ブロックにおける各命令の境界(確定など)における厳密なアーキテクチャ状態を以下のように提供する。プロセッサ200における特定のユーザ制御可能な状態は、アトミック・ブロックの命令の実行中にトラップ又は例外が生じた場合にトランザクション障害が生じるべきでない旨を示すよう設定することができる。その代わりに、例外/トラップが処理されている間、AMT106及びAUT108の内容は維持される。前述の処理後、アトミック・ブロックの実行は続行し得る。このようにして、トラップ又は例外が処理された後にアトミック・ブロックの実行を再開することができるように厳密な状態が維持される。
【0045】
図2にはAMT106及びAUT108を別個のブロックとして示しているが、前述の例証は、前述のテーブルが論理的に別個の構造であることを伝えることを意味している。前述のテーブル106、108はアーキテクチャ的に明示的であり得るが、その特定の編成及び物理構造は、設計上の選択であり、物理的な実現の厳密なやり方は、何れかの特定の構造又は編成に限定されると解されないものとする。一般に、AMT106及びAUT108の情報は、何れの記憶領域にも維持することができる。例えば、論理「テーブル」106、108は、ビットの収集物であり得るか、又はその他の既存のハードウェア構造の拡張であり得る。
【0046】
AMT106及びAUT108を実現する特定のやり方に関し、テーブル106、108は一般に、1つ又は複数の物理的な記憶領域に有限論理構成として実現することができる。テーブル106、108の有限性は必然的に、トランザクションとして首尾良く実行可能な命令の数を制限する。よって、バックストア160における1つ又は複数のメモリ・テーブルを用いて、AMT106及び/又はAUT108のサイズを拡張することができる。
【0047】
図2は、プロセッサ200の少なくとも1つの実施例がメモリ150に結合し得ることを示す。メモリ150の一部分をソフトウェアによって利用して、AMT106及び/又はAUT108のバックストア160を維持することができる。ソフトウェアは、オーバフロー・エントリのテーブル106、108からバックストア160への流出を制御することができる。
【0048】
少なくとも1つの実施例の場合、AMT106は、ロード・バッファと並列の構造として実現することができる。同様に、AUT108は、記憶バッファに並列の構造として実現することができる。前述の実施例の考えられる1つの構成を図8に示す。
【0049】
図8は、AMT106及びAUT108、並びに、ロード要求バッファ440及び記憶要求バッファ450を含むプロセッサ1004の少なくとも1つの実施例を更に詳細に示すブロック図である。AMT106、AUT108、記憶要求バッファ440及び/又はロード要求バッファ450のうちの1つ又は複数は、メモリ配列バッファ(MOB)223の一部であり得る。プロセッサ1004は、命令セットの命令を受け取り、デコードするためのデコーダ1022も含み得る。デコーダ1022は、命令を受け取り、デコードすることができることがあり得る。デコーダ1022によってデコードされる対象の命令は、表1に関し説明する動作の実行のための1つ又は複数の命令を含み得る。
【0050】
図8は、非ブロック化キャッシュ・メモリ・サブシステムを実現するプロセッサ1004を示す(キャッシュ・メモリ・サブシステムは時には、本明細書及び特許請求の範囲では略称「キャッシュ・システム」として呼ぶものとする)。キャッシュ・システムは、L0キャッシュ460及びL1キャッシュ410を含む。少なくとも一実施例の場合、L0キャッシュ460及びL1キャッシュ410はダイ上キャッシュである。プロセッサ1004は、主メモリ102からもデータを取り出すことができる。主メモリ102、L1キャッシュ410、及びL0キャッシュ460は併せてメモリ階層240を形成する。
【0051】
メモリ配列バッファ(「MOB」)223は、ディスパッチから完了までの未処理ロード及び記憶命令を一時的に保持することができる。少なくとも1つの実施例の場合、記憶命令のためのこの状態情報を記憶要求バッファ450に維持することができ、ロード命令のこの状態情報をロード要求バッファ440に維持することができる。
【0052】
少なくとも1つの実施例の場合、ロード命令のトラッキングは任意に、AMT106によって処理することができる。AMT106は、トランザクション実行中のロード要求バッファ440と共に利用することができる。
【0053】
少なくとも1つの実施例の場合、未処理記憶命令の状態情報は、通常の処理の場合に記憶要求バッファ450に維持することができるか、又は、代わりに、トランザクション実行中にAUT108において維持することができる。
【0054】
図8は、制御部分515を各記憶バッファ・エントリ450a乃至450nが含み得ることを示す。図8に示すように互いに論理的に関連しているが、必ずしも、記憶装置の連続した記憶領域に、記憶要求バッファ・エントリ450a乃至450nの制御部分515及びデータ部分480が物理的に存在していなくてもよく、同じ記憶装置に存在していなくてもよいことを当業者は認識するであろう。例えば、図8は、記憶バッファ450の制御部分515がMOB223に含まれ得る一方、データ部分480がダイ上キャッシュ410に存在し得ることを示す。
【0055】
少なくとも1つの実施例の場合、MOB223は制御ロジック475を含む。制御ロジック475は、記憶データをバッファリングすべき所が記憶要求バッファ450であるか、AUT108であるかを判定するための選択ロジック236を含む。少なくとも1つの実施例の場合、選択ロジック236は、記憶要求バッファ450及びAUT108の一方のみに記憶を記録すべきである旨を指示することができる。すなわち、記憶データを保持する所の判定は、「排他的論理和」演算であり得る。選択ロジック236は、アトミック実行が行われていない場合に、記憶状態を記憶要求バッファ450にバッファリングすることができる旨を示し得る。しかし、アトミック実行中、その代わりに、選択ロジック236は記憶状態をAUT108にバッファリングさせることができる。
【0056】
少なくとも1つの実施例の場合、選択ロジック236は、メモリから読み出された、ロード・データのメモリ・アドレスをAMT106に入力すべきか否かも判定するものとする。前述の入力は、アトミック実行中に、メモリ読み出しデータをロード要求バッファ440にプルする通常の処理とともに行うことができる。すなわち、AMT106におけるロード・アドレスを監視するか否かについての判定は、通常のロード要求バッファ440処理に加えて監視が行われるような選択的な処理であり得る。
【0057】
AMT106及びAUT108の利用によって、あいまいなデータ依存関係又はデータ競合が理由で並列化がさもなければ困難なコードの投機的マルチスレッド化が可能になる。論理アドレス監視テーブル106及び論理アドレス更新テーブル108の使用によって、プロセッサ200は、実行前にあいまいにみえる特定の潜在的なデータ依存関係又はデータ競合が実行中にスレッド間に存在し得ることを検出することができる。前述のように、テーブル106、108はよって、ロード(メモリ読み出し)処理の監視、及び記憶(メモリ書き込み)処理のバッファリングそれぞれをサポートする。
【0058】
図3は、AMT106及びAUT108を用いたトランザクション実行サポートによって投機的マルチスレッド化を行う方法300の少なくとも1つの実施例のデータ及び制御フローを示すフロー図である。一般に、方法300は、アトミック・ブロックの命令を実行するが、更新をメモリにバッファリングする。更に、方法300は一般に、同じアドレスへの書き込みを別のスレッドが行おうとしたかを判定するために、アトミック・ブロックの実行中に読み出されるメモリ・アドレスを監視するようにする。肯定の場合、アトミック・ブロックの実行中にそのメモリ・アドレスに対する競合が存在しており、ブロックのトランザクション実行は、メモリ・アドレスに対する競合が理由で障害が生じる。
【0059】
図3は、ブロック302で方法300が始まることを示す。トランザクション・ブロックとして区分されたブロック上で方法300が行われるものとする。したがって、少なくとも1つの実施例の場合、前述のように、方法300を開始する前に「監視開始」命令が実行されているものとする。更に、前述の実施例の場合、「監視停止」命令の実行によって、ブロック314での判定が偽の値に評価されるものとする。
【0060】
あるいは、アトミック・ブロックの一部として命令を実行するものとするプレフィックス、命令コード・フィールドやその他の個別化されたインディケータとともにアトミック・ブロック内の各ロード及び記憶命令をマーキングすることによって区分を表すことができる。前述の実施例の場合、任意のブロック308及び312(破線を用いることによって任意的として表す)を行って、命令がアトミック・ブロックの一部であるか否かを判定する。
【0061】
少なくとも一実施例の場合、方法300は、AMT106及びAUT108(図2参照)を含むプロセッサのスレッド実行ユニット(例えば、図2の104参照)によって行われるものとする。よって、命令がアトミック・ブロックの一部であるか否かの判定は、区分された命令の通常の実行中に行われたメモリ書き込みは何れも108にバッファリングされるべきであり、区分された命令の通常の実行中に行われた何れのメモリ読み出しのアドレスもAMT106に維持されるべきであることも示す。
【0062】
図3は、図示した方法300によるアトミック・ブロックの実行中のどの時点でも、トラップ、例外又は割り込みを行うことができることを示す。前述のイベントが行われた場合、厳密なアーキテクチャ状態を維持することができる。すなわち、AMT106及びAUTの内容を例外/割り込み/トラップ・イベントの処理中に維持することができる。前述のイベントは、障害をもたらす条件として扱われない。その代わりに、図3に示す方法300によるアトミック・ブロックの実行は、イベントの処理後に再開することができる。図3は、ブロック390において、前述のイベントが方法300の少なくとも1つの実施例の場合の障害条件でないことを示す。
【0063】
図3は、方法300の処理がブロック302からブロック304に進むことを示す。ブロック304では、スレッドの次命令がフェッチされ、デコードされる。処理は次いでブロック306に進む。ブロック306では、ブロック304でフェッチされ、デコードされた命令がメモリ読み出し命令(例えば、ロード命令など)であるか否かについて判定される。肯定の場合、処理は任意ブロック308に進む。さもなければ、処理はブロック310に進む。
【0064】
任意ブロック308は、命令がアトミック・ブロックの一部であるか否かを判定する。前述の判定のやり方は、種々の実現形態間で変わり得る。前述の情報をメモリ書き込み命令自体に埋め込まないが、その代わりに「監視開始」命令を用いる実現形態の場合、前述の判定308は、メモリ読み出し命令毎に行わなくてよい。その代わりに、ブロック302で、方法300の実行の開始の前に「監視開始」が実行されており、実行中に方法300がこのことを知っているものとする。例えば、少なくとも1つの実施例の場合、前述の情報は、制御レジスタ(後述するトランザクション制御レジスタ(「TCR」)など)に維持することができる。前述の実施例の場合、処理はブロック306からコネクタ「A」に進み、任意ブロック308は行わない。コネクタ「A」に関連した処理は、図4に関して更に詳細に説明する。
【0065】
ブロック310では、ブロック304でフェッチされ、デコードされる命令がメモリ書き込み命令(例えば、記憶命令など)か否かが判定される。肯定の場合、処理は任意ブロック312に進む。さもなければ、処理はブロック311に進む。
【0066】
任意ブロック312は、メモリ書き込み命令がアトミック・ブロックの一部であるか否かを判定する。やはり、前述の判定のやり方は、種々の実現形態の実施例間で異なり得る。メモリ書き込み命令自体に前述の情報を埋め込まないが、「監視開始」命令を用いる実現形態の場合、前述の判定312はメモリ書き込み命令毎に行わなくてよい。その代わりに、前述のように、方法300の実行の開始に先行して「監視開始」命令が実行されているものとする。やはり、前述の情報を制御レジスタに記憶することができる。前述の実施例の場合、処理はブロック310からコネクタ「B」に進み、任意ブロック312を行わない。コネクタ「B」に関連した処理は、図5に関連して更に詳細に説明する。
【0067】
ブロック304においてフェッチされた現在の命令がメモリ読み出し命令でもメモリ書き込み命令でもない場合、処理はブロック311に進む。命令はブロック311において実行される。処理は次いでブロック314に進む。
【0068】
「監視開始」及び「監視停止」命令を利用した実施例の場合、ブロック314が行われる。前述の実施例の場合、ブロック314における判定は、「監視停止」命令を受けなかった場合に「偽」と評価される。
【0069】
ブロック314は、「監視開始」区分命令を利用せず、その代わりに、個々のメモリ命令とアトミック・ブロック・インディケータを関連付ける実施例の場合にも行われる。前述の実施例の場合、ブロック314における判定は、特定の種類の終結インディケータに達したか否かを判定する。少なくとも1つの実施例の場合、終結インディケータは、AUT(108、図2)においてバッファリングされた更新をメモリにコミットすべきである、命令、又は、命令の演算コード若しくはプリフィックスであり得る。前述の実施例の場合、ブロック314における判定は、終結インディケータを受けなかった場合に「真」に評価される。
【0070】
ブロック314における判定が「真」に評価された場合、次命令をフェッチするために処理はブロック304にループ・バックする。さもなければ、処理はブロック318において終了し得るか、又は、任意的にブロック316に進み得る。
【0071】
トランザクション障害割り込みを受けることなく方法300がブロック316に達した場合、アトミック・ブロックは、競合なく実行を首尾良く完了している。よって、アトミック・ブロックの実行中にバッファリングされたメモリ更新はメモリにコミット(316)することができる。ブロック316では、AUT108からのバッファリングされたメモリ更新はよって、メモリにアトミックにコミットされる。AUT108のエントリは次いでクリアすることができる。ブロック316においてメモリにAUT108のエントリをコミットするアトミック更新は、命令(アトミック・ブロックの最後の命令後にプログラマによって入力される)に応じて行うことができる。前述の命令(すなわち、投機実行コミット命令)の例示的な実施例は、表1に関して以下に更に詳細に説明する。
【0072】
少なくとも1つの実施例の場合、他の動作もブロック316で行うことができる。例えば、アトミック・ブロックが実行を完了すると、後のメモリ読み出しのためにAMT106の更新をディセーブルするための動作を行うことができる。AUTテーブル108における後続メモリ書き込みのバッファリングもブロック316でディセーブルすることができる。方法300の処理は次いで、ブロック318で終了する。
【0073】
図4は、現在の命令がアトミック・ブロックのメモリ読み出し命令であることを図3のブロック306(及び、適宜、任意のブロック30)における判定が示す場合に行われる処理「A」の少なくとも1つの実施例を示すブロック図である。前述の場合、処理はブロック402に進む。ブロック402では、示されたメモリ・アドレスを読み出すために命令が実行される。処理は次いでブロック404に進む。
【0074】
ブロック404で、示されたメモリ・アドレスがアドレス・モニタ・テーブル(「AMT」)106に追加される。やはり、AMT106は論理的構成である。例えば、ブロック404では、指定されたメモリ・アドレスを含めるようAMTテーブルのエントリを実際に修正する代わりに、ブロック404の処理は別々の実施例についで違ったふうに処理することができる。一例に過ぎないが、チップ上のデータ・キャッシュに関連したステータス・ビットをトグリングして、キャッシュ・ラインにおけるメモリ・アドレスを、外部書き込みを求めて監視する旨を示すことができる。AMT106がブロック404で更新された後、処理は図3のブロック314に戻る。
【0075】
図5は、現在の命令がアトミック・ブロックのメモリ書き込み命令であることを図3のブロック310(及び、適宜、任意のブロック312)における判定が示す場合に行われる「B」を処理する少なくとも1つの実施例を示すブロック図である。前述の場合、処理はブロック502に進む。ブロック502では、メモリ書き込み命令が実行される。しかし、メモリ書き込み命令は、メモリを更新するのではなく、AUT108のエントリを更新する。このようにして、アトミック・ブロック中に行われるメモリ書き込みは、AUT108にバッファリングされる。
【0076】
やはり、AUT108は、論理的構成であり、種々のやり方でハードウェアにおいて実現することができる。例えば、少なくとも1つの例示的な実施例の場合、AUT108をゲーティングされた記憶キューとして実現することができる。AUT108がブロック502で更新された後、処理は次いで図3のブロック314に進む。
【0077】
アトミック・ブロックの区分の特定の形態とともにAMT106及びAUT108を用いることによってハードウェア・スレッド投機実行がサポートされることを前述した。更に、特定の命令及び状態も前述の手法に統合することができる。併せて、前述の構成要素は、広範囲に亘る投機的スレッド化モデルを可能にするための投機的スレッドの効率的な実行を可能にすることができる。
【0078】
図7は、論理AMT106テーブル及び論理AUT108テーブル、並びに特定のトランザクション実行状態950を含むスレッド・ユニット904の少なくとも1つの実施例を示すブロック図である。更に、スレッド・ユニット904は、アトミック・ブロックの各命令の境界における厳密な状態を提供するやり方でアトミック・ブロックのトランザクション実行をサポートすることができる特定の命令を実行することができ得る。
【0079】
図7に示すトランザクション状態950は破線で示すように任意である。すなわち、実行コア930におけるハードウェア状態として維持される代わりに、特定されたメモリ・アドレスによるメッセージ・パスを介してメモリにおいて維持することができる。しかし、少なくとも1つの実施例の場合、トランザクション状態950は1つ又は複数のハードウェア・レジスタに維持される。
【0080】
少なくとも1つの実施例の場合、トランザクション状態950を維持するためのレジスタは、トランザクション制御レジスタ951(本明細書及び特許請求の範囲では「TCR」
として表す)及びトランザクション・スタータス・レジスタ952(本明細書及び特許請求の範囲では「TSR」として表す)を含む。トランザクション制御レジスタは、AMT106及びAUT108に対する更新を制御する。トランザクション・ステータス・レジスタはAMT及びAUTの状態を通知することができ、トランザクション障害を示すこともできる。
【0081】
トランザクション制御レジスタ951は、セットされると、AMTテーブル106、AUTテーブル108に関連した各種の挙動をもたらす種々のビットを含み得る。トランザクション制御レジスタ951は、メモリ更新がバッファリングされているか否か、及び、依存関係検査についてメモリ参照が監視されるか否かを制御することができる。例えば、トランザクション制御レジスタは、以下の挙動それぞれを表すための1つ又は複数のビットを含み得る。
【0082】
AUTのリセットの強制
AMTのリセットの強制
AMTの直接更新
メモリ書き込みの直接バッファリング(AUTへの更新)
少なくとも1つの実施例の場合、複数の挙動を単一ビットによって示すことができる。例えば、トランザクション制御レジスタ951における単一ビットは、AUT及びAMTをリセットすべきである旨を表すことができる。
【0083】
特定の一実施例の場合、トランザクション制御レジスタ951(「TCR」)は、何れかの特定の時点においてフィールドに記憶された値に応じてAMT及びAUTの挙動を判定し得るものであり、かつ/又は各命令の実行に影響を及ぼし得るフィールドを含む。当然、その他の実施例はより多いか、又はより少ないビットを利用することができる。トランザクション制御レジスタ951の実施例の場合、フィールドは以下のように定義することができる。特定のビット数を例証的な目的でのみ記載しており、限定的に解されないものとする。何れかの任意の長さのレジスタにおいて、以下に記載したビット・フィールドを実現する実施例の場合、以下に記載していない更なるフィールドは「予約済」であり得る。前述の予約済ビットは、書き込み無視、読み出しゼロとして実現することができる。
【0084】
TCRリセット・ビット TCR951の2つの1ビット・フィールドは、AMT及びAUTをリセットし、クリアするために用いられる書き込みのみのビットであり得る。
【0085】
AMTクリア・ビット(TCRビット0、書き込みのみ)は、AMTのリセットを制御する。「1」がこのビット位置に書き込まれた場合、有効なエントリが存在しないようにAMTがクリアされる。AMTクリア・ビットは0を示す。
【0086】
AUTクリア・ビット(TRCビット1、書き込みのみ)は、AUTのリセットを制御する。「1」がこのビット位置に書き込まれた場合、バッファリングされた投機的メモリ更新は廃棄される。AUTクリア・ビットは0を示す。
【0087】
TCR更新ビット TCR951の2つの1ビット・フィールドを用いて、AMT又はAUTの更新に関する命令実行の挙動を制御することができる。
【0088】
AMT更新ビット(TRCビット2)は、AMTの更新を制御する。AMT更新ビットがセットされた場合(「1」の値)、AMTは、命令によって読み出されるメモリ位置毎に更新される。セットされない場合(「0」の値)、AMTは、命令が実行された際に更新されない。ソフトウェアは、監視されたメモリ参照及び監視されないメモリ参照を混ぜることを可能にするようこのビットの状態をトグリングすることが可能である。AMT更新ビットがセットされ、トランザクションに障害が生じた場合(ステータス・ビット参照)、AMTは更新しなくてよい。
【0089】
AUT更新ビット(TRCビット3)は、リングレベル3(ユーザ・モード)においてメモリ更新のバッファリングを制御する。AUT更新ビットがセットされた場合(「1」の値)、命令によってリングレベル3において行われたメモリ更新はバッファリングされ、トランザクション・コミット処理までメモリに対して行われない。ビットがセットされない場合(「0」の値)、命令によるメモリ更新はバッファリングされず、通常と同様に、メモリに対して直接行われる。AUT更新ビットがセットされ、トランザクションに障害が生じた場合(スタータス・ビット参照)、リングレベル3において行われたメモリ更新はバッファリングしなくてよく、単に廃棄することができる。
【0090】
任意のTCRビット 別の実現形態は、TCRにおいて定義される対象の以下のフィールドの1つ又は複数を提供することができる。
【0091】
AUT非バイパス・ビット(TCRビット6)は、AUTがイネーブルされた場合に通常行われるような書き込み後読み出しバイパスについてAUTを検査することなくそのメモリ位置の値を命令が確かめることによってメモリ読み出しを引き起こす。上記ビットが実現形態においてサポートされない場合、ビットのセット(値「1」の書き込み)の試行によって、モードがサポートされないビットが、トランザクション・スタータス・レジスタにおいてセットされる。これは、アクティブなトランザクションの障害を強いる。
【0092】
ハンドラにおけるAUT更新(TCRビット7)は、3より低いリングレベルにおいてメモリ更新を実施する。AUTイネーブル・ビットとこのビットが両方セットされた場合(「1」の値)、何れのリングレベルにおけるメモリ更新もAUTにバッファリングされる。リングレベル3におけるこのビットに対する更新は無視される(値は変わらない)。このビットは、(トラップ/例外/割り込みで)リングレベル3から、より低いリングレベルへの遷移でゼロに自動的にクリアされ得る。このビットが実現されない場合、3よりも低いリングレベルにおける更新の試行は、トランザクション・ステータス・レジスタにおいてトラップ・フォース障害ビットをセットさせ得る。これは、アクティブなトランザクションの障害を強いることがあり得る。
【0093】
トランザクション・ステータス・レジスタ952は、アトミック・ブロックの実行に関する特定のステータス状態を反映するための1つ又は複数のビットを含み得る。トランザクション・ステータス・レジスタ952の内容は、トランザクションのステータスを示し得るものであり、トランザクション障害を示し得る。例えば、トランザクション・ステータス・レジスタ952は、以下のステータス状態を表すための1つ又は複数のビットを含み得る。
【0094】
トランザクション障害が生じたか否か
トランザクション障害の理由(障害が生じた場合) このフィールドの値はオーバフロー、衝突等を含み得る。
【0095】
AMT状態 このフィールドの値は、フル、フルでない、空き、空きでない等を含み得る。
【0096】
AUT状態 このフィールドの値は、フル、フルでない、空き、空きでない等を含み得る。
【0097】
アトミック・ブロックの実行中にトラップが行われたか否か
トラップがトランザクション障害を引き起こしたか否か
特定の一実施例の場合、トランザクション・ステータス・レジスタ952(「TSR」)は、AMT、AUT及び現在のトランザクションの一般的な状態についてのステータス情報を、何れかの特定の時点においてフィールドに記憶されている値に応じて提供し得るフィールドを含む読み出し専用レジスタである。当然、その他の実施例は、より多くの、又はより少ないビットを利用することができる。トランザクション・ステータス・レジスタ952の実施例の場合、フィールドは以下のように定義することができる。特定のビット番号は例証の目的でのみ記載しており、限定的に解されないものとする。任意の容量のレジスタにおいて、後述のビット・フィールドを実現する実施例の場合、以下に記載されていない更なるフィールドは「予約済」であることがあり得る。前述の予約済ビットは、書き込み無視、読み出しゼロとして実現することができる。
【0098】
少なくとも一実施例の場合、TSR952の最初のビットは、現在のトランザクションに障害が生じているかを示す。次の4ビットは、AMT及びAUTの状態についての情報ビットである。第6のビットは、アクティブなトランザクションが存在していた(AMT及び/又はAUTが空きでない)間に生じたトラップ/例外/割り込みを示す。最後のビット組は、現在のトランザクションに障害が生じていることを示し、その理由についての情報を提供するために用いることができる。
【0099】
TSRのビットそれぞれは、特定の状況においてハードウェアによってセットすることができる。各ビットは1つ又は複数のイベントによって影響され得る。複数のイベントが同時に生じた場合、ビットをクリアするイベントは、ビットをセットするイベントよりも高い優先度を有し得る。
【0100】
トランザクション障害ビット 現在のトランザクションに障害が生じた場合、トランザクション・ステータス・レジスタの第1のビットがセットされる)最後の8個のステータス・ビット(ビット6乃至ビット13)がセットされる。
【0101】
トランザクション障害ビット(TSRビット0)は、現在のトランザクションに障害が生じたことを示す。このビットがセットされている場合、障害の原因を示すようビット6乃至ビット13のうちの少なくとも1つもセットされる。
【0102】
情報ビット TSRの次の4ビットは、AMT及びAUTのステータスについての情報ビットである。AUT若しくはAMT、又は両方が空きでない場合、トランザクションはアクティブであるとみなされる。これは、以下に定義する空きでないビットによって示す。上記ビットは以下の通りである。
【0103】
空きでないAMTビット(TSRビット1)は、少なくとも1つの有効エントリをAMTが有していることを示す。
【0104】
AMTフル・ビット(TSRビット2)は、AMTがフルであるか又はほとんどフルであることを示す(厳密な定義は、実現形態に依存する)。AMTへのその後の更新によって、構造がオーバフローする可能性が高くなることをこのビットは示す。
【0105】
空きでないAUTビット(TSRビット3)少なくとも1つのバファリングされたメモリ更新をAMTが有していることを示す。
【0106】
AUTフル・ビット(TSRビット4)は、AUTがフルであるか又はほとんどフルであることを示す(厳密な定義は、実現形態に依存する)。AMTへのその後の更新によって、(既にオーバフローしていない場合)構造がオーバフローする可能性が高くなることをこのビットは示す(まだオーバフローしていない場合)。
【0107】
トラップ・ビット AMT106又はAUT108が空きでない場合にトラップ/例外/割り込みが生じたことを示すためにTSR952の第5のビットをトラップ・ビットとして用いることができる。このビットは、トランザクション・クリア・トラップ・ビット命令(例えば、以下の表1におけるTRNXOK命令)によってクリアすることが可能である。トラップ・ハンドラが戻った場合、又は、その後のトラップ/例外/割り込みが生じた場合にこのビットがなおセットされている場合、トラップ・フォース障害ビットがセットされ、トランザクションに障害が生じ得る。
【0108】
トラップ・ビット(TSRビット5)は、AMT又はAUTが空きでない場合に、トラップ・ビット(TSRビット5)は、ハードウェアによってトラップ/例外/割り込みの際に自動的にセットすることができる。ユーザレベル・ハンドラに対してビットをセットすることはできない。トランザクションセーフであることを知っているトランザクションアウェア・ハンドラは、トランザクション・クリア・トラップ・ビット命令によってハンドラに入る際にこのビットをクリアし得る(例えば、以下の表1のTRNXOK命令参照)。このようにして、トラップ/例外/割り込みが行われた際に行われたアトミック・ブロックの実行をイベントの処理後に再開することができるようにトラップ又は例外を非障害状態として処理することができる。
【0109】
トランザクション障害ビット トランザクションに障害が生じたことを示すフィールドとしてTSR108の次の8ビットを用いることができる。アクティブなトランザクションが存在しており(AUT106及びAMT108の一方又は両方が空きでなく)、以下の8ビットの何れかがセットされた場合、トランザクションに障害が生じたとみなされる。
【0110】
AMTオーバフロー・ビット(TSRビット6)は、AMTがオーバフローし、トランザクションによって読み出される少なくとも1つのメモリ位置が、監視のためにAMTにおいてログインされていないことを示す。
【0111】
AMTコヒーレンシ衝突ビット(TSRビット7)は、AMTに、エントリと、メモリへの外部更新との間で衝突、又は衝突の可能性(保守的な近似は許容される)があった旨を示す。
【0112】
AMTオーバフロー・ビット(TSRビット8)は、AUTがオーバフローしており、バッファリングされるはずであった少なくとも1つのメモリ更新が廃棄されていることを示す。
【0113】
AUTコヒーレンシ衝突ビット(TSRビット9)は、AUTがコヒーレンシ・イベントをみた(バッファリングされた更新を完了することを可能にしない)ことを示す。
【0114】
AUTバッファ・バイパス不可ビット(TSRビット10)AUT内の更新バッファリングをバイパスした直接メモリ更新をプロセッサがサポートしない場合に、AUTがイネーブルされ、空でない間にAUT更新ビットがクリアされた場合、このビットはハードウェアでセットすることができる。
【0115】
AUT障害RAWビット(TSRビット11)は、正しい書き込み後読み出しの意味論を提供するためにAUTからバイパスされた値を得ることができなかったか、又は、AUTにおける更新に関してあいまいさがあり、ロードの正しい値を求めることができなかったので、実行されるロードが、不整合の値をみたことがあり得ることを示す。あいまいさがある場合、ロードについて戻される値は、メモリからの値であり、AUTからの値でない。
【0116】
トラップ強制障害ビット(TSRビット12)は、AMT又はAUTが空きでなかった状態にある間にトラップ/例外/割り込みによって障害が強制されたことを示す。これは、より下位のリングレベルへの遷移の動作による特定の動作、又はより下位のリングレベル内の動作によって、アクティブなトランザクションに障害をもたらすことを示す。AUTが空きでなく、プロセッサは、バッファリングされた更新をバイパスするメモリ更新をサポートしないのでこのビットをセットすることが可能である。このビットは、トラップ/例外/割り込みが生じた場合、又はトラップ/例外/割り込みからの戻りが生じ、トラップ・ビット(TSRビット5)が現在セットされている場合、このビットもハードウェアによってセットすることができる。
【0117】
サポートされないモード・ビット(TSRビット13)は、トランザクション制御レジスタへの書き込みが、サポートされないモードにプロセッサを入れようとする場合、ハードウェアによって自動的にセットされる。
【0118】
AMT106に関連したTSR952ステータス・ビット全ては、AMT106がクリアされた場合にゼロに自動的にクリアすることができる。前述のクリアは例えば、TCR951のAMTクリア・ビットへの「1」の書き込みに応じて、又はトランザクション・コミット命令に応じて行うことができる。
【0119】
同様に、AUT108に関連したTSR952ステータス・ビット全ては、AUT108がクリアされた場合にゼロに自動的にクリアすることができる。前述のクリアは例えば、TCR951のAUTクリア・ビットへの「1」の書き込みに応じて、又はトランザクション・コミット命令によって行うことができる。
【0120】
AMT106及びAUT108が同時にクリアされるか、又はAMT106又はAUT108がクリアされ、他方の構造が空きの場合に、TSR951の残りのビット全て(すなわち、AMT106又はAUT108に直接関連していないもの)を自動的にゼロにクリアすることができる。クリアは、TCR951のAMT106クリア・ビット及び/又はAUT108クリア・ビットに対する書き込みによって、又はトランザクション・コミット命令によって行うことが可能である。
【0121】
図7は、メモリ・システム902に記憶されたユーザ・プログラム960が、いくつかのマルチスレッド・パラダイムの何れかの実現に有用な命令を含み得ることを示す。前述の命令を用いれば、例えば、プログラマは、トランザクション実行、SPE、ロック回避、及び/又はその他のマルチスレッド・プログラミング・パラダイムを実現することができる。
【0122】
図7は、何れか又は全ての前述の命令の使用が任意であることを破線によって示す。本発明の少なくとも一実施例によるスレッド・ユニット904は、以下に表1に表す命令又は「プリミティブ」の1つ又は複数のデコードし、実行することができる。一般に、命令は以下のうちの1つ又は複数を含み得る。トランザクション制御レジスタに書き込むための命令、バッファリングされたメモリ更新のコミットをトリガするための命令、トランザクション・ステータス・レジスタを読み出すための命令、及び/又は、トラップ/例外/割り込み処理に関連したトランザクション・ステータス・レジスタ・ビットの1つをクリアするための命令。当然、別の実施例は、上記機能を実現するために、表1に示すものよりも多いか、又は少ない命令を用いることができる。
【0123】
【表1】

TRNXSET命令は、少なくとも一実施例の場合、トランザクション制御レジスタ(TCR)951に値を書き込む。TRNXSET命令の実行は、トランザクションの開始又は障害ももたらし得る。命令を用いて、メモリ読み出し(ロード)アドレスの監視を一時的にディセーブルすることもできる。
【0124】
AMT106及びAUT108がクリアされるようTCR951にビットをセットすることにより、かつ、アトミック・ブロックにおけるメモリ命令に基づいてテーブル106、108の更新及び検査をもたらすようTCR951にビットをセットすることにより、トランザクションの最初を区分するためにTRNXSETを用いることが可能である。TRNXSET命令の実行の結果としてTCR951に書き込まれる値は、ソース・レジスタにおける値に基づき得る。ソース・レジスタのビットの一部分を、TCRに書き込む対象の値として用いることができる。ソース・レジスタのビットの別の部分を保存マスク(更新マスクの逆)として用いることができる。保存マスクにおいてゼロを値を備えた各ビットは、更新値からの値によって更新された、TCRにおける値を有する一方、保存マスクにおいて1の値を備えた各ビットは、その先行値として保存されたTCRにおける値を有する。TRNXSET命令は、何れの特権レベルでも実行することが可能である(しかし、通常、CPL3において、又は、トランザクションアウェアな特定のトラップ・ハンドラにおいてのみ用いられるものとする)。
【0125】
トランザクション内のアドレス監視をオフにし(AMT更新をオフにし)、その後、監視をオンにして、特定のメモリ・アドレスをAMTに監視させることなく特定のメモリ・アドレスのアクセスを可能にするために、TRNXSET命令を用いることも可能である。ブロックの障害につながることなくヘッド・トークンの概念を投機的ブロックに渡すことが可能であるように投機的マルチスレッド(マルチスカラ)実行を実現するためにこのことは重要である。
【0126】
AMT及びAUTをクリアし、TCR951を「ディセーブル」及び「更新なし」にセットすることによって、トランザクションの障害を強制するために、TRNXSET命令を用いることも可能である。
【0127】
少なくとも一実施例の場合、TRNXCMT命令の実行によって、プロセッサ904にトランザクション・ステータス・レジスタ952(TSR)の値を検査させることができる。トランザクション障害ビットがセットされていない場合、TRNXCMT命令の実行によって、アトミックに実行されているようにみえるようにメモリ902に対して、AUT108からのバッファリングされたメモリ更新をプロセッサ904に行おうとさせることができる。
【0128】
TRNXCMT命令の実行は、AMT106及びAUT108をプロセッサ904にクリアさせることができる。前述の実行は、トランザクション制御レジスタTCR951を全てゼロの値にクリアすることもできる。AUT108からのバッファリングされた更新を首尾良く行ったかを示すための値をTRNXCMT命令は、ソース・レジスタに戻すことができる。更新を行うことが可能でなく、その代わりに、更新が廃棄された場合、プロセッサ904は、ゼロの値でソース・レジスタを更新することができる。更新が行われた場合、プロセッサ904は、ソース・レジスタを非ゼロ値で更新することができる。AUT108が空きの場合、少なくとも1つの実施例の場合、コミットは首尾良く行われたとみなすことができ、非ゼロ値をソース・レジスタに戻すことができる。
【0129】
TRNXRD命令の実行は、トランザクション制御レジスタ(TCR)951及びトランザクション・ステータス・レジスタ(TSR)952の値をデスティネーション・レジスタに、プロセッサ904に読み出させることができる。少なくとも1つの実施例の場合、トランザクション制御レジスタ951の値を、特定の固定量だけ左シフトさせ、トランザクション・ステータス・レジスタ951の値とのORをとって、デスティネーション・レジスタに書き込まれる値を生成する。
【0130】
少なくとも1つの実施例の場合、TRNXOK命令の実行は、トランザクション・ステータス・レジスタのトランザクション・トラップ・ビット(ビット5)にゼロの値を、プロセッサ904に書き込ませる。トランザクション・トラップ・ビットがセットされると、アトミック・ブロックの実行中にトラップが行われた場合に、トラップ・ハンドラは、誤差の強制を回避することができる。
【0131】
すなわち、TRNXOK命令を用いることにより、かつ、TCR951に特定のビットをセットすることにより、プログラマは、トラップ・ハンドリング中にAUT/AMTを更新するか否かを明示的に制御する。デフォールトによって、オフの間、トラップを行うことによってAMT106テーブル及びAUT108テーブルが更新されるようにプロセッサ904を構成することができる。前述のデフォールト動作の場合、アトミック・ブロック中に行われるトラップによってトランザクションが終結し、AMT106及びAUT108が静止する。トラップが戻ると、トランザクションには障害が生じ、中間状態を廃棄させる。しかし、前述のデフォールト動作は、TRNXOK命令によって無効にされ得る。それによって、アトミック・ブロックの実行中にトラップが行われた場合にトランザクション障害を強制することをトラップ・ハンドラが回避することが可能になり、アトミック・ブロックの実行中に生じるトラップ又は例外の処理にわたってAMT106及びAUT108の状態が持続することが可能になる。前述の実施例では、トラップが戻った場合、トランザクションに障害は生じず、アトミック・ブロックの実行は、トラップ又は例外が生じた時点に存在した厳密なプロセッサ状態から再開し得る。
【0132】
少なくとも1つの実施例の場合、TRNXOK命令の動作は、トラップ・ハンドラが作業をトランザクションの一部として実行することを可能にする。TCR951の現在値によって示された場合、AMT106及びAUT108のテーブルをトラップ処理中に更新することができる。よって、少なくとも1つの実施例の場合、少なくとも一部の種類のトラップ及び例外は、アトミック・ブロック内から処理することができる。
【0133】
プロセッサ904の少なくとも1つの実施例は、アトミック・ブロックにわたる単一ステッピングを可能にし得る。このことは、AMT106及びAUT108の値を維持しながら、アトミック・ブロック外部から単一ステップ・デバッガを実行することを可能にする。この効果として、プログラマは、本発明の少なくとも1つの実施例によれば、アトミック・ブロックにわたってシングルステップし、各命令の最後におけるアークテクチャ状態をみることができる。前述の手法は、ソフトウェア・デバッグの従来の手法をアトミック・ブロック内で用いることを可能にする。
【0134】
この特徴は、アトミック・ブロックの命令の実行中に中間状態が未定義である他の手法と対照的である。前述の手法の場合、中間状態は、トラップを処理することができるか、又はシングルステップを行うことができる前にコミット若しくは廃棄される。
【0135】
少なくとも1つの他の実施例の場合、TRNXOK命令は、トラップ・ハンドラが作業をトランザクションの一部として行うことを可能にし得るが、トラップ・ハンドラは、アトミック・ブロック外部から、AMT106テーブル及びAUT108テーブルをバイパスして、メモリとの間で直接、読み出し、書き込むことができる。AMT106及びAUT108をバイパスするか否かは、TCR951の値によって示すことができる。前述の手法は、トラップ・ハンドラがアトミック・ブロック外部にある間に実行することを可能にする。
【0136】
要約すれば、投機的スレッドにおける命令ブロックをトランザクション・ブロックとして区分し、更新がバッファリングされ、後に廃棄されるか、又は後にアトミックに実行されるようにハードウェアに実行させることを可能にする命令セット拡張組として実現することができる。上記拡張は、外部更新を検出してメモリ依存関係を検出するようメモリ・アドレス読み出しを監視するようにすることもできる。前述の拡張はよって、ソフトウェアが投機的スレッド実行を試行することを可能にすることができる。このハードウェアは、投機的スレッドの効率的な実行が、広範囲の投機的スレッド化モデルを可能にするためのサポートを提供する。
【0137】
前述の命令をサポートするプロセッサ(図7に示すプロセッサ904など)には、投機的トランザクションが首尾良く行われることの何らかの保証を備えることが必ずしも要求されない。その代わりに、ハードウェアは、障害をソフトウェアに正しく通知する限り、トランザクションを処理できなくてもよい。
【0138】
図6は、トランザクション・ブロックの実行に障害が生じたと判定するための機構の少なくとも1つの実施例を示すデータフロー図である。図6は、2つの協調型スレッド(スレッドA125及びスレッドB126)を示す。当然、図6に示す機構は、何れかの数(Y)の協調型スレッド(Y>2)に用いることができることを当業者は認識するであろう。
【0139】
図6は、第1の時間t1(第1の協調型スレッド125が、アトミック・ブロック602の実行を開始する)を示す。時間t2での、アトミック・ブロック602の実行中に、第1のスレッド125は、特定のアドレスのメモリ読み出し命令を実行する。メモリ・アドレス「000A」として図6に示すアドレスが、命令が実行される時間(t2)においてAMT106に入力される。
【0140】
図6は、時間t3で、第2のスレッド(スレッドB126)が、第1のスレッドによって読み出されたメモリ・アドレスに対する書き込みを実行する。第2のスレッドによる更新は、第1のスレッドがメモリ・アドレスを読み出した後に、かつ、第1のスレッド(スレッドA125)が実行を完了する前に生じる。前述の、アトミック・ブロックの実行中に第1のスレッドによって既に読み出されているアドレスへの第2の協調型スレッドによる書き込みの試行は、ハードウェアによって認識される。AMT106におけるアドレスの1つに対する「外部」書き込みとして認識されるからである。前述のイベントは、アトミック・ブロック602の実行に障害が生じたことを示すよう非同期イベントを引き起こし得る。
【0141】
図6に示すデータフロー図は、アトミック・ブロックの実行中の障害の一インスタンスのみを示す。先行して読み出されたメモリ・アドレスに対する外部書き込み以外の他のイベントによって、アトミック・ブロックの実行に障害が生じることがあり得る。前述のイベントの1つとして、例えば、「テーブル・フル」、又はAMT106若しくはAUT108のオーバフローがある。前述の別のイベントとして、例えば、AUT108における書き込み後読み出し(「RAW」)違反がある。コヒーレンシ衝突等などの他の障害状態も実現することができる。
【0142】
アトミック・ブロックの実行に障害が生じたことをソフトウェアに通知するための種々の機構を利用することができる。アトミック・ブロックの障害を生じさせ得る何れかのイベントの場合、前述のイベントは、割り込みなどの非同期イールド・イベント(yield event)としてスレッド・ユニット(例えば、図2のスレッド・ユニット104など)によって通知することができる。少なくとも1つの実施例の場合、障害イベントはユーザ・レベル割り込みを引き起こすことができる。
【0143】
トランザクション実行の障害を示すためのユーザ・レベル割り込みを実現する1つのやり方は、本明細書及び特許請求の範囲では、ユーザ・レベル・フライ級割り込み処理として表す。前述の機構は、特定のトリガ・イベントを示すことができるチャネルを含み得る。トリガ・イベントは「シナリオ」として表すことができる。トリガ・シナリオは、アーキテクチャ的に定義された1つ又は複数のイベント組であり得る。あるいは、トリガ・シナリオは、ユーザ定義された1つ又は複数のイベント組であり得る。チャネルに規定されたトリガ・シナリオを検出すると、制御をユーザレベル・ハンドラ・ルーチンに移すことができる。前述のユーザ・レベル・フライ級割り込み処理機構の少なくとも1つの実施例の更なる説明は、「A programmable event driven yield mechanism which may activate service threads」と題する同時係属中の特許出願(代理人整理番号P14912X)で見つけることができる。
【0144】
図7に示すプロセッサ実施例904の場合、本明細書及び特許請求の範囲記載のトランザクション実行手法の1つ又は複数の実施例をサポートするための1つ又は複数のシナリオを定義することができる。少なくとも1つの実施例の場合、TSR952の内容が変わると割り込みが生成されるようなシナリオ(「ステータス更新シナリオ」)を定義することができる。すなわち、TSR952の内容が、特定のやり方で更新されると、割り込みを生成することができる。
【0145】
ステータス更新シナリオは、トランザクション・ステータス・レジスタ(TSR)をマスクによって監視することによって実現することができる。ステータス更新シナリオはよって、TSRに施されるマスクに関連付けることができる。マスクのAND演算、及びTSRが非ゼロ値をもたらし、プロセッサがリングレベル3にある場合、シナリオは、ユーザ・レベルのイベント・ハンドラをトリガし得る。トランザクションに障害が生じた旨をTCR952が示す場合に、ステータス更新シナリオに基づいた割り込みを生成することができるようにマスクを定義することができる。
【0146】
よって、障害をソフトウェアに正しく通知する限り、図7に示すプロセッサ904などのプロセッサがトランザクションを処理できなくてもよいことを上記説明は示す。すなわち、前述のハードウェア手法に基づいて、アトミック・ブロックが首尾良く実行されることをプログラマは保証されない。少なくとも1つの実施例の場合、他の協調型スレッドからの競合なしでアトミック・ブロックが実行を完了することを確実にするために、必要な場合、1つ又は複数のユーザレベル・ソフトウェア命令をプログラマが用いることができるように更なる機能がプロセッサ904によって提供される。前述の更なる機能は、本明細書及び特許請求の範囲では、「ストップザワールド」機能として表す。
【0147】
多数のメモリ命令(例えば、ロード及び/記憶命令)をアトミック・ブロックが含んでいてもアトミック・ブロック実行を確実にするためにストップザワールド機能を利用することができる。他のトランザクションとアトミック・ブロックが常に衝突してもアトミック・ブロック実行を確実にするためにストップザワールド機能を利用することもできる。一般に、そのソフトウェアが前述の命令(表1参照)を用いて投機的コード・ブロックを実行しようとし、有限の資源限度の理由で、又は、反復的メモリ相互関係違反の理由で、首尾良い実行の可能性が低いと判定した場合にストップザワールドをソフトウェアで利用することができる。ソフトウェアは、投機的スレッド化ハードウェアを用いることなくストップザワールド・プログラミング抽象化を起動させることができる。
【0148】
AMT106やAUT108などの論理構造に依存するのでなく、アトミック・ブロックの実行中に他の協調型スレッド全てを停止することによってアトミック性を保証するようユーザ・レベル割り込みを利用するソフトウェア層(ライブラリやランタイム・ルーチンなど)によってストップザワールドを提供することができる。ストップザワールド機能は、プロセッサ904によってサポートされる2つの割り込みシナリオを利用することができる。
【0149】
ストップザワールドを実現するよう利用することができる第1のシナリオは、外部更新シナリオである。すなわち、上記シナリオは、外部更新を求めて、特定のメモリ・アドレスを監視し、前述の更新が生じた場合に割り込みを生成するための機能を提供する。「外部」更新は、メモリ・アドレスにおける値が別の協調型スレッドによって書き込まれたことを意味するものと理解し得る。よって、下にあるプログラミング・モデルの実現における同期化のために他の協調型スレッド全てを一スレッドが割り込む機構を外部更新シナリオは提供することができる。より早い投機的タスクが完了しており、投機的タスクが非投機的になるよう移行することが可能である状態になった時点で投機的タスクが通知されることが可能であるようにこの同じシナリオを用いることもできる。
【0150】
ストップザワールドを実現するよう利用することができる第2のシナリオは、「特権から復帰」のシナリオである。第2のシナリオは、トラップ/例外/割り込みハンドラからユーザ・コードに制御が戻った時点でユーザハンドラを呼び出すというものである。上記シナリオは、リングレベル3への移行が生じた時点を検出し、ユーザレベル・ハンドラを呼び出す。前述のシナリオは基本的には、トラップ/例外/割り込みハンドラからリングレベル3に制御が戻る都度、ユーザレベル・ハンドラが呼び出されることを可能にする。このスレッドが同期化されるべきソフトウェアをその協調型スレッドが現在実行しているかをスレッドが検査することをこのシナリオは可能にする。スレッドがハンドラにあったか、又は、アクティブにスケジューリングされていなかった状態で協調型スレッドが同期化されていた場合にこのことは生じ得る。
【0151】
前述の2つのシナリオを利用して、停止協調型スレッドからの衝突なしで特定の協調型スレッドがアトミック・ブロックを実行することができるようにプログラムは他の協調型スレッド全てを停止することができる。
【0152】
ストップザワールドは、前述の更なるハードウェア構造106、108、状態951、952、及び命令(表1参照)(本明細書及び特許請求の範囲では、「ハードウェア」実施例として表す)なしでトランザクション実行を実現する別のやり方である。前述の手法は併せて用いることができる。アトミックであるという意味論によって実行するコード・ブロックが存在しているという概念をソフトウェア・プログラムが可能にするプログラミング・モデルが非常に望ましいことがあり得る。前述のハードウェア手法の実施例によってトランザクション実行に障害が生じた場合にプログラミング意味論を維持するためにストップザワールドを用いることができる。
【0153】
前述の、外部更新シナリオ、及びハンドラからの復帰のシナリオを用いて、ストップザワールド挙動を実現することが可能である。そうするために、アトミック・ブロックを実行したいスレッドは、同期化に用いる所定のメモリ位置との交換を行うことができる。交換によって、メモリ位置に「ビジー」値を書き込むことができ、先行値が「アイドル」値であったことを確認することができる。先行値が「アイドル」でなかった場合、「アイドル」値が検出されるまでスレッドを繰り返すことができる。
【0154】
協調型スレッドは全て、この同期化位置を監視するための手法を有し得る。少なくとも1つの実施例の場合、各協調型スレッドは、アクティブな「外部更新」シナリオをチャネル内に有し得るので、自分であるシナリオの状態に応答して割り込みが生成される。少なくとも1つの実施例の場合、「ビジー」値が同期化位置に書き込まれた場合、シナリオは充足され、ユーザ・レベル割り込みは、適宜、他の協調型スレッド全てについて生成される(別の実施例の場合、ユーザ・レベル割り込み機構ではなく、メモリ・インタフェースを通るメッセージを介して、同様な機能を実現することが可能である。)協調型スレッド毎の関連したイベント・ハンドラは、同期化位置における値が「アイドル」値に戻されるまで、スピン・ロックやその他の待ちモードに協調型スレッドを移させることができる。
【0155】
全協調型スレッドは更に、アクティブな「リングレベル3への復帰」シナリオをチャネルにおいて有し得る。トラップ/例外/割り込みハンドラからユーザ特権レベルに制御が戻ると、協調型スレッドはよって、中断することができ、割り込みハンドラを呼び出すことができる。シナリオを充足すると、割り込みを生成することができる。関連した割り込みハンドラは、協調型スレッドに、同期化位置及びスピン・ロックを確認させるか、又は他の待ちモードによって待たせることができる(同期化位置における値が「アイドル」でない場合)。
【0156】
有限時間の間待った後、他の協調型スレッド全てが同期化イベントを観察し、実行をストールする時間を与えるために、ストップザワールドを起動させたスレッドは次いで、アトミック・ブロックを実行することが可能である。アトミック・ブロックの最後に、スレッドは、協調型スレッド全てが実行し続けることが可能であるようにアイドル値を同期化位置に書き込むことができる。
【0157】
本明細書及び特許請求の範囲記載の機構の実施例は、ハードウェア、ソフトウェア、ファームウェア、又は前述の実現機構の組み合わせで実現することができる。本発明の実施例は、少なくとも1つのプロセッサ、データ記憶システム(揮発性及び不揮発性のメモリ及び/又は記憶素子を含む)、少なくとも1つの入力装置、及び少なくとも1つの出力装置を備えるプログラム可能なシステム上で実行するコンピュータ・プログラムとして実現することができる。プログラム・コードを入力データに施して、本明細書及び特許請求の範囲記載の機能を行い、出力情報を生成することができる。出力情報は、既知のやり方で1つ又は複数の装置に入力することができる。本出願の目的で、処理システムは、プロセッサ(例えば、ディジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向集積回路(ASIC)やマイクロプロセッサなど)を有する何れかのシステムを含む。
【0158】
プログラムをハイレベルの手続型プログラミング言語又はオブジェクト指向型プログラミング言語で実現して処理システムと通信することができる。プログラムは、所望の場合、アセンブラ言語又はマシン言語で実現することもできる。実際に、本明細書及び特許請求の範囲記載の機構の範囲は、何れかの特定のプログラミング言語に限定されるものでない。いずれにせよ、言語はコンパイラ言語又はインタープリタ言語であり得る。
【0159】
プログラムは、汎用又は専用のプログラム可能な処理システムによって読み取り可能な記憶媒体上又は装置上(例えば、ハード・ディスク・ドライブ上、リードオンリメモリ(ROM)上、CD−ROM装置上、フラッシュ・メモリ装置上、ディジタル多用途ディスク(DVD)上やその他の記憶装置上)に記憶することができる。処理システムにおけるプロセッサにアクセス可能な命令は、本明細書及び特許請求の範囲記載の手順を行うために記憶媒体又は記憶装置が処理システムによって読み出されると処理システムを構成し、動作させるようにする。本発明の実施例は、処理システムに用いるよう構成されたマシン読み取り可能記憶媒体として実現するものとすることもできる。そうして構成された記憶媒体は、本明細書及び特許請求の範囲記載の機能を行うために特定かつ所定のやり方で処理システムが動作するようにする。
【0160】
前述のタイプの処理システムの例は図7に示す。システム900は、インテル社から入手可能なペンティアム(登録商標)、ペンティアム(登録商標)プロ、ペンティアム(登録商標)II、ペンティアム(登録商標)III、ペンティアム(登録商標)4、並びにアイテニアム(登録商標)及びアイテニアム(登録商標)IIのマイクロプロセッサに基づいた処理システムを表すが、他のシステム(他のマイクロプロセッサ、エンジニアリング・ワークステーション、セットトップ・ボックス等を有するパソコン(PC)を含む)も用いることができる。一実施例では、サンプル・システム900は、マイクロソフト社から入手可能なウィンドウズ(登録商標)オペレーティング・システムのバージョンを実行することができるが、例えば、他のオペレーティング・システム及びグラフィカル・ユーザ・インタフェースも用いることができる。
【0161】
図7は、本願開示の手法を行うことができる処理システム900がメモリ・システム940及びプロセッサ904を含み得ることを示す。メモリ・システム940は、メモリ902、並びに1つ又は複数のオンチップ・キャッシュ又はオフチップ・キャッシュを含み得る。例えば、メモリ・システム940は、データ・キャッシュ942及び/又は命令キャッシュ944を含み得る。
【0162】
メモリ・システム940は、プロセッサ904の動作を制御するための命令910及び/又はデータ912を記憶することができる。命令910及び/データ912は、本明細書及び特許請求の範囲記載の手法の何れか又は全てを行うコードを含み得る。メモリ・システム940は、メモリの一般化された表現として意図されており、各種のメモリ形態(ハード・ドライブ、CD−ROM、ランダム・アクセス・メモリ(RAM)、ダイナミック・ランダム・アクセス・メモリ(DRAM)、スタティック・ランダム・アクセス・メモリ(SRAM)等、並びに、関連した回路)を含み得る。
【0163】
図7は、プロセッサ904がフロントエンド920を含み得ることを示す。フロントエンド920はフェッチ及びデコード・ロジックを含み得る。例えば、複数の論理シーケンスを単一の物理フェッチ/デコード・ユニット322において実現することができるが、スレッド・コンテキスト毎に命令をフェッチするための論理的に別個の次命令ポインタ及びフェッチ・ロジック320を含み得る。フェッチ/デコード・ユニット322は、前述のTRNXSET、TRNXCMT、TRNXRD及び/TRNXOK命令などの命令をデコードするためのデコーダ・ロジックを含み得る。命令のうちの1つの受け取りに応答して、デコード・ロジックは、1つ又は複数の信号を実行コア930に送出することができる。これによって、実行コア930は所望の動作を行うことができる。(前述の命令それぞれの少なくとも1つの実施例に関連した動作は、表1の記載に関して前述している。)
図7に示すマルチシーケンサ・システム900のSMT実施例の場合、「シーケンサ」の語は、スレッド・コンテキストの少なくとも次命令ポインタ及びフェッチ・ロジック320、及び、そのスレッド・コンテキストの関連したアーキテクチャ状態の少なくとも一部を包含する。SMTシステム900のシーケンサは対称でなくてよい。例えば、同じ物理コア904の2つのSMTシーケンサは、それぞれが維持するアーキテクチャ状態情報の量において異なり得る。
【0164】
よって、少なくとも一実施例の場合、マルチシーケンサ・システム900は、同時マルチスレッド化をサポートする単一コア・プロセッサ904である。前述の実施例の場合、各シーケンサは、それ自身の命令次命令ポインタ及びフェッチ・ロジック320、並びに、それ自身のアーキテクチャ状態情報を有するロジカル・プロセッサであるが、同じ物理プロセッサ・コア304はスレッド命令全てを実行する。前述の実施例の場合、論理プロセッサはそれ自身のアーキテクチャ状態バージョンを維持するが、単一のプロセッサ・コアの実行資源は、同時に実行するスレッド間で共有することができる。
【0165】
図7に示すシステム900の少なくとも1つの別の実施例は、マルチコア・プロセッサ(例えば、図2に示すプロセッサ200参照)に基づく。別々のスレッドの少なくとも一部分の実行が同時に進み得るようにそれぞれが別々のスレッドを実行することができる2つ以上の別個の物理プロセッサ(例えば、図2の104−104n参照)を前述のシステムは含み得る。各プロセッサは、そのそれぞれのスレッド毎に命令情報をフェッチするための物理的に別個のフェッチ・ユニット322を含む。単一のスレッドを各プロセッサが実行する実施例では、フェッチ/デコード・ユニット322は、単一の次命令ポインタ及びフェッチ・ロジック320を実現する。しかし、複数のスレッド・コンテキストを各プロセッサがサポートする実施例では、フェッチ/デコード・ユニット322は、別個の次命令ポインタ及びフェッチ・ロジック320を、サポートされるスレッド・コンテキスト毎に実現する。プロセッサ904における更なる次命令ポインタ及びフェッチ・ロジック320の任意性は図7の破線で表す。
【0166】
本発明の特定の実施例を示し、説明したが、特許請求の範囲記載の範囲から逸脱しない限り、変更及び修正を行うことが可能であることが当業者には分かる。よって、本発明のそのより広い局面から逸脱しない限り、変更及び修正を行うことが可能であることを当業者は認識するであろう。特許請求の範囲は、本発明の真の範囲内に収まる前述の変更及び修正全てをその範囲内に包含するものとする。

【特許請求の範囲】
【請求項1】
方法であって、
アトミック・ブロックの実行中に局所メモリ書き込みをバッファリングする工程であって、前記バッファリングが、第1のユーザレベル・プログラミング命令に応じて行われる工程と、
前記アトミック・ブロックの実行中の割り込みに応じてステータス・レジスタのトラップ・フィールドをトラップ値に更新する工程と、
前記割り込みの処理中に持続状態として前記バッファリングされた局所メモリ書き込みを維持する工程と、
前記割り込みの処理中にトランザクション・セーフ・ハンドラにより、前記ステータス・レジスタの前記トラップ・フィールドがデフォールト値にクリアされていないことに応じて、前記割り込みを処理した後に前記ステータス・レジスタの障害フィールドを障害値に更新する工程と、
前記ステータス・レジスタの前記障害フィールドが前記障害値を保持していないことに応じて前記割り込みを処理した後に前記アトミック・ブロックの実行を再開する工程とを備える方法。
【請求項2】
請求項1記載の方法であって、
非トラップ障害状態に応じて前記障害フィールドを前記障害値に更新する工程を更に含み、前記非トラップ障害状態は、ユーザレベル・プログラミング命令によって示されるトリガ・シナリオを含む方法。
【請求項3】
請求項2記載の方法であって、
前記トリガ・シナリオは、前記スタータス・レジスタの1つ又は複数のステータス・ビットの値における変更を備え、前記1つ又は複数のステータス・ビットは、前記ユーザレベル・プログラミング命令に関連付けられたマスクによって規定される方法。
【請求項4】
請求項3記載の方法であって、
前記割り込みを処理した後に、前記ステータス・レジスタの前記トラップ・フィールドがデフォールト値にクリアされていないことに応じて、前記ステータス・レジスタの障害フィールドを障害値に更新する工程、及び、非トラップ障害状態に応じて前記障害フィールドを前記障害値に更新する工程は、
前記割り込みを処理した後に、前記ステータス・レジスタの前記トラップ・フィールドが前記デフォールト値にクリアされていないことに応じて、前記ステータス・レジスタのトラップ・フォース障害ビットを前記障害値に更新する工程と、
前記非トラップ障害状態に応じて前記ステータス・レジスタの非トラップ障害状態ビットを前記障害値に更新する工程と、
前記トラップ・フォース障害ビット又は前記非トラップ障害状態ビットが前記障害値に更新されていることに応じて前記ステータス・レジスタの前記障害フィールドを前記障害値に更新する工程と
を含む方法。
【請求項5】
方法であって、
メモリの共通の論理ビューを共有する複数のスレッドを同時に実行する工程と、
第1のスレッドが命令のブロックをアトミックに実行することを可能にするために前記スレッドのうちの第1のスレッド以外の全ての実行を停止する工程であって、ハードウェア機構を呼び出すための前記第1のスレッドの動作によってトリガされる工程と、
前記命令のブロックのアトミック実行を前記第1のスレッドが完了した後にその他のスレッドを再開する工程とを備える方法。
【請求項6】
請求項5記載の方法であって、
ハードウェア機構を呼び出すための第1のスレッドの前記動作は、所定の値を特定のメモリ位置に書き込む工程を更に備える方法。
【請求項7】
請求項6記載の方法であって、
前記停止する工程は、前記その他のスレッドによる、前記特定のメモリ位置のポーリングなしで前記停止する工程が達成されるように前記第1のスレッドの前記動作の結果として生成される割り込みによって更にトリガされる方法。
【請求項8】
請求項5記載の方法であって、
トランザクション実行をサポートするためのハードウェアを含むマルチスレッド・プロセッサによって行われる方法。
【請求項9】
請求項8記載の方法であって、
前記ハードウェアは、アトミック・ブロックのメモリ書き込みをバッファリングするための記憶領域を含む方法。
【請求項10】
請求項8記載の方法であって、
前記ハードウェアは、アトミック・ブロックのメモリ読み出しのアドレスを維持するための記憶領域を含む方法。
【請求項11】
請求項5記載の方法であって、
前記停止する工程は、ユーザレベル・ソフトウェア命令に応じて起動される方法。
【請求項12】
装置であって、
アトミック・ブロックを実行するための実行リソースと、
トラップ・フィールドを保持するためのステータス・レジスタであって、前記トラップ・フィールドは、前記アトミック・ブロックの実行中に生じる割り込みに応じて前記トラップ・フィールドがトラップ値に更新され、前記トラップ・フィールドは、前記割り込みを処理すると、トランザクション・セーフ・ハンドラによってクリアされるよう適合されるステータス・レジスタと、
前記アトミック・ブロックの実行中にロードされたアドレスを監視するための監視ハードウェアと、
前記アトミック・ブロックの実行中に書き込み動作をバッファリングするためのバッファリング・ハードウェアとを備え、
前記監視ハードウェア及び前記バッファリング・ハードウェアは前記アトミック・ブロックの実行中に生じる前記割り込みの処理中に持続状態を維持し、前記実行リソースは、前記割り込みの前記処理後に前記ステータス・レジスタの前記トラップ・フィールドがクリアされていることに応じてトランザクションを落とすことなしで前記アトミック・ブロックの実行を再開する装置。
【請求項13】
請求項12記載の装置であって、
トランザクション・セーフ・ハンドラ・ソフトウェアは、前記割り込みを処理するために前記実行リソースによって実行されると、前記割り込みの処理中に前記トラップ値を保持しないよう前記トラップ・フィールドをクリアする装置。
【請求項14】
請求項13記載の装置であって、
前記実行リソースは、前記ステータス・レジスタの障害フィールドが障害値を保持していることに応じて前記割り込みの前記処理後に前記アトミック・ブロックをアボートする装置。
【請求項15】
請求項13記載の装置であって、
前記トラップ・フィールドは前記障害フィールドであり、前記障害値は前記トラップ値である装置。
【請求項16】
請求項14記載の装置であって、
前記ステータス・レジスタの前記障害フィールドが前記障害値を保持していることに応じて前記割り込みの前記処理後に前記アトミック・ブロックをアボートするための前記実行リソースは、前記割り込みの前記処理後に前記トラップ値を前記トラップ・フィールドが保持していることに応じて前記障害値に更新される対象の前記ステータス・レジスタのフォース・トラップ障害フィールドを備え、前記ステータス・レジスタの前記障害フィールドは、前記ステータス・レジスタの前記フォース・トラップ障害フィールドが前記障害値に更新されることに応じて前記障害値に更新される装置。
【請求項17】
請求項12記載の装置であって、前記監視ハードウェアはアドレス監視テーブル(AMT)を含み、前記バッファリング・ハードウェアはアドレス更新テーブル(AUT)を含む装置。
【請求項18】
請求項12記載の装置であって、前記トラップ・フィールドは、、前記割り込みを処理するためにハンドラに入るとクリア・トラップ・ビット命令を前記実行リソースが実行することに応じて前記トラップ値を保持しないようクリアリングされることができる装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公開番号】特開2011−227934(P2011−227934A)
【公開日】平成23年11月10日(2011.11.10)
【国際特許分類】
【出願番号】特願2011−177640(P2011−177640)
【出願日】平成23年8月15日(2011.8.15)
【分割の表示】特願2008−518482(P2008−518482)の分割
【原出願日】平成18年6月23日(2006.6.23)
【出願人】(593096712)インテル コーポレイション (931)
【Fターム(参考)】