计算机系统结构winDLX流水线实验报告_第1页
计算机系统结构winDLX流水线实验报告_第2页
计算机系统结构winDLX流水线实验报告_第3页
计算机系统结构winDLX流水线实验报告_第4页
计算机系统结构winDLX流水线实验报告_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

计算机系统结构winDLX流水线实验报告PAGE10计算机科学与技术学院《计算机体系结构》课程实验学号:班级:专业:学生姓名:年月日七、实验数据及结果分析:1、先装入Variance.s再转入Input.s时,因为程序顺序执行,地址顺序符合程序执行顺序,程序能够正确执行;顺序相反时,因为Input.s的地址高,而程序顺序执行到Input.s时将没有正确的输入窗口,程序执行到输出结果时,也不会出现结果2、程序中出现的三种相关(1)数据相关:以图1中出现的两个数据相关为例下面两条指令中,因为第二条指令要读r3,而执行到此操作时加载指令仍对r3进行操作,因此出现了数据相关lbu r3,0(r2) seqi r5,r3,10下面两条指令中,因为加法指令要读r1,而执行到此操作时乘法指令仍对r进行操作,因此出现了数据相关multu r1,r1,r4add r1,r1,r3 图1数据相关(2)控制相关:以图2中出现的控制相关为例下面两条指令中,因为第一条指令出现跳转指令时,存储指令的取指将作废,所以出现控制相关jal InputUnsignedswPrintfValue(r3),r1图2控制相关(3)结构相关:以图3中出现的结构相关为例下面两条指令中,因为当第二条乘法指令需要使用乘法器时,第一条乘法指令仍在使用乘法器,所以出现结构相关multr2,r0,r0multr3,r0,r0图3结构相关3、主程序Variance.s的代码.data ;.data标识下面的数据放在数据区中;输入语句,指示你输入要求多少个数的方差Prompt:.asciiz"PleaseinputAnintegerwhichisarray'ssizevalue>0:";输入语句,指示你输入要求方差的数PromptLast:.asciiz"Pleaseinputtheinteger:";输出格式,表示求出的方差按什么格式输出PrintfFormat:.asciiz"theVarianceis:%g";表示下面采用字对齐.align 2;.word在存储器中顺序存放列出的字PrintfPar:.word PrintfFormat;在存储区中空出相应大小的区域Printf:.space8Variance:.space8PrintfValue:.space 1024.text;.text标识下面的代码存放在代码区中.globalmain;.global标识main可以被全局访问main:;将Prompt字符串首地址放入r1寄存器中addi r1,r0,Prompt;跳转向InputUnsigned标识的地址,调用input子函数读取数组大小的值jal InputUnsigned;将input函数读取的数放入寄存器中addr5,r0,r1addr6,r0,r1addr7,r0,r1addr8,r0,r1addir3,r0,0;循环调用input函数读数InputArray:;r5寄存器中的值为0则跳转向ProcessPart标识的地址beqzr5,ProcessPartaddir1,r0,PromptLastjalInputUnsigned;将r1寄存器中的数放入r3寄存器中所存数地址的存储器中swPrintfValue(r3),r1addir3,r3,4subir5,r5,1;无条件跳转向InputArray标识的指令地址jInputArrayProcessPart:;r2,r3寄存器中数清0multr2,r0,r0multr3,r0,r0Loop1:;r6寄存器中的值为0则跳转向Average1标识的地址beqzr6,Average1;将r3寄存器中所存地址的存储器中的数加载到r1中lwr1,PrintfValue(r3);求出n个数的累加和存入r2中addr2,r2,r1addir3,r3,4subir6,r6,1;无条件跳转向Loop1标识的指令地址jLoop1Average1:;求出n个数的平均数存入r9中divr9,r2,r8;r2,r3寄存器中数清0multr2,r0,r0multr3,r0,r0Loop2:;r7寄存器中的值为0则跳转向Average2标识的地址beqzr7,Average2;将r3寄存器中所存地址的存储器中的数加载到r1中lwr1,PrintfValue(r3);求出n个数与平均数差值平方的累加和subr10,r1,r9multr10,r10,r10addr2,r2,r10addir3,r3,4subir7,r7,1;无条件跳转向Loop2标识的指令地址jLoop2Average2:;求出方差存入r11中divr11,r2,r8 output:;将方差存入Variance所指存储空间中swVariance,r11;转换为双精度并输出lff2,Variancecvti2df0,f2sd Printf,f0addi r14,r0,PrintfPartrap 5;调用中断,格式化输出转化为标准输出over:trap 0;调用系统中断,0表示程序执行结束4、样例输出,以图4中数据为例输入需要求方差数的个数为4,4个数分别为3,5,6,2,输出结果为2图4输出界面5、尽量减少和消除程序中出现的相关(1)消除数据相关a.采用定向技术:在发生数据相关时,等待前面计算结果的指令并不一定真的马上就用到该计算结果,如果能够将该计算结果从其产生的地方直接送到其他指令需要它的地方,就可以避免暂停。具体操作为,在WinDLX模拟器中选中Configuration菜单中的EnableForwarding选项。b.手动优化:以图1中的一个数据相关为例,交换两条加法指令的顺序可消除数据相关。multu r1,r1,r4multur1,r1,r4add r1,r1,r3addi r2,r2,1addi r2,r2,1addr1,r1,r3(2)消除控制相关循环展开,将循环体代码复制多次实现,即减少跳转指令执行的次数。循环展开能够增大指令调度的空间,减少循环分支指令的开销。以Variance.s中的一个循环体为例,循环展开一次后jLoop1指令执行次数减少了一半Loop1:Loop1:beqzr6,Average1beqzr6,Average1lwr1,PrintfValue(r3)lwr1,PrintfValue(r3)addr2,r2,r1addr2,r2,r1addir3,r3,4addir3,r3,4subir6,r6,1subir6,r6,1jLoop1beqzr6,Average1lwr1,PrintfValue(r3)addr2,r2,r1addir3,r3,4subir6,r6,1jLoop1(3)消除结构相关结构相关的起因是资源争用,考虑采用资源充分重复设置的方法来避免结构相关。在本程序中产生结构相关的原因是乘法器争用,增加一个乘法器可以消除结构相关。具体操作为,在WinDLX模拟器中选中Configuration菜单中的FloatingPointStagesConfiguration选项,在弹出的对话框中设置。6、程序流程图:(1)输入函数Input.s流程图:(2)主程序Variance.s流程图:八、实验结论:1、程序的装入要严格按照顺序,顺序将影响程序的正确执行;2、程序执行顺序,部件的个数都会对程序的执行产生影响;3、为减少数据相关,应调整程序的执行顺序或采用定向

温馨提示

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

评论

0/150

提交评论