MacOSXでOpenGLでGPUのタイミング

私はgpu側で描画呼び出しのセットに対処するためにかかった時間を必要とします。 OpenGL 3.2+には、 "GL_ARB_timer_query" - 拡張機能があります。残念ながら、MacOSXはまだその拡張子をサポートしていません。

どのようにあなたはgpu側で時間を測定することができるだろう、古い方法やそれを行うには別の方法が必要です。

0
もっと評価できますか?私の知る限り、拡張機能は完全に利用できません...
追加された 著者 niktehpui,
ARB_timer_query では、GL 3.2(拡張子ではなく、コアの一部である)を必要としません。私は2.1-only 7850GTでもそれを持っていましたが、それはMacではありませんでした;)
追加された 著者 Christian Rau,
言われたように、私はMacOSXを使ったことがないので、MacOSXの状況についてはわかりません。ハードウェアとドライバがGL 3.2から完全に切り離されている拡張機能をサポートしている限り、GL 3.2ハードウェアまたは ARB_timer_query 拡張機能のドライバは不要ですとにかく拡張機能ではなく、コア機能です)。
追加された 著者 Christian Rau,

2 答え

gpu側でどのように時間を計測できるのでしょうか、これを行うには古風なやり方が必要です。

なぜそれがなければならないのですか?確かに、決して GPU操作の時間を決める方法がないため、ARB_timer_queryが存在します。これがそのためであり、OpenGLがこれを行うのは唯一の正確なメカニズムです。

縛られているかどうかを「塗りつぶし」ているかどうかを調べるために解像度を変更するなど、一般的なプロファイリング手法が常にありました。しかし、OpenGLでは、ARB_timer_query以外のGPU処理時間を実際に測定する方法はありません。

2
追加された

ホスト側のタイマーで glFinish()しませんか?

1
追加された
mainTreadとgpuの間に別の同期ポイントを強制するため、glFinishとホストサイドタイマーを別のスレッドで実行する必要があります。同じフレームにない次のフレームのGPUタイミングが必要なので、この同期ポイントは不要です。私はあらかじめそれを述べておくべきかもしれません...
追加された 著者 niktehpui,
glFinishと同じ問題を@ronag、同期ポイントを強制する
追加された 著者 niktehpui,
また、ホスト側のタイマーでARB_syncを試すこともできます。それはやっかいかもしれませんが。
追加された 著者 ronag,
@niktehpui:必ずしもそうではありません。フェンスの状態を問い合わせるだけで、それを待つ必要はありません。フェンスを設定し、glFlushを実行してからポーリング状態にします。
追加された 著者 ronag,
@ニコルボラス:あなたは正しいですが、私は彼が "GL_ARB_timer_query"なしでできることは最高だと思います。
追加された 著者 ronag,
@ニコルボラス:私は正しかった。
追加された 著者 ronag,
ドローコールが実行したい最後の操作でない場合や、パイプライン全体をストールしたくない場合や、CPUアプリケーション全体をブロックしたくない場合は、少なくとも問題になります。しかし、確かに、専用のテストを実行するために、多分。
追加された 著者 Christian Rau,
glFinish もフェンスも彼が必要とすることはしません。フェンスは、時間に関して正確であることを保証するものではありません。あなたはフェンスをテストすることができますが、GPUが完了していないという保証はありません。フェンスはすぐにすぐに GPUが終了した時点で設定されている必要はありません。したがって、あなたのタイミングは不正確になります。 glFinish でも同じです。タイミングの保証はありません。
追加された 著者 Nicol Bolas,
@ronag:正確には正確ではないタイミングメカニズムは、まったく役に立たないということです。あなたの「タイマー」が言っていることを信用できないならば、それに基づいて合理的に行動することはできません。
追加された 著者 Nicol Bolas,
glFinish またはフェンスに基づくタイミングは、必要な時間の上限を提供するので無駄ではありません。実装によっては、かなり上手く信頼できる上限になることさえあります。現在の課題に役立つかどうかは、その情報がどのような情報が使用されるべきかを問わず、評価できるものではありません。
追加された 著者 user57368,