三、PS4和Xbox One的终极决战(附PS3讲解)
(L0)
大战在即,我们先来看一下PS3。我自有道理。
大家一定或多或少的听说过,PS3使用了CELL处理器,CELL处理器有一个PPU(主处理器)和很多的SPU(特别处理器)。
大家也都知道,PS3游戏的优化很依赖SPU的利用。摩托风暴,神海2,战神3都是典型的例子,SPU可以用来运算各种各样的不同任务。
而将SPU利用好,却并不简单。
(L1)
要让SPU计算一项任务,首先要把数据从内存复制到SPU的本地的存储器(Local Store,256KiB大小),然后SPU计算好结果,再把结果复制到内存。
每次的复制都类似于PC的GPU访问内存的三步走,请参考前一讲的三步图解。
值得一提的是,SPU的本地存储器性能非常高,大致相当于CPU的L1缓存。
我在微博上多次发文说过,现代的程序(包括游戏)的瓶颈多半不是在计算。
强劲的处理器会浪费大量的时间等待数据。SPU配合性能极高的本地存储器,它的处理数据的能力就很强劲了。
(L0)
但是,要让SPU发挥出它的性能并不容易。我们必须把任务数据分割成SPU能够处理的程度。
SPU就好像实力强劲的大胃王。想要把食物都吃完,也必须一口一口的来。
想要把数据分割、整理成适合SPU处理的模式,我们需要一个叫做Data-Oriented Design(数据导向的设计)的技术思维,而并非传统的、每个老师在每个大学里传授的Object-Oriented(物件导向)的思维。
(L2)
DOD的话题非常专业,也非常重要,我会在微薄上持续讨论。欢迎同行们一起切磋指正。
(L0)
数据导向的思维对全平台的游戏都有重要的意义,无论是主机,PC,移动设备,它都是可以大幅度提升游戏的性能。
它不仅可以用来利用好SPU的机能,也可以用来更充分的利用任何CPU的缓存,从而利用好任何CPU的计算能力。
但是,当年最重视数据导向思维的人是谁呢?
当然是PS3的开发者。你假如不会,你就没法利用SPU,你就浪费了PS3的性能,浪费了CELL的性能。
正因为如此,这种针对存储系统的优化思维,索尼的第一方工作室掌握的更早,也更广泛。
虽然微软的光环系列有用DOD的传统(最早可考的时间点是2004年的光环2),但是仅Bungie一家工作室而已。这也是光环2技术领先的原因之一,当年的三方大战、惊人的AI都是以这种技术为支撑的。
索尼这边则是全面开花,顽皮狗、圣莫妮卡、Evolution等等,没有例外。但凡是能够利用好SPU的工作室,一定掌握了针对存储系统的优化技术。
神海2的技术为什么厉害?因为它利用了更多的SPU机能。怎么利用SPU机能呢?只能从数据下手。
这种软件方面的优势,一直保存到今天的PS4和Xbox One的时代。
#####################
我们先来看一下两台主机的区别。
图一、PS4架构简化图

图二、Xbox One架构简化图

