1

进行 GPU 编程的一种方法是 OpenCL,它将与并行化的数字运算操作一起工作。

现在想想你最喜欢的 3D PC 游戏。当屏幕渲染时,发生了什么?开发人员是手工制作 OpenCL 内核(或类似内核),还是在显卡中使用预编程功能?

抱歉,这听起来像是一个家庭作业问题,我想不出更好的方法来问它。

4

2 回答 2

1

当您运行游戏时,您的 GPU 上可能会运行两个不同的系统:

  • OpenGL 将图像渲染到您的屏幕(图形)
  • OpenCL 做通用计算任务(compute)

OpenGL 是用着色器编程的。OpenCL 是用内核编程的。

如果您想更详细地了解游戏如何在 GPU 上运行,我建议您阅读有关 OpenCL、OpenGL 和游戏引擎架构的内容。

于 2013-08-18T21:29:46.513 回答
1

好吧,所以,我将根据历史来回答这个问题。希望这可以很好地概述情况,并让您决定如何进行。

图形管道

3D 图形具有几乎固定不变的计算流程。你从你的变换矩阵开始,你乘以你的顶点位置(可能会产生更多的动态),找出你的像素应该被着色,然后吐出结果。这是 3D 图形的(过于简单化的)要点。要更改其中的任何内容,您只需使用“着色器”稍微调整管道的一个方面,即具有定义输入和输出的小可编程元素,以便它们可以插入管道。

早期的 GPGPU

当 GPGPU 还处于起步阶段时,人们获得 GPU 大规模并行能力的唯一方法是通过图形着色器。例如,有片段着色器,它基本上计算了屏幕的每个像素应该是什么颜色(我在这里有点过于简单了,但他们就是这样做的)。

因此,例如,您可能会使用顶点着色器在通过利用颜色混合减少片段着色器中的一堆值之前使用顶点着色器来处理有关屏幕的数据(有效地将数学问题空间转换为......好吧,颜色空间)。

其要点是旧的 GPGPU 东西在 3D 图形的范围内工作,使用与 3D 图形管道的其余部分相同的“图形卡中的预编程功能”。

阅读、写作和思考都很痛苦(或者至少,我发现它是如此痛苦以至于我被劝阻了)。

CUDA 和 OpenCL 以及 [所有其他不太流行的 GPGPU 解决方案]

然后一些人走过来说,“哇,这有点愚蠢——当我们想要进行更一般的计算时,我们被困在了图形管道中!”

因此 GPGPU 摆脱了图形管道的限制,现在我们有了 OpenCL 和 CUDA 以及 Brook 和 HSA 以及......好吧,你明白了。

tl;博士

GPGPU 内核和 3D 图形内核之间的区别在于,后者被困在带有(方便的)约束的管道中,而前者的要求要宽松得多,管道由用户定义,结果不必须附加到显示器上(尽管如果您像那样受虐,它们可以是)。

于 2013-08-18T22:44:00.953 回答