2009-05-12 11 views
5

Ive erhielt eine Anwendung, die auf rund 10 fps fällt. Ich profilierte es mit xperf, was zeigte, dass meine App nur 20% der CPU verwendete, wobei keine meiner Methoden eine größere als die erwartete Menge von 20% verwendete.Graphics Profilieren

Dies scheint darauf hinzudeuten, dass der große Tropfen in fps ist, weil die Grafikkarte in der Lage war nicht mit Rendering um den Rahmen zu halten, in meinem Programm Anhalten führt, während es aufholt ...

Gibt es irgendeine Art und Weise zu Profil was die Grafikkarte vorhat und was mein Programm dazu sagt das zu verlangsamen, damit ich versuchen kann die Bildrate zu verbessern?

Antwort

0

Entwickeln Sie für Windows? Wenn dies der Fall ist, vermeiden Sie die Verwendung von Video für Windows, da Sie dadurch in der von Ihnen beschriebenen Weise eingeschränkt werden. Verwenden Sie stattdessen DirectX.

+0

Ich benutze Direct3D, und habe eine etwas mächtige Karte, so weiß ich, dass mein Code es irgendwie langsam laufen lässt ... –

+0

Streamen Sie Video aus einer Datei. Fügen Sie auch die Audiokomponente ein? – ChrisBD

7

Zum Debuggen/Grafiken Profilieren, versuchen Nvidia PerfHUD

NVIDIA PerfHUD ist ein leistungsstarkes Echtzeit-Performance-Analyse-Tool für Direct3D-Anwendungen.

Es gibt auch eine ATI-Lösung, genannt 'GPU PerfStudio'

GPU PerfStudio ist ein Echtzeit-Performance-Analyse-Tool, das entwickelt wurde, stimmen die Grafikleistung Ihres DirectX 9, zu helfen, DirectX 10 und OpenGL-Anwendungen. GPU PerfStudio zeigt Echtzeit-API-, Treiber- und Hardwaredaten an, die mit extrem flexiblen Plot- und Balkendiagramm-Mechanismen visualisiert werden können. Die Anwendung, die profiliert wird, kann lokal oder remote über das Netzwerk ausgeführt werden. Mit GPU PerfStudio kann der Entwickler wichtige Rendering-Zustände in Echtzeit überschreiben, um eine schnelle Erkennung von Engpässen zu ermöglichen. Ein automatisches Analysefenster kann zum Identifizieren von Leistungsproblemen in verschiedenen Phasen der Grafikpipeline verwendet werden. Für die Verwendung von GPU PerfStudio sind keine speziellen Treiber oder Code-Änderungen erforderlich.

Sie können weitere Informationen und Download-Links finden Sie hier:

+0

Ich habe eine ATI-Karte, irgendeine Chance, die irgendwie mit ATI-Karten funktioniert oder hat ATI da eine eigene Sache? –

+0

ok danke, Ill check it out, wenn ich nach Hause komme, da die Download-Seite https zu sein scheint und mein Colleges-Netzwerk scheint nicht zulassen https :( –

1

Keine Notwendigkeit zu erraten. Nur pause it a few times unter der IDE, und es wird Ihnen genau zeigen, worauf es wartet.

+0

Hows, die sagen, welche Grafik-Bereich verursacht die Verlangsamung? Ich bin mir ziemlich sicher Methoden wie DrawPrimitive und Unlock, etc. kehren fast augenblicklich mit DirectX/GPU Sticking Arbeit in einen Puffer zurück, bis sie dazu bereit ist.Wenn das Programm dann warten muss, wenn ich versuche einen neuen Frame zu starten, bevor sie den puffern und fertig mit den darin enthaltenen Befehlen? –

+0

@Lancer: Die Funktionsweise ist einfach: Wenn man annimmt, dass es langsamer ist als es sein könnte, bedeutet das, dass es einen Bruchteil der Zeit (50%) in Zuständen ausgibt, die eliminiert werden könnten. Der Zustand besteht hauptsächlich aus dem erweiterten Programmzähler, nämlich dem Aufrufstapel.Wenn Sie also den Aufrufstapel einmal abtasten, ist die Wahrscheinlichkeit, dass Sie das unnötige Ding machen, nicht 50% Probe 10 Mal, die Chance, dass Sie nicht sehen, ist 1/1024. Sie werden es auf ungefähr 50% der Proben sehen. Vielleicht ist es nicht so einfach, aber vielleicht ist es das auch. Also viel Glück. –

+0

... Wenn Sie sich jede Ebene des Aufruf-Stacks anschauen, werden Sie wahrscheinlich einen Funktionsaufruf finden, der auf mehreren Samples angezeigt wird, von denen Sie nie gedacht hätten, dass sie viel Zeit in Anspruch nehmen würden, aber das tut sie. Wenn Sie herausfinden können, wie Sie diesen Aufruf vermeiden können, wird die Zeit, die Sie speichern, durch den Bruchteil der Stack-Samples, die sie enthalten, angenähert. Da Sie starke Langsamkeit melden, sollte es wirklich offensichtlich sein. –

4

Auch in diesen Artikel Check-out FPS:

FPS vs Frame Time

Im Grunde spricht es über die Tatsache, dass ein Abfall von 200fps zu 190fps vernachlässigbar ist, während ein Rückgang von 30 Bildern pro Sekunde auf 20 Bilder pro Sekunde ein viel größer Deal . Für eine bessere Leistungsmessung sollten Sie eher die Frame-Zeit als die FPS berechnen.

Sie nie erzählte uns, was Ihre fps ist oder was das Programm überhaupt tut, so dass Ihr „großer Tropfen“ könnte keine große Sache überhaupt sein.

Für DirectX gibt es PIX die CPU und GPU-Operationen für die Profilierung. Es kann sehr detaillierte Informationen geben, und es lohnt sich, sich zu informieren.

Hoffe, dass hilft!

+1

"Ich habe eine Anwendung, die auf etwa 10fps fällt" Ich denke, 10fps auf einem ziemlich High-End-Computer ist etwas, um eine große Sache zu machen ... –

+0

Es fiel nicht um 10 fps. Es fiel auf 10 fps. Definitiv langsam. – Joe

1

Sie können versuchen, mit dxprof (Suche in Google). Es ist eine leichtgewichtige App, die Echtzeit-Balken zeichnet, wobei jeder Balken einem DirectX-Ereignis entspricht (z. B. Draw-Call oder Ressourcenkopie). Sie können die Balken einfrieren und den Aufrufstapel überprüfen, um herauszufinden, woher der Zeichenaufruf stammt.