iPhone iPhone OpenGL Profilerstellung

8

Meine App läuft und ich möchte die Renderleistung verbessern. Mit 'Instruments' habe ich einige Daten gesammelt. Ich arbeite mit einem alten iPhone 3G als Worst-Case-Szenario.

Zeit Profiler:

%Vor%

Unter Verwendung des Open GL ES-Treibers liest der Sampler jedoch:

%Vor%

Ich stoße in der Dokumentation herum, mit der ich nicht gekommen bin, was der Unterschied zwischen dem OpenGL ES Sampler und dem Timer Profiler ist. Kann mich jemand aufklären?

    
TurqMage 22.04.2011, 00:04
quelle

1 Antwort

11

Erstens, das ist nur das Sampler-Instrument, das Sie betrachten. Die OpenGL ES-Treibervorlage enthält einfach das Sampler-Instrument zusammen mit dem OpenGL ES-Treiber. Es hat nichts besonderes mit OpenGL ES zu tun.

Das Sampler-Instrument und der Time Profiler unterscheiden sich in der Art, wie sie Daten sammeln. Aus der Instrumente Benutzerhandbuch :

  

Das Time Profiler Instrument und das   Sampler-Instrument sind ähnlich, aber   Es gibt einige Unterschiede:

     
  • Time Profiler sammelt Backtrace-Daten auf die gleiche Weise wie Shark von   Kernelraum. Sampler, auf der anderen Seite   Hand, sammelt Daten aus Benutzerraum.   Folglich ist Time Profiler mehr   effizienter als Sampler beim Sammeln   Daten.

  •   
  • Hinweis: Time Profiler (und Shark) kann ungenaue Backtrace-Daten liefern, wenn der   Der Zielprozess wurde optimiert, um ihn zu überspringen   Rahmenzeiger.

  •   
  • Time Profiler kann Daten von einem oder allen Prozessen sammeln. Sampler kann nur   Sample einen einzelnen Prozess.

  •   
  • Time Profiler kann nur alle Thread-Zustände oder nur laufende Threads abfragen.   Sampler fragt immer alle Threads ab   Zustände. Im Allgemeinen bist du interessiert   in laufenden Threads. Wenn dein   Anwendung hängt, Sie wollen   Untersuche alle Thread-Zustände.

  •   

Ich bevorzuge es, Time Profiler selbst zu verwenden, mit entsprechenden Data Mining wie Lade Bibliotheken oder Methoden zu ihren Anrufern.

In Bezug auf das Profiling einer OpenGL ES-Anwendung sollten Sie zuerst die verschiedenen Statistiken betrachten, die Sie im OpenGL ES Driver-Instrument aktivieren können. Klicken Sie auf das i rechts neben dem Gerätenamen, um ein Popup aufzurufen, und klicken Sie anschließend auf Konfigurieren, um eine Liste mit möglichen Statistiken anzuzeigen, die Sie protokollieren können. Sehen Sie sich insbesondere die Werte für die Auslastung und Auslastung der Reinerer Utilization an. Aktivieren Sie die gewünschten Elemente, kehren Sie zum vorherigen Bildschirm zurück und klicken Sie auf die Kontrollkästchen, um sicherzustellen, dass sie protokolliert sind.

Wenn Ihre Anwendung maximiert den Tiler-Nutzungsstatus , Sie werden durch die Größe Ihrer Geometrie eingeschränkt. Tun Sie, was Sie können, um das zu reduzieren (mit einigen der Tipps, die ich erwähne hier ) und Sie werden einen deutlichen Leistungsschub sehen. Auf der anderen Seite, wenn Sie eine maximale Renderer-Auslastung erreichen, ist die Ausführungsrate begrenzt und Sie müssen möglicherweise MSAA deaktivieren, Ihre Fragment-Shader optimieren (wenn Sie OpenGL ES 2.0 verwenden) oder die Größe des Bereichs verringern Sie rendern, unter anderem.

Darüber hinaus führen Sie Ihre Anwendung auf einem Gerät mit iOS 4.0 aus und verwenden das neue OpenGL ES Analyzer-Instrument, das mit Xcode 4 geliefert wird. Dieses Instrument eignet sich hervorragend zum Vorschlagen von Hotspots in Ihrem Rendering-Code oder zur vergeudeten Leistung von redundanten Statusaufrufen. usw.

Wenn Sie sich Ihre spezifischen Ablaufverfolgungsdaten ansehen, scheint es, dass Sie eine Menge Zeit damit verbringen, Geometrie auf die GPU zu kopieren. Ich würde mit einem Vertex-Puffer-Objekt (VBO) aussehen, um das zu reduzieren.

    
Brad Larson 22.04.2011, 02:19
quelle

Tags und Links