市场分类

  • 个人移动设备:手机、平板电脑等
  • 桌面计算机:个人计算机工作站
  • 服务器:可靠性、可扩展性、吞吐量
  • 集群/仓库级计算机
  • 嵌入式计算机

计算机定义

原始定义:由程序员(机器语言)看见的系统属性,即概念性结构和功能行为,以区分数据流动和控制逻辑设计的组成及物理实现。

现代定义:是在满足功能、性能和价格目标的条件下;设计、选择和互联硬件部件构成计算机。

  • 主存容量与编址方式(按位、按字节、按字访问等)的确定属于计算机系统结构。
  • 主存速度应该多块,在逻辑结构上需要采用什么措施属于计算机组成。
  • 主存系统的物理实现,如存储器器件的选定、逻辑电路的设计、微组装技术的选定属于计算机实现。

可靠性

可靠性:广义上包括可靠性、安全性和可用性

  • 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工作机制,程序启动时:

  1. OS将程序复制到RAM
  2. 如果没有足够的RAM空间,OS停止复制,开始运行已经装入RAM的部分程序
  3. 当程序需要运行不在RAM的那部分时,OS将从磁盘复制这部分程序到RAM中
  4. 为了从磁盘复制部分程序到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、速度)

  1. 计算CPI,计算时间
  2. 寄存器状态,值是多少
  3. PPT里面的写分配,不写分配
  4. 优化cache里面的提升缺失率(编译优化),蓝本子上有,矩阵乘法(具体缺失了多少次)优化,算二级cache
  5. 流水线的图,时序图,算什么东西,最后一章左上角,取什么路径,交换指令次序来减少停顿,adepend、bdepend取ALU的结果还是存储器里面的结果(数据前推)。
  6. cache和TLB的综合
    1. 多少位,索引多少位
    2. 虚拟地址转物理地址
    3. 四路组相连