基于二次规划模型的非线性下标表达式的依赖测试方法

文档序号:6402481阅读:165来源:国知局
专利名称:基于二次规划模型的非线性下标表达式的依赖测试方法
技术领域
本发明涉及一种分析程序指令之间依赖关系的方法,属于高性能计算中并行化编译优化技术领域,特别是涉及一种基于二次规划模型的非线性下标表达式的依赖测试方法。
背景技术
并行化编译系统是一个自动检测串行程序中潜在的并行性,并将串行程序转变为等价并行程序的编译系统,是并行计算机系统获得高校并行软件的有效途径,由于程序中循环往往占据了主要的运行时间,因此对循环并行性的识别自然成为了并行化编译的研究重点,而识别程序并行循环的基础就是测试循环的依赖关系。依赖测试是用来判断循环嵌套中在两个相同数组的下标引用之间是否存在依赖的方法,在应用程序中,数组的下标引用可以是任意表达式,当数组下标是当前循环索引的线性表达式时,传统的依赖测试方法能够测试出当前循环的依赖关系,当数组下标是当前循环索引的非线性表达式时,传统的依赖测试方法就只能给出保守结果,即认为有依赖,这可能导致伪依赖的产生。

发明内容
本发明针对传统依赖测试方法对非线性依赖测试的不足,通过对循环索引边界约束条件下二次下标表达式的极值分析,将二次表达式的依赖测试抽象为一种二次规划的非线性规划问题,构造一种针对二次下标表达式依赖测试方法的可行方法,判定被测数组对之间的依赖,从而有效提闻判定依赖和并行识别的能力。本发明的技术方案是:
一种基于二次规划模型的非线性下标表达式的依赖测试方法,含有下列步骤:
步骤1:根据被测数组对的下标表达式,构建用于判断该被测数组对之间依赖的目标方程组:目标方程组中方程的个数等于产生被测数组对下标维展,目标方程组中每个方程的左值为对应维上数组对下标表达式的差值,目标方程组中每个方程的右值设置为0,目标方程组的未知量由包含该数组对的嵌套循环索引构成,嵌套循环的上、下界构成目标方程组的定义域;
步骤2:当被测数组对为循环无关依赖时,方程的左值为:数组下标表达式按循环索引变量的原始形式求差值;当被测数组对为循环携带依赖时,方程的右值为:其中一个数组下标表达式对应循环索引变量变换形式,再与另一数组下标表达式求差;
步骤3:对所述目标方程组进行求解,判定数组对依赖存在的条件是所述目标方程组在其定义域上具有整数解。对所述目 标方程组求解时,需要根据目标方程组中方程的不同情况进行求解,具体含有下列步骤:
步骤2.1:当所述目标方程组中只有一个方程时,且方程中只有一个未知数,对其进行单目标函数的二次规划,即在其带有约束的离散数据空间上求解一元二次方程,首先根据德尔塔判别公式判断方程是否有解,如果方程有解,进而利用求根公式求解并判断其解是否为整数,如果为整数,则被测数组对之间存在依赖,如果无解,则被测数组对之间不存在依赖;
步骤2.2:当所述目标方程组中只有一个方程时,且方程中含有多个未知数,在其带有约束的离散数据空间上进行单目标函数的二次规划,根据目标方程组中方程的二次项的系数构建二次项系数矩阵H,根据矩阵H的实际情况判定被测数组对之间是否存在依赖。步骤2.3:当目标方程组中有多个方程时,对其进行多目标函数的二次规划,即在带有约束的离散数据空间上求解满足多个目标函数最优化过程,即分别对各个方程进行求解并判断其依赖,当目标方程组中至少有一个方程判断出不存在依赖时,则被测数组即不存在依赖;
步骤3.1:当所述二次项系数矩阵H为半正定时,求解方程的极值,如果极值大于0,则被测数组对之间无依赖,如果极值小于等于O时,则利用分支界定法求解方程是否有整数解,如果有整数解,则被测数组对之间存在依赖,如果无整数解,则被测数组对之间不存在依赖;
步骤3.2:当所述二次项系数矩阵H为负正定时,求解方程组的极值,如果极值小于0,则被测数组对之间无依赖;如果极值大于等于0,则利用分支界定法求解方程是否有整数解,如果有整数解,则被测数组对之间存在依赖,如果无整数解,则被测数组对之间不存在依赖;
步骤3.2:当所述二次项系数矩阵既不是半正定又不是半负定时,则无法判断被测数组对之间是否有依赖并假定被测数组对之间存在依赖; 当根据目标方程组的解判定出被测数组存在依赖时,可根据目标方程组的解计算依赖的距离向量和方向向量,并根据被测数组对之间的引用类型,进一步判定该依赖是流依赖、反依赖或者输出依赖;
如果被测数组对都是读引用,则认为被测数组对之间不存在依赖。本发明的有益积极效果是:
1.本发明在对应用程序进行静态编译时,针对数组下标是循环索引的二次多项式的情况,以及通过过程检分析和优化手段将对其它数组的间接引用转化为二次多项式的问题,通过判定一元二次方程是否有解、判定二次项系数矩阵的正定性、求解目标方程左值的极值、求解目标方程的整数解等过程,能够有效判断传统依赖测试无法判断的依赖表达式,有效消除了部分伪依赖。2.本发明还在程序执行过程中,对部分影响循环并行性的伪依赖进行了消除,从而使得部分根据传统依赖测试无法识别为并行的循环,可以被识别并行并被并行执行,从而有效提闻并行识别的能力。


