- 精华
- 0
- 帖子
- 56
- 威望
- 0 点
- 积分
- 46 点
- 种子
- 10 点
- 注册时间
- 2004-4-17
- 最后登录
- 2024-2-26
|
发表于 2004-5-5 20:01 · 江西
|
显示全部楼层
PS2的架构和PC完全不同, 根本不能用X86架构的标准来评定PS2的性能
Originally posted by henvelleng at 2004-5-5 06:26 PM:
说什么ps2的显示单元能和MX400相比?绝对是不可能的
PS2的设计从头到底都是失败,性能瓶颈到处都是,所谓的情感引擎基本上就是300MHZ的RISC架构CPU,无论音频还是无能的GS(Graphics Synthesizer)都要靠它,设 ...
PS2的架构和PC完全不同, 根本不能用X86架构的标准来评定PS2的性能
索尼把PS2的重点放在多边形的生成速率上,这是因为PS2主要的研发目的就是为了表现人物/角色的情感细节以及千军万马的大场面,当然光有强劲的多边形生成速率还是不够的,如何恰如其分地展示这一切也是非常关键的,这就涉及到AI以及物理运算的问题了,索尼为PS2选择Emotion Engine作为PS2的主运算引擎绝对是最明智的选择。
PS2系统主要由4个单元部件组成:Graphics Synthesizer(主要负责的是多边形渲染以及视频信号的输出)、Emotion engine(PS2中任务最繁杂的单元部件)、I/O Processor(IOP,输入/输出处理器,作用类似于PC芯片组中的ICH或者南桥)以及Sound Processor(声音处理器)。
IOP用于掌控周边设备(例如游戏手柄、DVD-ROM驱动器等)并且把侦测到的游戏手柄信号传到Emotion Engine。Emotion Engine根据这些信号在视频信号速率允许的范围内更新游戏程序内部的虚拟世界。许多物理程式被用于解决游戏世界里的角色行为。当这个行为判断下达了以后,被计算出来的对象位置就会依照观察者的视点(Viewpoint)进行变换(transformed),此时,Emotion Engine内就会生成绘制命令的顺序(或者说Display List)。当Graphics Synthesizer接受到这个Display List以后,就会在帧缓冲中绘制相关的三角形。接下来,帧缓冲的内容就会从数字信号转换为模拟信号,并且最终以视频的方式在TV屏幕上显示。
Emotion Engine包含了三个独立的处理器。第一个是以传统MIPS-III为基础、带有一个浮点单元的处理器。另外两个则是浮点向量处理器:VPU 0以及VPU 1。VPU 0主要专注于AI以及物理仿真等随机发生的运算,而VPU 1则完全是为了进行固定的几何操作(例如简单的4X4矩阵操作和透视纠正)。为了达到局部并行,每个VPU都具备SIMD-VLIW体系。此外,Emotion Engine还拥有一个IPU(Image Procssing Unit,图像处理单元)用于把保存在主内存的图像数据进行实时解压,你可以把它看作是一个MPEG-2解码加速器,当然,它还拥有一些其他功能。
Emotion Engine高度灵活性的组合:
设计Emotion Engine的Toshiba(日本东芝公司)并不认为采用3组传统用途的硬件(一个CPU以及两个向量处理单元)是分配任何所需作业的最好解决方案。取而代之的是,他们首先确定设备的任务,然后定制能够满足这些任务的设备,并且最终把它们组织到逻辑单元中。值得注意的是,它们是按其能力来搭配的:
1.CPU+FPU:基本程序控制、系统管理等
2.CPU+FPU+VPU0:行为以及情绪的合成、物理计算等
3.VPU1:纯几何计算,用于生成透过GIF发送到Graphics Synth的display list
4.IPU:影像解压缩
其中,最为特别的是第2组和第3组,它们都可以在同一时间生成发往GS的Display list。VPU1的功能类似于SH4里的VGE,不过VPU1的运算功能远比VGE强大的多。
Emotion Engine的CPU + FPU +VPU0组合方式在以前的任何游戏平台中都是从未出现过的(就我所知)。此时,FPU和VPU0是MIPS III CPU内核的协处理器(coprocessor)。这意味着,CPU、FPU、VPU0等构成了一个逻辑以及功能单元(或者组-team,即如你乐意的话)。其中,CPU是首要的,负责控制设备,而其他两个设备则是用于扩展其功能的。这个CPU/FPU/VPU0组有一系列共同的目标:情感合成(emotion synthesis)、物理现象模拟(physics)、行为仿真(behavior simulation)等等。
有两个重要的因素使它们可以结合在一起并且工作的非常协调。第一个原因就是它们彼此进行沟通的通道:VPU0和FPU都拥有其可以直接连接至CPU、独立的128bit协处理器总线(128-bit coprocessor bus)。有了这条通道,它们就无需在共享的主总线上谦让了。这条专属的128bit总线让CPU可以直接访问VPU0的寄存器,同时,也可以让VPU0将其所有的精力都用于担当其原来的角色-MIPS III的协处理器。另一个把CPU内核和VPU0绑接在一起的重要部件就是Scratch Pad RAM了。SPRAM是一个存在于CPU内的16KB大小、速度非常快的随机存储器,它的特别之处在于CPU和VPU0都可以使用存储其中的数据。SPRAM还(在数据透过内部的128bit总线传送之前)作为一个分阶段传送数据的区域。所以,SPRAM可以看为一个共享的工作空间。
Emotion Engine的VPU细节:
VPU0和VPU1都采用了同样的128位SIMD浮点单元体系,但是,它们的功能却不尽一样。VPU1在额外增加了一些可以有助于它进行几何处理的扩展功能;而VPU0则通常不会进行这些处理(VPU1则惯于此)。东芝这样的做法是为了使这些单元更容易制造(也就是说,VPU0比VPU1简单)。
VPU1拥有VPU0所不具备EFU,我们可以把这个EFP看作是用于协助VPU进行单FMAC运算的协处理器;除此以外,VPU1的cache容量也达到了VPU0的4倍。
注解:
FMACs:即Four floating-point multiply-adder-calculators(或者说Floating-Point Multiply-Accumulators),4浮点乘加混合运算器,这类运算器专注于这样的运算:x3 = x0*x1+x2。每个FMAC都可以在一个周期内完成这样的一条方程,如果有4个的单元,就意味着VPU可以在每个周期内完成4条这样的方程,例如:
x3 = x0 * x1 + x2
y3 = y0 * y1 + y2
z3 = z0 * z1 + z2
w3 = w0 * w1 + w2
这种方程组在电脑图形、物理仿真以及其他向量运算中经常出现。一个MAC通常运用于一个多样性向量的计算,其中,最常见的就是所谓的dot product。dot product包括了把一对向量要素的结果进行合计,这需要一系列的MAC去进行计算。整个Emotion Engine(包括VPU0中的4个、VPU1中的5个以及附属于CPU的 FPU中的1个)拥有总共10个FMACs(Floating-Point Multiply-Accumulators),每一个FMAC都能在一个周期里完成一个32位的浮点MAC。假如你对索尼在发布PS2时所宣称的不可思议的多边形能力感到惊讶的话,那么,现在你已经知道其背后的原因了:PS2能够非常、非常、非常快地进行很多的MAC操作。
PS2的缓冲、数据机制
无论从哪个角度来看,PS2的缓冲体系与我们平时经常接触的PC有很大的区别。
我们的PC在当初设计的时候,就是针对类似字处理、电子表格等这类静态的应用。但是随着近几年PC定位的改变,一些附加的独立型硬件3D加速器和声音处理器以附加卡的形式进入到PC系统中来。不过,这一切其实只是旧瓶新装而已,撰写《How Multimedia Workloads Will Change Processor Design》一文的作者Diefendorff(蒂芬多夫)和Dubey(度毕)指出,所有的媒体处理功能都将整合到同一个die(管芯,即将半导体大圆片分割而成的小片)中,而专用的DSP处理硬件终将被淘汰。PS2的Emotion Engine正是秉承这样的观念来设计的,这也恰恰给PS2带来了非常明显的好处:Emotion Engine内部的各部件之间拥有众多超宽的总线。
游戏开发人员在开发PS2软件的时候所要面对的最大障碍其实就是如何在系统中搬移数据。在以往,游戏开发人员都习惯于把整个模型或者整张材质一次过倒入到PC或者游戏平台的的处理器以及图形单元的显存中。而在PS2中,他们必须学会如何用持续不断的(流)方式把模型和材质下载到VU(向量单元)和处理器中。
当PC在渲染3D图形的时候,必须透过系统中的北桥芯片才能在主内存中进行大量的数据交换,而且各阶段的数据处理几乎都需要透过缓慢的外部总线(F**、M**、AGP)和主内存才能进行,为了减少处理器的等待时间,这种体系一般尽可能地减少数据的交换次数,模型数据和纹理数据都尽量一次过就载入到与处理器(CPU、GPU)尽可能接近的缓冲中(L1/L2 cache;显存),而这也正是为什么传统的3D处理体系(包括PC、DC以及绝大多数的3D平台)需要大容量缓冲的主要原因。许多游戏开发人员自投身到编程行列以来,都把3D显卡拥有大容量的显存作为模型和材质缓冲以及适当大小的L1、L2 cache来存放代码和数据视作理所当然的。
而在PS2中,担任北桥角色的单元就是Emotion Engine中的10个DMAC(DMA控制器),这个10通道的DMAC的作用是:维持透过Emotion Engine中众多128位和64位内部总线连接的单元之间的数据传输。除此以外,PS2还拥有两个128Mbit(即16MB)RDRAM Bank作为其主内存(总共32MB,每个RDRAM都透过一条16位的高速总线来连接到Emotion Engine中的DMAC。由于RDRAM是一个高带宽的内存解决方案,所以PS2的RDRAM完全可以喂饱10通道的DAMC(10通道意味着它可以应付10个同时进行的总线传输任务)以及Emotion Engine cache的肚皮。PS2的处理器-内存带宽是如此的巨大,快的足够让我们在任何时候都能以极快的速度下载、保存所需要的任何数据。正是因为这样,在PS2中,指令代码和数据必须以持续不断的"流"在Emotion Engine中的内部总线进行传递。
作为最终图形生成的PS2渲染引擎Graphics Synthesizer在此也跟Emotion EnginE类似,秉承了PS2的设计精髓--超高的内部带宽以及小容量缓冲体系。Graphics Synthesizer内部的4MB eDRAM与图形内核之间拥有2560bit的总线--读取(帧缓冲+Z-缓冲):1024bit;写入(帧缓冲+Z-缓冲):1024bit;材质高速缓冲(texture cache,纯读取):512bit。4MB的显示缓冲相对于PC(动辄16、32MB)甚至DC(8MB)来说,其容量都显得非常的少。然而,当我们细心比较PS2的缓冲体制与传统缓冲体制在带宽上的不同时,就会发现PS2的设计精妙所在:
从这个表我们可以看出,PS2的显存带宽是GeForce2 GTS的9倍左右以及DC的60倍。除此以外,GS的外部总线连接也非常的奇特。在PC中,显卡大都透过AGP总线-北桥后才连接到系统主内存,而CPU和GPU的数据交换也必须是在主内存上(如果是FastWrite模式的话,CPU的确可以直接透过北桥连接到GPU,但是目前的来看这种模式似乎还不适用于当前的PC环境)。而在PS2中,GS是直接与Emotion Engine连接的,两者间的总线是64位X150MHz=1.2GB/s。把材质数据以流(stream)的方式源源不断地送入GS的4MB Edram,将是所有PS2软件设计师都必须逾越的障碍。由于PS2的多边形生成速率非常的高(在使用比三角形更高级的48像素四方形面片+Z运算+阿尔法混合+贴图的真实渲染环境下,可以达到每秒生成2500万多边形,),PS2开发人员解决贴图缓冲不够的最好办法就是把高分辨率的材质拆细后再传输到GS的纹理超高速缓冲中。
在传统的体系(SISD,单指令流单数据流)中,每条指令只能对一条数据串进行操作,在3D游戏之类的多媒体类动态应用中,这种体制会导致处理器长期处于数据饥渴状态;而在PS2的体系(或者说SIMD,单指令流多数据流)中,一条指令(流)可以同时对多条数据流进行操作。除此以外,PS2的两个向量单元还采用了VLIW(very long instruction word,超长指令字)。这意味着,VPU发出的display list可以是一条很长的指令序列,综合SIMD的特点,这条长指令将可以携带多条超长的数据流(这些数据流包括了材质、顶点坐标以及其他高频调用的"原料")。只要开发人员充分吃透PS2的内部数据通信原理和SIMD、VLIW等重要的东东,并且在引擎中大量使用,就可以把PS2高带宽的特点完全挖掘出来。那么GS看似容量较少的4MB Edram显存完全可以实现有大量材质、而帧速率又非常高的3D游戏画面。 |
|