CN112445481B - 低功耗的寄存器分配编译优化方法 - Google Patents

低功耗的寄存器分配编译优化方法 Download PDF

Info

Publication number
CN112445481B
CN112445481B CN201910794940.5A CN201910794940A CN112445481B CN 112445481 B CN112445481 B CN 112445481B CN 201910794940 A CN201910794940 A CN 201910794940A CN 112445481 B CN112445481 B CN 112445481B
Authority
CN
China
Prior art keywords
optimization
low
instruction
power consumption
register
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201910794940.5A
Other languages
English (en)
Other versions
CN112445481A (zh
Inventor
朱琪
吴伟
沈莉
王飞
肖谦
周文浩
钱宏
武文浩
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuxi Jiangnan Computing Technology Institute
Original Assignee
Wuxi Jiangnan Computing Technology Institute
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wuxi Jiangnan Computing Technology Institute filed Critical Wuxi Jiangnan Computing Technology Institute
Priority to CN201910794940.5A priority Critical patent/CN112445481B/zh
Publication of CN112445481A publication Critical patent/CN112445481A/zh
Application granted granted Critical
Publication of CN112445481B publication Critical patent/CN112445481B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4432Reducing the energy consumption
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开一种低功耗的寄存器分配编译优化方法,包括以下步骤:S1、分析程序的热点函数和循环段;S2、统计热点代码段中依赖关系语句执行频率;S3、登记存在依赖关系语句中临时变量的生存周期;S4、关闭针对该依赖关系语句性能相关的指令调度优化,防止因为考虑流水线性能而进行的指令调度;S5、对每个依赖关系语句中的临时变量进行基本块内的生存周期分析;S6、对每个依赖关系语句中的临时变量进行跨基本块的生存周期分析;S7、遍历所有基本块,对标记为可低功耗优化的临时变量追踪其定义和使用点;S8、进行W_set指令循环外提优化。本发明在一定程度上优化系统运行功耗,且软硬件开发成本低,对降低功耗的方法简单直接。

Description

低功耗的寄存器分配编译优化方法
技术领域
本发明涉及一种低功耗的寄存器分配编译优化方法,属于计算机技术领域。
背景技术
随着硬件技术和体系结构的不断发展,处理器速度越来越快,片上集成度也越来越高,在带来较高处理性能的同时,也造成了巨大的能量消耗。高性能处理器的发展趋势,已经由高性能,逐渐过渡为高效能,即高性能能耗比。有研究表明:在处理器运行过程中,寄存器文件的功耗占总功耗的15%~20%,而相当一部分操作值通过旁路在流水线中传递,亦即指令从旁路得到源数据,而写入到目标寄存器的值将不再使用,浪费了大量能量。
编译器作为硬件与软件的桥梁,在功耗优化的研究中具有重要地位。目前传统编译器的寄存器分配和指令调度优化主要目标是为了提高性能,即使得程序的执行时间最短。而对低功耗编译而言,它的优化是多目标的,通常是性能和功能综合考虑,即在满足一定的性能约束情况下,使得程序运行的功耗最小。传统的编译优化技术已经无法满足日益增长的能量消耗,如何通过有效便捷的方式来降低运行时功耗,成为本领域技术人员努力的方向。
发明内容
本发明的目的是提供一种低功耗的寄存器分配编译优化方法,该低功耗的寄存器分配编译优化方法在一定程度上优化系统运行功耗,且软硬件开发成本低,对降低功耗的方法简单直接,在考虑性能的前提下,最大限度的挖掘寄存器低功耗潜力。
为达到上述目的,本发明采用的技术方案是:一种低功耗的寄存器分配编译优化方法,基于以下模块:
硬件寄存器文件使能设置模块,用于对寄存器文件写回使能位进行控制:打开使能,则所有指定寄存器旁路后仍然需要写回到寄存器文件,关闭使能,则所有指定寄存器旁路后不需要进行写回操作,该寄存器仍然保存的是老值,硬件提供对指定寄存器文件写回的使能控制设置,默认为寄存器旁路后全部写回,如果需要指定寄存器进行非写回操作,对软件开放对使能位的控制设置;
软件低功耗寄存器分配优化编译器模块,用于分析程序中占用功耗较大的热点函数进行低功耗寄存器分配优化,优化前提是不过多的损失程序的性能,且对程序最终的执行序列不做大的改动,还用于分析程序循环语句中的依赖关系,并结合数据流分析该循环语句的定值引用关系,对于其中的真依赖关系指令中使用的临时寄存器,分析其生存周期,确认该寄存器值不被其余位置引用后,则在该临时寄存器的生存周期中进行寄存器文件使能关闭设置,并进行指令调度满足旁路要求,减少该寄存器文件的写开销;
包括以下步骤:
S1、在代码入口及返回处插入性能统计函数,用以分析程序的运行时特征,确定程序的热点函数和循环段;
S2、为程序提供多组输入数据,利用S1插入的性能统计函数,统计热点函数的代码中依赖关系语句执行频率,生成热点函数的统计信息;
S3、根据S2中得到的热点函数的统计信息,结合静态数据流分析SSA信息摘要,登记依赖关系语句中临时变量的生存周期;
S4、关闭针对S2中依赖关系语句的性能相关的指令调度优化;
S5、对每个S3中登记的依赖关系语句中的临时变量进行基本块内的生存周期分析,若生存周期跨基本块外,则设置为unknown临时变量,若生存周期在基本块内,且无其他使用点,则设置为可低功耗优化临时变量,若存在其他使用点,则设置为不可低功耗优化临时变量;
S6、对每个依赖关系语句中的临时变量进行跨基本块的生存周期分析,在全局范围内进行定值引用分析,遍历每个unknown临时变量,若只有一个使用点,则标记为可低功耗优化临时变量;
S7、遍历所有基本块,对S6中标记为可低功耗优化的临时变量追踪其定义和使用点,并对该指令设置标记set_lrf_flag,对依赖指令的定义点指令前插入W_set指令,在使用点指令后,插入W_set清零指令;
S8、针对S7插入的W_set指令,进行W_set指令循环外提优化。
上述技术方案中进一步改进的方案如下:
1. 上述方案中,所述程序的运行时特征包括函数调用次数、指令执行次数和跳转发生次数。
由于上述技术方案的运用,本发明与现有技术相比具有下列优点:
本发明低功耗的寄存器分配编译优化方法,其针对体系结构中出现的可低功耗的使能设置,进行相应的寄存器分配和调度优化,在一定程度上优化系统运行功耗,且软硬件开发成本低,对降低功耗的方法简单直接,在考虑性能的前提下,最大限度的挖掘寄存器低功耗潜力。
附图说明
附图1为本发明低功耗的寄存器分配编译优化方法流程图。
具体实施方式
实施例:一种低功耗的寄存器分配编译优化方法,基于以下模块:
硬件寄存器文件使能设置模块,用于对寄存器文件写回使能位进行控制:打开使能,则所有指定寄存器旁路后仍然需要写回到寄存器文件,关闭使能,则所有指定寄存器旁路后不需要进行写回操作,该寄存器仍然保存的是老值,硬件提供对指定寄存器文件写回的使能控制设置,默认为寄存器旁路后全部写回,如果需要指定寄存器进行非写回操作,对软件开放对使能位的控制设置;
软件低功耗寄存器分配优化编译器模块,用于分析程序中占用功耗较大的热点函数进行低功耗寄存器分配优化,优化前提是不过多的损失程序的性能,且对程序最终的执行序列不做较大的改动,还用于分析程序循环语句中的依赖关系,并结合数据流分析该循环语句的定值引用关系,对于其中的真依赖关系指令中使用的临时寄存器,分析其生存周期,确认该寄存器值不被其余位置引用后,则在该临时寄存器的生存周期中进行寄存器文件使能关闭设置,并进行指令调度满足旁路要求,减少该寄存器文件的写开销;
包括以下步骤:
S1、在代码入口及返回处插入性能统计函数,用以分析程序的运行时特征,确定程序的热点函数和循环段;
S2、为程序提供多组输入数据,利用S1插入的性能统计函数,统计热点函数的代码中依赖关系语句执行频率,生成热点函数的统计信息;
S3、根据S2中得到的热点函数的统计信息,结合静态数据流分析SSA信息摘要,登记依赖关系语句中临时变量的生存周期;
S4、关闭针对S2中依赖关系语句的性能相关的指令调度优化;
S5、对每个S3中登记的依赖关系语句中的临时变量进行基本块内的生存周期分析,若生存周期跨基本块外,则设置为unknown临时变量,若生存周期在基本块内,且无其他使用点,则设置为可低功耗优化临时变量,若存在其他使用点,则设置为不可低功耗优化临时变量;
S6、对每个依赖关系语句中的临时变量进行跨基本块的生存周期分析,在全局范围内进行定值引用分析,遍历每个unknown临时变量,若只有一个使用点,则标记为可低功耗优化临时变量;
S7、遍历所有基本块,对S6中标记为可低功耗优化的临时变量追踪其定义和使用点(define & use),并对该指令设置标记set_lrf_flag,对依赖指令的定义点指令前插入W_set指令,在使用点指令后,插入W_set清零指令;
S8、针对S7插入的W_set指令,进行W_set指令循环外提优化。
所述程序的运行时特征包括函数调用次数、指令执行次数和跳转发生次数。
实施例进一步解释如下:
本发明提供一种针对旁路寄存器指示的编译优化方法,对低功耗编译优化的考虑范围从基本块内扩展到基本块外,在基本块内寻找短生命周期且存在数据依赖关系的指令对,通过指令调度增加旁路机会,并指示旁路寄存器不产生真正写回,从而有效降低寄存器文件的运行时功耗,进一步同时减少旁路指令插入次数,减少对性能的影响,由两部分组成:
1)硬件寄存器文件使能设置机制
该机制提供硬件寄存器文件是否需要写回使能设置:打开使能,则所有指定寄存器旁路后仍然需要写回到寄存器文件;关闭使能,则所有指定寄存器旁路后不需要进行写回操作,该寄存器仍然保存的是老值。
2)软件低功耗寄存器分配优化编译器
编译器分析程序循环语句中的依赖关系,并结合数据流分析该语句序列的定值引用关系,对于其中的真依赖关系指令中使用的临时寄存器,分析其生存周期,确认该寄存器值不被其余位置引用后,则在该临时寄存器的生存周期中进行寄存器文件使能关闭设置,并进行指令调度满足旁路要求,减少该寄存器文件的写开销。
硬件寄存器文件使能设置机制
硬件提供对指定寄存器文件写回的使能控制设置,默认为寄存器旁路后全部写回,如果需要指定寄存器进行非写回操作,对软件开放对使能位的控制设置。
R_sett指令对LRF_FLAG内部寄存器进行读操作,读的值写入reg_mask中;
W_set指令对LRF_FLAG内部寄存器可以进行写操作,写入值由reg_mask控制,该reg_mask值的每一位表示一个寄存器控制位,0表示写回,1表示不写回。
软件低功耗寄存器分配优化编译器
编译器的低功耗寄存器分配优化主要是分析程序中占用功耗较大的热点函数或者程序段进行低功耗寄存器分配优化。优化前提是不过多的损失程序的性能,且对程序最终的执行序列不做较大的改动。主要步骤如下:
1)第一遍反馈编译:
a)插桩,插入性能统计函数,分析程序的热点函数和循环段;
b)运行,输入训练数据,统计热点代码段中依赖关系语句执行频率。
2)第二遍编译:
a)根据热点代码统计信息,并结合静态数据流分析SSA信息摘要,登记存在依赖关系语句中临时变量的生存周期;
b)关闭针对该依赖关系语句性能相关的指令调度优化,防止因为考虑流水线性能而进行的指令调度;
c)对每个依赖关系的临时变量进行基本块内的生存周期分析,若跨基本块外,则设置为unknown临时变量;若生存周期在基本块内,且无其他使用点(use点),则设置为可低功耗优化临时变量,若有多个使用点,则设置为不可低功耗优化临时变量;
d)对每个依赖关系的临时变量进行跨基本块的生存周期分析,在全局范围内进行定值引用分析,遍历每个unknown临时变量,若只有一个使用点,则设置为可低功耗优化临时变量;
e)遍历所有基本块,对标记为可低功耗优化的临时变量追踪其定义和使用点(define & use),并对该指令设置标记set_lrf_flag,对依赖指令的定义点指令前插入W_set指令,在使用点指令后,插入W_set清零指令;
f)进行W_set指令循环外提优化。
采用上述低功耗的寄存器分配编译优化方法时,其针对体系结构中出现的可低功耗的使能设置,进行相应的寄存器分配和调度优化,在一定程度上优化系统运行功耗,且软硬件开发成本低,对降低功耗的方法简单直接,在考虑性能的前提下,最大限度的挖掘寄存器低功耗潜力。
为了便于更好的理解本发明,下面将对本文中使用的术语进行简要的解释:
寄存器:寄存器是中央处理器内的组成部分。寄存器是有限存储容量的高速存储部件,它们可以用来暂存指令、数据和地址。
编译:编译是从源代码(通常为高级语言)到能直接被计算机或虚拟机执行的目标代码(通常为低级语言或机器语言)的翻译过程。
基本块:基本块是指程序顺序执行的语句序列,其中只有一个入口和一个出口,入口就是其中的第一个语句,出口就是其中的最后一个语句。对一个基本块来说,执行时只从其入口进入,从其出口退出。
上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围之内。

