北京邮电大学实验报告课程名称:高级计算机系统结构学号:2015140454姓名:罗一皓实验二指令流水线相关性分析一.实验类别:验证试验二.实验目的:通过使用WINDLX模拟器,对程序中的三种相关现象进行观察,并对使用专用通路,增加运算部件等技术对性能的影响进行考察,加深对流水线和RISC处理器的特点的理解。
三.实验学时:4四.实验人数:1五.实验设备环境:WinDLX模拟器可以装入DLX汇编语言程序,然后单步、设置断点或者连续执行该程序。
CPU的寄存器、流水线、I/O和存储器都可以使用图形的方式表示出来。
模拟器还提供了对流水线操作的统计功能。
该模拟器对理解流水线和RISC处理器的特点很有帮助。
六.实验原理:指令流水线中主要有结构相关、数据相关、控制相关。
相关影响流水线性能。
结构相关:当指令在重叠执行过程中,硬件资源满足不了指令重叠执行的要求,发生资源冲突时,将产生“结构相关”。
数据相关:当一条指令需要用到前面指令的执行结果,而这些指令均在流水线中重叠执行时,就可能引起“数据相关”。
控制相关:由条件指令引起的相关。
七.实验内容和要求:使用WinDLX模拟器,对求阶乘程序Fact.s做分析八.实验步骤:(1)观察程序中出现的数据/控制/结构相关。
指出程序中出现上述现象的指令组合。
数据相关:在第24个周期时,在Clock Cycle Diagram 中有橙黄色的R-Stall,点开之后,我们发现有相关指令组合:lbu r3,0x0(r2)seqi r5,r3,0xa控制相关:在第4个时钟周期中,第一条命令正在MEM段,在第二条命令在intEXcellent 段,第四条命令在IF段。
而第三条命令指示为“aborted”。
其原因是:在第二条命令(jal)是无条件分支指令,但只有在第三个时钟周期,jal指令被译码后才知道,这时,下一条命令movi2fp已经取出,但须执行的下一条命令在另一个地址处,因而,movi2fp的执行应被取消,在流水线中留下气泡。
此处发生了控制相关。
相关的指令组合:addi r1,r0,0x1000jal InputUnsignedmovi2fp f10,r1sw SaveR2[r0],r2结构相关:在这个流水线图中可以发现点开之后,会发现addi r2,r2,0x1 该指令在它面前的一条指令add r1,r1,r3 发生了结构相关。
由于上一条指令由于数据相关需要停4个周期,在ID段后停滞,不能进入intEX段,故addi r2,r2,0x1 就不能进入ID,译码部分已经被占用。
故发生了结构相关。
相关指令:add r1,r1,r3addi r2,r2,0x1(2)考察增加浮点运算部件对性能的影响。
N=4时,浮点运算部件均为1时:N=4,浮点运算器都变为2时:比较个数据,发现没有发生变化。
对于该程序,指令组合涉及不到多个浮点器的结构相关。
(3)考察增加forward部件对性能的影响。
在载入fact.s和input.s之后,不设置任何断点运行。
①不采用重新定向技术,我们得到② 采用定向技术,我们得到的结果是:从上面的数据我们可以看出定向的作用:增加forward 部件后的109个时钟周期比增加前的137个少了28个时钟周期。
增加forward 部件使得RAW 相关变为15个,比增加前的41个减少了26个,RAW 相关的比例从总时钟周期的29.93%减为13.76%。
增加forward 部件使得控制相关比例增加了,由原来占总时钟周期的8.03%增至10.09%。
总之,使用forward 部件后,总的时钟周期减少,数据相关减少,流水线的性能得到一定的改善。
(4)观察转移指令在转移成功和转移不成功时候的流水线开销。
转移成功的情况:在一条由4个流水段组成的流水线中,第I-1条指令要等到第I+2条指令进入流水线时才能形成条件码。
如果形成的条件码是“转移不成功”的,则猜测正确,流水线的吞吐率和效率没有降低;如果形成的条件码是“转移成功”的,则猜测错误,必须沿下面分支方向进行。
此时,首先作废流水线已经执行的第I+1,I+2条指令,然后再从分支点开始,执行第P,P+1,…各条指令。
在这种情况下,每执行一条条件转移指令,一条4段流水线就有2个流水段被浪费。
吞吐率下降为:D=3pq/1+3pq九.实验总结:本次实验,通过模拟和分析对N的阶乘的程序,根据pipeline图和clock图和相关的数据对数据相关,结构相关,控制相关进行了逐个的分析。
分析结果之后,对于老师上课讲到的内容有了更加形象化的理解,对于学习挤塑机体系结构大有帮助。
实验三 DLX处理器程序设计一、实验目的学习使用DLX 汇编语言编程,进一步分析相关现象。
二、实验设备环境DLX汇编语言环境三、实验内容和要求自编一段汇编代码,完成一维向量加法运算,并输出结果。
观察程序中出现的数据/控制/结构相关。
(注:使用一维数组表示一维向量。
)四、代码清单及注释*双精度浮点加法求和设计*1、代码及注释.data;***store the vectorReadBuffer1: .space 120 ;store vector in byteReadPar1: .word 0,ReadBuffer1,120ReadBuffer2: .space 120 ;store vector in byteReadPar2: .word 0,ReadBuffer2,120;***msg for outputPrompt0: .asciiz "Add two vector:\n\n"Prompt1: .asciiz "vector1:(element seperated by space)\n"Prompt2: .asciiz "vector2:(element seperated by space)\n"Prompt3: .asciiz "vectorSum: ";*** Data for Printf-TrapPrintfFormat: .asciiz "%f " ;used to output the result.align 4PrintfPar: .word PrintfFormatPrintfValue: .space 8PrintfPar2: .space 4.text.global mainmain:;*** Prompt the msgaddi r1,r0,Prompt0sw PrintfPar2,r1addi r14,r0,PrintfPar2trap 5;***get vector1addi r1,r0,Prompt1sw PrintfPar2,r1addi r14,r0,PrintfPar2trap 5;*** call Trap-3 to read line vector1addi r14,r0,ReadPar1trap 3;***get vector2addi r1,r0,Prompt2sw PrintfPar2,r1addi r14,r0,PrintfPar2trap 5;*** call Trap-3 to read line vector2addi r14,r0,ReadPar2trap 3;output the result msgaddi r1,r0,Prompt3sw PrintfPar2,r1addi r14,r0,PrintfPar2trap 5;*******************************************************;calculate the vector sum one by one;*******************************************************;*****use f2 store vector1:f 20 store vector2;*************************************************;r1~r10,f1~f9 for vector1;r11~r19,f11~f19 for vector2;*************************************************;*****change the byte into decimal;*** determine valueaddi r2,r0,ReadBuffer1 ;Let r2 point to the first byte of vector1addi r12,r0,ReadBuffer2 ;Let r12 point to the first byte of vector2BG:;******initial the registeraddi r1,r0,0addi r11,r0,0addi r8,r0,10 ;Decimal systemaddi r18,r0,10 ;Decimal systemaddi r6,r0,1 ;the decimal fraction partaddi r16,r0,1addi r22,r0,0 ;movi2fp f1,r22 ;zeromovi2fp f11,r22movf f3,f0 ;zeromovf f13,f0Loop1: ;*** reads integer part of vector1lbu r3,0(r2)seqi r5,r3,10bnez r5,Loop2seqi r5,r3,32bnez r5,Loop2seqi r5,r3,46 ;.-> read the decimal fraction partbnez r5,Fraction1subi r3,r3,48 ;char->integermultu r1,r1,r8 ;Shift decimaladd r1,r1,r3addi r2,r2,1 ;increment pointerj Loop1Fraction1: ;*****read the decimal part of vector2addi r2,r2,1 ;increment pointerlbu r3,0(r2)seqi r5,r3,10 ;LF->The element in vector1 is gotbnez r5,Loop2seqi r5,r3,32 ;Space->The element in vector1 is gotbnez r5,Loop2subi r3,r3,48multu r6,r6,r8movi2fp f6,r6movi2fp f3,r3divf f3,f3,f6 ;f3 change to corresponding decimaladdf f1,f1,f3 ;store the decimal part in f1j Fraction1Loop2: ;*** reads integer part of vector1;******movi2fp f5,r1cvti2f f3,f5cvtf2d f2,f3cvtf2d f4,f1addd f2,f2,f4 ;vector1 is in f2lbu r13,0(r12)seqi r15,r13,10bnez r15,Finish ;LF->Finishedseqi r15,r13,32bnez r15,SUM ;The element in vector2 is gotseqi r15,r13,46 ;.-> read the decimal fraction partbnez r15,Fraction2subi r13,r13,48 ;char->integermultu r11,r11,r18 ;Shift decimaladd r11,r11,r13addi r12,r12,1 ;increment pointerj Loop2Fraction2: ;*****read the decimal part of vector2addi r12,r12,1 ;increment pointerlbu r13,0(r12)seqi r15,r13,10 ;LF->EXITbnez r15,Finishseqi r15,r13,32 ;Spacebnez r15,SUMsubi r13,r13,48multu r16,r16,r18movi2fp f16,r16movi2fp f13,r13divf f13,f13,f16 ;f3 change to corresponding decimaladdf f11,f11,f13 ;store the decimal part in f1j Fraction2SUM: ;calculate the sum of elements<vector1,vector2>movi2fp f15,r11cvti2f f13,f15cvtf2d f12,f13cvtf2d f14,f11addd f12,f12,f14 ;vector2 is in f12;increment pointeraddi r2,r2,1 ;increment pointeraddi r12,r12,1 ;increment pointeraddd f2,f2,f12 ;get and output the sumsd PrintfValue,f2addi r14,r0,PrintfPartrap 5j BG ;ready to calculate the next pairFinish: ;***store the final result in f2.restore old register contents movi2fp f15,r11cvti2f f15,f13cvtf2d f12,f13cvtf2d f14,f11addd f12,f12,f14 ;vector2 is in f12addd f2,f2,f12 ;get and output the last sumsd PrintfValue,f2addi r14,r0,PrintfPartrap 5trap 0五、程序相关性分析结果相关的情况如下:该程序执行过程中仅有控制相关、结构相关、数据相关。