level 12
爱搞机的GPU总结
↓
2013年02月03日 03点02分

首先,运行在CPU上游戏引擎根据游戏中的一些参数,产生一系列的图元,将它们的顶点数据发送给GPU

比如三角形生成率,本身就受到很多测试因素的影响。例如,有些三角形在一开始就会被剔除掉(比如在屏幕外,或者太小了根本覆盖不到一个像素),不会被显示也不会需要执行太多的运算,那么这部分三角形到底应该算吗?如果算进去的话,三角形生成率自然就高了。或者,测试程序把一些已经计算好的坐标提交给GPU,那么GPU的Vertex Shader就不需要进行复杂的计算,数值自然就高了。再或者,并非生成一个三角形就一定需要处理三个顶点。如果有三角形共享顶点,用indexed的办法绘制,顶点的数目就可以减少。就像下图,2个三角形只需要处理4个顶点。如果测试的时候大量使用这种方式,也可以提高三角形生成率的数值。

目前几乎左右的桌面GPU(nVIDIA,AMD)都是IMR架构,在移动领域,nVIDIA的GeForce ULP和Vivante的GC系列GPU都是属于IMR架构。IMR架构的GPU渲染完物体后,都会把结果写到系统内存中的帧缓存里,因此就可能出现GPU花了大量的时间渲染了一个被遮挡的看不见的物体,而最后这些结果在渲染完遮挡物后被覆盖,做了无用功。这个问题称之为Overdraw。虽然现代的IMR架构GPU在一定程度上可以避免这个问题,但要求应用程序将场景里的三角形按照严格的从前往后的顺序提交给GPU,要完全避免Overdraw还是很困难的。
对于Adreno和GC系列,无论何种选择何种精度,都会按照FP32精度进行计算。而Mali-400和Tegra的ULP GeForce的Pixel Shader部分不支持高精度,最高只支持中等的FP16精度。绝大部分游戏的Pixel Shader计算都采用中等(FP16)的精度,而Vertex Shader的计算一般是FP32的精度。


最后,GPU的跑分在一定程度上能反映GPU的实际性能,但最终在游戏中的表现还是很看厂商优化的。所以也不要一味的盯着跑分,多问问玩过的朋友,多看看实测,会更有帮助。
不过,新一代的Adreno 3xx,除去tiled渲染,也开始支持传统的渲染方式(IMR,见下)