计算机组成原理 - CPU (学习笔记二)

  • 程序的 CPU 执行时间 = 指令数 × CPI × Clock Cycle Time

  • IPC(Instruction Per Clock),一个时钟周期里面能够执行的指令数,CPU 的吞吐率

  • 在指令乱序执行的过程中,我们的取指令(IF)和指令译码(ID)部分并不是并行进行

  • 如何同一个时间执行两条指令?

  • 一次性从内存里面取出多条指令,然后分发给多个并行的指令译码器,进行译码,然后对应交给不同的功能单元去处理

  • 多发射(Mulitple Issue)和超标量(Superscalar)

  • 多发射?同一个时间,可能会同时把多条指令发射(Issue)到不同的译码器或者后续处理的流水线中去

  • 超标量的 CPU - 很多条并行的流水线

  • 平时所说的 14 级流水线,指的通常是进行整数计算指令的流水线长度

  • 超长指令字(VLIW)技术可以搞定指令先后的依赖关系,使得一次可以取一个指令包

  • 超线程(Hyper-Threading,在单个 CPU 核心里面切换运行不同线程的任务。超线程的 CPU,其实是把一个物理层面 CPU 核心,“伪装”成两个逻辑层面的 CPU 核心。这个 CPU,会在硬件层面增加很多电路,使得我们可以在一个 CPU 核心内部,维护两个不同线程的指令的状态信息。(双份的 PC 寄存器、指令寄存器乃至条件码寄存器。这样,这个 CPU 核心就可以维护两条并行的指令的状态)。

  • 单指令多数据流(SIMD)- NumPy 直接用到了 SIMD 指令

  • 异常和中断

  • 异常的分类:中断、陷阱、故障和中止

  • 中断(Interrupt)。顾名思义,自然就是程序在执行到一半的时候,被打断了。这个打断执行的信号,来自于 CPU 外部的 I/O 设备。

  • 陷阱(Trap)。陷阱,应用程序调用系统调用的时候,也就是从程序的用户态切换到内核态的时候。我们的应用程序通过系统调用去读取文件、创建进程,其实也是通过触发一次陷阱来进行的。这是因为,我们用户态的应用程序没有权限来做这些事情,需要把对应的流程转交给有权限的异常处理程序来进行。

  • 故障(Fault)。加法计算发生了溢出,其实就是故障类型的异常。这个异常不是我们在开发的时候计划内的,也一样需要有对应的异常处理程序去处理。

  • 中止(Abort)。当 CPU 遇到了故障,但是恢复不过来的时候,程序就不得不中止了。

  • 异常的处理:上下文切换

  • CISC & RISC

  • 实际在 CPU 运行的程序里,80% 的时间都是在使用 20% 的简单指令

  • CISC 的架构,其实就是通过优化指令数,来减少 CPU 的执行时间。而 RISC 的架构,其实是在优化 CPI。因为指令比较简单,需要的时钟周期就比较少。

  • 微指令架构的 CPU 里面,译码器会把一条机器码,“翻译”成好几条“微指令”。

  • 这些 RISC 风格的微指令,会被放到一个微指令缓冲区里面,然后再从缓冲区里面,分发给到后面的超标量,并且是乱序执行的流水线架构里面。

  • Intel 就在 CPU 里面加了一层 L0 Cache。这个 Cache 保存的就是指令译码器把 CISC 的指令“翻译”成 RISC 的微指令的结果

  • 通用 & 专用

  • GPU: 多核并行和 SIMT, “统一着色器架构”

  • FPGA : 现场可编程门阵列(Field-Programmable Gate Array)

  • ASIC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值