计算机系统结构实验研究报告矩阵相乘.docx
- 文档编号:26787757
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:13
- 大小:114.24KB
计算机系统结构实验研究报告矩阵相乘.docx
《计算机系统结构实验研究报告矩阵相乘.docx》由会员分享,可在线阅读,更多相关《计算机系统结构实验研究报告矩阵相乘.docx(13页珍藏版)》请在冰豆网上搜索。
计算机系统结构实验研究报告矩阵相乘
计算机系统结构实验研究报告(矩阵相乘)
————————————————————————————————作者:
————————————————————————————————日期:
《计算机系统结构》课程
实验报告
院系:
计算机科学学院
专业:
计算机科学与技术
年级:
课程名称:
计算机系统结构
学号:
姓名:
指导教师:
年月日
年级
班级
学号
专业
姓名
题目名称
用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文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机系统 结构 实验 研究 报告 矩阵 相乘