计算机体系结构 DLX处理器程序设计 实验报告
计算机系统结构实验报告.doc

计算机系统结构实验报告一.流水线中的相关实验目的:1. 熟练掌握WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点;2. 加深对计算机流水线基本概念的理解;3. 进一步了解DLX基本流水线各段的功能以及基本操作;4. 加深对数据相关、结构相关的理解,了解这两类相关对CPU性能的影响;5. 了解解决数据相关的方法,掌握如何使用定向技术来减少数据相关带来的暂停。
实验平台:WinDLX模拟器实验内容和步骤:1.用WinDLX模拟器执行下列三个程序:求阶乘程序fact.s求最大公倍数程序gcm.s求素数程序prim.s分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,观察CPU中寄存器和存储器的内容。
熟练掌握WinDLX的操作和使用。
2. 用WinDLX运行程序structure_d.s,通过模拟找出存在资源相关的指令对以及导致资源相关的部件;记录由资源相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分比;论述资源相关对CPU性能的影响,讨论解决资源相关的方法。
3. 在不采用定向技术的情况下(去掉Configuration菜单中Enable Forwarding选项前的勾选符),用WinDLX运行程序data_d.s。
记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。
在采用定向技术的情况下(勾选Enable Forwarding),用WinDLX再次运行程序data_d.s。
重复上述3中的工作,并计算采用定向技术后性能提高的倍数。
1. 求阶乘程序用WinDLX模拟器执行求阶乘程序fact.s。
这个程序说明浮点指令的使用。
该程序从标准输入读入一个整数,求其阶乘,然后将结果输出。
该程序中调用了input.s中的输入子程序,这个子程序用于读入正整数。
实验结果:在载入fact.s和input.s之后,不设置任何断点运行。
计算机系统结构 实验三 DLX处理器程序设计

实验三DLX处理器程序设计1.实验目的学习使用DLX汇编语言编程,进一步分析相关现象。
2.代码清单及注释说明.dataVectorLength:.word16Vector1:.double1.923101,2.149914,3.453894,4.316657,5.243715,6.274374,7.896253,8.453792,9.457121,10 .452391,11.316422,12.965313,13.128674,14.456345,15.443476,16.976347Vector2:.double1.453444,2.253445,3.976833,4.545744,5.671645,6.145456,7.976447,8.963118,9.643178,10 .346149,11.974138,12.346127,13.967316,14.316485,15.976314,16.346273Printf1:.asciiz"The result is\n"Printf2:.asciiz"%f\t".align2PrintfHead:.word Printf1PrintfValue:.word Printf2result:.space8.textmain:addi r14,r0,PrintfHeadtrap5lw r20,VectorLengthaddi r2,r0,0loop:ld f0,Vector1(r2)ld f2,Vector2(r2)addd f4,f0,f2sd result,f4addi r14,r0,PrintfValuetrap5addi r2,r2,8subi r20,r20,1bnez r20,looptrap03.程序相关性分析结果载入ADD.S,执行。
运行结果:数据统计:有数据相关(RAW相关),控制相关总共执行周期为365,数据相关为146(40.00%),控制相关为15(4.11%)。
计算机体系结构 DLX处理器程序设计 实验报告

计算机系统结构实验实验三 DLX处理器程序设计一、实验目的学习使用DLX 汇编语言编程,进一步分析相关现象。
二、实验设备环境DLX汇编语言环境三、实验内容和要求自编一段汇编代码,完成一维向量加法运算,并输出结果。
观察程序中出现的数据/控制/结构相关。
(注:使用一维数组表示一维向量。
)四、代码清单及注释*向量加法设计*1、源代码.dataVectorLength: .word 16Vector1: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16Vector2: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16Printf1: .asciiz "Vector ="Printf2: .asciiz " %f".align 2PrintPrompt: .word Printf1PrintPar: .word Printf2Result: .space 4.textmain:addi r14,r0,PrintPrompttrap 5lw r20,VectorLengthaddi r2,r0,0Loop:ld f10,Vector1(r2)ld f12,Vector2(r2)cvti2d f0,f10cvti2d f2,f12addd f4,f2,f0Finish:;**** Finish,write result into stdoutsd Result,f4addi r14,r0,PrintPartrap 5addi r2,r2,4subi r20,r20,1bnez r20,Loop;**** Endtrap 02、注释VectorLength: .word 16Vector1: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 Vector2: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 声明向量长度以及声明向量1、2Result: .space 4存放打印数据的空间申请Loop:ld f10,Vector1(r2)ld f12,Vector2(r2)循环体中读入向量addd f4,f2,f0加法运算trap 5系统中断,输出结果3、运行结果五、程序相关性分析结果1、数据、控制、结构相关数据相关。
计算机体系结构实验报告——实验二

