CN101944040A - 一种基于谓词的自动并行优化方法 - Google Patents

一种基于谓词的自动并行优化方法 Download PDF

Info

Publication number
CN101944040A
CN101944040A CN2010102817998A CN201010281799A CN101944040A CN 101944040 A CN101944040 A CN 101944040A CN 2010102817998 A CN2010102817998 A CN 2010102817998A CN 201010281799 A CN201010281799 A CN 201010281799A CN 101944040 A CN101944040 A CN 101944040A
Authority
CN
China
Prior art keywords
predicate
parallel
program
loop
array
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.)
Pending
Application number
CN2010102817998A
Other languages
English (en)
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.)
Fudan University
Original Assignee
Fudan University
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 Fudan University filed Critical Fudan University
Priority to CN2010102817998A priority Critical patent/CN101944040A/zh
Publication of CN101944040A publication Critical patent/CN101944040A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

本发明属于程序编译技术领域,具体为一种基于谓词的自动并行优化方法。该方法主要包括:(1)谓词的构建,通过用户程序的多种已知信息,构建程序的并行谓词,消除程序的简单依赖;(2)构建并行循环结构,在谓词条件的约束下,展开后续并行化分析,判断是否需要采纳并行谓词。并行谓词的构建基于传统的数组数据流分析和循环依赖性测试。通过构建谓词,消除由循环信息不精确而导致的循环简单依赖,从而扩大传统自动并行优化的分析范围和并行优化效果。在程序的实际执行中,如果谓词不满足,则程序执行原始串行版本,增加的判断和跳转操作对程序的总体性能几乎没有影响;如果谓词满足,则执行循环结构的并行版本,能够显著的提升程序性能。

Description

一种基于谓词的自动并行优化方法
技术领域
本发明属于程序编译技术领域,具体涉及一种自动并行优化方法。
背景技术
循环是程序中蕴含并行性最丰富的一种结构,也往往是程序执行最耗时的部分。对串行程序并行优化的实质是针对循环体的并行性分析。并行性分析的目的是找出串行程序中适合并行优化的循环体,并且保证修改后的并行程序与原串行程序保持相同的语义。并行性分析根据数据依赖分析的结果,尽可能多的发掘程序中的并行性,以便并行优化工作可以从中权衡取舍,获得一个全局较优的并行优化方案。
数据依赖分析是一个整数线性规划问题,因此它不可能有精确且有效的解决方案。实际程序中的循环结构一般也比较复杂,其中含有若干影响并行优化的依赖关系。当含有无法确定的依赖信息时,无法通过循环变换技术来消除依赖。例如程序中存在一些编译时无法确定的信息出现在嵌套内层循环的上下界或数组访问的函数中时,分析器就无法精确计算嵌套循环体内数组依赖信息,如数组的定义-使用信息、定义是否覆盖可能使用,这就限制了对外层嵌套循环的并行识别。只有当一个串行循环内嵌套的所有并行循环包含的数组定义和引用之间都不存在数据依赖,那么并行结构可以直接扩展到该串行循环的最外层。循环信息的不精确使得依赖分析保守认为循环存在简单依赖,因而无法并行优化。
本发明提出基于谓词的自动并行优化方法,依据已知程序信息推导可并行条件,提升对简单依赖循环的并行优化效果。一般情况下,用户程序的循环携带依赖关系比较简单,复杂的情况并不常见,因而谓词并行优化技术具备一般性,假设的并行条件在程序的实际执行中的命中率比较高。
发明内容
本发明的目的在于提出一种基于谓词的自动并行优化方法,以消除循环体的数据依赖,实现对循环结构的自动并行优化。
本发明提出的基于谓词的自动并行优化方法,主要包括:(1)谓词的构建;(2)基于谓词构建并行循环版本。
谓词的构建,是依据传统的数组数据流分析和循环依赖性分析,通过程序的已知信息推导出并行谓词,消除循环的简单依赖,发掘循环结构的并行潜力;
基于谓词构建并行循环版本,是在谓词的约束条件下,判断嵌套循环能否最外层完全并行,如果能够最外层完全并行,则将谓词作为运行时的并行条件,创建循环结构的并行版本;否则,放弃假设的谓词。
本发明提出的基于谓词的自动并行优化方法,依据程序的多种特征,通过假设并行条件谓词,构造一个可并行的循环版本;运行时,程序依据构造的谓词条件,决定是否运行的并行循环版本。在精确数组数据流分析过程中,当遇到不精确信息导致循环简单依赖时,则依据已知循环信息推导循环的可并行条件,在可并行条件的约束下,构建并行的循环结构。 
本发明在自动并行优化过程中主要面向由不精确信息导致的简单依赖循环。通过构建谓词信息,进一步展开自动并行优化分析;在谓词约束条件下,如果能够展开嵌套循环最外层的完全并行,则采纳假设的谓词,构建并行循环版本。对于嵌套循环的最外层并行,一般都有较大的性能收益,从而避免并行开销评估模型的不精确。
并行谓词条件的构建依赖数据流依赖分析,在传统的数组数据流分析方法和依赖相关性测试中获取循环的已知信息。当依赖相关性测试因为依赖关系不明确而采用保守估计时,触发对并行谓词的构建和采用基于谓词的自动并行优化化技术。通过假设并行谓词条件,消除不精确数据依赖关系,使得自动并行优化继续展开后续分析。
附图说明
图1是包含简单依赖的循环示例。由于内层循环边界N和外层循环边界间的关系不明确,使得数组数据流分析认为循环内对数组a的读写操作存在数据依赖,因而无法自动并行优化。
具体实施方式
下面进一步介绍本发明方法的具体操作步骤:
第一,将源程序转化为编译器中间表示
并行化过程中首先将源程序转变成中间表示形式。程序的中间表示以结构化形式描述程序的抽象语法树结构,并记录在程序分析和优化过程中收集和产生的各种信息,它为程序分析、变换和优化的各个阶段提供所需的程序信息支持。
第二,数组数据流的依赖性测试
采用传统的数组数据流分析方法,对两层嵌套循环中可能存在的数据依赖的分析过程:
a. 构建循环边界与数组下标的等式
首先找出两层嵌套循环的代码中可能存在数据依赖的定义,设两层嵌套循环的下标分别为i和j,存在数组引用对:对a数组的写引用a[A1i+B1j+C1]和对a数组的读引用a[A2i+B2j+C2]。由数组a的定义和引用关系,可建立如下等式:
A1i + B1j+ C1 = A2i +B2j + C2  
和限制条件不等式:
m<= i <=n                                                
Figure 614344DEST_PATH_IMAGE001
x<= j <=y
等式可以写成如下矩阵的形式: 
(A1 - A2,B1 – B2)
Figure 231139DEST_PATH_IMAGE002
 = C2 – C1
即Av = c,这里v=<i,j>, c=<C2 – C1>
b. 依据等式系统,进行数组数据流的依赖性测试。对上面的等式的测试过程如下:
A                   I
(A1 - A2  B1 – B2)   
Figure 472764DEST_PATH_IMAGE003
把A的第一列* 
Figure 685571DEST_PATH_IMAGE004
加到第二列,得到:
(A1 – A2  0)   
Figure 329042DEST_PATH_IMAGE005
D                        U
求解等式Dt = c,得t = <C2 – C1, t2>,此时<i, j> = Ut,因此
i= 
Figure 409081DEST_PATH_IMAGE006
j = t2
依据条件不等式
m<= 
Figure 138003DEST_PATH_IMAGE007
 <=n
x <= t2 <= y
得到最终判定不等式:              
Figure 905233DEST_PATH_IMAGE008
 <=t2 <= 
x <= t2 <= y
若 x,y<=
Figure 237174DEST_PATH_IMAGE010
或 
Figure 876228DEST_PATH_IMAGE011
<=x,y,则t2无解,a数组的访问没有依赖;然而依赖分析无法判定x和y或者m和n的范围,因而依赖性测试认为可能存在依赖,不能做最外层完全并行。
c.谓词构造
上例中,由于x和y关系的不精确,从而导致数据依赖。这将触发并行谓词的构造。
将不等式系统中最后判定的不等式转化为使得数组数据流无依赖的并行谓词,如上面的最终判定条件转化为条件谓词x,y<=
Figure 696416DEST_PATH_IMAGE008
或 
Figure 235851DEST_PATH_IMAGE012
<=x,y。并基于该条件谓词更新循环信息,继续后续并行优化分析。
第三,判断能否对嵌套循环最外层进行完全并行
基于更新后循环迭代信息,进行相关性测试判定能否嵌套循环最外层的完全并行;如果能够完全并行,则采纳构建的并行谓词, 并以该谓词作为运行时的并行执行条件,生成并行循环结构。
第四,将中间表示翻译成带OpenMP标注的并行程序
自动并行优化过程通常采用源到源的程序转换,将串行程序优化成带OpenMP并行指示的并行程序。基于谓词的自动并行优化方法将把程序翻译成如下形式:
IF (( y .le.) .or.
 (x .ge. 
Figure 554017DEST_PATH_IMAGE012
 .and. y .ge. 
Figure 600733DEST_PATH_IMAGE013
))THEN
#pragma parallel do
嵌套循环程序
ELSE
嵌套循环程序
ENDIF。
通过上述四个步骤,一个两层嵌套循环程序能够被自动并行优化。用户程序中的依赖往往比较简单,在实际运行中,谓词被满足的可能性比较大。基于谓词的自动并行优化技术能够扩大并行优化的效果,如NPB基准测试集中的SP和SPECCPU2006基准测试集中ZEUSMP测试用例都可以通过基于谓词的自动并行优化得到性能提升。

