计算机速成课 第九集 高级CPU设计

1. 早期计算机提速方式

  • 减少晶体管的切换时间,但是最终会遇到瓶颈,所以芯片厂商发明各种新技术来提升性能
  • 这样使得运算更快,也可以处理更复杂的任务

2. 早起使用减法来实现除法的功能效率低

  • 例如:16/4,会执行为 16-4-4-4,碰到 0 或者负数才停下
  • 但是这种方法需要多个时钟周期,很低效
  • 现代 CPU 直接在硬件层面设计了除法,可以直接给 ALU 除法指令

3. 指令数量不断增加

  • 人们习惯了它的便利就很难删掉,所以为了兼容旧指令集,指令数量越来越多
  • 英特尔 4004,第一个集成 CPU,有 46 条指令,但是现代处理器有上千条指令,有各种巧妙复杂的电路
  • 超高的时钟速度带来另外一个问题:如何快速传递数据给 CPU ?

4. 快速传递数据给 CPU

  • RAM 是 CPU 之外的独立组件,意味着数据要用线来传递,叫「总线」
  • 电信号的传输接近光速,但 CPU 每秒可以处理上亿条指令,很小的延迟也会造成问题
  • RAM 需要时间找地址、取数据、配置、输出数据,一条「从内存读数据」的指令可能要多个时钟周期,CPU 空等数据
  • 提升性能的解决的方法之一是给 CPU 加点 RAM,叫「缓存」
    • 缓存离 CPU 近,一个时钟周期就能给数据,所以 CPU 不用空等,比反复去 RAM 拿数据快的多
    • 如果想要的数据已经在缓存,叫「缓存命中」
    • 如果想要的数据不在缓存,叫「缓存未命中」
    • 缓存也可以当临时空间,存一些中间值,适合长/复杂的运算
  • 缓存里每块共建,有一个特殊的标记,叫「脏位」
    • 同步一般发生在当缓存满了而 CPU 又要缓存时,在清理缓存腾出空间之前,会先检查「脏位」
    • 如果是「脏」的,在加载新内容之前,会把数据写回 RAM
  • 提升性能的解决的方法之二是「指令流水线」
    • 使用「并行处理」进一步提高效率,即「执行」一个指令时,同时「解码」下一个指令,「读取」下个指令,不同任务重叠执行,同时用上 CPU 里所有部分
    • 带来的问题:
      • 指令之间的依赖关系。例如:你在读某个数据,而正在执行的指令会修改这个数据,也就是说拿到的是旧数据,因此流水线处理器,要先弄清数据依赖性,必要时停止流水线,避免出问题
      • 「乱序执行」高端 CPU,比如笔记本和手机里那种,会更进一步,动态排序有依赖关系的指令,最小化流水线的停工时间,这叫乱序执行。
      • 「条件跳转」,这些指令会改变程序的执行流
      • 「推测执行」高端 CPU 会猜哪条路的可能性大一些,然后提前把指令放进流水线
      • 「分支预测」为了尽可能减少清空流水线的次数,CPU 厂商开发了复杂的方法,来猜测那条分支更有可能。
  • 提升性能的解决的方法之三是「同时运行多个指令流」
    • 使用多核处理器
    • 超级计算机
      • 如果要做怪兽级运算,比如模拟宇宙形成,则需要更强大的计算能力
      • 世界上最快的计算机在中国无锡的国家超算中心
        • 神威·太湖之光有 40960 个 CPU,每个 CPU 有 256 个核心
        • 总共超过1千万个核心,每个核心的频率时 1.45GHz
        • 每秒可以进行 9.3 亿亿次浮点数运算,也叫「每秒浮点运算次数」

5. 总结

  • 这些年处理器不但大大提高了速度,而且变得更复杂,用各种技巧,榨干每个时钟周期,做尽可能多的运算
  • 我们的人物是利用这些运算能离,做又酷又实用的事,编程就是为了这个
上一篇:RAM存储器的逻辑电路实现


下一篇:c-如果条件导致错误,则在constexpr中比较constexpr函数参数