AMD|说人话系列:锐龙5系跟5800X3D解析(4)AMD缓存跟单核进化

AMD|说人话系列:锐龙5系跟5800X3D解析(4)AMD缓存跟单核进化

文章图片

AMD|说人话系列:锐龙5系跟5800X3D解析(4)AMD缓存跟单核进化

文章图片

AMD|说人话系列:锐龙5系跟5800X3D解析(4)AMD缓存跟单核进化

文章图片

AMD|说人话系列:锐龙5系跟5800X3D解析(4)AMD缓存跟单核进化

文章图片


本系列已经进行到第四篇 。 上篇写了缓存问题 , 造成的锐龙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个周期 , 延迟就高一些 。