• 计算机速成课 第九集 高级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. 总结

    • 这些年处理器不但大大提高了速度,而且变得更复杂,用各种技巧,榨干每个时钟周期,做尽可能多的运算
    • 我们的人物是利用这些运算能离,做又酷又实用的事,编程就是为了这个
  • 相关阅读:
    SSM博客
    做完了第一个
    day08
    day07
    day06
    解决Zend OPcache huge_code_pages: mmap(HUGETLB) failed: Cannot allocate memory报错
    《响应式网页设计》系列分享专栏
    《Linux命令学习手册》系列分享专栏
    详解Docker 端口映射与容器互联
    centos7安装gitlab
  • 原文地址:https://www.cnblogs.com/zxxsteven/p/15679629.html
Copyright © 2020-2023  润新知