首先是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会得到不小提升。
(责任编辑:本港台直播) |