2011-09-29 8 views
6

私はインバース離散コサイン変換や高速フーリエ変換を実行するなど、かなり計算集約的な操作を行うブラウザ内のSilverlightアプリケーションで作業しています。 1秒に1回。可能な限り多くのデータをコンピュータのGPUに取り込むことができれば価値があります。シルバーライト3と4でピクセルシェーダーを使用しているのはsome discussionでしたが、Silverlight 3/4ではピクセルシェーダーにハードウェアアクセラレーションが使用されていないため、ピクセルシェーダーの言語がレベル2に制限されていたもしあれば、それはパフォーマンスの大幅な向上をもたらすことはありませんでした。GPUをSilverlight 5で汎用計算に使用する

しかしSilverlight 5には、合理的に完全な3Dパイプラインを含む、ハードウェアアクセラレーションされたグラフィックスの幅がはるかに広いと思われます。しかし、誰かが一般的な数学演算(FFT、DCT、IDCTなど)を加速するためにこのパイプラインを活用できるかどうかはまだ聞いていません。誰もまだそれを試みたのですか?どこから見始めたらいいの?

答えて

5

私はこれまでに発見したことを投稿すると思いました。簡単な答えは、Silverlight 5の3Dパイプラインがこの種のものに利用できるとは思わないということです。一方では、パイプラインの一部であるピクセルシェーダと頂点シェーダは実際にGPUで実行されます(CPU上で実行されたSilverlight 4の2Dシェーダとは異なります) 。

しかし、それは言った:

(1)私が読んだすべてはGPU上にデータを取得することは非常に高速ですが、と言うそのGPUのうちデータが上で、非常に遅いことになっほとんどのマシンのためにミリ秒のオーダー。そのため、FFTを実行するために必要なデータをGPUにロードし、FFTを実行した後、CPU上で行うよりも速くデータを取り戻すことはできません。

(2)Silverlight 5には、GPUで実行できる命令セットが非常に限られています。具体的には、制限された命令数と使用可能なレジスタ数を持つHLSL Level 2に制限されています。制限された命令の中でFFTやDCTをモデル化することは、可能であれば、非常に困難で非常に遅いことになるとは思えません。

(3)しかし、私が知る限り、SilverlightはGPUが実行している計算結果を読み取る能力がありません。通常のXNA(Silverlightの3Dフィーチャが基づいているフレームワーク)には、さまざまなGetData()メソッドやGetTexture()メソッドがあり、計算セットの結果を読み取るために使用できると思います。しかし、Silverlight 5バージョンでは、これと同等のメソッドが欠けています。私が知る限り、Silverlight 5では、GPUは書き込み専用のデバイスです。シェーダーをロードし、データをロードし、トリガーを引いて、別れを振ります。あなたのコードはそれらのバイトを再び見ることはありません。

私がこれについて間違っていることが判明した場合は、ここに戻ってこの回答を更新します。しかし、少なくとも現時点では、これは行き詰まりのように見えます。

[10/10/11編集 - MSからのShawn Hargreavesによると、これはSilverlight 5ではサポートされていません。なぜそれが(a)すべてのGPUドライバで一貫して動作するのは難しいでしょうか、そして(b)デモウェアスタイルの問題の小さなクラスを除くすべての場合、それは意味をなさないでしょう。ああ。]

関連する問題