视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
计算机系统结构实验报告
2025-09-27 23:37:26 责编:小OO
文档
计算机系统结构实验报告

一.流水线中的相关

实验目的: 

1. 熟练掌握WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点; 

2. 加深对计算机流水线基本概念的理解; 

3. 进一步了解DLX基本流水线各段的功能以及基本操作; 

4. 加深对数据相关、结构相关的理解,了解这两类相关对CPU性能的影响; 

5. 了解解决数据相关的方法,掌握如何使用定向技术来减少数据相关带来的暂停。 

实验平台:

WinDLX模拟器 

实验内容和步骤: 

1.用WinDLX模拟器执行下列三个程序: 

􀁺求阶乘程序fact.s 

􀁺求最大公倍数程序gcm.s 

􀁺求素数程序prim.s 

分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,观察CPU中寄存器和存储器的内容。熟练掌握WinDLX的操作和使用。 

2. 用WinDLX运行程序structure_d.s,通过模拟找出存在资源相关的指令对以及导致资源相关的部件;记录由资源相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分比;论述资源相关对CPU性能的影响,讨论解决资源相关的方法。 

3. 在不采用定向技术的情况下(去掉Configuration菜单中Enable Forwarding选项前的勾选符),用WinDLX运行程序data_d.s。记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。 

在采用定向技术的情况下(勾选Enable Forwarding),用WinDLX再次运行程序data_d.s。重复上述3中的工作,并计算采用定向技术后性能提高的倍数。

1. 求阶乘程序

用WinDLX模拟器执行求阶乘程序fact.s 。这个程序说明浮点指令的使用。该程序从标准输入读入一个整数,求其阶乘,然后将结果输出。

   该程序中调用了input.s中的输入子程序,这个子程序用于读入正整数。

实验结果:

在载入fact.s和input.s之后,不设置任何断点运行。

a.不采用重新定向技术,我们得到的结果

b.采用定向技术,我们得到的结果:

从上面的数据我们可以看出定向的作用:

在定向技术存在的情况下Statistics 窗口中的各种统计数字:总的周期数(215) 和暂停数 (17 RAW, 25 Control, 12 Trap; 54 Total)

在定向技术不存在时候,控制暂停和 Trap 暂停仍然是同样的值,而RAW暂停从17变成了53,总的模拟周期数增加到236。所以定向技术带来的加速比:

  236 / 215 = 1.098

  DLXforwarded比 DLXnot forwarded 快9.8%。

2.数据相关

先给出一个存在数据相关的程序:

LHI R2, (A>>16) & 0xFFFF

ADDUI R2, R2, A & 0xFFFF 

LHI R3, (B>>16)&0xFFFF

ADDUI R3, R3, B&0xFFFF 

loop: 

LW R1, 0 (R2) 

ADD R1, R1, R3 

SW 0(R2), R1 

LW R5, 0 (R1) 

ADDI R5, R5, #10 

ADDI R2, R2, #4 

SUB R4, R3, R2 

BNEZ R4, loop 

TRAP #0 

A: .word 0, 4, 8, 12, 16, 20, 24, 28, 32, 36 

B: .word 9, 8, 7, 6, 5, 4, 3, 2, 1, 0

没有采用定向技术时运行该程序:得到

程序执行了202个周期,10个数据相关引起的时钟周期RAW stall为104个。

暂停时钟周期数占总执行周期数的百分比=51.48%

采用定向技术时运行该程序:得到

程序执行了128个周期,共有6个数据相关引起的时钟周期RAW stall为30个。

暂停时钟周期数占总执行周期数的百分比=23.44%

可见通过定向技术,减少了数据相关,缩短了程序的执行周期,整个性能为原来的1.57倍。

3.结构相关

下面这段程序存在结构相关

ADDI R5, R5, 1

 ADDI R9, R9, 1

MULT R2,R3,R7

执行之后得到的clock cycle programe

Statistics:

可见1个结构相关引起了4个stall,占总共20个CYCLE 的20%