计算机体系结构实验报告——实验二1.实验目的:通过本实验,熟练掌握WinDLX模拟器的操作和使用,清楚WinDLX五段流水线在执行具体程序时的流水情况,熟悉DLX指令集结构及其特点。
2.实验内容:(1)用WinDLX模拟器执行程序gcm.s。
该程序从标准输入读入两个整数,求他们的greatest common measure,然后将结果写到标准输出。
该程序中调用了input.s中的输入子程序。
(2).给出两组数6、3和6、1,分别在main+0x8(add r2,r1,r0)、gcm.loop(seg r3,r1,r2)和result+0xc(trap0x0)设断点,采用单步和连续混合执行的方法完成程序,注意中间过程和寄存器的变化情况,然后单击主菜单execute/display dlx-i/0,观察结果。
3.实验程序求最大公约数程序:gcm.s;***********WINDLX Ex.1:Greatest common measure*************;------------------------------------------------------------------------;Program begins at symbol main;requires module INPUT;Read two positive integer numbers from stdin,calculate the gcm;and write the result to stdout;------------------------------------------------------------------------.data;***Prompts for inputPrompt1:.asciiz“First Number:”Prompt2:.asciiz“Second Number:“;***Data for printf-TrapPrintfFormat:.asciiz“gcM=%d\n\n”.align2PrintfPar:.word PrintfFormatPrintfValue:.space4.text.global mainmain:;***Read two positive integer numbers into R1and R2 addi r1,r0,Prompt1jal InputUnsigned;read uns.-integer into R1add r2,r1,r0;R2<-R1addi r1,r0,Prompt2jal InputUnsigned;read uns.-integer into R1Loop:;***Compare R1and R2seq r3,r1,r2;R1==R2?bnez r3,Resultsgt r3,r1,r2;R1>R2?bnez r3,r1Greaterr2Greater:;***subtract r1from r2sub r2,r2,r1j Loopr1Greater:;***subtract r2from r1sub r1,r1,r2j LoopResult:;***Write the result(R1)sw PrintfValue,r1addi r14,r0,PrintfPartrap5;***endtrap0该程序中调用了input.s中的输入子程序。
计算机体系结构实验报告

实验一流水线中的相关一.实验目的1. 熟练掌握WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点;2. 加深对计算机流水线基本概念的理解;3. 进一步了解DLX基本流水线各段的功能以及基本操作;4. 加深对数据相关、结构相关的理解,了解这两类相关对CPU性能的影响;5. 了解解决数据相关的方法,掌握如何使用定向技术来减少数据相关带来的暂停。
二.实验平台WinDLX模拟器三.预备知识1. WinDLXWinDLX模拟器是一个图形化、交互式的DLX流水线模拟器,能够演示DLX流水线是如何工作的。
该模拟器可以装载DLX汇编语言程序(后缀为“.s”的文件),然后单步、设断点或是连续执行该程序。
CPU的寄存器、流水线、I/O和存储器都可以用图形表示出来,以形象生动的方式描述DLX流水线的工作过程。
模拟器还提供了对流水线操作的统计功能,便于对流水线进行性能分析。
有关WinDLX的详细介绍,见WinDLX教程。
2. 熟悉WinDLX指令集和WinDLX源代码的编写3. 复习和掌握教材中相应的内容(1)DLX基本流水线(2)流水线的结构相关与数据相关结构相关:当指令在重叠执行过程中,硬件资源满足不了指令重叠执行的要求,发生资源冲突时,将产生“结构相关”。
数据相关:当一条指令需要用到前面指令的执行结果,而这些指令均在流水线中重叠执行时,就可能引起“数据相关”。
(3)定向技术的主要思想:在发生数据相关时,等待前面计算结果的指令并不一定真的马上就用到该计算结果,如果能够将该计算结果从其产生的地方直接送到其他指令需要它的地方,就可以避免暂停。
四.实验内容及结果1. 用 WinDLX 模拟器执行下列三个程序(任选一个):求阶乘程序 fact.s求最大公倍数程序 gcm.s求素数程序 prim.s分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,观察CPU 中寄存器和存储器的内容。
熟练掌握WinDLX 的操作和使用。
实验三 DLX处理器程序设计

