程序生成装置、 程序生产方法及程序 【技术领域】
本发明涉及参照包含循环处理的源程序来生成新的程序的技术。背景技术 已知有参照包含循环处理的源程序、 生成用来使由该循环处理实现的规定处理由 多个处理器分担执行的新的程序的编译器等 ( 例如, 专利文献 1)。
这里, 所谓循环处理, 是将由 1 个以上的命令语句构成的块反复处理 N(N ≥ 2) 次。
根据专利文献 1 的技术, 例如可以生成将 N 次的循环处理分割为各 N/2 次处理的 两个部分循环处理, 由两个处理器独立地并行执行而构成的新的程序。 因而, 根据专利文献 1 的技术, 能够将 N 次的循环处理高速地执行。
现有技术文献
专利文献
专利文献 1 : 日本特许第 3028821 号
专利文献 2 : 日本特许第 3234552 号
非专利文献
非 专 利 文 献 1: Hans Zima 等 : “Supercompilers for Parallel and Vector Computers” , Addison Wesley Publishing Company Inc., 1991, ( 日文翻译 ) 村岡洋一 : “ス一パ一コンパイラ” , オ一ム社, 1995
发明概要
发明要解决的技术问题
但是, 在包含在源程序中的循环处理中, 在具有在有关第 j(i < j ≤ N) 次的执行 的块内的命令语句中参照由有关第 i(1 ≤ i < N) 次的执行的块内的命令语句所定义的变 量那样的相关关系的情况下, 通过专利文献 1 的方法不能对应。即, 在专利文献 1 的方法 中, 不能由包含具有这样的相关关系的循环处理的源程序生成用来使用多个处理器高速地 执行循环处理的程序。 发明内容 所以, 本发明是鉴于这样的问题而做出的, 目的是提供一种用于对于通过参照包 含具有上述相关关系的循环处理的源程序, 生成用来使用多个处理器将循环处理高速地执 行的程序的程序生成装置。
用于解决问题的手段
为了解决上述问题, 有关本发明的程序生成装置, 通过参照对象源程序而生成新 的程序, 该对象源程序包含将由 1 个以上的命令语句构成的块重复处理 N 次的循环处理, 该 循环处理的在有关第 i 次执行的上述块内的命令语句中定义的变量处于被有关第 j 次执行 的上述块内的命令语句所参照的相关关系, 其中 N ≥ 2, 1 ≤ i < N, i < j ≤ N, 其特征在于,
该程序生成装置具备 : 计算单元, 以有关第 i 次执行的上述块、 和有关第 i 次以外的执行的 1 个以上的上述块为对象块, 进行计算该对象块中的变量表述的等价关系的计算处理 ; 确 定单元, 基于上述计算单元计算出的变量表述的等价关系, 对于上述变量之中的、 处于上述 相关关系的全部的对象变量的表述, 进行确定与该对象变量的表述等价的不具有上述相关 关系的其他变量的表述的确定处理 ; 以及生成单元, 生成用来进行上述循环处理的 M 次的 处理的、 包含如下命令语句的程序, 该命令语句包含有上述确定单元确定的其他变量的表 述, 其中 M ≤ N。
发明效果
具备上述结构的有关本发明的程序生成装置, 通过参照包含具有上述相关关系的 循环处理的源程序, 能够生成用来使用多个处理器将循环处理高速地执行的程序。 附图说明
图 1 是表示包括有关实施方式的程序生成装置 100 的编译器系统 1000 的结构的 图 2 是表示包含循环处理 R1 的部分程序 P1 及包含循环处理 R4 的部分程序 P4 的 图 3 是用来说明数据的相关关系的图。 图 4 是用来说明循环处理 R1 中的数据的相关关系的图。 图 5 是表示由程序生成装置 100 进行的程序生成处理的流程图, 后接图 6。 图 6 是表示由程序生成装置 100 进行的程序生成处理的流程图, 前接图 5, 后接图块图。
图。
7。 图 7 是表示由程序生成装置 100 进行的程序生成处理的流程图, 前接图 6。
图 8 是表示循环处理 R1 中的迭代 i 及迭代 i+1 的图。
图 9 是表示将名相关删除后的迭代 i 及迭代 i+1 的图。
图 10 是表示计算关于将名相关删除后的迭代 i 及迭代 i+1 的各命令语句的变量 表述的等价关系的结果的图。
图 11 是表示将名相关删除后的迭代 i+2 以及计算关于将名相关删除后的迭代 i+2 的各命令语句的变量表述的等价关系的结果的图。
图 12 是表示将名相关删除后的迭代 i+3 以及计算关于将名相关删除后的迭代 i+3 的各命令语句的变量表述的等价关系的结果的图。
图 13 是表示将全部的真相关删除后的迭代 i+3 及迭代变形候选的图。
图 14 是表示循环处理 R1 中的迭代 0 ~ 2 以及将名相关删除后的迭代 0 ~ 2 的图。
图 15 是表示计算关于将名相关删除后的迭代 0 及 1 的各命令语句的变量表述的 等价关系的结果的图。
图 16 是表示计算关于将名相关删除后的迭代 2 的各命令语句的变量表述的等价 关系的结果的图。
图 17 是表示将真相关删除后的迭代 0 ~ 2 及部分程序 P2 的图。
图 18 是表示部分程序 P3 的图。
图 19 是表示循环处理 R5 ~ R8 的图。
图 20 是用来说明进行变量表述的等价关系的计算的其他方法的例子的图。具体实施方式
以下, 参照附图对本发明的实施方式进行说明。
《实施方式》
< 概要 >
图 2 是表示在处理完成时、 对于数组 (array)b[k](0 ≤ k ≤ 99) 能够得到相同的 处理结果的等价的部分程序 P1 和 P4 的图。
有关实施方式的程序生成装置是将以往的编译器改良的结构, 是通过参照包含图 2(a) 所示的部分程序 P1 的源程序, 生成与以往的编译器通过参照由编程者预先生成的包 含图 2(b) 所示的部分程序 P4 的源程序而生成得到的汇编程序同样的汇编程序的装置。
这里, 部分程序 P1 是包含具有真相关 (true dependence) 的关系的循环处理 R1 的程序。关于真相关的关系, 在后面详细说明, 是指由在循环控制变量 k 是 i(0 ≤ i < 99) 的情况下执行的块 (block)B1 内的命令语句而定义的变量、 由在循环控制变量 k 是 i+1 的 情况下执行的块 B1 内的命令语句来参照那样的关系。
具有真相关的关系的命令语句间的执行顺序如果与本来的执行顺序逆转, 则不能 得到正确的结果, 所以该循环处理 R1 一般一边使循环控制变量 k 每次增加 1 一边依次执 行。
另一方面, 包含在部分程序 P4 中的循环处理 R4 是不具有上述那样的真相关的关 系的处理。因而, 能够使用多个处理器执行。例如, 可以将循环处理 R4 分为循环控制变量 k 从 0 到 49 的部分循环处理、 和循环控制变量 k 从 50 到 99 的部分循环处理、 使两个处理器 独立地并行执行。由此, 与用 1 个处理器依次执行关于循环控制变量 k 从 0 到 99 的循环处 理 R1 的情况相比, 能够更高速地执行循环处理。
如上所述, 有关实施方式的程序生成装置通过参照包含图 2(a) 所示的部分程序 P1 的源程序, 能够生成与以往的编译器通过参照包含图 2(b) 所示的部分程序 P4 的源程序 生成而得到的汇编程序同样的汇编程序。
因而, 在在如部分程序 P1 那样、 已经生成了包含具有真相关的关系的循环处理的 源程序的情况下, 能够不重新生成如部分程序 P4 那样、 包含不具有真相关的关系的循环处 理的源程序而生成适合于并行执行的汇编程序, 在这一点上, 有关实施方式的程序生成装 置是有效的。
另外, 部分程序 P1 虽然如上述那样包含具有真相关的关系的循环处理 R1, 但因为 以下说明的理由, 可以说是与部分程序 P4 相比更适合于单一的处理器中的高速执行的程 序。
这里, 一般已知通过将程序内的变量尽量分配给寄存器、 能够将程序更高速地执 行。这是因为, 与存储器相比, 向寄存器的访问能够极高速地进行。
在一般的编译器中, 对于包含在部分程序 P1 中的 a0、 a1、 a2 那样的简单变量分配 特定的寄存器的可能性较高。因而, 在执行部分程序 P1 的情况下, 与执行部分程序 P4 的情 况相比, 能够减少向存储器的访问次数。即, 在使用单一的处理器的情况下, 部分程序 P1 能 够比部分程序 P4 更高速地执行。< 数据的相关关系 >
使用图 3 对于以上述真相关为代表的数据的相关关系进行说明。
图 3 是用来说明数据的相关关系的图。
如该图所示, 由命令语句 ST100 定义的变量 a 处于被在该命令语句 ST100 后执行 的命令语句 ST200 所参照的关系。 在处于这样的关系的情况下, 是指具有从命令语句 ST100 向命令语句 ST200 的 “真相关” 。
此外, 如该图所示, 被命令语句 ST200 所参照的变量 a, 处于在该命令语句 ST200 后 执行的命令语句 ST300 中被定义的关系。在处于这样的关系的情况下, 是指具有从命令语 句 ST200 向命令语句 ST300 的 “逆相关” (anti-dependence)。
此外, 如该图所示, 由命令语句 ST100 定义的变量 a, 处于在命令语句 ST300 中被再 定义的关系。在处于这样的关系的情况下, 是指有从命令语句 ST100 向命令语句 ST300 的 “输出相关” (output dependence)。
此外, 以下, 将作为真相关、 逆相关及输出相关的发生原因的变量称作 “作为相关 的原因的变量” 。在图 3 中, 变量 a 是 “作为相关的原因的变量” 。
另外, 关于 “逆相关” 和 “输出相关” , 已知在处于相关关系的各命令语句中, 通过将 作为相关的原因的变量的表述替换为相互不同的表述, 能够将该相关删除 ( 例如, 参照非 专利文献 1 的 120 页 )。因此, 有时将 “逆相关” 及 “输出相关” 称作 “名相关” 。 以上述部分程序 P1 中的循环处理 R1 为例, 具体地说明数据的相关关系。
图 4 是用来说明图 2(a) 所示的循环处理 R1 中的数据的相关关系的图。
以下, 将在循环控制变量是 m(m 是循环控制变量能够取的任意的值 ) 的情况下执 行的循环内的块称作 “迭代 m” , 将生成迭代 m 称作 “关于 m 的迭代展开” , 将该 m 称作 “迭代 号码” 。
图 4(a) 表示在图 2(a) 所示的循环处理 R1 中的循环控制变量 k 是 0 的情况下执 行的块 B1、 即迭代 0, 图 4(b) 表示迭代 1。
这里, 由图 4(a) 所示的迭代 0 的命令语句 ST12、 ST13、 ST14 分别定义的变量 a0、 a1、 a2 处于由图 4(b) 所示的迭代 1 的命令语句 ST21 参照的关系。
此外, 由图 4(a) 所示的迭代 0 的命令语句 ST13、 ST14 分别定义的变量 a1、 a2 处于 由图 4(b) 所示的迭代 1 的命令语句 ST22、 ST23 参照的关系。
即, 存在以变量 a0 为相关的原因的、 从命令语句 ST12 向 ST21 的真相关。此外, 存 在以变量 a1 为相关的原因的、 从命令语句 ST13 向 ST21 的真相关以及从命令语句 ST13 向 ST22 的真相关。此外, 存在以变量 a2 为相关的原因的、 从命令语句 ST14 向 ST21 的真相关 以及从命令语句 ST14 向 ST23 的真相关。
此外, 由图 4(a) 所示的迭代 0 的命令语句 ST12 定义的变量 a0 处于由图 4(b) 所 示的迭代 1 的命令语句 ST22 再定义的关系。
即, 存在以变量 a0 为相关的原因的、 从命令语句 ST12 向 ST22 的输出相关。同样, 存在以变量 a1 为相关的原因的、 从命令语句 ST13 向 ST23 的输出相关, 存在以变量 a2 为相 关的原因的、 从命令语句 ST14 向 ST24 的输出相关。
此外, 由图 4(b) 所示的迭代 1 的命令语句 ST21 参照的变量 a0、 a1、 a2 处于由命令 语句 ST22 ~ ST24 分别定义的关系。即, 存在以变量 a0 为相关的原因的、 从命令语句 ST21
向 ST22 的逆相关, 存在以变量 a1 为相关的原因的、 从命令语句 ST21 向 ST23 的逆相关, 存 在以变量 a2 为相关的原因的、 从命令语句 ST21 向 ST24 的逆相关。
此外, 在迭代 0 中也同样, 存在以变量 a0、 变量 a1、 变量 a2 为相关的原因的逆相 关。
另外, 以下, 将循环处理中的、 存在从某个迭代内的命令语句向其他迭代内的命令 语句的相关的情况也称作 “在迭代间有相关关系” 。
< 结构 >
图 1 是表示包括有关实施方式的程序生成装置 100 的编译器系统 1000 的结构的 块图。
编译器系统 1000 是通过参照包含如上述部分程序 P1 那样、 在迭代间有真相关的 关系的循环处理的源程序 11, 从而生成能够实现由多个处理器进行的循环处理的并行执行 的目标程序 14 的系统。
编译器系统 1000 由包括处理器 ( 未图示 )、 存储器 ( 未图示 )、 和硬盘等的存储装 置 10 的计算机 ( 例如, PC(Personal Computer : 个人电脑 )) 实现。
编译器系统 1000 如该图所示, 包括存储装置 10、 程序生成装置 100、 汇编器 210、 和 链接器 (linker)220 而构成。另外, 程序生成装置 100、 汇编器 210 及链接器 220 的各功能 通过上述处理器将存储在存储装置 10 中的未图示的程序读入到上述存储器中、 执行所读 入的程序来实现。 这里, 程序生成装置 100 是将以往的编译器改良的结构, 具有参照存储在存储装 置 10 中的、 用 C 语言或 C++ 语言等的高级语言记述的源程序 11 而生成汇编程序 12 的功能。 程序生成装置 100 将所生成的汇编程序 12 向存储装置 10 保存。
即, 程序生成装置 100 通过参照包含在迭代间有真相关的关系的循环处理的源程 序 11, 生成用来执行消除了该真相关的关系的循环处理的汇编程序 12。
此外, 汇编器 210 具有参照由程序生成装置 100 向存储装置 10 保存的汇编程序 12、 生成由机器语言记述的浮动的二进制程序 (relocatable binary program)13 的功能。 汇编器 210 将所生成的浮动二进制程序 13 向存储装置 10 保存。
此外, 链接器 220 具有通过决定在由汇编器 210 向存储装置 10 保存的浮动二进制 程序 13 中未解决的数据的地址配置等, 通过与需要的库等连结, 从而生成计算机能够执行 的目标程序 14 的功能。链接器 220 将所生成的目标程序 14 向存储装置 10 保存。
以下, 使用图 1 对程序生成装置 100 的结构更详细地说明。
如该图所示, 程序生成装置 100 具备存储部 110、 取得部 120、 计算部 130、 确定部 140、 和生成部 150。
这里, 存储部 110 是用来将源程序 11、 以及计算部 130、 确定部 140 及生成部 150 的处理结果保存的存储器区域。
即, 以下虽然没有特别明述, 但假设计算部 130、 确定部 140 及生成部 150 间的处理 结果的交换是经由存储部 110 进行的。
此外, 取得部 120 具有从存储装置 10 读出源程序 11、 保存到存储部 110 中的功能。
计算部 130 具有计算关于在由取得部 120 保存到存储部 110 中的源程序 11 中包 含的循环处理中的、 某个迭代及其他 1 个以上的迭代的变量表述的等价关系的功能。计算
部 130 包括迭代展开部 131、 名相关删除部 132、 和等价关系计算部 133。
这里, 迭代展开部 131 具有基于包含在源程序 11 中的循环处理进行迭代展开 (expanding iteration) 的功能。
名相关删除部 132 具有将在迭代展开部 131 进行了迭代展开的、 迭代号码连续的 两个迭代间存在的名相关 ( 即, 输出相关及逆相关 ) 删除的功能。
这里, 使用与将处于相关关系的两个命令语句中的作为相关的原因的变量的表述 替换为相互不同的表述的以往以来进行的方法同样的方法, 进行名相关的删除。
等价关系计算部 133 具有计算关于由名相关删除部 132 将名相关删除后的上述两 个迭代的各命令语句的变量表述的等价关系的功能。这里, 假设使用与在专利文献 2 中说 明的方法同样的方法进行变量表述的等价关系的计算。
此外, 确定部 140 具有基于等价关系计算部 133 计算出的变量表述的等价关系、 判 断是否能够通过将作为存在于上述两个迭代间的真相关的原因的全部的变量替换为等价 的没有相关关系的其他变量及式子, 从而将全部的真相关删除的功能。
此外, 确定部 140 具有进行基于该判断结果控制计算部 130 对变量表述的等价关 系的计算的执行的功能及以下说明的判断的功能。即, 该判断是判断是否能够将包含在源 程序 11 中的循环处理内的块用由以下说明的生成部 150 生成的迭代变形候选来替换。 生成部 150 具有当确定部 140 判断为能够将存在于上述两个迭代间的全部的真相 关删除时、 基于将全部的真相关删除后的迭代来生成迭代变形候选的功能。
详细在后面叙述 ( 参照图 13(a) 及图 13(b)), 但迭代变形候选是将删除了上述全 部的真相关的迭代一般化 (generalizing)、 以便在该迭代号码以后的迭代中也能够使用 的。
此外, 生成部 150 具有当确定部 140 判断为能够将包含在源程序 11 中的循环处理 内的块用迭代变形候选替换时、 生成汇编程序 12 的功能。该汇编程序 12 基于将包含在源 程序 11 中的循环处理内的块用迭代变形候选替换后的源程序。
< 动作 >
以下, 说明程序生成装置 100 的动作。
图 5 ~图 7 是表示由程序生成装置 100 进行的程序生成处理的流程图。
程序生成装置 100 的取得部 120 从存储装置 10 读出源程序 11, 保存到存储部 110 中。计算部 130 的迭代展开部 131 进行关于表示包含在源程序 11 中的循环处理中的循环 控制变量的任意的值的 i、 和 i+1 的迭代展开 ( 图 5 的步骤 S1)。
计算部 130 的名相关删除部 132 确定迭代 i 及迭代 i+1 的各命令语句间的相关关 系 ( 步骤 S2)。此外, 名相关删除部 132 通过将作为名相关 ( 即, 输出相关和逆相关 ) 的原 因的变量的表述变更, 将名相关删除 ( 步骤 S3)。
计算部 130 的等价关系计算部 133 计算关于删除了名相关的迭代 i 及迭代 i+1 的 各命令语句的变量表述的等价关系 ( 步骤 S4)。
该变量表述的等价关系的计算方法如上所述, 是与在专利文献 2 中说明的方法同 样的方法, 所以以下简单地说明, 但作为结果能够得到图 10 所示那样的等价式集合。
这里, 将图 10(a) 及图 10(b) 所示的用 “{” 和 “}” 括起的部分称作 “等价式集合” 、 将在等价式集合中记载的用 “(” 和 “)” 括起的部分称作 “等价式” 。此外, 在等价式中记载
的用 “, ” 分隔的各要素表示是等价的。
首先, 等价关系计算部 133 将迭代 i 及迭代 i+1 的各命令语句 1 个 1 个依次作为 处理对象而进行以下的处理。
即, 等价关系计算部 133 判断包含记述在作为处理对象的命令语句的右边或左边 的变量及式子的等价式是否已经包含在等价式集合中。
在判断为对应的等价式不包含在等价式集合中的情况下, 将关于作为处理对象的 命令语句的新的等价式追加到等价式集合中。
此外, 在判断为包含记述在作为处理对象的命令语句的右边的变量及式子的等价 式已经包含在等价式集合中的情况下, 作为该等价式的要素, 追加记述在这个作为处理对 象的命令语句的左边的变量及式子。
此外, 在判断为包含记述在作为处理对象的命令语句的左边的变量及式子的等价 式已经包含在等价式集合中的情况下, 代替该等价式而将关于作为处理对象的命令语句的 新的等价式追加到等价式集合中。
说明程序生成处理的后续 ( 参照图 5)。
如果步骤 S4 的处理完成, 则确定部 140 基于等价关系计算部 133 计算出的变量表 述的等价关系, 判断是否能够将全部的真相关删除 ( 步骤 S5)。
更详细地讲, 在能够将作为真相关的原因的全部的变量的表述基于在步骤 S4 中 计算出的变量表述的等价关系、 替换为在步骤 S2 中确定的作为相关的原因的变量及在步 骤 S3 中为了将名相关删除而导入的变量以外的等价的变量及式子的表述的情况下, 判断 为能够将全部的真相关删除 ( 步骤 S5 : 是 )。
这里, 不替换为在步骤 S2 中确定的作为相关的原因的变量及在步骤 S3 中为了将 名相关删除而导入的变量的表述是因为, 这样的变量有可能在其他迭代中成为新的相关的 原因。即, 这是因为, 如果替换为这样的变量的表述, 结果也有可能没有将迭代间的相关删 除。
在判断为能够将全部的真相关删除的情况下 ( 步骤 S5 : 是 ), 作为能够将全部的真 相关删除的迭代 i+m 的 m 的值而设定 “1” ( 步骤 S6), 前进到图 6 的步骤 S15 的处理。
此外, 在判断为不能将全部的真相关删除的情况下 ( 步骤 S5 : 否 ), 确定部 140 将 上述 m 的值设定为 “2” ( 图 6 的步骤 S7)。
此外, 确定部 140 判断 m 的值是否比从包含在源程序 11 中的循环控制变量能够 取的最大值 ( 以下, 表述为 “kmax” ) 减去该循环控制变量能够取的最小值 ( 以下, 表述为 “kmin” ) 后的值小 ( 步骤 S8)。
在 m 的值是从 kmax 减去 kmin 的值以上的情况下 ( 步骤 S8 : 否 ), 为不能将真相关 删除, 程序生成装置 100 结束程序生成处理 ( 参照图 7)。
另一方面, 在 m 的值比从 kmax 减去 kmin 的值小的情况下 ( 步骤 S8 : 是 ), 确定部 140 通过通知 m 的值, 对计算部 130 指示处理。指示了处理的计算部 130 的迭代展开部 131 与步骤 S1 的处理同样, 进行关于 i+m 的迭代展开 ( 步骤 S9)。
此外, 名相关删除部 132 与步骤 S2 的处理同样, 确定迭代 i+m-1 及迭代 i+m 的各 命令语句间的相关关系 ( 步骤 S10), 与步骤 S3 的处理同样, 将名相关删除 ( 步骤 S11)。
此外, 等价关系计算部 133 与步骤 S4 的处理同样, 计算关于删除了名相关的迭代i+m-1 及迭代 i+m 的各命令语句的变量表述的等价关系 ( 步骤 S12)。
接着, 确定部 140 与步骤 S5 的处理同样, 基于在步骤 S12 中由等价关系计算部 133 计算出的变量表述的等价关系, 判断是否能够将全部的真相关删除 ( 步骤 S13)。
这里, 确定部 140 因与在步骤 S5 中说明的同样的理由, 将在步骤 S2 及 S10 中确定 的作为相关的原因的变量及在步骤 S3 和 S11 中为了将名相关删除而导入的变量的表述用 于置换。
在判断为不能将全部的真相关的情况下 ( 步骤 S13 : 否 ), 确定部 140 使 m 的值增 加 1 个 ( 步骤 S14), 再次从步骤 S8 起进行处理。
另一方面, 在确定部 140 判断为能将全部的真相关删除的情况下 ( 步骤 S13 : 是 ), 生成部 150 基于将全部的真相关删除后的迭代 i+m 生成迭代变形候选 ( 步骤 S15)。
这里, i 表示包含在源程序 11 中的循环处理中的循环控制变量的任意的值。 因而, 在迭代 i+m 中能够将全部的真相关删除意味着在迭代 kmin+m 以后的迭代中能够将全部的 真相关删除。
所以, 生成部 150 生成进行一般化以使得在迭代号码为 kmin+m 到 kmax 的迭代中 也能够使用的迭代变形候选。 接着, 确定部 140 通过通知 kmin 及 m-1 的值, 对计算部 130 指示处理。被指示了 处理的计算部 130 的迭代展开部 131 与步骤 S1 的处理同样, 进行对从 kmin 到 m-1 各自的 迭代展开 ( 图 7 的步骤 S16)。
此外, 名相关删除部 132 对于从迭代 kmin 到迭代 m-1 的每个迭代, 分别与步骤 S2 的处理同样, 确定各命令语句间的相关关系 ( 步骤 S17), 与步骤 S3 的处理同样, 将名相关删 除 ( 步骤 S18)。
此外, 等价关系计算部 133 与步骤 S4 的处理同样, 计算关于将名相关删除后的迭 代 kmin 到迭代 m-1 的各自的各命令语句的变量表述的等价关系 ( 步骤 S19)。
接着, 确定部 140 与步骤 S5 的处理同样, 基于在步骤 S19 中等价关系计算部 133 计算出的变量表述的等价关系, 判断是否能够将全部的真相关删除 ( 步骤 S20)。
在确定部 140 判断为不能将全部的真相关删除的情况下 ( 步骤 S20 : 否 ), 认为循 环控制变量在从 kmin 到 m-1 的范围中不能将真相关删除, 程序生成装置 100 结束程序生成 处理。
此外, 在确定部 140 判断为能够将全部的真相关删除的情况下 ( 步骤 S20 : 是 ), 判 断将全部的真相关删除后的迭代 kmin 到迭代 m-1 是否是与在步骤 S15 中生成的迭代变形 候选中的迭代 kmin 到迭代 m-1 相同形式 ( 步骤 S21)。
在确定部 140 判断为不是相同形式的情况下 ( 步骤 S21 : 否 ), 程序生成装置 100 结束程序生成处理。这是因为, 在此情况下, 不能将能够应用在循环控制变量为从 kmin 到 m-1 的范围中的删除了真相关的循环处理、 与能够应用到循环控制变量为从 m 到 kmax 的范 围中的删除了真相关的循环处理集中为 1 个循环处理。
另一方面, 在确定部 140 判断为与迭代变形候选中的迭代 kmin 到迭代 m-1 相同形 式的情况下 ( 步骤 S21 : 是 ), 生成部 150 如以下这样生成汇编程序 12( 步骤 S22)。即, 生 成部 150 在对将源程序 11 的循环处理内的块替换为迭代变形候选的程序进行优化和并行 化 (parallelizing) 后, 生成汇编程序 12。
另外, 优化和并行化可以通过以往以来进行的方法实现, 所以这里省略详细的说 明, 关于进行了优化和并行化后的程序的具体例在后面叙述 ( 参照图 18)。
生成部 150 将所生成的汇编程序 12 保存到存储装置 10 中, 程序生成装置 100 结 束程序生成处理。
< 具体例 >
以下, 以设源程序 11 包含图 2(a) 所示的部分程序 P1 的情况为例, 按照图 5 ~图 7 所示的流程图说明程序生成装置 100 的动作。
程序生成装置 100 的取得部 120 从存储装置 10 读出源程序 11, 保存到存储部 110 中。计算部 130 的迭代展开部 131 进行关于表示包含在源程序 11 中的循环处理 ( 在该例 中是 R1) 中的循环控制变量 ( 在该例中是 k) 的任意的值的 i 和 i+1 的迭代展开 ( 图 5 的 步骤 S1)。
图 8(a) 是表示图 2(a) 所示的循环处理 R1 中的迭代 i 的图, 图 8(b) 是表示迭代 i+1 的图。
计算部 130 的名相关删除部 132 确定迭代 i 及迭代 i+1 的各命令语句间的相关关 系 ( 步骤 S2)。此外, 名相关删除部 132 通过变更作为名相关 ( 即, 输出相关和逆相关 ) 的 原因的变量的表述, 将名相关删除 ( 步骤 S3)。 在图 8(a) 及图 8(b) 所示的例子中, 以变量 a0 为相关的原因, 存在从命令语句 ST42 向命令语句 ST51 的真相关、 从命令语句 ST42 向命令语句 ST52 的输出相关、 从命令语 句 ST41 向命令语句 ST42 的逆相关、 和从命令语句 ST51 向 ST52 的逆相关。
此外, 以变量 a1 为相关的原因, 存在从命令语句 ST43 向命令语句 ST51 的真相关、 从命令语句 ST43 向命令语句 ST53 的输出相关、 从命令语句 ST41 向命令语句 ST43 的逆相 关、 和从命令语句 ST51 向 ST53 的逆相关。
此外, 以变量 a2 为相关的原因, 存在从命令语句 ST44 向命令语句 ST51 的真相关、 从命令语句 ST44 向命令语句 ST54 的输出相关、 从命令语句 ST41 向命令语句 ST44 的逆相 关、 和从命令语句 ST51 向 ST54 的逆相关。
通过将命令语句 ST42 中的变量 a0 的表述变更为 “a0_i” 、 将命令语句 ST52 中的变 量 a0 的表述变更为 “a0_i1” , 能够将以变量 a0 为相关的原因的名相关删除。
此外, 与变量 a0 的情况同样, 通过将命令语句 ST43 中的变量 a1 的表述变更为 “a1_i” 、 将命令语句 ST53 中的变量 a1 的表述变更为 “a1_i1” , 能够将以变量 a1 为相关的原 因的名相关删除。此外, 通过将命令语句 ST44 中的变量 a2 的表述变更为 “a2_i” 、 将命令 语句 ST54 中的变量 a2 的表述变更为 “a2_i1” , 能够将以变量 a2 为相关的原因的名相关删 除。
图 9(a) 是表示从图 8(a) 所示的迭代 i 中删除了名相关的迭代 i 的图, 图 9(b) 是 表示从图 8(b) 所示的迭代 i+1 删除了名相关的迭代 i+1 的图。
另外, 在步骤 S3 的处理中, 由于仅将名相关删除, 所以真相关继续存在。即, 在图 9(a) 及图 9(b) 所示的例子中, 存在从命令语句 ST46、 ST47、 ST48 向命令语句 ST55 的以变 量 a0_i、 a1_i、 a2_i 为相关的原因的真相关、 和从命令语句 ST47、 ST48 向命令语句 ST56、 ST57 的以变量 a1_i、 a2_i 为相关的原因的真相关。
计算部 130 的等价关系计算部 133 计算关于将名相关删除后的迭代 i 及迭代 i+1
的各命令语句的变量表述的等价关系 ( 步骤 S4)。
如果对图 9(a) 及图 9(b) 所示的将名相关删除后的迭代 i 及迭代 i+1 的各命令语 句 (ST45 ~ ST48、 ST55 ~ ST58) 计算变量表述的等价关系, 则为以下这样。
另外, 假设在以下的说明开始时点, 在等价式集合中哪个等价式都不包括。
首先, 在以图 9(a) 所示的命令语句 ST45 为处理对象的情况下, 由于包括记述在 命令语句 ST45 的右边及左边中的变量及式子的等价式不包含在等价式集合中, 所以如图 10(a) 所示的等价式集合 E45 那样, 将关于命令语句 ST45 的等价式追加到等价式集合中。
即, 等 价 式 集 合 E45 表 示 在 刚 刚 执 行 命 令 语 句 ST45 之 后、 变量 “b[i]”和 式 “a0+a1+a2” 处于等价的关系。
在以图 9(a) 所示的命令语句 ST46 ~ ST48 及图 9(b) 的命令语句 ST55 为处理对象 的情况下, 也与命令语句 ST45 的情况同样地处理 ( 参照图 10(a) 的等价式集合 E46 ~ E48 及图 10(b) 的等价式集合 E55)。
此外, 在以图 9(b) 所示的命令语句 ST56 为处理对象的情况下, 包含记述在命令语 句 ST56 的右边的变量 ( 在该例中是 “a1_i” ) 的等价式 ( 在该例中是 (a1_i, a2)) 已经包 含在等价式集合 E55 中。因而, 在该等价式中, 追加了记述在命令语句 ST56 的左边的变量 ( 在该例中是 “a0_i1” )( 参照图 10(b) 的等价式集合 E56)。 在以图 9(b) 所示的命令语句 ST57 为处理对象的情况下, 也与命令语句 ST56 的情 况同样地处理 ( 参照图 10(b) 的等价式集合 E57)。
此外, 在以图 9(b) 所示的命令语句 ST58 为处理对象的情况下, 与命令语句 ST45 的情况同样, 将关于命令语句 ST58 的等价式追加到等价式集合 E57 中 ( 参照图 10(b) 的等 价式集合 E58)。
接着, 确定部 140 基于在步骤 S4 中等价关系计算部 133 计算出的变量表述的等价 关系, 判断是否能够将全部的真相关删除 ( 步骤 S5)。
如上所述, 在图 9(a) 及图 9(b) 所示的例子中, 存在以变量 a0_i、 a1_i、 a2_i 为相 关的原因的真相关。
根据图 10(a) 所示的等价式集合 E48, 作为真相关的原因的变量 “a2_i” 与变量 “a[i+3]” 是等价的。此外, 该变量 “a[i+3]” 不是在步骤 S2 中确定的作为相关的原因的变 量以及在步骤 S3 中为了将名相关删除而导入的变量。因而, 能够将变量 “a2_i” 的表述替 换为变量 “a[i+3]” 的表述。
此外, 根据等价式集合 E48, 作为真相关的原因的变量 “a0_i” 与变量 “a1” 是等价 的, 作为真相关的原因的变量 “a1_i” 与变量 “a2” 是等价的。但是, 变量 “a1” 及变量 “a2” 由于是在步骤 S2 中确定的作为相关的原因的变量, 所以不能进行作为真相关的原因的变 量 “a0_i” 及变量 “a1_i” 的各表述的替换。
因而, 确定部 140 判断为不能将全部的真相关删除 ( 步骤 S5 : 否 )。
确定部 140 将 m 的值设定为 “2” ( 图 6 的步骤 S7), 在该例中, 由于 m 的值比从 kmax( 在该例中是 “99” ) 减去 kmin( 在该例中是 “0” ) 后的值小 ( 步骤 S8 : 是 ), 所以通知 m 的值 ( 在该例中是 “2” ), 对计算部 130 指示处理。
迭代展开部 131 与步骤 S1 的处理同样, 进行关于 i+m( 在该例中是 “i+2” ) 的迭代 展开 ( 步骤 S9)。
此外, 计算部 130 的名相关删除部 132 关于迭代 i+m-1( 在该例中是 “i+1” ) 和迭 代 i+m, 与步骤 S3 的处理同样, 将名相关删除 ( 步骤 S11)。
此外, 计算部 130 的等价关系计算部 133 与步骤 S4 的处理同样, 计算关于将名相 关删除后的迭代 i+m-1 及迭代 i+m 的各命令语句的变量表述的等价关系 ( 步骤 S12)。
图 11(a) 是表示将名相关删除后的迭代 i+2 的图, 图 11(b) 是表示计算关于将名 相关删除后的迭代 i+2 的各命令语句的变量表述的等价关系的结果的图。
这里, 图 11(b) 所示的等价式集合 E65 为基于图 11(a) 所示的命令语句 ST65、 将等 价式 “(b[i+2], a0_i1+a1_i1+a2_i1)” 追加到图 10(b) 所示的等价式集合 E58 中的结果。
确定部 140 与步骤 S5 的处理同样, 基于在步骤 S12 中等价关系计算部 133 计算出 的变量表述的等价关系, 判断是否能够将全部的真相关删除 ( 步骤 S13)。
在图 9(b) 及图 11(a) 所示的例子中, 存在以变量 a0_i1、 a1_i1、 a2_i1 为相关的原 因的真相关。
根据图 10(b) 所示的等价式集合 E58, 作为真相关的原因的变量 “a2_i1” 与变量 “a[i+4]” 是等价的, 作为真相关的原因的变量 “a1_i1” 与变量 “a[i+3]” 是等价的。此外, 变量 “a[i+4]” 及变量 “a[i+3]” 不是在步骤 S2 及 S10 中确定的作为相关的原因的变量以 及在步骤 S3 及 S7 中为了将名相关删除而导入的变量。
因而, 能够将变量 “a2_i1” 的表述替换为变量 “a[i+4]” 的表述、 将变量 “a1_i1” 的表述替换为变量 “a[i+3]” 的表述。
此外, 根据等价式集合 E58, 作为真相关的原因的变量 “a0_i1” 与变量 “a1_i” 及变 量 “a2” 是等价的。但是, 变量 “a1_i” 是在步骤 S3 中为了将名相关删除而使用的变量, 变 量 “a2” 是在步骤 S2 中确定的作为相关的原因的变量。因而, 不能进行作为真相关的原因 的变量 “a0_i1” 的表述的替换。由此, 确定部 140 判断为不能将全部的真相关删除 ( 步骤 S13 : 否 )。
在该例中, 确定部 140 使 m 的值增加 1 而设为 “3” ( 步骤 S14), 由于 m 的值比从 kmax( 在该例中是 “99” ) 减去 kmin( 在该例中是 “0” ) 后的值小 ( 步骤 S8 : 是 ), 所以通知 m 的值而对计算部 130 指示处理。被指示了处理的计算部 130 与上述同样, 进行步骤 S9 ~ 步骤 S12 的处理。
图 12(a) 是表示将名相关删除后的迭代 i+3 的图, 图 12(b) 是表示计算关于将名 相关删除后的迭代 i+3 的各命令语句的变量表述的等价关系的结果的图。
在图 11(a) 及图 12(a) 所示的例子中, 存在以变量 a0_i2、 a1_i2、 a2_i2 为相关的 原因的真相关。
根据图 11(b) 所示的等价式集合 E68, 作为真相关的原因的变量 “a2_i2” 与变量 “a[i+5]” 是等价的, 作为真相关的原因的变量 “a1_i2” 与变量 “a[i+4]” 是等价的, 作为真 相关的原因的变量 “a0_i2” 与变量 “a[i+3]” 是等价的。 此外, 变量 “a[i+5]” 、 变量 “a[i+4]” 及变量 “a[i+3]” 不是在步骤 S2 及 S10 中确定的作为相关的原因的变量以及在步骤 S3 及 S7 中为了将名相关删除而导入的变量。
因而, 能够将变量 “a2_i2” 的表述替换为变量 “a[i+5]” 的表述、 将变量 “a1_i2” 的表述替换为变量 “a[i+4]” 的表述、 将变量 “a0_i2” 的表述替换为变量 “a[i+3]” 的表述。
由此, 确定部 140 判断为能将全部的真相关删除 ( 步骤 S13 : 是 ), 生成部 150 基于不能删除全部的真相关的迭代 i+m( 在该例中是 “i+3” ) 生成迭代变形候选 ( 步骤 S15)。
图 13(a) 是表示将全部的真相关删除后的迭代 i+3 的图。
在图 13(a) 所示的例子中, 生成部 150 将 “i+3” 设置为 k, 生成将变量 “a0_i3” 的 表述替换为变量 “a0_k” 的表述、 将变量 “a1_i3” 的表述替换为变量 “a1_k” 的表述、 将变量 “a2_i3” 的表述替换为变量 “a2_k” 的表述的迭代变形候选。
图 13(b) 是表示生成部 150 生成的迭代变形候选的图。
该迭代变形候选能够应用到 k 为 kmin+m( 在该例中是 “3” ) 到 kmax( 在该例中是 “99” ) 的迭代中。即, 至少在 3 ≤ k < kmax 的范围中, 能够将图 2(a) 所示的循环处理 R1 的块 B1 替换为在迭代间没有相关的等价的块。
接着, 确定部 140 通知 kmin( 在该例中是 “0” ) 及 m-1( 在该例中是 “2” ) 的值, 对 计算部 130 指示处理。被指示了处理的计算部 130 的迭代展开部 131 与步骤 S1 的处理同 样, 进行关于从 kmin 到 m-1 的各自的迭代展开 ( 图 7 的步骤 S16)。
此外, 名相关删除部 132 关于从迭代 kmin 到迭代 m-1, 与步骤 S2 同样, 确定各命令 语句间的相关关系 ( 图 7 的步骤 S17), 与步骤 S3 的处理同样, 将名相关删除 ( 步骤 S18)。
图 14(a) 所示的迭代 I1 ~ I3 表示图 2(a) 所示的循环处理 R1 中的迭代 0 ~ 2。
此外, 图 14(b) 所示的迭代 I10 ~ I30 表示从图 14(a) 所示的迭代 0 ~ 2 中将名 相关删除后的迭代 0 ~ 2 的。此外, 图 14(b) 所示的命令语句 ST1 ~ ST3 是处于图 2(a) 所 示的循环处理 R1 的之前的紧挨着的 (immediately before) 命令语句 ST1 ~ ST3。
等价关系计算部 133 与步骤 S4 的处理同样, 计算关于将名相关删除后的迭代 kmin 到迭代 m-1 的各自的各命令语句的变量表述的等价关系 ( 步骤 S19)。
图 15 是表示计算关于图 14(b) 所示的命令语句 ST1 ~ ST3 及将名相关删除后的 迭代 0 ~ 1 的各命令语句的变量表述的等价关系的结果的图。
此外, 图 16 是表示计算关于图 14(b) 所示的将名相关删除后的迭代 2 的各命令语 句的变量表述的等价关系的结果的图。
接着, 确定部 140 与步骤 S5 的处理同样, 基于在步骤 S19 中等价关系计算部 133 计算出的变量表述的等价关系, 判断是否能够将全部的真相关删除 ( 步骤 S20)。
根据图 15 所示的等价式集合 E3, 作为真相关的原因的变量 “a0” 与变量 “a[0]” 是 等价的, 作为真相关的原因的变量 “a1” 与变量 “a[1]” 是等价的, 作为真相关的原因的变量 “a2” 与变量 “a[2]” 是等价的。此外, 变量 “a[0]” 、 变量 “a“1” ” 及变量 “a[2]” 不是在步骤 S17 中确定的作为相关的原因的变量以及在步骤 S18 中为了将名相关删除而导入的变量。
因 而, 能 够 将 图 14(b) 所 示 的 命 令 语 句 ST15 的 变 量 “a0”的 表 述 替 换 为 变 量 “a[0]” 的表述、 将变量 “a1” 的表述替换为变量 “a[1]” 的表述、 将变量 “a2” 的表述替换为 变量 “a[2]” 的表述。
同样, 能够基于图 15 所示的等价式集合 E15、 将图 14(b) 所示的命令语句 ST16 的 变量 “a1” 的表述替换为变量 “a[1]” 的表述。此外, 能够基于图 15 所示的等价式集合 E16、 将图 14(b) 所示的命令语句 ST17 的变量 “a2” 的表述替换为变量 “a[2]” 的表述。
同样, 能够基于图 15 所示的等价式集合 E18 ~ E26、 将图 14(b) 所示的命令语句 ST25 ~ ST27 的变量 “a0_0” 、 变量 “a1_0” 及变量 “a2_0” 的表述替换。此外, 能够基于图 15 所示的等价式集合 E28 及图 16 所示的等价式集合 E35、 E36、 将命令语句 ST35 ~ ST37 的变量 “a0_1” 、 变量 “a1_1” 及变量 “a2_1” 的表述替换。
因而, 确定部 140 判断为能够将全部的真相关删除 ( 步骤 S20 : 是 ), 判断将全部的 真相关删除后的迭代 kmin( 在该例中是 “0” ) 到迭代 m-1( 在该例中是 “2” ) 是否是与在步 骤 S15 中生成的迭代变形候选中的迭代 kmin 到迭代 m-1 相同形式 ( 步骤 S21)。
图 17(a) 所示的迭代 I11、 I21、 I31 表示从图 14(b) 所示的将名相关删除后的迭代 0 ~ 2(I10、 I20、 I30) 中将真相关删除后的迭代。
图 13(b) 所示的关于迭代变形候选的迭代 0、 迭代 1、 迭代 3 与图 17(a) 所示的迭 代 I11、 I21、 I31 一致。因而, 在该例中, 确定部 140 判断为相同形式 ( 步骤 S21 : 是 ), 生成 部 150 将源程序 11 的循环处理 R1 的块 B1 替换为迭代变形候选而生成基于优化和并行化 的程序的汇编程序 12( 步骤 S22)。
图 17(b) 表示将图 2(a) 所示的部分程序 P1 的块 B1 替换为图 13(b) 所示的迭代 变形候选的部分程序 P2。
在该部分程序 P2 中, 由命令语句 ST1 ~ ST3 定义的变量 “a0” 、 变量 “a1” 及变量 “a2” 、 由命令语句 ST92 ~ ST94 定义的变量 “a0_k” 、 变量 “a1_k” 及变量 “a2_k” 没有由部分 程序 P2 内的命令语句参照。因而, 在源程序 11 中的部分程序 P2 以外的部分中, 也能够以 不参照这些变量为条件、 生成将命令语句 ST1 ~ ST3、 说明 (declare) 变量 “a0” 、 变量 “a1” 及变量 “a2” 的命令语句 ST4、 和命令语句 ST92 ~ ST94 删除的优化的部分程序 P3( 参照图 18)。 此外, 生成部 150 生成将部分程序 P3 并行化后的部分程序 P4( 参照图 2(b))。此 外, 生成部 150 将基于包含该部分程序 P4 的源程序而生成的汇编程序 12 保存到存储装置 10 中, 程序生成装置 100 结束程序生成处理。
另外, 图 2(b) 所示的部分程序 P4 中的用于指示并行化的记述是遵循 OpenMP 的记 述形式的。
《补充》
以上, 基于实施方式说明了有关本发明的程序生成装置, 但也可以如以下这样变 形, 本发明当然并不限定于在上述实施方式中表示那样的程序生成装置。
(1) 有关实施方式的程序生成装置 100 以根据包含了在迭代号码连续的两个迭代 间具有真相关的关系的循环处理的源程序 11 来生成汇编程序 12 的情况为例进行了说明。 但是, 也可以根据包含了在迭代号码不连续的两个迭代间具有真相关的关系的循环处理 ( 例如, 图 19(a) 所示的循环处理 R5、 及图 19(c) 所示的循环处理 R7) 的源程序 11 来生成 汇编程序 12。 另外, 图 19(b) 表示与循环处理 R5 等价的不具有上述真相关的关系的循环处 理 R6。此外, 图 19(d) 表示与循环处理 R7 等价的不具有上述真相关的关系的循环处理 R8。
为此, 在由图 5 的步骤 S2 的处理确定相关关系的结果是不存在真相关的关系的情 况下, 进行确定具有真相关的关系的两个迭代的处理。
即, 对迭代号码 s(i+2 ≤ s < N) 进行迭代展开, 确定迭代 i 及迭代 s 的各命令语句 间的相关关系。在不存在真相关的关系的情况下, 一边将 s 一个一个增加, 一边反复进行上 述迭代展开及相关关系的确定, 在存在真相关的关系的情况下, 将步骤 S3、 S4 中的迭代 i+1 替换为迭代 s, 进行步骤 S3、 S4 的处理。
此外, 进行变更以将步骤 S6 的 m 设定为 s、 进行变更以将图 6 的步骤 S7 的 m 设定
为 s+1, 在步骤 S8 以后, 能够与由实施方式说明同样进行处理。
这样, 根据有关该变形的程序生成装置, 例如通过参照包含图 19(a) 所示的循环 处理 R5、 及图 19(c) 所示的循环处理 R7 的源程序, 能够生成与以往的编译器通过参照包含 图 19(b) 所示的循环处理 R6 及图 19(d) 所示的循环处理 R8 的源程序而生成得到的汇编程 序同样的汇编程序。
(2) 有关实施方式的程序生成装置 100 设为在图 7 的步骤 S21 中、 在将全部的真 相关删除后的迭代 kmin 到迭代 m-1 与在图 6 的步骤 S15 中生成的迭代变形候选中的迭代 kmin 到迭代 m-1 不是相同形式的情况下 ( 步骤 S21 : 否 )、 不生成汇编程序 12 而结束程序 生成处理的结构进行了说明。但是, 也可以将循环处理分为循环控制变量为 kmin 到 m-1 的 范围的部分循环处理 X、 和循环控制变量为 m 到 kmax 的范围的部分循环处理 Y, 生成能够将 循环处理 Y 由多个处理器并行执行而构成的汇编程序 12。
(3) 有关实施方式的程序生成装置 100 设为通过参照源程序 11 而生成汇编程序 12 的结构进行了说明。 但是, 也可以是, 程序生成装置变形为具备汇编器 210 及链接器 220, 有关该变形的程序生成装置通过参照源程序 11 来生成目标程序 14。
此外, 有关实施方式的链接器 220 设为将决定了未解决的数据的地址配置等的浮 动二进制程序 13 与需要的库等连结的结构进行了说明, 但当然也可以将多个浮动二进制 程序 13 彼此连结。 (4) 有关实施方式的程序生成装置 100 中的计算部 130 的等价关系计算部 133 设 为使用与在专利文献 2 中说明的方法同样的方法进行变量表述的等价关系的计算的结构 而进行了说明, 但它是一例, 也可以通过其他方法计算。
例如, 也可以利用命令语句 “x = y”中的、 在 x 中保存有与 y 相同的值的关系、 即 x 与 y 为等价的关系, 通过反复进行替换命令语句的表述 ( 以下称作 “复制传播” (copy propagation)) 的方法来计算。
以下, 简单地说明该方法。
例如, 通过对图 8(a) 所示的迭代 i 的命令语句 ST44 “a2 = a[i+3]” 进行复制传播, 由此, 将图 8(b) 所示的迭代 i+1 的命令语句 ST51 的表述替换为 “b[i+1] = a0+a1+a[i+3]” 、 将命令语句 ST53 的表述替换为 “a1 = a[i+3]” 。
此外, 通过对该替换后的命令语句 ST53 和命令语句 ST54 进行复制传播, 将图 20(a) 所示的迭代 i+2 的命令语句 ST61 的表述替换为 “b[i+2] = a0+a[i+3]+a[i+4]” 。此 外, 将命令语句 ST62 的表述替换为 “a0 = a[i+3]” 、 将命令语句 ST63 的表述替换为 “a1 = a[i+4]” 。
此 外, 通 过 对 于 该 替 换 后 的 命 令 语 句 ST62 及 ST63、 和 命 令 语 句 ST64 进 行 复 制 传 播, 将 图 20(b) 所 示 的 迭 代 i+3 的 命 令 语 句 ST71 的 表 述 替 换 为 “b[i+3] = a[i+3]+a[i+4]+a[i+5]” 、 将命令语句 ST72 的表述替换为 “a0 = a[i+4]” 、 将命令语句 ST73 的表述替换为 “a1 = a[i+5]” ( 参照图 20(c))。
(5) 也可以将用来使处理器执行在实施方式中说明的程序生成处理 ( 参照图 5 ~ 图 7) 的程序记录到记录介质中、 或经由各种通信路径等流通而发布。在这样的记录介质 中, 有 IC 卡、 光盘、 软盘、 ROM、 闪存存储器等。被流通、 发布的程序通过保存在能够由设备的 处理器读取的存储器等中而供使用, 通过该处理器执行该程序而实现在实施方式中表示的
程序生成装置的各功能。
(6) 也可以在有关实施方式的程序生成装置 100 中组合使用上述 (1) ~ (5) 的一 部分或全部的变形。
(7) 以下, 还对本发明的有关一实施方式的程序生成装置的结构及其变形例和各 效果进行说明。
(a) 有关本发明的一实施方式的程序生成装置, 通过参照对象源程序而生成新的 程序, 该对象源程序包含将由 1 个以上的命令语句构成的块重复处理 N 次的循环处理, 该循 环处理的在有关第 i 次执行的上述块内的命令语句中定义的变量处于被有关第 j 次执行的 上述块内的命令语句所参照的相关关系, 其中 N ≥ 2, 1 ≤ i < N, i < j ≤ N, 其特征在于, 该 程序生成装置具备 : 计算单元, 以有关第 i 次执行的上述块、 和有关第 i 次以外的执行的 1 个以上的上述块为对象块, 进行计算该对象块中的变量表述的等价关系的计算处理 ; 确定 单元, 基于上述计算单元计算出的变量表述的等价关系, 对于上述变量之中的、 处于上述相 关关系的全部的对象变量的表述, 进行确定与该对象变量的表述等价的不具有上述相关关 系的其他变量的表述的确定处理 ; 以及生成单元, 生成用来进行上述循环处理的 M 次的处 理的、 包含如下命令语句的程序, 该命令语句包含有上述确定单元确定的其他变量的表述, 其中 M ≤ N。
根据上述结构的有关本发明的一实施方式的程序生成装置, 通过参照包含在有关 第 i 次执行的块内的命令语句与有关第 j 次执行的块内的命令语句之间有所谓的真相关的 关系的循环处理的对象源程序, 能够生成用来进行该循环处理的 M 次的处理的程序, 该程 序包含如下命令语句, 该命令语句对于处于真相关的关系的全部的对象变量的表述, 包含 有与该对象变量的表述等价的没有真相关的关系的其他变量的表述。
根据该生成的程序, 能够将循环处理的 M 次的处理通过多个处理器独立地并行执 行、 将循环处理高速地执行。
因而, 该程序生成装置对于用来通过参照包含具有真相关的关系的循环处理的源 程序, 从而使用多个处理器高速地执行循环处理的程序的生成是有用的。
(b) 此外, 也可以是, 上述确定单元确定的与上述对象变量的表述等价的不具有上 述相关关系的其他变量的表述, 是与哪个对象变量的表述都不同的变量的表述。
根据该程序生成装置, 通过参照包含具有真相关的关系的循环处理的对象源程 序, 能够生成用来进行该循环处理的 M 次的处理的程序, 该程序包含如下命令语句, 该命令 语句包含有与处于真相关的关系的全部的对象变量的表述等价的不具有真相关的关系的 其他变量的表述。
即, 该程序生成装置通过参照包含具有真相关的关系的循环处理的对象源程序, 能够生成通过将循环处理的 M 次的处理由多个处理器独立地并行执行而能够高速地执行 的程序。
(c) 此外, 也可以是, 上述计算单元将有关第 i 次执行的上述块、 和有关第 i+1 次 执行的上述块作为上述对象块, 进行上述计算处理 ; 每当上述计算单元进行上述计算处理 时, 上述确定单元基于已计算的各变量表述的等价关系, 对于全部的对象变量的表述, 进行 是否能够确定如下表述的判断, 该表述是与该对象变量的表述等价的不具有上述相关关系 的其他变量的表述、 而且是与哪个对象变量的表述都不同的变量的表述 ; 在该判断处理的结果是否定的期间, 一边使 i 每次增加 1, 一边使上述计算单元重复进行上述计算处理。
根据该程序生成装置, 在 i 是 n(n < N) 的情况下, 在不能对于处于真相关的关系 的全部的对象变量的表述确定与该对象变量的表述等价的没有真相关的关系的其他变量 的表述的情况下, 能够生成用来进行至少从 n 到 N 的 N-N 次的循环处理的程序, 该程序包括 包含有与处于真相关的关系的全部的对象变量的表述等价的没有真相关的关系的包含其 他变量的表述的命令语句。
因而, 通过至少将该 N-n 次的循环处理用多个处理器独立地并行执行, 能够高速 地执行。
(d) 此外, 也可以是, 上述程序生成装置参照的程序是用来由单一的处理器执行的 程序 ; 上述生成单元生成的程序是用来由多个处理器并行执行的程序。
根据该程序生成装置, 通过参照用来由单一的处理器执行的程序, 能够生成用来 由多个处理器并行执行的程序。 因而, 在例如已经有编程者制作的、 用来由单一的处理器执 行的程序的情况下, 也可以不特意制作用来由多个处理器并行执行的程序。 由此, 能够节省 用于制作程序的工作量。
(e) 此外, 也可以是, 在 M < N 的情况下, 上述生成单元将所生成的程序变更以使得 其还进行上述循环处理的 N-M 次的处理, 并判断变更后的程序的处理和上述对象源程序的 处理是否为等价, 在为等价的情况下, 将上述生成的程序替换为该变更后的程序。
根据该程序生成装置, 即使将暂且生成的、 用来进行循环处理的 M(M < N) 次的处 理的程序变更为进行循环处理的 N 次的处理的程序, 也以该处理与对象源程序的处理等价 为条件, 最终生成用来进行循环处理的 N 次的处理的程序。
用来进行该循环处理的 N 次的处理的程序是包括如下命令语句的程序, 该命令语 句对于处于真相关的关系的全部的对象变量的表述, 包含有与该对象变量的表述等价的没 有真相关的关系的包含其他变量的表述的。因而, 能够将 N 次的循环处理通过用多个处理 器独立地并行执行而高速地执行。
产业上的可利用性
有关本发明的程序生成装置用于参照包含具有所谓的真相关的关系的循环处理 的源程序, 生成用来将由该循环处理实现的规定处理用多个处理器分担而并行执行的新的 程序。
标号说明
10 存储装置
11 源程序
12 汇编程序
13 浮动二进制程序
14 目标程序
100 程序生成装置
110 存储部
120 取得部
130 计算部
131 迭代展开部132 名相关删除部 133 等价关系计算部 140 确定部 150 生成部 210 汇编器 220 链接器 1000 编译器系统