CPU|说人话系列:锐龙5系跟5800X3D解析(2)AMD的三级缓存

CPU|说人话系列:锐龙5系跟5800X3D解析(2)AMD的三级缓存

文章图片

CPU|说人话系列:锐龙5系跟5800X3D解析(2)AMD的三级缓存

文章图片

CPU|说人话系列:锐龙5系跟5800X3D解析(2)AMD的三级缓存

文章图片

CPU|说人话系列:锐龙5系跟5800X3D解析(2)AMD的三级缓存

其实本期说的 , 主要就是AMD模块化的弊端 。 上期写的是模块化的好处 , 比如成本低 , 良品率高 , 省钱 。 那缺点自然就有了 , 模块化的坏处是啥?本期就讲一下 。

一个典型的锐龙1代的模块 , 4个核心集成在一起为一个模块 。 而8核心就是两个模块拼接 , 16核心就是4个模块 , 以此类推 。 如下图 , 4个核心在四个角 , 中间是L3缓存 。 一个模块的沟通没问题 , 因为是统一的L3缓存 , 然而两个模块以上的调度 , 这就有问题了 。

首先 , 你在键盘打字 , 回复我 , 或者给文章点赞 , 或者关注我 , 对计算机来说这就是指令(你的手机也是计算机的一种哦) 。 任何指令都要存放在内存里 , 内存分静态的比如硬盘 , 动态的比如内存条 。 因为计算机要操作的内存太多太大了 , 如果所有指令都要抢 , CPU就忙不过来 , 那CPU永远性能不够用 。 这就出现了给内存分等级的办法 , 就是优先级的高低 。 优先级越高 , 内存容量越小 。 对CPU来说 , 只要处理优先级最高的哪一类指令 , 性能就是绰绰有余的 , 还能在多数时间偷懒罢工 。 优先级最高的内存池 , 就是一级缓存 。 比如下图 , 内存的金字塔结构 。

二级缓存比一级缓存容量大 , 在二级缓存里指令会分优先级 , 把重要的送给一级缓存 , 以此类推 , 三级缓存容量比二级缓存还要大 。 这三级缓存都是在CPU内部的 。 而内存条等等 , 是在CPU以外的 , 需要被windows或者安卓或者IOS系统处理分类后再交给缓存的 , 速度就慢 。 举个例子 , 操作系统跟主板就是中介 , 雁过拔毛那种 , 内存条的指令送去CPU要中转好几手 , 这延迟跟中转时间就很可怕了 。 况且比如游戏这种跟你给我点赞还不同 , 你按下按键CPU处理还要显示 , 实际时间在每个内存池内都要乘以2 , 因为除了硬盘所有内存都要吞+吐 。 游戏是真的对及时响应非常依赖的软件了 。

为了规避指令延迟的问题 , 就要在软件编程上面优化 。 但是 , 现在的电脑 , 配置实在是太多了 。 比如4代i5有6M的三级缓存 , 但是4代酷睿的双核笔记本i3就2M , 赛扬就1M , 而8代i5就有9M 。 如果说按照英特尔的一个核心对应1.5M三缓的长期标准 , 那这个软件AMD的处理器就无法运行 。 AMD的处理器也有速龙时代的大量老古董在服役 , 同时 , 还有不那么古董但是名头不响的APU跟推土机 , 它们的设计跟英特尔就不同 , 很多AMD处理器三级缓存只有512K , 就算是锐龙 , 新的锐龙跟老的锐龙也不一样 , 就算新锐龙 , 笔记本跟桌面都不一样 。

聪明秃顶的开发者们 , 就有了一个大家都能运行这软件的办法 。 就是动态分配 。 把指令分成一二三级 , 把指令都做成小分区 , 比如一次64K , CPU自己看着办去吧 , 强CPU可以一次性读10次64k , 一个周期完成别人10个周期的事 。 至于辣鸡CPU , 你可以读10次嘛 。 跑的卡?你换电脑啊 , 关我开发者什么事?这也是推土机性能如此捉急的原因之一 , 开发者甚至windows支持度都不友好 , 在同样跑win内核的XBOX游戏机反而效果不错 。 比如下面这张经典场面:

那三级缓存的重要性就体现出来了 。 三级缓存越大 , 就算三级缓存的容量远远比需要的指令位置还多 , 但是我可以读下一阶段的指令啊 。 众所周知 , 游戏类就是对延迟敏感的 , 每秒钟60帧 , 就需要CPU在17毫秒内做出响应 。 每秒30帧 , 就需要CPU在33毫秒内做出响应 。 三级缓存越大 , CPU停摆的概率越低 , CPU越忙 , 帧数就越高 。 这是压榨CPU性能的一个手段 。