跳转到主要内容

E.5 案例研究:Sony PlayStation 2 的 Emotion Engine

桌面计算机和服务器依靠存储层次结构,降低相对静态数据的平均访问时间;但有些嵌入式应用中的数据往往是连续的数据流。在这类应用中,空间局部性仍然存在,时间局部性却有限得多。

为了从桌面系统之外的角度考察存储性能,本节介绍 Sony PlayStation 2 核心的微处理器。我们将看到,电子游戏持续不断的图形和音频数据流,使它采用了不同的存储设计方法:利用许多专用、独立的内存来提供高带宽。

图 E.11 给出了 Sony PlayStation 2(PS2)的框图。作为游戏机,它具有视频、声音和 DVD 播放器接口并不奇怪。令人意外的是,它还配有 USB 和 IEEE 1394 两种标准计算机 I/O 总线、便携式 PC 常见的 PCMCIA 插槽,以及调制解调器。这些附加功能表明,Sony 对 PS2 的设想并不限于传统游戏。I/O 处理器(IOP)看起来只是管理 I/O 设备和游戏机,实际上它还包含一个 34 MHz MIPS 处理器,用作运行早期 Sony PlayStation 游戏的仿真计算机。

它还连接到标准 PC 声卡,为游戏提供声音。

Sony PlayStation 2 框图
图 E.11

图 E.11 Sony PlayStation 2 的框图。 10 个 DMA 通道协调芯片上各个小型内存之间的数据传送;处理完成的数据最终都送往图形接口,再由 Graphics Synthesizer 渲染。Graphics Synthesizer 利用片上 DRAM 容纳完整的帧缓冲区,并配合图形处理器,根据 Emotion Engine 提供的显示命令执行所需的渲染。嵌入式 DRAM 支持像素处理器与显示缓冲区之间的 1024 位传送。

超标量 CPU 是双发射的 64 位 MIPS III,带有两路组相联的 16 KB 指令缓存、两路组相联的 8 KB 数据缓存,以及 16 KB 暂存存储器(scratchpad memory)。它还扩展了用于多媒体应用的 128 位 SIMD 指令,见 E.2 节。向量单元 0 主要作为 CPU 的类似 DSP 的协处理器(见 E.2 节),可在 128 位寄存器上执行 SIMD 运算,其中每个数据字的宽度可为 8 位至 32 位。它有 4 KB 指令内存和 4 KB 数据内存。向量单元 1 的功能与 VPU0 类似,但通常独立于 CPU 运行,并含有 16 KB 指令内存和 16 KB 数据内存。

这三个单元都能通过 128 位系统总线通信;此外,CPU 与 VPU0 之间有一条 128 位专用通路,VPU1 与图形接口之间也有一条 128 位专用通路。虽然 VPU0 和 VPU1 的微体系结构相同,内存大小及其直接连接单元的差异,决定了它们在游戏中的不同职责。采用 0.25 微米线宽时,Emotion Engine 芯片使用 1350 万个晶体管,面积为 225 mm²;Graphics Synthesizer 的面积为 279 mm²。作为比较,采用 0.25 微米工艺的 Alpha 21264 微处理器面积约为 160 mm²,使用 1500 万个晶体管。(本图依据〈Sony’s Emotionally Charged Chip〉中的图 1,Microprocessor Report,13:5。)

图中 Emotion Engine 内包括 300 MHz、支持 128 位 SIMD 的超标量 CPU 核、VPU0、VPU1、图形接口、内存控制器、10 通道 DMA、IPU(MPEG 译码器)和 I/O 接口,共享 128 位/150 MHz 总线。主存为 32 MB DRDRAM。Graphics Synthesizer 包括 16 个并行像素处理器(150 MHz)及 4 MB 多端口嵌入式 DRAM 视频内存;输出格式列为 NTSC、PAL、DTV、VESA。其他图内标识包括本地总线、48 通道声音芯片、I/O 电路和兼容 PlayStation 的 34 MHz MIPS CPU,接口与连接宽度、频率均保留在图中。

因此,这一嵌入式应用的存储系统面临的一个挑战,是充当大量 I/O 设备的数据源或目的地。PS2 设计者采用两个通道上的两颗 PC800(400 MHz)DRDRAM 芯片应对这一挑战,提供 32 MB 存储容量和 3.2 GB/s 峰值内存带宽。

图中其余主要部分,基本上就是两颗大芯片:Graphics Synthesizer 和 Emotion Engine。

Graphics Synthesizer 从 Emotion Engine 接收渲染命令,这些命令通常称为显示列表(display list)。它们由一系列 32 位命令组成,告诉渲染器使用什么形状、放在哪里,以及填充什么颜色和纹理。

