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 Iterations |
DirectCompute |
CUDA |
| 8 |
0.588ms/frame (1700fps) |
0.749ms/frame (1335fps) |
| 256 |
1.439ms/frame (695fps) |
1.639ms/frame (610fps) |
| 624 |
3.185ms/frame (314fps) |
2.907ms/frame (344fps) |
| 1024 |
4.878ms/frame (205fps) |
4.274ms/frame (234fps) |
Iteration countが多いほど、compute shader内の処理負荷が高いです。iteration countが少ないとDirectComputeの方が速いです。iteration countが多くなるにつれ、CUDAの方がDirectComputeより速くなりました。基本的にはCUDA kernelの方が処理が速いけど、DirectX interopを使用するのに固定のコストがあるため、interation countが少ない時はCUDAの方が遅いと解釈しました。
http://nvidia.fullviewmedia.com/gdc2011/agenda.html
金曜日の夜に丁度NVIDIA GDC2011 「GPU Radiosity: Porting the Enlighten runtime to CUDA」のストリームを見ましたが、28:23辺りでGeomericsの人が「Switching between D3D and CUDA is expensive (it’s a power cycle!)」と発言しています。ここで言及されているpower mode switchのコストのせいで自分のプログラムでもCUDAの方がiteration countが少ない時は重いのかなと思います。すこし脱線しますが、Enlightenのプレゼンは中々面白かったです。ストリームでもそれなりにEnlightenの技術について触れていますが、後に読んだDICE/Geomerics Siggraph 2010 presentationの方がEnlightenの技術的詳細に関して詳しいです http://advances.realtimerendering.com/s2010/index.html。自分の日記の方にGDC 2011のEnlightenストリームの簡単なメモ的な要約を書きました。http://d.hatena.ne.jp/yakiimo02/20110305/1299335553
Demo
Source Code & Binary
http://yakiimo3d.codeplex.com/releases/view/62087
February 19th, 2011 by yakiimo02 in DirectX11 | No Comments »
http://cedil.cesa.or.jp/
CEDEC Digital Libraryのサイトが公開されたみたいです。早速会員登録してみましたが、CEDEC2006から去年のCEDEC2010までのスライドが沢山DL可能で、中々凄いリソースだと思いました。
https://members.cesa.or.jp/cedil/session/detail/316
The CEDEC Digital Library 「CEDEC 2010: LostPlanet2 DirectX11 Features」のページ。以前Yakiimo3Dでも聴きに行けたらいいなーと書きましたが(http://www.yakiimo3d.com/ja/2010/07/11/cedec-2010-lostplanet2-directx11-features-2/) 、去年のCEDECで聴講できました!ゲームで実際に利用されたtessellationやcompute shaderのDX11技術の話が聞けてとても面白かったです。CEDEC Digital Libraryが公開された事ですし、早速資料をDLして、自宅で読み直しました。
February 13th, 2011 by yakiimo02 in Cuda, Tools | No Comments »
http://parallelnsight.nvidia.com/
NVIDIA Parallel Nsightのサイト。http://www.nvidia.com/object/parallel-nsight-requirements.htmlにParallel Nsightを利用する為に必要な環境の情報が記述されています。
http://images.anandtech.com/doci/3924/ParallelNsight.png
AnandTechのParallel Nsight 1.5 & CUDA Toolkit 3.2に関する記事からです。どのハードウェアでどのParallel Nsightの機能が利用できるかがすぐ分かるテーブルの画像です。自分のようなGPUの一個のシステムだとD3D Graphics InspectorとAnalyzer機能が利用できるみたいです。
NVIDIAのPerfHUD がDirectX11では利用出来ないこともあり、週末の間にParallel Nsightを自分のVista 64-bitのシステムにインストールしました。サンプルアプリで簡単に検証してみましたが、 AnandTechのテーブルに記述されているようにD3D Graphics InspectorとAnalyzer機能がVisual Studio 2008から利用できました。Graphics Inspectorですが、パフォーマンスとデバッグ情報が確認できるPerfHUDっぽいHUD Overlayが動作中のDirectX11アプリ上に表示されました(試したアプリのせいかもしれませんが、OpenGL CUDAアプリ上は表示されなかったです)。HUDメニュからリジュームが可能なキャプチャーを行い、アプリに関するより詳しい情報を収集できます。Parallel NsightのAnalyzerですが、System, Tools Extension, CUDA, OpenCL, DirectX, OpenGL、Cgに対してTrace Analysisを行えるようです。 自分はDirectXとCUDAを試しました。Parallel Nsightとは関係ないですが、CUDA toolkitにはCUDAとOpenCLプログラムに対して利用できるCompute Visual Profilerというアプリも用意されているみたいです。まだ軽くしか触っていないですが、Single GPUのシステムでもParallel Nsightは便利そうですし、使っていきたいです。
February 11th, 2011 by yakiimo02 in 独り言 | No Comments »

新しいグラボの写真です。
http://www.geeks3d.com/20100712/nvidia-geforce-gtx-460-specifications-and-reviews-available/
GTX 460に関するGeeks3Dの記事です。
http://developer.nvidia.com/object/nsight.html
最近TwitterでParallel NsightのPro版が無料になったことを知ったこともあり(http://twitter.com/#!/NIV_Anteru/status/30620618055483392)、GTX 460を購入しました。Parallel Nsightの全機能をフルに利用する為には、マシンにDisplay用とCUDA実行用の二つのグラボが必要になりますが、HD5750が利用できるかもと安易に考えていましたが、Vistaだと複数のグラボドライバーを共存させる事が自体が無理らしいので(http://www.microsoft.com/whdc/device/display/multimonVista.mspx)、後日Parallel Nsightを試してみたくなったら、もう一枚NVIDIAのグラボを買うと思います。
http://3dmark.com/3dm11/595018
早速新しいグラボで3DMark 11を実行してみました。発売タイミングが後なので、HD5750よりいいスコアです。 (http://www.yakiimo3d.com/ja/2010/12/12/3dmark-11-2/).
HD5750 (http://www.yakiimo3d.com/ja/2009/12/13/%E8%87%AA%E5%88%86%E3%81%AEradeon-hd5750/)には特に不満がなかったので、新しいグラボをインストールしていて少し残念な気持ちになりましたが、HD5750が一万6千円ぐらい、今回のGTX 460が一万3千円ぐらいなので、比較的短期間で買い換えましたが、経済的には特に無駄遣いはしてない感じです。新しいグラボだと性能アップ、CUDAサンプルが実行可能、倍精度の浮動小数が利用可能、Parallel Nsightが将来的に使えるなど利点が結構あるので、いい買い物だと思っています。
(2011/02/13追記)
http://www.yakiimo3d.com/ja/2011/02/13/parallel-nsight-1-51/
結局Parallel Nsightを試してみました。Single GPUのマシンでも便利そうです。
December 12th, 2010 by yakiimo02 in DirectX11 | No Comments »
http://www.3dmark.com/
3DMarkの公式サイト。
http://www.3dmark.com/wp-content/uploads/2010/12/3DMark11_Whitepaper.pdf
3DMark 11のwhitepaperです。http://twitter.com/#!/repi/status/12653354148700161を読んで知りました。whitepaperでは3DMark 11でのmultithreading、 tessellation (phong tessellationが使用されているそうです)、lighting、posteffectの詳細が少し説明されています。Computer shaderでFFT、iFFTを計算し、posteffectのbloomやlens reflectionの計算は周波領域で行っているらしいです。white paperのpdfは3DMark 11のサポートページからリンクされているようです。http://www.3dmark.com/3dmark11/support/
http://www.geeks3d.com/20101207/review-3dmark11-gaming-benchmark-directx11-d3d11-dx11-tessellation/
http://www.geeks3d.com/20101207/tested-3dmark11-dx11-battle-gtx-580-vs-gtx-480-vs-hd-6870-vs-hd-5870-vs-gtx-460-vs-hd-5770/
Geeks3Dの3DMark 11記事とベンチマーク記事です。
http://www.4gamer.net/games/110/G011050/20101207055/
日本の公式ミラーサイトの4gamerの3DMark 11記事です。
公開から少し遅れて、無料Basic版の3DMark 11を自分のHD5750 w/ Core 2 Quad Q6600マシンで週末中に実行してみました。最先端を行くスペックのマシンではないので、結構処理落ちしてましたが、色んな技術が詰め込まれた綺麗なgraphicsでした。自分の3DMark 11スコアを共有できるようなので、リンクを貼っておきます。http://3dmark.com/3dm11/130419