講師:川西裕幸
Visual Studioで追加された並列関係機能、特に.NET 4.0での並列化についての解説でした。このようなフレームワークによる並列化支援はあるものの、結局のところアムダールの法則を乗り越えるには正しいアルゴリズム設計、分割可能なデータ構造の設計といったものが結局のところ必要だと感じました。
ではtsudaりのまとめです。
- 英列プログラミングパターンとVisualStudio 2010を使ったその適用 #T2_303 #techdaysj posted at 09:29:11
- 平列プログラミングのパターンには実装パターンとサポートパターンがある #T2_303 #techdaysj posted at 09:32:34
- 並列101 ムーアの法則、アムダールの法則、並列と同時実行 タスクベースの並列化 #T2_303 #techdaysj posted at 09:33:38
- ジーン・アムダール http://bit.ly/bu8vsD (参照) #T2_303 #techdaysj posted at 09:35:41
- ムーアーの法則。トランジスタ数は増えてもクロックはあげれないので、コア数が増えていく。 #T2_303 #techdaysj posted at 09:36:39
- アムダールの法則。直列部分がボトルネックになり、高速化するのは並列化部分のみ。ポジティブに考えれば並列化すれば早くなると考えられるし、ペティシミックに考えると早くならない #T2_303 #techdaysj posted at 09:38:25
- アムダールの法則に打ち勝っていこう #T2_303 #techdaysj posted at 09:38:39
- 並列(Parallerism)と同時実行(Concurrency) 同時(複数の処理を同時に実行する) 並列(一つの処理を分割して同時に実行する) この違いを理解しておくのが大事 #T2_303 #techdaysj posted at 09:40:12
- タスクベースの並列化。#T2_303 #techdaysj posted at 09:40:27
- OSスレッドの切り替えはコンテキストスイッチの切り替えが重い。ユーザーモードスケジューラを使ったタスクベースのスケジューリングが望ましい。 #T2_303 #techdaysj posted at 09:42:11
- VS2010と.NET4の並列化機能 #T2_303 #techdaysj posted at 09:43:13
- 並列ライブラリー(実装パターンの適用)、同時実行可能なデータ構造(サポートパターン) 同時実行ランタイム(スレッド管理と付加バランス管理からの解放) 並列ツール(効率的なプログラミング) #T2_303 #techdaysj posted at 09:44:48
- 並列化のアーキテクチャの図の説明 #T2_303 #techdaysj posted at 09:45:18
- ネイティブコードであれば、よりユーザーモードスケジューラーを細かくコントロールできる #T2_303 #techdaysj posted at 09:46:50
- 並列プログラミングパターン #T2_303 #techdaysj posted at 09:47:18
- 既存コードとアルゴリズムに存在する利用可能な並列性を発見するために。。 #T2_303 #techdaysj posted at 09:47:54
- 並列実装パターン。 #T2_303 #techdaysj posted at 09:49:18
- フォーク・ジョイン。分割し実行し結合する。 #T2_303 #techdaysj posted at 09:49:51
- Parallel.Invoke() マネージドのフォーク・ジョインメソッド #T2_303 #techdaysj posted at 09:50:44
- ループ並列 コンテキストが違うと用語が違う #T2_303 #techdaysj posted at 09:51:11
- Parallel.For() ループ並列のネイティブ #T2_303 #techdaysj posted at 09:51:46
- ループ並列のデモ #T2_303 #techdaysj posted at 09:52:31
- デモちょっと苦戦 #T2_303 #techdaysj posted at 10:02:56
- デモ内容はパラレルしない、自分でスレッドプールを使うコードを書く Parallel.Forの比較といったものです。 #T2_303 #techdaysj posted at 10:04:00
- Parallel.For()は負荷のスティーリングをするので、負荷が平滑化されて、それをしない自分でスレッドプールを使うコードを書くより早くなる #T2_303 #techdaysj posted at 10:08:38
- VS10での並列化プロファイリング機能のデモ #T2_303 #techdaysj posted at 10:10:59
- 並列化するにはオーバーヘッドがかかるがそのオーバーヘッドが実際の処理を上まってしまう場合がある #T2_303 #techdaysj posted at 10:13:35
- 分割統治パターン。再起型で処理を並立化する。問題を顧問代に分割。Walk<T>() #T2_303 #techdaysj posted at 10:14:55
- 分割統治のデモ #T2_303 #techdaysj posted at 10:15:14
- .NETの場合1スレッド作ると1MBぐらい使うので、多数のスレッドを作るとメモリ不足になってしまったりする。またコンテキストスイッチの負荷も重い #T2_303 #techdaysj posted at 10:20:08
- Parallelライブラリであればユーザーモードスレッドを使うのでそのようなことがない #T2_303 #techdaysj posted at 10:20:43
- プロデューサー・コンシューマパターン。パイプライン処理が多数ある場合 #T2_303 #techdaysj posted at 10:21:51
- デモ苦戦中 #T2_303 #techdaysj posted at 10:27:29
- バックグランドワーカーとTaskを使う場合の違いはTaskの方がちゃんと負荷分散をやってくれる #T2_303 #techdaysj posted at 10:28:59
- パイプラインパターン #T2_303 #techdaysj posted at 10:29:21
- 非同期エージェントパターン。ネイティブであればエージェントがある。 #T2_303 #techdaysj posted at 10:30:43
- 並列サポートパターン。 Facadeとかが使える。 #T2_303 #techdaysj posted at 10:31:24
- 共有キューパターン。ロックセイフなコレクションをParallelでは用意されている #T2_303 #techdaysj posted at 10:32:28
- BlockingCollectionのデモ。これは最初にサイズを指定しておけばこのサイズを超えた場合、もしくは空の場合にアクセスをブロックできる。 #T2_303 #techdaysj posted at 10:35:15
- More Patterns for Parallel Application Programs #T2_303 #techdaysj posted at 10:38:40
- http://www.amazon.co.jp/Patterns-Parallel-Programming-Software/dp/0321228111 #T2_303 #techdaysj posted at 10:38:48
- 基本的に資料は英語 #T2_303 #techdaysj posted at 10:39:07
- このセッションつぶやきは以上 #T2_303 #techdaysj posted at 10:39:23
コメント