CN103314360A - 数据依赖解析辅助装置、数据依赖解析辅助程序以及数据依赖解析辅助方法 - Google Patents

数据依赖解析辅助装置、数据依赖解析辅助程序以及数据依赖解析辅助方法 Download PDF

Info

Publication number
CN103314360A
CN103314360A CN2012800026049A CN201280002604A CN103314360A CN 103314360 A CN103314360 A CN 103314360A CN 2012800026049 A CN2012800026049 A CN 2012800026049A CN 201280002604 A CN201280002604 A CN 201280002604A CN 103314360 A CN103314360 A CN 103314360A
Authority
CN
China
Prior art keywords
information
statement
zone
pointer
dependence
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
CN2012800026049A
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.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co Ltd
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 Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Publication of CN103314360A publication Critical patent/CN103314360A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • G06F8/434Pointers; Aliasing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/456Parallelism detection

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

数据依赖解析辅助装置针对在程序中使用的全部指针,进行上下文相关的指针解析并算出指针信息,针对解析对象区域的全部语句以及执行解析对象区域时能够被调用的全部语句,利用上下文相关的指针信息进行上下文相关的数据流解析,算出语句间的数据流信息,利用数据流信息,在源程序所包含的两个以上的线程化区域中算出区域间的数据依赖信息。

Description

