現在、パフォーマンスを改善したいOpenGlプログラムに取り組んでいます。パフォーマンスは大丈夫ですが、強力な専用GPUでは理想的ではありませんが、統合グラフィックス(<10 fps)ではひどいです。通常のプログラム(CPUベース、OpenGlまたは他のGPU APIなし)では、プログラムでプロファイラー(おそらくCLionに組み込まれているもの)を実行し、ほとんどの時間を費やしている場所を確認してから、より良いアルゴリズムで作業しますそれらのエリアの場合、またはそのエリアが呼び出される量を減らす方法を見つけます。
OpenGlプログラムでこの手法を使用すると、メインスレッド(最適化したいスレッド)でのプログラムの時間の大部分(約86%)がOpenGlドライバーの.soファイルに費やされていることがわかります。さらに、プログラムの実行中のCPU使用率は非常に低いですが、GPU使用率は95%から100%の間で停止します。これらの情報を総合すると、ボトルネックがGPUにあるため、最適化する必要があることがわかります。
ここで問題が発生します。ただし、プロファイラーを使用して私の最適化を導く通常のテクニックは、特定のGPUプロファイラーがないと機能しません。そのため、GPU処理時間が費やされている場所を教えてくれるプロファイラーを見つけるために、いくつかの調査を行いました。リモートで使用できるものは何も見つかりませんでした。すべてがWindowsのみ(Linuxのみを実行しており、プログラムはまだWindowsに移植されていません-ずっと先までは移植されません)であるか、更新されていないか、および/またはこのプロジェクトです。
そのため、私は質問します。関連するプロファイラーが存在しない場合、プログラムのパフォーマンスをどのように最適化できますか?問題がどこにあるのかを推測し、そこから最適化を試みましたが、最適化(錐台カリング)によってGPUの作業が約半分になっていることが確認できたとしても、違いはありませんでした。良い答えは、Linux上のOpenglに適用可能なプロファイリング手法を提供するか、プロファイラーなしで機能する手法を提供することです。