(57)【特許請求の範囲】
【請求項１】
プロセッサと、
トランザクショナルメモリシステムにおいて、第１のソフトウェアトランザクションモードの少なくとも１つの第１のソフトウェアトランザクション、および、第２のソフトウェアトランザクションモードの第２のソフトウェアトランザクション、ならびに、第１のハードウェアトランザクションモードの少なくとも１つのハードウェアトランザクション、および、第２のハードウェアトランザクションモードの少なくとも１つの第２のハードウェアトランザクションの並列実行を可能とする実行ロジックと、
少なくとも１つのソフトウェアトランザクションが前記第１のソフトウェアトランザクションモードまたは前記第２のソフトウェアトランザクションモードで実行中である旨を示すべくフラグをアクティブ化するトラッキングロジックと、
前記第２のハードウェアトランザクションモードの第１のハードウェアトランザクションの完了時に、前記フラグがアクティブ化されており、第１のロックが前記少なくとも１つのソフトウェアトランザクションにより取得されている場合に、前記第２のハードウェアトランザクションモードの前記第１のハードウェアトランザクションのフィルタセットが、実行中の前記少なくとも１つのソフトウェアトランザクションのフィルタセットとコンフリクトしているか否かを判断する共通部分ロジックと、
コンフリクトが無い場合に前記第１のハードウェアトランザクションをコミットし、コンフリクトが有る場合に前記第１のハードウェアトランザクションをアボートする最終決定ロジックと
を備え、
前記最終決定ロジックは、前記第１のハードウェアトランザクションの完了時に前記第１のロックが前記少なくとも１つのソフトウェアトランザクションにより取得されていない場合には、前記共通部分ロジックによる前記判断を行うことなく、前記第１のハードウェアトランザクションをコミットする
装置。
【請求項２】
前記第２のハードウェアトランザクションモードにおいて、前記第１のハードウェアトランザクションは、前記第１のハードウェアトランザクションのメモリアクセス毎に前記第１のハードウェアトランザクションの前記フィルタセットを更新する
請求項１に記載の装置。
【請求項３】
前記第１のソフトウェアトランザクションモードにおいて、第１のソフトウェアトランザクションは、前記第１のソフトウェアトランザクションの完了時に、前記第１のロックおよび第２のロックを取得し、前記トランザクショナルメモリシステムのメモリを、ハッシュテーブルに格納されているライトデータで更新する
請求項１または２に記載の装置。
【請求項４】
前記第１のソフトウェアトランザクションモードにおいて、前記第１のソフトウェアトランザクションのコミット後に、前記第１のソフトウェアトランザクションは前記第１のソフトウェアトランザクションモードの別のソフトウェアトランザクションを無効化する
請求項３に記載の装置。
【請求項５】
前記第２のハードウェアトランザクションモードにおいて、第２のハードウェアトランザクションは、前記第２のハードウェアトランザクションのコミットの前に、コミットロックおよびトランザクションロックを取得する
請求項４に記載の装置。
【請求項６】
前記第１のソフトウェアトランザクションは、前記第１のソフトウェアトランザクションのフィルタセットと前記別のソフトウェアトランザクションのフィルタセットとの間に共通部分が存在する場合、前記別のソフトウェアトランザクションを無効化する
請求項４または５に記載の装置。
【請求項７】
トランザクショナルメモリシステムにおけるプロセッサによって、第１のスレッドのソフトウェアトランザクションおよび第２のスレッドのハードウェアトランザクションを並列に実行する段階と、
前記ソフトウェアトランザクションの実行を示すべくグローバルロックをアクティブ化する段階と、
前記ハードウェアトランザクションの完了時に、前記グローバルロックの状態を決定し、前記グローバルロックがアクティブの場合には前記第１のスレッドのフィルタセットと前記第２のスレッドのフィルタセットとの間に共通部分が存在するか否かを判断し、前記第１のスレッドのフィルタセットと前記第２のスレッドのフィルタセットとの間に共通部分が存在しない場合には前記ハードウェアトランザクションをコミットする段階と、
前記ハードウェアトランザクションの完了時に前記グローバルロックが非アクティブである場合には前記第１のスレッドの前記フィルタセットと前記第２のスレッドの前記フィルタセットとの間に共通部分が存在するか否かを判断することなく、前記ハードウェアトランザクションをコミットする段階と
を備える方法。
【請求項８】
トランザクショナルメモリシステムにおけるプロセッサによって、第１のスレッドのソフトウェアトランザクションおよび第２のスレッドのハードウェアトランザクションを並列に実行する段階と、
前記ソフトウェアトランザクションの実行を示すべくグローバルロックをアクティブ化する段階と、
前記ハードウェアトランザクションの完了時に、前記グローバルロックの状態を決定し、前記グローバルロックがアクティブの場合には前記第１のスレッドのフィルタセットと前記第２のスレッドのフィルタセットとの間に共通部分が存在するか否かを判断し、前記第１のスレッドのフィルタセットと前記第２のスレッドのフィルタセットとの間に共通部分が存在しない場合には前記ハードウェアトランザクションをコミットする段階と、
前記ソフトウェアトランザクションにおいて第１のサイズから第２のサイズへとハッシュテーブルを並列に再ハッシュする段階と、
前記ハードウェアトランザクションにおいて前記ハッシュテーブルにアクセスし、前記並列に再ハッシュする段階の間に前記ハードウェアトランザクションをコミット可能とする段階と
を備える方法。
【請求項９】
前記ソフトウェアトランザクションをコミットする段階と、
前記ソフトウェアトランザクションの完了時に前記グローバルロックを非アクティブ化する段階と
をさらに備える請求項７または８に記載の方法。
【請求項１０】
前記ハードウェアトランザクションによる、前記トランザクショナルメモリシステムのメモリへのアクセスのアドレスを、前記第１のスレッドの前記フィルタセットに挿入する段階と、
１または複数のハッシュ値で前記アクセスの前記アドレスをハッシュすることに基づいて前記第１のスレッドの前記フィルタセットの１または複数のフィールドを更新する段階と
をさらに備える請求項７から９のいずれか一項に記載の方法。
【請求項１１】
トランザクショナルメモリシステムの第２のハードウェアトランザクションモードで第２のハードウェアトランザクションを実行する段階と、
前記第２のハードウェアトランザクションの完了時に前記第２のハードウェアトランザクションをコミットする段階と、
前記第２のハードウェアトランザクションのコミット後に、前記第２のハードウェアトランザクションと、前記第２のハードウェアトランザクションと並列に実行している少なくとも１つのソフトウェアトランザクションとの間にコンフリクトが存在する場合には、前記少なくとも１つのソフトウェアトランザクションを無効化する段階と、
前記第２のハードウェアトランザクションのコミット前に、コミットロックが取得されているか否かを判断し、前記コミットロックが取得されている場合、前記第２のハードウェアトランザクションと前記コミットロックを取得した第１のソフトウェアトランザクションとの間にコンフリクトが存在するか否かを判断する段階と、
前記第１のソフトウェアトランザクションが前記コミットロックを取得した後、１または複数のハードウェアトランザクションによって１または複数のトランザクションロックが取得されたか否かを判断し、前記１または複数のトランザクションロックが取得されている場合には、前記１または複数のトランザクションロックが解放されるまで前記第１のソフトウェアトランザクションのコミットを遅延させる段階と
を備える方法。
【請求項１２】
トランザクショナルメモリシステムの第２のハードウェアトランザクションモードで第２のハードウェアトランザクションを実行する段階と、
前記第２のハードウェアトランザクションの完了時に前記第２のハードウェアトランザクションをコミットする段階と、
前記第２のハードウェアトランザクションのコミット後に、前記第２のハードウェアトランザクションと、前記第２のハードウェアトランザクションと並列に実行している少なくとも１つのソフトウェアトランザクションとの間にコンフリクトが存在する場合には、前記少なくとも１つのソフトウェアトランザクションを無効化する段階と、
第２のソフトウェアトランザクションモードで第２のソフトウェアトランザクションを実行する段階であって、前記第２のソフトウェアトランザクションの実行開始時において第１のロックおよびコミットロックを取得する段階、ならびに、前記第２のソフトウェアトランザクションの実行中に１または複数のメモリロケーションを直接更新する段階を有する段階と、
前記第２のソフトウェアトランザクションの完了時に、前記第２のソフトウェアトランザクションをコミットし、第１のソフトウェアトランザクションモードの１または複数の並列に実行されているソフトウェアトランザクションを無効化した後、前記第１のロックおよび前記コミットロックを解放する段階と
を備える方法。
【請求項１３】
前記第２のハードウェアトランザクションのコミット前に、コミットロックが取得されているか否かを判断し、前記コミットロックが取得されている場合、前記第２のハードウェアトランザクションと前記コミットロックを取得した第１のソフトウェアトランザクションとの間にコンフリクトが存在するか否かを判断する段階を
さらに備える請求項１２に記載の方法。
【請求項１４】
前記第２のハードウェアトランザクションと前記第１のソフトウェアトランザクションとの間に前記コンフリクトが存在する場合、前記第２のハードウェアトランザクションをアボートする段階をさらに備え、
前記第２のハードウェアトランザクションのフィルタセットと、前記第１のソフトウェアトランザクションのフィルタセットとの間に共通部分が存在する場合にコンフリクトが存在すると判断される
請求項１１または１３に記載の方法。
【請求項１５】
前記トランザクショナルメモリシステムの第１のハードウェアトランザクションモードにおいて第１のハードウェアトランザクションを実行する段階と、
前記第１のハードウェアトランザクションの完了時に、少なくとも１つのソフトウェアトランザクションが並列に実行されているか否かを判断する段階と、
前記少なくとも１つのソフトウェアトランザクションが並列に実行されている場合、前記第１のハードウェアトランザクションをアボートし、前記少なくとも１つのソフトウェアトランザクションが並列に実行されていない場合、前記第１のハードウェアトランザクションをコミットする段階と
をさらに備える請求項１１、１３、および１４のいずれか一項に記載の方法。
【請求項１６】
前記第１のソフトウェアトランザクションの実行中に前記第１のソフトウェアトランザクションによる前記トランザクショナルメモリシステムのメモリに対するリード処理を有効化する段階と、
前記リード処理が有効化される場合、前記リード処理のロケーションを前記第１のソフトウェアトランザクションのフィルタセットに追加する段階と
をさらに備える請求項１１、および１３から１５のいずれか一項に記載の方法。
【請求項１７】
コンピューティングデバイスで実行されることに応じて前記コンピューティングデバイスに請求項１１から１６のいずれか一項に記載の方法を実行させる複数の命令を備えるプログラム。
【請求項１８】
少なくとも１つのハードウェアトランザクションおよび少なくとも１つのソフトウェアトランザクションを並列に実行するハイブリッドトランザクショナルメモリロジックを有するプロセッサと、
前記プロセッサに結合されているメモリと
を備えるシステムであって、
前記ハイブリッドトランザクショナルメモリロジックは、第１のハードウェアトランザクションモードにおいて第１のトランザクションを、前記第１のトランザクションがコミットされるまで、または、前記第１のトランザクションの再試行回数が前記第１のハードウェアトランザクションモードにおいて第１の回数しきい値になるまで、実行した後、前記第１のトランザクションがコミットされない場合、前記第１のトランザクションを第１のソフトウェアトランザクションモードで実行し、
前記ハイブリッドトランザクショナルメモリロジックは、前記第１のハードウェアトランザクションモードで実行される前記第１のトランザクションに対応付けられているフィルタセットと、前記第１のソフトウェアトランザクションモードで実行されている第２のトランザクションに対応付けられているフィルタセットとの間にコンフリクトが存在するか否かを判断する共通部分ロジックを含み、前記コンフリクトに応じて、前記ハイブリッドトランザクショナルメモリロジックは、前記第１のハードウェアトランザクションモードにおける前記第１のトランザクションがコミットしないようにし、
前記ハイブリッドトランザクショナルメモリロジックは、前記第１のトランザクションがコミットされるまで、または、前記第１のソフトウェアトランザクションモードにおいて前記第１のトランザクションの再試行回数が第２の回数しきい値になるまで、前記第１のソフトウェアトランザクションモードで前記第１のトランザクションを実行し、前記第２の回数しきい値に到達した後は、前記第１のトランザクションが前記メモリを直接更新する第２のソフトウェアトランザクションモードで前記第１のトランザクションを実行する
システム。
【請求項１９】
少なくとも１つのハードウェアトランザクションおよび少なくとも１つのソフトウェアトランザクションを並列に実行するハイブリッドトランザクショナルメモリロジックを有するプロセッサと、
前記プロセッサに結合されているメモリと
を備えるシステムであって、
前記ハイブリッドトランザクショナルメモリロジックは、第１のハードウェアトランザクションモードにおいて第１のトランザクションを、前記第１のトランザクションがコミットされるまで、または、前記第１のトランザクションの再試行回数が前記第１のハードウェアトランザクションモードにおいて第１の回数しきい値になるまで、実行した後、前記第１のトランザクションがコミットされない場合、前記第１のトランザクションを第１のソフトウェアトランザクションモードで実行し、
前記ハイブリッドトランザクショナルメモリロジックは、前記第１のハードウェアトランザクションモードで実行される前記第１のトランザクションに対応付けられているフィルタセットと、前記第１のソフトウェアトランザクションモードで実行されている第２のトランザクションに対応付けられているフィルタセットとの間にコンフリクトが存在するか否かを判断する共通部分ロジックを含み、前記コンフリクトに応じて、前記ハイブリッドトランザクショナルメモリロジックは、前記第１のハードウェアトランザクションモードにおける前記第１のトランザクションがコミットしないようにし、
前記ハイブリッドトランザクショナルメモリロジックは、前記第１のトランザクションに、前記第１のソフトウェアトランザクションモードで実行中にリードデータを有効化させ、前記リードデータに対応付けられているアドレスに基づいて前記第１のソフトウェアトランザクションモードで実行されている前記第１のトランザクションに対応付けられているフィルタセットを更新させ、ライトデータでハッシュテーブルを更新させる
システム。
【請求項２０】
前記ハイブリッドトランザクショナルメモリロジックは、前記第１のハードウェアトランザクションモードで実行する前に第２のハードウェアトランザクションモードで前記第１のトランザクションを実行し、前記ハイブリッドトランザクショナルメモリロジックは、前記第１のハードウェアトランザクションモードで前記第１のトランザクションを実行する前に、第３の回数しきい値まで前記第２のハードウェアトランザクションモードで前記第１のトランザクションを実行する
請求項１８または１９に記載のシステム。
【請求項２１】
前記ハイブリッドトランザクショナルメモリロジックは、
第２のソフトウェアトランザクションモードにおいて第２のトランザクションに、前記第２のトランザクションの開始時に第１のロックおよび第２のロックを取得させ、取得後に前記第２のトランザクションの実行中に前記メモリを直接更新させ、
前記第１のソフトウェアトランザクションモードにおいて前記第１のトランザクションに、前記第１のトランザクションのコミット時に前記第１のロックおよび前記第２のロックを取得させ、取得後に前記ハッシュテーブルからの前記ライトデータで前記メモリを更新させ、前記第１のソフトウェアトランザクションモードで並列に実行されている少なくとも１つの他のソフトウェアトランザクションを無効化させる
請求項１９に記載のシステム。
【請求項２２】
請求項１７に記載のプログラムを記憶するコンピュータ可読記憶媒体。
【請求項２３】
第１のスレッドのソフトウェアトランザクションおよび第２のスレッドのハードウェアトランザクションを並列に実行し、
前記ソフトウェアトランザクションの実行を示すべくグローバルロックをアクティブ化し、
前記ハードウェアトランザクションの完了時に、前記グローバルロックの状態を決定し、
前記グローバルロックがアクティブの場合には前記第１のスレッドのフィルタセットと前記第２のスレッドのフィルタセットとの間に共通部分が存在するか否かを判断し、前記第１のスレッドのフィルタセットと前記第２のスレッドのフィルタセットとの間に共通部分が存在しない場合には前記ハードウェアトランザクションをコミットし、
前記ハードウェアトランザクションの完了時に前記グローバルロックが非アクティブである場合には前記第１のスレッドの前記フィルタセットと前記第２のスレッドの前記フィルタセットとの間に共通部分が存在するか否かを判断することなく、前記ハードウェアトランザクションをコミットする
装置。
【請求項２４】
第１のスレッドのソフトウェアトランザクションおよび第２のスレッドのハードウェアトランザクションを並列に実行し、
前記ソフトウェアトランザクションの実行を示すべくグローバルロックをアクティブ化し、
前記ハードウェアトランザクションの完了時に、前記グローバルロックの状態を決定し、
前記グローバルロックがアクティブの場合には前記第１のスレッドのフィルタセットと前記第２のスレッドのフィルタセットとの間に共通部分が存在するか否かを判断し、前記第１のスレッドのフィルタセットと前記第２のスレッドのフィルタセットとの間に共通部分が存在しない場合には前記ハードウェアトランザクションをコミットし、
前記ソフトウェアトランザクションにおいて第１のサイズから第２のサイズへとハッシュテーブルを並列に再ハッシュし、
前記ハードウェアトランザクションにおいて前記ハッシュテーブルにアクセスし、前記並列に再ハッシュする段階の間に前記ハードウェアトランザクションをコミット可能とする
装置。
【発明の詳細な説明】
【背景技術】
【０００１】
並列プログラミングコンピューティング環境において、同一メモリロケーションへのアクセスを共有するためには、適切な管理および同期が必要であるが、実現はかなり困難である。従来、共有メモリにアクセスする複数のスレッド間の同期は、共有データを同時アクセスから保護するためのロックを用いて実現してきた。しかし、ロックは、共有データに対するシリアル化について過剰に保守的であることが多い。これは、ランタイムにおいて常に必要になるわけではないが、いつコードを書き込むかを判断するためには困難または不可能であることが多い。
【０００２】
トランザクショナルメモリは、トランザクションと呼ばれるクリティカルセクションを並列且つ投機的に複数のスレッドに実行させるための解決策の選択肢の１つとして提案されている。ランタイムでコンフリクトが発生すると、スレッドは、停止するか、または、トランザクションをロールバックして再度実行し、コンフリクトを解決する。トランザクショナルメモリシステムでは、スレッドは、トランザクションが後にコミットするまで共有メモリロケーションの内容を変更することなくトランザクションを投機的に実行することができる。２つのトランザクション間でコンフリクトが検出されると、一方のトランザクションはアボートされて他方のトランザクションをコミットできるようにする。このタイミングにおいて、コミットされたトランザクションにより共有メモリロケーションの内容が変更されるとしてよい。
【図面の簡単な説明】
【０００３】
【図１】一実施形態に係るシステムを示すブロック図である。
【０００４】
【図２】一実施形態に係るトランザクションの実行を説明するための上位フローチャートである。
【０００５】
【図３】一実施形態に係る、ハードウェアトランザクションおよびソフトウェアトランザクションの間のタイミングとして可能な例を示す。
【０００６】
【図４】本発明の一実施形態に係るハイブリッドトランザクショナルメモリシステムのフローを説明するためのブロック図である。
【０００７】
【図５】一実施形態に係る第１のハードウェアトランザクションの実行を説明するためのフローチャートである。
【０００８】
【図６】一実施形態に係る第１のハードウェアトランザクションのフェーズを詳細に説明するための図である。
【０００９】
【図７】一実施形態に係る第２のトランザクションの実行を説明するためのフローチャートである。
【００１０】
【図８】一実施形態に係る、基本的なブルームフィルタベースハードウェアトランザクションを詳細に説明するための図である。
【００１１】
【図９】一実施形態に係る、最適化されたブルームフィルタベースハードウェアトランザクションを詳細に説明するための図である。
【００１２】
【図１０】一実施形態に係る投機的ソフトウェアトランザクションの実行を説明するためのフローチャートである。
【００１３】
【図１１】一実施形態に係る、ソフトウェアトランザクション実行を詳細に説明するための図である。
【００１４】
【図１２】一実施形態に係る、取り消し不能ソフトウェアトランザクションの実行を説明するためのフローチャートである。
【００１５】
【図１３】一実施形態に係る、取り消し不能ソフトウェアトランザクションを詳細に説明するための図である。
【００１６】
【図１４】別の実施形態に係るシステムを示すブロック図である。
【発明を実施するための形態】
【００１７】
トランザクショナルメモリシステムを実装するさまざまな実施形態において、アクセスされたメモリロケーションに関する情報を用いて、１または複数のソフトウェアトランザクションと並列に実行されている１または複数のハードウェアトランザクションの間でコンフリクトが発生していると判断される場合がある。特定の実装例では、この情報を、トランザクションを実行しているスレッドに対応付けられているフィルタセットを用いて維持するとしてよい。より具体的には、実施形態では、これらのフィルタセットを、いわゆるブルームフィルタとして実装するとしてよい。ブルームフィルタには、アクセスされたメモリロケーションに関する情報を格納するとしてよい。
【００１８】
一般的に、ブルームフィルタは、１または複数のメモリロケーションに対応付けられている値を提供するフィールドを複数持つビットベクトルとして実装され得る。動作について説明すると、アクセスされたメモリロケーションアドレス（または、その一部）は１または複数のハッシュ値でハッシュされる。ハッシュ結果を用いて、ビットベクトルの対応するエントリにデータを追加する。より具体的には、アクセスおよびハッシュ算出が発生すると、ビットベクトルのうち指定されたフィールドは、論理値「１」またはアクティブ値にセットされて、対応するアドレスがアクセスされたことを示すとしてよい。同様に、論理値「０」または「非アクティブ値」を持つ任意のフィールドは、メモリの１または複数の所与のアドレスにはアクセスが発生していない旨を意味する。
【００１９】
コンフリクト検出は、少なくとも部分的に、複数のブルームフィルタ値を用いて実行されるとしてよい。より具体的には、第１のスレッド用のブルームフィルタは、並列に実行しているトランザクションを持つ第２のスレッド用のブルームフィルタの内容と、自身の内容とを比較するとしてよい。共通部分（インターセクション）比較によって、１または複数の位置において複数のアクセスメモリロケーションに共通部分があることが分かれば、コンフリクトが検出され、トランザクションのうち１または複数をアボートまたはロールバックするためのさまざまな処理が発生するとしてよい。これに代えて、共通部分比較によってアクセスされたメモリロケーションに共通部分が無いことがわかれば、トランザクションのうち一方または両方は、コンフリクトを検出することなく、コミットに進むとしてよい。
【００２０】
実施形態を用いて、一のソフトウェアトランザクションと並列に実行されている複数のハードウェアトランザクション間のコンフリクトを判断するとしてよい。スレッド毎にブルームフィルタが設けられる実施形態を用いて、ソフトウェアトランザクションによってソフトウェアグローバルロックが保持されている間に実行を終了するハードウェアトランザクションは、コンフリクトが発見された場合に限り、強制的にアボートされるとしてよい。ブルームフィルタは、偽陽性となる場合もあるので、誤ってアボートが発生する可能性が依然としてある。しかし、ブルームフィルタの利用によって、ハードウェアトランザクションのコミット確率が改善され得る。
【００２１】
実施形態は、所与のソフトウェアトランザクションによって取得される単一グローバルロックを用いてソフトウェアトランザクションおよびハードウェアトランザクションの両方を実現するハイブリッドトランザクショナルメモリ（ＨＴＭ）で用いられるとしてよい。ハードウェアトランザクショナルメモリは、トランザクションをコミットさせて完了させるためにベストエフォート形式を採用する、プロセッサハードウェア内でのみ実装され得る。ソフトウェアトランザクショナルメモリは、マルチスレッド化されたプログラムにおいて共有メモリを同期させるべく、全てソフトウェアで実装される。
【００２２】
ハードウェアトランザクションの終了時には、当該ハードウェアトランザクションが単一グローバルロックを参照する。当該ロックが解放されている場合、ハードウェアトランザクションはコミットに成功するとしてよい。単一グローバルロックが解放されていない場合、各トランザクションのリードセットおよびライトセットを表すスレッド毎のブルームフィルタを用いて、コンフリクト検出を実行するとしてよい。このようにして、単一グローバルロックがソフトウェアトランザクションによって獲得されていたとしても、コンフリクトしていないハードウェアトランザクションはコミットすることができる。
【００２３】
このため、実施形態によれば、ハイブリッドトランザクショナルメモリシステムで実現される並行処理の量を増やすことが可能になる。ソフトウェアトランザクションおよびハードウェアトランザクションにおけるコンフリクトを検出するべく、各スレッドにはブルームフィルタが対応付けられる。スレッドにおいてトランザクションを実行している間、各リードライト処理をアノテートして、メモリロケーションをブルームフィルタに追加する。一実施形態において、このようなアノテートはライブラリコールによって実行されるとしてよい。しかし、他の実施形態ではこのようなアノテートをリードライトメモリアクセスにインライン化するとしてよい。これに代えて、コンパイラが、ブルームフィルタ挿入を処理するための命令を挿入するとしてよい。
【００２４】
ハードウェアトランザクション（つまり、トランザクションのクリティカルセクション）が完了すると、トランザクションはコミットする前にグローバルロックを参照して、解放されていれば、トランザクションはコミットに成功するとしてよい。しかし、ロックが獲得されていれば、ハードウェアトランザクションおよびソフトウェアトランザクション（グローバルロックの所有者）のブルームフィルタの内容を共通部分演算で比較して、コンフリクトが発生しているか否かを判断する。ブルームフィルタでは、偽陽性が発生する可能性はあるが、偽陰性は発生しない。このため、トランザクション間で実際にはコンフリクトしていないにもかかわらずコンフリクトが検出されることがあるが、複数のトランザクションが同じメモリロケーションにアクセスした場合に共通部分比較がコンフリクト無しと報告することはない。このように、ロックが獲得されていたとしても、ブルームフィルタがコンフリクトを報告しない限り、ハードウェアトランザクションはコミットに成功し得る。
【００２５】
一の特定のハイブリッドトランザクショナルメモリシステムにおいて、一のソフトウェアトランザクションは１または複数のハードウェアトランザクションと並列に実行され得る。ソフトウェアトランザクションは、開始時に、排他性を保証するべく単一グローバルロックを取得する。各ハードウェアトランザクションは、クリティカルセクション終了時にこのロックをリードして、コミットを試すか、または、ブルームフィルタを参照するかを判断する。一実施形態において、単一グローバルロックは、所有者であるスレッドの識別子を格納しているとしてよい。このようにして、ハードウェアトランザクションに対して、コンフリクトに関してどのブルームフィルタを確認すべきかを指定する。
【００２６】
一実施形態において、ブルームフィルタはソフトウェアブルームフィルタとして実装され得る。これらのフィルタを用いて、各トランザクション（ハードウェアまたはソフトウェア）は、メモリロケーションをリード／ライトすると、リードまたはライトした各メモリロケーションを自身のブルームフィルタに対して追加する。ハードウェアトランザクションの終了時には、ブルームフィルタを用いて、もし存在すれば、単一グローバルロックを現在保持しているソフトウェアトランザクションとの間のコンフリクトを特定する。
【００２７】
ハードウェアトランザクションは大半がハードウェアで実行されるが、リードアクセスおよびライトアクセスはアノテートされるので、リード／ライトされたロケーションはスレッド毎のソフトウェアブルームフィルタに入力されることに留意されたい。コミット時には、ハードウェアトランザクションはグローバルロックを確認して、解放されていれば、コミットすることができる。解放されていなければ、当該ハードウェアトランザクションのブルームフィルタとソフトウェアブルームフィルタとの間のセット共通部分を算出する。コンフリクトが無ければ、ハードウェアトランザクションはコミットに成功するとしてよい。コミット時（コンフリクトまたはフィルタ共通部分が無いことを確認した後）、ハードウェアトランザクションが実行した更新は、更新された値を（全ての更新が一度に可視状態になるように）メモリにライトすることによって、他のスレッドにも可視状態になる。トランザクションがアボートされると、全ての更新は初期状態に戻る。
【００２８】
アボートされるハードウェアトランザクションは、複数回にわたって再試行する。Ｎ回（Ｎは設定可能なパラメータである）の再試行の後、ハードウェアトランザクションは、ソフトウェアトランザクションに移行して単一グローバルロックの取得を試みる。この移行によって、ソフトウェアトランザクションがアボートされない実施形態において前進が保証される。
【００２９】
この実施形態では、任意の所与のタイミングにおいて実行可能なソフトウェアトランザクションは１つのみである。ソフトウェアトランザクションは、スレッドが単一グローバルロックを所有している場合に実行することができる。ソフトウェアトランザクションは、自分のスレッド識別子（ＩＤ）をロックロケーションにライトすることによって当該ロックを取得し、クリティカルセクションの実行を開始する。ソフトウェアトランザクションが実行する全ての更新は実行済みである（言い換えると、ソフトウェアトランザクションは直接メモリを更新する）。これに加えて、ソフトウェアトランザクションはさらに、リード／ライトされたロケーションをスレッドのブルームフィルタに格納して、並列に実行されているハードウェアトランザクションがコンフリクトの有無を確認できるようにする。一実施形態において、ソフトウェアトランザクションは決してアボートされることはない。
【００３０】
ハイブリッドトランザクショナルメモリ方式は、トランザクション実行の高速化およびハードウェアトランザクショナルメモリに対応付けられているオーバーヘッドの低減を実現しつつ、処理しているトランザクションについて前進を保証するために用いられるとしてよい。ハイブリッドトランザクショナルメモリ方式によれば、各トランザクションは、最初にハードウェアで処理され、ハードウェアで前進できない場合には続いてソフトウェアで処理する。さまざまな実施形態において、ソフトウェアトランザクションと１または複数のハードウェアトランザクションとの並列実行を可能とするべくグローバルロックが用いられるハイブリッドトランザクショナルメモリシステムが提供される。
【００３１】
図１は、装置１００を示すブロック図である。図１に図示しているように、装置１００は、プロセッサ部１０２、メモリ部１０４およびトランザクション管理モジュール１０６等、複数の構成要素を備える。しかし、実施形態は図示した構成要素の種類、数または配置に限定されるものではない。
【００３２】
さまざまな実施形態において、プロセッサ部１０２は、タスクレベルでの並列処理を実装可能な任意のプロセッサまたはロジックデバイスを用いて実装されるとしてよい。一部の実施形態において、プロセッサ部１０２はマルチコアプロセッサであってよい。別の実施形態例では、プロセッサ部１０２は、タスクを並列に実行するよう配置されている複数のプロセッサであってよい。メモリ部１０４は、データを格納することが可能な任意の機械可読媒体またはコンピュータ可読媒体、例えば、揮発性メモリおよび不揮発性メモリの両方を用いて実装するとしてよい。一部の実施形態において、メモリ部１０４は、プロセッサ部１０２用のキャッシュを含むとしてよい。さまざまな実施形態において、メモリ部１０４は、これに加えて、または、これに代えて、他の種類のデータ記憶媒体を含むとしてよい。データ記憶媒体の例は、リードオンリーメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、ダブルデータレートＤＲＡＭ（ＤＤＲＡＭ）、シンクロナスＤＲＡＭ（ＳＤＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、プログラミング可能ＲＯＭ（ＰＲＯＭ）、消去可能プログラミング可能ＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラミング可能ＲＯＭ（ＥＥＰＲＯＭ）、フラッシュメモリ、強誘電体ポリマーメモリ、オボニックメモリ、相変化メモリまたは強誘電体メモリ等のポリマーメモリ、シリコン酸化物窒化物酸化物シリコン（ＳＯＮＯＳ）メモリ、磁気カードまたは光カード、または情報を格納することに適した任意のその他の種類の媒体が挙げられる。メモリ部１０４の一部または全体は、プロセッサ部１０２と同じ集積回路に含まれるとしてもよいし、または、これに代えて、メモリ部１０４の一部または全体は、集積回路または他の媒体、例えば、プロセッサ部１０２の集積回路の外部にあるハードディスクドライブに配置されるとしてもよい。
【００３３】
一部の実施形態において、トランザクション管理モジュール１０６は、回路、ロジック、他のハードウェアおよび／またはトランザクショナルメモリパラダイムに従ってトランザクションの実行を管理する命令を含むとしてよい。さまざまな実施形態において、トランザクション管理モジュール１０６は、ハードウェアトランザクションおよびソフトウェアトランザクションの両方を実行させるとしてよい。ハードウェアトランザクションは、プロセッサ部１０２内のロジックデバイス回路によって直接実行されるトランザクションであってよい。ソフトウェアトランザクションは、プロセッサ部１０２で実行されるプログラミングロジックによって間接的に実行されるトランザクションであってよい。
【００３４】
さらに図１で図示しているように、装置１００および送受信部１４４を含むシステム１４０が提供される。送受信部１４４は、さまざまな適切な無線通信技術を用いて信号を送受信可能な１または複数の無線機器を含むとしてよい。そのような技術では、１または複数の無線ネットワークを介する通信を実行するとしてよい。無線ネットワークの例には、ワイヤレスローカルエリアネットワーク（ＷＬＡＮ）、ワイヤレスパーソナルエリアネットワーク（ＷＰＡＮ）、ワイヤレスメトロポリタンエリアネットワーク（ＷＭＡＮ）、セルラー方式ネットワークおよび人工衛星ネットワークが含まれる（しかし、これらに限定されない）。
【００３５】
一部の実施形態において、プロセッサ部１０２は１または複数のスレッド１０８のホストとなるとしてよい。各スレッド１０８は、プロセッサ部１０２で実行されているアプリケーションまたはプログラムに対応するとしてよい。任意の特定のアプリケーションまたはプログラムは、複数のスレッド１０８が対応付けられているとしてよい。アプリケーションまたはプログラムは、特定のスレッド１０８を利用して１または複数のトランザクション１１０の実行を要求するとしてよい。トランザクション１１０は、さまざまな計算またはその他のタスクの実行を、プロセッサ部１０２に任せるとしてよい。
【００３６】
さまざまな実施形態において、スレッド１０８がトランザクションの実行を要求する場合、トランザクション管理モジュール１０６は、ハイブリッドトランザクショナルメモリアルゴリズムにしたがって当該トランザクションを管理する。一部の実施形態において、ハイブリッドトランザクショナルメモリアルゴリズムは、トランザクションの実行およびコミットを試みる複数の実行フェーズまたは実行モードを実装するとしてよい。さまざまな実施形態において、ハイブリッドトランザクショナルメモリアルゴリズムは、ハードウェアフェーズおよびソフトウェアフェーズを含むとしてよい。一部の実施形態において、トランザクション管理モジュール１０６は、ハードウェアフェーズが失敗した後に限り、トランザクションのためにソフトウェアフェーズを用いるとしてよい。
【００３７】
一部の実施形態において、トランザクション管理モジュール１０６は、一のソフトウェアトランザクションおよび１または複数のハードウェアトランザクションの並列実行を可能にするべくグローバルロック１１２を利用するとしてよい。さまざまな実施形態において、トランザクション管理モジュール１０６は、ソフトウェアトランザクションが実行されている場合にグローバルロック１１２をセットするか、または、アクティブ化するとしてよく、ソフトウェアトランザクションが実行されていない場合にグローバルロック１１２をクリアするか、または、非アクティブ化するとしてよい。一部の実施形態において、グローバルロック１１２はスピンロックであってよい。他の実施形態において、ロックキャッシュラインにおけるコンテンションを減らすべくＭＣＳ（Ｍｅｌｌｏｒ−Ｃｒｕｍｍｅｙ−Ｓｃｏｔｔ）ロックをグローバルロック１１２に用いるとしてもよい。このようなさまざまな実施形態において、「ＭＣＳ＿ａｃｑｕｉｒｅ」法および「ＭＣＳ＿ｒｅｌｅａｓｅ」法を用いて、ハードウェアトランザクションの利点を生かし、コンペア・アンド・スワップ（ＣＡＳ）命令の実行を高速化するとしてよい。さらに、一部の実施形態において、このグローバルロックは、本明細書で説明するように、フィルタメカニズムを用いて実装するとしてよい。
【００３８】
一部の実施形態において、トランザクション管理モジュール１０６は、ハードウェアトランザクションの完了時にグローバルロック１１２が非アクティブでトランザクション実行中に他のコンフリクトが発生しなかった場合に、ハードウェアトランザクションをコミット可能とするとしてよい。これに代えて、ハードウェアトランザクションがコミットを求めているタイミングにおいてグローバルロック１１２がアクティブであるか、または、獲得されている場合、トランザクション管理モジュール１１６は、ハードウェアトランザクションと実行中のソフトウェアトランザクションとの間でコンフリクトが存在するか否かを、両トランザクションを開始したスレッドに対応付けられているブルームフィルタに格納されている情報を参照して判断するとしてよい。
【００３９】
さまざまな実施形態において、トランザクション管理モジュール１０６は実行ロジック１１４を含むとしてよい。一部の実施形態において、実行ロジック１１４は、回路、他のハードウェアおよび／またはトランザクション１１０を実行する命令であってよい。さまざまな実施形態において、スレッド１０８が新たなトランザクションの実行を要求する度に、実行ロジック１１４はトランザクションの実行を１回または複数回行うとしてよい。一部の実施形態において、実行ロジック１１４は最初にトランザクションをハードウェアトランザクションとして１回または複数回実行するとしてよい。この後、ハードウェアで実行してもコミットできない場合には、当該トランザクションをソフトウェアトランザクションとして実行するとしてよい。このように、一部の実施形態において、ソフトウェアトランザクションモードは、コミットを保証するべく、そして、前進を達成するべく、トランザクションに最高優先度が割り当てられるフォールバック実行フェーズであってよい。一部の実施形態において、実行ロジック１１４はさらに、ハードウェアトランザクションの完了時にグローバルロック１１２を確認するとしてよい。
【００４０】
一部の実施形態において、トランザクション管理モジュール１０６はトラッキングロジック１１６を含むとしてよい。さまざまな実施形態において、トラッキングロジック１１６は、回路、他のハードウェアおよび／またはグローバルロック１１２、再試行カウンタ１１８、および、再試行しきい値１２０を管理するための命令を含むとしてよい。一部の実施形態において、トラッキングロジック１１６は、実行ロジック１１４からの命令に基づいてグローバルロック１１２をセットするとしてよい。例えば、実行ロジック１１４は、実行ロジック１１４がソフトウェアフェーズでトランザクションの実行を開始すると、グローバルロック１１２をセットするようトラッキングロジック１１６に命令するとしてよい。さまざまな実施形態において、再試行カウンタ１１８は、ハードウェアトランザクションモードでトランザクションを実行しようと連続して試行した総回数を含むとしてよい。一部の実施形態において、再試行しきい値１２０が含む試行回数は、当該回数だけ試行された後は実行ロジック１１４がハードウェアトランザクションとしての実行からソフトウェアトランザクションとしての実行へと前進すべきことを意味しているとしてよい。さまざまな実施形態において、新たなトランザクションを受信すると、トラッキングロジック１１６は（当該トランザクションに対応する）再試行カウンタ１１８をゼロにリセットするとしてよい。一部の実施形態において、トランザクションの実行に失敗する度に、トラッキングロジック１１６が再試行カウンタ１１８をインクリメントするとしてよい。
【００４１】
さらに図１に図示しているように、メモリ部１０４は、スレッド毎のリードセットストレージ１２６およびスレッド毎のライトセットストレージ１２８を含む。ある実施形態において、これらのストレージは、トランザクション中にリードまたはライトされた値に関する情報を格納するとしてよい。これに加えて、各スレッドには対応するブルームフィルタ１３４および１３６が対応付けられているとしてよく、各ブルームフィルタは所与のリードセットストレージまたはライトセットストレージ（およびスレッド）に対応付けられている。さらに本明細書で後述するが、トランザクションの実行中、各リード処理および各ライト処理は、トランザクション中に所与のメモリアドレスにアクセスした旨を示すべく、対応するブルームフィルタにアノテートされるとしてよい。この情報はのちに、複数の並列に実行されているトランザクション間に少なくとも潜在的なコンフリクトが存在するか否かを判断するために用いられるとしてよい。
【００４２】
さまざまな実施形態において、トランザクション管理モジュール１０６は、最終決定ロジック１２８を含むとしてよい。一部の実施形態において、最終決定ロジック１２８は、回路、他のハードウェアおよび／またはトランザクションが実行ロジック１１４によって実行された後コミットまたはアボートのいずれを行うべきかを判断する命令を含むとしてよい。さまざまな実施形態において、最終決定ロジック１２８は、任意の特定のトランザクションが別のトランザクションとの間でコンフリクトを発生させているか、またはコンフリクトを発生させる可能性がある場合に、当該トランザクションをアボートすべきと判断するとしてよい。一部の実施形態において、最終決定ロジック１２８は、トランザクションが並列なソフトウェアトランザクションとの間でコンフリクトを発生させる可能性があるか否かを、グローバルロック１１２を確認することによって、判断するとしてよい。さまざまな実施形態において、グローバルロック１１２がセットされており、トランザクションがハードウェアトランザクションである場合、最終決定ロジック１２８はこの後、共通部分ロジック１２４を参照して、ハードウェアトランザクションとソフトウェアトランザクションとの間に少なくとも潜在的なコンフリクトが存在するか否かを判断するとしてよい。このため、共通部分ロジック１２４は、それぞれのトランザクションを開始したスレッドのブルームフィルタ１３４および１３６にアクセスして、フィルタセットに共通部分が存在するか否かを判断するとしてよい。共通部分が存在する場合、少なくとも潜在的なコンフリクトが存在するので、共通部分ロジック１２４は、共通部分有りを最終決定ロジック１２８に報告するとしてよい。これに代えて、フィルタセットに共通部分があると示さない場合、共通部分無しが最終決定ロジック１２８に報告される。
【００４３】
続いて、最終決定ロジック１２８は、共通部分が発見されればハードウェアトランザクションをアボートさせるとしてよく、共通部分が発見されない場合には、（他のコンフリクトが検出されないと仮定して）ハードウェアトランザクションのコミットを可能とする。
【００４４】
一部の実施形態において、グローバルロック１１２がセットされておりトランザクションがソフトウェアトランザクションである場合、最終決定ロジック１２８は、トランザクションをコミットして、トラッキングロジック１１６にグローバルロック１１２を解放するよう命令するとしてよい。さまざまな実施形態において、グローバルロック１１２がセットされていない場合、最終決定ロジック１２８は、ハードウェアトランザクションをコミットして、トラッキングロジック１１６に再試行カウンタ１１８をクリアするよう命令するとしてよい。尚、フィルタセットが潜在的なコンフリクトを示すか否かを判断するための共通部分ロジック１２４とのやり取りは必要ない。
【００４５】
一部の実施形態において、トランザクション管理モジュール１０６はアボートハンドラロジック１３０を含むとしてよい。さまざまな実施形態において、アボートハンドラロジック１３０は、回路、他のハードウェアおよび／または最終決定ロジック１２８が指示するトランザクションのアボートを取り扱うための命令を含むとしてよい。一部の実施形態において、アボートハンドラロジック１３０は、アボートされたトランザクションを次に試行する場合にハードウェアトランザクションまたはソフトウェアトランザクションのいずれとして実施すべきかを判断するとしてよい。さまざまな実施形態において、アボートハンドラロジック１３０は、トランザクションをアボートすべき理由は、別のトランザクションとのコンフリクトまたは潜在的なコンフリクトのためか、または、他の理由かを判断するとしてよい。トランザクションのアボートの理由が他の理由、例えば、不正命令、容量オーバーフロー、または、不規則メモリアクセスパターンによるキャッシュウェイ数オーバーフローである場合、アボートハンドラロジック１３０は、実行ロジック１１４がソフトウェアフェーズに直ちに進むべきと判断するとしてよい。トランザクションのアボートの理由が別のトランザクションとのコンフリクトまたは潜在的なコンフリクトである場合、アボートハンドラロジック１３０は、トランザクションが現在のフェーズを再試行すべきか、次のフェーズに進むべきかを、例えば、再試行数に基づいて判断するとしてよい。
【００４６】
さまざまな実施形態において、アボートされたトランザクションを次に試行する場合ハードウェアトランザクションまたはソフトウェアトランザクションのどちらとして実施すべきかを判断するべく、アボートハンドラロジック１３０は、再試行カウンタ１１８と再試行しきい値１２０とを比較するとしてよい。一部の実施形態において、再試行カウンタ１１８が再試行しきい値１２０未満である場合、アボートハンドラロジック１３０は、ハードウェアトランザクションとしてトランザクションを再試行するよう実行ロジック１１４に命令するとしてよい。逆に以上である場合、アボートハンドラロジック１３０は、ソフトウェアトランザクションとしてトランザクションを再試行するよう実行ロジック１１４に命令するとしてよい。さまざまな実施形態において、トラッキングロジック１１６は、試行したトランザクションについてコミットが成功した回数および／または失敗した回数に基づき、再試行しきい値１２０の値を適応的に決定するとしてよい。図１の実施形態ではこのように上位概念で図示しているが、本発明の範囲はこの点に限定されないと理解されたい。ハイブリッドトランザクショナルメモリシステムは、多くの異なる形態で実施され得ると共に、多数の変更例があるとしてよい。
【００４７】
ここで図２を参照すると、一実施形態に係るトランザクションの実行を説明するための上位概念を示すフローチャートが図示されている。図２から分かるように、方法２００によると、全てのトランザクションはハードウェアでハードウェアトランザクションとして実行を開始する（ブロック２１０）。実行中（ブロック２１５）、リード処理またはライト処理の度に、トランザクションは、リードまたはライトした各ロケーションを対応するスレッドのためのソフトウェアブルームフィルタに記録する。ハードウェアトランザクションは、クリティカルセクションの実行を終了した後（ブロック２２０）、存在する場合にはソフトウェアトランザクションとのコンフリクトを確認することによって、コミットしようと試みる。ハードウェアトランザクションは最初に、グローバルロックを獲得したか否かを確認する（ひし形２２５）。このロックが解放されている場合、ハードウェアトランザクションはコミットに成功するとしてよい（ひし形２４０で判断するが、アボートが行われていないと仮定）。当該ロックが獲得されている場合、ロックの値は当該ロックを保持しているスレッドのインデックスまたは識別子を示し、当該スレッドがソフトウェアトランザクションを実行していることが分かる。
【００４８】
この場合、ハードウェアトランザクションはひし形２３０に進んで、ソフトウェアトランザクションを実行しているスレッドのブルームフィルタにアクセスしてコンフリクトがあるか否かを判断する。より具体的には、ひし形２３０において、２つのフィルタの間で共通部分演算を実行して、２つのブルームフィルタのエントリまたはフィールドに共通部分があるか否か（例えば、両方がアクティブ値または論理値「１」を持つか否か）を判断するとしてよい。共通部分がある場合、ハードウェアトランザクションはアボートして、ひし形２７０に進み、所与のハードウェアトランザクションの再試行数が設定可能な回数Ｎに到達したか否かを判断する。尚、トランザクションをアボートする際にさまざまなステップ、例えば、バッファ等、スレッドに対応付けられているストレージ内の全ての更新後の値をフラッシュすること等を実施し得ることに留意されたい。
【００４９】
これに代えて、ブルームフィルタ間に共通部分はないと判断される場合、ひし形２４０に進んで、例えば、他の理由でトランザクションがアボートされたか否かを判断する。アボートされていない場合、ブロック２５０に進み、トランザクションをコミットする。コミットについて、ハードウェアトランザクションは、ハードウェアトランザクション実行中には所与のスレッドにのみ可視となるバッファ内に格納されていた更新値でメモリを更新するとしてよい。
【００５０】
さらに、トランザクションをアボートするか否かに関する判断は図２の実施形態において特定の位置にあるひし形２４０で図示されているが、ハードウェアトランザクションは、他の種類のコンフリクトまたはトランザクション中にアボートするべき他の理由を検出するコンフリクト検出ロジックを用いて、実行中の任意のタイミングでアボートすることが可能であると理解されたい。しかし、図示を簡略化するべく、ひし形２４０は図２に示す位置に表示していると理解されたい。
【００５１】
さらに図２を参照しつつ説明すると、ひし形２７０において再試行数がしきい値Ｎに到達していないと判断される場合、ブロック２８０に進み、再試行数をインクリメントして、ブロック２１０に戻りハードウェアトランザクションを再度開始する。これに代えて、再試行数が再試行しきい値Ｎに到達した場合、ひし形２７０からブロック２６０に進み、ソフトウェアトランザクションモードに実行を切り替えるとしてよい。より具体的には、許可されるソフトウェアトランザクションの数は１つのみであるこの実装例において、こうしてトランザクションをソフトウェアトランザクションモードで実行して完了させ、ブロック２５０においてトランザクションをコミットさせる。
【００５２】
ブルームフィルタによって、ソフトウェアトランザクションとハードウェアトランザクションの間のコンフリクト検出が保証される。ハードウェアトランザクション間のコンフリクトの検出および解決は、ハードウェアトランザクショナルメモリシステムによって保証される。ある実施形態において、単一グローバルロックによって、どのタイミングでも実行中のソフトウェアトランザクションの数は１つのみとなることが保証されるので、ソフトウェアトランザクション間について追加でコンフリクト検出メカニズムを設けることはない。
【００５３】
図３は、一実施形態に係る、ハードウェアトランザクションおよびソフトウェアトランザクションの間のタイミングとして可能な例を示す。ケース３１０では、ソフトウェアトランザクションが最初に変数Ｘを更新し、この後で、ハードウェアトランザクションが同じ変数Ｘを異なる値に更新する。ハードウェアトランザクションがコミットしようと試みる場合、二重アクセスを特定するフィルタセット共通部分特定を実行するので、コンフリクトが発見され、ハードウェアトランザクションをアボートする。ケース３２０でも同様の処理を実行する。しかし、ケース３３０およびケース３４０では、ハードウェアトランザクションをコミットする時点において、ソフトウェアスレッドは既にコミットしており、単一グローバルロックを解放している。このため、ハードウェアスレッドがこのロックを確認すると、解放されたことが分かるので、トランザクションのコミットに成功するとしてよい。
【００５４】
ケース３３０およびケース３４０では、ハードウェアトランザクションがコミットしようと試みたタイミングにおいてロックは解放されている。これは、並列に実行されているソフトウェアトランザクションはないことを意味する。重複するソフトウェアトランザクションがあったとしても、この時点までには既にコミットされており、ハードウェアトランザクションの前にシリアル化される。ソフトウェアトランザクションが、ハードウェアトランザクションの後にシリアル化した複数のコンフリクトする処理を実行した場合、ハードウェアトランザクションは、（ハードウェアコンフリクト検出メカニズムによって）コンフリクトのタイミングにおいてアボートされていたであろう。このため、ロックが解放されている場合にハードウェアトランザクションのコミットを可能とすることで、動作が正常になる。
【００５５】
これに代えて、（ケース３１０およびケース３２０のように）ハードウェアトランザクションがコミットしようと試みる場合にロックが獲得されている場合、並列ソフトウェアトランザクションを実行する。コミットしようとするハードウェアトランザクションは、このソフトウェアトランザクションの前にシリアル化される。これは、ソフトウェアトランザクションによって実行される複数の処理が今後コンフリクトする可能性があるためである。しかし、ソフトウェアトランザクションは、１または複数のメモリロケーションにおいて、ハードウェアトランザクションがこれらのロケーションのトラッキングを開始する前に、複数のコンフリクトする処理を実行していた可能性がある。このため、ソフトウェアトランザクションの前にハードウェアトランザクションをシリアル化するのは、誤った動作であろう。このため、実施形態ではこのケースと判断するべくブルームフィルタを利用する。
【００５６】
ソフトウェアブルームフィルタは、ソフトウェアトランザクションが今後アクセスする全てのロケーションを含んでいるわけではなく、トランザクションが既にアクセスしたロケーションのみを含むことに留意されたい。それにも関わらず、今後のアクセスはコミットされたハードウェアトランザクションの後に正しくシリアル化される。このため、ブルームフィルタに共通部分が無い場合、ハードウェアトランザクションは、ソフトウェアトランザクションの前に正しくシリアル化することができ、コミットが許可され得る。ブルームフィルタがコンフリクトを特定する場合、コンフリクトする処理は最初にソフトウェアトランザクションで発生し、その後ハードウェアトランザクションで発生した。そうでなければ、ハードウェアトランザクションはアボートされていたであろう。この場合、ハードウェアトランザクションは、ソフトウェアトランザクションの前にシリアル化することはできず、アボートされる。このため、実施形態は正しくこれらのコンフリクトを特定し、ハードウェアトランザクションをアボートする。ある実施形態において、ブルームフィルタはコンフリクトが有ると誤って報告する可能性がある（偽陽性が区別不可能）ことに留意されたい。このため、ハードウェアトランザクションはこれらの場合にもアボートされてしまう。しかし、ブルームフィルタは偽陰性にはならないので、全てのコンフリクトが特定され回避される。
【００５７】
ある実施形態において、高効率なブルームフィルタ実装によって、挿入および積集合演算を定数時間（Ｏ（１）ｔｉｍｅ）で実行することが可能となり、オーバーヘッドが最小限に抑えられる。さらに、ハードウェアトランザクションはグローバルロックおよびソフトウェアブルームフィルタをコミットの直前にリードするのみであり、ソフトウェアトランザクションがこれらのロケーションを変更するので、ハードウェアトランザクションをアボート可能なウィンドウが減る。ある実施形態では、ロックおよびブルームフィルタのリードのためには、トランザクションのリードセットに追加キャッシュラインを２つ追加するのみであるとしてよい。一部の実施形態において、これを最適化して、ブルームフィルタの１ビットを用いてロックが獲得されたか否かを指定し、ブルームフィルタの残りをブルームフィルタとして用いるとしてよい。このような実装例では、ロックのロケーションが両方の目的を実現することが出来、ハードウェアトランザクションのリードセットサイズに追加されるのは１つのロケーションのみに減る。トランザクション自身のブルームフィルタによって、追加キャッシュラインがライトセットに追加されるが、ある実装例において、ブルームフィルタサイズによっては１つのキャッシュラインのみまで減らすことが可能である。
【００５８】
ある実施形態を用いると、互いに素となるメモリアクセスに自身からアクセスし、且つ、大きいソフトウェアトランザクションが並列に実行されている多数の小さいハードウェアトランザクションは、コミットすることができる。この一例として、オープンアドレスハッシュテーブルを表すアレイを考えたい。スレッドは、このハッシュテーブルにおいてｌｏｏｋｕｐ（ｘ）処理およびｉｎｓｅｒｔ（ｘ）処理を実行するとしてよい。 占有率がしきい値に到達すれば、スレッドは、新しいアレイを割り当て、旧アレイから新アレイへ要素を再ハッシュすることによって、ハッシュテーブルのサイズを倍増すると決定する。探索（ｌｏｏｋｕｐ）処理および挿入（ｉｎｓｅｒｔ）処理は、短いトランザクションであり、ほとんどの場合はハードウェアで成功するとしてよい。これとは違い、再ハッシュはソフトウェアトランザクションとして実行されるとしてよい（再ハッシュを実行するスレッドは単一グローバルロックを獲得する）。この場合、ソフトウェアトランザクションと複数の並列ハードウェアトランザクションとの間で正確にコンフリクトを検出することで、ハードウェアトランザクションとして実行される探索処理は旧アレイのデータを用いてコミットされ得る一方で、新アレイへの再ハッシュが実行される。さらに、旧アレイの終端付近で（つまり、まだ再ハッシュされていない部分で）発生するハードウェアトランザクションとして実行される挿入処理は、再ハッシュの間でもコミットが可能である。このため、実施形態によれば、長いソフトウェアトランザクションが並列に実行されている小さいハードウェアトランザクションをコミットさせることで、スループットが改善される。
【００５９】
上述したようなブルームフィルタコンフリクト検出技術によって並列化が改善されるが、上述した実施形態では単一グローバルロックを利用していることを考えると、依然として非効率な点がある可能性がある。他の実施形態において、複数のハードウェアトランザクションおよび複数のソフトウェアトランザクションを並列に実行してコミットさせることが可能になるトランザクショナルメモリシステムが提供されるとしてよい。概して、キャッシュベースのハードウェアトランザクショナルメモリシステムをハードウェアコンポーネントに用いるとしてよく、無効化ベースのソフトウェアトランザクショナルメモリシステムをソフトウェアコンポーネントに用いるとしてよい。これらの実施形態は、前進を保証することは変わらないまま、複数のハードウェアトランザクションが複数のソフトウェアトランザクションと並列に実行可能となるハイブリッドトランザクショナルメモリシステムを提供する。
【００６０】
ここで図４を参照すると、本発明の一実施形態に係るハイブリッドトランザクショナルメモリシステムを説明するためのブロック図である。図４に示すように、ＨＴＭシステム４００は、複数のハードウェアトランザクションモードおよび複数のソフトウェアトランザクションモードを可能とする。図４に示す実装例において、トランザクションは、本明細書ではライトハードウェア（ＬｉｔｅＨＷ）トランザクションモードと呼ばれる第１のハードウェアトランザクションモード４１０で開始される。オーバーフローまたはサポートされていない命令が発生する場合、トランザクションは直ちに別の種類のトランザクションモードにアップグレードされる。これに代えて、トランザクションが他の理由で（例えば、コンフリクトのため）アボートされる場合、トランザクションは、本明細書ではブルームフィルタハードウェア（ＢＦＨＷ）モードと呼ばれる第２のハードウェアトランザクションモード４２０にアップグレードされる前に、複数回再試行される。トランザクションは、同様に複数回再試行した後でもコミットしない場合、本明細書において投機的ソフトウェア（ＳｐｅｃＳＷ）モードと呼ばれる第１のソフトウェアトランザクションモード４３０に更新される。このモードでは再度、本明細書では取り消し不能ソフトウェア（ＩｒｒｅｖｏｃＳＷ）モードと呼ばれる第２のソフトウェアトランザクションモード４４０にアップグレードする前に、トランザクションを複数回再試行するとしてよい。図４では特定のモードおよびやり取りを図示しているが、実施形態はこれに限定されないと理解されたい。
【００６１】
大半のトランザクションが短く、ＴＭがサポートしているキャッシュ空間に収まるメモリにアクセスし、サポートされていない命令は含んでいない場合、これらのトランザクションは、ソフトウェアトランザクションと同期する必要はなく、ハードウェアでそのまま成功し得る。大半の軽量型のトランザクションは第１のハードウェアトランザクションモード（ＬｉｔｅＨＷ）である。このタイプのトランザクションは、リードおよびライトについてアノテートすることなく実行され、コミットしようと試みるタイミングで実行されているソフトウェアトランザクションが無い場合にはコミットに成功し得る。このタイプのトランザクションは単純で高速であるが、ソフトウェアトランザクションとの並列性はほとんど実現されない。
【００６２】
第２のハードウェアトランザクションモードであるＢＦＨＷは、ハードウェアトランザクションがリードおよびライトしたロケーションをソフトウェアブルームフィルタを用いて記録し、並列に実行されるソフトウェアトランザクションとのコンフリクトを検出できるようにする。このタイプのトランザクションは、ＬｉｔｅＨＷトランザクションに比べるとオーバーヘッドが増加するが、並列に実行されているソフトウェアトランザクションが存在する場合でもコミットが可能である。ハードウェアトランザクションは、高速であるが、サポートされていない命令またはオーバーフローのためにベストエフォート型のＨＴＭでは失敗する可能性がある。このため、ソフトウェアフォールバックを実施する。
【００６３】
続いて、第１のソフトウェアトランザクションモード（ＳｐｅｃＳＷ）は、投機的ソフトウェアトランザクションを実行する。投機的ソフトウェアトランザクションでは、トランザクションが、他のソフトウェアトランザクションおよびハードウェアトランザクションとの間でのコンフリクト検出のために、リードおよびライトしたロケーションをブルームフィルタに記録し、コミットフェーズにおける遅延更新のために全てのライトをハッシュテーブルに格納する無効化は、コミット後に実行されて、インフライトのコンフリクトしているトランザクションをアボートして、トランザクション毎にロックを用いて不透明性を保証する。 この第１のソフトウェアトランザクションモードでは、各リード処理を有効化して、ゾンビトランザクション（アボートされるであろうトランザクション）が矛盾する状態に到達しないようにする。
【００６４】
最後に、第２のソフトウェアトランザクションモードであるＩｒｒｅｖｏｃＳＷが全ての更新を（直接メモリに）実行して、アボートは出来なくなる。この性質のために、任意の所与のタイミングにおいて実行可能なＩｒｒｅｖｏｃＳＷトランザクションは１つのみである。しかし、複数のＳｐｅｃＳＷトランザクションおよびＢＦＨＷトランザクションを、一のＩｒｒｅｖｏｃＳＷトランザクションと並列に実行することができる。
【００６５】
複数のソフトウェアトランザクション間におけるコンフリクト検出は、上述したように、ブルームフィルタを用いて実現される。ソフトウェアトランザクションとハードウェアトランザクションとの間のコンフリクト検出もブルームフィルタを利用するが、エスケープ動作が無いベストエフォート型のＨＴＭを用いるので、一般的にコンフリクトが検出されるとハードウェアトランザクションをアボートすることになる。この動作は、ハードウェアトランザクションの分離性が強いためである。ハードウェアがトラッキングするメモリロケーションはどれもコンフリクトが発生するので、ソフトウェアトランザクションが当該ロケーションにアクセスしてコンフリクトが発生する場合にはハードウェアトランザクションをアボートする。さらに、ハードウェア更新は、ハードウェアトランザクションがコミットするまでは、他のスレッドには可視状態とならない。
【００６６】
実施形態はハードウェアトランザクションとソフトウェアトランザクションとの間のコンフリクト検出を、ハードウェアトランザクションがコミットする後まで延期する。ハードウェアトランザクションはこの後、全てのインフライトのコンフリクトしているソフトウェアトランザクションを無効化（インバリデート）するコミット後フェーズを実行する。ハードウェアトランザクションは既にコミットされているので、ブルームフィルタ情報を他のスレッドと共有しても、当該ハードウェアトランザクションがアボートされることはない。
【００６７】
各トランザクションは、ソフトウェアトランザクションかハードウェアトランザクションかに関わらず、複数のフェーズを経る。各フェーズにおける動作は、トランザクションの種類によって決まる。最初のフェーズは、トランザクションが開始される開始フェーズである。ハードウェアトランザクションは開始ハードウェアトランザクション命令を呼び出すが、ソフトウェアトランザクションは開始アドレスに関する情報を記録して、少なくとも１つのソフトウェアトランザクションが存在する旨を示すフラグ（例えば、ｓｗ＿ｅｘｉｓｔｓフラグ）等の指標を利用して他のスレッドに自分の存在を通知する。
【００６８】
実行フェーズでは、リード処理およびライト処理をアノテートし、この動作は実行しているトランザクションの種類によって決まる。ＬｉｔｅＨＷトランザクションを除く全ての種類のトランザクションで、アクセスしたロケーションをブルームフィルタに記録する。
【００６９】
アボートフェーズでは、ハードウェアによって自動的にハードウェアアボートを取り扱う。ソフトウェアトランザクションの場合、ソフトウェアはトランザクション実行中に記録した情報をクリアして、開始フェーズで格納されたアドレスから再度開始する。
【００７０】
コミットフェーズでは、トランザクションがコミットされれば、コンフリクト検出を実行して、メモリ更新を実行する。実装方法はトランザクションの種類に応じて決まる。
【００７１】
コミット後フェーズにおいて、トランザクションは無効化を実行するとしてよい。このフェーズはトランザクションが既にコミットしておりライトセットロケーションでメモリを更新した後に実行されることに留意されたい。このフェーズにより、コミットしたばかりのトランザクションとコンフリクトしているインフライトのソフトウェアトランザクションが全てアボートされることが保証される。
【００７２】
簡単に先述したが、第１のハードウェアモードであるＬｉｔｅＨＷは、追加で発生するソフトウェアオーバーヘッドが無視可能なレベルであり、全てハードウェアで実行されるので、最も単純で最も高速なタイプである。ＬｉｔｅＨＷトランザクションは、ソフトウェアトランザクションが無い場合にのみコミット可能である。図５は、一実施形態に係るこのようなトランザクションの実行を説明するためのフローチャートである。方法５００は、例えば、ユーザレベルハードウェアトランザクション開始命令によって、ハードウェアトランザクションの実行を開始する（ブロック５１０）。次に、トランザクションボディを実行する（ブロック５２０）。このクリティカルセクションの実行では、リードまたはライトをどれも記録しない。トランザクションは、コミットしようと試みる場合（ブロック５３０）、現在実行中のソフトウェアトランザクションが存在するか否かを（例えば、ｓｗ＿ｅｘｉｓｔｓフラグを確認することで（ソフトウェアトランザクション実行中であれば、ｓｗ＿ｅｘｉｓｔｓ！＝０））確認する（ひし形５４０）。並列に実行されているソフトウェアトランザクションが存在する場合、ひし形５５０に進み、再試行しきい値（Ｍ）に到達したか否かを判断する。到達していない場合、ブロック５５５に進み、再試行カウントをインクリメントする。次に上述したブロック５１０に戻る。逆に、トランザクションの再試行がしきい値に等しい回数だけ行われていた場合、ブロック５５８に進み、トランザクションは第２のハードウェアトランザクションモードであるＢＦＨＷモードに切り替わる。
【００７３】
ひし形５４０において実行中のソフトウェアトランザクションが無いと判断される場合（ｓｗ＿ｅｘｉｓｔｓ＝０）、ひし形５６０でトランザクションがアボートされていないと仮定して、トランザクションはコミットに成功する。ＬｉｔｅＨＷはハードウェアトランザクションであるので、当該トランザクションのコミットは瞬時に行われるとしてよい（ブロック５６５）。トランザクションが、実行中の任意の時点でハードウェアコンフリクト検出メカニズムによってアボートされる場合、アボートハンドラは、ハードウェアがセットするアボートステータスを確認して、同じモードでこのトランザクションを再試行するか否か（最大でＭ回）、または、ＳｐｅｃＳＷ（ブロック５７０）に切り替わるか否か（例えば、アボートがオーバーフローを理由として発生した場合）、または、ＩｒｒｅｖｏｃＳＷ（ブロック５８０）に切り替わるか否か（例えば、アボートが入出力命令等のサポートされていない命令によって発生した場合）を判断する。
【００７４】
図６は、ＬｉｔｅＨＷトランザクション５０１の複数のフェーズをより詳細に説明するための図である。開始フェーズにおいて、トランザクションは開始ハードウェアトランザクション命令を実行する（例えば、ｔｘｂｅｇｉｎ命令）。実行中、ＯｎＲｅａｄハンドラおよびＯｎＷｒｉｔｅハンドラ（ブルームフィルタをアクセスで更新するライブラリベースのハンドラ等のハンドラ）は空である。ＯｎＡｂｏｒｔハンドラは、再試行回数をインクリメントして、当該トランザクションをＬｉｔｅＨＷトランザクションとして再試行するか、または、異なるモードに切り替えるか、を再試行回数およびアボート理由に基づいて判断する。最後に、コミットフェーズは、同様にハードウェアで実行されるが、ｓｗ＿ｅｘｉｓｔｓフラグを確認して、ハードウェアトランザクション終了命令（例えば、ｔｘｅｎｄ命令）を呼び出す。この種類のトランザクションには、コミット後フェーズは無い。
【００７５】
図７は、一実施形態に係るＢＦＨＷトランザクションの実行を説明するためのフローチャートである。方法６００は、例えば、ユーザレベルハードウェアトランザクション開始命令によって、ハードウェアトランザクションの実行を開始する（ブロック６１０）。次に、トランザクションボディを実行する（ブロック６２０）。実行中、トランザクションは、リードまたはライトされたメモリロケーションをリードブルームフィルタおよびライトブルームフィルタに記録する。トランザクションは、コミットしようと試みる場合（ひし形６３０）、コミットロックが獲得されているか否かを確認する（ひし形６４０）。当該ロックが解放されている場合、且つ、アボートが発生していないと仮定する場合（ひし形６６０で判断）、トランザクションは自身のハードウェアトランザクションロックを取得して（ブロック６７０）、コミットする（ブロック６７５）。
【００７６】
トランザクションロックが獲得されている場合、ソフトウェアトランザクションが現在コミットしている最中である。ある実施形態において、この場合にすべき最も単純なことはアボートである。これは、ハードウェアトランザクションは、コミット中のソフトウェアトランザクションとの間で、コンフリクトするメモリ更新を持つ場合があるためである。このケースは、後述する図８により詳細に示す。
【００７７】
しかし、ハードウェアトランザクションは、ソフトウェアトランザクションがコミットしている間に、コミット中のソフトウェアトランザクションとの間にコンフリクトが無ければ、コミットすることが可能である。これは、ブルームフィルタを比較することに基づいて判断し得る。このハードウェアトランザクションモードの動作を最適化すると、コミットロックが獲得されていることが分かれば、コミット中のソフトウェアトランザクションのブルームフィルタを確認する。ブルームフィルタがコンフリクトを示している場合、ハードウェアトランザクションはアボートする。コンフリクトを示していない場合、（上述したように自身のトランザクションロックを取得した後）コミットしてよい。このケースは図９に示す。
【００７８】
ＬｉｔｅＨＷと同様に、ＯｎＡｂｏｒｔハンドラは、複数のソフトウェアモード（例えば、ブロック６５８および６９０）のうちいずれか１つに上がるか否か、または、再試行回数がしきい値数に到達したか否か（ひし形６５０）を判断する。到達していなければ、ブロック６５５で再試行回数をインクリメントして、ブロック６１０でトランザクションを再度開始する。
【００７９】
ライトされたトランザクショナルメモリは、全てハードウェアでコミットされる。最初に、トランザクションは、コミットロックおよびソフトウェアブルームフィルタ（コミットロックが獲得されている場合）を確認することによって、コミット可能か否かを判断する（ひし形６５０）。コンフリクトが無い場合（コミットロックが解放されているか、または、ハードウェアトランザクションのブルームフィルタとソフトウェアトランザクションのブルームフィルタとの間に共通部分が無い場合）、ハードウェアトランザクションは、自身のトランザクションロックを取得する（ブロック６７５において）（図８および図９においてｔｌｏｃｋと図示する）。このトランザクションロックは、所有主であるハードウェアトランザクションのみが取得するので、当該トランザクションが取得しようと試みる場合は常に解放されている。しかし、より詳細に後述するが、トランザクションロックは、コミットフェーズを開始するソフトウェアトランザクションとの競合を防ぐために用いられる。
【００８０】
トランザクションがアボートされる場合、当該トランザクションのロックは、投機的ライトセットの一部であるので、自動的に解放されることに留意されたい。さらに、ロックにライトされる値は、ハードウェアトランザクションが変更をメモリにコミットした場合にのみ他のスレッドに見えるようになる。ロックが獲得された後であって、変更がメモリにコミットされる前に、別のスレッドがこのロケーションを確認する場合、ハードウェアトランザクションはアボートされる。これによって競合は発生し得ないよう保証される。
【００８１】
図７を参照しつつ説明を続けると、ブロック６７５においてコミットした後、コミット後フェーズがこの第２のハードウェアトランザクションモードについてソフトウェアで実行される。コミット後フェーズは、ハードウェアトランザクションが変更をメモリにコミットした後に行われる。図から分かるように、コミット後の処理は、コンフリクトするソフトウェアトランザクションを無効化することを含む（ブロック６８０）。この時点において、ハードウェアトランザクションは既にコミットされているが、当該ハードウェアトランザクションとコンフリクトするソフトウェアトランザクションは全て確実にアボートされることに留意されたい。これは、ハードウェアトランザクションのブルームフィルタを、全てのインフライトのソフトウェアトランザクションのブルームフィルタに対して確認することによって実現される。コンフリクトが検出されれば、ソフトウェアトランザクションをアボートする。無効化プロセスを終了した後、ハードウェアトランザクションはロックをリセットする。
【００８２】
図８は、開始フェーズ、実行フェーズ、コミットフェーズおよびコミット後フェーズを含む基本的なブルームフィルタベースハードウェアトランザクション６０１をさらに詳細に説明するための図である。図から分かるように、実行中、リードおよびライトを対応するリードブルームフィルタおよびライトブルームフィルタに追加する。しかし、他の実施形態では、一のブルームフィルタをリードセットおよびライトセットの両方に利用し得ると理解されたい。続いて、コミットロックが獲得されているか否かを判断する。コミットロックが獲得されている場合、この単純実装例では、トランザクションはアボートされる。コミットロックが解放されている場合、トランザクションロックを獲得して、トランザクションライトをコミットする。この後コミット後フェーズにおいて、ブルームフィルタ共通部分演算を実行して、全てのコンフリクトするソフトウェアトランザクションをアボートし、この後でトランザクションロックを解放する。
【００８３】
図９は、開始フェーズ、実行フェーズ、コミットフェーズおよびコミット後フェーズを含む、最適化されたブルームフィルタベースハードウェアトランザクション６０２さらに詳細に説明するための図である。この場合、コミットロックが獲得されている場合、ブルームフィルタ共通部分演算を用いてコンフリクトを検出して、コンフリクトが存在するか否かを判断し、コンフリクトが存在しない場合にはハードウェアスレッドをコミットし、コンフリクトが存在する場合にはトランザクションをアボートするとしてよい。その他の点については、図８の処理と同様である。
【００８４】
図１０は、一実施形態に係る投機的ソフトウェアトランザクションの実行を説明するためのフローチャートである。方法７００は、ソフトウェアトランザクションの実行を開始する（ブロック７１０）。続いて、トランザクションボディを実行する（ブロック７２０）。図から分かるように、実行中、リードロケーションおよびライトロケーションをブルームフィルタに記録する。コミットの際（ブロック７３０）、トランザクションはコミットロックを取得して（ブロック７４０）、コンテンションマネージャを参照し（ブロック７６０）（ハードウェア、ソフトウェア、ファームウェアまたは他のロジックあるいはこれらの組み合わせで実装され得る）、コミットすべきかアボートすべきかを判断する（コンフリクトするインフライトのソフトウェアトランザクションは継続して実行するとしてよい）。コンテンションマネージャがトランザクションをアボートすると判断する場合、トランザクションはコミットロックを解放して、ひし形７９０で決定されるように再試行数に応じて、ＳｐｅｃＳＷトランザクションとして再試行する。このしきい値未満である場合、ブロック７９２で再試行カウンタをインクリメントして、トランザクションを投機的ソフトウェアトランザクションモードで再度実行する（ブロック７１０）。しきい値を超えている場合、ブロック７９５でトランザクションを取り消し不能ソフトウェアトランザクションモードに切り替える。
【００８５】
一方、トランザクションがコミット可能である場合、取り消し不能ロックを取得して（ブロック７６５）、変更をメモリにコミットして（ブロック７７０）、インフライトのコンフリクトするソフトウェアトランザクションを無効化し（ブロック７７５）、ロックを解放する（ブロック７８０）。
【００８６】
ＳｐｅｃＳＷトランザクション実行をさらに詳細に図１１で示す。図から分かるように、投機的ソフトウェアトランザクション７０１は全てのフェーズをソフトウェアで実行する。図１１の実施形態では、メインボディ実行中、リードを有効化してリードブルームフィルタに追加し、ライトをライトブルームフィルタに追加する。更新後の値をハッシュテーブルまたはその他の一時的ストレージにライトすることによって、遅延更新を実行し得ることに留意されたい。コミットフェーズ中、トランザクションは、コミットが許可されていると仮定して、取り消し不能ロックを取得し、メモリを更新する。コミットが許可されていない場合、トランザクションは、ロックを解放してトランザクションを再度開始する。そして、コミット後フェーズにおいて、トランザクションは無効化を実行して、両ロックを解放する前に、全てのコンフリクトするソフトウェアトランザクションを無効化する。
【００８７】
最後に、ＳｐｅｃＳＷトランザクションはＢＦＨＷのコミット中であっても正しく実行され得ることに留意されたい。ＢＦＨＷのコミットの準備が整った時点でＳｐｅｃＳＷトランザクションが既にコミットプロセスを開始している場合、ＢＦＨＷトランザクションは、コミットロックが獲得されていることを観察して、コンフリクトが存在するか否か確認するべく自分のブルームフィルタをソフトウェアブルームフィルタに対して確認する。 コンフリクトが無い場合、ハードウェアトランザクションはコミット可能であり、コンフリクトが存在する場合には、ＢＦＨＷをアボートする。
【００８８】
しかし、ＳｐｅｃＳＷトランザクションがコミットフェーズを開始する前にＢＦＨＷがコミットロックを確認する場合、２通りのシナリオのうちいずれかとなる。ＢＦＨＷハードウェアトランザクションがコミットする前にコミットロックを変更する（この結果、ハードウェアトランザクションがアボートされ、潜在的なコンフリクトが無くなる）か、または、ＢＦＨＷハードウェアトランザクションがコミットした後にコミットロックを変更する。投機的ソフトウェアトランザクションは、ハードウェアトランザクションとの間にコンフリクトが有るか否かを確認しないので、コミットされたばかりのハードウェアトランザクションとの間のコンフリクトを見逃す可能性があり、変更をメモリにコミットし始める可能性がある。このシナリオを回避するべく、全てのＳｐｅｃＳＷトランザクションは、コミットロックを取得した後に全てのハードウェアトランザクションのロックを確認して、ハードウェアトランザクションのロックが解放されるまで待機する。トランザクションロックが解放された場合にＳｐｅｃＳＷトランザクションが依然として有効である場合、コミットされたハードウェアトランザクションのいずれとの間にもコンフリクトが無かったことになる。
【００８９】
ここで図１２を参照すると、取り消し不能ソフトウェアトランザクションであるＩｒｒｅｖｏｃＳＷの実行を説明するためのフローチャートが図示されている。図１２から分かるように、方法８００はトランザクションの開始フェーズで開始される（ブロック８１０）。次に、トランザクションは取り消し不能ロックおよびコミットロックの両方を取得する（ブロック８２０）。この後、主要部分であるトランザクションボディをブロック８３０で実行するとしてよい。取り消し不能ソフトウェアトランザクションについて、全ての更新を（直接メモリに対して）実現するので、トランザクションは、シリアル化を保証するべく、実行を開始するとすぐに取り消し不能ロックおよびコミットロックの両方を取得することに留意されたい。次に、トランザクションをコミットする（ブロック８４０）。この後、例えば、ブルームフィルタセットの共通部分に基づき、コンフリクトするソフトウェアトランザクションを無効化する（ブロック８５０）。最後に、両方のロックを解放する（ブロック８６０）。
【００９０】
図１３は、一実施形態に係る、取り消し不能ソフトウェアトランザクション８０１をさらに詳細に説明するための図である。実行開始時において、両方のロックを取得してソフトウェアフラグをセットすることに留意されたい。メインボディにおいて、直接更新を利用するが、リードおよびライトを対応するブルームフィルタに追加して、コンフリクトするソフトウェアトランザクションについて後で無効化できるようにする。ある実施形態において、取り消し不能トランザクションはアボートできないので、コミットフェーズは実質的にノーオペレーション（ＮＯＰ）である。コミット後フェーズは投機的ソフトウェアトランザクションのコミット後フェーズと同様で、現在のトランザクションは既にコミットされているので、インフライトのコンフリクトするソフトウェアトランザクションを無効化する。
【００９１】
ある実施形態において、投機的ソフトウェアトランザクションがコンテンションマネージャを用いて、コミットフェーズに至った場合にコミット可能であるか否かを判断する。コンテンションマネージャは、コミット中のトランザクションがコミットを許可されると全てのインフライトのトランザクションをアボートすると見なし、さまざまな要因に基づいて、アボートすべきどの一または複数のトランザクションについて前進を許可するか決定する。ある実施形態において、この決定は、さまざまな要因のうち、優先度、コミット中のトランザクションおよびコンフリクトしているトランザクションのリードセットサイズおよびライトセットサイズ、および、それぞれのスレッドのトランザクションの進み具合（例えば、それまでのコミット数）に基づいて行われるとしてよい。
【００９２】
コミット後に無効化を実行することによって、新しいトランザクションはコミットフェーズ中に開始することが保証され、無効化プロセスが見逃すことはない。トランザクションの開始が遅すぎたことによって無効化プロセスがトランザクションを見逃すことがあれば、当該トランザクションの開始は、コミット中のトランザクションの無効化プロセスの後であったことになる。このため、当該トランザクションはコミット中のトランザクションがライトをコミットした後に開始された。これによって、新たに開始されたトランザクションの全てのリードは、コミット中のトランザクションの後にシリアル化され、一貫性を持つ。以下に示す表１は、一実施形態に係る無効化プロセスを疑似コードで表したものである。
【表１】
0006304845.tif 000002
【００９３】
リードそれぞれについて、当該リードを実行するトランザクションのためのライトセットの一部でない場合に、有効化を実行する。リードがライトセットの一部である場合、トランザクション用の更新後の値を格納しているハッシュテーブルから値が返され、有効化を実行する必要が無くなる。
【００９４】
ある実施形態において、有効化は以下のように実行されるとしてよい。最初に、スレッドは、新しいリードロケーションをブルームフィルタに挿入して、当該ロケーションをリードする。この順序によって、コミット中のトランザクションの無効化プロセスが潜在的なコンフリクトを見逃すことが無くなる。リードロケーションの値は、リードされた後、別のトランザクションがコミットフェーズ中でメモリロケーションを更新中である可能性があるので、戻すのはまだ安全でない。現在のリードが更新直後のロケーションに対するものである場合、このリードを戻すとプログラム動作に誤りが生じる可能性がある。これは、現在のトランザクションの全ての他のリードはコミット中のトランザクションがメモリを更新する前からのものであるためである。
【００９５】
この状況になることを回避するべく、まだライトされていないリード全てについて有効化コードを実行するとしてよい。このコードは、取り消し不能ロックが獲得されたか否かを確認するためのものであり、獲得されていれば、ソフトウェアトランザクションのブルームフィルタ（取り消し不能ロックの識別子で指定）をリードしてコンフリクトが存在するか否かを判断する。その間にロックが変更されれば、コンフリクトは有効化コードに気づかれない可能性がある。しかし、有効化終了時に、トランザクションは他のソフトウェアトランザクションによって無効化されたか否かを確認する。ロックがその間に解放されていれば、コミット中のトランザクションは無効化を終了していたはずであることを意味する。有効化が進行し、トランザクションがコミット中のトランザクションによって無効化されなかった場合、リードは安全である。
【００９６】
ここで表２を参照すると、一実施形態に係る有効化プロセスの疑似コードが図示されている。
【表２】
0006304845.tif 000003
【００９７】
取り消し不能トランザクションは、実行開始と共に、コミットロックおよび取り消し不能ロックの両方を取得する。投機的トランザクションは最初に、コミットロックを取得して、コミット可能か否かに関してコンテンションマネージャを参照する。コンテンションマネージャがトランザクションのコミットを許可する場合、更新をメモリにライトする直前に取り消し不能ロックを取得する。
【００９８】
コミット中のトランザクションは、取り消し不能ロックを自身のコミットフェーズの開始時から取得して、コミットロックを不要としてもよい。しかし、投機的トランザクションの有効化コードは、取り消し不能ロックが取得済みであることに基づいている。コミットロックが存在せず、取り消し不能ロックが、コンテンションマネージャを参照する前にコミットフェーズの開始時点で取得された場合、以下の状況になる可能性がある。リードを実行して有効化コードを実行するＳｐｅｃＳＷトランザクションを考えられたい。当該トランザクションのリードが、コミット中のソフトウェアトランザクションとコンフリクトすることに気付くとする。このため、再度開始すると判断する。コミット中のトランザクションは、コンテンションマネージャを参照するが、（例えば、インフライトの高優先度のトランザクションがあるため）コミットは許可されない。このため、コミット中のトランザクションもアボートされる。しかし、他方のトランザクションは既にアボートされている。さらに、競合が発生する可能性があるので、コンテンションマネージャは、有効化中にアボートすると決断したばかりのトランザクションに基づいて、アボートを決断する。このため、２つのトランザクションが互いにアボートして、どちらも前進しない。
【００９９】
コミットロックを用いてこの状況を回避するとしてよい。このため、コミット中のトランザクションは、コミットロックを取得し、コミットの許可が与えられた後で初めて、当該コミットロックを取り消し不能ロックにアップグレードする。有効化コードがトランザクションをアボートする唯一の理由は、取り消し不能ロックを持つ別のトランザクションとのコンフリクトが存在することである。このため、あるトランザクションが有効化によってアボートされる唯一の理由は、コミットすることが確実なトランザクションとのコンフリクトが存在することである。
【０１００】
ハードウェアを用いて、複数の並列に実行されているハードウェアトランザクションに関して正確性を保証する。ハードウェアトランザクションは分離性が強く、メモリへの変更が他のスレッドにアトミックに見えるようになるのは、トランザクションがコミットした場合に限定される。さらに、コンフリクト検出をハードウェアで実装するので、コンフリクトの際には複数のトランザクションのうち１つがアボートされる。このため、複数のＬｉｔｅＨＷトランザクションと複数のＢＦＨＷトランザクションとの間で正しいやり取りが行われるように保証させるためにさらにソフトウェアコンポーネントを設けることはない。
【０１０１】
並列に行われている複数のソフトウェアトランザクションの間のコンフリクト検出は、無効化方法を用いて保証される。全てのコミット中のトランザクションは、他のインフライトのソフトウェアトランザクションとの間のコンフリクトを確認し、コンフリクトが有ればそれらのトランザクションをアボートする。コミット中のトランザクションはコミットロックを保持するので、無効化プロセス中にはソフトウェアトランザクションはコミット出来ない。取り消し不能トランザクションは、アクティブになるとすぐにコミットロックを取得するので、他のソフトウェアトランザクションが取り消し不能になることは出来ず、実行中にコミットすることも出来ない。取り消し不能トランザクションは、コミットすると、さらにインフライトのコンフリクトしているトランザクションを無効化して、シリアル化可能な正確性が損なわれないようにする。
【０１０２】
ハードウェア−ソフトウェア間の正確性に関して、ある実施形態によると、ＬｉｔｅＨＷトランザクションはソフトウェアトランザクションと同時に実行可能であるが、ソフトウェアトランザクションが現在実行中であればコミットできない。これは、ＬｉｔｅＨＷトランザクションがアクセスしたメモリロケーションの記録を取らないためである。このため、ＬｉｔｅＨＷトランザクションとソフトウェアトランザクションとの間ではコンフリクト検出を実行できない。
【０１０３】
これとは対照的に、ＢＦＨＷトランザクションは、アクセスするメモリロケーションをトラッキングするので、コンフリクト検出を実行することができる。さらに、ＢＦＨＷトランザクションは、ソフトウェアトランザクションの実行中であっても、コミットできる。コミット中のソフトウェアトランザクションがＢＦＨＷトランザクションとコンフリクトする場合、後者が自動的にハードウェアによってアボートされる。コミット中のＢＦＨＷトランザクションがインフライトのソフトウェアトランザクションとコンフリクトしている場合、ＢＦＨＷのコミット後フェーズ（無効化フェーズ）においてソフトウェアトランザクションをアボートする。さらに、ハードウェアトランザクションのブルームフィルタとソフトウェアトランザクションのブルームフィルタとをハードウェアトランザクションの終了時に比較することで十分である。このように、ハードウェアトランザクションのリードおよびライト毎にコンフリクト検出を行うことを回避できる。
【０１０４】
実施形態によればさらに、メモリの整合性も実現できる。並列処理されている複数のハードウェアトランザクションについて、ハードウェアトランザクションがコミットするまで更新は見えないので、ハードウェアによって自動的に不透明性が維持される。これによって、整合性が保証される。
【０１０５】
取り消し不能トランザクションが直接更新を用いて実行されている間、または、投機的トランザクションがライトバックを実行している間にハードウェアトランザクションがメモリロケーションをリードすることによって、非整合状態になり得る。しかし、ハードウェアトランザクションで発生する障害およびループによって、他のスレッドに目立つ影響を与えることなく、トランザクションをアボートさせて再度開始させる。
【０１０６】
上述したように、新たにリードが実行される度に有効化コードを用いてソフトウェアトランザクション間では不透明性を保証する。このようにして、ソフトウェアトランザクションは、別のソフトウェアトランザクションによって発生した更新のために非整合状態にはなることはない。
【０１０７】
ソフトウェアトランザクションは、コミットされたばかりのハードウェアトランザクションによって修正されたメモリロケーションをリードすることによって、非整合状態になる可能性がある。ある実施形態において、当該ソフトウェアトランザクションは、コミットが許可されず、ハードウェアトランザクションのコミット後フェーズで無効化される。しかし、当該ソフトウェアトランザクションは、非整合状態のデータをリードした結果、無効化されたことに気付く前に不正状態になる場合がある。
【０１０８】
この状況を回避するべく、ある実施形態において、ソフトウェアサンドボックスをＳｐｅｃＳＷトランザクションに提供するとしてよい。これに代えて、ハードウェアコミット後カウンタを用いてソフトウェアトランザクションについて不透明性を実現するとしてよい。この場合、当該カウンタは、ＢＦＨＷモードでコミットしたばかりで現在はコミット後フェーズのハードウェアトランザクションの数をカウントする。ＢＦＨＷトランザクションは、ハードウェアトランザクションをコミットする前にストア処理を用いて当該カウンタをインクリメントする。アトミック性が損なわれると、ハードウェアトランザクションはアボートされ、変更の記録は無くなる。コミット後フェーズが完了した後、ＢＦＨＷトランザクションは、例えば、フェッチ置換命令を用いてコミット後カウンタをデクリメントする。このカウンタを用いることで、ＢＦＨＷトランザクションが存在する場合にＳｐｅｃＳＷトランザクションについて不透明性を実現することができる。これに続いて、ＳｐｅｃＳＷトランザクションは、このカウンタをリードして、ゼロに到達するまで待機した後に新しい値をリードセットに追加するとしてよい。これによって、ＳｐｅｃＳＷトランザクションがリードした全ての新しい値が、ハードウェアトランザクションのコミット後フェーズ以外でリードされるので、整合することが保証される（それ以外の場合、ＳｐｅｃＳＷトランザクションはＢＦＨＷトランザクションのコミット後フェーズ中は無効と記される）。さらに、ＢＦＨＷトランザクションは、このコミット後カウンタを用いて、ＳｐｅｃＳＷトランザクションの整合性を保証し、さらに、ＳｐｅｃＳＷトランザクションとの間においてコミットフェーズ中の相互排除を保証するとしてよい（ある実施形態において、トランザクション毎のロックを使用しない）。
【０１０９】
コミットロックがソフトウェアトランザクションのコミットフェーズおよびコミット後フェーズをシリアル化することに留意されたい。しかし、ハードウェアトランザクションは、並列にコミット中のソフトウェアトランザクションおよびハードウェアトランザクションについて、シリアル化されない。このため、ハードウェアトランザクションは、コミットして、同時に無効化を実行することができ、システムのスケーラビリティおよび実用性が改善される。
【０１１０】
ここで図１４を参照すると、別の実施形態に係る装置を示すブロック図である。図１４に示すように、装置１００´は、図１に基づき上述した装置１００と同様の回路、コンポーネントおよびロジックを備える。実際には、多くのシステム実装例において、ハイブリッドトランザクショナルメモリシステムは、単一グローバルロックを実装する実施形態に係る場合（例えば、図２に基づき上述）でも、複数のロックおよび複数のソフトウェアモードトランザクションモードを実装するシステム（例えば、図４に基づき上述）であっても、同一ハードウェアで実行するとしてよい。
【０１１１】
説明を簡略化するべく、図１４の実施形態において図１と同一のコンポーネント、回路およびロジックについては説明を省略する。これに代えて、以下の説明では、ハイブリッドトランザクショナルメモリのトランザクションを複数のハードウェアトランザクションモードおよび複数のソフトウェアトランザクションモードで実行できるようにする装置１００´の相違点に重点を置く。図から分かるように、単一グローバルロックの代わりに、コミットロック１１２および取り消し不能ロック１１３を設けて、トランザクションモードに応じて、トランザクション内の複数の異なるタイミングで、複数の異なるソフトウェアトランザクションがこれらのロックを取得できるようにする（言うまでもなく、他の実施形態では追加のロックまたは異なるロックが存在し得ると理解されたい）。これに加えて、複数の再試行カウンタ１１８を提供するとしてよい。各再試行カウンタには所与のトランザクションモード再試行カウントが対応付けられている。そして同様に、複数の再試行しきい値１２０をさらに設ける。
【０１１２】
図１４をさらに参照しつつ説明を続けると、トランザクション管理モジュール１０６はさらに、上述したように、コミット後無効化を実行するよう構成されている無効化ロジック１２５を有する。概して、装置１００´およびシステム１４０´の残りの部分は図１と同一である。図４から図１３を参照しつつ説明したようなハイブリッドトランザクショナルメモリシステムで実行される追加の機能および処理を考えて、さまざまなロジックコンポーネントの実装には幾つか相違点があることに留意されたい。さらに、図１４では上位概念で図示しているが、多くの変更例および代替例が可能であると理解されたい。
【０１１３】
以下に記載する例はさらなる実施形態に関する。 
【０１１４】
例１において、装置は、プロセッサと、トランザクショナルメモリシステムにおいて、第１のソフトウェアトランザクションモードの少なくとも１つの第１のソフトウェアトランザクション、および、第２のソフトウェアトランザクションモードの第２のソフトウェアトランザクション、および、第１のハードウェアトランザクションモードの少なくとも１つのハードウェアトランザクション、および、第２のハードウェアトランザクションモードの少なくとも１つの第２のハードウェアトランザクションの並列実行を可能とする実行ロジックと、少なくとも１つのソフトウェアトランザクションが第１のソフトウェアトランザクションモードまたは第２のソフトウェアトランザクションモードで実行中である旨を示すべくフラグをアクティブ化するトラッキングロジックと、第２のハードウェアトランザクションモードの第１のハードウェアトランザクションの完了時に、第２のハードウェアトランザクションモードの第１のハードウェアトランザクションのフィルタセットが、実行中の少なくとも１つのソフトウェアトランザクションのフィルタセットとコンフリクトしているか否かを判断する共通部分ロジックと、コンフリクトが無い場合に第１のハードウェアトランザクションをコミットし、コンフリクトが有る場合に第１のハードウェアトランザクションをアボートする最終決定ロジックとを備える。尚、一部の実装例において、実行ロジック、トラッキングロジック、共通部分ロジックおよび最終決定ロジックのうち１または複数は、プロセッサ内に実装され得ることに留意されたい。また、上述したプロセッサはさまざまな手段を用いて実装可能であることにも留意されたい。一例を挙げると、プロセッサは、ユーザ機器タッチ起動デバイスに組み込まれているシステムオンチップ（ＳｏＣ）を含む。別の例を挙げると、システムは、ディスプレイおよびメモリを備え、本明細書に記載した例のうち１または複数の例に係るプロセッサを含む。
【０１１５】
例２において、第２のハードウェアトランザクションモードにおいて、第１のハードウェアトランザクションは任意で、第１のハードウェアトランザクションのメモリアクセス毎に第１のハードウェアトランザクションのフィルタセットを更新する。
【０１１６】
例３において、第１のソフトウェアトランザクションモードにおいて、第１のソフトウェアトランザクションは任意で、第１のソフトウェアトランザクションの完了時に、第１のロックおよび第２のロックを取得し、トランザクショナルメモリシステムのトランザクショナルメモリを、ハッシュテーブルに格納されているライトデータで更新する。
【０１１７】
例４において、第１のソフトウェアトランザクションモードにおいて、第１のソフトウェアトランザクションのコミット後に、第１のソフトウェアトランザクションは任意で、第１のソフトウェアトランザクションモードの別のソフトウェアトランザクションを無効化する。
【０１１８】
例５において、第２のハードウェアトランザクションモードにおいて、第２のハードウェアトランザクションは任意で、第２のハードウェアトランザクションのコミットの前に、コミットロックおよびトランザクションロックを取得する。
【０１１９】
例６において、例４の第１のソフトウェアトランザクションは任意で、第１のソフトウェアトランザクションのフィルタセットと別のソフトウェアトランザクションのフィルタセットとの間に共通部分が存在する場合、別のソフトウェアトランザクションを無効化する。
【０１２０】
例７において、例３の第１のソフトウェアトランザクションモードにおいて、第１のソフトウェアトランザクションは任意で、実行中にリードデータを有効化する。
【０１２１】
例８において、上述した例のうち任意の１つの第２のソフトウェアトランザクションモードにおいて、第２のソフトウェアトランザクションの開始時に、第２のソフトウェアトランザクションは、第１のロックおよび第２のロックを取得して、第２のソフトウェアトランザクションモードにおける第２のソフトウェアトランザクションの実行中に、第２のソフトウェアトランザクションは、トランザクショナルメモリシステムのトランザクショナルメモリを直接更新する。
【０１２２】
例９において、方法は、トランザクショナルメモリシステムにおいてプロセッサによって、第１のスレッドのソフトウェアトランザクションおよび第２のスレッドのハードウェアトランザクションを並列に実行する段階と、ソフトウェアトランザクションの実行を示すべくグローバルロックをアクティブ化する段階と、ハードウェアトランザクションの完了時に、グローバルロックの状態を決定し、グローバルロックがアクティブの場合には第１のスレッドのフィルタセットと第２のスレッドのフィルタセットとの間に共通部分が存在するかを判断し、そうでない場合にはハードウェアトランザクションをコミットする段階とを備える。
【０１２３】
例１０において、例９の方法は任意で、ソフトウェアトランザクションをコミットする段階と、ソフトウェアトランザクションの完了時にグローバルロックを非アクティブ化する段階とをさらに備える。
【０１２４】
例１１において、例９または１０の方法は任意で、ハードウェアトランザクション完了時にグローバルロックが非アクティブである場合にはフィルタセットの間に共通部分が存在するか否かを判断することなく、ハードウェアトランザクションをコミットする段階をさらに備える。
【０１２５】
例１２において、例９−１１のうち１つの方法は任意で、ハードウェアトランザクションによって、トランザクショナルメモリシステムのトランザクショナルメモリへのアクセスのアドレスを、第１のスレッドのフィルタセットに挿入する段階と、１または複数のハッシュ値でアクセスのアドレスをハッシュすることに基づいて第１のスレッドのフィルタセットの１または複数のフィールドを更新する段階とをさらに備える。
【０１２６】
例１３において、例９−１２のうち１つの方法は任意で、第１のスレッドのフィルタセットを第１のスレッドのライトセットに格納する段階をさらに備え、フィルタセットはブルームフィルタを含む。
【０１２７】
例１４において、例１３の方法は任意で、グローバルロックを第１のスレッドのフィルタセットに追加する段階と、フィルタセットの間に共通部分が存在するか否かを判断することに基づいてグローバルロックの状態を判断する段階とをさらに備える。
【０１２８】
例１５において、例９−１４のうち任意の１つの方法は任意で、ソフトウェアトランザクションにおいて第１のサイズから第２のサイズへとハッシュテーブルを並列に再ハッシュする段階と、ハードウェアトランザクションにおいてハッシュテーブルにアクセスし、並列に再ハッシュする段階の間にハードウェアトランザクションをコミット可能とする段階とをさらに備える。
【０１２９】
別の例に係る、命令を含むコンピュータ可読媒体は、上述の例のいずれかの方法を実行するためのものである。さらに別の例に係る装置は、上述の例のうち任意の１つの方法を実行する手段を備える。
【０１３０】
例１６において、少なくとも１つのコンピュータ可読媒体は、実行されるとシステムに、トランザクショナルメモリシステムの第２のハードウェアトランザクションモードで第２のハードウェアトランザクションを実行させ、第２のハードウェアトランザクションの完了時に第２のハードウェアトランザクションをコミットさせ、  第２のハードウェアトランザクションのコミット後に、第２のハードウェアトランザクションと、第２のハードウェアトランザクションと並列に実行している少なくとも１つのソフトウェアトランザクションとの間にコンフリクトが存在する場合には、少なくとも１つのソフトウェアトランザクションを無効化させることが可能になる複数の命令を備える。
【０１３１】
例１７において、例１６の少なくとも１つのコンピュータ可読媒体は任意でさらに、実行されるとシステムに、第２のハードウェアトランザクションのコミット前に、コミットロックが取得されているかを判断させ、その場合、第２のハードウェアトランザクションとコミットロックを取得した第１のソフトウェアトランザクションとの間にコンフリクトが存在するか否かを判断させることが可能になる複数の命令を備える。
【０１３２】
例１８において、例１７の少なくとも１つのコンピュータ可読媒体は任意でさらに、実行されるとシステムに、第２のハードウェアトランザクションと第１のソフトウェアトランザクションとの間にコンフリクトが存在する場合、第２のハードウェアトランザクションをアボートさせることが可能になる複数の命令を備え、第２のハードウェアトランザクションのフィルタセットと、第１のソフトウェアトランザクションのフィルタセットとの間に共通部分が存在する場合にコンフリクトが存在すると判断される。
【０１３３】
例１９において、例１７の少なくとも１つのコンピュータ可読媒体は任意でさらに、実行されるとシステムに、第１のソフトウェアトランザクションがコミットロックを取得した後、１または複数のハードウェアトランザクションによって１または複数のトランザクションロックが取得されたかを判断させ、その場合には、１または複数のトランザクションロックが解放されるまで第１のソフトウェアトランザクションのコミットを遅延させることが可能になる複数の命令を備える。
【０１３４】
例２０において、例１７の少なくとも１つのコンピュータ可読媒体は任意でさらに、実行されるとシステムに、トランザクショナルメモリシステムの第１のハードウェアトランザクションモードにおいて第１のハードウェアトランザクションを実行させ、第１のハードウェアトランザクションの完了時に、少なくとも１つのソフトウェアトランザクションが並列に実行されているかを判断させ、その場合、第１のハードウェアトランザクションをアボートさせ、そうでない場合、第１のハードウェアトランザクションをコミットさせることが可能になる複数の命令を備える。
【０１３５】
例２１において、例１７の少なくとも１つのコンピュータ可読媒体は任意でさらに、実行されるとシステムに、第１のソフトウェアトランザクションの実行中に第１のソフトウェアトランザクションによるトランザクショナルメモリシステムのトランザクショナルメモリに対するリード処理を有効化させ、リード処理が有効化される場合、リード処理のロケーションを第１のソフトウェアトランザクションのフィルタセットに追加させることが可能になる複数の命令を備える。
【０１３６】
例２２において、例１７の少なくとも１つのコンピュータ可読媒体は任意でさらに、実行されるとシステムに、第２のソフトウェアトランザクションモードで第２のソフトウェアトランザクションを実行させ、これは、第２のソフトウェアトランザクションの実行開始時において第１のロックおよびコミットロックを取得することと、第２のソフトウェアトランザクションの実行中に１または複数のメモリロケーションを直接更新することとを含み、さらに第２のソフトウェアトランザクションの完了時に、第２のソフトウェアトランザクションをコミットさせ、第１のソフトウェアトランザクションモードの１または複数の並列に実行されているソフトウェアトランザクションを無効化した後、第１のロックおよびコミットロックを解放させることが可能になる複数の命令を備える。
【０１３７】
例２３において、システムは、少なくとも１つのハードウェアトランザクションおよび少なくとも１つのソフトウェアトランザクションを並列に実行するハイブリッドトランザクショナルメモリロジックを有するプロセッサを備える。ハイブリッドトランザクショナルメモリロジックは、第１のハードウェアトランザクションモードにおいて第１のトランザクションを、第１のトランザクションがコミットされるまで、または、第１のトランザクションの再試行回数が第１のハードウェアトランザクションモードにおいて第１の回数しきい値になるまで実行した後、第１のトランザクションがコミットされない場合、第１のトランザクションを第１のソフトウェアトランザクションモードで実行するとしてよい。ハイブリッドトランザクショナルメモリロジックは、第１のハードウェアモードで実行される第１のトランザクションに対応付けられているフィルタセットと、第１のソフトウェアトランザクションモードで実行されている第２のトランザクションに対応付けられているフィルタセットとの間にコンフリクトが存在するか否かを判断する共通部分ロジックを含むとしてよく、コンフリクトに応じて、ハイブリッドトランザクショナルメモリロジックは、第１のハードウェアトランザクションモードにおける第１のトランザクションがコミットしないようにする。当該システムはさらに、プロセッサに結合されているトランザクショナルメモリを備える。
【０１３８】
例２４において、ハイブリッドトランザクショナルメモリロジックは任意で、第１のトランザクションがコミットされるまで、または、第１のソフトウェアトランザクションモードにおいて第１のトランザクションの再試行回数が第２の回数しきい値になるまで、第１のソフトウェアトランザクションモードで第１のトランザクションを実行し、第２の回数しきい値に到達した後は、第１のトランザクションがトランザクショナルメモリを直接更新する第２のソフトウェアトランザクションモードで第１のトランザクションを実行するとしてよい。
【０１３９】
例２５において、ハイブリッドトランザクショナルメモリロジックは任意で、第１のハードウェアトランザクションモードで実行する前に第２のハードウェアトランザクションモードで第１のトランザクションを実行し、ハイブリッドトランザクショナルメモリロジックは、第１のハードウェアトランザクションモードで第１のトランザクションを実行する前に、第３の回数しきい値まで第２のハードウェアトランザクションモードで第１のトランザクションを実行するとしてよい。
【０１４０】
例２６において、ハイブリッドトランザクショナルメモリロジックは任意で、第１のトランザクションに、第１のソフトウェアトランザクションモードで実行中にリードデータを有効化させ、リードデータに対応付けられているアドレスに基づいて第１のソフトウェアトランザクションモードで実行されている第１のトランザクションに対応付けられているフィルタセットを更新させ、ライトデータでハッシュテーブルを更新させるとしてよい。
【０１４１】
例２７において、例２６のハイブリッドトランザクショナルメモリロジックは任意で、第２のソフトウェアトランザクションモードにおいて第２のトランザクションに、第２のトランザクションの開始時に第１のロックおよび第２のロックを取得させ、その後に第２のトランザクションの実行中にトランザクショナルメモリを直接更新させ、第１のソフトウェアトランザクションモードにおいて第１のトランザクションに、第１のトランザクションのコミット時に第１のロックおよび第２のロックを取得させ、その後にハッシュテーブルからのライトデータでトランザクショナルメモリを更新させ、第１のソフトウェアトランザクションモードで並列に実行されている少なくとも１つの他のソフトウェアトランザクションを無効化させるとしてよい。
【０１４２】
例２８において、複数のトランザクショナルメモリトランザクションを実行するためのシステムは、トランザクショナルメモリシステムの第２のハードウェアトランザクションモードで第２のハードウェアトランザクションを実行する手段と、第２のハードウェアトランザクションの完了時に第２のハードウェアトランザクションをコミットする手段と、第２のハードウェアトランザクションのコミット後に、第２のハードウェアトランザクションと、第２のハードウェアトランザクションと並列に実行している少なくとも１つのソフトウェアトランザクションとの間にコンフリクトが存在する場合には、少なくとも１つのソフトウェアトランザクションを無効化する手段とを備える。
【０１４３】
例２９において、例２８のシステムは任意でさらに、第２のハードウェアトランザクションのコミット前に、コミットロックが取得されているかを判断し、その場合、第２のハードウェアトランザクションとコミットロックを取得した第１のソフトウェアトランザクションとの間にコンフリクトが存在するか否かを判断する手段を備える。
【０１４４】
例３０において、例２８のシステムは任意でさらに、第２のハードウェアトランザクションと第１のソフトウェアトランザクションとの間にコンフリクトが存在する場合、第２のハードウェアトランザクションをアボートする手段を備え、第２のハードウェアトランザクションのフィルタセットと、第１のソフトウェアトランザクションのフィルタセットとの間に共通部分が存在する場合にコンフリクトが存在すると判断される。
【０１４５】
例３１において、例２８のシステムは任意でさらに、第１のソフトウェアトランザクションがコミットロックを取得した後、１または複数のハードウェアトランザクションによって１または複数のトランザクションロックが取得されたかを判断し、その場合には、１または複数のトランザクションロックが解放されるまで第１のソフトウェアトランザクションのコミットを遅延させる手段を備える。
【０１４６】
例３２において、例２８のシステムは任意でさらに、トランザクショナルメモリシステムの第１のハードウェアトランザクションモードにおいて第１のハードウェアトランザクションを実行する手段と、第１のハードウェアトランザクションの完了時に、少なくとも１つのソフトウェアトランザクションが並列に実行されているかを判断する手段と、その場合、第１のハードウェアトランザクションをアボートし、そうでない場合、第１のハードウェアトランザクションをコミットする手段とを備える。
【０１４７】
例３３において、例２８のシステムは任意でさらに、第１のソフトウェアトランザクションの実行中に第１のソフトウェアトランザクションによるトランザクショナルメモリシステムのトランザクショナルメモリに対するリード処理を有効化する手段と、リード処理が有効化される場合、リード処理のロケーションを第１のソフトウェアトランザクションのフィルタセットに追加する手段とを備える。
【０１４８】
例３４において、例２８のシステムは任意でさらに、第２のソフトウェアトランザクションモードで第２のソフトウェアトランザクションを実行する手段であって、第２のソフトウェアトランザクションの実行開始時において第１のロックおよびコミットロックを取得する手段、ならびに、第２のソフトウェアトランザクションの実行中に１または複数のメモリロケーションを直接更新する手段を有する手段と、第２のソフトウェアトランザクションの完了時に、第２のソフトウェアトランザクションをコミットし、第１のソフトウェアトランザクションモードの１または複数の並列に実行されているソフトウェアトランザクションを無効化した後、第１のロックおよびコミットロックを解放する手段とを備える。
【０１４９】
上述した例についてはさまざまに組み合わせることが可能であると理解されたい。 
【０１５０】
実施形態は、多くの異なる種類のシステムで利用するとしてよい。例えば、一実施形態では、通信デバイスは本明細書で説明したさまざまな方法および技術を実行するよう構成され得る。言うまでもなく、本発明の範囲は通信デバイスに限定されず、他の実施形態は、これに代えて、命令を処理する他の種類の装置、または、コンピューティングデバイスで実行されることに応じて当該デバイスに本明細書で説明した方法および技術のうち１または複数を実行させる命令を含む１または複数の機械可読媒体に関するとしてよい。
【０１５１】
実施形態は、コードで実装されるとしてよく、命令を格納している非一時的記憶媒体に格納されるとしてよい。当該記憶媒体は、上記の命令を実行させるようシステムをプログラミングするために用いるとしてよい。記憶媒体は、これらに限定されないが、フロッピー（登録商標）ディスク、光ディスク、ソリッドステートドライブ（ＳＳＤ）、コンパクトディスクリードオンリーメモリ（ＣＤ−ＲＯＭ）、コンパクトディスクリライタブル（ＣＤ−ＲＷ）および光磁気ディスク等の任意の種類のディスク、リードオンリーメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）等のランダムアクセスメモリ（ＲＡＭ）、消去可能プログラミング可能リードオンリーメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラミング可能リードオンリーメモリ（ＥＥＰＲＯＭ）等の半導体デバイス、磁気カードまたは光カード、または、電子命令を格納するのに適した任意のその他の種類の媒体を含むとしてよい。
【０１５２】
本発明は限られた数の実施形態について説明してきたが、当業者であれば、数多くの変形および変更に想到するであろう。添付した請求項はそのような変形および変更も全て本発明の真の意図および範囲に含むことを意図している。
【図１】
0006304845.tif 000004
【図２】
0006304845.tif 000005
【図３】
0006304845.tif 000006
【図４】
0006304845.tif 000007
【図５】
0006304845.tif 000008
【図６】
0006304845.tif 000009
【図７】
0006304845.tif 000010
【図８】
0006304845.tif 000011
【図９】
0006304845.tif 000012
【図１０】
0006304845.tif 000013
【図１１】
0006304845.tif 000014
【図１２】
0006304845.tif 000015
【図１３】
0006304845.tif 000016
【図１４】
0006304845.tif 000017