数据依赖解析辅助装置、数据依赖解析辅助程序以及数据依赖解析辅助方法
技术领域
本发明涉及一种用于实现并行处理系统的程序开发技术,尤其涉及一种对源程序进行数据依赖解析的技术。
背景技术
对近来的数字电视、蓝光记录装置、便携电话等而言,由于多媒体处理的数量的增加及品质的提高、通信速度的提高、游戏机所代表的界面处理量的增加等,因此对民用组装设备所搭载的处理器的性能提高的需求并不会停滞。
另外,由于近来的半导体技术的进步,因此通过多处理器构成可并行执行线程的处理器或者通过单一处理器可并行执行多线程的处理器逐渐地搭载于民用组装设备。
另一方面,至此,以单一处理器下的执行为前提的顺序程序作为资产得以蓄积。尤其用C语言或C++语言记述的顺序程序很庞大。殷切期望移用这些顺序程序的资产通过并行化实现程序的高速化。
另外,即使在新的程序开发中,线程并行化程序的开发或验证相较于顺序程序较难。因此,不直接地开发线程并行化程序,而是在开发顺序程序并完成验证之后,进行顺序程序的线程并行化之类的开发方法是通常的方法。
作为进行顺序程序的线程并行化的以往例,在专利文献1中公开了程序处理装置。专利文献1的程序处理装置接受利用指示语THREAD(线程)针对顺序程序的源代码指定线程化区域而得到的程序作为并行处理程序。并且,专利文献1的程序处理装置解析线程化区域之间的依赖关系,针对在线程间存在数据的传递(交接、授受)的变量,通过将用于进行数据的传递的线程间通信代码插入线程并行化后的各线程,据此进行线程并行化。
现有技术文献
专利文献
专利文献1:日本特开2007-193423号公报
非专利文献
非专利文献1:Alfred V.Aho,et al,”Compi lers:Principles,Techniques&Tools Second Edition”,Addison Wesley,2007
发明的概要
发明欲解决的问题
可是,在专利文献1的技术中,由于将在顺序程序中并不存在的线程间的通信代码插入线程并行化后的各线程,因此通信代码成为新的开销。尤其,存在若数据依赖解析的精度低却插入无用的通信代码,则并行化程序的速度降低这一问题。
其另一方面,为了进行高精度的数据依赖解析,通常需要极长的解析时间。
发明内容
本发明的目的在于,提供一种高精度且短时间完成线程化区域间的数据依赖解析的数据依赖解析辅助装置。
用于解决问题的方法
为解决上述的问题,本发明所涉及的数据依赖解析辅助装置是一种对源程序进行上下文相关的数据依赖解析的数据依赖解析辅助装置,其特征在于,包括:指针信息生成部,对在所述源程序中使用的全部指针进行上下文相关的指针解析并生成指针信息;数据流信息生成部,利用所述指针信息,对作为所述源程序的一部分、且为了解析存在于两个以上的线程化区域之间的数据依赖而指定的解析对象区域进行上下文相关的数据流解析并生成数据流信息;以及区域间依赖信息生成部,利用所述数据流信息,针对存在于所述两个以上的线程化区域之间的数据依赖,生成表示依赖源的线程化区域、依赖目标的线程化区域以及作为依赖原因的变量的区域间依赖信息。
发明效果
通过上述的构成,数据依赖解析辅助装置通过并非针对源程序整体而是只针对解析对象区域进行数据依赖解析的一部分的处理即数据流解析,能够缩短解析时间,另外,由于针对数据依赖解析的一部分的处理即指针解析和数据流解析进行上下文相关的解析,因此能够高精度地取得线程化区域间的依赖信息,从而能够兼顾高精度的解析和解析时间的缩短。
附图说明
图1为表示实施方式所涉及的数据依赖解析辅助装置100的构成的框图。
图2为表示实施方式所涉及的数据流解析部206以及数据流信息存储部207的构成的框图。
图3为表示实施方式所涉及的源程序11的例子的图。
图4为表示实施方式所涉及的存储于调用关系图(graph,图表)存储部203的调用关系图的例子的图。
图5为表示实施方式所涉及的数据依赖解析辅助装置100的动作的流程图。
图6为表示实施方式所涉及的指针信息结合部220的动作的流程图。
图7为表示实施方式所涉及的区域间依赖生成部210的动作的流程图。
图8为表示实施方式所涉及的存储于中间程序存储部201的语句信息的例子的图。
图9为表示实施方式所涉及的存储于指针信息存储部205的指针信息的例子的图。
图10为表示实施方式所涉及的存储于结合指针信息存储部221的指针信息的例子的图。
图11为表示实施方式所涉及的存储于定义信息存储部223的定义信息的例子的图。
图12为表示实施方式所涉及的存储于使用信息存储部225的使用信息的例子的图。
图13为表示实施方式所涉及的存储于到达定义(reaching definition)信息存储部227的到达定义信息的例子的图。
图14为表示实施方式所涉及的存储于语句间依赖信息存储部209的语句间依赖信息的例子的图。
图15为表示实施方式所涉及的存储于区域间依赖信息存储部211的区域间依赖信息的例子的图。
图16为表示实施方式所涉及的用户输入信息41即系统结束信息、解析对象区域信息以及区域指定信息的例子的图。
图17为表示实施方式所涉及的文本以及鼠标的区域指定的例子的图。
图18为表示实施方式所涉及的在文本以及源程序11上的区域间依赖显示的例子的图。
图19为表示实施方式所涉及的线程并行化的例子的图。
图20为表示实施方式所涉及的记述于源程序11中的区域间指定的例子的图。
具体实施方式
<本发明的概要>
为了将顺序程序作为源程序来开发线程并行化程序,需要在顺序程序中进行欲执行线程并行化的区域的数据依赖解析。尤其,优选的是,在进行通过线程间的通信代码解决数据依赖的并行化(pipelining)时,由于不插入无用的通信代码从而进行高精度的数据依赖解析。
可是,上下文相关的解析还需要解析由每个函数调用而调用的函数。因此,若与一个函数只解析一次的非上下文相关的解析相较,解析所需的时间较长,尤其针对程序整体进行上下文相关的解析需要很长的解析时间。
在此,用C语言或C++语言记述顺序程序的情况下,在数据依赖解析的次序中,包括指针解析以及数据流解析,该指针解析解析指针指向怎样的变量;该数据流解析解析如何定义或引用变量以及引用之时通过怎样的语句定义的值。
需要对源程序整体进行指针解析。其原因在于,若存在指向怎样的变量不明的指针,则无法判断该指针的间接引用适合怎样的变量的定义或使用,从而无法进行高精度的数据依赖解析。
另一方面,关于数据流解析,发明人得出如下见解,即若对源程序整体进行指针解析,则可只对数据依赖解析的对象的源程序的一部分区域进行数据流解析。其原因在于,本来,在关注的区域(若该区域为循环或分支等控制构造的一部分,则为该控制构造整体)以及由该区域调用的语句的集合即被调用区域(以下,归纳关注的区域与被调用区域称作解析对象区域)中,包含解析区域内的数据依赖所需的全部信息,唯一不明确的是指针和变量的关系。也就是说,若明确了指针指向怎样的变量而进行针对解析对象区域的数据流解析则能够进行数据依赖解析。
在此,上下文相关的指针解析的解析时间依赖于指针的总数,上下文相关的数据流解析的解析时间依赖于解析对象的语句数。通常,与指针的总数相较程序的语句数极其多,对相同源程序的整体区域进行解析的情况下,上下文相关的数据流解析的解析时间需要上下文相关的指针解析的大致10倍程度。
本发明关注的是,上下文相关的指针解析需要遍历源程序整体来进行,与之相对,通过只对包含全部线程化区域的解析对象区域进行上下文相关的数据流解析,能够解析线程化区域间的依赖关系。于是,通过限定占用大部分解析时间的数据流解析的处理对象,实现高精度的上下文相关的解析与解析时间缩短的兼顾。以下,说明并行化的次序和解析方法所致的精度差异。
<顺序程序的并行化次序>
在此,说明顺序程序的数据依赖解析以及线程并行化的通常的次序。用C语言或C++语言记述顺序程序的情况下,进行线程化区域间的数据依赖解析的解析装置按照如下的次序进行解析。
首先,解析装置进行解析指针指向怎样的变量的指针解析。
接着,解析装置利用指针解析结果进行数据流解析,该数据流解析对变量在怎样的语句所保持的值被更新以及在怎样的语句所保持的值被引用进行解析。在此,“语句”(statement)为程序的构造的基本单位,在C语言或C++语言中,为通过分号划分的要素单位。
以下,为便于说明,将“变量所保持的值”称作“变量的值”,将“变量所保持的值的更新”称作“变量的定义”,将“变量所保持的值的引用”称作“变量的使用”。在此,所谓“更新”也包括将值新代入值为未定义的变量这一情况。
接着,解析装置根据数据流解析进行各语句间的数据依赖解析。所谓“数据依赖”是指在存在变量X的情况下,在一个语句中定义有变量X,而在其他的语句中使用变量X这一关系。
接着,解析装置进行确定在线程化区域间存在数据的传递的变量的区域间的数据依赖解析。并且,解析装置将通信代码插入线程内,以使于区域间传递在线程化区域间存在数据的传递的变量所保持的值。
重要之处在于,提高数据依赖解析的精度有利于线程并行化程序的高速化。虽然在线程化区域间存在数据依赖,但若不插入通信代码地进行线程并行化,则在依赖目标的语句存在于不同于依赖源的语句的线程的情况下,会产生无法正常地执行依赖目标的语句或者执行结果不同于顺序程序之类的问题。因此,数据依赖解析必须检测线程化区域间的全部数据依赖。
可是,如前所述,通信代码是在顺序程序中并不存在的代码,因此无用的通信代码会成为线程并行化程序的开销的主要因素。因此,探求既以检测存在的全部数据依赖为前提、同时不误检测并不存在的数据依赖的数据依赖解析。
在此,有关数据依赖解析的方法,说明上下文相关的解析。
<上下文相关的解析>
“上下文相关的解析”是指如位于非专利文献1的第12章那样的,即使是相同函数的调用,也进行相应于各个函数调用的状况的解析。也就是说,针对每个函数调用、即即使是同一函数的调用也针对每个函数调用,连调用目标的函数也包括在内,都要解析指针解析、数据流解析以及语句间的数据依赖解析。因此,不只遍历关注的区域的整体进行解析,在该区域内于多个位置调用同一函数的情况下,按照每个调用多次针对同一函数进行解析。另外,即使被调用的函数进一步调用函数的情况下,同样地,针对每个函数调用,连调用目标的函数也包括在内进行解析。
在此,利用图3说明线程化区域、通信代码、指针解析、数据流解析以及数据依赖解析。图3为作为线程并行化的对象的用C/C++语言记述的源程序的例子。图3(a)表示文件名rei.c的文件的内容,图3(b)表示文件名proc.c的文件的内容,图3(c)表示文件名cmn.c的文件的内容,开头的号码为行号码。另外,图中的“语句+号码”表示语句的识别符,号码意在唯一地确定语句。
如图3(a)所示,在rei.c中有在程序的新执行的函数main(主函数)。进而,函数main调用函数sub(子函数),进一步,函数sub调用文件proc.c中的函数proc、函数proc2、函数proc3。进而,如图3(b)所示,函数proc调用文件cmn.c中的函数fun以及函数gun。
在此,在图3(b)的函数proc中,从位于行号码7的for循环中的行号码8开始直到行号码19(无图示)为止的区域为欲线程化的区域R1,同样地,从行号码20开始直到行号码29(无图示)为止的区域为欲线程化的区域R2,从行号码30开始直到行号码39(无图示)为止的区域为欲线程化的区域R3。
接着,利用图3(b)说明在线程间进行值的传递的通信代码。在区域R2中的语句61以及语句65中使用由区域R1中的语句57定义的变量s的值,从而在区域R1和区域R2之间,存在以变量s为原因的数据依赖。因此,需要将通信代码插入线程1以及线程2,以使在对区域R1进行线程化的线程1和对区域R2进行线程化而得到的线程2之间传递变量s的值。
接着,利用图3说明在指针解析以及数据依赖解析中上下文相关的解析与非上下文相关的解析的差异。在图3(b)中,函数fun的调用存在于语句57和语句66这两处。在语句57的函数fun的调用中,将变量e的地址传递至函数fun的形式参数即指针p,同样地,在语句66中,将变量f的地址传递至函数fun的形式参数即指针p。以下,利用语句57中的函数fun的调用加以说明。
另外,在图3(b)中,于行号码11(无图示)~行号码39(无图示),除去图示的行未定义也未使用变量e、变量f,在图3(c)中,于行号码5(无图示)~行号码8,除去图示的行未定义也未使用指针p,指针p的间接引用*p所产生的指针p所指向的变量既未定义也未使用。
1.非上下文相关的指针解析以及数据流解析
首先,说明非上下文相关的指针解析。解析装置检索调用程序中的函数fun的语句,并收集传递至形式参数即指针p的值。解析装置根据语句57和语句66,收集变量e以及变量f的地址作为传递至指针p的值。
据此,解析装置解析为在函数fun的语句101中,指针p指变量e或变量f这两个变量。
接着,解析装置利用非上下文相关的指针解析的结果进行非上下文相关的数据流解析。解析装置解析为在语句61中存在变量e的使用,而在语句65中存在变量f的使用。另外,解析装置根据行号码7~40的循环解析出在语句56中存在变量e的使用。
另外,在函数fun的语句101中,指针p指变量e或变量f这两者,因此解析装置解析为在语句101中使用且定义变量e或变量f这两个变量。
据此,解析装置解析为在语句101的调用源即语句57的函数fun的调用中,定义变量e或变量f这两个变量。
接着,解析装置利用非上下文相关的数据流解析的结果进行数据依赖解析。解析装置解析为在语句57中定义变量f,并解析出在语句65中使用变量f,因此解析为从语句57到语句65存在起因于变量f的数据依赖。
同样地,解析装置解析出从语句57到语句61以及语句56存在起因于变量e的数据依赖。
2.上下文相关的指针解析以及数据流解析
在上下文相关的解析中,解析装置区分来自语句57的函数fun的调用和来自语句66的函数fun的调用。
首先,说明上下文相关的指针解析。解析装置解析出在来自语句57的函数fun的调用中,函数fun的形式参数即指针p为语句57的函数fun的参数即变量e的地址。据此,解析装置解析为由语句57调用的函数fun的语句101的指针p所保持的地址为变量e的地址。
接着,解析装置利用上下文相关的指针解析的结果进行上下文相关的数据流解析。由于在由语句57调用的函数fun的语句101中指针p指变量e,因此解析装置解析为在以及101中定义了变量e。
另外,解析装置解析为由语句101定义的变量e在语句61中使用。同样地,解析装置通过行号码7~40的循环解析出由语句101定义的变量e在语句56中使用。
接着,解析装置利用上下文相关的数据流解析的结果进行数据依赖解析。解析装置解析为由语句101定义的变量e在语句56和语句61中使用,因此解析为从语句101到语句56以及语句61存在以变量e为原因的数据依赖。
3.数据依赖解析结果的研究
以通过上述解析次序得出的结果为基础,比较上下文相关的解析和非上下文相关的解析。
若比较以语句57(由语句57调用的语句101)为依赖源的解析结果,则无论在哪种情况下,解析装置解析为从语句57(由语句57调用的语句101)到语句56以及语句61存在以变量e为原因的数据依赖。
另一方面,在非上下文相关的解析中,除上述解析结果外,解析装置还解析为从语句57到语句65存在起因于变量f的数据依赖。但是,通过语句57传递至指针p的值为变量e的地址,因此在被调用的函数fun的语句101中并未定义变量f的值,因而从语句57向语句65不存在以变量f为原因的数据依赖。如此,在非上下文相关的解析中,尽管实际上并不存在依赖关系,有时却会得出存在数据依赖这一错误的解析结果。其原因在于,不区分来自语句57的函数fun的调用与来自语句66的函数fun的调用,因此在语句57中也将来自语句66的函数fun的调用中的参数f作为函数fun的参数进行处理。
另一方面,在上下文相关的解析中,只检测实际存在的数据依赖,结果能够进行高精度的解析。
《实施方式》
以下,对照附图说明本发明的实施方式。首先,为了在本发明的实施方式的说明时易于理解,说明用语。
<用语的说明>
·上下文相关的调用关系图(graph,图表)
上下文相关的调用关系图(以下、单纯地称作调用关系图)是指针对每个函数调用生成节点,并从调用函数的节点向被调用函数的节点引出有向边而成的图表。节点具有节点识别符、调用函数名、函数调用语句的语句识别符。
图4为与图3对应的调用关系图。例如,节点识别符为2的节点为对应于图3(a)的行号码25的函数调用语句25而生成的节点。
节点识别符为固有地赋予给节点的号码。因此,关注某一节点时,从程序启动函数的节点直到关注的节点为止的节点识别符的序列表示唯一的函数调用的序列。反而言之,节点的识别符指表示唯一的函数调用的序列的情况。例如,图4的节点识别符6指表示如在节点识别符1由图3(a)的语句11调用函数sub,接着,在节点识别符2由图3(a)的语句25调用函数proc,然后,在节点识别符6由图3(b)的语句57调用函数fun这样的、唯一的函数调用的序列的情况。
以下,将函数调用的序列的情况称作“上下文”,也可将节点识别符称作“上下文”或者“上下文信息”。
另外,函数调用为递归调用或相互调用的情况下,关于其目标的函数调用并不进行节点生成。
·子调用关系图
在调用关系图中,关注某一节点时,将关注的节点以下(有向边所朝向的方向)的图称作“子调用关系图”。另外,将关注的节点称作“子关系图的顶点节点”。例如,在图4中,以节点识别符为2的节点为顶点节点的子调用关系图具有连接节点识别符为2、6、7、8的节点与其后的节点以及连接这些节点彼此的有向边。
另外,有关以调用函数名相同的节点为顶点节点的任意的子调用关系图,节点数相同且有向边的数量和朝向均相同(以下,称作“同形”)是显而易见的。进而,就顶点节点以外的节点而言,调用函数名、语句识别符均相同。例如,在图4中,节点识别符2与4的调用函数名同为proc,以识别符2为顶点节点的子关系图与以识别符4为顶点节点的子关系图同形。另外,除顶点节点即节点识别符2和4的节点之外,节点识别符6、7、8与节点的识别符9、10、11分别对应,调用函数名与语句识别符均相同。
·上下文信息附加语句
所谓“上下文信息附加语句”是表现由多个位置调用同一函数时,针对每次调用都不同的语句的附加语句。通过上下文信息附加语句能够进行上下文相关的数据流的解析。例如,在图3(a)中,通过语句25以及语句27这两个位置调用函数proc,在图4的调用关系图中,调用分别对应于节点的识别符2和4。即、在图3(a)中,函数proc的调用语句25的上下文为2,语句27的上下文为4。
并且,通过“语句识别<上下文>”表现上下文信息附加语句。例如,关于图3(b)的函数proc中的语句51,作为上下文信息附加的语句表现为51<2>以及51<4>,能够分别地作为由函数proc的调用语句25调用情况下的语句51以及由函数proc的调用语句27调用情况下的语句51来加以区别。
<构成>
图1为表示实施方式所涉及的数据依赖解析辅助装置100的构成的框图。
数据依赖解析辅助装置100例如由个人计算机来实现。
数据依赖解析辅助装置100包括中间程序生成部200、中间程序存储部201、调用关系图生成部202、调用关系图存储部203、指针解析部204、指针信息存储部205、数据流解析部206、数据流信息存储部207、语句间依赖解析部208、语句间依赖信息存储部209、区域间依赖生成部210、区域间依赖信息存储部211、区域间依赖显示部212、外部存储部10、输入部40以及输出部50。
外部存储部10例如由硬盘来实现,保持源程序11。
输入部40例如由键盘或鼠标来实现,接受包含用于指定解析对象区域的信息或用于指定线程化区域的信息的用户输入信息41的输入。
中间程序生成部200利用非专利文献1所记载的通用的编译器的句法解析技术读入存储于外部存储部10的源程序11,生成中间程序并将生成的中间程序存储至中间程序存储部201。
中间程序存储部201保持由中间程序生成部200生成的中间程序。
由中间程序生成部200生成的中间程序包括文件信息、函数信息、语句信息以及函数和语句在记载该函数和语句的源程序中的行号码的信息。另外,由中间程序生成部200生成的中间程序也可包括非专利文献1的第6章所记载的中间程序的其他特征。
调用关系图生成部202读入存储于中间程序存储部201的中间程序,提取全部函数调用生成上下文相关的调用关系图,并存储于调用关系图存储部203。
调用关系图存储部203保持由关系图生成部202生成的调用关系图。
指针解析部204读入存储于中间程序存储部201的中间程序以及存储于调用关系图存储部203的调用关系图,并遍历中间程序整体进行上下文相关的指针解析且将解析结果存储至指针信息存储部205。
指针信息存储部205保持由指针解析部204解析的上下文相关的指针解析的结果。
在此,指针信息为将记述指针的语句(上下文信息附加)、指针以及指针所指向的被指针变量的集合(以下,称作“被指针变量集合”)归为一组的信息。指针信息存储部205保持源程序11所采用的全部指针的指针信息。
数据流解析部206读入存储于中间程序存储部201的中间程序、存储于指针信息存储部205的上下文相关的指针信息、存储于调用关系图存储部203的调用关系图以及从输入部40输入的用户输入信息41。并且,数据流解析部206对通过用户输入信息41所包含的解析对象区域信息得出的解析对象区域,进行上下文相关的数据流解析,并将解析结果存储至数据流信息存储部207。
数据流信息存储部207保持由数据流解析部206解析的上下文相关的数据流解析的结果。
语句间依赖解析部208读入存储于中间程序存储部201的中间程序、存储于调用关系图存储部203的调用关系图以及存储于数据流信息存储部207的上下文相关的数据流信息,进行上下文相关的语句单位的数据依赖解析,并将解析结果存储于语句间依赖信息存储部209。
语句间依赖信息存储部209保持由语句间依赖解析部208解析的上下文相关的语句间依赖信息的解析结果。
在此,语句间依赖信息为将依赖源的语句(上下文信息附加)、依赖目标的语句(上下文信息附加)以及构成依赖的原因的变量(以下、称作起因变量)归为一组的信息,全部语句间依赖信息保持于语句间依赖信息存储部209。
区域间依赖生成部210读入存储于中间程序存储部201的中间程序、存储于调用关系图存储部203的调用关系图、存储于语句间依赖信息存储部209的上下文相关的语句间依赖信息以及从输入部40输入的用户输入信息41。并且,区域间依赖生成部210通过用户输入信息41所包含的区域指定信息得出线程化区域,提取线程化区域间所存在的语句间依赖信息,并存储至区域间依赖信息存储部211。
区域间依赖信息存储部211保持由区域间依赖生成部210生成的区域间的依赖信息的结果。
在此,线程化区域由用户输入信息41的一部分即区域指定信息指定。另外,各线程化区域为解析对象区域的一部分,同一语句不会归属于多块不同的线程化区域。该线程化区域通过从键盘按照文本形式输入行号码或者通过鼠标等指示设备直接选择源程序11内的指定范围来指定。
另外,区域指定信息由文件名、区域的开始行号码以及区域的结束行号码组成。
另外,区域内所包含的语句是指符合以下的语句A、语句B、语句C中的任意一个条件的语句。
(1)语句A:位于区域指定信息的文件名下,在区域的开始行号码与区域的结束行号码之间。
(2)语句B:语句A为函数F的函数调用语句的情况下,存在于函数F中。
(3)语句C:语句A为函数F的函数调用语句的情况下,存在于能够被函数F的调用而调用的全部函数之中。
另外,“能够被函数F的调用而调用的函数”指被函数F调用的函数以及由这样的函数进一步调用的函数。在该情况下,“被调用的函数”不仅包括必须被调用的函数,还包括满足指定的条件而被调用等存在一条以上的被调用的路径的函数。
进而,语句间依赖信息为将依赖源的区域与依赖源的语句(上下文信息附加)、依赖目标的区域与依赖目标的语句(上下文信息附加)以及起因变量归为一组的信息,全部区域间依赖信息保持于区域间依赖信息存储部211。
区域间依赖显示部212读入存储于外部存储部10的源程序11、存储于中间程序存储部201的中间程序、存储于调用关系图存储部203的调用关系图以及存储于区域间依赖信息存储部211的区域间的依赖信息,并向输出部50输出区域间的依赖信息。
输出部50例如由显示器来实现,显示区域间的依赖信息。
图2为表示图1的数据流解析部206以及数据流信息存储部207的构成的框图。
数据流解析部206包括指针信息结合部220、定义信息生成部222、使用信息生成部224以及到达定义信息生成部226。另外,数据流信息存储部207包括结合指针信息存储部221、定义信息存储部223、使用信息存储部225以及到达定义信息存储部227。
指针信息结合部220读入存储于中间程序存储部201的中间程序、存储于调用关系图存储部203的上下文相关的调用关系图、存储于指针信息存储部205的上下文相关的指针信息以及从输入部40输入的用户输入信息41。并且,指针信息结合部220以子调用树为基础结合子调用树相关的指针信息,并将结合结果存储至结合指针信息存储部221,该子调用树以包含通过用户输入信息41所包含的解析对象区域信息得出的全部区域的函数为顶点节点。
结合指针信息存储部221保持由指针信息结合部220结合而成的指针信息。
定义信息生成部222读入存储于中间程序存储部201的中间程序、存储于调用关系图存储部203的上下文相关的调用关系图以及存储于结合指针信息存储部221的结合指针信息,生成表示在怎样的函数调用之下各语句中被定义的变量为何的上下文相关的定义信息,并将生成结果存储于定义信息存储部223。
定义信息存储部223保持由定义信息生成部222生成的上下文相关的定义信息。
使用信息生成部224读入存储于中间程序存储部201的中间程序、存储于调用关系图存储部203的上下文相关的调用关系图以及存储于结合指针信息存储部221的结合指针信息,生成表示在怎样的函数调用之下各语句中使用的变量为何的上下文相关的使用信息,并将生成结果存储至使用信息存储部225。
使用信息存储部225保持由使用信息生成部224生成的上下文相关的使用信息。
到达定义信息生成部226读入存储于中间程序存储部201的中间程序、存储于调用关系图存储部203的上下文相关的调用关系图以及存储于定义信息存储部223的上下文相关的定义信息,生成表示在怎样的函数调用之下可到达各语句的语句为何的上下文相关的到达定义信息并将生成结果存储至到达定义信息存储部227。
到达定义信息存储部227保持由到达定义信息生成部226生成的上下文相关的到达定义信息。
在此,所谓“可到达的语句”,如非专利文献1所记载地那样,将由某一语句A定义的变量设定为x,在从语句A到语句B的多条执行路径中,存在一条路径,在该路径中除语句A外不存在其他定义变量x的语句时,即、存在定义变量x的语句仅为语句A的路径时,语句A为可到达语句B的语句。
<动作>
以下,说明数据依赖解析辅助装置100的动作。
图5至图7为表示数据依赖解析辅助装置100的数据依赖解析辅助处理的动作的流程图。
利用图5,说明数据依赖解析辅助装置100的动作的概要。
数据依赖解析辅助装置100启动中间程序生成部200。中间程序生成部200从外部存储部10读入源程序11生成中间程序并存储至中间程序存储部201(S10)。
接着,数据依赖解析辅助装置100启动调用关系图生成部202。调用关系图生成部202读入存储于中间程序存储部201的中间程序,从中间程序提取全部函数调用生成上下文相关的调用关系图,并将生成的调用关系图存储至调用关系图存储部203(S20)。
接着,数据依赖解析辅助装置100启动指针解析部204。指针解析部204读入存储于中间程序存储部201的中间程序,并遍历中间程序整体进行上下文相关的指针解析且将生成的指针信息存储至指针信息存储部205(S30)。
接着,数据依赖解析辅助装置100读入从输入部40输入的用户输入信息41,用户输入信息41中含有系统的结束指示的情况下则结束系统,反之则参照用户输入信息41所包含的解析对象区域信息(S40)。
接着,数据依赖解析辅助装置100在新取得解析对象区域信息或者解析对象区域信息更新的情况下则进入S60,而在从前次的解析执行时起并未更新的情况下则进入S80(S50)。
接着,数据依赖解析辅助装置100启动数据流解析部206,读入存储于中间程序存储部201的中间程序、存储于指针信息存储部205的上下文相关的指针信息以及从输入部40输入的用户输入信息41,遍历通过用户输入信息41所含有的解析对象区域信息取得的解析对象区域以及执行解析对象区域时能够被调用的全部语句进行上下文相关的数据流解析(S60)。
在此,数据依赖解析辅助装置100依次启动指针信息结合部220、定义信息生成部222、使用信息生成部224、到达定义信息生成部226。
图6为表示指针信息结合部220的动作的流程图。
首先,指针信息结合部220从用户输入信息41所包含的解析对象区域信息中读入包含解析对象区域整体的函数的函数名F(S61)。
接着,指针信息结合部220取出调用关系图中的节点的调用函数名为F的节点(S62)。
接着,指针信息结合部220取出以在S62取出的节点为顶点节点的子调用关系图(S63)。如前所述,在此取出的子调用关系图存在多个的情况下,这些子调用关系图全都彼此同形。
接着,指针信息结合部220取出以在S63取出的子调用关系图的顶点节点的节点识别符(上下文)以及附加于指针信息的语句的上下文信息都相同的指针信息(S64)。
接着,指针信息结合部220将在S64取出的指针信息中的语句和变量都相同的指针信息彼此结合(S65)。在此,“结合指针信息”是指结合附加于语句的上下文信息与被指针变量的集合。
接着,指针信息结合部220针对在S63取出的子调用关系图的顶点节点之外的节点,取出节点的函数调用语句相同的节点并取出该节点的识别符(S66)。
接着,指针信息结合部220取出在S66取出的节点的识别符(上下文)以及附加于指针信息的语句的上下文信息都相同的指针信息(S67)。
接着,指针信息结合部220将在S67取出的指针信息中的语句和指针都相同的指针信息彼此结合(S68)。
根据这些动作,在S63取出的同形的多个子调用关系图所涉及的指针信息重构为一个子调用关系图所涉及的指针信息。只将解析对象区域作为数据流解析的对象,因此在数据流解析中可将取出的子调用关系图的顶点节点的识别符视为相同的节点。
结合指针信息之后,定义信息生成部222、使用信息生成部224以及到达定义信息生成部226利用上下文信息附加语句进行上下文相关的中间程序解析,生成表示在哪条语句定义变量的定义信息、表示在哪条语句使用变量的使用信息以及表示语句是否可到达的到达定义信息。
接着,数据依赖解析辅助装置100启动语句间依赖解析部208,读入存储于中间程序存储部201的中间程序、存储于调用关系图存储部203的调用关系图、存储于定义信息存储部223的定义信息、存储于使用信息存储部225的使用信息以及存储于到达定义信息存储部227的到达定义信息,并进行上下文相关的语句单位的数据依赖解析(S70)。接着,数据依赖解析辅助装置100进入S90。
在此,解析对象区域信息从前次的解析执行时起未更新的情况下(S50的“否”),数据依赖解析辅助装置100读入从输入部40输入的用户输入信息41,更新用户输入信息41所包含的区域指定信息的情况下,进入S90,未更新的情况下,进入S40(S80)。
更新区域指定信息的情况下(S80的“是”),数据依赖解析辅助装置100启动区域间依赖生成部210,读入存储于语句间依赖信息存储部209的上下文相关的语句间依赖信息以及从输入部40输入的用户输入信息41,针对从用户输入信息41所包含的区域指定信息取得的区域,生成存在于区域间的区域间依赖信息(S90)。
图7为表示区域间依赖生成部210的动作的流程图。
区域间依赖生成部210从用户输入信息41所包含的区域指定信息中读入区域信息(S91)。
接着,区域间依赖生成部210取出在S91取得的区域内所包含的语句(S92)。
接着,区域间依赖生成部210从在S92取出的语句中取出依赖源以及依赖目标的语句的语句间依赖信息(S93)。依赖源的语句和依赖目标的语句可为在S92取出的语句,因此依赖源的语句和依赖目标的语句可为同一语句,也可为不同的语句。
接着,区域间依赖生成部210在包含于S93取出的语句的语句间依赖信息的依赖源的语句包含于某一区域1,而依赖目标的语句包含于某一区域2的情况下,生成从区域1向区域2的区域间依赖信息(S94)。此时,区域1与区域2为不同的区域。依赖源的语句与依赖目标的语句包含于相同区域的情况下,不将该语句间依赖信息附加至区域间依赖信息。
接着,数据依赖解析辅助装置100启动区域间依赖显示部212。区域间依赖显示部212读入存储于外部存储部10的源程序11、存储于中间程序存储部201的中间程序、存储于调用关系图存储部203的调用关系图以及存储于区域间依赖信息存储部211的区域间的依赖信息,并在输出装置50上显示区域间的依赖信息(S100)。
接着,数据依赖解析辅助装置100结束S100之后,进入S40。
<具体例>
在以下,利用图5至图7所示的流程图说明图1的源程序11为图3所示的程序的情况下的数据依赖解析辅助装置100的动作。
数据依赖解析辅助装置100启动中间程序生成部200,中间程序生成部200从外部存储部10读入源程序11变换成中间程序并存储至中间程序存储部201(S10)。
与图3的源程序11对应的中间程序所包含的语句所涉及的信息如图8所示。图8中示出了语句识别符、存在语句的文件的文件名以及文件中的行号码的信息。例如,L100的行表示图3的语句11的函数sub的函数调用,表示语句识别符为11、且存在于文件的文件名为rei.c的行号码10。
接着,数据依赖解析辅助装置100启动调用关系图生成部202,调用关系图生成部202生成上下文相关的调用关系图(S20)。如前述,针对图3的源程序11生成图4所示的调用关系图。
接着,数据依赖解析辅助装置100启动指针解析部204,指针解析部204读入存储于中间程序存储部201的中间程序,并遍历中间程序整体进行上下文相关的指针解析(S30)。
图3的源程序11的指针信息如图9所示。指针信息中包含上下文信息附加语句、指针以及被指针变量集合的信息。例如图9的L203行表示在图3(b)的语句51且上下文为4的语句中指针r所指的变量为y。
数据依赖解析辅助装置100读入从输入部40输入的用户输入信息41,判断用户输入信息41所包含的系统结束信息是否为要求系统的结束的输入(S40)。
系统结束信息如图16(a)所示。数据依赖解析辅助装置100在系统结束信息为“END”时结束系统,为“CONTINUE”时继续系统的执行。在此,系统结束信息为“CONTINUE”,因此继续系统的执行。
接着,数据依赖解析辅助装置100参照用户输入信息41所包含的解析对象区域信息,在新取得或者更新解析对象区域信息的情况下,将处理进入S60,未更新的情况下,将处理进入S80。(S50)
解析对象区域信息如图16(b)所示。在此,将存在于文件名proc.c的文件的行号码1的函数名proc函数整体指定为解析对象区域。
接着,数据依赖解析辅助装置100启动数据流解析部206,并遍历从用户输入信息41所包含的解析对象区域信息取得的解析对象区域即函数proc以及执行该函数proc时能够调用的全部语句,进行上下文相关的数据流解析(S60)。
以下,进一步详细地说明数据流解析部206。
数据依赖解析辅助装置100在数据流解析部206中启动指针信息结合部220,指针信息结合部220从解析对象区域信息读入包含解析对象区域整体的函数的函数名(S61)。在此,解析对象区域为函数proc整体,因此包含解析对象区域整体的函数当然为函数proc。
接着,指针信息结合部220取出调用关系图的节点的调用函数名为函数proc的节点识别符2和4的节点(S62)。
接着,指针信息结合部220取出以在S62取出的节点识别符2和4的节点为顶点节点的子调用关系图(S63)。
接着,指针信息结合部220取出以在S63取出的子调用关系图的顶点节点的节点识别符(上下文)以及附加于指针信息的语句的上下文信息都相同的指针信息(S64)。
通过图4所示的调用关系图中的顶点节点的节点识别符2取出图9的指针解析信息的L200、L201的行。另外,同样地通过节点识别符4取出图9的L202、L203的行。
接着,指针信息结合部220将在S64取出的指针信息中的语句和变量都相同的指针信息彼此结合(S65)。
结合后的指针解析信息如图10所示。L300行为结合从图9取出的L200行、L202行而成的行,L301行为结合从图9取出的L201行、L203行而成的行。
接着,指针信息结合部220针对子调用关系图的顶点节点之外的节点取出节点的函数调用语句相同的节点并取出该节点的识别符(S66)。
根据在图4中的以节点识别符2为顶点节点的子调用关系图,取出节点识别符6、7、8,根据在图4中的以节点识别符4为顶点节点的子调用关系图,取出节点识别符9、10、11。
接着,指针信息结合部220取出在步骤S66取出的节点的识别符(上下文)以及附加于指针信息的语句的上下文信息都相同的指针信息(S67)。
通过节点识别符6取出图9的L204、L205、L206的行。同样地,通过节点识别符7取出图9的L207、L208、L209的行,通过节点识别符9取出图9的L210、L211、L212的行,通过节点识别符10取出图9的L213、L214、L215的行。
有关节点识别符8以及11,在图3(b)的语句70中并无指针的使用,因此图9中上下文为8以及11并无附加的语句信息。
接着,指针信息结合部220将在步骤S67取出的指针信息中的语句和指针都相同的指针信息彼此结合(S68)。
结合后的指针解析信息如图10所示。L302行为结合从图9取出的L204行、L210行而成的行,L303行为结合从图9取出的L205行、L211行而成的行,L304行为结合从图9取出的L206行、L212行而成的行。进而,L305行为结合从图9取出的L207行、L213行而成的行,L306行为结合从图9取出的L208行、L214行而成的行,L307行为结合从图9取出的L209行、L215行而成的行。
接着,数据依赖解析辅助装置100在数据流解析部206中依次启动定义信息生成部222、使用信息生成部224、到达定义信息生成部226,针对用户输入信息41所包含的解析对象区域进行上下文相关的数据流解析。
图11为定义信息,例如L400行表示在上下文2以及4中用图3(b)的语句51定义变量e的情形。
图12为使用信息,例如L500行表示在上下文2以及4中于图3(b)的语句51使用变量x以及变量y。
图13为到达定义信息,例如L601行表示在上下文2以及4下可到达图3(b)的语句56的语句之中,有上下文2以及4下的图3(b)的语句51和语句52以及上下文6、9下的图3(c)的语句101。
在此,可到达语句56的语句之中,包含上下文6、9下的图3(c)的语句101,理由如下。首先,在图3(b)的语句57的函数fun的调用时,变量e的地址传递至图3(c)的语句100的指针p,在图3(c)的语句101中通过指针p的间接引用定义变量e。接着,通过for循环执行语句57之后,控制进入图3(b)的行号码7,在图3(b)的行号码11(无图示)至行号码40(无图示)之间,不存在定义变量e的语句。结果,用图3(c)的语句101定义的变量e的值在图3(b)的语句56中保持于变量e。
接着,数据依赖解析辅助装置100启动语句间依赖解析部207,语句间依赖解析部207进行上下文相关的语句单位的数据依赖解析(S70)。
语句间的依赖解析信息如图14所示。例如,L711行为按照如下方式求出的行。首先,作为从图13的L603行可到达图3(b)的上下文2以及4下的语句61的语句,取出上下文6以及9下的图3(c)的语句101,接着,发现在图11的定义信息的L408的行中,在上下文6以及9下的语句101所定义的变量中存在变量e,接着,发现在图12的使用信息的L503行中,在上下文2以及4下的语句61的使用变量中存在变量e。结果,从将起因变量设定为变量e的上下文6以及9下的语句101向上下文2以及4下的语句61求出依赖。这是由于若满足(1)用语句1定义变量x,(2)在语句2使用变量x,(3)语句1可到达语句2这全部三个条件,则存在从语句1向语句2以变量x为起因变量的依赖。
接着,数据依赖解析辅助装置100进入S90,在此说明区域指定信息。
区域指定信息如图16(c)所示。在图16(c)中,区域名表示区域的名称,文件名表示指定区域的文件的名称,范围为通过行号码表示区域的范围。例如,L901表示区域的名称为R1,文件名为proc.c、范围为行号码8至行号码19。其他的L902、L903也同样。
该区域指定可通过文本输入,也可通过鼠标指定。例如,图17(a)为通过文本输入的情况下的例子,R1、R2、R3为区域名,“proc.c”表示文件名,“range”表示范围。另外,图17(b)为通过鼠标指定的情况,表示通过鼠标的拖拽动作在源程序11上直接指定3个区域R1、R2、R3的例子。
接着,数据依赖解析辅助装置100启动区域间依赖生成部210,区域间依赖生成部210针对通过用户输入信息41所包含的区域指定信息得出的区域,生成区域间所存在的区域间依赖信息(S90)。
以下,进一步详细地说明区域间依赖生成部210的动作。
区域间依赖生成部210从用户输入信息41所包含的区域指定信息中读入区域信息(S91)。如前述,图16(c)为区域信息。
接着,区域间依赖生成部210取出在S91取得的区域内所包含的语句(S92)。
图16(c)的L901的区域R1如下述。文件名proc.c的行号码8至行号码19中所包含的语句为图3(b)的语句56、57。进而,如前述,区域所包含的语句中也包含被调用的函数中的语句,因此图3(c)的语句100、101、102也包含于区域R1。同样地,图16(c)的L902的区域R2所包含的语句为图3(b)的语句61、65、66以及图3(c)的语句100、101、102。另外,同样地,图16(c)的L903的区域R3所包含的语句为图3(b)的语句70以及图3(c)的语句201。
接着,区域间依赖生成部210从在S92取出的语句中取出成为依赖源以及依赖目标的语句的语句间依赖信息(S93)。
例如,图14的L704行表示依赖源为语句57、依赖目标为语句61,语句57以及61都包含于在S92取出的语句,因此作为对象的语句间依赖信息取出。同样地,取出图14的L705、L706、L707、L710、L711、L712、L713、L714的各行。
接着,在含有通过S93取出的语句的语句间依赖信息的依赖源的语句包含于区域1、而依赖目标的语句包含于区域2的情况下,区域间依赖生成部210生成从区域1向区域2的区域间依赖信息(S94)。
图15为区域间依赖信息。例如,L801行是根据图14的L704行生成的行。即、图14的L704行的依赖源的语句为语句57包含于区域R1,并且,依赖目标的语句为语句61包含于区域R2,因此作为区域间的依赖取出,进而,生成追加区域信息的区域间依赖信息。图15的其他行也同样,L802、L803、L804、L805的各行,分别为由图14的L705、L711、L707、L709生成的行。另一方面,例如,就图14的L706行而言,其依赖源的语句即语句61和依赖目标的语句即语句66都包含于相同的区域R2,因此并不作为区域间依赖信息取出。
接着,数据依赖解析辅助装置100启动区域间依赖显示部212,区域间依赖显示部212在输出装置50上显示区域间的依赖信息(S100)。
图18表示区域间依赖显示的例子。图18(a)为文本的区域间依赖信息的显示例。例如,“From:R1,proc.c,10->To:R2,proc.c,21:Cv:s”表示从区域R1的文件proc.c的行号码10向区域R2的文件proc.c的行号码21存在以变量s为原因的依赖。该信息通过图15的区域间依赖信息和图8的语句信息求出。例如,在图15的L801行中,依赖源的语句为语句57,根据图8的L109行取出语句57的存在位置即文件proc.c的行号码10的信息,同样地,根据图15的L801的依赖源的语句为语句61从图8的L110取出文件proc.c的行号码21的信息,据此进行显示。
另外,图18(b)以及(c)为在源程序11上显示区域间依赖信息的例子。图18(b)以及(c)表示图15的L803行的区域间依赖的显示的例子。在图15的L803行中,依赖源的语句为语句101,从图8的L108行取出语句101的存在位置即文件cmn.c的行号码10的信息,同样地,根据依赖源的语句即语句61取出文件proc.c的行号码21的信息。接着,打开表示依赖源的文件cmn.c的窗口,强调行号码10号(图18(b))。进而,打开表示依赖目标的文件proc.c的窗口,强调行号码21号(图18(c))。有关图15的其他区域间依赖也同样。但是,依赖源以及依赖目标的文件相同的情况下,也可在同一窗口内强调依赖源以及依赖目标的行号码。
接着,数据依赖解析辅助装置100进入S40。
数据依赖解析辅助装置100在S40中在用户输入信息41并无系统的结束要求期间,反复执行S40至S100。
数据依赖解析辅助装置100在S50中对解析对象区域有变更的情况下,针对新的解析对象区域进行数据流解析并算出区域间依赖信息。此时,再次利用在S30生成的指针信息,因此能够节约解析时间。
进而,数据依赖解析辅助装置100在S50中对解析对象区域并无变更的情况下,进入S80,进一步在S80有区域的更新的情况下,即、关于相同的解析对象区域,针对不同的区域算出区域间依赖信息的情况下,再次利用在S60以及S70算出的数据流信息以及语句间依赖信息,因此能够节约解析时间。即、有关用户所指定的各种各样的区域能够迅速地显示区域间依赖信息。
<数据依赖解析后源程序的线程并行化实施例>
如前述,通过数据依赖解析辅助装置100针对图3的源程序11设定图17所示的区域的情况下,得出图18所示的区域间依赖信息。以下,为了表示得出的区域间依赖信息的可用性,说明图3的源程序11的线程化的例子。
图19为按照OpenMP的记述方式对图3的程序进行线程化的例子。如图19(a)所示,在程序中的ST1、ST2、ST3中,通过记述为“#pragma omp section”能够将3块区域进行线程化。
另外,图19(a)的ST4的“buffer_x”(x为s、e或a)是为了线程间的数据授受而针对每个起因变量x设定的数据。例如,buffer_s为对应于图15的L801以及L802行的起因变量s而设定的数据。
进而,图19(a)的ST5的线程1中的“buffer_s_send(s)”的动作为将变量s的值发送至buffer_s;ST6的线程2中的“buffer_s_receive(s)”的动作为从buffer_s接收变量s的值。即、buffer_s_send(s)以及buffer_s_receive(s)为插入区域间的通信代码。
另外,如图19的ST7所示,对源程序11进行线程化之后,声明变量s在各线程作为本地的变量。即、针对每个线程准备变量s,因此保障了并行地执行线程的情况下,并无来自多个线程的对变量s的写入冲突或者来自其他线程的对变量s的写入所引起的异常值的引用。
有关其他的区域间依赖信息也同样地用于线程化。
图19(b)的buffer.h为通信代码即buffer类的详细的程序的例子。用户通过进行线程并行化的程序可将buffer.h列入头文件,针对每个源程序11准备不同的头文件,除上述插入的通信代码“buffer_x_send(x)”、“buffer_x_receive(x)”(x为变量名)之外,无需向源程序11追加代码。
通过以上的方法,用户能够以区域间依赖信息为基础容易地制作线程并行化程序。
《补足》
以上,基于实施方式说明了本发明所涉及的数据依赖解析辅助装置,但本发明并不限于上述的实施方式。
(1)在本实施方式中,从自输入部40输入的用户输入信息41取出解析对象区域信息以及区域指定信息,但本发明不限于此。例如,也可从源程序11中记述的注释、事先决定的关键字或者特定的记号等信息中取出。
例如,图20为针对图3(b)的源程序11通过“pragma”记述解析对象区域信息和区域指定信息的例子。图20的ST11为解析对象区域信息的例子,analyze_function之后指定函数名,据此表示函数proc整体为解析对象区域。另外,图20的ST12、ST13、ST14为区域指定的区域,通过“#pragma region区域名{…}”指定{…}的内容为具有“区域名”的线程化区域。
(2)在本实施方式中,说明了解析对象区域为包含区域R1、R2以及R3这三者的一个函数proc整体的情况,但本发明不限于此。例如,用户也可针对图3的源程序11和区域R1、R2以及R3,将包含全部区域且包含区域所涉及的循环等控制构造整体的“文件proc.c的第7行至第40行”指定为解析对象区域。如此,解析对象区域能够不包含与解析对象区域的解析无关的语句。另外,此时解析对象区域所包含的语句的上下文为2或4,上下文2或4的调用源即上下文1的语句不包含于解析对象区域,因此指针信息结合部220能够取得应取出的子调用关系图的顶点节点的识别符为2和4。
(3)在本实施方式中,说明语句间依赖信息生成部210生成解析对象区域内的全部依赖信息作为语句间依赖信息,区域间依赖信息生成部212根据语句间依赖信息生成区域间所涉及的依赖信息作为区域间依赖信息的情形,但本发明不限于此。例如,也可没有语句间依赖信息生成部210和语句间依赖信息存储部211,区域域间依赖信息生成部212分别从定义信息存储部223取得变量的定义信息,从使用信息存储部225取得变量的使用信息、从到达定义信息存储部227取得到达定义信息,从输入装置40取得用户输入信息41所含有的区域指定信息,并直接生成区域间依赖信息。
(4)在本实施方式中,说明了作为区域间依赖信息包含依赖源的语句、依赖源的语句所处的区域、依赖目标的语句、依赖目标的语句所处的区域以及起因变量的情况,但本发明不限于此。例如,作为区域间依赖信息也可只包含依赖源的语句所处的区域,依赖目标的语句所处的区域以及起因变量。如此,能够取得生成用于对区域进行线程并行化的通信代码的充分必要的信息。
(5)在本实施方式中,记述了指针信息结合部220结合指针信息存储部205所保持的指针信息并存储至结合指针信息存储部221的情况,但本发明不限于此。例如,也可以没有指针信息结合部220与结合指针信息存储部221,定义信息生成部222、使用信息生成部224、到达定义信息生成部226而从指针信息存储部205直接取得指针信息。此时,可在定义信息、存储信息以及到达定义信息的生成时结合变量,或者也可在语句间依赖信息或区域间依赖信息的生成时结合变量。
(6)在本实施方式中,描述了对源程序11进行线程并行化来进行区域间的数据依赖解析的情形,但本发明不限于此。例如,为了跨越于函数间实施如非专利文献1的第9章所记载的源程序11的最优化,也可以利用在本发明中存储于数据流信息存储部207的数据流信息。如此,在本发明所涉及的数据依赖解析辅助装置中,能够利用线程并行化之外的程序最优化方法,有利于源程序11的高速化。
<总结>
以下,说明实施方式所涉及的数据依赖解析辅助装置、数据依赖解析辅助程序以及数据依赖解析辅助方法的构成以及效果。
(1)实施方式所涉及的数据依赖解析辅助装置是一种对源程序进行上下文相关的数据依赖解析的数据依赖解析辅助装置,其特征在于,包括:指针信息生成部,对在所述源程序中使用的全部指针进行上下文相关的指针解析并生成指针信息;数据流信息生成部,利用所述指针信息,对作为所述源程序的一部分、且为了解析存在于两个以上的线程化区域之间的数据依赖而指定的解析对象区域进行上下文相关的数据流解析并生成数据流信息;以及区域间依赖信息生成部,利用所述数据流信息,针对存在于所述两个以上的线程化区域之间的数据依赖,生成表示依赖源的线程化区域、依赖目标的线程化区域以及作为依赖原因的变量的区域间依赖信息。
另外,实施方式所涉及的数据依赖解析辅助程序是一种使计算机执行针对源程序的上下文相关的数据依赖解析的数据依赖解析支援程序,其特征在于,所述上下文相关的数据依赖解析包括:指针信息生成步骤,针对在所述源程序中使用的全部指针进行上下文相关的指针解析并生成指针信息;数据流信息生成步骤,利用所述指针信息,对作为所述源程序的一部分、且为了解析存在于两个以上的线程化区域之间的数据依赖而指定的解析对象区域进行上下文相关的数据流解析并生成数据流信息;区域间依赖信息生成步骤,利用所述数据流信息,针对存在于所述两个以上的线程化区域之间的数据依赖,生成表示依赖源的线程化区域、依赖目标的线程化区域以及作为依赖原因的变量的区域间依赖信息。
另外,实施方式所涉及的数据依赖解析辅助方法是一种对源程序进行上下文相关的数据依赖解析的数据依赖解析支援方法,其特征在于,包括:指针信息生成步骤,对在所述源程序中使用的全部指针进行上下文相关的指针解析并生成指针和指针所指向的变量的对应信息即指针信息;数据流信息生成步骤,利用所述指针信息,对作为所述源程序的一部分、且为了解析存在于两个以上的线程化区域之间的数据依赖而指定的解析对象区域进行上下文相关的数据流解析并生成数据流信息;区域间依赖信息生成步骤,利用所述数据流信息,针对存在于所述两个以上的线程化区域之间的数据依赖,生成表示依赖源的线程化区域、依赖目标的线程化区域以及作为依赖原因的变量的区域间依赖信息。
通过这些上述的构成,数据依赖解析辅助装置通过并非针对源程序整体而是只针对解析对象区域进行数据依赖解析的一部分的处理即数据流解析,能够缩短解析时间,另外,针对数据依赖解析的一部分的处理即指针解析和数据流解析进行上下文相关的解析,因此能够高精度地取得线程化区域间的依赖信息,从而能够兼顾高精度的解析和解析时间的缩短。
(2)另外,关于实施方式所涉及的上述(1)的数据依赖解析辅助装置,所述解析对象区域为单一的函数与由所述单一的函数调用的函数而成的集合,该集合包含所述两个以上的线程化区域的全部。
如此,数据依赖解析辅助装置能够防止用于取得线程化区域间的依赖信息的解析对象区域不足以解析线程化区域,且由于能够通过函数名指定解析对象区域,因此能够简单地进行解析对象区域的指定。
(3)另外,关于实施方式所涉及的上述(1)的数据依赖解析辅助装置,所述数据流信息生成部也可针对在包含所述解析对象区域的单一的函数以及由所述函数调用的函数中使用的指针,将所述单一的函数作为一个上下文来结合所述指针信息并生成结合指针信息。
如此,数据依赖解析辅助装置在针对解析对象区域进行数据流解析时,针对从解析对象区域外向解析对象区域所包含的函数的调用,将指针信息中的该函数的上下文归为一个,据此指针信息的信息量得以削减并且能够回避无用的数据流解析从而缩短了解析时间。
(4)另外,实施方式所涉及的上述(1)的数据依赖解析辅助装置也可还具有接受用于指定所述解析对象区域的信息的输入的解析对象区域指定部。
如此,数据依赖解析辅助装置能够在指定解析对象区域时无需重新取得源程序,而通过简单的操作对同一源程序连续地进行数据依赖解析。
(5)另外,实施方式所涉及的上述(1)的数据依赖解析辅助装置也可还具有接受用于指定所述线程化区域的信息的输入的区域指定部。
如此,数据依赖解析辅助装置能够简单地仅取得有关线程化区域的信息,通过简单的操作针对同一源程序的同一解析对象区域进行数据依赖解析。
(6)另外,实施方式所涉及的上述(1)的数据依赖解析辅助装置也可还具有输出所述区域间依赖信息的区域间依赖信息输出部。
如此,数据依赖解析辅助装置能够通过合适的方法向用户提示数据依赖解析的结果,有利于源程序的并行化的辅助。
(7)另外,关于实施方式所涉及的上述(1)的数据依赖解析辅助装置,所述数据流信息生成部也可在所述指针信息生成部保持着针对同一源程序的指针信息的情况下,利用所述保持的指针信息生成数据流信息。
如此,针对同一源程序的不同的解析对象区域进行数据依赖解析的情况下,可再次利用已经进行生成的指针信息进行数据流解析以及区域间依赖信息生成,从而实现解析时间的缩短。
(8)另外,关于实施方式所涉及的上述(1)的数据依赖解析辅助装置,所述区域间依赖信息生成部也可在所述数据流解析部保持着针对同一解析对象区域的数据流信息的情况下,利用所述保持的数据流信息生成区域间依赖信息。
如此,针对同一解析对象区域进行数据依赖解析的情况下,可再次利用已经进行生成的数据流信息进行区域间依赖信息生成,从而实现解析时间的缩短。
产业上的可利用性
本发明所涉及的数据依赖解析辅助装置能够用于参照上下文相关的区域间依赖信息实施区域级的源程序的并行化,或者参照上下文相关的数据流信息实施源程序的改善。
附图标记说明
100-数据依赖解析辅助装置
10-外部存储部
11-源程序
40-输入部
41-用户输入信息
50-输出部
200-中间程序生成部
201-中间程序存储部
202-调用关系图生成部
203-调用关系图存储部
204-指针解析部
205-指针信息存储部
206-数据流解析部
207-数据流信息存储部
208-语句间依赖解析部
209-语句间依赖信息存储部
210-区域间依赖生成部
211-区域间依赖信息存储部
212-区域间依赖显示部
220-指针信息结合部
221-结合指针信息存储部
222-定义信息生成部
223-定义信息存储部
224-使用信息生成部
225-使用信息存储部
226-到达定义信息生成部
227-到达定义信息存储部

