一种实现间接转移关联软件预测的方法及装置与流程

文档序号:12664236阅读:199来源:国知局
一种实现间接转移关联软件预测的方法及装置与流程

本发明涉及动态翻译技术,尤指一种动态翻译系统中实现间接转移关联软件预测的方法及装置。



背景技术:

动态二进制翻译技术(dynamic translation)广泛应用于指令系统模拟、二进制插桩、动态优化、程序行为分析等领域。在多种应用场景下,性能是翻译系统需考虑的重要指标。其中,控制转移指令的处理方法是影响动态翻译系统性能的重要因素。当控制转移指令执行时,其获取到的转移目标是一个源程序计数器地址(SPC,Source Program Counter,简称为源地址),需要将其转换为相应的目标程序计数器地址(TPC,Target Program Counter,简称为目标地址),翻译系统才可正常执行。控制转移指令一般可分为条件转移指令、直接跳转指令与间接转移指令(IB,Indirect Branch)。对于转移目标固定的条件转移指令与直接跳转指令,翻译系统可使用代码块链接技术来降低开销;而间接转移指令的转移目标在运行时才可以确定,且转移目标不固定,因此每次执行时均需进行一次源地址(SPC)到目标地址(TPC)的地址转换操作。图1为现有翻译系统处理间接转移指令的流程示意图,如图1所示,由于间接转移指令在每次执行时都需根据其当前的转移目标进行地址转换,因此进行大量的地址转换操作导致了巨大的性能开销,使得间接转移指令的处理过程成为主要的系统性能开销。

动态二进制翻译系统一般会维护一个SPC-TPC的映射表,在源地址产生后,运行一个哈希(Hash)查表例程来进行地址转换,然后再跳转至相应的目标地址。但进行一次哈希查表需要10条以上指令,导致较大的开销。

软件预测法可以在一定程度上避免哈希查表带来的额外开销,即在转移目标的SPC产生后,进入一条软件预测链与预设的若干目标进行匹配,若匹配成功则直接跳转,称为预测成功。但是,软件预测法的预测准确率一般较低,从而制约了其对整体性能的提升。图2为现有软件预测的方法示意图,如图2所示,在获取到间接转移指令的转移目标的源地址后,需要进行若干次的比较-跳转的预测操作。其中,每一个比较跳转语句称为一个预测槽(Prediction Slot),所比较的目标称为预设目标,多个串行比较的预测槽称为一条“预测链”。若预测成功,则直接跳转到相应的目标代码块,如果预测失败,则按照图1所示的现有的翻译系统处理间接转移指令的方法进行处理。现有软件预测法的主要问题是预测准确率较低,直接增加软件预测链上的预测槽个数可一定程度上提升准确率,但同时增加了预测时需进行的“比较”操作的次数,导致单次预测开销上升,无法提升性能。

此外,目前还出现了一些软硬件协同的优化方案,如在CPU流水线中新增一个跳转地址查找表,或者新增一个按内容访问的相联存储器(CAM,Content-Associated Memory),但这些方案均需改动硬件或指令系统,通用性较差,无法直接在已有平台上实现。

综上所述,在现有的动态翻译系统中,间接转移指令往往占用大量的系统性能开销,现有的处理方法存在指令开销过大、预测准确率低及平台应用的通用性较差等问题,间接转移指令占用主要系统开销的问题依旧未得到有效处理。



技术实现要素:

为了解决上述技术问题,本发明提供一种实现间接转移关联软件预测的方法及装置,能够简单、有效的降低间接转移指令对系统性能开销的占用。

为了达到上述发明目的,本发明公开了一种实现间接转移关联软件预测的方法,包括:

对每条间接转移指令进行软件预测,当软件预测失败次数大于热点指令阈值时,确定该间接转移指令为难预测的热点间接转移指令;

对所述难预测的热点间接转移指令的控制流图进行宽度遍历,获取到达该热点间接转移指令的路径;

当获取到达热点间接转移指令的路径满足预先设置的路径条数时,为到达所述热点间接转移指令的每一路径复制相应的代码副本;

为每一代码副本在预测槽中填入相应的预测目标,以形成相应的软件预测链。

进一步地,为每一代码副本在预测槽中填入相应的预测目标具体包括:为每一代码副本的热点间接转移指令,统计其转移目标,当转移目标出现的次数大于热点目标阈值时,在每一代码副本的预测槽填入相应的预测目标。

进一步地,当软件预测链形成后,该方法还包括:在软件预测失败时,进入哈希Hash查表例程。

