北邮高级计算机系统结构实验二三四五

上传人:第*** 文档编号:33877787 上传时间:2018-02-18 格式:DOC 页数:27 大小:985.50KB
返回 下载 相关 举报
北邮高级计算机系统结构实验二三四五_第1页
第1页 / 共27页
北邮高级计算机系统结构实验二三四五_第2页
第2页 / 共27页
北邮高级计算机系统结构实验二三四五_第3页
第3页 / 共27页
北邮高级计算机系统结构实验二三四五_第4页
第4页 / 共27页
北邮高级计算机系统结构实验二三四五_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《北邮高级计算机系统结构实验二三四五》由会员分享,可在线阅读,更多相关《北邮高级计算机系统结构实验二三四五(27页珍藏版)》请在金锄头文库上搜索。

1、实验二 指令流水线相关性分析实验目的通过使用 WINDLX 模拟器,对程序中的三种相关现象进行观察,并对使用专用通路,增加运算部件等技术对性能的影响进行考察,加深对流水线和 RISC处理器的特点的理解。实验原理:指令流水线中主要有结构相关、数据相关、控制相关。相关影响流水线性能。实验步骤一使用 WinDLX 模拟器,对 Fact.s 做如下分析:(1)观察程序中出现的数据/控制/结构相关。指出程序中出现上述现象的指令组合。(2)考察增加浮点运算部件对性能的影响。(3)考察增加 forward 部件对性能的影响。(4)观察转移指令在转移成功和转移不成功时候的流水线开销。实验过程一 使用 WinD

2、LX 模拟器,对 Fact.s 做如下分析:浮点加、乘、除部件都设置为 1,浮点数运算部件的延时都设置为 4,如图1:图 1 初始设置将 fact.s 和 input.s 加载至 WinDLX 中,如图 2 示。2图 2 加载程序1.观察程序中出现的数据/控制/结构相关;指出程序中出现上述现象的指令组合。1)数据相关点击 F7,使程序单步执行,当出现 R-Stall 时停止,运行过程中出现下图3 所示,输入整数 6。图 3 输入整数 6打开 Clock Diagram,可以清楚的看到指令执行的流水线如图 4 所示。图 4 指令流水线双击第一次出现 R-Stall 的指令行,如图 5 所示。3图

3、 5 指令详细信息对以上出现的情况分析如下:程序发生了数据相关,R-Stall(R-暂停)表示引起暂停的原因是 RAW。lbu r3,00(r2)要在 WB 周期写回 r3 中的数据;而下一条指令seqi r5,r3,0a要在 intEX 周期中读取 r3 中的数据。上述过程发生了 WR 冲突,即写读相关。为了避免此类冲突,seq r5,r4,0a 的 intEX 指令延迟了一个周期进行。由此,相关指令为:2)控制相关由图 6 可以看出,在第 4 时钟周期:第一条指令处于 MEM 段,第二条命令处于 intEX 段,第三条指令出于 aborted 状态,第四条命令处于 IF 段。图 6 指令流

4、水线4以上情况原因分析:在窗口中,模拟处于第四时钟周期,第 3 条命令指示为:“aborted” 。原因是:第二条命令 jal InputUnsigned 是无条件分支指令,在第 4 个时钟周期,jal 指令执行 intEX 周期之后才知道转移的位置,下一条指令应该执行 sw SaveR2(r0),r2指令。但之前 jal InputUnsigned 的下一条命令 movi2fp f10.r1 已经取出,所以需要将该指令流水清空,即 movi2fp 的执行应被取消,在流水线中留下气泡。3)结构相关首先,我们先来看一下执行过控制相关的时空图和 Pipeline,如下图 7 所示。图 7 控制相关

5、图 8 控制相关的 Pipeline当我们点击 Pipeline 中 IF 所对应的框框可以看到详细的该指令执行情况,如下图 9 所示。5图 9 指令详情图 9 表明了 addi r2,r2,01 的详细信息。该指令与它前一条指令 add r1,r1,r3 发生了结构相关。并且由于此处的冲突,需要暂停 2 个周期。在 ID段暂停后,则开始进图 intEX 段。所以这条指令(addi r2,r2,01)你不能进入 ID 流水段,译码部分占用,发生了结构相关。该部分的指令为:1. 考察增加浮点运算部件对性能的影响。该实验取 N=6首先通过 Configuration,点击 Floating Poi

6、nt Stage Configuration 来设置浮点运算部件的配置。实验要求所有浮点运算部件的延时都请设定为 4 个周期,所以我们将 Delay 这一栏改成 4,而 Count 可以任意,为了对比,我们第一次浮点运算部件取全部为 1,第二次浮点运算部件取全部为 2。如下图所示:运行 50 个 cycles 之后,可以看到他们数据的对比:6由此可见,浮点运算部件的增减对效率无影响。比较各个数据,发现没有变化。无论怎么增加浮点运算部件,统计结果都一样。原因在于此程序中浮点计算指令没有重叠,所以并行度没有增加,性能没有提高。3.考察增加 forward 部件对性能的影响。为了对比有无 forwa

7、rd 部件的性能。需要在 Configuration 中勾选 enable forwarding,以及不勾选 enable configuration 来看性能数据的对比,不使用forward 部件和使用 forward 部件:从上面的数据我们可以看出增加 forward 部件后 RAW 由原来占总时钟周期的 26%减7少至 18%,RAW 个数由原来的 13 减少至 9。增加 forward 部件使得控制相关比例增加了。即,使用 forward 部件后,总的时钟周期减少,数据相关减少,流水线的性能得到一定的改善。4.观察转移指令在转移成功和转移不成功时候的流水线开销。我们假设,浮点部件设置

