C/JAVAの最近のブログ記事

NVIDIA主催のOpenCLセミナー、OpenCL seminar〜GPUコンピューティングがもたらすもの〜に行ってきた。



その際の次世代GPU"Fermi"やOpenCLの概要のメモを公開
※個人的なメモなため、内容の正確性は保証できません

先ずは次世代GPU、コードネーム"Fermi"の話、

GT200と比較したFermiの仕様
開発コード名 GT200 Fermi
構成トランジスタ数 14億Tr 30億Tr
倍精度浮動小数点演算能力 30FMA Ops/clk 256FMA Ops/clk
単精度浮動小数点演算能力 240MAD Ops/clk 512MAD Ops/clk
Warpスケジューラ(SMあたり) 1 2
特別機能ユニット(SFU、SMあたり) 2 4
シェードメモリ(SMあたり) 16KB 48KB or 16KB
1次キャッシュ(SMあたり) - 16KB or 48KB
2次キャッシュ(SMあたり) - 768KB
ECCメモリサポート -
コンカレントカーネル - 16個まで
ロード/ストアアドレス幅 32bit 64bit


  •   次世代CUDAアーキテクチャ”Fermi”
  1. 30億Tr、コア数倍増512(SMあたり32コア)
  2. 倍精度浮動小数点演算ピーク性能8倍(単精度の1/2)、従来は1/8
  3. 2個のThread Cchedular(コンテキストスイッチ最適化、複数カーネルの起動、Dual DMAエンジン)、より効率的なタスク並列とデータ並列が可能
  4. IEEE754-2008準拠(最新CPUを凌駕)、非正規数サポート、Fused multiply add(FMAD)命令を倍精度・単精度でサポート、新設計の全命令32bitサポート整数ALU (64bitへの最適化、24bit divが消えた笑)
  5. オンチップ・シェアードメモリともに本格的なキャッシュ階層構造、各SMにL1キャッシュ
  6. GDDR5メモリインターフェイス、ECCサポート(レジスタ,L1,L2)、SECDECサポート
  7. C/C++ポインタのフルサポート
  8. NVIDIA Nexus IDE(統合化開発環境), Nexus IDE 1.0 (Visual Studio 2008 SP1)

ちょっと赤字は困ったぞ、研究的な意味で(笑)

倍精度の性能が高くなれば、今私の単精度を用いた疑似倍精度の必要性なくなるし、ECCがサポートされれば東工大の某研究室のチームも笑うしかないだろう。


次にOpenCLの話、

  • OpenCL概要
  1. ヘテロジニアス並列コンピューティング環境のためのフレームワーク
  2. Open CL C言語、Open CL Runtime API
  3. ハイブリッドシステム CPU+DSP, PPE+SPE(Cell/B.E.), CPU+GPU
  4. Open CL Version 1.0 Revision 48
    各種プロセッサに対応するOpen CLは今年中にリリース

  5. 統一された言語による記述、統一されたAPIによる演算デバイス制御が可能
  6. CUDAとOpenCLは同等程度のパフォーマンス(?)
    Porting/Optimization サービス、コンパイラは開発中
    EclipseベースのOpenCLプラグイン

  7. C99ベースの言語
  8. 拡張:ベクタ・ベクタ演算、組み込み関数、修飾子、Reinterpreting
    厳密な定義:型のビット幅 演算子の意味
    CUDAにはないDMA:グローバル(デバイスメモリ)ローカル(シェアード)間
    制限:関数ポインタが使えない、可変長配列が使えない、再帰ができない
    タスク並列とデータ並列は双方選択できる。CUDAと比較して高速になるかはものによる

個人的な感想として、CUDAとほとんど仕様同じじゃないかと(笑)。際立った違いはメモリ間のDMAだけど(cudaMallocに相当)、グローバル⇔ローカル間のメモリ転送って役に立つのかな・・・? 性能は書き方によるし、CUDA越せるとは限らないと言っていた。 

Open CLの規格統一で複数のプラットフォームに対応したことは良いことだけど、HPCの分野にはまだまだこれから伸びしろがあると感じた。

プログラミングセミナーはカメラが無くて記録できなかった(涙)
後日、資料くれたりしないかしら

  • Openclの.clソースコードを一部抜粋
カーネル

