计算机系统结构实验研究报告矩阵相乘.docx

上传人:b****5 文档编号:14311168 上传时间:2023-06-22 格式:DOCX 页数:13 大小:114.24KB
下载 相关 举报
计算机系统结构实验研究报告矩阵相乘.docx_第1页
第1页 / 共13页
计算机系统结构实验研究报告矩阵相乘.docx_第2页
第2页 / 共13页
计算机系统结构实验研究报告矩阵相乘.docx_第3页
第3页 / 共13页
计算机系统结构实验研究报告矩阵相乘.docx_第4页
第4页 / 共13页
计算机系统结构实验研究报告矩阵相乘.docx_第5页
第5页 / 共13页
计算机系统结构实验研究报告矩阵相乘.docx_第6页
第6页 / 共13页
计算机系统结构实验研究报告矩阵相乘.docx_第7页
第7页 / 共13页
计算机系统结构实验研究报告矩阵相乘.docx_第8页
第8页 / 共13页
计算机系统结构实验研究报告矩阵相乘.docx_第9页
第9页 / 共13页
计算机系统结构实验研究报告矩阵相乘.docx_第10页
第10页 / 共13页
计算机系统结构实验研究报告矩阵相乘.docx_第11页
第11页 / 共13页
计算机系统结构实验研究报告矩阵相乘.docx_第12页
第12页 / 共13页
计算机系统结构实验研究报告矩阵相乘.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

计算机系统结构实验研究报告矩阵相乘.docx

《计算机系统结构实验研究报告矩阵相乘.docx》由会员分享,可在线阅读,更多相关《计算机系统结构实验研究报告矩阵相乘.docx(13页珍藏版)》请在冰点文库上搜索。

计算机系统结构实验研究报告矩阵相乘.docx

计算机系统结构实验研究报告矩阵相乘

计算机系统结构实验研究报告(矩阵相乘)

 

 

————————————————————————————————作者:

————————————————————————————————日期:

 

 

《计算机系统结构》课程

 

实验报告

 

院系:

计算机科学学院

专业:

计算机科学与技术

年级:

课程名称:

计算机系统结构

学号:

姓名:

指导教师:

 

年月日

年级

班级

 学号

专业

 姓名

题目名称

用DLX汇编语言编写矩阵乘程序Matrix.s(元素数据为浮点数) 

题目内容

对矩阵乘程序Matrix.s做如下分析:

1.观察程序中出现的数据相关、控制相关和结构相关现象,并指出程序中出现上述现象的指令;2.指出转移指令在转移成功和不成功时的流水线开销;3.分别在使用定向技术和不使用定向技术的两种情况下,输入同样的数据,利用Statistics窗口中的统计数字(总的周期数和暂停数),计算定向技术带来的加速比。

4.通过DLX模拟器中的configuration窗口,将浮点运算的延迟改为8个时钟周期,重复观察并回答上述的1,2,3的问题。

 

 

实验结果截图如下:

1.程序最后的运行结果截图如下:

此为两个2阶矩阵的相乘,第一个矩阵的数据依次是1,2,3,4;第二个矩阵的数据依次是5,6,7,8,最后的运行结果依次是19,22,43,50。

Register图如下:

各寄存器的参数值如上。

