实验一熟悉WinDLX的使用.doc_第1页
实验一熟悉WinDLX的使用.doc_第2页
实验一熟悉WinDLX的使用.doc_第3页
实验一熟悉WinDLX的使用.doc_第4页
实验一熟悉WinDLX的使用.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

实验一熟悉WinDLX的使用1.实验目的: 通过本实验,熟悉WinDLX模拟器的操作和使用,了解DLX指令集结构及其特点。2.实验内容: (1)用WinDLX模拟器执行求阶乘程序facts。执行步骤详见“WinDLX教程”。 这个程序说明浮点指令的使用。该程序从标准输入读入一个整数,求其阶乘,然后将结果输出。该程序中调用了input. s中的输入子程序,这个子程序用于读入正整数。 (2)输入数据“3”采用单步执行方法,完成程序并通过上述使用 WinDLX,总结WinDLX的特点。 (3)注意观察变量说明语句所建立的数据区,理解WinDLX指令系统。3.实验程序: 求阶乘程序facts;*WINDLX Ex.2: Factorial*Program begin at symbol mainrequires module INPUTread a number from stdin and calculate the factorial (type: double)the result is written to stdout.dataPrompt: .asciiz An integer value 1:”PrintfFormat: .asciiz Factorial=%gnn.align 2PrintfPar: .word PrintfFormatPrintfValue: .space 8.text.global mainmam:;*Read value from stdin into R1addi r1,r0,Promptj al InputUnsigned;*init valuesmovi2fp f10,r1 ;R1一DO DO二Count registercvti2d f0,f10addi r2,r0,1;1一D2 D2.resultmovi2fp fl 1,r2cvti2d伦,fl lmovd f4,fZ;1一D4 D4二Constant 1;*Break loop if DO=1Loop: led f0,f4 ;DOExitbnez rS,Finishsubi r3,r3,48;?multu rl,rl,r4 ;Shift decimaladd rl,rl,r3addi r2,r2,1 ;increment pointerj LoopFinish:;*restore old register contents1w r2,SaveR21w r3,SaveR31w r4,SaveR41w rS,SaveRSjr r31;Retur4.实验过程截图:j al的分支地址命名为“InputUnsigned。为找到此符号地址的实际值,点击主窗口中的Memory和Symbols,出现的子窗口中显示相应的符号和对应的实际值。在“Sort:区域选定“name,使它们按名称排序,而不是按数值排序。数字后的“G”代表全局符号,L”代表局部符号。 input”中的“InputUnsigned是一个全局符号,它的实际值为0x144,用作地址。点击OK按纽关闭窗口。 再一次点击F7,第一条命令(addi)到达流水线的最后一段。如果想了解某条命令执行后处理器内部会发生什么?你只要对准Clock cycle diagram窗口中相应命令所在行,然后双击它,弹出一个新窗口。窗口中会详细显示每一个流水段处理器内部的执行动作。这个窗口“Information about .”作为将来的Information窗口。观察完后,点击OK按钮关闭窗口。 (双击Code窗口中的某一行或者Pipeline窗口中的某一段,同样可以Information窗口。)指向Code窗口中包含命令trap 0x5的Ox0000015c行,此命令是写屏幕的系统调用。单击命令行,然后点击主窗口菜单Code,单击Set Breakpoint(确保命令行仍被标记!),将弹出一个新的“Set Breakpoint”窗口。通过此窗口,你可以选择命令运行到流水线的哪一阶段时,程序停止执行。缺省为ID段。点击OK关闭窗口。现在你只要点击Execution / Run或按FS,模拟就继续运行。会出现一个对话框提示你“ID-Stage: reached at Breakpoint #1,按确认,按钮关闭。点击Clock cycle diagram窗口中的trap 0x5行,你将看到模拟正处于时钟周期14 ,0trap 0x5行如下所示:为进一步模拟,点击Code窗口,用箭头键或鼠标向下滚动到地址为0x00000194的那一行(指令是1w r2, SaveR2(r0),点击此行,然后按Ins键,或点击Code / Set Breakpoint / OK,在这一行上设置一个断点。采用同样的方法,在地址Ox000001a4(指令jar r31)处设置断点。现在按FS继续运行。这时,会弹出DLX-Standard-I/O窗口,在信息“An integer value 1:”后鼠标闪烁,键入20然后按Enter,模拟继续运行到断点#2处。单步执行:光标后不能输入数字输入数字20,并得出结果:实验二.用WinDLX模拟器执行程序求最大公约数1.实验目的: 通过本实验,熟练掌握WinDLX模拟器的操作和使用,清楚WinDLX五段流水行具体程序时的流水情况,熟悉DLX指令集结构及其特点。2.实验内容: (1)用WinDLX模拟器执行程序gcm. s。 该程序从标准输入读入两个整数,求他们的greatest common measure,然后斗结果写到标准输出。该程序中调用了inputs中的输入子程序。 (2).给出两组数6, 3和6, 1,分别在main+OxB(add r2,r1,r0), gcm.loop(seg r;和result+Oxc(trap 0x0)设断点,采用单步和连续混合执行的方法完成程序,注意中间寄存器的变化情况,然后单击主菜单execute/display dlx-i/0,观察结果。3.实验程序求最大公约数程序:gcm.s;*WINDLX Ex. l : Greatest common measure*Program begins at symbol main;requires module INPUTRead two positive integer numbers from stdin, calculate the gcmand write the result to stdout.data;*Prompts for inputPrompt 1:.asciizPrompt2: .asciiz“First Number:”“Second Number:;*Data for printf-TrapPrintfFormat: .asciiz“gcM=%dnn.align 2PrintfPar: .word PrintfFormatPrintfValue: .space 4.text.global mainmam:;*Read two positive integer numbers into R1 and R2addi r1,r0,Promptljal InputUnsigned ;read uns.-integer into R1add r2,r1,r0 ;R2R2?bnez r3,rlGreaterr2Greater:;*subtract r 1 from r2sub r2,r2,r1j Loopr 1 Greater:;*subtract r2 from r 1sub rl,rl,r2j LoopResult:;*Write the result (R1)sw PrintfValue,rladdi r14,r0,PrintfPartrap 5;*endtrap 0该程序中调用了input. s中的输入子程序。;*WINDLX Ex. l : Read a positive integer number*;Subprogram call by symbol“InputUnsigned;expect the address of a zero-terminated prompt string in R1;returns the read value in R1;changes the contents of registers R1,R13,R14.data;*Data for Read-TrapReadBuffer: .space 80ReadPar: .word O,ReadBuffer,80二* * * Data for Printf-TrapPrintfPar: .space 4SaveR2: .space 4SaveR3:.space 4SaveR4: .space 4SaveRS:.space 4.text.global InputUnsignedInputUnsigned:;*save register contentssw SaveR2,r2sw SaveR3,r3sw SaveR4,r4sw SaveR5,r5;*Promptsw PrintfPar,rladdi r14,r0,PrintfPartrap 5;*call Trap-3 to read lineaddi r14,r0,ReadPartrap 3;*determine valueaddi r2,r0,ReadBufferaddi r1,r0,0addi r4,r0,10 ;Decimal systemLoop:;*reads digits to end of linelbu r3,0(r2)seqi r5,r3,10 ;LF一Exitbnez rS,Finishsubi r3,r3,48;?multu rl,rl,r4 ;Shift decimaladd rl,rl,r3addi r2,r2,1 ;increment pointerj LoopFinish:;*restore old register contents1w r2,SaeeR21w r3,SaeR31w r4,SaeR41w rS,SaveRSjr r31;Retur4.实验结果截图七.实验二用WinDLX模拟器完成求素数程序1.实验目的: 通过实验,熟练掌握WINDLX的操作方法,特别注息在单步执行WinDLX程序中,流 水线中指令的节拍数2.实验内容: (1)用WinDLX模拟器执行求素数程序prim.s.这个程序计算若干个整数的素数 (2)单步执卞两轮程序,求出素数2和3 (3)在执行程序过程中,注息体验单步执行除法和乘法指令的节拍数,并和主菜单 configuration/floatin g point slages中的各指令执行节拍数进行比较。3.实验程序 求素数程序prim.s.;*WINDLX Exp.2: Generate prime number table*;Program begins at symbol;generates a table with themaynfirst Count prime numbers from Table.data;*size of table.global CountCount: .word 10.global TableTable: .space Count*4.text.global mainmam:;*Initializationaddi r1,r0,0 ;Index in Tableaddi r2,r0,2 ;Cuwent value;* * * Determine, if R2 can be divided by a value in tableNextValue: addi r3,r0,0 ;Helpindex in TableLoop: seq r4,rl,r3 ;End of Table?bnez r4,IsPrim ;R2 is a prime number1w rS,Table(R3)divu r6,r2,r5multu r7,r6,r5subu r8,r2,r7beqz rB,IsNoPrimaddi r3,r3,4j LoopIsPrim:;*Write value into Table and increment indexsw Table(rl),r2addi r1,r1,4;*Count reached?1w r9,Countsrli r10,r1,2sge r11,r10,r9bnez r11,FinishIsNoPrim:;*Check next valueaddi r2,r2, l ;increment R2j NextValueFinish:;*endtrap 0八.实验四:结构相关1.实验口的: 通过本实验,加深对结构相关的理解,了解结构相关对CPU性能的影响。2.实验内容: (1)用WinDLX模拟器运行程序structure_ d.s。 (2).通过模拟,找出存在结构相关的指令对以及导致结构相关的部件。 (3).记录由结构相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。 (4)论述结构相关对CPU性能的影响,讨论解决结构相关的方法。3.实验程序:程序structure d.sLHI R2, (A; 16)&OxFFFFADDUI R2, R2, A&OxFFFFLHI R3, (B;16)&OxFFFFADDUI R3, R3, B&OxFFFFADDU R4, R0, R3loop:LD F0, 0(R2)LD F4, 0(R3)ADDD F0, F0, F4ADDD F2, F0, F?;一A stall is found (an example of how to answeryour questions)ADDI R2, R2, #8ADDI R3, R3, #8SUB R5, R4, R2BNEZ R5, loopTRAP #0;Exit一this is a comment!A: .double 1, 2. 3, 4, 5, 6, 7, 8, 9, 10B: .double 1, 2, 3, 4, 5, 6, 7, 8, 9, 10九.实验五:数据相关1.实验目的: 通过本实验,加深对数据相关的理解,掌握如何使用定向技术来减少数据相关带来的暂停。2.实验内容: (1)在不采用定网技术的情况下(通过Configuj0ation菜单中的Enable Forwayding选 项设置),用WinDLX模拟器运行程序data d.s . (2)记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。 (3)在采用定向技术的情况下,用WinDLX模拟器再次运行程序data d.s (4)记录数据相关引起的暂停时钟周明数以及程序执行的总时钟周明数,计算暂停时 钟周期数占总执行周期数的百分比。 (5)根据上面记录的数据,计算采用定向技术后性能提高的倍数。3.实验程序:程序data d. sLHI R2, (A; 16)&OxFFFFADDUI R2, R2, A&OxFFFFLHI R3, (B;16)&OxFFFFADDUI R3, R3, B&OxFFFFloop:LW R1, 0 (R2)ADD R1, R1, R3SW 0(R2), RILW R5, 0 (R1)ADDI R5, R5, #10ADDI R2, R2, #4SUB R4, R3, R2BNEZ R4, loopTRAP #0A: .word 0, 4, 8, 12, 16, 20, 24, ?8, 3?, 36B: .word 9, 8, 7, 6, 5, 4, 3, 2, 1, 0十.实验六:指令调度1.实验目的: 通过本实验,加深对指令调度的理解,了解指令调度技术对CPU性能改进的好处。2.实验内容: (1)通过Configuration菜单中的“Floating point stages”选项,把除法单元数设 置为3,把加法、乘法、除法的延迟设置为3个时钟周期。 (2)用WinDLX模拟器运行调度前的程序scli-before.s。记录程序执行过程中各种相 关发生的次数以及程序执行的总时钟周期数。 (3)用 WinDLX模拟器运行调度后的程序sch-afters,记录程序执行过程中各种 相关发生的次数以及程序执行的总时钟周期数。 (4)根据记录结果,比较调度前和调度后的性能。 (5)论述指令调度对于提高CPU性能的意义。3.实验程序:程序sch-before.s;Example to illustrate instruction scheduling.data.global ONEONE: .word 1textglobal mainmam:If f1,ONE ;turn divf into a movecvti2f f7,fl ;by storing in f7 1 innop ;floating-point formatdivf fl,f8,f7 ;move Y=(f8) into fldivf f2,f3,f7 ;move Z=(f) into f2addf f3,f1,f2divf f10,f3,f7 :move f3 into X=(f10)divf f4,fl 1,f7 ;move B=(fl l) into f4divf f5,f12,f7 ;move C=(f12) into f5multf f6,f4,f5divf f13,f6,f7 ;move f6 into A=(f13)Finish:trap 0调度后的程序sch-after.sExample to illustrate instruction scheduling一reordered instructions.data.global ONEONE: .word 1.text.global mainmam:if f1,ONE ;turn divf into a movecvti2f f7 ;by storing in f7 1 innop ;floating-point formatdivf fl,f8,f7 ;move(f8) into f1divf f2,f9,f7;move Z=(f9) into f2divf f4,f11,f7 ;move B=(fl 1) into f4divf f5,f12,f7 ;move C=(f12) into f5addf f3,f1,f2multf f6,f4,f5divf f10,f3,f7 ;move f3 into X=(f10)divf f13,f6,f7 ;move f6 into A=(f13)Finish:trap 0十 .实验一匕:多处理机并行计算灾验日的:通过完成“:的井行计JI-了解井行JI一法的原理及执行过程,观察比较斗 行算法与井行算法在时间与效率方而的T.异,加深对井行计算的理解。2.实验原理:的计JI一可通过积分、夕办得到。由微积分知识知此积分可通过求极限1 im (1/n) = 4. 0/ (l. 0+ ( (1/n) * (i-0. 5) ) -) (n ) i=1, 2, 3, . . . , n+l得到取小同值则得到的:具有小同的粘度,木程序中n1勺定为200000000井行程序中协个结点计算for循环中的部串行程序核心如卜井行程序核心如卜h= 1.0/(double) n;h= 1.0/(double) n;sum= 0.0;sum= 0.0;for (i=1;i=n;i+)for (i= my_ra n k+1;i=n; i+=group size;x=h*(i-0.5);sum= sum+f(x);x=h*(i-0.5);sum= sum+f(x);pi=h*sum;pi=h*sum;将协个进程计算得到的pi相加求得二。其中f (x) =4.()/(1.()+(x)3.实验程序井行J1一法源程序:#include #include #include math. h /z/了/了/*longn,/*number of slices slice counter*了/了/doubt esumrunntngsumpl/*approximate value of pimypi,J/了/*x,h/*independent var./*base of sl此eint group_size,mv rank;main (argc,二gv)int argcchary argv口;int group_size,mv rankMPI Status statusMPI工nit (&argc, &argv)MP工Comet rank(MPI COMM WORL

温馨提示

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

评论

0/150

提交评论