计算机体系结构实验实验名称:实验三DLX处理器程序设计姓名:李江班级: 08211303学号: 08211215班内序号: 17一.实验目的。
学习使用DLX汇编语言编程,进一步分析相关现象。
二.代码清单及注释说明。
.dataX: .double 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20;向量X,长度为20Y: .double 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20;向量Y长度为20a: .asciiz "X(1,2,..,20)+Y(1,2,..,20)=(";变量a,输出字符串b: .asciiz ")";变量b,输出字符串c: .asciiz "%f ".align 2 ;变量c,输出结果的结构d: .word c ;保存c的变量结构Fdizhi: .space 8 ;保存输出结果的变量dizhi: .space 4 ;保存字结果的变量.text.global mainmain:addi r1,r0,asw dizhi,r1 ;保存a首地址到32位的变量中addi r14,r0,dizhi ;a 地址到输出寄存器r14trap 5 ;输出a 中的字符串addi r10,r0,0 ;置r10=0addi r8,r0,20 ;置r8=20,循环次数LOOP: ;设定循环标号ld f2,X(r10)ld f4,Y(r10)addd f2,f2,f4 ;分别将X、Y对应项相加结果存到F2中sd Fdizhi,f2 ;结果送到双字变量中addi r14,r0,dtrap 5 ;输出结果addi r10,r10,8 ;r10加8,取X、Y下一项subi r8,r8,1 ;循环次数减一bnez r8,LOOP ;若r8!=0,则到LOOPaddi r1,r0,bsw dizhi,r1addi r14,r0,dizhitrap 5 ;输出符号)trap 0 ;程序结束三.程序相关性分析。
Win-DLX 计算机系统结构课程实验教程

Win-DLX 计算机系统结构课程实验教程目录实验一熟悉WinDLX的使用 (2)实验二结构相关 (4)实验三数据相关................................................................... .6 实验四指令调度 (8)附录实验报告 (10)实验一汇编源程序的上机调试操作基础训练一.实验目的:通过本实验,熟练掌握WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点。
二.实验内容:(一)WinDLX的安装:1. WinDLX是一个基于Windows的模拟器, 能够演示DLX流水线是如何工作的。
WinDLX 包含windlx.exe和windlx.hlp文件。
同时,还需要一些扩展名为.s的汇编代码文件。
按以下步骤在Windows下安装WinDLX:⑴ WinDLX创建目录,例如D:\WINDLX⑵解压WinDLX软件包或拷贝所有的WinDLX文件(至少包含windlx.exe,windlx.hlp)到这个WinDLX 目录。
2. 启动和配置WinDLX:双击WinDLX图标,将出现一个带有六个图标的主窗口,双击这些图标会弹出子窗口.为了初始化模拟器, 点击File菜单中的Reset all菜单项,弹出一个“ResetDLX”对话框。
然后点击窗口中的“确认”按钮即可。
(二)程序介绍1.求阶乘程序fact.s这个程序说明浮点指令的使用。
该程序从标准输入读入一个整数,求其阶乘,然后将结果输出。
该程序中调用了input.s中的输入子程序,这个子程序用于读入正整数。
2.程序gcm.sgcm.s程序从标准输入读入两个整数,求他们的greatest common measure,然后将结果写到标准输出。
3. 求素数程序prim.sprim.s程序计算若干个整数的素数。
三.实验要求:实验前要做好充分准备,包括WinDLX安装与调试步骤、程序运行方法,以及对模拟结果的分析等。
体系结构 实验报告 哈工程

计算机科学与技术学院《计算机体系结构》课程实验学号:班级:专业:计算机科学与技术学生姓名:2017年5月7日实验报告1、双击WinDLX图标运行WinDLX。
装入测试程序之前,先初始化WinDLX 模拟器:点击File菜单中的Reset all菜单项,弹出一个“Reset DLX”对话框。
然后点击窗口中的“确认”按钮即可。
2、选择File / Load Code or Data,按如下步骤操作,可将distance.s和input.s 这两个程序装入主存:点击distance.s点击select按钮点击input.s点击select按钮点击load按钮3、按F7键程序顺序执行观察6个子窗口的情况。
七、实验数据及结果分析:1、先装入distance.s再转入input.s时,因为程序顺序执行,地址顺序符合程序执行顺序,程序能够正确执行;顺序相反时,因为input.s的地址高,而程序顺序执行到input.s时将没有正确的输入窗口,程序执行到输出结果时,也不会出现结果2、程序中出现三个相关图7-1如图7-1因为下面两条指令,第二条指令要读r4而执行到此操作时第一条指令仍对r4进行操作,发生了数据相关add r4,r0,2div r2,r2,r4图7-2如图7-2 程序中出现了结构相关,硬件资源满足不了指令执行的要求,发生资源冲突时,将产生结构相关。
次程序代码段因加法器发生结构相关。
add r3,r0,r1add r6,r0,0图7-3如图7-3程序中出现控制相关,当程序执行下面指令时,第二条指令出现跳转指令时,第一条指令还没有执行完,所以出现控制相关addi r1,r0,Promptjal InputUnsigned图7-43、.data ;定义数据段,默认情况下数据段$DATA 会被加载到内存0x1000地址处;***prompts for input ;提示输入语句,输入3个初始数据Prompt1: .asciiz "time:" ;时间Prompt2: .asciiz "accelerate speed:";加速度Prompt3: .asciiz "innital speed:" ;初始速度;Data for Printf-TrapPrintfFormat: .asciiz "distance=%d\n" ;输出格式,表示求出的路程按什么格式输出;PrintfFormat1: .asciiz "the result is :%d ,no convention!" .align 2 ;表示下面采用字对齐PrintPar: .word PrintfFormatPrintValue: .space 4.text;第一代码段,默认情况下代码段$CODE会加载到内存0x100地址处.global main ;定义一个全局符号main,即该代码段的首地址main:;***read two positive integer numbers into R1 and R2add r1,r0,Prompt1 ;将输入的数存入寄存器r1jal InputUnsigned ;跳转到InputUnsigned子程序处读取输入的参数,同时将一条指令的地址存与r31中,即r31<-pc+4add r3,r0,r1 ;由InputUnsigned 返回的参数赋r3寄存器,此时r3存储的是时间add r6,r0,0 ;将0赋值给r6sgt r7,r6,r3 ;比较r3 和r6大小bnez r7,error ;r7为1则结束程序add r1,r0,Prompt2 ;将输入的数存入寄存器r1jal InputUnsigned ;同上,跳转到InputUnsigned子程序add r2,r0,r1 ;由InputUnsigned 返回的参数赋r2寄存器,此时r2存储的是加速度add r1,r0,Prompt3 ;将输入的数存入寄存器r1jal InputUnsigned ;同上,跳转到InputUnsigned子程序;r3: time r2:add speed r1:innital speedmult r1,r1,r3 ;时间乘以速度,并将之存入r1中。
北邮大三计算机体系结构实验三DLX处理器程序设计

