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

Mai*_*iss 57 opengl gpgpu opencl compute-shader

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

Chr*_*ica 59

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

主要区别基本上是:

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

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

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

  • 不要忘记OpenCL提供的精确保证,GLSL明确地做*不*. (13认同)
  • 有一些扩展可以授予IEEE精度并禁用操作重新排序. (3认同)
  • 对 OpenGL 算术精度保证感兴趣的人应该关注 OpenGL 4.1 中引入的 ARB_shader_ precision 扩展。请参阅:https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shader_ precision.txt (2认同)