CN108804222B - 一种临时变量的数据区分配方法 - Google Patents
一种临时变量的数据区分配方法 Download PDFInfo
- Publication number
- CN108804222B CN108804222B CN201810329161.3A CN201810329161A CN108804222B CN 108804222 B CN108804222 B CN 108804222B CN 201810329161 A CN201810329161 A CN 201810329161A CN 108804222 B CN108804222 B CN 108804222B
- Authority
- CN
- China
- Prior art keywords
- temporary
- variable
- temporary variable
- data area
- instruction
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开一种临时变量的数据区分配方法,步骤是:首次编译形成指令时,临时变量采用不重复的最大化分配策略;遍历临时变量数据区,遍历指令区,获取各个临时变量的首次引用及最后引用的指令行号,形成每个临时变量的作用域;对按照变量类型组织的各子组进行临时变量合并:对同组内时作用域无交集的临时变量按照最近邻合并贪心算法进行合并,合并为1个子集的临时变量分配同一个虚拟寄存器;调整指令,将指令区的各个临时变量替换为对应虚拟寄存器;汇总虚拟寄存器,并删除原临时变量区,用新的虚拟寄存器组替换。此种方法在编译IEC61131的ST代码时,能精简临时变量数据区,减少数据区大小,满足嵌入式系统资源有限的约束。
Description
技术领域
本发明属于工业控制编程领域,特别涉及结构化文本编译过程中临时变量的数据区合并处理方法。
背景技术
IEC61131标准定义的结构化文本编程语言(ST)是高级编程语言,适用于工业控制应用开发。结构化文本有很多语句表达式,语句表达式在转换处理时需使用若干临时变量。由于工控应用存在单个程序组织单元的程序在线无扰更新的需求,故不能直接编译为嵌入式系统直接运行的目标文件,而是形成中间二进制伪指令文件,采用解释执行的方式。在翻译为解释执行的二进制指令时,涉及到的临时变量分配使用,临时变量作为数据区的一部分,数据区存在长久的生命周期。由于嵌入式系统内存空间有限,不能无节制的最大化分配临时变量,需要在不影响程序安全正确运行的情况下,精简合并临时变量。尚未有文献提出同时满足上述需求的可行解决方案,为了解决上述问题,提出一种安全的时分复用的临时变量数据区分配方案,本案由此产生。
发明内容
本发明的目的,在于提供一种临时变量的数据区分配方法,其在编译IEC61131的ST代码时,能精简临时变量数据区,减少数据区大小,满足嵌入式系统资源有限的约束。
为了达成上述目的,本发明的解决方案是:
一种临时变量的数据区分配方法,包括如下步骤:
步骤1,首次编译形成指令时,临时变量采用不重复的最大化分配策略;
步骤2,遍历临时变量数据区,该临时变量数据区按照变量类型进行分组而形成,遍历指令区,获取各个临时变量的首次引用的指令行号、最后引用的指令行号,形成每个临时变量的作用域[L1,L2],其中,L1表示首次引用的指令行号,L2表示最后引用的指令行号;
步骤3,对按照变量类型组织的各子组进行临时变量合并:对同组内时作用域无交集的临时变量按照最近邻合并贪心算法进行合并,合并为1个子集的临时变量分配同一个虚拟寄存器;
步骤4,调整指令,将指令区的各个临时变量替换为对应虚拟寄存器;汇总虚拟寄存器,并删除原临时变量区,用新的虚拟寄存器组替换。
上述步骤1中,指令采用三地址码方式描述。
上述步骤1中,数据区包括全局变量和临时变量,在编译过程中,存储、使用表达式中间计算结果时每新增1个临时变量,就在数据区申请1个节点。
上述步骤2中,进行分组的变量类型包括布尔类型、1/2/4/8字节整型有符号、1/2/4/8字节整型无符号、4/8字节浮点型和字符串型。
上述步骤3中,最近邻合并贪心算法的内容是:对变量类型相同的临时变量,从第1个临时变量开始往后遍历,对于作用域无交集的临时变量,合并为1个子集,该子集的作用域合并;通过多次遍历,直至各个临时变量、子集不能合并为止。
上述步骤4中,同一变量类型的独立子集各占用1个虚拟寄存器,未合并的临时变量各占用1个虚拟寄存器,不同变量类型的虚拟寄存器按照前述原则顺次分配。
采用上述方案后,本发明首先统计临时变量在指令区的作用区域,将变量类型相同、作用区域不交叉的临时变量采用贪心算法合并为1个,实现M个变量占用N个虚拟寄存器的分时复用紧凑分配(M>=N),在不影响程序安全正确运行的情况下,精简合并临时变量,压缩临时变量占用的空间,实现时分复用,有限减少数据区大小,满足嵌入式系统资源有限的约束下,能尽量运行数据量大、代码量大的程序,减少嵌入式装置,节省资源,适用于嵌入式实时系统内存空间有限的场合。
附图说明
图1是临时变量的数据区分配示例。
具体实施方式
以下将结合附图,对本发明的技术方案及有益效果进行详细说明。
以图1为例,本发明提供一种临时变量的数据区分配方法,实现步骤如下:
步骤1,首次编译形成指令时,临时变量采用不重复的最大化分配策略。其中采用三地址码方式描述,所述的数据区包括全局变量、临时变量。在编译过程中,存储、使用表达式中间计算结果时每新增1个临时变量,就在数据区申请1个节点。
步骤2,遍历临时变量数据区,该临时变量数据区是按照变量类型进行分组形成的,遍历指令区,获取各个临时变量的首次引用的指令行号、最后引用的指令行号,形成每个临时变量的作用域[L1,L2],其中,L1表示首次引用的指令行号,L2表示最后引用的指令行号。
步骤3,对按照变量类型组织的各子组进行临时变量合并:对同组内时作用域无交集(不交叉)的临时变量按照最近邻合并贪心算法进行合并,合并为1个子集的临时变量分配同1个虚拟寄存器。其中变量分组按照布尔类型、1/2/4/8字节整型有符号、1/2/4/8字节整型无符号、4/8字节浮点型、字符串型划分。其中最近邻合并贪心算法指:对变量类型相同的临时变量,从第1个临时变量开始往后遍历,对于作用域无交集的临时变量,合并为1个子集,该子集的作用域合并。通过多次遍历,直至各个临时变量、子集不能合并为止。
优选地,以图1为例,遍历临时变量区后,提取出4字节有符号的临时变量共8个,则按照上述原则,可划分3个子集:第1个子集Temp1,其作用域为[1-2000],即从第1条指令开始,到第2000条指令范围内,存在有有指令使用、引用到该临时变量。第2个子集包括Temp2、Temp3、Temp4、Temp6、Temp8,其合并后作用域为[3-600]、第3个子集Temp5、Temp7,其作用域为[150-260]。
步骤4,调整指令,将指令区的各个临时变量替换为对应虚拟寄存器。汇总虚拟寄存器,并删除原临时变量区,用新的虚拟寄存器组替换。其中同一变量类型的独立子集各占用1个虚拟寄存器、未合并的临时变量各占用1个虚拟寄存器,不同变量类型的虚拟寄存器按照该原则顺次分配。
优选地,以图1为例,Temp1使用R[0]替换,Temp2、Temp3、Temp4、Temp6、Temp8使用R[1]替换、Temp5、Temp7使用R[2]替换,则原先8个临时变量可映射为3个虚拟寄存器变量。
以上实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。
Claims (6)
1.一种临时变量的数据区分配方法,其特征在于包括如下步骤:
步骤1,首次编译形成指令时,临时变量采用不重复的最大化分配策略;
步骤2,遍历临时变量数据区,该临时变量数据区按照变量类型进行分组而形成,遍历指令区,获取各个临时变量的首次引用的指令行号、最后引用的指令行号,形成每个临时变量的作用域[L1,L2],其中,L1表示首次引用的指令行号,L2表示最后引用的指令行号;
步骤3,对按照变量类型组织的各子组进行临时变量合并:对同组内时作用域无交集的临时变量按照最近邻合并贪心算法进行合并,合并为1个子集的临时变量分配同一个虚拟寄存器;
步骤4,调整指令,将指令区的各个临时变量替换为对应虚拟寄存器;汇总虚拟寄存器,并删除原临时变量区,用新的虚拟寄存器组替换。
2.如权利要求1所述的一种临时变量的数据区分配方法,其特征在于:所述步骤1中,指令采用三地址码方式描述。
3.如权利要求1所述的一种临时变量的数据区分配方法,其特征在于:所述步骤1中,数据区包括全局变量和临时变量,在编译过程中,存储、使用表达式中间计算结果时每新增1个临时变量,就在数据区申请1个节点。
4.如权利要求1所述的一种临时变量的数据区分配方法,其特征在于:所述步骤2中,进行分组的变量类型包括布尔类型、1/2/4/8字节整型有符号、1/2/4/8字节整型无符号、4/8字节浮点型和字符串型。
5.如权利要求1所述的一种临时变量的数据区分配方法,其特征在于:所述步骤3中,最近邻合并贪心算法的内容是:对变量类型相同的临时变量,从第1个临时变量开始往后遍历,对于作用域无交集的临时变量,合并为1个子集,该子集的作用域合并;通过多次遍历,直至各个临时变量、子集不能合并为止。
6.如权利要求1所述的一种临时变量的数据区分配方法,其特征在于:所述步骤4中,同一变量类型的独立子集各占用1个虚拟寄存器,未合并的临时变量各占用1个虚拟寄存器,不同变量类型的虚拟寄存器按照前述原则顺次分配。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810329161.3A CN108804222B (zh) | 2018-04-13 | 2018-04-13 | 一种临时变量的数据区分配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810329161.3A CN108804222B (zh) | 2018-04-13 | 2018-04-13 | 一种临时变量的数据区分配方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108804222A CN108804222A (zh) | 2018-11-13 |
CN108804222B true CN108804222B (zh) | 2021-07-27 |
Family
ID=64094304
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810329161.3A Active CN108804222B (zh) | 2018-04-13 | 2018-04-13 | 一种临时变量的数据区分配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108804222B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1113357A2 (en) * | 1999-12-30 | 2001-07-04 | Texas Instruments Incorporated | Method and apparatus for implementing a variable length delay instruction |
DE69712965D1 (de) * | 1996-03-25 | 2002-07-11 | Sun Microsystems Inc | Verfahren, System und Rechnerprogrammprodukt zur Registerzuweisung unter Verwendung mehrerer Interferenzgraphen |
CN101000556A (zh) * | 2005-09-28 | 2007-07-18 | 松下电器产业株式会社 | 编译装置 |
CN101539867A (zh) * | 2009-04-23 | 2009-09-23 | 上海交通大学 | 动态二进制翻译系统中可重定向的寄存器分配方法 |
CN101546271A (zh) * | 2009-04-30 | 2009-09-30 | 上海交通大学 | 动态二进制翻译系统中超级块的寄存器分配方法 |
CN103324463A (zh) * | 2013-05-10 | 2013-09-25 | 中国人民解放军信息工程大学 | 基于区域优先级的寄存器分配方法 |
CN103631730A (zh) * | 2013-11-01 | 2014-03-12 | 深圳清华大学研究院 | 内存计算的缓存优化方法 |
CN107408054A (zh) * | 2015-03-05 | 2017-11-28 | I·乔索帕特 | 用于通用计算图形处理单元中的语言嵌入式编程的流控制 |
CN107632830A (zh) * | 2017-09-19 | 2018-01-26 | 首都师范大学 | 一种溢出优化的寄存器分配方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9015687B2 (en) * | 2011-03-30 | 2015-04-21 | Intel Corporation | Register liveness analysis for SIMD architectures |
-
2018
- 2018-04-13 CN CN201810329161.3A patent/CN108804222B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE69712965D1 (de) * | 1996-03-25 | 2002-07-11 | Sun Microsystems Inc | Verfahren, System und Rechnerprogrammprodukt zur Registerzuweisung unter Verwendung mehrerer Interferenzgraphen |
EP1113357A2 (en) * | 1999-12-30 | 2001-07-04 | Texas Instruments Incorporated | Method and apparatus for implementing a variable length delay instruction |
CN101000556A (zh) * | 2005-09-28 | 2007-07-18 | 松下电器产业株式会社 | 编译装置 |
CN101539867A (zh) * | 2009-04-23 | 2009-09-23 | 上海交通大学 | 动态二进制翻译系统中可重定向的寄存器分配方法 |
CN101546271A (zh) * | 2009-04-30 | 2009-09-30 | 上海交通大学 | 动态二进制翻译系统中超级块的寄存器分配方法 |
CN103324463A (zh) * | 2013-05-10 | 2013-09-25 | 中国人民解放军信息工程大学 | 基于区域优先级的寄存器分配方法 |
CN103631730A (zh) * | 2013-11-01 | 2014-03-12 | 深圳清华大学研究院 | 内存计算的缓存优化方法 |
CN107408054A (zh) * | 2015-03-05 | 2017-11-28 | I·乔索帕特 | 用于通用计算图形处理单元中的语言嵌入式编程的流控制 |
CN107632830A (zh) * | 2017-09-19 | 2018-01-26 | 首都师范大学 | 一种溢出优化的寄存器分配方法及系统 |
Non-Patent Citations (2)
Title |
---|
The Priority-Based Coloring Approach to Register Allocation;FRED等;《ACM TRANSACTIONS ON PROGRAMMING LANGUAGES AND SYSTEMS (TOPLAS)》;19901231;全文 * |
基于编译的寄存器分配性能与功耗优化策略;马安国;《国防科学技术大学研究生院硕士论文》;20061231;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN108804222A (zh) | 2018-11-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110032395B (zh) | 用于提高资源利用率的统一寄存器文件 | |
CN102132249A (zh) | 批量同步图形处理单元编程 | |
JP4958103B2 (ja) | プログラムコード変換においてコードのパーティショニングを行う方法及び装置 | |
CN113284038B (zh) | 用于执行计算的方法、计算设备、计算系统和存储介质 | |
CN111860816A (zh) | 神经网络模型的编译方法、装置、设备及存储介质 | |
CN1653418A (zh) | 向作为不同类实例的对象提供通用内存管理代码 | |
CN115686527A (zh) | 基于算子的编译方法、装置、计算机设备和存储介质 | |
US8732679B2 (en) | Loop transformation for computer compiler optimization | |
US20120143589A1 (en) | Multi-modal compiling apparatus and method for generating a hybrid codefile | |
CN101539867B (zh) | 动态二进制翻译系统中可重定向的寄存器分配方法 | |
CN111344667B (zh) | 用于在一个或多个虚拟内存页的虚拟内存子页内编译和执行代码的系统和方法 | |
CN108804222B (zh) | 一种临时变量的数据区分配方法 | |
WO2022048178A1 (en) | Systems and methods for extending a live range of a virtual scalar register | |
CN111123818B (zh) | 一种plc浮点数和定点数相互转换控制系统及方法 | |
US20190018664A1 (en) | Cache aware self-referential structure peeling | |
CN107203406B (zh) | 一种面向分布式存储结构的处理方法 | |
US6134708A (en) | Program compilation execution system | |
WO2012069010A1 (zh) | 静态存储的分配方法和装置 | |
CN110399124A (zh) | 一种代码生成方法、装置、设备及可读存储介质 | |
CN113741411B (zh) | 一种分散控制系统全局变量点产物文件生成方法和系统 | |
CN101546271B (zh) | 动态二进制翻译系统中超级块的寄存器分配方法 | |
Keep et al. | Optimizing closures in O (0) time | |
CN106648544B (zh) | 寄存器的分配方法和装置 | |
CN115495226A (zh) | 内存管理方法、装置、设备及计算机可读存储介质 | |
CN113608491A (zh) | 一种编译延时逻辑原理图到字节码方法 |
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 |