Claims (10)

1.一种数据依赖解析辅助装置,对源程序进行上下文相关的数据依赖解析,其特征在于,包括:
指针信息生成部,对在所述源程序中使用的全部指针进行上下文相关的指针解析并生成指针信息;
数据流信息生成部,利用所述指针信息,对解析对象区域进行上下文相关的数据流解析并生成数据流信息,该解析对象区域是所述源程序的一部分,而且是为了解析存在于两个以上的线程化区域之间的数据依赖而指定的区域;以及
区域间依赖信息生成部,利用所述数据流信息,针对存在于所述两个以上的线程化区域之间的数据依赖,生成表示依赖源的线程化区域、依赖目标的线程化区域以及作为依赖原因的变量的区域间依赖信息。
2.如权利要求1所述的数据依赖解析辅助装置,其特征在于,
所述解析对象区域是以下集合,该集合包含所述两个以上的线程化区域的全部,而且是单一的函数与由所述单一的函数调用的函数的集合。
3.如权利要求1所述的数据依赖解析辅助装置,其特征在于,
所述数据流信息生成部针对在包含所述解析对象区域的单一的函数以及由所述函数调用的函数中使用的指针,将所述单一的函数作为一个上下文来结合所述指针信息并生成结合指针信息。
4.如权利要求1所述的数据依赖解析辅助装置,其特征在于,还包括:
解析对象区域指定部,接受用于指定所述解析对象区域的信息的输入。
5.如权利要求1所述的数据依赖解析辅助装置,其特征在于,还包括:
区域指定部,接受用于指定所述线程化区域的信息的输入。
6.如权利要求1所述的数据依赖解析辅助装置,其特征在于,还包括:
区域间依赖信息输出部,输出所述区域间依赖信息。
7.如权利要求1所述的数据依赖解析辅助装置,其特征在于,
在所述指针信息生成部保持着针对同一源程序的指针信息的情况下,所述数据流信息生成部利用保持的所述指针信息生成数据流信息。
8.如权利要求1所述的数据依赖解析辅助装置,其特征在于,
在所述数据流解析部保持着针对同一解析对象区域的数据流信息的情况下,所述区域间依赖信息生成部利用保持的所述数据流信息生成区域间依赖信息。
9.一种数据依赖解析辅助程序,使计算机执行针对源程序的上下文相关的数据依赖解析,其特征在于,
所述上下文相关的数据依赖解析包括:
指针信息生成步骤,针对在所述源程序中使用的全部指针进行上下文相关的指针解析并生成指针信息;
数据流信息生成步骤,利用所述指针信息,对解析对象区域进行上下文相关的数据流解析并生成数据流信息,该解析对象区域是所述源程序的一部分,而且是为了解析存在于两个以上的线程化区域之间的数据依赖而指定的区域;以及
区域间依赖信息生成步骤,利用所述数据流信息,针对存在于所述两个以上的线程化区域之间的数据依赖,生成表示依赖源的线程化区域、依赖目标的线程化区域以及作为依赖原因的变量的区域间依赖信息。
10.一种数据依赖解析辅助方法,对源程序进行上下文相关的数据依赖解析,其特征在于,包括:
指针信息生成步骤,对在所述源程序中使用的全部指针进行上下文相关的指针解析并生成指针信息,该指针信息是指针与指针所指向的变量之间的对应信息;
数据流信息生成步骤,利用所述指针信息,对解析对象区域进行上下文相关的数据流解析并生成数据流信息,该解析对象区域是所述源程序的一部分,而且是为了解析存在于两个以上的线程化区域之间的数据依赖而指定的区域;以及
区域间依赖信息生成步骤,利用所述数据流信息,针对存在于所述两个以上的线程化区域之间的数据依赖,生成表示依赖源的线程化区域、依赖目标的线程化区域以及作为依赖原因的变量的区域间依赖信息。
CN2012800026049A 2012-01-13 2012-09-28 数据依赖解析辅助装置、数据依赖解析辅助程序以及数据依赖解析辅助方法 Pending CN103314360A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2012005449 2012-01-13
JP2012-005449 2012-01-13
PCT/JP2012/006223 WO2013105158A1 (ja) 2012-01-13 2012-09-28 データ依存解析支援装置、データ依存解析支援プログラム、及びデータ依存解析支援方法

