浅色/深色
高级 CPU 设计
虞嘉乐21 计算机 4 班
提示
最初的提速方式
随着时代的发展,人类对计算机速度的要求越来越高,这个时候我们就需要给 CPU 提提速。
在早期,人们并没有如今这么好用的提速方法,他们选择减少晶体管的切换时间(晶体管组成了逻辑门、ALU 以及前几章提到的其他组件)。
当然,绝大多数的情况下,越新的东西越好,让 CPU 提速的方法也是一样的。如今使用的新技术,不仅能让简单的指令更快速的执行,也能让它进行更复杂的计算。
如何高效的实施指令
如果我们用自己搭建的那个 CPU 来算一道 16/4,会占用大量的时钟周期,十分的低效。因为我们搭建的 CPU 并没有除法相关的指令,它计算 16/4,会用 16 一直减 4,直至 0 或负数。所以现代 CPU 直接在硬件上设计了除法,可以直接给 ALU 除法指令。
再比如,现代的 CPU 会有专门的电路来处理图形操作、解码压缩视频、加密文档等等,如果这些也用标准操作来实现,那会用非常多的时钟周期。
(小科普:某些 CPU 有 MMX、3DNOW、SSE,它们有额外的电路能够做更加复杂的操作,用于游戏和加密等场景)
随着指令的不断增加,人们也越来越习惯了这些方便的指令,这也让 CPU 中的指令越来越多。从最初的 46 条到如今的上千条指令,CPU 也越来越复杂,越来越厉害了。
为何要快速的把数据传递给 CPU
就像你再怎么能吃,一张嘴的容量也限制了每次吃下的量。RAM 就是这张嘴,它是 CPU 之外的独立组件 (当然,你的嘴是你身上的) ,这也就意味着数据要通过一根线互相传递。这根线叫总线,它可能只有几厘米长,而且电信号传输速度接近光速,但是 CPU 每秒可以处理上亿条指令,而 RAM 要需要时间找地址、取数据、配置、输出数据,这就导致了 CPU 必须等待 RAM 处理完后将数据输出,而这可能会是多个时钟周期的时间。
如何将数据快速传到 CPU
只要多存点数据在自己这里,不就比之前快了吗 —— 缓存
解决这种延迟的方法之一是给 CPU 加点 RAM——叫"缓存"。
因为 CPU 里空间不大,所以缓存一般只有 KB 或者 MB,而 RAM 都是 GB 起步。自此,CPU 从 RAM 拿数据时,RAN 可以不用只传一个,可以传一批了,虽然花的时间久了点,但数据可以存在缓存。
因为数据是一个接着一个处理的,这就导致数据存在缓存里十分好用,不用再去 RAM 里拿数据。打个比方,就好像是两个人进行大胃王比赛,有缓存的就像有人直接拿一大堆的菜依次的摆在你的桌前,吃完直接换下一道菜,不用让服务员去拿,而没有缓存的需要在吃完后等待服务员拿出下一道菜。
说完了处理方式,那就得提一嘴这种方式的速度。因为缓存里 CPU 很近,所以只要用一个时钟周期 CPU 就可以拿到数据,咱们的孤寡老 CPU 终于不用空等。
(小贴士:如果想要的数据已经在缓存里了,那么这部分的数据叫"缓存命中",不在就叫"缓存未命中")
脏位
缓存除了可以让数据更快的被 CPU 使用外,还可以当一个临时空间。举个栗子,就像你设定了今年想要达成的目标并写在了记事本上。
与之前的相同,数据不是直接存在 RAM 中,而是在缓存里,这样不仅存起来快,而且改起来也快(就好像你改了又改的择偶标准 —— 从找个漂亮贤惠的老婆,到是个女的都行,再到是个人就行(欸嘿))
由于缓存和 RAM 内的数据不一样了,这种不一致必须记录下来,之后需要同步,因此缓存内的每块空间都有一个特殊标记,那就是这一段的绝对主角 —— 脏位。一般来讲,计算机同步数据是在 CPU 内缓存的数据满了,而 CPU 有需要空间来储存,这个时候就需要清理缓存内的空间了。在清理缓存的时候,会先检查脏位,如果是"脏"的,那会在加载新数据之前把数据写回 RAM。
左右互博之术 —— 指令流水线
第 7 章中讲到,CPU 按"取址 —— 解码 —— 执行"的顺序处理,这种设计使 CPU 需要三个时钟周期才能执行一条指令,但是每一个步骤都是用到 CPU 不同的位置,那我们不选择让 CPU 学学"左右互搏之术"呢?
在 CPU 执行指令时,同时开始解码下一条指令,并且取下下条指令的地址,这样的流水线,可以每个时钟周期执行一个指令,这样,效率就是之前的三倍啦!
问题之一:指令之间的依赖关系
什么指令之间的依赖性呢?举个栗子,你正在执行的指令会改变你正在读取的那个指令的数据。
所以,流水线处理器必须先弄清楚指令之间的依赖性,必要时停止流水线,以防出现问题。而高端的 CPU 会动态的排序有依赖关系的指令,最小化的停止时间,这叫"乱序执行"。这种电路非常复杂,但它实在是太高效了,几乎所有现代处理器都有流水线。
问题之二:条件跳转
跳转类型的指令会改变程序的执行流,低级的流水线处理器,看到 jump 指令会停一会等待条件值定下,但这会造成一定的延迟。
而高端的流水线处理器就不一样了,它们会猜,对了就直接使用,错了就当场清空,这种方法叫"分支预测"。当让,不必因为"猜"这个字而感到不信任,因为高端的流水线处理器的成功率超过了 90%,除非你是那种喝凉水都能塞牙的倒霉孩子,不然几乎不会出问题。
超标量处理器
它的存在会让流水线彻底进入 007 的时代,它不会给流水线的任意一个工作区域一点休息的时间,这使流水线的工作效率大大提升,一个时钟周期可以完成多个指令了。
三个臭皮匠,抵个诸葛亮 —— 多核处理器
多核处理器,意思是一个 CPU 芯片里,有多个独立处理单元,像多个独立 CPU,但可以共享一些资源,合作运算。
中国的超级计算机 —— 神威·太湖之光
如果多核处理器无法满足的时候,就可以加几个 CPU。而为了满足一些怪物级的运算,就需要超级计算机,它们需要更多的 CPU。神威·太湖之光就是一台这样的超级计算机,它有 40960 个 CPU,每个 CPU 高达 256 个核心,每秒可以进行 9.3 亿亿次浮点数运算,是当之无愧的怪物级的超级计算机,在世界超级计算机排行榜上也有其大名。
接下来
下一章,我们会讲到编程。