在探讨一款CPU的游戏性能的时候,大多数人会习惯性的将关注的重点放在主频、核心数甚至是缓存,然而很少会有人去说架构本身对于游戏性能的影响。这一方面是因为主频、核心数量这样的参数比较直观,很容易用来玩“比大小”的游戏,另一方面,也是因为“架构”这个词有点看不见摸不着,作用也不太容易被人理解。
但实际上架构是对CPU游戏性能影响最大的因素,其重要性比主频、核心数量这样的物理参数更为突出。通常我们会将电脑比作人体,CPU就相当于人的大脑。其实如果我们把CPU看作人体的话,那么架构的地位也也是大脑,而主频、核心、缓存就仿佛是CPU的四肢和躯干,他们都要在架构的基础上才能发挥自身的作用。
游戏是最常见的复杂应用软件。当一个游戏在运行时,会涉及多个子系统的协同运作。例如游戏逻辑、图形、音频、操作输入、物理计算、AI运算、计算资源管理、内存管理、数据库等等。这些系统之间,有些系统可以并发运行,互相不依赖。但有些系统又是相互交叉,彼此依存的。如何协调管理这些系统线程的运行,就要依仗CPU架构的效率了。
举个最简单的例子:计算资源管理中的线程调度是CPU在运行游戏时需要负责的重要工作之一。简化一点说,这个工作就是给不同的核心分配工作任务。游戏中的指令有些是适合并行计算的,但也有些存在迭代逻辑关系,这样的指令单线程运算效率更高。假设有一个程序如下:
1+1=A
2+2=B
3+3=C,求A、B、C的值
很显然这样的程序每一行计算之间互不干扰,因此应该要分配给3个核心来并行计算,就可以在1个计算周期中同时得到3个结果。
但如果程序是这样的:
1+1=A
A+2=B
B+3=C,求A、B、C的值
此时每一行程序都需要上面行程序的运行结果,这样的程序如果还是分配给3个核心来做,就会导致每个环节都只有一个核心参与计算,两外两个核心只能空置来等待上一步计算的结果(此时这两个核心因为有指令进驻,因此并不能去执行其他计算工作)。再加上核心间的数据交换还需要通过共享缓存(通常是CPU中速度最慢的3级缓存),因此不仅造成了计算资源的浪费,还增加了计算步骤之间的延迟。整体的执行效率就远不如单线程了。
CPU在运行游戏中,就需要做大量的类似判定,并调度合适的计算资源来执行程序。如果架构本身不够先进,就容易出现调度错误,将适合并行计算的指令分配给了单独核心,又或者将多层逻辑指令分配给了多个核心。无论哪种情况,都会造成CPU运行游戏过程中出现“一核有难,多核围观”的窘境,从而导致游戏流畅性的降低。
因此,先进的架构才是CPU游戏性能出色的基础,在同一架构下,才有讨论主频高低、核心多寡的意义。如果架构本身的水平不在一个层面,那么更多的核心或更高的主频也并不能带来实际的效用,搞不好还会变成“一核有难,多核添乱”。