另一方面,本申请还提供一种实现间接转移关联软件预测的装置,包括:预测判断单元、路径获取单元、代码复制单元及预测链单元;其中,

预测判断单元,用于对每条间接转移指令进行软件预测,当预测失败次数大于热点指令阈值时,确定所述间接转移指令为难预测的热点间接转移指令。

路径获取单元,用于当所述间接转移指令为难预测的热点间接转移指令时,对该热点间接转移指令的控制流图进行宽度遍历,获取到达该热点间接转移指令的路径;

代码复制单元,用于当获取到达所述热点间接转移指令的路径满足预先设置的路径条数时,为到达热点间接转移指令的每一路径复制相应的代码副本;

预测链单元,用于为每一代码副本在预测槽中填入相应的预测目标,以形成相应的软件预测链。

进一步地,预测链单元具体用于,为每一代码副本的热点间接转移指令,统计其转移目标,当转移目标出现的次数大于热点目标阈值时,在每一代码副本的预测槽填入相应的预测目标,以形成相应的软件预测链。

进一步地,该装置还包括查表单元,用于当软件预测链形成后,在软件预测失败时,进入哈希查表例程。

本申请技术方案包括:对每条间接转移指令进行软件预测,对每条间接转移指令进行软件预测,当软件预测失败次数大于热点指令阈值时,确定该间接转移指令为难预测的热点间接转移指令;对难预测的热点间接转移指令的控制流图进行宽度遍历,获取到达该热点间接转移指令的路径;当获取到达热点间接转移指令的路径满足预先设置的路径条数时,为到达热点间接转移指令的每一路径复制相应的代码副本;为每一代码副本在预测槽中填入相应的预测目标,以形成相应的软件预测链。本发明通过对间接转移指令进行代码复制,设置多个代码副本,为每一代码副本建立相应的软件预测链,并使来自于不同路径的程序控制流进入到不同的代码副本,实现了低开销、高预测准确率的关联软件预测过程。从而在不需要对平台进行硬件改造下,降低了处理间接转移指令所需的开销,改善了系统性能。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1为现有翻译系统处理间接转移指令的流程示意图;

图2为现有软件预测的方法示意图;

图3为本发明实现间接转移关联软件预测的方法的流程图;

图4为本发明实现间接转移关联软件预测的装置的结构框图;

图5为本发明实现代码副本复制前后间接转移关联软件预测的实施例的示意图;

图6为本发明实现间接转移关联软件预测的实施例方法的示意图。

具体实施方式

图3为本发明实现间接转移关联软件预测的方法的流程图,如图1所示,包括:

步骤300、对每条间接转移指令进行软件预测,当软件预测失败次数大于热点指令阈值时,确定该间接转移指令为难预测的热点间接转移指令。

需要说明的是,采用首次命中法选取预测目标,进行软件预测失败次数统计,首次命中法为本领域技术人员熟知的一种方法,即将第一个出现的转移目标作为预测目标。另外,间接转移指令在实际应用过程中,运行次数可能达到上亿次,采用首次命中法选取预测目标后,如果软件预测在运行过程中,失败次数不大于热点指令阈值,则该间接转移指令会一直按照传统方法继续运行。

需要说明的是,根据相关系统的经验,热点指令阈值一般设为100左右,根据实际情况可以进行相应的调整。

步骤301、对难预测的热点间接转移指令的控制流图进行宽度遍历,获取到达该间接转移指令的路径。

需要说明的是,在对源二进制代码进行翻译时,动态二进制翻译系统可根据代码块之间的跳转关系形成代码控制流图。待需要对某间接转移指令进行关联软件预测时,系统会从该间接转移指令所在的代码块为起点节点,向上对控制流图进行宽度遍历,以收集到达该间接转移指令的各条代码路径。对控制流图进行宽度遍历,获取路径等属于本领域技术人员的惯用技术手段。

步骤302、当获取到达热点间接转移指令的路径满足预先设置的路径条数时,为到达热点间接转移指令的每一路径复制相应的代码副本。

需要说明的是,由于大多数间接转移指令拥有20个以下的转移目标,因此,根据技术经验,一般设置路径条数为10左右。

步骤303、为每一代码副本在预测槽中填入相应的预测目标,以形成相应的软件预测链。

本步骤中,为每一代码副本在预测槽中填入相应的预测目标,以形成相应的软件预测链具体包括:为每一代码副本的热点间接转移指令,统计其转移目标,当转移目标出现的次数大于热点目标阈值时,则该转移目标被识别为热点目标,并被填入该副本的预测槽中,以形成相应的软件预测链。

