OpenCL和OpenGL的计算着色器有什么区别?

时间:2013-04-07 22:16:30

标签: opengl opencl gpgpu compute-shader

我知道OpenCL可以控制GPU的内存架构,因此可以实现更好的优化,但是,除此之外,我们可以使用Compute Shaders进行矢量运算(加法,乘法,反演等)吗?

2 个答案:

答案 0 :(得分:53)

与其他OpenGL着色器类型相比,计算着色器与计算机图形没有直接关系,并提供了更直接的底层硬件抽象,类似于CUDA和OpenCL。它提供可自定义的工作组大小,共享内存,组内同步以及CUDA和OpenCL所熟知和喜爱的所有内容。

主要区别基本上是:

  • 它使用GLSL而不是OpenCL C.虽然这些编程语言之间没有如此巨大的差异,但您可以使用OpenCL不具备的所有与图形相关的GLSL函数,例如高级纹理类型(例如立方体贴图数组) ),高级过滤(例如,mipmapping,好吧,你可能需要自己计算mip级别),以及4x4矩阵或几何函数等方便的东西。
  • 它是一个类似于任何其他GLSL着色器的OpenGL着色器程序。这意味着访问OpenGL数据(如缓冲区,纹理,图像)只是微不足道的,而OpenGL和OpenCL / CUDA之间的接口可能会变得乏味,可能需要您手动同步。以同样的方式将它集成到现有的OpenGL工作流中也是微不足道的,而设置OpenCL本身就是一本书,而不是说它与现有图形管道的集成。

所以归结为,计算着色器实际上是打算在现有的OpenGL应用程序中使用,虽然展示了通常的(类似OpenCL / CUDA)计算方法的GPU编程,与图形方法相比,其他着色器阶段,没有OpenCL / CUDA的计算灵活性(当然还提供其他优势)。因此,执行计算任务比将其挤入其他不用于通用计算的着色器阶段或引入您必须同步的其他计算框架更灵活,更直接,更容易。

计算着色器应该能够使用OpenCL实现几乎任何可实现的功能,并且具有相同的灵活性和对硬件资源的控制以及相同的编程方法。因此,如果你有一个很好的适合GPU的算法(可以很好地与CUDA或OpenCL一起使用)来完成你想做的任务,那么是的,你也可以使用计算着色器。但是,仅仅因为计算着色器,使用OpenGL(它仍然是,并且可能始终是实时计算机图形的框架)并没有多大意义。为此,您可以使用OpenCL或CUDA。计算着色器的真正优势在混合图形和计算能力时发挥作用。

答案 1 :(得分:2)

查看here了解另一个观点。 总结:

是的,OpenCL已经存在,但它针对的是重量级应用程序(想想CFD,FEM等),它比OpenGL更加普遍(超越GPU考虑......英特尔' s Xeon Phi架构支持> 50 x86核心。

此外,在OpenGL / CUDA和OpenCL之间共享缓冲区并不好玩。