Sử dụng GPU trên Silverlight 5 để chuyển đổi Fourier nhanh


7

Tôi đã có một thư viện âm thanh cho Silverlight cần tăng tốc trên các máy chậm hơn. Cụ thể, thư viện này sử dụng rộng rãi và lặp đi lặp lại biến đổi FFT như là một phần của thuật toán khử tiếng ồn và giảm tiếng ồn âm thanh của nó, và tôi tự hỏi liệu nó có ý nghĩa gì khi sử dụng GPU cho việc này không (ví dụ như được mô tả, tại đây: http://www.inf.fu-berlin.de/lehre/SS10/SP-Par/doad/fft1.pdf ).

Tôi biết rằng Silverlight 5 cung cấp một cổng khá đơn giản về khung XNA của Microsoft, nhưng thật không may, tôi hoàn toàn không biết gì về mã hóa 3D nói chung và XNA nói riêng. Đối với tôi, có vẻ như về mặt lý thuyết là có thể sử dụng một số kết hợp của các bóng đổ đỉnh và / hoặc pixel để thực hiện phép thuật này, nhưng trước khi tôi đi quá xa con đường này, tôi muốn có một số ý kiến ​​chuyên gia về một vài câu hỏi:

(1) Việc triển khai XNA của SL5 ném đầu ra của đường ống lên một "Bản vẽ mặt". Tôi đã nghĩ rằng đây là nơi tôi có thể đọc kết quả tính toán (loại cách bạn có thể sử dụng WritizableBitmap để đọc kết quả tính toán đổ bóng pixel trong SL4). Nhưng tôi không thể hiểu làm thế nào tôi sẽ làm điều đó: không có phương pháp "GetPixels ()", hoặc bất cứ điều gì tương tự. Trong XNA 4.0 thông thường, VertexBuffer có phương thức GetData () , cũng như các lớp Texture2DTexture3D , nhưng các phương thức đó bị thiếu trong phiên bản SL5 . Có ai biết cách nào để thực sự đọc kết quả của các đầu ra shader không? Hay GPU là thiết bị chỉ ghi trong SL5?

(2) Có vẻ như vấn đề thực sự với tính toán GPU là đọc kết quả nhanh chóng . Giả sử tôi có thể giải quyết vấn đề # 1, có ai biết liệu FFT có thể tuân theo loại giải pháp này không?

(3) Silverlight 5 bị giới hạn ở Cấp độ 2 của HLSL, có một số hạn chế nghiêm trọng, cho đến khi có hướng dẫn, đăng ký, các chức năng khả dụng, v.v. Có hợp lý không khi mong đợi có thể chuyển FFT hoặc một phần nào đó sang phần này?

Cảm ơn trước.


1
bạn có thể mô tả các hoạt động toán học bạn phải làm? nó có cần thiết để trở thành một hiệu ứng thời gian thực không? Có thể trì hoãn? bạn phải sử dụng mục tiêu kết xuất để vẽ calcs của mình và GetData để truy xuất chúng, bạn có chắc chắn rằng kết cấu không có getdata không?
Blau

Tôi đang thực hiện cải tiến âm thanh theo thời gian thực, sử dụng ngăn xếp WebRTC của Google (mà tôi đã chuyển sang C #). Điều này bao gồm loại bỏ tiếng vang âm thanh, giảm tiếng ồn và kiểm soát mức tăng tự động, trong số những người khác. Có rất nhiều phép toán dấu phẩy động liên quan, hầu hết phải thực hiện với việc chuyển đổi tín hiệu từ miền thời gian sang miền tần số, được thực hiện bằng cách sử dụng Biến đổi Fourier nhanh. Theo bản chất của con thú, nó cần phải là thời gian thực. Và theo MSDN ( msdn.microsoft.com/en-us/l Library / Word), không có phương thức Texture.GetData ().
Ken Smith

Uupps ... với silverlight a Texture không có GetData ... tôi đã tìm kiếm một cách giải quyết nhưng không thành công ... tôi khuyên bạn nên đăng bài đăng của Shawn về xna và silverlight ... blog.msdn.com/b/ Shawnhar / archive / 2011/10/05 / Ông có thể đưa ra một số giải pháp
Blau

1
Điều này không trả lời câu hỏi của bạn, nhưng D3D11 có giao diện ID3DX11FFT , giúp đơn giản hóa rất nhiều công việc bạn phải làm
bobobobo

@bobobobo - Chà, bạn nói đúng, điều đó không có ích. Nhưng nó làm tôi ghen tị. Nếu tôi có thể truy cập vào Silverlight, nó sẽ tăng tốc mã của tôi khá đáng kể, tôi nghi ngờ. Ồ tốt ...
Ken Smith

Câu trả lời:


3

Theo Shawn Hargreaves (từ MS), điều này không được hỗ trợ trong Silverlight 5. Dự đoán không chính thức của anh ta về lý do tại sao (a) khó có thể khiến nó hoạt động ổn định trên tất cả các trình điều khiển GPU và (b) cho tất cả nhưng một lớp nhỏ các vấn đề kiểu demo, nó sẽ không có ý nghĩa gì.

Ồ tốt


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.