2009-05-12 22 views
5

Dostałem aplikację, która spada do około 10 klatek na sekundę. Profilowałem go za pomocą xperf, który pokazał, że moja aplikacja używa tylko 20% procesora, przy czym żadna z moich metod nie używa większej niż oczekiwana ilości tego 20%.Profilowanie grafiki

Wydaje się to wskazywać, że zdecydowana spadek fps jest ponieważ karta graficzna isnt stanie nadążyć za rendering ramkę, w wyniku mojego programu podczas zatrzymania go dogania ...

Czy istnieje jakiś sposób, aby profilować, co robi karta graficzna i ustalić, co mój program robi, aby to spowolnić, tak, żebym mógł spróbować poprawić szybkość klatek?

Odpowiedz

0

Czy programujesz w systemie Windows? Jeśli tak, unikaj używania Video dla Windows, ponieważ ograniczy to Twój sposób opisu. Zamiast tego użyj DirectX.

+0

Używam Direct3D i mam dość mocną kartę, więc wiem, że mój kod powoduje, że działa jakoś powoli ... –

+0

Przesyłasz strumieniowo wideo z pliku. Czy dołączasz również komponent audio? – ChrisBD

7

Do debugowania/profilowania grafiki, spróbuj Nvidia PerfHUD

NVIDIA PerfHUD jest potężnym czasie rzeczywistym narzędzie analizy wydajności dla aplikacji Direct3D.

Istnieje również rozwiązanie ATI, zwany

GPU PerfStudio „GPU PerfStudio” jest w czasie rzeczywistym, narzędzia do analizy wydajności, który został zaprojektowany, aby pomóc dostroić wydajność graficzną swojego DirectX 9, DirectX 10 i aplikacji OpenGL. GPU PerfStudio wyświetla w czasie rzeczywistym API, dane dotyczące sterowników i sprzętu, które można wizualizować za pomocą niezwykle elastycznych mechanizmów kreślenia i wykresów słupkowych. Profilowana aplikacja może być wykonywana lokalnie lub zdalnie przez sieć. Procesory GPU PerfStudio umożliwiają programistom nadpisywanie kluczowych stanów renderowania w czasie rzeczywistym w celu szybkiego wykrywania wąskich gardeł. Okno automatycznej analizy może być używane do identyfikowania problemów z wydajnością na różnych etapach grafiki. Do korzystania z GPU PerfStudio nie są potrzebne specjalne sterowniki ani modyfikacje kodu.

można znaleźć więcej informacji i linki do pobrania tutaj:

+0

Mam kartę ATI, jakakolwiek szansa, która działa z kartami ATI, czy ATI ma coś takiego? –

+0

ok, dzięki, sprawdzę, kiedy wrócę do domu, ponieważ strona pobierania wydaje się być https, a moja sieć szkół zdaje się nie zezwalać na https :( –

1

Nie trzeba zgadywać. Wystarczy pause it a few times pod IDE, a on pokaże dokładnie to, na co czeka.

+0

Hows, które informują, który obszar grafiki powoduje spowolnienie? Jestem prawie pewien, że wszystkie metody takie jak DrawPrimitive i Unlock, itp. powracają niemal natychmiastowo, z zadaniem sklejania DirectX/GPU, które wymaga zrobienia bufora, aż do momentu, w którym będzie gotowe.) Z programem musisz poczekać, aż spróbuję uruchomić nową ramkę, zanim opróżni się bufor i zakończył wykonywanie zawartych w nim poleceń? –

+0

@Lancer: Sposób działania jest prosty: zakładając, że jest wolniejszy niż mógłby być, oznacza to, że poświęca trochę czasu (50%) w stanach, które można wyeliminować. Stan składa się przede wszystkim z rozszerzonego licznika programów, a mianowicie ze stosu wywołań. Jeśli więc raz spróbujesz stosu wywołań, szansa, że ​​nie zobaczysz, że robi niepotrzebne rzeczy, wynosi 50%. próbka 10 razy, szansa, że ​​nie zobaczysz, że jest 1/1024. Zobaczysz go na około 50% próbek. Może to nie jest takie proste, ale może tak jest. Więc powodzenia. –

+0

... Jeśli spojrzysz na każdą warstwę stosu wywołań, prawdopodobnie znajdziesz wywołanie funkcji pokazujące się na wielu próbkach, które nigdy nie wydawały ci się odpowiedzialne za długi czas, ale tak właśnie jest. Jeśli wiesz, jak uniknąć tego połączenia, czas, który zapiszesz, jest przybliżony przez ułamek próbek stosu, które go zawierają. Ponieważ relacjonujesz dużą powolność, powinno to być naprawdę oczywiste. –

4

Ponadto, sprawdź ten artykuł na FPS:

FPS vs Frame Time

Zasadniczo mówi o tym, że spadek z 200fps do 190fps jest znikoma, natomiast spadek od 30fps do 20fps jest znacznie większy interes . Aby uzyskać lepszy pomiar wydajności, powinieneś obliczać czas klatek zamiast FPS.

Nigdy nie powiedziałeś nam, jakie są twoje fps lub co program robi, więc twój "ogromny spadek" może nie być wielkim problemem.

Dla DirectX istnieje PIX do profilowania operacji procesora i GPU. Może podać bardzo szczegółowe informacje i warto się nimi zająć.

Nadzieję, że pomaga!

+1

"Dostałem aplikację, która spada do około 10 fps" Myślę, że 10 fps na dość wysokim komputerze końcowym jest czymś, z czym można zrobić dużą ... –

+0

Nie spadło o 10 fps. Spadło do 10 fps. Zdecydowanie powolny. – Joe

1

Możesz spróbować użyć dxprof (szukaj w google). Jest to lekka aplikacja, która rysuje paski czasu rzeczywistego, każdy pasek odpowiada jednemu zdarzeniu DirectX (takim jak losowanie lub kopiowanie zasobów). Możesz zamrozić paski i sprawdzić stos połączeń, aby dowiedzieć się, skąd pochodzi wezwanie do losowania.