本发明专利技术公开一种面向处理器指令cache的低功耗编译方法,包括以下步骤:S1、寻找最内层循环;S2、判断寻找到的最内层循环是否可以展开;S3、结合L0 cache计算展开次数:即根据循环体的最大伪指令条数MAX_UNROLLED_INSNS、循环体的最大平均伪指令条MAX_AVERAGE_UNROLLED_INSNS和最大展开次数MAX_UNROLL_TIMES,计算展开次数;S4、根据展开次数实现代码展开;S5、在编译器中端,对循环中语句建立依赖关系图,并把循环中每一条语句设为一个区域;S6、遍历所有区域,检查是否有生产者消费者的依赖关系;S7、根据L0 cache容量大小确定最优分区大小;S8、有选择的进行合并语句;S9、将剩余的每一个分区都生成一个循环树,实现循环剥离。本发明专利技术实现了循环优化的精细控制策略,保证L0 cache的高命中率,有效降低取指和译码功耗,以提高性能减少功耗。提高性能减少功耗。提高性能减少功耗。
【技术实现步骤摘要】
面向处理器指令cache的低功耗编译方法
[0001]本专利技术涉及一种面向处理器指令cache的低功耗编译方法,属于计算机
技术介绍
[0002]通常指令Cache(I-cache)的访问量较数据Cache(D-cache)要大得多,所以I-cache的功耗占据CPU功耗的主要部分。L0 cache是在L1 I-cache与流水间之间增加的指令cache结构,与传统cache相比,主要有以下几点区别:第一,L0 cache存放的是译码后的指令,减少了译码时间,提高了CPU实际效率;第二,L0 cache容量小、面积小,降低了静态功耗;第三,指令流相对于数据流具有更好的空间、时间的局部性,即使容量很小的L0 cache也有相当高的命中率,降低了动态功耗;第四,CPU访问L0 cache时,不需要对组内每一路的标记域及数据域进行比较。因此,用好L0 cache,保证L0 cache的命中率将有效降低整个cache系统的功耗,从而降低整个CPU的功耗。
[0003]到目前为止,大部分应用中都存在短循环算法,这种短循环的空间局部性好。但传统的编译器针对循环的编译优化算法往往考虑单一的性能指标,缺少针对指令cache的低功耗编译优化技术,不能高效的利用指令缓存部件。同时,也并未针对L0 cache的硬件结构特征做优化参数的适应性调整,无法有效保证L0 cache的高命中率。
技术实现思路
[0004]本专利技术的目的是提供一种面向处理器指令cache的低功耗编译方法,该面向处理器指令cache的低功耗编译方法实现了循环优化的精细控制策略,保证L0 cache的高命中率,有效降低取指和译码功耗,以提高性能减少功耗。
[0005]为达到上述目的,本专利技术采用的技术方案是:一种面向处理器指令cache的低功耗编译方法,包括以下步骤:S1、根据编译器获得的程序语法树结构信息,获取程序的循环体结构信息,在每一个循环体结构信息中寻找到最内层循环;S2、针对S1中找到的每一个最内层循环,判断是否可以展开,如果不可展开或者空间优化优先的编译要求,则跳转到S5,否则执行下一步;S3、根据L0 cache的空间容量和处理器单条指令的空间大小计算最内层循环的展开次数,即根据最内层循环体的最大伪指令条数MAX_UNROLLED_INSNS、最内层循环体的最大平均伪指令条MAX_AVERAGE_UNROLLED_INSNS和最内层循环体的最大展开次数MAX_UNROLL_TIMES,计算最内层循环的展开次数,具体如下:S31、由所面向的L0 cache的结构,确定默认参数值:MAX_UNROLLED_INSNS、MAX_AVERAGE_UNROLLED_INSNS和MAX_UNROLL_TIMES,其中,MAX_AVERAGE_UNROLLED_INSNS=L0 cache容量/单条指令空间大小,若编译器获取到的程序编译选项中存在
--
param max-unroll-times=N(N为整数),则MAX_UNROLL_TIMES=N ,否则MAX_UNROLL_TIMES=8, MAX_UNROLLED_INSNS=MAX_AVERAGE_UNROLLED_INSNS* MAX_UNROLL_TIMES;
S32、若编译器获取到的程序编译选项中存在
--
param perf_pow_rate=N(N为整数),则性能功耗平衡因子PERF_POW_RATE=N,否则,性能功耗平衡因子PERF_POW_RATE为0;S33、若性能功耗平衡因子PERF_POW_RATE = 0,则认为不考虑L0 cache相关低功耗优化,以性能为首要指标,执行原有编译器循环展开优化过程,若性能功耗平衡因子PERF_POW_RATE > 1,则将MAX_AVERAGE_UNROLLED_INSNS和MAX_UNROLLED_INSNS分别乘上PERF_POW_RATE得到新的参数值,其他情况下,保留参数默认值;S34、得到要展开的循环体自身的伪指令条数loop_ninsns和平均伪指令条数loop_av_ninsns,计算得出展开次数nunroll和平均展开次数nunroll_by_av,其中,nunroll =MAX_UNROLLED_INSNS/ loop_ninsns,nunroll_by_av = MAX_AVERAGE_UNROLLED_INSNS / loop_av_ninsns,若展开次数nunroll大于平均展开次数nunroll_by_av,将nunroll设为nunroll_by_av,再比较nunroll和最大展开次数MAX_UNROLL_TIMES,当nunroll大于MAX_UNROLL_TIMES时,将nunroll设为MAX_UNROLL_TIMES;S4、根据S3中最终获得的展开次数nunroll实现代码展开,即对循环体内的基本块进行复制,当展开次数nunroll为n次时,复制n-1次,展开之后对新的循环体进行指令的合并、冗余删除;S5、对当前最内层循环中语句建立依赖关系图,并把循环中每一条语句设为一个区域;S6、遍历S5中标记的所有区域,检查是否有生产者消费者的依赖关系,即变量的赋值和使用是否分离并有前后顺序关系,接着检查依赖关系图是否存在孤立部分;S7、根据L0 cache容量大小确定最优分区大小,最优分区大小 = L0 cache容量/单条指令空间大小;S8、有选择的进行合并语句,将相同类型的语句合并为一个分区,满足S6的依赖关系的语句将不予合并,若分区大小超过最优分区大小,则不再合并语句,将其合并进其他分区,若无法合并进其他分区,则合并进当前分区;S9、将剩余的每一个分区都生成一个循环树结构,实现循环剥离。
[0006]上述技术方案中进一步改进的方案如下:1. 上述方案中,在S2中,如果编译器接收到-Os的编译选项,则表示空间优化优先的编译要求,或者如果循环体所在基本块不可以复制,则不可以展开。
[0007]2. 上述方案中,如果基本块中存在跳转或者是循环出入口,则基本块不可以复制。
[0008]由于上述技术方案的运用,本专利技术与现有技术相比具有下列优点:本专利技术面向处理器指令cache的低功耗编译方法,其针对存在大量短循环的应用课题,面向L0 cache硬件结构特征,在编译器上实现指令分块与调度,实现循环优化的精细控制策略,保证L0 cache的高命中率,有效降低取指和译码功耗,以提高性能减少功耗。
附图说明
[0009]附图1为本专利技术面向处理器指令cache的低功耗编译方法流程示意图;附图2为本专利技术面向处理器指令cache的低功耗编译方法流程图。
具体实施方式
[0010]实施例:一种面向处理器指令cache的低功耗编译方法,包括以下步骤:S1、根据编译器获得的程序语法树结构信息,获取程序的循环体结构信息,在每一个循环体结构信息中寻找到最内层循环;S2、针对S1中找到的每一个最内层循环,判断是否可以展开,如果不可展开或者空本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.一种面向处理器指令cache的低功耗编译方法,其特征在于:包括以下步骤:S1、根据编译器获得的程序语法树结构信息,获取程序的循环体结构信息,在每一个循环体结构信息中寻找到最内层循环;S2、针对S1中找到的每一个最内层循环,判断是否可以展开,如果不可展开或者空间优化优先的编译要求,则跳转到S5,否则执行下一步;S3、根据L0 cache的空间容量和处理器单条指令的空间大小计算最内层循环的展开次数,即根据最内层循环体的最大伪指令条数MAX_UNROLLED_INSNS、最内层循环体的最大平均伪指令条MAX_AVERAGE_UNROLLED_INSNS和最内层循环体的最大展开次数MAX_UNROLL_TIMES,计算最内层循环的展开次数,具体如下:S31、由所面向的L0 cache的结构,确定默认参数值:MAX_UNROLLED_INSNS、MAX_AVERAGE_UNROLLED_INSNS和MAX_UNROLL_TIMES,其中,MAX_AVERAGE_UNROLLED_INSNS=L0 cache容量/单条指令空间大小,若编译器获取到的程序编译选项中存在
--
param max-unroll-times=N(N为整数),则MAX_UNROLL_TIMES=N ,否则MAX_UNROLL_TIMES=8, MAX_UNROLLED_INSNS=MAX_AVERAGE_UNROLLED_INSNS* MAX_UNROLL_TIMES;S32、若编译器获取到的程序编译选项中存在
--
param perf_pow_rate=N(N为整数),则性能功耗平衡因子PERF_POW_RATE=N,否则,性能功耗平衡因子PERF_POW_RATE为0;S33、若性能功耗平衡因子PERF_POW_RATE = 0,则认为不考虑L0 cache相关低功耗优化,以性能为首要指标,执行原有编译器循环展开优化过程,若性能功耗平衡因子PERF_POW_RATE > 1,则将MAX_AVERAGE_UNROLLED_INSNS和MAX_UNROLLED_INSNS分别乘上PERF_POW_RATE得到...
【专利技术属性】
技术研发人员:尉红梅,吴伟,朱琪,王飞,沈莉,钱宏,肖谦,管茂林,
申请(专利权)人:无锡江南计算技术研究所,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。