北邮大三计算机体系结构实验三DLX处理器程序设计DLX处理器是一种精简指令集计算机体系结构,它包含了32个通用寄存器,支持32位指令和数据,以及高度定制化的流水线架构,能够提供高效的指令执行能力。
本文将针对DLX处理器进行程序设计,主要实现一个简单的计算程序。
首先,我们将使用汇编语言来设计DLX处理器的程序。
DLX处理器的指令集采用32位指令,并且按照固定格式进行编码。
在本实验中,我们将实现一个简单的加法程序。
首先,我们需要定义一些常量和变量。
在DLX处理器中,可以使用32个通用寄存器来存储数据和中间结果。
我们可以使用其中的3个寄存器来存储输入数据和输出结果。
```assembly.datainput1: .word 5input2: .word 7result: .word 0```接下来,我们需要编写程序的主体部分。
程序的主体部分包含了一系列的指令,用来执行具体的计算任务。
在本实验中,我们将使用ADD指令来执行加法操作,并将结果存储到result寄存器中。
```assembly.textmain:L.D F0, input1L.D F2, input2ADD.DF4,F0,F2S.D result, F4```在这段代码中,我们首先使用L.D指令将input1中的值加载到浮点寄存器F0中,然后使用L.D指令将input2中的值加载到浮点寄存器F2中。
接着,我们使用ADD.D指令将F0和F2中的值相加,并将结果存储到F4中。
最后,我们使用S.D指令将F4中的值存储到result寄存器中。
最后,我们需要在程序中添加一些必要的指令,用来启动和结束程序的执行。
在DLX处理器中,程序的执行是按照顺序进行的,因此我们只需要添加一些简单的指令即可。
```assemblystart:j mainnop```总结起来,本文针对北邮大三计算机体系结构实验三DLX处理器程序设计,我们使用汇编语言设计了一个简单的加法程序。
计算机体系结构 代码优化 实验报告

计算机系统结构实验实验四代码优化一、实验目的学习简单编译优化方法,观察采用编译优化方法所带来的性能的提高。
二、实验设备环境DLX汇编语言环境三、实验原理采用静态调度方法重排指令序列,减少相关,优化程序。
四、实验内容和要求求阶乘、向量加法、对8个浮点数求和,以上三个程序,任选(向量加法、浮点数求和)进行优化。
给出性能改进的量化值,同时给出采取优化手段的理论依据。
五、代码清单及结果分析*向量加法设计*1、源代码.dataVectorLength: .word 16Vector1: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16Vector2: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16Printf1: .asciiz "Vector ="Printf2: .asciiz " %f".align 2PrintPrompt: .word Printf1PrintPar: .word Printf2Result: .space 4.textmain:addi r14,r0,PrintPrompttrap 5lw r20,VectorLengthaddi r2,r0,0Loop:ld f10,Vector1(r2)ld f12,Vector2(r2)cvti2d f0,f10cvti2d f2,f12addd f4,f2,f0Finish:;**** Finish,write result into stdoutsd Result,f4addi r14,r0,PrintPartrap 5addi r2,r2,4subi r20,r20,1bnez r20,Loop;**** Endtrap 02、注释VectorLength: .word 16Vector1: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 Vector2: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 声明向量长度以及声明向量1、2Result: .space 4存放打印数据的空间申请Loop:ld f10,Vector1(r2)ld f12,Vector2(r2)循环体中读入向量addd f4,f2,f0加法运算trap 5系统中断,输出结果3、运行结果4、代码优化及结果 .dataVectorLength: .word 16Vector1: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 Vector2: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 Printf1: .asciiz "Vector =" Printf2: .asciiz " %f" .align 2PrintPrompt: .word Printf1 PrintPar: .word Printf2 Result: .space 4.textmain:addi r14,r0,PrintPrompttrap 5lw r20,VectorLength 这些条件判断指令存在写读相关,但不能静态优化。
计算机系统结构WinDlx实验报告

