2011-09-29 33 views
6

Tôi đang làm việc trên một ứng dụng Silverlight trong trình duyệt có một số hoạt động khá tính toán, ví dụ như chạy Biến đổi Cosin nghịch đảo hoặc Chuyển đổi Fourier nhanh, hàng trăm lần một giây. Sẽ rất có giá trị để có thể giảm tải càng nhiều càng tốt vào GPU của máy tính. Tôi biết rằng có some discussion điều này với Silverlight 3 và 4, sử dụng trình tạo pixel, nhưng sự đồng thuận là vì Silverlight 3/4 không sử dụng tăng tốc phần cứng cho trình tạo pixel của họ và vì ngôn ngữ đổ bóng pixel của họ bị giới hạn ở Cấp 2 , nó sẽ không dẫn đến tăng hiệu suất, nếu có.Sử dụng GPU trên Silverlight 5 cho toán học có mục đích chung

Tuy nhiên, được cho là Silverlight 5 có phạm vi đồ họa tăng tốc phần cứng rộng hơn nhiều, bao gồm một đường ống 3D hoàn chỉnh hợp lý. Tuy nhiên, tôi chưa nghe nói nếu có ai có thể tận dụng đường ống này để tăng tốc các hoạt động toán học có mục đích chung (như FFT, DCT, IDCT, v.v.). Có ai đã thử chưa? Bất kỳ gợi ý về nơi để bắt đầu tìm kiếm?

Trả lời

5

Tôi nghĩ tôi đã đăng lại những gì tôi đã khám phá từ trước tới nay. Câu trả lời ngắn gọn là không, tôi không nghĩ rằng các đường ống 3D trên Silverlight 5 có thể được tận dụng cho loại điều này. Một mặt, từ những gì tôi có thể nói, các trình đổ bóng pixel và đổ bóng đỉnh là một phần của đường ống, thực tế, được thực hiện trên GPU (không giống như các trình tạo bóng 2D trong Silverlight 4, được thực thi trên CPU) .

Nhưng mà nói:

(1) Tất cả những gì tôi đã đọc nói rằng nhận được dữ liệu lên GPU là rất nhanh, nhưng mà đối với hầu hết máy móc, nhận được rằng dữ liệu ra khỏi GPU là chậm hơn nhiều, trên thứ tự của mili giây. Điều đó khiến chúng tôi khó có thể tải lên GPU bằng dữ liệu cần thiết để thực hiện FFT, thực hiện FFT và sau đó kéo dữ liệu trở lại nhanh hơn chúng ta có thể thực hiện trên CPU.

(2) Silverlight 5 có bộ hướng dẫn rất hạn chế mà nó có thể thực thi trên GPU. Cụ thể, nó được giới hạn ở HLSL Level 2, trong đó có một số giới hạn các hướng dẫn và thanh ghi có sẵn. Tôi nghi ngờ rằng nó sẽ là có thể - tốt nhất, nó sẽ rất khó khăn và rất chậm - để mô hình hóa một FFT hoặc một DCT trong các hướng dẫn giới hạn đó.

(3) Nhưng ngay cả khi chúng tôi có thể vượt qua hai giới hạn đó, từ những gì tôi có thể nói, Silverlight không có khả năng đọc kết quả tính toán mà GPU đang thực hiện. XNA bình thường (khung công tác dựa trên các tính năng 3D của Silverlight) có các phương thức GetData() hoặc GetTexture() khác nhau mà tôi nghĩ bạn có thể sử dụng để đọc kết quả của một tập hợp các phép tính. Nhưng những phương thức tương đương này bị thiếu trong các phiên bản Silverlight 5 của họ. Từ tất cả những gì tôi có thể nói, trong Silverlight 5, GPU là thiết bị chỉ ghi. Bạn tải các trình đổ bóng của bạn lên nó, bạn tải lên dữ liệu của bạn, bạn kéo kích hoạt, và bạn vẫy chào tạm biệt. Mã của bạn sẽ không bao giờ thấy các byte đó nữa.

Nếu hóa ra tôi sai về vấn đề này, tôi sẽ quay lại đây và cập nhật câu trả lời này. Nhưng ít nhất vào lúc này, có vẻ như đây là một cái chết.

[Chỉnh sửa 10/10/11 - Theo số Shawn Hargreaves từ MS, tính năng này không được hỗ trợ trong Silverlight 5. Dự đoán của anh ấy là (a) sẽ khó để làm việc liên tục trên mọi trình điều khiển GPU , và (b) cho tất cả, nhưng một lớp nhỏ của các vấn đề kiểu demo-ware, nó sẽ không có ý nghĩa gì cả. Oh well.]

Các vấn đề liên quan