Publications (1)

Publication Number Publication Date
CN103314360A true CN103314360A (zh) 2013-09-18

Family

ID=48781137

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2012800026049A Pending CN103314360A (zh) 2012-01-13 2012-09-28 数据依赖解析辅助装置、数据依赖解析辅助程序以及数据依赖解析辅助方法

Country Status (4)

Country Link
US (1) US20140096117A1 (zh)
JP (1) JPWO2013105158A1 (zh)
CN (1) CN103314360A (zh)
WO (1) WO2013105158A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105335230A (zh) * 2014-07-30 2016-02-17 阿里巴巴集团控股有限公司 一种服务处理方法及装置
WO2020056937A1 (zh) * 2018-09-19 2020-03-26 深圳大学 一种基于c语言的语法扩展方法、装置及终端设备

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10061591B2 (en) * 2014-06-27 2018-08-28 Samsung Electronics Company, Ltd. Redundancy elimination in single instruction multiple data/thread (SIMD/T) execution processing
US9514305B2 (en) * 2014-10-17 2016-12-06 Qualcomm Incorporated Code pointer authentication for hardware flow control
US9372670B1 (en) * 2015-09-30 2016-06-21 Semmle Limited Template dependency relocation
JP2017107448A (ja) * 2015-12-10 2017-06-15 株式会社デンソー 並列化方法、並列化ツール、車載装置
US10671361B2 (en) * 2016-10-25 2020-06-02 Paypal, Inc. Automatically determining data dependencies to facilitate code execution

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020010911A1 (en) * 2000-02-16 2002-01-24 Ben-Chung Cheng Compile time pointer analysis algorithm statement of government interest
JP3887550B2 (ja) * 2001-07-25 2007-02-28 株式会社東芝 クロスリファレンス構築装置、クロスリファレンス構築方法及びクロスリファレンス構築用プログラム
JP4830108B2 (ja) * 2006-01-17 2011-12-07 国立大学法人東京工業大学 プログラム処理装置、プログラム処理方法、並列処理プログラム用コンパイラおよび並列処理プログラム用コンパイラを格納した記録媒体
JP4923240B2 (ja) * 2006-01-17 2012-04-25 国立大学法人東京工業大学 プログラム処理装置、並列処理プログラム、プログラム処理方法、並列処理コンパイラ、並列処理コンパイラを格納した記録媒体およびマルチプロセッサシステム
US8539450B2 (en) * 2009-03-11 2013-09-17 Nec Laboratories America, Inc. Fast and accurate data race detection for concurrent programs with asynchronous calls
US8473927B2 (en) * 2011-05-26 2013-06-25 Oracle International Corporation Points-to analysis using value flow

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
EMAMI ET AL: "Context-Sensitive Interprocedural Points-to Analysis in the presence of Pointer Functions", 《PROCEEDINGS OF THE ACM SIGPLAN 1994 CONFERENCE ON PROGRAMMING LANGUAGE DESIGN AND IMPLEMENTATION》 *
WILSON ET AL: "Efficient Pointer Analysis for C programs", 《PROCEEDINGS OF THE ACM SIGPLAN 1995 CONFERENCE ON PROGRAMMING LANGUAGE DESIGN AND IMPLEMENTATION》 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105335230A (zh) * 2014-07-30 2016-02-17 阿里巴巴集团控股有限公司 一种服务处理方法及装置
WO2020056937A1 (zh) * 2018-09-19 2020-03-26 深圳大学 一种基于c语言的语法扩展方法、装置及终端设备