Claims (2)

1.一种低功耗的寄存器分配编译优化方法,其特征在于:基于以下模块:
硬件寄存器文件使能设置模块,用于对寄存器文件写回使能位进行控制:打开使能,则所有指定寄存器旁路后仍然需要写回到寄存器文件,关闭使能,则所有指定寄存器旁路后不需要进行写回操作,该寄存器仍然保存的是老值,硬件提供对指定寄存器文件写回的使能控制设置,默认为寄存器旁路后全部写回,如果需要指定寄存器进行非写回操作,对软件开放对使能位的控制设置;
软件低功耗寄存器分配优化编译器模块,用于分析程序中占用功耗较大的热点函数进行低功耗寄存器分配优化,优化前提是不过多的损失程序的性能,且对程序最终的执行序列不做大的改动,还用于分析程序循环语句中的依赖关系,并结合数据流分析循环语句的定值引用关系,对于其中的真依赖关系指令中使用的临时寄存器,分析其生存周期,确认该寄存器值不被其余位置引用后,则在该临时寄存器的生存周期中进行寄存器文件使能关闭设置,并进行指令调度满足旁路要求,减少该寄存器文件的写开销;
包括以下步骤:
S1、在代码入口及返回处插入性能统计函数,用以分析程序的运行时特征,确定程序的热点函数和循环段;
S2、为程序提供多组输入数据,利用S1插入的性能统计函数,统计热点函数的代码中依赖关系语句执行频率,生成热点函数的统计信息;
S3、根据S2中得到的热点函数的统计信息,结合静态数据流分析SSA信息摘要,登记依赖关系语句中临时变量的生存周期;
S4、关闭针对S2中依赖关系语句的性能相关的指令调度优化;
S5、对每个S3中登记的依赖关系语句中的临时变量进行基本块内的生存周期分析,若生存周期跨基本块外,则设置为unknown临时变量,若生存周期在基本块内,且无其他使用点,则设置为可低功耗优化临时变量,若存在其他使用点,则设置为不可低功耗优化临时变量;
S6、对每个依赖关系语句中的临时变量进行跨基本块的生存周期分析,在全局范围内进行定值引用分析,遍历每个unknown临时变量,若只有一个使用点,则标记为可低功耗优化临时变量;
S7、遍历所有基本块,对S6中标记为可低功耗优化的临时变量追踪其定义和使用点,并对该指令设置标记set_lrf_flag,对依赖指令的定义点指令前插入W_set指令,在使用点指令后,插入W_set清零指令;
S8、针对S7插入的W_set指令,进行W_set指令循环外提优化。
2.根据权利要求1所述的低功耗的寄存器分配编译优化方法,其特征在于:所述程序的运行时特征包括函数调用次数、指令执行次数和跳转发生次数。
CN201910794940.5A 2019-08-27 2019-08-27 低功耗的寄存器分配编译优化方法 Active CN112445481B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910794940.5A CN112445481B (zh) 2019-08-27 2019-08-27 低功耗的寄存器分配编译优化方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910794940.5A CN112445481B (zh) 2019-08-27 2019-08-27 低功耗的寄存器分配编译优化方法

