« [スカイガールズ 第11話] バッハシュテルツェってなんだっけ? | トップページ | [なのはSS 第25話] いちばん働いてるのは、 リィンたんではなかろーか f(^^; »

2007年9月18日 (火)

[.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(^^;

|

« [スカイガールズ 第11話] バッハシュテルツェってなんだっけ? | トップページ | [なのはSS 第25話] いちばん働いてるのは、 リィンたんではなかろーか f(^^; »

プログラミング」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: [.NET] Task Parallel Library (TPL):

« [スカイガールズ 第11話] バッハシュテルツェってなんだっけ? | トップページ | [なのはSS 第25話] いちばん働いてるのは、 リィンたんではなかろーか f(^^; »