《深入浅出计算机组成原理》笔记 第一到五讲

开篇词-为什么你需要学习计算机组成原理?

01-冯·诺依曼体系结构:计算机组成的金字塔

1629668780571

计算机的基本硬件组成

CPU、内存和主板。

  • CPU执行计算

  • 内存(Memory)。程序都要加载到内存 里才能运行

  • 主板是一个有着各种各样,有大量插槽的配件。

    • 主板的芯片组(Chipset)和总线(Bus)解决了CPU和内存之间如何通信的问题。
    • 芯片组控制了 数据传输的流转,也就是数据从哪里到哪里的问题。
    • 总线则是实际数据传输的高速公路。因此,总线速度 (Bus Speed)决定了数据能传输得多快
  • 电源 , I/O设备 ,显卡(Graphics Card) 显卡里有除了 CPU之外的另一个“处理器”,GPU一样可以做各 种“计算”的工作。

  • 鼠标、键盘以及硬盘,这些都是插在主板上的。作为外部I/O设备,它们是通过主板上的南桥 (SouthBridge)芯片组,来控制和CPU之间的通信的。

  • “南桥”芯片,一方面,它通常在主板的“南面”。另一方面,它的作用就是作为“桥”,连接外部设备和CPU之间的通信。

  • 以前的主板上通常也有“北桥”芯片,用来作为“桥”,连接 CPU和内存、显卡之间的通信。现在北桥被移入CPU内部

冯·诺依曼体系结构

  • “计算机”抽象概念。这是怎么样一个“计算机”呢?
  • 冯·诺依曼体系结构,存储程序计算机。特点:“可编程”计算机,“存储”计算 机。

首先是一个包含ALU和处理器寄存器的处 理器单元,用来完成各种算术和逻辑运算。

冯·诺依曼体系结构(Von Neumann architecture),算术逻辑单元(Arithmetic Logic Unit,ALU),处理器寄存器(Processor Register),处 理器单元(Processing Unit)

然后是一个包含指令寄存器(IR)和程序计数器(PC)的控制器单元 ,用来控制程序的流程,通常就是不同条件下的分支和跳转。

指令寄存器(Instruction Reigster),程序计数器(Program Counter),控制器单元 (Control Unit/CU)数据(Data)指令(Instruction)

接着是用来存储数据和指令的内存。以及更大容量的外部存储。 最后就是各种输入和输出设备,以及对应的输入和输出机制。

1629668725983

总结延伸

  • 具体来说,学习组成原理,其实就是学习控制器、运算器的工作原理,也就是CPU是怎么工作的,以及为何 这样设计;
  • 学习内存的工作原理,从最基本的电路,到上层抽象给到CPU乃至应用程序的接口是怎样的;
  • 学 习CPU是怎么和输入设备、输出设备打交道的。

学习组成原理,就是在理解从控制器、运算器、存储器、输入设备以及输出设备,从电路这样的硬件,到最 终开放给软件的接口,是怎么运作的,为什么要设计成这样,以及在软件开发层面怎么尽可能用好它。

02-给你一张知识地图,计算机组成原理应该这么学

1629668780571

整个计算机组成原理,就是围绕着计算机是如何组织运作展开的。

  • 首先,我们来看计算机的基本组成。

    • 学习计算机是由哪些硬件组成的。以及这些硬件是怎么对应到经典的冯·诺依曼体系结构 中的
    • 运算器、控制器、存储器、i/o
    • 了解计算机的两个核心指标,性能和功耗。
  • 接下来你需要掌握计算机的指令和计算。

    • 在计算机指令部分 .程序是怎么通过编译器和汇编器,变成机器指令,还需要知道我们的操作系统是怎么链接、装载、执行这些程序的。控制器来控制的指令执行的控制过程
    • 实现这些运算功能的ALU(Arithmetic Logic Unit/ALU),也就是算术逻辑单元
  • 可以深入到CPU的设计中

    • CPU时钟可以用来构造寄存器和内存的锁存器和触发器

      因此,CPU时钟应该是我们学习CPU的前导知识。

    • 数据通路,其实就是连接了整个运算器和控制器,并最终组成了CPU。

      出于对于性能和功耗的考虑,你要 进一步理解和掌握面向流水线设计的CPU、数据和控制冒险,以及分支预测的相关技术。

    • 道异常和中断发生的机制

    • 讲指令的并行执行,看看如何直接在CPU层面,通过SIMD来支持并行计算。

  • 了解存储器的原理。需要掌握从上到下的CPU高速缓存、内存、SSD硬盘和机械硬盘的工作原理,它们之间的性能差 异。