每一个代码副本与预测目标是一一对应的,每一代码副本在预测槽中填入的相应的预测目标,相对于其他代码副本,每一代码副本的预测目标是独立的。

需要说明的是,根据相关系统的经验,热点目标的阈值一般设为50左右,根据实际情况可以进行相应的调整。

当软件预测链形成后,该方法还包括:在软件预测失败时,进入哈希(Hash)查表例程。

需要说明的是,每发现一个热点目标,即会向预测槽中填入该目标,每个预测槽仅能对应一个预测目标。当所有的预测槽均被填入预测目标后,则称为“填满”。传统的软件预测法的准确率较低,是因为其预测槽个数小于转移目标的个数。而单纯的增加预测槽,会增加预测时需遍历的预测槽的个数。虽能提升预测率,但由于预测开销上升,难以提升性能。关联软件预测法为间接转移指令设置了多个并行预测链,但在预测时并不会遍历所有的预测链,而是会根据路径历史信息选择其中一个预测链进行遍历,因此并未增加当次预测时所遍历的预测槽个数,从而不增加预测开销。

通过对间接转移指令的路径进行检测,当满足预设的进行间接转移指令处理条件时,为每一路径复制相应的代码副本,并未每一代码副本建立相应的关联软件预测链,实现了在不需要对平台进行硬件改造的同时,降低了间接转移指令对系统开销的大量占用,改善了系统性能。

图4为本发明一种实现间接转移关联软件预测的装置的结构框图,如图4所示,包括:预测判断单元、路径获取单元、代码复制单元及预测链单元;其中,

预测判断单元,用于对每条间接转移指令进行软件预测,当预测失败次数大于热点指令阈值时,确定间接转移指令为难预测的热点间接转移指令。

路径获取单元,用于当所述间接转移指令为难预测的热点间接转移指令时,对该热点间接转移指令的控制流图进行宽度遍历,获取到达该热点间接转移指令的路径。

代码复制单元,用于当获取到达热点间接转移指令的路径满足预先设置的路径条数时,为到达热点间接转移指令的每一路径复制相应的代码副本。

预测链单元,用于为每一代码副本的预测槽中填入相应的预测目标,以形成相应的软件预测链。

预测链单元具体用于,为每一代码副本的热点间接转移指令,统计其转移目标,当转移目标出现的次数大于热点目标阈值时,在每一代码副本的预测槽填入相应的预测目标,以形成相应的软件预测链。

本发明装置还包括查表单元,该装置还包括查表单元,用于当软件预测链形成后,在软件预测失败时,进入哈希(Hash)查表例程。

以下结合具体实施例,对本发明方法进行更为详尽的说明,实施例只为更为清楚的陈述,并不用于限制本发明的保护范围。

实施例

图5为本发明实现代码副本复制前后间接转移关联软件预测的实施例的示意图,如图5所示,按照进行代码复制的条件的设置,当检测到间接转移指令为难预测的热点间接转移指令时,获取到达间接转移指令的路径。并在获取到达间接转移指令的路径满足预先设置的路径条数时,为到达间接转移指令的每一路径复制相应的代码副本。

图6为本发明实现间接转移关联软件预测的实施例方法的示意图,如图6所示,其中A、B、C、J、C1、J1、C2、J2为相应的代码块A、代码块B、代码块C、代码块J、代码块C1、代码块J1、代码块C2、代码块J2;

首先,对间接转移指令进行检测,判断到间接转移指令为难预测的热点间接转移指令时,为到达热点间接转移指令的每一路径复制相应的代码副本。

然后,为每一代码副本的热点间接转移指令,统计其转移目标,当转移目标出现的次数大于热点目标阈值时,形成其相应的软件预测链,在每一代码副本的预测槽填入相应的预测目标。

需要说明的是,本发明可动态的根据软件预测失败次数对间接转移指令进行分类,对于易预测的间接转移指令或冷指令,使用传统软件预测法也可获得较好的效果,因此本发明仅对难预测的热点间接转移指令进行关联软件预测,进一步降低了系统开销。

虽然本申请所揭露的实施方式如上,但所述的内容仅为便于理解本申请而采用的实施方式,并非用以限定本申请。任何本申请所属领域内的技术人员,在不脱离本申请所揭露的精神和范围的前提下,可以在实施的形式及细节上进行任何的修改与变化,但本申请的专利保护范围,仍须以所附的权利要求书所界定的范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1