GQLWidgetを使用してOpenGLを使用する2つのアプリケーションでこれを確認しました。画面の更新が非常に頻繁である場合、たとえば30 fpsの場合、および/または解像度が高い場合は、コアの1つのCPU使用率が急上昇します。これを修正する方法や、Windowsでも発生するかどうかを確認する方法についての解決策を探しています。
3 に答える
私の経験では、QGLWidget 自体は GL とウィンドウ システムの非常に効率的なシン ラッパーです。それを使用して CPU 使用率が高い場合は、OpenGL アプリを実装する他の方法を使用しても CPU 使用率が高くなる可能性があります。
OpenGL を使用して CPU 使用率が高い場合は、次のいずれかの可能性があります。
- ソフトウェアの OpenGL 実装 (Mesa など) に頼っています。たとえば、グラフィックス デバイス ドライバをインストールしない場合、Debian はこれを行います。
- 古い学校の即時モード OpenGL を使用しています: glBegin,...vertices...,glEnd. 代わりに VBO に参加してください。
ディスプレイの解像度を要因として言及しているという事実は、むしろ前者の問題を示唆しています。
プロファイラーを取得し、コードをプロファイリングして、ボトルネックがどこにあるかを確認する必要があります。プログラムは (GPU ではなく) CPU リソースを消費するため、これはかなり簡単なはずです。私の知る限り、「AQTime 7 Standard」(windows)は現在無料で利用できます。または、ツールキット/プラットフォームに応じて、gprof を使用することもできます。
非常に考えられるシナリオの 1 つは (ソフトウェア OpenGL フォールバックを除く)、動的メモリ割り当てを頻繁に使用したり、デバッグ ビルドを実行したりすることです。フレームごとに 100000 以上のポリゴンがある場合、即時モードは問題になる可能性があります。
ホストの CPU 使用率を最小限に抑えるのにひどい GL 実装をいくつか見てきました。GPU が描画している間、CPU がビジー待機する状況がたくさんあるようです。多くの場合、カード設定で垂直同期をオンにするだけで、アプリの描画頻度が減り、CPU の使用量は同じになります。残念ながら、これについて自分でできることはほとんどなく、アプリが描画する頻度を制限すること以外はできません。