4

私は、C++/OpenGL/GLUT コードの非効率的で遅い部分を追跡して削除する過程にありました。その際、フレーム/秒カウンターを見て、実際に進歩しているかどうかを確認しました。ウィンドウを最大化すると、フレーム レートが約 120 から 60 に低下することに気付きました。

さらなる実験により、これは線形であることが明らかになりました。ウィンドウのサイズを変更することでフレームレートを変更できました。

これは、GPU レンダリングでボトルネックが発生していることを意味しますか? 確かに、最近の GPUは 300x300 と 1920x1080 の違いに気付かないほど強力なのでしょうか? それとも、グラフィックス カードに要求しすぎているのでしょうか?

別の方法としては、コードにバグがあり、大きなレンダリングでシステムの速度が低下することがあります。

私が尋ねているのはこれです: ウィンドウ サイズを変更するときにフレームレートが半分になることを期待するのは合理的ですか、それとも何か非常に問題がありますか?

4

1 に答える 1

13

さらなる実験により、これは線形であることが明らかになりました。ウィンドウのサイズを変更することでフレームレートを変更できました。

おめでとうございます: 広告掲載率を発見しました

これは、GPU レンダリングでボトルネックが発生していることを意味しますか?

はい、かなり。具体的には、ボトルネックは、グラフィックス メモリとの間の帯域幅、フラグメント シェーダーの複雑さ、または両方の組み合わせです。

確かに、最近の GPU は 300x300 と 1920x1080 の違いに気付かないほど強力なのでしょうか?

300×300   =   90000
1920×1080 = 2073600

言い換えれば、GPU に約 20 倍のピクセルを埋めるように要求します。つまり、20 倍のデータを処理する必要があります。

120Hz から 60Hz への低下は、V-Sync によるものです。V-Sync を無効にすると、プログラムは 1920×1080 では 60Hz よりもはるかに高いレートに到達する可能性がありますが、300×300 では 180Hz 未満になります。

その理由は簡単です。ディスプレイの垂直リトレースに同期すると、GPU はディスプレイが垂直同期している瞬間にのみ次のフレームを「出力」できます。ディスプレイが 120Hz を実行でき (明らかなように)、レンダリングが完了するまでに 1/120 秒未満の時間がかかる場合、期限が過ぎ、フレームレートがディスプレイに同期されます。ただし、フレームの描画に 1/120 秒以上かかる場合は、表示される 2 つおきのフレームと同期します。レンダリングに 3 秒ごとに 1/60 秒以上かかる場合、4 秒ごとに 1/30 秒というように続きます。

于 2013-11-06T12:23:44.313 に答える