计算机系统结构实验报告Word文件下载.docx

上传人:b****6 文档编号:16738195 上传时间:2022-11-25 格式:DOCX 页数:14 大小:366.21KB
下载 相关 举报
计算机系统结构实验报告Word文件下载.docx_第1页
第1页 / 共14页
计算机系统结构实验报告Word文件下载.docx_第2页
第2页 / 共14页
计算机系统结构实验报告Word文件下载.docx_第3页
第3页 / 共14页
计算机系统结构实验报告Word文件下载.docx_第4页
第4页 / 共14页
计算机系统结构实验报告Word文件下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

计算机系统结构实验报告Word文件下载.docx

《计算机系统结构实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《计算机系统结构实验报告Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。

计算机系统结构实验报告Word文件下载.docx

注:

为简单起见,可以固定矩阵的大小,如20*20,可以不赋初值,不输出计算结果,目的是考察矩阵乘循环的指令序列。

实验结果与分析:

一、实验中采用2行2列的矩阵A与2行4列的矩阵B相乘结果如下:

二、程序中出现很多的数据相关、控制相关和结构相关现象,例如:

数据相关指令:

multur4,r6,r8与subr4,r4,1、addir2,r10,dat1与addir2,r2,1等;

控制相关指令:

bnezr4,loop1、beqzr6,outputA、ltff4,f9bfpfasign等;

三、使用DLX平台提供的功能可以实验程序在运行过程中观察 

Pipeline窗口流水线的执行步骤、 

ClockCycleDiagram窗口查看流水线的时空图以、实验程序中数据在内存中的地址、实验运行结束后对应的内存分配以及在Statistics窗口中程序执行的相关执行周期等信息;

如下图所示:

1、Pipeline窗口流水线的执行步骤(执行完毕各存储器中的内容):

2、 

ClockCycleDiagram窗口查看流水线的时空图:

3、实验程序中数据在内存中的地址

4、实验运行结束后对应的内存分配

5、使用定向技术观察Statistics窗口中程序执行的相关执行周期等信息

6、使用非定向技术观察Statistics窗口中程序执行的相关执行周期等信息

7、由以上采用定向技术和采用非定向技术两种方式运行下的Statistics窗口得到的信息可知在定向技术下执行总周期为1779,而在非定向技术下执行总周期为2179;

因此计算定向技术带来的加速比:

S=2179/1779=1.22

Martrix.s程序代码:

;

------------------------------------------------------------------------

Programbeginsatsymbolmain

requiresmoduleINPUT

Readtwoarrays,calculatethemultiplitionoftwoarrays

andwritetheresulttostdout

.data

dat1:

.space64

dat2:

result:

Prompt1:

.asciiz"

inputthemartrixAline:

"

Prompt2:

inputthemartrixAcolumnandthemartrixBline:

"

Prompt3:

.asciiz"

inputthemartrixBcolumn:

Prompt4:

inputthemartrixA'

snumber:

Prompt5:

inputthemartrixB'

Prompt6:

Doyouwantagain(yes=1,no=0):

PrintfFormat:

%d"

.align2

PrintfPar:

.wordPrintfFormat

PrintfValue:

.space4

PrintfFormat1:

.asciiz"

\n"

PrintfPar1:

.wordPrintfFormat1

PrintfValue1:

PrintfFormat2:

outputthemartrixA:

PrintfPar2:

.wordPrintfFormat2

PrintfValue2:

PrintfFormat3:

outputthemartrixB:

PrintfPar3:

.wordPrintfFormat3

PrintfValue3:

PrintfFormat4:

outputthemartrixC:

PrintfPar4:

.wordPrintfFormat4

PrintfValue4:

.text

.globalmain

main:

addir1,r0,Prompt1

jalInputUnsigned

movi2fpf1,r1;

矩阵A的行数

addir1,r0,Prompt2

movi2fpf2,r1;

矩阵A的列数,矩阵B的行数

addir1,r0,Prompt3

jalInputUnsigned

movi2fpf3,r1;

矩阵B的列数

movfp2ir8,f1

movfp2ir6,f2

multur4,r6,r8;

分别读入矩阵A的元素值

addir2,r10,dat1

loop1:

addr1,r0,Prompt4

jalInputUnsigned

sb0(r2),r1

addir2,r2,1

subr4,r4,1

bnezr4,loop1

addir10,r0,0;

