自我介绍
我叫阿q,是CPU一车间的员工我所在的CPU有八个核心,有八个车间我努力工作
在我工作的1号车间,除了负责执行指令的我,还有负责拿指令的小啊,负责分析指令的小胖,负责写回结果的老k。
CPU每个车间都有一堆盒子人们把这些箱子叫做寄存器,我的一号车间也不例外我们每天的工作就是不断地执行指令,然后折腾这些箱子,从里面存取东西
得益于我们四个人的出色工作,一号车间表现突出,多次获得年会最佳CPU核心奖。
躲藏
我们每天都需要处理内存,但是因为内存家伙太慢了,我们浪费了很多时间等他给我们发数据。
终于有一天,上面给了我们一个命令,说竞争对手的CPU速度快赶上我们了,让我们想办法提高工作效率这使我们感到困惑平时我们在工作中从不偷懒该怪的是那个记忆力强的家伙,他拖了我们的后腿
有一天晚上,我们兄弟四个一起吃饭,讨论了上面的顺序大家都叹了口气
正当他一筹莫展的时候,老k提出了一个想法:兄弟们,我发现了一个现象我们在处理内存的时候,如果访问某个地址的数据,那么它周围的数据就会大概率被访问说到这里,老k停顿了一下
一边听,我一边想,小A先开口了:然后呢你想表达什么
老k继续说,我们每次需要数据都要内存,太慢了我想在我们的车间里画一个区域结合我发现的现象,以后我会要求内存一次性给我们目标区域附近的数据我们有这个区域,以后需要的时候先去这里如果找不到,我们会再次请求内存岂不是很方便
听了老k这样的描述,我觉得靠谱,连忙附和:好主意!听着,这段记忆一直拖着我们往回走,但这家伙一时半会儿起不来不如我们先试试这招,看能不能加快工作效率,给上面一个交代
照做就是了,我们很快就付诸实践我们还把这个技术命名为cache,效果出奇的好后来为了进一步优化,我们把缓存分成了两块其中一块靠近寄存器,称为一级缓存,其余称为二级缓存一级缓存又分为指令缓存和数据缓存
我们车间的工作效率迅速提高,但不知道是谁泄露的消息其他几个车间也知道这项技术,并纷纷效仿
这一天,为了性能,我们决定增加一个三级缓存这一次,我们把空间变大了不过我们车间场地有点局促,放不下我们偷偷给上面领导反馈,想让他们帮我们协调一下
领导同意了,但跟我们说他得一碗水端平,平衡各车间的利益但是我们工厂的空间也是有限的,不可能把这么大的空间分配给每一个车间,所以我们决定在工厂里安排一大片区域,让所有车间共享除了同意,我们别无选择
现在我们用了三级缓存技术,内存佬拖后腿的现象缓解了很多相当一段时间,我们可以从三级缓存中找到我们需要的数据
无序执行
伴随着技术的发展,我们的CPU工厂的工作性能也在不断上升慢慢的,我们又闲下来了,因为我们太快了尽管有缓存,我们仍然有很多闲暇时间
这一天,像往常一样,小啊去请示我们知道这需要一些时间,所以我和小胖以及我们三个人作为地主进行了斗争
玩了几次后,小啊气喘吁吁地回来了小胖,轮到你来指导和分析了起来让我打几下小胖很快起床工作,让小啊去发球
就这样,我们几个人轮流干活,守着一桌三个人斗地主。
没想到没多久厂领导就来视察了,正好抓到我们打牌,狠狠训斥了一顿。
你们这些家伙工作很愉快,领导的脸看起来很长。
领袖,我们不是偷懒取指令,解码,执行,写回这些步骤都要一步一步来,但是我们工作太快了,内存跟不上我们我们无聊地等着消磨时间,我解释道
就等你提前做点准备工作,不要浪费时间,上一层楼把生产效率搞上去,领导说完就走了,留下我们面面相觑。
可是,领导的话像一把重锤砸在了我的头上是的,我们有时间打牌
我开始组织几个兄弟讨论方案兄弟们,我们的主要时间都浪费在等待记忆数据上了如果我们能在等待的时间里把后续指令需要的数据提前准备进缓存,那就节省了很多时间,不用每次都等那么久
K听了之后很欣赏我的想法,又补充了一句,不仅仅是准备工作,像一些说明,比如加法如果加法涉及的数据不依赖于前一条指令的结果,我们完全可以提前执行加法指令将结果保存在缓存中,然后在真正轮到指令执行时,将缓存中的结果写入内存那不是省时吗
大家开始集思广益还有很多事情可以做以前他们只想着等啊等,现在要主动了因为顺序打乱了,所以会提前执行下面的指令我们称这种技术为无序执行
这次大家都要保密,下次车间不要知道我们的讨论会议结束前,我提醒了大家
分支预测
根据这次会议的讨论结果,我们打算第二天实施,但在开始时,我们遇到了麻烦。
按照计划,在业余时间,我们会提前做后续指令能做的工作,但麻烦的是遇到了一个判断指令因为我们不知道最后的结果是真还是假,所以无法知道以后应该执行A分支还是B分支的指令我不敢轻举妄动,怕以后什么都不做
大家只好放弃了提前做准备的想法,还是一步一步来。
但是,我们很快发现,我们经常执行这个判断指令,每次的结果都是执行A分支,从来不去B分支。
所以我们几个人讨论发明了一个技术叫分支预测当我们遇到分支跳转时,根据以往的经验,如果一个分支被频繁执行,那么后面去这个分支的概率一定很高所以我们预测后面会到这个分支,所以先做这个分支后面的指令能做的工作
果不其然,使用了分支预测和乱序执行后,我们车间的效率大大提高了,在工厂的集体会议上再次受到表扬,我们的先进技术也推广到了全厂。
待续
复活节彩蛋
可是,快乐的日子并没有持续多久,我们就因为这两项技术闯下了大祸。
那天我们还是照常工作,但是很快就发现我们的分支预测频频出错,事先做的准备工作屡屡落空很快,我们就发现不对劲了
如何预测未来,请关注后续精彩。
往期热评
哪个是强哈希表。几大编程语言在吵架!
内核地址空间冒险4:线程切换
令人震惊!全网第一张源代码分析全景图揭秘Nginx
一个整数+1造成的灾难
网被消灭了!成人都应该知道的黑客技术总结。
看了无数的Java GC文章,你可能不知道这五个问题!
Java对象回忆录:垃圾收集
路由器中的广告秘密
我是一个流氓软件线程。