Claims (2)

1.一种基于谓词的自动并行优化方法,其特征在于基本步骤为:(1)谓词的构建;(2)基于谓词构建并行循环版本;其中:
谓词的构建,是依据传统的数组数据流分析和循环依赖性分析,通过程序的已知信息推导出并行谓词,消除循环的简单依赖,发掘循环结构的并行潜力;
基于谓词构建并行循环版本,是在谓词的约束条件下,判断嵌套循环能否最外层完全并行;如果能够最外层完全并行,则将谓词作为运行时的并行条件,创建循环结构的并行版本;否则,放弃假设的谓词。
2.根据权利要求1所述的基于谓词的自动并行优化方法,其特征在于具体操作步骤如下:
第一,将源程序转化为编译器中间表示
首先将源程序转变成中间表示形式,程序的中间表示是以结构化形式描述程序的抽象语法树结构,并记录在程序分析和优化过程中收集和产生的各种信息,为程序分析、变换和优化的各个阶段提供所需的程序信息支持;
第二,数组数据流的依赖性测试
采用已有的数组数据流分析方法,对两层嵌套循环中可能存在的数据依赖进行分析,其步骤为:
构建循环边界与数组下标的等式
首先找出两层嵌套循环的代码中可能存在数据依赖的定义,设两层嵌套循环的下标分别为i和j,存在数组引用对:对a数组的写引用a[A1i+B1j+C1]和对a数组的读引用a[A2i+B2j+C2];由数组a的定义和引用关系,建立如下等式:
A1i + B1j+ C1 = A2i +B2j + C2  
和限制条件不等式:
m<= i <=n                                                
Figure 795071DEST_PATH_IMAGE001
x<= j <=y
将等式写成如下矩阵的形式: 
(A1 - A2,B1 – B2)
Figure 566718DEST_PATH_IMAGE002
 = C2 – C1
即Av = c,这里v=<i,j>, c=<C2 – C1>
依据等式系统,进行数组数据流的依赖性测试,对上面的等式的测试过程如下:
 A                    I
(A1 - A2  B1 – B2)   
Figure 330406DEST_PATH_IMAGE003
把A的第一列* 
Figure 275228DEST_PATH_IMAGE004
加到第二列,得到:
(A1 – A2  0)   
Figure 627712DEST_PATH_IMAGE005
D                        U
求解等式Dt = c,得t = <C2 – C1, t2>,此时<i, j> = Ut,因此
i= 
Figure 213388DEST_PATH_IMAGE006
j = t2
依据条件不等式
m<= 
Figure 526688DEST_PATH_IMAGE006
 <=n
x <= t2 <= y
得到最终判定不等式:              
Figure 947305DEST_PATH_IMAGE007
 <=t2 <= 
Figure 482192DEST_PATH_IMAGE008
x <= t2 <= y
若 x,y<=或 
Figure 333921DEST_PATH_IMAGE008
<=x,y,则t2无解,a数组的访问没有依赖; 
谓词构造
    将不等式系统中最后判定的不等式转化为使得数组数据流无依赖的并行谓词,即将最终判定条件转化为条件谓词x,y<=
Figure 620546DEST_PATH_IMAGE007
或 
Figure 682043DEST_PATH_IMAGE008
<=x,y;并基于该条件谓词更新循环信息,继续后续并行优化分析;
第三,判断能否对嵌套循环最外层进行完全并行
基于更新后循环迭代信息,进行相关性测试,判定能否嵌套循环最外层的完全并行;如果能够完全并行,则采纳构建的并行谓词,并以该谓词作为运行时的并行执行条件,生成并行循环结构;
第四,将中间表示翻译成带OpenMP标注的并行程序
采用源到源的程序转换,将串行程序优化成带OpenMP并行指示的并行程序;具体是把程序翻译成如下形式:
IF (( y .le.
Figure 779443DEST_PATH_IMAGE007
) .or.
 (x .ge.  .and. y .ge. 
Figure 282286DEST_PATH_IMAGE008
)) THEN
#pragma parallel do
嵌套循环程序
ELSE
嵌套循环程序
ENDIF。
CN2010102817998A 2010-09-15 2010-09-15 一种基于谓词的自动并行优化方法 Pending CN101944040A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2010102817998A CN101944040A (zh) 2010-09-15 2010-09-15 一种基于谓词的自动并行优化方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2010102817998A CN101944040A (zh) 2010-09-15 2010-09-15 一种基于谓词的自动并行优化方法

Publications (1)

Publication Number Publication Date
CN101944040A true CN101944040A (zh) 2011-01-12

Family

ID=43436040

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2010102817998A Pending CN101944040A (zh) 2010-09-15 2010-09-15 一种基于谓词的自动并行优化方法

Country Status (1)

Country Link
CN (1) CN101944040A (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103226513A (zh) * 2013-04-25 2013-07-31 中国人民解放军信息工程大学 基于二次规划模型的非线性下标表达式的依赖测试方法
CN105260222A (zh) * 2015-10-13 2016-01-20 哈尔滨工程大学 一种可重构编译器中循环流水迭代间启动间距优化方法
CN108256046A (zh) * 2018-01-12 2018-07-06 福建星瑞格软件有限公司 大数据处理框架源数据的统一访问通道的实现方法
CN109240701A (zh) * 2018-08-13 2019-01-18 湖南科技大学 一种面向谓词执行高性能dsp的指令依赖关系分析方法
CN109740313A (zh) * 2018-12-12 2019-05-10 北京字节跳动网络技术有限公司 计算机程序保护方法、装置、电子设备和计算机可读存储介质
WO2020056937A1 (zh) * 2018-09-19 2020-03-26 深圳大学 一种基于c语言的语法扩展方法、装置及终端设备
CN111857732A (zh) * 2020-07-31 2020-10-30 中国科学技术大学 一种基于标记的串行程序并行化方法

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103226513A (zh) * 2013-04-25 2013-07-31 中国人民解放军信息工程大学 基于二次规划模型的非线性下标表达式的依赖测试方法
CN103226513B (zh) * 2013-04-25 2015-12-09 中国人民解放军信息工程大学 基于二次规划模型的非线性下标表达式的依赖测试方法
CN105260222A (zh) * 2015-10-13 2016-01-20 哈尔滨工程大学 一种可重构编译器中循环流水迭代间启动间距优化方法
CN105260222B (zh) * 2015-10-13 2018-10-26 哈尔滨工程大学 一种可重构编译器中循环流水迭代间启动间距优化方法
CN108256046A (zh) * 2018-01-12 2018-07-06 福建星瑞格软件有限公司 大数据处理框架源数据的统一访问通道的实现方法
CN109240701A (zh) * 2018-08-13 2019-01-18 湖南科技大学 一种面向谓词执行高性能dsp的指令依赖关系分析方法
CN109240701B (zh) * 2018-08-13 2022-06-28 湖南科技大学 一种面向谓词执行高性能dsp的指令依赖关系分析方法
WO2020056937A1 (zh) * 2018-09-19 2020-03-26 深圳大学 一种基于c语言的语法扩展方法、装置及终端设备
CN109740313A (zh) * 2018-12-12 2019-05-10 北京字节跳动网络技术有限公司 计算机程序保护方法、装置、电子设备和计算机可读存储介质
CN111857732A (zh) * 2020-07-31 2020-10-30 中国科学技术大学 一种基于标记的串行程序并行化方法
CN111857732B (zh) * 2020-07-31 2021-10-22 中国科学技术大学 一种基于标记的串行程序并行化方法

Similar Documents

Publication Publication Date Title
CN101944040A (zh) 一种基于谓词的自动并行优化方法
CN101436128B (zh) 软件测试用例自动生成方法及系统
Chakravarty et al. Automated, retargetable back-annotation for host compiled performance and power modeling
CN102200924B (zh) 基于模调度实现循环指令调度的编译方法及装置
CN104536898B (zh) C程序并行区域的检测方法
CN102193811B (zh) 消除内存访问冲突的编译装置及其实现方法
US20130219378A1 (en) Vectorization of shaders
CN103577241A (zh) 编译系统以及编译方法
Leupers et al. Function inlining under code size constraints for embedded processors
CN101667135A (zh) 一种交互式并行化编译系统及其编译方法
Streit et al. Sambamba: A runtime system for online adaptive parallelization
US20090019431A1 (en) Optimised compilation method during conditional branching
CN103207786B (zh) 渐进式智能回溯向量化代码调优方法
CN101551748A (zh) 一种优化的编译方法
Streit et al. Sambamba: runtime adaptive parallel execution
CN105260222A (zh) 一种可重构编译器中循环流水迭代间启动间距优化方法
CN112558977B (zh) 面向异构众核后端基于代价模型的多面体优化方法
CN103617049B (zh) 基于互补谓词的代码移动方法
CN106126311B (zh) 一种基于代数演算的中间代码优化方法
Hazelwood et al. A lightweight algorithm for dynamic if-conversion during dynamic optimization
CN105260166A (zh) 一种应用于机器学习线程划分的手工样本集生成方法
Kashnikov et al. Compiler optimizations: Machine learning versus o3
Aguilar et al. Parallelism extraction in embedded software for Android devices
CN101923472A (zh) 一种基于高级中间表示的结构优化方法及系统
Subotic et al. Automatic exploration of potential parallelism in sequential applications

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20110112