SlideShare une entreprise Scribd logo
1  sur  48
Télécharger pour lire hors ligne
マルチコア時代の
並列プログラミング
1
ES松浦 @matu_ani
「1機のザクは通常の3倍の速度で接近しています!!」
13年9月22日日曜日
自己紹介:社外のボク
2
•翻訳本の監修メンバー
• 『C++の設計と進化』← Amazon 1位!
• 『ストラウストラップのプログラミング入門』
• 雑誌記事『STL.NET』
•sapporo.cpp/boostjp
• 『プログラミングの魔法少女』
• https://sites.google.com/site/sapporocpp/linguamagi
13年9月22日日曜日
僕もまだまだ勉強中です。
勉強仲間募集中です。
お嫁さんも募集中
二十代料理好き尚可
3
13年9月22日日曜日
ねらい
• マルチコア時代、並列プログラミングは
避けては通れない。が、とても難しいで
す。逆に、もしマスターできるなら強み
になる。
•今回は、その難しさとか、背景レベルの
お話しをしますので、問題共有しましょ
う!
4
13年9月22日日曜日
5
導入
13年9月22日日曜日
並列プログラミング
「並列プログラミングって、マルチス
レッドで動いて、共有オブジェクトは
排他する、アレですよね?」
6
13年9月22日日曜日
並列プログラミング
「並列プログラミングって、マルチス
レッドで動いて、共有オブジェクトは
排他する、アレですよね?」
6
あちゃー、地球の重力に縛られたオ
ールドタイプだわ!
13年9月22日日曜日
並列プログラミングとは
•ムーアの法則の終焉(The Free Lunch
is Over)
•マルチコア時代の到来
7
シングルスレッドで動作するプログラムはこれ以
上早くならない。
マルチコアによる真の並列処理を指す。極力排他
しない・待たせないことが重要。
13年9月22日日曜日
ここで有名な
問題など
8
* 画像と本文は何の関係もありません
13年9月22日日曜日
Singleton
9
public static synchronized Singleton getInstance()
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
例:マルチスレッド環境で遅延初期化なシングルトン
13年9月22日日曜日
Singleton
9
public static synchronized Singleton getInstance()
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
ほとんどの場合、無駄に排他される
例:マルチスレッド環境で遅延初期化なシングルトン
13年9月22日日曜日
Double Checked Locking
(以下DCL)
10
public static Singleton getInstance()
{
if (instance == null) // Check 1
{
synchronized(Singleton.class) {
if (instance == null) // Check 2
instance = new Singleton();
}
}
return instance;
}
13年9月22日日曜日
DCLどーよ?
• DCLとは、「ロック→条件判定」というロジックを
「条件判定→ロック→(再度)条件判定」と書き換える
イディオム。
• 主に遅延初期化などの処理においてロックのオーバー
ヘッドを減らすために用いられた。
• ところが! DCLはコンパイラやCPUによるリオーダ
ーの影響等により正しく動作しない場合が
あることがわかったため、今ではアンチパターンと
呼ばれることすらある。
• ただし、現代において、DCLは正しく実装すれば有用であ
る。→ 今回の範囲外
11
13年9月22日日曜日
DCLがなぜだめなのか、
基礎からいこう。
12
* 画像と本文は何の関係もありません
ぐ∼
13年9月22日日曜日
並列プログラミングのキモ
• スレッドやロックが主役ではない
• 「状態(state)」が問題
• 複数スレッドから同時アクセスしてしまう。
• 副作用に依存する逐次処理もまた状態依存
• これらをスレッドセーフにする必要がある
(スレッドセーフでない状態:データレース)
13
13年9月22日日曜日
アトミック(Atomic)
• 不可分のこと
• これ以上処理を分割することができない
• あるいは分割出来ないようにした単位
• アトミックでなければ他のスレッドに割り込まれ、スレッ
ドセーフを保証できない。
• アトミックでない例
14
++count; // 「Read Modify Write」
long long value = 100; // 64bit変数
value = 0; // 32bitレジスタ2つによる実装が許されている
13年9月22日日曜日
リオーダー問題(reoder)
15
シングルスレッドで動く分にはプログラムは書いてある
とおりに動く(ように見える)。
int x,y; // グローバルに
x = 1;
y = 2;
// ここに来とき y==2 && x==1 である
ここには一貫性セマンティクスがある
あたりまえじゃん!
13年9月22日日曜日
16
リオーダー問題(reoder)
// スレッド(1)
x = 1;
y = 2;
// ここに来とき y==2 && x==1 である
// スレッド(2)
y==2 なら、必ず x==1 か?
13年9月22日日曜日
16
リオーダー問題(reoder)
// スレッド(1)
x = 1;
y = 2;
// ここに来とき y==2 && x==1 である
// スレッド(2)
y==2 なら、必ず x==1 か?
そんな保証はどこにもない
→ リオーダーされるから
13年9月22日日曜日
リオーダーって?
• プ ロ グ ラ ム 実 行 速 度 の 向 上 な ど の 目 的 で 実 行 順
序 を 入 れ 替 え る 最 適 化 手 法 の 一 つ
x = 1;
y = 2;
• あるスレッドにとって問題ないなら順番を入れ替えちゃうか
も
• コンパイラがプログラムコードを機械語に変換するとき
• CPUが機械語のコードを実際に実行するとき
• キ ャ ッ シ ュ メ モ リ の 影 響 な ど を 考 慮 し て 命 令 の
実 行 順 序 を 入 れ 替 え る!
17
13年9月22日日曜日
可視性 (Memory Visibility)
18
// スレッド1
read_file(buffer); // でかいデータよむ
read_flag = true;
// スレッド2
while( ! read_flag ); // readが終わるの待つ
write_console(buffer); // 読み取った内容をコンソールに
bool read_flag = false;
これちゃんと動くか?
13年9月22日日曜日
可視性 (Memory Visibility)
18
// スレッド1
read_file(buffer); // でかいデータよむ
read_flag = true;
// スレッド2
while( ! read_flag ); // readが終わるの待つ
write_console(buffer); // 読み取った内容をコンソールに
bool read_flag = false;
これちゃんと動くか?
そんな保証はどこにもない
13年9月22日日曜日
可視性 (Memory Visibility)
18
// スレッド1
read_file(buffer); // でかいデータよむ
read_flag = true;
// スレッド2
while( ! read_flag ); // readが終わるの待つ
write_console(buffer); // 読み取った内容をコンソールに
bool read_flag = false;
これちゃんと動くか?
そんな保証はどこにもない
それどころかスレッド2は永遠にwhile()するかも
13年9月22日日曜日
可視性って
•コンパイラやCPUが、キャッシュメモ
リの利用を最適化する。
•そのため、あるスレッドでのメモリの
見え方が、別のスレッドで同じように
見えるとは限らない。
19
13年9月22日日曜日
キャッシュメモリ
メインメモリ以外に各
CPUがキャッシュメ
モリを持つ。
→ キャッシュメモリ
とメインメモリは常に
同期するわけではない
20
13年9月22日日曜日
マルチコアの世界とは
•他のCPUのやっていることには基本的
に関わらない。
21
13年9月22日日曜日
マルチコアの世界とは
•他のCPUのやっていることには基本的
に関わらない。
21
あるスレッドの一貫性セマンテ
ィクスは、別のスレッドから見
たとき同じではない。
13年9月22日日曜日
でも、今現在ちゃんと動
いてんぞ
22
13年9月22日日曜日
でも、今現在ちゃんと動
いてんぞ
現在我々がロックを使った排他モデルによ
りマルチスレッド・プログラミングする場
合、自動的に以下の恩恵を受けている。
22
13年9月22日日曜日
でも、今現在ちゃんと動
いてんぞ
現在我々がロックを使った排他モデルによ
りマルチスレッド・プログラミングする場
合、自動的に以下の恩恵を受けている。
•ロックによる明示的なアトミック化
22
13年9月22日日曜日
でも、今現在ちゃんと動
いてんぞ
現在我々がロックを使った排他モデルによ
りマルチスレッド・プログラミングする場
合、自動的に以下の恩恵を受けている。
•ロックによる明示的なアトミック化
•メモリバリアによるリオーダー制御、
および、可視性の保証(キャッシュと
メインメモリ同期)
22
13年9月22日日曜日
ロックモデルって
•確かに安全だね。わかりやすいね。
•でも、それって無駄に安全だよね。
• 最適化を妨げる。
•マルチコアを活かしきってないよね。
23
13年9月22日日曜日
24
じゃあ、
DCLに戻るか* 画像と本文は何の関係もありません
ロ∼ラ∼
13年9月22日日曜日
DCL
25
public static Singleton getInstance()
{
if (instance == null) // Check 1
{
synchronized(Singleton.class) {
if (instance == null) // Check 2
instance = new Singleton();
}
}
return instance;
}
13年9月22日日曜日
DCLの問題
26
mem = allocate();
instance = mem; // (*)
ctorSingleton(instance);
instance = new Singleton();
↑これ、いくつかのJITコンパイラは次の
コードを生成する。
(*)の時点で、instanceは未初期化の領域
を指す。→ 負け
13年9月22日日曜日
じゃあこれなら?
27
tmp = new Singleton();
instance = tmp;
13年9月22日日曜日
じゃあこれなら?
27
tmp = new Singleton();
instance = tmp;
結局だめ。コンパイラはtmpなんて一時変数無
しに最適化するかも知んない。
13年9月22日日曜日
じゃあこれなら?
27
tmp = new Singleton();
instance = tmp;
結局だめ。コンパイラはtmpなんて一時変数無
しに最適化するかも知んない。
instance = new Singleton();
// 負け
13年9月22日日曜日
これならいいべ?
28
mem = allocate(); // 1
ctorSingleton(mem); // 2
instance = mem; // 3
あるJITコンパイラが以下のコードを生成
するとしたら?
13年9月22日日曜日
これならいいべ?
28
mem = allocate(); // 1
ctorSingleton(mem); // 2
instance = mem; // 3
あるJITコンパイラが以下のコードを生成
するとしたら?
だめ。リオーダーされるかも。→ 負け
13年9月22日日曜日
これならいいべ?
28
mem = allocate(); // 1
ctorSingleton(mem); // 2
instance = mem; // 3
あるJITコンパイラが以下のコードを生成
するとしたら?
だめ。リオーダーされるかも。→ 負け
mem = allocate(); // 1
instance = mem; // 3
ctorSingleton(mem); // 2
13年9月22日日曜日
ひとまず、まとめ
• マルチコアの世界を正しく理解する必要があ
る。
• 思い込みいくない(あるスレッドの逐次性が他のスレッ
ドからも同じように見えるなどと考えてはいけない)。
• 並列プログラミングをサポートする標準API
やライブラリを使う。
• 心配なら普通にロックモデルを採用しよう。
29
13年9月22日日曜日
Java/C++
• リオーダーを細かく制御するメモリバリア
API
• アトミック性を提供するデータ型やキーワ
ード
• JavaやC++では様々なAPIが提供される。
• ゼロ・オーバーヘッド原則のC++はとんでもないことやってます(超むず)
30
13年9月22日日曜日
様々な並列道具
•Java concurrentパッケージ
•Java 8 Fork/Join Framework
• concurrentパッケージ 拡張。Parallel系、lambda
•C++11 Atomic operations library
•C#4.0 Parallel.For
31
13年9月22日日曜日
並列いろいろ
• Lock-freeアルゴリズム・データ構造
• SIMD (Single Instruction Multiple Data)
• GPGPU
• アクターモデル(ScalaのActor、Cocoaの
Operation Queue)
• OpenMP、PPL(Parallel Pattern Library)
• STM(Software Transactional Memory)
32
13年9月22日日曜日
最後に、関数型言語
• そもそもの問題は「状態」だ。
• 状態(副作用)を持たない関数型言語は、
並列プログラミングとの相性がよい。
• Haskell、Erlang、Ocaml、Scala、F#、
• C#、C++、...
33
13年9月22日日曜日
最後に、関数型言語
• そもそもの問題は「状態」だ。
• 状態(副作用)を持たない関数型言語は、
並列プログラミングとの相性がよい。
• Haskell、Erlang、Ocaml、Scala、F#、
• C#、C++、...
33
マルチコアな現代、
関数型言語が注目されている!
13年9月22日日曜日
おつかれさまでした!
34
13年9月22日日曜日