Also Published As

Publication number Publication date
JPWO2013105158A1 (ja) 2015-05-11
US20140096117A1 (en) 2014-04-03
WO2013105158A1 (ja) 2013-07-18

Similar Documents

Publication Publication Date Title
CN103314360A (zh) 数据依赖解析辅助装置、数据依赖解析辅助程序以及数据依赖解析辅助方法
TWI455025B (zh) 根據迴路分裂或索引陣列的迴路並列化的方法與電腦可讀取媒體
US9864590B2 (en) Method and system for automated improvement of parallelism in program compilation
US8234635B2 (en) Program processing device, parallel processing program, program processing method, parallel processing compiler, recording medium containing the parallel processing compiler, and multi-processor system
CN102541521B (zh) 基于结构化查询语言的操作指令自动生成装置及方法
US8850414B2 (en) Direct access of language metadata
US9582321B2 (en) System and method of data processing
US7917899B2 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
US20080320031A1 (en) Method and device for analyzing an expression to evaluate
CN109740122A (zh) 思维导图用例文件的转换方法及装置
US10802806B1 (en) Generating vectorized control flow using reconverging control flow graphs
CN104267654A (zh) 梯形图程序转换成指令表程序及其编译的方法与系统
CN103645930B (zh) 汇编级跨文件调度框架的构建方法
CN110580189A (zh) 生成前端页面的方法、装置、计算机设备以及存储介质
CN105260374A (zh) 异步流水线式的图查询方法及系统
CN111124379A (zh) 页面生成方法、装置、电子设备及存储介质
JP5178852B2 (ja) 情報処理装置およびプログラム
JP4830108B2 (ja) プログラム処理装置、プログラム処理方法、並列処理プログラム用コンパイラおよび並列処理プログラム用コンパイラを格納した記録媒体
US20180329873A1 (en) Automated data extraction system based on historical or related data
US20090064092A1 (en) Visual programming language optimization
CN105468521A (zh) 一种基于子图搜索的指针相关语义错误定位方法
JP5932707B2 (ja) 計算機、プログラム及びデータ生成方法
CN102360306A (zh) 高级语言代码中循环数据流图提取优化信息处理方法
Zhao et al. AutoGraph: optimizing DNN computation graph for parallel GPU kernel execution
JP2009093491A (ja) 検証シナリオ作成プログラム、該プログラムを記録した記録媒体、検証シナリオ作成装置、および検証シナリオ作成方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20130918

WD01 Invention patent application deemed withdrawn after publication