计算机性能评价
计算机有两种不同的性能度量
time to do the task
- 响应时间:完成单个任务所需要的的时间
- 执行时间
- 等待时间或延迟
tasks per day,hour,sec,ns…
- 吞吐率:单位时间所完成的任务总量
- 带宽
计算机性能:响应时间(执行时间)的倒数
计算机性能 = 1 / 执行时间
比较计算机性能时可以用,相应时间来衡量
系统相应时间(用户感受到的)
CPU执行时间:CPU真正花费在程序执行上的时间
- 用户CPU时间:用来运行用户代码的时间
- 系统CPU时间:为执行用户程序而需要运行一些操作系统代码的时间
其他时间:等待I/O操作完成或者CPU花在其他用户程序的时间
计算机系统性能 ≠ CPU性能
系统性能:表示系统相应时间
CPU性能:表示用户CPU时间(CPU真正用于用户程序执行上的时间)
CPU执行时间
一个程序的CPU执行时间 = 执行一个程序需要的(计算机)基本时间单元的数量 × 基本时间单元
一个程序的CPU执行时间 = 一个程序的CPU时钟周期数 × 时钟周期时间
= 一个程序的CPU时钟周期数 ÷ 时钟频率
一个程序的CPU时钟周期数 = 程序的指令数 × 每条指令的平均时钟周期数
其中:每条指令的平均时钟周期数:CPI
不同指令需要的执行时间是不同的
一个程序的CPU时钟周期数 = 程序的指令数 × CPI × 时钟周期数
时钟周期:
- 所有计算机都有一个固定频率的硬件时钟,决定各种硬件时间发生和执行的时间和顺序
- 硬件时钟所产生的的离散时间间隔统称为时钟周期
时钟频率
- 时钟周期的倒数
eg. 时钟周期为250ps, 对应的时钟频率是多少?
时钟频率 = 1/时钟周期 = 1/250ps = 4GHz
CPU的主频就是时钟频率
例题:
例题二:
所以A比B快1.2倍(快多少通过比值衡量)
基准测试程序集是专门进行性能评价的一组程序
Amdahl 定律(也叫阿姆达尔定律)
改进后的执行时间 = 受改进影响部分的执行时间 / 改进提高的倍数 + 不受影响的执行时间
硬件设计的基本策略:使最常用的部件执行最快
计算机功耗
- 动态功耗: CMOS中主要的能量消耗
动态功耗主要是指晶体管翻转时消耗的能量
减少芯片动态功耗的方法:
1.降低时钟频率
2.降低工作电压 - 静态功耗:即使芯片内晶体管关闭,仍有漏电流发生
处理器
数据通路:指令执行过程中,数据所经过的路径(包括路径中的部件),是指令的执行部件
控制器:对指令进行译码,生成指令对应的控制信号,控制数据通路的动作,能对指令的执行部件发出控制信号,是指令的控制部件(作用有:取指令,指令译码,执行指令,确定下一条指令,执行环境的保护)
MIPS数据通路
数据通路描述了指令执行过程中数据是怎样在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]
过程:
- 取指令:Inst ← [PC] , PC ← PC+4
- 指令译码: A ← [R2] , 立即数符号扩展为32位
- 计算访存地址 A + 4
- 读地址 A+4 的存储单元, LMD ← [A+4]
- 结果写回 : [R1] ← LMD
(LMD 是内部寄存器)
MUX多路选择器
Store指令
包含条件分支指令的数据通路:基本的MIPS数据通路
每条指令的功能实现可由四个基本操作实现:
- 读取某一主存单元内容,并将其装入某个寄存器
- 把一个数据从某个寄存器存入某个主存单元中
- 把一个数据从某个寄存器送到另一个寄存器或者ALU
- 进行某种算数或逻辑运算,把结果送进某个寄存器中
取指,译码等环节叫做一个个机器周期
程序计数器的值就是当前要执行指令的地址
控制信号
如:
RegWr : 决定寄存器是读是写
MemWr: 决定存储器是读是写
RegDst:决定是选择哪一个的寄存器的值
ALUsrc: 决定ALU的输入是哪一个
ALUetr: 决定ALU进行哪一种操作
MemtoReg: 决定哪个值写回寄存器
ExtOP: 决定是进行符号扩展还是零扩展
单周期处理器控制通路设计
- 确定数据通路上每个元件所需要的的控制信号以及控制信号的取指
- 汇总所有指令涉及到的控制信号,生成一张反应指令与控制信号之间的关系表
- 根据关系表得到每个控制信号的逻辑表达式,据此设计控制器电路
单周期处理器:时钟周期取决于最复杂的指令所需要的时间
多周期处理器
多周期处理器实现
多周期CPU指的是将整个CPU的执行过程分成几个阶段,每个阶段用一个时钟去完成,然后开始下一条指令的执行,而每种指令执行时所用的时钟数不尽相同,这就是所谓的多周期CPU。
a). 把指令执行分成多个阶段,每个阶段都在一个时钟周期内完成
时钟周期以最复杂阶段所需时间为准
尽量分成大致相等的若干阶段
每个阶段内最多只能完成:1次访存 或 读/写寄存器 或 ALU运算
b) 每个阶段的结果保存在专用的内部寄存器中
多周期处理器的好处:
流水线处理器
流水线处理模式,相对非流水线,本质上是一种生产管理模式的改变。在硬件条件有空闲的前提下,通过划分工作步骤,让硬件处于填满状态,从而提升工作效率。在计算机处理器体系结构中,正是采用这种方式来对指令进行处理
冒险:流水线遇到无法正确执行后续指令或者执行不了不该执行的指令的现象
结构冒险:同一个部件同时被不同指令使用
一个功能部件同时被多个指令使用的现象称为结构冒险(或者称为资源冲突)
为了使得流水线能够顺利工作,规定:
- 每个功能部件每条指令只能使用一次(如不能两次或者两次以上使用寄存器文件写端口)
- 每个功能部件必须在相同阶段被使用(如总是在第五阶段使用寄存器文件写端口)
解决方法:
一:在流水线中插入气泡
插入一个气泡:抵达/通过某个流水段的指令正常执行,其余指令在各自当前的流水段等待一个周期
方法二:
增加一个空的写回阶段,加一个NOP操作
流水线寄存器(下图中那几个长得超级长的寄存器):保存前一个阶段的结果,为后一个阶段提供输入