(。・∀・)ノ゙嗨,欢迎阅读计算机科学速成课!

随着本系列进展,我们知道计算机进步巨大,从1秒1次运算,到现在有千赫甚至兆赫的CPU。你现在看视频的设备八成也有GHz速度,1秒十亿条指令,这是很大的计算量!

早期计算机的提速方式是减少晶体管的切换时间,晶体管组成了逻辑门,ALU以及前几集的其他组件。但这种提速方法最终会碰到瓶颈,所以处理器厂商,发明各种新技术来提升性能,不但让简单指令运行更快。也让它能进行更复杂的运算,上集我们写了个做除法的程序,给CPU执行,方法是做一连串减法,比如16除4会变成4,碰到0或负数才停下,但这种方法要多个时钟周期,很低效。

所以现代CPU直接在硬件层面设计了除法可以直接给ALU除法指令,这让ALU更大也更复杂一些,但也更厉害复杂度vs速度的平衡在计算机发展史上经常出现。举例,现代处理器有专门电路来处理图形操作解码压缩视频加密文档等等,如果用标准操作来实现,要很多个时钟周期。你可能听过某些处理器有MMX、3DNOW、SSE,它们有额外电路做更复杂的操作,用于游戏和加密等场景。

指令不断增加,人们一旦习惯了它的便利就很难删掉,所以为了兼容旧指令集,指令数量越来越多,英特尔4004,第一个集成CPU,有46条指令。足够做一台能用的计算机。

但现代处理器有上千条指令,有各种巧妙复杂的电路,超高的时钟速度带来另一个问题,如何快速传递数据给CPU。就像有强大的蒸汽机但无法快速加煤,RAM成了瓶颈,RAM是CPU之外的独立组件,意味着数据要用线来传递,叫"总线"。总线可能只有几厘米,别忘了电信号的传输接近光速,但CPU每秒可以处理上亿条指令,很小的延迟也会造成问题。

RAM还需要时间找地址取数据,配置,输出数据,一条"从内存读数据"的指令可能要多个时钟周期,CPU空等数据。解决延迟的方法之一是给CPU加一点RAM叫"缓存",因为处理器里空间不大,所以缓存一般只有KB或MB,而RAM都是GB起步。缓存提高了速度,CPU从RAM拿数据时RAM不用传一个,可以传一批,虽然花的时间久一点,但数据可以存在缓存。

这很实用,因为数据常常是一个个按顺序处理,举个例子,算餐厅的当日收入,先取RAM地址100的交易额,RAM与其只给1个值,直接给一批值,把地址100到200都复制到缓存。当处理器要下一个交易额时,地址101,缓存会说:"我已经有了,现在就给你"。不用去RAM取数据,因为缓存离CPU近一个时钟周期就能给数据CPU不用空等!比反复去RAM拿数据快得多。如果想要的数据已经在缓存,叫缓存命中,如果想要的数据不在缓存,叫缓存未命中。

缓存也可以当临时空间,存一些中间值,适合长/复杂的运算,继续餐馆的例子,假设CPU算完了一天的销售额,想把结果存到地址150,就像之前,数据不是直接存到RAM,而是存在缓存,这样不但存起来快一些。如果还要接着算,取值也快一些,但这样带来了一个有趣的问题,缓存和RAM不一致了。这种不一致必须记录下来,之后要同步,因此缓存里每块空间有一个特殊标记,叫"脏位"。

这可能是计算机科学家取的最贴切的名字,同步一般发生在当缓存满了而CPU又要缓存时,在清理缓存腾出空间之前,会先检查"脏位"。如果是"脏"的在加载新内容之前会把数据写回RAM,另一种提升性能的方法叫"指令流水线"。想象下你要洗一整个酒店的床单,但只有1个洗衣机1个干燥机,选择1:按顺序来,放洗衣机等30分钟洗完,然后拿出湿床单,放进干燥机等30分钟烘干,这样1小时洗一批。

另外一说:如果你有30分钟就能烘干的干燥机,请留言告诉我是什么牌子,我的至少要90分钟。即使有这样的神奇干燥机我们可以用"并行处理"进一步提高效率,就像之前,先放一批床单到洗衣机,等30分钟洗完。然后把湿床单放进干燥机,但这次,与其干等30分钟烘干,可以放另一批进洗衣机,让两台机器同时工作,30分钟后,一批床单完成另一批完成一半,另一批准备开始,效率x2!

处理器也可以这样设计,第7集,我们演示了CPU按序处理,取指→解码→执行不断重复。这种设计,三个时钟周期执行1条指令。但因为每个阶段用的是CPU的不同部分,意味着可以并行处理!"执行"一个指令时,同时"解码"下一个指令,"读取"下下个指令,不同任务重叠进行,同时用上CPU里所有部分,这样的流水线每个时钟周期执行1个指令,吞吐量x3。和缓存一样,这也会带来一些问题,第一个问题是指令之间的依赖关系。

举个例子,你在读某个数据而正在执行的指令会改这个数据,也就是说拿的是旧数据,因此流水线处理器要先弄清数据依赖性,必要时停止流水线,避免出问题。高端CPU,比如笔记本和手机里那种,会更进一步,动态排序有依赖关系的指令,最小化流水线的停工时间,这叫"乱序执行"

和你猜的一样,这种电路非常复杂,但因为非常高效,几乎所有现代处理器都有流水线,第二个问题是"条件跳转",比如上集的JUMPNEGATIVE,这些指令会改变程序的执行流,简单的流水线处理器,看到JUMP指令会停一会儿等待条件值确定下来,一旦JUMP的结果出了,处理器就继续流水线。因为空等会造成延迟,所以高端处理器会用一些技巧,可以把JUMP想成是"岔路口"。高端CPU会猜哪条路的可能性大一些,然后提前把指令放进流水线,这叫"推测执行"。当JUMP的结果出了,如果CPU猜对了,流水线已经塞满正确指令,可以马上运行。如果CPU猜错了,就要清空流水线,就像走错路掉头。让GPS不要再!叫!了!

为了尽可能减少清空流水线的次数,CPU厂商开发了复杂的方法,来猜测哪条分支更有可能,叫"分支预测",现代CPU的正确率超过90%,理想情况下,流水线一个时钟周期完成1个指令,然后"超标量处理器"出现了,一个时钟周期完成多个指令。即便有流水线设计,在指令执行阶段,处理器里有些区域还是可能会空闲。比如,执行一个"从内存取值"指令期间,ALU会闲置

所以一次性处理多条指令(取指令+解码)会更好,如果多条指令要ALU的不同部分,就多条同时执行。我们可以再进一步,加多几个相同的电路执行出现频次很高的指令。举例,很多CPU有四个八个甚至更多完全相同的ALU,可以同时执行多个数学运算,好了,目前说过的方法,都是优化1个指令流的吞吐量。另一个提升性能的方法是同时运行多个指令流,用多核处理器

你应该听过双核或四核处理器,意思是一个CPU芯片里,有多个独立处理单元。很像是有多个独立CPU,但因为它们整合紧密,可以共享一些资源,比如缓存。使得多核可以合作运算,但多核不够时,可以用多个CPU。高端计算机,比如现在给你传文章的CSDN服务器,需要更多马力,让上百人能同时流畅阅读。

2个或4个CPU是最常见的,但有时人们有更高的性能要求,所以造了超级计算机!如果要做怪兽级运算,比如模拟宇宙形成,你需要强大的计算能力。给普通台式机加几个CPU没什么用,你需要很多处理器!不…不…还要更多,更多!

截止至视频发布,世上最快的计算机在,中国无锡的国家超算中心,神威·太湖之光有40960个CPU,每个CPU有256个核心,总共超过1千万个核心,每个核心的频率是1.45GHz,每秒可以进行93亿亿次浮点数运算,也叫每秒浮点运算次数(FLOPS)相信我这个速度很可怕,没人试过跑最高画质的《孤岛危机》但我估计没问题。

长话短说,这些年处理器不但大大提高了速度,而且也变得更复杂,用各种技巧,榨干每个时钟周期做尽可能多运算。我们的任务是利用这些运算能力,做又酷又实用的事,编程就是为了这个,我们下集说

