CN200910163705.4
2009.08.14
CN101676863A
2010.03.24
授权
有权
专利权的转移IPC(主分类):G06F 9/30登记生效日:20160330变更事项:专利权人变更前权利人:北京北大众志微系统科技有限责任公司变更后权利人:北京众志芯科技有限公司变更事项:地址变更前权利人:100032 北京市海淀区中关村北大街151号资源大厦11层变更后权利人:100080 北京市海淀区中关村北大街151号燕园资源大厦1107室|||授权|||实质审查的生效IPC(主分类):G06F 9/30申请日:20090814|||公开
G06F9/30; G06F9/38
G06F9/30
北京北大众志微系统科技有限责任公司
程 旭; 张吉豫; 刘先华
100032北京市海淀区中关村北大街151号资源大厦11层
2008.8.15 CN 200810118502.9
北京律诚同业知识产权代理有限公司
梁 挥;祁建国
本发明公开了一种双宽度指令系统的性能无损切换方法及其应用系统,该方法是在双宽度指令系统中引入两个状态切换指令集合,该两个状态切换指令集合分别“宽-窄”状态切换指令集合和“窄-宽”状态切换指令集合,所述状态切换指令集合中的指令在执行普通操作的同时,还执行切换处理器运行状态的功能。
1、 一种双宽度指令系统的性能无损切换方法,其特征在于,该方法是在双宽度指令系统中引入两个状态切换指令集合,该两个状态切换指令集合分别“宽-窄”状态切换指令集合和“窄-宽”状态切换指令集合,所述状态切换指令集合中的指令在执行普通操作的同时,还执行切换处理器运行状态的功能。2、 根据权利要求1所述的双宽度指令系统的性能无损切换方法,其特征在于,所述“宽-窄”状态切换指令集合中的指令是在32位指令的程序中频繁出现,该指令在执行普通操作的同时,还执行切换处理器状态至窄指令状态的功能;所述“窄-宽”状态切换指令集合是在可用16位指令表示的程序片段最后频繁出现,在执行普通操作的同时,还执行切换处理器状态至宽指令状态的功能。3、 根据权利要求1或2所述的双宽度指令系统的性能无损切换方法,其特征在于,进一步包括以下步骤:状态切换指令的选取步骤,用于由代码分析工具依据设定的算法选择符合设定条件的指令加入到状态切换指令集中;微体系结构的设计步骤,用于在体系结构中引入状态切换指令集合以及双宽度指令系统混合编码的结构设计;混合编码生成步骤,用在不破坏原有指令语义序列的基础上,将所有可以转换的指令序列用状态切换指令和窄指令表示,生成最终的可执行目标文件。4、 根据权利要求3所述的双宽度指令系统的性能无损切换方法,其特征在于,所述状态切换指令的选取步骤进一步包括:步骤S101,分析工具维护两块存储空间来记录每个指令的权重;步骤S102,选择出现频率最高的候选指令加入到相应状态切换指令集合中;步骤S103,对于程序中的每条候选指令,如果该候选指令与目前状态切换集合中的一条指令有“可转换”关系,则存储空间中的相应项的值加一;步骤S104,选择数组中值最大的项,并将它加入状态切换指令集合中,如果状态切换指令集合中指令数少于给定总指令数,则转到步骤S103;否则,结束。5、 根据权利要求3所述的双宽度指令系统的性能无损切换方法,其特征在于,所述微体系结构的设计主要是对译码结构的设计,该译码结构的设计方式包括统一译码和分离译码两种方式。6、 根据权利要求5所述的双宽度指令系统的性能无损切换方法,其特征在于,所述统一译码方式是将从内存取到的32位指令首先通过16位解码器和状态切换指令预解码器转换为相应的32位指令和状态设置信号,之后和原32位指令一起通过多路选择器选择出当前指令,最后统一由32位译码器进行最终的译码;所述分离译码方式,是将指令首先由16位、状态切换指令和32位指令译码器分别译码,最后由多选器选择最终的译码结果。7. 根据权利要求3所述的双宽度指令系统的性能无损切换方法,其特征在于,所述微体系结构的设计步骤中,混合编码指令序列是一条“宽-窄”状态切换指令开始,中间有若干条16位指令,最后以一条“窄-宽”状态切换指令作为结束。8、 根据权利要求3所述的双宽度指令系统的性能无损切换方法,其特征在于,所述混合编码生成步骤进一步包括:步骤S301,标记可以转换的指令;步骤S302,将所述可以被转换的指令相邻排列,标记确定要被转换的指令;步骤S303,重新计算装载或跳转目标地址,输出最终的可执行目标文件。9、 根据权利要求4所述的双宽度指令系统的性能无损切换方法,其特征在于,所述步骤S103中,所述“可转换”关系的定义如下:当A是“宽-窄”状态切换“候选指令”且B是“窄-宽”状态切换“候选指令”,且在程序二进制代码中二者之间的所有指令都是“可被16位表示的”,则指令A与指令B构成所述“可转换”关系。10、 一种实现上述权利要求1~9中任一项所述方法的应用系统,其特征在于,包括一状态切换装置,该状态切换装置进一步包括:一“宽-窄”状态切换模块,用于控制一“宽-窄”状态切换指令集合中的指令在执行普通操作的同时,还执行切换处理器状态至窄指令状态的功能;及一“窄-宽”状态切换模块,用于控制一“窄-宽”状态切换指令集合中的指令在执行普通操作的同时,还执行切换处理器状态至宽指令状态的功能。
一种双宽度指令系统的性能无损切换方法及其应用系统 技术领域 本发明属于双宽度指令系统设计领域,特别涉及一种双宽度指令系统的性能无损切换方法及其应用系统。 背景技术 为了提高代码密度,人们提出了双宽度指令系统的概念,并成功应用于现代处理器设计中。具有双宽度指令系统的处理器,如ARM和MIPS,一般同时支持两套不同长度的定长指令系统,一个普通长度(一般为32位),一个较窄(一般为16位)。尽管较窄的指令系统可以减小代码大小,从而带来存储体系性能和能耗等方面的好处,但是由于它可以提供的编码空间更有限,因而限制了操作码、寄存器操作数及立即数域的长度,从而在很多情况下,可以用一条普通长度指令表达的操作,需要用两条甚至更多条较窄的指令表示,因而引起了性能方面的额外开销。 在这种情况下,提出了混合编码的思想,以充分利用两套指令系统的特点。双宽度指令系统及混合编码技术已经成功应用于现代处理器设计中。目前双宽度指令系统的状态切换机制有三大类: 1)使用跳转切换指令进行状态切换。 请参考:L.Goudge,S.Segars.Thumb:Reducing the Cost of 32-bit RISCPerformance in Portable and Consumer Applications.Proceedings of the 41stIEEE International Computer Conference,pp.176,1996,该文献公开了一种使用跳转切换指令进行状态切换的机制,这种方法被采用在MIPS与MIPS16e、Arm和Thumb中。例如在ARM处理器中,处理器根据CPSR中的T位来确定指令类型:当T=0时为ARM指令;当T=1时为Thumb指令。处理器复位后,ARM启动并执行ARM指令;通过执行一条交换转移指令BX可以转换到Thumb指令;在Thumb状态时,执行Thumb BX指令则可以转换到ARM状态。进入异常中断总是进入ARM状态,且异常中断总是返回到异常发生前的状态。 效果:在流水线计算机中,跳转指令往往会带来较大的开销,因此带来较大的使用跳转指令进行状态切换的开销。因此该方法比较适用于粗粒度的状态切换,如函数级别的状态切换。但粗粒度混合编码的缺点在于,对于一个函数,它只能全部编译为16位,或全部编译为32位。但一个函数内部,从使用的指令功能上看,存在适合编译为16位或不适合编译为16位的区域;从代码执行频率上看,也通常存在冷、热代码的区别。粗粒度混合编码限制了编译工具链进一步根据不同性质代码选择编码方案的程度。 2)使用特定的状态切换指令进行状态切换。 请参考:S.Lee,J.Lee,S.Min,J.Hiser and J.W.Davidson,CodeGeneration for a Dual Instruction Set Processor based on Selective CodeTransformation.Proceedings of the 7th International Workshop on Software andCompilers for Embedded Systems,pp.33-48,Sep.2003,该文献中公开了一种使用特定的状态切换指令进行状态切换的机制。这类方法添加额外的显式状态切换指令,该指令的作用是将CPU状态在32位和16位之间切换。尽管这条指令只需要1个额外的周期,与类似BX的状态切换指令相比大大减少了对性能的损失,但由于细粒度混合编码中,状态切换频繁发生,还是会带来较大的性能开销。 3)将两种宽度的指令系统在同一编码空间中编码。 请参考:A.Halambi,A.Shrivastava,P.Biswas,N.Dutt,A.Nicolau.AnEfficient Compiler Technique for Code Size Reduction using ReducedBit-width ISAs.Design Automation and Test in Europe,March 2002,该文献提供了一种将两种宽度的指令系统在同一编码空间中编码的方法,这种方法不需要显式的状态切换,相当于重新设计新的指令系统。例如Halambi等人提出的方法,指令系统最高位为1,则表示32位,最高位为0,则表示16位。这种方法的缺点是将32位指令空间分了一半给16位,限制了32位指令系统的表达能力,同时不能与原指令系统兼容。Thumb2的方法也属于这一类。 综上所述,已有的双宽度指令系统切换存在着不能与原指令系统兼容或降低程序运行性能的问题。 发明内容 本发明所要解决的技术问题在于,提供一种双宽度指令系统的性能无损切换方法及其应用系统,使其可以在减小代码大小的同时不会降低代码性能。 为达到上述目的,本发明提供的双宽度指令系统的性能无损切换方法,其特征在于,该方法是在双宽度指令系统中引入两个状态切换指令集合,该两个状态切换指令集合分别“宽-窄”状态切换指令集合和“窄-宽”状态切换指令集合,所述状态切换指令集合中的指令在执行普通操作的同时,还执行切换处理器运行状态的功能。 上述双宽度指令系统的性能无损切换方法,其特征在于,所述“宽-窄”状态切换指令集合中的指令是在32位指令的程序中频繁出现,该指令在执行普通操作的同时,还执行切换处理器状态至窄指令状态的功能;所述“窄-宽”状态切换指令集合是在可用16位指令表示的程序片段最后频繁出现,在执行普通操作的同时,还执行切换处理器状态至宽指令状态的功能。 上述双宽度指令系统的性能无损切换方法,其特征在于,进一步包括以下步骤: 状态切换指令的选取步骤,用于由代码分析工具依据设定的算法选择符合设定条件的指令加入到状态切换指令集中; 微体系结构的设计步骤,用于在体系结构中引入状态切换指令集合以及双宽度指令系统混合编码的结构设计; 混合编码生成步骤,用在不破坏原有指令语义序列的基础上,将所有可以转换的指令序列用状态切换指令和窄指令表示,生成最终的可执行目标文件。 上述双宽度指令系统的性能无损切换方法,其特征在于,所述状态切换指令的选取步骤进一步包括: 步骤S101,分析工具维护两块存储空间来记录每个指令的权重; 步骤S102,选择出现频率最高的候选指令加入到相应状态切换指令集合中; 步骤S103,对于程序中的每条候选指令,如果该候选指令与目前状态切换集合中的一条指令有“可转换”关系,则存储空间中的相应项的值加一; 步骤S104,选择数组中值最大的项,并将它加入状态切换指令集合中,如果状态切换指令集合中指令数少于给定总指令数,则转到步骤S103;否则,结束。 上述双宽度指令系统的性能无损切换方法,其特征在于,所述微体系结构的设计主要是对译码结构的设计,该译码结构的设计包括统一译码和分离译码两种方式。 上述双宽度指令系统的性能无损切换方法,其特征在于,所述统一译码方式是将从内存取到的32位指令首先通过16位解码器和状态切换指令预解码器转换为相应的32位指令和状态设置信号,之后和原32位指令一起通过多路选择器选择出当前指令,最后统一由32位译码器进行最终的译码;所述分离译码方式,是将指令首先由16位、状态切换指令和32位指令译码器分别译码,最后由多选器选择最终的译码结果。 上述双宽度指令系统的性能无损切换方法,其特征在于,所述微体系结构的设计步骤中,混合编码指令序列是一条“宽-窄”状态切换指令开始,中间有若干条16位指令,最后以一条“窄-宽”状态切换指令作为结束。 上述双宽度指令系统的性能无损切换方法,其特征在于,所述混合编码生成步骤进一步包括: 步骤S301,标记可以转换的指令; 步骤S302,将所述可以被转换的指令相邻排列,标记确定要被转换的指令; 步骤S303,重新计算装载或跳转目标地址,输出最终的可执行目标文件。 上述双宽度指令系统的性能无损切换方法,其特征在于,所述步骤S103中,所述“可转换”关系的定义如下:当A是“宽-窄”状态切换“候选指令”且B是“窄-宽”状态切换“候选指令”,且在程序二进制代码中二者之间的所有指令都是“可被窄指令(例如16位指令)表示的”,则指令A与指令B构成所述“可转换”关系。 进一步的,本发明还提供了一种实现上述方法的应用系统,其特征在于,包括一状态切换装置,该状态切换装置进一步包括: 一“宽-窄”状态切换模块,用于控制一“宽-窄”状态切换指令集合中的指令在执行普通操作的同时,还执行切换处理器状态至窄指令状态的功能;及 一“窄-宽”状态切换模块,用于控制一“窄-宽”状态切换指令集合中的指令在执行普通操作的同时,还执行切换处理器状态至宽指令状态的功能。 与现有技术相比,本发明提供的双宽度指令系统的性能无损切换机制,通过在原指令系统中引入两个精简的状态切换指令集合,分别为“宽-窄”状态切换指令集合和“窄-宽”状态切换指令集合。“宽-窄”状态切换指令集合中的指令在宽指令(如32位指令)的程序中频繁出现,在执行如加法、跳转等普通操作的同时,还能起到将处理器状态切换至窄指令状态的作用;“窄-宽”状态切换指令集合则在可用窄指令(如16位指令)表示的程序片段最后频繁出现,同样在执行加法等普通操作的同时,可将处理器状态切换至宽指令状态。该机制可以很好的支持细粒度混合编码,能够在不降低程序运行性能的同时,有效减小代码的大小。 附图说明 图1为本发明双宽度指令系统的性能无损切换机制的主要实施流程; 图2为本发明中状态切换指令的选取流程; 图3为本发明中混合编码的生成流程; 图4为本发明中微体系结构设计中统一译码结构示意图; 图5为本发明中微体系结构设计中分离译码结构示意图。 具体实施方式 下面结合实施例对本发明做详细的描述,以进一步说明本发明的目的、方案及功效。 本发明基于不降低程序运行性能的考虑,提出了一种新的细粒度混合编码的方法。以5级流水的32位单发射处理器为例,给定32位和16位指令系统,不增加程序执行周期,最好的保证就是不要增加动态执行的指令数。在不增加动态执行的指令数的前提下,混合编码能够达到的最佳效果是,在最终的目标程序中,一条指令所表示的操作如果在16位中也可以由一条指令来表示,则该指令使用16位编码;否则,仍然使用32位编码。因此,需要提供一种不需要耗费处理器周期的方法,在需要状态切换的时候通知CPU。本发明提出一种无损切换机制,在宽指令系统(原指令系统)中引入两个精简的状态切换指令集合,分别为“宽-窄”状态切换指令集合和“窄-宽”状态切换指令集合。该状态切换指令集合里的指令在程序中频繁出现,其在执行普通操作(例如加法、跳转等)的同时,还能起到切换处理器状态的作用。其中,“宽-窄”状态切换指令集合中的指令在32位指令的程序中频繁出现,在执行如加法、跳转等普通操作的同时,还能起到将处理器状态切换至窄指令状态的作用;“窄-宽”状态切换指令集合则在可用16位指令表示的程序片段最后频繁出现,同样在执行加法等普通操作的同时,可将处理器状态切换至宽指令状态。“宽-窄”状态切换指令集合和“窄-宽”状态切换指令集合中包含的指令的普通操作功能可以有交集,甚至完全一致。本发明以UniCore体系结构为例设计并实现了这样一个平台,取得了不错的效果,但本发明的机制并不限于UniCore体系结构,其同样适用于其它体系结构。参考图1~图3,具体方法如下。 步骤S10:状态切换指令的选取 状态切换指令可以由代码分析工具来选择。由于状态切换指令的选择依赖于产生代码的编译器,尤其需要考虑在用来表示寄存器号的位域不足以表示全部寄存器时,一条指令要表示哪组寄存器,因此所分析的二进制代码和最终在系统上运行的代码最好是使用相同的编译器和编译优化选项。可以选择的状态切换指令总数确定下之后,及确定下了状态切换指令需要多少位表示操作码和操作数。设状态切换指令可用的操作数类型编码空间为m位。参考图2,描述了状态切换指令的选取流程图,本发明使用如下的方法选择状态切换指令。 步骤S101:代码分析工具维护两块存储空间WNINST[OP][ARGTYPE]和NWINST[OP][ARGTYPE]来分别记录“宽-窄”状态切换的候选指令和“窄-宽”状态切换的候选指令的权重。指令被根据操作码和操作数类型进行分类。对于每个操作码,本发明根据它可以带有的操作数组合的不同进一步分为若干类,如下表1所示为常见精简指令系统计算机(RISC)指令格式分类: 3寄存器操作数指令 2寄存器操作数指令 1寄存器和1立即数操作数指令 1立即数操作数指令......表1指令格式分类 该表以常见RISC体系结构为例,列出了可以被m位编码的操作数类型(ARGTYPEs)。如果一条指令的操作数属于某一个类型,称之为一个“候选指令”,WNINST[OP][ARGTYPE]数组和NWINST[OP][ARGTYPE]数组中会分别存在对应的一项。如果一条指令的操作数不属于表中所列任何类型,则忽略该条指令。如果一条指令可以被一条16位指令表示,则称之为“可被16位表示的”。 步骤S102:在指令选择阶段的开始,状态切换指令集合为空。通过将所有可以用m位表示的“候选指令”出现次数排序,选择出现次数最多的“候选指令”将其加入到“宽-窄”状态切换指令集合中。其中候选指令为可用状态切换指令所有比特位数编码表示的指令。 步骤S103:对于程序中的每条候选指令,如果它与目前状态切换集合中的一条指令有“可转换”关系,则WNINST[OP][ARGTYPE]或NWINST[OP][ARGTYPE]数组中的相应项的值加一。“可转换”关系定义如下:如果指令A与指令B构成“可转换”关系,当且仅当A是“宽-窄”状态切换“候选指令”且B是“窄-宽”状态切换“候选指令”,且在程序二进制代码中二者之间的所有指令都是“可被16位表示的”。即,如果指令A和指令B之间存在任何指令,则从A到B的指令序列可以完全一一由16位指令表示。一些指令可能属于多于一种指令格式类型。如果这样,所有相关项的值均被加一。 步骤S104:算法选择WNINST[OP][ARGTYPE]数组和NWINST[OP][ARGTYPE]数组中具有最大值的项,并将它加入相应的状态切换指令集合中,即WNINST[OP][ARGTYPE]数组中选出的项加入“宽-窄”状态切换指令集合中,NWINST[OP][ARGTYPE]数组中选出的项加入“窄-宽”状态切换指令集合中。如果状态切换指令集合中指令数少于总状态切换指令数,则转到步骤S103;否则,算法结束。 步骤S20:微体系结构的设计 在描述处理器的微体系结构的设计之前,首先对处理器流水线各阶段的简要称谓进行概要介绍。以常见的五级流水按序执行的处理器为例,其流水线可以分为五个阶段:IF(取指)、DEC(译码及读寄存器堆)、EXE(执行或抵制运算)、MEM(访问数据存储)和WB(写回)。本发明只需要修改其中的译码阶段和相应的信号。当译码器遇到“宽-窄”状态切换指令时,将指令编码中第16-31位译码为状态切换指令,同时在这一周期的末尾将CPU状态置为“16位-准备”状态。下一周期开始,CPU不会取新的指令,而将已经取到的这条指令的第0-15位作为一条16位指令来进行译码。如果这条16位的指令是“窄-宽”状态切换指令,CPU状态在这一周期末被设置为“32位”状态;否则,CPU状态被设置为“16位”状态,流水线像普通流水线中执行16位指令一样执行下去,直到遇到一条“窄-宽”状态切换指令,将CPU状态切换回“32位”状态。由于代码变换在每个基本块之内进行,编译工具链可以确定在两条状态切换指令之间的16位指令中没有跳转指令或者其它修改PC的指令。译码部分结构设计可以有两种,一种为统一译码,参考图4,描述了统一译码的具体方式,将从内存取到的32位指令首先通过16位解码器和状态切换指令预解码器转换为相应的32位指令和状态设置信号,之后和原32位指令一起通过多路选择器选择出当前指令,最后统一由32位译码器进行最终的译码;另一种为分离译码,参考图5,描述了分离译码的具体方式,即指令首先由16位、状态切换指令和32位指令译码器分别译码,最后由多选器选择最终的译码结果。 一个典型的混合编码指令序列以一条“宽-窄”状态切换指令开始(这条指令在执行自己的计算功能的同时,通知处理器将状态切换到16位),中间有若干条“16位”指令,最后以一条“窄-宽”状态切换指令作为结束(这条指令在执行自己的计算功能的同时,通知处理器将状态切换到32位)。代码在存储空间中的布局情况如表2所示。 表2混合编码在存储中的布局 混合编码指令序列在流水线中的情况如下表3所示。 表3改进的混合编码序列在5级流水线中的执行情况 步骤S30:混合编码生成机制 在以上的处理器设计的基础上,本发明给出在链接时刻进行细粒度混合编码的方法。在链接时刻,指令和数据的地址已经确定,因此一条带有相对偏移做操作数的32位指令(例如条件跳转或load/store)是否可以被16位指令表示已经可以知道(由于代码密度增大,经过混合编码后还可能出现新的可以被16位表示的指令,这里本发明忽略这些指令)。同时,在编译工具链基于32位指令系统体系结构产生汇编代码之后进行指令编码的选择,可以保证静态代码和动态代码指令数语与单纯用32位指令的代码相同,这样可以保证在提高代码密度的同时,不会降低性能。 本发明中混合编码生成算法的基本思想是在代码中识别可以转换的指令,重新调度代码,在保证不破坏原依赖关系的基础上使得这些可以转换的指令被连续放置,以增加可以转换的指令,最后将所有可以转换的指令序列用状态转换指令和“16位”指令表示。它包括在基本块内进行的两个主要部分。 参考图3示出了混合编码生成步骤的具体流程: 步骤S301:标记可以转换的指令。优化器依次扫描每条指令,将所有可以转换为状态转换指令或“16位”指令的指令进行标记。如果是跳转指令或load/store指令,则计算当前的相对偏移,以判断该指令是否可以被状态转换指令或“16位”指令表示。在许多指令被转换为16位指令后,实际的相对偏移可能会变小,但不会增大。因此如果当前可以用16位表示,在转换以后也必然可以被表示。 步骤S302:将可以被转换的指令尽可能相邻排列,标记确定要被转换的指令。这一过程步骤如下: i分析基本块内指令间的数据相关。如果两条指令间存在读后写、写后读或写后写相关,后者必须在前者后执行。 ii初始的CSR(代码大小减小:Code Size Reduction)被设置为0。对于任意符合依赖关系的线性指令顺序,即对于任意符合拓扑排序顺序的指令顺序,优化器通过计算可以被转换为16位指令序列的指令数,计算可以减少的代码大小。如果减少量比当前CSR大,CSR被设置为该减少量,并记录当前的指令排列顺序。 可转换的指令数计算方法如下:优化器从基本块第一条指令开始逐条扫描指令。遇到一条可以被转换为“宽-窄”状态切换指令的指令时,标记16位指令序列开始。优化器扫描最长的可转换的指令序列,标记其中的每条指令为“窄-宽”状态切换指令或“16位”指令。然后继续扫描,寻找新的可转换指令序列,直到基本块末尾。 由于一个典型基本块中指令数一般不超过10,同时满足依赖关系的可能的拓扑排序数有限,因此这一过程可以看做O(N)量级,N为指令数,不会导致巨大时间浪费。 步骤S303:重新计算程序中load/store指令涉及的地址或跳转指令的目标地址,输出最终的可执行目标文件。 下面以UniCore处理器为例,在UniCore平台上实践本发明所述的双宽度指令系统状态切换方法。运用本发明方法中状态切换指令选取方法,为UniCore平台选取的切换指令集合如下表4所示: 表4:“宽-窄”状态切换指令集合 表5:“窄-宽”状态切换指令集合 其中signed imme表示有符号立即数,rd,rm,rn,rs表示寄存器,其中rd为目标寄存器。 这些状态切换指令除执行数据移动、比较、装载和跳转等功能外,还会切换处理器的运行状态。在选定状态切换指令后,根据该指令集合,修改了编译工具链,生成混合编码的程序。 本发明还提供了一种实现上述方法的应用系统,包括一状态切换装置,该状态切换装置进一步包括:一“宽-窄”状态切换模块,用于控制一“宽-窄”状态切换指令集合中的指令在执行普通操作的同时,还执行切换处理器状态至窄指令状态的功能;及一“窄-宽”状态切换模块,用于控制一“窄-宽”状态切换指令集合中的指令在执行普通操作的同时,还执行切换处理器状态至宽指令状态的功能。 对于其他体系结构和其它应用,同样可以采用本发明中所述状态切换机制,通过在本发明中所述的状态切换指令选取方法、微体系结构的设计和混合编码生成方法,完成从硬件到软件的整体设计和实现。 下面给出对本发明进行测评的效果: 1)实验环境 使用GNU工具链(gcc 3.2.1)和newlib C库。Newlib是一个轻量级的C库,主要应用于嵌入式平台。本发明在mediabench中选择了一些程序作为评测程序。GCC编译优化选项为“-O2”。所有的程序都被编译为三个可执行文件:UniCore32、UniCore16和本发明32/16位混合编码。本发明对每种可执行文件的代码大小进行了统计,并用sim-pipeline进行了模拟评测。Sim-pipeline是一个周期级模拟器,由simplescalar中的sim-outorder模拟器修改而成,模拟UniCore的五级流水。主要的模拟配置参数见表6。评测程序见表7。 转移预测策略 预测不发生 一级指令Cache 容量 8K 相连度 2 块大小 32Bytes 替换策略 先进先出 一级数据Cache 容量 8K 相连度 4 块大小 32Bytes 策略 先进先出,写回,写分配表6模拟配置参数 评测程序 描述 adpcm 自适应差分脉冲编码调制的编码与解码 epic 一种有损图像压缩算法的压缩与解压缩 pegwit 一种公钥加密认证方法的加密和解密 jpeg 一种标准图像压缩格式的编码与解码 mesa OpenGL的一个3D图形库核心(mipmap/osdemo/ texgen) mpeg2 一种高质量数字视频标准的编解码表7评测程序 2)实验结果 本实验从代码大小、动态执行的指令数、程序运行的周期数三个方面对本发明所述的方法进行了评估。对于每一项指标,都对比了UniCore32和采用本文提出的切换机制的混合编码方法。对于代码大小,本文的方法可以降低11%到41%。对于所有的动态执行指令数,本文的方法与UniCore32相同。对于程序运行的周期数,本文的方法均不会低于UniCore32,范围从99%到100%。这是由于本发明的方法可以保证运行的指令数与UniCore32相同,而由于降低了代码大小,在一些情况下会减缓Cache的压力,因而取得比UniCore32略好的性能。 实验结果表明,本文提出的双宽度指令系统状态切换机制可以很好地支持细粒度混合编码,能够在不降低程序运行性能的同时,有效降低代码的大小。 虽然本发明已以较佳实施例揭露如上,然其并非用以限定本发明,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
《一种双宽度指令系统的性能无损切换方法及其应用系统.pdf》由会员分享,可在线阅读,更多相关《一种双宽度指令系统的性能无损切换方法及其应用系统.pdf(19页珍藏版)》请在专利查询网上搜索。
本发明公开了一种双宽度指令系统的性能无损切换方法及其应用系统,该方法是在双宽度指令系统中引入两个状态切换指令集合,该两个状态切换指令集合分别“宽-窄”状态切换指令集合和“窄-宽”状态切换指令集合,所述状态切换指令集合中的指令在执行普通操作的同时,还执行切换处理器运行状态的功能。 。
copyright@ 2017-2020 zhuanlichaxun.net网站版权所有经营许可证编号:粤ICP备2021068784号-1