我正在使用OpenGL(如QGIS)开发2D图形应用程序。最近,当我测试一些基准测试时,我的2个显卡之间存在奇怪的性能差异。所以我做了一个简单的测试,用VBO绘制了100万个方块。所以每20个字节有4m顶点,所以我的总VBO大小是80 MB。我只用一个DrawElements调用绘制了所有东西。当我在笔记本电脑中测量渲染时间时,它有2张图形卡,在Geforce上运行约43毫秒,在集成英特尔卡上运行约1毫秒。但我希望在Geforce上更快。为什么会这样?我应该禁用一些 Opengl选项?
我的系统规范是: 华硕N53m采用集成显卡和Geforce GT 610m
修改:
我还在使用AMD Radeon HD 5450的另一个系统上进行了测试,它再次大约是44毫秒。我也使用单精度,它减少到30毫秒。但仍集成GPU更快!
这绝对不是测量问题,因为我可以看到放大/缩小时的滞后。
答案 0 :(得分:2)
不同OpenGL实现的运行时间行为大不相同,正如我在关于VR的低延迟渲染技术的实验中发现的那样。通常,唯一真正可靠的测量时间间隔,即给出一致的结果,是图形中同一步骤之间的帧间时间。即测量从缓冲区交换到缓冲区交换的时间(如果要测量原始绘图性能,禁用V-Sync),或者在相同的glClear
调用之间。
其他所有内容只在某个实现中保持一致,但在供应商之间不一致(在测试时我没有AMD GPU,所以我缺少这方面的数据)。我发现了一些值得注意的角落案例:
SwapBuffers
glfinish在
如果绕过X11(使用KMS),我还需要测试英特尔驱动程序的功能。请注意,只要结果是一致的并且符合规范,OpenGL规范就会在实现时如何以及何时执行某些操作。并且所有观察到的行为都非常符合。