logo资料库

计算机体系结构指令调度实验报告.doc

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
实验六 指令调度实验报告 1.实验目的: 通过本实验,加深对指令调度的理解,了解指令调度技术对 CPU 性能改进的好处。 2. 实验内容: (1) 通过 Configuration菜单中的“Floatingpointstages”选项,把除法单 元数 设置为 3,把加法﹑乘法﹑除法的延迟设置为 3 个时钟周期。 (2) 用 WinDLX 模拟器运行调度前的程序 sch-before.s 。记录程序执行过程中各种 相关发生的次数以及程序执行的总时钟周期数。 (3) 用 WinDLX 模拟器运行调度后的程序 sch-after.s ,记录程序执行过程中各种相 关发生的次数以及程序执行的总时钟周期数。 (4) 根据记录结果,比较调度前和调度后的性能。 (5) 论述指令调度对于提高 CPU 性能的意义。 3.实验程序: 程序 sch-before.s ;------------------------------------------------------------------- ; Example to illustrate instruction scheduling ;------------------------------------------------------------------- .data .global ONE ONE: .word 1 .text .global main main: lf f1,ONE ;turn divf into a move cvti2f f7,f1 ;by storing in f7 1 in nop ;floating-point format divf f1,f8,f7 ;move Y=(f8) into f1 divf f2,f9,f7 ;move Z=(f9) into f2 addf f3,f1,f2 1
divf f10,f3,f7 ;move f3 into X=(f10) divf f4,f11,f7 ;move B=(f11) into f4 divf f5,f12,f7 ;move C=(f12) into f5 multf f6,f4,f5 divf f13,f6,f7 ;move f6 into A=(f13) Finish: trap 0 调度后的程序 sch-after.s ;------------------------------------------------------------------- ; Example to illustrate instruction scheduling - reordered instructions ;------------------------------------------------------------------- .data .global ONE ONE: .word 1 .text .global main main: lf f1,ONE ;turn divf into a move cvti2f f7,f1 ;by storing in f7 1 in nop ;floating-point format divf f1,f8,f7 ;move Y=(f8) into f1 divf f2,f9,f7 ;move Z=(f9) into f2 divf f4,f11,f7 ;move B=(f11) into f4 divf f5,f12,f7 ;move C=(f12) into f5 addf f3,f1,f2 multf f6,f4,f5 divf f10,f3,f7 ;move f3 into X=(f10) divf f13,f6,f7 ;move f6 into A=(f13) 2
Finish: trap 0 4. 实验原理 由于相关的存在,使得指令中的下一条指令不能在指定的时钟周期执行。流水线冲突会 给指令在流水线中的执行带来许多问题,如果不能很好地解决冲突问题,轻则影响流水线的 性能,重则导致错误的执行结果。而对于各种冲突,都有可能用指令调度来解决。 6. 实验步骤 1>设置除法单元数设置为 3,把加法﹑乘法﹑除法的延迟设置为 3 个时钟周期 : 2>运行程序部分截图 3>未用指令调度技术之前程序执行过程中的相关: 3
4>未用指令调度技术之前,运行结果数据统计 5>采用调度技术后发生的关联: 4
6>采用调度技术后,运行结果数据统计: 5
7. 实验结论 1>采用指令调度之前: 相关名 相关次数 RAW stalls WAW stalls Structural stalls Control stalls Trap stalls Total 9 0 0 0 7 16 所占比例 33.33% 0 0 0 25.92% 59.26% 采用循环调度前程序执行的过程中各种相关发生的次数如上表所示。发生相关的指令 组合如实验数据中的截图所示。程序执行总的时钟周期数是 27。根据上述数据计算可得: 吞吐率=10/27=0.37. 2>采用指令调度之后: 相关名 RAW stalls WAW stalls Structural stalls Control stalls Trap stalls Total 相关次数 3 0 0 0 6 9 所占比例 14.28% 0 0 0 28.57% 42.86% 采用循环调度后程序执行过程中各种相关发生的次数如上表所示,发生相关的指令组 合如实验数据中的截图所示。程序执行总的时钟周期数是 21。根据上述数据计算可得:吞 吐率=10/21=0.476 8. 实验总结 通过本实验,基本掌握了 WinDLX 模拟器的操作和使用,熟悉 DLX 指令集结构及其特点, 对于采用指令调度技术减少各种相关、提高流水线速度的方法和技巧有了更深的认识,对于 计算机体系结构这门课程的学习和以后的实验还是很有帮助的。 做好本实验首先需要掌握 WinDLX 模拟器的使用。理解课本中的有关指令调度技术的基 础知识以及使用汇编语言编程,是做好本实验的关键所在。 6
9. 对本实验过程及方法、手段的改进建议: 在进行本实验时,用指令调度技术解决流水线中的结构相关与数据相关,没有对是否采 用定向技术进行考虑。而定向技术采用与否,会影响指令调度技术以及循环展开技术解决流 水线中的结构相关与数据相关。所以,在今后做本实验时,应该考虑是否采用定向技术。 7
分享到:
收藏