用于在赋值语句中查找归约变量的方法和系统的制作方法

文档序号:6421232阅读:156来源:国知局
专利名称:用于在赋值语句中查找归约变量的方法和系统的制作方法
技术领域
本发明涉及在源代码中的赋值语句中查找归约变量(reductionvariable)以便并行执行程序循环的技术。
背景技术
如果循环的输出根本与不同迭代中的数据访问的执行顺序无关,则计算机程序中的循环可以完全以并行的方式执行。编译器的编写者通常将这种循环称为DOALL循环。然而,当一个循环不是DOALL循环时,有时可以将迭代分配到几个组中,这样,假如正在结束其执行的组和下一个将开始其执行的组之间满足了同步条件,则每个组中的迭代可以按完全并行的方式执行。一个极端的部分可并行循环的例子是完全顺序的循环,其中组数和迭代数完全相同。
可以通过分析循环体中语句间的数据相关关系来确定该循环是否是完全可并行的。访问同一存储单元的两个语句之间有三种可能的相关关系流相关(写然后读),反相关(读然后写),以及输出相关(写然后写)。最简单的情况发生在没有流相关、反相关和输出相关时,此时该循环中的所有迭代都是独立的,并且可以并行执行。
流相关考虑如下的代码段do i=1,nA(k(i))=A(k(i))+A(k(i-1))if(A(k(i)).eq..true.)then………………endifenddo因为在该循环的不同迭代中的数据访问之间存在流相关,如果该循环被作为DOALL循环执行,则不能保证它的语义。例如在上述的代码段内,因为对于2<i≤n,迭代i+1需要迭代i中产生的值,所以迭代必须按照迭代号的顺序来执行。
在没有流相关情况下的反相关或输出相关在这个例子中,在循环可以被并行执行之前,必须对循环进行修改以便去掉这些相关。很不幸,不是所有的情况都可以有效地被处理。然而可以对该循环进行两种重要的变换(1)私有化,以及(2)归约并行化处理。
通过在可能时为每个参与循环执行的处理器创建其私有的产生反相关或输出相关的程序变量的拷贝,私有化可以消除某种类型的反相关或输出相关。下面的例子说明了一个可以通过私有化并行执行的循环。
do i=1.n/2S1tmp=A(2*i)A(2*i)=A(2*i-1)S2A(2*i-1)=tmpenddo对于1≤i≤n/2,迭代i中的语句S1和迭代i+1中的语句S2间的反相关,可以通过私有化临时变量tmp来消除。
在归约并行化处理中,归约变量被定义为这样的变量,该变量的值被应用于形如x=xexprn的结合操作中,其中为结合运算符,并且x不出现在exprn或该循环的任何其它位置。操作数exprn被称为结合操作数。由于其特殊的特性,归约变量被以特殊的模式访问。下面例子中的语句S1表示了一个简单且常见的归约的例子do i=1,ndo j=1,mS1A(j)=A(j)+exprnenddoenddo其中运算符在这个例子中为运算符+。数组A()的访问模式为读、修改、写,并且该循环执行的功能是将在每次迭代中计算出的值累加到A()中存储的值上去。这种形式的归约通常称为更新。
归约并行化处理需要两个步骤归约变量的识别,以及归约操作的并行化。
尽管可以在运行时实现某种程度的并行化处理,但是在可能的情况下还是希望在编译时实施并行化处理,以便使执行的开销最小,这种执行开销将弱化并行化处理带来的好处。Rauchwerger,L在‘Run-TimeParallelizationIt’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变量。如果在处理完这些内联函数后循环体不再是一个简单块,那么本发明的方法就不适用。


