JP6304845B2 - 装置、方法、システム、プログラム、およびコンピュータ可読記憶媒体 - Google Patents

装置、方法、システム、プログラム、およびコンピュータ可読記憶媒体 Download PDF

Info

Publication number
JP6304845B2
JP6304845B2 JP2016551272A JP2016551272A JP6304845B2 JP 6304845 B2 JP6304845 B2 JP 6304845B2 JP 2016551272 A JP2016551272 A JP 2016551272A JP 2016551272 A JP2016551272 A JP 2016551272A JP 6304845 B2 JP6304845 B2 JP 6304845B2
Authority
JP
Japan
Prior art keywords
transaction
hardware
software
lock
mode
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2016551272A
Other languages
English (en)
Other versions
JP2017509970A (ja
Inventor
カルシウ、イリナ
イー. ゴッチュリッヒ、ジャスティン
イー. ゴッチュリッヒ、ジャスティン
シュペイスマン、タティアナ
エイ. ポカム、ギルズ
エイ. ポカム、ギルズ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2017509970A publication Critical patent/JP2017509970A/ja
Application granted granted Critical
Publication of JP6304845B2 publication Critical patent/JP6304845B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • G06F9/467Transactional memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • G06F9/528Mutual exclusion algorithms by using speculative mechanisms

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Executing Machine-Instructions (AREA)

Description

並列プログラミングコンピューティング環境において、同一メモリロケーションへのアクセスを共有するためには、適切な管理および同期が必要であるが、実現はかなり困難である。従来、共有メモリにアクセスする複数のスレッド間の同期は、共有データを同時アクセスから保護するためのロックを用いて実現してきた。しかし、ロックは、共有データに対するシリアル化について過剰に保守的であることが多い。これは、ランタイムにおいて常に必要になるわけではないが、いつコードを書き込むかを判断するためには困難または不可能であることが多い。
トランザクショナルメモリは、トランザクションと呼ばれるクリティカルセクションを並列且つ投機的に複数のスレッドに実行させるための解決策の選択肢の1つとして提案されている。ランタイムでコンフリクトが発生すると、スレッドは、停止するか、または、トランザクションをロールバックして再度実行し、コンフリクトを解決する。トランザクショナルメモリシステムでは、スレッドは、トランザクションが後にコミットするまで共有メモリロケーションの内容を変更することなくトランザクションを投機的に実行することができる。2つのトランザクション間でコンフリクトが検出されると、一方のトランザクションはアボートされて他方のトランザクションをコミットできるようにする。このタイミングにおいて、コミットされたトランザクションにより共有メモリロケーションの内容が変更されるとしてよい。
一実施形態に係るシステムを示すブロック図である。
一実施形態に係るトランザクションの実行を説明するための上位フローチャートである。
一実施形態に係る、ハードウェアトランザクションおよびソフトウェアトランザクションの間のタイミングとして可能な例を示す。
本発明の一実施形態に係るハイブリッドトランザクショナルメモリシステムのフローを説明するためのブロック図である。
一実施形態に係る第1のハードウェアトランザクションの実行を説明するためのフローチャートである。
一実施形態に係る第1のハードウェアトランザクションのフェーズを詳細に説明するための図である。
一実施形態に係る第2のトランザクションの実行を説明するためのフローチャートである。
一実施形態に係る、基本的なブルームフィルタベースハードウェアトランザクションを詳細に説明するための図である。
一実施形態に係る、最適化されたブルームフィルタベースハードウェアトランザクションを詳細に説明するための図である。
一実施形態に係る投機的ソフトウェアトランザクションの実行を説明するためのフローチャートである。
一実施形態に係る、ソフトウェアトランザクション実行を詳細に説明するための図である。
一実施形態に係る、取り消し不能ソフトウェアトランザクションの実行を説明するためのフローチャートである。
一実施形態に係る、取り消し不能ソフトウェアトランザクションを詳細に説明するための図である。
別の実施形態に係るシステムを示すブロック図である。
トランザクショナルメモリシステムを実装するさまざまな実施形態において、アクセスされたメモリロケーションに関する情報を用いて、1または複数のソフトウェアトランザクションと並列に実行されている1または複数のハードウェアトランザクションの間でコンフリクトが発生していると判断される場合がある。特定の実装例では、この情報を、トランザクションを実行しているスレッドに対応付けられているフィルタセットを用いて維持するとしてよい。より具体的には、実施形態では、これらのフィルタセットを、いわゆるブルームフィルタとして実装するとしてよい。ブルームフィルタには、アクセスされたメモリロケーションに関する情報を格納するとしてよい。
一般的に、ブルームフィルタは、1または複数のメモリロケーションに対応付けられている値を提供するフィールドを複数持つビットベクトルとして実装され得る。動作について説明すると、アクセスされたメモリロケーションアドレス(または、その一部)は1または複数のハッシュ値でハッシュされる。ハッシュ結果を用いて、ビットベクトルの対応するエントリにデータを追加する。より具体的には、アクセスおよびハッシュ算出が発生すると、ビットベクトルのうち指定されたフィールドは、論理値「1」またはアクティブ値にセットされて、対応するアドレスがアクセスされたことを示すとしてよい。同様に、論理値「0」または「非アクティブ値」を持つ任意のフィールドは、メモリの1または複数の所与のアドレスにはアクセスが発生していない旨を意味する。
コンフリクト検出は、少なくとも部分的に、複数のブルームフィルタ値を用いて実行されるとしてよい。より具体的には、第1のスレッド用のブルームフィルタは、並列に実行しているトランザクションを持つ第2のスレッド用のブルームフィルタの内容と、自身の内容とを比較するとしてよい。共通部分(インターセクション)比較によって、1または複数の位置において複数のアクセスメモリロケーションに共通部分があることが分かれば、コンフリクトが検出され、トランザクションのうち1または複数をアボートまたはロールバックするためのさまざまな処理が発生するとしてよい。これに代えて、共通部分比較によってアクセスされたメモリロケーションに共通部分が無いことがわかれば、トランザクションのうち一方または両方は、コンフリクトを検出することなく、コミットに進むとしてよい。
実施形態を用いて、一のソフトウェアトランザクションと並列に実行されている複数のハードウェアトランザクション間のコンフリクトを判断するとしてよい。スレッド毎にブルームフィルタが設けられる実施形態を用いて、ソフトウェアトランザクションによってソフトウェアグローバルロックが保持されている間に実行を終了するハードウェアトランザクションは、コンフリクトが発見された場合に限り、強制的にアボートされるとしてよい。ブルームフィルタは、偽陽性となる場合もあるので、誤ってアボートが発生する可能性が依然としてある。しかし、ブルームフィルタの利用によって、ハードウェアトランザクションのコミット確率が改善され得る。
実施形態は、所与のソフトウェアトランザクションによって取得される単一グローバルロックを用いてソフトウェアトランザクションおよびハードウェアトランザクションの両方を実現するハイブリッドトランザクショナルメモリ(HTM)で用いられるとしてよい。ハードウェアトランザクショナルメモリは、トランザクションをコミットさせて完了させるためにベストエフォート形式を採用する、プロセッサハードウェア内でのみ実装され得る。ソフトウェアトランザクショナルメモリは、マルチスレッド化されたプログラムにおいて共有メモリを同期させるべく、全てソフトウェアで実装される。
ハードウェアトランザクションの終了時には、当該ハードウェアトランザクションが単一グローバルロックを参照する。当該ロックが解放されている場合、ハードウェアトランザクションはコミットに成功するとしてよい。単一グローバルロックが解放されていない場合、各トランザクションのリードセットおよびライトセットを表すスレッド毎のブルームフィルタを用いて、コンフリクト検出を実行するとしてよい。このようにして、単一グローバルロックがソフトウェアトランザクションによって獲得されていたとしても、コンフリクトしていないハードウェアトランザクションはコミットすることができる。
このため、実施形態によれば、ハイブリッドトランザクショナルメモリシステムで実現される並行処理の量を増やすことが可能になる。ソフトウェアトランザクションおよびハードウェアトランザクションにおけるコンフリクトを検出するべく、各スレッドにはブルームフィルタが対応付けられる。スレッドにおいてトランザクションを実行している間、各リードライト処理をアノテートして、メモリロケーションをブルームフィルタに追加する。一実施形態において、このようなアノテートはライブラリコールによって実行されるとしてよい。しかし、他の実施形態ではこのようなアノテートをリードライトメモリアクセスにインライン化するとしてよい。これに代えて、コンパイラが、ブルームフィルタ挿入を処理するための命令を挿入するとしてよい。
ハードウェアトランザクション(つまり、トランザクションのクリティカルセクション)が完了すると、トランザクションはコミットする前にグローバルロックを参照して、解放されていれば、トランザクションはコミットに成功するとしてよい。しかし、ロックが獲得されていれば、ハードウェアトランザクションおよびソフトウェアトランザクション(グローバルロックの所有者)のブルームフィルタの内容を共通部分演算で比較して、コンフリクトが発生しているか否かを判断する。ブルームフィルタでは、偽陽性が発生する可能性はあるが、偽陰性は発生しない。このため、トランザクション間で実際にはコンフリクトしていないにもかかわらずコンフリクトが検出されることがあるが、複数のトランザクションが同じメモリロケーションにアクセスした場合に共通部分比較がコンフリクト無しと報告することはない。このように、ロックが獲得されていたとしても、ブルームフィルタがコンフリクトを報告しない限り、ハードウェアトランザクションはコミットに成功し得る。
一の特定のハイブリッドトランザクショナルメモリシステムにおいて、一のソフトウェアトランザクションは1または複数のハードウェアトランザクションと並列に実行され得る。ソフトウェアトランザクションは、開始時に、排他性を保証するべく単一グローバルロックを取得する。各ハードウェアトランザクションは、クリティカルセクション終了時にこのロックをリードして、コミットを試すか、または、ブルームフィルタを参照するかを判断する。一実施形態において、単一グローバルロックは、所有者であるスレッドの識別子を格納しているとしてよい。このようにして、ハードウェアトランザクションに対して、コンフリクトに関してどのブルームフィルタを確認すべきかを指定する。
一実施形態において、ブルームフィルタはソフトウェアブルームフィルタとして実装され得る。これらのフィルタを用いて、各トランザクション(ハードウェアまたはソフトウェア)は、メモリロケーションをリード/ライトすると、リードまたはライトした各メモリロケーションを自身のブルームフィルタに対して追加する。ハードウェアトランザクションの終了時には、ブルームフィルタを用いて、もし存在すれば、単一グローバルロックを現在保持しているソフトウェアトランザクションとの間のコンフリクトを特定する。
ハードウェアトランザクションは大半がハードウェアで実行されるが、リードアクセスおよびライトアクセスはアノテートされるので、リード/ライトされたロケーションはスレッド毎のソフトウェアブルームフィルタに入力されることに留意されたい。コミット時には、ハードウェアトランザクションはグローバルロックを確認して、解放されていれば、コミットすることができる。解放されていなければ、当該ハードウェアトランザクションのブルームフィルタとソフトウェアブルームフィルタとの間のセット共通部分を算出する。コンフリクトが無ければ、ハードウェアトランザクションはコミットに成功するとしてよい。コミット時(コンフリクトまたはフィルタ共通部分が無いことを確認した後)、ハードウェアトランザクションが実行した更新は、更新された値を(全ての更新が一度に可視状態になるように)メモリにライトすることによって、他のスレッドにも可視状態になる。トランザクションがアボートされると、全ての更新は初期状態に戻る。
アボートされるハードウェアトランザクションは、複数回にわたって再試行する。N回(Nは設定可能なパラメータである)の再試行の後、ハードウェアトランザクションは、ソフトウェアトランザクションに移行して単一グローバルロックの取得を試みる。この移行によって、ソフトウェアトランザクションがアボートされない実施形態において前進が保証される。
この実施形態では、任意の所与のタイミングにおいて実行可能なソフトウェアトランザクションは1つのみである。ソフトウェアトランザクションは、スレッドが単一グローバルロックを所有している場合に実行することができる。ソフトウェアトランザクションは、自分のスレッド識別子(ID)をロックロケーションにライトすることによって当該ロックを取得し、クリティカルセクションの実行を開始する。ソフトウェアトランザクションが実行する全ての更新は実行済みである(言い換えると、ソフトウェアトランザクションは直接メモリを更新する)。これに加えて、ソフトウェアトランザクションはさらに、リード/ライトされたロケーションをスレッドのブルームフィルタに格納して、並列に実行されているハードウェアトランザクションがコンフリクトの有無を確認できるようにする。一実施形態において、ソフトウェアトランザクションは決してアボートされることはない。
ハイブリッドトランザクショナルメモリ方式は、トランザクション実行の高速化およびハードウェアトランザクショナルメモリに対応付けられているオーバーヘッドの低減を実現しつつ、処理しているトランザクションについて前進を保証するために用いられるとしてよい。ハイブリッドトランザクショナルメモリ方式によれば、各トランザクションは、最初にハードウェアで処理され、ハードウェアで前進できない場合には続いてソフトウェアで処理する。さまざまな実施形態において、ソフトウェアトランザクションと1または複数のハードウェアトランザクションとの並列実行を可能とするべくグローバルロックが用いられるハイブリッドトランザクショナルメモリシステムが提供される。
図1は、装置100を示すブロック図である。図1に図示しているように、装置100は、プロセッサ部102、メモリ部104およびトランザクション管理モジュール106等、複数の構成要素を備える。しかし、実施形態は図示した構成要素の種類、数または配置に限定されるものではない。
さまざまな実施形態において、プロセッサ部102は、タスクレベルでの並列処理を実装可能な任意のプロセッサまたはロジックデバイスを用いて実装されるとしてよい。一部の実施形態において、プロセッサ部102はマルチコアプロセッサであってよい。別の実施形態例では、プロセッサ部102は、タスクを並列に実行するよう配置されている複数のプロセッサであってよい。メモリ部104は、データを格納することが可能な任意の機械可読媒体またはコンピュータ可読媒体、例えば、揮発性メモリおよび不揮発性メモリの両方を用いて実装するとしてよい。一部の実施形態において、メモリ部104は、プロセッサ部102用のキャッシュを含むとしてよい。さまざまな実施形態において、メモリ部104は、これに加えて、または、これに代えて、他の種類のデータ記憶媒体を含むとしてよい。データ記憶媒体の例は、リードオンリーメモリ(ROM)、ランダムアクセスメモリ(RAM)、ダイナミックRAM(DRAM)、ダブルデータレートDRAM(DDRAM)、シンクロナスDRAM(SDRAM)、スタティックRAM(SRAM)、プログラミング可能ROM(PROM)、消去可能プログラミング可能ROM(EPROM)、電気的消去可能プログラミング可能ROM(EEPROM)、フラッシュメモリ、強誘電体ポリマーメモリ、オボニックメモリ、相変化メモリまたは強誘電体メモリ等のポリマーメモリ、シリコン酸化物窒化物酸化物シリコン(SONOS)メモリ、磁気カードまたは光カード、または情報を格納することに適した任意のその他の種類の媒体が挙げられる。メモリ部104の一部または全体は、プロセッサ部102と同じ集積回路に含まれるとしてもよいし、または、これに代えて、メモリ部104の一部または全体は、集積回路または他の媒体、例えば、プロセッサ部102の集積回路の外部にあるハードディスクドライブに配置されるとしてもよい。
一部の実施形態において、トランザクション管理モジュール106は、回路、ロジック、他のハードウェアおよび/またはトランザクショナルメモリパラダイムに従ってトランザクションの実行を管理する命令を含むとしてよい。さまざまな実施形態において、トランザクション管理モジュール106は、ハードウェアトランザクションおよびソフトウェアトランザクションの両方を実行させるとしてよい。ハードウェアトランザクションは、プロセッサ部102内のロジックデバイス回路によって直接実行されるトランザクションであってよい。ソフトウェアトランザクションは、プロセッサ部102で実行されるプログラミングロジックによって間接的に実行されるトランザクションであってよい。
さらに図1で図示しているように、装置100および送受信部144を含むシステム140が提供される。送受信部144は、さまざまな適切な無線通信技術を用いて信号を送受信可能な1または複数の無線機器を含むとしてよい。そのような技術では、1または複数の無線ネットワークを介する通信を実行するとしてよい。無線ネットワークの例には、ワイヤレスローカルエリアネットワーク(WLAN)、ワイヤレスパーソナルエリアネットワーク(WPAN)、ワイヤレスメトロポリタンエリアネットワーク(WMAN)、セルラー方式ネットワークおよび人工衛星ネットワークが含まれる(しかし、これらに限定されない)。
一部の実施形態において、プロセッサ部102は1または複数のスレッド108のホストとなるとしてよい。各スレッド108は、プロセッサ部102で実行されているアプリケーションまたはプログラムに対応するとしてよい。任意の特定のアプリケーションまたはプログラムは、複数のスレッド108が対応付けられているとしてよい。アプリケーションまたはプログラムは、特定のスレッド108を利用して1または複数のトランザクション110の実行を要求するとしてよい。トランザクション110は、さまざまな計算またはその他のタスクの実行を、プロセッサ部102に任せるとしてよい。
さまざまな実施形態において、スレッド108がトランザクションの実行を要求する場合、トランザクション管理モジュール106は、ハイブリッドトランザクショナルメモリアルゴリズムにしたがって当該トランザクションを管理する。一部の実施形態において、ハイブリッドトランザクショナルメモリアルゴリズムは、トランザクションの実行およびコミットを試みる複数の実行フェーズまたは実行モードを実装するとしてよい。さまざまな実施形態において、ハイブリッドトランザクショナルメモリアルゴリズムは、ハードウェアフェーズおよびソフトウェアフェーズを含むとしてよい。一部の実施形態において、トランザクション管理モジュール106は、ハードウェアフェーズが失敗した後に限り、トランザクションのためにソフトウェアフェーズを用いるとしてよい。
一部の実施形態において、トランザクション管理モジュール106は、一のソフトウェアトランザクションおよび1または複数のハードウェアトランザクションの並列実行を可能にするべくグローバルロック112を利用するとしてよい。さまざまな実施形態において、トランザクション管理モジュール106は、ソフトウェアトランザクションが実行されている場合にグローバルロック112をセットするか、または、アクティブ化するとしてよく、ソフトウェアトランザクションが実行されていない場合にグローバルロック112をクリアするか、または、非アクティブ化するとしてよい。一部の実施形態において、グローバルロック112はスピンロックであってよい。他の実施形態において、ロックキャッシュラインにおけるコンテンションを減らすべくMCS(Mellor−Crummey−Scott)ロックをグローバルロック112に用いるとしてもよい。このようなさまざまな実施形態において、「MCS_acquire」法および「MCS_release」法を用いて、ハードウェアトランザクションの利点を生かし、コンペア・アンド・スワップ(CAS)命令の実行を高速化するとしてよい。さらに、一部の実施形態において、このグローバルロックは、本明細書で説明するように、フィルタメカニズムを用いて実装するとしてよい。
一部の実施形態において、トランザクション管理モジュール106は、ハードウェアトランザクションの完了時にグローバルロック112が非アクティブでトランザクション実行中に他のコンフリクトが発生しなかった場合に、ハードウェアトランザクションをコミット可能とするとしてよい。これに代えて、ハードウェアトランザクションがコミットを求めているタイミングにおいてグローバルロック112がアクティブであるか、または、獲得されている場合、トランザクション管理モジュール116は、ハードウェアトランザクションと実行中のソフトウェアトランザクションとの間でコンフリクトが存在するか否かを、両トランザクションを開始したスレッドに対応付けられているブルームフィルタに格納されている情報を参照して判断するとしてよい。
さまざまな実施形態において、トランザクション管理モジュール106は実行ロジック114を含むとしてよい。一部の実施形態において、実行ロジック114は、回路、他のハードウェアおよび/またはトランザクション110を実行する命令であってよい。さまざまな実施形態において、スレッド108が新たなトランザクションの実行を要求する度に、実行ロジック114はトランザクションの実行を1回または複数回行うとしてよい。一部の実施形態において、実行ロジック114は最初にトランザクションをハードウェアトランザクションとして1回または複数回実行するとしてよい。この後、ハードウェアで実行してもコミットできない場合には、当該トランザクションをソフトウェアトランザクションとして実行するとしてよい。このように、一部の実施形態において、ソフトウェアトランザクションモードは、コミットを保証するべく、そして、前進を達成するべく、トランザクションに最高優先度が割り当てられるフォールバック実行フェーズであってよい。一部の実施形態において、実行ロジック114はさらに、ハードウェアトランザクションの完了時にグローバルロック112を確認するとしてよい。
一部の実施形態において、トランザクション管理モジュール106はトラッキングロジック116を含むとしてよい。さまざまな実施形態において、トラッキングロジック116は、回路、他のハードウェアおよび/またはグローバルロック112、再試行カウンタ118、および、再試行しきい値120を管理するための命令を含むとしてよい。一部の実施形態において、トラッキングロジック116は、実行ロジック114からの命令に基づいてグローバルロック112をセットするとしてよい。例えば、実行ロジック114は、実行ロジック114がソフトウェアフェーズでトランザクションの実行を開始すると、グローバルロック112をセットするようトラッキングロジック116に命令するとしてよい。さまざまな実施形態において、再試行カウンタ118は、ハードウェアトランザクションモードでトランザクションを実行しようと連続して試行した総回数を含むとしてよい。一部の実施形態において、再試行しきい値120が含む試行回数は、当該回数だけ試行された後は実行ロジック114がハードウェアトランザクションとしての実行からソフトウェアトランザクションとしての実行へと前進すべきことを意味しているとしてよい。さまざまな実施形態において、新たなトランザクションを受信すると、トラッキングロジック116は(当該トランザクションに対応する)再試行カウンタ118をゼロにリセットするとしてよい。一部の実施形態において、トランザクションの実行に失敗する度に、トラッキングロジック116が再試行カウンタ118をインクリメントするとしてよい。
さらに図1に図示しているように、メモリ部104は、スレッド毎のリードセットストレージ126およびスレッド毎のライトセットストレージ128を含む。ある実施形態において、これらのストレージは、トランザクション中にリードまたはライトされた値に関する情報を格納するとしてよい。これに加えて、各スレッドには対応するブルームフィルタ134および136が対応付けられているとしてよく、各ブルームフィルタは所与のリードセットストレージまたはライトセットストレージ(およびスレッド)に対応付けられている。さらに本明細書で後述するが、トランザクションの実行中、各リード処理および各ライト処理は、トランザクション中に所与のメモリアドレスにアクセスした旨を示すべく、対応するブルームフィルタにアノテートされるとしてよい。この情報はのちに、複数の並列に実行されているトランザクション間に少なくとも潜在的なコンフリクトが存在するか否かを判断するために用いられるとしてよい。
さまざまな実施形態において、トランザクション管理モジュール106は、最終決定ロジック128を含むとしてよい。一部の実施形態において、最終決定ロジック128は、回路、他のハードウェアおよび/またはトランザクションが実行ロジック114によって実行された後コミットまたはアボートのいずれを行うべきかを判断する命令を含むとしてよい。さまざまな実施形態において、最終決定ロジック128は、任意の特定のトランザクションが別のトランザクションとの間でコンフリクトを発生させているか、またはコンフリクトを発生させる可能性がある場合に、当該トランザクションをアボートすべきと判断するとしてよい。一部の実施形態において、最終決定ロジック128は、トランザクションが並列なソフトウェアトランザクションとの間でコンフリクトを発生させる可能性があるか否かを、グローバルロック112を確認することによって、判断するとしてよい。さまざまな実施形態において、グローバルロック112がセットされており、トランザクションがハードウェアトランザクションである場合、最終決定ロジック128はこの後、共通部分ロジック124を参照して、ハードウェアトランザクションとソフトウェアトランザクションとの間に少なくとも潜在的なコンフリクトが存在するか否かを判断するとしてよい。このため、共通部分ロジック124は、それぞれのトランザクションを開始したスレッドのブルームフィルタ134および136にアクセスして、フィルタセットに共通部分が存在するか否かを判断するとしてよい。共通部分が存在する場合、少なくとも潜在的なコンフリクトが存在するので、共通部分ロジック124は、共通部分有りを最終決定ロジック128に報告するとしてよい。これに代えて、フィルタセットに共通部分があると示さない場合、共通部分無しが最終決定ロジック128に報告される。
続いて、最終決定ロジック128は、共通部分が発見されればハードウェアトランザクションをアボートさせるとしてよく、共通部分が発見されない場合には、(他のコンフリクトが検出されないと仮定して)ハードウェアトランザクションのコミットを可能とする。
一部の実施形態において、グローバルロック112がセットされておりトランザクションがソフトウェアトランザクションである場合、最終決定ロジック128は、トランザクションをコミットして、トラッキングロジック116にグローバルロック112を解放するよう命令するとしてよい。さまざまな実施形態において、グローバルロック112がセットされていない場合、最終決定ロジック128は、ハードウェアトランザクションをコミットして、トラッキングロジック116に再試行カウンタ118をクリアするよう命令するとしてよい。尚、フィルタセットが潜在的なコンフリクトを示すか否かを判断するための共通部分ロジック124とのやり取りは必要ない。
一部の実施形態において、トランザクション管理モジュール106はアボートハンドラロジック130を含むとしてよい。さまざまな実施形態において、アボートハンドラロジック130は、回路、他のハードウェアおよび/または最終決定ロジック128が指示するトランザクションのアボートを取り扱うための命令を含むとしてよい。一部の実施形態において、アボートハンドラロジック130は、アボートされたトランザクションを次に試行する場合にハードウェアトランザクションまたはソフトウェアトランザクションのいずれとして実施すべきかを判断するとしてよい。さまざまな実施形態において、アボートハンドラロジック130は、トランザクションをアボートすべき理由は、別のトランザクションとのコンフリクトまたは潜在的なコンフリクトのためか、または、他の理由かを判断するとしてよい。トランザクションのアボートの理由が他の理由、例えば、不正命令、容量オーバーフロー、または、不規則メモリアクセスパターンによるキャッシュウェイ数オーバーフローである場合、アボートハンドラロジック130は、実行ロジック114がソフトウェアフェーズに直ちに進むべきと判断するとしてよい。トランザクションのアボートの理由が別のトランザクションとのコンフリクトまたは潜在的なコンフリクトである場合、アボートハンドラロジック130は、トランザクションが現在のフェーズを再試行すべきか、次のフェーズに進むべきかを、例えば、再試行数に基づいて判断するとしてよい。
さまざまな実施形態において、アボートされたトランザクションを次に試行する場合ハードウェアトランザクションまたはソフトウェアトランザクションのどちらとして実施すべきかを判断するべく、アボートハンドラロジック130は、再試行カウンタ118と再試行しきい値120とを比較するとしてよい。一部の実施形態において、再試行カウンタ118が再試行しきい値120未満である場合、アボートハンドラロジック130は、ハードウェアトランザクションとしてトランザクションを再試行するよう実行ロジック114に命令するとしてよい。逆に以上である場合、アボートハンドラロジック130は、ソフトウェアトランザクションとしてトランザクションを再試行するよう実行ロジック114に命令するとしてよい。さまざまな実施形態において、トラッキングロジック116は、試行したトランザクションについてコミットが成功した回数および/または失敗した回数に基づき、再試行しきい値120の値を適応的に決定するとしてよい。図1の実施形態ではこのように上位概念で図示しているが、本発明の範囲はこの点に限定されないと理解されたい。ハイブリッドトランザクショナルメモリシステムは、多くの異なる形態で実施され得ると共に、多数の変更例があるとしてよい。
ここで図2を参照すると、一実施形態に係るトランザクションの実行を説明するための上位概念を示すフローチャートが図示されている。図2から分かるように、方法200によると、全てのトランザクションはハードウェアでハードウェアトランザクションとして実行を開始する(ブロック210)。実行中(ブロック215)、リード処理またはライト処理の度に、トランザクションは、リードまたはライトした各ロケーションを対応するスレッドのためのソフトウェアブルームフィルタに記録する。ハードウェアトランザクションは、クリティカルセクションの実行を終了した後(ブロック220)、存在する場合にはソフトウェアトランザクションとのコンフリクトを確認することによって、コミットしようと試みる。ハードウェアトランザクションは最初に、グローバルロックを獲得したか否かを確認する(ひし形225)。このロックが解放されている場合、ハードウェアトランザクションはコミットに成功するとしてよい(ひし形240で判断するが、アボートが行われていないと仮定)。当該ロックが獲得されている場合、ロックの値は当該ロックを保持しているスレッドのインデックスまたは識別子を示し、当該スレッドがソフトウェアトランザクションを実行していることが分かる。
この場合、ハードウェアトランザクションはひし形230に進んで、ソフトウェアトランザクションを実行しているスレッドのブルームフィルタにアクセスしてコンフリクトがあるか否かを判断する。より具体的には、ひし形230において、2つのフィルタの間で共通部分演算を実行して、2つのブルームフィルタのエントリまたはフィールドに共通部分があるか否か(例えば、両方がアクティブ値または論理値「1」を持つか否か)を判断するとしてよい。共通部分がある場合、ハードウェアトランザクションはアボートして、ひし形270に進み、所与のハードウェアトランザクションの再試行数が設定可能な回数Nに到達したか否かを判断する。尚、トランザクションをアボートする際にさまざまなステップ、例えば、バッファ等、スレッドに対応付けられているストレージ内の全ての更新後の値をフラッシュすること等を実施し得ることに留意されたい。
これに代えて、ブルームフィルタ間に共通部分はないと判断される場合、ひし形240に進んで、例えば、他の理由でトランザクションがアボートされたか否かを判断する。アボートされていない場合、ブロック250に進み、トランザクションをコミットする。コミットについて、ハードウェアトランザクションは、ハードウェアトランザクション実行中には所与のスレッドにのみ可視となるバッファ内に格納されていた更新値でメモリを更新するとしてよい。
さらに、トランザクションをアボートするか否かに関する判断は図2の実施形態において特定の位置にあるひし形240で図示されているが、ハードウェアトランザクションは、他の種類のコンフリクトまたはトランザクション中にアボートするべき他の理由を検出するコンフリクト検出ロジックを用いて、実行中の任意のタイミングでアボートすることが可能であると理解されたい。しかし、図示を簡略化するべく、ひし形240は図2に示す位置に表示していると理解されたい。
さらに図2を参照しつつ説明すると、ひし形270において再試行数がしきい値Nに到達していないと判断される場合、ブロック280に進み、再試行数をインクリメントして、ブロック210に戻りハードウェアトランザクションを再度開始する。これに代えて、再試行数が再試行しきい値Nに到達した場合、ひし形270からブロック260に進み、ソフトウェアトランザクションモードに実行を切り替えるとしてよい。より具体的には、許可されるソフトウェアトランザクションの数は1つのみであるこの実装例において、こうしてトランザクションをソフトウェアトランザクションモードで実行して完了させ、ブロック250においてトランザクションをコミットさせる。
ブルームフィルタによって、ソフトウェアトランザクションとハードウェアトランザクションの間のコンフリクト検出が保証される。ハードウェアトランザクション間のコンフリクトの検出および解決は、ハードウェアトランザクショナルメモリシステムによって保証される。ある実施形態において、単一グローバルロックによって、どのタイミングでも実行中のソフトウェアトランザクションの数は1つのみとなることが保証されるので、ソフトウェアトランザクション間について追加でコンフリクト検出メカニズムを設けることはない。
図3は、一実施形態に係る、ハードウェアトランザクションおよびソフトウェアトランザクションの間のタイミングとして可能な例を示す。ケース310では、ソフトウェアトランザクションが最初に変数Xを更新し、この後で、ハードウェアトランザクションが同じ変数Xを異なる値に更新する。ハードウェアトランザクションがコミットしようと試みる場合、二重アクセスを特定するフィルタセット共通部分特定を実行するので、コンフリクトが発見され、ハードウェアトランザクションをアボートする。ケース320でも同様の処理を実行する。しかし、ケース330およびケース340では、ハードウェアトランザクションをコミットする時点において、ソフトウェアスレッドは既にコミットしており、単一グローバルロックを解放している。このため、ハードウェアスレッドがこのロックを確認すると、解放されたことが分かるので、トランザクションのコミットに成功するとしてよい。
ケース330およびケース340では、ハードウェアトランザクションがコミットしようと試みたタイミングにおいてロックは解放されている。これは、並列に実行されているソフトウェアトランザクションはないことを意味する。重複するソフトウェアトランザクションがあったとしても、この時点までには既にコミットされており、ハードウェアトランザクションの前にシリアル化される。ソフトウェアトランザクションが、ハードウェアトランザクションの後にシリアル化した複数のコンフリクトする処理を実行した場合、ハードウェアトランザクションは、(ハードウェアコンフリクト検出メカニズムによって)コンフリクトのタイミングにおいてアボートされていたであろう。このため、ロックが解放されている場合にハードウェアトランザクションのコミットを可能とすることで、動作が正常になる。
これに代えて、(ケース310およびケース320のように)ハードウェアトランザクションがコミットしようと試みる場合にロックが獲得されている場合、並列ソフトウェアトランザクションを実行する。コミットしようとするハードウェアトランザクションは、このソフトウェアトランザクションの前にシリアル化される。これは、ソフトウェアトランザクションによって実行される複数の処理が今後コンフリクトする可能性があるためである。しかし、ソフトウェアトランザクションは、1または複数のメモリロケーションにおいて、ハードウェアトランザクションがこれらのロケーションのトラッキングを開始する前に、複数のコンフリクトする処理を実行していた可能性がある。このため、ソフトウェアトランザクションの前にハードウェアトランザクションをシリアル化するのは、誤った動作であろう。このため、実施形態ではこのケースと判断するべくブルームフィルタを利用する。
ソフトウェアブルームフィルタは、ソフトウェアトランザクションが今後アクセスする全てのロケーションを含んでいるわけではなく、トランザクションが既にアクセスしたロケーションのみを含むことに留意されたい。それにも関わらず、今後のアクセスはコミットされたハードウェアトランザクションの後に正しくシリアル化される。このため、ブルームフィルタに共通部分が無い場合、ハードウェアトランザクションは、ソフトウェアトランザクションの前に正しくシリアル化することができ、コミットが許可され得る。ブルームフィルタがコンフリクトを特定する場合、コンフリクトする処理は最初にソフトウェアトランザクションで発生し、その後ハードウェアトランザクションで発生した。そうでなければ、ハードウェアトランザクションはアボートされていたであろう。この場合、ハードウェアトランザクションは、ソフトウェアトランザクションの前にシリアル化することはできず、アボートされる。このため、実施形態は正しくこれらのコンフリクトを特定し、ハードウェアトランザクションをアボートする。ある実施形態において、ブルームフィルタはコンフリクトが有ると誤って報告する可能性がある(偽陽性が区別不可能)ことに留意されたい。このため、ハードウェアトランザクションはこれらの場合にもアボートされてしまう。しかし、ブルームフィルタは偽陰性にはならないので、全てのコンフリクトが特定され回避される。
ある実施形態において、高効率なブルームフィルタ実装によって、挿入および積集合演算を定数時間(O(1)time)で実行することが可能となり、オーバーヘッドが最小限に抑えられる。さらに、ハードウェアトランザクションはグローバルロックおよびソフトウェアブルームフィルタをコミットの直前にリードするのみであり、ソフトウェアトランザクションがこれらのロケーションを変更するので、ハードウェアトランザクションをアボート可能なウィンドウが減る。ある実施形態では、ロックおよびブルームフィルタのリードのためには、トランザクションのリードセットに追加キャッシュラインを2つ追加するのみであるとしてよい。一部の実施形態において、これを最適化して、ブルームフィルタの1ビットを用いてロックが獲得されたか否かを指定し、ブルームフィルタの残りをブルームフィルタとして用いるとしてよい。このような実装例では、ロックのロケーションが両方の目的を実現することが出来、ハードウェアトランザクションのリードセットサイズに追加されるのは1つのロケーションのみに減る。トランザクション自身のブルームフィルタによって、追加キャッシュラインがライトセットに追加されるが、ある実装例において、ブルームフィルタサイズによっては1つのキャッシュラインのみまで減らすことが可能である。
ある実施形態を用いると、互いに素となるメモリアクセスに自身からアクセスし、且つ、大きいソフトウェアトランザクションが並列に実行されている多数の小さいハードウェアトランザクションは、コミットすることができる。この一例として、オープンアドレスハッシュテーブルを表すアレイを考えたい。スレッドは、このハッシュテーブルにおいてlookup(x)処理およびinsert(x)処理を実行するとしてよい。 占有率がしきい値に到達すれば、スレッドは、新しいアレイを割り当て、旧アレイから新アレイへ要素を再ハッシュすることによって、ハッシュテーブルのサイズを倍増すると決定する。探索(lookup)処理および挿入(insert)処理は、短いトランザクションであり、ほとんどの場合はハードウェアで成功するとしてよい。これとは違い、再ハッシュはソフトウェアトランザクションとして実行されるとしてよい(再ハッシュを実行するスレッドは単一グローバルロックを獲得する)。この場合、ソフトウェアトランザクションと複数の並列ハードウェアトランザクションとの間で正確にコンフリクトを検出することで、ハードウェアトランザクションとして実行される探索処理は旧アレイのデータを用いてコミットされ得る一方で、新アレイへの再ハッシュが実行される。さらに、旧アレイの終端付近で(つまり、まだ再ハッシュされていない部分で)発生するハードウェアトランザクションとして実行される挿入処理は、再ハッシュの間でもコミットが可能である。このため、実施形態によれば、長いソフトウェアトランザクションが並列に実行されている小さいハードウェアトランザクションをコミットさせることで、スループットが改善される。
上述したようなブルームフィルタコンフリクト検出技術によって並列化が改善されるが、上述した実施形態では単一グローバルロックを利用していることを考えると、依然として非効率な点がある可能性がある。他の実施形態において、複数のハードウェアトランザクションおよび複数のソフトウェアトランザクションを並列に実行してコミットさせることが可能になるトランザクショナルメモリシステムが提供されるとしてよい。概して、キャッシュベースのハードウェアトランザクショナルメモリシステムをハードウェアコンポーネントに用いるとしてよく、無効化ベースのソフトウェアトランザクショナルメモリシステムをソフトウェアコンポーネントに用いるとしてよい。これらの実施形態は、前進を保証することは変わらないまま、複数のハードウェアトランザクションが複数のソフトウェアトランザクションと並列に実行可能となるハイブリッドトランザクショナルメモリシステムを提供する。
ここで図4を参照すると、本発明の一実施形態に係るハイブリッドトランザクショナルメモリシステムを説明するためのブロック図である。図4に示すように、HTMシステム400は、複数のハードウェアトランザクションモードおよび複数のソフトウェアトランザクションモードを可能とする。図4に示す実装例において、トランザクションは、本明細書ではライトハードウェア(LiteHW)トランザクションモードと呼ばれる第1のハードウェアトランザクションモード410で開始される。オーバーフローまたはサポートされていない命令が発生する場合、トランザクションは直ちに別の種類のトランザクションモードにアップグレードされる。これに代えて、トランザクションが他の理由で(例えば、コンフリクトのため)アボートされる場合、トランザクションは、本明細書ではブルームフィルタハードウェア(BFHW)モードと呼ばれる第2のハードウェアトランザクションモード420にアップグレードされる前に、複数回再試行される。トランザクションは、同様に複数回再試行した後でもコミットしない場合、本明細書において投機的ソフトウェア(SpecSW)モードと呼ばれる第1のソフトウェアトランザクションモード430に更新される。このモードでは再度、本明細書では取り消し不能ソフトウェア(IrrevocSW)モードと呼ばれる第2のソフトウェアトランザクションモード440にアップグレードする前に、トランザクションを複数回再試行するとしてよい。図4では特定のモードおよびやり取りを図示しているが、実施形態はこれに限定されないと理解されたい。
大半のトランザクションが短く、TMがサポートしているキャッシュ空間に収まるメモリにアクセスし、サポートされていない命令は含んでいない場合、これらのトランザクションは、ソフトウェアトランザクションと同期する必要はなく、ハードウェアでそのまま成功し得る。大半の軽量型のトランザクションは第1のハードウェアトランザクションモード(LiteHW)である。このタイプのトランザクションは、リードおよびライトについてアノテートすることなく実行され、コミットしようと試みるタイミングで実行されているソフトウェアトランザクションが無い場合にはコミットに成功し得る。このタイプのトランザクションは単純で高速であるが、ソフトウェアトランザクションとの並列性はほとんど実現されない。
第2のハードウェアトランザクションモードであるBFHWは、ハードウェアトランザクションがリードおよびライトしたロケーションをソフトウェアブルームフィルタを用いて記録し、並列に実行されるソフトウェアトランザクションとのコンフリクトを検出できるようにする。このタイプのトランザクションは、LiteHWトランザクションに比べるとオーバーヘッドが増加するが、並列に実行されているソフトウェアトランザクションが存在する場合でもコミットが可能である。ハードウェアトランザクションは、高速であるが、サポートされていない命令またはオーバーフローのためにベストエフォート型のHTMでは失敗する可能性がある。このため、ソフトウェアフォールバックを実施する。
続いて、第1のソフトウェアトランザクションモード(SpecSW)は、投機的ソフトウェアトランザクションを実行する。投機的ソフトウェアトランザクションでは、トランザクションが、他のソフトウェアトランザクションおよびハードウェアトランザクションとの間でのコンフリクト検出のために、リードおよびライトしたロケーションをブルームフィルタに記録し、コミットフェーズにおける遅延更新のために全てのライトをハッシュテーブルに格納する無効化は、コミット後に実行されて、インフライトのコンフリクトしているトランザクションをアボートして、トランザクション毎にロックを用いて不透明性を保証する。 この第1のソフトウェアトランザクションモードでは、各リード処理を有効化して、ゾンビトランザクション(アボートされるであろうトランザクション)が矛盾する状態に到達しないようにする。
最後に、第2のソフトウェアトランザクションモードであるIrrevocSWが全ての更新を(直接メモリに)実行して、アボートは出来なくなる。この性質のために、任意の所与のタイミングにおいて実行可能なIrrevocSWトランザクションは1つのみである。しかし、複数のSpecSWトランザクションおよびBFHWトランザクションを、一のIrrevocSWトランザクションと並列に実行することができる。
複数のソフトウェアトランザクション間におけるコンフリクト検出は、上述したように、ブルームフィルタを用いて実現される。ソフトウェアトランザクションとハードウェアトランザクションとの間のコンフリクト検出もブルームフィルタを利用するが、エスケープ動作が無いベストエフォート型のHTMを用いるので、一般的にコンフリクトが検出されるとハードウェアトランザクションをアボートすることになる。この動作は、ハードウェアトランザクションの分離性が強いためである。ハードウェアがトラッキングするメモリロケーションはどれもコンフリクトが発生するので、ソフトウェアトランザクションが当該ロケーションにアクセスしてコンフリクトが発生する場合にはハードウェアトランザクションをアボートする。さらに、ハードウェア更新は、ハードウェアトランザクションがコミットするまでは、他のスレッドには可視状態とならない。
実施形態はハードウェアトランザクションとソフトウェアトランザクションとの間のコンフリクト検出を、ハードウェアトランザクションがコミットする後まで延期する。ハードウェアトランザクションはこの後、全てのインフライトのコンフリクトしているソフトウェアトランザクションを無効化(インバリデート)するコミット後フェーズを実行する。ハードウェアトランザクションは既にコミットされているので、ブルームフィルタ情報を他のスレッドと共有しても、当該ハードウェアトランザクションがアボートされることはない。
各トランザクションは、ソフトウェアトランザクションかハードウェアトランザクションかに関わらず、複数のフェーズを経る。各フェーズにおける動作は、トランザクションの種類によって決まる。最初のフェーズは、トランザクションが開始される開始フェーズである。ハードウェアトランザクションは開始ハードウェアトランザクション命令を呼び出すが、ソフトウェアトランザクションは開始アドレスに関する情報を記録して、少なくとも1つのソフトウェアトランザクションが存在する旨を示すフラグ(例えば、sw_existsフラグ)等の指標を利用して他のスレッドに自分の存在を通知する。
実行フェーズでは、リード処理およびライト処理をアノテートし、この動作は実行しているトランザクションの種類によって決まる。LiteHWトランザクションを除く全ての種類のトランザクションで、アクセスしたロケーションをブルームフィルタに記録する。
アボートフェーズでは、ハードウェアによって自動的にハードウェアアボートを取り扱う。ソフトウェアトランザクションの場合、ソフトウェアはトランザクション実行中に記録した情報をクリアして、開始フェーズで格納されたアドレスから再度開始する。
コミットフェーズでは、トランザクションがコミットされれば、コンフリクト検出を実行して、メモリ更新を実行する。実装方法はトランザクションの種類に応じて決まる。
コミット後フェーズにおいて、トランザクションは無効化を実行するとしてよい。このフェーズはトランザクションが既にコミットしておりライトセットロケーションでメモリを更新した後に実行されることに留意されたい。このフェーズにより、コミットしたばかりのトランザクションとコンフリクトしているインフライトのソフトウェアトランザクションが全てアボートされることが保証される。
簡単に先述したが、第1のハードウェアモードであるLiteHWは、追加で発生するソフトウェアオーバーヘッドが無視可能なレベルであり、全てハードウェアで実行されるので、最も単純で最も高速なタイプである。LiteHWトランザクションは、ソフトウェアトランザクションが無い場合にのみコミット可能である。図5は、一実施形態に係るこのようなトランザクションの実行を説明するためのフローチャートである。方法500は、例えば、ユーザレベルハードウェアトランザクション開始命令によって、ハードウェアトランザクションの実行を開始する(ブロック510)。次に、トランザクションボディを実行する(ブロック520)。このクリティカルセクションの実行では、リードまたはライトをどれも記録しない。トランザクションは、コミットしようと試みる場合(ブロック530)、現在実行中のソフトウェアトランザクションが存在するか否かを(例えば、sw_existsフラグを確認することで(ソフトウェアトランザクション実行中であれば、sw_exists!=0))確認する(ひし形540)。並列に実行されているソフトウェアトランザクションが存在する場合、ひし形550に進み、再試行しきい値(M)に到達したか否かを判断する。到達していない場合、ブロック555に進み、再試行カウントをインクリメントする。次に上述したブロック510に戻る。逆に、トランザクションの再試行がしきい値に等しい回数だけ行われていた場合、ブロック558に進み、トランザクションは第2のハードウェアトランザクションモードであるBFHWモードに切り替わる。
ひし形540において実行中のソフトウェアトランザクションが無いと判断される場合(sw_exists=0)、ひし形560でトランザクションがアボートされていないと仮定して、トランザクションはコミットに成功する。LiteHWはハードウェアトランザクションであるので、当該トランザクションのコミットは瞬時に行われるとしてよい(ブロック565)。トランザクションが、実行中の任意の時点でハードウェアコンフリクト検出メカニズムによってアボートされる場合、アボートハンドラは、ハードウェアがセットするアボートステータスを確認して、同じモードでこのトランザクションを再試行するか否か(最大でM回)、または、SpecSW(ブロック570)に切り替わるか否か(例えば、アボートがオーバーフローを理由として発生した場合)、または、IrrevocSW(ブロック580)に切り替わるか否か(例えば、アボートが入出力命令等のサポートされていない命令によって発生した場合)を判断する。
図6は、LiteHWトランザクション501の複数のフェーズをより詳細に説明するための図である。開始フェーズにおいて、トランザクションは開始ハードウェアトランザクション命令を実行する(例えば、txbegin命令)。実行中、OnReadハンドラおよびOnWriteハンドラ(ブルームフィルタをアクセスで更新するライブラリベースのハンドラ等のハンドラ)は空である。OnAbortハンドラは、再試行回数をインクリメントして、当該トランザクションをLiteHWトランザクションとして再試行するか、または、異なるモードに切り替えるか、を再試行回数およびアボート理由に基づいて判断する。最後に、コミットフェーズは、同様にハードウェアで実行されるが、sw_existsフラグを確認して、ハードウェアトランザクション終了命令(例えば、txend命令)を呼び出す。この種類のトランザクションには、コミット後フェーズは無い。
図7は、一実施形態に係るBFHWトランザクションの実行を説明するためのフローチャートである。方法600は、例えば、ユーザレベルハードウェアトランザクション開始命令によって、ハードウェアトランザクションの実行を開始する(ブロック610)。次に、トランザクションボディを実行する(ブロック620)。実行中、トランザクションは、リードまたはライトされたメモリロケーションをリードブルームフィルタおよびライトブルームフィルタに記録する。トランザクションは、コミットしようと試みる場合(ひし形630)、コミットロックが獲得されているか否かを確認する(ひし形640)。当該ロックが解放されている場合、且つ、アボートが発生していないと仮定する場合(ひし形660で判断)、トランザクションは自身のハードウェアトランザクションロックを取得して(ブロック670)、コミットする(ブロック675)。
トランザクションロックが獲得されている場合、ソフトウェアトランザクションが現在コミットしている最中である。ある実施形態において、この場合にすべき最も単純なことはアボートである。これは、ハードウェアトランザクションは、コミット中のソフトウェアトランザクションとの間で、コンフリクトするメモリ更新を持つ場合があるためである。このケースは、後述する図8により詳細に示す。
しかし、ハードウェアトランザクションは、ソフトウェアトランザクションがコミットしている間に、コミット中のソフトウェアトランザクションとの間にコンフリクトが無ければ、コミットすることが可能である。これは、ブルームフィルタを比較することに基づいて判断し得る。このハードウェアトランザクションモードの動作を最適化すると、コミットロックが獲得されていることが分かれば、コミット中のソフトウェアトランザクションのブルームフィルタを確認する。ブルームフィルタがコンフリクトを示している場合、ハードウェアトランザクションはアボートする。コンフリクトを示していない場合、(上述したように自身のトランザクションロックを取得した後)コミットしてよい。このケースは図9に示す。
LiteHWと同様に、OnAbortハンドラは、複数のソフトウェアモード(例えば、ブロック658および690)のうちいずれか1つに上がるか否か、または、再試行回数がしきい値数に到達したか否か(ひし形650)を判断する。到達していなければ、ブロック655で再試行回数をインクリメントして、ブロック610でトランザクションを再度開始する。
ライトされたトランザクショナルメモリは、全てハードウェアでコミットされる。最初に、トランザクションは、コミットロックおよびソフトウェアブルームフィルタ(コミットロックが獲得されている場合)を確認することによって、コミット可能か否かを判断する(ひし形650)。コンフリクトが無い場合(コミットロックが解放されているか、または、ハードウェアトランザクションのブルームフィルタとソフトウェアトランザクションのブルームフィルタとの間に共通部分が無い場合)、ハードウェアトランザクションは、自身のトランザクションロックを取得する(ブロック675において)(図8および図9においてtlockと図示する)。このトランザクションロックは、所有主であるハードウェアトランザクションのみが取得するので、当該トランザクションが取得しようと試みる場合は常に解放されている。しかし、より詳細に後述するが、トランザクションロックは、コミットフェーズを開始するソフトウェアトランザクションとの競合を防ぐために用いられる。
トランザクションがアボートされる場合、当該トランザクションのロックは、投機的ライトセットの一部であるので、自動的に解放されることに留意されたい。さらに、ロックにライトされる値は、ハードウェアトランザクションが変更をメモリにコミットした場合にのみ他のスレッドに見えるようになる。ロックが獲得された後であって、変更がメモリにコミットされる前に、別のスレッドがこのロケーションを確認する場合、ハードウェアトランザクションはアボートされる。これによって競合は発生し得ないよう保証される。
図7を参照しつつ説明を続けると、ブロック675においてコミットした後、コミット後フェーズがこの第2のハードウェアトランザクションモードについてソフトウェアで実行される。コミット後フェーズは、ハードウェアトランザクションが変更をメモリにコミットした後に行われる。図から分かるように、コミット後の処理は、コンフリクトするソフトウェアトランザクションを無効化することを含む(ブロック680)。この時点において、ハードウェアトランザクションは既にコミットされているが、当該ハードウェアトランザクションとコンフリクトするソフトウェアトランザクションは全て確実にアボートされることに留意されたい。これは、ハードウェアトランザクションのブルームフィルタを、全てのインフライトのソフトウェアトランザクションのブルームフィルタに対して確認することによって実現される。コンフリクトが検出されれば、ソフトウェアトランザクションをアボートする。無効化プロセスを終了した後、ハードウェアトランザクションはロックをリセットする。
図8は、開始フェーズ、実行フェーズ、コミットフェーズおよびコミット後フェーズを含む基本的なブルームフィルタベースハードウェアトランザクション601をさらに詳細に説明するための図である。図から分かるように、実行中、リードおよびライトを対応するリードブルームフィルタおよびライトブルームフィルタに追加する。しかし、他の実施形態では、一のブルームフィルタをリードセットおよびライトセットの両方に利用し得ると理解されたい。続いて、コミットロックが獲得されているか否かを判断する。コミットロックが獲得されている場合、この単純実装例では、トランザクションはアボートされる。コミットロックが解放されている場合、トランザクションロックを獲得して、トランザクションライトをコミットする。この後コミット後フェーズにおいて、ブルームフィルタ共通部分演算を実行して、全てのコンフリクトするソフトウェアトランザクションをアボートし、この後でトランザクションロックを解放する。
図9は、開始フェーズ、実行フェーズ、コミットフェーズおよびコミット後フェーズを含む、最適化されたブルームフィルタベースハードウェアトランザクション602さらに詳細に説明するための図である。この場合、コミットロックが獲得されている場合、ブルームフィルタ共通部分演算を用いてコンフリクトを検出して、コンフリクトが存在するか否かを判断し、コンフリクトが存在しない場合にはハードウェアスレッドをコミットし、コンフリクトが存在する場合にはトランザクションをアボートするとしてよい。その他の点については、図8の処理と同様である。
図10は、一実施形態に係る投機的ソフトウェアトランザクションの実行を説明するためのフローチャートである。方法700は、ソフトウェアトランザクションの実行を開始する(ブロック710)。続いて、トランザクションボディを実行する(ブロック720)。図から分かるように、実行中、リードロケーションおよびライトロケーションをブルームフィルタに記録する。コミットの際(ブロック730)、トランザクションはコミットロックを取得して(ブロック740)、コンテンションマネージャを参照し(ブロック760)(ハードウェア、ソフトウェア、ファームウェアまたは他のロジックあるいはこれらの組み合わせで実装され得る)、コミットすべきかアボートすべきかを判断する(コンフリクトするインフライトのソフトウェアトランザクションは継続して実行するとしてよい)。コンテンションマネージャがトランザクションをアボートすると判断する場合、トランザクションはコミットロックを解放して、ひし形790で決定されるように再試行数に応じて、SpecSWトランザクションとして再試行する。このしきい値未満である場合、ブロック792で再試行カウンタをインクリメントして、トランザクションを投機的ソフトウェアトランザクションモードで再度実行する(ブロック710)。しきい値を超えている場合、ブロック795でトランザクションを取り消し不能ソフトウェアトランザクションモードに切り替える。
一方、トランザクションがコミット可能である場合、取り消し不能ロックを取得して(ブロック765)、変更をメモリにコミットして(ブロック770)、インフライトのコンフリクトするソフトウェアトランザクションを無効化し(ブロック775)、ロックを解放する(ブロック780)。
SpecSWトランザクション実行をさらに詳細に図11で示す。図から分かるように、投機的ソフトウェアトランザクション701は全てのフェーズをソフトウェアで実行する。図11の実施形態では、メインボディ実行中、リードを有効化してリードブルームフィルタに追加し、ライトをライトブルームフィルタに追加する。更新後の値をハッシュテーブルまたはその他の一時的ストレージにライトすることによって、遅延更新を実行し得ることに留意されたい。コミットフェーズ中、トランザクションは、コミットが許可されていると仮定して、取り消し不能ロックを取得し、メモリを更新する。コミットが許可されていない場合、トランザクションは、ロックを解放してトランザクションを再度開始する。そして、コミット後フェーズにおいて、トランザクションは無効化を実行して、両ロックを解放する前に、全てのコンフリクトするソフトウェアトランザクションを無効化する。
最後に、SpecSWトランザクションはBFHWのコミット中であっても正しく実行され得ることに留意されたい。BFHWのコミットの準備が整った時点でSpecSWトランザクションが既にコミットプロセスを開始している場合、BFHWトランザクションは、コミットロックが獲得されていることを観察して、コンフリクトが存在するか否か確認するべく自分のブルームフィルタをソフトウェアブルームフィルタに対して確認する。 コンフリクトが無い場合、ハードウェアトランザクションはコミット可能であり、コンフリクトが存在する場合には、BFHWをアボートする。
しかし、SpecSWトランザクションがコミットフェーズを開始する前にBFHWがコミットロックを確認する場合、2通りのシナリオのうちいずれかとなる。BFHWハードウェアトランザクションがコミットする前にコミットロックを変更する(この結果、ハードウェアトランザクションがアボートされ、潜在的なコンフリクトが無くなる)か、または、BFHWハードウェアトランザクションがコミットした後にコミットロックを変更する。投機的ソフトウェアトランザクションは、ハードウェアトランザクションとの間にコンフリクトが有るか否かを確認しないので、コミットされたばかりのハードウェアトランザクションとの間のコンフリクトを見逃す可能性があり、変更をメモリにコミットし始める可能性がある。このシナリオを回避するべく、全てのSpecSWトランザクションは、コミットロックを取得した後に全てのハードウェアトランザクションのロックを確認して、ハードウェアトランザクションのロックが解放されるまで待機する。トランザクションロックが解放された場合にSpecSWトランザクションが依然として有効である場合、コミットされたハードウェアトランザクションのいずれとの間にもコンフリクトが無かったことになる。
ここで図12を参照すると、取り消し不能ソフトウェアトランザクションであるIrrevocSWの実行を説明するためのフローチャートが図示されている。図12から分かるように、方法800はトランザクションの開始フェーズで開始される(ブロック810)。次に、トランザクションは取り消し不能ロックおよびコミットロックの両方を取得する(ブロック820)。この後、主要部分であるトランザクションボディをブロック830で実行するとしてよい。取り消し不能ソフトウェアトランザクションについて、全ての更新を(直接メモリに対して)実現するので、トランザクションは、シリアル化を保証するべく、実行を開始するとすぐに取り消し不能ロックおよびコミットロックの両方を取得することに留意されたい。次に、トランザクションをコミットする(ブロック840)。この後、例えば、ブルームフィルタセットの共通部分に基づき、コンフリクトするソフトウェアトランザクションを無効化する(ブロック850)。最後に、両方のロックを解放する(ブロック860)。
図13は、一実施形態に係る、取り消し不能ソフトウェアトランザクション801をさらに詳細に説明するための図である。実行開始時において、両方のロックを取得してソフトウェアフラグをセットすることに留意されたい。メインボディにおいて、直接更新を利用するが、リードおよびライトを対応するブルームフィルタに追加して、コンフリクトするソフトウェアトランザクションについて後で無効化できるようにする。ある実施形態において、取り消し不能トランザクションはアボートできないので、コミットフェーズは実質的にノーオペレーション(NOP)である。コミット後フェーズは投機的ソフトウェアトランザクションのコミット後フェーズと同様で、現在のトランザクションは既にコミットされているので、インフライトのコンフリクトするソフトウェアトランザクションを無効化する。
ある実施形態において、投機的ソフトウェアトランザクションがコンテンションマネージャを用いて、コミットフェーズに至った場合にコミット可能であるか否かを判断する。コンテンションマネージャは、コミット中のトランザクションがコミットを許可されると全てのインフライトのトランザクションをアボートすると見なし、さまざまな要因に基づいて、アボートすべきどの一または複数のトランザクションについて前進を許可するか決定する。ある実施形態において、この決定は、さまざまな要因のうち、優先度、コミット中のトランザクションおよびコンフリクトしているトランザクションのリードセットサイズおよびライトセットサイズ、および、それぞれのスレッドのトランザクションの進み具合(例えば、それまでのコミット数)に基づいて行われるとしてよい。
コミット後に無効化を実行することによって、新しいトランザクションはコミットフェーズ中に開始することが保証され、無効化プロセスが見逃すことはない。トランザクションの開始が遅すぎたことによって無効化プロセスがトランザクションを見逃すことがあれば、当該トランザクションの開始は、コミット中のトランザクションの無効化プロセスの後であったことになる。このため、当該トランザクションはコミット中のトランザクションがライトをコミットした後に開始された。これによって、新たに開始されたトランザクションの全てのリードは、コミット中のトランザクションの後にシリアル化され、一貫性を持つ。以下に示す表1は、一実施形態に係る無効化プロセスを疑似コードで表したものである。
Figure 0006304845
リードそれぞれについて、当該リードを実行するトランザクションのためのライトセットの一部でない場合に、有効化を実行する。リードがライトセットの一部である場合、トランザクション用の更新後の値を格納しているハッシュテーブルから値が返され、有効化を実行する必要が無くなる。
ある実施形態において、有効化は以下のように実行されるとしてよい。最初に、スレッドは、新しいリードロケーションをブルームフィルタに挿入して、当該ロケーションをリードする。この順序によって、コミット中のトランザクションの無効化プロセスが潜在的なコンフリクトを見逃すことが無くなる。リードロケーションの値は、リードされた後、別のトランザクションがコミットフェーズ中でメモリロケーションを更新中である可能性があるので、戻すのはまだ安全でない。現在のリードが更新直後のロケーションに対するものである場合、このリードを戻すとプログラム動作に誤りが生じる可能性がある。これは、現在のトランザクションの全ての他のリードはコミット中のトランザクションがメモリを更新する前からのものであるためである。
この状況になることを回避するべく、まだライトされていないリード全てについて有効化コードを実行するとしてよい。このコードは、取り消し不能ロックが獲得されたか否かを確認するためのものであり、獲得されていれば、ソフトウェアトランザクションのブルームフィルタ(取り消し不能ロックの識別子で指定)をリードしてコンフリクトが存在するか否かを判断する。その間にロックが変更されれば、コンフリクトは有効化コードに気づかれない可能性がある。しかし、有効化終了時に、トランザクションは他のソフトウェアトランザクションによって無効化されたか否かを確認する。ロックがその間に解放されていれば、コミット中のトランザクションは無効化を終了していたはずであることを意味する。有効化が進行し、トランザクションがコミット中のトランザクションによって無効化されなかった場合、リードは安全である。
ここで表2を参照すると、一実施形態に係る有効化プロセスの疑似コードが図示されている。
Figure 0006304845
取り消し不能トランザクションは、実行開始と共に、コミットロックおよび取り消し不能ロックの両方を取得する。投機的トランザクションは最初に、コミットロックを取得して、コミット可能か否かに関してコンテンションマネージャを参照する。コンテンションマネージャがトランザクションのコミットを許可する場合、更新をメモリにライトする直前に取り消し不能ロックを取得する。
コミット中のトランザクションは、取り消し不能ロックを自身のコミットフェーズの開始時から取得して、コミットロックを不要としてもよい。しかし、投機的トランザクションの有効化コードは、取り消し不能ロックが取得済みであることに基づいている。コミットロックが存在せず、取り消し不能ロックが、コンテンションマネージャを参照する前にコミットフェーズの開始時点で取得された場合、以下の状況になる可能性がある。リードを実行して有効化コードを実行するSpecSWトランザクションを考えられたい。当該トランザクションのリードが、コミット中のソフトウェアトランザクションとコンフリクトすることに気付くとする。このため、再度開始すると判断する。コミット中のトランザクションは、コンテンションマネージャを参照するが、(例えば、インフライトの高優先度のトランザクションがあるため)コミットは許可されない。このため、コミット中のトランザクションもアボートされる。しかし、他方のトランザクションは既にアボートされている。さらに、競合が発生する可能性があるので、コンテンションマネージャは、有効化中にアボートすると決断したばかりのトランザクションに基づいて、アボートを決断する。このため、2つのトランザクションが互いにアボートして、どちらも前進しない。
コミットロックを用いてこの状況を回避するとしてよい。このため、コミット中のトランザクションは、コミットロックを取得し、コミットの許可が与えられた後で初めて、当該コミットロックを取り消し不能ロックにアップグレードする。有効化コードがトランザクションをアボートする唯一の理由は、取り消し不能ロックを持つ別のトランザクションとのコンフリクトが存在することである。このため、あるトランザクションが有効化によってアボートされる唯一の理由は、コミットすることが確実なトランザクションとのコンフリクトが存在することである。
ハードウェアを用いて、複数の並列に実行されているハードウェアトランザクションに関して正確性を保証する。ハードウェアトランザクションは分離性が強く、メモリへの変更が他のスレッドにアトミックに見えるようになるのは、トランザクションがコミットした場合に限定される。さらに、コンフリクト検出をハードウェアで実装するので、コンフリクトの際には複数のトランザクションのうち1つがアボートされる。このため、複数のLiteHWトランザクションと複数のBFHWトランザクションとの間で正しいやり取りが行われるように保証させるためにさらにソフトウェアコンポーネントを設けることはない。
並列に行われている複数のソフトウェアトランザクションの間のコンフリクト検出は、無効化方法を用いて保証される。全てのコミット中のトランザクションは、他のインフライトのソフトウェアトランザクションとの間のコンフリクトを確認し、コンフリクトが有ればそれらのトランザクションをアボートする。コミット中のトランザクションはコミットロックを保持するので、無効化プロセス中にはソフトウェアトランザクションはコミット出来ない。取り消し不能トランザクションは、アクティブになるとすぐにコミットロックを取得するので、他のソフトウェアトランザクションが取り消し不能になることは出来ず、実行中にコミットすることも出来ない。取り消し不能トランザクションは、コミットすると、さらにインフライトのコンフリクトしているトランザクションを無効化して、シリアル化可能な正確性が損なわれないようにする。
ハードウェア−ソフトウェア間の正確性に関して、ある実施形態によると、LiteHWトランザクションはソフトウェアトランザクションと同時に実行可能であるが、ソフトウェアトランザクションが現在実行中であればコミットできない。これは、LiteHWトランザクションがアクセスしたメモリロケーションの記録を取らないためである。このため、LiteHWトランザクションとソフトウェアトランザクションとの間ではコンフリクト検出を実行できない。
これとは対照的に、BFHWトランザクションは、アクセスするメモリロケーションをトラッキングするので、コンフリクト検出を実行することができる。さらに、BFHWトランザクションは、ソフトウェアトランザクションの実行中であっても、コミットできる。コミット中のソフトウェアトランザクションがBFHWトランザクションとコンフリクトする場合、後者が自動的にハードウェアによってアボートされる。コミット中のBFHWトランザクションがインフライトのソフトウェアトランザクションとコンフリクトしている場合、BFHWのコミット後フェーズ(無効化フェーズ)においてソフトウェアトランザクションをアボートする。さらに、ハードウェアトランザクションのブルームフィルタとソフトウェアトランザクションのブルームフィルタとをハードウェアトランザクションの終了時に比較することで十分である。このように、ハードウェアトランザクションのリードおよびライト毎にコンフリクト検出を行うことを回避できる。
実施形態によればさらに、メモリの整合性も実現できる。並列処理されている複数のハードウェアトランザクションについて、ハードウェアトランザクションがコミットするまで更新は見えないので、ハードウェアによって自動的に不透明性が維持される。これによって、整合性が保証される。
取り消し不能トランザクションが直接更新を用いて実行されている間、または、投機的トランザクションがライトバックを実行している間にハードウェアトランザクションがメモリロケーションをリードすることによって、非整合状態になり得る。しかし、ハードウェアトランザクションで発生する障害およびループによって、他のスレッドに目立つ影響を与えることなく、トランザクションをアボートさせて再度開始させる。
上述したように、新たにリードが実行される度に有効化コードを用いてソフトウェアトランザクション間では不透明性を保証する。このようにして、ソフトウェアトランザクションは、別のソフトウェアトランザクションによって発生した更新のために非整合状態にはなることはない。
ソフトウェアトランザクションは、コミットされたばかりのハードウェアトランザクションによって修正されたメモリロケーションをリードすることによって、非整合状態になる可能性がある。ある実施形態において、当該ソフトウェアトランザクションは、コミットが許可されず、ハードウェアトランザクションのコミット後フェーズで無効化される。しかし、当該ソフトウェアトランザクションは、非整合状態のデータをリードした結果、無効化されたことに気付く前に不正状態になる場合がある。
この状況を回避するべく、ある実施形態において、ソフトウェアサンドボックスをSpecSWトランザクションに提供するとしてよい。これに代えて、ハードウェアコミット後カウンタを用いてソフトウェアトランザクションについて不透明性を実現するとしてよい。この場合、当該カウンタは、BFHWモードでコミットしたばかりで現在はコミット後フェーズのハードウェアトランザクションの数をカウントする。BFHWトランザクションは、ハードウェアトランザクションをコミットする前にストア処理を用いて当該カウンタをインクリメントする。アトミック性が損なわれると、ハードウェアトランザクションはアボートされ、変更の記録は無くなる。コミット後フェーズが完了した後、BFHWトランザクションは、例えば、フェッチ置換命令を用いてコミット後カウンタをデクリメントする。このカウンタを用いることで、BFHWトランザクションが存在する場合にSpecSWトランザクションについて不透明性を実現することができる。これに続いて、SpecSWトランザクションは、このカウンタをリードして、ゼロに到達するまで待機した後に新しい値をリードセットに追加するとしてよい。これによって、SpecSWトランザクションがリードした全ての新しい値が、ハードウェアトランザクションのコミット後フェーズ以外でリードされるので、整合することが保証される(それ以外の場合、SpecSWトランザクションはBFHWトランザクションのコミット後フェーズ中は無効と記される)。さらに、BFHWトランザクションは、このコミット後カウンタを用いて、SpecSWトランザクションの整合性を保証し、さらに、SpecSWトランザクションとの間においてコミットフェーズ中の相互排除を保証するとしてよい(ある実施形態において、トランザクション毎のロックを使用しない)。
コミットロックがソフトウェアトランザクションのコミットフェーズおよびコミット後フェーズをシリアル化することに留意されたい。しかし、ハードウェアトランザクションは、並列にコミット中のソフトウェアトランザクションおよびハードウェアトランザクションについて、シリアル化されない。このため、ハードウェアトランザクションは、コミットして、同時に無効化を実行することができ、システムのスケーラビリティおよび実用性が改善される。
ここで図14を参照すると、別の実施形態に係る装置を示すブロック図である。図14に示すように、装置100´は、図1に基づき上述した装置100と同様の回路、コンポーネントおよびロジックを備える。実際には、多くのシステム実装例において、ハイブリッドトランザクショナルメモリシステムは、単一グローバルロックを実装する実施形態に係る場合(例えば、図2に基づき上述)でも、複数のロックおよび複数のソフトウェアモードトランザクションモードを実装するシステム(例えば、図4に基づき上述)であっても、同一ハードウェアで実行するとしてよい。
説明を簡略化するべく、図14の実施形態において図1と同一のコンポーネント、回路およびロジックについては説明を省略する。これに代えて、以下の説明では、ハイブリッドトランザクショナルメモリのトランザクションを複数のハードウェアトランザクションモードおよび複数のソフトウェアトランザクションモードで実行できるようにする装置100´の相違点に重点を置く。図から分かるように、単一グローバルロックの代わりに、コミットロック112および取り消し不能ロック113を設けて、トランザクションモードに応じて、トランザクション内の複数の異なるタイミングで、複数の異なるソフトウェアトランザクションがこれらのロックを取得できるようにする(言うまでもなく、他の実施形態では追加のロックまたは異なるロックが存在し得ると理解されたい)。これに加えて、複数の再試行カウンタ118を提供するとしてよい。各再試行カウンタには所与のトランザクションモード再試行カウントが対応付けられている。そして同様に、複数の再試行しきい値120をさらに設ける。
図14をさらに参照しつつ説明を続けると、トランザクション管理モジュール106はさらに、上述したように、コミット後無効化を実行するよう構成されている無効化ロジック125を有する。概して、装置100´およびシステム140´の残りの部分は図1と同一である。図4から図13を参照しつつ説明したようなハイブリッドトランザクショナルメモリシステムで実行される追加の機能および処理を考えて、さまざまなロジックコンポーネントの実装には幾つか相違点があることに留意されたい。さらに、図14では上位概念で図示しているが、多くの変更例および代替例が可能であると理解されたい。
以下に記載する例はさらなる実施形態に関する。
例1において、装置は、プロセッサと、トランザクショナルメモリシステムにおいて、第1のソフトウェアトランザクションモードの少なくとも1つの第1のソフトウェアトランザクション、および、第2のソフトウェアトランザクションモードの第2のソフトウェアトランザクション、および、第1のハードウェアトランザクションモードの少なくとも1つのハードウェアトランザクション、および、第2のハードウェアトランザクションモードの少なくとも1つの第2のハードウェアトランザクションの並列実行を可能とする実行ロジックと、少なくとも1つのソフトウェアトランザクションが第1のソフトウェアトランザクションモードまたは第2のソフトウェアトランザクションモードで実行中である旨を示すべくフラグをアクティブ化するトラッキングロジックと、第2のハードウェアトランザクションモードの第1のハードウェアトランザクションの完了時に、第2のハードウェアトランザクションモードの第1のハードウェアトランザクションのフィルタセットが、実行中の少なくとも1つのソフトウェアトランザクションのフィルタセットとコンフリクトしているか否かを判断する共通部分ロジックと、コンフリクトが無い場合に第1のハードウェアトランザクションをコミットし、コンフリクトが有る場合に第1のハードウェアトランザクションをアボートする最終決定ロジックとを備える。尚、一部の実装例において、実行ロジック、トラッキングロジック、共通部分ロジックおよび最終決定ロジックのうち1または複数は、プロセッサ内に実装され得ることに留意されたい。また、上述したプロセッサはさまざまな手段を用いて実装可能であることにも留意されたい。一例を挙げると、プロセッサは、ユーザ機器タッチ起動デバイスに組み込まれているシステムオンチップ(SoC)を含む。別の例を挙げると、システムは、ディスプレイおよびメモリを備え、本明細書に記載した例のうち1または複数の例に係るプロセッサを含む。
例2において、第2のハードウェアトランザクションモードにおいて、第1のハードウェアトランザクションは任意で、第1のハードウェアトランザクションのメモリアクセス毎に第1のハードウェアトランザクションのフィルタセットを更新する。
例3において、第1のソフトウェアトランザクションモードにおいて、第1のソフトウェアトランザクションは任意で、第1のソフトウェアトランザクションの完了時に、第1のロックおよび第2のロックを取得し、トランザクショナルメモリシステムのトランザクショナルメモリを、ハッシュテーブルに格納されているライトデータで更新する。
例4において、第1のソフトウェアトランザクションモードにおいて、第1のソフトウェアトランザクションのコミット後に、第1のソフトウェアトランザクションは任意で、第1のソフトウェアトランザクションモードの別のソフトウェアトランザクションを無効化する。
例5において、第2のハードウェアトランザクションモードにおいて、第2のハードウェアトランザクションは任意で、第2のハードウェアトランザクションのコミットの前に、コミットロックおよびトランザクションロックを取得する。
例6において、例4の第1のソフトウェアトランザクションは任意で、第1のソフトウェアトランザクションのフィルタセットと別のソフトウェアトランザクションのフィルタセットとの間に共通部分が存在する場合、別のソフトウェアトランザクションを無効化する。
例7において、例3の第1のソフトウェアトランザクションモードにおいて、第1のソフトウェアトランザクションは任意で、実行中にリードデータを有効化する。
例8において、上述した例のうち任意の1つの第2のソフトウェアトランザクションモードにおいて、第2のソフトウェアトランザクションの開始時に、第2のソフトウェアトランザクションは、第1のロックおよび第2のロックを取得して、第2のソフトウェアトランザクションモードにおける第2のソフトウェアトランザクションの実行中に、第2のソフトウェアトランザクションは、トランザクショナルメモリシステムのトランザクショナルメモリを直接更新する。
例9において、方法は、トランザクショナルメモリシステムにおいてプロセッサによって、第1のスレッドのソフトウェアトランザクションおよび第2のスレッドのハードウェアトランザクションを並列に実行する段階と、ソフトウェアトランザクションの実行を示すべくグローバルロックをアクティブ化する段階と、ハードウェアトランザクションの完了時に、グローバルロックの状態を決定し、グローバルロックがアクティブの場合には第1のスレッドのフィルタセットと第2のスレッドのフィルタセットとの間に共通部分が存在するかを判断し、そうでない場合にはハードウェアトランザクションをコミットする段階とを備える。
例10において、例9の方法は任意で、ソフトウェアトランザクションをコミットする段階と、ソフトウェアトランザクションの完了時にグローバルロックを非アクティブ化する段階とをさらに備える。
例11において、例9または10の方法は任意で、ハードウェアトランザクション完了時にグローバルロックが非アクティブである場合にはフィルタセットの間に共通部分が存在するか否かを判断することなく、ハードウェアトランザクションをコミットする段階をさらに備える。
例12において、例9−11のうち1つの方法は任意で、ハードウェアトランザクションによって、トランザクショナルメモリシステムのトランザクショナルメモリへのアクセスのアドレスを、第1のスレッドのフィルタセットに挿入する段階と、1または複数のハッシュ値でアクセスのアドレスをハッシュすることに基づいて第1のスレッドのフィルタセットの1または複数のフィールドを更新する段階とをさらに備える。
例13において、例9−12のうち1つの方法は任意で、第1のスレッドのフィルタセットを第1のスレッドのライトセットに格納する段階をさらに備え、フィルタセットはブルームフィルタを含む。
例14において、例13の方法は任意で、グローバルロックを第1のスレッドのフィルタセットに追加する段階と、フィルタセットの間に共通部分が存在するか否かを判断することに基づいてグローバルロックの状態を判断する段階とをさらに備える。
例15において、例9−14のうち任意の1つの方法は任意で、ソフトウェアトランザクションにおいて第1のサイズから第2のサイズへとハッシュテーブルを並列に再ハッシュする段階と、ハードウェアトランザクションにおいてハッシュテーブルにアクセスし、並列に再ハッシュする段階の間にハードウェアトランザクションをコミット可能とする段階とをさらに備える。
別の例に係る、命令を含むコンピュータ可読媒体は、上述の例のいずれかの方法を実行するためのものである。さらに別の例に係る装置は、上述の例のうち任意の1つの方法を実行する手段を備える。
例16において、少なくとも1つのコンピュータ可読媒体は、実行されるとシステムに、トランザクショナルメモリシステムの第2のハードウェアトランザクションモードで第2のハードウェアトランザクションを実行させ、第2のハードウェアトランザクションの完了時に第2のハードウェアトランザクションをコミットさせ、 第2のハードウェアトランザクションのコミット後に、第2のハードウェアトランザクションと、第2のハードウェアトランザクションと並列に実行している少なくとも1つのソフトウェアトランザクションとの間にコンフリクトが存在する場合には、少なくとも1つのソフトウェアトランザクションを無効化させることが可能になる複数の命令を備える。
例17において、例16の少なくとも1つのコンピュータ可読媒体は任意でさらに、実行されるとシステムに、第2のハードウェアトランザクションのコミット前に、コミットロックが取得されているかを判断させ、その場合、第2のハードウェアトランザクションとコミットロックを取得した第1のソフトウェアトランザクションとの間にコンフリクトが存在するか否かを判断させることが可能になる複数の命令を備える。
例18において、例17の少なくとも1つのコンピュータ可読媒体は任意でさらに、実行されるとシステムに、第2のハードウェアトランザクションと第1のソフトウェアトランザクションとの間にコンフリクトが存在する場合、第2のハードウェアトランザクションをアボートさせることが可能になる複数の命令を備え、第2のハードウェアトランザクションのフィルタセットと、第1のソフトウェアトランザクションのフィルタセットとの間に共通部分が存在する場合にコンフリクトが存在すると判断される。
例19において、例17の少なくとも1つのコンピュータ可読媒体は任意でさらに、実行されるとシステムに、第1のソフトウェアトランザクションがコミットロックを取得した後、1または複数のハードウェアトランザクションによって1または複数のトランザクションロックが取得されたかを判断させ、その場合には、1または複数のトランザクションロックが解放されるまで第1のソフトウェアトランザクションのコミットを遅延させることが可能になる複数の命令を備える。
例20において、例17の少なくとも1つのコンピュータ可読媒体は任意でさらに、実行されるとシステムに、トランザクショナルメモリシステムの第1のハードウェアトランザクションモードにおいて第1のハードウェアトランザクションを実行させ、第1のハードウェアトランザクションの完了時に、少なくとも1つのソフトウェアトランザクションが並列に実行されているかを判断させ、その場合、第1のハードウェアトランザクションをアボートさせ、そうでない場合、第1のハードウェアトランザクションをコミットさせることが可能になる複数の命令を備える。
例21において、例17の少なくとも1つのコンピュータ可読媒体は任意でさらに、実行されるとシステムに、第1のソフトウェアトランザクションの実行中に第1のソフトウェアトランザクションによるトランザクショナルメモリシステムのトランザクショナルメモリに対するリード処理を有効化させ、リード処理が有効化される場合、リード処理のロケーションを第1のソフトウェアトランザクションのフィルタセットに追加させることが可能になる複数の命令を備える。
例22において、例17の少なくとも1つのコンピュータ可読媒体は任意でさらに、実行されるとシステムに、第2のソフトウェアトランザクションモードで第2のソフトウェアトランザクションを実行させ、これは、第2のソフトウェアトランザクションの実行開始時において第1のロックおよびコミットロックを取得することと、第2のソフトウェアトランザクションの実行中に1または複数のメモリロケーションを直接更新することとを含み、さらに第2のソフトウェアトランザクションの完了時に、第2のソフトウェアトランザクションをコミットさせ、第1のソフトウェアトランザクションモードの1または複数の並列に実行されているソフトウェアトランザクションを無効化した後、第1のロックおよびコミットロックを解放させることが可能になる複数の命令を備える。
例23において、システムは、少なくとも1つのハードウェアトランザクションおよび少なくとも1つのソフトウェアトランザクションを並列に実行するハイブリッドトランザクショナルメモリロジックを有するプロセッサを備える。ハイブリッドトランザクショナルメモリロジックは、第1のハードウェアトランザクションモードにおいて第1のトランザクションを、第1のトランザクションがコミットされるまで、または、第1のトランザクションの再試行回数が第1のハードウェアトランザクションモードにおいて第1の回数しきい値になるまで実行した後、第1のトランザクションがコミットされない場合、第1のトランザクションを第1のソフトウェアトランザクションモードで実行するとしてよい。ハイブリッドトランザクショナルメモリロジックは、第1のハードウェアモードで実行される第1のトランザクションに対応付けられているフィルタセットと、第1のソフトウェアトランザクションモードで実行されている第2のトランザクションに対応付けられているフィルタセットとの間にコンフリクトが存在するか否かを判断する共通部分ロジックを含むとしてよく、コンフリクトに応じて、ハイブリッドトランザクショナルメモリロジックは、第1のハードウェアトランザクションモードにおける第1のトランザクションがコミットしないようにする。当該システムはさらに、プロセッサに結合されているトランザクショナルメモリを備える。
例24において、ハイブリッドトランザクショナルメモリロジックは任意で、第1のトランザクションがコミットされるまで、または、第1のソフトウェアトランザクションモードにおいて第1のトランザクションの再試行回数が第2の回数しきい値になるまで、第1のソフトウェアトランザクションモードで第1のトランザクションを実行し、第2の回数しきい値に到達した後は、第1のトランザクションがトランザクショナルメモリを直接更新する第2のソフトウェアトランザクションモードで第1のトランザクションを実行するとしてよい。
例25において、ハイブリッドトランザクショナルメモリロジックは任意で、第1のハードウェアトランザクションモードで実行する前に第2のハードウェアトランザクションモードで第1のトランザクションを実行し、ハイブリッドトランザクショナルメモリロジックは、第1のハードウェアトランザクションモードで第1のトランザクションを実行する前に、第3の回数しきい値まで第2のハードウェアトランザクションモードで第1のトランザクションを実行するとしてよい。
例26において、ハイブリッドトランザクショナルメモリロジックは任意で、第1のトランザクションに、第1のソフトウェアトランザクションモードで実行中にリードデータを有効化させ、リードデータに対応付けられているアドレスに基づいて第1のソフトウェアトランザクションモードで実行されている第1のトランザクションに対応付けられているフィルタセットを更新させ、ライトデータでハッシュテーブルを更新させるとしてよい。
例27において、例26のハイブリッドトランザクショナルメモリロジックは任意で、第2のソフトウェアトランザクションモードにおいて第2のトランザクションに、第2のトランザクションの開始時に第1のロックおよび第2のロックを取得させ、その後に第2のトランザクションの実行中にトランザクショナルメモリを直接更新させ、第1のソフトウェアトランザクションモードにおいて第1のトランザクションに、第1のトランザクションのコミット時に第1のロックおよび第2のロックを取得させ、その後にハッシュテーブルからのライトデータでトランザクショナルメモリを更新させ、第1のソフトウェアトランザクションモードで並列に実行されている少なくとも1つの他のソフトウェアトランザクションを無効化させるとしてよい。
例28において、複数のトランザクショナルメモリトランザクションを実行するためのシステムは、トランザクショナルメモリシステムの第2のハードウェアトランザクションモードで第2のハードウェアトランザクションを実行する手段と、第2のハードウェアトランザクションの完了時に第2のハードウェアトランザクションをコミットする手段と、第2のハードウェアトランザクションのコミット後に、第2のハードウェアトランザクションと、第2のハードウェアトランザクションと並列に実行している少なくとも1つのソフトウェアトランザクションとの間にコンフリクトが存在する場合には、少なくとも1つのソフトウェアトランザクションを無効化する手段とを備える。
例29において、例28のシステムは任意でさらに、第2のハードウェアトランザクションのコミット前に、コミットロックが取得されているかを判断し、その場合、第2のハードウェアトランザクションとコミットロックを取得した第1のソフトウェアトランザクションとの間にコンフリクトが存在するか否かを判断する手段を備える。
例30において、例28のシステムは任意でさらに、第2のハードウェアトランザクションと第1のソフトウェアトランザクションとの間にコンフリクトが存在する場合、第2のハードウェアトランザクションをアボートする手段を備え、第2のハードウェアトランザクションのフィルタセットと、第1のソフトウェアトランザクションのフィルタセットとの間に共通部分が存在する場合にコンフリクトが存在すると判断される。
例31において、例28のシステムは任意でさらに、第1のソフトウェアトランザクションがコミットロックを取得した後、1または複数のハードウェアトランザクションによって1または複数のトランザクションロックが取得されたかを判断し、その場合には、1または複数のトランザクションロックが解放されるまで第1のソフトウェアトランザクションのコミットを遅延させる手段を備える。
例32において、例28のシステムは任意でさらに、トランザクショナルメモリシステムの第1のハードウェアトランザクションモードにおいて第1のハードウェアトランザクションを実行する手段と、第1のハードウェアトランザクションの完了時に、少なくとも1つのソフトウェアトランザクションが並列に実行されているかを判断する手段と、その場合、第1のハードウェアトランザクションをアボートし、そうでない場合、第1のハードウェアトランザクションをコミットする手段とを備える。
例33において、例28のシステムは任意でさらに、第1のソフトウェアトランザクションの実行中に第1のソフトウェアトランザクションによるトランザクショナルメモリシステムのトランザクショナルメモリに対するリード処理を有効化する手段と、リード処理が有効化される場合、リード処理のロケーションを第1のソフトウェアトランザクションのフィルタセットに追加する手段とを備える。
例34において、例28のシステムは任意でさらに、第2のソフトウェアトランザクションモードで第2のソフトウェアトランザクションを実行する手段であって、第2のソフトウェアトランザクションの実行開始時において第1のロックおよびコミットロックを取得する手段、ならびに、第2のソフトウェアトランザクションの実行中に1または複数のメモリロケーションを直接更新する手段を有する手段と、第2のソフトウェアトランザクションの完了時に、第2のソフトウェアトランザクションをコミットし、第1のソフトウェアトランザクションモードの1または複数の並列に実行されているソフトウェアトランザクションを無効化した後、第1のロックおよびコミットロックを解放する手段とを備える。
上述した例についてはさまざまに組み合わせることが可能であると理解されたい。
実施形態は、多くの異なる種類のシステムで利用するとしてよい。例えば、一実施形態では、通信デバイスは本明細書で説明したさまざまな方法および技術を実行するよう構成され得る。言うまでもなく、本発明の範囲は通信デバイスに限定されず、他の実施形態は、これに代えて、命令を処理する他の種類の装置、または、コンピューティングデバイスで実行されることに応じて当該デバイスに本明細書で説明した方法および技術のうち1または複数を実行させる命令を含む1または複数の機械可読媒体に関するとしてよい。
実施形態は、コードで実装されるとしてよく、命令を格納している非一時的記憶媒体に格納されるとしてよい。当該記憶媒体は、上記の命令を実行させるようシステムをプログラミングするために用いるとしてよい。記憶媒体は、これらに限定されないが、フロッピー(登録商標)ディスク、光ディスク、ソリッドステートドライブ(SSD)、コンパクトディスクリードオンリーメモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RW)および光磁気ディスク等の任意の種類のディスク、リードオンリーメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)等のランダムアクセスメモリ(RAM)、消去可能プログラミング可能リードオンリーメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラミング可能リードオンリーメモリ(EEPROM)等の半導体デバイス、磁気カードまたは光カード、または、電子命令を格納するのに適した任意のその他の種類の媒体を含むとしてよい。
本発明は限られた数の実施形態について説明してきたが、当業者であれば、数多くの変形および変更に想到するであろう。添付した請求項はそのような変形および変更も全て本発明の真の意図および範囲に含むことを意図している。

Claims (24)

  1. プロセッサと、
    トランザクショナルメモリシステムにおいて、第1のソフトウェアトランザクションモードの少なくとも1つの第1のソフトウェアトランザクション、および、第2のソフトウェアトランザクションモードの第2のソフトウェアトランザクション、ならびに、第1のハードウェアトランザクションモードの少なくとも1つのハードウェアトランザクション、および、第2のハードウェアトランザクションモードの少なくとも1つの第2のハードウェアトランザクションの並列実行を可能とする実行ロジックと、
    少なくとも1つのソフトウェアトランザクションが前記第1のソフトウェアトランザクションモードまたは前記第2のソフトウェアトランザクションモードで実行中である旨を示すべくフラグをアクティブ化するトラッキングロジックと、
    前記第2のハードウェアトランザクションモードの第1のハードウェアトランザクションの完了時に、前記フラグがアクティブ化されており、第1のロックが前記少なくとも1つのソフトウェアトランザクションにより取得されている場合に、前記第2のハードウェアトランザクションモードの前記第1のハードウェアトランザクションのフィルタセットが、実行中の前記少なくとも1つのソフトウェアトランザクションのフィルタセットとコンフリクトしているか否かを判断する共通部分ロジックと、
    コンフリクトが無い場合に前記第1のハードウェアトランザクションをコミットし、コンフリクトが有る場合に前記第1のハードウェアトランザクションをアボートする最終決定ロジックと
    を備え
    前記最終決定ロジックは、前記第1のハードウェアトランザクションの完了時に前記第1のロックが前記少なくとも1つのソフトウェアトランザクションにより取得されていない場合には、前記共通部分ロジックによる前記判断を行うことなく、前記第1のハードウェアトランザクションをコミットする
    装置。
  2. 前記第2のハードウェアトランザクションモードにおいて、前記第1のハードウェアトランザクションは、前記第1のハードウェアトランザクションのメモリアクセス毎に前記第1のハードウェアトランザクションの前記フィルタセットを更新する
    請求項1に記載の装置。
  3. 前記第1のソフトウェアトランザクションモードにおいて、第1のソフトウェアトランザクションは、前記第1のソフトウェアトランザクションの完了時に、前記第1のロックおよび第2のロックを取得し、前記トランザクショナルメモリシステムのモリを、ハッシュテーブルに格納されているライトデータで更新する
    請求項1または2に記載の装置。
  4. 前記第1のソフトウェアトランザクションモードにおいて、前記第1のソフトウェアトランザクションのコミット後に、前記第1のソフトウェアトランザクションは前記第1のソフトウェアトランザクションモードの別のソフトウェアトランザクションを無効化する
    請求項3に記載の装置。
  5. 前記第2のハードウェアトランザクションモードにおいて、第2のハードウェアトランザクションは、前記第2のハードウェアトランザクションのコミットの前に、コミットロックおよびトランザクションロックを取得する
    請求項4に記載の装置。
  6. 前記第1のソフトウェアトランザクションは、前記第1のソフトウェアトランザクションのフィルタセットと前記別のソフトウェアトランザクションのフィルタセットとの間に共通部分が存在する場合、前記別のソフトウェアトランザクションを無効化する
    請求項4または5に記載の装置。
  7. トランザクショナルメモリシステムにおけるプロセッサによって、第1のスレッドのソフトウェアトランザクションおよび第2のスレッドのハードウェアトランザクションを並列に実行する段階と、
    前記ソフトウェアトランザクションの実行を示すべくグローバルロックをアクティブ化する段階と、
    前記ハードウェアトランザクションの完了時に、前記グローバルロックの状態を決定し、前記グローバルロックがアクティブの場合には前記第1のスレッドのフィルタセットと前記第2のスレッドのフィルタセットとの間に共通部分が存在するか否かを判断し、前記第1のスレッドのフィルタセットと前記第2のスレッドのフィルタセットとの間に共通部分が存在しない場合には前記ハードウェアトランザクションをコミットする段階と
    前記ハードウェアトランザクションの完了時に前記グローバルロックが非アクティブである場合には前記第1のスレッドの前記フィルタセットと前記第2のスレッドの前記フィルタセットとの間に共通部分が存在するか否かを判断することなく、前記ハードウェアトランザクションをコミットする段階と
    を備える方法。
  8. トランザクショナルメモリシステムにおけるプロセッサによって、第1のスレッドのソフトウェアトランザクションおよび第2のスレッドのハードウェアトランザクションを並列に実行する段階と、
    前記ソフトウェアトランザクションの実行を示すべくグローバルロックをアクティブ化する段階と、
    前記ハードウェアトランザクションの完了時に、前記グローバルロックの状態を決定し、前記グローバルロックがアクティブの場合には前記第1のスレッドのフィルタセットと前記第2のスレッドのフィルタセットとの間に共通部分が存在するか否かを判断し、前記第1のスレッドのフィルタセットと前記第2のスレッドのフィルタセットとの間に共通部分が存在しない場合には前記ハードウェアトランザクションをコミットする段階と、
    前記ソフトウェアトランザクションにおいて第1のサイズから第2のサイズへとハッシュテーブルを並列に再ハッシュする段階と、
    前記ハードウェアトランザクションにおいて前記ハッシュテーブルにアクセスし、前記並列に再ハッシュする段階の間に前記ハードウェアトランザクションをコミット可能とする段階と
    を備える方法。
  9. 前記ソフトウェアトランザクションをコミットする段階と、
    前記ソフトウェアトランザクションの完了時に前記グローバルロックを非アクティブ化する段階と
    をさらに備える請求項7または8に記載の方法。
  10. 前記ハードウェアトランザクションによる、前記トランザクショナルメモリシステムのモリへのアクセスのアドレスを、前記第1のスレッドの前記フィルタセットに挿入する段階と、
    1または複数のハッシュ値で前記アクセスの前記アドレスをハッシュすることに基づいて前記第1のスレッドの前記フィルタセットの1または複数のフィールドを更新する段階と
    をさらに備える請求項7から9のいずれか一項に記載の方法。
  11. トランザクショナルメモリシステムの第2のハードウェアトランザクションモードで第2のハードウェアトランザクションを実行する段階と、
    前記第2のハードウェアトランザクションの完了時に前記第2のハードウェアトランザクションをコミットする段階と、
    前記第2のハードウェアトランザクションのコミット後に、前記第2のハードウェアトランザクションと、前記第2のハードウェアトランザクションと並列に実行している少なくとも1つのソフトウェアトランザクションとの間にコンフリクトが存在する場合には、前記少なくとも1つのソフトウェアトランザクションを無効化する段階と
    前記第2のハードウェアトランザクションのコミット前に、コミットロックが取得されているか否かを判断し、前記コミットロックが取得されている場合、前記第2のハードウェアトランザクションと前記コミットロックを取得した第1のソフトウェアトランザクションとの間にコンフリクトが存在するか否かを判断する段階と、
    前記第1のソフトウェアトランザクションが前記コミットロックを取得した後、1または複数のハードウェアトランザクションによって1または複数のトランザクションロックが取得されたか否かを判断し、前記1または複数のトランザクションロックが取得されている場合には、前記1または複数のトランザクションロックが解放されるまで前記第1のソフトウェアトランザクションのコミットを遅延させる段階と
    を備える方法。
  12. トランザクショナルメモリシステムの第2のハードウェアトランザクションモードで第2のハードウェアトランザクションを実行する段階と、
    前記第2のハードウェアトランザクションの完了時に前記第2のハードウェアトランザクションをコミットする段階と、
    前記第2のハードウェアトランザクションのコミット後に、前記第2のハードウェアトランザクションと、前記第2のハードウェアトランザクションと並列に実行している少なくとも1つのソフトウェアトランザクションとの間にコンフリクトが存在する場合には、前記少なくとも1つのソフトウェアトランザクションを無効化する段階と、
    第2のソフトウェアトランザクションモードで第2のソフトウェアトランザクションを実行する段階であって、前記第2のソフトウェアトランザクションの実行開始時において第1のロックおよびコミットロックを取得する段階、ならびに、前記第2のソフトウェアトランザクションの実行中に1または複数のメモリロケーションを直接更新する段階を有する段階と、
    前記第2のソフトウェアトランザクションの完了時に、前記第2のソフトウェアトランザクションをコミットし、第1のソフトウェアトランザクションモードの1または複数の並列に実行されているソフトウェアトランザクションを無効化した後、前記第1のロックおよび前記コミットロックを解放する段階と
    を備える方法。
  13. 前記第2のハードウェアトランザクションのコミット前に、コミットロックが取得されているか否かを判断し、前記コミットロックが取得されている場合、前記第2のハードウェアトランザクションと前記コミットロックを取得した第1のソフトウェアトランザクションとの間にコンフリクトが存在するか否かを判断する段階を
    さらに備える請求項12に記載の方法。
  14. 前記第2のハードウェアトランザクションと前記第1のソフトウェアトランザクションとの間に前記コンフリクトが存在する場合、前記第2のハードウェアトランザクションをアボートする段階をさらに備え、
    前記第2のハードウェアトランザクションのフィルタセットと、前記第1のソフトウェアトランザクションのフィルタセットとの間に共通部分が存在する場合にコンフリクトが存在すると判断される
    請求項11または13に記載の方法。
  15. 前記トランザクショナルメモリシステムの第1のハードウェアトランザクションモードにおいて第1のハードウェアトランザクションを実行する段階と、
    前記第1のハードウェアトランザクションの完了時に、少なくとも1つのソフトウェアトランザクションが並列に実行されているか否かを判断する段階と、
    前記少なくとも1つのソフトウェアトランザクションが並列に実行されている場合、前記第1のハードウェアトランザクションをアボートし、前記少なくとも1つのソフトウェアトランザクションが並列に実行されていない場合、前記第1のハードウェアトランザクションをコミットする段階と
    をさらに備える請求項11、13、および14のいずれか一項に記載の方法。
  16. 前記第1のソフトウェアトランザクションの実行中に前記第1のソフトウェアトランザクションによる前記トランザクショナルメモリシステムのモリに対するリード処理を有効化する段階と、
    前記リード処理が有効化される場合、前記リード処理のロケーションを前記第1のソフトウェアトランザクションのフィルタセットに追加する段階と
    をさらに備える請求項11、および13から15のいずれか一項に記載の方法。
  17. コンピューティングデバイスで実行されることに応じて前記コンピューティングデバイスに請求項11から16のいずれか一項に記載の方法を実行させる複数の命令を備えるプログラム。
  18. 少なくとも1つのハードウェアトランザクションおよび少なくとも1つのソフトウェアトランザクションを並列に実行するハイブリッドトランザクショナルメモリロジックを有するプロセッサと、
    前記プロセッサに結合されているモリと
    を備えるシステムであって、
    前記ハイブリッドトランザクショナルメモリロジックは、第1のハードウェアトランザクションモードにおいて第1のトランザクションを、前記第1のトランザクションがコミットされるまで、または、前記第1のトランザクションの再試行回数が前記第1のハードウェアトランザクションモードにおいて第1の回数しきい値になるまで、実行した後、前記第1のトランザクションがコミットされない場合、前記第1のトランザクションを第1のソフトウェアトランザクションモードで実行し、
    前記ハイブリッドトランザクショナルメモリロジックは、前記第1のハードウェアトランザクションモードで実行される前記第1のトランザクションに対応付けられているフィルタセットと、前記第1のソフトウェアトランザクションモードで実行されている第2のトランザクションに対応付けられているフィルタセットとの間にコンフリクトが存在するか否かを判断する共通部分ロジックを含み、前記コンフリクトに応じて、前記ハイブリッドトランザクショナルメモリロジックは、前記第1のハードウェアトランザクションモードにおける前記第1のトランザクションがコミットしないようにし、
    前記ハイブリッドトランザクショナルメモリロジックは、前記第1のトランザクションがコミットされるまで、または、前記第1のソフトウェアトランザクションモードにおいて前記第1のトランザクションの再試行回数が第2の回数しきい値になるまで、前記第1のソフトウェアトランザクションモードで前記第1のトランザクションを実行し、前記第2の回数しきい値に到達した後は、前記第1のトランザクションが前記メモリを直接更新する第2のソフトウェアトランザクションモードで前記第1のトランザクションを実行する
    システム。
  19. 少なくとも1つのハードウェアトランザクションおよび少なくとも1つのソフトウェアトランザクションを並列に実行するハイブリッドトランザクショナルメモリロジックを有するプロセッサと、
    前記プロセッサに結合されているメモリと
    を備えるシステムであって、
    前記ハイブリッドトランザクショナルメモリロジックは、第1のハードウェアトランザクションモードにおいて第1のトランザクションを、前記第1のトランザクションがコミットされるまで、または、前記第1のトランザクションの再試行回数が前記第1のハードウェアトランザクションモードにおいて第1の回数しきい値になるまで、実行した後、前記第1のトランザクションがコミットされない場合、前記第1のトランザクションを第1のソフトウェアトランザクションモードで実行し、
    前記ハイブリッドトランザクショナルメモリロジックは、前記第1のハードウェアトランザクションモードで実行される前記第1のトランザクションに対応付けられているフィルタセットと、前記第1のソフトウェアトランザクションモードで実行されている第2のトランザクションに対応付けられているフィルタセットとの間にコンフリクトが存在するか否かを判断する共通部分ロジックを含み、前記コンフリクトに応じて、前記ハイブリッドトランザクショナルメモリロジックは、前記第1のハードウェアトランザクションモードにおける前記第1のトランザクションがコミットしないようにし、
    前記ハイブリッドトランザクショナルメモリロジックは、前記第1のトランザクションに、前記第1のソフトウェアトランザクションモードで実行中にリードデータを有効化させ、前記リードデータに対応付けられているアドレスに基づいて前記第1のソフトウェアトランザクションモードで実行されている前記第1のトランザクションに対応付けられているフィルタセットを更新させ、ライトデータでハッシュテーブルを更新させる
    システム。
  20. 前記ハイブリッドトランザクショナルメモリロジックは、前記第1のハードウェアトランザクションモードで実行する前に第2のハードウェアトランザクションモードで前記第1のトランザクションを実行し、前記ハイブリッドトランザクショナルメモリロジックは、前記第1のハードウェアトランザクションモードで前記第1のトランザクションを実行する前に、第3の回数しきい値まで前記第2のハードウェアトランザクションモードで前記第1のトランザクションを実行する
    請求項18または19に記載のシステム。
  21. 前記ハイブリッドトランザクショナルメモリロジックは、
    第2のソフトウェアトランザクションモードにおいて第2のトランザクションに、前記第2のトランザクションの開始時に第1のロックおよび第2のロックを取得させ、取得後に前記第2のトランザクションの実行中に前記モリを直接更新させ、
    前記第1のソフトウェアトランザクションモードにおいて前記第1のトランザクションに、前記第1のトランザクションのコミット時に前記第1のロックおよび前記第2のロックを取得させ、取得後に前記ハッシュテーブルからの前記ライトデータで前記モリを更新させ、前記第1のソフトウェアトランザクションモードで並列に実行されている少なくとも1つの他のソフトウェアトランザクションを無効化させる
    請求項19に記載のシステム。
  22. 請求項17に記載のプログラムを記憶するコンピュータ可読記憶媒体。
  23. 第1のスレッドのソフトウェアトランザクションおよび第2のスレッドのハードウェアトランザクションを並列に実行し、
    前記ソフトウェアトランザクションの実行を示すべくグローバルロックをアクティブ化し、
    前記ハードウェアトランザクションの完了時に、前記グローバルロックの状態を決定し、
    前記グローバルロックがアクティブの場合には前記第1のスレッドのフィルタセットと前記第2のスレッドのフィルタセットとの間に共通部分が存在するか否かを判断し、前記第1のスレッドのフィルタセットと前記第2のスレッドのフィルタセットとの間に共通部分が存在しない場合には前記ハードウェアトランザクションをコミットし、
    前記ハードウェアトランザクションの完了時に前記グローバルロックが非アクティブである場合には前記第1のスレッドの前記フィルタセットと前記第2のスレッドの前記フィルタセットとの間に共通部分が存在するか否かを判断することなく、前記ハードウェアトランザクションをコミットする
    装置。
  24. 第1のスレッドのソフトウェアトランザクションおよび第2のスレッドのハードウェアトランザクションを並列に実行し、
    前記ソフトウェアトランザクションの実行を示すべくグローバルロックをアクティブ化し、
    前記ハードウェアトランザクションの完了時に、前記グローバルロックの状態を決定し、
    前記グローバルロックがアクティブの場合には前記第1のスレッドのフィルタセットと前記第2のスレッドのフィルタセットとの間に共通部分が存在するか否かを判断し、前記第1のスレッドのフィルタセットと前記第2のスレッドのフィルタセットとの間に共通部分が存在しない場合には前記ハードウェアトランザクションをコミットし、
    前記ソフトウェアトランザクションにおいて第1のサイズから第2のサイズへとハッシュテーブルを並列に再ハッシュし、
    前記ハードウェアトランザクションにおいて前記ハッシュテーブルにアクセスし、前記並列に再ハッシュする段階の間に前記ハードウェアトランザクションをコミット可能とする
    装置。
JP2016551272A 2014-03-26 2015-03-25 装置、方法、システム、プログラム、およびコンピュータ可読記憶媒体 Active JP6304845B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/225,804 US9971627B2 (en) 2014-03-26 2014-03-26 Enabling maximum concurrency in a hybrid transactional memory system
US14/225,804 2014-03-26
PCT/US2015/022394 WO2015148608A1 (en) 2014-03-26 2015-03-25 Enabling maximum concurrency in a hybrid transactional memory system

Publications (2)

Publication Number Publication Date
JP2017509970A JP2017509970A (ja) 2017-04-06
JP6304845B2 true JP6304845B2 (ja) 2018-04-04

Family

ID=54190495

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016551272A Active JP6304845B2 (ja) 2014-03-26 2015-03-25 装置、方法、システム、プログラム、およびコンピュータ可読記憶媒体

Country Status (6)

Country Link
US (1) US9971627B2 (ja)
EP (1) EP3123306A4 (ja)
JP (1) JP6304845B2 (ja)
KR (1) KR101834262B1 (ja)
CN (1) CN106062707A (ja)
WO (1) WO2015148608A1 (ja)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9298632B2 (en) * 2012-06-28 2016-03-29 Intel Corporation Hybrid cache state and filter tracking of memory operations during a transaction
US9037491B1 (en) 2013-11-26 2015-05-19 Square, Inc. Card reader emulation for cardless transactions
US9633070B2 (en) * 2014-03-31 2017-04-25 International Business Machines Corporation Increase database performance by reducing required communications and information transfers
US9720837B2 (en) * 2014-06-27 2017-08-01 International Business Machines Corporation Allowing non-cacheable loads within a transaction
US11809917B2 (en) 2014-07-14 2023-11-07 Oracle International Corporation Systems and methods for safely subscribing to locks using hardware extensions
US10521277B2 (en) * 2014-07-14 2019-12-31 Oracle International Corporation Systems and methods for safely subscribing to locks using hardware extensions
US10515354B1 (en) 2014-12-05 2019-12-24 Square, Inc. Discounted card not present rates following failed card present attempts
US10114638B2 (en) * 2014-12-15 2018-10-30 Cisco Technology, Inc. Command message generation and execution using a machine code-instruction
US20160179662A1 (en) * 2014-12-23 2016-06-23 David Pardo Keppel Instruction and logic for page table walk change-bits
US10019572B1 (en) * 2015-08-27 2018-07-10 Amazon Technologies, Inc. Detecting malicious activities by imported software packages
US10032031B1 (en) 2015-08-27 2018-07-24 Amazon Technologies, Inc. Detecting unknown software vulnerabilities and system compromises
US9772874B2 (en) * 2016-01-29 2017-09-26 International Business Machines Corporation Prioritization of transactions based on execution by transactional core with super core indicator
US10163107B1 (en) 2016-03-31 2018-12-25 Square, Inc. Technical fallback infrastructure
US10176241B2 (en) * 2016-04-26 2019-01-08 Servicenow, Inc. Identification and reconciliation of network resource information
US11868818B2 (en) * 2016-09-22 2024-01-09 Advanced Micro Devices, Inc. Lock address contention predictor
US11269640B2 (en) * 2017-02-13 2022-03-08 Qualcomm Incorporated Speculative transitions among modes with different privilege levels in a block-based microarchitecture
US10755281B1 (en) 2017-03-31 2020-08-25 Square, Inc. Payment transaction authentication system and method
US11593773B1 (en) 2017-03-31 2023-02-28 Block, Inc. Payment transaction authentication system and method
CN107066237B (zh) * 2017-04-17 2020-04-03 东软集团股份有限公司 一种数据处理方法及装置
KR101885030B1 (ko) * 2017-04-21 2018-08-02 전북대학교산학협력단 하이브리드 트랜잭셔널 메모리 시스템에서의 트랜잭션 처리 방법 및 트랜잭션 처리 장치
US20180315038A1 (en) 2017-04-28 2018-11-01 Square, Inc. Multi-source transaction processing
GB2567433B (en) * 2017-10-10 2020-02-26 Advanced Risc Mach Ltd Checking lock variables for transactions in a system with transactional memory support
KR102007117B1 (ko) * 2018-01-19 2019-08-02 전북대학교산학협력단 트랜잭션 처리 방법 및 트랜잭션 처리 시스템
KR102123616B1 (ko) * 2018-02-09 2020-06-17 한양대학교 산학협력단 충돌 페이지 리스트를 이용한 병렬 저널링 방법 및 그 장치
US10754776B2 (en) 2018-07-30 2020-08-25 International Business Machines Corporation Cache balance when using hardware transactional memory
US20200293365A1 (en) * 2019-03-15 2020-09-17 Intel Corporation Transactional page fault handling
KR102150597B1 (ko) * 2019-07-23 2020-09-01 전북대학교산학협력단 최적의 재시도 정책을 제공하는 하이브리드 트랜잭셔널 메모리 시스템의 운영 방법 및 하이브리드 트랜잭셔널 메모리 시스템
US11995350B2 (en) * 2020-12-23 2024-05-28 Red Hat, Inc. Prefetching container data in a data storage system
US20220222081A1 (en) * 2021-01-14 2022-07-14 Oracle International Corporation Vectorized sorted-set intersection using conflict-detection instructions optimized for small unpadded ordered sets

