Ich arbeite derzeit an einem OpenGl-Programm, dessen Leistung ich verbessern möchte. Die Leistung ist in Ordnung, aber bei leistungsstarken dedizierten GPUs nicht ideal, bei integrierten Grafiken (<10 fps) jedoch miserabel. In einem normalen Programm (CPU-basiert, kein OpenGl oder eine andere GPU-API) würde ich einen Profiler (möglicherweise den in CLion integrierten) für das Programm ausführen, sehen, wo die meiste Zeit verbracht wird, und dann an einem besseren Algorithmus arbeiten für diese Bereiche oder finden Sie einen Weg, um den Betrag zu reduzieren, den dieser Bereich genannt wird.
Die Verwendung dieser Technik in meinem OpenGl-Programm zeigt, dass der größte Teil der Zeit des Programms (~ 86%) in seinem Hauptthread (dem, den ich optimieren möchte) in der .so-Datei des OpenGl-Treibers verbracht wird. Darüber hinaus ist die CPU-Auslastung des Programms während der Ausführung sehr gering, die GPU-Auslastung liegt jedoch zwischen 95% und 100%. Zusammengenommen sagen mir diese Informationen, dass der Engpass in der GPU liegt, daher sollte ich dort optimieren.
Hier tritt ein Problem auf. Meine normale Technik, einen Profiler als Leitfaden für meine Optimierungen zu verwenden, funktioniert jedoch nicht ohne den spezifischen GPU-Profiler. Aus diesem Grund habe ich einige Nachforschungen angestellt, um einen Profiler zu finden, der mir sagt, wo die GPU-Verarbeitungszeit verbracht wird. Ich konnte nichts finden, was aus der Ferne verwendet werden kann. Alles war entweder nur für Windows (ich verwende ausschließlich Linux und mein Programm ist noch nicht auf Windows portiert - und wird es auch nicht sein, bis es viel weiter fortgeschritten ist), nicht mehr aktualisiert und / oder kostet weit mehr als das Budget für Dieses Projekt ist.
Daher frage ich: Wie kann ich die Leistung meines Programms optimieren, wenn der entsprechende Profiler nicht vorhanden ist? Ich habe versucht zu erraten, wo die Probleme liegen, und daraus optimiert, aber es machte überhaupt keinen Unterschied, obwohl ich feststellen konnte, dass meine Optimierungen (Kegelstumpf-Keulung) zu weniger Arbeit für die GPU um etwa die Hälfte führten. Eine gute Antwort gibt eine Profiling-Technik an, die für Opengl unter Linux gilt, oder eine Technik, die ohne Profiler funktioniert.