高级CPU设计

mac2022-06-30  27

1早期提速方法

早期提速方式是减少晶体管的切换时间。这种提速方式最终会遇到瓶颈,所以开发商发明了新技术来提升性能,不但让简单指令运行更快,也让它可以运行更复杂的运算。

2提速方法

2.1 除法

除法的方法是做一串剪发,比如16除4会变成16-4-4-4-4,碰到0或负数才停下,但这种方法要多个时钟周期,很低效,所以现代CPU直接在硬件层面设计了除法,可以直接给ALU除法指令,折让ALU更大更复杂一些

2.2 额外电路

现代处理器有专门电路处理,图形操作,解码压缩视频,加密文档等等,如果用标准操作来实现,要多个时钟周期。 你可能听过某些处理器有MMX,3DNOW,SEE,他们额外电路做更复杂的操作 现代处理器有上千条指令,也有各种复杂的电路

3RAM问题

超高的时钟速度带来另一个问题,如何快速传递给CPU,就像强大的蒸汽机,但无法快速加煤。RAM就成了瓶颈。 RAM在cpu之外意味这数据要用先来传递,叫总线。总线只有几厘米粗,电信号速度接近光,但CPU每秒可以处理上亿条指令,很小的延迟也会造成问题。 ram还需要时间找地址,取数据,配置,输出数据 一条从内存存读数据的指令可能要多个时钟周期

4RAM解决方法-缓存

解决延迟的方法就是给cpu加一点ram叫缓存。 因为处理器里空间不大,所以缓存一般只有KB或MB,而RAM都是GB起步,缓存提高了速度

虽然花时间久一点,但数据可以存在缓存,这很实用,因为数据常常是一个个按顺序处理 举个例子,算餐厅的当天收入,先取RAM地址100的交易额,ram与其只给1个值,直接给一批值 把地址100-200都复制到缓存,当处理器要下次交易额时,地址101,缓存会说:我已经有了,现在就给你,不用去RAM读取数据,因为缓存离CPU近,一个时钟周期就能给数据-CPU不用空等,比反复取RAM拿数据快得多、 如果想要的数据已经在缓存中叫缓存命中,如果想要的数据不在缓存中,叫缓存未命中 缓存也可以当临时空间存一些中间值,适合长/复杂的运算。 继续刚才的例子,如果餐厅想把算完的结果存到地址150,就像之前,数据不是直接存到RAM,而是存在缓存,这样不但存起来快一些,如果还要继续算,取值也快一些。

5脏位

这样带来一个问题,缓存和RAM不一致了。 这种不一致必须记录下来,之后要同步因此缓存每块空间,有一个特殊标记,叫脏位。 同步一般在当缓存满了而CPU又要缓存时。 如果是脏的,在加载新内容之前,会把数据写回RAM

6指令流水线

想象在宾馆操作,这样要1h才能洗完 我们可以用并行处理进一步提高效率 cpu也可以如此,之前演示了取指-解码-执行,不断重复 举个例子,你在读某个数据,而正在执行的指令回该这个数据,因此流水线处理器,要先弄清楚数据依赖性,必要时停止流水线,避免出问题 高端cpu会更近一步,动态排序有依赖关系的指令,这叫乱序执行

7条件跳转

如之前的jump negative 这些指令回改变程序的执行流,简单的流水线处理器,看到JUMP指令会停一会,等待条件值的确定,一旦jump结果除了,处理器就继续流水线,因为空等会造成延迟,所以高端处理器会有一些技巧。 可以把jump想成岔路口 ,高端cpu会预测路线,然后把指令放入流水线,这叫推测执行。 当路线正确,流水线已经塞满正确指令,可以马上运行,如果cpu猜错了,就要清空流水线 为了减少清空流水线,厂商设计了猜测那条分支更有可能,叫分支预测。 现代cpu正确率超过90% 如果多加几个相同电路,执行出现频率很高的指令,举个例子cpu有四个,八个甚至更多完全相同的ALU,可以同事执行多个数学运算,目前说的方法,都是优化一个指令流的吞吐量,另一个提升性能的方法就是运行多个指令流,用多核处理器。

8多核处理器

当多核不够,可以用多个cpu。 高端计算机,如Youtube服务器,2或4个cpu是最常见的。

最新回复(0)