自我介绍

我叫阿Q,是CPU一号车间里的员工,我所在的这个CPU足足有8个核,就有8个车间,干起活来杠杠滴。

我所在的一号车间里,除了负责执行指令的我,还有负责取指令的小A,负责分析指令的小胖和负责结果回写的老K。

CPU的每个车间都有一堆箱子,人们把这些箱子叫做寄存器,我所在的一号车间也不例外,我们每天的工作就是不断执行指令,然后折腾这些箱子,往里面存东西取东西。

由于我们四个人的出色工作,一号车间业绩突出,在年会上还多次获得了最佳CPU核心奖呢。

缓存

我们每天都需要跟内存打交道,不过由于内存这家伙实在太慢了,我们浪费了很多时间等待他给我们数据传输。

终于有一天,上面给我们下了命令,说竞争对手CPU的速度快赶上我们了,让我们想办法提升工作效率。这一下可难倒了我们,我们平时干活绝没有偷懒,要怪只能怪内存那家伙,是他拖了我们后腿。

一天晚上,我们哥四个在一起聚餐,讨论起上面的这道命令来,大家都纷纷叹气。

就在一筹莫展之际,老K提出了一个想法:“兄弟们,我发现了一个现象,咱们和内存打交道的时候,如果访问了某个地址的数据,它周围的数据随后也大概率会被访问到”,说到这里,老K停顿了一下。

我一边听一边想着,小A倒是先开口:“然后呢?你想表达什么意思?”

老K继续说道:“咱每次数据都找内存要,太慢了,我寻思在咱们车间划一块区域,结合我发现的那个现象,以后让内存一次性把目标区域附近的数据一起给我们,我们存在这块区域,后面在需要用到的时候就先去这里找,找不到再去找内存要,岂不省事?”

听老K这么一描述,感觉靠谱,我也赶紧附和:“好办法!你们看啊,这内存老是拖咱后退,但是这家伙一时半会也快不起来,要不咱先用这招试试,看看能不能加快一点工作效率,给上面也有个交代。”

说干就干,我们很快就付诸实践了,我们还给这技术取了个名字叫缓存,效果居然出奇的好,后来为了进一步优化,我们还把缓存分为了两块,一块离寄存器很近叫一级缓存,剩下的叫二级缓存。一级缓存中进一步分了指令缓存和数据缓存两块。

我们车间的工作效率那是飞速提升,但不知道是谁走漏了风声,其他几个车间也知道了这项技术,纷纷效仿。

这天,为了业绩,我们决定再加第三级缓存,这次把空间弄大点,不过咱们车间地盘有点局促,放不下,我们偷偷给上面领导反馈了这事儿,想让领导帮我们协调一下。

领导倒是同意了,不过告诉我们他得一碗水端平,平衡各车间的利益。但是咱厂里空间也有限,不可能给每个车间都分配那么大的空间,于是决定由厂里统一安排一块大的区域,让各个车间来共享。没有办法,我们也只好同意了。

现在,我们用上了三级缓存技术,内存那家伙拖后腿的现象缓解了不少,相当部分时间我们都能从这三级缓存里面找到我们需要的数据。

乱序执行

随着技术的发展,咱们CPU工厂的工作性能也是不断攀升,慢慢的,我们几个又开始闲下来了,因为我们实在太快了,尽管有了缓存,但我们还是有了不少闲暇时间。

这天我还是像往常一样,小A取指令去了,我们知道这得要点时间,于是我和小胖还有老K我们仨斗起了地主。

打了好几把,小A才气喘吁吁的回来,“小胖,该你去指令分析了,你起来让我来打几把”。小胖赶紧起身干活,换上了小A上桌。

就这样我们几个轮流工作,一直保持着三个人的斗地主牌桌。

没想到的是,没过多久,厂里领导过来视察了,正好撞见我们几个打牌,狠狠的训斥了我们一顿。

“你们几个上班时间玩得挺嗨啊”,领导的脸拉的老长。

“领导,我们没有偷懒,这取指令、译码、执行、回写几个步骤都得分步执行,但是我们工作太快,存储器跟不上我们,我们等得无聊打发时间嘛”,我上前解释到。

“干等着你们也可以提前做一些后面的准备工作嘛,不要浪费时间,让生产效率更上一层楼”,领导说完就离开了,留下我们几个面面相觑。

不过领导的一番话倒是如一记重锤敲在我的头上,对啊,我们有这打牌的时间不如提前把后续指令的准备工作先做了,肯定能提升不少效率呢!

我开始组织兄弟几个商讨方案,“兄弟们,我们最主要的时间都浪费在等待内存数据上了,如果我们能在等待的时间里把后续指令需要的数据提前准备到缓存中来,那可就节约不少时间了,不用每次都等那么久。”

老K听后很赞赏我的思路,并补充到:“不仅是准备工作,像有些指令,比如加法,如果参与加法的数据不依赖前面指令的结果,咱们完全可以提前把这加法指令执行了嘛,把结果保存在缓存中,等真正轮到这条指令执行的时候,再把缓存中的结果写到内存中,这不也是节约了时间吗”

大家开始头脑风暴起来,原来可以做的事情还这么多,之前光想着等靠要,现在要主动出击了,因为打乱了顺序提前会执行后面的指令,我们把这个技术叫做乱序执行.

“这次大家要保密哦,不能让隔壁车间知道咱们的这次讨论内容”,会议结束前,我提醒大家。

分支预测

按照这次会议讨论的结果,咱们第二天准备实行,不过刚一开始,就遇到了麻烦。

按照计划,我们在空闲时间里,会提前把后续要执行的指令能做的工作先做了,但麻烦的是我们遇到了一条判断指令,因为不知道最终结果是true还是false,我们没法知道后续是应该执行分支A的指令还是分支B的指令。不敢轻举妄动,怕一会做了无用功。

大家只好放弃了提前做准备工作的想法,还是一步步来。

不过很快我们发现,我们经常执行到这个判断指令,而且每次结果都是去执行A分支,从没有去过B分支。

于是我们几个又商量,发明了一种叫分支预测的技术,遇到分支跳转时,按照之前的经验,如果某个分支经常被执行,那后续再去这个分支的概率一定很大,那这样咱们预测后面会去到这个分支,就提前把这个分支后面指令能做的工作先做了。

果然,用上了分支预测和乱序执行后,我们车间的效率又狠狠的提升了一把,在工厂的集体大会上又一次表扬了我们,并且把我们的先进技术向全厂推广。

未完待续······

彩蛋然而幸福的日子没过太长,我们就因为这两项技术闯下了弥天大祸。

那天,我们还是如往常一般工作,可不久发现我们的分支预测频频出错,提前做的准备工作也屡屡白费,很快,我们发现出事儿了······

作者:轩辕之风

来源:https://www.cnblogs.com/xuanyuan/p/12856598.html

