SlideShare a Scribd company logo
1 of 22
Download to read offline
C++ Transactional Memory
     言語拡張の紹介



                       2012/7/28
               Boost.勉強会 #10 東京
はじめに

誰?
 twitter @yohhoy / hatena id:yohhoy

何を?
 C++11の”次”規格へ提案されている新機能の紹介
                          “ちょっと(?)未来”のお話です

どうして?
 Google先生に聞いても情報がほとんど無い...
   → 勉強会 駆動 教えて君
                                             2
情報源

”Draft Specification of Transactional Language
Constructs for C++”, Version 1.1, Feb. 3, 2012
                   https://sites.google.com/site/tmforcplusplus/
                一部翻訳→ http://d.hatena.ne.jp/yohhoy/20120413/


N3341 Transactional Language Constructs for C++
       http://www.open-std.org/jtc1/sc22/WG21/docs/papers/2012/


→ いきなり次世代標準規格C++1y入りは目指さず、
  まずはTR(Technical Report)として提案される

                                                               3
もくじ

●
    Transactional Memoryの概略
●
  データベースシステムとの対比, 導入の目的
●
  ACID特性, Composability

●
    C++TM言語拡張は何を提供する/しないのか?
●
    既存のロック, atomic変数との関係

●
    C++TM言語拡張の新キーワード
●
  __transaction_relaxed, __transaction_atomic
●
  __transaction_cancel, C++例外との関係



                                                4
Transactional Memory(TM)?

発祥はデータベースな世界の”トランザクション”から。
同時操作から“メモリ”というリソースの一貫性を保護。
                     DB                           変数
                      A=0→ 1                       x=0→1
              DBMS    B=0→1               メモリ      x=0→1

T1:(write)            T2:(read)   T1:            T2:
 A=1                   A= 1        x=1            x == 1
 B=1                   B=01        y=1            y == 0 1


      処理1            処理2            処理1         処理2


                                                             5
TM導入の目的(1)

“The Free Lunch Is Over”
    (Herb Sutter, 2005)
                            シングルスレッドな
                           プログラム性能は頭打ち

 メニーコア時代の到来

                           メニーコアを活用する
                           プログラミングが必要
       マルチスレッド
       プログラミング
        難しい!?

                                         6
TM導入の目的(2)

Transactional Memoryとは
                                            Programming Abstraction
●
  並行処理の記述を容易にするプログラミング抽象
●
  プログラマは一連の処理に対し”トランザクション”と宣言する

TMは特段新しいものではなく、既にいくつか実装系が存在
●
  H/W: IBM BlueGene/Q, (Intel Haswell TSX), (AMD ASF ?)
●
  S/W: Haskell, Clojure, 各ベンダC++STM, TBoost.STM

                              C++TM言語拡張の仕様へフィードバック

Intel's TSX = Transactional Synchronization Extensions
AMD's ASF = Advanced Synchronization Facility
                                                                      7
TMとACID特性
“トランザクション”システムを名乗るからには...
Atomicity(原子性)
 トランザクション内の処理は「全て処理される」か「全く処理
されない」のいずれか。(処理途中のキャンセルも含む)
Consistency(一貫性)
 トランザクション処理前後でメモリ内容に一貫性がある。
(例:リンクリストのノードがポインタで正しくつながる)
Isolation(分離性)
 トランザクション処理中の中間状態は他コードから見えない。
Durability(永続性)
 → “メモリ”なので電源きったらパア
                              8
Composability
Transactional Memoryがもたらす大きなメリット
 トランザクションは安全に”入れ子”にできます。
 幾つかの小さなトランザクションを束ねて、1つの大きなトラ
ンザクションを構成することが可能です。



デッドロックの恐怖から解放!



C++テンプレート駆使したGenericコードとも相性良い

Photo: espressoed/flickr                   9
もくじ

●
    Transactional Memoryの概略
●
  データベースシステムとの対比, 導入の目的
●
  ACID特性, Composability

●
    C++TM言語拡張は何を提供する/しないのか?
●
    既存のロック, atomic変数との関係

●
    C++TM言語拡張の新キーワード
●
  __transaction_relaxed, __transaction_atomic
●
  __transaction_cancel, C++例外との関係



                                                10
Transactional Language Constructs for C++
                     が提供するもの(1)

C++TM言語拡張の仕様は...