Publications (2)

Publication Number Publication Date
CN112445481A CN112445481A (zh) 2021-03-05
CN112445481B true CN112445481B (zh) 2022-07-12

Family

ID=74740874

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910794940.5A Active CN112445481B (zh) 2019-08-27 2019-08-27 低功耗的寄存器分配编译优化方法

Country Status (1)

Country Link
CN (1) CN112445481B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113721924B (zh) * 2021-09-02 2022-09-13 中国人民解放军国防科技大学 一种多节拍指令中的细粒度变量活性分析方法及系统
CN114153494B (zh) * 2021-12-02 2024-02-13 中国核动力研究设计院 一种基于热力图的热点代码优化方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103279327A (zh) * 2013-04-28 2013-09-04 中国人民解放军信息工程大学 面向异构simd扩展部件的自动向量化方法
CN104484160A (zh) * 2014-12-19 2015-04-01 中国人民解放军国防科学技术大学 一种优化的分簇vliw处理器上的指令调度和寄存器分配方法
CN105242929A (zh) * 2015-10-13 2016-01-13 西安交通大学 一种针对多核平台的二进制程序自动并行化的设计方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103279327A (zh) * 2013-04-28 2013-09-04 中国人民解放军信息工程大学 面向异构simd扩展部件的自动向量化方法
CN104484160A (zh) * 2014-12-19 2015-04-01 中国人民解放军国防科学技术大学 一种优化的分簇vliw处理器上的指令调度和寄存器分配方法
CN105242929A (zh) * 2015-10-13 2016-01-13 西安交通大学 一种针对多核平台的二进制程序自动并行化的设计方法

