按知乎一贯的啰嗦风格,说说我个人关于所谓“性能”的一些想法。跟主题无关。

首先,GPU的性能这事本身就比较难界定。从工程师和社会闲杂人员(a.k.a. marketing)的不同角度,对GPU性能的取向可能就是不一样的。作为一个GPU工程师,我们可能关心的是GPU某一方面的吞吐量,比如triangle rate, fill rate, texturing rate,当然还有FLOPS。但是作为用户、评测人员或者市场人员,他们关注的点是“How damned fast can I play my game on it”。所以简单的讲“移动GPU和桌面GPU性能哪个好”,不同的人会给你不同答案,因为“性能好”在不同的人那里的定义是不一样的。

说到游戏性能 benchmark,则问题变得更复杂,因为游戏是运行在一个复杂的计算机系统上面,而不仅仅是一颗GPU。CPU的不同(比如ARM vs. X86)、OS的不同(比如Android vs. Win)、driver处理机制的不同(比如WDDM vs. LDM)、内存子系统的不同 ⋯⋯ 乃至API的不同(D3D vs OpenGL),都会导致最终游戏性能的差别。有时候这种差别是可以通过一些手段排除的,有时候则不能(比如OpenGL的应用往往切换状态比D3D要频繁,不知道为什么,可能OpenGL developer 的习惯做法与D3D developer有所不同)。

具体到游戏引擎上来,今天的移动游戏引擎技术,差不多要比PC游戏落后一到两个代际。这是软件的问题,而且我相信移动游戏会很快追赶上来,甚至超越也不一定。但是在当下,你就很难比较采用了不同复杂度设计的引擎产生的GPU workload。

然后,还有一个问题:即使是同一个架构的GPU(比如NVIDIA在Tegra K1里用的GPU和楼主问的GT650 都是Kepler架构,“几乎”一模一样),为了因应不同的市场和产品需求,你还是不能拿它们来直接比较:
第一,除了流处理器数目不同,K1 的GPU是连在整个SoC的memory controller上的,而GT650是自己的MC直接连显存。这个区别会直接影响内存访问的带宽和延迟。
第二,对同一个benchmark来说,在SKU不同的GPU上跑,会发生bottleneck shift。比如在core比较少的GPU上pixel shader是瓶颈,到了core比较多的GPU上可能就会变成内存是瓶颈。
第三,K1 的GPU时钟频率比较低,而GT650的时钟频率比较高。更重要的是,K1的各部分之间的时钟频率比,跟GT650是不一样的,所以即使是做clock for clock比较,也可能会有bottleneck shift。

最后,同一个benchmark,同一个系统,同一个GPU,在不同的分辨率和AA rate下跑,也会bottleneck shift。这就是为什么大部分评测都要标resolution 和 AA mode的原因。

总结:GPU性能评测是一个复杂的系统工程。不做具体的界定和calibration,泛泛的讨论“移动GPU和桌面GPU哪个性能好” 很难得到一个确定的、有建设性的结论。从最终用户关心的“我能不能流畅的玩游戏”到工程师关注的“这个GPU哪一部分的吞吐量是多少” 之间,有一个逐渐过渡,不断具体化,关注范围渐次收窄的过程。在这个过程中,具体数据可能并不具有确定的意义。我们更多应该关注数据变化的趋势和约束条件。“不服跑个分” 是无助于提高移动GPU的设计水平的。

— 完 —

本文作者:张岩

【知乎日报】
你都看到这啦,快来点我嘛 Σ(▼□▼メ)

此问题还有 6 个回答,查看全部。
延伸阅读:
CPU 和 GPU 的区别是什么?
摩托罗拉的 X8 处理器为什么宣传中说是 4 核 GPU?

分享到