-
PDC 2009 のビデオやスライドがhttp://microsoftpdc.com/Videos に公開されています。このデータをすべてダウンロードするツールが公開されています。
- cURL (~250K) をダウンロードして、フォルダーに解凍する
- PDC09Downloader.zip (1.49KB) をダウンロードし、PDC09Donwloader.batを同じフォルダーに解凍する
- コマンドプロンプトから WMVHIGH, WMV, MP4, PPTX のいずれかのパラメータを付けてPDC09Downloaderを実行(たとえば “PDC09Downloader WMV”)
- オプションとして、PDC09 Renamer batch file (4.52KB) をダウンロードし、同じフォルダーに解凍してから、コマンドプロンプトで”PDCRenamer WMV”のように実行すると、.WMVファイルの名前をセッションタイトルに変更してくれます。PPTXやMP4でも同じことができます。
-
PDC 2009 も最終日です。今日はキーノートもなく、以下のセッションに参加しました。
- [SVR10]Lighting up Windows Server 2008 R2 Using the ConcRT on UMS
- [VTL02]Axum: A .NET Language for Safe and Scalable Concurrency
- [CL03]DirectX11 DirectCompute
- [CL35]Custom Behaviors for Advanced Microsoft Silverlight UI Effects
- [CL24]XAML Futures in Microsoft .NET Framework, Microsoft Silverlight and Tools
Agenda
- アーキテクチャ概要
- タスク
- 協調型ブロック
- UMS(User Mode Scheduling)
タスク スケジューラーとリソースマネージャについて(性能、生産性、プラットフォーム)。
UMSスレッドをユーザーが使えることでプラットフォームを改善。UMSによってアプリは、OSに依存せずに、スケジューラーのふるまいを定義できる
UMSをConcRT(同時実行ランタイム)が使うことによって、次のことが可能になる。
- 細粒度の並列化
- より決定論的なふるまい
- より優れたキャッシュの局所性
タスクグループによってスレッド アフィニティを管理できる。タスクはスケジューラーによって実行するが、ワークスチーリング キューが負荷バランスをとる。
64以上のプロセッサーをサポート(64ビットOSの場合):SetThreadIdealProcessorEx
OpenMPはC/Fortranに、MSの並列ライブラリーはC++に焦点を当てている。
現在開発中のソフトウェアが10年後にも動作しているとしたら、それは80コアのPCで動作しているかもしれない。だから今から始める必要がある?
並列プログラミングには見えない天井があるので(複雑さ・性能・スケーラビリティ)、新しいモデルが必要。Axumは並列のための新しいプログラミング モデルで、共有メモリーと純粋メッセージ渡しとのバランスをとることができる。
Axumのコンセプト
- 「チャンネル」は2つのエージェント間のメッセージを指揮するポートを定義
- 「エージェント」はスレッドと同じようなアクティブなコンポーネントだが、共有排他状態へのアクセスが制限されている。チャンネル経由でメッセージを送る。
- 「ドメイン」は複数のエージェントが共有する状態を定義。エージェントはドメイン内にホストされる。
- 「スキーマ」はペイロードを定義。
- 「プロトコル」はメッセージの正しい順序を定義。
- 「データフロー ネットワーク」は演算間でデータを伝搬させる。
ダウンロード:http://msdn.microsoft.com/devlabs/
ブログ:http://blogs.msdn.com/maestroteam/
概要
- GPUをCPUのように記述
- 問題セットの定義
- DirectComputeの使い方
- データの管理
GPUとCPU
| CPU | GPU |
| 4コア | 32 コア |
| 4Float 幅 SIMD | 32 Float 幅 SIMD |
| 3GHz | 1GHz |
| 48-96GFlops | 1 TeraFlops |
| 2x Hyper Thread | 32x “HyperThread” |
| 64kB $L1/core | 64kB $L1/core |
| 20GB/s to Memory | 150GB/s to Memory |
| $200 | $200 |
| 200W | 200W |
GPUはデータ並列プロセッサー、CPUは25GFlops GPUは700GFLops
DirectComputeの使い方
- DirectComuoteの初期化
- .hlslにGPUコードを作成
- DirectX コンパイラーを使ってコンパイル
- そのコードをGPUにロード
- GPUバッファをセットアップ、アクセス用にビューをセットアップ
- データ ビューをカレントにする
- GPUでコードを実行
- データをCPUメモリーにコピー
HLSLは最も広く使われいているデータ並列プログラミング言語。
DirectX Resource Type
- Buffer Resource Type: 構造化データ
- Image Media Resource Type: テクスチャ、1D, 2D, 3D, キューブ、配列
リソースビュー:リソースバッファのデータにアクセスするメカニズム
- GroupSharedレジスター:新しいレジスター
- 一時レジスターは、汎用レジスター
データ並列I/O:1600のアクティブなスレッドのI/Oは容易ではない。
ComputeShader 4.* vs 5.0
ComputeShader 4.*では倍精度は扱わない、5.0から。
トリガー、アクション、ビヘイビアーのカスタマイズ
Public class Grow : TrigggerAction<FrameworkElement>
{
protected override Invoke(object parameter){
CompositTransform transform = ....
}
http://blogs.msdn.com/expression/
現在注力しているのは
- ランタイム構文解析
- 静的分析
- コンパイル時
- デザイン時
- ローカリゼーション

XAMLデータモデル=Object - Member - Value (O-M-V) + Type
XAMLノード ストリーム:例えば、XAMLpadでイベントハンドルが可能に
- IXamlTyoeResolver,
- IAmbientProvider
- IXamlSchemaContextProvider
- IRootObjectProvider
- IXamlNameResolver
ランタイム構文解析(パーサー)の改善
- .NET4 はSystem.Xaml.dllを使用
- Silverlight 4にはまだ XamlScemaContext が必要
アナウンス:XAML Toolkit http://code.msdn.microsoft.com/xaml/
- XAMLDom: XDocumentのXLinqのようなもの
- XAML FxCop
XAMLローカリゼーション
- x:Uid か {MarkupExtension}か?
- Page.xaml.resx のような形でローカライズできることを考えている
- XAML Toolkit で公開する
お願い
- .NET 4 Beta2 +System.Xaml.dll で初めて下さい
- XAML Toolkit CTP をダウンロードして下さい
- XAML改善のためフィードバックを下さい

-
PDC09 も本番2日目です(私は3日目ですが)、今日もキーノートがありました。今日、参加したセッションは以下の通りです。
- キーノート
- BOF Developers on Better Design, User Experience and Why It Matters
- CL34 Media Foundation: Supporting Hardware Codecs and Cameras
- CL15 Modern 3D Graphics Using Windows 7 and Direct3D 11 Hardware
- FT07 The State of Parallel Programming
- CL12 Developing with the Windows API Code Pack for Microsoft .NET Framework
ウルトラセブンのテーマソングとともに現れたSteven SinofskyがIE9について、HTML5, JavaScriptの高速化、Direct2D・DirectWriteの使用などをアナウンスしましたが、PDC09の参加者(社員は除く)にWindows 7 が乗ったAcerのマルチタッチ ノートPCを無料で配布するというビッグニュースにかき消されてしまいました(写真は捨てられた箱)。
次にScott Guthrieが Silverlight 4 Betaのアナウンスをしました。Silverlight.net からダウンロードできます。
最後に Kurt DelBene が Office 2010 と Sharepoint 2010 のベータをアナウンスしました。http://www.microsoft.com/2010/ja からダウンロードできます(日本語版)。Sharepoint 2010 は Visual Studio 2010 とちゃんと統合され、F5キーでちゃんとサーバーで実行できると言うと、会場は拍手喝采でした。これまでかなり大変だったんですね。それ以外にも Duet Enteprise for Sharepoint and SAP や Outlook Social Connector もアナウンスされました。最後にMIX10についても言及されていました。
Developers on Better Design, User Experience and Why It Matters
BOF(Bird of Feather)でした。最初のお題は以下のように書いてありましたが、みんなが意見を言い合うので結局進まず、①だけで終わりました。
- Best and Worst UX Experience? What can we learn?
- The UX ROI
- Building Better UX Teams)
UCD(ユーザー中心設計)や Expression Blend の SketchFlowの話になったのですが、私がペルソナの話が聞きたいと振ったところ、100名くらいの参加者の5・6名がペルソナを使ったことがあると答え、ペルソナで盛り上がりました。そのあと開発者とデザイナーの仕事などの話で終わりました。テーマの割に1時間では時間が少なかったようです。
講演者の Stan Pennington は以前からよく知っていたので楽しみだったのですが、広い部屋に参加者が10名程度しかいなくてかわいそうでした。ランチセッションでネイティブWin32の話だから、少ないとは思いましたが...
Windows のメディア インフラは以下の通り
- Video for Windows
- DirectShow
- Windows Media Format SDK
- Media Foundation
MSがMFを使う理由
- ストリームオブジェクト(IStream)
- 接続性とデータフロー
- より良いスレッド制御
- 制約のあるコンポーネントとトポロジー
MFの機能
- COM
- C++
- Vista
- Windows 7
- Source Reader, Sink Writer, Transcode API, Asynchronous MFT, HW Accerelation
ハードウェア コーデック ライセンス プログラム
- ビデオ コーデックとビデオ プロセッサーのみ
- WME用のインボックスMDTコーデック
- wmal@microsoft.comにメールしてください。
- 2種類のコードタイプ Transcode only, General
- 正しい MF属性の設定が必要、MFTはハードウェアデータフローが使える
Media Foundationのブログ http://blogs.msdn.com/mf/
Agenda
- Windows 7 Direct3D レビュー
- Direct3D 10 レビュー
- Expanding Reach: D3D10Level9 & WARP
- HLSL & Shader
- D3D11
Direct3D 10 パイプライン
入力アセンブリー⇒頂点シェーダー⇒ジオメトリーシェーダー⇒ラスタらいざー⇒ピクセルシェーダー⇒出力合成
Direct3D10 Level9 フィーチャーレベル Level9_2, Level9_1, Level9_1, WARP
Direct3D 11 デザインゴール
- 非同期リソース ロード
- マルチスレッド 描画と状態変更
- デバイスとコンテキスト、3つのコンテキスト:デバイス、直接コンテキスト、繰り延べコンテキスト
- 状態継承
- Direct3D 11 APIは D3D10ハードウェアとドライバでも利用可能
- VistaとWinodows 7で利用可能
Direct3D 11 テセレーションは、Bezier, NURBS, 動的・静的テセレーション、変位、再分割に使える
FBXフォーマット
Windows Vistaでの性能更新 http://support.microsoft.com/kb/971644
この講演者の Burton Smith は Microsoft のフェローで並列コンピューティングの第一人者として有名な方のようです。大学の授業のようで非常に難しかったです。
結論
- 関数型言語とトランザクション メモリーはより高いレベルの並列プログラミングを実現する
- 分離とアトミックの効率的な実装が重要
- アーキテクチャがこれらの助けになるはずだ
- フォンノイマン モデルは近々置き換えられるだろう
Windows API Code Packの使い方をサンプルを使って紹介していました、
アナウンス:バージョン1.0.1 に更新されたそうです
Ask the Expert
午後6個半から開催された Ask the Expertは、Microsoftの様々なテクノロジーの専門家(講演者など)とテーブルを囲んでディスカッションできる時間です。これも日本人にはちょっと難しいイベントでしたが、ビールと軽食が出ました。

