在描述GPU的性能的时候,我们常常用到FLOPS进行描述。FLOPS是Floating-point Operations Per Second的简写,即每秒所能够进行的浮点运算数目。在以往形容GPU的运算性能的时候也常常用到其他单位,比如Triangles Per Second每秒所能够渲染的三角型数目,以及Pixels Per Second 每秒所能够渲染的像素个数等等。然而我们为什么会用到FLOPS这样表征计算能力的单位去描述GPU的能力呢?
答案是GPU的渲染过程本身就是一个密集计算的过程,常常需要包括大量的计算。举个例子,GPU渲染一个物体可以分解为以下步骤:
1. 将物体在三维空间进行建模,把它的空间几何结构分割为三角形进行表示同时记录各个三角形三维顶点坐标。
2. 建立一个光源位置,并指定光源的类型和亮度。
3. 建立照相机位置
4. 加载物体表面的纹理细节
5. 最后根据照相机的位置,将3D物体投影成2D画面
正如上面描述的那样,这个过程需要进行大量的三维计算,而这些计算通常是采用浮点数进行计算(floating-point),因此GPU的浮点计算能力是其性能的一个重要指标。
然而我们应该如何去计算GPU的FLOPS指标呢?以下是ARM的计算规则:
1. ARM GPU只提供ADD、MUL等经典算数运算指令。
2. 统计GPU的一个渲染器/算数流水线在一个时钟周期内能够执行多少的ADD和MUL操作。
3. 获取GPU的运行频率。
4. FLOPS = 单个算数流水线一个时钟内可执行指令数目 x 单核算数流水线个数 x GPU核心数目 x 运行频率
通常是一个很大的数目,因此我们常常采用GFLOPS(gigaflops)作为单位。在具体真正的Soc芯片实现上,通常可以达到理论计算97%的性能发挥。