System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种符合取指包字节数要求的基本块执行包序列生成方法技术_技高网

一种符合取指包字节数要求的基本块执行包序列生成方法技术

技术编号:40218766 阅读:5 留言:0更新日期:2024-02-02 22:25
本发明专利技术涉及一种符合取指包字节数要求的基本块执行包序列生成方法,包括以下步骤:遍历每个基本块,循环以下所有步骤;判断当前基本块是否以跳转指令结尾;若以跳转指令结尾,优先针对跳转指令构建取指包;从后往前构建当前基本块的所有取指包,依次向取指包中填入执行包,将每个取指包填满;将最后一个取指包填满,此步骤按需插入特殊指令。本发明专利技术采用拆分跨相邻两个取指包边界执行包的方法,并在必要部分插入特殊指令来填满取指包。具有可靠性高、准确性强等优点。能适用于取指包字节数不小于执行包字节数的情况。

【技术实现步骤摘要】

本专利技术涉及代码优化编译,更加具体的,涉及一种符合取指包字节数要求的基本块执行包序列生成方法


技术介绍

1、随着半导体技术的发展,处理器也越来越复杂。针对不同的市场需求,各种专门用途的处理器也应运而生。在计算机系统中,处理器是极其重要的一部分。若想实现高性能的计算机系统,仅仅凭借高性能处理器是不够的,同样需要高性能操作系统的支持,更需要有能够与处理器和操作系统协同工作的编译器及相关上工具链的支持。因此在设计处理器的同时,完成相应编译器的开发成为了处理器设计中不可缺少的重要环节。

2、指令调度是编译器研究中一种有效的代码优化方法。指令调度可以通过调整代码中的指令顺序来提高单个周期内能并行执行的指令数目,从而显著的提高代码的指令级并行度。指令调度通常具有算法简单,速度快,优化效果明显等优点。

3、执行包跨取指包边界,指的是一个执行包中的指令跨越了两个相邻的取指包边界。在程序的执行过程中,如果遇到跨取指包边界的执行包,可能在等待下一个取指包时,使得同一执行包中,本该并行的指令无法并行。该问题降低了代码的指令级并行度,影响程序的整体运行效率。

4、传统的指令调度方法中,由于硬件的特殊性,往往未考虑执行包跨取指包边界问题带来的影响,导致指令调度的优化效果达不到预期的结果。改进的方法主要是在每个基本块中,以取指包为单位考虑执行包的填充构建,必要时将原有的执行包拆散,避免执行包跨取指包边界。


技术实现思路

1、本专利技术要解决的技术问题在于:针对现有指令调度方法的不足,在指令调度中考虑取指包与执行包之间的相关性,避免执行包跨越取指包边界,提高代码的指令级并行度

2、本专利技术的技术方案为:包括以下步骤,

3、步骤1,遍历每个基本块,循环执行以下所有步骤。

4、步骤2,判断当前基本块是否以跳转指令结尾,若以跳转指令结尾,执行步骤3,否则直接跳过步骤3,从步骤4开始执行;

5、步骤3,将包含跳转指令的执行包填入合适的取指包中;

6、步骤4,从后往前遍历当前基本块剩余执行包,依次向取指包中填入执行包,将每个取指包填满;

7、步骤5,将最后一个取指包填满,按需插入特殊指令。

8、2.根据权利要求1所述的一种符合取指包字节数要求的基本块执行包序列生成方法,其特征是:所述步骤2的具体方式包括如下步骤,

9、步骤2.1,跳转指令应独立于当前基本块的末尾部分,对末尾部分的所有指令进行判断,若包含跳转指令,则认为其是以跳转指令结尾,需要执行步骤3,否则直接开始执行步骤4。

10、3.根据权利要求1所述的一种符合取指包字节数要求的基本块执行包序列生成方法,其特征是:所述步骤3的具体方式包括如下步骤,

11、步骤3.1,分析跳转指令的字节数,在某些硬件环境下可能有多种不同字节数的跳转指令,需要具体情况具体分析。