Contenu connexe

Tendances

こわくない Git
こわくない Gitこわくない Git
こわくない GitKota Saito
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来についてshinjiigarashi
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム信之 岩永
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All ThingsUnityTechnologiesJapan002
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpsonickun
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践Yoshifumi Kawai
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!Genya Murakami
 
The Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnionThe Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnionYoshifumi Kawai
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫Yuta Imai
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動uchan_nos
 
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例Yahoo!デベロッパーネットワーク
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション土岐 孝平
 
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~Daisuke Morishita
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013Ryo Sakamoto
 
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜UnityTechnologiesJapan002
 
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~Yuki Hirano
 

Tendances (20)

こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
 
The Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnionThe Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnion
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動
 
Aio
AioAio
Aio
 
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
 
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
 
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
 

Similaire à マルチコア時代の並列プログラミング

JavaScriptのテストコード 一緒に勉強しませんか??
JavaScriptのテストコード 一緒に勉強しませんか??JavaScriptのテストコード 一緒に勉強しませんか??
JavaScriptのテストコード 一緒に勉強しませんか??Toshio Ehara
 
130329 perl casual_ruik
130329 perl casual_ruik130329 perl casual_ruik
130329 perl casual_ruikRui Kimura
 
プログラミング学習のための学習
プログラミング学習のための学習プログラミング学習のための学習
プログラミング学習のための学習siranon *
 
