实验一-流水线及流水线中的冲突.pdf

上传人:scccc 文档编号:11337925 上传时间:2021-07-27 格式:PDF 页数:9 大小:385.92KB
返回 下载 相关 举报
实验一-流水线及流水线中的冲突.pdf_第1页
第1页 / 共9页
实验一-流水线及流水线中的冲突.pdf_第2页
第2页 / 共9页
实验一-流水线及流水线中的冲突.pdf_第3页
第3页 / 共9页
实验一-流水线及流水线中的冲突.pdf_第4页
第4页 / 共9页
实验一-流水线及流水线中的冲突.pdf_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《实验一-流水线及流水线中的冲突.pdf》由会员分享,可在线阅读,更多相关《实验一-流水线及流水线中的冲突.pdf(9页珍藏版)》请在三一文库上搜索。

1、实验一 流水线及流水线中的冲突 程元彬 PB12011076 实验目的 1. 加深对计算机流水线基本概念的理解; 2. 理解 MIPS 结构如何用 5 段流水线来实现,理解各段的功能和基本操作; 3. 加深对数据冲突、结构冲突的理解,理解这两类冲突对 CPU 性能的影响; 4. 进一步理解解决数据冲突的方法,掌握如何应用定向技术来减少数据冲突引起的停顿。 5. 加深对指令调度和延迟分支技术的理解; 6. 熟练掌握用指令调度技术来解决流水线中的数据冲突的方法; 7. 进一步理解指令调度技术和延迟分支技术对 CPU 性能的改进。 实验平台 指令级和流水线操作级模拟器 MIPSsim, 实验内容和步

2、骤 首先要掌握 MIPSsim 模拟器的使用方法。 一、流水线及流水线中的冲突观察 1. 启动 MIPSsim。 2根据预备知识中关于流水线各段操作的描述,进一步理解流水线窗口中各段的功能,掌 握各流水寄存器的含义。 (用鼠标双击各段,就可以看到各流水寄存器的内容) 3. 熟悉 MIPSsim 模拟器的操作和使用方法。 可以先载入一个样例程序(在本模拟器所在的文件夹下的“样例程序”文件夹中) ,然后 分别以单步执行一个周期、执行多个周期、连续执行、设置断点等的方式运行程序,观察程 序的执行情况,观察 CPU 中寄存器和存储器的内容的变化, 特别是流水寄存器内容的变化。 4. 勾选配置菜单中的“

3、流水方式” ,使模拟器工作于流水方式下。 5观察程序在流水线中的执行情况,步骤如下: (1) 用 MIPSsim 的“文件”菜单中的“载入程序”来加载 pipeline.s(在模拟器所在文 件夹下的“样例程序”文件夹中) ; (2) 关闭定向功能。 这是通过在 “配置” 菜单中去选 “定向” (即使得该项前面没有 “” 号)来实现的; (3) 用单步执行一周期的方式( “执行”菜单中,或用 F7)执行该程序,观察每一周 期中,各段流水寄存器内容的变化、指令的执行情况(代码窗口)以及时钟周期 图; (4) 当执行到第 10 个时钟周期时,各段分别正在处理的指令是: IF: ADDI $r6,$r

4、0,8 ID: ADD $r2,$r1,$r0 EX: BGEZAL $r1,func MEM: 无无 WB: 无无 画出这时的时钟周期图。 6. 这时各流水寄存器中的内容为: IF/ID.IR: 537264136 IF/ID.NPC: 36 ID/EX.A: 5 ID/EX.B: 0 ID/EX.Imm: 4 ID/EX.IR: 2101280 EX/MEM.ALUo: 0 EX/MEM.IR: 70320132 MEM/WB.LMD: 0 MEM/WB.ALUo: 0 MEM/WB.IR: 70320132 7. 观察和分析结构冲突对 CPU 性能的影响,步骤如下: (1)加载 stru

5、cture_hz.s(在模拟器所在文件夹下的“样例程序”文件夹中) ; (2)执行该程序,找出存在结构冲突的指令对以及导致结构冲突的部件; 存在结构冲突的语句有 ADD.D $f3,$f0,$f1 ADD.D $f4,$f0,$f1 ADD.D $f5,$f0,$f1 ADD.D $f6,$f0,$f1 ADD.D $f7,$f0,$f1 ADD.D $f8,$f0,$f1 ADD.D $f9,$f0,$f1 导致结构冲突的部件为,浮点加法器。 (3) 记录由结构冲突引起的停顿时钟周期数, 计算停顿时钟周期数占总执行周期数的百 分比; 由结构冲突引起的停顿时钟周期数为 35,停顿周期总数为 4

