距离上一次AMD能和Intel正面交锋已经过去了很多年。A饭们无不及其怀念EV6总线开创的K7时代、以及AMD64抢得微软新系统青睐,迫使Intel放弃推动IA64而从A手里取得转向x86-64授权的那段光辉岁月。
然而美好时光总是持续不了太长时间,随着Intel摆脱NetBurst带来的阴影开创Core纪元,A就再没能从I身上占到一分便宜,后来投靠ARM阵营也没有给自己带来好处,同时GPU部门也是颓势越来越明显,致使被NVIDIA按在地上摩擦相当长一段时间。
由此也就有了过去数年里,“幻灯片”厂的谐称——AMD依靠“PPT救国”的方针一直吊着A饭们那颗悬在半空中的心,这也让他们每次面对A的更新换代时,给出的支持言论多半都带着自嘲的性质。
但这一次,AMD好像真的让人看到了咸鱼翻身的希望。在本周进行的Hot Chips 2016芯片技术论坛期间,AMD对自家新微处理器架构Zen的大量细节披露,似有当年英雄回归的迹象。
那么,Zen究竟有了什么进步,能让AMD重新和Intel站在同一个竞技台上?
一剂强心针:微指令缓存
AMD对于下一代微处理器架构设计,选择了完全抛弃现有架构的做法,从一开始就设定好“高性能x86处理器”的目标,重新设计Zen的核心。
上一代架构,即推土机/挖掘机在实践检验里已经暴露出了不少缺陷,选择先破后立而不是查漏补缺,AMD的核心设计工程师们应该有着自己的考量。
从全新的核心架构里,有一处改变值得注意:AMD为Zen加入了微指令缓存。
微指令缓存在一个计算模块里的作用是让微指令更加接近微指令队列,避免核心去下级指令缓存里取指令而浪费额外时间,对提升整个核心的执行效率效果非常明显。
Intel很早就开始自己的CPU核心设计里加入微指令缓存,而且效果好到让他们持续这么干了好几代(考虑到Intel和AMD拉开差距的Conroe或直接得益于此),没道理不相信AMD的效仿会带来比较可观的正面效果,目前围绕在AMD Zen的微指令缓存上的疑问只是它的大小。
如果非要猜测一下,从典型的微指令缓存相对来说都比较小块,以及Intel的微指令缓存支持8路1536 uOps来看,AMD的这片缓冲区参数应该会和Intel持平,因为本来就没什么选择。
有了这个,AMD所宣称的Zen相较上一代核心有着至少40%的每时钟周期指令数(IPC)提升,可信度能增加不少。
当然,只有微指令缓存的加入,而缺乏数值上的提升会让40%显得有些苍白,AMD于是还把Zen的各项指标都放大了一圈:单次微指令调度数从4条增加到6条(而且4条整型和6条浮点微指令可以同时配发);整型/浮点指令调度器从48/60个增加至84/96个;L/S队列、以及打回队列都有着50%左右的长度增长。
按照理想情况,这些数值提升搭配更加准确的分支预测能让核心能以最快次序实现更高的吞吐量,并把这种高效率的持续时间维系得更久。
有了微指令缓存,AMD Zen应该说补上了一块核心短板,若没有这一步,挑战Intel可谓无从谈起。
再度重塑自信:缓存层级重构
Zen的缓存层级结构相比推土机,用脱胎换骨四个字来形容不过分。虽然AMD对于缓存延时以及带宽等数据避而不谈,但目前确信能够带来正面效果的改变的确存在。
首先是Zen给其内的每一个核心的32KB一级数据缓存从推土机的穿透式改成了回写式,不再把核心缓存的数据更新与CPU和内存的总线周期绑在一起,这样做可以维持住一级缓存爆发式写入的性能,而不用等速度更慢的内存在同一个总线周期内同步完缓存的数据。
而且根据Load操作比Store要频繁的统计,Zen的一级缓存把L/S单元非对称化,给了更多的Load通道。
回到总体上看,AMD把原来推土机的架构给全拆了,造了个新的CCX——一种把四个CPU核心、以及它们的一二级缓存都挂在三级缓存上的结构。
其中这块8MB大的三级缓存并不像我们常见的CPU下级缓存那样,根据CPU核心所需要的预取/请求指令收集数据。
它的角色是给被因为没及时执行,或是被回写命令标记无效而从一级和二级缓存里驱逐出来的指令提供临时住所,更像是一个难民营,因此它必定没有一二级缓存那么有效率。
不过因为Zen核心的8路二级缓存大到512KB,可在一定程度上补正这部分低效。
同时,由于不需要让难民缓存来存储二级缓存里的数据,它降低了缓存里的数据冗余程度来间接提升了缓存的利用效率,或者说缓存容量。
AMD在Zen里面采用的这种模块化设计也让新CPU有更好的产品线延展性,能使一套架构通吃从最节能的移动芯片到最火热的性能宠儿,避免出现像上一代那样的断层现象。
比如一个CCX,就做成一个给笔记本用的低能耗4核CPU,和Intel的移动i3/i5比试,到桌面上就把两个CCX拼起来合体成为8核Zen,正面挑战i7。
不过AMD没有明说的是CCX之间究竟是什么互连结构,而且他们否认了基于HyperTransport总线改进而来的猜测,但没给出具体的解答,留下一个让人浮想联翩的疑问。
一句话说,且不提AMD这次的缓存效率能不能像它所宣称的那样,一二级缓存吞吐量翻倍,三级缓存速度乘个5,至少在大小上,压过Intel现在的Skylake没问题。
三元方法论:真正的SMT
Intel对于同步多线程(SMT)的应用最早可追溯到2008年。把一个核心分身成两个线程是件困难的工作,光是给这两个线程交待怎么互相搞好关系,合理使用缓存和资源,不要独吞晾着对方……这些已经够那些工程师们喝一壶了。
也许AMD这么些年来一直没给自家CPU加入SMT能力,就是给这个难题挡住了路,明年应该能见到8核心/16线程的AMD CPU了吧。
从内部看,Zen核心的线程之间的调度主要还是遵循时分策略。
虽然考虑到不同线程可以有很多不同的占用特点,这并不是最佳方案,AMD还是靠自己的一套线程标记/判别方法论强行上。
在Zen里面干涉进程优先级通常有三种情况,一种是CPU会对每个线程的数据流进行分析,判断哪个在算法上优先级更高——在对应分支预测、整型/浮点重命名此类资源偏重型的工作时,线程据此调整优先级;另一种是在线程涉及TLB缓存和Load队列操作等延迟敏感型(反映到上层通常都是及时响应用户作出反馈)操作时,CPU就根据延时需求标记来分配线程处理的优先级;而像微指令队列这种按照顺序一路走下来的部分,CPU就会使用静态时分策略让线程交替处理。
至于其余的部分就简单粗暴得多,先到先得,哪个线程要更多对应的核心资源,哪个线程就会抢着先占用它们。
如果提高到从操作系统和应用软件的层级,以它们的视角观察看AMD的SMT,类似于Intel的超线程,每一个线程都被当作是核心对待,不会像推土机那样存在资源使用限制。
不知道AMD这次是不是从Intel的HyperThreading中得到启示,能不能青出于蓝,但可以确定,Zen浮点计算的性能相比上一代AMD CPU会得到不小提升。
制程工艺:又见FinFET
大家肯定听FinFET这个术语都听到耳朵起茧了,我们之前关于手机处理器芯片的讨论没少对这个技术作过介绍,所以此处我们长话短说。
功耗一直都是AMD设计自家CPU时习惯照顾的方面,实现100W以内的TDP不光是把门控时钟设置得更激进,Zen打算借助他们早些时候在Polaris GPU上已经实际检验过Global Foundries 14nm FinFET工艺。
而且AMD并不打算照搬GPU的方案,他们还要用密度优化过的这套工艺,毕竟需要控制DIE面积——这是AMD在这次Hot Chips上没有交待的事情。
如果现在的这套设计迫使他们使用500平方毫米的14nm DIE,那就和AMD一贯的价格策略背道而驰了,最终成品一定会贵上天。
不过考虑到Zen的诞生就一直伴随着目标调整,所以现在也很难确定,AMD的下一代CPU究竟能保持多少现在我们所看到的样子。
纸面上的40%,现实里的2%?
说了这么多,最终用户其实是很难被ppt所忽悠的,管你吹数字吹架构吹得天花乱坠,他们想要的无非两点:第一,要能以合适的价格买到;第二,用起来实际感受确实不慢。
AMD在Hot Chips 2016上有向与会者做过Blender跑分,3GHz的8核Zen和3GHz的8核Broadwell-E,在同样的多线程定制负载下,Zen能比Broadwell快2%。但更多的配置细节AMD没有透露,在背着“ppt崛起”的前科的时候,说话的选择只能谨慎谨慎再谨慎,打消公众怀疑不是件简单的事。
假如这一次AMD能成功在2017年第一季度批量出货Zen(实际上就现在这个时间来谈,已经是跳票了,原定是今年10月的),到时候消费者可能会先在品牌机里找到新CPU的身影。也许他们能够抓住这次杀回高端x86 CPU战场的机会,再度与Intel同台竞技,但至少要保证自己面对老对手的时候,手里有牌能打才行,可别再跳票了。