如何在PS3上为Cell处理器编程与在普通桌面上找到的任何其他处理器的编程不同?
使用什么样的编程范例,技术和实践来充分利用Cell Processors的潜力?
我听到的有关PS3开发的所有文章都在讨论"学习如何在Cell处理器上编程".除了挥手之外,这究竟意味着什么?
除了George提到的所有内容之外,SPU更好地被认为是流式矢量处理器.当你有一个算法可以处理长序列的数值数据时,它们效果最好,这些算法可以通过DMA通过SPU的有限内存提供,而不是让SPU加载一块内存,尝试对其进行操作,发现它需要跟随指针指向其内存之外的某个地方,加载它,继续前进,找到另一个,依此类推.
因此,为它们编程并不是简单的并发和线程模型; 它更像是高性能数值或科学计算.它也是非均匀的内存访问.
此外,每个处理器都有深度流水线,因此程序员必须更加了解数据危害和指令气泡以及我们被告知编译器"应该"为我们处理的所有众多微优化(但是它确实没有).诸如错误预测的分支,加载命中存储,缓存未命中等等的事情比在无序处理器上造成的损害要大得多,这些处理器可以兼顾操作顺序以隐藏这种延迟.
有关具体示例,请查看Mike Acton的CellPerformance博客.迈克是我最喜欢的老式学校集会 - 这个行业中很快乐的表现,他真的在这个问题上获得了好成绩.
PS3的Cell部分由6个SPU处理器组成.它们每个都有256 KB的非共享内存,并通过高速环连接,允许相互之间的DMA和PowerPC主机处理器.它们不是流水线或缓存的.这使得它与具有共享内存,流水线和缓存的多核x86完全不同.此外,SPU处理器不使用与PowerPC相同的指令集,因此您在那里有一些不对称性.
简而言之,您的典型共享内存,多线程程序不会在没有一些工作的情况下直接进入Cell(需要注意的是计算机科学努力使不同的机器看起来是相同的,因此一些实现者努力使该过程自动化) .
在高级别,程序将需要分解为符合Cell的硬内存限制的任务.这些可以并行运行,并且每个子任务可以按顺序排列到可用的Cell处理器.在较低的层次上,编译器(或汇编程序员)需要更加努力地生成在处理器上快速运行的代码 - 没有运行时的技巧可以使事情变得更快.理论上,那些程序员/编译器友好的功能需要花费更多的硅和速度,可以更好地为您提供更多更快的SPU.当然,你没有在PS3上获得更多的SPU,但在一般情况下,你将获得更多的SPU芯片上可用的SPU数量.