我们可以直观的看出两个区别:
a. PS4使用了GDDR5 SDRAM内存,Xbox One使用了GDDR3(民间有时误称为DDR3) SDRAM内存
(更正:以上一行错误,Xbox One使用的是DDR3 SDRAM内存。错误的来源是一个权威来源,因此我认为能够独立思考、不畏权威的听众很珍贵,感谢你们)
b. Xbox One独有eSRAM(32MiB大小)
另外有一些图中未标出的区别:
c. Xbox One的CPU主频是1.75GHz,而PS4是1.6GHz。Xbox One大约是PS4的1.1倍。
d. Xbox One的GPU的并行处理单元(Parallel Stream Processors)是768个,而PS4是1152个。Xbox One大约是PS4的三分之二。
e. Xbox One的GPU主频是853MHz,而PS4是800MHz。Xbox One大约是PS4的1.07倍。
f. 根据Ice Team的数据,Xbox One的CPU往来内存带宽的理论峰值是30GiB/s,而PS4是20GiB/s。Xbox One大约是PS4的1.5倍。
看起来,Xbox One似乎是在多方面完胜的。但是,感觉是不是可靠呢?
我们来讲解一下上面的事实。
1. CPU的比较
根据c项,Xbox One主频更高,因此处理性能更高。
根据a项,GDDR3内存对CPU的延迟更低,因此Xbox One的CPU性能比较不容易因为数据的存取而浪费。
根据f项,因为Xbox One的CPU往来内存带宽的理论峰值更高,因此Xbox One的CPU性能比较不容易因为大量数据的存取而浪费。
结论:Xbox One胜出
2. GPU的比较
根据d项,Xbox One的GPU处理性能更弱。
根据e项,上面的差距会被扳回一点。
根据a项,GDDR3内存往来GPU的带宽不如GDDR5内存,因此Xbox One的GPU更容易因为大量数据的读取而浪费。
根据b项,eSRAM的存在可以挽回上一项目的差距。
(L1)
eSRAM是一种SRAM。SDRAM是一种DRAM。
SRAM的性能比DRAM高很多。CPU和GPU的缓存都是SRAM,而内存则是SDRAM。
eSRAM的性能是可以跟处理器缓存媲美的。
(L0)
结论:PS4胜出
3. 内存系统的比较
内存系统至关重要,但是内存系统本身不会对性能产生影响。它只会影响处理器的性能。
根据b项和f项,
结论:Xbox One胜出
2比1,我是不是可以宣布Xbox One胜出了呢?
不是的,这里有一个问题:PS4的GPU领先的太多,基本没法挽回,原因有几个:
1. Xbox One的CPU性能是PS4的1.1倍,但是GPU却只有PS4的三分之二的计算能力。虽然Xbox One的CPU往来内存的带宽峰值很高,但是这不会影响到多数时间的CPU性能。
2. CPU的性能只能决定游戏帧数,而GPU的性能却更可以左右游戏的分辨率。如果GPU的计算能力比较弱,为了保证每秒更新足够多的次数,游戏就只能运算更少的像素,也就是说分辨率会比较低。
3. GPU计算能力的落后,很难通过软件优化来弥补。
有的同学肯定要说了:欧夏普你个片子!你不是说现代的程序都是内存拖处理器后腿吗?为什么现在就开始强调绝对的运算能力了?
如果你真的想质问我,证明你的思路完全正确。我本来就不提倡绝对的运算能力的比较。
处理器浪费大量的时间,来等待数据的存取,这是完全成立的趋势。而且,今后这个趋势只会越来越明显。
正因为这个趋势,我们才需要数据导向(Data-Oriented)的技术思维,来提升处理器的运行效率。
应用到CPU这边,就是需要改良游戏引擎,改程序。
应用到GPU这边,就是需要通过离线工具,让GPU所需要的数据能被GPU更方便的获取。
大家看出区别了吗?
回顾最之前的内容,一个游戏团队里面的程序员分两种,一种负责写实时的游戏程序,一种负责写离线的工具程序。
要使用数据导向的思维来优化一个游戏,使得CPU运行效率变高,非常难。不仅游戏和游戏之间差异巨大,无法使用统一的方法,而且每一个子系统都要改良才能发挥出明显的效果,工程量巨大。
要使用数据导向的思维来优化GPU数据,使得GPU运行效率变高,这就比较简单了。有现成的算法可供离线工具使用,你有我也有。
我们甚至可以说,GPU的运行方式是天然的数据导向思维,因为一切运算都是大批量的数据运算,非常有利于缓存发挥作用。
而CPU方面想到达到这样的效率,需要程序员的大量经验和不懈努力。
谁最有这种经验?
大家回去看一下PS3的解说,就能想起来了:索尼的第一方工作室最有经验。都是PS3逼的~
最后,我们来总结并实践一下。
问题1:为什么PS4游戏的分辨率会更高?
因为PS4的GPU运算能力更强。
问题2:为什么有些PS4游戏的帧数也更稳定?
情形一、当GPU是瓶颈的情况下,GPU决定帧数。
情形二、当CPU是瓶颈的情况下,索尼的工作室比较有优化经验。PS4在系统层面上也比较优化。
谢谢大家的观赏,今天就讲到这里。
我非常欣赏Xbox One的设计思路,尤其是重视内存系统的思路,它非常符合现代程序的趋势。
但是人算不如天算,它还是惜败了。
继续征求话题中。