CN101876899A - 一种计算机程序的优化方法及系统 - Google Patents
一种计算机程序的优化方法及系统 Download PDFInfo
- Publication number
- CN101876899A CN101876899A CN2009102433035A CN200910243303A CN101876899A CN 101876899 A CN101876899 A CN 101876899A CN 2009102433035 A CN2009102433035 A CN 2009102433035A CN 200910243303 A CN200910243303 A CN 200910243303A CN 101876899 A CN101876899 A CN 101876899A
- Authority
- CN
- China
- Prior art keywords
- node
- value
- computer program
- flow graph
- variable
- 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.)
- Granted
Links
- 238000004590 computer program Methods 0.000 title claims abstract description 122
- 238000000034 method Methods 0.000 title claims abstract description 73
- 238000005457 optimization Methods 0.000 claims abstract description 90
- 230000003068 static effect Effects 0.000 claims abstract description 38
- 238000004364 calculation method Methods 0.000 claims abstract description 15
- 230000009466 transformation Effects 0.000 claims abstract description 9
- KDYFGRWQOYBRFD-UHFFFAOYSA-N succinic acid Chemical compound OC(=O)CCC(O)=O KDYFGRWQOYBRFD-UHFFFAOYSA-N 0.000 claims description 37
- 238000004422 calculation algorithm Methods 0.000 claims description 6
- 230000008676 import Effects 0.000 claims description 5
- 238000012163 sequencing technique Methods 0.000 claims description 5
- 238000012545 processing Methods 0.000 claims description 2
- 230000008569 process Effects 0.000 description 13
- 230000006870 function Effects 0.000 description 5
- 238000003780 insertion Methods 0.000 description 5
- 230000037431 insertion Effects 0.000 description 5
- 230000000694 effects Effects 0.000 description 4
- 238000013459 approach Methods 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000005206 flow analysis Methods 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 108700002783 roundabout Proteins 0.000 description 1
Images
Abstract
本发明涉及一种计算机程序的优化方法及系统。该优化方法包括:步骤1,通过值编号分析计算得到每个变量和表达式的值编号;步骤2,将静态单赋值形式的计算机程序转换为半稀疏值流图形式的计算机程序;步骤3,计算半稀疏值流图形式的计算机程序进行标量优化所需的初始属性;如果初始属性已经包含所有所需优化信息则执行步骤4,否则扩展半稀疏值流图形式的计算机程序为稀疏值流图形式的计算机程序,并计算进行标量优化所需的属性,直到所有所需属性计算完毕,执行步骤4;步骤4,根据计算得到的属性对半稀疏值流图形式的计算机程序或稀疏值流图形式的计算机程序进行程序变换以优化计算机程序。本发明能够提高程序优化的效率。
Description
技术领域
本发明涉及计算机程序,尤其涉及一种计算机程序的优化方法及系统。
背景技术
计算机系统中运行的程序通常是使用高级语言编写,经编译器翻译和优化得到的结果。对程序的优化处理效果决定了程序在计算机系统上的运行性能。使用有些语言(比如Java和C#等)编写的程序需要在程序运行期间对其进行翻译和优化。此时优化方法本身的执行效率也会影响到整个程序的运行时间。因此,计算机系统中需要运行效率高且优化效果好的优化方法。
标量优化是相对于并行优化(包括指令级、数据级、线程级等)的一类优化技术。常见的很多优化,比如公共子表达式消除、循环不变代码移动、常数传播、复制传播、强度削弱、部分冗余消除和死代码消除等都属于标量优化。它们都具有共同的优化目标:减少程序中的计算数量和降低计算强度,从而提高程序的执行效率。
各种优化技术通常都是工作在程序的某种中间表示上的。传统的标量优化技术使用普通的命令式语言作为中间表示,优化中需要的各种属性信息由数据流分析方法计算得到,运行效率较低。静态单赋值(Static Single Assignment,SSA)形式是命令式语言的一种特殊形式,要求每个变量在程序中只有一个被赋值(定义)的语句,且一个变量的所有使用语句都被该变量的定义语句所支配,即从程序入口出到达每个使用语句的所有控制流路径都经过该变量的定义语句。将一个程序变换为静态单赋值形式需要对变量进行换名和在适当的合并节点处(假设有m条入边)插入特殊的语句,phi节点:x_0=phi(x_1,…,x_m)来合并不同路径的值。其语义是:当程序执行路径沿第i个前驱进入该phi节点所在的程序节点,则x_0=x_i。
静态单赋值形式的程序中的所有变量的定义-使用关系都被显式表示出来,通过追溯变量的赋值语句即可得到数据流信息。因此,采用静态单赋值形式作为中间表示,使很多传统的标量优化技术得到了简化,运行效率更高,实现也更容易。美国专利号为6026241和6128775的两个发明分别为采用静态单赋值形式进行部分冗余消除和寄存器提升的两个优化方法。美国专利号为6301704的发明描述了一种采用静态单赋值形式作为中间表示进行多种标量优化的方法和系统。
然而,上述采用静态单赋值的优化方法都是基于“语法”等值关系的优化方法,即只能消除语法上完全相同的表达式间的冗余计算或访存语句,优化能力受到很大限制。通常需要同时采用多种辅助方法(值编号、表达式重结合等)对程序进行一系列预处理以尽量增加标量优化方法的优化机会。比这种组合方案更彻底的解决方案是采用基于“语义”等值关系的优化方法。但现有的基于“语义”等值的方法采用的仍然是传统的非静态单赋值形式的中间表示,通过构造一个庞大的值流图并在其上进行数据流分析来计算如何对输入程序进行变换,运行效率非常低下,因而无法实际应用。如何将“语义”等值关系显式表示在程序中间表示中以提高优化方法的效率仍然没有得到解决。
发明内容
为了解决上述的技术问题,提供了一种计算机程序的优化方法及系统,其目的在于,利用“稀疏值流图”(Sparse Value Flow Graph,SVFG)形式,将程序中的“语义”等值关系显式包含在程序的中间表示中,并在此基础上进行高效率的标量优化以实现效率高且优化效果更好的优化方法。
本发明提供了一种计算机程序的优化方法,包括:
步骤1,通过值编号分析计算得到每个变量和表达式的值编号;
步骤2,将静态单赋值形式的计算机程序转换为半稀疏值流图形式的计算机程序;
步骤3,计算半稀疏值流图形式的计算机程序进行标量优化所需的初始属性;如果初始属性已经包含所有所需优化信息则执行步骤4,否则扩展半稀疏值流图形式的计算机程序为稀疏值流图形式的计算机程序,并计算进行标量优化所需的属性,直到所有所需属性计算完毕,执行步骤4;
步骤4,根据计算得到的属性对半稀疏值流图形式的计算机程序或稀疏值流图形式的计算机程序进行程序变换以优化计算机程序;
半稀疏值流图形式的计算机程序中:所有的值传输流都不能越过与其“语义”等值的计算,具有相同值编号的程序节点间的全局等值关系被连接起来;
稀疏值流图形式的计算机程序中:所有的值传输流都不能越过与其“语义”等值的计算,所有的全局等值关系都必须被一值传输流所连接。
步骤2中,半稀疏值流图为每个值编号插入phi节点并使用静态单赋值的变量将在不同位置的同一个值编号连接起来。
步骤3中,半稀疏值流图形式的计算机程序的变量作为半稀疏值流图的节点;稀疏值流图形式的计算机程序的变量作为稀疏值流图的节点;半稀疏值流图或稀疏值流图的边由变量引用关系建立,半稀疏值流图形式的计算机程序或稀疏值流图的形式的计算机程序的中间表示是表示等值关系的值流图;进行标量优化所需的属性附加在半稀疏值流图形式的计算机程序或稀疏值流图的形式的计算机程序的变量上。
半稀疏值流图或稀疏值流图是一个边标记的有向图GS=(NS,ES,Vζ,Vε),包含:
开始节点集合Vζ包含所有存在的值编号对应的伪变量ζt;
结束节点集合Vε包含所有存在的值编号对应的伪变量εt;
节点集合NS包含所有开始节点、结束节点和程序中所有变量的集合;
边集合ES为包含三元组(x,i,y)的集合,其中x、y为节点,i为自然数。
步骤2中,对于静态单赋值形式的计算机程序中出现的每个值编号t执行下列步骤:
步骤203,将ζt压入栈P;
步骤204,调用函数Search(t,n);
步骤205,删除未使用的phi节点;
步骤204包括:
步骤2041,令h=栈P的高度;
步骤2042,如果n为静态单赋值形式的计算机程序的合并节点,则将n中所有值编号为t的phi节点的结果变量压入栈P;
步骤2043,否则,如果n为赋值语句,且其结果变量的值编号为t,将n的右侧表达式替换为栈P的栈顶变量,并将n的左侧结果变量压入栈P;
步骤2044,对于succ(n)中的每个合并节点n1,将n1中的每个phi节点的对应于节点n的值编号为t的变量替换为栈P的栈顶变量;
步骤2045,对每个children(n)中的节点n’,执行Search(t,n’);
步骤2046,如果栈P的高度大于h,将多出的变量弹出;
其中,DF(S)表示所有S中节点的支配边界的并集,S表示任意程序节点集合;DF+(S)表示S的迭代支配边界;J(t)={n|n∈DF+(J0(t))∧t的定义节点严格支配n},对于一个值编号t∈V,用J0(t)表示包含所有需要使用t的值的程序节点集合,V={V(x)|x∈V}表示所有变量的值编号集合;Def(x)表示变量x的定值语句;dn(t)表示值编号t的定义节点,在该节点执行之后,具有值编号t的一个表达式被计算;v1为值编号算法计算得到的每个变量的值编号数组;ζt表示一个恰好在t的定义节点dn(t)之后被赋值的值编号为t的伪变量;εt n表示一个在程序节点n∈DF({dn(t)})处被一个伪phi节点赋值的值编号为t的伪变量;P是一个变量栈,用于构造值传输流;succ(n)表示程序节点n∈N在程序控制流图中的所有后继节点的集合;children(n)表示程序节点n∈N在支配树上所有子节点的集合。
三元组(x,i,y)表示一条标记的边;三元组(x,i,y)∈ES表示一条从变量x到变量y的值传输流。
步骤3中,首先按如下公式计算半移动向下安全属性:
其中,succn a(x)={(i,Def(y))|(x,i,y)∈ES∧desc(De f(x),Def(y))},对于任意程序节点n1和n2∈N,谓词desc(n1,n2)=true当且仅当n1=n2或n1在控制流G的以开始节点为根节点的深度优先搜索树上是n2的子孙节点;succn a(x)中的每个序偶(i,n)∈ω×N表示稀疏值流图节点x的值沿一条值传输流经过n的第i个前驱节点,传入至少一个在节点n处定值的稀疏值流图节点,ω是自然数集合,N是所有程序节点集合;succV(x,i,n)={y|(x,i,y)∈ES∧Def(y)=n}为包含所有对应于给定序偶(i,n)∈succn a(x)的在节点n处定值的变量集合;局部属性comp(x)为真当且仅当Def(x)∈Na,Na是赋值语句组成的程序节点集合。
步骤4中,对于值编号集合{t|t∈B且smds*(ζt)}中的值编号进行扩展,包括:
步骤401,创建一个新的变量x并设置v1[x]:=t;
步骤402,向dn(t)中插入phi节点x=φ(ζt1,...,ζtm),其中ti为x对应于第i条入边的值编号;
步骤403,将半稀疏值流图形式的计算机程序中所有ζt替换为x;
步骤404,对每个值编号ζti执行步骤201-步骤205;
其中,B={t|dn(t)为半稀疏值流图形式的计算机程序合并节点,且其中不包含结果变量的值编号为t的phi节点};smds*表示半移动向下安全属性方程组的最大解。
步骤3中,按照如下公式计算移动向下安全属性:
按照如下公式计算向上安全属性:
其中succn(x)={(i,Def(y))|(x,i,y)∈ES};公式中的md s*表示移动向下安全属性方程组的最大解;predV(x)={y|(y,i,x)∈ES}为x在稀疏值流图上所有前驱节点的集合。
步骤4中,按照下述集合选取插入计算的位置信息:
其中cus*表示向上安全属性方程组的最大解;步骤4中,进行插入计算后还清除无用的代码。
本发明提供了一种计算机程序的优化系统,包括:
值编号计算模块,用于通过值编号分析计算得到每个变量和表达式的值编号;
计算机程序优化模块,将静态单赋值形式的计算机程序转换为半稀疏值流图形式的计算机程序;计算半稀疏值流图形式的计算机程序进行标量优化所需的初始属性;如果初始属性已经包含所有所需优化信息则根据计算得到的属性对半稀疏值流图形式的计算机程序或稀疏值流图形式的计算机程序进行程序变换以优化计算机程序,否则扩展半稀疏值流图形式的计算机程序为稀疏值流图形式的计算机程序,并计算进行标量优化所需的属性,直到所有所需属性计算完毕,根据计算得到的属性对半稀疏值流图形式的计算机程序或稀疏值流图形式的计算机程序进行程序变换以优化计算机程序;
半稀疏值流图形式的计算机程序中:所有的值传输流都不能越过与其“语义”等值的计算,具有相同值编号的程序节点间的全局等值关系被连接起来;
稀疏值流图形式的计算机程序中:所有的值传输流都不能越过与其“语义”等值的计算,所有的全局等值关系都必须被一值传输流所连接。
半稀疏值流图为每个值编号插入phi节点并使用静态单赋值的变量将在不同位置的同一个值编号连接起来。
步骤3中,半稀疏值流图形式的计算机程序的变量作为半稀疏值流图的节点;稀疏值流图形式的计算机程序的变量作为稀疏值流图的节点;半稀疏值流图或稀疏值流图的边由变量引用关系建立,半稀疏值流图形式的计算机程序或稀疏值流图的形式的计算机程序的中间表示是表示等值关系的值流图;进行标量优化所需的属性附加在半稀疏值流图形式的计算机程序或稀疏值流图的形式的计算机程序的变量上。
半稀疏值流图或稀疏值流图是一个边标记的有向图GS=(NS,ES,Vζ,Vε),包含:
开始节点集合Vζ包含所有存在的值编号对应的伪变量ζt;
结束节点集合Vε包含所有存在的值编号对应的伪变量εt;
节点集合NS包含所有开始节点、结束节点和程序中所有变量的集合;
边集合ES为包含三元组(x,i,y)的集合,其中x、y为节点,i为自然数。
对于静态单赋值形式的计算机程序中出现的每个值编号t,计算机程序优化模块执行下述处理:
对每个程序节点n∈J(t)-{Def(x)|x∈V∧v1[x]=t},创建变量x,并设置v1[x]:=t;然后向每个程序节点n中插入phi节点
将ζt压入栈P;
调用函数Search(t,n);
删除未使用的phi节点;
调用函数Search(t,n)包括:
令h=栈P的高度;
如果n为静态单赋值形式的计算机程序的合并节点,则将n中所有值编号为t的phi节点的结果变量压入栈P;
否则,如果n为赋值语句,且其结果变量的值编号为t,将n的右侧表达式替换为栈P的栈顶变量,并将n的左侧结果变量压入栈P;
对于succ(n)中的每个合并节点n1,将n1中的每个phi节点的对应于节点n的值编号为t的变量替换为栈P的栈顶变量;
对每个children(n)中的节点n’,执行Search(t,n’);
如果栈P的高度大于h,将多出的变量弹出;
其中,DF(S)表示所有S中节点的支配边界的并集,S表示任意程序节点集合;DF+(S)表示S的迭代支配边界;J(t)={n|n∈DF+(J0(t))∧t的定义节点严格支配n},对于一个值编号t∈V,用J0(t)表示包含所有需要t的值的节点集合,V={V(x)|x∈V}表示所有变量的值编号集合;Def(x)表示变量x的定值语句;dn(t)表示值编号t的定义节点,在该节点执行之后,具有值编号t的一个表达式被计算;v1为值编号算法计算得到的每个变量的值编号数组;ζt 表示一个恰好在t的定义节点dn(t)之后被赋值的值编号为t的伪变量;εt n表示一个在程序节点n∈DF({dn(t)})处被一个伪phi节点赋值的值编号为t的伪变量;P是一个变量栈,用于构造值传输流;succ(n)表示程序节点n∈N在程序控制流图中的所有后继节点的集合;children(n)表示程序节点n∈N在支配树上所有子节点的集合。
三元组(x,i,y)表示一条标记的边;三元组(x,i,y)∈ES表示一条从变量x到变量y的值传输流。
计算机程序优化模块按如下公式计算半移动向下安全属性:
其中,succn a(x)={(i,Def(y))|(x,i,y)∈ES∧desc(Def(x),Def(y))},对于任意程序节点n1和n2∈N,谓词desc(n1,n2)=true当且仅当n1=n2或n1在控制流G的以开始节点为根节点的深度优先搜索树上是n2的子孙节点;succn a(x)中的每个序偶(i,n)∈ω×N表示稀疏值流图节点x的值沿一条值传输流经过n的第i个前驱节点,传入至少一个在节点n处定值的稀疏值流图节点,ω是自然数集合,N是程序节点集合;succV(x,i,n)={y|(x,i,y)∈ES∧Def(y)=n}为包含所有对应于给定序偶(i,n)∈succn a(x)的在节点n处定值的变量集合;局部属性comp(x)为真当且仅当De f(x)∈Na,Na是赋值语句组成的程序节点集合。
计算机程序优化模块对值编号集合{t|t∈B且smds*(ζt)}中的值编号进行扩展,包括:
创建一个新的变量x并设置v1[x]:=t;
向dn(t)中插入phi节点x=φ(ζt1,...,ζtm),其中ti为x对应于第i条入边的值编号;
将半稀疏值流图形式的计算机程序中所有ζt替换为x;
步骤404,对每个值编号ζti执行步骤201-步骤205;
其中,B={t|dn(t)为半稀疏值流图形式的计算机程序合并节点,且其中不包含结果变量的值编号为t的phi节点};smds*表示半移动向下安全属性方程组的最大解。
计算机程序优化模块按照如下公式计算移动向下安全属性:
按照如下公式计算向上安全属性:
其中succn(x)={(i,Def(y))|(x,i,y)∈ES};公式中的md s*表示移动向下安全属性方程组的最大解;predV(x)={y|(y,i,x)∈ES}为x在稀疏值流图上所有前驱节点的集合。
计算机程序优化模块按照下述集合选取插入计算的位置信息:
其中cus*表示向上安全属性方程组的最大解;
进行插入计算后还清除无用的代码。
本发明能够提高程序优化的效率,并且能够实现更好的优化效果。
附图说明
图1为一个已转换为静态单赋值形式的示例程序,其中包含几种不满足SVFG形式约束条件的几种情况;
图2为图1程序转换为SVFG形式后的结果;
图3为转换为半SVFG形式前的示例程序;
图4为图3程序中变量的值编号结构图
图5为图3程序转换为半SVFG形式后的结果;
图6为图5中的半SVFG形式根据属性计算按需扩展后的结果;
图7为图6程序中变量的值编号结构图;
图8为插入计算并清除无用代码后的最终优化结果。
具体实施方式
现有的基于“语义”等值的标量优化方法仍然采用传统的非静态单赋值形式的中间表示,通过构造一个庞大的值流图并在其上进行数据流分析来计算如何对输入程序进行变换,运行效率非常低下,因而无法实际应用。本发明公开了一种使用稀疏值流图作为程序中间表示的标量优化方法,采用一种新的程序中间表示形式:“稀疏值流图”形式,将程序中的“语义”等值关系显式包含在程序的中间表示中,并在此基础上进行高效率的标量优化以实现效率高且优化效果更好的优化方法。其中稀疏值流图形式是静态单赋值形式的扩展形式,能够直接应用于现有的基于静态单赋值中间表示的编译器中。
本发明提供了一种表示程序中“语义”等值关系的方法,所述表示法为静态单赋值形式的扩展形式,并且满足性质:
(1)所有的值传输流都不能越过与其“语义”等值的计算;
(2)所有的全局等值关系都必须被某个值传输流所连接。
本发明提供的程序优化方法包含以下处理步骤:
步骤一:使用值编号分析计算得到每个变量和表达式的值编号;
步骤二:构造半稀疏值流图形式;
步骤三:计算标量优化所需的初始属性;
步骤四:如果初始属性已经包含所有所需优化信息则执行步骤五,否则根据需要扩展半稀疏值流图形式,并计算新的所需属性,直到所有所需属性计算完毕;
步骤五:根据计算得到的属性进行程序变换以实现对程序的优化。
步骤二中构造半稀疏值流图为每个值编号插入phi节点并使用静态单赋值的变量将同一个值编号在不同位置的出现连接起来。
程序中的变量作为SVFG的节点,SVFG的边由变量引用关系建立,程序的中间表示同时也是表示等值关系的值流图。优化所需属性附加在每个程序变量上。
步骤三和步骤四中计算的smds属性通过忽略程序控制流图中的回边而消除了循环定义的可能性,从而能够被按顺序计算得到。
步骤五计算得到需要插入计算的位置信息,三元组(x,i,n)表示向程序节点n的第i条入边插入用于计算与x相等的最少的一组简单语句(每条语句中只包含一个计算),然后将n中对应于第i条入边的所有x替换为插入的最后一条语句的结果变量。
下面将首先定义SVFG形式,然后介绍以上每个步骤的具体实现方法。
SVFG具有与值流图相同的表示等值关系的能力,但通过利用静态单赋值形式的性质,需要的图节点数量大大减少。SVFG形式是一种静态单赋值形式的扩展,等值关系被显式包含在了SVFG形式的程序中,使得优化算法对等值关系的使用变得更加方便。一个程序是SVFG形式的当且仅当下面三个条件同时满足:
1)该程序为静态单赋值形式;
2)所有的值传输流都不能越过与其“语义”等值的计算;
3)所有的全局等值关系都必须被某个值传输流所连接。
图1给出了一些不满足SVFG形式条件的典型例子。令Def(x)表示变量x的定值语句,对于变量x5,满足x5在Def(x5)(节点n6)全局等值于x1在Def(x1)(节点n3)处的值并且n6存在于路径(n3,n4,n5,n6,n7,n8),违反了SVFG形式的第二个条件。表达式a+c在n6全局等值于x2在Def(x2)(节点n4)处的值,但是不存在从n6到n4的值传输流,违反了SVFG形式的第三个条件。同样,对于表达式a+e,n5,n6和x1或和x3也违反了条件三。一个容易被忽略的情况是表达式b+d,n9,n10和x8。需要注意的是b+d在n9全局等值于x8在n10处的值。图2为图1程序转换为SVFG形式后的结果。所有违反条件的情况都通过在适当的位置插入phi节点和修改赋值语句以建立值传输流而被消除。
当一个程序被转换为SVFG形式后,程序中的全局等值信息将通过变量引用显式表示出来,其中一定不存在可被安全消除的冗余计算。冗余消除优化问题被转换为寻找能够最大程度重用计算结果的安全的计算插入位置问题。为了实现这个目标,首先要将程序转换成一个更易于构造的限制条件更少的半SVFG形式。半SVFG形式放宽了SVFG形式的条件3)。它只要求具有相同值编号的程序节点间的全局等值关系被连接起来,不同值编号之间的全局等值关系则不一定要连接在一起。
将一个SSA形式的程序转换为半SVFG形式的程序首先要计算每个变量的值编号。目前已经有许多具有不同精确度和运行效率的值编号分析方法。本发明可采用任意一种基于静态单赋值形式的值编号分析方法的结果。图3为一个静态单赋值形式的示例程序,图4为采用一种完全值编号分析方法得到的分析结果,以有向无环图的形式表示出不同值编号间的结构关系。在此基础上,只需要在适当的位置插入phi节点并用变量将所有具有相同值编号的变量的定义语句(赋值语句或phi节点)连接在一起从而形成它们之间的值传输流。令符号V={V(x)|x∈V}表示所有变量的值编号集合。对于一个值编号t∈V,用J0(t)表示包含所有需要使用t的值的程序节点集合。一个程序节点n∈N的支配边界(dominance frontier)是一个程序节点集合,其中所有的节点n′满足条件:n支配n′的一个前驱节点但不严格支配n′。对于任意程序节点集合S,用符号DF(S)表示所有S中节点的支配边界的并集。用DF+(S)表示S的迭代支配边界,即下面的递增节点集合序列的极限:
DF1=DF(S);
DFi+1=DFi∪F(DFi);
对于一个值编号t∈V,需要为t插入phi节点的所有程序节点的集合为:
J(t)={n|n∈DF+(J0(t))∧t的定义节点严格支配n}。
其中条件“t的定义节点严格支配n”是用来确保t在n的所有前驱节点处都是有意义的。下面首先列出构造半SVFG形式的过程中用到的一些符号及其含义:
-Def(x)表示变量x的定值语句(在静态单赋值形式的程序中,该定值语句是唯一的)
-dn(t)表示值编号t的定义节点,即一个程序节点,满足恰好在该节点执行之后,具有值编号t的一个表达式可被计算。比如程序片段:n1:a=f();n2:b=g(),则值编号a+b的定义节点为n2,因为恰好在n2之后a+b可被计算。
-v1为值编号算法计算得到的每个变量的值编号数组;
-ζt表示一个恰好在t的定义节点之后被赋值的值编号为t的伪变量。它只是一个用于分析的虚拟变量,它的赋值语句并不存在,也不需要真正出现在程序中。
-εt n表示一个在程序节点n∈DF({dn(t)})处被一个伪phi节点赋值的值编号为t的伪变量。它用于标记在此之后值编号为t不会再被计算或使用。
-S是一个变量栈,用于构造值传输流。
-succ(n)表示程序节点n∈N在程序控制流图中的所有后继节点的集合。
-children(n)表示程序节点n∈N在支配树上所有子节点的集合。
下面是构造半SVFG形式的流程:
1.对于程序中出现的每个值编号t,执行下列操作;
4.将ζt压入栈S;
5.调用Search(t,n);
6.删除未使用的phi节点;
Search(t,n)过程执行下列操作:
1.令h=栈S的高度;
2.如果n为程序的合并节点,则将n中所有值编号为t的phi节点的结果变量压入栈S;
3.否则,如果n为赋值语句,且其结果变量的值编号为t,将n的右侧表达式替换为S的栈顶变量,并将n的左侧结果变量压入S;
4.对于succ(n)中的每个合并节点n1,将n1中的每个phi节点的对应于节点n的值编号为t的变量替换为S的栈顶变量;
5.对每个children(n)中的节点n’,执行Search(t,n’);
6.如果S的高度大于h,将多出的变量(节点n中遇到的变量)弹出。
图5展示了一个由该方法变换得到的半SVFG形式的程序(包含伪变量)。注意其中ζ5,n9,n10与x3仍然违反了SVFG形式的条件三,但是却满足半SVFG形式的定义。
由于在一个SSA形式的程序中,每个变量恰好有且仅有一个定值语句(赋值语句或phi节点),我们可以用变量来唯一地代表程序中的每一个赋值。一个半SVFG形式程序的稀疏值流图是一个边标记的有向图GS=(NS,ES,Vζ,Vε),包含:
-开始节点集合Vζ包含所有存在的值编号对应的伪变量ζt;
-结束节点集合Vε包含所有存在的值编号对应的伪变量εt;
-节点集合NS包含所有开始节点、结束节点和程序中所有变量的集合;
-边集合ES为包含三元组(x,i,y)的集合,其中x、y为节点,i为自然数。
每条标记的边(x,i,y)∈ES 表示一条从变量x到变量y的值传输流,即变量x的值沿任意一条从Def(x)开始,先到达Def(y)的第i个前驱节点后,然后到达Def(y)的控制流路径通过赋值语句或phi节点传递到变量y。由于SVFG形式的性质,所有被相应的控制流路径穿过的与节点在等值关系上与x和y都是无关的。这相当于从一个VFG节点直接跳到下一个相关的VFG节点,与程序的VFG有着直接的对应关系,因此基于VFG表示法的优化方法能够几乎直接被转换为基于SVFG形式的方法。
有了半SVFG形式,下一步要为每个SVFG节点计算一个称为半移动向下安全的属性(smds)。最终的目标是要找到所有满足移动向下安全属性(mds)的SVFG节点,其中包括原程序中存在的和需要进一步扩展得到的。满足smds属性的节点一定满足mds属性。因此在找到所有满足smds属性的节点后通过排除非mds的节点即可得到所有满足mds属性的SVFG节点。之所以采用这种间接的方法计算满足mds属性的节点是因为mds属性不能被结构化定义,即无法按照一定的顺序逐渐构造出所有满足mds属性的节点。而适当放宽的smds属性则满足这个性质,能够从半SVFG开始,先计算得到初始的满足smds属性的节点,然后在适当的位置上扩展半SVFG形式以得到新的满足smds属性的节点,直到所有满足smds属性的节点都被找到。下面是smds属性的计算公式:
其中集合Def(y))},对于任意程序节点n1和n2∈N,谓词desc(n1,n2)=true当且仅当n1=n2或n1在控制流G的以程序开始节点为根节点的DFS树上是n2的子孙节点。succn a(x)中的每个序偶(i,n)∈ω×N表示SVFG节点x的值沿某条值传输流经过n的第i个前驱节点,传入至少一个在节点n处定值的SVFG节点,ω是自然数集合,N是所有程序节点集合。succV(x,i,n)={y|(x,i,y)∈ES∧Def(y)=n}为包含所有对应于给定序偶(i,n)∈succn a(x)的在节点n处定值的变量集合。predV(x)={y|(y,i,x)∈ES}为x在SVFG上所有前驱节点的集合。局部属性comp(x)为真当且仅当Def(x)∈Na,即变量x由原程序中的赋值语句所赋值,Na是赋值语句组成的程序节点集合。
为了扩展半SVFG形式为SVFG形式,需要在适当的位置连接值传输流。例如,在图5中,对值编号a6+b0(在图中编号为5)进行扩展,该程序即可转换为SVFG形式。值传输流中断的位置一定发生在由phi节点定义的值编号,因为在由其它节点(比如函数调用或读取全局变量等)定义的值编号的定义节点之前不可能计算得到总与该值编号相等的值。需要连接的值编号集合为:
B={t|dn(t)为程序合并节点(即包含phi节点的位置),且其中不包含结果变量的值编号为t的phi节点};
下面是为一个给定的值编号t扩展值传输流的流程:
1.创建一个新的变量x并设置v1[x]:=t
2.向dn(t)中插入phi节点x=φ(ζt1,...,ζtm),其中ti为x对应于第i条入边的值编号
3.将程序中所有ζt替换为x
4.对每个值编号ζti执行构造半SVFG形式的流程1-6步,即为ζti创建phi节点和连接ζti的每个出现。
注意在执行该操作的过程中,ζti有可能为新的值编号。简单地重复对新的值编号进行扩展有可能是一个不会终止的过程。因此基于SVFG形式的优化方法要根据已有分析结果,按需进行扩展。由于最终要得到的是所有满足mds属性的SVFG节点,而不满足smds属性的节点一定不满足mds属性,且其前驱节点也不会满足mds属性。所以,我们只需要对当前半-SVFG中的已满足smds的节点进行扩展,即对值编号集合{t|t∈B且smds*(ζt)}中的值编号采用上述方法进行扩展,smds*表示半移动向下安全属性方程组的最大解,即一个变量集合到{true,false}集合的函数,一个变量x满足smds属性,则smds*(x)=true,否则smds*(x)=false。由于任何程序中满足smds属性的节点数量是有限的,因此扩展过程是可终止的。当所有满足smds属性的节点得到后,采用下列公式计算mds和向上安全属性(cus):
其中mds属性的计算公式只需要将计算smds的方程组中的succn a(x)替换为succn(x)={(i,Def(y))|(x,i,y)∈ES}。由于去掉了desc谓词的限制条件,该方程组会导致不同节点的属性间的循环依赖,因此无法按顺序计算。公式中的mds*表示mds方程组的最大解。
图6为图5中的半SVFG形式根据属性计算按需扩展后的结果。此时满足cus属性的SVFG节点集合为{a7,x1,...,x6,y1,...,y8,ζ1,ζ3,ζ8,ζ9}。图7为图6程序中变量的值编号结构图(比图4增加了扩展过程中产生的8,9,10三个值编号)。
最后,下面的集合Insert给出了需要插入计算的位置信息:
其中cus*表示cus方程组的最大解。每个三元组(x,i,n)∈Insert表示先向程序节点n的第i条入边插入用于计算x的值编号的最少的一组简单语句(每条语句中只包含一个计算),然后将n中对应于第i条入边的所有x替换为插入的最后一条语句的结果变量。这里“最少的一组”的含义是不插入任何用于计算已经计算过的x的值编号的子表达式的语句,即不重新计算已经在一个支配n的第i个前驱节点的节点处计算过的子表达式的值。这可以通过在一个对支配树自顶向下的遍历过程中进行插入计算来实现,在该过程中只需要维护一个为每个值编号保存有效变量的数组,在需要时即可直接复用其中的结果。由于SVFG形式的程序已经把所有可重用的计算结果通过变量连接在了一起,即已经不存在可安全消除的冗余计算(实际上不包含任何计算语句,只有在适当位置插入计算后程序才能被正确执行),因此插入计算之后,只需要清除所有没有使用到的phi节点(包括所有伪phi节点)即完成了程序优化工作。其中清除无用代码的工作可由现有的死代码消除方法完成。根据上面的公式,示例程序的Insert集合为:
{(ζ1,1,n3),(ζ9,1,n3),(ζ10,2,n3),(ζ3,1,n7),(ζ8,2,n8),(ζ7,1,n13)}
对于三元组(ζ1,1,n3),需要在n3的第一条入边插入值编号为1的计算z1=a0+b0(由图7可知计算每个值编号的表达式结构),并将n3中phi节点的第一个参数由ζ1改为z1。对于Insert集合中的其它五个三元组同样处理。在清除所有无用节点(即其值不会被使用的节点)后最终得到的程序如图8所示。
本领域的技术人员在不脱离权利要求书确定的本发明的精神和范围的条件下,还可以对以上内容进行各种各样的修改。因此本发明的范围并不仅限于以上的说明,而是由权利要求书的范围来确定的。
Claims (20)
1.一种计算机程序的优化方法,其特征在于,包括:
步骤1,通过值编号分析计算得到每个变量和表达式的值编号;
步骤2,将静态单赋值形式的计算机程序转换为半稀疏值流图形式的计算机程序;
步骤3,计算半稀疏值流图形式的计算机程序进行标量优化所需的初始属性;如果初始属性已经包含所有所需优化信息则执行步骤4,否则扩展半稀疏值流图形式的计算机程序为稀疏值流图形式的计算机程序,并计算进行标量优化所需的属性,直到所有所需属性计算完毕,执行步骤4;
步骤4,根据计算得到的属性对半稀疏值流图形式的计算机程序或稀疏值流图形式的计算机程序进行程序变换以优化计算机程序;
半稀疏值流图形式的计算机程序中:所有的值传输流都不能越过与其“语义”等值的计算,具有相同值编号的程序节点间的全局等值关系被连接起来;
稀疏值流图形式的计算机程序中:所有的值传输流都不能越过与其“语义”等值的计算,所有的全局等值关系都必须被一值传输流所连接。
2.如权利要求1所述的计算机程序的优化方法,其特征在于,步骤2中,半稀疏值流图为每个值编号插入phi节点并使用静态单赋值的变量将在不同位置的同一个值编号连接起来。
3.如权利要求1所述的计算机程序的优化方法,其特征在于,步骤3中,半稀疏值流图形式的计算机程序的变量作为半稀疏值流图的节点;稀疏值流图形式的计算机程序的变量作为稀疏值流图的节点;半稀疏值流图或稀疏值流图的边由变量引用关系建立,半稀疏值流图形式的计算机程序或稀疏值流图的形式的计算机程序的中间表示是表示等值关系的值流图;进行标量优化所需的属性附加在半稀疏值流图形式的计算机程序或稀疏值流图的形式的计算机程序的变量上。
4.如权利要求1所述的计算机程序的优化方法,其特征在于,
半稀疏值流图或稀疏值流图是一个边标记的有向图GS=(NS,ES,Vζ,Vε),包含:
开始节点集合Vζ包含所有存在的值编号对应的伪变量ζt;
结束节点集合Vε包含所有存在的值编号对应的伪变量εt;
节点集合NS包含所有开始节点、结束节点和程序中所有变量的集合;
边集合ES为包含三元组(x,i,y)的集合,其中x、y为节点,i为自然数。
5.如权利要求4所述的计算机程序的优化方法,其特征在于,步骤2中,对于静态单赋值形式的计算机程序中出现的每个值编号t执行下列步骤:
步骤203,将ζt压入栈P;
步骤204,调用函数Search(t,n);
步骤205,删除未使用的phi节点;
步骤204包括:
步骤2041,令h=栈P的高度;
步骤2042,如果n为静态单赋值形式的计算机程序的合并节点,则将n中所有值编号为t的phi节点的结果变量压入栈P;
步骤2043,否则,如果n为赋值语句,且其结果变量的值编号为t,将n的右侧表达式替换为栈P的栈顶变量,并将n的左侧结果变量压入栈P;
步骤2044,对于succ(n)中的每个合并节点n1,将n1中的每个phi节点的对应于节点n的值编号为t的变量替换为栈P的栈顶变量;
步骤2045,对每个children(n)中的节点n’,执行Search(t,n’);
步骤2046,如果栈P的高度大于h,将多出的变量弹出;
其中,DF(S)表示所有S中节点的支配边界的并集,S表示任意程序节点集合;DF+(S)表示S的迭代支配边界;J(t)={n|n∈DF+(J0(t))∧t的定义节点严格支配n},对于一个值编号t∈V,用J0(t)表示包含所有需要使用t的值的程序节点集合,V={V(x)|x∈V}表示所有变量的值编号集合;Def(x)表示变量x的定值语句;dn(t)表示值编号t的定义节点,在该节点执行之后,具有值编号t的一个表达式被计算;v1为值编号算法计算得到的每个变量的值编号数组;ζt表示一个恰好在t的定义节点dn(t)之后被赋值的值编号为t的伪变量;εt n表示一个在程序节点n∈DF({dn(t)})处被一个伪phi节点赋值的值编号为t的伪变量;P是一个变量栈,用于构造值传输流;succ(n)表示程序节点n∈N在程序控制流图中的所有后继节点的集合;children(n)表示程序节点n∈N在支配树上所有子节点的集合。
6.如权利要求5所述的计算机程序的优化方法,其特征在于,三元组(x,i,y)表示一条标记的边;三元组(x,i,y)∈ES表示一条从变量x到变量y的值传输流。
7.如权利要求6所述的计算机程序的优化方法,其特征在于,步骤3中,首先按如下公式计算半移动向下安全属性:
其中,succn a(x)={(i,Def(y))|(x,i,y)∈ES∧desc(Def(x),Def(y))},对于任意程序节点n1和n2∈N,谓词desc(n1,n2)=true当且仅当n1=n2或n1在控制流G的以开始节点为根节点的深度优先搜索树上是n2的子孙节点;succn a(x)中的每个序偶(i,n)∈ω×N表示稀疏值流图节点x的值沿一条值传输流经过n的第i个前驱节点,传入至少一个在节点n处定值的稀疏值流图节点,ω是自然数集合,N是所有程序节点集合;succv(x,i,n)={y|(x,i,y)∈ES∧Def(y)=n}为包含所有对应于给定序偶(i,n)∈succn a(x)的在节点n处定值的变量集合;局部属性comp(x)为真当且仅当Def(x)∈Na,Na是赋值语句组成的程序节点集合。
8.如权利要求7所述的计算机程序的优化方法,其特征在于,步骤4中,对于值编号集合{t|t∈B且smds*(ζt)}中的值编号进行扩展,包括:
步骤401,创建一个新的变量x并设置v1[x]:=t;
步骤402,向dn(t)中插入phi节点x=φ(ζt1,...,ζtm),其中ti为x对应于第i条入边的值编号;
步骤403,将半稀疏值流图形式的计算机程序中所有ζt替换为x;
步骤404,对每个值编号ζti执行步骤201-步骤205;
其中,B={t|dn(t)为半稀疏值流图形式的计算机程序合并节点,且其中不包含结果变量的值编号为t的phi节点};smds*表示半移动向下安全属性方程组的最大解。
10.如权利要求9所述的计算机程序的优化方法,其特征在于,步骤4中,按照下述集合选取插入计算的位置信息:
其中cus*表示向上安全属性方程组的最大解;步骤4中,进行插入计算后还清除无用的代码。
11.一种计算机程序的优化系统,其特征在于,包括:
值编号计算模块,用于通过值编号分析计算得到每个变量和表达式的值编号;
计算机程序优化模块,将静态单赋值形式的计算机程序转换为半稀疏值流图形式的计算机程序;计算半稀疏值流图形式的计算机程序进行标量优化所需的初始属性;如果初始属性已经包含所有所需优化信息则根据计算得到的属性对半稀疏值流图形式的计算机程序或稀疏值流图形式的计算机程序进行程序变换以优化计算机程序,否则扩展半稀疏值流图形式的计算机程序为稀疏值流图形式的计算机程序,并计算进行标量优化所需的属性,直到所有所需属性计算完毕,根据计算得到的属性对半稀疏值流图形式的计算机程序或稀疏值流图形式的计算机程序进行程序变换以优化计算机程序;
半稀疏值流图形式的计算机程序中:所有的值传输流都不能越过与其“语义”等值的计算,具有相同值编号的程序节点间的全局等值关系被连接起来;
稀疏值流图形式的计算机程序中:所有的值传输流都不能越过与其“语义”等值的计算,所有的全局等值关系都必须被一值传输流所连接。
12.如权利要求11所述的计算机程序的优化系统,其特征在于,半稀疏值流图为每个值编号插入phi节点并使用静态单赋值的变量将在不同位置的同一个值编号连接起来。
13.如权利要求11所述的计算机程序的优化系统,其特征在于,步骤3中,半稀疏值流图形式的计算机程序的变量作为半稀疏值流图的节点;稀疏值流图形式的计算机程序的变量作为稀疏值流图的节点;半稀疏值流图或稀疏值流图的边由变量引用关系建立,半稀疏值流图形式的计算机程序或稀疏值流图的形式的计算机程序的中间表示是表示等值关系的值流图;进行标量优化所需的属性附加在半稀疏值流图形式的计算机程序或稀疏值流图的形式的计算机程序的变量上。
14.如权利要求11所述的计算机程序的优化系统,其特征在于,
半稀疏值流图或稀疏值流图是一个边标记的有向图GS=(NS,ES,Vζ,Vε),包含:
开始节点集合Vζ包含所有存在的值编号对应的伪变量ζt;
结束节点集合Vε包含所有存在的值编号对应的伪变量εt;
节点集合NS包含所有开始节点、结束节点和程序中所有变量的集合;
边集合ES为包含三元组(x,i,y)的集合,其中x、y为节点,i为自然数。
15.如权利要求14所述的计算机程序的优化系统,其特征在于,对于静态单赋值形式的计算机程序中出现的每个值编号t,计算机程序优化模块执行下述处理:
对每个程序节点n∈J(t)-{Def(x)|x∈V∧v1[x]=t},创建变量x,并设置v1[x]:=t;然后向每个程序节点n中插入phi节点
将ζt压入栈P;
调用函数Search(t,n);
删除未使用的phi节点;
调用函数Search(t,n)包括:
令h=栈P的高度;
如果n为静态单赋值形式的计算机程序的合并节点,则将n中所有值编号为t的phi节点的结果变量压入栈P;
否则,如果n为赋值语句,且其结果变量的值编号为t,将n的右侧表达式替换为栈P的栈顶变量,并将n的左侧结果变量压入栈P;
对于succ(n)中的每个合并节点n1,将n1中的每个phi节点的对应于节点n的值编号为t的变量替换为栈P的栈顶变量;
对每个children(n)中的节点n’,执行Search(t,n’);
如果栈P的高度大于h,将多出的变量弹出;
其中,DF(S)表示所有S中节点的支配边界的并集,S表示任意程序节点集合;DF+(S)表示S的迭代支配边界;J(t)={n|n∈DF+(J0(t))∧t的定义节点严格支配n},对于一个值编号t∈V,用J0(t)表示包含所有需要t的值的节点集合,V={V(x)|x∈V}表示所有变量的值编号集合;Def(x)表示变量x的定值语句;dn(t)表示值编号t的定义节点,在该节点执行之后,具有值编号t的一个表达式被计算;v1为值编号算法计算得到的每个变量的值编号数组;ζt表示一个恰好在t的定义节点dn(t)之后被赋值的值编号为t的伪变量;εt n表示一个在程序节点n∈DF({dn(t)})处被一个伪phi节点赋值的值编号为t的伪变量;P是一个变量栈,用于构造值传输流;succ(n)表示程序节点n∈N在程序控制流图中的所有后继节点的集合;children(n)表示程序节点n∈N在支配树上所有子节点的集合。
16.如权利要求15所述的计算机程序的优化系统,其特征在于,三元组(x,i,y)表示一条标记的边;三元组(x,i,y)∈ES表示一条从变量x到变量y的值传输流。
17.如权利要求16所述的计算机程序的优化系统,其特征在于,计算机程序优化模块按如下公式计算半移动向下安全属性:
其中,succn a(x)={(i,Def(y))|(x,i,y)∈ES∧desc(Def(x),Def(y))},对于任意程序节点n1和n2∈N,谓词desc(n1,n2)=true当且仅当n1=n2或n1在控制流G的以开始节点为根节点的深度优先搜索树上是n2的子孙节点;succn a(x)中的每个序偶(i,n)∈ω×N表示稀疏值流图节点x的值沿一条值传输流经过n的第i个前驱节点,传入至少一个在节点n处定值的稀疏值流图节点,ω是自然数集合,N是程序节点集合;succv(x,i,n)={y|(x,i,y)∈ES∧Def(y)=n}为包含所有对应于给定序偶(i,n)∈succn a(x)的在节点n处定值的变量集合;局部属性comp(x)为真当且仅当Def(x)∈Na,Na是赋值语句组成的程序节点集合。
18.如权利要求17所述的计算机程序的优化系统,其特征在于,计算机程序优化模块对值编号集合{t|t∈B且smds*(ζt)}中的值编号进行扩展,包括:
创建一个新的变量x并设置v1[x]:=t;
向dn(t)中插入phi节点x=φ(ζt1,...,ζtm),其中ti为x对应于第i条入边的值编号;
将半稀疏值流图形式的计算机程序中所有ζt替换为x;
步骤404,对每个值编号ζti执行步骤201-步骤205;
其中,B={t|dn(t)为半稀疏值流图形式的计算机程序合并节点,且其中不包含结果变量的值编号为t的phi节点};smds*表示半移动向下安全属性方程组的最大解。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910243303.5A CN101876899B (zh) | 2009-12-18 | 2009-12-18 | 一种计算机程序的优化方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910243303.5A CN101876899B (zh) | 2009-12-18 | 2009-12-18 | 一种计算机程序的优化方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101876899A true CN101876899A (zh) | 2010-11-03 |
CN101876899B CN101876899B (zh) | 2014-06-25 |
Family
ID=43019461
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910243303.5A Active CN101876899B (zh) | 2009-12-18 | 2009-12-18 | 一种计算机程序的优化方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101876899B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105573717A (zh) * | 2014-10-08 | 2016-05-11 | 华为技术有限公司 | 一种面向多核处理器的程序划分方法及装置 |
CN115292203A (zh) * | 2022-09-30 | 2022-11-04 | 平安银行股份有限公司 | 一种源代码分析方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040123254A1 (en) * | 2002-12-20 | 2004-06-24 | International Business Machines Corporation | Model checking with layered localization reduction |
CN1906579A (zh) * | 2003-11-14 | 2007-01-31 | 英特尔公司 | 通过流水线变换自动地并行网络应用程序的装置和方法 |
-
2009
- 2009-12-18 CN CN200910243303.5A patent/CN101876899B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040123254A1 (en) * | 2002-12-20 | 2004-06-24 | International Business Machines Corporation | Model checking with layered localization reduction |
CN1906579A (zh) * | 2003-11-14 | 2007-01-31 | 英特尔公司 | 通过流水线变换自动地并行网络应用程序的装置和方法 |
Non-Patent Citations (1)
Title |
---|
聂久焘等: "一种收益驱动的语义代码移动算法", 《北京大学学报( 自然科学版) 网络版》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105573717A (zh) * | 2014-10-08 | 2016-05-11 | 华为技术有限公司 | 一种面向多核处理器的程序划分方法及装置 |
CN105573717B (zh) * | 2014-10-08 | 2018-02-06 | 华为技术有限公司 | 一种面向多核处理器的程序划分方法及装置 |
CN115292203A (zh) * | 2022-09-30 | 2022-11-04 | 平安银行股份有限公司 | 一种源代码分析方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN101876899B (zh) | 2014-06-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101436128B (zh) | 软件测试用例自动生成方法及系统 | |
Murakami et al. | Efficient algorithms for dualizing large-scale hypergraphs | |
CN100465895C (zh) | 编译器、编译方法 | |
CN1802632B (zh) | 用于在程序代码转换期间执行解释器优化的方法和装置 | |
Zhang et al. | New techniques for mining frequent patterns in unordered trees | |
CN103116493B (zh) | 一种应用于粗粒度可重构阵列的自动映射方法 | |
CN107844415B (zh) | 一种基于插值的模型检测路径缩减方法、计算机 | |
CN108491228B (zh) | 一种二进制漏洞代码克隆检测方法及系统 | |
CN107193745A (zh) | PLC程序到NuSMV输入模型的自动化构建方法 | |
CN101271398B (zh) | 多路分支结构的识别方法 | |
CN106599016A (zh) | 一种基于虚拟dom的前端元素维护方法 | |
He et al. | Compact reachability labeling for graph-structured data | |
Singh et al. | SWAPPER: A framework for automatic generation of formula simplifiers based on conditional rewrite rules | |
CN102622334B (zh) | 多线程环境下并行xslt转换方法和装置 | |
CN112527262A (zh) | 深度学习框架编译器宽度非一致自动向量优化方法 | |
CN103646194B (zh) | 一种基于形式化验证的同步数据流程序的可信排序方法 | |
CN105302624A (zh) | 一种可重构编译器中循环流水迭代间启动间距自动分析方法 | |
CN102298681A (zh) | 一种基于数据流切片的软件识别方法 | |
CN101876899B (zh) | 一种计算机程序的优化方法及系统 | |
CN101944040A (zh) | 一种基于谓词的自动并行优化方法 | |
CN115237760A (zh) | 一种基于自然语言处理的JavaScript引擎定向模糊测试方法及系统 | |
Akutsu | Tree edit distance problems: Algorithms and applications to bioinformatics | |
Arge et al. | Multiway simple cycle separators and I/O-efficient algorithms for planar graphs | |
CN110765730A (zh) | 一种组合逻辑电路简化方法 | |
CN108920360B (zh) | 一种软件开发过程模型差异检测方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C41 | Transfer of patent application or patent right or utility model | ||
TR01 | Transfer of patent right |
Effective date of registration: 20160408 Address after: 100080 Beijing City, Haidian District Zhongguancun No. 151 North Street Yanyuan resources building room 1107 Patentee after: Beijing Zhongzhi core technology Co. Ltd. Address before: 100032, Beijing Haidian District Zhongguancun 151 North Street, building 11, resources Patentee before: Beida Zhongzhi Microsystem Science and Technology Co., Ltd., Beijing |