【追記】各セッションのビデオへのリンクを追加しました
-
PDC 2009 の本番が始まりました、今年は1日減って3日間です。今日は以下のセッションに参加しました。
- キーノート
- [CL09] How Microsoft Visual Studio 2010 Was Built with Windows Presentation Foundation 4
- [VTL32] Concurrency Fuzzing & Data Races
- [FT19] C++ Forever: Interactive Applications in the Age of Manycore
- [CL13] Windows Touch Deep Dive
- [FT03] Manycore and the Microsoft .NET Framework 4: A Match Made in Microsoft Visual Studio 2010
Ray OzzieらがAzureのテクノロジーの話を、Bob MugliaらがAzureのレイヤーとビジネスの話をしました。ライブ中継があったらしいです。
Visual Studio 2010はWPFベースで作られており、その苦労話でした。
WPFを使った理由
- 技術的証明
- アーキテクチャ的理由
- VS2010の重要な機能のため
どのWPF機能を使ったか?
- XAMLを使った宣言UI
- データバインディング
- スタイル テンプレート
- アプリケーション リソース
- Win32との相互運用
- メッセージループとの統合
- DirectWriteを基にした新しいテキスト
段階的アプローチ
- データモデルを定義
- メインウィンドウをWPFに置き換え
- 新しいWindowマネージャとコマンドバーを書く
- 一部のチームをスカウト(繰り返し)
- テスト、テスト、テスト
- テスト用に切り替え
- 古いコードを取り除く
テストのコスト
- 過小評価していた
- しかし、チャンスでもあった(統合テストフレームワーク、UIオートメーション)
- データレイヤーでのテスト
挑戦だったのは
- 混合モード アプリ(ネイティブとマネージ、WPFとHWND Winフォーム)
- 既存の拡張機能が動作するように
- 開発をストップしてはならない
- テキストの品質と性能
混合モード アプリの挑戦
- データレイヤーでの相互運用(マネージコードからネイティブ モデルにバインディング)
- プレゼンテーション レイヤーでの相互運用
デモ:フォーカスが動く問題
テキストと画像の品質
性能
メンバー:約12名とWPFチームとExpressionチーム
同時実行は難しい
- 非決定論的
- Heisenbugsの結果
- 観察がバグを修正してしまう
- 大きな生産性の問題
MSRではCuzzとFeatherLiteを開発
- Cuzz: 百万回に1回のバグを見つけるツール
- FeatherLite: 軽量なデータ競合検出
VS2010のネイティブ並列ライブラリー
Agenda
- 同時実行を容易にする
- カスタマイズ可能でスケーラブルな同時実行ランタイム
- 共有状態の管理
- 生産性のための並列開発ツール
並列パターン ライブラリー(PPL):Task, Task group, Paralle Loos
非同期エージェント ライブラリー:Agent, Souce and Target, 協調型送信と受信
http://code.msdn.com/concrtextras にVS2010 Beta2 用のサンプルが更新されていました。
Win32マルチタッチAPIの話でした。
Agenda
- はじめに
- Windows Touch APIの概要
- 実際のISVからの質問と解答
- デモ
タッチはチャンス
Windows Touch APIs
- WM_GESTURE
- WM_TOUCH
- マニピュレーションと慣性
デモ:3D マニピュレーション
Agenda
- なぜ並列か?なぜ今か?
- タスクが新しい最良の友達
- ループを活用
- 並列を可視化
ムーアの法則はメニーコアシフトへ:10年以内に80コアになる
並列化のオーバーヘッドを最小化:実装と実行どちらも
新しい同期プリミティブ
デモ:並列プロファイラーと並列デバッガー
このセッションは昨日のワークショップと同じく Stephen Toubが講演しました。やはりスライドよりコードを書き、受講者からの質問に片っ端から答えるという日本人にはつらいスタイルでした。彼はマネージ並列のプログラム マネージャですが、本当にすごいと思います。