Java课程烧CPU吗_java程序员:完了!CPU一味求快出事儿了!相关推荐

  1. 完了!CPU 一味求快出事儿了!| 原力计划

    作者 | 编程技术宇宙,责编 | 夕颜 来源 | CSDN博客 头图 | CSDN付费下载自视觉中国 自我介绍 我叫阿Q,是CPU一号车间里的员工,我所在的这个CPU足足有8个核,就有8个车间,干起活 ...

  2. 完了!CPU一味求快出事儿了!

    点击关注上方"五分钟学算法", 设为"置顶或星标",第一时间送达干货. 转自编程技术宇宙 自我介绍 我叫阿Q,是CPU一号车间里的员工,我所在的这个CPU足足有 ...

  3. java run里面定义变量_Java程序员50多道最热门的多线程和并发面试题(答案解析)...

    下面是Java程序员相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器 ...

  4. java的xml面试题_Java程序员的10个XML面试问答

    java的xml面试题 XML面试问题在各种编程工作面试中非常受欢迎,包括针对Web开发人员的Java面试 . XML是一项成熟的技术,通常用作从一个平台传输数据的标准. XML面试问题包含来自各种X ...

  5. Java业务面考什么_Java程序员面试技巧分享,面考官考查JAVA程序员常用的技术有哪些?...

    想要成为合格的Java程序员或工程师到底需要具备哪些专业技能呢?面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面试的时候跟面试官聊的东西. 大家可以把 ...

  6. java必须掌握哪些知识_Java程序员必须掌握的知识

    1.语法:Java程序员必须比较熟悉语法,在写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息 知道是什么样的语法错误并且知道任何修正. 2.命令:必须熟悉JDK带的一些常用命令及其常用选项, ...

  7. 怎么访问和java包同级的文件_JAVA程序员谈几种访问文件的方式

    读取和写入文件都需要I/O操作调用系统提供的接口,因为磁盘设备是由系统来管理的,我们的应用程序要想访问物理设备只能通过这个方式.但是系统调用都是会涉及到内核空间地址和用户名空间地址的切换问题,原因是操 ...

  8. java项目怎样提高性能_Java程序员成长之路(如何提高Java程序性能?)

    1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面 第一,控制资源的使用,通过线程同步来控制资 ...

  9. java class文件常量池_JAVA程序员谈谈class文件结构中的常量池-class文件

    常量的类型有12种 CONSTANT_Utf8_info1字面量UTF-8编码的字符串 CONSTANT_Integer_info3字面量整型字面量 CONSTANT_Float_info4字面量浮点 ...

最新文章

  1. 在Swift中如何使用C中的Struct
  2. 2021年春季学期-信号与系统-第九次作业参考答案-第五小题
  3. 使用SAP C4C的OData服务的deep insert操作创建Lead
  4. 三、bootstrap4 组件(警告和提示框、徽章和面包屑、按钮按钮组、卡片、列表组、导航和选项卡、分页和进度条、巨幕和旋转图标、轮播图、折叠菜单、下拉菜单、导航条、滚动监听、轻量弹框、模态框、表单)
  5. python坐标系建立_在python中创建坐标网格
  6. SQL中,where 与 having 的性能比较
  7. 服务器低功耗cpu性能,节能省电家庭共享 7款低功耗处理器推荐
  8. 世界前列量化高频投资公司
  9. 电商网站开发设计方案、电商网站开发重要性
  10. 入门物联网还得靠嵌入式
  11. kubernetes中容器(pod)间的通信及环境变量设置
  12. 中国计算机学会青年计算机科技论坛
  13. php架构师培训,php架构师培训效果怎么样
  14. LabVIEW编程LabVIEW开发 控制NI USB-6225例程与相关资料
  15. 国外渗透教学——CBT 国外的道德黑客Nuggets
  16. HQChart使用教程72-画图工具波浪尺刻度配置
  17. 模拟电路36(理想运算放大器——积分电路、微分电路4)
  18. 传奇战盟GOM引擎登录器配置教程
  19. HP大中华区总裁孙振耀退休感言---关于职场(值得深思)
  20. android开发出现错误:Failed to find configured root that contains

热门文章

  1. 2017.5.11 道路修建 思考记录
  2. Bzoj 3652: 大新闻(数位dp)
  3. python缺失值处理 fillna能否用scala来处理_数据清洗(一)丨处理缺失数据
  4. 【英语学习】4000 Words 【V1】【U02】The Laboratory
  5. 简单地理解 Python 的装饰器
  6. 4G通信技术LTE介绍
  7. 怎么将一个数字高低位互换_多彩数字 多彩童年——东城幼儿园玩具研究教学案例...
  8. linux 下 pytorch 安装
  9. UNREAL ENGINE 4.13 正式发布!
  10. 改进粒子系统-GPU实现