並行ランタイム - Microsoft

川西 裕幸 Platform Evangelist
マイクロソフト株式会社
プラットフォーム&デベロッパー統括本部
本講演に含まれるのは
デスクトップアプリにおけるスケーラブルな
並列化の必然性
並列プログラミングを援助するVS2010の機能
とデモ
マネージ
ネイティブ
本講演に含まれないのは
HPC
OpenMP
F#
デッドロック
並列化用の銀の弾
「すなわち、1975年までには、最小コストで得ら
れる集積回路の部品数は6万5千に達するであろう。
私は、それほどにも大規模な回路が1個のウェハー
上に構築できるようになると信じている。」
-- Intel 共同創業者 Gordon Moore in 1965
2007年IDFでアナウンス
された4コアNehalem:
7億31百万トランジスタ
コア
HyperThread
スレッド
周波数 (GHz)
Pentium 4
1
〇
2
3.4
Core2 Duo
2
X
2
3.0
Core i7
4
〇
8
3.2
CPU
将来のプロセッサ:
クロック数ではなく、コアが増える
並列負荷に最適化
アムダールの法則
どんなに多くのプロセッサーがあっても、
コンピュータ プログラムは並列で実行しな
い(直列)部分の合計より決して速くなる
ことはない。
統合ツール
プログラミング モデル
プログラミング モデル
PLINQ
スレッド プール
データ構造
タスク並列ライブラリ
並行ランタイム
プロファイラ
並行性分析
並列パターン
ライブラリ
データ構造
並列
デバッガー
ツール
ウィンドウ
タスク スケジューラ
リソース マネージャ
並行ランタイム
タスク スケジューラ
リソース マネージャ
オペレーティング システム
スレッド
Key:
Managed
Library
エージェ
ントライ
ブラリ
Native
Library
Tools
CLR スレッド プール
グローバル
キュー
ワーカー
スレッド 1
プログラム
スレッド
…
ワーカー
スレッド p
CLR スレッドプール: ワークスチール
グローバル
キュー
…
ローカル
キュー
ワーカー
スレッド 1
…
ローカル
キュー
ワーカー
スレッド p
タスク 6
タスク 1
タスクプログラム
2
スレッド
タスク 3
タスク 5
タスク 4
ThreadPool
ThreadPool.QueueUserWorkItem(…);
System.Threading.Tasks
開始
Task.StartNew(…);
続ける/待ち/キャンセル
親/子
var p = Task.StartNew(() => {
var t = Task.StartNew(…);
});
Task t = Task.StartNew(…);
戻り値付きのタスク
Task p = t.ContinueWith(…);
t.Wait(2000);
t.Cancel();
var f =
Future.StartNew(() => C());
…
int result = f.Value;
Parallel クラス
静的 (オーバーロード済み) メソッド
タスクと共に作成/動作するヘルパーメソッド
共通パターンのカプセル化
Parallel LINQ-to-Objects (PLINQ)
LINQを複数コアに拡張可能に
全ての .NET標準クエリー操作をサポート
既存のLINQモデルへの影響は最少
var q = from p in people.AsParallel()
where p.Name == queryInfo.Name &&
p.State == queryInfo.State &&
p.Year >= yearStart &&
p.Year <= yearEnd
orderby p.Year ascending
select p;
マネージとネイティブの両方をサポート
1. 並列タスク
2. 並列スタック
伝統的なスレッドもサポート
スレッド安全なコレクション フェーズ操作
ConcurrentStack<T>
ConcurrentQueue<T>
ConcurrentDictionary<TKey,TValue>
ワーク交換
BlockingCollection<T>
IProducerConsumerCollection<T>
初期化
LazyInit<T>
CountdownEvent
Barrier
ロック
ManualResetEventSlim
SemaphoreSlim
SpinLock
SpinWait
統合ツール
プログラミング モデル
プログラミング モデル
PLINQ
スレッド プール
タスク スケジューラ
データ構造
タスク並列ライブラリ
並行ランタイム
プロファイラ
並行性分析
並列パターン
ライブラリ
データ構造
並列
デバッガー
ツール
ウィンドウ
リソース マネージャ
並行ランタイム
タスク スケジューラ
リソース マネージャ
オペレーティング システム
スレッド
Key:
Managed
Library
エージェ
ントライ
ブラリ
Native
Library
Tools
重要な概念
動的リソース管理:
実行時の処理リソースで
演算要求を調停
Visual Studio 10
プログラミング モデル
並行ランタイム
並行処理のためのプラットフォーム インフラ
低いオーバーヘッドでスケジュールと負荷バランスを行う
協調ブロッキング
複数のスケジューラー インスタンスをサポート
リソース管理
共通リソース管理
スケジューラー間の動的負荷バランシング
プラットフォームの拡張性と合成性
ISVやパートナーによる、スケジューラー・リソースマネージャ
と並列処理ランタイムとの統合を可能にする
オペレーティング システム
Visual Studio 10
Programming Model
Intel Parallel Studio
Threading
Building Blocks
OpenMP
並行ランタイム
並行処理のためのプラットフォーム インフラ
低いオーバーヘッドでスケジュールと負荷バランスを行う
協調ブロッキング
複数のスケジューラー インスタンスをサポート
リソース管理
共通リソース管理
スケジューラー間の動的負荷バランシング
プラットフォームの拡張性と合成性
ISVやパートナーによる、スケジューラー・リソースマネー
ジャと並列処理ランタイムとの統合を可能にする
Operating System
まとめ
C++での迅速な並行化

















Visual Studio 10
プログラミング モデル:非同期エージェント ライブラリ
抽象レベルを上げることによって、並列アプリケーション開発
を単純化
共有状態の代替を提供することによって、並列アプリケーショ
ン開発を単純化
開発者に並行アルゴリズムとコンテナを提供することによって、
プラットフォーム性能を解放
並行ランタイム
オペレーティング システム
ダウンロード
Microsoft Parallel Extensions to .NET
Framework 3.5, June 2008 CTP
PDC 08
PDC 08 Parallelism
ブログ
Parallel Programming with .NET
Daniel Moth
© 2009 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.
The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market
conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation.
MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
並行処理: 独立な要求
(ほとんどのサーバーアプリ)
並列処理: 1つのタスクを可
能な並行実行に分解
複数ノードの「オーナーシッ
プ」を仲裁
並行検索を開始…
スレッドの「独立性」をシ
ミュレーション
タスクをスケジュール化
マルチスレッド、非同期、…
分野
説明
シナリオの例
強制的
データ並列
同じ操作を共通のコレクション/セットに並列
に適用。ループ、データ分割、補正、スキャ
ンなど
医療画像
債券価格
タスク並列
タスク並列ライブラリ
並列パターンライブラリ
複数の独立した操作を同時に実行。分割統治 プロセス制御オート
法、タスク、スレッド、フォーク/ジョイン、
メーション
OpenMP, クラスターSOA
フューチャーなど
共有リソース
並行コンポーネント用のビルディング ブロッ
ク。スケーラブルでスレッド安全なコレク
ション、ロックなど
協調データ構造中間層の
構成/状態管理
トランザクション メモリー
宣言型データ並列
どの演算を行う必要があるかを、方法なしで
定義。選択、フィルタ、ジョイン、集計、グ
ループ化など
統計モデル
PLINQ
コーディネーション
MPI, MPI.net, CCR
データを待つ間、動作中の作業によって隠れ オーディオのストリー
ていた操作を利用する。非同期I/O、非同期操 ミング
ネイティブ エージェントとメッセージング
作点、メッセージ渡しなど
Maestro