循环展开及指令调度_第1页
循环展开及指令调度_第2页
循环展开及指令调度_第3页
循环展开及指令调度_第4页
循环展开及指令调度_第5页
已阅读5页,还剩5页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验项

循功展开及指令调度

名称

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

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

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

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

内容(2)用MIPS汇编语言编写代码文件*§程序中应包括数据相关与结构相关(假设:加

法、乘法、除法部件各有2个,延迟时间都是3个时钟周期)

(3)通过Configuration菜单中的^Floatingpointstagesw选项,把加法、乘法、除法

部件的个数设置为2个,把延迟都设置为3个时钟周期;

(4)用winMIPS64运行程序。记录程序执行过程中各种相关发生的次数、发生相关的

指令组合,以及程序执行的总时钟周期数:

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

(6)用winMIPS64运行调度后的程序,观察程序在流水线中的执行情况,记录程序执

行的总时钟周期数;

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

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

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

单循环;

(3)用winMIPS64运行该程序。记录执行过程中各种相关发生的次数以及程序执行的

总时钟周期数;

(4)将循环展开3次,将4个循环体组成的代码代替原来的循环体,并对程序做相应的

修改。然后对新的循环体进行寄存器换名和指令调度;

(5)用winMIPS64运行修改后的程序,记录执行过程中各种相关发生的次数以及程序

执行的总时钟周期数;

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

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

1)代码:

divff2,f5,f6

divffl,f2,f6

divff3,fi,f5

divffO,f4,f7

addffl4,fO,f6

实验步addffl5,f5,f7

骤muitff20,f4,f6

multff21,f5,f7

2)设置运算部件个数以及运算时钟周期数

FloatingPointStageConfigura...

Count:Delay:

AdditionUnits:e

MultiplicationUnits:2

DivisionUnits:2

图i

。ClockCycleDx“raa

FdpniQ

c^nzni

c^tzni

2

(S4OJ1/5

gffUJOJS

gfnmn

i⑶乂JS

图2.Pipeline图

以下为出现的数据相关

由于只有两个除法部件,所以出现了功能部件的冲突。总的执行周期是38指令调度后代码:

将无关指令放在一起执行,相关指令分开尽量避免数据相关

divff2,f5.f6

multff20,f4,f6

multff21,f5,f7

divffl,f2,f6

addffl5,f5,f7

divffi,fkf5

addffl4,fO,f6

NClockCys&vt&Mi

0

mari

—ar:

ww*JD

VUUHMH

图5.Pipeline图

X

Total:

35Cycle(s)executed.

IDexecutedby26Instruction⑸.

2Instruction(s)currentlyinPipeline.

Hardwareconfiguiraition:

Memorysize:32768Bytes

faddEX-Stages:2,requiredCycles:3

fmulEX-Stages:2,requiredCycles:3

fdivEX-Stages:2,requiredCycles:3

Forwardingenabled.

StalIs:

RAWstalls:318.57%ofallCycles),thereof:

LDstalls:010.00»ofRAWstalls)

8ranchZJumpsfalls'0(0erfRAWstalls)

Floatingpointstalls:3(10000^ofRAWstalls)

WAWstalls:0(0.00^»ofallCycles)

Structuralstalls:0(0.00%ofallCycles)

Controlstalls:0(0.00^ofallCycles)

Trapstalls:7(2000^ofallCycles)

Total:10Stall⑸(2857NofallCycles)

Conditionai1Biramches):

Total:0(0.00^ofallInstructions),thereof:

taken:0(0.00^ofallcondBranches)

nottaken:0(O.OOz^ofallcond.Branches)

图6.Statistics图

总执行时钟周期为35个。

指令调度后,数据相关减少了,总时钟周期数减少了,效能提高了。调度前的时钟周期数为

38,调度后的时钟周期数减少为35,加速比=38/35=1.08

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

带循环指令

代码:求四个1相加的和,结果存在r2中

.text

.globalmain

main:addirl,rO,#4

addir2,rO,#0

Loop:sgtr3,rl,rO

bnezr3,Subl

trap0Subl:

addir2,r2,#1

subirl,rl,#1

jLoop

结果:总时钟周期是42个,5rawstalls,循环了4次,结果

r2=4

IKAJi-OxOOOCOUC

