计算机系统结构复习
市场分类
- 个人移动设备:手机、平板电脑等
- 桌面计算机:个人计算机、工作站
- 服务器:可靠性、可扩展性、吞吐量
- 集群/仓库级计算机
- 嵌入式计算机
计算机定义
原始定义:由程序员(机器语言)看见的系统属性,即概念性结构和功能行为,以区分数据流动和控制逻辑设计的组成及物理实现。
现代定义:是在满足功能、性能和价格目标的条件下;设计、选择和互联硬件部件构成计算机。
- 主存容量与编址方式(按位、按字节、按字访问等)的确定属于计算机系统结构。
- 主存速度应该多块,在逻辑结构上需要采用什么措施属于计算机组成。
- 主存系统的物理实现,如存储器器件的选定、逻辑电路的设计、微组装技术的选定属于计算机实现。
可靠性
可靠性:广义上包括可靠性、安全性和可用性
- MTTF:指系统无故障运行的平均时间
- MTTR:指系统从发生故障到维修结束之间的时间段的平均值。
- MTBF:指系统两次故障发生时间之间时间段的平均值。
- FIT:故障率:MTTF的倒数
提高可靠性的方法
- 时间冗余:重复操作直到没有错误
- 资源冗余:配置另外的相同部件,有错时用于替代出错部件。
性能测试指标
响应时间、CPU时间、吞吐量
基准程序测试集
- 例如SPEC,SPEC率=参考计算机的执行时间/A的执行时间
- SM(SPEC率的几何平均值):N个SPEC测试程序的SPEC率的几何平均值
指令集系统结构的分类
不同指令集系统结构最根本的区别:在于处理器内部数据的存储结构不同
- 栈:操作数隐含在栈顶
- 累加器:一个隐含操作数就是累加器
- 通用寄存器:只能明确指定操作数
通用寄存器系统结构分类:
- 寄存器-存储器(RM结构):一般指令都能访问寄存器
- 寄存器-寄存器结构(RR结构):只有load和store指令能够访问存储器(MIPS)
- 存储器-存储器结构(MM结构):现实不存在,把所有数据存储在存储器中
存储器寻址
基本单位:按字寻址,在MIPS中一个字4个字节,即32位
常用寻址方式:最常用的是立即数寻址和位移量寻址
常用编码方式
- 变长编码:允许所有操作使用所有寻址方式。不适合流水线
- 定长编码:把操作和寻址方式组合在操作码里。代码量大但是译码简单,适合流水线。
MIPS指令,32位定长编码,其中6位是基本操作码。
CPU性能公式
CPU时钟周期:一个时钟脉冲所需要的时间。
CPU时钟频率(主频):一秒中内的时钟脉冲数量,即时钟周期的倒数。
CPI:执行一条指令所需要的时钟周期数目=总周期数/总指令数
CPU时间:运行一个程序所花费的时间=运行该程序所需要的时钟周期数/主频=(指令条数*CPI)/主频
MIPS(每秒执行多少百万条指令)=主频/CPI
流水线
流水线的定义:流水线是利用执行指令操作之间的并行性,实现多条指令重叠执行的技术。
吞吐量:单位时间从流水线流出的指令数
流水线可以:
- 制造快速CPU的关键技术:减少CPUtime
- 改进吞吐量
- 改进资源利用率
流水线减少执行时间:
- 每条指令执行用一个时钟周期的机器(单周期实现):减少时钟周期长度
- 每条指令执行用多个时钟周期的机器:流水线减少CPI
冒险
结构冒险
发生在同一个时钟周期,2条或多条指令想要使用同一个硬件资源。
解决
分开指令存储器和数据存储器、指令缓冲器。前半周期写入寄存器,后半周周期读出寄存器。停顿流水线
数据冒险
由于流水线上指令重叠执行,使得后面依赖前面指令的结果,得不到前面指令的结果。
解决
编译器插入两个停顿、暂停数据相关流水线、内部前推(专用数据相关通路),编译器重排序,停顿。
控制冒险
在进入ID段的时候,转移条件和转移目标地址,不能按时提供给IF段取指令。
解决方法
有条件跳转,前后都插入一个nop;无条件跳转,就在后面添加一个nop
冻结或冲刷流水线、预测转移不发生、预测转移发生、转移延迟。
预测转移不选中:转移未选中 No stall、转移发生 1 stall
流水线信号
BTAKEN信号为1的时候发生转移,为0的时候PC=PC+1
store指令的时候,SST=1,否则SST=0;
SIMM=1的时候说明选择立即数
当指令为ALU运算类型的时候,并且WZ=1,才把ALU的zero输出打入到Z寄存器中
选择C的输出的时候,SLD=0(ALU),选择D的时候SLD=1(load)
WMEM写寄存器
BDEPEN
EXE_WREG==1 表示rd确实为目的寄存器,排除了store指令
ADEPEN
ID_rs1IsReg排除了转移指令
发生转移的时候,BTAKEN=1,封锁后面的写信号;不发生转移的时候,BTAKEN=0;
异常
精确异常:如果流水线停下来使异常指令之前的指令能够正常结束,异常指令及其之后的指令能够重新启动,则称该流水线是精确异常。
非精确异常:异常发生后,要恢复执行前的状态很困难。
cache
cache映像规则
直接映像、全相联、组相联
索引:log2(块数直接映像)或log2(组数组相联)
标志Tag位数:物理地址位数-索引位数-位移量位数
替换规则
随机替换、LRU、FIFO(先进先出)
写策略
- 如果数据写cache的同时也写入主存,cache被称为写直达(只需要一位valid bit)
- 如果数据写cache的时候不写入主存,cache被称为写回(需要valid和dirty位)
写直达
写停顿-CPU必须等待写操作完成
写缓冲
- 一个小缓冲区,存放等待写入主存的几个值
- 为了避免等待,很多CPU都使用一个写缓冲
- 写操作集中时,缓冲很有用
- 不能完全消除停顿。
写缺失
如果要写的块不在cache中,有两种策略选择。
- 写分配:写失效时,把所写单元所在块调入cache,然后在进行写命中操作。
- 不按写分配:写失效时,直接将值写入下一级存储器而不将相应的块调入cache,写的值不在cache中。
通常来说,写回cache采用写分配,写直达cache采用不按写分配。
性能计算
平均访存时间=命中时间+缺失率*缺失代价
cache优化
减少缺失率
- 增大块容量
- 增大cache容量
- 更大的相连度
- 编译器优化
减少缺失代价
多级cache
全局缺失率:这级cache缺失次数除以CPU产生的访存次数
局部缺失率:这一级cache的缺失次数除以访问这级cache的总次数。
关键字优先(不等到取到整个块后才重新启动CPU)
首先从存储器请求缺失的字并尽可能快地送到CPU中;让CPU继续执行同时存放块中的其余字。
读缺失优于写缺失
- 系统必须小心检查写缓冲中是否存在有读缺失要读的值。(读缺失的地址和写缓冲中的地址有冲突,就不能先读主存。)
合并写缓冲
牺牲缓冲
- 牺牲缓存是一个小的全相联cache,它存放几个最近被替换出的块。
通过并行减少确实代价和缺失率
- 非阻塞cache增加cache带宽
- 在处理读缺失的过程中,允许cache继续提供命中
- 硬件预取:在cpu实际需要访存数据以前,提前从主存取数据。
- 编译预取:编译器插入预取指令请求数据
- 捆绑预取:请求预取的值直接装入寄存器。
- 非捆绑预取:将数据预取到cache,不放入寄存器。
减少cache的命中时间
小和简单的cache:使用小的和直接映像cache
避免地址转换
- cache也使用虚拟地址
- 地址转换和cache访问并行进行
- 虚拟cache虚拟标识:在命中时,不需要从虚拟地址转换位物理地址
流水线cache访问:写命中比读命中花费更长时间
- 第一步标识检查
- 第二步写数据
路预测:在cache中预留特殊的位,用来预测下一次访问cache可能在组中会用到的路和块。
踪迹cache:块中动态指令序列,而不是限制指令在一个静态cache块中。cache块中包含了由CPU确定要执行指令的动态踪迹,而不是仅由存储器确定的静态指令序列。
主存
主存常采用DRAM,cache采用SRAM。
主存的性能
- 延迟Latency
- 带宽Bandwidth
提高带宽方法
- 增加主存储器带宽(每次传输几个字)
- 简单交叉存储器(存储器芯片按多个体组织以便并行读或写多个字)
虚拟存储器
VM工作机制,程序启动时:
- OS将程序复制到RAM
- 如果没有足够的RAM空间,OS停止复制,开始运行已经装入RAM的部分程序
- 当程序需要运行不在RAM的那部分时,OS将从磁盘复制这部分程序到RAM中
- 为了从磁盘复制部分程序到RAM,OS需要替换已经在RAM中的部分程序,如果需要移走程序的页是脏的,OS则需要复制有脏标志的页到磁盘。
写磁盘是写回操作
目前大多数操作系统会在映射显示存储器或者其他IO设备,或者位数据库代码使用极大页面。
缺失分类
- 强制缺失:第一次访问一个块
- 容量缺失:如果cache容纳不了一个执行程序的所有块,由于一些块被替换出去后又要被访问员引起容量缺失。
- 冲突缺失:如果块放置策略是直接映像或组相联,如果有太多块映射到一组,一块可能被替换后又要被访问从而引起冲突缺失。
cache一致性
- 写废:写入cache时,该块在其他处理机中的拷贝为无效
- 写改:当一个处理机往cache的某个块写数据的时候,新的数据也写到其他处理机cache的相应的块中。通过广播使其他cache中所有对应于该数据项的副本进行更新。
题目
消除流水线的瓶颈段的方法通常为:增加流水线级数和提高流水线并行度两种方法。
不需要编址的数据存储空间是:栈
从计算机系统结构来看,汇编语言程序员看到的机器属性是:编程要用到的硬件组织。
几何平均值之比等于性能比值的几何平均值,且SPECRatio基准计算机的选择无关紧要。
假设程序计数器PC被设置为0x2000 0000,可以使用MIPS的跳转(j)指令将pc设置为0x4000 0000(x不可以):j指令为原来的PC加上操作数(26位)×4,即最多为 0x2*** **** 。(beq也不可以,beq是PC=PC+4+immediate*4,其中immediate是16位)
静态流水线各段只能按同一种功能连接方式工作,当计算加法切换到乘法的时候,要等加法全部清空才能进入。注意S8的计算要依赖于S6,所以要等S6结束后才能执行S8。
流水线的加速比为原来的指令执行时间/现在的时钟周期时间
实现精确异常需要确保:异常指令及其后面的指令没有改变机器的状态。
指令集的设计和流水线的实现之间没有关系。
注意CPI是已经平均进去访存时间了,只是没有加失效时间,所以只需要添加失效时间。
存储器层次利用了时间局限性,存储器层次结构大部分容量处于最低层
通常来说,存储器延迟越短,cache块越小;存储器带宽越高,cache块越大。
虚拟存储器是为了扩大存储系统容量。
真题
10分选择题,10分填空题(三个冒险)
选择题:基准测试程序测试了什么东西(主频、cpu、速度)
- 计算CPI,计算时间
- 寄存器状态,值是多少
- PPT里面的写分配,不写分配
- 优化cache里面的提升缺失率(编译优化),蓝本子上有,矩阵乘法(具体缺失了多少次)优化,算二级cache
- 流水线的图,时序图,算什么东西,最后一章左上角,取什么路径,交换指令次序来减少停顿,adepend、bdepend取ALU的结果还是存储器里面的结果(数据前推)。
- cache和TLB的综合
- 多少位,索引多少位
- 虚拟地址转物理地址
- 四路组相连