计算机组成与系统结构课程设计题目:流水线指令设计及页面置换算法在WinDLX软件中的应用学校:专业:学号:姓名:指导教师:***2011 年 6 月22 号目录1、实验一.....................21.1实验目的.......................21.2实验平台.......................21.3 预备知识.......................21.4实验内容和步骤....................21.5实验程序.......................41.6 实验报告要求.....................62、实验二.........................92.1 实验目的.......................92.2 实验平台.......................10 2.3 预备知识.......................10 2.4 实验内容和步骤....................10 2.5 实验程序.......................10 2.5.1 源程序.....................11 2.5.2 程序分析.....................11 2.5.3 结果截图.....................112.6 实验报告要求.....................123、实验三.........................13 3.1 实验目的.......................13 3.2 实验平台.......................13 3.3 预备知识.......................13 3.4 实验内容和步骤....................13 3.5 实验程序.......................13 3.5.1 源程序......................14 3.5.2 没有采用定向技术分析...............14 3.5.3 采用定向技术分析.................14 3.5.4 结果截图.....................153.6 实验报告要求.....................154、实验四.........................16 4.1 实验目的.......................16 4.2 实验平台......................16 4.3 预备知识.......................16 4.3.1 调页策略.....................16 4.3.2 页面置换算法...................17 4.4 实验内容和步骤....................18 4.5 实验程序.......................19 4.5.1 源程序......................19 4.5.2 程序流程图....................22 4.5.3 结果截图.....................234.6 实验报告要求.....................235、实验总结........................236、参考资料.......................23实验一 WinDLX模拟器与DLX指令的使用1.1实验目的1.1.1. 熟练掌握WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点;1.1.2. 加深对计算机流水线基本概念的理解;1.1.3. 了解DLX基本流水线各段的功能以及基本操作;1.2实验平台WinDLX模拟器1.3预备知识1.3.1. WinDLXWinDLX模拟器是一个图形化、交互式的DLX流水线模拟器,能够演示DLX流水线是如何工作的。
计算机组成与结构实验指导书(DLX-3)

计算机系统结构实验指导书实验三 WIN DLX虚拟处理器流水线相关问题及其处理方法实验目的1.进一步熟悉DLX指令集及其编程;2.熟悉WINDLX虚拟处理器的流水线结构;3.理解流水线中的结构、数据、控制相关;4.了解流水线相关对CPU性能的影响;实验平台WinDLX处理器实验内容和步骤1.阅读“WINDLX处理器流水线结构”、“在线帮助文档”、“WINDLX指令集”等文档理解和熟悉DLX流水线基本结构与特点,进一步掌握DLX汇编程序编写及WINDLX处理器的操作和使用。
2.利用WINDLX处理器执行求最大公约数示例程序gcm.s,该程序从标准输入读入两个整数,求它们的最大公约数,并将结果写到标准输出。
该程序调用了input.s输入子程序。
1)认真记录实验数据及主要寄存器、存储器中内容;2)调整乘法器件个数,观察流水线窗口的情况,并根据统计窗口数据记录程序运行所需时钟周期数,延时时钟周期数占总执行周期数的百分比,并加以说明。
3.用WinDLX处理器运行程序structure.s:1)通过模拟,找出存在结构相关的指令对以及导致结构相关的部件;2)记录由结构相关引起的延时时钟周期数,计算延时时钟周期数占总执行周期数的百分比;3)通过Configuration菜单中的“Floating point stages”选项,把除法单元数设置为3,把加法﹑乘法﹑除法的延迟设置为3个时钟周期,重新用WinDLX处理器运行程序structure.s,记录程序执行过程中各种相关发生的次数以及程序执行的总时钟周期数;4)与步骤3结果比较,计算步骤4之后的流水线吞吐率、加速比和效率;5)记录实验数据或显示结果,并讨论结构相关对CPU性能的影响以及解决结构相关的方法。
4.编写一段能实现向量运算D= A·( B+ C)的DLX汇编程序。
5.在WINDLX处理器上装入并采用默认设置的未旁路的流水线运行该程序:1)记录实验数据及主要寄存器、存储器中内容;2)观察并记录运行时空图和统计窗口主要数据;3)计算总延迟占所有周期数百分比,并分析各类冒险所占比例。
实验作业3:DLX流水线实验报告

