GPGPU功能

时间:2013-03-06 19:08:01

标签: opengl gpgpu

GPGPU是一整套独立的平台,可以在GPU上执行不同的流程,还是使用OpenGL库实现同样的目标? 换句话说,GPGPU是否有自己的库集,并且它依赖于硬件?或者它可以在任何硬件上运行,只要该硬件支持OpenGL?我想我不确定GPGPU与OpenGL有何不同?我知道OpenGL的副产品是做一些大量的并行计算,所以你真的不必只使用它的图形功能。但是GPGPU怎么样?

4 个答案:

答案 0 :(得分:2)

OpenCL GPGPU与硬件无关(而是在Nvidia和AMD之间)。 CUDA是一种仅用于Nvidia的GPGPU语言。

GPGPU与OpenGL的不同之处在于,它可以预先形成超出OpenGL API范围的任意操作。想通过并行进程进行稀疏矩阵乘法?使用OpenCL或CUDA,OpenGL将无法提供构建此功能的能力(或者如果能够,则会更加困难)。

GPGPU与OpenGL和DirecX分开。

答案 1 :(得分:2)

GPGU是一个概念,指的是使用GPU进行任意计算的能力,而不仅仅是绘制图片。

如今,GPGPU有两种机制。最简单的方法是使用为GPGPU设计的API。 OpenCL是跨平台的方法。 CUDA适用于那些愿意将自己限制在NVIDIA生态系统中的人。这些API定义了C / C ++ API和用于在GPU上执行代码的特殊语言,以及与GPU内存连接(发送要处理的数据和读回结果)。

另一种方法是使用常规渲染API简单地绘制“图片”并读回结果。要使用它,您必须格式化输入和输出数据,使其与渲染系统想要做的事情相匹配。

通常避免使用后一种方法,但有两个例外。一,如果有问题的硬件不能支持OpenCL / CUDA / etc,你显然别无选择,只能使用渲染API。或者两个,如果GPGPU操作用于提供渲染操作。认为像视锥体剔除实例,粒子系统计算等。如果你正在做的事情只是被后来的渲染操作直接使用,那么最好使用渲染API本身。 OpenCL / CUDA与渲染API(如OpenGL)之间的互操作可能会带来性能损失。

答案 2 :(得分:0)

虽然您可以使用直接OpenGL(通过编写自定义着色器并使用纹理传递数据)来执行一些GPGPU工作,但使用像nVidia的CUDA这样的专用库来执行GPGPU通常更为常见。

答案 3 :(得分:0)

OpenGL是一种使用3d加速硬件的跨平台标准API。如果你愿意,可以使用“与图形卡通信的通用语言”。

GPGPU不是标准,因此。这是一个总括性术语,指的是在 GPU 上执行通用计算的一系列技术(因此名称为GPGPU)。

在石器时代(在CUDA / OpenCL之前),你必须通过箍来做简单的事情,甚至稍微复杂的东西最好留给GPU专家。例如:您可以通过将它们存储在纹理中来添加两个数组,然后进行多纹理化(使用OpenGL设置以执行纹理的添加),然后从屏幕对齐的四边形中读回渲染的纹理。

随着CUDA和OpenCL的出现,您现在可以编写通用代码(例如:矩阵乘法),虽然可以通过一些修改来利用GPU硬件中的并行性,然后在GPU上运行它而无需精心设计OpenGL技巧(比如多纹理添加)。

希望稍微澄清一下。