这篇是把一个自研引擎项目往 PS3 上做 SPU 多线程移植时整理的笔记,从最底层的 DMA 讲起,一路到 Cell 的处理器架构、SPU 的组成,最后落到 SPURS 运行时怎么把任务派到协处理器上跑。
先搞懂 DMA
要理解 Cell 为什么长成那样,得先从数据怎么在内存和外设之间搬讲起。
最原始:编程 I/O(Programmable I/O)。 只有一个主控——处理器。外设和内存的每一次交互都要过处理器:处理器先把内存数据读进寄存器,再用总线写到外设。问题很明显——每次读写都吃机器周期,数据量一大,效率就塌了。