《计算机体系结构》第三次实验 WinDLX流水线实验

更新时间:2023-10-18 15:05:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验三 WinDLX流水线实验

王宇航 安全0901班 09283020

实验三 WinDLX流水线实验

1 实验目的:

通过本实验,加深对结构相关、数据相关和指令调度的理解,了解结构相关对CPU性能的影响,掌握如何使用定向技术来减少数据相关带来的暂停,了解指令调度技术对CPU性能改进的好处。

2 实验内容:

用WinDLX模拟器进行结构相关的分析

1、生成structure.s程序。用WinDLX模拟器运行该程序。

2、通过模拟,找出存在结构相关的指令对,以及导致结构相关的部件。

3、记录由结构相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。

用WinDLX模拟器分析数据相关

1、生成data.s程序。

2、通过Configuration菜单中的选项,设定在不采用定向技术的情况下,用WinDLX模拟器运行程序data_d.s。记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。

3、在采用定向技术的情况下,用WinDLX模拟器再次运行程序data_d.s。记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。

用WinDLX模拟器分析指令调度

1、生成sch-before.s及sch-after.s程序。

2、通过Configuration菜单中的选项,将除法单元数设置为3,将加法﹑乘法﹑除法的延迟设置为3个时钟周期。

3、用WinDLX模拟器运行调度前的程序sch-before.s 。记录程序执行过程中各种相关发生的次数以及程序执行的总时钟周期数。

4、用WinDLX模拟器运行调度后的程序sch-after.s ,记录程序执行过程中各种相关发生的次数以及程序执行的总时钟周期数。

1

综合实验(习题3.4)

在WinDLX上运行如下代码序列: LOOP: LW

ADDI SW ADDI SUB

R1,0(R2) R1,R1,#1 0(R2),R1 R2,R2,#4 R4,R3,R2

BNEZ R4,LOOP

其中:R3的初值是R2+396。假设:在整个代码序列的运行过程中,所有的存储器访问都是命中的,并且在一个时钟周期中对同一个寄存器的读操作和写操作可以通过寄存器文件“定向”。 1、在没有任何其他定向(或旁路)硬件的支持下,假设采用排空流水线的策略处理分支指令,且所有的存储器访问都是命中Cache,那么执行上述代码需要多少个时钟周期?

2、假设该流水线有正常的定向路径,且采用预测分支失败的策略处理分支指令,所有的存储器访问都命中Cache,那么执行上述代码需要多少个时钟周期? 3、假设该流水线有正常的定向路径和一个单周期延迟分支,请对该循环中的指令进行调度,但是不能增加指令的条数。计算执行上述代码所需要的时钟周期数。

3 实验过程:

用WinDLX模拟器进行结构相关的分析 实验过程:

用WinDLX打开之前编写好的structure.s程序,单步执行,查看Clock Cycle Diagram窗口中的变化:

可以看出指令“ADDI R2, R2, #8 ”和指令“LD F0, 0(R2)”发生结构冲突。

2

可以看出“ADDI R2, R2, #8”、“ADDI R3, R3, #8” 和“SUBI 条指令和“ADDD F4, F0, F2”存在结构相关。

导致结构相关的部件是存储数据和指令的存储器部件。

R5, R5, #1”这三

通过单步执行可以在code窗口中观察到程序的LOOP段共循环了10次,而且上述的因结构冲突引起暂停的指令都是在LOOP循环中。所以程序执行完毕后,因结构冲突引起的暂停周期数为2×10=20,由图3可知,程序总共执行了117个时钟周期。

所以暂停时钟数占总执行周期的百分比为:20/117 = 17.09 %。

结构相关对CPU性能的影响及解决结构相关的方法:

上述四对指令在流水线中重叠执行时产生了对存储器访问的资源冲突,即结构相关问

题。上述WinDLX的执行过程采用了流水化功能单元的解决办法来解决结构相关,CPU产生了暂停周期,使流水线的性能下降。且暂停周期占总执行周期的百分比还比较大,是一个不容忽视的问题。

解决结构相关通常需要采用流水线功能单元的方法或资源重复的方法。既然流水线功能单元的方法引入的暂停影响了流水线的性能,可以考虑采用资源重复的方法,即在流水线机器中设置相互独立的指令存储器和数据存储器,也可将Cache分割成指令Cache和数据Cache,这样就能够很好的消除结构相关。但是这样做会带来很大的硬件开销,对流水线机器而言,如果要在每个时钟周期内,能够支持取指令操作和对数据的存储访问操作同时进行,而又不发生结构相关,那么存储总线的带宽必须要加倍。所以在解决该问题时要在性能和开销两方面进行权衡。

用WinDLX模拟器分析数据相关 实验过程:

用WinDLX打开之前写好的data_d.s程序,配置Configuration菜单中的选项,设定不采用定向技术。记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,结果如下:

3

可以看出,在不采用定向技术的情况下,data_d.s程序总过执行了202个时钟周期,其中由数据相关引起的暂停周期为104个,占总执行周期的51.48%。

配置Configuration菜单中的选项,设定采用定向技术。记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,结果如下:

可以看出,采用定向技术之后,data_d.s程序总过执行了128个时钟周期,其中由数据相关引起的暂停周期为30个,占总执行周期的23.44%。

总结:

由上述记录可知,通过定向技术,减少了数据相关所引起的暂停周期的数量,缩短了程序的执行周期,整个性能是原来的1.58倍。

4

用WinDLX模拟器分析指令调度 实验过程:

通过Configuration菜单中的选项,将除法单元数设置为3,将加法﹑乘法﹑除法的延迟

设置为3个时钟周期。用WinDLX模拟器运行调度前的程序sch-before.s 。记录程序执行过程中各种相关发生的次数以及程序执行的总时钟周期数。结果如下:

可以看出,sch-before.s程序执行的总时钟周期数为31,总暂停周期数为16,其中写后读相关(RAW)暂停周期为9个,Trap 暂停周期为7个。

用WinDLX模拟器运行调度前的程序sch-after.s 。记录程序执行过程中各种相关发生的次数以及程序执行的总时钟周期数。结果如下:

5

本文来源:https://www.bwwdw.com/article/w65f.html

Top