上图是一个经典的图片。一个由多边形组成的3D模型,如何生成2D图像?这其实就是一个数学问题。即图中的茶壶,在摄像机位置观察它,看到的是一个什么样的图像。
这里首先要搞清楚输入是什么,一个3D模型输入给显卡简单的讲是两部分(实际上不止),即一组点和一组连接关系。连接关系就是说哪两个点组成一条线,哪三个点组成一个三角形等。由于某些大家猜得出来的原因,现在GPU多时用三角形来表示模型。上图上的茶壶中的每一个四边形都会由两个三角形来表示。
光有点和线还不足以表现一个细节非富的人物理,人们有时需要给三模型上色,或是贴图。
上图简要描述了一个3D模型进入到显卡后经历的操作。
以上是一条固定的流水线。用户可以通过设置显卡的寄存器来决定一些事情,比如说插值采用什么算法等。
后面人们发现要想显示的图像更加好看,显卡用起来更加顺手,需要某些处理步骤可以更加灵活的配置,比如说顶点的处理环节,可以不局限于放大缩小等操作,片元处理环节可以不仅仅是插值或贴图,还可以根据某些数学计算来生成每个像素的颜色。于是芯片设计师把这些步骤的处理部件改可以可编程的,它们就像简单的CPU可以跑一种简单的代码逻辑,由于他们都是做同样的处理,所以他们是同时跑同一份代码,只是输入输出的数据源和数据目的地不同。这些处理部件称为一个显卡的一个核,它上面跑的特殊编程语言称为shader language。
后来人们发现一些大批数的数据处理也符合这种处理模式,即一批数据需要经过同样的处理步骤,但输入输出不同。这样的数据用GPU来处理会非常的快。于是显卡就变成了GPU。
既然很多人用GPU去做计算,那我们为什么不把GPU设计得更适合这类计算一些呢?由于GPU的功能就越来越偏离显示功能,而趋近于计算功能。它就有了一个新的名字GPGPU。
在这类计算中,有一个小的分类叫做AI,它比较火,于是有一部分芯片专门为AI设计,完全没有了显示的功能,就成了AI芯片。
整个演进过程为: 固定流水线显卡->非固定流水线显卡GPU->GPGPU->AI芯片。
下一节分段详细介绍。