Soumettre la recherche
Mettre en ligne
Intel TSX 触ってみた 追加実験 (TTAS)
•
5 j'aime
•
4,996 vues
Takashi Hoshino
Suivre
HLE と TTAS (Test and Test-and-set) の組み合わせについて評価
Lire moins
Lire la suite
Signaler
Partager
Signaler
Partager
1 sur 31
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
Intel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86opti
Takashi Hoshino
Intel TSX について x86opti
Intel TSX について x86opti
Takashi Hoshino
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
MITSUNARI Shigeo
あなたの知らないnopたち@ラボユース合宿
あなたの知らないnopたち@ラボユース合宿
MITSUNARI Shigeo
あるコンテキストスイッチの話
あるコンテキストスイッチの話
nullnilaki
Altanative macro
Altanative macro
Motohiro KOSAKI
emcjp Item 42
emcjp Item 42
MITSUNARI Shigeo
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
MITSUNARI Shigeo
Recommandé
Intel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86opti
Takashi Hoshino
Intel TSX について x86opti
Intel TSX について x86opti
Takashi Hoshino
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
MITSUNARI Shigeo
あなたの知らないnopたち@ラボユース合宿
あなたの知らないnopたち@ラボユース合宿
MITSUNARI Shigeo
あるコンテキストスイッチの話
あるコンテキストスイッチの話
nullnilaki
Altanative macro
Altanative macro
Motohiro KOSAKI
emcjp Item 42
emcjp Item 42
MITSUNARI Shigeo
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
MITSUNARI Shigeo
本当にわかる Spectre と Meltdown
本当にわかる Spectre と Meltdown
Hirotaka Kawata
いいかげんな人のためのTransactional Memory Primer
いいかげんな人のためのTransactional Memory Primer
Yuto Hayamizu
From IA-32 to avx-512
From IA-32 to avx-512
MITSUNARI Shigeo
Prosym2012
Prosym2012
MITSUNARI Shigeo
Wavelet matrix implementation
Wavelet matrix implementation
MITSUNARI Shigeo
Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介
MITSUNARI Shigeo
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
optimal Ate pairing
optimal Ate pairing
MITSUNARI Shigeo
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチ
Kazuki Onishi
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
MITSUNARI Shigeo
Project Loom + Project Panama
Project Loom + Project Panama
Yuichi Sakuraba
Cpu cache arch
Cpu cache arch
Shinichiro Niiyama
冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
Mesh tensorflow
Mesh tensorflow
kuroko
TensorFlow計算グラフ最適化処理
TensorFlow計算グラフ最適化処理
Atsushi Nukariya
Code jp2015 cpuの話
Code jp2015 cpuの話
Shinichiro Niiyama
BLS署名の実装とその応用
BLS署名の実装とその応用
MITSUNARI Shigeo
TensorFlow Operation 作ってみた
TensorFlow Operation 作ってみた
Takuya Sakamoto
Linux Performance Analysis in 15 minutes
Linux Performance Analysis in 15 minutes
Yohei Azekatsu
CPUの同時実行機能
CPUの同時実行機能
Shinichiro Niiyama
Serializabilityとは何か
Serializabilityとは何か
Takashi Hoshino
Isolation Level について
Isolation Level について
Takashi Hoshino
Contenu connexe
Tendances
本当にわかる Spectre と Meltdown
本当にわかる Spectre と Meltdown
Hirotaka Kawata
いいかげんな人のためのTransactional Memory Primer
いいかげんな人のためのTransactional Memory Primer
Yuto Hayamizu
From IA-32 to avx-512
From IA-32 to avx-512
MITSUNARI Shigeo
Prosym2012
Prosym2012
MITSUNARI Shigeo
Wavelet matrix implementation
Wavelet matrix implementation
MITSUNARI Shigeo
Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介
MITSUNARI Shigeo
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
optimal Ate pairing
optimal Ate pairing
MITSUNARI Shigeo
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチ
Kazuki Onishi
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
MITSUNARI Shigeo
Project Loom + Project Panama
Project Loom + Project Panama
Yuichi Sakuraba
Cpu cache arch
Cpu cache arch
Shinichiro Niiyama
冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
Mesh tensorflow
Mesh tensorflow
kuroko
TensorFlow計算グラフ最適化処理
TensorFlow計算グラフ最適化処理
Atsushi Nukariya
Code jp2015 cpuの話
Code jp2015 cpuの話
Shinichiro Niiyama
BLS署名の実装とその応用
BLS署名の実装とその応用
MITSUNARI Shigeo
TensorFlow Operation 作ってみた
TensorFlow Operation 作ってみた
Takuya Sakamoto
Linux Performance Analysis in 15 minutes
Linux Performance Analysis in 15 minutes
Yohei Azekatsu
CPUの同時実行機能
CPUの同時実行機能
Shinichiro Niiyama
Tendances
(20)
本当にわかる Spectre と Meltdown
本当にわかる Spectre と Meltdown
いいかげんな人のためのTransactional Memory Primer
いいかげんな人のためのTransactional Memory Primer
From IA-32 to avx-512
From IA-32 to avx-512
Prosym2012
Prosym2012
Wavelet matrix implementation
Wavelet matrix implementation
Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介
x86とコンテキストスイッチ
x86とコンテキストスイッチ
optimal Ate pairing
optimal Ate pairing
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチ
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
Project Loom + Project Panama
Project Loom + Project Panama
Cpu cache arch
Cpu cache arch
冬のLock free祭り safe
冬のLock free祭り safe
Mesh tensorflow
Mesh tensorflow
TensorFlow計算グラフ最適化処理
TensorFlow計算グラフ最適化処理
Code jp2015 cpuの話
Code jp2015 cpuの話
BLS署名の実装とその応用
BLS署名の実装とその応用
TensorFlow Operation 作ってみた
TensorFlow Operation 作ってみた
Linux Performance Analysis in 15 minutes
Linux Performance Analysis in 15 minutes
CPUの同時実行機能
CPUの同時実行機能
Plus de Takashi Hoshino
Serializabilityとは何か
Serializabilityとは何か
Takashi Hoshino
Isolation Level について
Isolation Level について
Takashi Hoshino
データベースシステムにおける直列化可能性と等価な時刻割り当てルールの提案 rev.3
データベースシステムにおける直列化可能性と等価な時刻割り当てルールの提案 rev.3
Takashi Hoshino
WalB Driver Internals
WalB Driver Internals
Takashi Hoshino
トランザクションの並行実行制御 rev.2
トランザクションの並行実行制御 rev.2
Takashi Hoshino
トランザクションの並行処理制御
トランザクションの並行処理制御
Takashi Hoshino
Effective Modern C++ 勉強会#8 Item38
Effective Modern C++ 勉強会#8 Item38
Takashi Hoshino
Effective Modern C++ 勉強会#6 Item25
Effective Modern C++ 勉強会#6 Item25
Takashi Hoshino
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4
Takashi Hoshino
WALをバックアップとレプリケーションに使う方法
WALをバックアップとレプリケーションに使う方法
Takashi Hoshino
メモリより大きなデータの Sufix Array 構築方法の紹介
メモリより大きなデータの Sufix Array 構築方法の紹介
Takashi Hoshino
WalBの紹介
WalBの紹介
Takashi Hoshino
10分で分かるバックアップとレプリケーション
10分で分かるバックアップとレプリケーション
Takashi Hoshino
10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤ
Takashi Hoshino
10分で分かるデータストレージ
10分で分かるデータストレージ
Takashi Hoshino
Suffix Array 構築方法の紹介
Suffix Array 構築方法の紹介
Takashi Hoshino
An Efficient Backup and Replication of Storage
An Efficient Backup and Replication of Storage
Takashi Hoshino
ログ先行書き込みを用いたストレージ差分取得の一手法
ログ先行書き込みを用いたストレージ差分取得の一手法
Takashi Hoshino
WalB: Block-level WAL. Concept.
WalB: Block-level WAL. Concept.
Takashi Hoshino
VMware Backup in Cybozu Labs
VMware Backup in Cybozu Labs
Takashi Hoshino
Plus de Takashi Hoshino
(20)
Serializabilityとは何か
Serializabilityとは何か
Isolation Level について
Isolation Level について
データベースシステムにおける直列化可能性と等価な時刻割り当てルールの提案 rev.3
データベースシステムにおける直列化可能性と等価な時刻割り当てルールの提案 rev.3
WalB Driver Internals
WalB Driver Internals
トランザクションの並行実行制御 rev.2
トランザクションの並行実行制御 rev.2
トランザクションの並行処理制御
トランザクションの並行処理制御
Effective Modern C++ 勉強会#8 Item38
Effective Modern C++ 勉強会#8 Item38
Effective Modern C++ 勉強会#6 Item25
Effective Modern C++ 勉強会#6 Item25
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4
WALをバックアップとレプリケーションに使う方法
WALをバックアップとレプリケーションに使う方法
メモリより大きなデータの Sufix Array 構築方法の紹介
メモリより大きなデータの Sufix Array 構築方法の紹介
WalBの紹介
WalBの紹介
10分で分かるバックアップとレプリケーション
10分で分かるバックアップとレプリケーション
10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤ
10分で分かるデータストレージ
10分で分かるデータストレージ
Suffix Array 構築方法の紹介
Suffix Array 構築方法の紹介
An Efficient Backup and Replication of Storage
An Efficient Backup and Replication of Storage
ログ先行書き込みを用いたストレージ差分取得の一手法
ログ先行書き込みを用いたストレージ差分取得の一手法
WalB: Block-level WAL. Concept.
WalB: Block-level WAL. Concept.
VMware Backup in Cybozu Labs
VMware Backup in Cybozu Labs
Intel TSX 触ってみた 追加実験 (TTAS)
1.
Intel TSX HLE
を触ってみた 追加実験 (TTAS) 2013-10-22 星野喬@サイボウズ・ラボ / @starpoz 1
2.
頂いたコメント 2
3.
TTAS (test-and-test-and-set) • Test
and test-and-set class Spinlock // TTAS and HLE support { private: char &lock_; public: explicit SpinlockHle(char &lock) : lock_(lock) { int flags = __ATOMIC_ACQUIRE | __ATOMIC_HLE_ACQUIRE; while (lock_ || __atomic_exchange_n(&lock_, 1, flags)) _mm_pause(); } ~SpinlockHle() noexcept { int flags = __ATOMIC_RELEASE | __ATOMIC_HLE_RELEASE; __atomic_clear(&lock_, flags); } }; 3
4.
再実験 • Expr1: simple
counter(s) • Expr5: map operations • 詳細は元資料参照のこと – http://www.slideshare.net/starpos/intel-tsxhlex86opti6r2 4
5.
実験環境 • CPU: Core
i7-4770 – 4cores 8HT – HT 有効 – TurboBoost 有効 • メモリ: 16GB • OS: Ubuntu 13.04 x86_64 kernel 3.8.19 • コンパイラ: GCC 4.8.1 – 最適化フラグ: -O2 のみ 5
6.
実験方法 • スレッドを必要なだけ起動して,X 秒間クリティカル セクション
(CS) を繰り返し実行 • Spinlock を使って CS の排他を取る – HLE 有効/無効 – TTAS 有効/無効 – 終了判定のために CS 実行毎に atomic<bool> を load するオーバーヘッドあり • CS の実行回数の合計値を X で割ったものを スループットとする • 上記実験を Y 回行い,スループットの avg, min, max を計算 6
7.
Expr1: simple counter(s) •
クリティカルセクションループ while (!isEnd_.load(std::memory_order_relaxed)) { Spinlock<useHLE, useTTAS> lk(mutex_); counter_++; } • パラメータ – 競合率 100%: counter を全スレッドで共有 – 競合率 0%: スレッド毎に counter を持つ • キャッシュラインが異なるように 64byte 毎に配置 Counter Thread 競合率 100% Thread 競合率 0% Counter 7
8.
Expr1: collision 100% 投機的実行がほとんど失敗するので
HLE のオーバーヘッドが スループットに反映してしまっていると思われる TTAS は HLE と一緒に使っても効果が見える 10 sec, 20 trials 8
9.
Expr1: collision 0% HLE
なしでは明らかに TTAS を使った方が良い HLE と一緒に使う場合でも効果があるようだ 10 sec, 20 trials 9
10.
Expr1 まとめ • そもそも競合しやすい状況では
HLE は投機 実行に失敗しやすいのでオーバーヘッドの分 だけ損 • 競合しにくい状況では HLE はスケールする ため,オイシイ • Expr1 だけ見ると,HLE の有無に関わらず TTAS は常に効果がある 10
11.
Expr5: • 目的: –
実用的なデータ構造で HLE の効果を知る • 手段: – Map<uint32_t, uint32_t> をひとつの spinlock で排他 – read 比率を変える: 0%, 90%, 99%, 100% • read 操作: ランダムキーで lower_bound 検索 • write 操作: ひとつ削除,その後 insert – 初期アイテム数: 10K (約2MB), 1M (約100MB) 11
12.
Expr5: std::map 12
13.
Expr5: 10K items
read 0% HLE なしだと TTAS の効果が大きい このパラメータでは HLE はオーバーヘッド大 10 sec, 20 trials 13
14.
Expr5: 10K items
read 90% HLE と TTAS を一緒に使うと並列度大の領域で効果が出る ただし,並列度小だと HLE は足をひっぱる 10 sec, 20 trials 14
15.
Expr5: 10K items
read 99% 10 sec, 20 trials HLE の効果が見える.TTAS と組み合わせると一長一短 15
16.
Expr5: 10K items
read 100% HLE と TTAS の組み合わせが並列度大の領域で効果アリ 10 sec, 20 trials TTAS ナシの場合は test-and-set の数によって律速しているのか? 16
17.
Expr5: 1M items
read 0% HLE の有無よりも TTAS の有無が大きな効果 TTAS は競合が多いときに test-and-set の実行数が減り, HLE は競合が少ないときに楽観的投機実行が成功しやすいので, この結果と矛盾しない 10 sec, 20 trials 17
18.
Expr5: 1M items
read 90% Read が増えたので,HLE の効果が相対的に大きくなった 10K items のときと同様に TTAS との組み合わせ効果は 並列度によって一長一短 10 sec, 20 trials 18
19.
Expr5: 1M items
read 99% 10 sec, 20 trials さらに Read が増えたので並列度小の領域でも HLE の楽観的実行が成功しやすくなったと思われる 19
20.
Expr5: 1M items
read 100% TTAS と HLE の組み合わせが大きな効果を発揮 10 sec, 20 trials 20
21.
Expr5: B-tree 21
22.
Expr5: 10K items
read 0% 10 sec, 20 trials HLE は並列度小では無駄. TTAS のみを有効にした方が余程良い結果. 22
23.
Expr5: 10K items
read 90% 10 sec, 20 trials std::map と傾向は変わらないが,HLE が効きやすい? (実際のメモリ使用量の違いのせいかも知れない) 23
24.
Expr5: 10K items
read 99% 10 sec, 20 trials HLE を使った方が良い結果に(std::map は一長一短のまま) ただし並列度 1 を除く. 24
25.
Expr5: 10K items
read 100% read 99% と同様の結果.最高性能は std::map に及ばず 10 sec, 20 trials 25
26.
Expr5: 1M items
read 0% 10K items と同様の結果. 10 sec, 20 trials 26
27.
Expr5: 1M items
read 90% アイテム数 10K から 1M に増えると HLE のオーバーヘッドが相対的に小さくなったと見て良いか. TTAS は常に有効. 並列度大の領域では HLE の投機実行失敗のペナルティが見える. 10 sec, 20 trials 27
28.
Expr5: 1M items
read 99% 10 sec, 20 trials read 90% と同様の傾向. 投機実行が成功しやすくなり,さらにスケールする. 28
29.
Expr5: 1M items
read 100% read 90%, 99% と同様(ry 10 sec, 20 trials 29
30.
Expr5: まとめ • HLE
のない世界では TTAS は常に効果アリ • HLE と TTAS を組み合わせると – 並列度小だと投機実行そのものを抑えられてス ループットが伸び悩むデメリットあり – 並列度大だと一度に投機実行するスレッドを少な く抑えることができるため効果あり – 上記は今のところあまり自信のある仮説ではない 30
31.
まとめ • HLE と
TTAS の組み合わせは一長一短 – デフォルトを選べと言われたら HLE + TTAS – 競合 100% の状況では TTAS のみ使う • HLE を使うべき条件 – 条件1: 競合が起きにくい (read 比率が高い) – 条件2: クリティカルセクション実行時間が短い – 条件3: アクセス対象メモリが少ない • 条件 2, 3 を誰か探求してください.. 31
Télécharger maintenant