12、步骤3.2,将跳转指令所在取指包填满。从取指包末尾倒数第n拍开始插入指令,n的值为跳转指令后需要等待的节拍数加一,每插入一条指令,计算出插入该指令后当前取指包内指令总字节数。重复插入指令,直至最后取指包空余指令字节数刚好为跳转指令字节数时,插入跳转指令。

13、4.根据权利要求1所述的一种符合取指包字节数要求的基本块执行包序列生成方法,其特征是:所述步骤4的具体方式包括如下步骤,

14、步骤4.1,从基本块中的最后一个取指包开始构建,依次向该取指包中填入执行包,记录当前填入的执行包为pack1。将pack1填入取指包前需要计算pack1内的指令总字节数execpackbytenum。计算方法为:将pack1中所有指令字节数进行累加,累加结果为execpackbytenum。同时记录取指包中已填入的指令总字节数curacqpackbytenum。往取指包中填入第一个执行包前,令curacqpackbytenum=0。每往取指包中填入一个执行包,令curacqpackbytenum=curacqpackbytenum+execpackbytenum,填入后判断curacqpackbytenum是否超过一个取指包最多容纳指令字节数acquireinspackbytenum,若没超过,则继续填入其它执行包;若超过了则说明填入执行包pack1,会超过取指包的尺寸限制,从而pack1将会跨越两个相邻的取指包,此时开始执行步骤4.2;

15、步骤4.2,对于待填入取指包中的执行包pack1,先计算当前取指包还空余的指令字节数,再从pack1中取出指令插入当前取指包,若指令集中包含多种指令字节数,则始终优先考虑将最大字节数的指令填入取指包,直到将当前取指包填满。同时构建一个新的执行包pack2,将之前执行包pack1中剩余指令放入新构建的执行包pack2中。pack2将是第一个填入下一个取指包中的执行包。

16、步骤4.3,遍历当前基本块内所有执行包,循环执行步骤4.1,与4.2。最后一个取指包将所有执行包填入后开始执行步骤5;

17、5.根据权利要求1所述的一种符合取指包字节数要求的基本块执行包序列生成方法,其特征是:所述步骤5的具体方式包括如下步骤,

18、步骤5.1,预先准备m条指令,m的取值为一个取指包最多包含的指令条数减一,这m条指令为不影响计算结果的空转指令,例如给某个寄存器的值加上零或减去零,若指令集中包含多种字节数的指令,则需要保证每种字节数的指令至少有一条。这些指令将在填满最后一个取指包的过程中用到。

19、步骤5.2,计算最后一个取指包空余的字节数,将之前准备好的指令插入取指包,始终优先考虑将最大字节数的指令插入,当插入某指令后,取指包内指令总字节数超过一个取指包所能包含的最大字节数,则改为插入比该指令字节数更小的指令,直到将取指包填满。

本文档来自技高网...

【技术保护点】

1.一种符合取指包字节数要求的基本块执行包序列生成方法,其特征在于:包括以下步骤,

2.根据权利要求1所述的一种符合取指包字节数要求的基本块执行包序列生成方法,其特征是:所述步骤2的具体方式包括如下步骤,

3.根据权利要求1所述的一种符合取指包字节数要求的基本块执行包序列生成方法,其特征是:所述步骤3的具体方式包括如下步骤,

4.根据权利要求1所述的一种符合取指包字节数要求的基本块执行包序列生成方法,其特征是:所述步骤4的具体方式包括如下步骤,

5.根据权利要求1所述的一种符合取指包字节数要求的基本块执行包序列生成方法,其特征是:所述步骤5的具体方式包括如下步骤,

【技术特征摘要】

1.一种符合取指包字节数要求的基本块执行包序列生成方法,其特征在于:包括以下步骤,

2.根据权利要求1所述的一种符合取指包字节数要求的基本块执行包序列生成方法,其特征是:所述步骤2的具体方式包括如下步骤,

3.根据权利要求1所述的一种符合取指包字节数要求的基本块执行包序列生成方法,其特...

【专利技术属性】
技术研发人员:汤卓悠胡勇华莫尚丰姜颖唐晓鹏
申请(专利权)人:湖南科技大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1