Family Cites Families (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5701503A (en) 1994-01-04 1997-12-23 Intel Corporation Method and apparatus for transferring information between a processor and a memory system
US5581729A (en) 1995-03-31 1996-12-03 Sun Microsystems, Inc. Parallelized coherent read and writeback transaction processing system for use in a packet switched cache coherent multiprocessor system
US5822755A (en) 1996-01-25 1998-10-13 International Business Machines Corporation Dual usage memory selectively behaving as a victim cache for L1 cache or as a tag array for L2 cache
US6240413B1 (en) 1997-12-22 2001-05-29 Sun Microsystems, Inc. Fine-grained consistency mechanism for optimistic concurrency control using lock groups
US7555603B1 (en) 1998-12-16 2009-06-30 Intel Corporation Transaction manager and cache for processing agent
EP1370966B1 (en) 2001-02-24 2010-08-25 International Business Machines Corporation A novel massively parrallel supercomputer
US6862646B2 (en) 2001-12-28 2005-03-01 Thomas J. Bonola Method and apparatus for eliminating the software generated ready-signal to hardware devices that are not part of the memory coherency domain
US7856537B2 (en) 2004-09-30 2010-12-21 Intel Corporation Hybrid hardware and software implementation of transactional memory access
US7685365B2 (en) 2004-09-30 2010-03-23 Intel Corporation Transactional memory execution utilizing virtual memory
US8813052B2 (en) 2005-12-07 2014-08-19 Microsoft Corporation Cache metadata for implementing bounded transactional memory
US8001538B2 (en) 2005-12-07 2011-08-16 Microsoft Corporation Software accessible cache metadata
US8180971B2 (en) 2005-12-09 2012-05-15 University Of Rochester System and method for hardware acceleration of a software transactional memory
US7809903B2 (en) 2005-12-15 2010-10-05 Intel Corporation Coordinating access to memory locations for hardware transactional memory transactions and software transactional memory transactions
US7870545B2 (en) 2005-12-16 2011-01-11 Intel Corporation Protecting shared variables in a software transactional memory system
US7669015B2 (en) * 2006-02-22 2010-02-23 Sun Microsystems Inc. Methods and apparatus to implement parallel transactions
US8924653B2 (en) 2006-10-31 2014-12-30 Hewlett-Packard Development Company, L.P. Transactional cache memory system
US20080189487A1 (en) 2007-02-06 2008-08-07 Arm Limited Control of cache transactions
US7516365B2 (en) * 2007-07-27 2009-04-07 Sun Microsystems, Inc. System and method for split hardware transactions
US8661204B2 (en) 2007-08-15 2014-02-25 University Of Rochester, Office Of Technology Transfer Mechanism to support flexible decoupled transactional memory
US7966459B2 (en) 2007-12-31 2011-06-21 Oracle America, Inc. System and method for supporting phased transactional memory modes
US7793052B2 (en) 2007-12-31 2010-09-07 Oracle America, Inc. System and method for implementing hybrid single-compare-single-store operations
US20090183159A1 (en) * 2008-01-11 2009-07-16 Michael Maged M Managing concurrent transactions using bloom filters
US8051248B2 (en) 2008-05-05 2011-11-01 Globalfoundries Inc. Transient transactional cache
US9367363B2 (en) * 2008-05-12 2016-06-14 Oracle America, Inc. System and method for integrating best effort hardware mechanisms for supporting transactional memory
US8627017B2 (en) 2008-12-30 2014-01-07 Intel Corporation Read and write monitoring attributes in transactional memory (TM) systems
US8103838B2 (en) * 2009-01-08 2012-01-24 Oracle America, Inc. System and method for transactional locking using reader-lists
US8266604B2 (en) 2009-01-26 2012-09-11 Microsoft Corporation Transactional memory compatibility management
US8484438B2 (en) * 2009-06-29 2013-07-09 Oracle America, Inc. Hierarchical bloom filters for facilitating concurrency control
US8516202B2 (en) * 2009-11-16 2013-08-20 International Business Machines Corporation Hybrid transactional memory system (HybridTM) and method
US8095824B2 (en) * 2009-12-15 2012-01-10 Intel Corporation Performing mode switching in an unbounded transactional memory (UTM) system
US8316194B2 (en) 2009-12-15 2012-11-20 Intel Corporation Mechanisms to accelerate transactions using buffered stores
US8521995B2 (en) 2009-12-15 2013-08-27 Intel Corporation Handling operating system (OS) transitions in an unbounded transactional memory (UTM) mode
US8788766B2 (en) * 2010-02-18 2014-07-22 Oracle America, Inc. Software-accessible hardware support for determining set membership
US8352688B2 (en) 2010-11-15 2013-01-08 Advanced Micro Devices, Inc. Preventing unintended loss of transactional data in hardware transactional memory systems
US9274962B2 (en) 2010-12-07 2016-03-01 Intel Corporation Apparatus, method, and system for instantaneous cache state recovery from speculative abort/commit
US8612694B2 (en) 2011-03-07 2013-12-17 Advanced Micro Devices, Inc. Protecting large objects within an advanced synchronization facility
JP2013051388A (ja) 2011-08-01 2013-03-14 Hitachi Cable Ltd 窒化物系化合物半導体結晶及びその製造方法並びにiii族窒化物半導体デバイス用基板
CN104220989B (zh) 2011-12-21 2017-12-12 英特尔公司 用于识别并且再现多线程程序中并发冲突的方法及系统
US9015419B2 (en) 2012-06-15 2015-04-21 International Business Machines Corporation Avoiding aborts due to associativity conflicts in a transactional environment
US9298632B2 (en) * 2012-06-28 2016-03-29 Intel Corporation Hybrid cache state and filter tracking of memory operations during a transaction

Also Published As

Publication number Publication date
JP2017509970A (ja) 2017-04-06
KR101834262B1 (ko) 2018-04-13
US9971627B2 (en) 2018-05-15
EP3123306A1 (en) 2017-02-01
US20150277967A1 (en) 2015-10-01
CN106062707A (zh) 2016-10-26
KR20160113207A (ko) 2016-09-28
WO2015148608A1 (en) 2015-10-01
EP3123306A4 (en) 2017-11-22

Similar Documents

Publication Publication Date Title
JP6304845B2 (ja) 装置、方法、システム、プログラム、およびコンピュータ可読記憶媒体
US8464261B2 (en) System and method for executing a transaction using parallel co-transactions
KR101025354B1 (ko) 가상 트랜잭션 메모리를 위한 글로벌 오버플로우 방법
US8402227B2 (en) System and method for committing results of a software transaction using a hardware transaction
US8595446B2 (en) System and method for performing dynamic mixed mode read validation in a software transactional memory
JP5507706B2 (ja) バッファリングストアを利用してトランザクションを高速化するための機構
EP2972885B1 (en) Memory object reference count management with improved scalability
US8973004B2 (en) Transactional locking with read-write locks in transactional memory systems
US11487427B2 (en) Fine-grained hardware transactional lock elision
RU2501071C2 (ru) Механизм запроса поздней блокировки для пропуска аппаратной блокировки (hle)
CN107851037B (zh) 在使用日志和未锁定的非易失存储器的共享存储器中的硬件事务存储的一致性协议
US20110167222A1 (en) Unbounded transactional memory system and method
KR101970390B1 (ko) 2진 변환 기반 프로세서들에 의한 록 생략
US8103838B2 (en) System and method for transactional locking using reader-lists
US8302105B2 (en) Bulk synchronization in transactional memory systems
US8352688B2 (en) Preventing unintended loss of transactional data in hardware transactional memory systems
EP2889769B1 (en) Processor with transactional capability and logging circuitry to report transactional operations
US10922084B2 (en) Handling of inter-element address hazards for vector instructions
US8850120B2 (en) Store queue with store-merging and forward-progress guarantees
CN106415512B (zh) 存储器管理算法的动态选择
TWI801603B (zh) 處理獨佔式載入指令的資料處理設備、方法及電腦程式
JP2022191340A (ja) ロックアドレス競合予測器

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160929

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160929

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170726

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170815

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171114

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20180206

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180302

R150 Certificate of patent or registration of utility model

Ref document number: 6304845

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250