yohhoyの日記(別館)

もうちょい長めの技術的メモをしていきたい日記

Boost.勉強会 #14に参加しました

2014/3/1に開催されたイベント Boost.勉強会 #14 東京 にて、“新しい並列for構文のご提案”というタイトルで30分ほど話す機会をいただきました。(1年7ヶ月ぶり2回目

感想とか

今回作ったスライド資料では、現行の並列化技術10種類とC++1y ParallelTSを広く浅く紹介というテーマで、前回よりも枚数を増やし進行テンポを速くしてみました。また前回の反省点として、概念と仕様のみ紹介だと理解されにくいかなと思ったこともあり、今回は導入部をシナリオ的にし(1/3)+“今日から使える”技術の紹介(1/3)+将来のC++1y動向の紹介(1/3)という構成にしています。Twitterでの皆様の反応を後から眺めてみると、思ったよりC++1y ParallelTSが注目されていたようでした(並列処理はTransactional Memoryよりも身近で分かり易いという側面はあるでしょうけど)。当日は少しぼやけてしまった感がありますが、「並列処理の"仕組み"を自分で書こうとしないで!*1」「並列化技術はいろいろあるから、適材適所で選んでね!*2」という主張でした。

並列処理は目に見える効果が大きく面白く感じられる反面、正しく動作するコード記述や適切な速度性能を引き出すのは一筋縄ではいきません。また昨今のハードウェア進化の方向性を鑑みるに、ソフトウェア側での並行処理・並列処理への対応は避けられそうもありません。今回紹介した並列化技術は“処理を並列実行する枠組み”部分を提供するため、この点ではプログラマのコーディング負担を下げてくれるはずです。ぜひ並列処理プログラミングの世界に足を踏み入れてみてください。


P.S. 勉強会の終了後に行われたじゃんけん大会で幸運にも勝ち残り、書籍版プログラミングの魔導書 〜Programmers' Grimoire〜 Vol.3 "Parallel, Concurrent, and Distributed Programming"を頂いてしまいました(もうおひと方と私の2冊)。@cpp_akiraさん、ありがとうございます!

*1:安易に、スレッドを自前で作り制御するような並列処理コードを書くべきでないと考えます。特殊な事情がある場合はこの限りではありませんが、安定性/スケーラビリティ/拡張性/保守性などの観点から、適切な実装手段を選択すべきです。(よくある標準ライブラリvs自前コードの比較ですね。)

*2:今回の文脈では 並列化=実行速度の高速化(最適化) のため、良い結果が得られなければ特定技術にこだわるのは無意味です。また、単一の並列化技術だけでは十分でないケースも多々ありますので、複数の並列化技術を組み合わせることも検討してみてください。