学习计算机组成原理,究竟有没有好办法?

  • 首先,学会提问自己来串联知识点。学完一个知识点之后,你可以从下面两个方面,问一下自己。
    • 我写的程序,是怎样从输入的代码,变成运行的程序,并得到最终结果的? 整个过程中,计算器层面到底经历了哪些步骤,有哪些地方是可以优化的?
  • 其次,写一些示例程序来验证知识点。计算机组成中的大量原理和设计,都 对应着“性能”这个词。
  • 通过和计算机硬件发展的历史做对照

03-通过你的CPU主频,我们来谈谈“性能”究竟是什么?

我们能不能给性能下一个明确的定义,然后来 进行准确的比较呢?

什么是性能?时间的倒数

  • 第一个是响应时间或者叫执行时间。

  • 第二个是吞吐率或者带宽

一般把性能,定义成响应时间的倒数: 性能 = 1/响应时间

响应时间(Response time)执行时间(Execution time)。吞吐率(Throughput)带宽(Bandwidth)

计算机的计时单位:CPU时钟

  • 问题:记录程序经历的时间差不“准”。包含程序被调度的时间
  • 要记录程序实际在cpu上运行的时间

1629669572350

  • 问题:直接根据时间“比较”出两个程序的性能差异可以吗?
    • 答案:不行。CPU的时刻功率不同导致主频不同,以及cpu执行速度可能受其他相关硬件的影响。比如内存,总线
  • 解决:我们需要转化为只跟cpu相关的标准
    • 程序的CPU执行时间=CPU时钟周期数×时钟周期时间
    • 更进一步: 对于CPU时钟周期数,我们可以再做一个分解,把它变成“指令数×每条指令的平均时钟周期数(Cycles Per Instruction,简称CPI)”。
    • 更进一步: CPU时钟周期数=指令数×每条指令的平均时钟周期数
  • 程序的CPU执行时间=指令数×CPI×时钟周期时间

CPU时钟周期数(CPU Cycles),时钟周期时间 (Clock Cycle),每条指令的平均时钟周期数(Cycles Per Instruction,简称CPI)

在CPU内部,有一个叫晶体振荡器(Oscillator Crystal)的东西,晶振带来的每一次“滴答”,就是时钟周期时间。

解决性能问题,要优化这三者。

  1. 时钟周期时间,就是计算机主频,这个取决于计算机硬件。

    主频不了过高。过高会导致功耗以及散热问题

  2. 每条指令的平均时钟周期数CPI,就是一条指令到底需要多少CPU Cycle。

    现代的CPU通过流水线技术(Pipeline),让一条指令需要的CPU Cycle尽可能地少。

  3. 指令数,代表执行我们的程序到底需要多少条指令、用哪些指令。这个很多时候就把挑战交给了编译器。

04-穿越功耗墙,我们该从哪些方面提升“性能”?

功耗:CPU的“人体极限”

奔腾4的主频为什么没能超过3.8GHz的障碍呢?答案就是功耗问题。

  • cpu 想要计算得快

    • 增加晶体管的总量(密度or面积)
    • 增加频率
  • CPU的功率: 功耗 ~= 1/2 ×负载电容×电压^2×开关频率×晶体管数量

    功耗增加太多,就会导致CPU散热跟不上,这时,我们就需要降低电压。这里有一点非常关键,在整 个功耗的公式里面,功耗和电压的平方是成正比的。

1629670378892

并行优化,理解阿姆达尔定律

从奔腾4开始,Intel意识到通过提升主频比较“难”去实现性能提升,开始推出多 核CPU,通过提升“吞吐率”而不是“响应时间”,来达到目的。

通过并行提高性能。

条件。

  • 第一,需要进行的计算可以分解成几个可以并行的任务。
  • 第二,需要能够分解好问题,并确保几个人的结果能够汇总到一起。
  • 第三,在“汇总”这个阶段,还是得顺序执行

阿姆达尔定律(Amdahl’s Law):对于一个程序进行优化之后,处理器并行运算之后效率提升的情况。具体可以用这样一个公式 来表示: 优化后的执行时间 = 受优化影响的执行时间/加速倍数+不受影响的执行时间

1629670546064

总结延伸

通过提升主频,还是增加更多的CPU核心数量,通过并行来提升性能,都会遇到相应的瓶颈。

还有这样几个原则性的性能提升方法。

  • 1.加速大概率事件。

    特殊的向量和矩阵计算使用GPU运算。cache的运用

  • 2.通过流水线提高性能。 cpu指令执行的过程进行拆分,细化运行,现代CPU多核提升吞吐量。

    指令进行拆分之后可以让各个部分同时忙碌。类似单道批处理系统升级到多道批处理系统

  • 3.通过预测提高性能。

    “分支和冒险”、“局部性原理”这些CPU和存储系统设计方法

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值