【计算机科学速成课】[40集全/文字版] - 9.高级CPU设计相关推荐

  1. 【计算机科学速成课】[40集全/文字版] - 15.阿兰·图灵

    (。・∀・)ノ゙嗨,欢迎阅读计算机科学速成课! 前几集我们聊了基础,比如函数,算法和数据结构,今天,我们来看一位对计算机理论贡献巨大的人,计算机科学之父,长得不怎么像本尼的阿兰·图灵.阿兰·马蒂森·图 ...

  2. 【计算机科学速成课】[40集全/文字版] - 20.文件系统

    (。・∀・)ノ゙嗨,欢迎阅读计算机科学速成课! 上集我们讲了数据存储,磁带和硬盘这样的技术,可以在断电状态长时间存上万亿个位,非常合适存一整块有关系的数据,或者说"文件".你肯定见 ...

  3. 【计算机科学速成课】[40集全/文字版] - 1.计算机的早期历史

    Hello,World! 欢迎阅读计算机科学速成课! 在这个系列中,我们会学习Bits(位).Bytes(字节).晶体管.逻辑门,一直到操作系统,虚拟现实和机器人! 我们要学很多东西,但预先说明:我们 ...

  4. 【计算机科学速成课】[40集全/文字版] - 12.编程原理-语句和函数

    (。・∀・)ノ゙嗨,欢迎阅读计算机科学速成课! 上集讲到用机器码写程序,还要处理那么多底层细节对写大型程序是个巨大障碍.为了脱离底层细节,开发了编程语言,让程序员专心解决问题,不用管硬件细节.今天我们 ...

  5. 20210301计算机科学速成课40集(34-35)

    机器学习Machine Learning&人工智能AI,Artificial Intelligence:机器学习算法让计算机可以从数据中学习,然后自行做出预测和决定.(1)分类Classifi ...

  6. 计算机科学速成课】[40集全/精校] - Crash Course Computer Science

    计算机科学速成课][40集全/精校] - Crash Course Computer Science Transistor have two electrodes separated by a mat ...

  7. 计算机科学速成课 Crash Course Computer Science 第三十集 万维网 The World Wide Web

    GitHub链接:https://github.com/WilliamWuLH/My-notes-about-CCCS 如果你觉得不错可以 ⭐Star 和 Fork ❤ 计算机科学速成课 Crash ...

  8. @程序员,这份 2 万人收藏的计算机科学速成课速码!

    整理 | 一一 出品 | AI科技大本营(ID:rgznai100) 作为一枚程序员,很多人可能都不太能清晰地说出计算机发展脉络,要想成为优秀的程序员,只会编程是不够的."读史使人明智&qu ...

  9. 计算机科学速成课 Crash Course Computer Science 笔记(摘要形式)

    Crash Course Computer Science总共40节课,架构式地详细介绍了计算机从底层到顶层的构造和新的技术,一节课十分钟左右,可让小白在很短时间内产生对计算机的总体理解 本文是听课后 ...

最新文章

  1. TVM部署和集成Deploy and Integration
  2. 制造内核崩溃并使用crash分析内核崩溃产生的vmcore文件
  3. 【原】Asp.net生成Excel文件并下载(更新:解决使用迅雷下载页面而不是文件的问题)...
  4. 正确退出activity_如何退出Activity
  5. 我对CSS vertical-align的一些理解与认识(一)
  6. VS2012 发布网站步骤
  7. Badboy录制及参数化详细步骤来一波
  8. Ubuntu Server 18.04 安装
  9. linux ext4分区无损扩容,linux操作系统无损升级文件系统ext3至ext4--数据盘篇
  10. jquery视频教程(jquery视频教程全集)
  11. 武士2复仇 Unity游戏工程+源码
  12. 6688常见问题FAQ
  13. ACTIVEX控件debug版本在Win7下注册失败的处理方法
  14. 大学学嵌入式技术的优势
  15. 关于数字的智力题-三个女儿的年龄
  16. Vue-DataV 数据可视化工具
  17. Python多进程和多线程的使用场景
  18. 小程序实现瀑布流布局
  19. 计算机的内存的作用是什么,电脑内存的作用是什么?
  20. Vue开发入门(二) | 说说Vue全家桶有哪些~

热门文章

  1. 《J2SE 回炉再造08》-------溺水狗
  2. java 实现发送手机验证码的功能 (超详细)
  3. DNS原理学习思维导图
  4. 中科大计算机博士毕业条件,中科大硕士博士学位授予实施细则.pdf
  5. 手撸web框架即引入框架思想,wsgierf模块,动静态网页,模板语法jinja2,python三大主流web框架,django安装,三板斧...
  6. 计算机导论课程论文标题大全,《计算机导论》课程论文.doc
  7. 性能压测到一段时间org.apache.axis2.AxisFault: Address already in use
  8. 游戏开发21课 cocoscreator bundle
  9. 新造车2.0时代,“滑板底盘”概念的加减法
  10. 海伦司上市,是酒馆界“拼多多”还是“夜间星巴克”?