计算机体系结构实验-单功能流水线调度机构模拟
- 格式:doc
- 大小:249.00 KB
- 文档页数:13
北京邮电大学实验报告课程名称计算机系统结构计算机学院 2011211311班薛玥(2011211432)目录实验一 WINDLX模拟器安装及使用 (3).实验准备 (3).实验环境 (4).实验步骤 (5).实验内容及要求 (5).实验过程 (5).实验总结 (11)实验二指令流水线相关性分析 (12).实验目的 (12).实验环境 (12).实验步骤 (12).实验过程 (12).实验总结 (19)实验三DLX处理器程序设计 (20).实验目的 (20).实验环境 (20).实验步骤 (20).实验过程 (20)A.向量加法代码及性能分析 (20)B.双精度浮点加法求和代码及结果分析 (26).实验总结 (31)实验四代码优化 (32).实验目的 (32).实验环境 (32).实验原理 (32).实验步骤 (32).实验过程 (32).实验总结+实习体会 (37)实验五循环展开 (38).实验目的 (38).实验环境 (38).实验原理 (38).实验步骤 (38).实验过程 (38)矩阵乘程序代码清单及注释说明 (38)相关性分析结果 (43)增加浮点运算部件对性能的影响 (43)增加forward部件对性能的影响 (43)转移指令在转移成功和转移不成功时候的流水线开销 (43).实验总结+实习体会+课程建议 (43)实验一 WINDLX模拟器安装及使用·实验准备1.了解DLX的基本结构和原理DLX是一种典型的Load/Store型指令集结构。
它具有一套简单的Load/Store 指令集;它注重指令流水效率;它简化指令的译码;它高效支持编译器。
2.了解DLX中的寄存器DLX中有32个通用寄存器(GPRs),分别将其命名为R0,R1...R31。
每个通用寄存器长度为32位。
另外,DLX中有32个浮点寄存器(FPRs),分别将其命名为F0,F1 (31)3.了解DLX数据类型DLX提供了多种长度的整型数据和浮点数据。
系统结构实验:流水线处理机流水方式是把一个复杂的过程分解为若干个子过程,每个子过程可以与其它子过程同时进行。
由于这种工作方式与工厂中的生产流水线十分相似,因此,把它称为流水线工作方式。
1.1 流水线的原理及基本思想1.1.1 流水的基本概念流水可以看作是重叠的引申,一次重叠是一种简单的指令流水线。
一次重叠是把一条指令分解为“分析”和“执行”两个子过程,这两个子过程分别在执行分析部件和指令执行部件中完成。
如图1-1-1 所示。
由于在指令分析部件和指令执行部件的输出端各有一个锁存器,可以分别保存指令分析和指令执行的结果,因此,指令分析和指令执行部件可以完全独立并行地工作,而不必等一条指令的“分析”、“执行”子过程都完成之后才送入下一条指令。
分析部件在完成一条指令“分析”并将结果送入指令执行部件的同时,就可以开始分析下一条指令。
图1-1-1 简单的流水上图中如果指令分析部件分析一条指令所用的时间△t1 与指令执行部件执行一条指令所用的时间△t2 相等,即△t1=△t2=△t,就一条指令的解释来看还是需要2△t,但是从机器的输出来看,每过△t 就有一条指令执行完成。
因此,机器执行指令的速度提高了一倍。
如果把“分析”子过程再细分成“取指令”、“指令译码”和“取操作数”3 个子过程,并加快“执行”子过程,使 4 个子过程都能独立地工作,且经过的时间都是△t。
如图1-1-2(a)所示,则可以描述出流水的时空图如图1-1-2(b)。
在时空图中,横坐标表示时间,也就是输入到流水线中的各个任务在流水线中所经过的时间。
纵坐标表示空间,即流水线的各个子过程。
在时空图中,流水线的一个子过程通常成为“功能段”。
从时空图中,可以很清楚的看出各个任务在流水线的各段中的流动的过程。
从横坐标方向看,流水线中的各个功能部件逐个连续地完成自己的任务;从纵坐标看,在同一时间段内有多个功能段在同时工作。
在上面的流水线中,对于“取指令”、“指令译码”、“取操作数”、“执行”每个子过程都需要△t 时间完成,这样,虽然完成一条指令所需的时间还是一个T,但是每隔一个△t(T/4)时间就会一条指令结果输出,这样的执行效率比顺序方式提高了 3 倍。
课程实验报告
在单处理机的情况下模拟用优先权的时间片轮转调度策略实现处理机调度,以加深了解处理机调度的工作过程。
要求:
可利用先来先服务、短作业优先、响应比高者优先、多级反馈队列模型、时间片轮转法等,来实现处理机的调度。
根据单处理机,多任务的问题特性做好软件实现的需求分析。
可根据问题的实际需要,可选择进程数量。
当系统运行时,能直观地、动态地反映当前处理机状态及各进程执行的状况。
描述6.create函数用于创建队列
7.insert为插入函数,用于将一个时间片运行结束的进程插入到就绪进程的
队尾
8.priority函数:如果有进程就绪,就将处理机分配给该进程让他执行。
调试过程及实验结果
总结每次运行一步,电脑将会将该时刻所有进程控制块的运行状态显示给用户。
包括进程名、要求运行时间、已经运行时间、还需要运行时间、状态等信息。
当每个进程运行一个时间片之后将它从该队列中移除,添加到就绪队列队尾中以便使每个进程可以循环执行。
当要求运行时间和已运行时间相等时,说明该进程运行结束,将该进程撤出该队列并且不再添加到就绪队列中。
直到就绪队列中没有就绪进程为止
附录#define _CRT_SECURE_NO_DEPRECATE #include"stdio.h"
#include"stdlib.h"
#include"string.h"
typedef struct node
{
char pname[10]; //进程名
int rtime; //已运行时间
int sytime; //剩余时间。
计算机体系结构实训课程学习总结指令级并行与流水线设计在计算机科学与技术领域中,计算机体系结构是一门关于计算机硬件与软件的核心学科。
在我修习的计算机体系结构实训课程中,我学习了指令级并行与流水线设计,掌握了该领域的核心概念与技术,下面是我对该课程的学习总结和心得体会。
一、指令级并行概述指令级并行是指在一个周期内同时执行多条指令,以减少指令的执行时间,提高计算机的性能。
在学习指令级并行的过程中,我了解了计算机指令的基本原理及其执行过程。
通过学习指令流水线、数据前推、乱序执行等技术,我深入理解了指令级并行的优势和实现方法。
在实训过程中,我通过搭建指令级并行的实验平台,进行了仿真实验和性能分析。
通过比较顺序执行和指令级并行执行的效果,我发现指令级并行可以大幅度提高计算机的执行效率。
而在实现指令级并行时,我也面临了一些挑战,如数据相关、控制相关等问题,但通过优化代码和调整指令执行顺序,我成功地解决了这些问题。
这个过程让我深刻体会到指令级并行设计的重要性和技术难点。
二、流水线设计与优化流水线设计是指将计算机指令的执行过程划分为多个阶段,并使不同阶段的指令并行执行,从而提高计算机的吞吐量。
在学习流水线设计的过程中,我深入了解了流水线的原理、特点和结构。
通过学习流水线的组织方式、数据冒险、控制冒险等问题,我掌握了流水线设计的关键技术。
在实验中,我设计了一个基于流水线的简单计算机,并通过编写适当的指令集和流水线寄存器,实现了流水线的功能。
通过性能测试,我发现流水线设计可以显著提高计算机的执行效率和吞吐量。
然而,我也发现了一些流水线设计中的问题,比如分支预测错误、资源冲突等,这些问题对流水线的性能产生了负面影响。
通过调整分支预测策略和添加冲突检测机制,我成功地进行了优化,提高了流水线设计的性能。
三、实训过程中的收获与反思通过学习指令级并行与流水线设计,我不仅极大地提高了对计算机体系结构的理解和掌握,还培养了解决实际问题的能力。
计算机体系结构实验报告——实验二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中的输入子程序。
计算机科学与技术学院《计算机体系结构》课程实验学号:班级:专业:计算机科学与技术学生姓名: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中。
计算机体系结构实验报告第一篇:计算机体系结构概述计算机体系结构是计算机学科中的一个重要分支,它研究的是计算机的硬件组成和工作原理,包括计算机的处理器、存储器、输入输出设备、总线等。
计算机体系结构的研究可以帮助我们理解计算机的工作原理,优化计算机的性能,提升计算机的能力。
计算机体系结构可以分为两个方面:指令集体系结构和微体系结构。
其中,指令集体系结构是指计算机的操作系统能够直接识别和执行的指令集合,它们是应用程序的编程接口;而微体系结构是指通过硬件实现指令集合中的指令,在底层支持指令集合的操作。
指令集体系结构和微体系结构是密切相关的,因为指令集体系结构会影响微体系结构的设计和实现。
目前,计算机体系结构主要有三种类型:单处理器体系结构、多处理器体系结构和分布式计算体系结构。
其中,单处理器体系结构是指所有的指令和数据都存放在同一台计算机中,这种体系结构的优点是操作简单、易于管理,但是主频存在瓶颈,无法很好地发掘多核的性能优势;多处理器体系结构是指多个计算机共享同一块物理内存,因此可以方便地实现负载均衡和任务协作,但是存在通信延迟和数据一致性问题;分布式计算体系结构则是指通过互联网将多个计算机连接成一个网络,可以在全球范围内共享计算资源,但是通信成本和数据安全问题需要考虑。
总之,计算机体系结构是计算机学科中的重要分支,它研究计算机的硬件组成和工作原理,帮助我们理解计算机的工作原理,优化计算机性能,提升计算机能力。
第二篇:计算机指令集体系结构计算机指令集体系结构,简称ISA(Instruction Set Architecture),是指计算机能够识别和执行的指令集合。
ISA是计算机指令的编程接口,定义了一组指令和地址模式,以及寄存器和内存的组织方式,它是计算机软件和硬件协同工作的关键接口之一。
ISA可以分为两类:精简指令集体系结构(RISC,Reduced Instruction Set Computer)和复杂指令集体系结构(CISC,Complex Instruction Set Computer)。
计算机系统结构实验报告计算机系统结构实验报告《计算机系统结构》实验报告专业班级姓名学号实验一熟悉模拟器WinDLX的使用一、实验目的1. 熟练掌握WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点。
2. 加深对计算机流水线基本概念的理解。
3.了解DLX基本流水线各段的功能以及基本操作。
二、实验平台WinDLX模拟器三、实验内容和步骤1.WinDLX的安装WinDLX模拟器是一个图形化、交互式的DLX 流水线模拟器,能够演示DLX流水线是如何工作的。
该模拟器可以装载DLX汇编语言程序(后缀为“.s”的文件),然后单步、设断点或是连续执行该程序。
CPU的寄存器、流水线、I/O和存储器都可以用图形表示出来,以形象生动的方式描述DLX流水线的工作过程。
模拟器还提供了对流水线操作的统计功能,便于对流水线进行性能分析。
WinDLX 包含windlx.exe和windlx.hlp文件。
同时,还需要一些扩展名为.s的汇编代码文件。
按以下步骤在Windows下安装WinDLX:(1)WinDLX创建目录,例如D:\WINDLX(2)解压WinDLX软件包或拷贝所有的WinDLX文件(至少包含windlx.exe, windlx.hlp)到这个WinDLX 目录。
2.启动和配置WinDLX双击WinDLX图标,将出现一个带有六个图标的主窗口,如图1-1。
双击这些图标会弹出子窗口。
图1-1 WinDLX启动窗口为了初始化模拟器, 点击File 菜单中的Reset all 菜单项,弹出一个“Reset DLX”对话框。
然后点击窗口中的“确认”按钮即可。
WinDLX可以在多种配置下工作。
可以改变流水线的结构和时间要求、存储器大小和其他几个控制模拟的参数。
点击Configuration→Floating Point Stages(点击Configuration打开菜单,然后点击Floating Point Stages菜单项),选择如图1-2标准配置。
实验三WinDLX流水线实验王宇航安全0901班09283020实验三WinDLX流水线实验1实验目的:通过本实验,加深对结构相关、数据相关和指令调度的理解,了解结构相关对CPU性能的影响,掌握如何使用定向技术来减少数据相关带来的暂停,了解指令调度技术对CPU性能改进的好处。
2实验内容:用WinDLX模拟器进行结构相关的分析1、生成structure.s程序。
用WinDLX模拟器运行该程序。
2、通过模拟,找出存在结构相关的指令对,以及导致结构相关的部件。
3、记录由结构相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。
用WinDLX模拟器分析数据相关1、生成data.s程序。
2、通过Configuration菜单中的选项,设定在不采用定向技术的情况下,用WinDLX模拟器运行程序data_d.s。
记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。
3、在采用定向技术的情况下,用WinDLX模拟器再次运行程序data_d.s。
记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。
用WinDLX模拟器分析指令调度1、生成sch-before.s及sch-after.s程序。
2、通过Configuration菜单中的选项,将除法单元数设置为3,将加法﹑乘法﹑除法的延迟设置为3个时钟周期。
3、用WinDLX模拟器运行调度前的程序sch-before.s。
记录程序执行过程中各种相关发生的次数以及程序执行的总时钟周期数。
4、用WinDLX模拟器运行调度后的程序sch-after.s,记录程序执行过程中各种相关发生的次数以及程序执行的总时钟周期数。
综合实验(习题3.4)在WinDLX上运行如下代码序列:LOOP: LW R1,0(R2)ADDI R1,R1,#1SW 0(R2),R1ADDI R2,R2,#4SUB R4,R3,R2BNEZ R4,LOOP其中:R3的初值是R2+396。
实验二调度算法的模拟实现一、实验目的1.加深对先来先服务算法,短作业优先算法,最高优先权优先调度算法等三种调度算法的理解2.利用C语言编写算法,模拟实现先来先服务算法,短作业优先算法,最高优先权优先调度算法。
3.模拟三种调度算法,对比三种调度算法的优缺点,并计算平均周转时间和平均带权周转时间。
二、实验开发平台Microsoft Visual C++ 6.0(使用C语言)三、三个调度算法说明先来先服务调度算法,是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度,就是每次从就绪队列中选择一个最先进入队列的进程,该算法比较有利于长作业,而不利于短作业。
另处,FCFS调度算法对CPU繁忙型作业较有利,而不利于I/O繁忙作业。
短作业优先调度算法(SWF),是指对短作业或短进程优先调度的算法,是指分派CPU时,把CPU优先分给最短的作业。
它的缺点是对长作业不利,不能保证及时处理解紧迫性的作业。
最高优先权优先调度算法,常用于批处理系统中,既照顾了短作业,又考虑了作业到达的先后次序,不会使长作业长期得不到服务。
它实现了一种较好的折衷,但每要进行高度之前,都须先做响应比的计算,这会增加系统开销。
四、实验源程序#include <stdio.h>struct process{char name[10];int dtime;int ftime;int youxian;};struct process pro[3];struct process tempPro[3];void fcfs()//先来先服务{//先对这些线程排序,使用冒泡法排序,从小到大int i,j;for (i=0;i<3-1;i++){for (j=0;j<2-i;j++){if (pro[j].dtime>pro[j+1].dtime){tempPro[j]=pro[j];pro[j]=pro[j+1];pro[j+1]=tempPro[j];}}}}void sjf()//短作业优先{//使用冒泡法排序,从小到大int i,j;for (i=0;i<3-1;i++){for (j=0;j<2-i;j++){if (pro[j].ftime>pro[j+1].ftime){tempPro[j]=pro[j];pro[j]=pro[j+1];pro[j+1]=tempPro[j];}}}}void youxian()//最高优先权优先,假定此处为优先数最大的进程优先服务{ //使用冒泡法排序,从大到小int i,j;for (i=0;i<3-1;i++){for (j=0;j<2-i;j++){if (pro[j].youxian<pro[j+1].youxian){tempPro[j]=pro[j];pro[j]=pro[j+1];pro[j+1]=tempPro[j];}}}}void print()//输出进程名称{int i;for (i=0;i<3;i++){printf("%s\n",pro[i].name);}}void main(){printf("请输入第一个进程的名字到达时间服务时间优先数\n");scanf("%s %3d %3d %3d",&pro[0].name,&pro[0].dtime,&pro[0].ftime,&pro[0].youxian);printf("请输入第二个进程的名字到达时间服务时间优先数\n");scanf("%s %3d %3d %3d",&pro[1].name,&pro[1].dtime,&pro[1].ftime,&pro[1].youxian);printf("请输入第三个进程的名字到达时间服务时间优先数\n");scanf("%s %3d %3d %3d",&pro[2].name,&pro[2].dtime,&pro[2].ftime,&pro[2].youxian);printf("先来先服务调度执行顺序:\n");fcfs();print();printf("短作业优先调度执行顺序:\n");sjf();print();printf("最高优先权优先调度执行顺序:\n");youxian();print();}五、运行结果。
实验一流水线及流水线中的冲突一、实验目的(1)加深对计算机流水线基本概念的理解。
(2)理解MIPS结构如何用5段流水线来实现,理解各段的功能和基本操作。
(3)加深对数据冲突、结构冲突的理解。
(4)加深对指令调度技术的理解并进一步理解指令调度技术对CPU 性能的改善。
二、实验平台实验平台采用指令集和流水线操作级模拟器MIPSsim。
通用寄存器:浮点寄存器:特殊寄存器:流水寄存器:第13个时钟周期的时钟周期图如下:各段指令为:(1)学号为单数的同学自己编写一段关于结构冲突的汇编语言程序,分析该段程序存在结构冲突的指令以及导致结构冲突的部件,记录由结构冲突引起的停顿时钟周期数,计算停顿周期数占总执行周期数的百分比。
分析结构冲突对CPU性能的影响。
编写的代码如下:.textmain:ADD.D $f2,$f0,$f1ADD.D $f3,$f0,$f1ADD.D $f4,$f0,$f1ADD.D $f5,$f0,$f1ADD.D $f6,$f0,$f1ADD.D $f7,$f0,$f1ADD.D $f8,$f0,$f1ADD.D $f9,$f0,$f1TEQ $r0,$r0由结构冲突引起的停顿周期数为:35个计算停顿周期数占总执行周期数的百分比为:67.30769%ADD.D $f3,$f0,$f1和ADD.D $f4,$f0,$f1指令间存在结构冲突,由于读f0和f1的值都要访存,又因为执行一条流水线时只能有有一条指令访存,所有产生结构冲突。
结构冲突降低了CPU的性能,是执行周期时间变长,并行性较差。
(2)加载样例schedule.s观察程序在流水线中的执行情况。
通过查看统计数据和时钟周期图,找出并记录程序执行过程中各种冲突发生的次数,发生写后读冲突的指令组合以及程序执行的总时钟周期数。
RAW停顿:12 占周期总数的百分比:41.37931%load停顿:3 占所有RAW停顿的百分比:25%浮点停顿:0 占所有RAW停顿的百分比:0%WAW停顿:0 占周期总数的百分比:0%结构停顿:0 占周期总数的百分比:0%控制停顿:0 占周期总数的百分比:0%自陷停顿:1 占周期总数的百分比:3.448276%停顿周期总数:13 占周期总数的百分比:44.82759%发生写后读冲突的指令:LW $r2,0($r1)和MUL $r24,$r26,$r14等程序执行的总时钟周期数为:29(3)采用指令调度技术对程序进行指令调度,消除冲突,将调度后的程序重新加载,执行该程序观察程序在流水线中的执行情况,记录程序执行的总周期数。