[.NET] Task Parallel Library (TPL)
…すげぇ (@@;
MSDN Magazine October 2007: マルチコア コンピュータ用にマネージ コードを最適化する
Task Parallel Library (TPL) は、 自動的に複数のプロセッサを使用できるマネージ コードを簡単に作成できるように設計されています。
(…中略…)
TPL は、 Microsoft .NET Framework の次世代の同時実行サポートである Parallel FX Library の主要コンポーネントです。 TPL のバージョン 1.0 はまだリリースされていませんが、 最初の Parallel FX Communicty Tech Preview (CTP) が 2007 年の秋に MSDN で利用できるようになります。
元のレイ トレーサのコア ループは、 結果の画像のすべてのピクセルを反復処理します。
void Render(Scene scene, Color[,] rgb)
{
for (int y = 0; y < screenHeight; y++)
{
for (int x = 0; x < screenWidth; x++) {
rgb[x,y] = TraceRay(new Ray(scene,x,y));
}
}
}
各レイは個別に追跡できるため、 元のコードを 1 行変更するだけで並列処理できます。
void Render(Scene scene, Color[,] rgb)
{
Parallel.For(0, screenHeight, delegate(int y)
{
for (int x = 0; x < screenWidth; x++) {
rgb[x,y] = TraceRay(new Ray(scene,x,y));
}
} );
}
8 コアのコンピュータで、 元のコードは、 350 x 350 ピクセルの画像に対して毎秒 1.7 個のフレームを生成できます。 一方、 並列バージョンを同じ 8 コア プロセッサ コンピュータで実行すると、 毎秒 12 個のフレームが生成されます。 これは 8 コア プロセッサ コンピュータで 7 倍の処理速度です。
マルチプロセッサ対応は、 今時の業務アプリケーションでも有効な場面があると思います。
前世紀のような、 データベースから 1行取って来ては処理をして書き戻して… って構造では、 CPU を増やしてみても、 データベースへのアクセスがボトルネックになってしまって、 性能は上がらないでしょう。
ADO.NET のように、 ガバっとデータをメモリに持ってきて、 メモリ上で処理をグルグル廻して …っていう今時のやり方なら、 CPU を増やせば性能が上がる可能性が大きいと思うのです。
てなわけで、 CTP が出るのを、 期待して待つことにしましょう f(^^;
| 固定リンク
「プログラミング」カテゴリの記事
- 【.NET / Win8.1 ストアアプリ】 HttpClient で TLS 1.1 / 1.2 に対応するには(2018.06.17)
- 【VS2017 15.7pv2】 XAML のランタイム ツールに 「ヒートマップ」 が増えた(2018.03.28)
- 【.NET Core】 プロジェクトを作ると 「project.assets.json が見つかりません」 エラー(2018.02.10)
- 【#UWP】 ビットマップの表示色を変える (Win2D.uwp 経由で Direct2D を使う)(2017.08.23)
- 【#UWP】 CompactOverlay モード: Picture in Picture というか、「最前面に表示」するウィンドウを作る(2017.08.16)
この記事へのコメントは終了しました。
コメント