Yakiimo3D

Mostly DirectX 11 Programming

DirectCompute Mandelbrot Fractal Viewer

はじめに

インターネットで色んな人がもうすでに実装していますが、GPGPU言語を使ったマンデルブロ集合フラクタル・ビューワーを自分も実装してみました。DirectComputeの実装と同時にCPU版も実装したけど、DirectCompute版の方が平均的に50倍以上高速で、少しだけ感動です。ただし、CPU版の実装はまだまだ高速化の余地があるので(GPU版も高速化できてないですが、CPU版の方が速くなりそう)、実際の性能差はもう少し小さいと思います。

他の人のGPGPU言語Mandelbrot Fractal実装

この数カ月間で何人かのプログラマがGPGPU言語 Mandelbrot fractalの実装を公開しています。GPGPU言語勉強の初期課題として人気が高いみたいです。

1) DX11 DirectCompute Mandelbrot and Julia viewer

http://users.skynet.be/fquake/
Beyond3Dのフォーラムを読んで去年知りました。(http://forum.beyond3d.com/showthread.php?t=55330)。作者の人はDirectComputeデモをMandelbrot viewer以外にもリリースしていますが、最近リリースされた流体のデモはかなり凄いです。デモのzipにソースコードも同梱されています。

自分の日記の関連リンク
http://d.hatena.ne.jp/yakiimo02/20091228/1262004553

2) A realtime Mandelbrot zoomer in SSE assembly and CUDA

http://users.softlab.ece.ntua.gr/~ttsiod/mandelSSE.html
VizWorldの記事を読んで知りました。(http://www.vizworld.com/2009/12/realtime-mandelbrot-zoomer-sse-assembly-cuda/)。Nvidia Cudaを利用した実装以外にも手動でSIMD高速化されたマルチスレッド対応のCPU版も実装されています。GPLでソースも公開されています。

自分の日記の関連リンク
http://d.hatena.ne.jp/yakiimo02/20091217/1261055234

3) MandelCPU vs MandelGPU

http://davibu.interfree.it/opencl/mandelgpu/mandelGPU.html
LuxRenderのOpenCL対応を中心的に進めているプログラマの人みたいです。 (http://www.luxrender.net/wiki/index.php?title=Luxrender_and_OpenCL)。デモではCPU版とOpenCL版のMandelbrot fractal viewerが実装されています。 作者のHPhttp://davibu.interfree.it/index.htmlにはソース付きで他にも色々OpenCLのデモが公開されています。

自分の日記の関連リンク
http://d.hatena.ne.jp/yakiimo02/20100117/1263720072
http://d.hatena.ne.jp/yakiimo02/20100106/1262787003
http://d.hatena.ne.jp/yakiimo02/20091222/1261500968

Mandelbrot Fractalの説明

http://warp.povusers.org/Mandelbrot/
上記ページがとても分かりやすかったです。Mandelbrot fractalは初実装ですが、上記ページを参考にしながら実装しました。

Mandelbrot Fractal Viewerデモの動画



デモは、Zoom In時はDirectCompute実行で、単精度浮動小数点数の精度的な限界に到達後、CPU実行に切り替えZoom Outします。画面左上のVSync無効のFPSカウンターを見てもらえば分かると思いますが、DirectCompute版の方が大分、高速です。無料の動画キャプチャーソフトを使っていますが、使用方法の不手際からか残像が発生してしまっています(TT)。いつもどうり、コードと記事を書くので力尽きて詳しくは調べてないです。ビデオの残像問題を修正して、動画をアップし直しました。CamStudioのvideo settingのcompressor quality項目を100%に設定する事で問題が解決しました。

Mandelbrot Fractal Viewerデモ

最初にも書きましたが、DirectCompute版の方がCPU版よりも50倍以上も高速でした!GPGPU言語による高速化の話は最近よく聞くけど、自分で実装して、自分のコードで体感する事で、いままでなかった実感がわいたし、少し感動もしました。でも、そうは言っても、CPU版は高速化未着手でSingle-Thread、SIMDなしの単純実装なので、実際はもう少しCPU版も速いはずです。ただ、少しめんどくさいSIMD化とマルチスレッドのコード不必要で、まったく高速化していない状態のGPU版が超高速なのは凄いと思います。自分のマシンのCPUはIntel Core2Quad Q6600 2.4ghz (overclock無し)でGPUはATI Radeon HD5750というスペックでした。本当なら倍精度浮動小数点数を使いたかったけど、1万5,6千円の自分のGPUは倍精度浮動小数点数未対応なので、単精度浮動小数点数を利用してます。そのため、結構早い段階で精度が不足してZoom Inできなくなってしまいます。

Source Code & Binary
http://yakiimo3d.codeplex.com/releases/view/41053

. This entry was posted on Tuesday, February 2nd, 2010 at 9:03 PM and is filed under Demo, DirectCompute, DirectX11. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

2 Responses to “DirectCompute Mandelbrot Fractal Viewer”

  1. だからー Says:

    ATI Radeon HD5750は倍精度浮動小数点数に対応しています。
    勘違いでは?
    AMDのスペックシートを確認してみましょう。

  2. yakiimo02 Says:

    HD5750は自分の理解だとsingle precisionのみ対応です。

    http://www.amd.com/us/products/desktop/graphics/ati-radeon-hd-5000/hd-5750/Pages/ati-radeon-hd-5750-specifications.aspx
    にdouble precision対応とは書かれていないです。

    対照的にHD5850のスペックシートにはdouble precision対応が明記されています。
    http://www.amd.com/us/products/desktop/graphics/ati-radeon-hd-5000/hd-5850/Pages/ati-radeon-hd-5850-specifications.aspx

    AnandtechなどでもHD 5770、5750のJuniper系はsingle precisionのみ対応と書かれています。
    http://www.anandtech.com/show/2856

Leave a Reply



XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

It may take some time for your comment to appear, it is not necessary to submit it again.