二、通俗易懂的PS4架构讲解
(L0)
请大家先看看两张简图,有个大致的印象:
图一、PC架构简化图

图二、PS4架构简化图

首先,字迹很难看,这是第一印象。
其次,PC的图似乎比较复杂,PS4的图似乎比较简单。
我并没有故意把PC搞复杂。事实上,两张图我都花了很长的时间来构思,力求做到完全正确,并且最简化。PC这张图,我真的不能再简化了。同时,这张图也可以用于不同时代的PC。不管是90年代以前的PC,还是今天的PC,这张图都是准确的。
然后,最关键的,PS4从处理器通向内存的方式,看起来比较方便。
这个印象是不是准确呢?我们先从PC说起。
PC处理器访问存储器有4种情况:
1.CPU访问内存,直接访问。典型的情景:算AI,算物理
2.GPU访问显存,直接访问。典型的情景:渲染3D图像
3.CPU访问显存,通过映射PCI-E Bus。典型的情景:粒子系统
4.GPU访问内存,通过PCI-E Bus请求CPU访问。典型的情景:GPU获取渲染用的数学参数,例如变换矩阵(Transformation Matrix)
第三、四种情况是PC相对于PS4和Xbox One的主要劣势。而我们也看到,偏偏这些情形也很重要。
(L1)
以第四种情况为例,PC的GPU访问内存为例,有三个步骤:
1.GPU通过PCI-E Bus把访问请求放到系统总线上

2.CPU从系统总线获得请求,通过内存总线访问内存

3.数据通过DMA到达GPU。

(L0)
而同样的访问,PS4则可以在没时间解释的情况下,一步上车,直接访问。[s:doge]
参考上面的PS4架构简化图,我们可以看到,PS4并没有区分CPU专属的内存和GPU专属的显存,它们是共享同一块存储器的。
(L1)
回顾三年前第一期的内容,这种统一内存架构,最早用于N64,后来用于Xbox 360,PS4和Xbox One。
(L0)
因此,PS4访问存储器只有两种情形:
1. CPU访问,直接访问。
2. GPU访问,直接访问。
其中,GPU访问不仅可以一步上车,而且上了车之后,还提供洋葱口味(Onion Bus)和大蒜口味(Garlic Bus)两种套餐供君选择。
(L1)
大家是不是曾经在PS4的新闻里,听过洋葱总线(Onion Bus)和大蒜总线(Garlic Bus)之类的词?有没有感到疑惑?
不要紧,看了下图就懂了:

图中红色线就是Onion Bus,蓝色线就是Garlic Bus。它们是GPU访问存储器用的。
看图就知道,Garlic Bus是绕过CPU缓存的超高带宽的Bus,是GPU渲染用的。而Onion Bus更适合用来访问CPU和GPU共享的数据,包括变换矩阵,Shader参数,光照信息等等。
另外,PS4还有一条叫做Onion+的Bus,而Xbox One则没有的。它虽然有被泄露过,但是细节似乎没有被泄露,因此我就跳过了。
(L0)
虽然有点不可思议,但我相信你已经理解了PS4的架构。就是这么简单。
我们来总结一下PS4(以及Xbox One)架构的优势,也就是PC较为不足的地方:
1. PC的显卡,跟网卡、硬盘、USB是同级别的,它们的数据传输最终都会共享同一块电路(I/O桥)。
2. PC部分类型的数据访问更繁琐,因此会慢很多倍。
3. PS4游戏有更多的Bus选择,可以根据游戏的实际情况作出最优的选择。而PC游戏的数据存取方式,则完全取决于Directx(或OpenGL)、以及显卡驱动程序。
很多版本的显卡驱动程序,都是针对某一个游戏的数据存取进行优化的。这样做的问题很明显,优化了某个游戏,别的游戏会变慢。
顺便一提,PS3的架构更接近上面的PC图。虽然这听起来很不可思议,但这是真的。虽然也有明显的区别,例如SPU等等,但是它确实更接近PC那张图。
PS3和Xbox 360互有优劣,但是PS3相对于Xbox 360的劣势之一,也是内存访问比较繁琐。(这将会是《主机游戏技术普及》第四期的内容。)
这也是PS3游戏的优化重点,而且是重中之重。正因为如此,索尼的第一方工作室都掌握了很高的面向数据(Data-Oriented Design)的优化技巧。
这些经验,对PS4和Xbox One的战局起到了关键性的作用。(这一点我也早在微博里提到了。)
下一次,我们会直接比较一下PS4和Xbox One。