为什么我的2d图形应用程序在Inegrated显卡上运行得更快?

时间:2016-03-07 02:49:42

标签: opengl gpu opentk

我正在使用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更快! 这绝对不是测量问题,因为我可以看到放大/缩小时的滞后。

1 个答案:

答案 0 :(得分:2)

不同OpenGL实现的运行时间行为大不相同,正如我在关于VR的低延迟渲染技术的实验中发现的那样。通常,唯一真正可靠的测量时间间隔,即给出一致的结果,是图形中同一步骤之间的帧间时间。即测量从缓冲区交换到缓冲区交换的时间(如果要测量原始绘图性能,禁用V-Sync),或者在相同的glClear调用之间。

其他所有内容只在某个实现中保持一致,但在供应商之间不一致(在测试时我没有AMD GPU,所以我缺少这方面的数据)。我发现了一些值得注意的角落案例:

  • SwapBuffers

    • NVidia:仅在显示交换缓冲区后返回。这意味着:要么等待V-Sync,要么仅在交换缓冲区后才返回
    • Intel / Linux / X11:始终立即返回。 V-Sync会影响下一个OpenGL调用,该调用会影响尚未显示的缓冲区中不符合命令队列的像素。因此"清算"具有大型四边形,天空盒或使用深度乒乓方法的视口(仅在非常旧的应用程序中找到)会产生非常不一致的帧间隔。 glClear将在交换后可靠地阻塞,直到V-Sync
  • glfinish在

    • NVidia:实际上按预期完成了渲染
    • Intel / Linux / X11:绘制到后台缓冲区,就像No-Op一样,绘制到前面的缓冲区就像一个完成,然后是从辅助后面到前面缓冲区的复制(很奇怪);本质上意味着你不能使绘图过程显而易见"。

如果绕过X11(使用KMS),我还需要测试英特尔驱动程序的功能。请注意,只要结果是一致的并且符合规范,OpenGL规范就会在实现时如何以及何时执行某些操作。并且所有观察到的行为都非常符合。