系统结构实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机系统结构实验报告
实验一流水线的相关
实验目的:
1. 熟练掌握WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点;
2. 加深对计算机流水线基本概念的理解;
3. 进一步了解DLX基本流水线各段的功能以及基本操作;
4. 加深对数据相关、结构相关的理解,了解这两类相关对CPU性能的影响;
5. 了解解决数据相关的方法,掌握如何使用定向技术来减少数据相关带来
的暂停。
实验平台:
WinDLX模拟器
实验内容和步骤:
一.用WinDLX模拟器执行下列三个程序:
求阶乘程序fact.s
求最大公倍数程序gcm.s
求素数程序prim.s
分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,观察CPU中寄存器和存储器的内容。熟练掌握WinDLX的操作和使用。
1、求阶乘程序fact.s
(1)分别以步进、连续、设置断点的方式运行程序
图1.1.1 求阶乘程序fact.s运行统计数据步进方式运行
图1.1.2 求阶乘程序fact.s运行统计数据连续方式运行
图1.1.3 求阶乘程序fact.s运行统计数据连续方式运行(2)数据统计
图1.1.4 求阶乘程序fact.s运行统计数据
图1.1.5 求阶乘程序fact.s流水线执行情况
图1.1.6 求阶乘程序fact.s寄存器使用情况2、求最大公倍数程序gcm.s
图1.2.1 求最大公倍数程序gcm.s运行统计数据
图1.2.2 求最大公倍数程序gcm.s流水线执行情况图1.2.3 求最大公倍数程序gcm.s寄存器使用情况
3、求素数程序prim.s
图1.3.1 求素数程序prim.s运行统计数据
图1.3.2 求素数程序prim.s流水线执行情况
图1.3.3 求素数程序prim.s寄存器使用情况
二、用WinDLX运行程序structure_d.s,
通过模拟找出存在资源相关的指令对以及导致资源相关的部件;记录由资源相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分比;论述资源相关对CPU性能的影响,讨论解决资源相关的方法。
图1.4.1 程序structure_d.s流水线执行过程
其中,有如下几种情况,产生了资源相关:
(1)
导致资源相关的部件:浮点数寄存器f4
addd f0,f0,f4 指令在译码阶段ID停滞1周期
(2)
导致资源相关的部件:ALU
addi r2,r2,0x8 指令在执行阶段intEX停滞1周期
图1.4.2 程序structure_d.s运行统计信息
由资源相关引起的暂停周期数为:30
总执行周期数为:139
暂停周期数占总执行周期数的百分比:21.58%
分析:资源相关使相关指令在流水线上停滞,降低了执行效率。
解决方法:在合理的指令调度范围内,尽量避免执行重复的指令。尽量避免同一寄存器的频繁使用,若无法避免,则使用寄存器换名的方法。
3、在不采用定向技术的情况下(去掉Configuration菜单中Enable Forwarding选项前的勾选符),用WinDLX运行程序data_d.s
记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,计算
暂停时钟周期数占总执行周期数的百分比。
图1.5.1 不采用定向技术,程序data_d.s运行统计信息
由数据相关引起的暂停时钟周期数为:104
总执行周期数为:202
暂停周期数占总执行周期数的百分比:51.48%
在采用定向技术的情况下(勾选Enable Forwarding),用WinDLX再次运行程序data_d.s。重复上述3中的工作,并计算采用定向技术后性能提高的倍数。
图1.5.2 采用定向技术,程序data_d.s运行统计信息
由数据相关引起的暂停时钟周期数为:30
总执行周期数为:128
暂停周期数占总执行周期数的百分比:23.44%
通过这两个统计可以发现,在使用定向技术下运行程序指令将大幅降低数据相关发生
的次数,这大幅提升了CPU的性能。
实验二循环展开及指令调度
实验目的:
1. 加深对循环级并行性、指令调度技术、循环展开技术以及寄存器换名技术的理解;
2. 熟悉用指令调度技术来解决流水线中的数据相关的方法;
3. 了解循环展开、指令调度等技术对CPU性能的改进。
实验平台:
WinDLX模拟器
实验内容和步骤:
1.用指令调度技术解决流水线中的结构相关与数据相关
(1)用DLX汇编语言编写代码文件*.s,程序中应包括数据相关与结构相关(假设:加法﹑乘法﹑除法部件各有2个,延迟时间都是3个时钟周期)程序代码:
.data
.global ONE
ONE: .word 1
.text
.global main
main:
lf f1,ONE
cvti2f f7,f1
nop
divf f1,f8,f7
divf f2,f1,f7
divf f13,f2,f7
divf f10,f3,f7
addf f5,f12,f7
addf f3,f1,f2
multf f6,f4,f5