实验作业3:DLX流水线实验报告计算机体系结构姓名:学号:班级:班级号:《计算机系统结构》第三次实验作业一、实验目的本次实验的主要目的是熟悉dlx流水线以及结构相关、数据相关、控制相关、前送(forwarding)等概念和技术。
二、实验内容1.了解各种指令在dlx流水线中的运行过程;2.流水线相关实验;3.转发技术对对流水线性能的影响;4.调查更改部件数量和延迟次数对性能的影响。
三、实验步骤及结果分析1.了解Dlx管线中各种指令的操作流程如上次实验那样,读入并运行fact.s和input.s。
请从程序中选择有代表性的5条不同类型的指令,并描述每条指令在5段流水线中每步完成的工作。
(1)(2)(3)(4)(5)2.流水线相关实验在管道窗口中观察,分别找出结构相关性、数据相关性和控制相关性,并描述风险情况以及如何在windlx中解决这些风险。
(1)结构相关在循环期间执行subdf0、F0、F4和jfact时,硬件资源无法满足jfact,因为Alu被占用,循环进入ex阶段并承担结构风险。
Windlx通过阻止EX1循环来解决这个问题。
(2)数据相关性bnezr5,input.finish需要使用seqi的计算结果r5,所以产生数据相关的冒险。
winddlx通过阻塞解决问题。
(3)控制相关语句lwr2、saver2(R0)被中止,这是由控制相关风险引起的。
因为前面的语句jinput Loop是一个跳转语句,并且在解码后可以知道指定给ex stage的语句的函数,所以执行该指令的LW语句被取消。
3.前送(forwarding)技术对流水线性能的影响(1)打开转发:没有开启forwarding:。
系统结构实验报告

计算机系统结构实验报告实验一流水线的相关实验目的:1. 熟练掌握WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点;2. 加深对计算机流水线基本概念的理解;3. 进一步了解DLX基本流水线各段的功能以及基本操作;4. 加深对数据相关、结构相关的理解,了解这两类相关对CPU性能的影响;5. 了解解决数据相关的方法,掌握如何使用定向技术来减少数据相关带来的暂停。
实验平台:WinDLX模拟器实验内容和步骤:一.用WinDLX模拟器执行下列三个程序:求阶乘程序fact.s求最大公倍数程序gcm.s求素数程序prim.s分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,观察CPU中寄存器和存储器的内容。
熟练掌握WinDLX的操作和使用。
1、求阶乘程序fact.s(1)分别以步进、连续、设置断点的方式运行程序图1.1.1 求阶乘程序fact.s运行统计数据步进方式运行图1.1.2 求阶乘程序fact.s运行统计数据连续方式运行(2)数据统计图1.1.4 求阶乘程序fact.s运行统计数据图1.1.5 求阶乘程序fact.s流水线执行情况图1.1.6 求阶乘程序fact.s寄存器使用情况2、求最大公倍数程序gcm.s图1.2.1 求最大公倍数程序gcm.s运行统计数据图1.2.2 求最大公倍数程序gcm.s流水线执行情况图1.2.3 求最大公倍数程序gcm.s寄存器使用情况3、求素数程序prim.s图1.3.1 求素数程序prim.s运行统计数据图1.3.2 求素数程序prim.s流水线执行情况图1.3.3 求素数程序prim.s寄存器使用情况二、用WinDLX运行程序structure_d.s,通过模拟找出存在资源相关的指令对以及导致资源相关的部件;记录由资源相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分比;论述资源相关对CPU性能的影响,讨论解决资源相关的方法。
计算机系统结构实验一实验报告

宁夏师范学院数学与计算机科学学院《计算机系统结构》实验报告实验序号:实验一实验项目名称:WinDLX模拟器与DLX指令的使用学号姓名专业、班级实验地点文科楼224指导教师时间2015.5.19一、实验目的及要求1.熟练掌握WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点;2.加深对计算机流水线基本概念的理解;3.了解DLX基本流水线各段的功能以及基本操作;二、实验平台及要求WinDLX模拟器1.WinDLXWinDLX模拟器是一个图形化、交互式的DLX流水线模拟器,能够演示DLX流水线是如何工作的。
该模拟器可以装载DLX汇编语言程序(后缀为“.s”的文件),然后单步、设断点或是连续执行该程序。
CPU的寄存器、流水线、I/O和存储器都可以用图形表示出来,以形象生动的方式描述DLX流水线的工作过程。
模拟器还提供了对流水线操作的统计功能,便于对流水线进行性能分析。
有关WinDLX的详细介绍,见附录(WinDLX教程)。
2.熟悉WinDLX指令集和WinDLX源代码的编写三、实验内容与步骤用WinDLX模拟器执行求最大公倍数程序gcm.s分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,观察CPU中寄存器和存储器的内容。
熟练掌握WinDLX的操作和使用。
注意:gcm.s中调用了input.s中的输入子程序。
load程序时,要两个程序一起装入(都select后再点击load)。
如:给出两组数6、3和6、1,分别在main+0x8(add r2,r1,r0)、gcm.loop(seg r3,r1,r2)和result+0xc(trap0x0)设置断点,采用单步和连续混合执行的方法完成程序,注意中间过程和寄存器的变化情况,然后单击主菜单execute/display dlx-i/o,观察结果。
四、实验结果与数据处理321实验程序实验源程序见文件gcm.s和input.s结果截图如下:五、分析与讨论通过本实验我掌握了WinDLX模拟器的基本操作和使用,了解了DLX 指令集结构及其特点,更加深入的了解计算机体系流水线的工作过程。
计算机系统结构实验报告

计算机系统结构实验报告一.流水线中的相关实验目的:1. 熟练掌握WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点;2. 加深对计算机流水线基本概念的理解;3. 进一步了解DLX基本流水线各段的功能以及基本操作;4. 加深对数据相关、结构相关的理解,了解这两类相关对CPU性能的影响;5. 了解解决数据相关的方法,掌握如何使用定向技术来减少数据相关带来的暂停。
实验平台:WinDLX模拟器实验内容和步骤:1.用WinDLX模拟器执行下列三个程序:求阶乘程序fact.s求最大公倍数程序gcm.s求素数程序prim.s分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,观察CPU中寄存器和存储器的内容。
熟练掌握WinDLX的操作和使用。
2. 用WinDLX运行程序structure_d.s,通过模拟找出存在资源相关的指令对以及导致资源相关的部件;记录由资源相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分比;论述资源相关对CPU性能的影响,讨论解决资源相关的方法。
3. 在不采用定向技术的情况下(去掉Configuration菜单中Enable Forwarding选项前的勾选符),用WinDLX运行程序data_d.s。
记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。
在采用定向技术的情况下(勾选Enable Forwarding),用WinDLX再次运行程序data_d.s。
重复上述3中的工作,并计算采用定向技术后性能提高的倍数。
1. 求阶乘程序用WinDLX模拟器执行求阶乘程序fact.s。
这个程序说明浮点指令的使用。
该程序从标准输入读入一个整数,求其阶乘,然后将结果输出。
该程序中调用了input.s中的输入子程序,这个子程序用于读入正整数。
实验结果:在载入fact.s和input.s之后,不设置任何断点运行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机系统结构实验实验三 DLX处理器程序设计
一、实验目的
学习使用DLX 汇编语言编程,进一步分析相关现象。
二、实验设备环境
DLX汇编语言环境
三、实验内容和要求
自编一段汇编代码,完成一维向量加法运算,并输出结果。
观察程序中出现的数据/控制/结构相关。
(注:使用一维数组表示一维向量。
)
四、代码清单及注释
*向量加法设计*
1、源代码
.data
VectorLength: .word 16
Vector1: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
Vector2: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
Printf1: .asciiz "Vector ="
Printf2: .asciiz " %f"
.align 2
PrintPrompt: .word Printf1
PrintPar: .word Printf2
Result: .space 4
.text
main:
addi r14,r0,PrintPrompt
trap 5
lw r20,VectorLength
addi r2,r0,0
Loop:
ld f10,Vector1(r2)
ld f12,Vector2(r2)
cvti2d f0,f10
cvti2d f2,f12
addd f4,f2,f0
Finish:;**** Finish,write result into stdout
sd Result,f4
addi r14,r0,PrintPar
trap 5
addi r2,r2,4
subi r20,r20,1
bnez r20,Loop
;**** End
trap 0
2、注释
VectorLength: .word 16
Vector1: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 Vector2: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 声明向量长度以及声明向量1、2
Result: .space 4
存放打印数据的空间申请
Loop:
ld f10,Vector1(r2)
ld f12,Vector2(r2)
循环体中读入向量
addd f4,f2,f0
加法运算
trap 5
系统中断,输出结果
3、运行结果
五、程序相关性分析结果
1、数据、控制、结构相关
数据相关。
所以当对当前指令的操作数寄存器进行操作(EX)的时候,前几条指令的运算结果还未写回(WB)结果寄存器,由此产生数据相关。
结构相关。
由于程序只简单的做了一次加法,所以没有结构相关产生。
控制相关。
于系统按照预测成功来执行指令,所以执行bnez后马上将其下一条指令trap 读进来。
2、浮点运算部件带来的影响
将浮点加法器有1个增加为2个后,程序执行的性能未得到提升。
由于该程序为产生浮点加法器的结构相关,所以增加浮点加法器的数量对程序执行的性能提升没有帮助。
3、forward部件的影响
关闭farward后,运行时间由283增加到381. 所以forward技术为该程序带来的加速比为:381/282=1.35。
4、转移成功和不成功
在控制相关中,转移成功和不成功的差别。
由于系统按照预测成功来执行指令,所以执行
bnez后马上将其下一条指令trap读进来判断出是转移不成功时,系统对trap指令进行的操作被全部作废,转而去执行跳转到的指令id。
*双精度浮点加法求和设计*
1、代码及注释
.data
;初始化两个用于相加的一维向量(双精度浮点数),向量长度为20
a: .double 1.9, 2.1, 3.7, 4.6, 5.5, 6.4, 7.3, 8.2, 9.1, 10.1,
11.2,12.3,13.4,14.5,15.6,16.7,17.8,18.9,19.0,20.2
b: .double 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.8, 10.9,
11.8,12.7,13.6,14.5,15.4,16.3,17.2,18.1,19.9,20.8
PrintfFormat: .asciiz "The result is \n\n%f\t%f\t%f\t%f\t%f\t%f\t %f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t\n\n"
.align 2
PrintfPar: .word PrintfFormat
r: .space 200
;r为保存相加结果的向量空间
.text
.global main
main:
addi r1,r0,0 ;r1计数相加的次数
addui r4,r0,8 ;r4为常数8
loop: ;循环计算向量相加结果
subi r2,r1,20 ;r1=20时,跳转到finish
beqz r2,finish
multu r3,r1,r4;r3为当前分量相对于向量基址的偏移(每个分量占8B)
ld f0,a(r3) ;取a中第r1个分量
ld f2,b(r3) ;取b中第r1个分量
addd f4,f0,f2 ;相加结果放在f4中
sd r(r3),f4 ;将相加结果放入结果向量r中
addi r1,r1,1 ;下一分量
j loop
finish: ;输出向量相加的结果
addi r14,r0,PrintfPar
trap 5
2、程序中出现的数据/控制/结构相关控制相关:
1) beqz r2,finish ;条件跳转
2) j loop ;无条件跳转
3) trap 5 ;调用5号中断结构相关:无
数据相关:均为RW相关
1)addi r1,r0,0
subi r2,r1,20
2)subi r2,r1,20
beqz r2,finish
3)multu r3,r1,r4
ld f0,a(r3)
4)ld f2,b(r3)
addd f4,f0,f2
5)addd f4,f0,f2
sd r(r3),f4
3、增加浮点运算部件对性能的影响。
总结:改变几次浮点运算部件个数后再执行,发现统计结果均相同,增加浮点运算
部件对该函数没有任何性能方面的改进,这主要是因为函数中没有连续的浮点加/乘/除指令。
4、增加forward 部件对性能的影响。
forward部件对具体指令执行的影响:
5、转移指令在转移成功和转移不成功时候的流水线开销。
1)转移不成功时:顺序预取的下条指令可以直接在流水线中执行,保证流水线不断
流;
2)转移成功时:顺序预取的下条指令作废,需要转到转移地址处重新取指,流水线
发生了断流现象
3)条件转移指令beqz r2,finish的taken和not taken的统计结果如下:
可见,该转移指令not taken的情况占绝大多数(95.42%),实际上,只有一次是taken 的,所以预测顺序取对流水线的性能是有利的。
六、实验心得
通过此次实验我加深了流水线相关的知识,包括:数据/控制/结构相关,功能部件数对流水线的影响,分支指令预测技术,forwarding技术,静态指令调度等等,收获匪浅。
向量运算的算法:按照分量顺序进行运算。
本程序没有做输入模块,而是直接在代码中初始化了两个向量,如果要改源向量的话,直接在代码中更改即可。
经过解决编程中遇到的问题,我对双精度浮点数的运算也有了初步的掌握:1)要注意所有涉及到double型数据的运算指令,指令代码都要加上d来说明,同样如果是单精度浮点数,要用f来标明;2)DLX中是通过相邻两个浮点寄存器奇偶对FiFi+1(i=0,2,4 (30)
来保存双精度浮点数的,这种组合而成的64 位双精度浮点寄存器在DLX 中分别被命名为F0,F2…F28,F30,一定要注意只能使用偶数的浮点寄存器。
对浮点数的操作,之前汇编程序比较少涉及到浮点数甚至双精度浮点数操作,通过此次实验,我了解了DLX中浮点数的相关设置,包括浮点寄存器和浮点状态寄存器等。
WINDLX要加载的.S文件的路径尽量为英文,刚开始我在做实验时就是由于路径中有中文导致不能导入加载。