GPU编程与游戏中图形卡的使用有何不同?

时间:2013-08-02 16:35:54

标签: graphics gpu

进行GPU编程的一种方法是使用OpenCL,它可以用于并行化的数字运算操作。

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

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

2 个答案:

答案 0 :(得分:1)

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

  • OpenGL将图像渲染到屏幕(图形)
  • OpenCL执行通用计算任务(计算)

OpenGL使用着色器进行编程。 OpenCL用内核编程。

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

答案 1 :(得分:1)

H'okay,所以,我在历史方面回答这个问题。希望能够很好地概述这种情况,并让您决定如何继续。

图形管道

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

早期GPGPU

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

因此,例如,您可以使用顶点着色器来清除有关屏幕的数据,然后通过利用颜色混合减少片段着色器中的一堆值(有效地将数学问题空间的棘手转换为...好吧,色彩空间)。

这就是旧的GPGPU工作在3D图形范围内工作,使用与图形卡中预先编程的功能相同的其他3D图形管道。

阅读,写作和思考是痛苦的(或者至少,我觉得我被劝阻是如此痛苦)。

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

然后有些人走过来说:“哇,这有点愚蠢 - 当我们想做更多的一般计算时,我们陷入图形管道!”

因此GPGPU从图形管道的范围中逃脱,现在我们有OpenCL和CUDA以及Brook和HSA ......嗯,你得到了图片。

TL;博士

GPGPU内核和3D图形内核之间的区别在于后者卡在管道中,附加了(方便)约束,而前者有更宽松的要求,管道由用户定义,结果不要附加到显示器上(尽管如果你是这样的受虐狂,它们就可以了。)