Unityとスマートフォンアプリの最適化
Unityとスマートフォンアプリの最適化Unityとスマートフォンアプリの最適化
Unityとスマートフォンアプリの最適化COLOPL, Inc.
 
Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Uehara Junji
 
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Uehara Junji
 

Similaire à マルチコア時代の並列プログラミング (9)

Objectie-C de ラムダ
Objectie-C de ラムダObjectie-C de ラムダ
Objectie-C de ラムダ
 
JavaScriptのテストコード 一緒に勉強しませんか??
JavaScriptのテストコード 一緒に勉強しませんか??JavaScriptのテストコード 一緒に勉強しませんか??
JavaScriptのテストコード 一緒に勉強しませんか??
 
130329 perl casual_ruik
130329 perl casual_ruik130329 perl casual_ruik
130329 perl casual_ruik
 
プログラミング学習のための学習
プログラミング学習のための学習プログラミング学習のための学習
プログラミング学習のための学習
 
Unityとスマートフォンアプリの最適化
Unityとスマートフォンアプリの最適化Unityとスマートフォンアプリの最適化
Unityとスマートフォンアプリの最適化
 
Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309
 
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)
 
Code injectiontool
Code injectiontoolCode injectiontool
Code injectiontool
 
Gorilla.vim#6
Gorilla.vim#6Gorilla.vim#6
Gorilla.vim#6
 

Plus de Akihiko Matuura

最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)Akihiko Matuura
 
アーキテクチャパターンの紹介
アーキテクチャパターンの紹介アーキテクチャパターンの紹介
アーキテクチャパターンの紹介Akihiko Matuura
 
Go 言語を語ってみるか
Go 言語を語ってみるかGo 言語を語ってみるか
Go 言語を語ってみるかAkihiko Matuura
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会Akihiko Matuura
 

Plus de Akihiko Matuura (6)

最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)
 
アーキテクチャパターンの紹介
アーキテクチャパターンの紹介アーキテクチャパターンの紹介
アーキテクチャパターンの紹介
 
Go 言語を語ってみるか
Go 言語を語ってみるかGo 言語を語ってみるか
Go 言語を語ってみるか
 
boost and c++11
boost and c++11boost and c++11
boost and c++11
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
 
Open Business Model
Open Business ModelOpen Business Model
Open Business Model
 

マルチコア時代の並列プログラミング