一种基于函数抽象指令序列的最内层循环全展开方法技术

技术编号:39763575 阅读:8 留言:0更新日期:2023-12-22 02:19
本发明专利技术涉及一种基于函数抽象指令序列的最内层循环全展开方法,包括以下步骤:分析函数中各基本块内指令间的依赖关系;通过变量的活跃性分析来构造

【技术实现步骤摘要】
一种基于函数抽象指令序列的最内层循环全展开方法


[0001]本专利技术对大部分处理机体系结构,尤其是具有多类寄存器资源和
VLIW
流水线体系结构,具有相当重要的作用

该方法会提高
VLIW
指令级并行度;减少循环体之间的跳转指令

循环判断指令,另外还去除了条件判断中的归纳变量在循环展开中的迭代;提升了后续指令调度的自由度


技术介绍

[0002]多类寄存器资源的体系结构包含多个不同类型的寄存器,以支持不同类型的指令和操作

这种体系结构的目的是提高处理器的灵活性和性能,以满足不同的应用需求

常见的多类寄存器资源的体系结构:
1、VLIW
架构:
VLIW
架构使用多个寄存器文件,每个文件专门用于存储不同类型的数据,例如整数

浮点数和向量数据

这些寄存器文件可同时被多条指令访问,从而提高了并行性和性能
。2、EPIC
架构:
EPIC
架构
(Explicitly Parallel Instruction Computing
,显式并行指令计算
)
使用多个寄存器窗口,每个窗口用于存储不同类型的数据

每个指令都明确指定它需要哪些寄存器窗口,并行执行多条指令
。3、ARM
架构:
ARM
架构使用多个寄存器文件,每个文件专门用于存储某种类型的数据,例如整数

浮点数和向量数据
。ARM
还包括一些特殊的寄存器,例如程序计数器和状态寄存器,用于控制指令的执行和处理器的状态等

其中,
VLIW(Very Long Instruction Word
,超长指令字
)
架构是一种基于并行计算的处理器架构,它的关键特点是把多条指令打包成一个指令包,然后并行执行这些指令

其广泛应用于嵌入式系统

高性能计算

多媒体处理等相关领域

由于
VLIW
架构可以同时执行多条指令,它可以提供更高的处理性能和更高的吞吐量,从而提高系统的性能

[0003]循环展开是
VLIW
架构中一种常用的优化技术,首先,它能够提高指令级并行性:展开循环可以增加代码中可执行的指令数,从而提高指令级并行性

这样可以使处理器在执行指令时更充分地利用不同寄存器和执行单元,提高处理器性能

其次,它减少分支指令:在展开循环的过程中,条件分支指令的数量会减少,从而减少了分支预测错误的风险

这可以提高处理器的效率和性能

最后,它减少循环开销:循环展开可以减少循环的迭代次数,从而减少循环的开销

这可以提高程序的性能和效率

但是,传统的循环展开不能消除循环判断指令以及循环体之间的跳转指令,另外,循环体中还存在条件判断和归纳变量迭代


技术实现思路

[0004]本专利技术为了解决上述技术问题,提出一种基于函数抽象指令序列的最内层循环全展开方法
(
抽象指令序列表示标向量指令单一存在或者混合存在的指令序列
)。
[0005]本专利技术的技术方案为:包括以下步骤,
[0006]步骤1,分析函数中各基本块内指令间的依赖关系;
[0007]步骤2,通过变量的活跃性分析来构造函数的
DU
链和
UD
链;
[0008]步骤3,通过遍历最内层循环的指令序列的内容,识别最内层循环中的归纳变量
IV

[0009]步骤4,通过
UD
链找出循环边界常量,将其赋值给
loopBoundaryValue

[0010]步骤5,根据各类寄存器中的寄存器数量和循环中变量活跃情况,计算循环展开因子
unrollFactorFinal

[0011]步骤6,根据循环边界常量和展开因子进行循环全展开,将循环完全线性化

[0012]本专利技术上述步骤2的具体方式根据目前已有的方法实现

该部分所参考的现有公式如下:
[0013]LVin(i)

(LVout(i)

DEF(i))∪USE(i)
[0014][0015]RCHout(i)

GEN(i)∨(RCHin(i)∧PRSV(i))
[0016][0017]本专利技术上述步骤3的具体方式包括如下步骤,
[0018]步骤
3.1
,识别出基础归纳变量,将其放入
m_basicIVs
集合中;
[0019]步骤
3.2
,识别出依赖归纳变量,将其放入
m_dependIVs
集合中;
[0020]步骤
3.3
,将所识别出的基础归纳变量和依赖归纳变量都汇总到归纳变量
m_ivName_ivOb
集合中

[0021]本专利技术上述步骤4的具体方式包括如下步骤,
[0022]步骤
4.1
,找出最内层循环中主循环块前的条件判断指令基本块
(
该方法只识别

该类型的循环条件判断
)
,当找到该基本块后进入步骤
4.2

[0023]步骤
4.2
,找出条件判断指令基本块中最后一条使用循环边界量来计算循环条件的指令,当找到该指令后,需要定位到代表循环边界量的使用变量
use
,之后进入步骤
4.3

[0024]步骤
4.3
,通过步骤2所得的
UD
链,找出步骤
4.2
所定位的使用变量
use
所对应的定值集合
defs(
找出的
def
可能不止一个
)
,对找到的定值集合
defs
判断它是否同时满足:

定值集合
defs
中只能存在一个定值
def、

该定值
def
必须在循环第一个基本块之前

当不同时满足这两个条件时,退出该函数,反之,则进入步骤
4.4

[0025]步骤
4.4
,将满足上述条件的定值
def
赋值给
loopBoundaryValue。
[00本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.
一种基于函数抽象指令序列的最内层循环全展开方法,其特征在于:包括以下步骤,步骤1,分析函数中各基本块内指令间的依赖关系;步骤2,通过变量的活跃性分析来构造函数的
DU
链和
UD
链;步骤3,通过遍历最内层循环的指令序列的内容,识别最内层循环中的归纳变量
IV
;步骤4,通过
UD
链找出循环边界常量,将其赋值给
loopBoundaryValue
;步骤5,根据各类寄存器中的寄存器数量和循环中变量活跃情况,计算循环展开因子
unrollFactorFinal
;步骤6,根据循环边界常量和展开因子进行循环全展开,将循环完全线性化
。2.
根据权利要求1所述的一种基于函数抽象指令序列的最内层循环全展开方法,其特征是:所述步骤4的具体方式包括如下步骤,步骤
4.1
,找出最内层循环中主循环块前的条件判断指令基本块
(
该方法只识别

该类型的循环条件判断
)
,当找到该基本块后进入步骤
4.2
;步骤
4.2
,找出条件判断指令基本块中最后一条使用循环边界量来计算循环条件的指令,当找到该指令后,需要定位到代表循环边界量的使用变量
use
,之后进入步骤
4.3
;步骤
4.3
,通过步骤2所得的
UD
链,找出步骤
4.2
所定位的使用变量
use
所对应的定值集合
defs(
找出的
def
可能不止一个
)
,对找到的定值集合
defs
判断它是否同时满足:

定值集合
defs
中只能存在一个定值
def、

该定值
def
必须在循环第一个基本块之前

当不同时满足这两个条件时,退出该函数,反之,则进入步骤
4.4
;步骤
4.4
,将满足上述条件的定值
def
赋值给

【专利技术属性】
技术研发人员:刘澎周新莲胡勇华姜颖莫尚丰梁晋曦
申请(专利权)人:湖南科技大学
类型:发明
国别省市:

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

1