【追記】各セッションのビデオへのリンクを追加しました
-
今年もロスアンジェルス コンベンションセンターでPDC 2009が開催されています。今日はワークショップがあり、私は「Patterns of Parallel Programming: A Tutorial on Fundamental Patterns and Practices for Parallelism」に参加しました。

アジェンダ
- 並列プログラミング概要 by Herb Sutter
- 並列プログラミングのパターン入門 by Ade Muller
- Visual Studio 2010での並列プログラミングのパターンの適用 by Stephen Toub
- HPCにおける並列プログラミングのパターン by Richard Ciapala
- パネル
並列プログラミング概要 by Herb Sutter
- ムーアの配当がクロックからコアに映ったことを指摘し、Nコアにスケーラブルなプログラミングの困難さを説明。
- ソフトウェアの波(GUI、オブジェクト、ガベージコレクション、ジェネリクス、ネット、並列)は1958年から73年に生まれているが、1990年代から00年代まで待って、成熟したエコシステムになるまで5年以上かかっている。
- 自動並列や関数言語は重要な弾だが、まだ実用化していない。
- 並列評価のためのフレームワーク、夜明けのための3本の柱
- 非同期エージェント経由での分離
- 並列コレクション経由でのスケーラビリティ
- 安全な共有リソース経由での一貫性
- 将来のメニーコアは複雑なコア、いくつ同時実行できるかどうかは不明。決め打ちはできない
- デザインパターンとは、あるコンテキストで、ある問題への、一つの解決策
並列のためのパターン
- フォーク/ジョイン
- ループ
- 分割とConcuer
- プロデューサー/コンシューマ
- パイプライン
- 非同期エージェント
サポート パターン(Gang of Four パターン)
- ファサードとリモートファサード
- デコレーター
- レポジトリー
- 共有キュー(タスク キュー)
さらに詳細は
- 書籍
- Patterns for Parallel Programming
- Design Patterns
- Head First Design Patterns
- Pattern of Enterprise Application Architecture
- ParaPLop (Workshop on Parallel Programming Patterns)
Visual Studio 2010での並列プログラミングのパターンの適用 by Stephen Toub
実際にVisual Studio 2010でコーディングしながらのデモがほとんどでした。
- 並列ループ
- フォーク/ジョイン
- プロデューサー/コンシューマー
- MapReduce(PLINQ)
- アンチパターン(ロックコンボイ、デッドロック)
彼の書いた、Patterns of Parallel Programming with .NET というドキュメントがダウンロードできます(英語)。彼のセッションの後は質問者が多数来て質問していました(壇上にいる人ではなく、写真の真ん中でこちらを向いている人)。
HPCにおける並列プログラミングのパターン by Richard Ciapala
HPC Server 2008 R2の概要と、フォーク/ジョインのプログラミング、SOAアプリケーション(WCP)のプログラミングを説明していました。
パネル
ほとんどが参加者からの質問とパネラーの回答という、質疑応答でした。私もLarrabeeのサポートを聞いてみましたが、日本人にはつらいパターンです...
- 並列プログラミングでのベクトル化?フィードバックをください
- Larrabeeのサポート?今のところない
- ASP.NET?
- 例外処理?
- Silverlightの並列サポート?今のところない
- OpenCL サポート?
- UIスレッドの改善 ?
- STM.NET ?
- 並列デバッガーによるユニットテストフレームワーク?
左から Ade Miller, Stepen Toub, Richard Ciapala
やはりツール・ランタイムの開発者とアプリケーション開発者が直接コミュニケーションして、意見を言い合えるというのは素晴らしいですね。スピーカーたちもフィードバックをすごく欲しがっていました。日本でもTech Days 2010を開催しますが、言葉の壁と距離の壁があり、開発者に直接来てもらえるわけではないので、このようなディスカッションは難しいです。
-
Bing Maps を Silverlight で制御・表示するための Bing Maps Silverlight Control SDK V1.0 が公開されました。
必要な環境は、VS2008 SP1と Silverlight 3 Tools for VS2008 SP1です。また、使用には Bing Maps Key が必要なので、Bing Maps Accounts Center で登録する必要があります。
詳しくは SDK ドキュメント(英語)を参照してください。
こんな風に使えるそうです。
<UserControl x:Class="SilverlightApplication1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:m="clr-namespace:Microsoft.Maps.MapControl;
assembly=Microsoft.Maps.MapControl">
<Grid x:Name="LayoutRoot" Background="White">
<m:Map CredentialsProvider="your key" Mode="Aerial" />
</Grid>
</UserControl>
-
pfxteam ブログに .NET 4 Beta 2 での TPL の更新について3+1回で紹介されています。
-
Visual Studio 2010 & .NET 4 Beta 2 の日本語版が MSDN Subscription で公開されました。それに伴い、MSDN Library のドキュメントも Beta 2 に更新されています。
.NET Framework 4 の並列プログラミングのタイトル“Parallel Programming in the .NET Framework” は「.NET Framework でのプログラミングを並列します」から「.NET Framework で並列プログラミング」になっています。
【追記】ダウンロードセンターからも利用可能になりました。ISO イメージ、Web インストーラー
-
Codeplexに、WPFでの MVVM パターンの実装を容易にする WPF Starter Kit が公開されています。これは US Microsoftのコンサルタントが開発しており、以下の内容が含まれています。
- View/ViewModel間の明確なナビゲーションを可能にするナビゲーション フレームワーク
- ViewModelどおしのデータ渡しのサポート
- 汎用的な例外処理
- UI スレッドでの長期実行操作のサポート
ダウンロードページに解説用のPPTもあります。
-
スレッドセーフでロックフリーのデータコレクション(同時実行コンテナ)concurrent_queueとconcurrent_vector は、PDC 08で紹介されていましたが、Visual Studio 2010 Beta 1 には実装されていませんでした。
Parellel Programming for Native Code ブログ「What’s new in Beta 2 for the Concurrency Runtime, Parallel Pattern Library and Asynchronous Agents Library」によると、Beta 2 にはこの2つのコンテナが入っているとのことです。
このブログではそれ以外の Beta 2 での更新内容(デバッグ、ドキュメント、task_groupなど)も紹介されています。
-
.NET Framework 4 Beta 2 ドキュメント(英語)がオンラインで公開されています。WPF 4 のコンテンツもこの中にあります。
“Controls” の章はかなり更新されています。どうやって既存のコントロールをカスタマイズするかという内容が追加されており、”Control Customization” の項目もあります。Controls の目次は以下の通りです。
- Controls Overview
- Walkthroughs: Create a Custom Animated Button
- Control Library
- Control Customization
- Controls by Category
- WPF Content Model
WPFのコントロールはStyleやControlTemplateなどを使ってかなりカスタマイズできるのですが、これまであまりドキュメント化されていなかったので、その習得に時間がかかりました。
Beta 2 でも機械翻訳かもしれませんが、日本語版が出るのが楽しみです。
-
code.msdnで公開されている 並列プログラム サンプル for .NET 4 がベータ2用に更新されました。サンプルの数も倍増しており、「食事する哲学者」などが追加されています。
-
MSDNマガジン9月号日本語版にVS2010の並列デバッガーの記事が載っています。この号のいくつかの記事は機械翻訳ですが、幸いなことにこの記事は人間翻訳のようです。レイアウトが崩れいているところがあるのが、残念ですが...
VS2010の新機能である並列タスク ウィンドウと並列スタック ウィンドウの使い方が解説されています。
.gif)
.gif)
-
CodePlexにSilverlight Toolkit (October 2009)が公開されました。以下の機能が追加されています。
- Visual Studio 2010 Beta2でのデザイン用のメタデータ
- ドラッグ&ドロップ(詳細)
- グラフの改善(詳細)
このツールキットには以下のコントロールが含まれています。
| SDKに含まれているものAutoCompleteBox Calendar ChildWindow DataGrid DataPager DatePicker GridSplitter HeaderedItemsControl TabControl TreeView | 安定版 DockPanel Expander HeaderedContentControl Label NumericUpDown Viewbox WrapPanel |
| プレビュー版 Accordion Charting DataForm DomainUpDown ImplicitStyleManager LayoutTransformer Rating TimePicker TimeUpDown 11 のビジュアルテーマ | 実験版 GlobalCalendar TransitioningContentControl TreeMap Drag and Drop support for items controls |
-
VS2010 & .NET 4 Beat2 英語版が MSDN サブスクリプションで公開されました。日本語版も近々公開される予定のようです。
VS2010 のエディションは新しく次のエディション名になりました。Officeみたいですね。
- Microsoft Visual Studio 2010 Ultimate with MSDN
- Microsoft Visual Studio 2010 Premium with MSDN
- Microsoft Visual Studio 2010 Professional with MSDN
【追記】ダウンロードセンターからもダウンロードできるようになりました。詳しくはVS2010のページ(英語)。