计算机系统结构实验三加法乘法动态多功能流水线调度.doc
文本预览下载声明
计算机专业类课程
实验报告 课程名称:计算机系统结构
学 院:计算机科学与工程
专 业:计算机科学与技术
学生姓名:林怡
学 号:2012060020023
指导教师:叶娅兰 日 期: 2015年 6月 5日 电 子 科 技 大 学
实 验 报 告
实验三
实验名称:加法乘法动态多功能流水线调度
实验学时:4
实验内容和目的:
实验目的:
掌握加法乘法动态双功能指令调度的方式,
理解静态多功能流水线和动态多功能流水线在调度模式上的区别,
了解指令并行度上限的概念。
实验内容:
(一)给定要执行的任务和执行该任务的流水线结构
流水线的调度方式能够提高任务的并行度,但是针对不同的任务,由于相关的存在,其并行度的提高是不一致的。在开始程序设计前,我们首先要给定所要完成的任务:
这里我们使用矩阵点积运算任务, aibi。 n的数值可以变化,通过变换n的值用同一程序进行多次模拟。
给定流水线:
流水线分五个步骤,每个步骤的执行时间均为一个单位时间;其中1-2-3-5组成加法流水线,1-4-5组成乘法流水线。加法和乘法可以同时执行
(二)对任务进行分解
动态多功能流水线不同于静态多功能流水线,流水线中同时只能有多种种操作的指令,因此不能将其划分为两个相互独立的加法流水线和乘法流水线。
我们考虑设计一个加法乘法混合运算器,加法4步,乘法三步,在送入源数据时应指明执行哪种运算。
(三)任务分解程序模拟的思路
在实验二的基础上。我们对设计进行变更。
加法乘法有一个类实现,称之为加乘法类。乘法的数据源为两个队列,加法的数据源为一个队列。
加法器的源数据队列初始为空,乘法器的源数据队列初始分别放入A1-An和B1-Bn。
(四)加乘法流水线的设计
模拟程序的目的是为了计算总的执行时间,因此对于每个步骤执行的功能并不需要关心。
为此设计一个能够同时执行加法和乘法的运算器类,每次接收两个输入数据,对于加法,经过4个时间片,输出加法的结果;对于乘法,经过3个时间片,输出加法的结果。时间片可以用定时器来模拟。
(五)乘法流水线的设计
乘法流水线分为三个步骤,每个步骤时间花费是一个单位时间。模拟程序的目的是为了计算总的执行时间,因此对于每个步骤执行的功能并不需要关心。
为此设计一个总步数为三步的加法器,接收两个输入数据,经过3个时间片,输出乘法的结果。时间片可以用定时器来模拟。
(五)程序设计
程序应包括三个队列,一个加乘法类,一个定时器,一个输出对话框。
两个乘法队列用于存放源数据,一开始将A1-An和B1-Bn分别放入两个乘法队列。
启动定时器,每一个时间片从两个乘法队列中各取出一个源数据、或者从加法队列中取出两个数据源(依次只能是两者中的一种,可以考虑首先从加法队列中取,请思考为什么加法优先?),送入加乘法器(可以通过调用乘法器中对应的加法接口函数或者乘法接口函数,把源数据作为参数传入)。
构造加乘法器类,可以考虑用一个长度对5的执行队列来模拟流水线的5个步骤,对于队列的元素,除了要表示两个源数据外,还需要表示对应这两个数据所要执行的操作(乘法或加法),每个时间片将队列的数据根据执行的操作依次下压一格(加法下压的顺序是1-2-3-5,乘法下压的顺序是1-4-5),队列尾的数据进行对应的计算,并将结果压入加法器源数据队列。
当乘法源队列和乘法源队列均为空且加乘法器的执行队列也为空(所有运算执行完毕)时,任务执行完毕。
用一个记数值表示时间开销,每个时间片对该记数值加1。最后的记数值是任务的总的时间开销。
(五)多次模拟
可以通过循环的方式对n从4-20进行循环,将每次模拟运行的时间开销值在对话框中显示出来。如果可能将结果打印。
实验原理:
程序设计及数据结构:
实验程序共有6个类,分别是:
DynamicPiplineTest 公共类,测试程序,每一个n的循环,将计时器清零并初始化
长度为n的乘法操作数队列A与B,每个时间片从乘法操作数队列中取出Ai与Bi,进行乘法操作,并将结果送入加法器的操作数队列。当乘法器的源操作数队列为空时开始执行加法操作,当加法操作数队列只剩一个操作数且加法器的执行队列为空的时候,程序结束,输出n和计时器timercounter的值,以及最终的计算结果sum;
OperaQueue 操作数队列类,包括一个操作数队列数据结构、队列初始化函数
OperaQueue(int queueLength)、从队列中取一个源操作数函数getOperationNum()和将加法器计算的结果压入队尾的函数pushOperationNum(int op);
Addition 加法器类(也可以作乘法器类),一个加法(乘法)执行队列additionQueue,
一个用于暂存操作数的队列addOp
显示全部