本发明将参考附图进行说明。
图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=vexprn,其中为结合运算符,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设备之外,还可以使用的计算机系统的其它例子还有笔记本计算机或手持式计算机。
例子本发明将参考下面的例子进行描述例子11do i=1,n2x=c*d3ai=ai+2.04bi=2.0*bi+(c-d)*bi-bi5y=c*y+d*y-3.0*y6z=2*a+z-a-a7w=w*w/u8u=u/w9enddo
在将该循环中的每个赋值语句中的表达式都重写为归约形式后,我们有1do i=1,n2x=+.100000e+01*c*d3ai=+.200000e+01+.100000e+01*ai4bi=+.100000e+01*bi+.100000e+01*bi*c-.100000e+01*bi*d5y=+.100000e+01*c*y+.100000e+01*d*y-.300000e+01*y6z=+.100000e+01*z7w=+.100000e+01*u_*w*w8u=+.100000e+01*u*w_9enddo在应用该算法的第一阶段后,我们注意到x不是归约变量,因为它没有出现在右手侧,ai是一个潜在的归约变量,因为它出现在仅有的一项“.100000e+01*ai”中,bi是一个潜在的归约变量,因为它出现在所有的项中,并且每项中只有“*bi”的一个实例,y是一个潜在的归约变量,因为它出现在所有的项中,并且每项中只有“*y”的一个实例,z不是归约变量,因为右手侧仅有一项“+.100000e+01*z”(说明该语句表示一恒等式且应被删除),w不是归约变量,因为右手侧中仅有的一项中有多于一个“*w”的实例,u是一个潜在的归约变量,因为右手侧仅有的一个项中只有“*u”的一个实例。
潜在的归约表

在应用该算法的第二阶段后,我们有1do i=1,n2x=+.100000e+01*c*d3ai=+.200000e+01+.100000e+01*ai4bi=+.100000e+01*bi+.100000e+01*bi*c-.100000e+01*bi*d5y=+.100000e+01*c*y+.100000e+01*d*y-.300000e+01*y6--deleted--7w=+.100000e+01*u*w*w8u=+.100000e+01*u*w9enddo从中可以得出结论u不再是归约变量,因为它在语句7中以u_的形式再次出现了。
归约表

在该算法的最后阶段,我们获得了如下所示的带有结合运算符的归约变量表

例子21do i=1,n2y=c*y+d*y-3.0*y3y=(e*f+g)*y4z=z+25z=z*a-b*z6enddo在将该循环中的每个赋值语句中的表达式都重写为归约形式后,我们有1do i=1,n2y=+.100000e+01*c*y+.100000e+01*d*y-.300000e+01*y3y=+.100000e+01*e*f*y+.100000e+01*g*y4z=+.200000e+01+.100000e+01*z5z=+.100000e+01*a*z-.100000e+01*b*z6enddo在应用该算法的第一阶段后,我们注意到y是一个潜在的归约变量,因为在语句2中,它出现在所有的项中,并且每项中只有“*y”的一个实例,y是一个潜在的归约变量,因为在语句3中,它出现在所有的项中,并且每项中只有“*y”的一个实例,z是一个潜在的归约变量,因为在语句4中,*z”出现在仅有的项“+.100000e+01*z”中,z是一个潜在的归约变量,因为在语句5中,它出现在所有的项中,并且每项中只有“*z”的一个实例,归约表

在该算法的第二阶段之后,我们注意到1do i=1,n2y=+.100000e+01*c*y+.100000e+01*d*y-.300000e+01*y3y=+.100000e+01*e*f*y+.100000e+01*g*y4z=+.100000e+01*z+.200000e+015z=+.100000e+01*a*z-.100000e+01*b*z6enddo其中很明显,y和z没有任何变化,仍是归约表中的潜在的归约变量。
在该算法的最后阶段,我们注意到归约表

从中我们得到结论y仍然是归约变量,因为y的所有实例都与同样的结合运算符相关联,z不再是归约变量,因为y的不同实例有不同的结合运算符与其相关联,这样,带有结合运算符的归约表为

