HNU_CA_作业3-流水线、依赖、Cache、内存访问时间

一、流水线

总结指令流水线 CPI 的优化技术,
如基于硬件还是软件, 主要思想, 对应了 CPI 公式的哪个分量等。

现代处理器通过流水线来实现指令级并行(ILP),提高性能。流水化处理器的CPI为:
流水线 CPI = 理想流水线 CPI + 结构化冒险停顿 + 数据冒险停顿 + 控制冒险停顿

停顿的单位是每条指令。主要的ILP技术有:

技术降低CPI的哪一部分基于硬件/软件
前推、转发数据冒险停顿硬件
基本动态调度(记分牌)数据冒险停顿硬件
采用重命名的动态调度(Tomasulo)数据冒险停顿硬件
延迟分支和基本分支预测控制冒险停顿硬件
动态分支预测控制冒险停顿硬件
循环展开控制冒险停顿软件
编译器流水线调度数据冒险停顿软件

二、依赖

简单描述什么是真数据依赖(True data dependence),输出依赖(Output dependence),
反依赖(Antidependence), 寄存器重命名(Register renaming)

  • 真数据依赖/流依赖 True data /flow dependence【RAW】
    • S1定义了一个值,随后S2使用了这个值。
      记作 S 1   δ f   S 2 记作 S1\ \delta^f\ S2 记作S1 δf S2
    • 举例:值-a
a = b + c  // S1
d = a + c  // S2
  • 输出依赖(Output dependence)【WAW】
    • 两个语句都定义了一个值。
      记作 S 1   δ o   S 2 记作S1\ \delta^o \ S2 记作S1 δo S2
    • 举例:值-a
a = b + c  // S1
a = d     // S2
  • 反依赖(Antidependence)【WAR】
    • S1使用了一个值,而随后S2定义了这个值。
      记作 S 1   δ a   S 2 记作S1\ \delta^a \ S2 记作S1 δa S2
    • 举例:值-b
a = b + c  // S1
b = c + d  // S2
  • 输入依赖(Output dependence)【RAR】
    • 两个语句都使用了一个值。
      记作 S 1   δ i   S 2 记作S1\ \delta^i \ S2 记作S1 δi S2
    • 举例:值-b
a = b + c  // S1
d = b + 2  // S2
  • 寄存器重命名(Register renaming
    • 作用
      • 消除假数据冒险:WAR,WAW
      • 当指令执行发生错误而取消时,后面的指令可以保证现场的精确
    • 思路
      • 当一条指令写结果寄存器时,不直接写入,而是先写到一个中间寄存器过渡一下
      • 当这条指令提交时,再写到结果寄存器中
    • 方法
      • 使用重排序缓冲(Reorder Buffer,ROB)来实现;
      • 将逻辑寄存器(Architecture Register File,ARF)扩展来实现;
      • 使用统一的物理寄存器(Physical Register File,PRF)来实现寄存器重命名。

三、cache

(1)一个计算机系统用 32 位内存地址。它有 128KB 8 路组相联缓存,每个块大小为 64B。
计算标签(tag)、缓存索引(cache index) 和块偏移(block offset)的位数。

解:

  • 块偏移(block offset):64=26—>6位
  • 缓存索引(cache index):128KB/(8*64B)=217/(23*26)=28—>8位
  • 标签(tag):32-6-8=18位

(2)处理器有一个小型直接映射缓存, 能够容纳四个缓存块。
内存是按字节寻址的, 每个缓存块由 32 字节组成。
处理器使用 12 位内存地址。 假设每个缓存块的初始标签值如下:

标签
0000110
0100001
1000000
11Invalid

处理器从以下十进制地址顺序读取数据: 32, 48, 64, 128。
对于上述每个地址,指出缓存访问将导致命中还是未命中。 并给出详细过程。

解:

  • ( S , E,B,m)–>(2,1,5,12)
    • b-块偏移(block offset):32=25—>5位
    • s-缓存索引(cache index):4)==22—>2位
    • (m-s-b)-标签(tag):12-5-2=5位
  • 读32–未命中
    • 32=0b10 0000=0b01 00000:tag=00000,cache index=01,offset=00000;
    • 与缓存中块01的tag-00001不匹配,故不命中;
    • 替换操作后块01,标签00000
  • 读48–命中
    • 48=0b11 0000=0b01 10000:tag=00000,cache index=01,offset=10000;
    • 与缓存中块1的tag匹配(读32不命中后替换了之前的块1),故命中;
  • 读64–命中
    • 64=0b100 0000=0b10 00000:tag=00000,cache index=10,offset=00000;
    • 与缓存中块10的tag-00000匹配,故命中;
  • 读128–不命中
    • 128=0b1000 0000=0b1 00 00000:tag=00001,cache index=00,offset=00000;
    • 与缓存中块00的tag-00110匹配,故不命中;
    • 替换操作后块00,标签00001

四、内存访问时间

(1)简述平均内存访问时间公式,总结附录 B 的 6 种缓冲优化技术。

解:

  • 平均内存访问时间公式
    • 平均内存访问时间 = 命中时间 + 缺失率 x 缺失代价
    • 缺失:
      • 冷不命中:首次访问一个块时缺失【增大块的大小,但可能增加其他的缺失】
      • 容量不命中:缓存的所有行均已满时发生丢失【增大缓存】
      • 冲突不命中:Cache中仍有空行,主内存块与Cache中已填充的行发生冲突(即使有可用的空位,该块也试图占用已填充的行);冒险缺失会随相联度的增大而减小【采用全相联,但硬件实现成本高,可能降低处理器时间频率】
  • 6种缓冲优化技术
