计算机系统结构复习笔记

摘要:

最后一门!给爷冲

第一章 计算机系统结构的基础知识

  • CISC(复杂指令系统):复杂的指令集、复杂的硬件、较少的寄存器、简洁的软件代码。加速方法:用硬件代替软件,用指令代替子程序。
  • RISC(精简指令集):精简的指令集、简单的硬件、较多的寄存器,更多的代码行。加速方法:精简指令系统,将多余的资源实现加快,寄存器数量大大增多,规整指令,用流水线技术加快。
  • 阿姆达定律
  • CPU时间 = 执行程序所需的时钟周期数 * 时钟周期时间。
  • CPU时间是指一个程序在CPU上运行的时间,这个时间不包括IO时间。
  • 局部性原理:
    1. 时间局部性:如果一个信息项正在被访问,那么在近期它很有可能会被再次访问
    2. 空间局部性:程序即将用到的信息很可能与目前正在使用的信息在空间上邻近。
  • 响应时间:完成一个任务的全部时间
  • 吞吐率:单位时间内完成的任务数
  • MIPS和MFLOPS评价机器性能都不可靠。只有程序执行时间Te是可靠的。Te = 指令条数/(MIPS * 10^6)
  • 可靠性MTTF:是指多长时间出现一次故障。MTTR是指出现故障后,平均需要多长时间来恢复。

第三章 流水线技术

  • 流水线的段:流水线中每个子过程及其功能部件称为流水线的段

  • 流水线的瓶颈:流水线中执行时间最长的段。

  • 单功能流水线:流水线各段之间的链接固定不变,只能完成一种固定功能的流水线。

  • 多功能流水线:各段可以进行不同的连接,以实现不同功能的流水线。

  • 多功能流水线可以分为静态流水线和动态流水线:

    1. 静态流水线:同一时间内,多功能流水线中各段只能按照同一种功能的连接方式进行工作
    2. 动态流水线:同一时间内,多功能流水线中的各段可以按照不同的方式连接,同时执行多种功能
  • 吞吐率通常用TP表示,是指在单位时间内流水线所完成的任务数量或输出结果的数量。

  • 效率E:流水线中的设备实际使用时间与整个运行时间的比值。

  • 静态流水线在做功能切换时,要等前一种运算全部流出流水线之后才能进行后面的运算。

  • 非线性流水线的调度:

    1. 启动距离:向一条非线性流水线的输入端连续输入两个任务之间的时间间隔称为非线性流水线的启动距离。

    2. 禁用启动距离:会引起非线性流水线功能段使用冲突的启动距离

    3. 预约表、禁止表、冲突向量:ppt3.4

  • 相关可分为三类:数据相关(也称真数据相关),名相关,以及控制相关

    1. 数据相关:在前面修改的数值在后面会用到
    2. 名相关:
      1. 名:指令所访问的寄存器或者存储单元的名称,例如R4、0x10000000
      2. 名相关:如果两条指令使用相同的名,但是他们之间没有数据流动,则称这两条指令存在名相关。
      3. 名相关细分为:反相关、输出相关
        1. 反相关:前一条指令读的名与后一条指令写的名相同。先写后读会造成数据相关,所以先读后写称为反相关。
        2. 输出相关:前一条指令和后一条指令写相同的名
        3. 名相关特点:两条指令之间没有数据的传送
    3. 控制相关:分支指令引起的相关
  • 流水线冲突是指,由于相关等原因的存在,使得指令流中的下一条指令不能在指定的时钟周期执行。

  • 导致流水线冲突的原因很多,依据原因的不同,流水线冲突又可细分为3类:结构冲突,数据冲突,以及控制冲突

    1. 结构冲突是指因硬件资源满足不了指令重叠执行的要求而发生的冲突。
    2. 数据冲突是指当指令在流水线中重叠执行时,因需要用到前面指令的执行结果而发生的冲突。数据冲突分为三类:写后读冲突(RAW)写后写冲突(WAW)读后写冲突(WAR)
      1. 写后读冲突对应真数据相关。
      2. 写后写冲突对应输出相关
      3. 读后写冲突对应反相关
    3. 控制冲突是指流水线遇到分支指令和其它会改变PC值的指令所引起的冲突。
  • 数据冲突的解决:

    1. 对于写后写冲突和读后写冲突,对应于名相关,可用换名技术解决。
    2. 写后读冲突的解决方案:
      1. 重定向(无法解决load-use的情况)
      2. 指令调度(流水线调度)
  • 控制冲突的解决:

    1. 总是预测分支失败

    2. 总是预测分支成功

    3. 延迟分支:通过在分支指令后增加延迟槽,并将有用的指令从别处调度到延迟槽执行,当分支是否成功与分支目标地址被算出时,恰好能够进行对应的取指操作,从而有效的消除了分支延迟。无论分支成功还是失败,都能起效。在延迟槽中放入有用的指令,由编译器完成。能否带来好处取决于编译器能否把有用的指令调度到延迟槽中。调度分为三种:

      1. 从前调度:从前调度是指,从分支指令之前调度一条与该分支无关的指令到分支延迟槽中。

      2. 从目标处调度:从目标处调度是指,将分支目标地址对应的指令调度到延迟槽中。

      3. 从失败处调度从目标处调度是指,将分支目标地址对应的指令调度到延迟槽中。

      4. 由于只有当调入到延迟槽的指令实际上会被执行时,分支延迟技术才会真正起效,因此,可以认为:无论分支是否成功,从前调度均能消除控制冲突;只有当分支成功时,从目标处调度才能消除控制冲突;只有当分支失败时,从失败处调度才能消除控制冲突。

        既然从前调度的效果远胜于后两种调度,为什么还要有后两种方法呢?原因在于,前面提到的从前调度需要找到一条与该分支无关的指令,这样的指令通常是极少的。

    4. 分支取消机制:当分支的实际执行方向和事先所预测的一样时,执行分支延迟槽中的指令,否则就将分支延迟槽中的指令转化成一个空操作。

  • 数据冲突在ID段就可以检测出来

  • 相关是造成流水线冲突的一个主要原因,但并不是全部原因。消除相关是减小流水线冲突的一个主要办法

  • 相关是程序固有的一种属性,它反映了程序中指令之􏵉的相互依赖关系

  • 具体的一次相关是否会导􏺭实􏺮冲突的发生以及􏵺冲突会带来多长的停顿,则是流水􏵔线的属性。

第四章 指令级并行

第五章 存储系统

  • 考虑一个两级的存储系统:
    1. 命中率(在第一级存储器中找到所需信息的概率)= N1/(N1 + N2)。N1为访问M1的次数,N2为访问M2的次数
    2. 平均访存时间= T1 + (1 - H)Tm。其中T1为访问第一级存储器的时间,H为命中率,Tm为不命中开销。注意:不命中开销指的是从向M2发出访问请求到把整个数据块调入M1中所需的时间
    3. 不命中时的访问时间为T1 + Tm。Tm在第二点中已经解释。
  • 映射规则见组原课件
  • 关于平均访存时间、不命中率,重点看5.6节的课件第2、3页
  • 按写分配:写不命中时,先把所写单元所在的块调入cache再行写入。
  • 不按写分配:写不命中时,直接写入下一级存储器而不调块

做题时要注意

  • 多功能流水线画图求效率那种题,记得高度是段的总数
  • 非线性调度的问题,注意是和s0或