トランザクションを表現する構文と、トランザクション
がどのように振舞うかのセマンティクスを定義する。
たったの35page!(1310page@C++11)
●
  新しいキーワードを3つ追加             g++もClangも未実装
●
  新しい属性を5つ追加
    ●
        C++11で追加された”Generaized Attibuttes”構文を使います。
●
    C++メモリモデルを拡張

                                                     11
Transactional Language Constructs for C++
                  が提供するもの(2)            コードの雰囲気

キーワード                       [[transaction_safe]]
                             [[transaction_safe]]
 ●
   __transaction_relaxed    bool is_valid(Node *);
                             bool is_valid(Node *);
 ●
   __transaction_atomic     __transaction_atomic {
                            __transaction_atomic {
 ●
   __transaction_cancel      node->next = curr_node;
                              node->next = curr_node;
属性                           curr_node->prev = node;
                              curr_node->prev = node;
 ●
   outer
 ●
   transaction_callable       if (( !is_valid(node) ))
                               if !is_valid(node)
 ●
   transaction_safe              __transaction_cancel;
                                 __transaction_cancel;
                           }}
 ●
   transaction_unsafe
 ●
   transaction_may_cancel_outer
                                                         12
Transactional Language Constructs for C++
                  が提供しないもの

C++TM言語拡張の仕様は...

TMをどのように実現するか(実装方法)を定義しない。
●
  Software TM/Hardware TM, Hybrid TM
●
  ワード単位/オブジェクト単位, 単一グローバルロック
●
  楽観的/悲観的な同期戦略                       並行性無視でTMを実現
etc.


    プログラマは「何を保護するか(what)」を記述し、
    「どのように保護するか(how)」は処理系任せ。

                                                   13
Lock, atomic, TM
ロック(ミューテックス)
 古典。構造的でないデータやGenericなコードでは使いに
くい。複数ロックで容易にデッドロック。
atomic変数
 Lock-Free実装などで利用。Primitiveなため軽量かつ高
速。メモリモデルの理解なしに迂闊に手を出すと...死。
Transactional Memory
 原理的にデッドロックしない。抽象度の高い記述ができ開
発効率向上*。実行時動作も十分に高速...?
  (*) http://justingottschlich.com/wp-content/uploads/2012/05/2012.SG1_.tm_final.pdf



                                                                                  14
Lock, atomic, TM
ロック(ミューテックス)
 古典。構造的でないデータやGenericなコードでは使いに
                       相
くい。複数ロックで容易にデッドロック。 補
atomic変数                      的
                              に
  Lock-Free実装などで利用。Primitiveなため軽量かつ高
                              共
速。メモリモデルの理解なしに迂闊に手を出すと...死。   存
                              可
Transactional Memory          能
 原理的にデッドロックしない。抽象度の高い記述ができ開
発効率向上*。実行時動作も十分に高速...?
               動作速度はコンパイラや
               ライブラリ実装による
                                       15
もくじ

●
    Transactional Memoryの概略
●
  データベースシステムとの対比, 導入の目的
●
  ACID特性, Composability

●
    C++TM言語拡張は何を提供する/しないのか?
●
    既存のロック, atomic変数との関係

●
    C++TM言語拡張の新キーワード
●
  __transaction_relaxed, __transaction_atomic
●
  __transaction_cancel, C++例外との関係



                                                16
relaxed vs. atomic

2種類のトランザクションを提供

__transaction_relaxed
 弱い分離性(Weak Isolation)。他のトラン
ザクション処理と分離して実行される。一方
非トランザクション処理とは干渉。
__transaction_atomic
 強い分離性(Strong Isolation)。他の全て
のメモリアクセス操作と分離して実行され
る。
Photo: timsackton/flickr                   17
relaxed, atomicとcancel

relaxed/atomicトランザクション内でできること

__transaction_relaxed
   トランザクション内で任意の処理を実行可能。ファイル
I/Oといった非可逆な操作もOK。キャンセル不可。


__transaction_atomic
  トランザクション内の処理は”安全”な操作に限定される。
__transaction_cancelにより処理途中でキャンセル可能
(途中までの変更をロールバック)。
                                  18
__transaction_atomicとC++例外
トランザクション内からの例外送                      int x = 0, y = 0;
                                      int x = 0, y = 0;
出はコミット操作になる。                         __transaction_atomic {
                                      __transaction_atomic {
                                        x = 42;
                                        x = 42;
                                        throw -1;
                                        throw -1;
キャンセル例外送出の新構文。
                                        y = 100;
                                        y = 100;
ただし例外は整数型に限定。
                                     }}
