计算机有两种不同的性能度量
计算机性能 = 1 / 执行时间
比较计算机性能时可以用,相应时间来衡量
系统相应时间(用户感受到的)
CPU执行时间:CPU真正花费在程序执行上的时间
其他时间:等待I/O操作完成或者CPU花在其他用户程序的时间
计算机系统性能 ≠ CPU性能
系统性能:表示系统相应时间
CPU性能:表示用户CPU时间(CPU真正用于用户程序执行上的时间)
一个程序的CPU执行时间 = 执行一个程序需要的(计算机)基本时间单元的数量 × 基本时间单元
一个程序的CPU执行时间 = 一个程序的CPU时钟周期数 × 时钟周期时间
= 一个程序的CPU时钟周期数 ÷ 时钟频率
一个程序的CPU时钟周期数 = 程序的指令数 × 每条指令的平均时钟周期数
其中:每条指令的平均时钟周期数:CPI
不同指令需要的执行时间是不同的
一个程序的CPU时钟周期数 = 程序的指令数 × CPI × 时钟周期数
时钟周期:
时钟频率
eg. 时钟周期为250ps, 对应的时钟频率是多少?
时钟频率 = 1/时钟周期 = 1/250ps = 4GHz
CPU的主频就是时钟频率
例题:
例题二:
所以A比B快1.2倍(快多少通过比值衡量)
改进后的执行时间 = 受改进影响部分的执行时间 / 改进提高的倍数 + 不受影响的执行时间
定律描述
硬件设计的基本策略:使最常用的部件执行最快
数据通路:指令执行过程中,数据所经过的路径(包括路径中的部件),是指令的执行部件
控制器:对指令进行译码,生成指令对应的控制信号,控制数据通路的动作,能对指令的执行部件发出控制信号,是指令的控制部件(作用有:取指令,指令译码,执行指令,确定下一条指令,执行环境的保护)
数据通路描述了指令执行过程中数据是怎样在CPU的各个部件之间传递的
加法指令: ADD R1 ,R2 , R3
功能: R1 ← R2 + R3
过程:
Inst(内部寄存器)
1.取指令: Inst ← Mem[PC] , PC ← PC + 4
2.指令译码: A ← [R2] , B ← [R3]
3.完成加法: ALUOutPut ← A + B
4.结果写回: [R1] ← ALUOutPut
Load指令: LW R1,R2 , #4
功能: R1 ← Mem[R2 + 4]
过程:
Store指令
包含条件分支指令的数据通路:基本的MIPS数据通路
每条指令的功能实现可由四个基本操作实现:
取指,译码等环节叫做一个个机器周期
程序计数器的值就是当前要执行指令的地址
如:
RegWr : 决定寄存器是读是写
MemWr: 决定存储器是读是写
RegDst:决定是选择哪一个的寄存器的值
ALUsrc: 决定ALU的输入是哪一个
ALUetr: 决定ALU进行哪一种操作
MemtoReg: 决定哪个值写回寄存器
ExtOP: 决定是进行符号扩展还是零扩展
多周期处理器实现
多周期CPU指的是将整个CPU的执行过程分成几个阶段,每个阶段用一个时钟去完成,然后开始下一条指令的执行,而每种指令执行时所用的时钟数不尽相同,这就是所谓的多周期CPU。
a). 把指令执行分成多个阶段,每个阶段都在一个时钟周期内完成
时钟周期以最复杂阶段所需时间为准
尽量分成大致相等的若干阶段
每个阶段内最多只能完成:1次访存 或 读/写寄存器 或 ALU运算
b) 每个阶段的结果保存在专用的内部寄存器中
流水线处理模式,相对非流水线,本质上是一种生产管理模式的改变。在硬件条件有空闲的前提下,通过划分工作步骤,让硬件处于填满状态,从而提升工作效率。在计算机处理器体系结构中,正是采用这种方式来对指令进行处理
冒险:流水线遇到无法正确执行后续指令或者执行不了不该执行的指令的现象
一个功能部件同时被多个指令使用的现象称为结构冒险(或者称为资源冲突)
为了使得流水线能够顺利工作,规定:
解决方法:
一:在流水线中插入气泡
插入一个气泡:抵达/通过某个流水段的指令正常执行,其余指令在各自当前的流水段等待一个周期
方法二:
增加一个空的写回阶段,加一个NOP操作
流水线寄存器(下图中那几个长得超级长的寄存器):保存前一个阶段的结果,为后一个阶段提供输入