现在有大量的预测与证据说明更快的memory速度提高了Ryzen的游戏性能。这个理论基于AMD的Infinity Fabric 与内存时钟频率绑定。并且我们的一些针对性的测试也证实了这一点。
Zen架构又一次使用了四核CCX(CPU Complex)模块。AMD为每个CCX提供了16路组相连8M的L3Cache。8M的cache被分为4个slice,每个core访问L3的延迟是相通的。两个CCX在一起就形成了8核Ryzen 7的die。CCX通过AMD的Infinity Fabric互联。多个CCX也共享内存控制器。Infinity Fabric就是两个4核CPU互联的专门的通道,其具有256bit,双向crossbar,因此也可以处理北桥和PCIe的访问。大量的数据会流经这个通路,因此需要良好的调度已提供性能。逻辑上,如果是6核或者4核使用Infinity Fabiric,也会因为更少的跨CCX的访问而提高性能。
在CCX之间移动数据会导致高延迟,因此应当尽量避免这样的访问。但是多线程可能会导致数据在CCXes之间迁移,进而导致在本地CCX的L3 cache上miss。线程也可能会依赖于在CCX上运行的其他的线程的数据,这也会增加延迟,降低总体性能。
Intel则采用了双路ring bus,也是起到相同的作用。但是凭借它的连续性的设计和dual independent ring 在core之间的通信并不会有类似的延迟代价。尽管AMD没有证实,但是我们相信Infinity Fabric是单通道的。
AMD的Infinity Fabric是其公司的一个核心策略优势,因为它推出了每个package 上4个CCX的32-core Naples 处理器。这个互联比Intel的ring bus 更加易于拓展。因为Intel的ring bus在增加更多的核心的时候会增加延迟。Intel的设计可能从scaling out的角度看受限,但是intel在Knight Landing架构开始使用mesh拓扑连接以解决该问题。我们怀疑我们将会在intel的下一代的gen桌面架构也会看到mesh 总线。
Putting Numbers to Theory
准确的测量总线延迟是很困难的。幸运的是,SiSoftware最近引进了Sandra Business Platinum,其包括超大处理器的多核有效性测试,可以通过多线程,多核,单线程测量inter-core,inter-module,和inter-package三个级别的测试。我们采用了多线程中的最佳匹配设置进行测试。
首先我们测试了Intel’s Hyper-Threaded Core i7-7700k的核间的延迟作为AMD SMT Ryzen 处理器的基准。惊讶的是intel的延迟在不同的运行程序间基本一致,但是Ryzen CPU的延迟却会变化。
核内的测试会负责得到在同一个物理核心上线程间的延迟,核间的测试会反映出不同物理核心的线程间的延迟。正如我们看到的,在我们增加memory频率的时候,Core i7也会轻微的增加延迟,但是也只是在4%的范围内。这也部分解释了为什么超频memory在Intel的CPU上没有产生大量的性能提升。
在将CPU的频率增加到5GHz后,我们看到核间和核内延迟的明显的降低。
在Ryzen 5 1600X上的测试则显示了更多而运行间的差异,这些数字是两组测试的均值。Inter-Core延迟测量了同一个物理核心上的不同的逻辑线程,它们不受memory speed的影响。Inter-CCX测试为相同CCX但是不是同一个核心上的线程间的延迟。尽管有轻微的差异,但是基本上也不受memoru speed的影响。
Cross-CCX 跨CCX的访问测量了不同的CCXes之间的延迟。正如我们所看到的,通过Infinity Fabric访问会有较大的延迟代价。提高memory的速度可以减低延迟,尽管不呈线型比例。
在跨CCX的访问中,将data的频率从1333提高到2666MT/s可以获得46%的性能提升。然而在提高20%到3200MT/s只能再增长4%。并且,我们测试了4G超频相对于3.7G,latency基本上没有变化。
此外我们也测试了核内带宽。随着data size的增加,一开始只访问L1,随后的测试访问L2和L3,最后访问内存。