(std::exception等はNG)                 // x = 42 && y = 0
                                      // x = 42 && y = 0
 __transaction_atomic {
  __transaction_atomic {
    x = 42;
    x = 42;
    __transaction_cancel throw -1;
    __transaction_cancel throw -1;
 }}
 // x = 0
  // x = 0
                                                               19
ほか

説明していないもの
●
  式/関数に対するトランザクション指定
●
  outer属性による最外(outermost)トランザクション指定
●
  transaction_may_cancel_outer属性, cancel文のレキシカ
  ルスコープ制約
●
  transaction_unsafe/safe属性の明示と推論
●
  トランザクションへのnoexcept指定
●
  メモリモデルの拡張(happens-beforeがどーたら)
etc.
            概略まとめ→ http://d.hatena.ne.jp/yohhoy/20120414/

                                                       20
まとめ

C++ Transactional Memory言語拡張
●
  C++11の次のTR/標準規格を目指した提案
●
  並行処理の記述を容易にするプログラミング抽象
●
  トランザクションを表現する新しい構文を追加
●
  トランザクションの動作を定義(実装方法はスコープ外)
●
  既存のロックやatomic変数と併用可能




                               21
で、いつから使えんの?

今日から。



GCC 4.7から実験的サポートが始まっています。
                       http://gcc.gnu.org/wiki/TransactionalMemory
                  対応状況調査→ http://d.hatena.ne.jp/yohhoy/20120603/



Try “g++ -std=c++11 -fgnu-tm”, and enjoy it.
  → そして教えて情報共有ください(当初目的)

Photo: gwire/flickr                                                  22

More Related Content

What's hot

Intel TSX について x86opti
Intel TSX について x86optiIntel TSX について x86opti
Intel TSX について x86optiTakashi Hoshino
 
Boost9 session
Boost9 sessionBoost9 session
Boost9 sessionfreedom404
 
Xtend30分クッキング やきに駆動
Xtend30分クッキング   やきに駆動Xtend30分クッキング   やきに駆動
Xtend30分クッキング やきに駆動Shinichi Kozake
 
いいかげんな人のためのTransactional Memory Primer
いいかげんな人のためのTransactional Memory Primerいいかげんな人のためのTransactional Memory Primer
いいかげんな人のためのTransactional Memory PrimerYuto Hayamizu
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチMasami Ichikawa
 
0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきことmao999
 
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチプロセスとコンテキストスイッチ
プロセスとコンテキストスイッチKazuki Onishi
 
Slaesforce TLS1.0 無効化にあたって
Slaesforce TLS1.0 無効化にあたってSlaesforce TLS1.0 無効化にあたって
Slaesforce TLS1.0 無効化にあたってHiroyuki Sawano
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mclMITSUNARI Shigeo
 
Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介MITSUNARI Shigeo
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)Takeshi Yamamuro
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールMITSUNARI Shigeo
 
2章 Linuxカーネル - メモリ管理1
2章 Linuxカーネル - メモリ管理12章 Linuxカーネル - メモリ管理1
2章 Linuxカーネル - メモリ管理1mao999
 
Preludeのprecompile
PreludeのprecompilePreludeのprecompile
PreludeのprecompileGlass_saga
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPUTakuro Iizuka
 
signal の話 或いは Zend Signals とは何か
signal の話 或いは Zend Signals とは何かsignal の話 或いは Zend Signals とは何か
signal の話 或いは Zend Signals とは何かdo_aki
 

What's hot (20)

Intel TSX について x86opti
Intel TSX について x86optiIntel TSX について x86opti
Intel TSX について x86opti
 
Boost9 session
Boost9 sessionBoost9 session
Boost9 session
 
Hls friends 20161122.key
Hls friends 20161122.keyHls friends 20161122.key
Hls friends 20161122.key
 
Xtend30分クッキング やきに駆動
Xtend30分クッキング   やきに駆動Xtend30分クッキング   やきに駆動
Xtend30分クッキング やきに駆動
 
いいかげんな人のためのTransactional Memory Primer
いいかげんな人のためのTransactional Memory Primerいいかげんな人のためのTransactional Memory Primer
いいかげんな人のためのTransactional Memory Primer
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチ
 
0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと
 
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチプロセスとコンテキストスイッチ
プロセスとコンテキストスイッチ
 
