Intel	
  TSX	
  について	
サイボウズ・ラボ	
  
2012-­‐06-­‐16(土)	
  星野 喬(@starpoz)	
  
x86/x64最適化勉強会4
自己紹介	
•  星野 喬(@starpoz)	
  
– サイボウズ・ラボ	
  
•  昔やってた研究	
  
– データベース,ストレージ,分散アルゴリズム	
  
•  今の仕事	
  
– Linux	
  kernel	
  の	
...
発表概要	
•  トランザクショナルメモリ	
  
•  Intel	
  TSX	
  
– HLE	
  
– RTM	
  
– 制約その他	
  
•  今後の展望	
  
•  まとめと参考文献	
  
3
会場の皆さんに質問	
•  並列プログラミングしたことありますか?	
  
– STM/HTM	
  を使ったことはありますか?	
  
– ロックを使ったことはありますか?	
  
– DB	
  トランザクション使ったことはありますか?	
...
発表概要	
•  トランザクショナルメモリ	
  
•  Intel	
  TSX	
  
– HLE	
  
– RTM	
  
– 制約その他	
  
•  今後の展望	
  
•  まとめと参考文献	
  
5
ロックによる並列プログラミングの問題	
•  Deadlock	
  
•  合成不可能	
Thread1:	
  
	
  	
  lock	
  x	
  
	
  	
  lock	
  y	
  
	
  	
  write	
  x	...
トランザクショナルメモリ	
  (TM)	
•  トランザクションを使ってメモリアクセス	
  
– Lock/unlock	
  をプログラマが書く必要なし	
  
– Deadlock	
  が起きない(方式による)	
  
– 合成可能	...
トランザクション	
•  分けることのできない一連の情報処理単位	
  
•  ACID	
  特性	
  
– Atomicity:	
  トランザクションの実行は全か無のみ	
  
– Consistency:	
  常に一貫性のある状態を...
トランザクショナルメモリの歴史	
•  1986	
  	
  TM	
  のアイデア論文	
  
•  1993	
  	
  Hardware	
  TM	
  という名前で提案	
  
•  1995	
  	
  SoTware	
  ...
トランザクショナルメモリのインターフェース	
•  Atomic	
  ブロック	
  
– トランザクションにしたいコードを囲むだけ	
  
•  その他	
  
– abort	
  命令	
  
– commit	
  成否を検知する命令...
Lock	
  に対する	
  TM	
  ってどう思えばいいの?	
•  Malloc/free	
  ßà	
  Garbage	
  CollecQon	
  
– GC	
  でメモリリークフリーなプログラミングができる	
  
–...
TM	
  実現方式の例	
12	
0	
  T1	
  begin	
  
1	
  T1	
  write	
  x	
  1	
  
2	
  T1	
  write	
  y	
  1	
  
3	
  T1	
  commit	
  ...
TM	
  実現方式の例	
  –cont.	
13	
0	
  T1	
  begin	
  
1	
  T1	
  write	
  x	
  1	
  
2	
  T2	
  begin	
  
3	
  T2	
  read	
  y	...
TM	
  実現方式の例	
  –cont.	
•  Read-­‐set/write-­‐set	
  
– 各 trn	
  が	
  read/write	
  した領域	
  
– 同じ領域に自分以外がアクセスしたら	
  abort	...
PessimisQc	
  vs	
  OpQmisQc	
•  PessimisQc	
  
•  OpQmisQc	
15
PessimisQc	
  vs	
  OpQmisQc	
  –cont.	
•  PessimisQc	
  (悲観的)	
  
– 競合し得る trn	
  の同時実行を許さない	
  
– 必ず	
  commit	
  できる	
  ...
トランザクショナルメモリ本	
•  2009	
  年頃までの	
  
TM	
  の研究まとめ	
  
•  参考文献	
  351	
  個!	
  
•  図表にして欲しい箇
所がたくさん...	
17
発表概要	
•  トランザクショナルメモリ	
  
•  Intel	
  TSX	
  
– HLE	
  
– RTM	
  
– 制約その他	
  
•  今後の展望	
  
•  まとめと参考文献	
  
18
Intel	
  TSX	
•  TransacQonal	
  SynchronizaQon	
  eXtension	
  の略	
  
•  2 つのインターフェースを提供	
  
– HLE:	
  Lock	
  prefix	
  の...
TSX	
  のための実装	
  (TM本	
  5.1	
  章を元に想像)	
•  Read-­‐set	
  
– キャッシュライン毎の	
  read	
  タグ	
  
– read	
  したアドレスを保持するバッファ	
  
• ...
発表概要	
•  トランザクショナルメモリ	
  
•  Intel	
  TSX	
  
– HLE	
  
– RTM	
  
– 制約その他	
  
•  今後の展望	
  
•  まとめと参考文献	
  
21
HLE	
•  Hardware	
  Lock	
  Elision	
  の略	
  
– ロックを無視	
  
•  命令	
  
– XACQUIRE/XRELEASE	
  
– Lock	
  prefix	
  にさらに追加する p...
