Intel	
  TSX	
  について	
サイボウズ・ラボ	
  
2012-­‐06-­‐16(土)	
  星野 喬(@starpoz)	
  
x86/x64最適化勉強会4
自己紹介	
•  星野 喬(@starpoz)	
  
– サイボウズ・ラボ	
  
•  昔やってた研究	
  
– データベース,ストレージ,分散アルゴリズム	
  
•  今の仕事	
  
– Linux	
  kernel	
  の	
  IO	
  device	
  driver	
  書いてます	
  
•  アセンブラ書いたことありません(ぇ	
  
– CPU	
  の知識は多少ありますが...	
  
2
発表概要	
•  トランザクショナルメモリ	
  
•  Intel	
  TSX	
  
– HLE	
  
– RTM	
  
– 制約その他	
  
•  今後の展望	
  
•  まとめと参考文献	
  
3
会場の皆さんに質問	
•  並列プログラミングしたことありますか?	
  
– STM/HTM	
  を使ったことはありますか?	
  
– ロックを使ったことはありますか?	
  
– DB	
  トランザクション使ったことはありますか?	
  
•  デッドロックさせたことありますか?	
4
発表概要	
•  トランザクショナルメモリ	
  
•  Intel	
  TSX	
  
– HLE	
  
– RTM	
  
– 制約その他	
  
•  今後の展望	
  
•  まとめと参考文献	
  
5
ロックによる並列プログラミングの問題	
•  Deadlock	
  
•  合成不可能	
Thread1:	
  
	
  	
  lock	
  x	
  
	
  	
  lock	
  y	
  
	
  	
  write	
  x	
  
	
  	
  write	
  y	
  
	
  	
  unlock	
  y	
  
	
  	
  unlock	
  x	
Thread2:	
  
	
  	
  lock	
  x	
  
	
  	
  lock	
  y	
  
	
  	
  read	
  x	
  
	
  	
  read	
  y	
  
	
  	
  unlock	
  y	
  
	
  	
  unlock	
  x	
Thread2’:	
  
	
  	
  lock	
  y	
  
	
  	
  lock	
  x	
  
	
  	
  read	
  x	
  
	
  	
  read	
  y	
  
	
  	
  unlock	
  x	
  
	
  	
  unlock	
  y	
Function1:	
  
	
  	
  lock	
  x	
  
	
  	
  read	
  x	
  
	
  	
  unlock	
  x	
Function2:	
  
	
  	
  lock	
  x	
  
	
  	
  write	
  x	
  
	
  	
  unlock	
  x	
Function3:	
  
	
  	
  lock	
  x	
  
	
  	
  read	
  x	
  
	
  	
  write	
  x	
  
	
  	
  unlock	
  x	
Function3’:	
  
	
  	
  Function1	
  
	
  	
  Function2	
6
トランザクショナルメモリ	
  (TM)	
•  トランザクションを使ってメモリアクセス	
  
– Lock/unlock	
  をプログラマが書く必要なし	
  
– Deadlock	
  が起きない(方式による)	
  
– 合成可能	
  
•  実現方式	
  
– ハードウェア:	
  HTM	
  
– ソフトウェア:	
  STM	
  
– たくさんのバリエーションが提案されている	
  
7
トランザクション	
•  分けることのできない一連の情報処理単位	
  
•  ACID	
  特性	
  
– Atomicity:	
  トランザクションの実行は全か無のみ	
  
– Consistency:	
  常に一貫性のある状態を保つ	
  
– IsolaQon:	
  commit	
  まで変更は他に見えない	
  
– Durability:	
  commit	
  時に変更は永続的に記録される	
  
8
トランザクショナルメモリの歴史	
•  1986	
  	
  TM	
  のアイデア論文	
  
•  1993	
  	
  Hardware	
  TM	
  という名前で提案	
  
•  1995	
  	
  SoTware	
  TM	
  の提案	
  
•  2005	
  	
  Haskell	
  での	
  STM	
  実装	
  
•  2007	
  	
  Clojure	
  STM	
  言語レベルのサポート	
  
•  2010	
  	
  MS	
  .NET	
  で	
  STM	
  を使えないと判断	
  
•  2013	
  	
  Intel	
  TSX	
  が Haswell	
  に搭載予定	
  
Thanks	
  to	
  @nishio	
 9
トランザクショナルメモリのインターフェース	
•  Atomic	
  ブロック	
  
– トランザクションにしたいコードを囲むだけ	
  
•  その他	
  
– abort	
  命令	
  
– commit	
  成否を検知する命令	
  
– 明示的に排他対象を指定する方式もある	
  
10	
Thread1:	
  
	
  	
  atomic	
  {	
  
	
  	
  	
  	
  write	
  x	
  
	
  	
  	
  	
  write	
  y	
  
	
  	
  }	
Thread2:	
  
	
  	
  atomic	
  {	
  
	
  	
  	
  	
  read	
  x	
  
	
  	
  	
  	
  read	
  y	
  
	
  	
  }
Lock	
  に対する	
  TM	
  ってどう思えばいいの?	
•  Malloc/free	
  ßà	
  Garbage	
  CollecQon	
  
– GC	
  でメモリリークフリーなプログラミングができる	
  
– 性能は向上しているがオーバーヘッドはある	
  
•  Lock/unlock	
  ßà	
  TransacQonal	
  Memory	
  
– TM	
  で	
  Lock-­‐free	
  な並列プログラミングができる	
  
– STM	
  はオーバーヘッドが...	
  
– HTM	
  は使える実装や制約が...	
  
11
TM	
  実現方式の例	
12	
0	
  T1	
  begin	
  
1	
  T1	
  write	
  x	
  1	
  
2	
  T1	
  write	
  y	
  1	
  
3	
  T1	
  commit	
  
4	
  T2	
  begin	
  
5	
  T2	
  read	
  y	
  
6	
  T2	
  read	
  x	
  
7	
  T2	
  commit	
  
0	
x	
0	
y	
0	
 0	
0	
 0	
1	
 1	
1	
 1	
1	
 1	
1	
 1	
1	
 1	
T1	
  	
  
writes	
T2	
  	
  
writes	
x:1	
x:1,y:1	
T1	
T1	
T2	
T1	
T2	
T2	
tag	
 tag	
T1:	
  
	
  	
  write	
  x	
  1	
  
	
  	
  write	
  y	
  1	
  
T2:	
  
	
  	
  read	
  y	
  
	
  	
  read	
  x	
  
Run	
Memory
TM	
  実現方式の例	
  –cont.	
13	
0	
  T1	
  begin	
  
1	
  T1	
  write	
  x	
  1	
  
2	
  T2	
  begin	
  
3	
  T2	
  read	
  y	
  
4	
  T1	
  write	
  y	
  1	
  
5	
  T1	
  abort	
  
6	
  T2	
  read	
  x	
  
7	
  T2	
  commit	
  
0	
x	
0	
y	
0	
 0	
0	
 0	
0	
 0	
0	
 0	
0	
 0	
0	
 0	
0	
 0	
T1	
  	
  
writes	
T2	
  	
  
writes	
x:1	
x:1	
x:1,y:1	
T1	
T1	
T1	
T1	
T2	
T2	
T2	
T2	
T2	
	
  
tag	
	
  
tag	
T1:	
  
	
  	
  write	
  x	
  1	
  
	
  	
  write	
  y	
  1	
  
T2:	
  
	
  	
  read	
  y	
  
	
  	
  read	
  x	
  
Run	
Memory
TM	
  実現方式の例	
  –cont.	
•  Read-­‐set/write-­‐set	
  
– 各 trn	
  が	
  read/write	
  した領域	
  
– 同じ領域に自分以外がアクセスしたら	
  abort	
  
•  Private	
  writes	
  
– commit	
  するまで他の trn	
  に変更を見せない	
  
– abort	
  時に変更はなかったことにする	
  
14
PessimisQc	
  vs	
  OpQmisQc	
•  PessimisQc	
  
•  OpQmisQc	
15
PessimisQc	
  vs	
  OpQmisQc	
  –cont.	
•  PessimisQc	
  (悲観的)	
  
– 競合し得る trn	
  の同時実行を許さない	
  
– 必ず	
  commit	
  できる	
  
•  OpQmisQc	
  (楽観的)	
  
– 競合し得る trn	
  の投機的な同時実行を許す	
  
– 競合で commit	
  できないことがある	
  
– 状況次第で	
  pessimisQc	
  よりスケールする	
  
– 競合しやすい trn	
  だと資源の無駄	
  
16
トランザクショナルメモリ本	
•  2009	
  年頃までの	
  
TM	
  の研究まとめ	
  
•  参考文献	
  351	
  個!	
  
•  図表にして欲しい箇
所がたくさん...	
17
発表概要	
•  トランザクショナルメモリ	
  
•  Intel	
  TSX	
  
– HLE	
  
– RTM	
  
– 制約その他	
  
•  今後の展望	
  
•  まとめと参考文献	
  
18
Intel	
  TSX	
•  TransacQonal	
  SynchronizaQon	
  eXtension	
  の略	
  
•  2 つのインターフェースを提供	
  
– HLE:	
  Lock	
  prefix	
  の拡張で細粒度の排他を実現	
  
– RTM:	
  制約はあるが HTM	
  そのもの	
  
•  OpQmisQc	
  な振舞	
  
•  CPU	
  キャッシュを使って必要なデータを管理	
  
•  キャッシュライン単位での競合検出	
  
19
TSX	
  のための実装	
  (TM本	
  5.1	
  章を元に想像)	
•  Read-­‐set	
  
– キャッシュライン毎の	
  read	
  タグ	
  
– read	
  したアドレスを保持するバッファ	
  
•  Write-­‐set	
  
– 論理CPU毎の	
  Write	
  buffer	
  を流用	
  
or	
  L1/L2	
  d-­‐cache	
  を流用	
  
•  競合検出	
  
– Read-­‐set	
  に含まれるライン	
  à	
  write 要求	
  
– Write-­‐set	
  に含まれるライン	
  à	
  read/write	
  要求	
  
20
発表概要	
•  トランザクショナルメモリ	
  
•  Intel	
  TSX	
  
– HLE	
  
– RTM	
  
– 制約その他	
  
•  今後の展望	
  
•  まとめと参考文献	
  
21
HLE	
•  Hardware	
  Lock	
  Elision	
  の略	
  
– ロックを無視	
  
•  命令	
  
– XACQUIRE/XRELEASE	
  
– Lock	
  prefix	
  にさらに追加する prefix	
  
– トランザクションにしたいコードを	
  
XACQUIRE と	
  XRELEASE	
  で囲む	
  
22
HLE	
  動作概要	
23	
投機実行	
Write-­‐set	
  反映,破棄	
START	
END	
XACQUIRE	
XRELEASE	
 競合検出	
競合が起きないケース	
 競合が起きるケース	
投機実行	
Write-­‐set 破棄	
START	
END	
XACQUIRE	
 XACQUIRE	
  まで	
  
戻って通常実行	
XRELEASE
HLE: 動作概要	
  –cont.	
•  実行時の挙動	
  
– XACQUIRE	
  から	
  XRELEASE	
  までのコードは	
  
投機的に実行	
  
– Write-­‐set	
  の内容は	
  commit	
  されるまで	
  
他の論理	
  CPU	
  からは見えない	
  
•  競合が検出された場合	
  
– Abort	
  し XACQUIRE以降のメモリ操作が	
  
なかったことになる	
  
– HLE	
  なしで再実行:	
  必ず成功	
  
24
HLE:	
  メリットとデメリット	
•  メリット	
  
– 実際に競合がなければ並列実行可能	
  
•  細粒度に排他したプログラムに近い性能が期待	
  
– 既存のコードをほとんど修正なしで使える	
  
•  場合によってはリコンパイルのみ	
  
•  デメリット	
  
– 競合が頻繁に起きるケースは資源の無駄	
  
•  XACQUIRE/XRELEASE	
  をつけるべきではない	
  
25
発表概要	
•  トランザクショナルメモリ	
  
•  Intel	
  TSX	
  
– HLE	
  
– RTM	
  
– 制約その他	
  
•  今後の展望	
  
•  まとめと参考文献	
  
26
RTM	
•  Restricted	
  TransacQonal	
  Memory	
  の略	
  
– 制約つきの	
  TM	
  
•  命令	
  
– XBEGIN:	
  トランザクション開始	
  
– XEND:	
  トランザクション終了	
  
– XABORT:	
  明示的に	
  abort	
  
27
RTM	
  動作概要	
28	
投機実行	
Write-­‐set	
  反映,破棄	
START	
END	
XBEGIN	
XEND	
 競合検出	
  
or	
  XABORT	
競合が起きないケース	
 競合が起きるケース	
投機実行	
Write-­‐set 破棄	
START	
END	
XBEGIN	
EAX	
  に	
  
結果をセット	
  
Fallback	
  
アドレスに	
  
ジャンプ	
通常実行
RTM:	
  動作概要	
  –cont.	
•  実行時の挙動	
  
– XBEGIN	
  から	
  XEND	
  までを投機的に実行	
  
– Write-­‐set	
  の内容は他CPUから見えない	
  
– XEND	
  までに競合検出されなければ	
  commit	
  
•  競合検出時	
  
– Write-­‐set	
  を破棄して Fallback	
  アドレスにジャンプ	
  
– EAX	
  に	
  abort	
  原因をセット	
  
•  XABORT	
  時	
  
– 8bit	
  即値を渡せる(EAX	
  の一部)	
29
RTM:	
  メリットとデメリット	
•  メリット	
  
– HTM	
  なので高速	
  
– TM	
  のためのキャッシュ操作に伴う	
  
オーバーヘッドのみ	
  
•  デメリット	
  
– OpQmisQc	
  なので必ず	
  commit	
  できる保証なし	
  
– Retry	
  しても毎回	
  abort	
  するかも知れない	
  
– プログラマ/ライブラリ/OS	
  が面倒見ないといけない	
  
30
発表概要	
•  トランザクショナルメモリ	
  
•  Intel	
  TSX	
  
– HLE	
  
– HTM	
  
– 制約その他	
  
•  今後の展望	
  
•  まとめと参考文献	
  
31
トランザクション内で使えるインストラクション	
•  Abort	
  しないもの	
  
– IP	
  や一般のレジスタ,ステータスフラグを使う命令	
  
– XMM,	
  YMM,MXCSR	
  レジスタを使う命令	
  
•  Abort	
  するかも知れないもの	
  
– CPUID,	
  PAUSE	
  (これらは絶対	
  abort)	
  
– SSE/XMM	
  と	
  AVX/YMM	
  を混ぜて使う	
  
– INT や	
  SYSENTER	
  など諸々	
  
•  詳細はマニュアル参照	
32
NesQng	
  (入れ子)	
•  HLE	
  
– MAX_HLE_NEST_COUNT	
  まで入れ子にできる	
– 同じアドレスに対しては再帰的に使えない	
  
•  RTM	
  
– MAX_RTM_NEST_COUNT	
  まで入れ子にできる	
  
– abort	
  時は最外 trn	
  の	
  fallback	
  アドレスに飛ぶ	
  
•  組み合わせ	
  
– RTM	
  の中で	
  HLE	
  à	
  無視される	
  
– HLE	
  の中で	
  RTM	
  à	
  abort	
  後	
  HLE	
  無視して実行	
  
33
Abort	
  する条件	
•  アクセス競合が検出されたとき	
  
•  特定の命令を実行したとき	
  
•  Nest	
  限界を越えたとき	
  
•  TM	
  管理データ用の領域が足りなくなったとき	
34
実行順序	
•  これまでと変わらないので自分でケア	
  
– fence	
  命令	
  
•  XACQUIRE/XBEGIN	
  後の命令のみ	
  abort	
  時に
undo	
  される	
35
性能を出すための注意	
•  長いトランザクションにしない	
  
•  多くの領域にアクセスしない	
  
•  Abort	
  を引き起こす命令は使わない	
  
•  競合しやすい排他対象に使わない	
36
言語処理系のサポート	
•  C++	
  標準への提案	
  
– by	
  Intel	
  の中の人その他	
  
– atomic	
  block,	
  cancel,	
  例外との組み合わせ	
  
– Undo	
  できる/ない関数のアノテーション/自動判別	
  
•  Intel	
  compiler	
  は独自命令でサポート	
  
•  GCC	
  は	
  4.7 から試験的にサポート	
  
– -­‐fgnu-­‐tm	
  オプション	
  
37
発表概要	
•  トランザクショナルメモリ	
  
•  Intel	
  TSX	
  
– HLE	
  
– RTM	
  
– 制約その他	
  
•  今後の展望	
  
•  まとめと参考文献	
  
38
今後の展望(予測)	
•  HLE	
  は早期に実用できると期待	
•  RTM は...(時間かかりそう)	
•  言語処理系への採用が進む	
  
– HLE,	
  RTM	
  サポート	
  
– STM	
  のアクセラレータとして	
  RTM	
  を使う	
  
•  将来的には	
  OS	
  によるサポートが必要?	
  
– CPUキャッシュ資源を適切に振り分ける	
  
– 競合コントロール	
  
39
発表概要	
•  トランザクショナルメモリ	
  
•  Intel	
  TSX	
  
– HLE	
  
– HTM	
  
– 制約その他	
  
•  今後の展望	
  
•  まとめと参考文献	
  
40
まとめ	
•  トランザクショナルメモリについて	
  
•  Intel	
  TSX	
  について	
  
– opQmisQc	
  な	
  TM	
  なので気をつけて	
  
•  Haswell	
  の登場を楽しみに待ちましょう	
  
41
参考文献	
•  Intel	
  Architecture	
  InstrucQon	
  Set	
  Extensions	
  
Programming	
  Reference	
  
•  TransacQonal	
  Memory	
  2nd	
  EdiQon	
  
•  DraT	
  SpecificaQon	
  of	
  TransacQonal	
  Language	
  
Constructs	
  for	
  C++	
  
•  ニュース/ブログ記事など	
  
– 主に	
  @kumagi	
  さん,Hisa	
  Ando	
  さん	
42
•  おしまい	
43

Intel TSX について x86opti

  • 1.
    Intel  TSX  について サイボウズ・ラボ   2012-­‐06-­‐16(土)  星野 喬(@starpoz)   x86/x64最適化勉強会4
  • 2.
    自己紹介 •  星野 喬(@starpoz)   – サイボウズ・ラボ   •  昔やってた研究   – データベース,ストレージ,分散アルゴリズム   •  今の仕事   – Linux  kernel  の  IO  device  driver  書いてます   •  アセンブラ書いたことありません(ぇ   – CPU  の知識は多少ありますが...   2
  • 3.
    発表概要 •  トランザクショナルメモリ   • Intel  TSX   – HLE   – RTM   – 制約その他   •  今後の展望   •  まとめと参考文献   3
  • 4.
    会場の皆さんに質問 •  並列プログラミングしたことありますか?   – STM/HTM  を使ったことはありますか?   – ロックを使ったことはありますか?   – DB  トランザクション使ったことはありますか?   •  デッドロックさせたことありますか? 4
  • 5.
    発表概要 •  トランザクショナルメモリ   • Intel  TSX   – HLE   – RTM   – 制約その他   •  今後の展望   •  まとめと参考文献   5
  • 6.
    ロックによる並列プログラミングの問題 •  Deadlock   • 合成不可能 Thread1:      lock  x      lock  y      write  x      write  y      unlock  y      unlock  x Thread2:      lock  x      lock  y      read  x      read  y      unlock  y      unlock  x Thread2’:      lock  y      lock  x      read  x      read  y      unlock  x      unlock  y Function1:      lock  x      read  x      unlock  x Function2:      lock  x      write  x      unlock  x Function3:      lock  x      read  x      write  x      unlock  x Function3’:      Function1      Function2 6
  • 7.
    トランザクショナルメモリ  (TM) •  トランザクションを使ってメモリアクセス   – Lock/unlock  をプログラマが書く必要なし   – Deadlock  が起きない(方式による)   – 合成可能   •  実現方式   – ハードウェア:  HTM   – ソフトウェア:  STM   – たくさんのバリエーションが提案されている   7
  • 8.
    トランザクション •  分けることのできない一連の情報処理単位   • ACID  特性   – Atomicity:  トランザクションの実行は全か無のみ   – Consistency:  常に一貫性のある状態を保つ   – IsolaQon:  commit  まで変更は他に見えない   – Durability:  commit  時に変更は永続的に記録される   8
  • 9.
    トランザクショナルメモリの歴史 •  1986    TM  のアイデア論文   •  1993    Hardware  TM  という名前で提案   •  1995    SoTware  TM  の提案   •  2005    Haskell  での  STM  実装   •  2007    Clojure  STM  言語レベルのサポート   •  2010    MS  .NET  で  STM  を使えないと判断   •  2013    Intel  TSX  が Haswell  に搭載予定   Thanks  to  @nishio 9
  • 10.
    トランザクショナルメモリのインターフェース •  Atomic  ブロック   – トランザクションにしたいコードを囲むだけ   •  その他   – abort  命令   – commit  成否を検知する命令   – 明示的に排他対象を指定する方式もある   10 Thread1:      atomic  {          write  x          write  y      } Thread2:      atomic  {          read  x          read  y      }
  • 11.
    Lock  に対する  TM  ってどう思えばいいの? •  Malloc/free  ßà  Garbage  CollecQon   – GC  でメモリリークフリーなプログラミングができる   – 性能は向上しているがオーバーヘッドはある   •  Lock/unlock  ßà  TransacQonal  Memory   – TM  で  Lock-­‐free  な並列プログラミングができる   – STM  はオーバーヘッドが...   – HTM  は使える実装や制約が...   11
  • 12.
    TM  実現方式の例 12 0  T1  begin   1  T1  write  x  1   2  T1  write  y  1   3  T1  commit   4  T2  begin   5  T2  read  y   6  T2  read  x   7  T2  commit   0 x 0 y 0 0 0 0 1 1 1 1 1 1 1 1 1 1 T1     writes T2     writes x:1 x:1,y:1 T1 T1 T2 T1 T2 T2 tag tag T1:      write  x  1      write  y  1   T2:      read  y      read  x   Run Memory
  • 13.
    TM  実現方式の例  –cont. 13 0  T1  begin   1  T1  write  x  1   2  T2  begin   3  T2  read  y   4  T1  write  y  1   5  T1  abort   6  T2  read  x   7  T2  commit   0 x 0 y 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T1     writes T2     writes x:1 x:1 x:1,y:1 T1 T1 T1 T1 T2 T2 T2 T2 T2   tag   tag T1:      write  x  1      write  y  1   T2:      read  y      read  x   Run Memory
  • 14.
    TM  実現方式の例  –cont. • Read-­‐set/write-­‐set   – 各 trn  が  read/write  した領域   – 同じ領域に自分以外がアクセスしたら  abort   •  Private  writes   – commit  するまで他の trn  に変更を見せない   – abort  時に変更はなかったことにする   14
  • 15.
    PessimisQc  vs  OpQmisQc • PessimisQc   •  OpQmisQc 15
  • 16.
    PessimisQc  vs  OpQmisQc  –cont. •  PessimisQc  (悲観的)   – 競合し得る trn  の同時実行を許さない   – 必ず  commit  できる   •  OpQmisQc  (楽観的)   – 競合し得る trn  の投機的な同時実行を許す   – 競合で commit  できないことがある   – 状況次第で  pessimisQc  よりスケールする   – 競合しやすい trn  だと資源の無駄   16
  • 17.
    トランザクショナルメモリ本 •  2009  年頃までの   TM  の研究まとめ   •  参考文献  351  個!   •  図表にして欲しい箇 所がたくさん... 17
  • 18.
    発表概要 •  トランザクショナルメモリ   • Intel  TSX   – HLE   – RTM   – 制約その他   •  今後の展望   •  まとめと参考文献   18
  • 19.
    Intel  TSX •  TransacQonal  SynchronizaQon  eXtension  の略   •  2 つのインターフェースを提供   – HLE:  Lock  prefix  の拡張で細粒度の排他を実現   – RTM:  制約はあるが HTM  そのもの   •  OpQmisQc  な振舞   •  CPU  キャッシュを使って必要なデータを管理   •  キャッシュライン単位での競合検出   19
  • 20.
    TSX  のための実装  (TM本  5.1  章を元に想像) •  Read-­‐set   – キャッシュライン毎の  read  タグ   – read  したアドレスを保持するバッファ   •  Write-­‐set   – 論理CPU毎の  Write  buffer  を流用   or  L1/L2  d-­‐cache  を流用   •  競合検出   – Read-­‐set  に含まれるライン  à  write 要求   – Write-­‐set  に含まれるライン  à  read/write  要求   20
  • 21.
    発表概要 •  トランザクショナルメモリ   • Intel  TSX   – HLE   – RTM   – 制約その他   •  今後の展望   •  まとめと参考文献   21
  • 22.
    HLE •  Hardware  Lock  Elision  の略   – ロックを無視   •  命令   – XACQUIRE/XRELEASE   – Lock  prefix  にさらに追加する prefix   – トランザクションにしたいコードを   XACQUIRE と  XRELEASE  で囲む   22
  • 23.
    HLE  動作概要 23 投機実行 Write-­‐set  反映,破棄 START END XACQUIRE XRELEASE 競合検出 競合が起きないケース 競合が起きるケース 投機実行 Write-­‐set 破棄 START END XACQUIRE XACQUIRE  まで   戻って通常実行 XRELEASE
  • 24.
    HLE: 動作概要  –cont. • 実行時の挙動   – XACQUIRE  から  XRELEASE  までのコードは   投機的に実行   – Write-­‐set  の内容は  commit  されるまで   他の論理  CPU  からは見えない   •  競合が検出された場合   – Abort  し XACQUIRE以降のメモリ操作が   なかったことになる   – HLE  なしで再実行:  必ず成功   24
  • 25.
    HLE:  メリットとデメリット •  メリット   – 実際に競合がなければ並列実行可能   •  細粒度に排他したプログラムに近い性能が期待   – 既存のコードをほとんど修正なしで使える   •  場合によってはリコンパイルのみ   •  デメリット   – 競合が頻繁に起きるケースは資源の無駄   •  XACQUIRE/XRELEASE  をつけるべきではない   25
  • 26.
    発表概要 •  トランザクショナルメモリ   • Intel  TSX   – HLE   – RTM   – 制約その他   •  今後の展望   •  まとめと参考文献   26
  • 27.
    RTM •  Restricted  TransacQonal  Memory  の略   – 制約つきの  TM   •  命令   – XBEGIN:  トランザクション開始   – XEND:  トランザクション終了   – XABORT:  明示的に  abort   27
  • 28.
    RTM  動作概要 28 投機実行 Write-­‐set  反映,破棄 START END XBEGIN XEND 競合検出   or  XABORT 競合が起きないケース 競合が起きるケース 投機実行 Write-­‐set 破棄 START END XBEGIN EAX  に   結果をセット   Fallback   アドレスに   ジャンプ 通常実行
  • 29.
    RTM:  動作概要  –cont. • 実行時の挙動   – XBEGIN  から  XEND  までを投機的に実行   – Write-­‐set  の内容は他CPUから見えない   – XEND  までに競合検出されなければ  commit   •  競合検出時   – Write-­‐set  を破棄して Fallback  アドレスにジャンプ   – EAX  に  abort  原因をセット   •  XABORT  時   – 8bit  即値を渡せる(EAX  の一部) 29
  • 30.
    RTM:  メリットとデメリット •  メリット   – HTM  なので高速   – TM  のためのキャッシュ操作に伴う   オーバーヘッドのみ   •  デメリット   – OpQmisQc  なので必ず  commit  できる保証なし   – Retry  しても毎回  abort  するかも知れない   – プログラマ/ライブラリ/OS  が面倒見ないといけない   30
  • 31.
    発表概要 •  トランザクショナルメモリ   • Intel  TSX   – HLE   – HTM   – 制約その他   •  今後の展望   •  まとめと参考文献   31
  • 32.
    トランザクション内で使えるインストラクション •  Abort  しないもの   – IP  や一般のレジスタ,ステータスフラグを使う命令   – XMM,  YMM,MXCSR  レジスタを使う命令   •  Abort  するかも知れないもの   – CPUID,  PAUSE  (これらは絶対  abort)   – SSE/XMM  と  AVX/YMM  を混ぜて使う   – INT や  SYSENTER  など諸々   •  詳細はマニュアル参照 32
  • 33.
    NesQng  (入れ子) •  HLE   – MAX_HLE_NEST_COUNT  まで入れ子にできる – 同じアドレスに対しては再帰的に使えない   •  RTM   – MAX_RTM_NEST_COUNT  まで入れ子にできる   – abort  時は最外 trn  の  fallback  アドレスに飛ぶ   •  組み合わせ   – RTM  の中で  HLE  à  無視される   – HLE  の中で  RTM  à  abort  後  HLE  無視して実行   33
  • 34.
    Abort  する条件 •  アクセス競合が検出されたとき   •  特定の命令を実行したとき   •  Nest  限界を越えたとき   •  TM  管理データ用の領域が足りなくなったとき 34
  • 35.
    実行順序 •  これまでと変わらないので自分でケア   – fence  命令   •  XACQUIRE/XBEGIN  後の命令のみ  abort  時に undo  される 35
  • 36.
    性能を出すための注意 •  長いトランザクションにしない   • 多くの領域にアクセスしない   •  Abort  を引き起こす命令は使わない   •  競合しやすい排他対象に使わない 36
  • 37.
    言語処理系のサポート •  C++  標準への提案   – by  Intel  の中の人その他   – atomic  block,  cancel,  例外との組み合わせ   – Undo  できる/ない関数のアノテーション/自動判別   •  Intel  compiler  は独自命令でサポート   •  GCC  は  4.7 から試験的にサポート   – -­‐fgnu-­‐tm  オプション   37
  • 38.
    発表概要 •  トランザクショナルメモリ   • Intel  TSX   – HLE   – RTM   – 制約その他   •  今後の展望   •  まとめと参考文献   38
  • 39.
    今後の展望(予測) •  HLE  は早期に実用できると期待 • RTM は...(時間かかりそう) •  言語処理系への採用が進む   – HLE,  RTM  サポート   – STM  のアクセラレータとして  RTM  を使う   •  将来的には  OS  によるサポートが必要?   – CPUキャッシュ資源を適切に振り分ける   – 競合コントロール   39
  • 40.
    発表概要 •  トランザクショナルメモリ   • Intel  TSX   – HLE   – HTM   – 制約その他   •  今後の展望   •  まとめと参考文献   40
  • 41.
    まとめ •  トランザクショナルメモリについて   • Intel  TSX  について   – opQmisQc  な  TM  なので気をつけて   •  Haswell  の登場を楽しみに待ちましょう   41
  • 42.
    参考文献 •  Intel  Architecture  InstrucQon  Set  Extensions   Programming  Reference   •  TransacQonal  Memory  2nd  EdiQon   •  DraT  SpecificaQon  of  TransacQonal  Language   Constructs  for  C++   •  ニュース/ブログ記事など   – 主に  @kumagi  さん,Hisa  Ando  さん 42
  • 43.