为了避免结构相关,可以考虑采用资源重复的方法,比如,在流水线机器中设置相互的指令存储器和数据存储器,也可以将CACHE分割成指令CACHE 和数据CACHE。

二.循环展开及指令调度

实验目的: 

1. 加深对循环级并行性、指令调度技术、循环展开技术以及寄存器换名技术的理解; 

2. 熟悉用指令调度技术来解决流水线中的数据相关的方法; 

3. 了解循环展开、指令调度等技术对CPU性能的改进。 

实验平台: 

WinDLX模拟器

实验内容和步骤: 

1.用指令调度技术解决流水线中的结构相关与数据相关

(1)用DLX汇编语言编写代码文件*.s,程序中应包括数据相关与结构相关(假设:加法﹑乘法﹑除法部件各有2个,延迟时间都是3个时钟周期) 

(2)通过Configuration菜单中的“Floating point stages” 选项,把加法﹑乘法﹑除法部件的个数设置为2个,把延迟都设置为3个时钟周期; 

(3)用WinDLX运行程序。记录程序执行过程中各种相关发生的次数、发生相关的指令组合,以及程序执行的总时钟周期数; 

(4)采用指令调度技术对程序进行指令调度,消除相关; 

(5)用WinDLX运行调度后的程序,观察程序在流水线中的执行情况,记录程序执行的总时钟周期数; 

(6)根据记录结果,比较调度前和调度后的性能。论述指令调度对于提高CPU性能的意义。

2. 用循环展开、寄存器换名以及指令调度提高性能

(1)用DLX汇编语言编写代码文件*.s,程序中包含一个循环次数为4的整数倍的简单循环; 

(2)用WinDLX运行该程序。记录执行过程中各种相关发生的次数以及程序执行的总时钟周期数; 

(3)将循环展开3次,将4个循环体组成的代码代替原来的循环体,并对程序做相应的修改。然后对新的循环体进行寄存器换名和指令调度; 

(4)用WinDLX运行修改后的程序,记录执行过程中各种相关发生的次数以及程序执行的总时钟周期数; 

(5)根据记录结果,比较循环展开、指令调度前后的性能。  

3)存在相关的程序

  

1.指令调度:

首先,通过Configuration菜单中的“Floating point stages”选项,把除法单元数设置为3,把加法﹑乘法﹑除法的延迟设置为3个时钟周期。

给出调度前的程序sch_bef:

.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

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_aft:

.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)

Finish: 

trap 0

运行之后得到:

可以看出经过调度之后

运行周期从27减少到21,而且减少了相关。

2.循环展开:

循环展开前的程序:

            ADDUI   R2, R2, A&0xFFFF  

LHI R3, (B>>16)&0xFFFF

            ADDUI   R3, R3, B&0xFFFF  

            ADDU    R4, R0, R3

            SUBI   R4, R4, #8  

            SUB    R5, R4, R2  

            BNEZ   R5, loop  

      TRAP   #0         

      A:    .double 1, 2, 3, 4

      B:    .double 1, 2, 3, 4

运行结果:

循环展开后的程序:

            ADDUI   R2, R2, A&0xFFFF  

LHI R3, (B>>16)&0xFFFF

            ADDUI   R3, R3, B&0xFFFF  

            ADDU    R4, R0, R3  

  

             SUBI   R4, R4, #8  

             SUBI   R4, R4, #8  

             SUBI   R4, R4, #8  

             SUBI   R4, R4, #8  

            TRAP   #0         

      A:    .double 1, 2, 3, 4

      B:    .double 1, 2, 3, 4

运行结果:

可以看出经过循环展开之后

运行周期从30减少到14,而且减少了相关。

三.实验总结:

 通过本实验,基本掌握了WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点,对减少各种相关、提高流水线速度的方法和技术有了更深的认识,对于体系结构这门课程的学习和后面的实验还是很有帮助的。

                                                          下载本文

显示全文
专题