第七章 CPU设计
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
之前的内容已经基本完成了处理器的设计和功能实现,现在要谈一谈我们日常的CPU它执行程序上会有什么比较有意思的点。
一、缓存Cache
我们之前已经做出了RAM,但随着时代的发展,CPU的频率越来越高,处理指令的速度越来越快,RAM传输数据的速度似乎有点跟不上了。
就像是超级大马力的发动机,它提供的马力很足,可是需要消耗很多油,如果等到油没有了再加,就会让发动机等很久。
CPU也是这样,尽管总线BUS只有几厘米的长度,但是CPU每秒要进行数亿次的处理,这样会很浪费CPU的性能。
这样我们会想到加一个缓存,就像它的名字一样,是用来暂缓传输的。
因为处理器的空间不大,所以缓存一般也只有KB或者MB。
它的作用就是当CPUC需要拿数据时,RAM将会给一批数据给到缓存,CPU在处理时如果需要数据可以直接从缓存拿,速度会块很多。
但是数据并不是都是顺序的,拿到的一批数据也不一定就是CPU需要的数据,所以如果CPU需要的数据在缓存中,就叫做"缓存命中"。如果不在,就叫"缓存未命中"。
同理呢,如果是CPU计算的数据要存入RAM,也会先放入缓存,但是这样一来,缓存内的数据和刚才RAM给的一批数据就不一样了,这样的区别需要进行记录,再更新数据时再进行同步。
这个时候,科学家就想到了一个方法,就是加一个标志位,叫做"脏位",很简明的名字,当CPU想要往缓存里放数据的时候,如果这个位脏了,就要将这个缓存的数据先放入RAM,再将数据放入缓存。
二、指令流水线
这个是另外一种提高效率的方式,其实比较好理解,就是我们的事件同步问题。
假设一组数据,要经过AB两次处理,必须以AB的次序来完成。
如果有很多组数据要处理,如果进行普通的方式,A结束,进行B,那么这些数据就需要N*(A+B)的时间来完成。
那可不可以在进行B的时候,A处于空闲,那让A开始下一组数据的处理,这样就可以快多了
简单一点理解,你在烧水的时候把洗衣机打开,水开了,洗衣机也好了。
CPU在执行的同时,解码单元进行解码,获取数据单元获取数据,有序运转,效率加倍!
还有一件事情,就是假如遇到了需要判断的指令,如果程序停下等待判断完毕再执行,似乎又有点浪费时间。
想一个办法,直接猜一个,提前把指令放入流水线,这就叫“推测执行”。如果CPUC猜对,就可以马上执行。如果猜错,就清空流水线,掉头!
为了减少掉头的次数,厂商也做了一些功能,叫做“分支预测”,现代CPU的正确率已经能超过90%!
3.多核 or 多CPU
再进一步,用多个处理器核心,就可以同时处理多个流水线,效率就更高了。
多核不够,就多CPU,像一些视频网站的服务器,就需要很多CPU一起工作。
同时也为了一些超大的计算,就有了超级计算机。
总结
神奇的计算机,将人们日常的想法加入到处理器中,机器的效率就能翻倍。插一句,目前算力最大的计算机是无锡的神威太湖之光,它有40960个CPU,每个CPU有256个核心,每秒可以进行9.3亿亿次计算,真是太厉害了!