本领域的一般技术人员明白,上述作为例子给出的叙述仅仅是说明性的且不意味着是排他的或是限制性,并且可以在上面发明的范围内作出各种改型。
因此,本发明并不限于以披露为目的的特定的例子,而是覆盖所有的不背离本发明所允许的范围的变化和改型。因此,本发明并不限于此处或附图的描述,而仅仅限于权利要求所述。
权利要求
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所述的系统,其中存储单元包含有这样的手段,该手段用于为每个在归约表中被引用的赋值语句确定相应的结合运算符以及结合操作数。
17一种计算机程序产品,包括存储于嵌入在该产品中的计算机可读的存储介质中的计算机可读的程序代码,该代码用于在源代码程序循环中查找归约变量,以便可以实现并行执行,所述的程序代码包括a.计算机可读的程序代码手段,它被配置成用于将源代码程序循环中的各个赋值语句右手侧(RHS)的表达式重写成归约形式;b.计算机可读的程序代码手段,它被配置成用于为每个所述赋值语句确定相应的左手侧(LHS)变量,并且为所述的LHS变量创建相应的变量搜索串,以便在该重写的表达式中以该LHS变量作为因子进行搜索,c.计算机可读的程序代码手段,它被配置成用于为这样的LHS变量的倒数创建相应的倒数变量搜索串,以便可以在重写的表达式中以该LHS变量的倒数作为因子进行搜索,d.计算机可读的程序代码手段,它被配置成用于在每个所述的赋值语句的重写的RHS表达式中搜索与一个LHS变量相对应的变量搜索串,e.计算机可读的程序代码手段,它被配置成用于在每个所述的赋值语句的重写的RHS表达式中搜索与一个LHS变量倒数相对应的倒数变量搜索串,f.计算机可读的程序代码手段,它被配置成用于依据预定的条件,在归约表中插入对LHS变量以及它们相应的赋值语句的引用,以及g.计算机可读的程序代码手段,它被配置成用于依据预定的条件,在归约表中删除对LHS变量以及它们相应的赋值语句的引用。
18如权利要求17所述的计算机程序产品,包括计算机可读的程序代码手段,所述的程序代码手段被配置为用于从源代码程序循环中删除代表恒等式的赋值语句。
19如权利要求17所述的计算机程序产品,包括计算机可读的程序代码手段,所述的程序代码手段被配置为用于响应赋值语句的RHS仅包含一项并且该项仅包括与所述LHS变量相应的变量搜索串的一个实例,将对该赋值语句以及与其相应的LHS变量的引用插入到归约表中。
20如权利要求17所述的计算机程序产品,包括计算机可读的程序代码手段,该程序代码手段被配置为用于响应所述的赋值语句的RHS包含多个项,其中仅有一项仅包括与所述LHS变量相应的变量搜索串的一个实例,并且该项由前面带有某一算术运算符的所述LHS变量组成,将对该赋值语句以及与其相应的LHS变量的引用插入到归约表中。
21如权利要求17所述的计算机程序产品,包括计算机可读的程序代码手段,该程序代码手段被配置为用于响应所述的赋值语句的RHS包含多个项,其中每项都仅包括与所述LHS变量相应的变量搜索串的一个实例,将对该赋值语句以及与其相应的LHS变量的引用插入到归约表中。
22如权利要求17所述的计算机程序产品,包括计算机可读的程序代码手段,该程序代码手段被配置为用于响应循环体中一个赋值语句的RHS具有与一个LHS变量相应的变量搜索串,并且在所述归约表中没有列出该赋值语句,将对所述的LHS变量以及与其相应赋值语句的引用从归约表中删除。
23如权利要求17所述的计算机程序产品,包括计算机可读的程序代码手段,该程序代码手段被配置为用于响应具有与一个LHS变量相应的倒数变量搜索串的循环体中的任何一个赋值语句,将对所述的LHS变量以及与其相应赋值语句的引用从归约表中删除。
24如权利要求17所述的计算机程序产品,包括计算机可读的程序代码手段,该程序代码手段被配置为用于为归约表中被引用的每个赋值语句确定相应的结合运算符以及结合操作数。
全文摘要
本发明涉及一种方法、系统以及程序产品,所述的方法、系统以及程序产品用于在源代码的赋值语句中查找归约变量,以便实现程序循环的并行执行。将使用此处描述的方法找到的归约变量相对于各个循环做标记,并且与关于每个变量各个结合运算符的信息一起,通过编译器指令传送给编译器,以便于归约操作的并行化处理。
文档编号G06F9/45GK1508681SQ20031012143
公开日2004年6月30日 申请日期2003年12月16日 优先权日2002年12月17日
发明者R·K·贝拉, R K 贝拉 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1