HLE	
  動作概要	
23	
投機実行	
Write-­‐set	
  反映,破棄	
START	
END	
XACQUIRE	
XRELEASE	
 競合検出	
競合が起きないケース	
 競合が起きるケース	
投機実行	
Write-­‐...
HLE: 動作概要	
  –cont.	
•  実行時の挙動	
  
– XACQUIRE	
  から	
  XRELEASE	
  までのコードは	
  
投機的に実行	
  
– Write-­‐set	
  の内容は	
  commit	...
HLE:	
  メリットとデメリット	
•  メリット	
  
– 実際に競合がなければ並列実行可能	
  
•  細粒度に排他したプログラムに近い性能が期待	
  
– 既存のコードをほとんど修正なしで使える	
  
•  場合によってはリコ...
発表概要	
•  トランザクショナルメモリ	
  
•  Intel	
  TSX	
  
– HLE	
  
– RTM	
  
– 制約その他	
  
•  今後の展望	
  
•  まとめと参考文献	
  
26
RTM	
•  Restricted	
  TransacQonal	
  Memory	
  の略	
  
– 制約つきの	
  TM	
  
•  命令	
  
– XBEGIN:	
  トランザクション開始	
  
– XEND:	
  ...
RTM	
  動作概要	
28	
投機実行	
Write-­‐set	
  反映,破棄	
START	
END	
XBEGIN	
XEND	
 競合検出	
  
or	
  XABORT	
競合が起きないケース	
 競合が起きるケース	
投機実...
RTM:	
  動作概要	
  –cont.	
•  実行時の挙動	
  
– XBEGIN	
  から	
  XEND	
  までを投機的に実行	
  
– Write-­‐set	
  の内容は他CPUから見えない	
  
– XEND	
...
RTM:	
  メリットとデメリット	
•  メリット	
  
– HTM	
  なので高速	
  
– TM	
  のためのキャッシュ操作に伴う	
  
オーバーヘッドのみ	
  
•  デメリット	
  
– OpQmisQc	
  なので...
発表概要	
•  トランザクショナルメモリ	
  
•  Intel	
  TSX	
  
– HLE	
  
– HTM	
  
– 制約その他	
  
•  今後の展望	
  
•  まとめと参考文献	
  
31
トランザクション内で使えるインストラクション	
•  Abort	
  しないもの	
  
– IP	
  や一般のレジスタ,ステータスフラグを使う命令	
  
– XMM,	
  YMM,MXCSR	
  レジスタを使う命令	
  
•  A...
NesQng	
  (入れ子)	
•  HLE	
  
– MAX_HLE_NEST_COUNT	
  まで入れ子にできる	
– 同じアドレスに対しては再帰的に使えない	
  
•  RTM	
  
– MAX_RTM_NEST_COUNT	
...
Abort	
  する条件	
•  アクセス競合が検出されたとき	
  
•  特定の命令を実行したとき	
  
•  Nest	
  限界を越えたとき	
  
•  TM	
  管理データ用の領域が足りなくなったとき	
34
実行順序	
•  これまでと変わらないので自分でケア	
  
– fence	
  命令	
  
•  XACQUIRE/XBEGIN	
  後の命令のみ	
  abort	
  時に
undo	
  される	
35
性能を出すための注意	
•  長いトランザクションにしない	
  
•  多くの領域にアクセスしない	
  
•  Abort	
  を引き起こす命令は使わない	
  
•  競合しやすい排他対象に使わない	
36
言語処理系のサポート	
•  C++	
  標準への提案	
  
– by	
  Intel	
  の中の人その他	
  
– atomic	
  block,	
  cancel,	
  例外との組み合わせ	
  
– Undo	
  できる...
発表概要	
•  トランザクショナルメモリ	
  
•  Intel	
  TSX	
  
– HLE	
  
– RTM	
  
– 制約その他	
  
•  今後の展望	
  
•  まとめと参考文献	
  
38
今後の展望(予測)	
•  HLE	
  は早期に実用できると期待	
•  RTM は...(時間かかりそう)	
•  言語処理系への採用が進む	
  
– HLE,	
  RTM	
  サポート	
  
– STM	
  のアクセラレータとし...
発表概要	
•  トランザクショナルメモリ	
  
•  Intel	
  TSX	
  
– HLE	
  
– HTM	
  
– 制約その他	
  
•  今後の展望	
  
•  まとめと参考文献	
  
40
まとめ	
•  トランザクショナルメモリについて	
  
•  Intel	
  TSX	
  について	
  
– opQmisQc	
  な	
  TM	
  なので気をつけて	
  
•  Haswell	
  の登場を楽しみに待ちましょ...
参考文献	
•  Intel	
  Architecture	
  InstrucQon	
  Set	
  Extensions	
  
Programming	
  Reference	
  
•  TransacQonal	
  Memo...
•  おしまい	
43
Upcoming SlideShare
Loading in …5
×

Intel TSX について x86opti

6,614 views

Published on

Intel TSX rough survey.

Published in: Technology

Intel TSX について x86opti

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

×