图1为单目标函数中含有一个未知数的二次规划求解流程 图2为单目标函数中含有多个未知数的二次规划求解流程 图3为多目标函数的二次规划求解流程图。
具体实施例方式参见图1,图2,图3,所示,一种基于二次规划模型的非线性下标表达式的依赖测试方法,含有下列步骤:
步骤1:根据被测数组对的下标表达式,构建用于判断该被测数组对之间依赖的目标方程组:目标方程组中方程的个数等于产生被测数组对下标维展,目标方程组中每个方程的左值为对应维上数组对下标表达式的差值,目标方程组中每个方程的右值设置为0,目标方程组的未知量由包含该数组对的嵌套循环索引构成,嵌套循环的上、下界构成目标方程组的定义域;
步骤2:当被测数组对为循环无关依赖时,方程的左值为:数组下标表达式按循环索引变量的原始形式求差值;当被测数组对为循环携带依赖时,方程的右值为:其中一个数组下标表达式对应循环索引变量变换形式,再与另一数组下标表达式求差;
步骤3:对所述目标方程组进行求解,判定数组对依赖存在的条件是所述目标方程组在其定义域上具有整数解。对所述目标方程组求解时,需要根据目标方程组中方程的不同情况进行求解,具体含有下列步骤:
步骤2.1:当所述目标方程组中只有一个方程时,且方程中只有一个未知数,对其进行单目标函数的二次规划,即在其带有约束的离散数据空间上求解一元二次方程,首先根据德尔塔判别公式判断方程是否有解,如果方程有解,进而利用求根公式求解并判断其解是否为整数,如果为整数,则被测数组对之间存在依赖,如果无解,则被测数组对之间不存在依赖;
步骤2.2:当所述目标方程组中只有一个方程时,且方程中含有多个未知数,在其带有约束的离散数据空间上进行单目标函数的二次规划,根据目标方程组中方程的二次项的系数构建二次项系数矩阵H,根据矩阵H的实际情况判定被测数组对之间是否存在依赖。步骤2.3:当目标方程组中有多个方程时,对其进行多目标函数的二次规划,即在带有约束的离散数据空间上求解满足多个目标函数最优化过程,即分别对各个方程进行求解并判断其依赖,当目标方程组中至少有一个方程判断出不存在依赖时,则被测数组即不存在依赖;
步骤3.1:当所述二次项系数矩阵H为半正定时,求解方程的极值,如果极值大于0,则被测数组对之间无依赖,如果极值小于等于O时,则利用分支界定法求解方程是否有整数解,如果有整数解,则被测数组对之间存在依赖,如果无整数解,则被测数组对之间不存在依赖;
步骤3.2:当所述二次项系数矩阵H为负正定时,求解方程组的极值,如果极值小于0,则被测数组对之间无依赖;如果极值大于等于0,则利用分支界定法求解方程是否有整数解,如果有整数解,则被测数组对之间存在依赖,如果无整数解,则被测数组对之间不存在依赖;
步骤3.2:当所述二次项系数矩阵既不是半正定又不是半负定时,则无法判断被测数组对之间是否有依赖并假定被测数组对之间存在依赖。当根据目标方程组的解判定出被测数组存在依赖时,可根据目标方程组的解计算依赖的距离向量和方向向量,并根据被测数组对之间的引用类型,进一步判定该依赖是流依赖、反依赖或者输出依赖。如果被测数组对都是读引用,则认为被测数组对之间不存在依赖。该方法同样适用于在给定距离向量或方向向量的情况下判定依赖,此时目标方程组的未知量由包含该数组对的嵌套循环索引构成,嵌套循环的上下界构成方程组的定义域,并且每两个对应的 未知量之间关系由距离向量或方向向量分量决定。
权利要求
1.一种基于二次规划模型的非线性下标表达式的依赖测试方法,其特征在于:含有下列步骤: 步骤1:根据被测数组对的下标表达式,构建用于判断该被测数组对之间依赖的目标方程组:目标方程组中方程的个数等于产生被测数组对下标维展,目标方程组中每个方程的左值为对应维上数组对下标表达式的差值,目标方程组中每个方程的右值设置为O,目标方程组的未知量由包含该数组对的嵌套循环索引构成,嵌套循环的上、下界构成目标方程组的定义域; 步骤2:当被测数组对为循环无关依赖时,方程的左值为:数组下标表达式按循环索引变量的原始形式求差值;当被测数组对为循环携带依赖时,方程的右值为:其中一个数组下标表达式对应循环索引变量变换形式,再与另一数组下标表达式求差; 步骤3:对所述目标方程组进行求解,判定数组对依赖存在的条件是所述目标方程组在其定义域上具有整数解。
2.根据权利要求1所述的基于二次规划模型的非线性下标表达式的依赖测试方法,其特征在于:对所述目标方程组求解时,需要根据目标方程组中方程的不同情况进行求解,具体含有下列步骤: 步骤2.1:当所述目标方程组中只有一个方程时,且方程中只有一个未知数,对其进行单目标函数的二次规划,即在其带有约束的离散数据空间上求解一元二次方程,首先根据德尔塔判别公式判 断方程是否有解,如果方程有解,进而利用求根公式求解并判断其解是否为整数,如果为整数,则被测数组对之间存在依赖,如果无解,则被测数组对之间不存在依赖; 步骤2.2:当所述目标方程组中只有一个方程时,且方程中含有多个未知数,在其带有约束的离散数据空间上进行单目标函数的二次规划,根据目标方程组中方程的二次项的系数构建二次项系数矩阵ft根据矩阵//的实际情况判定被测数组对之间是否存在依赖; 步骤2.3:当目标方程组中有多个方程时,对其进行多目标函数的二次规划,即在带有约束的离散数据空间上求解满足多个目标函数最优化过程,即分别对各个方程进行求解并判断其依赖,当目标方程组中至少有一个方程判断出不存在依赖时,则被测数组即不存在依赖。
3.根据权利要求2所述的基于二次规划模型的非线性下标表达式的依赖测试方法,其特征在于含有下列步骤: 步骤3.1:当所述二次项系数矩阵//为半正定时,求解方程的极值,如果极值大于O,则被测数组对之间无依赖,如果极值小于等于O时,则利用分支界定法求解方程是否有整数解,如果有整数解,则被测数组对之间存在依赖,如果无整数解,则被测数组对之间不存在依赖; 步骤3.2:当所述二次项系数矩阵H为负正定时,求解方程组的极值,如果极值小于O,则被测数组对之间无依赖;如果极值大于等于O,则利用分支界定法求解方程是否有整数解,如果有整数解,则被测数组对之间存在依赖,如果无整数解,则被测数组对之间不存在依赖; 步骤3.2:当所述二次项系数矩阵既不是半正定又不是半负定时,则无法判断被测数组对之间是否有依赖并假定被测数组对之间存在依赖。
4.根据权利要求3所述的基于二次规划模型的非线性下标表达式的依赖测试方法,其特征在于:当根据目标方程组的解判定出被测数组存在依赖时,可根据目标方程组的解计算依赖的距离向量和方向向量,并根据被测数组对之间的引用类型,进一步判定该依赖是流依赖、反依赖或者输出依赖。
5.根据权利要求1所述的基于二次规划模型的非线性下标表达式的依赖测试方法,其特征在于:如果被测数组 对都是读引用,则认为被测数组对之间不存在依赖。
全文摘要
本发明涉及一种分析程序指令之间依赖关系的方法,属于高性能计算中并行化编译优化技术领域,特别是涉及一种基于二次规划模型的非线性下标表达式的依赖测试方法,本发明针对传统依赖测试方法对非线性依赖测试的不足,通过对循环索引边界约束条件下二次下标表达式的极值分析,将二次表达式的依赖测试抽象为一种二次规划的非线性规划问题,构造一种针对二次下标表达式依赖测试方法的可行方法,判定被测数组对之间的依赖,从而有效提高判定依赖和并行识别的能力。
文档编号G06F11/36GK103226513SQ20131014759
公开日2013年7月31日 申请日期2013年4月25日 优先权日2013年4月25日
发明者单征, 庞建民, 姚远, 赵捷, 丁锐, 刘晓娴 申请人:中国人民解放军信息工程大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1