Verwenden der GPU in Silverlight 5 für eine schnelle Fourier-Transformation

7

Ich habe eine Audiobibliothek für Silverlight, die auf langsameren Computern etwas beschleunigt werden muss. Insbesondere verwendet diese Bibliothek die FFT-Transformation in großem Umfang und wiederholt als Teil ihrer Algorithmen zur akustischen Echokompensation und Rauschunterdrückung, und ich frage mich, ob es sinnvoll wäre, die GPU dafür zu verwenden (wie beispielsweise beschrieben) hier: http://www.inf.fu-berlin.de/lehre/SS10/SP-Par/download/fft1.pdf ).

Ich weiß, dass Silverlight 5 eine ziemlich einfache Portierung des XNA-Frameworks von Microsoft bietet, aber leider bin ich ein absoluter Neuling in der 3D-Codierung im Allgemeinen und in XNA im Besonderen. Es scheint mir, dass es theoretisch möglich sein sollte, eine Kombination aus Scheitelpunkt- und / oder Pixel-Shadern zu verwenden, um diese Magie zu wirken, aber bevor ich diesen Weg zu weit gehe, wollte ich einige Expertenmeinungen zu einigen Fragen einholen:

(1) Die XNA-Implementierung von SL5 wirft die Ausgabe seiner Pipeline auf eine einzelne "DrawingSurface". Ich hatte gedacht, dass ich hier möglicherweise die Ergebnisse der Berechnungen lesen kann (so wie Sie eine WriteableBitmap verwenden können, um die Ergebnisse von Pixel-Shader-Berechnungen in SL4 zu lesen). Aber ich kann nicht herausfinden, wie ich das machen würde: Es gibt keine "GetPixels ()" - Methode oder ähnliches. In regulärem XNA 4.0 verfügt der VertexBuffer über eine GetData () -Methode, ebenso wie die Texture2D- und Texture3D- Klassen. Diese Methoden fehlen jedoch in der SL5-Version . Kennt jemand eine Möglichkeit, die Ergebnisse von Shader-Ausgaben tatsächlich zu lesen? Oder ist die GPU ein schreibgeschütztes Gerät in SL5?

(2) Es scheint, dass das eigentliche Problem bei GPU-Berechnungen darin besteht, die Ergebnisse schnell zu lesen . Angenommen, ich kann Problem Nr. 1 lösen, weiß jemand, ob eine FFT für diese Art von Lösung geeignet wäre?

(3) Silverlight 5 ist auf HLSL Level 2 beschränkt, das eine Reihe schwerwiegender Einschränkungen aufweist, was Anweisungen, Register, verfügbare Funktionen usw. betrifft. Ist es überhaupt vernünftig zu erwarten, dass eine FFT oder ein Teil davon darauf portiert werden kann?

Danke im Voraus.

Ken Smith
quelle
1
Können Sie die mathematischen Operationen beschreiben, die Sie ausführen müssen? Muss es ein Echtzeiteffekt sein? kann verzögert werden? Sie müssen ein Renderziel verwenden, um Ihre Berechnungen zu zeichnen, und GetData, um sie abzurufen. Sind Sie sicher, dass die Textur keine getdata enthält?
Blau
Ich mache eine Echtzeit-Audioverbesserung mit dem WebRTC-Stack von Google (den ich auf C # portiert habe). Dies umfasst unter anderem die akustische Echokompensation, Rauschunterdrückung und automatische Verstärkungsregelung. Es gibt viel Gleitkomma-Mathematik, die größtenteils mit der Konvertierung der Signale aus dem Zeitbereich in den Frequenzbereich zu tun hat, was mithilfe einer schnellen Fourier-Transformation erfolgt. Von Natur aus muss es Echtzeit sein. Und laut MSDN ( msdn.microsoft.com/en-us/library/… ) keine Texture.GetData () -Methode.
Ken Smith
Uupps ... mit silverlight hat eine Textur keine GetData ... ich habe nach einer Problemumgehung gesucht, aber keinen Erfolg ... ich empfehle Ihnen, in Shawns Beitrag über xna und silverlight zu posten ... blogs.msdn.com/b/ shawnhar / archive / 2011/10/05 /… er kann eine Lösung geben
Blau
1
Dies beantwortet Ihre Frage nicht, aber D3D11 verfügt über eine ID3DX11FFT- Schnittstelle, die den Arbeitsaufwand erheblich vereinfacht
Bobobobo
@ Bobobobo - Nun, du hast recht, das hilft nicht. Aber es macht mich eifersüchtig. Wenn ich unter Silverlight darauf zugreifen könnte, würde dies meinen Code erheblich beschleunigen, vermute ich. Na ja ...
Ken Smith

Antworten:

3

Laut Shawn Hargreaves (von MS) wird dies in Silverlight 5 nicht unterstützt. Seine inoffizielle Vermutung, warum (a) es schwierig sein würde, es auf allen GPU-Treibern konsistent zum Laufen zu bringen, und (b) für alle außer Eine winzige Klasse von Problemen im Demo-Stil, die keinen Sinn ergeben würden.

Naja.

Ken Smith
quelle