2011-09-29 11 views
6

Pracuję nad aplikacją Silverlight w przeglądarce, która wykonuje dość intensywne operacje obliczeniowe, np. Z wykorzystaniem odwróconej dyskretnej transformacji kosinusowej lub szybkiej transformaty Fouriera, setki razy na sekundę. Byłoby cenne móc odciążyć jak najwięcej z tego na GPU komputera. Wiem, że było to some discussion z Silverlight 3 i 4, używając pixel shaderów, ale konsensus był taki, ponieważ Silverlight 3/4 nie używał akceleracji sprzętowej dla ich cieniowania pikseli, a ponieważ ich język cieniowania pikseli był ograniczony do poziomu 2 , nie przyniesie to większego wzrostu wydajności, jeśli w ogóle.Używanie procesora graficznego w Silverlight 5 do ogólnego obliczania matematyki

Podobno Silverlight 5 ma znacznie szerszy zakres grafiki przyspieszanej sprzętowo, w tym racjonalnie kompletny potok 3D. Jednak nie słyszałem jeszcze, czy ktokolwiek był w stanie wykorzystać ten system do przyspieszania operacji matematycznych ogólnego przeznaczenia (takich jak FFT, DCT, IDCT itp.). Czy ktoś już próbował tego? Jakieś wskazówki, od czego zacząć szukać?

Odpowiedz

5

Pomyślałem, że odeślemy to, co odkryłem do tej pory. Krótka odpowiedź brzmi: nie, nie sądzę, że rurociąg 3D w Silverlight 5 może zostać wykorzystany do tego rodzaju rzeczy. Z jednej strony, z tego, co mogę powiedzieć, shadery pikseli i shadery wierzchołków, które są częścią potoku, w rzeczywistości są wykonywane na GPU (w przeciwieństwie do shaderów 2D w Silverlight 4, które zostały wykonane na CPU) .

Ale powiedział:

(1) Wszystko Czytałem mówi, że uzyskanie danych na GPU jest bardzo szybki, ale dla większości maszyn, dostając że dane spośród GPU jest znacznie wolniejsze, na kolejność milisekund. To sprawia, że ​​jest mało prawdopodobne, abyśmy mogli, na przykład, załadować procesor graficzny z danymi niezbędnymi do przeprowadzenia FFT, wykonać FFT, a następnie pobrać dane z powrotem szybciej niż moglibyśmy to zrobić na procesorze.

(2) Silverlight 5 ma bardzo ograniczony zestaw instrukcji, które może wykonać na GPU. W szczególności jest on ograniczony do HLSL Level 2, który ma ograniczoną liczbę instrukcji i rejestrów. Wątpię, czy byłoby możliwe - w najlepszym razie bardzo trudne i bardzo powolne - modelowanie FFT lub DCT w ramach tych ograniczonych instrukcji.

(3) Ale nawet gdybyśmy mogli obejść te dwa ograniczenia, z tego, co wiem, Silverlight nie ma żadnej możliwości odczytania wyników obliczeń wykonywanych przez GPU. Normalna XNA (framework, na którym oparte są funkcje 3D Silverlight) ma różne metody GetData() lub GetTexture(), które myślę, że można użyć do odczytania wyników zestawu obliczeń. Ale tych równoważnych metod brakuje w ich wersjach Silverlight 5. Wszystko, co mogę powiedzieć, w Silverlight 5, GPU jest urządzeniem tylko do zapisu. Załadujesz do niego shadery, ładujesz dane, pociągasz za spust i machasz na pożegnanie. Twój kod nigdy więcej nie zobaczy tych bajtów.

Jeśli okaże się, że się mylę, wrócę tu i zaktualizuję tę odpowiedź. Ale przynajmniej w tej chwili wygląda na to, że to ślepy zaułek.

[Edytuj 10/10/11 - zgodnie z Shawn Hargreaves z MS, nie jest to obsługiwane w Silverlight 5. Jego domysły, dlaczego tak jest (a) trudno byłoby uzyskać to działa konsekwentnie we wszystkich sterownikach GPU i (b) dla wszystkich, z wyjątkiem niewielkiej klasy problemów typu "demo-ware", nie miałoby to sensu. No cóż.]

Powiązane problemy