文档库 最新最全的文档下载
当前位置:文档库 › 一种指令级_流水线级模拟器的设计与实现_孙太一_同济大学软件学院

一种指令级_流水线级模拟器的设计与实现_孙太一_同济大学软件学院

在国内高校计算机专业中,计算机系统结构实验一直是一个难题。在这些实验中学生需要了解指令集(如MIPS)的编码方式、各条指令的功能、流水线的工作过程、流水线对于某些特殊情况的处理方法以及流水线采用不同策略时其性能的差异等,如果用传统的实物硬件进行实验,即使可行,也是很复杂的,学生难以通过实物了解流水线在不同时钟周期的内部状态。而且实物硬件器材成本高,容易损坏,很多学校开不起这些实验。如果利用模拟器来进行虚拟实验,则是灵活得多,成本也很低。因此,指令级/流水线级模拟器成为了系统结构实验中必然的选择。

1.相关模拟器分析

目前,国外某些机构已经研发出一些指令级/流水线级模拟器,可分为研究用模拟器和教学用模拟器两类。研究用模拟器,如OVPsim、SimpleScalar等,具有功能强大、性能优越等特点。但是,这些模拟器往往运行在类UNIX操作系统环境下,以命令行方式操作,缺少友好的图形界面;另一方面,这些模拟器由于过于贴近真实机器而具有过多的细节,提高了操作的复杂性。这些因素决定了研究用模拟器不适用于教学。在现有的教学用模拟器中,与本文模拟器相关的有WinDLX、Edu-MIPS64等等。

WinDLX是Windows平台上的DLX模拟器。DLX是专门为教学而提出的一种简化的RISC体系结构。可查看流水线运行情况,具有良好的图形界面,伴随着采用DLX为实例的教材而广泛使用。但目前体系结构教材已经转向以实际存在的体系结构(主要是MIPS)为实例,因此该模拟器也随之过时。它在功能上不支持非流水执行模式,无法使学生更好地了解单条指令的功能,也无法更直观地掌握流水模式与非流水模式间的区别;它不支持取消延迟槽,无法完成相关对比实验;没有撤销功能,无法取消误操作。这些都限制了它的应用。

总的来讲,这些模拟器目前功能上仍有一些不适用于教学的缺点,而且它们大都为外国机构所开发,国内尚缺少自主研发的教学用模拟器。因此,开发一种教学用指令级/流水线级模拟器是十分必要的。

2.模拟器总体设计

为了能够满足教学实验的应用,模拟器的需求参照WinDLX,同时着重注意以下几点:

正确处理目标机器指令代码。在模拟各条指令在流水线内的行为的同时,还要能够正确处理指令间的各种相关性,比如数据相关、控制相关和结构相关等。

友好的图形界面。仿照WinDLX的界面进行设计,用户可以通过图形界面对模拟器进行各项操作,并且能够访问目标机的各项状态,如流水线、内存、寄存器组等等。

支持不同的模拟策略切换。用户可以选择是否采用流水方式执行指令,是否采用延迟槽以及是否采用定向机制解决数据相关问题等。

便于扩展,能够实现多种体系结构。本文介绍的模拟器框架内可实现MIPS和SPARC体系结构的模拟,而且不排除实现更多的体系结构。

完整的模拟器状态记录,以便支持撤销与恢复。模拟器可单步执行一时钟周期或一条指令,同时也能够撤销上一周期或指令的工作,所以要在每一步执行前保存模拟器状态。

本文模拟器使用C#语言实现,总体框架如图1所示:

图1总体框架图

2.1模拟器界面模块

界面模块作为一个客户来使用模拟模块而不参与模拟器内部的运作。

本文模拟器的主界面如图2所示:

图2模拟器主界面

模拟器的主界面含有七个子窗口,分担了将模拟器状态图形化的大部分工作。它们分别是:代码窗口、寄存器窗口、内存窗口、流水线窗口、时钟周期图窗口、统计窗口和断点窗口。

在程序载入目标代码后,代码窗口将以目标系统结构的指令汇编格式显示各条代码,按指令地址、断点标记、汇编码等分列显示。在执行代码时,各流水线站所处理的指令行会以代表对应站的颜色标记。

通过寄存器窗口可以访问当前目标机器中的各个寄存器的值,包括通用寄存器、浮点数寄存器、特殊寄存器和流水线寄存器四组。其中,特殊寄存器包含系统结构定义的,在通用与浮点寄存器之外的寄存器,如MIPS中的HI、LO等;流水线寄存器包括当前流水线内部的一些寄存器,如EX.ALUout等。双击可以改变寄存器的值。寄存器窗口如图3所示:

