March 7th, 2011 by yakiimo02 in Cuda, Demo, DirectCompute, DirectX11 | No Comments »
はじめに 以前作ったDirectCompute Mandelbrot fractal demoをCUDAを使用して描画できるように拡張しました。簡単なMandelbrot fractal rendererですが、CUDAとDirectComputeの使用を動的に切り替えることが可能です。 関連リンク集 http://developer.download.nvidia.com/compute/cuda/sdk/website/Graphics_Interop.html#simpleD3D11Texture NVIDIA CUDA 3.2 SDKのDirectX11 interopサンプルの「Simple D3D11 Texture」を参考に実装しました。3.2 SDKだとD3D11を使用しているサンプルはこの「Simple D3D11 Texture」だけみたいです。「Simple D3D11 Texture」サンプルはID3D11Texture3DをCUDA resourceとして使用していますが、今回のMandelbrot fractalプログラムはID3D11BufferをCUDA resourceとして使用しています。 http://developer.nvidia.com/object/cuda-by-example.html 主にCUDA 3.2 SDKのprogramming manualを参考にCUDAを勉強しましたが、NVIDIAの「Cuda by Example」本もSafari Informitでオンラインで読みました。本自体がとても読みやすくて、数時間で読めました。CUDAを分かりやすく噛み砕いて説明してくれる良書で、入門書としてはいいかなと思いました。 http://www.yakiimo3d.com/ja/2010/02/02/directcompute-mandelbrot-fractal-viewer-2/ 元のDirectCompute Mandelbrot fractal viewerのYakiimo3D記事です。なんとプログラムに、画面サイズがthread group sizeで割り切れない場合、表示が少しおかしくなる恥ずかしいバグが見つかりました(oh no!)。今回のCUDA interopデモではバグを修正しておきました。 実装の詳細 CUDA DirectX11 interopとDirectComputeのパフォーマンスを計測してみました。環境はGeforce GTX 460, Driver 266.58, Vista 64-bit SP2、CUDA SDK 3.2です。CUDA、DirectCompute共に最適化は行っていません。CUDAの方がドキュメント、ツールが充実しており、プログラムをより細かく調整できそうなので、最適化はやりやすい気がします。 Num [...]
[Continuar Lendo →]
September 23rd, 2010 by yakiimo02 in DirectCompute, DirectX11 | No Comments »
http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=5681 先日リリースされたBullet Physics 2.77にAMD提供のOpenCLとDirectCompute版のClothサンプルが追加されたみたいです。 http://channel9.msdn.com/Blogs/gclassy/DirectCompute-Lecture-Series-230-GPU-Accelerated-Physics 上記のErwin Coumansさんのフォーラムアナウンスで紹介されていますが、ATI/AMDのLee Howesさんによる今回のDirectCompute Cloth実装に関するプレゼン動画をMSDNのサイトで見ることが可能みたいです。動画のプレゼン資料も動画のページからDLできるみたいです。 早速Bullet Physics 2.77をDLしてDX11 DirectCompute Clothサンプルを実行してみました。自分のHD5750だとリリースビルドで、5枚のクロスが揺らぐシーンで310-350fpsぐらいの実行速度でした。フォーラムアナウンスでも書かれていましたが、衝突判定が未実装な為、Clothの一部が自分自身を貫通したりしますが、全体的にはいい感じです。 http://cedec.cesa.or.jp/2010/program/PG/C10_P0206.html 今年のCEDEC 2010でのAMD DirectComputeセッションで今回のBulletにインテグレートされたCloth Simulationサンプルがトピックとして取り上げられたみたいです。今年はCEDECの幾つかのセッションに行かせてもらいましたが、AMDのDirectComputeセッションには行っていないです。
[Continuar Lendo →]
July 31st, 2010 by yakiimo02 in DirectCompute, DirectX11 | No Comments »
http://visual-computing.intel-research.net/art/publications/sdsm/ Sample Distribution Shadow Maps http://visual-computing.intel-research.net/art/publications/avsm/ Adaptive Volumetric Shadow Maps http://visual-computing.intel-research.net/art/publications/deferred_rendering/ Deferred Rendering for Current and Future Rendering Pipelines Beyond3Dのスレを読んで知りました (http://forum.beyond3d.com/showthread.php?t=58180)。デモはソース付きで、3つとも自分のHD5750で動作しました。
[Continuar Lendo →]
May 15th, 2010 by yakiimo02 in DirectCompute, DirectX11, WebSite | No Comments »
http://forum.beyond3d.com/showthread.php?t=57042 Beyond3DのGPGPUフォーラムの住民達が自分のDirectCompute版Buddhabrotを高速化してくれました。勉強になります。pcchenさんの高速化バージョン(上記スレッドからDL可能です)をHD5750で実行してみましたが、自分のオリジナルより6倍近く高速化されていました。Flam4のGPGPU版作者のKeldorさんもブログ記事(http://www.yakiimo3d.com/2010/03/29/dx11-directcompute-buddhabrot-nebulabrot/)のコメントに高速化のアドバイスを書いてくれました。高速化版Buddhabrotを実装しようと思って、DirectComputeで動くRNG実装を調べてましたが、不運にも仕事で会社の新人研修担当に任命され、仕事が忙しくなってしまい、実装したいという気持ちが忙しい時間とともに薄れてしまいました。Yakiimo3Dで次に公開するデモは多分高速化されたDirectCompute Buddhabrotの実装ではないと思います。
[Continuar Lendo →]
March 29th, 2010 by yakiimo02 in Demo, DirectCompute, DirectX11 | No Comments »
はじめに BuddhabrotフラクタルのDX11 DirectCompute版を実装してみました。以前実装したDX11 DirectCompute版Mandelbrotフラクタルの実装をベースにプログラムを組みました(http://www.yakiimo3d.com/ja/2010/02/02/directcompute-mandelbrot-fractal-viewer-2/)。 また前回実装したRheinhardトーンマップ(http://www.yakiimo3d.com/ja/2010/03/16/dx11-directcompute-global-operator-photographic-tonemapping-2/)を利用してHDR値のBuddhabrot iteration count bufferをframebufferのLDR、[0,1]範囲にマップしました。以前実装したソースを今回利用していて、トーンマップのコードにバグがある事、DX11 MandelbrotデモのソースとバイナリをCodePlexにアップし忘れていることに気がつけて良かったです。(; ̄ー ̄A アセアセ・・・ 通常のBuddhabrot描画だとRGBの3色に同じ値が書き込まれるため、彩度のないモノトーンカラーの絵になります。Buddhabrotに対する単純な拡張であるNebulabrotでは、Buddhabrotの軌道プロットを違う反復上限値を使い3回行い(実際の実装では、分岐を使う事で描画は1回ですませます)、それぞれの軌道プロット結果を一つのRGBチャンネルに書きこみます。Nebulabrotは実装が簡単で、描画結果の見栄えもよくなるので、今回のBuddhabrot実装ではNebulabrot描画にも対応しています。 いつものようにソースとバイナリへのCodePlexリンクを記事の最後の方にはっています。 関連リンク集 1) http://www.superliminal.com/fractals/bbrot/bbrot.htm Buddhabrotの発見者のMelinda Greenさんによる解説ページです。BuddhabrotとNebulabrotの分かりやすい説明が読めます。またページの一番下の方に、他の人によるBuddhabrot実装リンク集が用意されています。Buddhabrotの情報を色々調べているうちにMelinda Greenさんのstackoverflow.comプロファイルを発見しました(http://stackoverflow.com/users/181535/melinda-green)。stackoverflowに投稿するような現役の開発者がアルゴリズムの発見者だという事は少し面白いなと思いました。 2) http://local.wasp.uwa.edu.au/~pbourke/fractals/buddhabrot/ Paul Bourkeさんのページには数学的なアルゴリズムや幾何学的なアルゴリズムの良い説明が沢山あり、よくお世話になっています。Buddhabrotに関するページには分かりやすい説明と実際の実装のソースコードが置かれています。 3) http://iquilezles.org/www/articles/budhabrot/budhabrot.htm 綺麗なNebulabrotのレンダー画像が見れます。このページの説明を読んで、Buddhabrot出力結果を2乗、3乗する事でコントラストが高い、より綺麗な描画結果が作れることに気がつきました。 4) http://brnz.org/hbr/?p=297 ソースコード付きのPS3 SPU版 Buddhabrot実装です。作者の人をtwitter(http://twitter.com/twoscomplement)でフォローしていますが、自分がBuddhabrotを知った頃にPS3版のデモを見たので、印象に残っています。 5) http://www.steckles.com/buddha/ Buddhabrotアルゴリズムの基本的な考えはランダムサンプリングを毎フレーム繰り返すという意味でパストレに似ています。このページの作者はパストレでも使われることがあるMetropolis-Hastingsアルゴリズムを利用して、Buddhabrotレンダーの収束を統計学的に高速化する事を提案しています。いいアイデアだと思うし、将来元気があれば、実装してみたいです。 6) http://en.wikipedia.org/wiki/Buddhabrot BuddhabrotのWikipediaページにも有益な情報とリンクが沢山書かれています。 Buddhabrotデモの動画 YouTubeにBuddhabrotデモの実行動画を投稿しました。デモのBuddhabrotは最大反復上限値が赤:10,000 緑:1,000 青:100のNebulabrotです。(自分のプログラムのデフォルト値です。) Buddhabrotデモの静止画像 プログラム実行開始20分後ぐらいにスクリーンショットをとりました。レンダー中は平均で42fpsぐらいのフレームレートが出てましたが、毎フレーム10,000サンプルをサンプリングするので、毎秒420,000サンプルのサンプリング速度で画像は描画されました。画像をクリックすれば1592×1028の解像度でみれます。Nebulabrotの反復上限値は動画と同じデフォルトの物を使用しています。tonemapのmiddle-grey値は違う値かもしれないです。 実装の詳細 Compute Shader Thread Setup Dispatch関数をthread group次元 (合計10×10=100 thread groups)でよんでいます。hlsl内ではnumthreadを(10,10,1)次元で定義しているので、各thread groupはそれぞれ100個のthreadを所有しています。 100個のthread groupそれぞれが100個threadを所有するので、合計10,000のthreadが毎フレーム並行にcompute [...]
[Continuar Lendo →]