CN103617049B - 基于互补谓词的代码移动方法 - Google Patents

基于互补谓词的代码移动方法 Download PDF

Info

Publication number
CN103617049B
CN103617049B CN201310704227.XA CN201310704227A CN103617049B CN 103617049 B CN103617049 B CN 103617049B CN 201310704227 A CN201310704227 A CN 201310704227A CN 103617049 B CN103617049 B CN 103617049B
Authority
CN
China
Prior art keywords
node
instruction
code
predicate
present
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.)
Expired - Fee Related
Application number
CN201310704227.XA
Other languages
English (en)
Other versions
CN103617049A (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.)
Institute of Acoustics CAS
Original Assignee
Institute of Acoustics CAS
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 Institute of Acoustics CAS filed Critical Institute of Acoustics CAS
Priority to CN201310704227.XA priority Critical patent/CN103617049B/zh
Publication of CN103617049A publication Critical patent/CN103617049A/zh
Application granted granted Critical
Publication of CN103617049B publication Critical patent/CN103617049B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明涉及一种基于互补谓词的代码移动方法,该方法包括:判断当前节点的指令到目标节点的谓词条件是否成立;目标节点是前驱节点或后继节点,节点是汇编文件的代码片段且彼此无回路;在谓词条件成立的情况下,根据谓词条件修改当前节点的推断寄存器;将当前节点内确定被移动的指令复制到控制流图中其各目标节点内并且删除当前节点内的指令;修补数据依赖图。本发明结合谓词互补谓词结构,在代码移动过程中修改指令的推断寄存器来抑制代码复制,无需进行代码补偿,并且代码移动方法实施代价低,实现简单,具有较高的工程实现价值。

Description

基于互补谓词的代码移动方法
技术领域
本发明涉及代码移动技术,具体涉及一种基于互补谓词的代码移动方法。
背景技术
全局代码移动分为有环调度和无环调度。有环调度是沿着控制流图中的导致环路的回边(Back Edge),跨越基本块移动可调度的指令,而移动的区域通常只发生在循环片段内,如M Tokoro等人提出的模调度算法(Modular Scheduling)。无环调度只处理控制流图中无回路的子路径片段或循环子片段。
现有技术方案一般是针对调度算法提出,其中较具代表性的算法有迹调度算法、渗透调度算法、全局调度算法、波沿调度算法。其中:
迹调度算法(Trace Scheduling)是J Knoop等人针对控制流图(Control FlowGraph,CFG)中有向路径片段提出的,它依赖分支概率优先处理高概率执行的路径,代码移动过程必须为低概率的分支进行代码补偿,它尽管实现简单,但带来的代码膨胀率却不能忽视。
渗透调度算法(Percolation Scheduling)是Nicolau、Kernal等人基于并行程序图(Parallel Program Graph,PPG)提出的,它不同于Trace Scheduling对分支概率的依赖,只分析PPG中的路径,但为了保证算法是可终止的,它只考虑向后继节点进行的代码下移,这导致了代码复制和不充分移动。
全局调度算法(Global Scheduling)是Bernstein基于PDG实现的,它通过分析节点之间支配与被支配关系,抑制了移动过程中的代码复制,但它并不适用于功能部件较多的超长指令字(Very Long Instruction Word,VLIW)体系结构。
波沿调度算法(Wavefront Scheduling)是Bharadwaj等人提出的,它十分灵活,它通过消除JS边或critical edge,并插入接口块(Interface Block)高效的完成了代码补偿,但它的实现过程却非常复杂,目前仅被ecc编译器采用。
现有技术是面向编译器后端寄存器尚未分配时的中间语言级的应用,它们并未结合VLIW体系结构中的推断执行技术实现代码移动。
发明内容
本发明的目的是针对现有技术存在的上述问题,提供了一种实施代价低的代码移动方法。
为实现上述目的,本发明提供了一种基于互补谓词的全局代码移动方法,该方法包括以下步骤:
判断当前节点的指令到目标节点的谓词条件是否成立;目标节点是前驱节点或后继节点,节点是汇编文件的代码片段且彼此无回路;
在谓词条件成立的情况下,根据谓词条件修改当前节点的推断寄存器;
将当前节点内确定被移动的指令复制到控制流图中其各目标节点内并且删除当前节点内的指令;
修补数据依赖图。
优选地,在每个节点的出度或入度大于1的情况下,计算从控制流图中入口到各目标节点的分支概率,向执行概率高的前驱、后继节点中移动指令。
优选地,控制流图中每个节点的出度不超过2。
优选地,当当前节点的出度为2时,如果进行代码下移,在谓词条件成立的情况下,根据谓词条件修改当前节点的推断寄存器包括,将两个后继节点中的一个后继节点指令中的推断寄存器修改为分支出口指令的推断寄存器,将另一个后继节点中的推断寄存器修改为互补推断寄存器;
将当前节点内确定被移动的指令复制到两个后继节点内并且删除当前节点内的指令。
优选地,从入口到出口完整路径上的其它指令选择位于并行度低的方向上的节点作为目标节点。
优选地,判断当前节点的指令到目标节点的谓词条件是否成立还包括如果指令与目标节点的其它指令存在数据依赖,而目标节点的其它指令不能被移动,那么指令也不能被移动。
优选地,优先移动推断寄存器为第一推断寄存器的指令;
优选地,推断寄存器其它指令在移动时需检测是否存在谓词冲突。
优选地,判断当前节点的指令到目标节点的谓词条件是否成立包括,在存在多个目标节点的情况下,根据控制流图中各节点之间的控制依赖关系对各目标节点进行拓扑排序。
本发明结合谓词互补谓词结构,在代码移动过程中通过修改指令的推断寄存器来抑制代码复制,无需进行代码补偿,而且代码移动方法实施代价低,实现简单,具有较高的工程实现价值。
附图说明
图1为本发明实施例代码上移流程图;
图2为本发明实施例代码下移流程图;
图3为本发明实施例汇编代码片段和该代码片段对应的控制流图;
图4为本发明实施例汇编级基本块{Root,A,B,C}对应的数据依赖图;
图5为本发明实施例代码移动轨迹图。
具体实施方式
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
图1和2是本发明一实施例一种基于互补谓词的全局代码移动方法流程图,其中,图1是代码上移流程图,其代码上移过程具体包括以下步骤:
步骤101、判断当前节点到其各前驱节点的谓词条件是否成立。
优选地,优先将汇编级基本块中的入口指令向上移动,从入口到出口完整路径上的其它指令优先向并行度低的方向移动。
步骤102、根据谓词条件修改推断寄存器。
优选地,优先移动推断寄存器为第一指令的指令,其它指令在移动时需检测是否存在谓词冲突,第一指令为使用推断寄存器在硬件结构上仅可读的指令。
步骤103、将当前节点内被移动的指令复制到控制流图中其各前驱节点内并且删除当前节点内的指令。
在步骤103之前还包括:根据控制流图中各节点之间的控制依赖关系对各节点进行拓扑排序。在每个节点的出度或入度大于1的情况下,通过计算控制流图中入口节点到达目标节点的分支概率,优先向执行概率高的前驱节点中移动代码。
步骤104、代码上移操作完成后修补数据依赖图。
如图2所示是代码下移流程图,代码下移过程具体包括以下步骤:
步骤201、判断当前节点到其各后继节点的谓词条件是否成立。
代码下移操作步骤包括:优先将汇编级基本块中的出口指令向下移动,从入口到出口完整路径上的其它指令优先向并行度低的方向移动。
步骤202、根据谓词条件修改推断寄存器,谓词条件修改推断寄存器步骤包括:
优先移动推断寄存器为第一指令的指令,其它指令在移动时需检测是否存在谓词冲突,第一指令为使用推断寄存器在硬件结构上仅可读的指令。
步骤203、将当前节点内被移动的指令复制到控制流图中其各后继节点内。
在步骤203之前还包括:根据控制流图中各节点之间的控制依赖关系对各节点进行拓扑排序。在每个节点的出度或入度大于1的情况下,通过计算控制流图中入口节点到达目标节点的分支概率,优先向执行概率高的后继节点中移动代码。并且控制流图中每个节点的出度不超过2,或后继节点的个数不超过2,当控制流图中的节点的出度为0时,则不进行代码下移;当控制流图中的节点的出度值为1时,则删除节点中与分支出口指令相关的指令,并将目标节点的代码直接复制到节点中分支出口指令位置;当控制流图中的节点的出度为2,则在进行代码下移时,两个后继节点中的一个后继节点指令中的推断寄存器被修改为分支出口指令的推断寄存器,另一个后继节点中的推断寄存器则被修改为互补推断寄存器;如果待移动的指令与当前节点的其它前驱内指令存在数据依赖,则不进行代码移动操作。
步骤204、代码下移操作完成后修补数据依赖图。
在一个实施例中,如图3(a)为本发明实施例中由{Root,A,B,C}四个汇编级基本块组成的汇编代码片段,如图3(b)所示为本发明实施例中该代码片段对应的CFG(控制流图),如图4所示为{Root,A,B,C}四个汇编级基本块对应的DDG(数据依赖图),如图5所示为代码移动轨迹图,表1为本发明Algorithm1.基于互补谓词的代码移动算法。下面将结合图3、图4和图5来说明表1中的代码移动方法,其中Algorithm1中的7—9是代码上移算法,10—13是代码下移算法。
代码上移:Algorithm1中“while Entrances≠;predecessors←/*获取前驱集合*/;if/*入口指令可被移动*/;/*修改推断寄存器并移动*/”。
描述了判断当前节点到其各前驱节点的谓词条件是否成立,如果成立,根据谓词条件来进行代码上移,根据谓词条件修改推断寄存器,将当前节点内被移动的指令复制到控制流图中其各前驱节点内,代码上移操作完成后修补数据依赖图。
具体地,Root是A的唯一前驱,当推断寄存器Pr5的值为0时路径Root→A成立。指令A:1是A的数据依赖图(Data Dependence Graph,DDG)中的入口指令,它的推断寄存器为Pr0,因此指令A:1被执行的谓词条件为Pr0&&!Pr5(化简后即为!Pr5),而条件判断指令Root:1使Pr5,Pr6这两个推断寄存器的值互补,因此,指令A:1可以向上移动到汇编级基本块Root中,并将它使用的推断寄存器修改为Pr6。指令Root:1对推断寄存器Pr6存在写操作,因此,指令A:1向上移动的位置应当介于指令Root:1与指令Root:2之间;B存在两个直接前驱Root和A,当推断寄存器Pr5的值为1时路径Root→B成立,而指令B:1与B:3是B的DDG中的两个入口,同理可知它们在Root→B下谓词执行条件为Pr5且不与Root中的其它指令存在数据依赖关系,因此可将它们推断寄存器修改为Pr0后放入Root:2之前的任意位置。然而,A也是B的一个前驱,如果只将指令移动到Root势必导致路径A→B的执行错误。路径A→B下指令B:1与B:3谓词条件为!Pr2,即需找出Pr2在该路径中互补推断寄存器Prx(实际上SuperVDSP配套编译器产生的汇编代码总是将条件判断指令与分支跳转指令放在一个一个汇编基本块内,Prx总是可以找到的),那么B:1只能放在指令A:2与A:4之间,B:3可放到指令A:4之前。
代码下移:Algorithm1中“Exits←/*DDG的出口指令序列*/;whileExits≠;successors←/*获取前驱集合*/;if/*出口指令可被移动*/;/*修改推断寄存器并移动*/”。
描述了判断当前节点到其各后继节点的谓词条件是否成立,如果成立,根据谓词条件来进行代码下移,根据谓词条件修改推断寄存器,将当前节点内被移动的指令复制到控制流图中其各后继节点内,代码下移操作完成后修补数据依赖图。
具体地,C是B的唯一后继,当推断寄存器Pr2的值为0时子路径B→C成立。指令B:2是除了分支出口指令B:4以外,在DDG中唯一以不存在后续节点的指令,它的谓词条件为Pr2=0,因此可被直接移动到C中,由于B:2与指令C:1存在数据依赖关系,因此,它只能被放在指令C:1之前,但是路径A→C成立的条件是Pr2=1,即指令B:2如果被移动到C后将在路径A→C中被执行从而导致执行错误,因此,指令B:2不能被移动;B与C是A的两个后继节点,A中的指令向B或C任意一方移动代码时需对另一方进行代码复制,且不能影响B或C的其它前驱节点的逻辑语义,指令A:3是A中独立于分支出口指令A:4外的唯一出口,将它的推断寄存器修改为Pr2后可分别移动至B与C,B的前驱Root中不修改Pr2的值,因此向B的移动是有效的且位置在指令B:4之前即可,同理可知向C的移动也是有效的且位置在C:3之前。从这个过程中可以看出,代码下移需考虑节点之间的关系相比与进行代码上移时更加复杂,诸如渗透调度[93][94]等算法为了确保调度是可被终止的就不采用代码下移。
除了入口指令进行的代码上移以及出口指令进行的代码下移,目标汇编级基本块的DDG中的其它节点也可以移动,但它们移动方向却受到数据相关性的制约。例如DDG中从入口节点In到出口节点Out存在一条完整的路径In→Node1→…→Noden→Out,那么子路径片段In→Node1→…→Nodei中全部节点的移动方向必须与In一致,而子路径片段Nodei+1→…→Out中全部节点的移动方向必须与Out一致,其余的操作与入口指令进行代码上移和出口指令进行代码下移一致。
表1
其中,本发明在进行代码移动时制定的规则可归纳为如下几点:
(1)移动过程中只进行代码复制,不进行代码补偿,代码上移时需将当前节点内被移动的指令复制到CFG中其它前驱内,代码下移时则需将当前节点内被移动的指令复制到CFG中其它后继内。
(2)移动时不分析完整路径的谓词条件,只判断前驱节点i到后继节点j的谓词成立条件condition,代码移动过程中根据condition修改推断寄存器。
(3)CFG中每个节点的出度不超过2,当节点Node的出度为0时不进行代码下移;当节点Node的出度值为1时删除Node中与分支出口指令相关的指令,并将目标节点的代码直接复制到Node中分支出口指令位置;当节点Node的出度为2,进行代码上移时,两个后继节点内的指令一个直接修改推断寄存器为Node的分支出口指令的推断寄存器,另一个则修改为互补推断寄存器,移动是否成功还取决于待移动的指令与当前节点的其它前驱内指令是否存在数据依赖。
(4)优先移动推断寄存器为Pr0的指令,其它指令在移动时需检测是否存在谓词冲突,如规则3。
(5)优先将汇编级基本块DDG中的入口指令向上移动,出口指令向下移动,从入口到出口完整路径上的其它指令优先向并行度低的方向移动。
(6)代码移动完成后修补DDG。
(7)根据CFG中节点之间的控制依赖关系对节点进行拓扑排序,如图1中的例子,Root是CFG中的入口,它的优先级最高,C是出口优先级最低,B控制依赖于A,因此A的优先级高于B,所以分析顺序依次为Root,A,B,C。
(8)代码移动过程可支持投机机制,计算从CFG中入口到达目标节点的分支概率,优先向执行概率高的前驱、后继节点中移动有利代码。
上述为本发明基于互补谓词结构的分析方法,该方法结合谓词互补谓词结构,在代码移动过程中修改指令的推断寄存器来抑制代码复制,无需进行代码补偿,并且代码移动方法实施代价低,实现简单,具有较高的工程实现价值。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (7)

1.一种基于互补谓词的代码移动方法,其特征在于,所述方法包括:
判断当前节点的指令到目标节点的谓词条件是否成立;所述目标节点是前驱节点或后继节点,节点是汇编文件的代码片段且彼此无回路;
在谓词条件成立的情况下,根据所述谓词条件修改所述当前节点的推断寄存器;
将所述当前节点内确定被移动的指令复制到控制流图中其各目标节点内并且删除所述当前节点内的指令;
修补数据依赖图;
其中,在代码下移操作中,所述控制流图中每个节点的出度不超过2;
当所述当前节点的出度为2时,如果进行所述代码下移,所述在谓词条件成立的情况下,根据所述谓词条件修改所述当前节点的推断寄存器包括,将两个后继节点中的一个后继节点指令中的推断寄存器修改为分支出口指令的推断寄存器,将另一个后继节点中的推断寄存器修改为互补推断寄存器;
所述将当前节点内确定被移动的指令复制到控制流图中其各目标节点内并且删除当前节点内的指令包括,将所述当前节点内确定被移动的指令复制到两个后继节点内并且删除所述当前节点内的指令。
2.根据权利要求1所述的方法,其特征在于,所述方法包括:从入口到出口完整路径上的其它指令选择位于并行度低的方向上的节点作为目标节点。
3.根据权利要求1所述的方法,其特征在于,所述判断当前节点的指令到目标节点的谓词条件是否成立还包括,如果所述当前节点指令与所述目标节点的其它指令存在数据依赖,而所述目标节点的其它指令不能被移动,那么所述当前节点指令也不能被移动。
4.根据权利要求1所述的方法,其特征在于,所述方法包括:优先移动推断寄存器为第一指令的指令,所述第一指令为使用推断寄存器在硬件结构上仅可读指令。
5.根据权利要求4所述的方法,其特征在于,所述方法包括:所述推断寄存器其它指令在移动时需检测是否存在谓词冲突。
6.根据权利要求1所述的方法,其特征在于,所述判断当前节点的指令到目标节点的谓词条件是否成立包括,在存在多个目标节点的情况下,根据所述控制流图中各节点之间的控制依赖关系对各目标节点进行拓扑排序。
7.根据权利要求1所述的方法,其特征在于,所述判断所述当前节点的指令到所述目标节点的谓词条件是否成立包括,在每个节点的出度或入度大于1的情况下,可计算从控制流图中入口到各目标节点的分支概率,向执行概率高的前驱、后继节点中移动指令。
CN201310704227.XA 2013-12-19 2013-12-19 基于互补谓词的代码移动方法 Expired - Fee Related CN103617049B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310704227.XA CN103617049B (zh) 2013-12-19 2013-12-19 基于互补谓词的代码移动方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310704227.XA CN103617049B (zh) 2013-12-19 2013-12-19 基于互补谓词的代码移动方法

Publications (2)

Publication Number Publication Date
CN103617049A CN103617049A (zh) 2014-03-05
CN103617049B true CN103617049B (zh) 2017-03-29

Family

ID=50167752

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310704227.XA Expired - Fee Related CN103617049B (zh) 2013-12-19 2013-12-19 基于互补谓词的代码移动方法

Country Status (1)

Country Link
CN (1) CN103617049B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107239260B (zh) * 2017-05-11 2020-07-24 中国电子科技集团公司第三十八研究所 一种面向数字信号处理器的多谓词控制及编译优化方法
CN109240701B (zh) * 2018-08-13 2022-06-28 湖南科技大学 一种面向谓词执行高性能dsp的指令依赖关系分析方法
CN117251171B (zh) * 2023-11-20 2024-04-12 常熟理工学院 一种控制流图中谓词基本块检测方法及设备
CN117407876A (zh) * 2023-12-11 2024-01-16 常熟理工学院 恶意软件中的不透明谓词检测方法、系统及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1900910A (zh) * 2005-07-22 2007-01-24 中国科学院计算技术研究所 二进制翻译中经由跳转表的多目标分支语句的识别方法
CN101944064A (zh) * 2010-10-12 2011-01-12 中国人民解放军国防科学技术大学 一种基于重构控制流图的控制流错误检测优化方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060200811A1 (en) * 2005-03-07 2006-09-07 Cheng Stephen M Method of generating optimised stack code

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1900910A (zh) * 2005-07-22 2007-01-24 中国科学院计算技术研究所 二进制翻译中经由跳转表的多目标分支语句的识别方法
CN101944064A (zh) * 2010-10-12 2011-01-12 中国人民解放军国防科学技术大学 一种基于重构控制流图的控制流错误检测优化方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于互补谓词的编译优化;胡定磊;《电子学报》;20060730;第1280页第2栏第2段-1286页第1栏第1段 *

Also Published As

Publication number Publication date
CN103617049A (zh) 2014-03-05

Similar Documents

Publication Publication Date Title
CN103617049B (zh) 基于互补谓词的代码移动方法
CA2288614C (en) Loop allocation for optimizing compilers
US7458065B2 (en) Selection of spawning pairs for a speculative multithreaded processor
CN101667135B (zh) 一种交互式并行化编译系统及其编译方法
Baghsorkhi et al. FlexVec: Auto-vectorization for irregular loops
CN103577242B (zh) 针对已调度汇编代码的控制流图重构方法
CN105117336B (zh) 一种动态标记处理控制依赖的方法
CN106462432B (zh) 用于数据相关控制流简化的方法
US20090019431A1 (en) Optimised compilation method during conditional branching
CN103559069B (zh) 一种基于代数系统的跨文件过程间优化方法
CN101944040A (zh) 一种基于谓词的自动并行优化方法
US20080028383A1 (en) Architecture Cloning For Power PC Processors
Sun et al. WCCV: Improving the vectorization of IF-statements with warp-coherent conditions
CN105260166B (zh) 一种应用于机器学习线程划分的手工样本集生成方法
Briggs et al. Goal-directed interprocedural optimization
CN100451969C (zh) 一种复合条件分支结构的识别方法
Subotic et al. Automatic exploration of potential parallelism in sequential applications
CN105045646B (zh) 一种分簇结构的部分谓词实现及编译优化方法
CN105589728B (zh) 一种基于子图语义同构的指令习语识别方法
CN112558977B (zh) 面向异构众核后端基于代价模型的多面体优化方法
Damani et al. Common subexpression convergence: A new code optimization for simt processors
Pan et al. A thread partitioning method for speculative multithreading
CN106020922B (zh) 用跳转目标基本块的执行包填充空闲节拍的指令调度方法
Shobaki et al. Optimal trace scheduling using enumeration
RAS An interblock VLIW-targeted instruction scheduler for GCC

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20170329

Termination date: 20191219

CF01 Termination of patent right due to non-payment of annual fee