From IA-32 to avx-512
From IA-32 to avx-512From IA-32 to avx-512
From IA-32 to avx-512
 
Sharing Deep Dive
Sharing Deep DiveSharing Deep Dive
Sharing Deep Dive
 
Slaesforce TLS1.0 無効化にあたって
Slaesforce TLS1.0 無効化にあたってSlaesforce TLS1.0 無効化にあたって
Slaesforce TLS1.0 無効化にあたって
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
 
Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
 
Das 2015
Das 2015Das 2015
Das 2015
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
2章 Linuxカーネル - メモリ管理1
2章 Linuxカーネル - メモリ管理12章 Linuxカーネル - メモリ管理1
2章 Linuxカーネル - メモリ管理1
 
Preludeのprecompile
PreludeのprecompilePreludeのprecompile
Preludeのprecompile
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
 
signal の話 或いは Zend Signals とは何か
signal の話 或いは Zend Signals とは何かsignal の話 或いは Zend Signals とは何か
signal の話 或いは Zend Signals とは何か
 

Similar to C++ Transactional Memory言語拡張の紹介

最先端NLP勉強会2017_ACL17
最先端NLP勉強会2017_ACL17最先端NLP勉強会2017_ACL17
最先端NLP勉強会2017_ACL17Masayoshi Kondo
 
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくばHirotaka Kawata
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性Hibiki Yamashiro
 
NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012Takuro Iizuka
 
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強Kiyoshi Ogawa
 
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeNA
 
エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半Tetsuya Morimoto
 
ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装Ryosuke Okuta
 
130522 rt講習会(説明用)
130522 rt講習会(説明用)130522 rt講習会(説明用)
130522 rt講習会(説明用)openrtm
 
【関東GPGPU勉強会#4】GTX 1080でComputer Vision アルゴリズムを色々動かしてみる
【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる
【関東GPGPU勉強会#4】GTX 1080でComputer Vision アルゴリズムを色々動かしてみるYasuhiro Yoshimura
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努Insight Technology, Inc.
 
もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…Yasumasa Suenaga
 
DTrace for biginners part(2)
DTrace for biginners part(2)DTrace for biginners part(2)
DTrace for biginners part(2)Shoji Haraguchi
 
Uart受信設計2013
Uart受信設計2013Uart受信設計2013
Uart受信設計2013Kiyoshi Ogawa
 

Similar to C++ Transactional Memory言語拡張の紹介 (20)

最先端NLP勉強会2017_ACL17
最先端NLP勉強会2017_ACL17最先端NLP勉強会2017_ACL17
最先端NLP勉強会2017_ACL17
 
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
Code jp2015 cpuの話
Code jp2015 cpuの話Code jp2015 cpuの話
Code jp2015 cpuの話
 
良いコードとは
良いコードとは良いコードとは
良いコードとは
 
Ll tiger clojure
Ll tiger clojureLl tiger clojure
Ll tiger clojure
 
NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012
 
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強
 
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
 
エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半
 
ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装
 
Cpu cache arch
Cpu cache archCpu cache arch
Cpu cache arch
 
130522 rt講習会(説明用)
130522 rt講習会(説明用)130522 rt講習会(説明用)
130522 rt講習会(説明用)
 
【関東GPGPU勉強会#4】GTX 1080でComputer Vision アルゴリズムを色々動かしてみる
【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる
【関東GPGPU勉強会#4】GTX 1080でComputer Vision アルゴリズムを色々動かしてみる
 
Tmux
TmuxTmux
Tmux
 
Tmux
TmuxTmux
Tmux
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
 
もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…
 
DTrace for biginners part(2)
DTrace for biginners part(2)DTrace for biginners part(2)
DTrace for biginners part(2)
 
Uart受信設計2013
Uart受信設計2013Uart受信設計2013
Uart受信設計2013
 

Recently uploaded

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 

Recently uploaded (7)

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 

C++ Transactional Memory言語拡張の紹介

  • 1. C++ Transactional Memory 言語拡張の紹介 2012/7/28 Boost.勉強会 #10 東京
  • 2. はじめに 誰? twitter @yohhoy / hatena id:yohhoy 何を? C++11の”次”規格へ提案されている新機能の紹介 “ちょっと(?)未来”のお話です どうして? Google先生に聞いても情報がほとんど無い... → 勉強会 駆動 教えて君 2
  • 3. 情報源 ”Draft Specification of Transactional Language Constructs for C++”, Version 1.1, Feb. 3, 2012 https://sites.google.com/site/tmforcplusplus/ 一部翻訳→ http://d.hatena.ne.jp/yohhoy/20120413/ N3341 Transactional Language Constructs for C++ http://www.open-std.org/jtc1/sc22/WG21/docs/papers/2012/ → いきなり次世代標準規格C++1y入りは目指さず、 まずはTR(Technical Report)として提案される 3
  • 4. もくじ ● Transactional Memoryの概略 ● データベースシステムとの対比, 導入の目的 ● ACID特性, Composability ● C++TM言語拡張は何を提供する/しないのか? ● 既存のロック, atomic変数との関係 ● C++TM言語拡張の新キーワード ● __transaction_relaxed, __transaction_atomic ● __transaction_cancel, C++例外との関係 4
  • 5. Transactional Memory(TM)? 発祥はデータベースな世界の”トランザクション”から。 同時操作から“メモリ”というリソースの一貫性を保護。 DB 変数 A=0→ 1 x=0→1 DBMS B=0→1 メモリ x=0→1 T1:(write) T2:(read) T1: T2: A=1 A= 1 x=1 x == 1 B=1 B=01 y=1 y == 0 1 処理1 処理2 処理1 処理2 5
  • 6. TM導入の目的(1) “The Free Lunch Is Over” (Herb Sutter, 2005) シングルスレッドな プログラム性能は頭打ち メニーコア時代の到来 メニーコアを活用する プログラミングが必要 マルチスレッド プログラミング 難しい!? 6
  • 7. TM導入の目的(2) Transactional Memoryとは Programming Abstraction ● 並行処理の記述を容易にするプログラミング抽象 ● プログラマは一連の処理に対し”トランザクション”と宣言する TMは特段新しいものではなく、既にいくつか実装系が存在 ● H/W: IBM BlueGene/Q, (Intel Haswell TSX), (AMD ASF ?) ● S/W: Haskell, Clojure, 各ベンダC++STM, TBoost.STM C++TM言語拡張の仕様へフィードバック Intel's TSX = Transactional Synchronization Extensions AMD's ASF = Advanced Synchronization Facility 7
  • 9. Composability Transactional Memoryがもたらす大きなメリット トランザクションは安全に”入れ子”にできます。 幾つかの小さなトランザクションを束ねて、1つの大きなトラ ンザクションを構成することが可能です。 デッドロックの恐怖から解放! C++テンプレート駆使したGenericコードとも相性良い Photo: espressoed/flickr 9
  • 10. もくじ ● Transactional Memoryの概略 ● データベースシステムとの対比, 導入の目的 ● ACID特性, Composability ● C++TM言語拡張は何を提供する/しないのか? ● 既存のロック, atomic変数との関係 ● C++TM言語拡張の新キーワード ● __transaction_relaxed, __transaction_atomic ● __transaction_cancel, C++例外との関係 10
  • 11. Transactional Language Constructs for C++ が提供するもの(1) C++TM言語拡張の仕様は... トランザクションを表現する構文と、トランザクション がどのように振舞うかのセマンティクスを定義する。 たったの35page!(1310page@C++11) ● 新しいキーワードを3つ追加 g++もClangも未実装 ● 新しい属性を5つ追加 ● C++11で追加された”Generaized Attibuttes”構文を使います。 ● C++メモリモデルを拡張 11
  • 12. Transactional Language Constructs for C++ が提供するもの(2) コードの雰囲気 キーワード [[transaction_safe]] [[transaction_safe]] ● __transaction_relaxed bool is_valid(Node *); bool is_valid(Node *); ● __transaction_atomic __transaction_atomic { __transaction_atomic { ● __transaction_cancel node->next = curr_node; node->next = curr_node; 属性 curr_node->prev = node; curr_node->prev = node; ● outer ● transaction_callable if (( !is_valid(node) )) if !is_valid(node) ● transaction_safe __transaction_cancel; __transaction_cancel; }} ● transaction_unsafe ● transaction_may_cancel_outer 12
  • 13. Transactional Language Constructs for C++ が提供しないもの C++TM言語拡張の仕様は... TMをどのように実現するか(実装方法)を定義しない。 ● Software TM/Hardware TM, Hybrid TM ● ワード単位/オブジェクト単位, 単一グローバルロック ● 楽観的/悲観的な同期戦略 並行性無視でTMを実現 etc. プログラマは「何を保護するか(what)」を記述し、 「どのように保護するか(how)」は処理系任せ。 13
  • 14. Lock, atomic, TM ロック(ミューテックス) 古典。構造的でないデータやGenericなコードでは使いに くい。複数ロックで容易にデッドロック。 atomic変数 Lock-Free実装などで利用。Primitiveなため軽量かつ高 速。メモリモデルの理解なしに迂闊に手を出すと...死。 Transactional Memory 原理的にデッドロックしない。抽象度の高い記述ができ開 発効率向上*。実行時動作も十分に高速...? (*) http://justingottschlich.com/wp-content/uploads/2012/05/2012.SG1_.tm_final.pdf 14
  • 15. Lock, atomic, TM ロック(ミューテックス) 古典。構造的でないデータやGenericなコードでは使いに 相 くい。複数ロックで容易にデッドロック。 補 atomic変数 的 に Lock-Free実装などで利用。Primitiveなため軽量かつ高 共 速。メモリモデルの理解なしに迂闊に手を出すと...死。 存 可 Transactional Memory 能 原理的にデッドロックしない。抽象度の高い記述ができ開 発効率向上*。実行時動作も十分に高速...? 動作速度はコンパイラや ライブラリ実装による 15
  • 16. もくじ ● Transactional Memoryの概略 ● データベースシステムとの対比, 導入の目的 ● ACID特性, Composability ● C++TM言語拡張は何を提供する/しないのか? ● 既存のロック, atomic変数との関係 ● C++TM言語拡張の新キーワード ● __transaction_relaxed, __transaction_atomic ● __transaction_cancel, C++例外との関係 16
  • 17. relaxed vs. atomic 2種類のトランザクションを提供 __transaction_relaxed 弱い分離性(Weak Isolation)。他のトラン ザクション処理と分離して実行される。一方 非トランザクション処理とは干渉。 __transaction_atomic 強い分離性(Strong Isolation)。他の全て のメモリアクセス操作と分離して実行され る。 Photo: timsackton/flickr 17
  • 18. relaxed, atomicとcancel relaxed/atomicトランザクション内でできること __transaction_relaxed トランザクション内で任意の処理を実行可能。ファイル I/Oといった非可逆な操作もOK。キャンセル不可。 __transaction_atomic トランザクション内の処理は”安全”な操作に限定される。 __transaction_cancelにより処理途中でキャンセル可能 (途中までの変更をロールバック)。 18
  • 19. __transaction_atomicとC++例外 トランザクション内からの例外送 int x = 0, y = 0; int x = 0, y = 0; 出はコミット操作になる。 __transaction_atomic { __transaction_atomic { x = 42; x = 42; throw -1; throw -1; キャンセル例外送出の新構文。 y = 100; y = 100; ただし例外は整数型に限定。 }} (std::exception等はNG) // x = 42 && y = 0 // x = 42 && y = 0 __transaction_atomic { __transaction_atomic { x = 42; x = 42; __transaction_cancel throw -1; __transaction_cancel throw -1; }} // x = 0 // x = 0 19
  • 20. ほか 説明していないもの ● 式/関数に対するトランザクション指定 ● outer属性による最外(outermost)トランザクション指定 ● transaction_may_cancel_outer属性, cancel文のレキシカ ルスコープ制約 ● transaction_unsafe/safe属性の明示と推論 ● トランザクションへのnoexcept指定 ● メモリモデルの拡張(happens-beforeがどーたら) etc. 概略まとめ→ http://d.hatena.ne.jp/yohhoy/20120414/ 20
  • 21. まとめ C++ Transactional Memory言語拡張 ● C++11の次のTR/標準規格を目指した提案 ● 並行処理の記述を容易にするプログラミング抽象 ● トランザクションを表現する新しい構文を追加 ● トランザクションの動作を定義(実装方法はスコープ外) ● 既存のロックやatomic変数と併用可能 21
  • 22. で、いつから使えんの? 今日から。 GCC 4.7から実験的サポートが始まっています。 http://gcc.gnu.org/wiki/TransactionalMemory 対応状況調査→ http://d.hatena.ne.jp/yohhoy/20120603/ Try “g++ -std=c++11 -fgnu-tm”, and enjoy it. → そして教えて情報共有ください(当初目的) Photo: gwire/flickr 22