本系列已经进行到第四篇。上篇写了缓存问题,造成的锐龙123代单核性能的拉胯。其实,不仅是因为模块化造成的三级缓存不够,还有个问题是内存调度。比如还是这个辣鸡中的辣鸡1700X吧,你压根无法做到两个模块同时可以对接内存条,因为无法优化。

打开网易新闻 查看精彩图片

其实,还有个重要问题。以windows来说,甚至包括windows server这种服务器系统,它的文件结构是文件夹,因为用户习惯,你找东西永远是先从文件夹慢慢查,win的整体寻址也是如此,甚至包括CPU调度。每个文件夹里都有下面文件的文件头地址,你要找就要先从文件及开始,一层层查。锐龙123代的cpu也是类似。有些服务器系统不是这样,锐龙就有了优势。

打开网易新闻 查看精彩图片

因为AMD为了省钱,搞模块化,每个模块都是4核心,每个核心都是CPU0开始到CPU3。那你调度第二个核心的地址就是 模块2.CPU0,每次寻址都要先从模块开始,多了几层中介,这就有了延迟。但是,如果你给的地址默认就是CPU0,那指定第一个模块做默认就好了,只要速度匹配。指定第二个模块默认CPU0,速度有延迟就影响性能。这个是AMD模块化完全无法避免的问题。

再来说下模块化的缓存问题。三级缓存是CPU内部的缓存里可以堆很大的活跃内存。三缓大,CPU能调用的后备数据库就大。如果是内存条那就不行了,太远了,读一次内存条要经过主板,接口,操作系统调用,一层层下来中介雁过拔毛,延迟大速度慢。一级缓存二级缓存也不能做大,因为大了单个CPU核的面积就大,浪费钱。内存的模型说了很多次了,比如这个内存金字塔结构,就很直观不是。

打开网易新闻 查看精彩图片

英特尔不这么搞。英特尔一直坚持环形总线结构,所有核心共享所有三级缓存。核心越多单核心能使用的三级缓存越大,单核心就越强,但是英特尔多核心堆不起来。相比之下,AMD模块化的弊端曝露无疑,单核心跟延迟一直是问题,AMD就长期只宣传多线性性能,也是田忌赛马的一个策略。

打开网易新闻 查看精彩图片

如何让单核心性能增加,AMD其实是有策略的。不过碍于GF工厂的工艺问题,拖到台积电7nm工艺成型,AMD才拿出来了解决方案——就是5000系锐龙每个模块8核,单核心需要的三级缓存容量翻倍,并且8核心内部几乎无延迟。对于目前绝大多数4核8线优化,加上少数6核12线程优化的程序软件来说,AMD的这8核一个模块,就够用了,绰绰有余。比如下图,四周的8个就是CPU核,中间的黑色方块就是三级缓存。

打开网易新闻 查看精彩图片

对于游戏来说,优化不像软件。游戏是对延迟异常敏感的类型,你从按下按键,到屏幕有反应,一般都是在100多毫秒之内的。并且游戏对帧数有要求,也要及时响应。就算每秒钟刷新30帧的游戏,它的按键响应就是33毫秒,有反应后再刷新在屏幕上,最多100多毫秒。每秒钟刷新60帧,按键响应就是17毫秒,屏幕刷新出来就是90多毫秒。144帧游戏按键响应8毫秒,屏幕刷新出来是70多毫秒。反正以此类推,帧数越高,它响应速度就快,有些人一直追求电竞帧数,其实是有道理的。但是注意,帧数从30提高到144,接近5倍,然而延迟只减少了2倍。说明游戏延迟的降低不是线性的。帧数提高了,AMD一直在游戏最低帧跟平均帧劣势大,就是模块化的缺陷。英特尔也一直拿游戏性能来推销酷睿。游戏的处理周期是非常漫长的事情。

打开网易新闻 查看精彩图片

像普通的编译器之类,都是点击编译之后CPU才开始干活。播放器之类,都是一次刷新十几帧几十帧的指令刷新频率低。而CAD绘图这种,甚至会有先绘图确认后再调用CPU的情况出现,你看到的屏幕显示跟软件的计算并不同步。为了兼容性,游戏软件的优化跟普通软件就不一样了。游戏软件的指令传输是,小分块+高速刷新,比如一次64K但是一秒钟刷新100个周期。那三级缓存的重要性就出来了。三级缓存大,CPU可以一次读10个周期依次扔给CPU降低延迟,三级缓存小,一次读1个周期,延迟就高一些。

降低延迟的好处是啥?那就以锁帧后的游戏帧数做例子。如下图,是PS5/XSX/XSS三台机器的帧数跟帧生成时间的测试,来自数毛社。30帧游戏是33.3毫秒按键延迟,60帧是16.7毫秒。

打开网易新闻 查看精彩图片

zen3的到来改变了英特尔游戏性独霸的历史。比如5800X,8核心都集中在一起,共享三级缓存,就有了不输英特尔酷睿的游戏性能。但是锐龙还是有英特尔无法做到的劣势,就是手工优化。AMD过分依赖软件生成,英特尔有充足的人力优化芯片结构,还有跟芯片相关的软件优化,再加上英特尔还有钞能力,很多游戏的自持也是以英特尔为模板优化PC端,amd以兼容的身份运行,效率就稍微低些。

开个脑洞,AMD如果把三级缓存增加几倍,会不会有游戏性能的进步?

打开网易新闻 查看精彩图片

不过12代酷睿出现后,这个情况就有变化。12代酷睿的单核性能一骑绝尘,AMD就必须想办法了。AMD给的方案有点粗暴:增加三级缓存。那下一期就是最后一期,讲5800X3D的缓存问题,优缺点都说清楚,认识Vcache,什么是3D堆叠。本期结束。