GPGPU 是一整套在 GPU 上执行不同进程的独立平台,还是使用 OpenGL 库来实现相同的事情?换句话说,GPGPU 是否有自己的一套库,并且依赖于硬件?或者只要硬件支持OpenGL,它就可以在任何硬件上运行?我想我不确定 GPGPU 与 OpenGL 有何不同?我知道 OpenGL 的一个副产品是做一些大量的并行计算,所以你真的不必只使用它的图形功能。但是GPGPU怎么样?
4 回答
OpenCL GPGPU 独立于硬件(而是介于 Nvidia 和 AMD 之间)。CUDA 是一种仅适用于 Nvidia 的 GPGPU 语言。
GPGPU 与 OpenGL 的不同之处在于,它可以执行 OpenGL API 范围之外的任意操作。想通过并行过程进行稀疏矩阵乘法吗?使用 OpenCL 或 CUDA,OpenGL 不会提供构建此功能的能力(或者如果可以,它会更加困难)。
GPGPU 独立于 OpenGL 和 DirecX。
GPGU 是一个概念,指的是使用 GPU 进行任意计算的能力,而不仅仅是绘图。
如今,有两种机制来做 GPGPU。最简单的方法是使用为 GPGPU 设计的 API。OpenCL 是跨平台的方法。CUDA 是为那些愿意将自己限制在 NVIDIA 生态系统中的人而存在的。这些 API 定义了 C/C++ API 和特殊语言,用于在 GPU 上执行代码,以及与 GPU 内存接口(发送要处理的数据和读回结果)。
另一种方法是使用常规渲染 API 简单地绘制“图片”并读取结果。要使用它,您必须格式化输入和输出数据,使其与渲染系统想要执行的操作相匹配。
通常避免使用后一种方法,但有两个例外。一,如果有问题的硬件不能支持 OpenCL/CUDA/等,你显然别无选择,只能使用渲染 API。或者两个,如果 GPGPU 操作用于提供渲染操作。像平截头体剔除实例、粒子系统计算等一样思考。如果您正在做的只是以后的渲染操作直接使用,那么最好使用渲染 API 本身。OpenCL/CUDA 和渲染 API(如 OpenGL)之间的互操作可能会带来性能损失。
虽然你可以使用直接的 OpenGL 来做一些 GPGPU 的事情(通过编写自定义着色器和使用纹理来传递数据),但通常更常见的是使用专门的库来做 GPGPU,比如 nVidia 的 CUDA。
OpenGL 是用于使用 3d 加速硬件的跨平台标准 API。如果您愿意,可以使用“与图形卡对话的通用语言”。
因此,GPGPU 不是标准。它有点笼统,指的是在GPU上执行通用计算的一系列技术(因此得名 GPGPU)。
在石器时代(在 CUDA/OpenCL 之前),你必须跳过障碍来做简单的事情,即使是稍微复杂的事情也最好留给 GPU 专家。例如:您可以通过将它们存储在纹理中来添加两个数组,然后进行多重纹理处理(使用 OpenGL 设置来执行纹理的添加),然后从屏幕对齐的四边形读取渲染的纹理。
随着 CUDA 和 OpenCL 的出现,您现在可以编写通用代码(例如:矩阵乘法),尽管需要进行一些修改以利用 GPU 硬件中的并行性,然后在 GPU 上运行它,而无需借助复杂的 OpenGL 技巧(像多纹理添加)。
希望能把事情弄清楚一点。