第 4 章 GPU简介

GPU,即 Graphics Processing Unit,顾名思义,是用来处理图形的。那它可能就要问了,我明明是用来处理图形的,怎么就跑来做通用计算了呢?卡的一生啊,不可预料……

4.1 图形处理是怎么回事?

色不异空,空不异色;色即是空,空即是色。——《般若波罗蜜多心经》

首先来简单解一下图形处理的本质是什么。
来看看我们在玩游戏的时候,立体图像是怎么显示到显示器上的。首先,立体模型是以三角形的方式组织的。把一个立体模型的表面分成一个一个的三角形,把三角形们的顶点和法向量组织起来,就可以表示一个模型了。使用的三角形越小,模型就越细腻。为了把这个模型显示出来,我们先拿到所有顶点的坐标,根据从屏幕看过去的角度和举例将顶点做坐标变换。然后根据顶点的连接情况把顶点变成三角形,算出投影在屏幕上的坐标。变换完再根据环境光照、物体材质等等信息,把三角形涂上颜色。(这只是大致的工作流程,可能与实际情况不完全相同,但是有那个意思。)

没什么感觉?再仔细想想,是不是对于每个顶点的处理来说,完全不用关心其他顶点的情况?而且对于每个顶点的处理其实都是非常简单的运算(坐标变换什么的)。于是GPU就这么被设计出来了。

4.2 那GPGPU是啥?

一个人的命运啊,当然要靠自我奋斗,但是也要考虑到历史的行程。——他

GPU本来就是为了绘图而设计的。但是某一天,它的计算能力超过CPU了!主要是GPU的核心数量越来越多,虽然单个核心和CPU比起来要菜不少,但是人家核多啊!于是,这种算得快的能力被利用起来,搞出了GPGPU,也就是 General-Purpose computing on Graphics Processing Units,让显卡来做通用计算。

比较完善的GPU编程库(库?)有CUDA和OpenCL。OpenCL可以运行在CPU、GPU甚至FPGA之类的设备上,而CUDA只能运行在Nvidia的显卡上。然而现今CUDA发展远好于OpenCL。

我个人感觉CUDA用起来要简单一些。