8、Count=1,Delay=4;N=6。执行 50 个 cycles 完毕后,查看条件转移分支,如下图所示:由上图可知,转移指令一共 2 条,成功转移 1 条(占 50%),不成功为 1 条。所以,静态指令调度算法只能解决数据相关,条件转移结果与原来相比没有变化。即,若转移不成功,对流水线的执行无影响,流水线的吞吐率和效率没有降低;若转移成功,则要废弃预先读入的指令,重新从转移成功处读入指令,执行效率会下降。实验总结通过本次试验,不仅更加熟悉了 WinDLX 模拟器的使用以及对其基础功能的认识,而且通过单步执行程序,观察三种相关的出现,以及思考出现的原因,是我更加深入了解了流水线。8实验三 D

9、LX 处理器程序设计实验目的:学习使用 DLX 汇编语言编程,进一步分析相关现象实验原理:掌握向量运算算法和编程方法。实验内容和要求:自编一段汇编代码,完成两双精度浮点一维向量的加法(或乘除法)运算,并输出结果。向量长度=16。观察程序中出现的数据/控制/结构相关实验步骤:一熟悉 DLX 汇编语言。(1)汇编器处理汇编文件时,数据位于内存中 data 指针所指向的空间,指令位于 text 指针所指向的空间。(2)Trap 0 是通知 WINDLX 模拟器程序结束,Trap 5 是输出格式化到标准输出二编写两双精度浮点一维向量的加法运算程序。代码清单如下:.dataV1: .double 1.1

10、, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.1, 11.11, 12.12, 13.13, 14.14, 15.15, 16.16V2: .double 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.1, 11.11, 12.12, 13.13, 14.14, 15.15, 16.169a: .asciiz result = c: .asciiz %f .align 2d: .word cdizhi: .space 8.text.global mainmain:addi r1,r0,asw dizh

11、i,r1 ;存储字,保存 a 的首地址addi r14,r0,dizhitrap 5 ;输出字符串result = addi r10,r0,0 ;r10 = 0addi r8,r0,20 ;r8 = 20,即向量的长度loop:ld f2,V1(r10) ld f4,V2(r10)addd f2,f2,f4 ;将 V1,V2 的相应项依次相加,保存在 f2sd dizhi,f2 ;存储双精度浮点数 f2addi r14,r0,dtrap 5 ;输出结果addi r10,r10,8 ;取 V1,V2 下一项subi r8,r8,1 ;循环次数减一bnez r8,loop ;假如 r8!=0,则返

12、回到 looptrap 0 ;结束运行完毕之后出现:运行结果如下:1.观察程序中出现的数据/控制/结构相关10本次实验执行过程共出现 RAW 数据相关 80 次,控制相关 15 次,trap54 次,共有 stall 149 次。具体如下:1)数据相关2)T-stall3)控制相关2.考察增加浮点运算部件对性能的影响。比较浮点运算部件分别为 1 和 2 时,接下来查看 Statistis 进行比较,如下图11由以上两图可得,本实验增加浮点运算部件对流水线性能没有影响。3.增加 FORWARD 部件对性能的影响。为了对比有无 forward 部件的性能。需要在 Configuration 中勾选

13、 enable forwarding,以及不勾选 enable configuration 来看性能数据的对比,不使用forward 部件和使用 forward 部件:12从上面的数据我们可以看出增加 forwardi 部件后,时钟周期由 368 减少至301 个,RAW 由原来占总时钟周期的 39.94%减少至 26.58%; RAW 个数由原来的 147 减少至 80;增加 forward 部件使得控制相关比例增加了,但是数目并没有增加。总而言之,使用 forward 部件后,总的时钟周期减少,数据相关减少,流水线的性能得到一定的改善。4.观察转移指令在转移成功和转移不成功时候的流水线开销

14、。由上图可得,转移指令一共 16 条,其中成功转移 15 条,占 93.75%,不成功转移 1 条,占 5%。静态指令调度算法是在出现数据相关时,为了消除或者减少流水线空转,编译器确定并分离出程序中存在在相关的指令,然后进行指令调度,并对代码优化。但是静态指令调度只能解决数据相关,条件转移结果与原理来相比没有变化。若转移不成功,对流水线的执行无影响,流水线的吞吐率和效率没有降低。若转移成功,则要废弃预先读入的指令,重新从转移成功处读入指令,每执行一条条件转移指令,一条 x 段流水线就有 x-2 个流水线被浪费掉,执行效率降低,性能有一定的损失。实验总结加深了对汇编语言的理解与运用,尤其是 tr

15、ap 5,输出格式化到标准输出的理解,在代码中,应注意:相加的结果要保存到 dizhi 这个变量中,否则即使运算正确也不能把结果输出。13实验四 代码优化实验目的:学习简单编译优化方法,观察采用编译优化方法所带来的性能的提高。实验原理:采用静态调度方法重排指令序列,减少相关,优化程序。实验步骤:1优化实验 3 程序代码清单及注释说明.dataV1: .double 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.1, 11.11, 12.12, 13.13, 14.14, 15.15, 16.16V2: .double 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.1, 11.11, 12.12, 13.13, 14.14, 15.15, 16.16a: .asciiz result = c: .asciiz %f .align 2d: .word cdizhi: .space 8.text.global main14main:addi r1,r0,a ;该指令与 sw dizhi,r1 存在 RAW 相关,故将 addi r

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号