Profiling eines Grafik-Renderings ohne Profiler

9

Heutzutage haben wir ziemlich fortgeschrittene Tools, um Rendering zu bügeln, indem wir die verschiedenen Phasen, die Zeit für Draw-Aufrufe usw. sehen. Aber ohne sie ist die Grafikpipeline eine ziemlich schwarze Box, wenn es darum geht zu verstehen, was im Inneren passiert.

Stellen Sie sich vor, Sie haben aus irgendeinem Grund kein oder nur sehr eingeschränktes Werkzeug. Wie würdest du sowieso messen, was Zeit in deinem Rendering braucht?

Ich kenne Tricks wie das Verwerfen von Zeichnungsaufrufen, um die CPU-Zeit zu sehen, das Setzen eines 1x1-Ansichtsfensters, um die Kosten der Geometrie zu sehen, die Verwendung eines dummen Fragment-Shaders, um die Füllrate hervorzuheben ... Sie sind bereits nützlich, geben aber nur grobe Werte Idee von dem, was vor sich geht, und nichts über den Grad der Parallelität sagen.

Auch scheint es schwierig zu sein, die Zeit in jeder Phase pro Aufruf zu verbringen, besonders wenn man die mangelnde Präzision aufgrund des Rauschens bei der Messung berücksichtigt.

Welche Tricks verwendest du, wenn dein Rucksack fast leer ist und du dein Profil noch profilieren musst? Woraus besteht dein persönliches Schweizer Taschenmesser?

    
Julien Guertault 14.07.2011, 06:34
quelle

2 Antworten

4

Zeit zum Rendern der Frame-Zeit

Absolute Zeit für kleinen Code / Bühne / etc. ist nicht so relevant, da GPU-Treiberoptimierung / Batching / Parallelität / Version es fast unmöglich macht, eine genaue Codemessung ohne GPU-Zähler zu haben. (die Sie erhalten können, wenn Sie mit Lieferanten-Bibliotheken verwenden)

Was Sie leicht messen können, ist jede einzelne Änderung der Code-Änderung. Sie werden nur einen relativen Einfluss haben und das ist es, was Sie wirklich brauchen. Und das nur mit Frame-Rendering-Zeit.

Idealerweise sollten Sie in der Lage sein, Shader- oder Pipeline-Code während der Laufzeit zu bearbeiten und einen direkten Weg zu haben, den Einfluss auf eine ganze typische Szene zu prüfen, wie zum Beispiel den Vergleich von Graphen zwischen verschiedenen Code-Pfaden. (Vorsicht vor statischen Szenen, ansonsten enden Sie mit stark optimierten statischen Ansichten, aber schlechter Dynamik der Szenen)

Hier ist die Schweizer Taschenmesserliste:

  • Szenenstatus loader
  • Szenenrekorder (Kamerapfade / Elemente hinzufügen / entfernen, Textur, Gitter, falsche Eingabe usw.) mit Szenenzuständen.
  • scene saver
  • Szenenframe time logger (nicht nur der finale Durchschnitt, sondern die Renderzeit jedes Frames)
  • Sofort-Shader-Code neu laden
  • On-the-fly-Codepathswitch
  • Rahmenzeitprotokollleser + Graphen + Statistikrahmen

Beachten Sie, dass der Szenenstatus load / save / record für viele andere Dinge nützlich ist, von Debugging über Undo / Redo bis On-the-Fly Reload, ganz zu schweigen von Savegames. Fügen Sie einen Screenshot Taker + Bildvergleich hinzu, und Sie können den Grafikcode auch testen.

Wenn Sie können, fügen Sie das Ihrem CI-Server hinzu, damit der enorme Code-Einfluss nicht unbemerkt bleibt. (hilft auch Künstlern, wenn sie ihre Assets einchecken, ohne den Rendering-Effekt zu bewerten) Ein Muss lesen, dass CI-Grafik-Test-Arbeit ist da: Ссылка

    
Tuan Kuranes 14.07.2011, 11:00
quelle
1

Hinweis: Ich reagiere auf die Frage: "Profilerstellung eines Grafik-Renderings mit einem Profiler", da das was ich gesucht habe;)

Ich arbeite hauptsächlich am Mac und verwende mehrere Tools:

  • gDebugger Version 5.8 ist unter Windows und Mac verfügbar (dieses Tool wurde von AMD gekauft, die v6-Version ist Nur Windows). Es gibt Ihnen Statistiken über Zustandsänderungen, Texturverwendung, Zeichenaufrufe usw. Es ist auch nützlich, um Textur Mapping zu debuggen und zu sehen, wie Ihre Szene Schritt für Schritt gezeichnet wird.
  • PVRUniSCoEditor Es ist ein Shader-Editor. Es kompiliert on the fly und gibt Ihnen wertvolle Details über geschätzte Zyklen und registriert die Verwendung.
  • Instruments (von XCode Utilities, nur OSX), es bekommt Informationen aus dem OpenGL-Treiber, es ist großartig, einen Engpass zu finden, da Sie verfolgen können, welcher Teil der GPU zu 100% verwendet wird (Tiler, Renderer, Textureinheit usw.) ..)
  • Adreno Profiler ein Windows-Tool zum Profilieren von Adreno-basierten Mobilgeräten. (Sehr gutes Tool, wenn Sie an Android-Apps arbeiten;))

Was ist dein Trick über den "dummen Fragment-Shader, um die Füllrate hervorzuheben"? (Zeichnen einer einfachen Farbe? oder etwas fortgeschrittener?)

    
Maxime 21.07.2011 09:40
quelle

Tags und Links