图3寄存器窗口

通过内存窗口可访问当前目标机器的内存,可通过菜单“内存”、“显示”来修改内存的显示格式,如十进制四字节整数、双精度浮点等,默认为十六进制单字节。双击可修改对应地址的值。

流水线窗口显示当前流水线的状态,包括各个流水线站正在处理的指令。双击可查看处理的详细过程。

时钟周期图窗口用来观察流水线运行的过程,是最重要的窗口。它每行表示一条指令,每列表示一个周期,内容则表示对应的指令在对应周期下由哪个流水线站完成了怎样的工作。可通过该窗口来学习流水线对于数据相关、控制相关等特殊情况的处理方式。时钟周期图窗口如

一种指令级/流水线级模拟器的设计与实现

同济大学软件学院孙太一

[摘要]本文针对计算机系统结构和组成原理课程的教学特点,在分析该课程实验对模拟器的需求的基础上,采用面向对象思想和C#语言,开发出了适用于Windows操作系统的两个好用的指令级/流水线级模拟器。利用这些模拟器,可以进行指令系统和流水线相关的实验。

[关键词]指令级模拟器流水线级模拟器计算机系统结构计算机辅助教学

MIPS

593

——

作出折线图如图5。

结果分析:从图表可以看出,User0用的费用最少,但是时间用得多;User1用的费用最多,但完成任务快;User2采用了时间代价均衡算法,费用和时间介于User0和User1之间,并且完成的任务最多。该结果与算法提出的初衷是一致的,说明利用网格模拟器可以对资源调度算法作出客观的评价,从而使得用户可以根据自己的需求选择合适的调度策略。

在以后的研究中,可以对已有算法进行改进,再通过网格模拟器来检验改进算法是否比原有算法具有优越性,这对资源调度算法的改进研究具有非常强的指导作用。

参考文献

[1]都志辉,陈渝,刘鹏编著.网格计算[M].北京:清华大学出版社,2003:19~22.

[2]DavidFernández-Baca.Allocatingmodulestoprocessorsinadis-tributedsystem[J].IEEETransactionsonSoftwareEngineering,November,1989,15(11):1427~1436.

[3]BRAUNTD,SIEGELHJ,BECKN,AComparisonofElevenStaticHeuristicsforMappingaClassofIndependentTasksontoHeterogeneousDistributedComputingSystems[J].JournalofParallelandDistributedComputing,2001,61(1):810~837.

[4]RBuyya,MMurshed.GridSim:AToolkitfortheModdelingandSimulationofDistributedResourceManagementandSchedulingforGridComputing[J].TheJournalofConcurrencyandComputation:PracticeandExperience,2002,14(3):781~890.

(上接第592页)

图4所示:

图4时钟周期图窗口

统计窗口用于显示模拟器在执行了一段程序后的各项统计信息。断点窗口用来管理断点,方便调试目标程序。每个断点包括地址和流水线站两个部分,当对应流水线站处理该地址的指令前,模拟器会中断。

对于该模拟器的操作流程,可用状态转移图表示:

图5模拟器状态转换图2.2模拟器模拟模块

该模拟器的模拟模块,负责模拟目标系统结构对指令的译码、

执行。它使用Facade设计模式[1]

对界面提供接口,包括操作模拟器的各个方法和事件反调函数以及构成模拟器的各个对象,如寄存器、

内存等等。

在模拟模块内部,为了使该设计能够实现多种体系结构,提供一组抽象父类。这些抽象父类有:Controller、Instruction、Executer、Registers、Memory、Stage等等。在实现某种特定的体系结构时,需要继承这些类,如MipsRegisters:Registers。

为了能够保存模拟器各个对象的状态,使用Memento设计模式[1],需要这些对象实现IMemento接口。保存状态时,父对象不仅要保存自己的状态,还要调用子对象的IMemento接口并保存子对象状态。

3.模拟器的实现以MIPS64为例,实现模拟器。

首先出于图形界面的特点,需要将目标程序运行在单独的子线程

内。这是因为:

在目标程序执行过程中,不可以从主线程修改目标机的各项状态,否则可能会造成目标机无法正常运行,同时当目标程序结束或暂停后,必须通知主线程,使得使用者可以修改目标机的状态;当目标程序运行中出现了陷阱或异常情况,需要通过在线程间发消息来通知主线程,进行相应的处理;如果目标程序中存在死循环,应可通过主线程通知子线程停止运行。这里可以使用C#中的异步方法调用[2]。

然后要确定该体系结构指令级流水线的结构以及该体系结构指令

在各流水站内的处理方法。

本文模拟器采用MIPS经典的五站流水线[3],在这基础上实现Executer类和Instruction类。Executer类负责对目标代码按周期或按指令进行模拟,其中各个Stage对象分工各个流水站的工作。而每条指令在模拟器中都是一个Instruction对象,采用了TemplateFunction设计模式,不同的Stage对象将调用该对象不同的方法,以实现指令在各个站中的操作;在非流水模式下,只要把这些方法逐个执行即

可。同时每条指令包含其源、目寄存器标示以及使用位置和产生位置的标示,用于在执行时判断相关性。

4.实验设计

完成了模拟器的开发、测试后,就可以在这个基础上开设3个实验[4]。4.1MIPS指令系统实验

该实验的目的主要是使学生熟悉MIPS指令系统及其特点,加深对MIPS指令操作语义的理解,同时熟悉模拟器的操作。

实验步骤主要是先配置好模拟器;然后载入一个事先准备好的MIPS程序文件,该文件含有MIPS指令集中挑选出一些有代表性指令,

按照指令类别分段写在文件中,主要有Load/Store指令、

算术运算指令、逻辑运算指令、控制转移指令等类别;然后学生逐指令执行各条指令,

观察执行前后模拟器状态(流水线、

寄存器、内存等)的变化。4.2流水线及流水线中的冲突实验

该实验的目的是使学生理解MIPS结构如何使用5段流水线来实现,理解各段的功能和基本操作,加深对数据冲突、结构冲突以及这些冲突对CPU性能影响的理解以及掌握解决数据冲突的方法。

实验步骤主要是在学生基本掌握流水方式执行指令的基础上,针对结构冲突和数据冲突分别载入事先准备好的目标程序文件。对于结构冲突而言,该文件包含一串浮点加法指令,首先打开一个浮点加法器,记录运行情况;然后打开八个浮点加法器再次运行程序,记录运行

情况。比较先后两次运行的记录,

可了解结构冲突对CPU性能的影响。对于数据相关而言,首先关闭定向功能,记录运行情况(主要是时钟图的形态);然后打开定向功能,记录运行情况。比较先后两次运行的记录,可了解数据相关和定向技术对CPU性能的影响。

4.3指令调度和延迟分支实验

该实验的目的是使学生加深对指令调度技术、

延迟分支技术,熟练掌握指令调度技术解决流水线中数据冲突的方法,并且进一步了解这些技术对CPU性能的改进。

首先进行用指令调度技术解决数据冲突的实验。先将调度前的目标程序载入模拟器,然后在非定向模式下执行,记录运行情况;再载入

调度后的程序,再运行并记录。

对比两个程序与执行记录可了解指令调度的方法与作用。

然后进行延迟分支的实验。先关闭模拟器的延迟槽功能,载入目标程序运行并记录;再打开延迟槽功能,再次运行程序并记录。对比两次记录可了解延迟分支对提高CPU性能的作用。

5.结语

本文根据系统结构课程实际需求,阐述了一种指令级/流水线级模拟器的设计与实现,并且利用该模拟器设计了3个实验,达到了提高教

学质量,降低实验成本的目的。

未来可以考虑将该模拟器执行目标程序的过程动画化,这样可使得实验效果更加直观。同时,该模拟器可与其他实验内容(如Cache)的模拟器,集成为一个模拟器,这样可大大增强模拟器的功能,更好地实现教学目的。参考文献

[1]ErichGamma,RichardHelm,RalphJohnson等.设计模式:可复用面向对象软件的基础[M].北京:机械工业出版社,2002:185-193,283-292.

[2]AndrewTroelsen.ProC#2008andthe.NET3.5Platform[M].纽约:Apress出版社,2007:588-592.

[3]张晨曦,王志英,沈立等.计算机系统结构教程[M].北京:清华大学出版社,2009:70-90.

[4]张晨曦,刘依,刘宏伟等.计算机系统结构实践教程[M].北京:清华大学出版社,2010:

3-40.http://www.china-pub.com/50948.

594——

相关文档
相关文档 最新文档