GPU结构初识

为什么会有GPU这个东西

回忆一下计算机组成结构,冯诺依曼体系结构:

VonNeumann

最初的架构里面是没有GPU这个东西的,那么为什么我们现在要讲这个呢?因为最初的这个架构里面已经不能有效的解决我们当前面对的问题了。

最初的计算机(我猜想它之所以叫计算机,是因为最初只是用来做计算的)只是用来解决高速计算的,直到90年代,实际上对显示的需求依旧不怎么旺盛,确切一点,都不应该用旺盛这个词。而我们当前的计算机我们拿来打游戏,看剧等等,当用作这个的时候,计算机实际上更多的像一个显示设备了,这里面最主要的就是显卡(GPU)。GPU就是用来加速显示计算的。下面我们引入一些图形学的内容,来看下为什么要新发明一个叫做GPU的东西

如何显示一个模型

在计算机图形学中,实际上显示一个模型可以用下面的公式来简单表示:

渲染 = mesh + 贴图

mesh是计算机图形学的一个概念,实际上就是一系列的三角形图元。而贴图就是一些图像。实际上任何的物体都可以由三角形构成,当我们将三角形无限的细分,我们就可以得到更加精细的表示,而贴图简单的讲就是三角形的颜色。

mesh

mesh1

那么怎样给三角形添加颜色(着色)呢?

在计算机图形学上,我们可以通过对贴图的采样来实现,如下公式:

1
color = texture(image, uv)

一个模型可以由很多的三角形,而一个我们正常显示的场景可以有很多的模型,那么如果按照上面的方法给每个三角形着色,那么这个计算量将会是海量的。

如果渲染是上面的原理,那么CPU完全可以做啊,为什么要新搞个GPU呢?

我们假设一个最简单的CPU,一个核就是一个ALU,那么对于上面的着色过程,ALU会一个pixel一个pixel的进行计算,直到把所有的pixel都算完。

那么怎样可以更快呢?

一个最朴素的方法就是增加ALU呗(多线程思想)

因此CPU和GPU的最朴素的区别就是:GPU有很多很多的ALU

CPUGPU

上面就是GPU的一个简单的架构图。我们可以看到相对于CPU,GPU压缩了control以及cache,增加了很多的ALU,这必然会导致一个问题,那就是逻辑分支预测一塌糊涂,通用计算能力极差。

那我们为什么不能同时增加ALU和逻辑控制单元呢?那么就要增大芯片的面积,而增大面积,就必然会导致更大的时延以及功耗。所以还是那句老话鱼和熊掌不可兼得。

为什么GPU能做并行计算

这个因为渲染的这个场景的特殊性。因为对于每个像素点,他们之间都是独立的,同时他们的计算方法又是完全一致的,这就是天然的并行计算的场景。也就是Single Instructure Multiple Data