6、1,总执行周期数为 52, 所以停顿时钟周期数占总执行周期数的百分比为 78.846% (4)把浮点加法器的个数改为 6 个; (5)再次重复上述(1)(3)的工作; 现在并没有结构冲突导致停顿的周期了, 总执行周期数为 17, 其中停顿时钟周期数为 6, 停顿时钟周期数占总执行周期数的百分比为 35.294% (6)分析结构冲突对 CPU 性能的影响,讨论解决结构冲突的方法。 结构冲突的发生会让 CPU 停顿,从而大大降低 CPU 的性能。 解决结构冲突的方法:附加冗余的硬件,从而在以前发生结构冲突的时候可以用不同的 硬件并行处理。 8. 观察数据冲突并用定向技术来减少停顿,步骤如下: (1

7、)把浮点加法器的个数改为 1 个; (2)加载 data_hz.s(在模拟器所在文件夹下的“样例程序”文件夹中) ; (3) 关闭定向功能。 这是通过在 “配置” 菜单中去选 “定向” (即使得该项前面没有 “” 号)来实现的; (4)用单步执行一个周期的方式(F7)执行该程序,同时查看时钟周期图,列出在什 么时刻发生了 RAW(先写后读)冲突; 第 4 周期的时候,ADDIU $r2,$r0,56 进入 MEM 段的时候 LW $r1,0($r2)在 ID 段, 发生 RAW 冲突。 第 6 周期的时候,ADD $r1,$r1,$r3 进入 ID 段的时候 LW $r1,0($r2)在 EX

8、 段,发生 RAW 冲突。 第 9 周期的时候,ADD $r1,$r1,$r3 进入 EX 段的时候 SW $r1,0($r2)在 ID 段,发生 RAW 冲突。 第 13 周期的时候,ADD $r5,$r5,10 进入 ID 段的时候 LW $r5,0($r1)在 EX 段,发生 RAW 冲突。 第 17 周期的时候,ADDI $r2,$r2,4 进入 EX 段的时候 SUB $r4,$r3,$r2 在 ID 段,发 生 RAW 冲突。 第 20 周期的时候,BGTZ $r4,loop 进入 ID 段的时候 SUB $r4,$r3,$r2 在 EX 段,发 生 RAW 冲突。 循环了,后面的

9、和前面类似,省略。 (5)记录数据冲突引起的停顿时钟周期数以及程序执行的总时钟周期数,计算停顿时 钟周期数占总执行周期数的百分比; 数据从图引起的停顿时钟周期数为 31,总停顿时钟周期总数为 35,程序执行的总时钟 周期数为 65, 停顿时钟周期数占总执行周期数的 53.846%, 数据停顿时钟周期数占总执行 周期数的 47.692% (6)复位 CPU; (7)打开定向功能。这是通过在“配置”菜单中勾选“定向” (即使得该项前面有一个 “”号)来实现的; (8)用单步执行一周期的方式(F7)执行该程序,同时查看时钟周期图,列出在什么 时刻发生了 RAW(先写后读)冲突,并与(3)的结果进行比

10、较; 第 5 周期的时候,ADD $r1,$r1,$r3 进入 ID 段的时候 LW $r1,0($r2)在 EX 段,发生 RAW 冲突。 第 13 周期的时候,BGTZ $r4,loop 进入 ID 段的时候 SUB $r4,$r3,$r2 在 EX 段,发 生 RAW 冲突。 循环后的省略。 我们发现数据冲突明显减少了。 (9)记录数据冲突引起的停顿时钟周期数以及程序执行的总时钟周期数。计算采用定 向技术后性能提高的倍数。 数据从图引起的停顿时钟周期数为 9,总停顿时钟周期总数为 13,程序执行的总时钟 周期数为 43, 停顿时钟周期数占总执行周期数的 30.233%, 数据停顿时钟周期

11、数占总执行 周期数的 20.93%,提高的倍数为 2.573 倍 二二、指令调度和延迟分支 1. 启动 MIPSsim。 2. 根据预备知识中关于流水线各段操作的描述,进一步理解流水线窗口中各段的功能,掌 握各流水寄存器的含义。 (用鼠标双击各段,就可以看到各流水寄存器的内容) 3. 勾选配置菜单中的“流水方式” ,使模拟器工作于流水方式下。 4. 用指令调度技术解决流水线中的结构冲突与数据冲突。 (1) 启动 MIPSsim; (2) 通过 “配置” 菜单中的 “常规配置” 项把加法乘法除法部件的个数设置为两个, 把它们的延迟时间都设置为 3 个时钟周期; (3) 用 MIPSsim 的“文

12、件”菜单中的“载入程序”来加载 schedule.asm(在模拟器所 在文件夹下的“样例程序”文件夹中) ; (4) 关闭定向功能。 这是通过在 “配置” 菜单中去选 “定向” (即使得该项前面没有 “” 号)来实现的。 (5) 执行所载入的程序, 通过查看统计数据和时钟周期图, 找出并记录程序执行过程中 各种冲突发生的次数、发生冲突的指令组合,以及程序执行的总时钟周期数; 第 3 周期的时候, ADDIU $r1,$r0,56 进入 EX 段的时候 LW $r2,0($r1)在 ID 段, 发生 RAW 数据冲突。 第 6 周期的时候,ADD $r4,$r0,$r2 进入 ID 段的时候 L

