专利名称:程序转换装置以及编译程序的制作方法
技术领域:
本发明涉及一种程序转换装置以及编译程序,其将用c语言等程序语
言所记载的源代码转换为用电子计算机可执行的指令代码。
背景技术:
近年来,逐渐发展为,在电子计算机的处理器中,使用独立地具有地 址生成单元和运算执行单元的体系结构。在这样的体系结构中,例如,可 以并行执行转送指令和运算指令。当设一个指令的执行周期数为一个周期 时,以往执行转送指令和运算指令需要两个周期,然而通过独立地具有地 址生成单元和运算执行单元,将转送指令和运算指令置换为同时即并行执 行指令,由此可以将执行时间缩短为一个周期。
然而,对于将用c语言所记载的源代码转换为转送指令和运算指令等 指令代码时,通过使用作为软件的c编译器,以该源代码为基础生成暂时
中间代码,以所生成的中间代码为基础,进一步进行各种优化,生成最终
的指令代码。此时,对于如上所述的并行执行指令,c编译器以中间代码
为基础,将两个指令转换为一个并行执行指令。对于用于在这样的中间代 码层次中的并行化的程序转换技术,参照专利文献l。
专利文献l:日本特开2001-282549号/〉才艮
然而,在以往的方法中,存在如下的缺点当存在成为并行化的候补 的两个指令,而要将它们移动到同时执行位置时,在它们之间存在具有依 赖关系的其他指令的情况下,判别为不能统一地ii行指令移动,不能进行 并行化。在此,所谓依赖关系是指,由于后续指令参照由在先执行的指令 更新的数据和标记等,导致某个指令的执行条件为先行指令的执行结果, 或者,某个指令的执行结果为后行指令的执行条件的关系,在存在这样的 关系的情况下,执行指令的指令顺序受到制约。
图l表示,由于存在依赖关系而不进行指令移动的具体例。在此,为 了说明使用下述的伪中间指令。即,INSTPn(n为按指令顺序分配的编号) 为可以成为并行化的对象的指令,例如,INSTP1及INSTP2意味着彼此
之间可并行化。INSTNn表示不是并行化的对象的指令。在各指令后面的 括弧内记载有其他指令的情况,是表示在该指令与本身之间有依赖关系。 按图面的向下方向按指令顺序执行各指令。
参照图1中(a),分别地,INSTN1和INSTP5、 INSTP2和INSTN4、 INSTN3和INSTP5、INSTN4和INSTP2 、 INSTP5和INSTN1及INSTN3, 在指令间有依赖关系。另外,INSTP2和INSTP5的两个指令为可并行化 的指令。
在该情况下,可以尝试将INSTP2和INSTP5移动到同时执行位置。 然而,由于INSTP2和INSTN4之间的依赖关系,不能移动到INSTP5的 位置,另外,INSTP5,由于与INSTN3之间的依赖关系,而被判别为不能 移动到INSTP2的位置。其结果,导致不能ii行INSTP2和INSTP5的并 行化,不能实现指令执行的高速化。
参照图1中(b),分别地,INSTN1和INSTP5、 INSTP2和INSTN3 、 INSTN3和INSTP2、INSTN4和INSTP5 、 INSTP5和INSTN1及INSTN4, 在指令间有依赖关系。另外,INSTP2和INSTP3的两个指令为可并行化 的指令。
这种情况下,尝试将INSTP2和INSTP5移动到同时执行位置。然而, INSTP2,由于和INSTN3之间的依赖关系,而被判别为不能移动到INSTP5 的位置,另外,INSTP5,由于和INSTN4之间的依赖关系,而净皮判别为不 能移动到INSTP2的位置。其结果,这种情况下,也导致不能进行INSTP2 和INSTP5的并行化。如以上的具体例,在以往的方法中,基于执行位置 并行化的高速化是不充分的。
发明内容
本发明的目的在于,提供一种更彻底地实现指令执行的高速化的程序 转换装置和编i^序。
本发明的程序转换装置,其特征在于,是一种将程序源代码转换为指 令代码的程序转换装置,包含中间代码生成单元,其将该源代码进行转 换,并生成包含多个指令的中间代码;并行化候补指令抽出单元,其从该 中间代码中,抽出由两个并行化候补指令构成的至少一个组合;依赖关系 指令抽出单元,其对每个该并行化候补指令,从该中间代码中抽出与该并
行化候补指令具有依赖关系的依赖关系指令;可移动范围判别单元,其对 每个该并行化候补指令,基于对于该并行化候补指令所抽出的依赖关系指 令的执行位置,判别该并行化候补指令的可移动范围;指令代码生成单元, 其通过将该两个并行化候补指令移动到在该两个并行化候补指令的共同 可移动范围中所包含的一个执行位置上,来修改该中间代码,通过对修改 后的中间代码进行转换,来生成该指令代码。
本发明的编译程序,其特征在于,是一种用于使计算机作为将程序源 代码转换为指令代码的单元而发挥功能的编译程序,使如下单元发挥功
能中间代码生成单元,其对该源代码进行转换,并生成包含多个指令的 中间代码;并行化候补指令抽出单元,其从该中间代码中,抽出由两个并 行化候补指令构成的至少一个组合;依赖关系指令抽出单元,其对每个该 并行化候补指令,从该中间代码中抽出与该并行化候补指令具有依赖关系 的依赖关系指令;可移动范围判别单元,其对每个该并行化候补指令,基 于关于该并行化候补指令的所抽出的依赖关系指令的执行位置,判别该并 行化候补指令的可移动范围;指令代码生成单元,其通过将该两个并行化 候补指令移动到在该两个并行化候补指令的共同可移动范围中所包含的 一个执行位置上,来修改该中间代码,通过对修改后的中间代码进行转换, 来生成该指令代码。
根据本发明的程序转换装置及编译程序,能够完成更细致的指令代码 的执行位置并行化,并使指令执行的高速化更加彻底。
图1为表示以往的方法中的指令执行顺序的并行化的具体例的图。
图2表示第一实施例,是表示包含程序转换装置的整体的构成的框图。
图3为表示图2所示的可并行化指令表的i殳定例的图。
图4为表示第一实施例中的并行化的处理过程的流程图。
图5为说明在图3所示的处理过程中移动指令的情况的说明图。
图6为表示第二实施例中的并行化的处理过程的流程图。
图7A为说明在图6所示的处理过程中成为前提的指令排列的说明图。图7B为说明在图6所示的处理过程中以组为单位进行指令移动的情 况的说明图。
图8为表示通过执行图6所示的处理过程而得到的并行化的实际例的图。
图中10-源代码;20-程序转换装置;21-中间代码生成部;22-依赖关 系指令抽出部;23-并行化候补指令抽出部;24-并行化执行部;25-指令代 码生成部;26-可并行化指令表;30-编i^f呈序;40-指令代码。
具体实施例方式
参照附图,对于本发明的实施例进行详细说明。
(第一实施例)
图2表示第一实施例,且表示包^序转换装置的整体的构成。程序 转换装置20为,将源代码10作为输入而读入,并将该源代码转换为指令 代码40而输出的装置。源代码IO,是用C语言等程序语言记载的源代码 的数据,并通过通讯网络和存储^^质等多种单元读入到程序转换装置20。 指令代码40,是作为目的的可由电子计算机执行的指令代码的数据,并通 过通讯网络和存储介质等多种方法向电子计算机输出。在本实施例中,作 为执行指令代码40的电子计算机,是以具备并行体系结构的处理器的电子 计算机为前提的,且该并行体系结构的处理器,通过独立地具有地址生成 单元和运算执行单元,可将多个指令并行来执行。
程序转换装置20,包含中间代码生成部21、依赖关系指令抽出部 22、并行化候补指令抽出部23、并行化执行部24、指令代码生成部25及 可并行化指令表26。也可以作为将程序转换装置20设为一个计算机装置 时的编if^呈序30来实现这些各部21 ~ 26。
中间代码生成部21,具备以下功能以读入的源代码10为基础,生 成中间代码,并将生成的中间代码提供给农赖关系指令抽出部22及并行化 候补指令抽出部23。在利用C语言生成源代码10的数据的情况下,例如 可以利用汇编语言记载中间代码。
依赖关系指令抽出部22,具备以下功能以所提供的中间代码为基础, 检查各指令间的依赖关系,对每个指令抽出有依赖关系的依赖关系指令,
并将这样的依赖关系通知到并行化执行部24。并行化候补指4^抽出部23, 具备以下功能以所提供的中间代码为基础,抽出可同时执行即可并行化 的并行化候补指令的组合,并将所抽出的组合通知到并行化执行部24。某 个指令和其他的指令是否可以并行化的判定,是通过参照可并行化指令表 26来进行的,且该可并行化指令表26预先设定了可并行化的指令的组合。
并行化执行部24,具备以下功能以由依赖关系指令抽出部22所通 知的依赖关系,和由并行化候补指令抽出部23所通知的并行化候补指令为 基础,划定作为并行化候补指令的两个指令的移动位置并对中间代码执行 并行化。指令代码生成部25,具备以下功能以由并行化执行部24完成 了并行化的中间代码为基础,重新通过通常的编译处理来生成指令代码。
此外,也可以通过一台个人电脑等的电子计算机来实现程序转换装置 20。这种情况下,中间代码生成部21、依赖关系指令抽出部22、并行化候 补指令抽出部23、并行化执行部24、指令代码生成部25,作为一个编译 程序30,而使作为计算机的程序转换装置20发挥功能。
图3表示图2所示的可并行化指令表的设定例。如图所示那样,在可 并行化指令表26中,例如将指令A的存储器转送指令、指令B的算a 算指令、逻辑运算指令及移位运算指^i殳定为可并行化。作为指令的种类 的例,在图面右侧表示汇编语言下的列表。
图4表示第一实施例中的并行化处理过程。作为前提,设将源代码输 入到程序转换装置,并已将该源代码利用程序转换装置所包含的中间代码 生成部(参照图2)转换为中间代码。利用程序转换装置中所包含的依赖 关系指令抽出部、并行化候补指令抽出部及并行化执行部(参照图2)来 执行该并行化处理过程。
首先,对中间代码所包含的每个指令抽出依赖关系指令(步骤Sl)。 在此,依赖关系指令是指如下的指令对于某个指令,先行于该指令并具 有给与其执行条件的依赖关系的指令,或者后行于该指令并具有依据其执 行结果的依赖关系的指令。
与步骤Sl并行或者在其之后,从中间代码中抽出可并行化的指令的组 合(步骤S2 )。参照可并行化指令表来判定是否为可并行化的指令的组合, 由此进行可否并行化的判定。接着,从可并行化指令的组合中抽出成为并
行化的对象的并行化候补指令的组合的两个指令(步骤S3)。即,从可并 行化的指令中,抽出相互不包*赖关系指令的两个指令的组合。
然后,在该两个指令中判别可移动的指令(步骤S4)。具体而言,首 先通过对能否将该两个指令中的哪一个移动到其他的位置进行判定,来判 别可移动的指令(步骤S41 )。这种情况下,在该两个指令的执行位置之间, 在不存在与要移动的指令对应的依赖关系指令的情况下,判别为,该要移 动的指令可移动到其他的位置。接着,与以往的方法同样执行步骤S5的 并行化。
另一方面,在判别为不能移动的情况下,判定能否移动到两个指令的 各自的共同可移动范围(步骤S42)。即,对每两个指令,基于该指令的依 赖关系指令的执行位置来算出可移动范围。所谓指令的可移动范围,对于 该指令而言,是从先行的依赖关系指令的下一个执行位置,到紧挨着后行 的依赖关系指令的执行位置之前。而且,抽出该两个指令的可移动范围的 重复的位置、即共同可移动范围。即4吏在有多个重复的位置的情况下,也 可以在抽出了一个位置的时刻结束抽出即可。如果,在存在共同可移动范 围的情况下,在该共同可移动范围的例如前头位置执行并行化(步骤S5 )。 另一方面,在不存在共同可移动范围的情况下,对于该两个指令判定为不 能并行化并返回到步骤S3,重新抽出其他的并行化候补指令的两个指令。
步骤5的并行化的执行,是将该两个指令中的任何一方移动到其他位 置,或通过将该两个指令共同移动到共同可移动范围内的同一位置,来实 现并行化(步骤5 )。对于成为处理对象的中间代码的全体进行以上的并行 化执行的过程,且将完成基于并行化的修改的中间代码,在指令代码生成 部中进行转换,来生成指令代码。
图5说明了图3所示的处理过程中移动指令的情况。参照图5中(a ), INSTP2和INSTP5为,通过图4所示的过程步骤SI ~ S3所算出的可并行 化的两个指令的组合。然而,INSTP2,由于与INSTN4之间的依赖关系, 因此不能移动到INSTP5的位置。另外,INSTP5,由于与INSTN3之间的 依赖关系而不能移动到INSTP2的位置,因此应执行共同可移动位置的抽 出处理的过程(步骤42)。
参照图5中(b),表示在上述具体例中标记了用于进行说明的位置识 别名的情况。在此,INSTP2的可移动范围,是从上述例的"位置A"到"位置D"的范围。另夕卜,INSTP5的可移动位置,是从"位置D"到"位 置F"的范围。由此,作为INSTP2和INSTP5的可移动范围的重复部分, 而算出"位置D"。因此,可以通过将两指令移动到共同的可移动位置、即
"位置D",来进行并行化。
在以上的第一实施例中,通过应用本发明的程序转换装置及编^^呈序, 即使,在以往,由于成为并行化的对象的两个指令之间存在有依赖关系的 指令,而被判定为不能移动不进行并行化的情况下,如果对于两个指令有 重复的可移动范围,就可以进行并行化。由此,能够实现更彻底的程序的 执行高速化。
(第二实施例)
图6表示第二实施例中的并行化的处理过程。第二实施例构成为,在 第一实施例中的同样的装置构成(参照图2)中,包含与第一实施例中不 同的处理过程。即,将指令移动以由多个指令构成的组为单位进行移动。 在该方法中,在第一实施例中所示的并行化过程中的、步骤S4的"可移 动指令抽出处理"中,在判别为作为并行化候补指令的两个指令的任何一 个都不能移动的情况下,通过将两个指令中的一方的指令,以与该指令有 依赖关系的指令群的组为单位集中移动,来进行两个指令的并行化。
参照图6, ^示可移动的指令的抽出所涉及的处理过程。作为前提, 设已经进行了第一实施例中的步骤S1~S3的处理过程。即,设抽出了并 行化^陵补指令的至少 一个组合。
因此,与第一实施例的情况相同,判定能否将并行化候补指令的两个 指令的哪一个移动到其他位置(步骤S41)。当判定为不能移动的情况下, 判定能否移动到两个指令的共同可移动范围(步骤S42)。若在步骤S41和 步骤S42的任何一个中判定为可移动,则执行步骤S5中的以组为单位的 并行化。
另一方面,在步骤S42中,在判定为不存在共同可移动范围的情况下, 对于两个指令,判定能否以组为单位移动到其他位置(步骤S43)。若判定 为不能以组为单位移动的情况下,放弃关于该两个指令的并行化并返回到 步骤S3,重新抽出并行化候补指令。另一方面,在判定为可以以组为单位 移动的情况下,对于该两个指令可以进行为了进行以组为单位的并行化的
步骤S5的并行化的执行。以下说明其具体例。
如图7A所示,作为前提,INSTP1和INSTP4为已经通过步骤4以前 的过程所抽出的作为并行化候补指令的两个指令的组合。INSTP1的可移 动范围,为从"位置A"到"位置B"的范围。另外,INSTP4的可移动 位置为,从"位置D"到"位置E,,的范围。由此,不存在INSTP1和INSTP4 的可移动范围的重复部分,因此判定为不能进行基于针对两指令共同的可 移动位置的移动的并行化。
如图7B所示,根据INSTP1和INSTP4的各自的依赖关系设定指令的 组。设定为INSTP1及与其有依赖关系的INSTN2的组1、 INSTP4及与 其有依赖关系的INSTN3的组2、以及INSTP4及与其有依赖关系的 INSTN5的组3。而且,对每个组i殳定用于将INSTP1和INSTP4并行化的 移动位置候补。为了使INSTP1和INSTP4处于相同的指令执行位置,组 1的移动位置候补为"位置E",组2的移动位置候补为"位置A",而且 组3的移动位置候补为"位置B"。
接着,识别各组能否向其移动位置候补移动。关于各组中所包含的各 指令,在从该指令到组的移动位置候补之间,对在除了该指令的组以外的 其他组内,是否存在与该指令对应的依赖关系指令进行扫描,来进行该识 别。
若对组l进行扫描,则由于从INSTP1或者INSTN2的位置到"位置 E"之间不存在依赖关系指令,因此组l被判别为可以移动到"位置E", 若对组2进行扫描,则由于从INSTN3或者INSTP4的位置到"位置A" 之间不存在依赖关系指令,因此组2被判别为可以移动到"位置A"。若对 组3进行扫描,则由于从INSTP4或者INSTN5的位置到"位置B,,之间, 对于INSTP4而言,由于存在作为依赖关系指令的INSTN3,因此组3被 判别为不能移动到"位置B"。由此,判别为通过移动组l和组2可ii行并 行化。在这种情况下,例如设采用先前所判别的"将组1移动到位置E", 进行INSTP1和INSTP4的并行化。
图8表示通过执行图6所示的处理过程而得到的并行化的实际例。观 察列表L1,表示了并行化之前的中间代码的记载例。在此,属于组1的 MOVX指令(指令1)和属于组2的SUB指令(指令4)为并行化候补指 令。观察列表L2,表示了将列表L1的内容并行化后的中间代码。在此,
MOVX指令(指令1)和SUB指令(指令4)被横向并排记入。由此成为 同时执行指令1和指令4。
在以上的第二实施例中,通过使用本发明的程序转换装置及编譯^呈序, 即使如第一实施例中那样,由于不存在共同可移动范围,而不进行并行化 的情况下,如果能将并行化候补指令与依赖关系指令以组为单位进行移 动,则可以进行并行化。由此,实现更彻底的并行化。
在以上的多个实施例中,虽然对由C语言记载源代码的例进行了说明, 然而本发明不限定于此,源代码也可以由C语言以外的多种程序语言来记 栽。另外,将指令代码作为提供给电子计算机的指令代码而进行了说明, 然而本发明中的指令代码,只要是提供给并行化体系结构的处理器的指令 代码即可,不仅是个人电脑和服务器计算机,也可以^l:提供给被嵌入特定 的功能装置而实现指定的处理功能的DSP (Digital Signal Processor)的指 令代码。
权利要求
1.一种程序转换装置,其特征在于,是将程序源代码转换为指令代码的程序转换装置,包含中间代码生成单元,其将上述程序源代码进行转换,并生成包含多个指令的中间代码;并行化候补指令抽出单元,其从上述中间代码,抽出由两个并行化候补指令构成的至少一个组合;依赖关系指令抽出单元,其对上述每个并行化候补指令,从上述中间代码中抽出与该并行化候补指令具有依赖关系的依赖关系指令;可移动范围判别单元,其对上述每个并行化候补指令,基于对于该并行化候补指令所抽出的依赖关系指令的执行位置,判别该并行化候补指令的可移动范围;指令代码生成单元,其通过将上述两个并行化候补指令移动到在上述两个并行化候补指令的共同可移动范围中所包含的一个执行位置上,来修改上述中间代码,并通过对修改后的中间代码进行转换,来生成上述指令代码。
2. 根据权利要求1所述的程序转换装置,其特征在于,上述依赖关系指令抽出单元,用于抽出如下指令作为上述依赖关系指令先行于该并行化候补指令并具有给与其执行条件的依赖关系的指 令,或者后行于该并行化候补指令并具有依据其执行结果的依赖关系的指 令。
3. 根据权利要求1或2所述的程序转换装置,其特征在于, 上述指令代码生成单元,在不存在上述共同可移动范围的情况下,通过以包含上述并行化候补指令及与其相对应的依赖关系指令的指令 群为单位,移动执行位置,来修改上述中间代码。
4. 一种编译程序,其特征在于,是一种用于使计算机作为将程序源 代码转换为指令代码的单元而发挥功能的编^H呈序,使如下单元发挥功 能中间代码生成单元,其将上述程序源代码进行转换,并生成包含多个 指令的中间代码;并行化候补指令抽出单元,其从上述中间代码,抽出由两个并行化候 补指令构成的至少 一个组合;依赖关系指令抽出单元,其对上述每个并行化候补指令,从上述中间代码中抽出与该并行化候补指令具有依赖关系的依赖关系指令;可移动范围判别单元,其对上述每个并行化候补指令,基于对于该并 行化候补指令所抽出的依赖关系指令的执行位置,判别该并行化候补指令 的可移动范围;指令代码生成单元,其通过将上述两个并行化候补指令移动到在上述 两个并行化候补指令的共同可移动范围中所包含的一个执行位置上,来修 改上述中间代码,并通过对修改后的中间代码进行转换,来生成上述指令 代码。
5. 根据权利要求4所述的编译程序,其特征在于,上述依赖关系指令抽出单元,用于抽出如下指令作为上述依赖关系 指令先行于该并行化候补指令并具有给与其执行条件的依赖关系的指 令,或者后行于该并行化候补指令并具有依据其执行结果的依赖关系的指 令。
6. 根据权利要求4或5所述的编译程序,其特征在于, 上述指令代码生成单元,在不存在上述共同可移动范围的情况下,通过以包含上述并行化候补指令及与其相对应的依赖关系指令的指令 群为单位,移动执行位置,来修改上述中间代码。
全文摘要
本发明提供一种更彻底地实现指令执行的高速化的程序转换装置和编译程序。本发明的程序转换装置以及编译程序,对程序源代码进行转换,并生成包含多个指令的中间代码,从该中间代码,抽出由两个并行化候补指令构成的至少一个组合,并且对每个该并行化候补指令,抽出具有依赖关系的依赖关系指令。而且,对每个该并行化候补指令,基于对于该并行化候补指令所抽出的依赖关系指令的执行位置,判别该并行化候补指令的可移动范围,且通过将该两个并行化候补指令移动到在该两个并行化候补指令的共同可移动范围中所包含的一个执行位置上,来修改该中间代码,生成指令代码。
文档编号G06F9/45GK101369235SQ20081012696
公开日2009年2月18日 申请日期2008年6月20日 优先权日2007年8月14日
发明者河野研二郎 申请人:冲电气工业株式会社