【文献】
田村祐典ほか,組込システムにおけるソフトウェアトランザクションメモリの検討,情報処理学会研究報告 平成21年度▲6▼ [DVD−ROM],日本,社団法人情報処理学会,2010年 3月27日,1−7ページ
(58)【調査した分野】(Int.Cl.,DB名)
前記第2のハードウェアトランザクションモードにおいて、前記第1のハードウェアトランザクションは、前記第1のハードウェアトランザクションのメモリアクセス毎に前記第1のハードウェアトランザクションの前記フィルタセットを更新する
請求項1に記載の装置。
前記第1のソフトウェアトランザクションモードにおいて、前記第1のソフトウェアトランザクションのコミット後に、前記第1のソフトウェアトランザクションは前記第1のソフトウェアトランザクションモードの別のソフトウェアトランザクションを無効化する
請求項3に記載の装置。
前記第2のハードウェアトランザクションモードにおいて、第2のハードウェアトランザクションは、前記第2のハードウェアトランザクションのコミットの前に、コミットロックおよびトランザクションロックを取得する
請求項4に記載の装置。
前記第1のソフトウェアトランザクションは、前記第1のソフトウェアトランザクションのフィルタセットと前記別のソフトウェアトランザクションのフィルタセットとの間に共通部分が存在する場合、前記別のソフトウェアトランザクションを無効化する
請求項4または5に記載の装置。
トランザクショナルメモリシステムにおけるプロセッサによって、第1のスレッドのソフトウェアトランザクションおよび第2のスレッドのハードウェアトランザクションを並列に実行する段階と、
前記ソフトウェアトランザクションの実行を示すべくグローバルロックをアクティブ化する段階と、
前記ハードウェアトランザクションの完了時に、前記グローバルロックの状態を決定し、前記グローバルロックがアクティブの場合には前記第1のスレッドのフィルタセットと前記第2のスレッドのフィルタセットとの間に共通部分が存在するか否かを判断し、前記第1のスレッドのフィルタセットと前記第2のスレッドのフィルタセットとの間に共通部分が存在しない場合には前記ハードウェアトランザクションをコミットする段階と、
前記ハードウェアトランザクションの完了時に前記グローバルロックが非アクティブである場合には前記第1のスレッドの前記フィルタセットと前記第2のスレッドの前記フィルタセットとの間に共通部分が存在するか否かを判断することなく、前記ハードウェアトランザクションをコミットする段階と
を備える方法。
前記第2のハードウェアトランザクションのコミット前に、コミットロックが取得されているか否かを判断し、前記コミットロックが取得されている場合、前記第2のハードウェアトランザクションと前記コミットロックを取得した第1のソフトウェアトランザクションとの間にコンフリクトが存在するか否かを判断する段階を
さらに備える請求項12に記載の方法。
前記第2のハードウェアトランザクションと前記第1のソフトウェアトランザクションとの間に前記コンフリクトが存在する場合、前記第2のハードウェアトランザクションをアボートする段階をさらに備え、
前記第2のハードウェアトランザクションのフィルタセットと、前記第1のソフトウェアトランザクションのフィルタセットとの間に共通部分が存在する場合にコンフリクトが存在すると判断される
請求項11または13に記載の方法。
少なくとも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のトランザクションを実行する
システム。
前記ハイブリッドトランザクショナルメモリロジックは、前記第1のハードウェアトランザクションモードで実行する前に第2のハードウェアトランザクションモードで前記第1のトランザクションを実行し、前記ハイブリッドトランザクショナルメモリロジックは、前記第1のハードウェアトランザクションモードで前記第1のトランザクションを実行する前に、第3の回数しきい値まで前記第2のハードウェアトランザクションモードで前記第1のトランザクションを実行する
請求項18または19に記載のシステム。
【発明を実施するための形態】
【0017】
トランザクショナルメモリシステムを実装するさまざまな実施形態において、アクセスされたメモリロケーションに関する情報を用いて、1または複数のソフトウェアトランザクションと並列に実行されている1または複数のハードウェアトランザクションの間でコンフリクトが発生していると判断される場合がある。特定の実装例では、この情報を、トランザクションを実行しているスレッドに対応付けられているフィルタセットを用いて維持するとしてよい。より具体的には、実施形態では、これらのフィルタセットを、いわゆるブルームフィルタとして実装するとしてよい。ブルームフィルタには、アクセスされたメモリロケーションに関する情報を格納するとしてよい。
【0018】
一般的に、ブルームフィルタは、1または複数のメモリロケーションに対応付けられている値を提供するフィールドを複数持つビットベクトルとして実装され得る。動作について説明すると、アクセスされたメモリロケーションアドレス(または、その一部)は1または複数のハッシュ値でハッシュされる。ハッシュ結果を用いて、ビットベクトルの対応するエントリにデータを追加する。より具体的には、アクセスおよびハッシュ算出が発生すると、ビットベクトルのうち指定されたフィールドは、論理値「1」またはアクティブ値にセットされて、対応するアドレスがアクセスされたことを示すとしてよい。同様に、論理値「0」または「非アクティブ値」を持つ任意のフィールドは、メモリの1または複数の所与のアドレスにはアクセスが発生していない旨を意味する。
【0019】
コンフリクト検出は、少なくとも部分的に、複数のブルームフィルタ値を用いて実行されるとしてよい。より具体的には、第1のスレッド用のブルームフィルタは、並列に実行しているトランザクションを持つ第2のスレッド用のブルームフィルタの内容と、自身の内容とを比較するとしてよい。共通部分(インターセクション)比較によって、1または複数の位置において複数のアクセスメモリロケーションに共通部分があることが分かれば、コンフリクトが検出され、トランザクションのうち1または複数をアボートまたはロールバックするためのさまざまな処理が発生するとしてよい。これに代えて、共通部分比較によってアクセスされたメモリロケーションに共通部分が無いことがわかれば、トランザクションのうち一方または両方は、コンフリクトを検出することなく、コミットに進むとしてよい。
【0020】
実施形態を用いて、一のソフトウェアトランザクションと並列に実行されている複数のハードウェアトランザクション間のコンフリクトを判断するとしてよい。スレッド毎にブルームフィルタが設けられる実施形態を用いて、ソフトウェアトランザクションによってソフトウェアグローバルロックが保持されている間に実行を終了するハードウェアトランザクションは、コンフリクトが発見された場合に限り、強制的にアボートされるとしてよい。ブルームフィルタは、偽陽性となる場合もあるので、誤ってアボートが発生する可能性が依然としてある。しかし、ブルームフィルタの利用によって、ハードウェアトランザクションのコミット確率が改善され得る。
【0021】
実施形態は、所与のソフトウェアトランザクションによって取得される単一グローバルロックを用いてソフトウェアトランザクションおよびハードウェアトランザクションの両方を実現するハイブリッドトランザクショナルメモリ(HTM)で用いられるとしてよい。ハードウェアトランザクショナルメモリは、トランザクションをコミットさせて完了させるためにベストエフォート形式を採用する、プロセッサハードウェア内でのみ実装され得る。ソフトウェアトランザクショナルメモリは、マルチスレッド化されたプログラムにおいて共有メモリを同期させるべく、全てソフトウェアで実装される。
【0022】
ハードウェアトランザクションの終了時には、当該ハードウェアトランザクションが単一グローバルロックを参照する。当該ロックが解放されている場合、ハードウェアトランザクションはコミットに成功するとしてよい。単一グローバルロックが解放されていない場合、各トランザクションのリードセットおよびライトセットを表すスレッド毎のブルームフィルタを用いて、コンフリクト検出を実行するとしてよい。このようにして、単一グローバルロックがソフトウェアトランザクションによって獲得されていたとしても、コンフリクトしていないハードウェアトランザクションはコミットすることができる。
【0023】
このため、実施形態によれば、ハイブリッドトランザクショナルメモリシステムで実現される並行処理の量を増やすことが可能になる。ソフトウェアトランザクションおよびハードウェアトランザクションにおけるコンフリクトを検出するべく、各スレッドにはブルームフィルタが対応付けられる。スレッドにおいてトランザクションを実行している間、各リードライト処理をアノテートして、メモリロケーションをブルームフィルタに追加する。一実施形態において、このようなアノテートはライブラリコールによって実行されるとしてよい。しかし、他の実施形態ではこのようなアノテートをリードライトメモリアクセスにインライン化するとしてよい。これに代えて、コンパイラが、ブルームフィルタ挿入を処理するための命令を挿入するとしてよい。
【0024】
ハードウェアトランザクション(つまり、トランザクションのクリティカルセクション)が完了すると、トランザクションはコミットする前にグローバルロックを参照して、解放されていれば、トランザクションはコミットに成功するとしてよい。しかし、ロックが獲得されていれば、ハードウェアトランザクションおよびソフトウェアトランザクション(グローバルロックの所有者)のブルームフィルタの内容を共通部分演算で比較して、コンフリクトが発生しているか否かを判断する。ブルームフィルタでは、偽陽性が発生する可能性はあるが、偽陰性は発生しない。このため、トランザクション間で実際にはコンフリクトしていないにもかかわらずコンフリクトが検出されることがあるが、複数のトランザクションが同じメモリロケーションにアクセスした場合に共通部分比較がコンフリクト無しと報告することはない。このように、ロックが獲得されていたとしても、ブルームフィルタがコンフリクトを報告しない限り、ハードウェアトランザクションはコミットに成功し得る。
【0025】
一の特定のハイブリッドトランザクショナルメモリシステムにおいて、一のソフトウェアトランザクションは1または複数のハードウェアトランザクションと並列に実行され得る。ソフトウェアトランザクションは、開始時に、排他性を保証するべく単一グローバルロックを取得する。各ハードウェアトランザクションは、クリティカルセクション終了時にこのロックをリードして、コミットを試すか、または、ブルームフィルタを参照するかを判断する。一実施形態において、単一グローバルロックは、所有者であるスレッドの識別子を格納しているとしてよい。このようにして、ハードウェアトランザクションに対して、コンフリクトに関してどのブルームフィルタを確認すべきかを指定する。
【0026】
一実施形態において、ブルームフィルタはソフトウェアブルームフィルタとして実装され得る。これらのフィルタを用いて、各トランザクション(ハードウェアまたはソフトウェア)は、メモリロケーションをリード/ライトすると、リードまたはライトした各メモリロケーションを自身のブルームフィルタに対して追加する。ハードウェアトランザクションの終了時には、ブルームフィルタを用いて、もし存在すれば、単一グローバルロックを現在保持しているソフトウェアトランザクションとの間のコンフリクトを特定する。
【0027】
ハードウェアトランザクションは大半がハードウェアで実行されるが、リードアクセスおよびライトアクセスはアノテートされるので、リード/ライトされたロケーションはスレッド毎のソフトウェアブルームフィルタに入力されることに留意されたい。コミット時には、ハードウェアトランザクションはグローバルロックを確認して、解放されていれば、コミットすることができる。解放されていなければ、当該ハードウェアトランザクションのブルームフィルタとソフトウェアブルームフィルタとの間のセット共通部分を算出する。コンフリクトが無ければ、ハードウェアトランザクションはコミットに成功するとしてよい。コミット時(コンフリクトまたはフィルタ共通部分が無いことを確認した後)、ハードウェアトランザクションが実行した更新は、更新された値を(全ての更新が一度に可視状態になるように)メモリにライトすることによって、他のスレッドにも可視状態になる。トランザクションがアボートされると、全ての更新は初期状態に戻る。
【0028】
アボートされるハードウェアトランザクションは、複数回にわたって再試行する。N回(Nは設定可能なパラメータである)の再試行の後、ハードウェアトランザクションは、ソフトウェアトランザクションに移行して単一グローバルロックの取得を試みる。この移行によって、ソフトウェアトランザクションがアボートされない実施形態において前進が保証される。
【0029】
この実施形態では、任意の所与のタイミングにおいて実行可能なソフトウェアトランザクションは1つのみである。ソフトウェアトランザクションは、スレッドが単一グローバルロックを所有している場合に実行することができる。ソフトウェアトランザクションは、自分のスレッド識別子(ID)をロックロケーションにライトすることによって当該ロックを取得し、クリティカルセクションの実行を開始する。ソフトウェアトランザクションが実行する全ての更新は実行済みである(言い換えると、ソフトウェアトランザクションは直接メモリを更新する)。これに加えて、ソフトウェアトランザクションはさらに、リード/ライトされたロケーションをスレッドのブルームフィルタに格納して、並列に実行されているハードウェアトランザクションがコンフリクトの有無を確認できるようにする。一実施形態において、ソフトウェアトランザクションは決してアボートされることはない。
【0030】
ハイブリッドトランザクショナルメモリ方式は、トランザクション実行の高速化およびハードウェアトランザクショナルメモリに対応付けられているオーバーヘッドの低減を実現しつつ、処理しているトランザクションについて前進を保証するために用いられるとしてよい。ハイブリッドトランザクショナルメモリ方式によれば、各トランザクションは、最初にハードウェアで処理され、ハードウェアで前進できない場合には続いてソフトウェアで処理する。さまざまな実施形態において、ソフトウェアトランザクションと1または複数のハードウェアトランザクションとの並列実行を可能とするべくグローバルロックが用いられるハイブリッドトランザクショナルメモリシステムが提供される。
【0031】
図1は、装置100を示すブロック図である。
図1に図示しているように、装置100は、プロセッサ部102、メモリ部104およびトランザクション管理モジュール106等、複数の構成要素を備える。しかし、実施形態は図示した構成要素の種類、数または配置に限定されるものではない。
【0032】
さまざまな実施形態において、プロセッサ部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の集積回路の外部にあるハードディスクドライブに配置されるとしてもよい。
【0033】
一部の実施形態において、トランザクション管理モジュール106は、回路、ロジック、他のハードウェアおよび/またはトランザクショナルメモリパラダイムに従ってトランザクションの実行を管理する命令を含むとしてよい。さまざまな実施形態において、トランザクション管理モジュール106は、ハードウェアトランザクションおよびソフトウェアトランザクションの両方を実行させるとしてよい。ハードウェアトランザクションは、プロセッサ部102内のロジックデバイス回路によって直接実行されるトランザクションであってよい。ソフトウェアトランザクションは、プロセッサ部102で実行されるプログラミングロジックによって間接的に実行されるトランザクションであってよい。
【0034】
さらに
図1で図示しているように、装置100および送受信部144を含むシステム140が提供される。送受信部144は、さまざまな適切な無線通信技術を用いて信号を送受信可能な1または複数の無線機器を含むとしてよい。そのような技術では、1または複数の無線ネットワークを介する通信を実行するとしてよい。無線ネットワークの例には、ワイヤレスローカルエリアネットワーク(WLAN)、ワイヤレスパーソナルエリアネットワーク(WPAN)、ワイヤレスメトロポリタンエリアネットワーク(WMAN)、セルラー方式ネットワークおよび人工衛星ネットワークが含まれる(しかし、これらに限定されない)。
【0035】
一部の実施形態において、プロセッサ部102は1または複数のスレッド108のホストとなるとしてよい。各スレッド108は、プロセッサ部102で実行されているアプリケーションまたはプログラムに対応するとしてよい。任意の特定のアプリケーションまたはプログラムは、複数のスレッド108が対応付けられているとしてよい。アプリケーションまたはプログラムは、特定のスレッド108を利用して1または複数のトランザクション110の実行を要求するとしてよい。トランザクション110は、さまざまな計算またはその他のタスクの実行を、プロセッサ部102に任せるとしてよい。
【0036】
さまざまな実施形態において、スレッド108がトランザクションの実行を要求する場合、トランザクション管理モジュール106は、ハイブリッドトランザクショナルメモリアルゴリズムにしたがって当該トランザクションを管理する。一部の実施形態において、ハイブリッドトランザクショナルメモリアルゴリズムは、トランザクションの実行およびコミットを試みる複数の実行フェーズまたは実行モードを実装するとしてよい。さまざまな実施形態において、ハイブリッドトランザクショナルメモリアルゴリズムは、ハードウェアフェーズおよびソフトウェアフェーズを含むとしてよい。一部の実施形態において、トランザクション管理モジュール106は、ハードウェアフェーズが失敗した後に限り、トランザクションのためにソフトウェアフェーズを用いるとしてよい。
【0037】
一部の実施形態において、トランザクション管理モジュール106は、一のソフトウェアトランザクションおよび1または複数のハードウェアトランザクションの並列実行を可能にするべくグローバルロック112を利用するとしてよい。さまざまな実施形態において、トランザクション管理モジュール106は、ソフトウェアトランザクションが実行されている場合にグローバルロック112をセットするか、または、アクティブ化するとしてよく、ソフトウェアトランザクションが実行されていない場合にグローバルロック112をクリアするか、または、非アクティブ化するとしてよい。一部の実施形態において、グローバルロック112はスピンロックであってよい。他の実施形態において、ロックキャッシュラインにおけるコンテンションを減らすべくMCS(Mellor−Crummey−Scott)ロックをグローバルロック112に用いるとしてもよい。このようなさまざまな実施形態において、「MCS_acquire」法および「MCS_release」法を用いて、ハードウェアトランザクションの利点を生かし、コンペア・アンド・スワップ(CAS)命令の実行を高速化するとしてよい。さらに、一部の実施形態において、このグローバルロックは、本明細書で説明するように、フィルタメカニズムを用いて実装するとしてよい。
【0038】
一部の実施形態において、トランザクション管理モジュール106は、ハードウェアトランザクションの完了時にグローバルロック112が非アクティブでトランザクション実行中に他のコンフリクトが発生しなかった場合に、ハードウェアトランザクションをコミット可能とするとしてよい。これに代えて、ハードウェアトランザクションがコミットを求めているタイミングにおいてグローバルロック112がアクティブであるか、または、獲得されている場合、トランザクション管理モジュール116は、ハードウェアトランザクションと実行中のソフトウェアトランザクションとの間でコンフリクトが存在するか否かを、両トランザクションを開始したスレッドに対応付けられているブルームフィルタに格納されている情報を参照して判断するとしてよい。
【0039】
さまざまな実施形態において、トランザクション管理モジュール106は実行ロジック114を含むとしてよい。一部の実施形態において、実行ロジック114は、回路、他のハードウェアおよび/またはトランザクション110を実行する命令であってよい。さまざまな実施形態において、スレッド108が新たなトランザクションの実行を要求する度に、実行ロジック114はトランザクションの実行を1回または複数回行うとしてよい。一部の実施形態において、実行ロジック114は最初にトランザクションをハードウェアトランザクションとして1回または複数回実行するとしてよい。この後、ハードウェアで実行してもコミットできない場合には、当該トランザクションをソフトウェアトランザクションとして実行するとしてよい。このように、一部の実施形態において、ソフトウェアトランザクションモードは、コミットを保証するべく、そして、前進を達成するべく、トランザクションに最高優先度が割り当てられるフォールバック実行フェーズであってよい。一部の実施形態において、実行ロジック114はさらに、ハードウェアトランザクションの完了時にグローバルロック112を確認するとしてよい。
【0040】
一部の実施形態において、トランザクション管理モジュール106はトラッキングロジック116を含むとしてよい。さまざまな実施形態において、トラッキングロジック116は、回路、他のハードウェアおよび/またはグローバルロック112、再試行カウンタ118、および、再試行しきい値120を管理するための命令を含むとしてよい。一部の実施形態において、トラッキングロジック116は、実行ロジック114からの命令に基づいてグローバルロック112をセットするとしてよい。例えば、実行ロジック114は、実行ロジック114がソフトウェアフェーズでトランザクションの実行を開始すると、グローバルロック112をセットするようトラッキングロジック116に命令するとしてよい。さまざまな実施形態において、再試行カウンタ118は、ハードウェアトランザクションモードでトランザクションを実行しようと連続して試行した総回数を含むとしてよい。一部の実施形態において、再試行しきい値120が含む試行回数は、当該回数だけ試行された後は実行ロジック114がハードウェアトランザクションとしての実行からソフトウェアトランザクションとしての実行へと前進すべきことを意味しているとしてよい。さまざまな実施形態において、新たなトランザクションを受信すると、トラッキングロジック116は(当該トランザクションに対応する)再試行カウンタ118をゼロにリセットするとしてよい。一部の実施形態において、トランザクションの実行に失敗する度に、トラッキングロジック116が再試行カウンタ118をインクリメントするとしてよい。
【0041】
さらに
図1に図示しているように、メモリ部104は、スレッド毎のリードセットストレージ126およびスレッド毎のライトセットストレージ128を含む。ある実施形態において、これらのストレージは、トランザクション中にリードまたはライトされた値に関する情報を格納するとしてよい。これに加えて、各スレッドには対応するブルームフィルタ134および136が対応付けられているとしてよく、各ブルームフィルタは所与のリードセットストレージまたはライトセットストレージ(およびスレッド)に対応付けられている。さらに本明細書で後述するが、トランザクションの実行中、各リード処理および各ライト処理は、トランザクション中に所与のメモリアドレスにアクセスした旨を示すべく、対応するブルームフィルタにアノテートされるとしてよい。この情報はのちに、複数の並列に実行されているトランザクション間に少なくとも潜在的なコンフリクトが存在するか否かを判断するために用いられるとしてよい。
【0042】
さまざまな実施形態において、トランザクション管理モジュール106は、最終決定ロジック128を含むとしてよい。一部の実施形態において、最終決定ロジック128は、回路、他のハードウェアおよび/またはトランザクションが実行ロジック114によって実行された後コミットまたはアボートのいずれを行うべきかを判断する命令を含むとしてよい。さまざまな実施形態において、最終決定ロジック128は、任意の特定のトランザクションが別のトランザクションとの間でコンフリクトを発生させているか、またはコンフリクトを発生させる可能性がある場合に、当該トランザクションをアボートすべきと判断するとしてよい。一部の実施形態において、最終決定ロジック128は、トランザクションが並列なソフトウェアトランザクションとの間でコンフリクトを発生させる可能性があるか否かを、グローバルロック112を確認することによって、判断するとしてよい。さまざまな実施形態において、グローバルロック112がセットされており、トランザクションがハードウェアトランザクションである場合、最終決定ロジック128はこの後、共通部分ロジック124を参照して、ハードウェアトランザクションとソフトウェアトランザクションとの間に少なくとも潜在的なコンフリクトが存在するか否かを判断するとしてよい。このため、共通部分ロジック124は、それぞれのトランザクションを開始したスレッドのブルームフィルタ134および136にアクセスして、フィルタセットに共通部分が存在するか否かを判断するとしてよい。共通部分が存在する場合、少なくとも潜在的なコンフリクトが存在するので、共通部分ロジック124は、共通部分有りを最終決定ロジック128に報告するとしてよい。これに代えて、フィルタセットに共通部分があると示さない場合、共通部分無しが最終決定ロジック128に報告される。
【0043】
続いて、最終決定ロジック128は、共通部分が発見されればハードウェアトランザクションをアボートさせるとしてよく、共通部分が発見されない場合には、(他のコンフリクトが検出されないと仮定して)ハードウェアトランザクションのコミットを可能とする。
【0044】
一部の実施形態において、グローバルロック112がセットされておりトランザクションがソフトウェアトランザクションである場合、最終決定ロジック128は、トランザクションをコミットして、トラッキングロジック116にグローバルロック112を解放するよう命令するとしてよい。さまざまな実施形態において、グローバルロック112がセットされていない場合、最終決定ロジック128は、ハードウェアトランザクションをコミットして、トラッキングロジック116に再試行カウンタ118をクリアするよう命令するとしてよい。尚、フィルタセットが潜在的なコンフリクトを示すか否かを判断するための共通部分ロジック124とのやり取りは必要ない。
【0045】
一部の実施形態において、トランザクション管理モジュール106はアボートハンドラロジック130を含むとしてよい。さまざまな実施形態において、アボートハンドラロジック130は、回路、他のハードウェアおよび/または最終決定ロジック128が指示するトランザクションのアボートを取り扱うための命令を含むとしてよい。一部の実施形態において、アボートハンドラロジック130は、アボートされたトランザクションを次に試行する場合にハードウェアトランザクションまたはソフトウェアトランザクションのいずれとして実施すべきかを判断するとしてよい。さまざまな実施形態において、アボートハンドラロジック130は、トランザクションをアボートすべき理由は、別のトランザクションとのコンフリクトまたは潜在的なコンフリクトのためか、または、他の理由かを判断するとしてよい。トランザクションのアボートの理由が他の理由、例えば、不正命令、容量オーバーフロー、または、不規則メモリアクセスパターンによるキャッシュウェイ数オーバーフローである場合、アボートハンドラロジック130は、実行ロジック114がソフトウェアフェーズに直ちに進むべきと判断するとしてよい。トランザクションのアボートの理由が別のトランザクションとのコンフリクトまたは潜在的なコンフリクトである場合、アボートハンドラロジック130は、トランザクションが現在のフェーズを再試行すべきか、次のフェーズに進むべきかを、例えば、再試行数に基づいて判断するとしてよい。
【0046】
さまざまな実施形態において、アボートされたトランザクションを次に試行する場合ハードウェアトランザクションまたはソフトウェアトランザクションのどちらとして実施すべきかを判断するべく、アボートハンドラロジック130は、再試行カウンタ118と再試行しきい値120とを比較するとしてよい。一部の実施形態において、再試行カウンタ118が再試行しきい値120未満である場合、アボートハンドラロジック130は、ハードウェアトランザクションとしてトランザクションを再試行するよう実行ロジック114に命令するとしてよい。逆に以上である場合、アボートハンドラロジック130は、ソフトウェアトランザクションとしてトランザクションを再試行するよう実行ロジック114に命令するとしてよい。さまざまな実施形態において、トラッキングロジック116は、試行したトランザクションについてコミットが成功した回数および/または失敗した回数に基づき、再試行しきい値120の値を適応的に決定するとしてよい。
図1の実施形態ではこのように上位概念で図示しているが、本発明の範囲はこの点に限定されないと理解されたい。ハイブリッドトランザクショナルメモリシステムは、多くの異なる形態で実施され得ると共に、多数の変更例があるとしてよい。
【0047】
ここで
図2を参照すると、一実施形態に係るトランザクションの実行を説明するための上位概念を示すフローチャートが図示されている。
図2から分かるように、方法200によると、全てのトランザクションはハードウェアでハードウェアトランザクションとして実行を開始する(ブロック210)。実行中(ブロック215)、リード処理またはライト処理の度に、トランザクションは、リードまたはライトした各ロケーションを対応するスレッドのためのソフトウェアブルームフィルタに記録する。ハードウェアトランザクションは、クリティカルセクションの実行を終了した後(ブロック220)、存在する場合にはソフトウェアトランザクションとのコンフリクトを確認することによって、コミットしようと試みる。ハードウェアトランザクションは最初に、グローバルロックを獲得したか否かを確認する(ひし形225)。このロックが解放されている場合、ハードウェアトランザクションはコミットに成功するとしてよい(ひし形240で判断するが、アボートが行われていないと仮定)。当該ロックが獲得されている場合、ロックの値は当該ロックを保持しているスレッドのインデックスまたは識別子を示し、当該スレッドがソフトウェアトランザクションを実行していることが分かる。
【0048】
この場合、ハードウェアトランザクションはひし形230に進んで、ソフトウェアトランザクションを実行しているスレッドのブルームフィルタにアクセスしてコンフリクトがあるか否かを判断する。より具体的には、ひし形230において、2つのフィルタの間で共通部分演算を実行して、2つのブルームフィルタのエントリまたはフィールドに共通部分があるか否か(例えば、両方がアクティブ値または論理値「1」を持つか否か)を判断するとしてよい。共通部分がある場合、ハードウェアトランザクションはアボートして、ひし形270に進み、所与のハードウェアトランザクションの再試行数が設定可能な回数Nに到達したか否かを判断する。尚、トランザクションをアボートする際にさまざまなステップ、例えば、バッファ等、スレッドに対応付けられているストレージ内の全ての更新後の値をフラッシュすること等を実施し得ることに留意されたい。
【0049】
これに代えて、ブルームフィルタ間に共通部分はないと判断される場合、ひし形240に進んで、例えば、他の理由でトランザクションがアボートされたか否かを判断する。アボートされていない場合、ブロック250に進み、トランザクションをコミットする。コミットについて、ハードウェアトランザクションは、ハードウェアトランザクション実行中には所与のスレッドにのみ可視となるバッファ内に格納されていた更新値でメモリを更新するとしてよい。
【0050】
さらに、トランザクションをアボートするか否かに関する判断は
図2の実施形態において特定の位置にあるひし形240で図示されているが、ハードウェアトランザクションは、他の種類のコンフリクトまたはトランザクション中にアボートするべき他の理由を検出するコンフリクト検出ロジックを用いて、実行中の任意のタイミングでアボートすることが可能であると理解されたい。しかし、図示を簡略化するべく、ひし形240は
図2に示す位置に表示していると理解されたい。
【0051】
さらに
図2を参照しつつ説明すると、ひし形270において再試行数がしきい値Nに到達していないと判断される場合、ブロック280に進み、再試行数をインクリメントして、ブロック210に戻りハードウェアトランザクションを再度開始する。これに代えて、再試行数が再試行しきい値Nに到達した場合、ひし形270からブロック260に進み、ソフトウェアトランザクションモードに実行を切り替えるとしてよい。より具体的には、許可されるソフトウェアトランザクションの数は1つのみであるこの実装例において、こうしてトランザクションをソフトウェアトランザクションモードで実行して完了させ、ブロック250においてトランザクションをコミットさせる。
【0052】
ブルームフィルタによって、ソフトウェアトランザクションとハードウェアトランザクションの間のコンフリクト検出が保証される。ハードウェアトランザクション間のコンフリクトの検出および解決は、ハードウェアトランザクショナルメモリシステムによって保証される。ある実施形態において、単一グローバルロックによって、どのタイミングでも実行中のソフトウェアトランザクションの数は1つのみとなることが保証されるので、ソフトウェアトランザクション間について追加でコンフリクト検出メカニズムを設けることはない。
【0053】
図3は、一実施形態に係る、ハードウェアトランザクションおよびソフトウェアトランザクションの間のタイミングとして可能な例を示す。ケース310では、ソフトウェアトランザクションが最初に変数Xを更新し、この後で、ハードウェアトランザクションが同じ変数Xを異なる値に更新する。ハードウェアトランザクションがコミットしようと試みる場合、二重アクセスを特定するフィルタセット共通部分特定を実行するので、コンフリクトが発見され、ハードウェアトランザクションをアボートする。ケース320でも同様の処理を実行する。しかし、ケース330およびケース340では、ハードウェアトランザクションをコミットする時点において、ソフトウェアスレッドは既にコミットしており、単一グローバルロックを解放している。このため、ハードウェアスレッドがこのロックを確認すると、解放されたことが分かるので、トランザクションのコミットに成功するとしてよい。
【0054】
ケース330およびケース340では、ハードウェアトランザクションがコミットしようと試みたタイミングにおいてロックは解放されている。これは、並列に実行されているソフトウェアトランザクションはないことを意味する。重複するソフトウェアトランザクションがあったとしても、この時点までには既にコミットされており、ハードウェアトランザクションの前にシリアル化される。ソフトウェアトランザクションが、ハードウェアトランザクションの後にシリアル化した複数のコンフリクトする処理を実行した場合、ハードウェアトランザクションは、(ハードウェアコンフリクト検出メカニズムによって)コンフリクトのタイミングにおいてアボートされていたであろう。このため、ロックが解放されている場合にハードウェアトランザクションのコミットを可能とすることで、動作が正常になる。
【0055】
これに代えて、(ケース310およびケース320のように)ハードウェアトランザクションがコミットしようと試みる場合にロックが獲得されている場合、並列ソフトウェアトランザクションを実行する。コミットしようとするハードウェアトランザクションは、このソフトウェアトランザクションの前にシリアル化される。これは、ソフトウェアトランザクションによって実行される複数の処理が今後コンフリクトする可能性があるためである。しかし、ソフトウェアトランザクションは、1または複数のメモリロケーションにおいて、ハードウェアトランザクションがこれらのロケーションのトラッキングを開始する前に、複数のコンフリクトする処理を実行していた可能性がある。このため、ソフトウェアトランザクションの前にハードウェアトランザクションをシリアル化するのは、誤った動作であろう。このため、実施形態ではこのケースと判断するべくブルームフィルタを利用する。
【0056】
ソフトウェアブルームフィルタは、ソフトウェアトランザクションが今後アクセスする全てのロケーションを含んでいるわけではなく、トランザクションが既にアクセスしたロケーションのみを含むことに留意されたい。それにも関わらず、今後のアクセスはコミットされたハードウェアトランザクションの後に正しくシリアル化される。このため、ブルームフィルタに共通部分が無い場合、ハードウェアトランザクションは、ソフトウェアトランザクションの前に正しくシリアル化することができ、コミットが許可され得る。ブルームフィルタがコンフリクトを特定する場合、コンフリクトする処理は最初にソフトウェアトランザクションで発生し、その後ハードウェアトランザクションで発生した。そうでなければ、ハードウェアトランザクションはアボートされていたであろう。この場合、ハードウェアトランザクションは、ソフトウェアトランザクションの前にシリアル化することはできず、アボートされる。このため、実施形態は正しくこれらのコンフリクトを特定し、ハードウェアトランザクションをアボートする。ある実施形態において、ブルームフィルタはコンフリクトが有ると誤って報告する可能性がある(偽陽性が区別不可能)ことに留意されたい。このため、ハードウェアトランザクションはこれらの場合にもアボートされてしまう。しかし、ブルームフィルタは偽陰性にはならないので、全てのコンフリクトが特定され回避される。
【0057】
ある実施形態において、高効率なブルームフィルタ実装によって、挿入および積集合演算を定数時間(O(1)time)で実行することが可能となり、オーバーヘッドが最小限に抑えられる。さらに、ハードウェアトランザクションはグローバルロックおよびソフトウェアブルームフィルタをコミットの直前にリードするのみであり、ソフトウェアトランザクションがこれらのロケーションを変更するので、ハードウェアトランザクションをアボート可能なウィンドウが減る。ある実施形態では、ロックおよびブルームフィルタのリードのためには、トランザクションのリードセットに追加キャッシュラインを2つ追加するのみであるとしてよい。一部の実施形態において、これを最適化して、ブルームフィルタの1ビットを用いてロックが獲得されたか否かを指定し、ブルームフィルタの残りをブルームフィルタとして用いるとしてよい。このような実装例では、ロックのロケーションが両方の目的を実現することが出来、ハードウェアトランザクションのリードセットサイズに追加されるのは1つのロケーションのみに減る。トランザクション自身のブルームフィルタによって、追加キャッシュラインがライトセットに追加されるが、ある実装例において、ブルームフィルタサイズによっては1つのキャッシュラインのみまで減らすことが可能である。
【0058】
ある実施形態を用いると、互いに素となるメモリアクセスに自身からアクセスし、且つ、大きいソフトウェアトランザクションが並列に実行されている多数の小さいハードウェアトランザクションは、コミットすることができる。この一例として、オープンアドレスハッシュテーブルを表すアレイを考えたい。スレッドは、このハッシュテーブルにおいてlookup(x)処理およびinsert(x)処理を実行するとしてよい。 占有率がしきい値に到達すれば、スレッドは、新しいアレイを割り当て、旧アレイから新アレイへ要素を再ハッシュすることによって、ハッシュテーブルのサイズを倍増すると決定する。探索(lookup)処理および挿入(insert)処理は、短いトランザクションであり、ほとんどの場合はハードウェアで成功するとしてよい。これとは違い、再ハッシュはソフトウェアトランザクションとして実行されるとしてよい(再ハッシュを実行するスレッドは単一グローバルロックを獲得する)。この場合、ソフトウェアトランザクションと複数の並列ハードウェアトランザクションとの間で正確にコンフリクトを検出することで、ハードウェアトランザクションとして実行される探索処理は旧アレイのデータを用いてコミットされ得る一方で、新アレイへの再ハッシュが実行される。さらに、旧アレイの終端付近で(つまり、まだ再ハッシュされていない部分で)発生するハードウェアトランザクションとして実行される挿入処理は、再ハッシュの間でもコミットが可能である。このため、実施形態によれば、長いソフトウェアトランザクションが並列に実行されている小さいハードウェアトランザクションをコミットさせることで、スループットが改善される。
【0059】
上述したようなブルームフィルタコンフリクト検出技術によって並列化が改善されるが、上述した実施形態では単一グローバルロックを利用していることを考えると、依然として非効率な点がある可能性がある。他の実施形態において、複数のハードウェアトランザクションおよび複数のソフトウェアトランザクションを並列に実行してコミットさせることが可能になるトランザクショナルメモリシステムが提供されるとしてよい。概して、キャッシュベースのハードウェアトランザクショナルメモリシステムをハードウェアコンポーネントに用いるとしてよく、無効化ベースのソフトウェアトランザクショナルメモリシステムをソフトウェアコンポーネントに用いるとしてよい。これらの実施形態は、前進を保証することは変わらないまま、複数のハードウェアトランザクションが複数のソフトウェアトランザクションと並列に実行可能となるハイブリッドトランザクショナルメモリシステムを提供する。
【0060】
ここで
図4を参照すると、本発明の一実施形態に係るハイブリッドトランザクショナルメモリシステムを説明するためのブロック図である。
図4に示すように、HTMシステム400は、複数のハードウェアトランザクションモードおよび複数のソフトウェアトランザクションモードを可能とする。
図4に示す実装例において、トランザクションは、本明細書ではライトハードウェア(LiteHW)トランザクションモードと呼ばれる第1のハードウェアトランザクションモード410で開始される。オーバーフローまたはサポートされていない命令が発生する場合、トランザクションは直ちに別の種類のトランザクションモードにアップグレードされる。これに代えて、トランザクションが他の理由で(例えば、コンフリクトのため)アボートされる場合、トランザクションは、本明細書ではブルームフィルタハードウェア(BFHW)モードと呼ばれる第2のハードウェアトランザクションモード420にアップグレードされる前に、複数回再試行される。トランザクションは、同様に複数回再試行した後でもコミットしない場合、本明細書において投機的ソフトウェア(SpecSW)モードと呼ばれる第1のソフトウェアトランザクションモード430に更新される。このモードでは再度、本明細書では取り消し不能ソフトウェア(IrrevocSW)モードと呼ばれる第2のソフトウェアトランザクションモード440にアップグレードする前に、トランザクションを複数回再試行するとしてよい。
図4では特定のモードおよびやり取りを図示しているが、実施形態はこれに限定されないと理解されたい。
【0061】
大半のトランザクションが短く、TMがサポートしているキャッシュ空間に収まるメモリにアクセスし、サポートされていない命令は含んでいない場合、これらのトランザクションは、ソフトウェアトランザクションと同期する必要はなく、ハードウェアでそのまま成功し得る。大半の軽量型のトランザクションは第1のハードウェアトランザクションモード(LiteHW)である。このタイプのトランザクションは、リードおよびライトについてアノテートすることなく実行され、コミットしようと試みるタイミングで実行されているソフトウェアトランザクションが無い場合にはコミットに成功し得る。このタイプのトランザクションは単純で高速であるが、ソフトウェアトランザクションとの並列性はほとんど実現されない。
【0062】
第2のハードウェアトランザクションモードであるBFHWは、ハードウェアトランザクションがリードおよびライトしたロケーションをソフトウェアブルームフィルタを用いて記録し、並列に実行されるソフトウェアトランザクションとのコンフリクトを検出できるようにする。このタイプのトランザクションは、LiteHWトランザクションに比べるとオーバーヘッドが増加するが、並列に実行されているソフトウェアトランザクションが存在する場合でもコミットが可能である。ハードウェアトランザクションは、高速であるが、サポートされていない命令またはオーバーフローのためにベストエフォート型のHTMでは失敗する可能性がある。このため、ソフトウェアフォールバックを実施する。
【0063】
続いて、第1のソフトウェアトランザクションモード(SpecSW)は、投機的ソフトウェアトランザクションを実行する。投機的ソフトウェアトランザクションでは、トランザクションが、他のソフトウェアトランザクションおよびハードウェアトランザクションとの間でのコンフリクト検出のために、リードおよびライトしたロケーションをブルームフィルタに記録し、コミットフェーズにおける遅延更新のために全てのライトをハッシュテーブルに格納する無効化は、コミット後に実行されて、インフライトのコンフリクトしているトランザクションをアボートして、トランザクション毎にロックを用いて不透明性を保証する。 この第1のソフトウェアトランザクションモードでは、各リード処理を有効化して、ゾンビトランザクション(アボートされるであろうトランザクション)が矛盾する状態に到達しないようにする。
【0064】
最後に、第2のソフトウェアトランザクションモードであるIrrevocSWが全ての更新を(直接メモリに)実行して、アボートは出来なくなる。この性質のために、任意の所与のタイミングにおいて実行可能なIrrevocSWトランザクションは1つのみである。しかし、複数のSpecSWトランザクションおよびBFHWトランザクションを、一のIrrevocSWトランザクションと並列に実行することができる。
【0065】
複数のソフトウェアトランザクション間におけるコンフリクト検出は、上述したように、ブルームフィルタを用いて実現される。ソフトウェアトランザクションとハードウェアトランザクションとの間のコンフリクト検出もブルームフィルタを利用するが、エスケープ動作が無いベストエフォート型のHTMを用いるので、一般的にコンフリクトが検出されるとハードウェアトランザクションをアボートすることになる。この動作は、ハードウェアトランザクションの分離性が強いためである。ハードウェアがトラッキングするメモリロケーションはどれもコンフリクトが発生するので、ソフトウェアトランザクションが当該ロケーションにアクセスしてコンフリクトが発生する場合にはハードウェアトランザクションをアボートする。さらに、ハードウェア更新は、ハードウェアトランザクションがコミットするまでは、他のスレッドには可視状態とならない。
【0066】
実施形態はハードウェアトランザクションとソフトウェアトランザクションとの間のコンフリクト検出を、ハードウェアトランザクションがコミットする後まで延期する。ハードウェアトランザクションはこの後、全てのインフライトのコンフリクトしているソフトウェアトランザクションを無効化(インバリデート)するコミット後フェーズを実行する。ハードウェアトランザクションは既にコミットされているので、ブルームフィルタ情報を他のスレッドと共有しても、当該ハードウェアトランザクションがアボートされることはない。
【0067】
各トランザクションは、ソフトウェアトランザクションかハードウェアトランザクションかに関わらず、複数のフェーズを経る。各フェーズにおける動作は、トランザクションの種類によって決まる。最初のフェーズは、トランザクションが開始される開始フェーズである。ハードウェアトランザクションは開始ハードウェアトランザクション命令を呼び出すが、ソフトウェアトランザクションは開始アドレスに関する情報を記録して、少なくとも1つのソフトウェアトランザクションが存在する旨を示すフラグ(例えば、sw_existsフラグ)等の指標を利用して他のスレッドに自分の存在を通知する。
【0068】
実行フェーズでは、リード処理およびライト処理をアノテートし、この動作は実行しているトランザクションの種類によって決まる。LiteHWトランザクションを除く全ての種類のトランザクションで、アクセスしたロケーションをブルームフィルタに記録する。
【0069】
アボートフェーズでは、ハードウェアによって自動的にハードウェアアボートを取り扱う。ソフトウェアトランザクションの場合、ソフトウェアはトランザクション実行中に記録した情報をクリアして、開始フェーズで格納されたアドレスから再度開始する。
【0070】
コミットフェーズでは、トランザクションがコミットされれば、コンフリクト検出を実行して、メモリ更新を実行する。実装方法はトランザクションの種類に応じて決まる。
【0071】
コミット後フェーズにおいて、トランザクションは無効化を実行するとしてよい。このフェーズはトランザクションが既にコミットしておりライトセットロケーションでメモリを更新した後に実行されることに留意されたい。このフェーズにより、コミットしたばかりのトランザクションとコンフリクトしているインフライトのソフトウェアトランザクションが全てアボートされることが保証される。
【0072】
簡単に先述したが、第1のハードウェアモードであるLiteHWは、追加で発生するソフトウェアオーバーヘッドが無視可能なレベルであり、全てハードウェアで実行されるので、最も単純で最も高速なタイプである。LiteHWトランザクションは、ソフトウェアトランザクションが無い場合にのみコミット可能である。
図5は、一実施形態に係るこのようなトランザクションの実行を説明するためのフローチャートである。方法500は、例えば、ユーザレベルハードウェアトランザクション開始命令によって、ハードウェアトランザクションの実行を開始する(ブロック510)。次に、トランザクションボディを実行する(ブロック520)。このクリティカルセクションの実行では、リードまたはライトをどれも記録しない。トランザクションは、コミットしようと試みる場合(ブロック530)、現在実行中のソフトウェアトランザクションが存在するか否かを(例えば、sw_existsフラグを確認することで(ソフトウェアトランザクション実行中であれば、sw_exists!=0))確認する(ひし形540)。並列に実行されているソフトウェアトランザクションが存在する場合、ひし形550に進み、再試行しきい値(M)に到達したか否かを判断する。到達していない場合、ブロック555に進み、再試行カウントをインクリメントする。次に上述したブロック510に戻る。逆に、トランザクションの再試行がしきい値に等しい回数だけ行われていた場合、ブロック558に進み、トランザクションは第2のハードウェアトランザクションモードであるBFHWモードに切り替わる。
【0073】
ひし形540において実行中のソフトウェアトランザクションが無いと判断される場合(sw_exists=0)、ひし形560でトランザクションがアボートされていないと仮定して、トランザクションはコミットに成功する。LiteHWはハードウェアトランザクションであるので、当該トランザクションのコミットは瞬時に行われるとしてよい(ブロック565)。トランザクションが、実行中の任意の時点でハードウェアコンフリクト検出メカニズムによってアボートされる場合、アボートハンドラは、ハードウェアがセットするアボートステータスを確認して、同じモードでこのトランザクションを再試行するか否か(最大でM回)、または、SpecSW(ブロック570)に切り替わるか否か(例えば、アボートがオーバーフローを理由として発生した場合)、または、IrrevocSW(ブロック580)に切り替わるか否か(例えば、アボートが入出力命令等のサポートされていない命令によって発生した場合)を判断する。
【0074】
図6は、LiteHWトランザクション501の複数のフェーズをより詳細に説明するための図である。開始フェーズにおいて、トランザクションは開始ハードウェアトランザクション命令を実行する(例えば、txbegin命令)。実行中、OnReadハンドラおよびOnWriteハンドラ(ブルームフィルタをアクセスで更新するライブラリベースのハンドラ等のハンドラ)は空である。OnAbortハンドラは、再試行回数をインクリメントして、当該トランザクションをLiteHWトランザクションとして再試行するか、または、異なるモードに切り替えるか、を再試行回数およびアボート理由に基づいて判断する。最後に、コミットフェーズは、同様にハードウェアで実行されるが、sw_existsフラグを確認して、ハードウェアトランザクション終了命令(例えば、txend命令)を呼び出す。この種類のトランザクションには、コミット後フェーズは無い。
【0075】
図7は、一実施形態に係るBFHWトランザクションの実行を説明するためのフローチャートである。方法600は、例えば、ユーザレベルハードウェアトランザクション開始命令によって、ハードウェアトランザクションの実行を開始する(ブロック610)。次に、トランザクションボディを実行する(ブロック620)。実行中、トランザクションは、リードまたはライトされたメモリロケーションをリードブルームフィルタおよびライトブルームフィルタに記録する。トランザクションは、コミットしようと試みる場合(ひし形630)、コミットロックが獲得されているか否かを確認する(ひし形640)。当該ロックが解放されている場合、且つ、アボートが発生していないと仮定する場合(ひし形660で判断)、トランザクションは自身のハードウェアトランザクションロックを取得して(ブロック670)、コミットする(ブロック675)。
【0076】
トランザクションロックが獲得されている場合、ソフトウェアトランザクションが現在コミットしている最中である。ある実施形態において、この場合にすべき最も単純なことはアボートである。これは、ハードウェアトランザクションは、コミット中のソフトウェアトランザクションとの間で、コンフリクトするメモリ更新を持つ場合があるためである。このケースは、後述する
図8により詳細に示す。
【0077】
しかし、ハードウェアトランザクションは、ソフトウェアトランザクションがコミットしている間に、コミット中のソフトウェアトランザクションとの間にコンフリクトが無ければ、コミットすることが可能である。これは、ブルームフィルタを比較することに基づいて判断し得る。このハードウェアトランザクションモードの動作を最適化すると、コミットロックが獲得されていることが分かれば、コミット中のソフトウェアトランザクションのブルームフィルタを確認する。ブルームフィルタがコンフリクトを示している場合、ハードウェアトランザクションはアボートする。コンフリクトを示していない場合、(上述したように自身のトランザクションロックを取得した後)コミットしてよい。このケースは
図9に示す。
【0078】
LiteHWと同様に、OnAbortハンドラは、複数のソフトウェアモード(例えば、ブロック658および690)のうちいずれか1つに上がるか否か、または、再試行回数がしきい値数に到達したか否か(ひし形650)を判断する。到達していなければ、ブロック655で再試行回数をインクリメントして、ブロック610でトランザクションを再度開始する。
【0079】
ライトされたトランザクショナルメモリは、全てハードウェアでコミットされる。最初に、トランザクションは、コミットロックおよびソフトウェアブルームフィルタ(コミットロックが獲得されている場合)を確認することによって、コミット可能か否かを判断する(ひし形650)。コンフリクトが無い場合(コミットロックが解放されているか、または、ハードウェアトランザクションのブルームフィルタとソフトウェアトランザクションのブルームフィルタとの間に共通部分が無い場合)、ハードウェアトランザクションは、自身のトランザクションロックを取得する(ブロック675において)(
図8および
図9においてtlockと図示する)。このトランザクションロックは、所有主であるハードウェアトランザクションのみが取得するので、当該トランザクションが取得しようと試みる場合は常に解放されている。しかし、より詳細に後述するが、トランザクションロックは、コミットフェーズを開始するソフトウェアトランザクションとの競合を防ぐために用いられる。
【0080】
トランザクションがアボートされる場合、当該トランザクションのロックは、投機的ライトセットの一部であるので、自動的に解放されることに留意されたい。さらに、ロックにライトされる値は、ハードウェアトランザクションが変更をメモリにコミットした場合にのみ他のスレッドに見えるようになる。ロックが獲得された後であって、変更がメモリにコミットされる前に、別のスレッドがこのロケーションを確認する場合、ハードウェアトランザクションはアボートされる。これによって競合は発生し得ないよう保証される。
【0081】
図7を参照しつつ説明を続けると、ブロック675においてコミットした後、コミット後フェーズがこの第2のハードウェアトランザクションモードについてソフトウェアで実行される。コミット後フェーズは、ハードウェアトランザクションが変更をメモリにコミットした後に行われる。図から分かるように、コミット後の処理は、コンフリクトするソフトウェアトランザクションを無効化することを含む(ブロック680)。この時点において、ハードウェアトランザクションは既にコミットされているが、当該ハードウェアトランザクションとコンフリクトするソフトウェアトランザクションは全て確実にアボートされることに留意されたい。これは、ハードウェアトランザクションのブルームフィルタを、全てのインフライトのソフトウェアトランザクションのブルームフィルタに対して確認することによって実現される。コンフリクトが検出されれば、ソフトウェアトランザクションをアボートする。無効化プロセスを終了した後、ハードウェアトランザクションはロックをリセットする。
【0082】
図8は、開始フェーズ、実行フェーズ、コミットフェーズおよびコミット後フェーズを含む基本的なブルームフィルタベースハードウェアトランザクション601をさらに詳細に説明するための図である。図から分かるように、実行中、リードおよびライトを対応するリードブルームフィルタおよびライトブルームフィルタに追加する。しかし、他の実施形態では、一のブルームフィルタをリードセットおよびライトセットの両方に利用し得ると理解されたい。続いて、コミットロックが獲得されているか否かを判断する。コミットロックが獲得されている場合、この単純実装例では、トランザクションはアボートされる。コミットロックが解放されている場合、トランザクションロックを獲得して、トランザクションライトをコミットする。この後コミット後フェーズにおいて、ブルームフィルタ共通部分演算を実行して、全てのコンフリクトするソフトウェアトランザクションをアボートし、この後でトランザクションロックを解放する。
【0083】
図9は、開始フェーズ、実行フェーズ、コミットフェーズおよびコミット後フェーズを含む、最適化されたブルームフィルタベースハードウェアトランザクション602さらに詳細に説明するための図である。この場合、コミットロックが獲得されている場合、ブルームフィルタ共通部分演算を用いてコンフリクトを検出して、コンフリクトが存在するか否かを判断し、コンフリクトが存在しない場合にはハードウェアスレッドをコミットし、コンフリクトが存在する場合にはトランザクションをアボートするとしてよい。その他の点については、
図8の処理と同様である。
【0084】
図10は、一実施形態に係る投機的ソフトウェアトランザクションの実行を説明するためのフローチャートである。方法700は、ソフトウェアトランザクションの実行を開始する(ブロック710)。続いて、トランザクションボディを実行する(ブロック720)。図から分かるように、実行中、リードロケーションおよびライトロケーションをブルームフィルタに記録する。コミットの際(ブロック730)、トランザクションはコミットロックを取得して(ブロック740)、コンテンションマネージャを参照し(ブロック760)(ハードウェア、ソフトウェア、ファームウェアまたは他のロジックあるいはこれらの組み合わせで実装され得る)、コミットすべきかアボートすべきかを判断する(コンフリクトするインフライトのソフトウェアトランザクションは継続して実行するとしてよい)。コンテンションマネージャがトランザクションをアボートすると判断する場合、トランザクションはコミットロックを解放して、ひし形790で決定されるように再試行数に応じて、SpecSWトランザクションとして再試行する。このしきい値未満である場合、ブロック792で再試行カウンタをインクリメントして、トランザクションを投機的ソフトウェアトランザクションモードで再度実行する(ブロック710)。しきい値を超えている場合、ブロック795でトランザクションを取り消し不能ソフトウェアトランザクションモードに切り替える。
【0085】
一方、トランザクションがコミット可能である場合、取り消し不能ロックを取得して(ブロック765)、変更をメモリにコミットして(ブロック770)、インフライトのコンフリクトするソフトウェアトランザクションを無効化し(ブロック775)、ロックを解放する(ブロック780)。
【0086】
SpecSWトランザクション実行をさらに詳細に
図11で示す。図から分かるように、投機的ソフトウェアトランザクション701は全てのフェーズをソフトウェアで実行する。
図11の実施形態では、メインボディ実行中、リードを有効化してリードブルームフィルタに追加し、ライトをライトブルームフィルタに追加する。更新後の値をハッシュテーブルまたはその他の一時的ストレージにライトすることによって、遅延更新を実行し得ることに留意されたい。コミットフェーズ中、トランザクションは、コミットが許可されていると仮定して、取り消し不能ロックを取得し、メモリを更新する。コミットが許可されていない場合、トランザクションは、ロックを解放してトランザクションを再度開始する。そして、コミット後フェーズにおいて、トランザクションは無効化を実行して、両ロックを解放する前に、全てのコンフリクトするソフトウェアトランザクションを無効化する。
【0087】
最後に、SpecSWトランザクションはBFHWのコミット中であっても正しく実行され得ることに留意されたい。BFHWのコミットの準備が整った時点でSpecSWトランザクションが既にコミットプロセスを開始している場合、BFHWトランザクションは、コミットロックが獲得されていることを観察して、コンフリクトが存在するか否か確認するべく自分のブルームフィルタをソフトウェアブルームフィルタに対して確認する。 コンフリクトが無い場合、ハードウェアトランザクションはコミット可能であり、コンフリクトが存在する場合には、BFHWをアボートする。
【0088】
しかし、SpecSWトランザクションがコミットフェーズを開始する前にBFHWがコミットロックを確認する場合、2通りのシナリオのうちいずれかとなる。BFHWハードウェアトランザクションがコミットする前にコミットロックを変更する(この結果、ハードウェアトランザクションがアボートされ、潜在的なコンフリクトが無くなる)か、または、BFHWハードウェアトランザクションがコミットした後にコミットロックを変更する。投機的ソフトウェアトランザクションは、ハードウェアトランザクションとの間にコンフリクトが有るか否かを確認しないので、コミットされたばかりのハードウェアトランザクションとの間のコンフリクトを見逃す可能性があり、変更をメモリにコミットし始める可能性がある。このシナリオを回避するべく、全てのSpecSWトランザクションは、コミットロックを取得した後に全てのハードウェアトランザクションのロックを確認して、ハードウェアトランザクションのロックが解放されるまで待機する。トランザクションロックが解放された場合にSpecSWトランザクションが依然として有効である場合、コミットされたハードウェアトランザクションのいずれとの間にもコンフリクトが無かったことになる。
【0089】
ここで
図12を参照すると、取り消し不能ソフトウェアトランザクションであるIrrevocSWの実行を説明するためのフローチャートが図示されている。
図12から分かるように、方法800はトランザクションの開始フェーズで開始される(ブロック810)。次に、トランザクションは取り消し不能ロックおよびコミットロックの両方を取得する(ブロック820)。この後、主要部分であるトランザクションボディをブロック830で実行するとしてよい。取り消し不能ソフトウェアトランザクションについて、全ての更新を(直接メモリに対して)実現するので、トランザクションは、シリアル化を保証するべく、実行を開始するとすぐに取り消し不能ロックおよびコミットロックの両方を取得することに留意されたい。次に、トランザクションをコミットする(ブロック840)。この後、例えば、ブルームフィルタセットの共通部分に基づき、コンフリクトするソフトウェアトランザクションを無効化する(ブロック850)。最後に、両方のロックを解放する(ブロック860)。
【0090】
図13は、一実施形態に係る、取り消し不能ソフトウェアトランザクション801をさらに詳細に説明するための図である。実行開始時において、両方のロックを取得してソフトウェアフラグをセットすることに留意されたい。メインボディにおいて、直接更新を利用するが、リードおよびライトを対応するブルームフィルタに追加して、コンフリクトするソフトウェアトランザクションについて後で無効化できるようにする。ある実施形態において、取り消し不能トランザクションはアボートできないので、コミットフェーズは実質的にノーオペレーション(NOP)である。コミット後フェーズは投機的ソフトウェアトランザクションのコミット後フェーズと同様で、現在のトランザクションは既にコミットされているので、インフライトのコンフリクトするソフトウェアトランザクションを無効化する。
【0091】
ある実施形態において、投機的ソフトウェアトランザクションがコンテンションマネージャを用いて、コミットフェーズに至った場合にコミット可能であるか否かを判断する。コンテンションマネージャは、コミット中のトランザクションがコミットを許可されると全てのインフライトのトランザクションをアボートすると見なし、さまざまな要因に基づいて、アボートすべきどの一または複数のトランザクションについて前進を許可するか決定する。ある実施形態において、この決定は、さまざまな要因のうち、優先度、コミット中のトランザクションおよびコンフリクトしているトランザクションのリードセットサイズおよびライトセットサイズ、および、それぞれのスレッドのトランザクションの進み具合(例えば、それまでのコミット数)に基づいて行われるとしてよい。
【0092】
コミット後に無効化を実行することによって、新しいトランザクションはコミットフェーズ中に開始することが保証され、無効化プロセスが見逃すことはない。トランザクションの開始が遅すぎたことによって無効化プロセスがトランザクションを見逃すことがあれば、当該トランザクションの開始は、コミット中のトランザクションの無効化プロセスの後であったことになる。このため、当該トランザクションはコミット中のトランザクションがライトをコミットした後に開始された。これによって、新たに開始されたトランザクションの全てのリードは、コミット中のトランザクションの後にシリアル化され、一貫性を持つ。以下に示す表1は、一実施形態に係る無効化プロセスを疑似コードで表したものである。
【表1】
【0093】
リードそれぞれについて、当該リードを実行するトランザクションのためのライトセットの一部でない場合に、有効化を実行する。リードがライトセットの一部である場合、トランザクション用の更新後の値を格納しているハッシュテーブルから値が返され、有効化を実行する必要が無くなる。
【0094】
ある実施形態において、有効化は以下のように実行されるとしてよい。最初に、スレッドは、新しいリードロケーションをブルームフィルタに挿入して、当該ロケーションをリードする。この順序によって、コミット中のトランザクションの無効化プロセスが潜在的なコンフリクトを見逃すことが無くなる。リードロケーションの値は、リードされた後、別のトランザクションがコミットフェーズ中でメモリロケーションを更新中である可能性があるので、戻すのはまだ安全でない。現在のリードが更新直後のロケーションに対するものである場合、このリードを戻すとプログラム動作に誤りが生じる可能性がある。これは、現在のトランザクションの全ての他のリードはコミット中のトランザクションがメモリを更新する前からのものであるためである。
【0095】
この状況になることを回避するべく、まだライトされていないリード全てについて有効化コードを実行するとしてよい。このコードは、取り消し不能ロックが獲得されたか否かを確認するためのものであり、獲得されていれば、ソフトウェアトランザクションのブルームフィルタ(取り消し不能ロックの識別子で指定)をリードしてコンフリクトが存在するか否かを判断する。その間にロックが変更されれば、コンフリクトは有効化コードに気づかれない可能性がある。しかし、有効化終了時に、トランザクションは他のソフトウェアトランザクションによって無効化されたか否かを確認する。ロックがその間に解放されていれば、コミット中のトランザクションは無効化を終了していたはずであることを意味する。有効化が進行し、トランザクションがコミット中のトランザクションによって無効化されなかった場合、リードは安全である。
【0096】
ここで表2を参照すると、一実施形態に係る有効化プロセスの疑似コードが図示されている。
【表2】
【0097】
取り消し不能トランザクションは、実行開始と共に、コミットロックおよび取り消し不能ロックの両方を取得する。投機的トランザクションは最初に、コミットロックを取得して、コミット可能か否かに関してコンテンションマネージャを参照する。コンテンションマネージャがトランザクションのコミットを許可する場合、更新をメモリにライトする直前に取り消し不能ロックを取得する。
【0098】
コミット中のトランザクションは、取り消し不能ロックを自身のコミットフェーズの開始時から取得して、コミットロックを不要としてもよい。しかし、投機的トランザクションの有効化コードは、取り消し不能ロックが取得済みであることに基づいている。コミットロックが存在せず、取り消し不能ロックが、コンテンションマネージャを参照する前にコミットフェーズの開始時点で取得された場合、以下の状況になる可能性がある。リードを実行して有効化コードを実行するSpecSWトランザクションを考えられたい。当該トランザクションのリードが、コミット中のソフトウェアトランザクションとコンフリクトすることに気付くとする。このため、再度開始すると判断する。コミット中のトランザクションは、コンテンションマネージャを参照するが、(例えば、インフライトの高優先度のトランザクションがあるため)コミットは許可されない。このため、コミット中のトランザクションもアボートされる。しかし、他方のトランザクションは既にアボートされている。さらに、競合が発生する可能性があるので、コンテンションマネージャは、有効化中にアボートすると決断したばかりのトランザクションに基づいて、アボートを決断する。このため、2つのトランザクションが互いにアボートして、どちらも前進しない。
【0099】
コミットロックを用いてこの状況を回避するとしてよい。このため、コミット中のトランザクションは、コミットロックを取得し、コミットの許可が与えられた後で初めて、当該コミットロックを取り消し不能ロックにアップグレードする。有効化コードがトランザクションをアボートする唯一の理由は、取り消し不能ロックを持つ別のトランザクションとのコンフリクトが存在することである。このため、あるトランザクションが有効化によってアボートされる唯一の理由は、コミットすることが確実なトランザクションとのコンフリクトが存在することである。
【0100】
ハードウェアを用いて、複数の並列に実行されているハードウェアトランザクションに関して正確性を保証する。ハードウェアトランザクションは分離性が強く、メモリへの変更が他のスレッドにアトミックに見えるようになるのは、トランザクションがコミットした場合に限定される。さらに、コンフリクト検出をハードウェアで実装するので、コンフリクトの際には複数のトランザクションのうち1つがアボートされる。このため、複数のLiteHWトランザクションと複数のBFHWトランザクションとの間で正しいやり取りが行われるように保証させるためにさらにソフトウェアコンポーネントを設けることはない。
【0101】
並列に行われている複数のソフトウェアトランザクションの間のコンフリクト検出は、無効化方法を用いて保証される。全てのコミット中のトランザクションは、他のインフライトのソフトウェアトランザクションとの間のコンフリクトを確認し、コンフリクトが有ればそれらのトランザクションをアボートする。コミット中のトランザクションはコミットロックを保持するので、無効化プロセス中にはソフトウェアトランザクションはコミット出来ない。取り消し不能トランザクションは、アクティブになるとすぐにコミットロックを取得するので、他のソフトウェアトランザクションが取り消し不能になることは出来ず、実行中にコミットすることも出来ない。取り消し不能トランザクションは、コミットすると、さらにインフライトのコンフリクトしているトランザクションを無効化して、シリアル化可能な正確性が損なわれないようにする。
【0102】
ハードウェア−ソフトウェア間の正確性に関して、ある実施形態によると、LiteHWトランザクションはソフトウェアトランザクションと同時に実行可能であるが、ソフトウェアトランザクションが現在実行中であればコミットできない。これは、LiteHWトランザクションがアクセスしたメモリロケーションの記録を取らないためである。このため、LiteHWトランザクションとソフトウェアトランザクションとの間ではコンフリクト検出を実行できない。
【0103】
これとは対照的に、BFHWトランザクションは、アクセスするメモリロケーションをトラッキングするので、コンフリクト検出を実行することができる。さらに、BFHWトランザクションは、ソフトウェアトランザクションの実行中であっても、コミットできる。コミット中のソフトウェアトランザクションがBFHWトランザクションとコンフリクトする場合、後者が自動的にハードウェアによってアボートされる。コミット中のBFHWトランザクションがインフライトのソフトウェアトランザクションとコンフリクトしている場合、BFHWのコミット後フェーズ(無効化フェーズ)においてソフトウェアトランザクションをアボートする。さらに、ハードウェアトランザクションのブルームフィルタとソフトウェアトランザクションのブルームフィルタとをハードウェアトランザクションの終了時に比較することで十分である。このように、ハードウェアトランザクションのリードおよびライト毎にコンフリクト検出を行うことを回避できる。
【0104】
実施形態によればさらに、メモリの整合性も実現できる。並列処理されている複数のハードウェアトランザクションについて、ハードウェアトランザクションがコミットするまで更新は見えないので、ハードウェアによって自動的に不透明性が維持される。これによって、整合性が保証される。
【0105】
取り消し不能トランザクションが直接更新を用いて実行されている間、または、投機的トランザクションがライトバックを実行している間にハードウェアトランザクションがメモリロケーションをリードすることによって、非整合状態になり得る。しかし、ハードウェアトランザクションで発生する障害およびループによって、他のスレッドに目立つ影響を与えることなく、トランザクションをアボートさせて再度開始させる。
【0106】
上述したように、新たにリードが実行される度に有効化コードを用いてソフトウェアトランザクション間では不透明性を保証する。このようにして、ソフトウェアトランザクションは、別のソフトウェアトランザクションによって発生した更新のために非整合状態にはなることはない。
【0107】
ソフトウェアトランザクションは、コミットされたばかりのハードウェアトランザクションによって修正されたメモリロケーションをリードすることによって、非整合状態になる可能性がある。ある実施形態において、当該ソフトウェアトランザクションは、コミットが許可されず、ハードウェアトランザクションのコミット後フェーズで無効化される。しかし、当該ソフトウェアトランザクションは、非整合状態のデータをリードした結果、無効化されたことに気付く前に不正状態になる場合がある。
【0108】
この状況を回避するべく、ある実施形態において、ソフトウェアサンドボックスをSpecSWトランザクションに提供するとしてよい。これに代えて、ハードウェアコミット後カウンタを用いてソフトウェアトランザクションについて不透明性を実現するとしてよい。この場合、当該カウンタは、BFHWモードでコミットしたばかりで現在はコミット後フェーズのハードウェアトランザクションの数をカウントする。BFHWトランザクションは、ハードウェアトランザクションをコミットする前にストア処理を用いて当該カウンタをインクリメントする。アトミック性が損なわれると、ハードウェアトランザクションはアボートされ、変更の記録は無くなる。コミット後フェーズが完了した後、BFHWトランザクションは、例えば、フェッチ置換命令を用いてコミット後カウンタをデクリメントする。このカウンタを用いることで、BFHWトランザクションが存在する場合にSpecSWトランザクションについて不透明性を実現することができる。これに続いて、SpecSWトランザクションは、このカウンタをリードして、ゼロに到達するまで待機した後に新しい値をリードセットに追加するとしてよい。これによって、SpecSWトランザクションがリードした全ての新しい値が、ハードウェアトランザクションのコミット後フェーズ以外でリードされるので、整合することが保証される(それ以外の場合、SpecSWトランザクションはBFHWトランザクションのコミット後フェーズ中は無効と記される)。さらに、BFHWトランザクションは、このコミット後カウンタを用いて、SpecSWトランザクションの整合性を保証し、さらに、SpecSWトランザクションとの間においてコミットフェーズ中の相互排除を保証するとしてよい(ある実施形態において、トランザクション毎のロックを使用しない)。
【0109】
コミットロックがソフトウェアトランザクションのコミットフェーズおよびコミット後フェーズをシリアル化することに留意されたい。しかし、ハードウェアトランザクションは、並列にコミット中のソフトウェアトランザクションおよびハードウェアトランザクションについて、シリアル化されない。このため、ハードウェアトランザクションは、コミットして、同時に無効化を実行することができ、システムのスケーラビリティおよび実用性が改善される。
【0110】
ここで
図14を参照すると、別の実施形態に係る装置を示すブロック図である。
図14に示すように、装置100´は、
図1に基づき上述した装置100と同様の回路、コンポーネントおよびロジックを備える。実際には、多くのシステム実装例において、ハイブリッドトランザクショナルメモリシステムは、単一グローバルロックを実装する実施形態に係る場合(例えば、
図2に基づき上述)でも、複数のロックおよび複数のソフトウェアモードトランザクションモードを実装するシステム(例えば、
図4に基づき上述)であっても、同一ハードウェアで実行するとしてよい。
【0111】
説明を簡略化するべく、
図14の実施形態において
図1と同一のコンポーネント、回路およびロジックについては説明を省略する。これに代えて、以下の説明では、ハイブリッドトランザクショナルメモリのトランザクションを複数のハードウェアトランザクションモードおよび複数のソフトウェアトランザクションモードで実行できるようにする装置100´の相違点に重点を置く。図から分かるように、単一グローバルロックの代わりに、コミットロック112および取り消し不能ロック113を設けて、トランザクションモードに応じて、トランザクション内の複数の異なるタイミングで、複数の異なるソフトウェアトランザクションがこれらのロックを取得できるようにする(言うまでもなく、他の実施形態では追加のロックまたは異なるロックが存在し得ると理解されたい)。これに加えて、複数の再試行カウンタ118を提供するとしてよい。各再試行カウンタには所与のトランザクションモード再試行カウントが対応付けられている。そして同様に、複数の再試行しきい値120をさらに設ける。
【0112】
図14をさらに参照しつつ説明を続けると、トランザクション管理モジュール106はさらに、上述したように、コミット後無効化を実行するよう構成されている無効化ロジック125を有する。概して、装置100´およびシステム140´の残りの部分は
図1と同一である。
図4から
図13を参照しつつ説明したようなハイブリッドトランザクショナルメモリシステムで実行される追加の機能および処理を考えて、さまざまなロジックコンポーネントの実装には幾つか相違点があることに留意されたい。さらに、
図14では上位概念で図示しているが、多くの変更例および代替例が可能であると理解されたい。
【0113】
以下に記載する例はさらなる実施形態に関する。
【0114】
例1において、装置は、プロセッサと、トランザクショナルメモリシステムにおいて、第1のソフトウェアトランザクションモードの少なくとも1つの第1のソフトウェアトランザクション、および、第2のソフトウェアトランザクションモードの第2のソフトウェアトランザクション、および、第1のハードウェアトランザクションモードの少なくとも1つのハードウェアトランザクション、および、第2のハードウェアトランザクションモードの少なくとも1つの第2のハードウェアトランザクションの並列実行を可能とする実行ロジックと、少なくとも1つのソフトウェアトランザクションが第1のソフトウェアトランザクションモードまたは第2のソフトウェアトランザクションモードで実行中である旨を示すべくフラグをアクティブ化するトラッキングロジックと、第2のハードウェアトランザクションモードの第1のハードウェアトランザクションの完了時に、第2のハードウェアトランザクションモードの第1のハードウェアトランザクションのフィルタセットが、実行中の少なくとも1つのソフトウェアトランザクションのフィルタセットとコンフリクトしているか否かを判断する共通部分ロジックと、コンフリクトが無い場合に第1のハードウェアトランザクションをコミットし、コンフリクトが有る場合に第1のハードウェアトランザクションをアボートする最終決定ロジックとを備える。尚、一部の実装例において、実行ロジック、トラッキングロジック、共通部分ロジックおよび最終決定ロジックのうち1または複数は、プロセッサ内に実装され得ることに留意されたい。また、上述したプロセッサはさまざまな手段を用いて実装可能であることにも留意されたい。一例を挙げると、プロセッサは、ユーザ機器タッチ起動デバイスに組み込まれているシステムオンチップ(SoC)を含む。別の例を挙げると、システムは、ディスプレイおよびメモリを備え、本明細書に記載した例のうち1または複数の例に係るプロセッサを含む。
【0115】
例2において、第2のハードウェアトランザクションモードにおいて、第1のハードウェアトランザクションは任意で、第1のハードウェアトランザクションのメモリアクセス毎に第1のハードウェアトランザクションのフィルタセットを更新する。
【0116】
例3において、第1のソフトウェアトランザクションモードにおいて、第1のソフトウェアトランザクションは任意で、第1のソフトウェアトランザクションの完了時に、第1のロックおよび第2のロックを取得し、トランザクショナルメモリシステムのトランザクショナルメモリを、ハッシュテーブルに格納されているライトデータで更新する。
【0117】
例4において、第1のソフトウェアトランザクションモードにおいて、第1のソフトウェアトランザクションのコミット後に、第1のソフトウェアトランザクションは任意で、第1のソフトウェアトランザクションモードの別のソフトウェアトランザクションを無効化する。
【0118】
例5において、第2のハードウェアトランザクションモードにおいて、第2のハードウェアトランザクションは任意で、第2のハードウェアトランザクションのコミットの前に、コミットロックおよびトランザクションロックを取得する。
【0119】
例6において、例4の第1のソフトウェアトランザクションは任意で、第1のソフトウェアトランザクションのフィルタセットと別のソフトウェアトランザクションのフィルタセットとの間に共通部分が存在する場合、別のソフトウェアトランザクションを無効化する。
【0120】
例7において、例3の第1のソフトウェアトランザクションモードにおいて、第1のソフトウェアトランザクションは任意で、実行中にリードデータを有効化する。
【0121】
例8において、上述した例のうち任意の1つの第2のソフトウェアトランザクションモードにおいて、第2のソフトウェアトランザクションの開始時に、第2のソフトウェアトランザクションは、第1のロックおよび第2のロックを取得して、第2のソフトウェアトランザクションモードにおける第2のソフトウェアトランザクションの実行中に、第2のソフトウェアトランザクションは、トランザクショナルメモリシステムのトランザクショナルメモリを直接更新する。
【0122】
例9において、方法は、トランザクショナルメモリシステムにおいてプロセッサによって、第1のスレッドのソフトウェアトランザクションおよび第2のスレッドのハードウェアトランザクションを並列に実行する段階と、ソフトウェアトランザクションの実行を示すべくグローバルロックをアクティブ化する段階と、ハードウェアトランザクションの完了時に、グローバルロックの状態を決定し、グローバルロックがアクティブの場合には第1のスレッドのフィルタセットと第2のスレッドのフィルタセットとの間に共通部分が存在するかを判断し、そうでない場合にはハードウェアトランザクションをコミットする段階とを備える。
【0123】
例10において、例9の方法は任意で、ソフトウェアトランザクションをコミットする段階と、ソフトウェアトランザクションの完了時にグローバルロックを非アクティブ化する段階とをさらに備える。
【0124】
例11において、例9または10の方法は任意で、ハードウェアトランザクション完了時にグローバルロックが非アクティブである場合にはフィルタセットの間に共通部分が存在するか否かを判断することなく、ハードウェアトランザクションをコミットする段階をさらに備える。
【0125】
例12において、例9−11のうち1つの方法は任意で、ハードウェアトランザクションによって、トランザクショナルメモリシステムのトランザクショナルメモリへのアクセスのアドレスを、第1のスレッドのフィルタセットに挿入する段階と、1または複数のハッシュ値でアクセスのアドレスをハッシュすることに基づいて第1のスレッドのフィルタセットの1または複数のフィールドを更新する段階とをさらに備える。
【0126】
例13において、例9−12のうち1つの方法は任意で、第1のスレッドのフィルタセットを第1のスレッドのライトセットに格納する段階をさらに備え、フィルタセットはブルームフィルタを含む。
【0127】
例14において、例13の方法は任意で、グローバルロックを第1のスレッドのフィルタセットに追加する段階と、フィルタセットの間に共通部分が存在するか否かを判断することに基づいてグローバルロックの状態を判断する段階とをさらに備える。
【0128】
例15において、例9−14のうち任意の1つの方法は任意で、ソフトウェアトランザクションにおいて第1のサイズから第2のサイズへとハッシュテーブルを並列に再ハッシュする段階と、ハードウェアトランザクションにおいてハッシュテーブルにアクセスし、並列に再ハッシュする段階の間にハードウェアトランザクションをコミット可能とする段階とをさらに備える。
【0129】
別の例に係る、命令を含むコンピュータ可読媒体は、上述の例のいずれかの方法を実行するためのものである。さらに別の例に係る装置は、上述の例のうち任意の1つの方法を実行する手段を備える。
【0130】
例16において、少なくとも1つのコンピュータ可読媒体は、実行されるとシステムに、トランザクショナルメモリシステムの第2のハードウェアトランザクションモードで第2のハードウェアトランザクションを実行させ、第2のハードウェアトランザクションの完了時に第2のハードウェアトランザクションをコミットさせ、 第2のハードウェアトランザクションのコミット後に、第2のハードウェアトランザクションと、第2のハードウェアトランザクションと並列に実行している少なくとも1つのソフトウェアトランザクションとの間にコンフリクトが存在する場合には、少なくとも1つのソフトウェアトランザクションを無効化させることが可能になる複数の命令を備える。
【0131】
例17において、例16の少なくとも1つのコンピュータ可読媒体は任意でさらに、実行されるとシステムに、第2のハードウェアトランザクションのコミット前に、コミットロックが取得されているかを判断させ、その場合、第2のハードウェアトランザクションとコミットロックを取得した第1のソフトウェアトランザクションとの間にコンフリクトが存在するか否かを判断させることが可能になる複数の命令を備える。
【0132】
例18において、例17の少なくとも1つのコンピュータ可読媒体は任意でさらに、実行されるとシステムに、第2のハードウェアトランザクションと第1のソフトウェアトランザクションとの間にコンフリクトが存在する場合、第2のハードウェアトランザクションをアボートさせることが可能になる複数の命令を備え、第2のハードウェアトランザクションのフィルタセットと、第1のソフトウェアトランザクションのフィルタセットとの間に共通部分が存在する場合にコンフリクトが存在すると判断される。
【0133】
例19において、例17の少なくとも1つのコンピュータ可読媒体は任意でさらに、実行されるとシステムに、第1のソフトウェアトランザクションがコミットロックを取得した後、1または複数のハードウェアトランザクションによって1または複数のトランザクションロックが取得されたかを判断させ、その場合には、1または複数のトランザクションロックが解放されるまで第1のソフトウェアトランザクションのコミットを遅延させることが可能になる複数の命令を備える。
【0134】
例20において、例17の少なくとも1つのコンピュータ可読媒体は任意でさらに、実行されるとシステムに、トランザクショナルメモリシステムの第1のハードウェアトランザクションモードにおいて第1のハードウェアトランザクションを実行させ、第1のハードウェアトランザクションの完了時に、少なくとも1つのソフトウェアトランザクションが並列に実行されているかを判断させ、その場合、第1のハードウェアトランザクションをアボートさせ、そうでない場合、第1のハードウェアトランザクションをコミットさせることが可能になる複数の命令を備える。
【0135】
例21において、例17の少なくとも1つのコンピュータ可読媒体は任意でさらに、実行されるとシステムに、第1のソフトウェアトランザクションの実行中に第1のソフトウェアトランザクションによるトランザクショナルメモリシステムのトランザクショナルメモリに対するリード処理を有効化させ、リード処理が有効化される場合、リード処理のロケーションを第1のソフトウェアトランザクションのフィルタセットに追加させることが可能になる複数の命令を備える。
【0136】
例22において、例17の少なくとも1つのコンピュータ可読媒体は任意でさらに、実行されるとシステムに、第2のソフトウェアトランザクションモードで第2のソフトウェアトランザクションを実行させ、これは、第2のソフトウェアトランザクションの実行開始時において第1のロックおよびコミットロックを取得することと、第2のソフトウェアトランザクションの実行中に1または複数のメモリロケーションを直接更新することとを含み、さらに第2のソフトウェアトランザクションの完了時に、第2のソフトウェアトランザクションをコミットさせ、第1のソフトウェアトランザクションモードの1または複数の並列に実行されているソフトウェアトランザクションを無効化した後、第1のロックおよびコミットロックを解放させることが可能になる複数の命令を備える。
【0137】
例23において、システムは、少なくとも1つのハードウェアトランザクションおよび少なくとも1つのソフトウェアトランザクションを並列に実行するハイブリッドトランザクショナルメモリロジックを有するプロセッサを備える。ハイブリッドトランザクショナルメモリロジックは、第1のハードウェアトランザクションモードにおいて第1のトランザクションを、第1のトランザクションがコミットされるまで、または、第1のトランザクションの再試行回数が第1のハードウェアトランザクションモードにおいて第1の回数しきい値になるまで実行した後、第1のトランザクションがコミットされない場合、第1のトランザクションを第1のソフトウェアトランザクションモードで実行するとしてよい。ハイブリッドトランザクショナルメモリロジックは、第1のハードウェアモードで実行される第1のトランザクションに対応付けられているフィルタセットと、第1のソフトウェアトランザクションモードで実行されている第2のトランザクションに対応付けられているフィルタセットとの間にコンフリクトが存在するか否かを判断する共通部分ロジックを含むとしてよく、コンフリクトに応じて、ハイブリッドトランザクショナルメモリロジックは、第1のハードウェアトランザクションモードにおける第1のトランザクションがコミットしないようにする。当該システムはさらに、プロセッサに結合されているトランザクショナルメモリを備える。
【0138】
例24において、ハイブリッドトランザクショナルメモリロジックは任意で、第1のトランザクションがコミットされるまで、または、第1のソフトウェアトランザクションモードにおいて第1のトランザクションの再試行回数が第2の回数しきい値になるまで、第1のソフトウェアトランザクションモードで第1のトランザクションを実行し、第2の回数しきい値に到達した後は、第1のトランザクションがトランザクショナルメモリを直接更新する第2のソフトウェアトランザクションモードで第1のトランザクションを実行するとしてよい。
【0139】
例25において、ハイブリッドトランザクショナルメモリロジックは任意で、第1のハードウェアトランザクションモードで実行する前に第2のハードウェアトランザクションモードで第1のトランザクションを実行し、ハイブリッドトランザクショナルメモリロジックは、第1のハードウェアトランザクションモードで第1のトランザクションを実行する前に、第3の回数しきい値まで第2のハードウェアトランザクションモードで第1のトランザクションを実行するとしてよい。
【0140】
例26において、ハイブリッドトランザクショナルメモリロジックは任意で、第1のトランザクションに、第1のソフトウェアトランザクションモードで実行中にリードデータを有効化させ、リードデータに対応付けられているアドレスに基づいて第1のソフトウェアトランザクションモードで実行されている第1のトランザクションに対応付けられているフィルタセットを更新させ、ライトデータでハッシュテーブルを更新させるとしてよい。
【0141】
例27において、例26のハイブリッドトランザクショナルメモリロジックは任意で、第2のソフトウェアトランザクションモードにおいて第2のトランザクションに、第2のトランザクションの開始時に第1のロックおよび第2のロックを取得させ、その後に第2のトランザクションの実行中にトランザクショナルメモリを直接更新させ、第1のソフトウェアトランザクションモードにおいて第1のトランザクションに、第1のトランザクションのコミット時に第1のロックおよび第2のロックを取得させ、その後にハッシュテーブルからのライトデータでトランザクショナルメモリを更新させ、第1のソフトウェアトランザクションモードで並列に実行されている少なくとも1つの他のソフトウェアトランザクションを無効化させるとしてよい。
【0142】
例28において、複数のトランザクショナルメモリトランザクションを実行するためのシステムは、トランザクショナルメモリシステムの第2のハードウェアトランザクションモードで第2のハードウェアトランザクションを実行する手段と、第2のハードウェアトランザクションの完了時に第2のハードウェアトランザクションをコミットする手段と、第2のハードウェアトランザクションのコミット後に、第2のハードウェアトランザクションと、第2のハードウェアトランザクションと並列に実行している少なくとも1つのソフトウェアトランザクションとの間にコンフリクトが存在する場合には、少なくとも1つのソフトウェアトランザクションを無効化する手段とを備える。
【0143】
例29において、例28のシステムは任意でさらに、第2のハードウェアトランザクションのコミット前に、コミットロックが取得されているかを判断し、その場合、第2のハードウェアトランザクションとコミットロックを取得した第1のソフトウェアトランザクションとの間にコンフリクトが存在するか否かを判断する手段を備える。
【0144】
例30において、例28のシステムは任意でさらに、第2のハードウェアトランザクションと第1のソフトウェアトランザクションとの間にコンフリクトが存在する場合、第2のハードウェアトランザクションをアボートする手段を備え、第2のハードウェアトランザクションのフィルタセットと、第1のソフトウェアトランザクションのフィルタセットとの間に共通部分が存在する場合にコンフリクトが存在すると判断される。
【0145】
例31において、例28のシステムは任意でさらに、第1のソフトウェアトランザクションがコミットロックを取得した後、1または複数のハードウェアトランザクションによって1または複数のトランザクションロックが取得されたかを判断し、その場合には、1または複数のトランザクションロックが解放されるまで第1のソフトウェアトランザクションのコミットを遅延させる手段を備える。
【0146】
例32において、例28のシステムは任意でさらに、トランザクショナルメモリシステムの第1のハードウェアトランザクションモードにおいて第1のハードウェアトランザクションを実行する手段と、第1のハードウェアトランザクションの完了時に、少なくとも1つのソフトウェアトランザクションが並列に実行されているかを判断する手段と、その場合、第1のハードウェアトランザクションをアボートし、そうでない場合、第1のハードウェアトランザクションをコミットする手段とを備える。
【0147】
例33において、例28のシステムは任意でさらに、第1のソフトウェアトランザクションの実行中に第1のソフトウェアトランザクションによるトランザクショナルメモリシステムのトランザクショナルメモリに対するリード処理を有効化する手段と、リード処理が有効化される場合、リード処理のロケーションを第1のソフトウェアトランザクションのフィルタセットに追加する手段とを備える。
【0148】
例34において、例28のシステムは任意でさらに、第2のソフトウェアトランザクションモードで第2のソフトウェアトランザクションを実行する手段であって、第2のソフトウェアトランザクションの実行開始時において第1のロックおよびコミットロックを取得する手段、ならびに、第2のソフトウェアトランザクションの実行中に1または複数のメモリロケーションを直接更新する手段を有する手段と、第2のソフトウェアトランザクションの完了時に、第2のソフトウェアトランザクションをコミットし、第1のソフトウェアトランザクションモードの1または複数の並列に実行されているソフトウェアトランザクションを無効化した後、第1のロックおよびコミットロックを解放する手段とを備える。
【0149】
上述した例についてはさまざまに組み合わせることが可能であると理解されたい。
【0150】
実施形態は、多くの異なる種類のシステムで利用するとしてよい。例えば、一実施形態では、通信デバイスは本明細書で説明したさまざまな方法および技術を実行するよう構成され得る。言うまでもなく、本発明の範囲は通信デバイスに限定されず、他の実施形態は、これに代えて、命令を処理する他の種類の装置、または、コンピューティングデバイスで実行されることに応じて当該デバイスに本明細書で説明した方法および技術のうち1または複数を実行させる命令を含む1または複数の機械可読媒体に関するとしてよい。
【0151】
実施形態は、コードで実装されるとしてよく、命令を格納している非一時的記憶媒体に格納されるとしてよい。当該記憶媒体は、上記の命令を実行させるようシステムをプログラミングするために用いるとしてよい。記憶媒体は、これらに限定されないが、フロッピー(登録商標)ディスク、光ディスク、ソリッドステートドライブ(SSD)、コンパクトディスクリードオンリーメモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RW)および光磁気ディスク等の任意の種類のディスク、リードオンリーメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)等のランダムアクセスメモリ(RAM)、消去可能プログラミング可能リードオンリーメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラミング可能リードオンリーメモリ(EEPROM)等の半導体デバイス、磁気カードまたは光カード、または、電子命令を格納するのに適した任意のその他の種類の媒体を含むとしてよい。
【0152】
本発明は限られた数の実施形態について説明してきたが、当業者であれば、数多くの変形および変更に想到するであろう。添付した請求項はそのような変形および変更も全て本発明の真の意図および範囲に含むことを意図している。