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

我知道OpenCL可以控制GPU的内存架构,因此可以实现更好的优化,但是,我们可以使用计算着色器进行向量操作(加法,乘法,反转等)吗?

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

主要区别基本上是:

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

因此,计算着色器实际上是为了在现有的OpenGL应用程序中使用,尽pipe它展示了通常的(OpenCL / CUDA类似的)GPU编程的计算方法,与其他着色器的graphics方法这些阶段没有OpenCL / CUDA的计算灵活性(当然还有其他优势)。 因此,执行计算任务比将它们挤压到其他不用于通用计算的着色器阶段,或者引入额外的计算框架(您必须同步)更为灵活,直接和容易。

计算着色器应该能够做到OpenCL几乎可以实现的任何事情,具有相同的灵活性和对硬件资源和相同的编程方法的控制。 所以如果你有一个好的适合GPU的algorithm(对于CUDA或者OpenCL来说效果很好),那么你也可以用计算着色器来实现。 但是,仅仅因为计算着色器,使用OpenGL(现在仍然是,并且可能永远是实时计算机graphics的框架)没有什么意义。 为此,您可以使用OpenCL或CUDA。 计算着色器的真正优势在混合graphics和计算function时发挥作用。

Interesting Posts