はじめに 誰? / hatena id:yohhoy 何を? C++11の 次 規格へ提案されている新機能の紹介 ちょっと (?) 未来 のお話です どうして? Google 先生に聞いても情報がほとんど無い... 勉強会駆動教えて君 2

Similar documents
POSIXスレッド

Insert your Title here

PowerPoint プレゼンテーション

PowerPoint Template

標準化 補足資料

memo

教室案内.pptx

ファイナライザを理解する ~ ファイナライザに起因するトラブルを避けるために ~ 2013 年 11 月 25 日 橋口雅史 Java アプリケーションでファイナライザ (finalize() メソッド ) を使用したことがあるプログラマーは多いと思います しかし ファイナライザの仕組みや注意点につ


TopSE並行システム はじめに

Slide 1

10-vm1.ppt

PowerPoint プレゼンテーション



Microsoft PowerPoint - OpenMP入門.pptx

プログラミングI第10回

アスペクトの相互作用を解消するアスペクトの提案

並列計算導入.pptx

PowerPoint プレゼンテーション

2 概要 市場で不具合が発生にした時 修正箇所は正常に動作するようにしたけど将来のことを考えるとメンテナンス性を向上させたいと考えた リファクタリングを実施して改善しようと考えた レガシーコードなのでどこから手をつけて良いものかわからない メトリクスを使ってリファクタリング対象を自動抽出する仕組みを

ML 演習 第 4 回

Microsoft PowerPoint - 03_What is OpenMP 4.0 other_Jan18

OSSTechプレゼンテーション

Jude を DSL エディタとして使う -Jude API 活用法 年 11 月 14 日稚内北星学園大学東京サテライト校浅海智晴 本日のテーマ Why Jude API What Jude API How Jude API 1

PowerPoint プレゼンテーション

プログラミング基礎

Doxygenを用いた効率的な プログラム仕様書の作成

01-introduction.ppt

リレーショナルデータベース入門 SRA OSS, Inc. 日本支社 Copyright 2008 SRA OSS, Inc. Japan All rights reserved. 1

PowerPoint プレゼンテーション

概要 プログラミング論 変数のスコープ, 記憶クラス. メモリ動的確保. 変数のスコープ 重要. おそらく簡単. 記憶クラス 自動変数 (auto) と静的変数 (static). スコープほどではないが重要.

プログラミング基礎I(再)

Functional Programming

VXPRO R1400® ご提案資料

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ

データベース 【1:データベースシステムとは】

情報科学概論 第6回

Microsoft PowerPoint - kougi11.ppt

プレポスト【問題】

4 ソフトウェア工学 Software Engineering 抽象データ型 ABSTRACT DATA TYPE データ抽象 (data abstraction) 目的 : データ構造を ( 実装に依存せずに ) 抽象的に定義 方法 : データにアクセス (read, write) する関数の仕様

Functional Programming

Microsoft PowerPoint - OS07.pptx

7-1- 基 RDB に関する基礎知識 1 独立行政法人情報処理推進機構

Microsoft PowerPoint - 6.pptx

Microsoft PowerPoint ppt

PowerPoint プレゼンテーション

いぬごやフリー

スライド 1

(Microsoft PowerPoint \215u\213`4\201i\221\272\210\344\201j.pptx)

PowerPoint プレゼンテーション

Microsoft PowerPoint ppt

GEC-Java

メソッドのまとめ

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

第 2 章 PL/SQL の基本記述 この章では PL/SQL プログラムの基本的な記述方法について説明します 1. 宣言部 2. 実行部 3. 例外処理部

ex04_2012.ppt

平成16年度 教育研究員研究報告書 高等学校 地理歴史・公民

プログラミング及び演習 第1回 講義概容・実行制御

PowerPoint プレゼンテーション

自己紹介 日本電気株式会社情報 ナレッジ研究所 須堯一志 ( すぎょうかずし ) 主にネットワークのプロトコルを開発している技術者 1997 年に IPv6 のプロトコルスタック開発を通じてオープンソース開発に関わる 2009 年頃から OpenFlow に関わる 2011 年 Trema がオープ

Microsoft Word - matlab-coder-code-generation-quick-start-guide-japanese-r2016a

SOC Report

Microsoft PowerPoint - 09.pptx

dema版下3ミリ

kantan_C_1_iro3.indd

Microsoft PowerPoint - A3② JaSST_MISRA2004ソースコード品質診断.ppt

1 トランザクション管理

@ LL Future 2008/08/30 MORITA Hajime

Microsoft PowerPoint - C++_第1回.pptx

目次 研究目的 背景システム開発について実験および評価結論

Intel Memory Protection Extensions(Intel MPX) x86, x CPU skylake 2015 Intel Software Development Emulator 本資料に登場する Intel は Intel Corp. の登録

PowerPoint プレゼンテーション

             論文の内容の要旨

JavaプログラミングⅠ

<4D F736F F D208DCC91F088C48C8F955D89BF8F915F8DA196E5504A>

04-process_thread_2.ppt

メディプロ1 Javaプログラミング補足資料.ppt

Javaの作成の前に

テクノロジー・リフレッシュ7(TR7):IBM iでRubyがサポートされます

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

Prog1_10th

スライド 1

Java知識テスト問題


(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

Microsoft PowerPoint pptx

Oracle Business Rules

プログラミング実習I

2015 TRON Symposium セッション 組込み機器のための機能安全対応 TRON Safe Kernel TRON Safe Kernel の紹介 2015/12/10 株式会社日立超 LSIシステムズ製品ソリューション設計部トロンフォーラム TRON Safe Kernel WG 幹事

PowerPoint プレゼンテーション

Chapter Two

Microsoft PowerPoint - 01_Vengineer.ppt

Blue Asterisk template

Source Insight

Microsoft PowerPoint - pro-vm2.ppt

内容 Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作... 1 サーバーエクスプローラ... 4 データ接続... 4 データベース操作のサブメニューコンテキスト... 5 データベースのプロパティ... 6 SQL Server... 6 Microsoft

Transcription:

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)? 発祥はデータベースな世界の トランザクション から 同時操作から メモリ というリソースの一貫性を保護 DBMS DB A = 0 1 B = 0 1 メモリ 変数 x = 0 1 x = 0 1 T1:(write) A = 1 B = 1 T2:(read) A = 1 B = 0 1 T1: x = 1 y = 1 T2: x == 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++ C++TM 言語拡張の仕様は... が提供するもの (1) トランザクションを表現する構文と トランザクション がどのように振舞うかのセマンティクスを定義する たったの 35page!(1310page@C++11) 新しいキーワードを 3 つ追加 新しい属性を 5 つ追加 g++ も Clang も未実装 C++11 で追加された Generaized Attibuttes 構文を使います C++ メモリモデルを拡張 11

Transactional Language Constructs for C++ キーワード transaction_relaxed transaction_atomic transaction_cancel 属性 outer transaction_callable transaction_safe transaction_unsafe が提供するもの (2) transaction_may_cancel_outer [[transaction_safe]] bool is_valid(node *); transaction_atomic { node->next = curr_node; curr_node->prev = node; } コードの雰囲気 if if (!is_valid(node) ) transaction_cancel; 12

Transactional Language Constructs for C++ C++TM 言語拡張の仕様は... が提供しないもの TM をどのように実現するか ( 実装方法 ) を定義しない Software TM/Hardware TM, Hybrid TM ワード単位 / オブジェクト単位, 単一グローバルロック 楽観的 / 悲観的な同期戦略 etc. 並行性無視で TM を実現 プログラマは 何を保護するか (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++ 例外 トランザクション内からの例外送出はコミット操作になる キャンセル例外送出の新構文 ただし例外は整数型に限定 (std::exception 等はNG) transaction_atomic { x = 42; transaction_cancel throw -1; } // // x = 0 int int x = 0, 0, y = 0; 0; transaction_atomic { x = 42; throw -1; y = 100; } // // x = 42 42 && y = 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