このページの本文へ

ロードマップでわかる!当世プロセッサー事情 第170回

インテルCPU進化論 Haswellで導入されるCPUの改良 後編

2012年09月24日 12時00分更新

文● 大原雄介(http://www.yusuke-ohara.com/

  • この記事をはてなブックマークに追加
  • 本文印刷

新命令のTSXを理解するには
トランザクションの概念を理解する必要があり

TSXに関する説明スライド。粗粒度のロック機構を提供するHLE(Hardware Lock Elision)と、細粒度のロック機構(Restricted Transaction Memory)の2種類がある

 Haswellで追加された新命令に、「TSX」命令というものがある(関連記事)。TSX命令を理解するためには、まず「トランザクション」という概念を理解する必要がある。

 例えば、Windowsの「メモ帳」を2つ起動して、同じテキストファイルを開き、それぞれが別の部分を編集したとする(図2)。まずメモ帳1が赤い部分を書き換えて保存。ついでメモ帳2が青い部分を書き換えて保存した。さてこの場合どうなるか? メモ帳1から書き換えた赤い部分は、その後メモ帳2が書き換える際に上書きされてしまい、メモ帳1が編集する前の状態に戻ってしまっているはずだ。これがお互いに何もしていない、つまり「トランザクションがない」状態である。

図2 メモ帳を例にしたトランザクションの概念説明。メモ帳1がテキストの一部を、メモ帳2が他の部分を書き換えると……

「秀丸エディタ」ですでに編集中のテキストファイルを二重に開こうとすると表示される警告ダイアログ

 これでは当然不便なので「他のユーザーがテキストを開いている場合は、書き込みできるようには開かない」という「排他制御」が登場した。右の画像は同じテキストファイルを「秀丸エディタ」で二重に開こうとした場合に表示される警告ダイアログであるが、こうしてファイル単位で管理するのが、言ってみれば「粗粒度」の管理である。

 この方法は確実ではあるが、一度に複数のスレッドがテキストファイルを同時に開こうとした場合、最初に開いたスレッドだけが書き込み可能で、続くスレッドは全部読み出しオンリーになってしまうため不便である。だが図2のように、2つのスレッドがまったく異なる部分を書き換えることがはっきりしているなら、テキストファイル単位ではなく、行単位での読み書きを制御するほうが便利だ。

 テキストファイルでは現実的ではないが、例えばデータベースソフトの場合、「データベースファイル」という大きな塊の中が、細かく「レコード」という記録単位に分かれており、「クライアント1」と「クライアント2」が、それぞれ同時に読み書きを行なえるようになっている(図3)。ファイル単位で制御しようという場合、例えば「1ファイル/1行」に制限してファイル数を猛烈に増やす、ということで似た形の実装は可能だが、面倒なので普通こういうことはしない。こうした管理方式を、先ほどの「粗粒度」の管理に対して、「細粒度」の管理と呼ぶ。

図3 データベースではひとつのファイル内が細かい記録単位(レコード)に分かれているので、複数のプログラムが別々のレコードを同時に書き換えても問題を起こさない

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

最新記事

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン