【发布时间】:2011-10-16 22:16:11
【问题描述】:
我有一个相当旧的 ATI HD 3400 显卡,它不支持 OpenCL,所以我想知道我是否真的可以使用 ATI 催化剂驱动程序提供的 OpenGL 库?
如果我的算法在 glutDisplayFunc ( displayFunc ) 中运行,即在 displayFun () 中,它实际上是在消耗 CPU 功率还是 GPU 功率?
【问题讨论】:
我有一个相当旧的 ATI HD 3400 显卡,它不支持 OpenCL,所以我想知道我是否真的可以使用 ATI 催化剂驱动程序提供的 OpenGL 库?
如果我的算法在 glutDisplayFunc ( displayFunc ) 中运行,即在 displayFun () 中,它实际上是在消耗 CPU 功率还是 GPU 功率?
【问题讨论】:
GLUT 只是一个管理平台特定窗口和 GL 上下文创建的库。您传递给glutDisplayFunc 的函数只是由GLUT 在您正在运行的平台的适当时间和上下文中调用;它不在 GPU 上执行。
不可能让您以正常方式编译的代码作为更大程序的一部分在 GPU 上运行。
但是,单独的图形操作在您的显示函数内部运行当然会在 GPU 上执行渲染; CPU 仍在计算要执行的图形操作,但并未实际渲染结果。每个gl 函数都是一个普通的 CPU 函数,但它的作用是通过系统总线向显卡发送命令,然后由显卡进行实际渲染。
此外,这些操作是异步的; gl 函数在让您的程序继续之前不要等待您的 GPU 完成操作。这很有用,因为您的 CPU 和 GPU 可以同时工作——GPU 绘制图形,而 CPU 确定要绘制的图形。另一方面,如果你确实需要在另一个方向进行通信——例如glReadPixels——那么 CPU 必须等待 GPU 赶上来。这也是glFlush和glFinish的区别。
【讨论】:
gl* 函数本身仍然是 C 函数,但它们将系统总线上的命令发送到显卡,然后由显卡进行渲染。