分别读出矩阵A的元素值

swPrintfValue2,r1

addir14,r0,PrintfPar2

trap5

loopA:

lbur1,0(r2)

swPrintfValue,r1

addir14,r0,PrintfPar

subr6,r6,1

beqzr6,outputA

jloopA

outputA:

swPrintfValue1,r1

addir14,r0,PrintfPar1

subr8,r8,1

beqzr8,countiuB

jloopA

countiuB:

movfp2ir6,f2

movfp2ir12,f3

addir10,r0,0

multur4,r6,r12;

分别读入矩阵B的元素值

addir2,r10,dat2

loop2:

addir1,r0,Prompt5

bnezr4,loop2

分别读出矩阵B的元素值

swPrintfValue3,r1

addir14,r0,PrintfPar3

loopB:

swPrintfValue,r1

subr12,r12,1

beqzr12,outputB

jloopB

outputB:

addir14,r0,PrintfPar1

beqzr6,countiue

movfp2ir12,f3

jloopB

countiue:

addir11,r0,0;

temp,表示矩阵C的一个元素的累加器

addir4,r0,0;

r初始化矩阵C的偏移量

addir5,r0,0;

矩阵A当前被扫描的行号

line:

movi2fpf4,r5;

判断是否扫描完

ltff4,f1;

f4>

f1跳转(矩阵A的行是否扫描完)

bfpffinish;

是,则跳转结束程序

addir6,r0,0;

col,r6表示当前B矩阵的列号

column:

movi2fpf4,r6

ltff4,f3;

col(f3)<

f4,矩阵B的列是否扫描完

bfpfleveladd;

是,则跳到矩阵a的下一行

movfp2ir1,f2

multur10,r5,r1;

r10表示矩阵A当前行的第一个元素的索引

addir7,r6,0;

movcoltoj(矩阵B某一列的某个元素的索引)

temp=0,矩阵C当前的元素值的初始化

addir9,r5,1;

r9代表矩阵A当前数组中的实际行号

movfp2ir1,f2;

f2是矩阵A的列数

multur9,r1,r9;

r9代表矩阵A当前行中最后一个元素在数组中的索引

calculate:

movi2fpf4,r10

movi2fpf9,r9

ltff4,f9;

判断是否计算到当前行的最后一个元素)

bfpfasign;

当前行列相乘完毕,得出结果矩阵C的一个元素

addir1,r10,dat1;

取矩阵A当前元素在内存区域中的地址

lbur2,0(r1);

从r1所指向的内存单元中取出矩阵A当前的元素暂存在r2

addir1,r7,dat2;

取矩阵B当前元素在内存区域中的地址

lbur3,0(r1);

从r1所指向的内存单元中取出矩阵B当前的元素暂存在r3

multur1,r2,r3;

temp1<

-dat1[i]+dat2[j]

addr11,r11,r1;

temp<

-temp+temp1,累加到累加器

addir10,r10,1;

i++,计算矩阵A当前行的下个元素的索引

movfp2ir1,f3

addr7,r7,r1;

j<

-j+k,计算矩阵B的当前列的下个元素的索引

jcalculate

asign:

addir1,r4,result;

r1表示矩阵C当前的地址

sb0(r1),r11;

把新计算出来的元素放入当前内存单元

addir4,r4,1;

赋值完一个元素,偏移量自增1

addir6,r6,1;

矩阵B的当前列数自增1

jcolumn;

矩阵B新的一列开始

leveladd:

addir5,r5,1;

矩阵A当前行自增1

jline;

矩阵A新的一行开始

finish:

分别读出矩阵C的元素值

addir2,r10,result

swPrintfValue4,r1

addir14,r0,PrintfPar4

loop3:

addir14,r0,PrintfPar

beqzr12,outputC

jloop3

outputC:

swPrintfValue1,r1

beqzr8,choice

jloop3;

***end

choice:

addr1,r0,Prompt6

beqzr1,end

jmain

end:

trap0

通过本次实验,我对于DLX仿真平台和DLX指令有了一定程度的认识,基本上能够读懂DLX编写的程序。

同时通过观察实验数据,对流水线的冲突和解决冲突的方法有了更深入的认识,当出现冲突时,修改指令的执行顺序是一个比较好的解决方法。

在这次实验的过程中,通过认真阅读源代码,基本上学会了对DLX仿真试验平台的运用。

教师签名:

年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1