这颗芯片还拥有存储系统中带宽最高的部分。Graphics Synthesizer 采用嵌入式 DRAM,在片内容纳整个视频缓冲区,并提供 2048 位宽的接口,使像素填充不会成为瓶颈。这种嵌入式 DRAM 大幅降低了对 DRDRAM 带宽的需求,体现了嵌入式应用中的一种常见技术:为各个功能配置专用的独立内存,以较低成本提高整个系统的内存带宽。

剩下的那颗大芯片是 Emotion Engine。它接收 IOP 的输入,并生成电子游戏的显示列表,以实现实时三维视频变换。Emotion Engine 的设计受到一个重要观察的启发:一般而言,在赛车游戏中,前景对象不断变化,而背景对象对事件的反应变化较少,尽管背景可能占屏幕的大部分。这个观察促成了职责划分。

CPU 将 VPU0 作为紧密耦合的协处理器使用:每条 VPU0 指令都是标准 MIPS 协处理器指令,地址由 MIPS CPU 产生。VPU0 被称为向量处理器,但它与一些桌面处理器中用于多媒体的 128 位 SIMD 扩展相似,见 E.2 节。

相比之下,VPU1 自行提取指令和数据,与 CPU/VPU0 并行工作,更像传统的向量单元。在这种划分下,更灵活的 CPU/VPU0 处理前景动作,VPU1 处理背景。两者都把生成的显示列表送入图形接口,再传往 Graphics Synthesizer。

因此,Emotion Engine 的程序员可以从三套处理资源中选择,来实现自己的程序:包含浮点单元的传统 64 位 MIPS 体系结构、带多媒体指令扩展的 MIPS 体系结构(VPU0),以及独立的向量处理器(VPU1)。为了加速 MPEG 译码,还有一个协处理器——图像处理单元(Image Processing Unit,IPU),它可以独立于另外两套资源运行。

采用这种功能划分之后,问题就是如何连接这些单元,如何让数据在单元之间流动,以及如何提供所有单元所需的内存带宽。前面已经提到,Emotion Engine 的设计者选择了许多专用内存。CPU 除了 16 KB 指令缓存和 8 KB 数据缓存,还配有 16 KB 暂存存储器(SPRAM)。VPU0 有 4 KB 指令内存和 4 KB 数据内存;VPU1 有 16 KB 指令内存和 16 KB 数据内存。注意,后面这四个是内存,并不是其他位置某个更大内存的缓存。每个内存的访问延迟都只有 1 个时钟周期。VPU1 的内存比 VPU0 大,因为它生成显示列表的主要部分,而且基本独立工作。

程序员把所有这些内存组织成两组双缓冲区,一组接收输入的 DMA 数据,一组存放输出的 DMA 数据。随后,程序员使用不同处理器,将输入缓冲区中的数据变换到输出缓冲区。为了让数据在单元间持续流动,程序员接着设置 10 个 DMA 通道,并注意满足实现逼真动画所需的每秒 15 帧实时截止期限。

图 E.12 表明,这种组织支持两种主要运行模式。串行模式中,CPU/VPU0 先对送给 VPU1 的内容进行预处理,以暂存存储器为缓冲区,再由 VPU1 为图形接口生成显示列表。并行模式中,CPU/VPU0 和 VPU1 都生成显示列表。显示列表和 Graphics Synthesizer 具有多个上下文标识符,用来区分并行生成的显示列表,最终产生协调一致的图像。

Emotion Engine 的所有单元都由一条公共的 150 MHz、128 位宽总线连接。为提供更大的带宽,还有两条专用总线:CPU 与 VPU0 之间的 128 位通路,以及 VPU1 与图形接口之间的 128 位通路。程序员在设置 DMA 通道时,也要选择使用哪条总线。

Emotion Engine 的串行和并行工作模式
图 E.12

图 E.12 使用 Emotion Engine 组织的两种模式。 原图注所说的第一种模式把工作分给两个单元,再由图形接口适当地合并显示列表;第二种模式把 CPU/VPU0 用作过滤器,决定将哪些内容送给 VPU1,再由后者生成全部显示列表。串行还是并行的数据流,由程序员选择。SPRAM 表示暂存存储器。图中 Main memory 为主存,Rendering engine 为渲染引擎。

译注: 图中的排列顺序为上方串行连接(Serial connection)、下方并行连接(Parallel connection);原图注“第一种”“第二种”的叙述顺序恰好相反,即先描述并行、后描述串行。

从总体上看,如果把这一问题交给面向服务器的设计者,设计结果可能是一条公共总线、许多本地缓存,以及保持数据一致的缓存一致性机制。而 PlayStation 2 遵循嵌入式设计传统,至少使用了九个不同的内存模块。为了让数据实时地从内存流向显示器,PS2 采用专用内存、专用总线和 DMA 通道。一致性由程序员负责;考虑到数据从主存到图形接口的连续流动以及实时要求,这种由程序员控制的一致性很适合该应用。