CN117555552B - 一种基于数据依赖的war变量分析方法及系统 - Google Patents
一种基于数据依赖的war变量分析方法及系统Info
- Publication number
- CN117555552B CN117555552B CN202311705297.7A CN202311705297A CN117555552B CN 117555552 B CN117555552 B CN 117555552B CN 202311705297 A CN202311705297 A CN 202311705297A CN 117555552 B CN117555552 B CN 117555552B
- Authority
- CN
- China
- Prior art keywords
- variable
- war
- memory
- analysis
- dependence
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Prevention of errors by analysis, debugging or testing of software
- G06F11/362—Debugging of software
- G06F11/3624—Debugging of software by performing operations on the source code, e.g. via a compiler
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明属于数据处理技术领域,提供了一种基于数据依赖的WAR变量分析方法及系统,针对现有的方法要么产生悲观的分析结果,要么运行时开销很大,从而对系统进度产生不利影响。为了精确有效地分析WAR依赖关系,本发明提出了一种数据依赖的WAR分析方法。该方法基于依赖于数据的地址表达式,在编译时计算WAR依赖关系,得到依赖于数据的WAR分析结果。在运行时,系统可以根据共享数据精确地定位可能陷入WAR依赖的WAR变量,而运行时开销很小。
Description
技术领域
本发明属于数据处理技术领域,尤其涉及一种基于数据依赖的WAR变量分析方法及系统。
背景技术
本部分的陈述仅仅是提供了与本发明相关的背景技术信息,不必然构成在先技术。
随着物联网设备以及相关技术的不断发展,物联网设备的功能问题将面临巨大的挑战。使用传统的电池供能会让物联网终端受到电池使用的限制,例如需要周期性的更换或者充能。能量收集系统(Energy harvesting system)令系统从周遭的环境中获取能量来实现对系统的功能,摆脱了对于电池的依赖,但是会面临经常性的能量中断。当发生了突发性的能量中断,系统停止运行,系统中的数据会丢失,恢复系统运行时也会从距离中断处较远的起始点重新开始运行,从而导致无进展问题(Non-progress Problem)。
在以任务为基础的间歇计算系统(Task-Based Intermittent ComputingSystem)中,系统将运行程序切分为不同的小型的任务(Task),当发生了供能中断并且恢复时,系统会从最后执行的任务的起始处继续执行,从而保证程序的正确性和前向性。为了保证系统在故障前后的连续性,所有可能会产生Write-After-Read(WAR)依赖的变量需要被特殊备份保存下来,否则在程序的中断前后的相同位置可能会出现同一变量的不同的值,从而导致程序出错。因此对于如何分析程序中的WAR变量成为了一个需要解决的问题。
目前解决的方法,一种是在程序的编译阶段(Compile-time)通过内存引用的粒度来识别WAR变量的依赖。然而对于一段相同的代码块,在不同的实例下其具体所访问的对象是不完全一致的,因此内存引用级别的分析无法很好的捕获内存的动态行为,从而导致性能表现不佳。例如对于数据访问,一个数组可能会包含很多个变量,但是在每一次访问时可能只访问其中的一个变量,而该内存访问的方法会认为该数组中所有的变量都有可能会被访问到,因此会将所有的变量全部保存备份,带来了大量的冗余。
另一种替代方式是在程序运行(Run-time),通过设计复杂的内存管理机制,来记录每一个读操作或者写操作,从而检查每个变量是否是WAR变量。该方法在运行时将每一个特殊的变量在第一次被访问时创建一个副本,随后的所有修改都被重定向至该副本,在程序执行完毕后将所有的修改提交。这种方法不仅会带来大量的运行时开销,同时也会将一些并不是WAR变量却被认为是WAR变量的变量进行备份,带来冗余操作。
发明内容
为了解决上述背景技术中存在的至少一项技术问题,本发明提供基于数据依赖的WAR变量分析方法及系统,其提出了一种更加细粒度的数据依赖(data-dependent)的方法,考虑到大多数的内存引用都是数据依赖的,因此不管一个变量是否为WAR变量,它也是一个数据依赖的变量,使用内存地址取代内存引用来精准高效的获取WAR变量的内存地址。
为了实现上述目的,本发明采用如下技术方案:
本发明的第一个方面提供一种基于数据依赖的WAR变量分析方法,包括编译阶段和运行阶段;
在编译阶段:
获取任务的控制流图,在控制流图中通过路径分析得到全局WAR变量依赖;
对得到的全局WAR变量依赖中的读操作和写操作的内存地址进行重叠性分析;
基于重叠性分析结果计算出任务中可能落入全局WAR变量依赖的内存引用;
在运行阶段:采用内存地址取代内存引用,计算属于全局WAR变量依赖的内存地址,并备用相应的数据,以便在断电时保持系统状态一致。
进一步地,所述获取任务的控制流图,在控制流图中通过路径分析得到全局WAR变量依赖,包括:
结合控制流图和获取的每个内存引用的动态访问行为定义局部WAR变量依赖和全局WAR变量依赖;
基于任务的控制流图获取写操作的路径集合和读操作路径集合,结合局部WAR变量依赖的定义和预设的对写操作的路径集合和读操作路径集合进行分析,得到全局WAR变量依赖。
进一步地,将任务的控制流图记作G=(B,E),其中,B={Bi}表示汇编级别下的被称为基本块的指令的集合,E是控制流图中的边的集合,边在图中表示指令之间的控制流;
所述每个内存引用的动态访问行为分析包括:采用符号执行方法计算内存引用的地址表达式,符号向后执行将反向遍历控制流图,以查找局部变量和共享变量之间的映射,并最终获得关于共享变量的地址表达式。
进一步地,所述预设的规则为:如果在写操作的路径集合中有任意的路径中包含对于写操作的操作对象相同的变量的读操作,获取部分WAR变量依赖;
如果在一个部分WAR变量依赖中,该读操作在写操作访问后再次被访问,那么这个部分WAR变量依赖就不是一个全局WAR变量依赖。
进一步地,所述局部WAR变量依赖的定义为一个二元组,其包含对于一个相同变量的一个写操作和一个读操作,其中写操作可能会在读操作前先被访问,任务的全局WAR变量依赖定义为在任务开始时先读取然后再写入的变量,如果一个变量在任务的代码片段中属于部分WAR变量依赖,那么它可能不是任务的全局WAR变量依赖。
进一步地,所述对得到的全局WAR变量依赖中的读操作和写操作的内存地址进行重叠性分析,包括:
将读操作和写操作的内存地址表达式能否访问到相同的地址的问题转化为线性方程组是否有解的问题;
使用线性代数的方法通过计算线性方程组有无解来等价的判断是否存在重叠的地址,如果方程组无解,那么内存引用A和B之间不会相互覆盖;
如果方程组有解,那么分为两种情况:一定覆盖和可能覆盖,如果两个内存引用使用不同的符号执行总是访问同一个内存地址,那么就是一定覆盖的情况;相反,就是可能覆盖的情况。
进一步地,所述基于重叠性分析结果计算出任务中可能落入全局WAR变量依赖的内存引用,包括:
如果读操作的RAW依赖中的所有前面的写操作必须与读操作重叠,则对变量的第一个操作必须是写操作,并且读操作访问的变量不是WAR变量;
此外,如果读操作一定不会与后面的写操作重叠,则部分WAR依赖中的读操作和写操作将针对不同的内存地址,因此读操作访问的变量也不是WAR变量;否则,将读操作访问的变量视为WAR变量,并记录读操作的数据依赖地址表达式进行备份。
本发明的第二个方面提供一种基于数据依赖的WAR变量分析系统,包括编译模块和运行模块;
其中编译模块被配置为:
获取任务的控制流图,在控制流图中通过路径分析得到全局WAR变量依赖;
对得到的全局WAR变量依赖中的读操作和写操作的内存地址进行重叠性分析;
基于重叠性分析结果计算出任务中可能落入全局WAR变量依赖的内存引用;
其中运行模块被配置为:采用内存地址取代内存引用,计算属于全局WAR变量依赖的内存地址,并备用相应的数据,以便在断电时保持系统状态一致。
本发明的第三个方面提供一种计算机可读存储介质。
一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述所述的一种基于数据依赖的WAR变量分析方法中的步骤。
本发明的第四个方面提供一种计算机设备。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述所述的一种基于数据依赖的WAR变量分析方法中的步骤。
与现有技术相比,本发明的有益效果是:
针对现有的方法要么产生悲观的分析结果,要么运行时开销很大,从而对系统进度产生不利影响。为了精确有效地分析WAR依赖关系,本发明提出了一种数据依赖的WAR分析方法,通过基于依赖于数据的地址表达式,在编译时计算WAR依赖关系,得到依赖于数据的WAR分析结果。在运行时,系统可以根据共享数据精确地定位可能陷入WAR依赖的WAR变量,而运行时开销很小。
本发明附加方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。
图1是本发明实施例提供的基于数据依赖的WAR变量分析方法流程图;
图2是本发明实施例提供的WAR依赖和RAW依赖关系图;
图3是本发明实施例提供的本发明方法与现有分析方法的运行时间比较。
具体实施方式
下面结合附图与实施例对本发明作进一步说明。
应该指出,以下详细说明都是例示性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本发明的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
WAR依赖分析是基于任务的间歇计算系统设计的关键。现有的方法要么产生悲观的分析结果,要么运行时开销很大,从而对系统进度产生不利影响。为了精确有效地分析WAR依赖关系,本发明提出了一种数据依赖的WAR分析方法。该方法基于依赖于数据的地址表达式,在编译时计算WAR依赖关系,得到依赖于数据的WAR分析结果。在运行时,系统可以根据共享数据精确地定位可能陷入WAR依赖的WAR变量,而运行时开销很小。
实施例一
按照图1,本实施例提供一种基于数据依赖的WAR变量分析方法,包括如下步骤:
编译阶段,所述编译阶段包括:
步骤1:获取任务的控制流图,在控制流图中通过路径分析得到全局WAR变量依赖;
步骤101:获取程序的控制流图Control Flow Graph,CFG),在控制流图中通过路径分析得到变量的路径集合;
其中,WAR变量分析是在程序的控制流图(Control Flow Graph,CFG)上执行的,将程序的控制流图记作G=(B,E),其中,B={Bi}表示汇编级别下的被称为基本块的指令的集合,E是控制流图中的边的集合,边在图中表示指令之间的控制流。
WAR变量分析时,变量的路径集合获取的过程为:
将程序入口处的基本块定义为B1;定义一个变量路径path,它表示一个集合,对于任意一个基本块Bi,其一条路径集合pi表示从起始基本块B1到该基本块可能存在的不同基本块的集合,记为:
pi={B1,Bk,…,Bi}
所有通向相同目的基本块的路径集合记作Pi。
注意,由于本实施例只计算不同路径上的不同基本块,而不是精确路径上的有序基本块,因此可以通过抽象解释方法有效地获得路径集。
步骤102:采用符号执行方法反向遍历控制流图,计算内存引用的地址表达式;
为了精确获取每个内存引用的动态访问行为,采用符号执行方法计算内存引用a的地址表达式,如下所示:
其中,Si表示影响A访问的内存地址的共享变量,BaseA表示数组的起地址,或者是变量所在的内存地址,ai表示数组每一维度的大小(如果是对数组进行访问)。
这种地址表达式可以通过符号反向执行来分析得到。一些内存引用可以通过一些局部变量显式地访问。
符号向后执行将反向遍历控制流图,以查找局部变量和共享变量之间的映射,并最终获得关于共享变量的地址表达式。
将得到的地址表达式分为如下三种类型:
常量表达式:对应于标量的内存引用。
线性表达式:对应于与共享变量有线性关系的内存引用。
不可预知的表达式:如与共享变量没有线性关系的内存访问或者是依赖输入的内存访问。
步骤103:在每个任务组成的流程控制图上进行WAR依赖性分析与RAW依赖性分析,得到任务中读写关系的依赖关系图并用于步骤2的重叠性分析,具体包括:
步骤1031:在每个任务组成的流程控制图上进行WAR依赖性分析;
鉴于现有的WAR分析存在开销过大的问题,通过改进的数据依赖的WAR变量分析结合了地址分析和WAR变量分析来精确获取WAR变量的内存地址。接下来首先介绍WAR依赖性分析与RAW依赖性分析。此处两种分析方法都是在每个任务组成的CFG上进行的。
将局部WAR依赖定义为一个2-元组,其包含对于一个相同变量的一个写操作和一个读操作,记作(B(A),W(A)),其中写操作可能会在读操作前先被访问。注意,任务的全局WAR变量定义为在任务开始时先读取然后再写入的变量,如果一个变量在任务的代码片段中属于部分WAR依赖,那么它可能不是任务的全局WAR变量。部分WAR分析的目标集中在写操作上,例如写操作WA。
具体的分析方法为:首先获取变量写操作的路径集合如果在集合中有任意的路径中包含对于写操作WA的操作对象相同的变量的读操作,则一个部分WAR依赖就被获取了,将记该路径为WAR依赖记为:
步骤1032:如果在一个部分WAR依赖(R(A)),W(A))中,该读操作在写操作访问后再次被访问,那么这个部分WAR依赖就不是一个全局的WAR依赖。在所有找到的部分WAR依赖中,对于出现的读操作通过和步骤1031相同的方法进行RAW依赖性分析,最终能够得到如图2所示的依赖性关系图。
步骤2:对得到的全局WAR变量依赖中的读操作和写操作的内存地址进行重叠性分析;
步骤201:基于变量的WAR依赖分析的基础上,基于各个变量的全局WAR依赖关系,进一步分析了内存地址的WAR依赖关系。
首先从两个内存地址表达式的重叠性分析开始。假定存在一组读写操作(R,W),其对应的内存地址为(A,B)。通过将一组读写操作对应内存地址表达式能否访问到相同的地址的问题转化为线性方程组是否有解的问题;
例如两个内存地址的表达式:
两个内存地址的表达式能够访问到一个相同的地址addr,则可以得到一组等式如下:
式中,A为,B为两个不同的读写操作所访问的内存地址,为数组各个维度的大小,Sn为用于访问数组元素的若干共享变量,CA为,CB为两个数组的起始地址。
如此将两个地址表达式能否访问到相同的地址的问题转化为一个线性方程组是否有解的问题。
步骤202:使用线性代数的方法通过计算线性方程组有无解来等价的判断是否存在重叠的地址,分别对应NEVER、MAY、MUST三种情况。
采用线性代数的方法,比较线性方程组的系数矩阵M和增广矩阵均秩,记作r(M)和根据线性代数知识:
若则方程组无解,
若则方程组存在解,
对应地,如果方程组无解,那么内存引用A和B之间不会相互覆盖(NEVER);
如果方程组有解,那么分为两种情况:一定覆盖(MUST)和可能覆盖(MAY)。如果两个内存引用使用不同的符号执行总是访问同一个内存地址,那么就是一定覆盖的情况(MUST);相反,就是可能覆盖的情况(MAY)。
步骤3:基于重叠性分析结果计算出任务中可能落入全局WAR变量依赖的内存引用,也就是判断结果为MUST和MAY的内存引用。
选择全局WAR依赖中的每个读操作作为目标来执行依赖于数据的WAR分析。
在RAW依赖中,每个读操作可能有几个前面的写操作,在WAR依赖中有一个后面的写操作。如果读操作的RAW依赖中的所有前面的写操作必须(MUST)与读操作重叠,则对变量的第一个操作必须是写操作,并且读操作访问的变量不是WAR变量。
此外,如果读操作一定不会(NEVER)与后面的写操作重叠,则部分WAR依赖中的读操作和写操作将针对不同的内存地址,因此读操作访问的变量也不是WAR变量。否则,将读操作访问的变量视为WAR变量,并记录读操作的数据依赖地址表达式进行备份。
运行阶段
系统在运行阶段通过此前得到的属于WAR变量的地址表达式,将表达式中的共享变量代入具体的值来计算属于全局WAR依赖的具体的内存地址,并备份相应的数据,以便在断电时保持系统状态一致。
下面以具体选用的代码段分析,通过观察20-24行的代码段,以24行处的指令hash[mi][0]=T1+T2为例来对数据依赖WAR分析进行进一步的说明。
第24行处有对hash[mi][0]的一处写操作,寻找路径中包含的读操作,显然在写操作前出现了对hash[mi][0](第23行)和hash[mi][6](第20行)两次读操作,因此得到两处部分WAR依赖:
(Base(hash)mi*32,Base(hash)+mi*32),
(Base(hash)mi*32+24,Base(hash)+mi*32);
下一步,对于获取的两处读操作再次进行RAW分析,寻找路径上出现的写操作:对于第一处读操作hash[mi][0],在第20行出现了对hash[mi][7]的写操作,在第23行出现了对hash[mi][6]的写操作,因此得到两处部分RAW依赖:
(Base(hash)mi*32+4,Base(hash)+mi*32),
(Base(hash)mi*32+28,Base(hash)+mi*32);
类似地,对于第二处读操作hash[mi][6],同样可以得到一处部分RAW依赖:
(Base(hash)mi*32+28,Base(hash)+mi*32+24),
在获取的所有的部分RAW依赖中,所有的地址表达式都是一定不会互相覆盖的(NEVER);在所有的部分WAR依赖中,只有其中一处是一定会覆盖(MUST)的:
(Base(hash)mi*32,Base(hash)+mi*32),
至此数据依赖分析得到的WAR变量就被计算出了:
Base(hash)+mi*32,
即为hash[mi][0]。
根据数据表明,与现有方法相比,本发明方法的综合性能表现均更优秀:在相同的运行环境下,与基于静态分析的方法相比,经本发明方法分析所得出的需要备份的数据量远小于静态分析方法,静态分析方法平均备份数据量是本发明方法的30倍左右;与基于运行时的分析方法相比,所需备份的数据量相差较少,但是本发明方法不需要额外的WAR变量识别及内存管理等内存开销,同时计算地址的开销也相对较小,综合性能也更加优秀。
通过选择现有的静态分析方法,和现有的基于运行时的分析方法Alpaca作为对比,在不同的benchmark下,不同分析方法的运行时间如图3所示,所需备份的数据量对比图依次如表1所示。
表1不同分析方法计算出的所需备份的数据量大小对比(单位:KB)
通过表1和图3可以看到,本发明的方案在所测试的案例中,相比于静态分析方法,所需要备份的数据量大小有显著的降低,说明本发明的方法识别WAR变量更加精准,避免了大量的冗余,这一点在例如布谷鸟搜索算法cuckoo这类大量数组访问从而容易带来WAR变量误判的程序中对比更加明显,同时在时间上整体速度更快;另一方面,相对于现有的动态分析方法Alpaca,在所需备份的数据规模上相差并不大,说明本发明的的识别精度与纯运行时分析的精度比较接近,但在执行时间上的表现相比之下也更加优秀。
实施例二
本实施例提供一种基于数据依赖的WAR变量分析系统,包括编译模块和运行模块;
其中编译模块被配置为:
获取任务的控制流图,在控制流图中通过路径分析得到全局WAR变量依赖;
对得到的全局WAR变量依赖中的读操作和写操作的内存地址进行重叠性分析;
基于重叠性分析结果计算出任务中可能落入全局WAR变量依赖的内存引用;
其中运行模块被配置为:采用内存地址取代内存引用,计算属于全局WAR变量依赖的内存地址,并备用相应的数据,以便在断电时保持系统状态一致。
实施例三
本实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述所述的一种基于数据依赖的WAR变量分析方法中的步骤。
实施例四
本实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述所述的一种基于数据依赖的WAR变量分析方法中的步骤。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(RandomAccessMemory,RAM)等。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种基于数据依赖的WAR变量分析方法,其特征在于,包括编译阶段和运行阶段;
在编译阶段:
获取任务的控制流图,在控制流图中通过路径分析得到全局WAR变量依赖;
对得到的全局WAR变量依赖中的读操作和写操作的内存地址进行重叠性分析;
基于重叠性分析结果计算出任务中落入全局WAR变量依赖的内存引用;
在运行阶段:采用内存地址取代内存引用,计算属于全局WAR变量依赖的内存地址,并备用相应的数据,以便在断电时保持系统状态一致;
其中,所述对得到的全局WAR变量依赖中的读操作和写操作的内存地址进行重叠性分析,包括:
将读操作和写操作的内存地址表达式能否访问到相同的地址的问题转化为线性方程组是否有解的问题;
线性方程组为:
,
,
其中,A、B为两个不同的读写操作所访问的内存地址,为数组各个维度的大小,为用于访问数组元素的若干共享变量,、为两个数组的起始地址,表示两个内存地址的表达式能访问到的相同的地址;
使用线性代数的方法通过计算线性方程组有无解来等价的判断是否存在重叠的地址,如果方程组无解,那么内存引用A和B之间不会相互覆盖;
如果方程组有解,那么分为两种情况:一定覆盖和可能覆盖,如果两个内存引用使用不同的符号执行总是访问同一个内存地址,那么就是一定覆盖的情况;相反,就是可能覆盖的情况;
其中,所述基于重叠性分析结果计算出任务中落入全局WAR变量依赖的内存引用,包括:
如果读操作的RAW依赖中的所有前面的写操作必须与读操作重叠,则对变量的第一个操作必须是写操作,并且读操作访问的变量不是WAR变量;
此外,如果读操作不会与后面的写操作重叠,则部分WAR依赖中的读操作和写操作将针对不同的内存地址,因此读操作访问的变量也不是WAR变量;否则,将读操作访问的变量视为WAR变量,并记录读操作的数据依赖地址表达式进行备份。
2.如权利要求1所述的一种基于数据依赖的WAR变量分析方法,其特征在于,所述获取任务的控制流图,在控制流图中通过路径分析得到全局WAR变量依赖,包括:
结合控制流图和获取的每个内存引用的动态访问行为定义局部WAR变量依赖和全局WAR变量依赖;
基于任务的控制流图获取写操作的路径集合和读操作路径集合,结合局部WAR变量依赖的定义和预设的对写操作的路径集合和读操作路径集合进行分析,得到全局WAR变量依赖。
3.如权利要求2所述的一种基于数据依赖的WAR变量分析方法,其特征在于,将任务的控制流图记作,其中,表示汇编级别下的被称为基本块的指令的集合,是控制流图中的边的集合,边在图中表示指令之间的控制流;
所述每个内存引用的动态访问行为分析包括:采用符号执行方法计算内存引用的地址表达式,符号向后执行将反向遍历控制流图,以查找局部变量和共享变量之间的映射,并最终获得关于共享变量的地址表达式。
4.如权利要求2所述的一种基于数据依赖的WAR变量分析方法,其特征在于,所述预设的规则为:如果在写操作的路径集合中有任意的路径中包含对于写操作的操作对象相同的变量的读操作,获取部分WAR变量依赖;
如果在一个部分WAR变量依赖中,该读操作在写操作访问后再次被访问,那么这个部分WAR变量依赖就不是一个全局WAR变量依赖。
5.如权利要求4所述的一种基于数据依赖的WAR变量分析方法,其特征在于,所述局部WAR变量依赖的定义为一个二元组,其包含对于一个相同变量的一个写操作和一个读操作,其中写操作会在读操作前先被访问,任务的全局WAR变量依赖定义为在任务开始时先读取然后再写入的变量,如果一个变量在任务的代码片段中属于部分WAR变量依赖,那么它不是任务的全局WAR变量依赖。
6.一种基于数据依赖的WAR变量分析系统,其特征在于,用于实现权利要求1-5任一项所述的一种基于数据依赖的WAR变量分析方法,包括编译模块和运行模块;
其中编译模块被配置为:
获取任务的控制流图,在控制流图中通过路径分析得到全局WAR变量依赖;
对得到的全局WAR变量依赖中的读操作和写操作的内存地址进行重叠性分析;
基于重叠性分析结果计算出任务中落入全局WAR变量依赖的内存引用;
其中运行模块被配置为:采用内存地址取代内存引用,计算属于全局WAR变量依赖的内存地址,并备用相应的数据,以便在断电时保持系统状态一致。
7.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-5中任一项所述的一种基于数据依赖的WAR变量分析方法中的步骤。
8.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-5中任一项所述的一种基于数据依赖的WAR变量分析方法中的步骤。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202311705297.7A CN117555552B (zh) | 2023-12-11 | 2023-12-11 | 一种基于数据依赖的war变量分析方法及系统 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202311705297.7A CN117555552B (zh) | 2023-12-11 | 2023-12-11 | 一种基于数据依赖的war变量分析方法及系统 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN117555552A CN117555552A (zh) | 2024-02-13 |
| CN117555552B true CN117555552B (zh) | 2026-07-07 |
Family
ID=89820574
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202311705297.7A Active CN117555552B (zh) | 2023-12-11 | 2023-12-11 | 一种基于数据依赖的war变量分析方法及系统 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN117555552B (zh) |
Citations (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN115481048A (zh) * | 2022-09-02 | 2022-12-16 | 新华三半导体技术有限公司 | 一种内存系统及芯片 |
| CN115576865A (zh) * | 2022-10-10 | 2023-01-06 | 苏州浪潮智能科技有限公司 | 实现数据零拷贝的方法、装置和计算机设备和存储介质 |
Family Cites Families (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5107418A (en) * | 1990-06-11 | 1992-04-21 | Supercomputer Systems Limited Partnership | Method for representing scalar data dependences for an optimizing compiler |
| US20170371659A1 (en) * | 2016-06-23 | 2017-12-28 | Microsoft Technology Licensing, Llc | Load-store queue for block-based processor |
| US11687347B2 (en) * | 2021-05-25 | 2023-06-27 | Andes Technology Corporation | Microprocessor and method for speculatively issuing load/store instruction with non-deterministic access time using scoreboard |
-
2023
- 2023-12-11 CN CN202311705297.7A patent/CN117555552B/zh active Active
Patent Citations (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN115481048A (zh) * | 2022-09-02 | 2022-12-16 | 新华三半导体技术有限公司 | 一种内存系统及芯片 |
| CN115576865A (zh) * | 2022-10-10 | 2023-01-06 | 苏州浪潮智能科技有限公司 | 实现数据零拷贝的方法、装置和计算机设备和存储介质 |
Also Published As
| Publication number | Publication date |
|---|---|
| CN117555552A (zh) | 2024-02-13 |
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 |