(57)【要約】投機的に読み出されたデータの早期リリースをハードウェアトランザクションメモリシステムにおいて実装するための方法及び装置が開示される。処理コアは、能動的トランザクションのリードセットにおけるワードのグループの指定されたワードに対する早期リリース表示を受け取るように構成されるハードウェアトランザクションメモリシステムを備える。早期リリース表示は、指定されたワードをリードセットから除去するための要求を備える。早期リリース要求に応答して、処理コアは、指定されたワード以外のグループ内のワードが能動的トランザクションの間に投機的に読み出されなかったことを決定した後にのみ、ワードのグループをリードセットから除去する。【選択図】図４ａ
2013543197.tif 000002
【特許請求の範囲】
【請求項１】
能動的アトミックメモリトランザクション試行のリードセットにおける２つ以上のワードのグループの指定されたワードに対する早期リリース表示を受け取るように構成されるハードウェアトランザクションメモリシステムを備える装置であって、
前記ハードウェアトランザクションメモリシステムは前記早期リリース表示を受け取ることと前記指定されたワード以外の前記グループ内のワードが前記能動的アトミックメモリトランザクション試行の間に投機的に読み出されなかったのを決定することとに応答して前記ワードのグループを前記リードセットから除去するように構成される装置。
【請求項２】
前記ハードウェアトランザクションメモリシステムは、処理コアが前記ワードのグループのいずれか１つを投機的に読み出すことに応答して前記ワードのグループを前記能動的アトミックメモリトランザクション試行の前記リードセットに加えるように構成され、
当該１つのワードは、前記能動的アトミックメモリトランザクション試行を実行することの一部として投機的に読み出されたグループ内の最初のものである請求項１の装置。
【請求項３】
前記ワードのグループは前記処理コアのキャッシュ内の単一のキャッシュラインに対応し、
前記ワードのグループを前記リードセットに加えることは、前記キャッシュライン内の前記ワードのグループが前記能動的トランザクションの前記リードセット内にあることを示すために前記キャッシュラインに関連付けられるフラグをセットすることを備える請求項２の装置。
【請求項４】
前記ワードのグループを前記リードセットに加えることは、記憶アレイの所与のインデックスにフラグをセットすることを備え、
前記ワードのグループ内の各ワードに対して、前記インデックスは、当該ワードが記憶される共有メモリ内の個別のアドレスに所与のハッシュ関数を適用することの結果に対応する請求項２の装置。
【請求項５】
前記ワードのグループを前記能動的アトミックメモリトランザクション試行の前記リードセットに加えることは、前記能動的トランザクション内で最初に投機的に読み出されることになった前記グループ内の前記１つのワードの表示を記録することを備え、前記１つのワードの前記表示は、前記ワードのグループの順序における前記１つのワードの位置を示すインデックスを備える請求項２の装置。
【請求項６】
前記ハードウェアトランザクションメモリは、前記１つのワードを読み出した後に前記グループ内の別のワードを前記処理コアが読み出すことに応答するように更に構成され、当該応答は、
前記１つのワード及び前記別のワードが同じメモリアドレスに対応するかどうかを決定することと、
前記１つのワード及び前記別のワードが同じメモリアドレスに対応しないと決定することに応答して、前記グループ内の複数のワードが投機的に読み出されたとの表示を記録することと、によってなされる請求項５の装置。
【請求項７】
前記早期リリース表示は前記リードセットから除去する前記グループの複数のワードを指定し、
前記ハードウェアトランザクションメモリシステムは、当該指定された複数のワード以外の前記グループ内のワードが前記能動的トランザクションの間に投機的に読み出されなかったとの決定に少なくとも部分的に基づいて、前記指定された複数のワードを前記リードセットから除去するように更に構成される請求項１の装置。
【請求項８】
ハードウェアトランザクションメモリシステムが能動的アトミックメモリトランザクション試行のリードセットにおける２つ以上のワードのグループの指定されたワードに対する早期リリース表示を受け取ることと、
前記グループ内の他のワードが前記能動的アトミックメモリトランザクション試行の間に投機的に読み出されなかったことに応答して前記ハードウェアトランザクションメモリシステムが前記ワードのグループを前記能動的アトミックメモリトランザクション試行の前記リードセットから除去することと、を備える方法。
【請求項９】
前記早期リリース表示を受け取る前に、処理コアが前記ワードのグループの１つのワードを投機的に読み出すことに応答して前記ワードのグループを前記能動的アトミックメモリトランザクション試行の前記リードセットに加えることを更に備え、
前記１つのワードは、前記能動的トランザクションを実行することの一部として投機的に読み出されたグループ内の最初のものである請求項８の方法。
【請求項１０】
ライトセットワードのグループはキャッシュの単一のキャッシュラインに対応し、
前記ワードのグループを前記リードセットに加えることは、前記キャッシュライン内の前記ワードのグループが前記能動的トランザクションの前記リードセット内にあることを示すために前記キャッシュラインに関連付けられるフラグをセットすることを備える請求項９の方法。
【請求項１１】
前記ワードのグループを前記リードセットに加えることは、記憶アレイの所与のインデックスにフラグをセットすることを備え、
前記ワードのグループ内の各ワードに対して、前記インデックスは、当該ワードが記憶される共有メモリ内の個別のアドレスに所与のハッシュ関数を適用することの結果に対応する請求項９の方法。
【請求項１２】
前記ワードのグループを前記能動的アトミックメモリトランザクション試行の前記リードセットに加えることは、前記能動的トランザクション内で最初に投機的に読み出されることになった前記グループ内の前記１つのワードの表示を記録することを備える請求項９の方法。
【請求項１３】
前記１つのワードの前記表示は、ライトセットワードのグループの順序における前記１つのワードの位置を示すインデックスを備える請求項１２の方法。
【請求項１４】
前記１つのワードが読み出された後に前記グループ内の別のワードが投機的に読み出されることと、前記１つのワード及び前記別のワードが同じメモリアドレスに対応しないと決定することと、に応答して、前記グループ内の複数のワードが投機的に読み出されたとの表示を記録することを更に備える請求項１２の方法。
【請求項１５】
コンピュータシステム上で実行可能なプログラムによって動作させられるデータ構造を備えるコンピュータ可読記憶媒体であって、
前記プログラムは前記データ構造上で動作して前記データ構造によって記述される回路を含む集積回路を製造するための処理の一部を行い、
前記データ構造において記述される前記回路は、能動的アトミックメモリトランザクション試行のリードセットにおける２つ以上のワードのグループの指定されたワードに対する早期リリース表示を受け取るように構成されるハードウェアトランザクションメモリシステムを含み、
前記ハードウェアトランザクションメモリシステムは、前記早期リリース表示を受け取ることと前記指定されたワード以外の前記グループ内のワードが前記能動的アトミックメモリトランザクション試行の間に投機的に読み出されなかったのを決定することとに応答して前記ワードのグループを前記リードセットから除去するように構成されるコンピュータ可読記憶媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
ハードウェアトランザクションメモリ(Hardware Transactional Memory)（ＨＴＭ）は、並列プログラミングをサポートするためのコンピュータアーキテクチャ内のメカニズムである。ＨＴＭによると、プログラマが命令のグループを単一の投機的領域(speculative region)の一部であるとして単に宣言すれば、次いでＨＴＭハードウェアは、その領域内の命令が単一のアトミックで且つ隔絶されたトランザクション(atomic and isolated transaction)として実行されることを保証することができる。アトミック性(atomicity)とは、当該トランザクションの全ての命令が、システム内の１つ以上の他の処理コア上での実行に係る他の全ての並列スレッド(concurrent threads)に対して単一のアトミックブロックとして実行されることを意味する。隔絶とは、当該トランザクションが完了するまで当該トランザクションの中間結果がシステムの他の部分にさらされないことを意味する。ＨＴＭシステムは、複数のトランザクションが衝突しない限り、それらが並列に実行されることを可能にし得る。２つのトランザクションは、それら両方が同じメモリ区域（例えば８バイトワードアドレス）にアクセスし且つそれら２つのトランザクションのいずれかがそのメモリ区域に書き込む（例えばアドレス可能８バイトワード）場合に衝突する。
【０００２】
実行のスレッド間でのデータ衝突を検出するために、ＨＴＭは、トランザクション実行試行の間に投機的にどのメモリ区域から読み出されたか及び／又はどのメモリ区域に書き込まれたかの経過を追う(keep track of)ことができる。データ衝突を検出する目的でプロセッサが経過を追うメモリ区域は、トランザクションのリードセット(read set)（読み出されたものとしてプロセッサが経過を追うアドレス）及びライトセット(write set)（修正されたものとしてプロセッサが経過を追うアドレス）と称されることがある。リードセット及びライトセットは多くの場合に投機的バッファ内にバッファリングされ、投機的バッファは、キャッシュ、ロード／ストアキュー、それら両方、及び／又は他のハードウェアコンポーネントによって実装され得る論理要素である。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
ＨＴＭシステムはハードウェアにおいて実装されるので、リードセット及びライトセットの経過を追うための資源は限定されており、ＨＴＭ資源を効率的に使用するための種々の技術が用いられてきた。そのような技術の一群としてワードグループ化(word grouping)があり、それにより、ＨＴＭは、リードセット及び／又はライトセットにおいて複数のアドレス可能ワードをグループ化すると共にまとめてそれらの経過を追うことができる。例えば、ある能動的トランザクションにおける所与のワードへの投機的アクセスを検出することに応答して、ＨＴＭは、そのワードが属するキャッシュライン全体（複数の異なるアドレス可能ワードを保持している）を、そのトランザクションのリードセット又はライトセット内にあるものとしてマーキングすることができる。あるキャッシュラインをマーキングすることは、そのキャッシュラインに関連付けられるフラグをセットすることにより行われることがある。従って、グループ内の単一のワードのみが投機的にアクセスされた場合であっても、ＨＴＭはキャッシュライン内の全てのワードをリードセット又はライトセット内へと加える。
【０００４】
ＨＴＭ資源を効率的に使用するための別の技術は、早期リリース(early release)である。この技術においては、プログラマは、アドレス可能ワードを能動的トランザクションのリードセットから明示的にリリースすることが許可されている（例えば明示的リリース命令(explicit RELEASE instruction)を用いて）。例えば、所与のトランザクションがそのトランザクションにおける特定の点を越える所与のリード値に頼らない場合、プログラマは、その値が読み出されたメモリアドレスをリードセットから明示的に除去してよい。これらの技術を用いることによって、ＨＴＭ設計者は、彼らのシステムの容量を増大することを可能にしてきたし、またプログラマがＨＴＭを用いてより大きな及びより複雑なアトミックメモリトランザクションを表現し及び実行することを可能にしてきた。
【課題を解決するための手段】
【０００５】
投機的に読み出されたデータの早期リリースをハードウェアトランザクションメモリシステムにおいて実装するための方法及び装置が開示される。処理コアは、能動的トランザクションのリードセットにおけるワードのグループの指定されたワードに対する早期リリース命令等の早期リリース表示を受け取るように構成されるハードウェアトランザクションメモリシステムを備える。早期リリース表示は、指定されたワードをリードセットから除去するための要求を備える。早期リリース表示に応答して、処理コアは、指定されたワード以外のグループ内のワードが能動的トランザクションの間に投機的に読み出されなかったことを決定した後にのみ、ワードのグループをリードセットから除去する。
【０００６】
幾つかの実施形態においては、ワードのグループはハードウェアトランザクションメモリシステムによってまとめて経過を追われてよく、ワードのグループのいずれか１つが能動的トランザクションの間に投機的に読み出された場合には、グループ内の全てのワードが能動的トランザクションのリードセットに追加されてよい。例えば幾つかの実施形態においては、ワードのグループは、処理コアのキャッシュ内の単一のキャッシュラインに対応していてよく、またそのキャッシュラインに関連付けられるフラグをセットすることによって、まとめてリードセットに加えられてよい。他の実施形態においては、グループは、ブルームフィルタ(Bloom filter)内のインデックスを用いて経過を追われてよく、またそのブルームフィルタインデックスにフラグをセットすることによってリードセットに加えられてよい。
【図面の簡単な説明】
【０００７】
【図１】図１は幾つかの実施形態に従いワードグループ化及び早期リリースの機能を伴うハードウェアトランザクションメモリを実装するように構成されるシステムを示すブロック図である。
【図２】図２は幾つかの実施形態に従うコードの投機的領域のコンポーネントを示す図である。
【図３】図３は幾つかの実施形態に従い不慮のデータリリースを回避する方法においてワードグループ化及び早期リリースの技術を用いてアトミックメモリトランザクションを実行する高度な方法を示すフロー図である。
【図４ａ】図４ａは幾つかの実施形態に従いワードグループ化及び早期リリースのメカニズムの的確な共存をサポートするために備えられたキャッシュベースの投機的バッファのブロック図である。
【図４ｂ】図４ｂは幾つかの実施形態に従いワードグループ化及び早期リリースのメカニズムの的確な共存をサポートするために備えられたブルームフィルタベースの投機的バッファのブロック図である。
【図５】図５は幾つかの実施形態に従い所与のキャッシュライン内の複数のワードが能動的トランザクションによって投機的に読み出されたことを決定することに応答して早期リリース動作を除くための方法を示すフロー図である。
【図６】図６は幾つかの実施形態に従い早期リリースを伴うワードグループ化をサポートするように構成されるＨＴＭのコンポーネントのブロック図である。
【図７】図７は種々の実施形態に従いここに説明されるワードグループ化及び早期リリースのメカニズムを伴うハードウェアトランザクションメモリを実装するように構成されるコンピュータシステムを示すブロック図である。
【発明を実施するための形態】
【０００８】
本明細書は「１つの実施形態」又は「ある実施形態」への参照を含む。「１つの実施形態において（における）」又は「ある実施形態において（における）」の句の出現は、必ずしも同じ実施形態を参照しない。特定の特徴、構成又は特性は、本開示に合致する任意の適切な方法において組み合わされてよい。
【０００９】
用語。以下の幾つかの段落は、本開示（添付の特許請求の範囲を含む）において見出される用語に対する定義及び／又は文脈を提供する。
【００１０】
「〜を備える(Comprising)」。この用語は非制限的(open-ended)である。添付の特許請求の範囲において用いられるように、この用語は追加的な構造又はステップを排除しない。「１つ以上のプロセッサユニットを備える装置」と記載された請求項を考える。そのような請求項は、その装置が追加的なコンポーネント（例えばネットワークインタフェースユニット、グラフィクス回路等）を含むことを排除しない。
【００１１】
「〜ように構成される(Configured To)」。種々のユニット、回路又は他のコンポーネントは、単一又は複数のタスクを行う「ように構成される」ものとして記載され又は特許請求され得る。そのような文脈において、「〜ように構成される」は、動作中に当該単一又は複数のタスクを行う構造（例えば回路）をユニット／回路／コンポーネントが含むことを示すことによって構造を含意するために用いられる。従って、ユニット／回路／コンポーネントは、特定のユニット／回路／コンポーネントがその時点で動作中でない（例えばオンでない）としても、当該タスクを行うように構成されるものと言うことができる。「〜ように構成される」の言語と共に用いられるユニット／回路／コンポーネントは、ハードウェア、例えば回路、当該動作を実装するように実行可能なプログラム命令を記憶するメモリ等、を含む。ユニット／回路／コンポーネントが１つ以上のタスクを行う「〜ように構成される」と記載しているのは、当該ユニット／回路／コンポーネントに対して３５Ｕ．Ｓ．Ｃ．§１１２第６段落を行使すべきではないことを明示的に意図するものである。加えて、「〜ように構成される」は、ソフトウェア及び／又はファームウェア（例えばＦＰＧＡ又は汎用プロセッサ実行ソフトウェア）によって操作されて問題となっている単一又は複数のタスクを行うことが可能な方法で動作する汎用構造（例えば汎用回路）を含むことができる。「〜ように構成される」はまた、１つ以上のタスクを実装し又は行うように構成されるデバイス（例えば集積回路）を製造することに製造プロセス（例えば半導体製造設備）を適合させることを含み得る。
【００１２】
「第１の」、「第２の」等。ここで用いられるこれらの用語は、これらの後に続く名詞のための標識として用いられており、いかなる種類の順序（例えば空間的な、時間的な、論理的な、等）をも暗示しない。例えば、８個の処理要素又はコアを有するプロセッサにおいて、「第１の」及び「第２の」処理要素は、それら８個の処理要素の任意の２つを参照するために用いられ得る。つまり、「第１の」及び「第２の」処理要素は、論理処理要素０及び１に限定されない。
【００１３】
「基づく、基づき、基づいて(Based On)」。ここで用いられるこの用語は、決定に影響する１つ以上の要因を記述するために用いられる。この用語は決定に影響し得る追加的な要因を排除しない。即ち、決定は当該要因にのみ基づいていてよいし又は少なくとも当該要因に基づいていてよい。「Ｂに基づきＡを決定する」という句を考える。ＢはＡの決定に影響する１つの要因であってよい一方で、そのような句はＣにも基づくＡの決定を排除しない。他の例では、ＡはＢにのみ基づき決定され得る。
【００１４】
ＨＴＭシステムはハードウェア内に実装されるので、リードセット及びライトセットの経過を追うための資源が限定される。従って、これらの資源を効率的に使用するための種々の技術が用いられてきた。例えば、そのような技術は、グループとしてアドレス可能ワードの経過を追うこと（即ちワードグループ化）、指定されたアドレスをプログラムがリードセットからリリースするのを可能にすること（即ち早期リリース）及び他の技術を含む。ワードグループ化においては、ＨＴＭは、グループ内のいずれかのワードがアクセスされた場合にそのグループ全体（例えばキャッシュライン）をリードセット又はライトセット内にエンターするであろう。続いて、ＨＴＭは、各ワードの粒度(granularity)よりもむしろグループ全体の粒度での衝突(conflicts)を検出するであろう。例えば、各キャッシュラインは、投機的にアクセスされたデータを含むかどうかを示すフラグを含んでいることがあり又はそのフラグに関連付けられていることがある。早期リリースは、リリース命令(RELEASE instruction)を明示的に実行する等によって、指定されたワードをプログラマが能動的トランザクションのリードセットから明示的に除去することを可能にし得る（ここで用いられるトランザクションは、開始されたが未だコミットされていない場合に能動的である）。上述の例における従来の早期リリースシステムは、キャッシュライン上のフラグをアンセットすることによって所与のワードをリリースし、それによりキャッシュライン内の全てのワードをリードセットから除去してしまうであろう。
【００１５】
しかし、従来のシステムは、ワードグループ化と早期リリースの両方の最適化を図ろうとする場合に正確性を保証することができない。例えば、ある能動的トランザクションが、たまたま同じグループ内にある２つの個別的にアドレス可能なワードを読み出し且つそれらに頼る場合、従来のワードグループ化システムは、両ワード（及び当該グループ内の全てのワード）をトランザクションのリードセット内に置いてしまう。ところが、その能動的トランザクションのリードセットからそれら２つのワードの一方を続いて除去するために早期リリースメカニズムが用いられると、従来のシステムは、他のワードも含めてワードのグループ全体をリリースしてしまうことになる。しかし、この場合にワードのグループ全体をリリースすることは、プログラマの意図するところではない。むしろ、プログラマは、指定されたワードだけをリリースすることを意図していたはずである。従って、従来のＨＴＭは、他のワードに関する後続のデータ衝突を検出し得ないであろうし、また不正確なプログラム挙動が結果としてもたらされることがある（例えばアトミシティの違反）。この現象は、ここでは不慮のデータリリース(unintentional data release)と称されることがある。
【００１６】
幾つかの実施形態においては、ＨＴＭは、ワードグループ化と早期リリースの技術間での的確な共存を実装するように構成され得る。そのようなＨＴＭは、所与のグループ内の複数のワードが能動的トランザクションによって読み出されたかどうかの経過を追ってよく、またそのグループ内の他のワードがそのトランザクションによってアクセスされなかったと決定された場合に、その所与のグループ内のあるワードの任意の早期リリースを条件付けてよい。このようにして、ＨＴＭは、能動的トランザクションのリードセットから１つ以上のワードを気づかずにリリースしてしまうことを回避し得る。
【００１７】
図１は幾つかの実施形態に従いワードグループ化及び早期リリースの機能を伴うハードウェアトランザクションメモリを実装するように構成されるシステムを示すブロック図である。図示された実施形態によると、システム１００は、プロセッサ１０５及び他の単一又は複数のプロセッサ１３０を含む多重プロセッサを含む。ここで用いられるプロセッサの用語は、コンピュータプログラム命令を実行するように構成される処理コアを参照する。従って、プロセッサの用語は、専用のチップ上の又は１つ以上の他の処理コア（例えばチップ多重プロセッサ）を含むチップ上の物理的又は論理的（例えば対称多重スレッド）処理コアを参照し得る。後者の場合、プロセッサ１０５及び１３０は、同じチップ上に存在してよく、またシステムバス１５０等よりもむしろチップ上ネットワークによって接続されてよい。一般的用語である「プロセッサ」がここでの実施形態を説明するために用いられているが、その用語自体は、複数の処理コアの特定の配置又は１つ以上のチップ上でのそれらの分散化に実施形態を限定することを意味しない。
【００１８】
図１に示されるように、プロセッサ１０５はＨＴＭメカニズム１１０を備え、ＨＴＭメカニズム１１０は、コードの投機的な領域を隔絶されたアトミックトランザクションとして検出し且つ／又は実行するように構成される１つ以上のハードウェアユニットを含む。これらのＨＴＭメカニズムは、ワードグループ化及び早期リリースの動作を行いながら正しいプログラム挙動を維持するためにプロセッサによって用いられる種々のコンポーネントを含んでいてよい。
【００１９】
図示された実施形態に示されるように、プロセッサ１０５は任意の数のレジスタ１２０を含んでいてもよく、これらは、マイクロアーキテクチャレジスタファイル及び１つ以上のローカルデータキャッシュ１２５（例えばＬ１キャッシュ）として実装されてよい。データキャッシュ１２５は、プロセッサ１０５による迅速なアクセスのために、共有メモリ１４０からデータをキャッシュしてよい。単一又は複数のデータキャッシュ１２５が多重キャッシュを含む実施形態においては、これらのキャッシュはキャッシュ階層として機能するように構成されてよい。プロセッサ１０５及び／又はデータキャッシュ１２５は、異なる複数のプロセッサによって用いられる別個のプライベートキャッシュが存在する場合におけるメモリの無矛盾性ビュー(consistent view)を維持するために他のプロセッサ（例えば１３０）と通信するように構成されるキャッシュコヒーレンスメカニズムを含んでいてよい。プロセッサ１０５が多重処理コアを含む実施形態においては、１つ以上のキャッシュ１２５は、これら処理コアの種々のコアによって共有されてよい。
【００２０】
幾つかの実施形態においては、データキャッシュ１２５及び／又は共有キャッシュ１３５は多重ブロック（即ち複数のキャッシュライン）として配置されてよく、その各々は、共有メモリ１４０からのシーケンシャルにアドレスされた複数のワード（例えば各８バイトワード）の１つのブロックを記憶するために用いられ得る。幾つかの実施形態においては、これらのワードの１つ以上には、異なる複数の命令がアドレスしてよい。例えば、早期リリース命令は、データキャッシュ１２５内の所与のワードにアドレスしてよく、そしてそれが能動的トランザクションのリードセットからリリースされるべきであることを表示してよい。種々の実施形態において、データキャッシュ１２５及び／又は共有キャッシュ１３５は、バッファリングされたデータのオーバフローを取り扱うための異なるセットアソシアティブ性(set-associativity)及び／又はエビクション(eviction)のポリシーに従って管理されてよい。
【００２１】
図示された実施形態によると、プロセッサ１０５及び１３０は、バス１５０を介して互いに接続され、共有メモリ１４０に接続され、そして任意の数の共有データキャッシュ１３５に接続される。ここで用いられるメモリ階層の用語は、システムの共有メモリ、及びデータを記憶するために所与のプロセッサによって用いられる一連のキャッシュ（即ちキャッシュ階層）を参照する。
【００２２】
幾つかの実施形態においては、プロセッサ１０５及び１３０は、キャッシュコヒーレンスプロトコル（例えばＭＥＳＩ，ＭＯＥＳＩ）の一部としてのキャッシュコヒーレンスメッセージ等のメッセージを互いに通信するためにバス１５０を利用してよい。そのような実施形態においては、プロセッサ１０５及び１３０等の多重プロセッサは、それらのそれぞれのキャッシュ内にキャッシュされた共有メモリデータの無矛盾性ビューを維持してよい。
【００２３】
幾つかの実施形態においては、プロセッサ１０５は、ＨＴＭトランザクションをサポートするために投機的データバッファを実装してよい。種々の実施形態において、そのようなバッファは、その全て又は一部において、データキャッシュ１２５、ブルームフィルタユニット及び／又は他のメカニズムを用いて実装されてよい。例えば幾つかの実施形態においては、ＨＴＭメカニズム１１０は、種々のフィールドをデータキャッシュ１２５内の各ラインと関連付けてよく、またそれらフィールドを用いて、当該ライン内の任意のワードが能動的トランザクションのリードセット又はライトセットのいずれにあるのかを表示してよい。
【００２４】
他の実施形態においては、ＨＴＭメカニズム１１０は、ブルームフィルタユニットを用いてリードセット及び／又はライトセットの経過を追ってよい。そのような実施形態においては、あるワードがトランザクション内から投機的にアクセスされる場合、ＨＴＭシステムは、ハッシュ関数(hash function)をアドレスに適用してインデックスを得る等することによって、ワードのアドレスを特殊目的アレイ（例えばリードセットブルームフィルタ）のインデックスへとマッピングしてよい。ＨＴＭは次いで、得られたインデックスに、所与のアドレスが既に投機的に読み出されている（又はライトセットブルームフィルタの場合には、書き込まれている）ことを示すフラグをセットしてよい。ここでは単一のアレイ及びハッシュ関数を利用するブルームフィルタ実装が論じられているが、当業者であれば、異なる実施形態においてはブルームフィルタ実装が多重のハッシュ関数及び／又はアレイを利用し得ることを理解するはずである。尚、異なる複数のワードのそれぞれのアドレスは同じブルームフィルタインデックスへとマッピングし得るので、リードセットの経過を追うためのブルームフィルタの使用は、ワードグループ化の一形態である。
【００２５】
図２は幾つかの実施形態に従うコードの投機的領域のコンポーネントを示す図である。図示された実施形態によると、投機的領域２００はトランザクション開始表示２０５で始まり、１つ以上の命令のトランザクションボディ２１０がそれに続き、そして投機的領域２００はトランザクションコミット表示２１５で終了する。
【００２６】
幾つかの実施形態においては、トランザクション開始表示は、投機的領域の開始を示す特殊目的命令を備えていてよい。例えば、開始表示２０５は、投機的領域の開始を示す投機的命令(SPECULATE instruction)を含んでいてよい。他の実施形態においては、開始表示は、コードの投機的領域を表示し得るロック取得(lock acquisition)等の汎用命令に対応していてよい。あるトランザクションが開始された後であるがコミットされる（例えば２１５において）前にあっては、そのトランザクションは能動的であると称される。尚、衝突及び／又は他の停止(abort)の条件に起因して、能動的トランザクションは、最終的に成功するまで何度も再試行されてよい。
【００２７】
トランザクションボディ２１０は１つ以上のプログラム命令を含んでいてよく、プログラム命令は１つ以上のメモリ動作を含んでいてよい。幾つかの実施形態においては、トランザクションボディ２１０は、トランザクションの一部として指定されるメモリ動作の第１のサブセットと、トランザクションの一部ではないとして指定されるメモリ動作の第２のサブセットと、を含んでいてよい。そのような例においては、ＨＴＭは、トランザクションの一部として指定された命令のみをトランザクション的に実行し且つボディ内の他の命令に対してはそのようなアトミシティ又は隔絶の保証を提供しないように構成されてよい。そのような実行においては、投機的命令を実行した結果としてアクセスされるメモリアドレスは、必要に応じて能動的トランザクションのリードセット又はライトセットの一部として経過を追われてよい。
【００２８】
図示された実施形態に示されるように、投機的領域２００は、開始表示２０５によって開始された投機的領域の終了を示すコミット表示（例えば２１５）を含んでいてよい。幾つかの実施形態においては、コミット表示は、特殊目的コミット命令(special-purpose COMMIT instruction)を備えていてよい。他の実施形態においては、２１５のコミット表示は、例えば開始表示２０５において先に取得されたロックのリリース等の汎用命令に対応していてよい。
【００２９】
図３は幾つかの実施形態に従い不慮のデータリリースを回避する方法においてワードグループ化及び早期リリースの技術を用いてアトミックメモリトランザクションを実行する高度な方法を示すフロー図である。図３の方法は、ＨＴＭメカニズムを含むプロセッサ１０５等のプロセッサによって実行されてよい。
【００３０】
図示された実施形態によると、方法３００は、３０５に示されるようにプロセッサが投機的実行モードにエンターすると開始する。上述したように、プロセッサは、コードのトランザクション領域の開始を示す投機的命令を実行することに応答して、そのようなモードにエンターする。
【００３１】
トランザクションの一部として、プロセッサは、３１０に示されるようにあるワードを共有メモリから投機的にロードしてよい。このワードは、ロード命令によって直接的にロードされてよく、又は何らかの他の命令を実行することの一部として間接的にロードされてよい。データはトランザクション内から投機的に読み出されたものであるから、プロセッサは、３１５に示されるように、投機的にロードされたワード（及びそのグループ全体）をトランザクションのリードセットに加える。種々の実施形態において、ワードグループをリードセットに加えることは、ワードがロードされたキャッシュライン内にフラグをセットすることを含んでいてよい。これにより、キャッシュライン内の（即ちグループ内の）全ての他のワードがリードセットに効率的に加えられる。
【００３２】
他の実施形態においては、３１５においてグループをリードセットに加えることは、ワードが投機的にロードされた元となるアドレスに対応するインデックスでブルームフィルタ内にビットをセットすることを備えていてよい。例えば３１５において、ＨＴＭは、投機的にロードされたワードのアドレスにハッシュ関数を適用することによって、インデックスを得てよい。しかし、３１５において得られたインデックスでビットをセットすることによって、システムは、本質的に、そのインデックス値をアドレスがハッシュする全てのワードをリードセットに加える。従って、実際には１つのそのようなアドレスのみが投機的に読み出されたとしても、ブルームフィルタ内にビットをセットすることにより、本質的には、複数ワードのグループが、ＨＴＭによって経過を追われているリードセットに加えられることになる。
【００３３】
図示された実施形態によると、プロセッサは続いてリリース命令を検出してよく、リリース命令は、３２０からの肯定出口によって示されるように、リードセットからリリースするワードを指定する。この場合、ＨＴＭは、指定されたワードが属するグループ（例えばキャッシュライン、ブルームフィルタインデックス等）を決定してよく、また３２５に示されるように、グループ内の２つ以上のワードが投機的に読み出されたかどうかを決定してよい。ＨＴＭは、後で更に詳細に説明されるようにこの決定をなしてよい。
【００３４】
３２５からの否定出口によって示されるように、リリースのために指定されたワードがグループ内の投機的に読み出されたワードだけである場合には、ＨＴＭは、３３０に示されるように、リリース指定されたワードをリードセットから除去してよい。種々の実施形態において、リリース指定されたワードを除去することは、投機的に読み出されたワードに及び／又はそのグループに関連付けられるフラグをアンセットすることを含んでいてよい。
【００３５】
一方、３２５からの肯定出口によって示されるように、指定されたワードのグループ内の複数のワードが能動的トランザクションにおいて投機的に読み出されたとＨＴＭが決定した場合には、ＨＴＭは、指定されたワードをリードセットから除去しない。尚、幾つかの実施形態においては、グループ内の複数のワードが投機的に読み出されたが、それらの各々がグループ内の次のワードが読み出される前に成功裏にトランザクションリードセットからリリースされた場合には、３２５の判定は否定として決定されることになる。例えばそのような実施形態においては、あるグループ内の第１のワードが読み出され次いでリリースされ、このリリースに続いてそのグループ内の第２のワードが読み出される場合、第２のワードをリリースしようとする試み（３２０に示されるような）は、３２５における否定決定をもたらすことになる。
【００３６】
あるワードが一旦リードセットからリリースされると、そのワードは、トランザクションに対してもはやデータ衝突を生じない。即ち、そのリリースされたワードのアドレスに別のスレッドが書き込んだとしても、トランザクション停止が必ずしもトリガーされることはない。
【００３７】
図示された実施形態によると、トランザクションが継続するにつれて、停止条件が検出されると（３３５に示されるように）、ＨＴＭはトランザクションを停止してよく（３４０に示されるように）、そしてトランザクションを再試行してよい（３４０から３１０のフィードバックループによって示されるように）。幾つかの実施形態においては、トランザクションを再試行することは、明示的な再開命令を発行することを備えていてよい。トランザクションを停止することは、全てのワードをリードセット及びライトセットから除去すること、トランザクション試行によって試みられた全てのメモリ修正をロールバック及び／若しくはドロップすること、トランザクション領域の開始に向かうように命令ポインタを修正すること、並びに／又は他の実装固有のステップを備えていてよい。
【００３８】
３４５からの肯定出口によって示されるように、未だ実行されていない更なる命令をトランザクション領域が含む間は、プロセッサは実行を継続する。３４５からの否定出口によって示されるように、プログラム制御がトランザクション領域の終了に到達すると、３５０に示されるようにＨＴＭはトランザクションの結果をコミットしてよい。３５０において結果をコミットすることは、トランザクションの結果（例えばライトセットにおける値）をメモリへとフラッシュすること(flushing)を含んでいてよく、このことは異なる実施形態において異なってなされてよい（例えばリドゥー対アンドゥーモデル(redo versus undo models)）。
【００３９】
幾つかの実施形態によると、所与のグループ内の複数のワードが投機的に読み出されたかどうかの経過をプロセッサが追い得るように、種々のフラッグが投機的バッファリングメカニズムに追加されてよい。図４ａ及び図４ｂは、この目的のためのそれぞれのフラグを含む投機的バッファリングメカニズムの２つの実施形態を提示している。
【００４０】
図４ａは幾つかの実施形態に従いワードグループ化及び早期リリースのメカニズムの的確な共存をサポートするために備えられたキャッシュベースの投機的バッファのブロック図である。幾つかの実施形態においては、図４ａのデータキャッシュ４００は、図１のデータキャッシュ１２５等のプライベートＬ１データキャッシュに対応していてよい。
【００４１】
図示された実施形態においては、データキャッシュ４００はキャッシュライン４０５等の多重キャッシュラインを備える。各ラインは、メモリの所与の領域からのデータの複数のワードのシーケンスを記憶するために用いられてよい。例えばキャッシュライン４０５のデータ４２５は、６４又は１２８バイトの記憶スペースを備えていてよい。従って、メモリからの８個又は１６個のアドレス可能８バイトワードを記憶するために使用され得る。例えばデータ４２５が６４バイト長である場合、共有メモリは複数の６４バイトブロック（即ち複数のワードグループ）へと分割されていてよく、１つのブロック内のいずれかのワードを読み出すことに応答して、システムは、そのブロック全体をデータキャッシュ４００のあるライン（例えばキャッシュライン４０５内のデータ４２５）へとコピーしてよい。ラインは、現在どのメモリブロックがキャッシュライン内に記憶されているのかを示すためにタグ付けされてよい（例えばアドレスタグ４１０を用いて）。
【００４２】
図４ａに示されるように、キャッシュライン４０５はまた、他のプロセッサによりキャッシュされたデータとのコヒーレンスを維持するために使用可能な種々のキャッシュコヒーレンスフィールド４１５と、４３０及び４３５等の投機的バッファフィールドと、を含んでいてよい。例えば幾つかの実施形態においては、ＳＷフィールド４３０は、データ４２５内の少なくとも何らかのデータが能動的トランザクションによって投機的に書き込まれたことを示すためにセットされてよい。同様に、ＳＲフィールド４３５は、データ４２５内の少なくとも何らかのデータが能動的トランザクションによって投機的に読み出されたことを示すために使用可能であってよい。このように、ＨＴＭはデータ衝突を検出するときにこれらのフィールドを用いることができる。
【００４３】
図示された実施形態によると、キャッシュライン４０５はまた、ＵＬフィールド４４０及びＦＡフィールド４４５を含む。幾つかの実施形態においては、これらのフィールドは、キャッシュライン（例えばデータ４２５）内の２つ以上のワードが能動的トランザクションの一部として投機的に読み出されたかどうかを決定するために、ＨＴＭによって使用可能であってよい（図３の３２５に示されるように）。
【００４４】
幾つかの実施形態においては、ＦＡフィールド４４５は、能動的トランザクションの間に最初に投機的に読み出されたキャッシュライン４０５内の（即ちデータ４２５内の）ワードの表示を記憶するために用いられてよい。種々の実施形態において、この表示は、当該特定のワードのアドレス、当該ワード（例えば「ブロック内の５番目のワード」）に対応するキャッシュライン内へのインデックス、又は他のうちで最初に投機的に読み出されたワードを一意的に区別する別の識別子であってよい。例えば幾つかの実施形態においては、キャッシュライン４０５が６４バイト幅である（即ち８個の一意的にアドレス可能な８バイトワードを保持する）場合には、ＦＡフィールド４４５は、８個の一意的なインデックスを表示するために使用可能な３ビットを含んでいてよい。従って、ＦＡフィールドの値は、キャッシュライン内に記憶された８ワードのどれが最初に投機的に読み出されることになったのかを識別することができる。
【００４５】
幾つかの実施形態においては、あるワードをリードセットに加えるための論理は、ＳＲフィールド４３５が既にセットされているかどうかを決定することと、これがセットされていない場合に、キャッシュラインがトランザクションのリードセット内にあることを示す値にＳＲフィールド４３５をセットし且つそのワードを示す値にＦＡフィールド４４５をセットすることと、を含んでいてよい。幾つかの実施形態においては、ＳＲフィールドがクリアされると、ＦＡフィールド及び／又はＵＬフィールドもクリアされてよい。
【００４６】
幾つかの実施形態においては、ＵＬフィールド４４０は、キャッシュライン４０５内の複数のワードが能動的トランザクションによって投機的に読み出されたものであるかどうかを示すために使用可能であってよい。例えば、あるワードをリードセットに加えるための論理は、ＳＲフィールド４３５が既にセットされているかどうかを決定することと、これがセットされている場合に、ＦＡフィールドがそのワードを示しているかどうかを決定することと、を含んでいてよい。そのワードを示していない場合には、そのワードはリードセットに加えられているはずのグループ内の最初のワードではないので、プロセッサはその旨を示す値にＵＬフィールド４４０をセットしてよい。幾つかの実施形態においては、ＵＬフィールド４４０は単一ビットを備えていてよく、この単一ビットは、複数のワードがリードセット内にあるかどうかを示すためにセット又はアンセットされてよい。ＨＴＭは、このようにしてＵＬフィールドとＦＡフィールドの組み合わせを用いて、所与のキャッシュライン（即ちワードグループ）内の複数のワードが能動的トランザクションによって投機的に読み出されたものであるかどうかの経過を追い且つそれを決定することができる。
【００４７】
図５は幾つかの実施形態に従い所与のキャッシュライン内の複数のワードが能動的トランザクションによって投機的に読み出されたことを決定することに応答して早期リリース動作を除くための方法を示すフロー図である。方法５００は、ここに説明される早期リリース及びワードグループ化の両方をサポートするプロセッサによって実行されてよい。
【００４８】
図示された実施形態によると、方法５００は、５０５に示されるようにプロセッサが投機的実行モードにエンターすると開始する。プロセッサは次いで、５１０に示されるように、所与のワードをトランザクションの一部として投機的に読み出す。ワードを投機的に読み出すことに応答して、メモリサブシステムは、ワードが属するブロックがキャッシュライン内に未だない場合にそのブロックをそのキャッシュラインにコピーする。更に、５１５に示されるように、ＨＴＭはそのキャッシュラインをトランザクションのリードセットに加える。幾つかの実施形態においては、キャッシュラインをリードセットに加えることは、キャッシュラインのＳＲビットをセットすることと、これに従いキャッシュライン内に記憶されるブロック全体をリードセットに効果的に加えることと、を備えていてよい。
【００４９】
５１５に示されるようにキャッシュラインをトランザクションリードセットに加えた後又は加えることの一部として、ＨＴＭは、５２０に示されるようにＦＡフラグを当該所与のワードを示す値にセットしてよい。例えば、５１０で読み出されたワードがアドレス順に従いブロック内の３番目のワードであるとすると、５２０においてＦＡフラグはバイナリ値０１０にセットされてよく、これは０インデックススキーム(0-indexing scheme)に従うと３番目のインデックスを示している。種々の他の識別子スキームが可能である。
【００５０】
図示された実施形態によると、所与のワードを投機的に読み出すこと（５１０）及びキャッシュラインをリードセットに加えること（５１５）に続いて、プロセッサは、５２５に示されるように別のワードを同じところから投機的に読み出す。プロセッサがその別のワードを読み出すことに応答して、ＨＴＭは、そのワードを含むキャッシュラインのＳＲフィールドが既にセットされていると決定し、そしてこれに応答してキャッシュラインのＦＡフィールドを読み出して（５３０に示されるように）、その別のワードが、投機的に読み出されているはずのキャッシュライン内の最初のワードと同じであるかどうかを決定する。例えば、ＦＡフィールドがブロック内の所与のワードのインデックスを示している場合には、ＨＴＭは、その別のワードが同じインデックスを有しているかどうかを決定してよい。これらのインデックスが異なる場合（５３０で示されるように）には、その所与のワードとその別のワードは同じではない。
【００５１】
その別の投機的に読み出されたワードが５１０で読み出されたものと同じでないと決定することに応答して、ＨＴＭは５３５に示されるようにキャッシュラインのＵＬフラグをセットする。ＵＬフラグをセットすることは、キャッシュライン内の複数のワードが現在のトランザクション内で投機的に読み出されたことを示す。セットされたＵＬフラグは、ワードのサブセットのみを目標とすることが意図されている早期リリース命令に応答してキャッシュライン内のワードが全てリリースされてしまうと、トランザクションデータの不慮の喪失が生じる可能性があることをＨＴＭに対して示す。
【００５２】
５４０においては、プロセッサは、所与の投機的に読み出されたワードがリードセットからリリースされるべきであることを特定するリリース命令を検出する。本例のリリース命令は、早期リリースメカニズムに対応する。
【００５３】
リリース命令に応答して、ＨＴＭは、所与のワードのキャッシュラインの場所を探し、そして５５０に示されるようにキャッシュラインのＵＬフラグをチェックしてＵＬフラグがセットされていることを決定する。ＵＬフラグはセットされているので、ＨＴＭは、キャッシュライン内の複数のワードが投機的に読み出されており、キャッシュライン全体がリリースされてしまうと意図しない且つ／又は的確でない挙動がもたらされ得るものと決定する。従って５５５においてＨＴＭは、リリース命令によって示される早期リリース機能を止める。早期リリースは止められるので、ＨＴＭはキャッシュラインのＳＲフラグをクリアせず、キャッシュライン内のそれらワードはリードセット内に残り、そしてＨＴＭはそれらワードに関与するデータ衝突のチェックを継続する。
【００５４】
図５の例は投機的に書き込まれているはずの最初のワードを目標とするリリース命令を含むが、リリース命令が別のワードを目標としていたとしてもシステム挙動は同様であってよい。このように、幾つかの実施形態においては、同じキャッシュライン（即ちワードグループ）内の少なくとも２つのワードが一旦投機的に読み出されると、そのキャッシュライン内のワードは、早期リリースに対する適格性は最早ない。
【００５５】
種々の実施形態において、ＵＬフィールド４４０及びＦＡフィールド４４５等の不慮損失フィールド(unintended fields)は、キャッシュ以外のメカニズムを伴って実装される投機的バッファに対しても、早期リリースを伴うワードグループ化を可能にするように適合させられ得る。例えば図４ｂは幾つかの実施形態に従いワードグループ化及び早期リリースの安全な共存を可能にする不慮喪失フィールドを伴うブルームフィルタを示すブロック図である。
【００５６】
上述したように、ＨＴＭがリードセットの経過を追い得る別のワードグループ化方法は、ハードウェア実装されたブルームフィルタを用いることによるものである。図４ｂは幾つかの実施形態に従いワードグループ化及び早期リリースのメカニズムの的確な共存をサポートするために備えられたブルームフィルタベースの投機的バッファのブロック図である。
【００５７】
そのような幾つかの実施形態においては、あるワードが投機的に読み出されるとき、ＨＴＭは、そのワードのアドレスにハッシュ関数を適用する等によって、そのワードのインデックスを決定してよい。ＨＴＭは次いで、そのワードが投機的に読み出されたことを示すために、ブルームフィルタ４５０等の特殊目的アレイのインデックス値でフラグをセットしてよい。別のスレッドが所与のメモリアドレスにアクセスしたことを示すプローブをプロセッサが受け取ると、プロセッサは、受け取ったメモリアドレスにハッシュ関数を適用して、インデックスを決定すると共にブルームフィルタ内のフラグがそのインデックスにセットされているかどうかをチェックしてよい。
【００５８】
幾つかの実施形態においては、ＨＴＭは、不慮喪失フィールド（４４０及び４４５等）をリードセットブルームフィルタの各インデックスに関連付けてよい。例えば、ブルームフィルタ４５０の各フィールド（インデックス４６０及び４７０等）は、それぞれの不慮喪失フィールド（４６２及び４７２等）に関連付けられてよい。幾つかの実施形態においては、これらのフィールドは、ブルームフィルタそれ自体の一部であってよく、別個のハードウェア構造内に含まれていてよく、さもなければブルームフィルタのそれぞれのインデックスに関連付けられていてよい。
【００５９】
図示された実施形態によると、不慮喪失フィールド４６２及び４７２の各々は、それぞれのＵＬフィールド（４６４及び４７４）とＦＡフィールド（４６６及び４７６）とを備える。これらのフィールドは、データキャッシュ実装におけるフィールド４４０及び４４５と同様のものであってよい。例えば、プロセッサが所与のアドレスにあるあるワードを投機的に読み出し、このアドレスがインデックス４６０にハッシュする場合、ＨＴＭは、インデックス４６０での値が、このアドレスが既にリードセット内にあることを示しているかどうかを決定してよい。インデックス４６０での値が、このアドレスが既にリードセット内にあることを示していない場合には、ＨＴＭは、インデックス４６０をそのような値にセットしてよく、そして所与のアドレスを識別する値にＦＡフィールド４６６をセットしてよい。データキャッシュ実装と同様に、ＦＡフィールド４６６は、アドレスそれ自体を保持してよく、インデックス４６０へマッピングするアドレスのグループ内へのオフセットを保持してよく、又は別の識別子を保持してよい。例えば、用いられるハッシュ関数がモジュロ関数(modulo function)である場合、所与のアドレスのための識別子を得る１つの方法は、アドレスをｌｏｇ２（Ｍ）ビットだけシフトさせることであってよく、ここでＭはブルームフィルタインデックスの数である。一方、インデックス４６０内の値が、アドレスが既にリードセット内にあることを示している場合には、ＨＴＭは、アドレスの識別子をＦＡフィールド４６６内に記憶されるものと比較してよい。２つの値が同じでない場合には、プロセッサは同じグループ内の少なくとも２つの異なるワードを読み出していたことになるので、ＨＴＭは、早期リリースからの不慮の喪失の危険性を示す値にＵＬフィールド４６４をセットすることによって応答してよい。データキャッシュ実装と同様に、グループ内の複数のワードが投機的に読み出されたことをＵＬフィールド４６４が示している場合には、ＨＴＭは、インデックス４６０を目標とする早期リリース動作を止めてよい。
【００６０】
図６は幾つかの実施形態に従い早期リリースを伴うワードグループ化をサポートするように構成されるＨＴＭのコンポーネントのブロック図である。図６のＨＴＭ１１０は図１のＨＴＭメカニズム１１０に対応していてよい。
【００６１】
図示された実施形態によると、ＨＴＭ１１０は、ワードグループ化及び早期リリースの両方をサポートする６０５等の投機的バッファを含んでいてよい。幾つかの実施形態においては、投機的バッファ６０５は、キャッシュ（例えばデータキャッシュ４００）を用いて、ブルームフィルタ（例えばブルームフィルタ４５０）を用いて、且つ／又は他のメカニズムを用いて実装されてよい。幾つかの実施形態においては、投機的バッファ６０５は、共有メモリ内のワードのグループの少なくとも１つがトランザクションのリードセット（例えばＳＲフィールド４３５、インデックス４６０等）内にあることを示すために使用可能なフィールドを含んでいてよい。幾つかの実施形態においては、投機的バッファ６０５はまた、所与のグループ内の複数のワードが能動的トランザクション内で投機的に読み出されたかどうかを示すために用いられ得るフィールドを含んでいてよい（例えばＵＬフィールド４４０，４６４，４７４等）。
【００６２】
図示された実施形態においては、ＨＴＭ１１０はまた、所与のワードが投機的に読み出されるときに投機的バッファ６０５内で適切なフラグを決定し且つセットするように構成されるワードグループ化論理６１０を含む。例えば、投機的バッファ６０５が図４ａにおけるデータキャッシュ４００として実装される場合、ワードグループ化論理６１０は、所与のアドレスに対応するＳＲフィールド、ＵＬフィールド及びＦＡフィールドを、そのアドレスでのワードが投機的に読み出されることに応答して読み出し且つセットするように構成されてよい。
【００６３】
図６に示される実施形態によると、ＨＴＭ１１０はまた、早期リリース論理６１５を含んでいてよく、早期リリース論理６１５は、早期リリース機能を認識しているワードグループ化を実装するように構成されてよい。例えば早期リリース論理６１５は、ここで説明されるように、能動的トランザクションのリードセットからリリースするメモリアドレスを指定するリリース命令を実行するように構成されてよい。論理６１５はまた、指定されたアドレスのグループを決定すると共に、グループ内の複数のワードが能動的トランザクションによって投機的に読み出されたことを決定することに応答して当該機能を止めるように構成されてよい。例えば、早期リリース論理６１５は、投機的バッファ６０５内の適切なＵＬフィールドを読み出すことによって、グループ内の２つ以上のワードが少なくとも部分的に読み出されたかどうかを決定してよい。
【００６４】
投機的バッファ６０５、ワードグループ化論理６１０及び早期リリース論理６１５は図６において別々のコンポーネントとして図示されているが、種々の実施形態において、それらは組み合わされてよく且つ／又は更に分割されてよい。幾つかの実施形態においては、ＨＴＭ１１０は、キャッシュコヒーレンスメカニズム、アボート論理、コミット論理、順序外実行サポート等の種々の他のコンポーネントを更に含んでいてよい。
【００６５】
図７は種々の実施形態に従いここに説明されるワードグループ化及び早期リリースのメカニズムを伴うハードウェアトランザクションメモリを実装するように構成されるコンピュータシステムを示すブロック図である。コンピュータシステム７００は、種々のデバイスの任意のものに対応していてよく、これらは、限定はされないが、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップ若しくはノートブックコンピュータ、メインフレームコンピュータシステム、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、コンシューマデバイス、アプリケーションサーバ、記憶デバイス、周辺デバイス、例えばスイッチ、モデム、ルータ等、又は一般的に任意の種類のコンピュータデバイスを含む。
【００６６】
コンピュータシステム７００は１つ以上のプロセッサ７６０を含んでいてよく、これらのうちの任意のものは多重の物理コア及び／又は論理コアを含んでいてよい。プロセッサ７６０は、メカニズム７７０等のここに説明されるワードグループ化及び早期リリースのメカニズムを伴うＨＴＭを実装するためのそれぞれのメカニズムを含んでいてよい。例えば幾つかの実施形態においては、ＨＴＭ７７０は、データキャッシュ４００及び／又はブルームフィルタ４５０等の適切な投機的バッファを含んでいてよい。
【００６７】
コンピュータシステム７００はまた、データを永続的に記憶しえる１つ以上の永続的記憶デバイス７５０（例えば光学的ストレージ、磁気的ストレージ、ハードドライブ、テープドライブ、ソリッドステートメモリ等）を含んでいてよい。
【００６８】
図示された実施形態においては、コンピュータシステム７００はまた、１つ以上の共有メモリ７１０（例えば１つ以上のキャッシュ、ＳＲＡＭ、ＤＲＡＭ、ＲＤＲＡＭ、ＥＤＯ＿ＲＡＭ、ＤＤＲ１０ＲＡＭ、ＳＤＲＡＭ、ラムバスＲＡＭ、ＥＥＰＲＯＭ等）を含んでいてよく、共有メモリ７１０は複数のプロセッサ７６０によって共有されてよい。１つ以上のプロセッサ７６０、記憶デバイス７５０及び共有メモリ７１０は、相互接続７４０を介して結合されてよい。種々の実施形態において、システムは、より少ないコンポーネント又は図７には図示されない付加的なコンポーネント（例えばビデオカード、オーディオカード、追加的なネットワークインタフェース、周辺デバイス、ネットワークインタフェース、例えばＡＴＭインタフェース、イーサネット（登録商標）インタフェース、フレームリレーインタフェース、モニター、キーボード、スピーカ等）を含んでいてよい。
【００６９】
幾つかの実施形態においては、共有メモリ７１０はプログラム命令７２０を記憶してよく、プログラム命令７２０は、プラットフォームネイティブバイナリの任意のインタープリタ型言語、例えばＪａｖａ（登録商標）バイトコード若しくは任意の他の言語、例えばＣ／Ｃ＋＋、Ｊａｖａ（登録商標）、等、又はそれらの任意の組み合わせにおいてエンコードされてよい。プログラム命令７２０は１つ以上の多重スレッドアプリケーション７２２を実装するプログラム命令を含んでいてよく、多重スレッドアプリケーション７２２は、それぞれ単一のアトミックトランザクションとして実行されるコードの投機的部分を含む。幾つかの実施形態においては、プログラム命令７２０はまた、アプリケーション７２２を実行するためのソフトウェアサポート（例えばスケジューリング、ソフトウェア信号処理等）を提供するオペレーティングシステム７２４を実装するように実行可能な命令を含んでいてよい。
【００７０】
図示された実施形態によると、共有メモリ７１０は共有データ７３０を含み、共有データ７３０は多重のプロセッサ７６０によってアクセスされてよい。プロセッサ７６０の幾つかは、共有データ７３０の種々のコンポーネントをローカルキャッシュ内にキャッシュしてよく、またここに説明されるようなキャッシュコヒーレンスプロトコルに従ってメッセージを交換することによって、これらのキャッシュ内のデータを連携させてよい。
【００７１】
多重スレッドアプリケーション７２２及び／又はオペレーティングシステム７２４を実装されるために用いられる等のプログラム命令７２０は、コンピュータ可読記憶媒体に記録されてよい。コンピュータ可読記憶媒体は、機械（例えばコンピュータ）によって可読な形態（例えばソフトウェア、処理アプリケーション）で情報を記憶するための任意のメカニズムを含んでいてよい。コンピュータ可読記憶媒体は、限定はされないが、磁気記憶媒体（例えばフロッピー（登録商標）ディスク）；光学的記憶媒体（例えばＣＤ−ＲＯＭ）；磁気光学的記憶媒体；リードオンリメモリ（ＲＯＭ）；ランダムアクセスメモリ（ＲＡＭ）；消去可能プログラム可能メモリ（例えばＥＰＲＯＭ及びＥＥＰＲＯＭ）；フラッシュメモリ；プログラム命令を記憶するのに適する電気的な又は他の種類の媒体を含み得る。
【００７２】
上述したコンピュータ可読記憶媒体は、プログラムによって読み出された命令を記憶するための幾つかの実施形態において用いられてよく、また１つ以上のプロセッサ７６０を備えるハードウェアを製造するために直接的に又は間接的に用いられてよい。例えば命令は、ベリログ(Verilog)又はＶＨＤＬ等の高レベル設計言語（ＨＤＬ）におけるハードウェア機能の行動レベル又はレジスタ転送レベル（ＲＴＬ）の記述を記述する１つ以上のデータ構造を記述してよい。記述は合成ツールによって読み出されてよく、合成ツールは記述を合成してネットリスト(netlist)を作成することができる。ネットリストは一連のゲート（例えば合成ライブラリにおいて定義される）を備えていてよく、一連のゲートはプロセッサ５００の機能を表す。ネットリストは次いで、マスクに適用されるべき幾何学的形状を記述するデータセットを作成するために配置されると共に経路付けられてよい。マスクは次いで、プロセッサ５００に対応する単一又は複数の半導体回路を製造するために種々の半導体製造ステップにおいて使用されてよい。代替的には、必要に応じてデータテーブルがネットリスト（合成ライブラリを伴う又は伴わない）又はデータセットであってよい。
【００７３】
幾つかの特定の実施形態がこれまで説明されてきたが、これらの実施形態は、特定の特徴に関して単一の実施形態のみが開示されているとしても、本開示の範囲を限定することは意図されていない。本開示において提供される特徴の例は、特に明記しない限り、限定的ではなく例示的なものであることが意図されている。上述の説明は、本開示の利益を享受する当業者にとって明らかであろうように、そのような代替案、修正及び均等なものを網羅することが意図されている。
【００７４】
本開示の範囲は、ここで取り上げられている問題の一部又は全部を軽減するしないにかかわらず、ここに開示される（明示的に又は暗黙的に）任意の特徴又は特徴の組み合わせ、あるいはその任意の一般化を含む。従って、本出願（又はそれに対して優先権を主張する出願）の手続きの間に任意のそのような特徴の組み合わせに関して新たな特許請求の範囲が編成されることがある。特に、添付の特許請求の範囲を参照して、従属請求項からの特徴が独立請求項の特徴と組み合わされることがあり、またそれぞれの独立請求項からの特徴は、添付の特許請求の範囲に列挙される特定の組み合わせにおけるだけでなく任意の適切な方法において組み合わされることがある。
【図１】
2013543197.tif 000003
【図２】
2013543197.tif 000004
【図３】
2013543197.tif 000005
【図４ａ】
2013543197.tif 000006
【図４ｂ】
2013543197.tif 000007
【図５】
2013543197.tif 000008
【図６】
2013543197.tif 000009
【図７】
2013543197.tif 000010
【国際調査報告】
2013543197.tif 000011
2013543197.tif 000012
2013543197.tif 000013