我正在测试一些JOGL代码,这些代码使用VBO简单地将四边形渲染到屏幕上。当我强制所有程序使用GPU时,它在Intel HD4000集成显卡上的运行速度比在可用的GT650M上快得多。
为什么会这样?可能是因为在每次渲染调用中发送VBO所花费的时间对于如此小的数据集来说只是有太多的开销?
GPU的结果:
0 s: 1000 f / 618 ms, 1618.1 fps, 0 ms/f; total: 1000 f, 1618.1 fps, 0 ms/f
1 s: 1000 f / 555 ms, 1801.8 fps, 0 ms/f; total: 2000 f, 1705.0 fps, 0 ms/f
1 s: 1000 f / 537 ms, 1862.1 fps, 0 ms/f; total: 3000 f, 1754.3 fps, 0 ms/f
2 s: 1000 f / 521 ms, 1919.3 fps, 0 ms/f; total: 4000 f, 1792.9 fps, 0 ms/f
2 s: 1000 f / 545 ms, 1834.8 fps, 0 ms/f; total: 5000 f, 1801.1 fps, 0 ms/f
3 s: 1000 f / 553 ms, 1808.3 fps, 0 ms/f; total: 6000 f, 1802.3 fps, 0 ms/f
3 s: 1000 f / 536 ms, 1865.6 fps, 0 ms/f; total: 7000 f, 1811.1 fps, 0 ms/f
4 s: 1000 f / 525 ms, 1904.7 fps, 0 ms/f; total: 8000 f, 1822.3 fps, 0 ms/f
CPU的结果:
0 s: 1000 f / 315 ms, 3174.6 fps, 0 ms/f; total: 1000 f, 3174.6 fps, 0 ms/f
0 s: 1000 f / 279 ms, 3584.2 fps, 0 ms/f; total: 2000 f, 3367.0 fps, 0 ms/f
0 s: 1000 f / 251 ms, 3984.0 fps, 0 ms/f; total: 3000 f, 3550.2 fps, 0 ms/f
1 s: 1000 f / 234 ms, 4273.5 fps, 0 ms/f; total: 4000 f, 3707.1 fps, 0 ms/f
1 s: 1000 f / 222 ms, 4504.5 fps, 0 ms/f; total: 5000 f, 3843.1 fps, 0 ms/f
1 s: 1000 f / 204 ms, 4901.9 fps, 0 ms/f; total: 6000 f, 3986.7 fps, 0 ms/f
1 s: 1000 f / 189 ms, 5291.0 fps, 0 ms/f; total: 7000 f, 4132.2 fps, 0 ms/f
1 s: 1000 f / 189 ms, 5291.0 fps, 0 ms/f; total: 8000 f, 4248.5 fps, 0 ms/f
2 s: 1000 f / 194 ms, 5154.6 fps, 0 ms/f; total: 9000 f, 4333.1 fps, 0 ms/f
2 s: 1000 f / 190 ms, 5263.1 fps, 0 ms/f; total: 10000 f, 4411.1 fps, 0 ms/f
2 s: 1000 f / 168 ms, 5952.3 fps, 0 ms/f; total: 11000 f, 4517.4 fps, 0 ms/f
2 s: 1000 f / 160 ms, 6250.0 fps, 0 ms/f; total: 12000 f, 4624.2 fps, 0 ms/f
答案 0 :(得分:3)
您不受实际GPU性能的限制,渲染就是这么简单。如果您绘制非常小的基元(如单个四边形),CPU开销将主导图像。如果你有一个非常复杂的片段着色器,这只会改变。
在您的特定情况下,整个帧非常简单,您可以通过帧速率超过6,000 fps来判断。我怀疑这里最大的限制是每帧的命令可以多快地提交给GPU,以及帧交换的运行速度。
所以我认为基准测试毫无意义。对于良好的基准测试,探索渲染可以达到目标帧速率(例如60 fps)的复杂程度要更加真实。或者通常更重要的是,这些天消耗了多少功率来维持目标帧速率。 如果您想确保自己测量GPU性能,则需要足够大的绘制调用和/或复杂着色器。
不幸的是,在现实生活中使用了糟糕的基准测试。这很不幸,因为它们会导致司机针对不相关的案件进行调整。例如,如果基准测试以6,000 fps而不是3,000 fps运行,这意味着99%的所有帧都不会显示在显示屏上,而不是98%,因为只显示了60帧。