(写不完时,可另加附页。

 

3.流水线图某一流程截图如下:

4.时钟周期表最后如下:

 

.data

;***Promptsforinput

;输入提示部分

dat1:

.space64

dat2:

.space64

result:

.space64

Prompt1:

.asciiz"InputthemartrixAline:

"

Prompt2:

.asciiz"InputthemartrixAcolumnandthemartrixBline:

"

Prompt3:

.asciiz"InputthemartrixBcolumn:

"

Prompt4:

.asciiz"InputthemartrixA'snumber:

"

Prompt5:

.asciiz"InputthemartrixB'snumber:

"

Prompt6:

.asciiz"Thisismyprogram!

"

;***Dataforprintf-Trap

;输出数据设置部分

PrintfFormat:

.asciiz"%d"

.align2

PrintfPar:

.wordPrintfFormat

PrintfValue:

.space4

PrintfFormat1:

.asciiz"\n"

.align2

PrintfPar1:

.wordPrintfFormat1

PrintfValue1:

.space4

PrintfFormat2:

.asciiz"OutputthemartrixA:

\n"

.align2

PrintfPar2:

.wordPrintfFormat2

PrintfValue2:

.space4

PrintfFormat3:

.asciiz"OutputthemartrixB:

\n"

.align2

PrintfPar3:

.wordPrintfFormat3

PrintfValue3:

.space4

PrintfFormat4:

.asciiz"OutputthemartrixC:

\n"

.align2

PrintfPar4:

.wordPrintfFormat4

PrintfValue4:

.space4

.text

.globalmain

main:

addir1,r0,Prompt1

jalInputUnsigned

movi2fpf1,r1;矩阵A的行数

addir1,r0,Prompt2

jalInputUnsigned

movi2fpf2,r1;矩阵A的列数,矩阵B的行数

addir1,r0,Prompt3

jalInputUnsigned

movi2fpf3,r1;矩阵B的列数

movfp2ir8,f1

movfp2ir6,f2

multur4,r6,r8;总的矩阵A的元素个数r4

addir2,r10,dat1;指向A的首地址

loop1:

addr1,r0,Prompt4;分别读入矩阵A的元素值

jalInputUnsigned

sb0(r2),r1;储存字节,读入元素

addir2,r2,1;元素个数加一

subr4,r4,1;总的矩阵元素个数r4减一

bnezr4,loop1;r4不为0时跳转重复输入

addir10,r0,0;分别读出矩阵A的元素值

addir2,r10,dat1;指向A的首地址

swPrintfValue2,r1

addir14,r0,PrintfPar2

trap5

loopA:

lbur1,0(r2)

swPrintfValue,r1

addir14,r0,PrintfPar;换行

trap5

addir2,r2,1;元素个数加一

subr6,r6,1;矩阵A的列数r6减一

beqzr6,outputA;矩阵A的列数r6等于0时跳到outputA

jloopA;否则继续loopA

outputA:

swPrintfValue1,r1

addir14,r0,PrintfPar1

trap5

subr8,r8,1;矩阵A的行数r8减一

beqzr8,countiuB;矩阵A的行数r8等于0时跳到countiuB

movfp2ir6,f2

jloopA;否则继续loopA

countiuB:

movfp2ir6,f2

movfp2ir12,f3

addir10,r0,0

multur4,r6,r12;总的矩阵B的元素个数r4

addir2,r10,dat2;指向B的首地址

loop2:

addir1,r0,Prompt5;分别读入矩阵B的元素值

jalInputUnsigned

sb0(r2),r1;储存字节,读入元素

addir2,r2,1;元素个数加一

subr4,r4,1;总的矩阵元素个数r4减一

bnezr4,loop2;r4不为0时跳转重复输入

addir10,r0,0;分别读出矩阵B的元素值

addir2,r10,dat2;指向B的首地址

swPrintfValue3,r1

addir14,r0,PrintfPar3

trap5

loopB:

lbur1,0(r2)

swPrintfValue,r1

addir14,r0,PrintfPar;换行

trap5

addir2,r2,1;元素个数加一

subr12,r12,1;矩阵B的列数r12减一

beqzr12,outputB;矩阵B的列数r12等于0时跳到outputB

jloopB;否则继续loopB

outputB:

swPrintfValue1,r1

addir14,r0,PrintfPar1

trap5

subr6,r6,1;矩阵B的行数r6减一

beqzr6,countiue;矩阵B的行数r6等于0时跳到countiu

movfp2ir12,f3

jloopB;否则继续loopB

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)

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

movfp2ir1,f2

multur10,r5,r1;i<-l*n,r10表示矩阵A当前行的第一个元素的索引

addir7,r6,0;movcoltoj(矩阵B某一列的某个元素的索引)

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

addir9,r5,1;r9<-l+1,r9代表矩阵A当前数组中的实际行号(r5的初值为0)

movfp2ir1,f2;f2是矩阵A的列数

multur9,r1,r9;p<-n*(l+1),r9代表矩阵A当前行中最后一个元素在数组中的索引

calculate:

movi2fpf4,r10

movi2fpf9,r9

ltff4,f9;compareitopz(判断是否计算到当前行的最后一个元素)

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;storeresult,把新计算出来的元素放入当前内存单元

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

addir6,r6,1;矩阵B的当前列数自增1

jcolumn;矩阵B新的一列开始

leveladd:

addir5,r5,1;矩阵A当前行自增1

jline;矩阵A新的一行开始

finish:

addir10,r0,0;分别读出矩阵C的元素值

movfp2ir8,f1

movfp2ir12,f3

addir2,r10,result

swPrintfValue4,r1

addir14,r0,PrintfPar4

trap5

loop3:

lbur1,0(r2)

swPrintfValue,r1

addir14,r0,PrintfPar

trap5

addir2,r2,1

subr12,r12,1

beqzr12,outputC

jloop3

outputC:

swPrintfValue1,r1

addir14,r0,PrintfPar1

trap5

subr8,r8,1

beqzr8,choice

movfp2ir12,f3

jloop3;***end

choice:

addr1,r0,Prompt6;是否重复本次运行操作

jalInputUnsigned

beqzr1,end;若为0则结束运行

jmain;否则则重复执行

end:

trap0

 

 

教师签名:

年月日

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

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2