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