著录项信息
专利名称 | 一种使用陷阱指令优化条件转移代码性能的方法及其系统 |
申请号 | CN201010292061.1 | 申请日期 | 2010-09-26 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2011-01-12 | 公开/公告号 | CN101944041A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F9/45 | IPC分类号 | G06F9/45查看分类表>
|
申请人 | 中国科学院计算技术研究所 | 申请人地址 | 北京市海淀区中关村科学院南***
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 中国科学院计算技术研究所 | 当前权利人 | 中国科学院计算技术研究所 |
发明人 | 周舒畅;黄磊;吕方 |
代理机构 | 北京律诚同业知识产权代理有限公司 | 代理人 | 祁建国;梁挥 |
摘要
本发明有关于一种使用陷阱指令优化条件转移代码性能的方法及其系统,其中该方法包括:步骤1,收集程序的轮廓信息,根据轮廓信息获取符合条件的分支指令;步骤2,将符合条件的分支指令转换成陷阱指令,并将陷阱指令的地址及其陷入地址记入陷阱转移表中;步骤3,生成记入有陷阱指令和陷阱转移表的汇编文件,并根据汇编文件生成程序可执行文件;步骤4,解析程序可执行文件,获取陷阱指令的地址与其陷入地址之间的偏移值,并将偏移值记录到陷阱指令的偏移域中;步骤5,运行记入偏移值后的程序可执行文件,当陷阱指令发生陷入时,对陷入进行响应。采用本发明的方法能够减少分支指令的处理时间,提高处理器流水线的吞吐率,获得性能提高。
1.一种使用陷阱指令优化条件转移代码性能的方法,其特征在于,包括:
步骤1,收集程序的轮廓信息,根据所述轮廓信息获取符合条件的分支指令;
步骤2,将所述符合条件的分支指令转换成陷阱指令,并将所述陷阱指令的地址及其陷入地址记入在陷阱转移表中;
步骤3,生成记入有所述陷阱指令和所述陷阱转移表的汇编文件,并根据所述汇编文件生成程序可执行文件;
步骤4,解析所述程序可执行文件,获取所述陷阱指令的地址与其陷入地址之间的偏移值,并将所述偏移值记入所述程序可执行文件中的所述陷阱指令的偏移域中;
步骤5,运行偏移值记入后的所述程序可执行文件,当所述陷阱指令发生陷入时,根据所述偏移值或所述陷阱转移表对陷入进行响应;
所述步骤1中,
所述轮廓信息包括所述程序的基本块代码的执行频度和所述分支指令对其两个转移目标的转移概率。
2.根据权利要求1所述的使用陷阱指令优化条件转移代码性能的方法,其特征在于,所述步骤1中,包括:
判断分支指令的一个转移目标的转移概率是否低于设定的阈值,当该分支指令的一个转移目标的转移概率低于该设定的阈值时,将该分支指令作为符合条件的分支指令。
3.根据权利要求1或2所述的使用陷阱指令优化条件转移代码性能的方法,其特征在于,
所述步骤2中,包括:
根据所述符合条件的分支指令极少转移到的转移目标地址,将所述符合条件的分支指令转换成陷阱指令。
4.根据权利要求1或2所述的使用陷阱指令优化条件转移代码性能的方法,其特征在于,
所述步骤2中,包括:
在分支指令转换成陷阱指令后,对需要分支延迟槽指令的体系结构,调整延迟槽指令,并将调整结果记入所述汇编文件中。
5.根据权利要求1或2所述的使用陷阱指令优化条件转移代码性能的方法,其特征在于,
所述步骤4中,包括:
判断所述偏移值是否超出陷阱指令格式偏移量的表示范围,当所述偏移值未超出所述表示范围时,将所述偏移值记入所述偏移域中。
6.根据权利要求1或2所述的使用陷阱指令优化条件转移代码性能的方法,其特征在于,
所述步骤5中,包括:
当所述偏移值不为零时,将所述陷阱指令的地址与所述偏移值相加获得陷入时的陷入地址;或
当所述偏移值为零时,按照所述陷阱指令的地址查询所述陷阱转移表,当找到时,获得陷入地址;或当未找到时,按照原有的陷阱处理程序处理。
7.一种使用陷阱指令优化条件转移代码性能的系统,其特征在于,包括:
分支指令获取模块,用于收集到程序的轮廓信息,根据轮廓信息获取符合条件的分支指令;
分支指令转换模块,连接所述分支指令获取模块,用于将该符合条件的分支指令转换成陷阱指令;
地址记入模块,连接所述分支指令转换模块,用于将陷阱指令的地址及其对应的陷入地址记入陷阱转移表中;
可执行文件生成模块,连接所述分支指令转换模块、所述地址记入模块,用于根据记入有所述陷阱指令、所述陷阱转移表的汇编文件生成程序可执行文件;
偏移值记入模块,连接所述可执行文件生成模块,用于解析所述程序可执行文件,获取所述陷阱指令的地址与其陷入地址之间的偏移值,并将所述偏移值记入所述程序可执行文件中的所述陷阱指令的偏移域中;
内核模块,连接所述可执行文件生成模块,用于运行所述偏移值记入后的所述程序可执行文件,当所述陷阱指令发生陷入时,根据所述偏移值或所述陷阱转移表对陷入进行响应;
所述轮廓信息包括所述程序的基本块代码的执行频度和所述分支指令对两个转移目标的转移概率。
8.根据权利要求7所述的使用陷阱指令优化条件转移代码性能的系统,其特征在于,所述分支指令获取模块,还用于判断分支指令的一个转移目标的转移概率是否低于设定的阈值,当该分支指令的一个转移目标的转移概率低于该设定的阈值时,将该分支指令作为符合条件的分支指令。
9.根据权利要求7或8所述的使用陷阱指令优化条件转移代码性能的系统,其特征在于,
所述分支指令转换模块,还用于根据所述符合条件的分支指令极少转移到的转移目标地址,将所述符合条件的分支指令转换成陷阱指令。
10.根据权利要求7或8所述的使用陷阱指令优化条件转移代码性能的系统,其特征在于,
该系统,还包括:
延迟槽指令调整模块,连接所述分支指令转换模块、所述可执行文件生成模块,用于在分支指令转换成陷阱指令后,对需要分支延迟槽指令的体系结构,调整延迟槽指令,并将调整结果记入所述汇编文件中。
11.根据权利要求7或8所述的使用陷阱指令优化条件转移代码性能的系统,其特征在于,
所述偏移值记入模块,还用于判断所述偏移值是否超出陷阱指令格式偏移量的表示范围,当所述偏移值未超出所述表示范围时,将所述偏移值记入所述偏移域中。
12.根据权利要求7或8所述的使用陷阱指令优化条件转移代码性能的系统,其特征在于,
所述内核模块,还用于当所述偏移值不为零时,将所述陷阱指令的地址与所述偏移值相加获得陷入地址;或
当所述偏移值为零时,按照所述陷阱指令的地址查询所述陷阱转移表,当找到时,获得陷入地址;或当未找到时,按照原有的陷阱处理程序处理。
一种使用陷阱指令优化条件转移代码性能的方法及其系统
技术领域
[0001] 本发明涉及编译器的研发和优化技术,特别是涉及一种使用陷阱指令优化条件转移代码性能的方法及其系统。
背景技术
[0002] 分支指令(也称为条件转移指令)是程序中常见的指令类型,它们会带来控制冲突,引起处理器的流水线停顿,是影响到性能的瓶颈之一。因此,从处理器和编译器方面都有相关技术来实现相关的性能优化。
[0003] 现代处理器中大都采用分支预测技术,通过记录分支指令是否成功转移的历史来预测该指令下次执行的目标地址。预测精度与采用的分支转移历史表的大小和程序特征有关。预测技术不可能做到完全准确,当预测错误的时候,必须将流水线清空,然后从正确的地址取指,错误预测会产生很大的代价,并且这种代价随着指令发射宽度和流水线深度的增加而快速增长。
[0004] 编译器采用一些手段改善分支指令的性能,可以采用如下手段:
[0005] (1)控制流优化,根据代码的执行频率改变代码排布,提高指令cache的访问命中率和分支预测准确率;
[0006] (2)条件分支代码外提,将一些条件分支代码外提到循环体之外,减少分支指令的动态数量;
[0007] (3)移除分支指令,不损失语义的前提下,可以利用CMOV条件传送指令和MAX/MIN指令来替换掉部分分支指令;
[0008] (4)合并多个条件以减少条件分支,将多个条件合并成单个“与/或”形式的逻辑关系表达式,提高分支预测性。其中控制流优化是有效的编译器基础优化之一。但对于不能被移除的分支指令,其相关的开销则不能避免。
[0009] 本发明方法是针对极少转移到其一转移目标的分支指令,将其以陷阱指令代替。
本方法减少了分支指令数量,也减少错误预测下清空流水线的开销和分支预测机制的时空开销,对于提供了开销小于分支指令的陷阱指令(在不发生陷入的情况下)且精确异常的体系结构,能因此提高性能。
发明内容
[0010] 本发明的目的在于提供一种使用陷阱指令优化条件转移代码性能的方法及其系统,用于提高处理器流水线效率。
[0011] 为了实现上述目的,本发明提供一种使用陷阱指令优化条件转移代码性能的方法,其特征在于,包括:
[0012] 步骤1,收集程序的轮廓信息,根据所述轮廓信息获取符合条件的分支指令;
[0013] 步骤2,将所述符合条件的分支指令转换成陷阱指令,并将所述陷阱指令的地址及其陷入地址记录在陷阱转移表中;
[0014] 步骤3,生成记录有所述陷阱指令和所述陷阱转移表的汇编文件,并根据所述汇编文件生成程序可执行文件;
[0015] 步骤4,解析所述程序可执行文件,获取所述陷阱指令的地址与其陷入地址之间的偏移值,并将所述偏移值记入所述程序可执行文件中的所述陷阱指令的偏移域中;
[0016] 步骤5,运行偏移值记入后的所述程序可执行文件,当所述陷阱指令发生陷入时,根据所述偏移值或所述陷阱转移表对陷入进行响应。
[0017] 所述的使用陷阱指令优化条件转移代码性能的方法,其中,
[0018] 所述步骤1中,
[0019] 所述轮廓信息包括所述程序的基本块代码的执行频度和所述分支指令对其两个转移目标的转移概率。
[0020] 所述的使用陷阱指令优化条件转移代码性能的方法,其中,
[0021] 所述步骤1中,包括:
[0022] 判断分支指令的一个转移目标的转移概率是否低于设定的阈值,当该分支指令的一个转移目标的转移概率低于该设定的阈值时,将该分支指令作为符合条件的分支指令。
[0023] 所述的使用陷阱指令优化条件转移代码性能的方法,其中,
[0024] 所述步骤2中,包括:
[0025] 根据所述符合条件的分支指令极少转移到的转移目标地址,将所述符合条件的分支指令转换成陷阱指令。
[0026] 所述的使用陷阱指令优化条件转移代码性能的方法,其中,
[0027] 所述步骤2中,包括:
[0028] 在分支指令转换成陷阱指令后,对需要分支延迟槽指令的体系结构,调整延迟槽指令,并将调整结果记入所述汇编文件中。
[0029] 所述的使用陷阱指令优化条件转移代码性能的方法,其中,
[0030] 所述步骤4中,包括:
[0031] 判断所述偏移值是否超出陷阱指令格式偏移量的表示范围,当所述偏移值未超出所述表示范围时,将所述偏移值记入所述偏移域中。
[0032] 所述的使用陷阱指令优化条件转移代码性能的方法,其中,
[0033] 所述步骤5中,包括:
[0034] 当所述偏移值不为零时,将所述陷阱指令的地址与所述偏移值相加获得陷入时的陷入地址;或
[0035] 当所述偏移值为零时,按照所述陷阱指令的地址查询所述陷阱转移表,当找到时,获得陷入地址;或当未找到时,按照原有的陷阱处理程序处理。
[0036] 为了实现上述目的,本发明提供一种使用陷阱指令优化条件转移代码性能的系统,其特征在于,包括:
[0037] 分支指令获取模块,用于收集到程序的轮廓信息,根据轮廓信息获取符合条件的分支指令;
[0038] 分支指令转换模块,连接所述分支指令获取模块,用于将该符合条件的分支指令转换成陷阱指令;
[0039] 地址记入模块,连接所述分支指令转换模块,用于将陷阱指令的地址及其对应的陷入地址记入陷阱转移表中;
[0040] 可执行文件生成模块,连接所述分支指令转换模块、所述地址记入模块,用于根据记入有所述陷阱指令、所述陷阱转移表的汇编文件生成程序可执行文件;
[0041] 偏移值记入模块,连接所述可执行文件生成模块,用于解析所述程序可执行文件,获取所述陷阱指令的地址与其陷入地址之间的偏移值,并将所述偏移值记入所述程序可执行文件中的所述陷阱指令的偏移域中;
[0042] 内核模块,连接所述可执行文件生成模块,用于运行所述偏移值记入后的所述程序可执行文件,当所述陷阱指令发生陷入时,根据所述偏移值或所述陷阱转移表对陷入进行响应。
[0043] 所述的使用陷阱指令优化条件转移代码性能的系统,其中,
[0044] 所述轮廓信息包括所述程序的基本块代码的执行频度和所述分支指令对两个转移目标的转移概率。
[0045] 所述的使用陷阱指令优化条件转移代码性能的系统,其中,所述分支指令获取模块,还用于判断分支指令的一个转移目标的转移概率是否低于设定的阈值,当该分支指令的一个转移目标的转移概率低于该设定的阈值时,将该分支指令作为符合条件的分支指令。
[0046] 所述的使用陷阱指令优化条件转移代码性能的系统,其中,所述分支指令转换模块,还用于根据所述符合条件的分支指令极少转移到的转移目标地址,将所述符合条件的分支指令转换成陷阱指令。
[0047] 所述的使用陷阱指令优化条件转移代码性能的系统,其中,该系统,还包括:
[0048] 延迟槽指令调整模块,连接所述分支指令转换模块、所述可执行文件生成模块,用于在分支指令转换成陷阱指令后,对需要分支延迟槽指令的体系结构,调整延迟槽指令,并将调整结果记入所述汇编文件中。
[0049] 所述的使用陷阱指令优化条件转移代码性能的系统,其中,所述偏移值记入模块,还用于判断所述偏移值是否超出陷阱指令格式偏移量的表示范围,当所述偏移值未超出所述表示范围时,将所述偏移值记入所述偏移域中。
[0050] 所述的使用陷阱指令优化条件转移代码性能的系统,其中,所述内核模块,还用于当所述偏移值不为零时,将所述陷阱指令的地址与所述偏移值相加获得陷入地址;或[0051] 当所述偏移值为零时,按照所述陷阱指令的地址查询所述陷阱转移表,当找到时,获得陷入地址;或当未找到时,按照原有的陷阱处理程序处理。
[0052] 与现有技术相比,本发明的有益技术效果在于:
[0053] 本发明提供的一种使用陷阱指令优化条件转移代码性能的方法,其识别出极少转移到其一转移目标的分支指令,将其以陷阱指令代替。本方法对于提供开销小于分支指令的陷阱指令(在不发生陷入的情况下)且精确异常的体系结构,能因此提高性能,并减少分支预测机制的时空开销。
[0054] 采用本发明的方法能够提高处理器流水线效率,减少了分支指令的处理时间,提高处理器流水线的吞吐率,获得性能提高。
附图说明
[0055] 图1是本发明的使用陷阱指令优化条件转移代码性能的方法流程图;
[0056] 图2a、2b是本发明的分支指令转陷阱指令的转换前后的对比图;
[0057] 图3是本发明的使用陷阱指令优化条件转移代码性能的系统结构图。
具体实施方式
[0058] 以下结合附图和具体实施例对本发明进行详细描述,但不作为对本发明的限定。
[0059] 如图1所示,是本发明的使用陷阱指令优化条件转移代码性能的方法流程图,方法流程包括如下步骤:
[0060] 步骤101,利用编译器中轮廓技术收集到程序的轮廓信息,包括程序的各个基本块代码的执行频度,以及计算得到各条分支指令对其两个转移目标的转移概率。
[0061] 步骤102,根据轮廓信息判断是否存在符合条件的分支指令?如存在,则将该符合条件的分支指令转换成陷阱指令,并进入步骤103,若不存在,直接进入步骤103;
[0062] 在较佳的方案中,以极高转移概率转移到某一转移目标而极少转移到另一转移目标的分支指令,即为转换的对象:符合条件的分支指令。符合条件的分支指令必有一个转移目标的转移概率低于某个阈值。
[0063] 在较佳的方案中,将该符合条件的分支指令转换成陷阱指令,其陷入地址是该符合条件的分支指令极少到达的转移目标地址。并将该陷阱指令地址及其相应的陷入地址记入陷阱转移表。在不发生陷入的情况下,由陷阱指令转到另一转移目标代码处继续执行;在发生陷入的情况下,转移到陷入地址处继续执行。
[0064] 将经常转到的另一转移目标作为new_tgt。如果new_tgt不为该符合条件的分支指令所在基本块的直接后继,则需要在陷阱指令后插入一条无条件跳转指令,以new_tgt作为其跳转目标,如图2a所示。
[0065] 步骤103,对于需要填充分支延迟槽指令的体系结构,调整延迟槽指令。
[0066] 分支延迟槽指令即位于分支指令后面的一条(或者若干条)指令,不管分支发生与否其总是被执行。需要填充分支延迟槽指令的体系结构是指仍然保留了分支延迟槽机制的体系结构,即无论分支发生与否总是执行延迟槽中的指令,主要包括DSP和某些历史较悠久的RISC体系结构,比如MIPS,PA-RISC,SPARC,SHARC DSP等等,而PowerPC,ARM,Alpha,X86体系结构则不属于此范畴。
[0067] 为了保证程序正确性,针对体系结构,对于被转换成的陷阱指令处,需要调整其后的延迟槽指令,这些延迟槽指令是由编译器为原有的分支指令放置的。陷阱指令没有延迟槽指令,位于它后面的延迟槽指令将被删除或者移动位置;同时,为步骤102增加的无条件跳转指令(参见图2b),与转换前的分支指令不同,需要重新填充延迟槽指令。
[0068] 步骤104,编译器生成的汇编文件经过汇编和链接过程生成程序可执行文件(为标准过程,不含有本发明的任何修改)。上述步骤102,103生成结果最终都记入编译器生成的汇编文件中,汇编文件经过汇编和链接过程生成程序可执行文件。
[0069] 步骤105,利用工具piggyBackTrapTable,填充程序可执行文件中陷阱指令的偏移域。该工具为现有技术。通过解析ELF(Executable and Linkable Format)格式的程序可执行文件来填充程序可执行文件中陷阱指令的偏移域。
[0070] 工具piggyBackTrapTable完成如下功能:解析ELF格式的程序可执行文件,识别出其中的陷阱指令,计算陷阱指令的地址与其陷入地址之间的偏移值,如果该偏移值不超过陷阱指令格式中偏移量的表示范围,则将该偏移值记入该陷阱指令的偏移域中。
[0071] 步骤106,在运行端运行记入偏移值后的程序可执行文件时,当遇到陷阱指令发生陷入,操作系统内核根据陷阱指令的偏移值或程序可执行文件中的陷阱转移表获得陷入地址,做出响应。
[0072] 这里,对操作系统内核的陷入响应方式作扩充,使得操作系统内核除了原有的陷阱处理程序的处理方式外,还能根据陷阱指令给出的偏移值计算得到陷入地址,或者查询程序可执行文件中的陷阱转移表得到陷入地址。
[0073] 在较佳的方案中,响应一条陷阱指令的陷入时,操作系统内核能根据陷阱指令和程序可执行文件中的陷阱转移表来决定按照原有的陷阱处理程序或者新增加的方式来响应陷入。
[0074] 在较佳的方案中,操作系统内核中增加了一种新的陷入响应方式来处理陷阱指令。具体地:
[0075] 当一条陷阱指令发生陷入时,操作系统内核首先判断该陷阱指令所含的偏移值是否为零,若不为零,则由该陷阱指令的地址与其偏移值相加获得陷入地址;或者此偏移值为零,则以该陷阱指令的地址查询陷阱转移表,若找到,则以陷阱转移表中的对应项作为陷入地址,转移到陷入地址处继续执行。若上述情况都不符合,则按照操作系统内核原有的陷阱处理程序,直接向程序发送SIGSEGV信号或SIGTRAP信号报错。
[0076] 上述步骤102中,完成了符合条件的分支指令到陷阱指令的转换。将极少转移到其一转移目标的分支指令(即符合条件的分支指令)转换成陷阱指令,并生成陷阱转移表。
[0077] 上述步骤105中,改善了操作系统内核响应陷入的时间。当操作系统内核响应陷阱指令时,填充了偏移值的陷阱指令,不需要查陷阱转移表而通过简单计算就能获得陷入地址,节省了响应时间。
[0078] 上述步骤106中,采用上述陷入响应的方式,保证操作系统内核能正确地响应陷入。由分支指令转换生成的陷阱指令,发生陷入时能根据陷入地址转到原分支指令极少转移到的转移目标代码处继续程序执行。
[0079] 如图3所示,是本发明的使用陷阱指令优化条件转移代码性能的系统结构图。该系统300包括:
[0080] 分支指令获取模块31,用于利用编译器中轮廓技术收集到程序的轮廓信息,根据轮廓信息获取符合条件的分支指令;
[0081] 轮廓信息包括:程序各个基本块代码的执行频度,并计算得到各条分支指令对其两个转移目标的转移概率。
[0082] 分支指令获取模块31根据轮廓信息判断是否存在符合条件的分支指令。
[0083] 在较佳的方案中,分支指令获取模块31以极高转移概率转移到某一转移目标而极少转移到另一转移目标的分支指令,即为转换的对象:符合条件的分支指令。
[0084] 在较佳的方案中,符合条件的分支指令是指极少转到其一转移目标的分支指令,即该分支指令必有一个转移目标的转移概率低于某个阈值。
[0085] 分支指令转换模块32,连接分支指令获取模块31,用于将符合条件的分支指令转换成陷阱指令。
[0086] 在较佳的方案中,分支指令转换模块32将符合条件的分支指令转换成陷阱指令,并将符合条件的分支指令极少转移到的转移目标地址作为其陷阱指令的陷入地址。另外,将符合条件的分支指令经常转移到的另一转移目标不为该分支指令所在基本块的直接后继,则在陷阱指令后插入一条无条件跳转指令,负责跳转到此转移目标,如图2a、2b所示。
[0087] 地址记入模块33,连接分支指令转换模块32,用于将陷阱指令的地址及其对应的陷入地址记入陷阱转移表中。
[0088] 可执行文件生成模块34,连接分支指令转换模块32、地址记入模块33,用于对分支指令转换模块32、地址记入模块33的生成结果经过上述编译器转换之后生成的汇编文件,经过汇编和链接过程生成程序可执行文件,该汇编文件记入有陷阱指令、陷阱转移表。
[0089] 偏移值记入模块35,连接可执行文件生成模块34,用于填充程序可执行文件中陷阱指令的偏移域。具体地:
[0090] 偏移值记入模块35利用工具piggyBackTrapTable完成填充功能,通过解析程序可执行文件,识别出程序可执行文件中的陷阱指令,计算陷阱指令的地址与其陷入地址之间的偏移值,如果该偏移值不超过陷阱指令的格式中偏移量的表示范围,则将该偏移值记入程序可执行文件中该陷阱指令的偏移域中。
[0091] 内核模块36,连接可执行文件生成模块34,用于在运行端运行偏移值记入后的程序可执行文件时,当陷阱指令发生陷入时,根据程序可执行文件中陷阱指令的偏移值或程序可执行文件中的陷阱转移表确定陷入地址,做出响应。
[0092] 这里,内核模块36扩充了内核原有的陷阱处理功能。原有的陷阱处理流程为直接向程序发送SIGSEGV信号或SIGTRAP信号报错。扩充后,内核还能根据陷阱指令给出的偏移值计算得到陷入地址,或者查询程序可执行文件中的陷阱转移表得到陷入地址,从陷入地址处继续程序执行。
[0093] 在一较佳的方案中,响应一条陷阱指令的陷入时,内核模块36能根据陷阱指令和程序可执行文件中的陷阱转移表来决定按照原有的陷阱处理程序或者新增加的方式来响应陷入。
[0094] 在一较佳的方案中,内核模块36增加了一种新的陷入响应方式来处理陷阱指令。
具体地:
[0095] 当一条陷阱指令发生陷入时,由操作系统的内核模块36首先判断该陷阱指令所含的偏移值是否为零,若不为零则由该陷阱指令的地址与其偏移值相加获得陷入地址;或者此偏移值为零,则以该陷阱指令地址查询陷阱转移表,若找到,则以陷阱转移表中的对应项作为陷入地址,转移到陷入地址处继续程序执行。若上述情况都不符合,则按照操作系统内核原有的陷阱处理程序,直接向程序发送SIGSEGV信号或SIGTRAP信号报错。
[0096] 在较佳的方案中,系统300还包括:
[0097] 延迟槽指令调整模块37,该模块是可选模块,与体系结构相关。只对于需要填充分支延迟槽指令的体系结构,才使用延迟槽指令调整模块37,延迟槽指令调整模块37连接在分支指令转换模块32之后,可执行文件生成模块34之前,用于在将符合条件的分支指令转换成陷阱指令后,对需要填充分支延迟槽指令的体系结构,调整分支指令的延迟槽指令,经过延迟槽指令调整模块37调整之后进入可执行文件生成模块34。对于不需要填充分支延迟槽指令的体系结构,不使用延迟槽指令调整模块37,而直接进入可执行文件生成模块
34。
[0098] 当系统300包括延迟槽指令调整模块37时,汇编文件为由编译器对分支指令转换模块32、地址记入模块33、延迟槽指令调整模块37的生成结果进行转换之后得到。
[0099] 延迟槽指令调整模块37,只对需要填充分支延迟槽指令的体系结构进行,非此类体系结构则不需本模块。陷阱指令没有延迟槽指令,位于它后面的延迟槽指令将被删除或者移动位置;同时,为分支指令转换模块32引入无条件跳转指令填充延迟槽指令。
[0100] 需要填充分支延迟槽指令的体系结构是指仍然保留了分支延迟槽机制的体系结构,即无论分支发生与否总是执行延迟槽中的指令,主要包括DSP和某些历史较悠久的RISC体系结构。为了保证程序正确性,针对体系结构,对于被转换成的陷阱指令处,需要调整其后的延迟槽指令,这些延迟槽指令是由编译器为原有的分支指令放置的。陷阱指令没有延迟槽指令,位于它后面的延迟槽指令将被删除或者移动位置;同时,步骤102增加的无条件跳转指令(参见图2b),与转换前的分支指令不同,需要重新填充延迟槽指令。
[0101] 本发明提供了一种使用陷阱指令优化条件转移代码性能的方法及其系统,其识别出极少转移到其一转移目标的分支指令,将其以陷阱指令代替。本方法对于提供开销小于分支指令的陷阱指令(在不发生陷入的情况下)、精确异常的体系结构,能因此提高性能,并减少分支预测机制的时空开销。
[0102] 本发明的方法能够减少分支指令的处理时间,提高处理器流水线的吞吐率,获得性能提高。
[0103] 当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明做出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
法律信息
- 2012-10-10
- 2011-03-09
实质审查的生效
IPC(主分类): G06F 9/45
专利申请号: 201010292061.1
申请日: 2010.09.26
- 2011-01-12
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2005-08-03
|
2005-01-14
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |