Upload
takashi-hoshino
View
5.325
Download
3
Embed Size (px)
DESCRIPTION
Intel TSX rough survey.
Citation preview
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