13、W $r2,0($r1)在 EX 段, 发生 RAW 数据冲突。 第 9 周期的时候,ADD $r4,$r0,$r2 进入 EX 段的时候 SW $r4,0($r1)在 ID 段, 发生 RAW 数据冲突。 第 13 周期的时候, ADD $r8,$r6,$r1 进入 ID 段的时候 LW $r6,4($r1)在 EX 段, 发生 RAW 数据冲突。 第 17 周期的时候,ADD $r12,$r10,$r1 进入 EX 段的时候 ADD $r16,$r12,$r1 在 ID 段,发生 RAW 数据冲突。 第 20 周期的时候,ADD $r18,$r16,$r1 进入 ID 段的时候 ADD $

14、r16,$r12,$r1 在 EX 段,发生 RAW 数据冲突。 第 23 周期的时候,ADD $r18,$r16,$r1 进入 EX 段的时候 SW $r18,16($r1)在 ID 段,发生 RAW 数据冲突。 第 27 周期的时候,MUL $r22,$r20,$r14 进入 ID 段的时候 LW $r20,8($r1)在 EX 段,发生 RAW 数据冲突。 程序执行的总周期数为 33。 (6) 采用指令调度技术对程序进行指令调度,消除冲突。将调度后的程序放到 after-schedule.asm 中; 调度后的指令为: .text main: ADDIU $r1,$r0,A MUL $r

15、24,$r26,$r14 LW $r2,0($r1) LW $r6,4($r1) MUL $r12,$r10,$r1 LW $r20,8($r1) ADD $r8,$r6,$r1 ADD $r16,$r12,$r1 ADD $r4,$r0,$r2 MUL $r22,$r20,$r14 ADD $r18,$r16,$r1 SW $r4,0($r1) SW $r18,16($r1) TEQ $r0,$r0 .data A: .word 4,6,8 (7) 载入 after-schedule.asm; (8) 执行该程序,观察程序在流水线中的执行情况,记录程序执行的总时钟周期数; 程序的总时钟周期数

16、为 19,总延迟周期数为 3,其中 RAW 冲突的周期数为 2。 (9) 根据记录结果,比较调度前和调度后的性能。论述指令调度对于提高 CPU 性能的 作用。 调度前的数据冲突 RAW 为 16 个周期,调度之后的数据冲突 RAW 为 2 个周期, 调度前停顿占 51.515%,调度之后停顿占 15.789%。指令调度大大提高了 CPU 的性能。 5. 用延迟分支减少分支指令对性能的影响。 (1) 启动 MIPSsim; (2) 载入 branch.asm; (3) 关闭延迟分支功能。这是通过在“配置”菜单中去选“延迟分支”来实现的; (4) 执行该程序,观察并记录发生分支延迟的时刻,保存下其

17、时钟周期图(可用拷屏的 方法) ; 第 18 周期,为分支延迟。 第 33 周期,为分支延迟。 (5) 记录执行该程序所花的总时钟周期数; 执行该程序所花的总时钟周期数为 38。 (6) 假设延迟槽为一个, 对 branch.asm 进行指令调度, 然后存到 delayed-branch.asm 中; 进行指令调度之后的代码如下: .text main: ADDI $r2,$r0,1024 ADD $r3,$r0,$r0 ADDI $r4,$r0,8 loop: LW $r1,0($r2) ADDI $r1,$r1,1 ADDI $r3,$r3,4 SUB $r5,$r4,$r3 BGTZ $

18、r5,loop SW $r1,0($r2) ADD $r7,$r0,$r6 TEQ $r0,$r0 (7) 载入 delayed-branch.asm; (8) 打开延迟分支功能; (9) 执行该程序,观察其时钟周期图,保存下其时钟周期图; 我们看到,在执行 BGTZ 的 ID 段的时候,读取并执行了延迟槽之中的 SW 指令, 而不是等待。 (10) 记录执行该程序所花的总时钟周期数; 执行该程序所花的总时钟周期数为 32。 (11) 对比上述两种情况下的时钟周期图; 调度前: 调度后: 我们发现在 BGTZ 指令的 ID 段,调度前是发生了分支延迟,而调度后,则在 ID 段取出并且执行延迟槽中的指令。 (12) 根据记录结果,比较没采用延迟分支和采用了延迟分支的性能。论述延迟分支对 于提高 CPU 性能的作用。 没采用延迟分支的时候因为分支冲突,导致了两个控制停顿,而采用延迟分支调度 之后,减少了两个控制停顿,并且顺便导致前面的数据冲突消失了,所以总的停顿 周期减少了 6 个周期,调度前停顿占 50%,调度后停顿占 40.625%。延迟分支在 循环非常多程序之中会通过减少分支延迟显著提高 CPU 的性能。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1