CN1245684C - 用于在赋值语句中查找归约变量的方法和系统 - Google Patents
用于在赋值语句中查找归约变量的方法和系统 Download PDFInfo
- Publication number
- CN1245684C CN1245684C CNB2003101214349A CN200310121434A CN1245684C CN 1245684 C CN1245684 C CN 1245684C CN B2003101214349 A CNB2003101214349 A CN B2003101214349A CN 200310121434 A CN200310121434 A CN 200310121434A CN 1245684 C CN1245684 C CN 1245684C
- Authority
- CN
- China
- Prior art keywords
- hand side
- variable
- assignment statement
- reduction
- lhs 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- 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
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/451—Code distribution
- G06F8/452—Loops
Abstract
本发明涉及一种方法、系统以及程序产品,所述的方法、系统以及程序产品用于在源代码的赋值语句中查找归约变量,以便实现程序循环的并行执行。将使用此处描述的方法找到的归约变量相对于各个循环做标记,并且与关于每个变量各个结合运算符的信息一起,通过编译器指令传送给编译器,以便于归约操作的并行化处理。
Description
技术领域
本发明涉及在源代码中的赋值语句中查找归约变量(reductionvariable)以便并行执行程序循环的技术。
背景技术
如果循环的输出根本与不同迭代中的数据访问的执行顺序无关,则计算机程序中的循环可以完全以并行的方式执行。编译器的编写者通常将这种循环称为DOALL循环。然而,当一个循环不是DOALL循环时,有时可以将迭代分配到几个组中,这样,假如正在结束其执行的组和下一个将开始其执行的组之间满足了同步条件,则每个组中的迭代可以按完全并行的方式执行。一个极端的部分可并行循环的例子是完全顺序的循环,其中组数和迭代数完全相同。
可以通过分析循环体中语句间的数据相关关系来确定该循环是否是完全可并行的。访问同一存储单元的两个语句之间有三种可能的相关关系:流相关(写然后读),反相关(读然后写),以及输出相关(写然后写)。最简单的情况发生在没有流相关、反相关和输出相关时,此时该循环中的所有迭代都是独立的,并且可以并行执行。
流相关:考虑如下的代码段
doi=1,n
A(k(i))=A(k(i))+A(k(i-1))
if(A(k(i)).eq..true.)then
..................
endif
enddo
因为在该循环的不同迭代中的数据访问之间存在流相关,如果该循环被作为DOALL循环执行,则不能保证它的语义。例如在上述的代码段内,因为对于2<i≤n,迭代i+1需要迭代i中产生的值,所以迭代必须按照迭代号的顺序来执行。
在没有流相关情况下的反相关或输出相关:在这个例子中,在循环可以被并行执行之前,必须对循环进行修改以便去掉这些相关。很不幸,不是所有的情况都可以有效地被处理。然而可以对该循环进行两种重要的变换:(1)私有化,以及(2)归约并行化处理。
通过在可能时为每个参与循环执行的处理器创建其私有的产生反相关或输出相关的程序变量的拷贝,私有化可以消除某种类型的反相关或输出相关。下面的例子说明了一个可以通过私有化并行执行的循环。
doi=1,n/2
S1:tmp=A(2*i)
A(2*i)=A(2*i-1)
S2:A(2*i-1)=tmp
enddo
对于1≤i≤n/2,迭代i中的语句S1和迭代i+1中的语句S2间的反相关,可以通过私有化临时变量tmp来消除。
在归约并行化处理中,归约变量被定义为这样的变量,该变量的值被应用于形如x=xexprn的结合操作中,其中为结合运算符,并且x不出现在exprn或该循环的任何其它位置。操作数exprn被称为结合操作数。由于其特殊的特性,归约变量被以特殊的模式访问。下面例子中的语句S1表示了一个简单且常见的归约的例子:
doi=1,n
doj=1,m
S1:A(j)=A(j)+exprn
enddo
enddo
其中运算符在这个例子中为运算符+。数组A()的访问模式为读、修改、写,并且该循环执行的功能是将在每次迭代中计算出的值累加到A()中存储的值上去。这种形式的归约通常称为更新。
归约并行化处理需要两个步骤:归约变量的识别,以及归约操作的并行化。
尽管可以在运行时实现某种程度的并行化处理,但是在可能的情况下还是希望在编译时实施并行化处理,以便使执行的开销最小,这种执行开销将弱化并行化处理带来的好处。Rauchwerger,L在‘Run-TimeParallelization:It’s Time Has Come”,Journal of Parallel Computing,Specical Issue on Language and compilers,Vol.24,Nos.3-4,pp.527-556中已经说明了用于运行时并行化处理的技术。
在归约并行化处理中,编译器所面对的困难在于归约语句的识别。直到现在,通过在语法上进行通用归约模板与循环语句的模式匹配,并且然后执行变量的相关分析,这个问题已经以有限的成功在编译时得到了解决,其中的相关分析确保除了在归约语句中之外,该变量不出现在循环的其它任何地方。这种方法是不够的,因为存在有比模板多得多的模式。
美国专利5,481,723描述了一种能够对嵌套的do循环在编译时进行并行化处理的系统和方法。但是它不适用于非嵌套的循环。
本发明描述了一种新的方法,该方法用于在编译前作为一个预处理在源代码中查找归约变量。这个处理需要依据美国专利公开No.2001/0003211 A1说明中的方法重写源代码的表达式。
为了完整起见,应注意的是,按标量的方式并行执行归约方法要求在变换后的DOALL循环中私有化归约变量,并且需要在DOALL循环后的处理器间归约阶段计算归约操作的最终结果,即,使用每个处理器计算出的部分结果产生一个标量,所述的标量被用作跨处理器的归约操作(与同一处理器的)的操作数。如果归约操作是可交换的,则跨处理器合并阶段可以按任意次序进行,否则,就必须以顺序的方式进行合并阶段的处理。
发明内容
本发明的目的在于在源代码级查找归约变量,以便在不使用模板匹配的情况下,在任何编译发生前,进行程序循环的并行化处理。
为了达到上述目的,本发明描述了一种用于在循环中查找归约变量的方法、系统和计算机程序产品,它们可以应用于源代码而不是编译器创建的中间结构。
作为上述方法的第一步,该循环体的每条赋值语句的右手侧(RHS)被重写成归约形式。对于每条重写的赋值语句,确定在左手侧(LHS)的变量并且创建与其相应的搜索串。在该循环体的每条重写赋值语句的RHS中扫描与其相应的搜索串,并且基于对某些预定的条件的满足,填充潜在的归约表。该潜在归约表包含对潜在归约变量和与其相应的赋值语句的引用。在归约表建立完后,将与依据预定的条件被判断为是无效的潜在的归约变量相关联的所有表项从该表中删除。随后,确定归约表中所剩下的每个赋值语句的结合运算符。根据预定的其它条件,该归约表被再次剪裁掉无效的表项。在该归约表中剩下的潜在的归约变量被认为是希望得到的归约变量。
假设在实现本发明的方法时,该循环体可以被看成一个简单的块,诸如,它可以包括一系列的零个或多个不带分支的指令,并且没有分支目标或标号。每个简单的块可以对应一个线性的语句序列,一条语句,或者甚至是单个操作。在简单块中所有的语句或操作都执行(除非有例外)。如果循环体中的赋值语句包括函数调用,那么仅当在该语句中的那些调用对于被调用的函数来说是内联函数时,在其函数调用参数列表中出现LHS变量。如果在处理完这些内联函数后循环体不再是一个简单块,那么本发明的方法就不适用。
本发明还提供一种用于在源代码程序循环中查找归约变量以使得可以实现并行执行的系统,该系统包括:至少一个中央处理单元,至少一条系统总线,至少一个与该系统总线相连的通信单元,以及至少一个与该系统总线相连的存储单元,所述系统还包括:用于将源代码程序循环中的各个赋值语句的右手侧RHS的表达式重写成归约形式的处理装置,用于为每条所述的赋值语句确定相应的左手侧LHS变量并且为该左手侧LHS变量创建相应的变量搜索串,以便在所述的重写表达式中以该左手侧LHS变量作为因子进行搜索的处理装置,用于为这样的左手侧LHS变量的倒数创建相应的倒数变量搜索串,以便在该重写表达式中以该左手侧LHS变量的倒数作为因子进行搜索的处理装置,用于在所述的每个赋值语句的重写的右手侧RHS表达式中,搜索与一个左手侧LHS变量相应的变量搜索串的处理装置,用于在所述的每个赋值语句的重写的右手侧RHS表达式中,搜索与一个左手侧LHS变量的倒数相应的倒数变量搜索串的处理装置,用于按照预定的条件,将对左手侧LHS变量以及与它们相应的赋值语句的引用插入归约表的处理装置,以及用于按照预定的条件,将对左手侧LHS变量以及与它们相应的赋值语句的引用从归约表中删除的处理装置。
优选的,本发明所述存储单元还包括有用于从源代码程序循环中删除表示恒等式的赋值语句的装置。
优选的,本发明中所述存储单元还包括有这样的装置,该装置用于响应赋值语句的右手侧RHS仅包含一项并且该项仅包括与所述左手侧LHS变量相应的变量搜索串的一个实例,将对该赋值语句以及与其相应的左手侧LHS变量的引用插入到归约表中。
优选的,本发明中所述存储单元还包括有这样的装置,该装置用于响应赋值语句的右手侧RHS包含多个项,其中仅有一项仅包括与所述左手侧LHS变量相应的变量搜索串的一个实例,并且该项由前面带有某一算术运算符的所述左手侧LHS变量组成,将对该赋值语句以及与其相应的左手侧LHS变量的引用插入到归约表中。
优选的,本发明中所述存储单元还包括有这样的装置,该装置用于响应赋值语句的右手侧RHS包含多个项,其中每项都仅包括与所述左手侧LHS变量相应的变量搜索串的一个实例,将对该赋值语句以及与其相应的左手侧LHS变量的引用插入到归约表中。
优选的,本发明所述存储单元还包括有这样的装置,该装置用于响应循环体内的一个赋值语句的右手侧RHS具有与一个左手侧LHS变量相应的变量搜索串,并且在所述归约表中没有列出该赋值语句,将对所述的左手侧LHS变量以及与其相应赋值语句的引用从归约表中删除。
优选的,本发明中所述存储单元还包括有这样的装置,该装置用于响应具有与一个左手侧LHS变量相应的倒数变量搜索串的循环体中的任何一个赋值语句,将对所述的左手侧LHS变量以及与其相应赋值语句的引用从归约表中删除。
优选的,本发明中所述存储单元还包括有这样的装置,该装置用于为每个在归约表中被引用的赋值语句确定相应的结合运算符以及结合操作数。
附图说明
本发明将参考附图进行说明。
图1-a,图1-b和图1-c表示了确定归约变量的流程图。
图2表示了为归约语句确定结合运算符的流程图。
图3表示了根据本发明的一种系统。
具体实施方式
如图1-a,图1-b和图1-c所示,根据下面详细描述的格式,该循环的每条赋值语句中的表达式被重写(1.1)为归约的形式,以便于某些特征串的搜索操作,其中该表达式:
●被以删除了所有括号的展开的形式表示,
●将每个除法运算替换成用于相关的变量或常数的倒数的乘法运算,
●使用浮点格式,将每个常数表示为定长的字符串,例如常数62.1702表示为“.621702e+02”,
●使得每项由一元运算符‘+’或‘-’开始,后跟一个常量操作数,如果有的话,该常量操作数后跟一个变量操作数,其中项内的任意两个操作数间是乘法运算符,并且项本身不能根据给定的变量操作数进一步归约,
●使得项中出现的所有变量操作数按非递减ASCII值的顺序从左到右成为一排序的序列,
●使得那些仅仅是常数操作数不同的所有的项合并成为一项,并且
●使得出现在表达式中的所有的项从左到右按预定的顺序排列成一个序列。
在算法的第一阶段,依次为每个赋值语句确定在该赋值语句左手侧(LHS)的变量V,并且为其创建(1.2)分别称为变量搜索串和倒数变量搜索串的字符串“*V”和“*V-”,在每个搜索串中,“*”表示乘法运算符,“V”表示变量操作数,并且“V-”表示变量“V”的倒数。随后,在该语句的右手侧(RHS)执行对搜索串“*V”的搜索(1.3)。检查该赋值语句的RHS(1.4)以确定其是否仅包括一项,并且该项与‘+V’等价。如果是这种情况,该赋值语句被从循环体中删除(1.5),这是因为该语句表示一恒等式。值得指出的是,对串“*V”的搜索,意味着在该项内搜索做为因子出现的“V”。
进一步,如果遇到下面的情况:
1.RHS仅有一项(1.6),该项包括且仅包括搜索串“*V”的一个实例,并且该项与‘+V’不等价,
2.RHS有多个项(1.7),这些项中仅有一项包括且仅包括搜索串“*V”的一个实例,并且该项与‘+V’等价,
3.RHS有多个项(1.8),这些项中的每个都包括且仅包括搜索串“*V”的一个实例,
则变量“V”为潜在的归约变量且与其相应的赋值语句为潜在的归约语句。在归约表中插入对该潜在归约变量和该潜在归约语句的引用(1.9)。针对循环中的所有赋值语句重复上述的第一阶段步骤(1.10)。
然后,检查归约表以确定其是否为空(1.11)。如果归约表为空,这意味着在该算法的第一阶段中没有发现归约变量,那么就终止该搜索过程。然而,如果该表不为空,则搜索进入第二阶段。
在该算法的第二阶段,对于归约表中的每个变量“V”,在整个循环体中搜索搜索串“*V”(1.12)以及串“*V-”(1.13),其中“V-”是“V”的倒数,以便删除归约表中无效的归约变量。除了在潜在归约表中与其相连的赋值语句之外,如果搜索串“*V”出现在任何其它语句中(1.12),则将该归约表中的与变量“V”相关联的所有表项删除。进一步,如果串“*V-”出现在循环体中的任何位置(1.13),则在这种情况下,同样删除该归约表中的变量“V”的所有表项。
归约表被再次检查(1.14)并且如果发现是空的,该算法停止,指示在该循环体内没有发现归约变量。然而,如果表不是空的,则算法进入最后阶段。
在算法的最后阶段内,确定归约表中的每个潜在的归约语句的结合运算符(1.15)。进一步,从归约表中删除(1.17)在归约表中具有多个实例且这些实例不共享公共结合运算符(1.16)的潜在归约变量的引用。这样就以归约表中的表项的形式完成了归约变量的识别。该归约表中的剩余变量就是所需的归约变量。
图2表示了用于为归约表中引用的归约语句确定结合运算符的方法。值得注意的是,在归约语句中归约变量“V”实际上被定义为其值被在一结合操作使用的变量,该结合操作形如v=vexprn,其中为结合运算符,v不出现在该结合操作数exprn中。这些步骤如下面所列:
1.如果该RHS仅包含一项(2.1),那么该结合运算符为乘法运算符“*”(2.2)并且结合操作数exprn包括删除了串“*V”的项。
2.如果该RHS包括多个项(2.3),这些项中只有一项包含变量搜索串“*V”(该项与‘+V’等价),那么结合运算符为加运算符“+”(2.4),并且该结合操作数exprn包括在一对括号内的所有的剩余项。
3.如果该RHS包括多个项(2.5),每项都包含变量搜索串“*V”,那么该结合运算符为乘法运算符“*”(2.6),并且该关联操作数exprn由被全部包括在一对括号中的所有项构成,在这些项中删除了串“*V”。
图3表示了一种计算机系统,它可以在源代码级查找归约变量,以使得易于实现循环执行的并行化。该计算机系统(3.1)包括多个子系统,它们借助系统总线(3.2)相互连接。系统(3.1)带有一个存储装置(3.5),该存储装置中存储了用于查找归约变量的装置,并且包含将要被并行化的循环的源代码。通过键盘(3.10)、鼠标(3.11)以及通过I/O接口(3.9)与计算机系统相连的其它输入设备输入循环的源代码。该计算机系统(3.1)可以通过网络接口(3.8)与各种网络,例如LAN、WAN或是因特网(3.12)连接。
通过通信总线(3.2)将用于查找归约变量的装置以及包含该循环的源代码装入计算机系统(3.1)的存储器(3.4)。存储器(3.4)保存要被处理器(3.3)执行的当前指令及它们的结果。处理器(3.3)执行被编码在重写装置中的指令,该重写装置将源代码程序循环中每个赋值语句右手侧(RHS)的表达式重写为说明书中先前描述的归约形式。然后,搜索串创建装置确定每个重写语句的LHS的变量,并且为该变量建立相应的变量搜索串。此后,该变量搜索装置在归约表达式的RHS上搜索该变量搜索串。
随后,执行归约表创建装置中的指令以建立归约表,依据某些条件在源代码的循环中查找潜在的归约变量,并且在该归约表中插入对有效的潜在归约变量以及与它们相应的赋值语句的引用。删除装置依据预定的条件从归约表中删除无效的归约变量。作为最后一步,处理器(3.3)执行被编码在结合运算符确定装置中的指令,以便为归约表中剩余的归约语句确定结合运算符。用于执行这些装置的处理器(3.3)可以是微处理器,如PC,专用的半导体芯片或是其它可以用作数字计算机的装置。
本领域的一般技术人员可知,上述的装置是用于在计算机系统上操作的指令。这些装置可以在计算机系统的硬件中以嵌入的方式存在,或者可以被嵌入到各种计算机可读的媒体中。该计算机可读的媒体可以采用这样的编码格式,该格式可以在特定的信息处理系统中被解码以便实际使用。在此处上下文中的计算机程序装置或计算机程序是指一系列用于使具有信息处理能力的系统执行特定的功能的一组指令,以任何的语言、代码或符号的形式表示,该功能的执行可以是直接的,或者是在下述各项之一或全部的执行之后:
a)转换成另一种语言、代码或符号
b)以不同的材料的形式进行复制。
图3中说明的例子并不意味着结构上的限制,并且所述装置所采用的计算机系统的配置可以根据该实现而变化。任何种类的计算机系统或其它适用于执行此处描述的方法的装置都可以用于本发明的实现中。典型的硬件和软件的组合可以是带有计算机程序的通用的计算机系统,这些程序被装入并执行后控制该计算机系统,以使其执行此处描述的装置。除了PDA,Web信息亭,或者是Web设备之外,还可以使用的计算机系统的其它例子还有笔记本计算机或手持式计算机。
例子:
本发明将参考下面的例子进行描述:
例子1
1:do i=1,n
2:x=c*d
3:ai=ai+2.0
4:bi=2.0*bi+(c-d)*bi-bi
5:y=c*y+d*y-3.0*y
6:z=2*a+z-a-a
7:w=w*w/u
8:u=u/w
9:enddo
在将该循环中的每个赋值语句中的表达式都重写为归约形式后,我们有:
1:do i=1,n
2:x=+.100000e+01*c*d
3:ai=+.200000e+01+.100000e+01*ai
4:bi=+.100000e+01*bi+.100000e+01*bi*c-.100000e+01*bi*d
5:y=+.100000e+01*c*y+.100000e+01*d*y-.300000e+01*y
6:z=+.100000e+01*z
7:w=+.100000e+01*u_*w*w
8:u=+.100000e+01*u*w_
9:enddo
在应用该算法的第一阶段后,我们注意到:
x不是归约变量,因为它没有出现在右手侧,
ai是一个潜在的归约变量,因为它出现在仅有的一项“+.100000e+01*ai”中,
bi是一个潜在的归约变量,因为它出现在所有的项中,并且每项中只有“*bi”的一个实例,
y是一个潜在的归约变量,因为它出现在所有的项中,并且每项中只有“*y”的一个实例,
z不是归约变量,因为右手侧仅有一项“+.100000e+01*z”(说明该语句表示一恒等式且应被删除),
w不是归约变量,因为右手侧中仅有的一项中有多于一个“*w”的实例,
u是一个潜在的归约变量,因为右手侧仅有的一个项中只有“*u”的一个实例。
潜在的归约表
变量 | 语句no. | 注释 |
ai | 3 | 潜在归约变量 |
bi | 4 | 潜在归约变量 |
y | 5 | 潜在归约变量 |
u | 8 | 潜在归约变量 |
在应用该算法的第二阶段后,我们有:
1:do i=1,n
2:x=+.100000e+01*c*d
3:ai=+.200000e+01+.100000e+01*ai
4:bi=+.100000e+01*bi+.100000e+01*bi*c-.100000e+01*bi*d
5:y=+.100000e+01*c*y+.100000e+01*d*y-.300000e+01*y
6:--deleted--
7:w=+.100000e+01*u_*w*w
8:u=+.100000e+01*u*w
9:enddo
从中可以得出结论:
u不再是归约变量,因为它在语句7中以u_的形式再次出现了。
归约表
变量 | 语句no. | 注释 |
ai | 3 | 潜在归约变量 |
bi | 4 | 潜在归约变量 |
y | 5 | 潜在归约变量 |
在该算法的最后阶段,我们获得了如下所示的带有结合运算符的归约变量表:
变量 | 语句no. | 操作符 | 语句 |
ai | 3 | + | ai=ai+2.0 |
bi | 4 | * | bi=bi*(1.0+c-d) |
y | 5 | * | y=y*(-3.0+c+d) |
例子2
1:do i=1,n
2:y=c*y+d*y-3.0*y
3:y=(e*f+g)*y
4:z=z+2
5:z=z*a-b*z
6:enddo
在将该循环中的每个赋值语句中的表达式都重写为归约形式后,我们有:
2:y=+.100000e+01*c*y+.100000e+01*d*y-.300000e+01*y
3:y=+.100000e+01*e*f*y+.100000e+01*g*y
4:z=+.200000e+01+.100000e+01*z
5:z=+.100000e+01*a*z-.100000e+01*b*z
6:enddo
在应用该算法的第一阶段后,我们注意到:
y是一个潜在的归约变量,因为在语句2中,它出现在所有的项中,并且每项中只有“*y”的一个实例,
y是一个潜在的归约变量,因为在语句3中,它出现在所有的项中,并且每项中只有“*y”的一个实例,
z是一个潜在的归约变量,因为在语句4中,*z”出现在仅有的项“+.100000e+01*z”中,
z是一个潜在的归约变量,因为在语句5中,它出现在所有的项中,并且每项中只有“*z”的一个实例,
归约表
变量 | 语句no. | 注释 |
y | 3 | 潜在归约变量 |
y | 4 | 潜在归约变量 |
z | 5 | 潜在归约变量 |
z | 8 | 潜在归约变量 |
在该算法的第二阶段之后,我们注意到:
1:do i=1,n
2:y=+.100000e+01*c*y+.100000e+01*d*y-.300000e+01*y
3:y=+.100000e+01*e*f*y+.100000e+01*g*y
4:z=+.100000e+01*z+.200000e+01
5:z=+.100000e+01*a*z-.100000e+01*b*z
6:enddo
其中很明显,y和z没有任何变化,仍是归约表中的潜在的归约变量。
在该算法的最后阶段,我们注意到:
归约表
变量 | 语句no. | 运算符 | 语句 |
y | 2 | * | y=y*(c+d-3.0) |
y | 3 | * | y=y*(e*f+g) |
z | 4 | + | z=z+2.0 |
z | 5 | * | z=z*(a-b) |
从中我们得到结论:
y仍然是归约变量,因为y的所有实例都与同样的结合运算符相关联,
z不再是归约变量,因为y的不同实例有不同的结合运算符与其相关联,这样,带有结合运算符的归约表为:
变量 | 语句no. | 运算符 | 语句 |
y | 2 | * | y=y*(c+d-3.0) |
Y | 3 | * | y=y*(e*f+g) |
本领域的一般技术人员明白,上述作为例子给出的叙述仅仅是说明性的且不意味着是排他的或是限制性,并且可以在上面发明的范围内作出各种改型。
因此,本发明并不限于以披露为目的的特定的例子,而是覆盖所有的不背离本发明所允许的范围的变化和改型。因此,本发明并不限于此处或附图的描述,而仅仅限于权利要求所述。
Claims (16)
1.一种用于在源代码程序循环中查找归约变量以实现并行执行的方法,包括如下步骤:
a对于源代码程序循环的各个赋值语句,将该赋值语句右手侧RHS的表达式重写成归约形式,
b为每个所述的赋值语句,确定相应的左手侧LHS变量,并且为该左手侧LHS变量创建相应的变量搜索串,以便在该重写表达式中将该左手侧LHS变量作为因子进行搜索,
c为这样的左手侧LHS变量的倒数创建相应的倒数变量搜索串,以便在该重写表达式中将该左手侧LHS变量的倒数作为因子进行搜索,
d在所述赋值语句的重写的右手侧RHS表达式中搜索与一个左手侧LHS变量相应的变量搜索串,
e在所述赋值语句的重写的右手侧RHS表达式中搜索与一个左手侧LHS变量的倒数相应的倒数变量搜索串,
f依据预定的条件,在归约表中插入对左手侧LHS变量以及与它们相应的赋值语句的引用,以及
g依据预定的条件,在归约表中删除对左手侧LHS变量以及与它们相应的赋值语句的引用。
2.如权利要求1所述的方法,包括从该源代码程序循环中删除表示恒等式的赋值语句的步骤。
3.如权利要求1所述的方法,其中步骤f包括这样的步骤,该步骤响应一个赋值语句的右手侧RHS仅包含一项并且该项仅包括与所述左手侧LHS变量相应的变量搜索串的一个实例,将对该赋值语句以及与其相应的左手侧LHS变量的引用插入到归约表中。
4.如权利要求1所述的方法,其中步骤f包括这样的步骤,该步骤响应一个赋值语句的右手侧RHS包含多个项,其中仅有一项仅包括与所述左手侧LHS变量相应的变量搜索串的一个实例,并且该项由前面带有某一算术运算符的所述左手侧LHS变量组成,将对该赋值语句以及与其相应的左手侧LHS变量的引用插入到归约表中。
5.如权利要求1所述的方法,其中步骤f包括这样的步骤,该步骤响应一个赋值语句的右手侧RHS包含多个项,其中每项都仅包括与所述左手侧LHS变量相应的变量搜索串的一个实例,将对该赋值语句以及与其相应的左手侧LHS变量的引用插入到归约表中。
6.如权利要求1所述的方法,其中步骤g包括这样的步骤,该步骤响应循环体中的一个赋值语句的右手侧RHS具有与一个左手侧LHS变量相应的变量搜索串,并且在所述归约表中没有列出该赋值语句,将对所述的左手侧LHS变量以及与其相应赋值语句的引用从归约表中删除。
7.如权利要求1所述的方法,其中步骤g包括这样的步骤,该步骤响应具有与一个左手侧LHS变量相应的倒数变量搜索串的循环体中的任何一个赋值语句,将对所述的左手侧LHS变量以及与其相应赋值语句的引用从归约表中删除。
8.如权利要求1所述的方法,包括为归约表中的每个被引用的赋值语句确定相应的结合运算符以及结合操作数的步骤。
9.一种用于在源代码程序循环中查找归约变量以使得可以实现并行执行的系统,该系统包括:
- 至少一个中央处理单元,
- 至少一条系统总线,
- 至少一个与该系统总线相连的通信单元,以及
- 至少一个与该系统总线相连的存储单元,包括:
- 所述系统还包括:
a.用于将源代码程序循环中的各个赋值语句的右手侧右手侧RHS的表达式重写成归约形式的处理装置,
b.用于为每条所述的赋值语句确定相应的左手侧LHS变量并且为该左手侧LHS变量创建相应的变量搜索串,以便在所述的重写表达式中以该左手侧LHS变量作为因子进行搜索的处理装置,
c.用于为这样的左手侧LHS变量的倒数创建相应的倒数变量搜索串,以便在该重写表达式中以该左手侧LHS变量的倒数作为因子进行搜索的处理装置,
d.用于在所述的每个赋值语句的重写的右手侧RHS表达式中,搜索与一个左手侧LHS变量相应的变量搜索串的处理装置,
e.用于在所述的每个赋值语句的重写的右手侧RHS表达式中,搜索与一个左手侧LHS变量的倒数相应的倒数变量搜索串的处理装置,
f.用于按照预定的条件,将对左手侧LHS变量以及与它们相应的赋值语句的引用插入归约表的处理装置,以及
g.用于按照预定的条件,将对左手侧LHS变量以及与它们相应的赋值语句的引用从归约表中删除的处理装置。
10.如权利要求9所述的系统,其中存储单元包含有用于从源代码程序循环中删除表示恒等式的赋值语句的装置。
11.如权利要求9所述的系统,其中存储单元包含有这样的装置,该装置用于响应赋值语句的右手侧RHS仅包含一项并且该项仅包括与所述左手侧LHS变量相应的变量搜索串的一个实例,将对该赋值语句以及与其相应的左手侧LHS变量的引用插入到归约表中。
12.如权利要求9所述的系统,其中存储单元包含有这样的手段,该装置用于响应赋值语句的右手侧RHS包含多个项,其中仅有一项仅包括与所述左手侧LHS变量相应的变量搜索串的一个实例,并且该项由前面带有某一算术运算符的所述左手侧LHS变量组成,将对该赋值语句以及与其相应的左手侧LHS变量的引用插入到归约表中。
13.如利要求9所述的系统,其中存储单元包含有这样的手段,该装置用于响应赋值语句的右手侧RHS包含多个项,其中每项都仅包括与所述左手侧LHS变量相应的变量搜索串的一个实例,将对该赋值语句以及与其相应的左手侧LHS变量的引用插入到归约表中。
14.如权利要求9所述的系统,其中存储单元包含有这样的装置,该装置用于响应循环体内的一个赋值语句的右手侧RHS具有与一个左手侧LHS变量相应的变量搜索串,并且在所述归约表中没有列出该赋值语句,将对所述的左手侧LHS变量以及与其相应赋值语句的引用从归约表中删除。
15.如权利要求9所述的系统,其中存储单元包含有这样的装置,该装置用于响应具有与一个左手侧LHS变量相应的倒数变量搜索串的循环体中的任何一个赋值语句,将对所述的左手侧LHS变量以及与其相应赋值语句的引用从归约表中删除。
16.如权利要求9所述的系统,其中存储单元包含有这样的装置,该装置用于为每个在归约表中被引用的赋值语句确定相应的结合运算符以及结合操作数。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/321,971 | 2002-12-17 | ||
US10/321,971 US7089545B2 (en) | 2002-12-17 | 2002-12-17 | Detection of reduction variables in an assignment statement |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1508681A CN1508681A (zh) | 2004-06-30 |
CN1245684C true CN1245684C (zh) | 2006-03-15 |
Family
ID=32507175
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2003101214349A Expired - Fee Related CN1245684C (zh) | 2002-12-17 | 2003-12-16 | 用于在赋值语句中查找归约变量的方法和系统 |
Country Status (3)
Country | Link |
---|---|
US (1) | US7089545B2 (zh) |
JP (1) | JP2004288163A (zh) |
CN (1) | CN1245684C (zh) |
Families Citing this family (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7337437B2 (en) * | 1999-12-01 | 2008-02-26 | International Business Machines Corporation | Compiler optimisation of source code by determination and utilization of the equivalence of algebraic expressions in the source code |
US8176108B2 (en) * | 2000-06-20 | 2012-05-08 | International Business Machines Corporation | Method, apparatus and computer program product for network design and analysis |
US7171544B2 (en) * | 2003-12-15 | 2007-01-30 | International Business Machines Corporation | Run-time parallelization of loops in computer programs by access patterns |
US7620945B1 (en) * | 2005-08-16 | 2009-11-17 | Sun Microsystems, Inc. | Parallelization scheme for generic reduction |
US7823141B1 (en) * | 2005-09-30 | 2010-10-26 | Oracle America, Inc. | Using a concurrent partial inspector loop with speculative parallelism |
US7882498B2 (en) * | 2006-03-31 | 2011-02-01 | Intel Corporation | Method, system, and program of a compiler to parallelize source code |
US8037462B2 (en) * | 2006-08-02 | 2011-10-11 | International Business Machines Corporation | Framework for parallelizing general reduction |
US20080127146A1 (en) * | 2006-09-06 | 2008-05-29 | Shih-Wei Liao | System and method for generating object code for map-reduce idioms in multiprocessor systems |
US8291197B2 (en) | 2007-02-12 | 2012-10-16 | Oracle America, Inc. | Aggressive loop parallelization using speculative execution mechanisms |
WO2008118613A1 (en) * | 2007-03-01 | 2008-10-02 | Microsoft Corporation | Executing tasks through multiple processors consistently with dynamic assignments |
CN101667135B (zh) * | 2009-09-30 | 2013-07-31 | 浙江大学 | 一种交互式并行化编译系统及其编译方法 |
US8453135B2 (en) * | 2010-03-11 | 2013-05-28 | Freescale Semiconductor, Inc. | Computation reuse for loops with irregular accesses |
US8381195B2 (en) | 2010-06-17 | 2013-02-19 | Microsoft Corporation | Implementing parallel loops with serial semantics |
US8745061B2 (en) * | 2010-11-09 | 2014-06-03 | Tibco Software Inc. | Suffix array candidate selection and index data structure |
US8793675B2 (en) * | 2010-12-24 | 2014-07-29 | Intel Corporation | Loop parallelization based on loop splitting or index array |
US8726251B2 (en) * | 2011-03-29 | 2014-05-13 | Oracle International Corporation | Pipelined loop parallelization with pre-computations |
US9424011B2 (en) | 2014-04-01 | 2016-08-23 | International Business Machines Corporation | Recursive expression simplification |
CN105320300A (zh) * | 2014-07-03 | 2016-02-10 | 宏景科技股份有限公司 | 循环式鼠标输入方法及鼠标装置 |
KR20160071782A (ko) * | 2014-12-12 | 2016-06-22 | 삼성전자주식회사 | 멀티 스레드를 처리하는 방법 및 장치 |
US11042650B2 (en) * | 2018-12-06 | 2021-06-22 | International Business Machines Corporation | Sargable query-predicate evaluation for encrypted databases |
CN111475410B (zh) * | 2020-03-31 | 2024-01-09 | 北京经纬恒润科技股份有限公司 | 一种测试用例生成方法及装置 |
CN111966346B (zh) * | 2020-09-09 | 2022-05-10 | 支付宝(杭州)信息技术有限公司 | 应用系统的污点分析方法及装置 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA1319757C (en) | 1988-07-29 | 1993-06-29 | Digital Equipment Corporation | Echelon method for execution of nested loops in multiple processor computers |
US5363473A (en) * | 1991-05-28 | 1994-11-08 | The Trustees Of Columbia University In The City Of New York | Incremental update process and apparatus for an inference system |
JP3539613B2 (ja) * | 1997-12-03 | 2004-07-07 | 株式会社日立製作所 | ループ飛び出し文を含むループに対する配列サマリ解析方法 |
US6367071B1 (en) * | 1999-03-02 | 2002-04-02 | Lucent Technologies Inc. | Compiler optimization techniques for exploiting a zero overhead loop mechanism |
JP2001161025A (ja) * | 1999-11-30 | 2001-06-12 | Ando Electric Co Ltd | 電流制限装置 |
US7337437B2 (en) | 1999-12-01 | 2008-02-26 | International Business Machines Corporation | Compiler optimisation of source code by determination and utilization of the equivalence of algebraic expressions in the source code |
US6738967B1 (en) * | 2000-03-14 | 2004-05-18 | Microsoft Corporation | Compiling for multiple virtual machines targeting different processor architectures |
US6578196B1 (en) * | 2000-06-07 | 2003-06-10 | International Business Machines Corporation | Checking of units and dimensional homogeneity of expressions in computer programs |
US6895580B2 (en) * | 2001-09-20 | 2005-05-17 | International Business Machines Corporation | Expression reduction during compilation through routine cloning |
-
2002
- 2002-12-17 US US10/321,971 patent/US7089545B2/en not_active Expired - Fee Related
-
2003
- 2003-12-16 CN CNB2003101214349A patent/CN1245684C/zh not_active Expired - Fee Related
- 2003-12-17 JP JP2003420076A patent/JP2004288163A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
US20040117781A1 (en) | 2004-06-17 |
US7089545B2 (en) | 2006-08-08 |
JP2004288163A (ja) | 2004-10-14 |
CN1508681A (zh) | 2004-06-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1245684C (zh) | 用于在赋值语句中查找归约变量的方法和系统 | |
Adams et al. | Learning to optimize halide with tree search and random programs | |
Bastoul | Code generation in the polyhedral model is easier than you think | |
CN1287257C (zh) | 用于算术表达式优化的方法和装置 | |
CN1284080C (zh) | 基于值特化来优化软件代码的方法和装置 | |
CN1101019C (zh) | 数据序列产生方法及设备、转换方法及计算机 | |
CN1752934A (zh) | 编译器、编译方法以及编译程序 | |
Huang et al. | Pylog: An algorithm-centric python-based FPGA programming and synthesis flow | |
Mendis et al. | goSLP: globally optimized superword level parallelism framework | |
CN1257454C (zh) | 用于展开计算机程序中超级块的编译装置和方法 | |
VanHattum et al. | Vectorization for digital signal processors via equality saturation | |
CN1922574A (zh) | 无需额外的代码分析来进行链接时代码优化的方法和系统 | |
CN1570870A (zh) | 终极管道和最优重排技术 | |
CN1961284A (zh) | 使用n位乘加操作实现不变量除数的整数除法的方法和系统 | |
CN111078290A (zh) | 一种用于可扩展指令集的编译器及编译方法 | |
CN1608247A (zh) | 自动指令集体系结构的产生 | |
US9411567B2 (en) | Strength reduction compiler optimizations for operations with unknown strides | |
CN1143774A (zh) | 优化器 | |
CN1672132A (zh) | 源到源的分区编译 | |
US20020083423A1 (en) | List scheduling algorithm for a cycle-driven instruction scheduler | |
CN1419192A (zh) | 中间代码预处理、执行装置及执行系统及计算机程序产品 | |
CN1313927C (zh) | 智能卡运行环境的控制方法 | |
CN1900910A (zh) | 二进制翻译中经由跳转表的多目标分支语句的识别方法 | |
CN101055569A (zh) | 一种电子数据表的函数收集方法和装置 | |
Blech et al. | A formal correctness proof for code generation from SSA form in Isabelle/HOL |
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 | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20060315 Termination date: 20100118 |