【问题标题】:What is the difference between OpenCL and OpenGL's compute shader?OpenCL 和 OpenGL 的计算着色器有什么区别?
【发布时间】:2013-03-29 21:49:08
【问题描述】:

我知道 OpenCL 可以控制 GPU 的内存架构,因此可以进行更好的优化,但是,撇开这一点不谈,我们可以使用计算着色器进行矢量运算(加法、乘法、求逆等)吗?

【问题讨论】:

    标签: opengl opencl gpgpu compute-shader


    【解决方案1】:

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

    主要区别基本上是:

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

    所以这归结为,计算着色器确实适用于现有的 OpenGL 应用程序,尽管它展示了 GPU 编程的通常(OpenCL/CUDA 类)计算方法,与图形方法相反其他着色器阶段不具备 OpenCL/CUDA 的计算灵活性(当然,同时提供其他优势)。因此,执行计算任务比将它们压缩到其他不适用于通用计算的着色器阶段或引入必须与之同步的额外计算框架更灵活、直接和容易。

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

    【讨论】:

    • 不要忘记 OpenCL 提供的精度保证,而 GLSL 明确
    • @NicolBolas 你的意思是算术运算和函数?
    • 是的。两者的浮点精度差别很大。
    • 有一些扩展可以授予 IEEE 精度并禁用操作重新排序。
    • 对 OpenGL 算术精度保证感兴趣的人应该考虑在 OpenGL 4.1 中引入的 ARB_shader_precision 扩展。见:khronos.org/registry/OpenGL/extensions/ARB/…
    【解决方案2】:

    查看here 以获得另一个视角。 总结:

    是的,OpenCL 已经存在,但它针对的是重量级应用程序(例如 CFD、FEM 等),并且它比 OpenGL 更通用(想想 GPU 之外...英特尔的 Xeon Phi 架构支持>50 x86 内核)。

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

    【讨论】:

    • 在实践中,更具体地说,在矩阵计算中,高端 GPU 比高端 CPU 解决可并行化问题的能力高出 >>40 倍。我现在并不关心 CPU 的能力。所以回到我的问题,我们可以用计算着色器说矩阵反转吗?与 OpenCL 相比,需要做多少工作?
    • AFAIK,并行算法仅用于反转 sparse 矩阵,而且这些矩阵非常复杂,您可能希望用 C99(OpenCL 的内核语言)编写它们。
    • 您可以在 OpenGL 的计算着色器中进行多种类型的计算,这些计算类似于 OpenCL,主要区别在于 OpenGL 使用 GLSL(OpenGL 着色语言)作为其内核语言,与 OpenCL 的 C99 方言相比。进行矩阵计算没有限制(例如,仅使用稀疏矩阵),在特定情况下,您可以使用基于块的矩阵算法,这些算法利用了 GLSL 的一些原生矩阵运算。
    猜你喜欢
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多