【发布时间】:2013-03-29 21:49:08
【问题描述】:
我知道 OpenCL 可以控制 GPU 的内存架构,因此可以进行更好的优化,但是,撇开这一点不谈,我们可以使用计算着色器进行矢量运算(加法、乘法、求逆等)吗?
【问题讨论】:
标签: opengl opencl gpgpu compute-shader
我知道 OpenCL 可以控制 GPU 的内存架构,因此可以进行更好的优化,但是,撇开这一点不谈,我们可以使用计算着色器进行矢量运算(加法、乘法、求逆等)吗?
【问题讨论】:
标签: opengl opencl gpgpu compute-shader
与其他 OpenGL 着色器类型相比,计算着色器与计算机图形没有直接关系,并且提供了更直接的底层硬件抽象,类似于 CUDA 和 OpenCL。它提供了可定制的工作组大小、共享内存、组内同步以及所有那些从 CUDA 和 OpenCL 中知道和喜爱的东西。
主要区别基本上是:
所以这归结为,计算着色器确实适用于现有的 OpenGL 应用程序,尽管它展示了 GPU 编程的通常(OpenCL/CUDA 类)计算方法,与图形方法相反其他着色器阶段不具备 OpenCL/CUDA 的计算灵活性(当然,同时提供其他优势)。因此,执行计算任务比将它们压缩到其他不适用于通用计算的着色器阶段或引入必须与之同步的额外计算框架更灵活、直接和容易。
计算着色器应该能够以相同的灵活性和对硬件资源的控制以及相同的编程方法来执行 OpenCL 可以实现的几乎任何事情。因此,如果您有一个适合 GPU 的良好算法(可以很好地与 CUDA 或 OpenCL 配合使用)来完成您想要完成的任务,那么是的,您也可以使用计算着色器来完成它。但是仅仅因为计算着色器而使用 OpenGL(它仍然是并且可能永远是一个用于实时计算机图形的框架)并没有多大意义。为此,您可以使用 OpenCL 或 CUDA。当混合图形和计算功能时,计算着色器的真正优势就会发挥作用。
【讨论】:
查看here 以获得另一个视角。 总结:
是的,OpenCL 已经存在,但它针对的是重量级应用程序(例如 CFD、FEM 等),并且它比 OpenGL 更通用(想想 GPU 之外...英特尔的 Xeon Phi 架构支持>50 x86 内核)。
另外,在 OpenGL/CUDA 和 OpenCL 之间共享缓冲区并不好玩。
【讨论】: