北邮高级计算机系统结构实验二三四五

合集下载

北京邮电大学计算机学院 - 操作系统实验报告(含源代码)

北京邮电大学计算机学院 - 操作系统实验报告(含源代码)
小组成员:许伟林 08211306 (6 班) 刘惠庭 08211338 (7 班)
1/58
10 年 12 月 19 日
内容目录
实验 1.3 Shell 编程...........................................................4 1、实验目的...............................................................4 2、实验内容...............................................................4 3、实验原理...............................................................4 4、实验步骤...............................................................4 5、实验结果:.............................................................4 6、人员任务分配...........................................................5
实验项目:
1. 实验 1.3 Shell 编程 2. 实验 2.3 内核模块 3. 实验 2.4 系统调用 4. 实验 3.3 Shell 编程实验(进程管理实验) 5. 实验 4.1 观察实验(存储管理实验) 6. 实验 5.1 观察实验(进程通信) 7. 实验 6.3 Io 系统编程实验 8. 实验 6.4 设备驱动程序 9. 实验 7.1 代码分析(文件系统管理实验)
实验 3.3 Shell 编程实验(进程管理实验)......................................18 1、实验目的..............................................................18 2、实验内容..............................................................18 3、实验原理..............................................................18 4、实验步骤..............................................................18 5、实验结果及分析........................................................19 6、人员任务分配..........................................................19 2、实验内容 2............................................................20 3、实验原理..............................................................20 4、实验步骤..............................................................20 5、实验结果及分析........................................................23 6、人员分配..............................................................24

北邮计算机系统结构实验报告-实验一到五-WINDLX模拟器

北邮计算机系统结构实验报告-实验一到五-WINDLX模拟器

北京邮电大学实验报告课程名称计算机系统结构计算机学院03班王陈(11)目录实验一WINDLX模拟器安装及使用......................................... 错误!未定义书签。

·实验准备................................................................................ 错误!未定义书签。

·实验环境................................................................................ 错误!未定义书签。

·实验步骤................................................................................ 错误!未定义书签。

·实验内容及要求.................................................................... 错误!未定义书签。

·实验过程............................................................................. 错误!未定义书签。

·实验总结............................................................................. 错误!未定义书签。

实验二指令流水线相关性分析 ............................................... 错误!未定义书签。

·实验目的............................................................................. 错误!未定义书签。

北京邮电大学 计算机学院 数据结构第五次实验报告

北京邮电大学  计算机学院   数据结构第五次实验报告

实验报告(5)姓名:学号:班级:日期:一、实验目的:掌握二叉树结构的有关运算,熟悉二叉树的存储结构和基本应用。

二、实验原理:完成树结构的运算。

具体:写一个对一棵二叉树中所有结点的左、右子树相互交换的算法程序。

三、实验内容及要求:编写一个算法程序实现:1、建立一棵6个结点的二叉树,结点的数据值是正整数,并按中序输出之;2、完成对以上二叉树中所有结点的左、右子树相互交换,并按中序输出交换以后的结果。

3、统计二叉树叶子结点的个数,并输出结果。

要求:请同学把步骤、调试好的程序及存在的问题写在下面。

步骤:首先建立一棵二叉树,同时创建6个结点。

其次编写一个函数,采用递归中序输出结点的数据,其次交换二叉树的左右子树,也是采用递归,并中序输出交换后的结果。

最后,遍历整个二叉树,统计并输出叶子结点的个数。

代码:#include <stdlib.h>#include <stdio.h>int i=0;typedef int DataType;typedef struct Node{DataType data;struct Node *leftchild;struct Node *rightchild;}BiTreeNode; //结点的结构void Initiate(BiTreeNode **root);//初始化创建二叉树的根结点BiTreeNode* InsertLeftNode(BiTreeNode* curr,DataType x);//创建根结点的左子树BiTreeNode* InsertRightNode(BiTreeNode* curr,DataType x);//创建根结点的右子树void Visit(DataType x);//访问结点void InOrder(BiTreeNode* root);//树的中序遍历void Destory(BiTreeNode** root);//释放树所占的空间void Exchange(BiTreeNode* root);//对二叉树所有结点的左、右子树进行交换int Travel(BiTreeNode* root);//遍历树,计算叶子结点的个数int main(){BiTreeNode *root,*p1,*p2,*p3;int n;Initiate(&root);//初始化创建二叉树的根结点root->data=5;p1=InsertLeftNode(root,3);p2=InsertLeftNode(p1,2);p3=InsertRightNode(p1,6);p1=InsertRightNode(root,7);p2=InsertRightNode(p1,1);printf("中序输出的序列为:");InOrder(root);//树的中序遍历printf("\n");Exchange(root);//对二叉树所有结点的左、右子树进行交换printf("交换左右子树后的中序输出的序列为:");InOrder(root);printf("\n");n=Travel(root);//遍历树,计算叶子结点的个数printf("二叉树中叶子结点的个数有:%d个\n",n);Destory(&root);system("pause");return 0;}void Initiate(BiTreeNode **root)//初始化创建二叉树的根结点{*root = (BiTreeNode *)malloc(sizeof(BiTreeNode));(*root)->leftchild = NULL;(*root)->rightchild = NULL;}BiTreeNode* InsertLeftNode(BiTreeNode* curr,DataType x)//创建根结点的左子树{BiTreeNode *s,*t;if(curr==NULL) return NULL;t=curr->leftchild;s=(BiTreeNode *)malloc(sizeof(BiTreeNode));s->data=x;s->leftchild=t;s->rightchild=NULL;curr->leftchild=s;return s;}BiTreeNode* InsertRightNode(BiTreeNode* curr,DataType x)//创建根结点的右子树{BiTreeNode *s,*t;if(curr==NULL) return NULL;t=curr->rightchild;s=(BiTreeNode *)malloc(sizeof(BiTreeNode));s->data=x;s->rightchild=t;s->leftchild=NULL;curr->rightchild=s;return s;}void Visit(DataType x)//访问结点{printf(" %d",x);}void InOrder(BiTreeNode* root)//树的中序遍历{if(root==NULL) return;InOrder(root->leftchild);Visit(root->data);InOrder(root->rightchild);}void Destory(BiTreeNode** root)//释放树所占的空间{if((*root)!=NULL&&(*root)->leftchild!=NULL){Destory(&(*root)->leftchild);}if((*root)!=NULL&&(*root)->rightchild!=NULL){Destory(&(*root)->rightchild);}free(*root);}void Exchange(BiTreeNode* root)//对二叉树所有结点的左、右子树进行交换{BiTreeNode *s,*t;if(root==NULL)return;s=root->leftchild;t=root->rightchild;root->leftchild=t;root->rightchild=s;Exchange(root->leftchild);Exchange(root->rightchild);}int Travel(BiTreeNode* root)//遍历树,计算叶子结点的个数{if(root==NULL)return 0;if(root->leftchild==NULL&&root->rightchild==NULL)i++;Travel(root->leftchild);Travel(root->rightchild);return i;}存在的问题:二叉树的建立遍历与查找都需要使用递归,迭代算法难度较大,因而本程序的时间复杂度大,其次,6个结点的值在创建二叉树时便已经固定下来,结点的值不能由用户自行输入,这是本程序的一个缺陷。

北邮数据结构实验报告实验四

北邮数据结构实验报告实验四

2009级数据结构实验报告实验名称:实验四——排序学生姓名:班级:班内序号:学号:日期:2010/12/171.实验要求实验目的:通过选择下面两个题目之一,学习、实现、对比各种排序算法,掌握各种排序算法的优劣,以及各种算法使用的情况。

实验内容:使用简单数组实现下面各种排序算法,并进行比较。

排序算法:1、插入排序2、希尔排序3、冒泡排序4、快速排序5、简单选择排序6、堆排序7、归并排序8、基数排序(选作)9、其他要求:1、测试数据分成三类:正序、逆序、随机数据2、对于这三类数据,比较上述排序算法中关键字的比较次数和移动次数(其中关键字交换计为3次移动)。

3、对于这三类数据,比较上述排序算法中不同算法的执行时间,精确到微秒(选作)4、对2和3的结果进行分析,验证上述各种算法的时间复杂度编写测试main()函数测试线性表的正确性。

2. 程序分析2.1 存储结构使用最简单的一维数组存储待排序的数据。

共使用两个数组,一个用来存储原始数据,一个用来存储待排序数据。

每次排序完毕,用原始数据更新一次待排序数据,保证每一次都对同一组数据排序。

(图略)2.2 关键算法分析1.直接插入的改进:在一般的直接插入中,关键码每移动一次就需要比较一次。

在移动的方面,优化是比较困难的,因为对静态线性表的插入必然要带来大量的移动。

但是,我们可以在比较上进行一些优化。

在查找技术一张曾学过的“折半查找法”,在这里就可以照葫芦画瓢地运用。

一趟排序的伪代码如下:1.如果该元素大于处于其左侧相邻的元素则跳过该元素;2.low=0,high=i;3.循环直至low==high3.1 mid=(low+high)/2;3.2如果当前元素大于中值high=mid;3.3否则low=mid+1;4.当前元素赋值给临时变量;5.将有序区中处于low位置及其右侧的元素右移;6.临时变量置于low位置简单说一下这里的折半查找与一般查找算法的区别。

这里的查找,尤其是对无重复数据和大量数据的处理中,更多的时候是找不到完全相等的项的。

北邮计算机组成实验报告

北邮计算机组成实验报告

一、实验目的1. 了解计算机组成原理的基本概念和组成结构。

2. 掌握计算机各部件的功能和相互关系。

3. 通过实验,加深对计算机组成原理的理解和认识。

4. 培养动手能力和实际操作技能。

二、实验内容本次实验主要分为以下几个部分:1. 计算机组成原理实验台介绍2. 数据通路和控制器实验3. 存储器实验4. 输入/输出实验5. 系统总线实验三、实验步骤1. 计算机组成原理实验台介绍实验开始前,先对实验台进行简要介绍,包括实验台的功能、操作方法、注意事项等。

2. 数据通路和控制器实验(1)观察数据通路和控制器结构,了解其组成和功能。

(2)通过实验,验证数据通路和控制器的基本工作原理。

(3)掌握数据通路和控制器的设计方法。

3. 存储器实验(1)观察存储器结构,了解其组成和功能。

(2)通过实验,验证存储器的基本工作原理。

(3)掌握存储器的设计方法。

4. 输入/输出实验(1)观察输入/输出设备,了解其组成和功能。

(2)通过实验,验证输入/输出设备的基本工作原理。

(3)掌握输入/输出设备的设计方法。

5. 系统总线实验(1)观察系统总线结构,了解其组成和功能。

(2)通过实验,验证系统总线的基本工作原理。

(3)掌握系统总线的设计方法。

四、实验结果与分析1. 数据通路和控制器实验通过实验,我们成功验证了数据通路和控制器的基本工作原理。

在实验过程中,我们了解到数据通路由数据总线、控制总线、地址总线等组成,控制器负责协调各部件的工作。

2. 存储器实验通过实验,我们成功验证了存储器的基本工作原理。

在实验过程中,我们了解到存储器由存储单元、地址译码器、读写控制电路等组成,存储单元负责存储数据。

3. 输入/输出实验通过实验,我们成功验证了输入/输出设备的基本工作原理。

在实验过程中,我们了解到输入/输出设备通过接口电路与主机相连,实现数据的输入和输出。

4. 系统总线实验通过实验,我们成功验证了系统总线的基本工作原理。

在实验过程中,我们了解到系统总线由数据总线、地址总线、控制总线等组成,负责传输数据和控制信号。

北邮计算机系统结构实验报告

北邮计算机系统结构实验报告

高级计算机系统结构实验报告实验二指令流水线相关性分析实验三DLX处理器程序设计实验四代码优化实验五循环展开专业计算机科学与技术班级2015姓名学号2015实验二指令流水线相关性分析1. 实验目的:通过使用WINDLX模拟器,对程序中的三种相关现象进行观察,并对使用专用通路,增加运算部件等技术对性能的影响进行考察,加深对流水线和RISC处理器的特点的理解。

2. 实验设备环境:2.1 WinDLX模拟器可以装入DLX汇编语言程序,然后单步、设置断点或者连续执行该程序;2.2 CPU的寄存器、流水线、I/O和存储器都可以使用图形的方式表示出来;2.3 模拟器还提供了对流水线操作的统计功能;2.4 该模拟器对理解流水线和RISC处理器的特点很有帮助;2.5 所有浮点运算部件的延时都设定为4个周期;3. 实验原理:指令流水线中主要有结构相关、数据相关、控制相关。

相关影响流水线性能。

3.1数据相关定义:原有先后顺序的两条指令(I1,I2)在对共享变量(位置)进行读、写时,指令流水线中实际完成的读、写顺序与原有顺序不一致,导致流水线输出错误。

三类数据相关:写读(WR)相关读写(RW)相关写写(WW)相关解决方法技术:1.使某些流水线指令延迟、停顿一或多个周期。

2.双端口存储器:如果指令和数据放在同一个存储器。

3.设置两个存储器:一个数据存储,一个为指令存储器。

4.软件优化编译:通过指令重新排序,消除数据相关。

5.定向技术:又称旁路技术或专用通路技术,是使后续指令提前得到前指令的运算结果(适合ALU类指令)3.2结构相关定义:如果某指令在流水线重叠执行过程中,硬件资源满足不了指令重叠执行的要求,会产生资源冲突或竞争,称为流水线结构相关解决方法技术:1.延迟技术:使某些指令延迟、停顿一或多个时钟周期2.双端口存储器:允许同时读两个数据或指令3.设置双存储器(哈弗结构):一个数据存储,一个指令存储。

4软件优化编译:通过指令重新排序消除结构相关。

北邮计算机系统结构实验报告实验一到五WINDLX模拟器

北邮计算机系统结构实验报告实验一到五WINDLX模拟器

北京邮电大学实验报告课程名称计算机系统结构计算机学院 201班王陈(2016110711)目录实验一 WINDLX模拟器安装及使用 (2)·实验准备............................................................................. 错误!未定义书签。

·实验环境............................................................................. 错误!未定义书签。

·实验步骤............................................................................. 错误!未定义书签。

·实验内容及要求................................................................. 错误!未定义书签。

·实验过程............................................................................. 错误!未定义书签。

.实验总结 (6)实验二指令流水线相关性分析 (6).实验目的 (7).实验环境 (7).实验步骤 (7)·实验过程............................................................................. 错误!未定义书签。

.实验总结 (12)实验三DLX处理器程序设计 (13).实验目的 (13)·实验环境............................................................................. 错误!未定义书签。

北邮计算机组成实验报告

北邮计算机组成实验报告

北邮计算机组成实验报告北邮计算机组成实验报告一、实验概述计算机组成实验是计算机科学与技术专业的一门重要实践课程,旨在通过实际操作和实验验证,加深学生对计算机硬件组成的理解和掌握。

本次实验的主要内容是通过搭建一个简单的计算机系统,包括CPU、存储器和输入输出设备等,来实现一个简单的指令执行过程。

二、实验目的1. 理解计算机系统的基本组成部分,包括CPU、存储器和输入输出设备等。

2. 掌握计算机指令的执行过程,包括指令的获取、解码和执行等。

3. 熟悉计算机系统的工作原理,包括时钟信号、总线传输和寄存器的使用等。

三、实验过程1. CPU设计与搭建在本次实验中,我们选择了基于MIPS架构的CPU进行设计和搭建。

首先,我们需要设计并实现CPU的指令集,包括算术运算、逻辑运算和数据传输等。

然后,根据指令集的要求,设计并实现CPU的控制逻辑电路,包括指令获取、解码和执行等。

最后,通过连接寄存器、ALU和存储器等组件,完成CPU的搭建。

2. 存储器设计与实现在计算机系统中,存储器是用于存储指令和数据的重要组成部分。

在本次实验中,我们选择了SRAM作为存储器的实现方式。

首先,我们需要根据CPU的指令集和数据需求,确定存储器的容量和位宽等参数。

然后,设计并实现存储器的读写控制电路,以实现指令和数据的读写功能。

最后,通过连接存储器和CPU,完成存储器的搭建。

3. 输入输出设备设计与实现在计算机系统中,输入输出设备用于与外部环境进行数据交互。

在本次实验中,我们选择了键盘和显示器作为输入输出设备的实现方式。

首先,我们需要设计并实现键盘的输入控制电路,以实现对输入数据的获取和传输。

然后,设计并实现显示器的输出控制电路,以实现对输出数据的显示和传输。

最后,通过连接输入输出设备和CPU,完成输入输出设备的搭建。

四、实验结果与分析通过实验,我们成功搭建了一个简单的计算机系统,并进行了指令执行的测试。

在测试过程中,我们编写了一些简单的程序,包括加法、乘法和逻辑运算等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二指令流水线相关性分析·实验目的通过使用WINDLX模拟器,对程序中的三种相关现象进行观察,并对使用专用通路,增加运算部件等技术对性能的影响进行考察,加深对流水线和RISC 处理器的特点的理解。

·实验原理:指令流水线中主要有结构相关、数据相关、控制相关。

相关影响流水线性能。

·实验步骤一.使用WinDLX模拟器,对Fact.s做如下分析:(1)观察程序中出现的数据/控制/结构相关。

指出程序中出现上述现象的指令组合。

(2)考察增加浮点运算部件对性能的影响。

(3)考察增加forward部件对性能的影响。

(4)观察转移指令在转移成功和转移不成功时候的流水线开销。

·实验过程一.使用WinDLX模拟器,对Fact.s做如下分析:浮点加、乘、除部件都设置为1,浮点数运算部件的延时都设置为4,如图1:图1 初始设置将fact.s和input.s加载至WinDLX中,如图2示。

图2 加载程序1.观察程序中出现的数据/控制/结构相关;指出程序中出现上述现象的指令组合。

1)数据相关点击F7,使程序单步执行,当出现R-Stall时停止,运行过程中出现下图3所示,输入整数6。

图3 输入整数6打开Clock Diagram,可以清楚的看到指令执行的流水线如图4所示。

图4 指令流水线双击第一次出现R-Stall的指令行,如图5所示。

图5 指令详细信息对以上出现的情况分析如下:程序发生了数据相关,R-Stall(R-暂停)表示引起暂停的原因是RAW。

lbu r3,0×0(r2)要在WB周期写回r3中的数据;而下一条指令seqi r5,r3,0×a要在intEX周期中读取r3中的数据。

上述过程发生了WR冲突,即写读相关。

为了避免此类冲突,seq r5,r4,0×a的intEX指令延迟了一个周期进行。

由此,相关指令为:2)控制相关由图6可以看出,在第4时钟周期:第一条指令处于MEM段,第二条命令处于intEX段,第三条指令出于aborted状态,第四条命令处于IF段。

图 6 指令流水线以上情况原因分析:在窗口中,模拟处于第四时钟周期,第3条命令指示为:“aborted”。

原因是:第二条命令jal InputUnsigned是无条件分支指令,在第4个时钟周期,jal指令执行intEX周期之后才知道转移的位置,下一条指令应该执行sw SaveR2(r0),r2指令。

但之前jal InputUnsigned的下一条命令movi2fp f10.r1已经取出,所以需要将该指令流水清空,即movi2fp的执行应被取消,在流水线中留下气泡。

3)结构相关首先,我们先来看一下执行过控制相关的时空图和Pipeline,如下图7所示。

图7 控制相关图8 控制相关的Pipeline当我们点击Pipeline中IF所对应的框框可以看到详细的该指令执行情况,如下图9所示。

图9 指令详情图9表明了addi r2,r2,0×1的详细信息。

该指令与它前一条指令add r1,r1,r3发生了结构相关。

并且由于此处的冲突,需要暂停2个周期。

在ID段暂停后,则开始进图intEX段。

所以这条指令(addi r2,r2,0×1)你不能进入ID流水段,译码部分占用,发生了结构相关。

该部分的指令为:1.考察增加浮点运算部件对性能的影响。

该实验取N=6首先通过Configuration,点击Floating Point Stage Configuration来设置浮点运算部件的配置。

实验要求所有浮点运算部件的延时都请设定为4个周期,所以我们将Delay这一栏改成4,而Count可以任意,为了对比,我们第一次浮点运算部件取全部为1,第二次浮点运算部件取全部为2。

如下图所示:运行50个cycles之后,可以看到他们数据的对比:由此可见,浮点运算部件的增减对效率无影响。

比较各个数据,发现没有变化。

无论怎么增加浮点运算部件,统计结果都一样。

原因在于此程序中浮点计算指令没有重叠,所以并行度没有增加,性能没有提高。

3.考察增加forward部件对性能的影响。

为了对比有无forward部件的性能。

需要在Configuration中勾选enable forwarding,以及不勾选enable configuration来看性能数据的对比,不使用forward部件和使用forward部件:从上面的数据我们可以看出增加forward部件后RAW由原来占总时钟周期的26%减少至18%,RAW个数由原来的13减少至9。

增加forward部件使得控制相关比例增加了。

即,使用forward部件后,总的时钟周期减少,数据相关减少,流水线的性能得到一定的改善。

4.观察转移指令在转移成功和转移不成功时候的流水线开销。

我们假设,浮点部件设置Count=1,Delay=4;N=6。

执行50个cycles完毕后,查看条件转移分支,如下图所示:由上图可知,转移指令一共2条,成功转移1条(占50%),不成功为1条。

所以,静态指令调度算法只能解决数据相关,条件转移结果与原来相比没有变化。

即,若转移不成功,对流水线的执行无影响,流水线的吞吐率和效率没有降低;若转移成功,则要废弃预先读入的指令,重新从转移成功处读入指令,执行效率会下降。

·实验总结通过本次试验,不仅更加熟悉了WinDLX模拟器的使用以及对其基础功能的认识,而且通过单步执行程序,观察三种相关的出现,以及思考出现的原因,是我更加深入了解了流水线。

实验三 DLX处理器程序设计·实验目的:学习使用DLX汇编语言编程,进一步分析相关现象·实验原理:掌握向量运算算法和编程方法。

·实验内容和要求:自编一段汇编代码,完成两双精度浮点一维向量的加法(或乘除法)运算,并输出结果。

向量长度>=16。

观察程序中出现的数据/控制/结构相关·实验步骤:一.熟悉DLX汇编语言。

(1)汇编器处理汇编文件时,数据位于内存中data指针所指向的空间,指令位于text指针所指向的空间。

(2)Trap 0是通知WINDLX模拟器程序结束,Trap 5是输出格式化到标准输出二.编写两双精度浮点一维向量的加法运算程序。

代码清单如下:.dataV1: .double 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.1, 11.11, 12.12, 13.13, 14.14, 15.15, 16.16V2: .double 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.1, 11.11, 12.12, 13.13, 14.14, 15.15, 16.16a: .asciiz "result = "c: .asciiz "%f ".align 2d: .word cdizhi: .space 8.text.global mainmain:addi r1,r0,asw dizhi,r1 ;存储字,保存a的首地址addi r14,r0,dizhitrap 5 ;输出字符串"result = "addi r10,r0,0 ;r10 = 0addi r8,r0,20 ;r8 = 20,即向量的长度loop:ld f2,V1(r10)ld f4,V2(r10)addd f2,f2,f4 ;将V1,V2的相应项依次相加,保存在f2sd dizhi,f2 ;存储双精度浮点数f2addi r14,r0,dtrap 5 ;输出结果addi r10,r10,8 ;取V1,V2下一项subi r8,r8,1 ;循环次数减一bnez r8,loop ;假如r8!=0,则返回到looptrap 0 ;结束运行完毕之后出现:运行结果如下:1.观察程序中出现的数据/控制/结构相关本次实验执行过程共出现RAW数据相关80次,控制相关15次,trap54次,共有stall 149次。

具体如下:1)数据相关2)T-stall3)控制相关2.考察增加浮点运算部件对性能的影响。

比较浮点运算部件分别为1和2时,接下来查看Statistis进行比较,如下图由以上两图可得,本实验增加浮点运算部件对流水线性能没有影响。

3.增加FORWARD部件对性能的影响。

为了对比有无forward部件的性能。

需要在Configuration中勾选enable forwarding,以及不勾选enable configuration来看性能数据的对比,不使用forward部件和使用forward部件:从上面的数据我们可以看出增加forwardi部件后,时钟周期由368减少至301个,RAW由原来占总时钟周期的39.94%减少至26.58%;RAW个数由原来的147减少至80;增加forward部件使得控制相关比例增加了,但是数目并没有增加。

总而言之,使用forward部件后,总的时钟周期减少,数据相关减少,流水线的性能得到一定的改善。

4.观察转移指令在转移成功和转移不成功时候的流水线开销。

由上图可得,转移指令一共16条,其中成功转移15条,占93.75%,不成功转移1条,占5%。

静态指令调度算法是在出现数据相关时,为了消除或者减少流水线空转,编译器确定并分离出程序中存在在相关的指令,然后进行指令调度,并对代码优化。

但是静态指令调度只能解决数据相关,条件转移结果与原理来相比没有变化。

若转移不成功,对流水线的执行无影响,流水线的吞吐率和效率没有降低。

若转移成功,则要废弃预先读入的指令,重新从转移成功处读入指令,每执行一条条件转移指令,一条x段流水线就有x-2个流水线被浪费掉,执行效率降低,性能有一定的损失。

·实验总结加深了对汇编语言的理解与运用,尤其是trap 5,输出格式化到标准输出的理解,在代码中,应注意:相加的结果要保存到dizhi这个变量中,否则即使运算正确也不能把结果输出。

实验四代码优化·实验目的:学习简单编译优化方法,观察采用编译优化方法所带来的性能的提高。

·实验原理:采用静态调度方法重排指令序列,减少相关,优化程序。

·实验步骤:1.优化实验3程序代码清单及注释说明.dataV1: .double 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.1, 11.11, 12.12, 13.13, 14.14, 15.15, 16.16V2: .double 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.1, 11.11, 12.12, 13.13, 14.14, 15.15, 16.16a: .asciiz "result = "c: .asciiz "%f ".align 2d: .word cdizhi: .space 8.text.global mainmain:addi r1,r0,a ;该指令与sw dizhi,r1存在RAW相关,故将addir8,r0,16和addi r8,r0,16加到中间addi r10,r0,0 ;该指令与ld f2,V1(r10) 存在RAW相关,故将其提前addi r8,r0,16sw dizhi,r1addi r14,r0,dizhitrap 5loop:ld f2,V1(r10)ld f4,V2(r10)addi r10,r10,8subi r8,r8,1addd f2,f2,f4 ;该指令与前面两条指令均存在RAW相关,将其延后执行addi r14,r0,dsd dizhi,f2 ;该指令与addd f2,f2,f4存在RAW相关,将其延后执行trap 5bnez r8,looptrap 0执行完毕后,我们点击Statistics查看运行结果数据分析2.程序相关性分析结果左图是优化前的,右图是优化后的由上述两图对比可以看出,数据相关:其RAW相关由优化前的26.58%减少为12.65%,性能改善很多;控制相关:由原来的4.17%变为5.38%,数量没变,没有改善。

相关文档
最新文档