(VOockCyd«

1R-0x20420001

oxaoocwuo

Inmjdow/CycbtAHI・OxOOOCOOOO

B-OxOOOCOOOO

OxOOOCOOOO

8TA-OiOOOCOOOO

■ILEDALU-OxQOOCOOOO

ALUMI-OxOOOCOOUO

yMFPSR-OxOOOCOOOO

OxODOCOOOO

SDR-0mMe0000

SXfOil-OkOOOCPUQO

aAiil/V.OklLDR,OxODOCQOOO

LI«<I«Ox330COOOO

|L«POxODOCQOOO

QMOOOCOOOO

Z

UxUJQCWOO

"如1川DxQOOCOOQO

DxOOOCOOOO

tms,159

Tot«l

FX

©3d>256~ctEi】

2cwwiljFnP^ifinv

Hardvarccom!igur«tice

UdcFX-StagH1requmjC>cbc?

iaufX$M0»t1.CyOtot5

kMX5即ieBCwtei13

ForwoR>^crated

Stella后r,r

SIHtttcf^CfdHlIhsecf

92Qeootgw…

J"i"lOOgaRA^…

r»-Af—rsa>>>i-4-*

图7

循环展开:

代码:

.text

.globalmain

main:

addiikr0,#4

addir2,r(),#()

addir2,r2.#1

subirl,rl,#l

addir2,r2,#l

subirl,rl,#l

addi22#I

subirl,rl,#l

addir2,r2,#l

subirl,rl,#l

trap0

结果:总时钟周期是15个,0rawstalls,执行了4次,结果r2=4

XJUkK*UXUUUUU1ZC

0x00000000

0x00000000

ln»huc*oi»»/C>c*MAKI-0x00000000

B・0x00000000

i2iO(hOBK1-0x00000000

BTi-0x03000000

Mr2j2Q>1ALU-0x09000000

ALUKI-OxOOOOOOOO

(ubif1j1.0KlFPSR-oxooooaooo

DKAR・0x00000000

r272Ai1I',:■MJSDR-oxooooaooo

SORHI>OxOOOOOOOO

i,1,L0k1UIOKL;U>R・OxOQOQQOOO

LDRKT-OxOOOOaOQO

0x00000000

OxODOSOOC

•ubiUlOkl

R■■OxO3CC:CDC

血,212&10x00000000

-1□1doxoaoooooc

Tot,】

>T4P<M)15CycM»l«NVCsMd

IDmoMd》11kuiMcacr(i|

2lrt»*wc*q»<r|nRo>«trw□a

H«rdv«r«ccnfiguration:

32766BVM

UddEKSU0M1teqjiedCyciKZ

twUEX-S-m^IwQiMdC*dw5

t*«<XStagestrwxcdCjKbi19

Forwaw^enabled

Stalls

RAWil0|D00*daCydMl

•4.-AA*•一一•.■・

图8

原因的对比:

是因为LOOP指令执行完后会有一个nop指令的延迟。

addir2j20x1

zmaaFW1

subir1j1,0x1

iLoopIF

nopIF(aborted

图9

多Cache一致性:

实验目的

1.加深对多CACHE一致性的理解。

2.进一步掌握解决多CACHE一致性的目录协议和监听协议的基本思想。

3、掌握在各种情况下,目录协议和监听协议是如何工作的。给出进行操作的类

型以及CACHE决状态的变化情况

模拟器使用方法简介(目录式)

该模拟器模抵4个CPU(A.B.C.D)访存的工作过程。每个CPU中都有一

个Cache,该Cache包含有4个块,其块地址为0-3。分布式存储器中有32个块,

其块地址为0-31。每个块状态用色块表示,其中灰色为“无效”状态,淡青色为

“共享”状态,橘红色为“独占”。主存中块的状态由其右边的目录项的颜色

来表示,未缓冲状态由黄色来表示,其他两种状态同Cache块。

对于每一个CPU都可以指定所要进行的访问是读还是写(从列表中选),并在输入框

中输入所要访问的主存块号,然后用鼠标单击在其右边的标有“I”的按钮,模抵器就将开

始演示该访问的工作过程。

|___1...

多CuchQ一致性梗依器——目录法

5“加

图10

模拟器简介(监听协议)

该模拟器模抵4个CPU(A.B.C.D)访存的工作过程。每个CPU中都有一

个Cache,该Cache包含有4个块,其块地址为0-3。集中共享存储器中有32个

块,其块地址为0-31。每个块状态用色块表示,其中灰色为“无效”状态,淡青

色为“共享”状态,橘红色为“独占”。

对于每一个CPU都可以指定所要进行的访问是读还是写(从列表中选),并在输入框

中输入所要访问的主存块号,然后用鼠标单击在其右边的标有“I”的按钮,模抵器就将开

始演示该访问的工作过程。

二忙”

图11

实验步骤(目录协议)

对于以下访问序目录协议所进行的操作

1.读2不命中;3本地:向宿主结点发读不命中(A,6)消息;4.宿主:

CPUA读第6块把数据块送给本地结点;5.共享集合为:{A}

读;2.不命中;3.本地:向宿主结点发读不命中(B,6)消息;

CPUB读第6块4.宿主:把数据块发送给本地结点;5.共享集合为:{A}+{B}

4.宿主:把数据块发送给本地结点;5.共享集合为:{A}+{B}

A-4--|«Yt4^4471I4«、工ZAA-1-nf.Z,-|-1-=-M-A_.,▲、,c、

1.读;2.不命中;3.本地:向宿主结点发读不命中(D,6)消息;

CPUD读第6块4.宿主:把数据块发送给本地结点;5.共享集合为:{A,B)+{D}

4.宿主:把数据块发送给本地结点;5.共享集合为:{A,B}+{D}

44fn4-T314-<4/-^./,人.X*111.,八・l44-人、1一,▲.

1.写;2.命中;3.本地:向定主结点发写命中(

,6)消息,宿主:向远程结点A发作废(6)消息,宿主:向远程

CPUB写第6块

结点D发作废(6)消息:4.共享集合为:{B}

1读;2.不命中;3.本地:向宿主结点发读不命中(C,6)消息;

4.宿主:给远程结点发取数据块(6)的消息;5.远程:把数据块

CPUC读第6块

送给宿主结点;6.宿主:把数据块送给本地结点;7.共享集合为:

iRi-i-iri

1.写;2.不命中;3.本地:向宿主结点发写不命中(D,20)消息;4.宿

CPUD写第20块主:把数据块发送给本地结点;5.共享集合为:{D}

1.写;2.不命中;3.本地:向宿主结点发写不命中(A,20)消息;4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论