Cell 架构为什么难模拟?一个主核加八个协核的恩怨
PS1、PS2 的模拟器早在 2000 年代就成型了,PS3 的模拟器却迟到了十几年。原因不在游戏多、画质高,而在那颗叫做 Cell Broadband Engine 的处理器——索尼、东芝与 IBM 联合设计的一块「异形」芯片。
Cell 到底长什么样
- 1 个 PPU(PowerPC 处理单元):主核,负责跑操作系统和游戏的主逻辑,是一颗常规的通用处理器。
- 8 个 SPU(协同处理单元):协核,每个都有自己的一小块高速本地内存,不能直接访问主内存。其中 1 个被系统占用,游戏实际能用 7 个。
游戏公司当年写代码时,必须手工把物理模拟、音频解码、贴图处理这类任务拆给各个 SPU 并行跑。也就是说,一个游戏 = 一份为 1+7 核心定制编写的并行程序。
为什么这套结构特别难翻译
普通模拟器做的是「一对一翻译」:把老机器的指令翻译成你电脑的指令。但 Cell 的并行模型在 PC 上没有对应物——你的电脑没有「带私有内存、要靠手工调度」的协核。模拟器必须同时做两件事:
- 把 PPU 和 7 个 SPU 的指令各自翻译成 x86-64(或 ARM64)指令;
- 忠实重现 8 个核心之间精确的同步时序——错一点,游戏就死锁或者画面撕裂。
这也解释了本站后面所有设置页的思路来源:
- 为什么吃单核性能:翻译和同步本身就是重活,时钟频率和每时钟指令数比核心数量更管用。
- 为什么有 PPU / SPU 两个解码器开关:两种核心是两套独立的翻译器,各有解释执行与重编译两种路线(详见 PPU 解码器一页)。
- 为什么第一次启动特别慢:重编译器要把游戏的机器码提前编译成缓存,游戏越大编译越久。
一句话记住它
PS3 游戏是一份为「一主七协」手工优化的并行程序,模拟器要在你的电脑上凭空造出这套并行环境,再让游戏以为自己还在原机上跑。想明白这一点,后面每一个设置决策都不再神秘。
相关阅读:PPU 解码器怎么选 · SPU 解码器与线程偏好 · 性能预期