Also Published As

Publication number Publication date
CN112445481A (zh) 2021-03-05

Similar Documents

Publication Publication Date Title
Schwarz et al. Plto: A link-time optimizer for the Intel IA-32 architecture
EP3028149B1 (en) Software development tool
US8037465B2 (en) Thread-data affinity optimization using compiler
US9946523B2 (en) Multiple pass compiler instrumentation infrastructure
US7278136B2 (en) Reducing processor energy consumption using compile-time information
US20020026633A1 (en) Retargetable information processing system
US20020144245A1 (en) Static compilation of instrumentation code for debugging support
Bebenita et al. Trace-based compilation in execution environments without interpreters
CN112445481B (zh) 低功耗的寄存器分配编译优化方法
Anderson et al. Checked load: Architectural support for javascript type-checking on mobile processors
CN113196243A (zh) 使用编译器生成的仿真优化元数据改进仿真和跟踪性能
Blickstein et al. The GEM optimizing compiler system
CN107038019A (zh) 单指令多数据计算系统中处理指令的方法及计算系统
CN107729118A (zh) 面向众核处理器的修改Java虚拟机的方法
Imhmed Understanding Performance of a Novel Local Memory Store Design through Compiler-Driven Simulation
RU2206119C2 (ru) Способ получения объектного кода
Cooper et al. Cross-loop reuse analysis and its application to cache optimizations
CN102360306A (zh) 高级语言代码中循环数据流图提取优化信息处理方法
Moudgill Techniques for implementing fast processor simulators
Becker et al. Optimizing worst-case execution times using mainstream compilers
Hassanein et al. Data forwarding through in-memory precomputation threads
CN118509159B (zh) 一种基于即时编译的智能合约加速执行方法和装置
Kong et al. Research on control flow conversion technique based on Domestic Sunway compiler
Zhang et al. A source code analysis method with parallel acceleration for mining MPI application communication counts
CN114218137A (zh) 一种冗余cache淘汰操作消除方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant