计算机体系结构
基本原理
体系结构的发展
成本、价格
集成电路成本 = (晶片成本 + 晶片测试成本 + 封装和最终测试成本 ) / 通过最终测试的产品数量
晶片产量 = 晶片成品率 * (1 + 单位面积缺陷 * 晶片面积 / alpha ) ^ -alpha
评价性能
量化准则
加快经常性事件的速度
Amdahl定律: 总加速比 = 原来执行时间/新的执行时间 = 1/( (1-增强部分比例)+增强部分比例/增强部分加速比 )
CPU性能公式
CPI:每条指令执行所需要的时钟周期数。CPI = 一个程序的CPU时钟周期数 / 该程序的指令数IC
CPU时间 = 一个程序的CPU时钟周期数 * 时钟周期长度 = 指令数IC * 每指令时钟周期数CPI * 时钟周期的长度
MIPS = 指令数 / (指令的执行时间 * 1M) = 时钟频率 / (CPI * 1M)
局部性原理
- 程序经常会重复使用它最近使用过的指令和数据。经验规律指出程序有90%的执行时间执行的是其10%的代码。
利用并行性
性价比
功耗与效率
谬误和易犯错误
指令集原理
指令集系统结构分类
- 堆栈系统结构
- 累加器系统结构
- 通用寄存器系统结构
- 寄存器-寄存器结构:简单、定长的指令编码,简单的代码生成模式,每条指令运行所需的时钟周期相近。一个程序的指令数量比可以直接访问存储器的系统结构多;指令多、指令密度低使程序变大
- 寄存器-存储器结构:数据不需要专门的载入指令就可以直接访问;指令格式更易于程序员编码;代码密度高。操作数位置不同使每条指令的执行时钟周期不同;同一条指令内对内存地址和寄存器编码,限制了寄存器的数量;源操作数在二元操作中被破坏,操作数不是等价的。
- 存储器存储器结构:最紧凑;不浪费寄存器来做临时交换空间。指令长短各不相同;每条指令的操作各不相同;内存访问带来存储器瓶颈。
内存寻址
字节顺序
- Little Endian:二进制地址形如”x…x00”,位于32位字中最低位置的字节。
- Big Endian:二进制地址形式如”x…x00”,位于32字中的最高位置的字节。
对齐
寻址模式
- 寄存器寻址
- 立即数寻址
- 位移量寻址
- 寄存器间接寻址
- 间接寻址
- 直接寻址
- 存储器间接寻址
- 自动递增寻址
- 自动递减寻址
- 比例寻址
DSP特有寻址模式
- 循环递增(递减)寻址
- 位反转寻址
操作数的大小与类型
- 指定操作数类型的方式
- 通过操作码编码
- 通过在数据上附带类型标记
- 操作数类型
字符(单字节)
半字(16位)
字(32位)
单精度浮点(一个字)
双精度浮点(两个字)
绝大多数情况下,整数使用补码,浮点数使用IEEE754
有些系统有字符串类型,操作很有限
有些计算机提供十进制数字格式,称作压缩十进制或者二进制编码十进制:用4个二进制位对一位十进制进行编码。数值字符串有时称为非压缩十进制。在压缩和非压缩编码之间转换成为压缩和解压缩。
- 媒体处理器和DSP特有操作数
- 顶点
- 像素
- 定点数
指令集的操作
算数与逻辑运算
数据传输
控制
系统
浮点
十进制
字符串
图像
多媒体指令
单指令流多数据流(SIMD)或称为向量指令
饱和算法
多种舍入方式
乘加指令(MAC)
控制流指令
条件转移
无条件跳转
过程调用
过程返回
指定地址的方式
直接地址
PC相对寻址
寄存器间接跳转
条件转移方案
条件码
条件寄存器
比较并分支
过程调用方案
调用者保存
被调用者保存
指令集编码
- 边长编码
- 定长编码
- 混合编码
编译器相关问题
MIPS系统结构
Trimedia TM32结构
谬误和易犯的错误
指令级并行
流水线基本原理
RISC指令集基础
RISC指令集的简单实现
- IF 取指令周期
- ID 指令译码/读寄存器周期
- EX 执行/有效地址周期
- MEM访问存储器
- WB 写回
5段流水线
流水线基本性能
流水线加速比 = 非流水线指令平均执行时间 / 流水线指令平均执行时间
= 1 / (1+每条指令流水线停顿周期数) * 非流水线时钟周期 / 流水线时钟周期
= 1 / (1+每条指令流水线停顿周期数) * 流水线深度
流水线冲突
- 资源冲突
- 数据冲突
- 使用旁路
- 控制冲突
- 保持或者更新流水线
- 预测分支未选中
- 预测分支选中
- 分支延迟
流水线实现
实现流水线的困难
- 处理异常
扩展MIPS流水线处理多周期操作
指令级并行
- 指令相关性
- 数据相关(真数据相关)
- 名字相关
- 反相关(Antidependence):由名字重复使用造成的相关,它与先读后写(WAR)冲突对应。
- 输出相关
- 数据冲突
- 写读冲突(RAW):对应真数据相关
- 写写冲突(WAW):对应输出相关
- 读写冲突(WAR):对应反相关
- 控制相关
- 动态调度流水线
- 记分板调度
- Tomasulo算法(寄存器重命名,直接通路)
- 动态分支预测
- 动态预测缓冲器(分支历史表)
- 1位预测
- 2位预测
- 相关分支预测
- Tournament预测器
- 高性能指令传送
- 分支目标缓冲器
- 集成指令预取部件
- 返回地址预测器
- 每周期发射多条指令
- 静态调度的超标量
- 动态调度的超标量
软件方法
- 循环展开
- 静态分支预测
- VLIW静态多发射
- 软件流水
- 路径调度
- 超级块调度
硬件支持
- 条件执行指令
- 带硬件支持的编译器猜测
存储器层次结构设计
存储器性能
Cache设计
块的放置策略
- 直接映射
- 全相联映射
- 组相联映射
如何查找块
块替换策略
- 随机
- LRU最近最少使用
- FIFO先进先出
写策略
- 写直达Write Through
- 写回法Write Back
- 写分配
- 不按写分配
Cache的性能
降低Cache的缺失代价
- 多级Cache
- 关键字优先和提前重启动
- 确定读缺失对写的优先级
- 合并写缓冲区
- 牺牲Cache
cache缺失分类
- 强制缺失(冷启动缺失或者首次访问缺失)
- 容量缺失
- 冲突缺失
降低cache缺失率
- 增加块大小
- 增加cache容量
- 增加相联度
- 路预测和伪相联cache
- 编译优化
通过并行降低缺失率和缺失代价
- 非阻塞Cache
- 指令和数据硬件预取
- 编译控制预取
减少命中时间
- 小而简单的cache
- 索引过程中避免地址转换
- 流水化cache访问
- 跟踪cache
提高内存性能
- 增大字长
- 多体交叉存储器
- 独立存储体?
存储器技术
- 快速页模式
- SDRAM
- DDR
- RAMBUS
虚拟存储器
- 快速地址转换TLB
- 页大小
多处理器和线程级并行
并行结构分类
- SISD
- SIMD
- MISD
- MIMD
- 集中式共享存储结构,或者对称多处理器系统,或者均匀存储器访问(UMA)
- 分布式存储器
- 共享地址空间
- 多机系统,或者消息传递多处理器系统 、
并行处理的性能
多处理器cache一致性
- 监听协议
- 基于目录的cache一致性协议
同步
存储器一致性
线程级并行
存储系统
可靠性,有效性
- 故障率
- 平均无故障时间
RAID
IO性能评测
- 吞吐率与相应时间
Little排队理论
IO系统设计
互联网络和集群
- 集群
缺点
优势
- 可靠性和可扩展性
价格
- google集群实例
参考资料
- John Hennessy, David Patterson, Computer Architecture: A Quantitative Approach (3rd Edition)