技术目的衡量折中
增大块大小降低缺失率降低冷不命中;更好利用空间局部性增加容量不命中、冲突不命中的代价低级存储器为高带宽、高延迟:大块;低带宽、低延迟:小块
增大缓存降低缺失率降低容量不命中可能延长命中时间,增加成本和功耗
提高相联度降低缺失率降低冲突不命中提高缺失代价经验规律:采用八路组相联和全相联一样有效
多级缓存降低缺失代价加快缓存速度,扩大缓存容量二级缓存的缺失率更高,偏向减少缺失,采用更高相联度和更大的块
读缺失优先于写缺失减少命中时间对于RAW,若未写完、还在写入缓冲区,则让读缺失先检查写入缓冲区的内容
索引缓存时避免地址转换减少命中时间缓存中使用物理地址少部分计算采用:地址空间保护等原因一部分页偏移量索引缓存,标志匹配采用物理地址–>索引读取缓存的同时,进行地址的转换

(2)计算题: 假设存在一个计算机,CPI 是 2(没有储存器停顿(Memory stalls)),仅有载入/储存指令进行数据访问,并且载入/储存的指令的占比是 36%。
假如缓存命中时间是 0, 缺失代价(Miss penalty)是 40 个时钟周期, 指令缓存缺失率(Instruction miss rate)是2%, 数据缓存缺失率(Data miss rate)是 4%。
请计算指令缓存和数据缓存平均内存访问时间、不使用 cache 技术的 CPU 的平均 CPI(等同miss rate 100%),和使用了 cache 技术相对无 cache 计算机获得的加速比。

解:

  • 1)指令缓存和数据缓存平均内存访问时间
    • 命中时间=0
    • 指令缓存缺失率=2%, 数据缓存缺失率= 4%
    • 缺失代价=40个时钟周期
    • 指令缓存平均内存访问时间:0+0.02*40=0.8 (个时钟周期)
    • 数据缓存平均内存访问时间:0+0.04*40=1.6(个时钟周期)
  • 2)不使用 cache 技术的 CPU 的平均 CPI(等同miss rate 100%)
    • 没有储存器停顿的CPI:2
    • 缺失周期:指令缓存不命中+数据缓存不命中
      • 因为指令缓存不命中的缺失周期:IC*1*40=IC*40
      • 因为数据缓存不命中的缺失周期:IC*0.36*1*40=IC*14.4
    • 平均CPI:2+40+14.4=56.4
  • 3)使用了 cache 技术相对无 cache 计算机获得的加速比
    • 有Cache的平均CPI:
      • 没有储存器停顿的CPI:2
      • 缺失周期:指令缓存不命中+数据缓存不命中
        • 因为指令缓存不命中的缺失周期:IC*0.02*40=IC*0.8
        • 因为数据缓存不命中的缺失周期:IC*0.36*0.04*40=IC*0.576
    • 平均CPI:2+0.8+0.576=3.376
    • 加速比: 56.4/3.376=16.7

这里感觉有点问题(2024/5/8经评论区指点,已改正合理版的想法):

  • 解答的依据1
  • 解答的依据2
  • 解答的矛盾/问题:(2024/5/8经评论区指点,已改正【合理版的想法】)
    • 合理版的想法是:下面的问题:指令缓存缺失率=数据缓存缺失率= 1%
      • 缺失周期(总存储器阻塞):
        • 因为指令缓存不命中的缺失周期:IC*0.01*50=IC*0.5
        • 因为数据缓存不命中的缺失周期:IC*0.5*0.01*50=IC*0.25
      • 总CPI:1IC+IC*0.5+IC*0.25=1.75IC
      • 加速比:1.75/1=1.75
    • 如果按上面的解法:下面的问题应该是
      • 缺失周期(总存储器阻塞):0.5*0.01*50=0.25
      • 总CPI:1+0.25=1.25
      • 加速比:1.25/1=1.25
    • 在这里插入图片描述
### 关于湖南大学计算机体系结构实验一的相关资料 在探讨湖南大学(HNU)关于计算机体系结构实验一的具体指导材料或报告时,可以从以下几个方面入手: #### 1. **课程背景** 计算机体系结构是一门研究计算机硬件与软件之间接口的核心课程。通常情况下,实验一是为了帮助学生理解基本概念并掌握基础技能而设计的。常见的实验目标可能涉及处理器指令集模拟、流水线性能分析或者存储器层次结构的设计[^3]。 #### 2. **实验内容推测** 基于一般高校开设此课程的经验,实验一的内容往往围绕以下主题展开: - 模拟简单CPU的工作过程。 - 使用工具实现单周期或多周期的数据通路仿真。 - 对特定算法进行汇编语言编程,并通过调试验证其正确性。 对于上述任务,可以利用Verilog HDL或其他硬件描述语言完成电路建模;也可以借助MIPS架构作为学习平台来编写相应的程序代码片段如下所示: ```verilog module cpu( input clk, input reset, output reg [31:0] pc_out ); always @(posedge clk or posedge reset) begin if (reset) pc_out <= 0; else pc_out <= pc_out + 4; // 假设每条指令长度固定为4字节 end endmodule ``` #### 3. **获取官方资源的方法** 由于具体学校的教学安排具有独特性,建议采取以下途径寻找更贴合实际需求的信息: - 登录学校教务系统的公告栏查看是否有上传的标准文档链接。 - 联系授课教师索要讲义副本以及配套练习题目解析说明文件夹路径地址等细节信息[^4]。 - 加入班级QQ群微信群分享交流心得经验共同进步成长成才之路越走越宽广美好未来等着我们一起去创造吧! ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值