ホストからの呼び出し



随分久しぶりのブログですが、生存報告を含めて更新

研究室ではGPUの計算精度に関しての研究をすることになりました

GPUってのは単精度浮動小数点演算が主であり、

倍精度性能は僅かしかないのが特徴です

よって単精度から倍精度の実現と高速化、

つまりは性能と速度のトレードオフを探していくことになります



手始めにCUDAプログラミングに慣れるために、blackscholes.cの手動書き換えを行なった
(ブラックショールズは金融に関する確率微分方程式のシミュレートプログラムである)

シミュレートする銘柄数を変化させてCPUとGPUを比較すると以下の結果が得られた
CPUはC言語@Core 2 Quad Q9300
GPUはCUDA@Geforce 9800GTX

blackscholes実行結果(単位:秒)
num CPU GPU CPU/GPU
1000 0.104006 0.012000 8.7
10000 0.844052 0.012001 70.3
100000 8.164510 0.024001 408.2
1000000 81.709107 0.120008 680.9



この結果だけ見るとGPUすげー!!ってなるけれど

これだけじゃ終われないんだよね(涙)

CPUもGPUもどのように最適化したか。どのようにチューニングしたか
GPUならデータ転送の影響は?並列化の最適化
メモリにしたってグローバルメモリだけじゃなく他のキャッシュメモリを使用したか

色々と課題が残ってる

それと何よりもCPUとGPUの演算結果が微妙に誤差が生じている
これが一番の問題であり、制度保証を必要とするアプリでは致命的である

今後はGPUの精度について研究していきます!




<<-03|この記事|05->>

Microsoftの寄付講座『リアルタイム3Dグラフィックスプログラミング』で分かったことのメモ。
今回はアンチエイリアシングのお話。いろんな種類があるのね。

  • 点と2点を結ぶ直線の符号付き距離
image016.gif
  • アンチエイリアシング手法の一例
  1. 1x1.png1*1 真中の色を使用する


  2. 1x2.png1*2 上下の位置の平均値の色を使用する


  3. 2x2.png2*2 4か所の平均値の色を使用する


  4. 2x2RGSS.png2*2 4か所の平均値の色を使用する(RGSS)


  5. 4x4Grid.png4*4 16か所の平均値の色を使用する


  6. 5.png5点 中央と4隅を使用する。ただし、中央の重みは4倍


いそっちノートのひとは実際Flexで実装してるね。すごいw



以下、プログラムやスクリーンショット

<<-02|この記事|03->>

Microsoftの寄付講座『リアルタイム3Dグラフィックスプログラミング』で分かったことのメモ。
今回は光源のお話。イメージだけはつかめたかも。

  • 平行光源

  • 平行光源
  • アンピエント光源

  • アンピエント光源
  • 点光源

  • 点光源
  • スポットライト

  • スポットライト
  • マテリアル

マテリアル

<<-01|この記事|03->>

Microsoftの寄付講座『リアルタイム3Dグラフィックスプログラミング』で分かったことのメモその2。


  • クォータニオン

3d008.gif
  • 線形球面補間
3d001.gif
3d007.gif

以下、図とプログラム例

このアーカイブについて

このページには、過去に書かれたブログ記事のうちC/JAVAカテゴリに属しているものが含まれています。

次のカテゴリはHTML/JavaScriptです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

友人ブログへのリンク


  • うえちょこ@ぼろぐ ―uechoco氏

  • うえちょこ@ぼろぐ

  • いそっちノート ―isocchi氏

  • いそっちノート

  • 情報科学を学ぶ大学生のブログ ―TBVector氏

  • 情報科学を学ぶ大学生のブログ

  • リココのLieと述べるブログ! ―Likoko氏

  • リココのLieと述べるブログ!

  • 何だっけ、多分何か。 ―ふらっぐ氏

  • 何だっけ、多分何か。

  • ゆーやのゆったりブログ ―ゆーや氏

  • ゆーやのゆったりブログ

  • あやなんの日記だぎゃ~ ―愛染綾那氏

  • あやなんの日記だぎゃ~

  • 黒須ぶろぐ ―黒須氏

  • 黒須ぶろぐ


    関連Webサイト

  • 準備中
  • ミク時計

    あわせて読みたい

    あわせて読みたい