C#は電気羊の夢を見るか?(引っ越し中)

dtiブログが閉鎖とのことでhttp://tanocs.blog.fc2.com/へ引っ越します。

XNAでのGPGPU処理時の注意点

念願のGPGPUをどうにか完成させ、
「これでありあまっていたGPUパワーをフルに使えるぜ!」と喜んだのもつかの間、
ほとんどの処理をGPUに回してコーディングを行ったはずなのにCPUの負荷が下がらない
・・・はて?


当初、メモリへの型変換の処理が遅いのかと思って調べを進めていたが、どうも違う。
原因はたったひとつの関数で

RenderTarget2d.GetTexture().GetData()

こいつがとにかく遅い。
その遅さたるや、代車で借りた1リッターマーチが、東海北陸道の上り坂で、
アクセルべた踏みしても80km出なかった、あの衝撃に近いものがある。

これを呼び出す回数はとにかく抑える必要が有る。
2重ループの中に放り込む等というのは絶対にしてはならない。


これの対策法としては、処理の遅さがテクスチャサイズにほとんど比例しないので、
出来る限り一枚のレンダーターゲットに情報をまとめ、
GPUで行った処理結果の取得回数を減らす必要が有る。

当初は汎用的に作っていたが、
GPUで処理する際にはテクスチャと言う名のメモリを管理する為に
パラメータを与える必要がありそう・・
このエントリーをはてなブックマークに追加
LINEで送る

コメント

以前リンクしていただいたブログMemeplexesの管理人です。
今C#でGPGPUするならXNAを使わず、SlimDXを使うという手もありますよ。
SlimDXは結構APIがきれいなもんでおすすめです。
XNAはいいものですが現状ではやはりグラフィックに重きがあります

なんと、Memeplexesの管理人様!
よく一方的にお世話になっております。


ご指摘いただきましたSlimDXを使っていない理由としては
XNAの既存資産を活かしたいというのが一番大きな理由です。

3D入門時から愛用しているのもあってGPGPUもXNAでどうにか動いていますので、当面のところXNAで行こうかと思っています。


最初の頃にその存在は知っていましたが、SlimDXはサンプルの絶対数が少なく、入門にはちと敷居が高いように思いました。
あと、権利系がよくわからないのもネックでXNAを愛用してる次第です。

もっといえば、致命的なバグがあったときに自分の力でどうにもできない事を思えば、XNAのその信頼性も選定理由だったりします。


が、しかし、どうにも遅いんですよね(;谷)
権利に問題がなければ今度の仕事ではSlimDXを選択肢に考えています。

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://t01a.dtiblog.com/tb.php/112-ed6f0c56

« なんとなく思いついた事  | HOME |  まだ遅い »

PAGE TOP ▲

Appendix

■春条

■春条

生息地は愛知
車と甘い物が好きな31歳
特技は無限昼寝

MONOからSharpDXを使う
変態的な手法で、
.NET Frameworkを使わずに
ゲーム作りやってます。

Search

Calender

« | 2018-02 | »
S M T W T F S
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 - - -

Twitter

Recent Entries

DTIブログポータルへ
このブログを通報
Report Abuse

利用規約