2012-04-30 8 views
4

私はC#でリアルタイム画像処理プロジェクトをいくつか進めており、可能な限りGPUを利用したいと考えています。XNAを使用して画像処理用のGPGPUにアクセスする

具体的には、生のビットマップデータを含むいくつかのbyte[]があります。これらは、高/低域フィルタ、エッジ検出、マスキング、ディザリング、穴埋め、メジアンフィルタなどを行う必要があります。できるだけFPS私は他のGPGPUのライブラリがそこにあることを知りません(同様CudafyGPU.net、およびAccelerator)が、そののEULAがの使い方「利益のため」禁止のいずれか

(画像が何より大きな640×480という、かなり小さいです)ライブラリを購入するか、ライセンスを購入する必要があります。

現時点では、ライセンスのための資金がないので、何も原価計算せずに商業生産を可能にするオプションを探そうとしています.XNAは、両方の基準に合った唯一の選択肢でした。

ゲーム以外の設定でXNAを使用してGPUにアクセスする方法について利用可能なリソースはありますか? C#経由でGPUにアクセスするための他のオプションはありますか?

+0

XNAを使用することはできますが、少し面倒です。 SlimDXはDirectComputeインターフェイスとMITライセンスを持っていますが、十分ですか? – harold

答えて

4

Brahma - 私はCodePlexの商用利用のための無料のオープンソースであり、LINQを自動的にOpenCLとして翻訳/実行しますか?

もちろん、RAW OpenCLを使用したい場合は、CodeplexにはOpenCL hereNuget packageとしては、.NETに対応していますがraw APIバージョンがあります。

ブラフマコードの例はhereです(これはFFT用です)。

+0

リンクありがとうございます!ブラフマはリアルタイムでデータを処理しますか?私は、HLSLシェーダが(コーディングで)オーバーヘッドが多いことを除いて、リアルタイムでデータ上で動作することを知っています。 –

+0

はい、ブラハはリアルタイムで高性能なコンピューティングを目的としています。Brahmaの "魔法"はすべて "Compile"ステップであり、その時点では通常のOpenCLクエリとなり、高速で動作することに注意してください。もちろん、LINQ構文は特定の種類の計算の主な制限です。私はRoslynを使ってこれを回避しようとしていますが、何か具体的なものが得られるまでにはおそらく時間がかかるでしょう。あなたは、サンプルを試してみることができますスピードアップを参照してください..NETとOpenCLコードは、CPUまたはGPUのいずれかであなたを得ることができます。 – Ani

+0

私はあなたのOpenCL.Netプロジェクトが本当に好きです。私は生のスピードが必要とLinq(素晴らしいですが)制限しています。私はこれを試してみて、どのようなパフォーマンスの向上が得られるか見てみましょう:)私はあなたのプロジェクトを指摘してくれてありがとう!それは大丈夫だ –

1

私はClooでOpenCLを見ています。オープンソースであり、MITライセンスの下でリリースされています。つまり、独自のパッケージに喜んで含めることができます。

OpenCLは、カーネルがGPU、CPU、および(理論上の)セルプロセッサ上で実行可能であるという点で、CUDAよりも少し柔軟です。私は試していませんが、Mono + Linux +その組み合わせ。

(GPU.NETは、C#でカーネルを書くことができますが、現時点ではNVidia GPUでしか動作しません)devのラップトップはAMDのチップセットを持っているので、

のOpenCLカーネルは基本的にそれはまた積極的にインテル、AMD、とNVIDIAによってサポートされていますC.であるOpenCLの言語で書かれています。

私はFDTD(光学/波動物理シミュレーション)プロジェクトのためCloo/OpenCLの+ XNAを使用していますし、それは非常によく動作します。 OpenCLコードは、GPU上の3D配列で動作します。定期的にバッファをホストにコピーして、XNAコードで視覚化します。

CPUに行き来することなくそのデータを共有する方法があるかもしれませんが、私はそれを見つけられませんでした。視覚化の目的で、少なくとも私のアプリケーションでは、影響は最小限です。

関連する問題