专利名称:程序重写装置的制作方法
技术领域:
本发明,尤其涉及对包含存储器存取指令的指令串进行依赖关系缓解 的程序重写装置。
背景技术:
近年来,处理器的处理速度的提高非常快,然而,主存储器的存取速度的提高较慢,两者的速度的差距逐年变大。据此,以往指出的问题是 在依据具有存储器的信息处理装置高速进行信息处理时,存储器存取成为瓶颈。为了解决所述问题所知道的方法是对指令进行调度(scheduling),使 得尽可能将为了获得在主存储器的存储区域所存储的数据需要损失周期 (penalty cycle)的装入(load)指令比其它指令先行执行,从而使其它指令在该 损失周期期间内执行。据此,可以由其它指令的执行周期来隐蔽因存储器 存取的损失而引起的影响,也可以控制性能恶化。然而,对于静态的指令调度,在大多数情况下,存储器存取指令的存 储器存取地址值会动态地变化。因此,应该设想在存储器存取指令间产生 的存储器依赖关系。此事宜,作为模糊的存储器依赖关系为人所知。其结 果是,对于静态的指令调度,不能将装入指令比其它存储器存取指令先行 执行,难以隐蔽依据存储器存取指令的损失周期,并且不能发挥处理器的 性能。因此,以往,为了对具有这些模糊的存储器依赖关系的存储器存取指 令实施指令调度,若处理器未具备执行特殊的指令的硬件,则不能将装入 指令移动到对存储区域的存放(store)指令的前面。作为考虑到该模糊的存储器依赖关系的特殊的指令,可以举出推测装 入(speculative loading)指令(例如,参照专利文献日本国专利第3762597 号公报(图6))。推测装入指令是一种指令,执行如下处理。即,先将地址存储在硬件的特别的存储装置,而将在该地址所存储的存储数据设定在寄存 器,所述地址是依据装入指令所存取的存储区域的地址。然后,在执行了 存放指令时,将寄存器所存储的数据设定在存储区域。再者,在依据存放 指令所存取的存储区域的地址和所述特别的存储装置所存储的推测装入指 令的地址间产生干扰的情况下,以存放指令所存放的数据覆盖推测装入指 令所设定的寄存器。根据这些内容,可以确保逻辑等效性。
用图1、图2A以及图2B,对推测装入指令进行具体说明。例如,考 虑只执行普通的存储器存取指令的处理器。图1是示出源程序的一个例子 的图。图2A是示出与图1所示的源程序等效的、且不包含推测装入指令的 汇编文件的一个例子的图。为了由这些处理器执行图1所示的存储器存取 处理,需要考虑模糊的存储器依赖关系,来制作图2A所示的忠实地遵守存 储器存取顺序的汇编文件。
另一方面,图2B是示出与图1所示的源程序等效的、且包含推测装入 指令的汇编文件的一个例子的图。如此,通过活用推测装入指令,从而不 一定需要遵守图1所示的存储器存取顺序。即,可以将装入指令比存放指 令先行执行。据此,可以由其它指令来隐蔽依据存储器参照的损失周期, 其结果是性能会提高。
然而,存在的问题是为了执行这些推测执行指令,需要在处理器设 置特殊的硬件。
发明内容
本发明,为了解决所述问题,提出了一种程序重写装置,即使不设置 特殊的硬件也可以缓解模糊的存储器依赖关系。
为了实现所述目的,本发明涉及的程序重写装置是一种程序重写装置, 将输入程序重写为用于处理器的程序,该处理器可以根据执行可否标记来 控制处理的执行可否,所述程序重写装置包括比较处理插入单元,将比 较处理插入到所述输入程序中,所述比较处理所进行的处理是,对第一地 址信息和第二地址信息进行比较,而将比较结果写入到执行可否标记中, ^f述第一地址信息是所述输入程序中包含的第一存储器存取处理所存取的 存储器的地址信息,所述第二地址信息是所述输入程序中包含的第二存储
11器存取处理所存取的存储器的地址信息;以及逻辑保证处理插入单元,将 带有执行可否标记的逻辑保证处理插入到所述输入程序中,所述逻辑保证 处理是,根据所述执行可否标记的值执行的处理、且是用于保证与所述输 入程序的执行时相同的处理结果的处理。
根据执行可否标记选择性地执行用于进行存储器存取处理的逻辑保证 的逻辑保证处理。据此,即使不设置特殊的硬件也可以缓解模糊的存储器 依赖关系。因此,可以对处理器具备的存储器存取指令静态地、且高效率 地进行指令调度,也可以提高程序执行时的处理速度。而且,硬件利用效 率也会提高。
优选的是,所述第一存储器存取处理是存放处理,将数据写入到存储 器中,所述第二存储器存取处理是装入处理,从存储器中读取数据。
据此,对向存储器具备的高速缓冲存储器(cache memory)或外部存储空
间存取的装入指令或存放指令静态地、且高效率地进行指令调度,也可以 提高程序执行时的处理速度。而且,硬件利用效率也会提高。
还优选的是,所述的程序重写装置,还包括关键路径(criticalpath) 检测单元,从所述输入程序中检测成为关键路径的处理;以及模糊的存储 器依赖关系解析单元,判断所述关键路径检测单元所检测的关键路径中是 否包含所述第一存储器存取处理和所述第二存储器存取处理,在包含所述 第一存储器存取处理和所述第二存储器存取处理的情况下,解析所述第一 存储器存取处理和所述第二存储器存取处理之间是否存在模糊的真的存储 器依赖关系,并且,所述比较处理插入单元,将第一地址信息以及第二地 址信息作为比较的对象,将比较处理插入到所述输入程序中,所述第一地 址信息以及第二地址信息分别与由所述模糊的存储器依赖关系解析单元判 断为处于模糊的真的存储器依赖关系的所述第一存储器存取处理以及所述 第二存储器存取处理相对应。
据此,可以是只对关键路径上的处于模糊的存储器依赖关系的指令 间自动地进行依赖关系的缓解;高效率地縮短关键路径;可以进行指令调 度;提高程序执行时的处理速度。而且,硬件利用效率也会提高。
还优选的是,所述的程序重写装置,还包括,执行顺序变更单元,将 由所述模糊的存储器依赖关系解析单元判断为处于模糊的真的存储器依赖关系的所述第一存储器存取处理和所述第二存储器存取处理的执行顺序变 更。
根据,可以先行配置等待时间(latency)较长的指令,也可以提高程序执 行时的处理速度。而且,硬件利用效率也会提高。
还优选的是,所述的程序重写装置,还包括,数据大小比较单元,判 断是否满足以下条件,即,所述第一存储器存取处理一次存取的数据大小 与所述第二存储器存取处理一次存取的数据大小相同,所述逻辑保证处理 插入单元,在由所述数据大小比较单元判断为满足所述条件的情况下,将 覆盖处理作为所述逻辑保证处理插入到所述输入程序中,所述覆盖处理是 指,以所述第一存储器存取处理写入到存储器中的值覆盖所述第二存储器 存取处理从存储器中读取的值的处理。
还优选的是,所述比较处理插入单元,将所述比较处理插入在所述逻 辑保证处理的前面的一个地方,以作为执行顺序。
据此,就在存储器存取处理之前,可以根据只一次进行一致判断来实 现地址比较处理,也可以提高程序执行时的处理速度。
还优选的是,所述的程序重写装置,还包括,规则性判断单元,判断 是否满足以下条件,即,反复执行所述第一以及第二存储器存取处理,并 且,在各个存储器存取处理中所存取的存储器的地址规则性地被更新,所 述比较处理插入单元,在由所述规则性判断单元判断为满足所述条件的情 况下,将所述比较处理插入到所述第一以及第二存储器存取处理的反复的 前面的位置,以作为执行顺序。
或者,所述的程序重写装置,还包括,数据大小比较单元,判断是否 满足以下条件,即,所述第二存储器存取处理一次存取的数据大小比所述 第一存储器存取处理一次存取的数据大小小,所述逻辑保证处理插入单元, 在由所述数据大小比较单元判断为满足所述条件的情况下,将覆盖处理作 为所述逻辑保证处理插入到所述输入程序中,所述覆盖处理是指,以所述 第一存储器存取处理写入到存储器中的值的一部分覆盖所述第二存储器存 取处理从存储器中读取的值的处理。
据此,即使对象大小(object size)不同的存储器存取处理的模糊的存储 器依赖关系也可以缓解存储器依赖关系,也可以提高程序执行时的处理速度。
还优选的是,所述的程序重写装置,还包括,优化指定信息附加单元, 接受与优化有关的优化指示信息,所述比较处理插入单元以及所述逻辑保 证处理插入单元,根据所述优化指定信息附加单元接受的所述优化指示信 息,选择性地进行工作。
据此,编程员可以在考虑对存储器存取指令的、对调度的代码大小和
执行性能的折衷(trade-off)的同时,进行编程。
并且,本发明,除了可以作为具有如上所述的特征单元的程序重写装 置来实现以外,也可以作为将程序重写装置具有的特征单元作为步骤的程 序重写方法来实现,还可以作为使计算机执行程序重写方法中包含的特征 步骤的程序来实现。并且,当然也可以通过CD-ROM(Compact Disc-Read OnlyMemory)等存储介质或互联网等传输介质来分发这些程序。 根据本发明,即使不设置特殊的硬件也可以缓解模糊的存储器依赖关系。 而且,可以对处于模糊的依赖关系的指令静态地、且高效率地进行调度, 也可以提高程序执行时的处理速度。而且,硬件利用效率也会提高。
图1是用于说明依赖关系缓解的源程序的一个例子的图。
图2A是用于说明依据推测执行的依赖关系缓解的、不包含推测装入指 令的汇编文件的一个例子的图。
图2B是用于说明依据推测执行的依赖关系缓解的、包含推测装入指令 的汇编文件的一个例子的图。
图3是示出本发明的实施例涉及的编译系统(compilersystem)的外观结 构的图。
图4是示出本发明的实施例涉及的编译系统的结构的图。
图5是示出编译器的结构的图。
图6是编译器所执行的处理的流程图。
图7是模糊的存储器依赖关系缓解优化处理的详细流程图。
图8是模糊的存储器依赖关系检测处理的详细流程图。
图9是模糊的存储器依赖关系缓解处理的详细流程图。图10A 图IOC是用于说明针对非循环构造的、相同对象大小存取的 依赖关系缓解处理的图。
图11A 图IID是用于说明针对非循环构造的、不同对象大小存取(小 —大)的依赖关系缓解处理的图。
图12A 图12D是用于说明针对非循环构造的、不同对象大小存取(大 —小)的依赖关系缓解处理的图。
图13A 图13C是用于说明针对循环构造的、相同对象大小存取的依 赖关系缓解处理、且可以将比较处理处于循环外的的情况的图。
图14A 图14C是用于说明针对循环构造的、相同对象大小存取的依 赖关系缓解处理、且需要将比较处理处于循环内的情况的图。
图15A以及图15B是用于说明针对循环构造的、不同对象大小存取(小 —大)的依赖关系缓解处理的图。
图16A以及图16B是用于说明针对循环构造的、不同对象大小存取(大 —小)的依赖关系缓解处理的图。
图17A 图17C是用于说明针对非循环构造的、相同对象大小存取连 续的情况下的依赖关系缓解处理的图。
具体实施例方式
图3是示出本发明的实施例涉及的编译系统(compilersystem)的外观结 构的图。通过在该图所示的计算机上执行各种程序,从而实现编译系统。
图4是示出本发明的实施例涉及的编译系统的结构的图。编译系统100 是一种软件系统,将以C语言等高级语言描述的源程序200转换为以机械 语言描述的执行程序230,所述编译系统100包括编译器(compiler)llO、 汇编器(assembler)120以及链接器(linker)130。
编译器110是一种程序,将具有执行可否标记寄存器(flag register)的 CPU(Central Processing Unit:中央处理器)作为目标处理器(target processor), 而将源程序200转换为以汇编语言描述的汇编文件210,所述执行可否标记 寄存器用于使指令的执行可否的控制成为可能。编译器110,在将源程序 200转换为汇编文件210时,由存储器依赖关系缓解优化部和指令调度部进行优化处理,从而输出汇编文件210,所述存储器依赖关系缓解优化部用于 在解析源程序200而得的处理内对于关键路径处理缓解模糊的存储器依赖 关系。
汇编器120是一种程序,将以汇编语言描述的汇编文件210转换为以 机械语言描述的对象文件220。链接器130是一种程序,结合多个对象文件 220而生成执行程序230。
作为执行程序230的开发工具有,模拟器(simulator)140以及评测器 (profiler)150。模拟器140是一种程序,模拟执行程序230,并输出执行时 的各种执行日志数据(logdata)240。评测器150是一种程序,解析执行日志 数据240,并输出解析了程序的执行顺序等的评测数据250。
通过使这些各种程序在计算机上执行,从而依据源程序200制作执行 程序230。
图5是示出编译器110的结构的图。
编译器110包括,语法解析部lll、优化信息解析部112、 一般优化部 113、模糊的存储器依赖关系缓解优化部114、指令调度部115以及代码输 出部116。各种构成处理部是作为在计算机上执行的程序来实现的。
语法解析部111是一种处理部,将源程序200作为输入接受,对源程 序200进行语法解析处理后,输出中间语言的程序(中间代码)。
优化信息解析部112是一种处理部,读取并解析高速缓存参数201、评 测数据250、编译选项(compiler option)以及编译指示(pragma)等中间代码的 优化处理所需要的信息。编译选项以及编译指示都是对编译器110的指示。
一般优化部113是一种处理部,对中间代码实施一般的优化处理。模 糊的存储器依赖关系缓解优化部114是一种处理部,缓解关键路径上的模 糊的存储器依赖关系。
指令调度部115是一种处理部,将指令的排列优化,并进行指令调度。
代码输出部116是一种处理部,将优化后的中间代码转换为以汇编语 言描述的汇编代码,并输出包含该汇编代码的汇编文件210。
其次,说明编译器110所执行的处理流程。图6是编译器110所执行的处理的流程图。
语法解析部111是一种处理部,对源程序200进行语法解析处理,并 生成中间代码(S1)。优化信息解析部112,对高速缓存参数201、评测数据 250、编译选项以及编译指示等进行解析(S2)。 一般优化部113,根据优化 信息解析部112的解析结果进行一般的中间代码的优化处理(S3)。模糊的存 储器依赖关系缓解优化部114,注目中间代码的具有关键路径上的模糊的存 储器依赖关系的存储器存取处理,根据需要插入校正处理,而缓解模糊的 存储器依赖关系(S4)。指令调度部115,进行指令调度(S5)。代码输出部116, 将中间代码转换为汇编代码,并将其作为汇编文件210输出(S6)。
对于语法解析处理(S1)、优化信息解析处理(S2)、 一般的优化处理(S3)、 指令调度处理(S5)以及汇编代码输出处理(S6),由于与一般的处理相同,因
此不反复进行详细说明。
下面,对模糊的存储器依赖关系缓解优化处理(S4)进行详细说明。图7 是用于对模糊的存储器依赖关系缓解优化处理(图6的S4)进行详细说明的 流程图。
模糊的存储器依赖关系缓解优化部114,在存在依据编译选项以及编译 指示指令等的优化指示的情况下实施处理。在存在优化指示的情况下(S9 中的"是"),模糊的存储器依赖关系缓解优化部114将中间代码作为输入, 并检测关键路径(SIO)。在不存在优化指示的情况下(S9中的"否"),模糊 的存储器依赖关系缓解优化部114结束处理。对于关键路径的检测处理, 由于与一般的处理相同,因此在此不反复进行详细说明。关键路径是根据 依赖关系结合起来的指令串中的执行时间最长的指令串,所述依赖关系是 通过对资源(寄存器、存储器、外部端口等)进行(或有可能进行<将其称为, 模糊的存储器依赖关系〉)定义、参照(定义或参照)而产生的。 一般而言, 利用由称为节点(node)或边(edge)的要素构成的、称为DAG(Directed Acyclic Graph :有向无环图)的依赖关系图来求出。此时,通过将指令作为节点、 将依赖关系作为边、将依赖关系距离(指令间的执行时间)作为边距离,且根 据一般的图表逻辑,从而可以求出关键路径。
模糊的存储器依赖关系缓解优化部114,在检测出的关键路径中检测处 于模糊的存储器依赖关系的、逻辑上连续的存储器存取处理(Sll)。对于模糊的存储器依赖关系检测处理(Sll),在后面将进行详细说明。
在不存在成为优化对象的、处于模糊的存储器依赖关系的、逻辑上连
续的存储器存取处理的情况下(S12中的"否"),模糊的存储器依赖关系缓 解优化部114结束处理。
在存在优化对象的存储器存取处理的情况下(S12中的"是"),模糊的 存储器依赖关系缓解优化部114缓解存储器存取处理中的模糊的存储器依 赖关系(S13)。对于依赖关系缓解处理(S13),在后面将进行详细说明。
模糊的存储器依赖关系缓解优化部1M,判断是否实施了模糊的存储器 依赖关系缓解(S14),在未实施的情况下(S14中的"否"),针对存储器存取 处理的后续处理,反复实施模糊的存储器依赖关系检测处理(S11)以后的处 理。
在实施了模糊的存储器依赖关系缓解的情况下(S14中的"是"),模糊 的存储器依赖关系缓解优化部114,在缓解了模糊的存储器依赖关系的处理 中再次检测关键路径(S15)。模糊的存储器依赖关系缓解优化部114,对再 次检测出的关键路径的全长、和处理前的关键路径的全长进行比较,而判 断优化适用后关键路径长度是否已被縮短(S16)。
在判断为关键路径长度已被縮短的情况下(S16中的"是"),模糊的存 储器依赖关系缓解优化部114,针对已被缩短的关键路径,递归且反复实施 用于缓解模糊的存储器依赖关系的处理(S11)。
在关键路径长度未被縮短、或关键路径长度相同的情况下(S16中的 "否"),模糊的存储器依赖关系缓解优化部114,删除刚已实施的依赖关 系缓解处理(S17)。 gp,将刚已实施的依赖关系缓解处理(S13)作为未实施。 然后,模糊的存储器依赖关系缓解优化部114,针对存储器存取处理的后续 处理,反复实施模糊的存储器依赖关系检测处理(S11)以后的处理。
下面,对模糊的存储器依赖关系检测处理(S11)以及依赖关系缓解处理 (S13)进行详细说明。
图8是模糊的存储器依赖关系检测处理(图7的Sll)的详细流程图。模 糊的存储器依赖关系缓解优化部114,针对在关键路径检测处理(图7的S10) 中检测出的关键路径,从开头依次选择指令,并且反复执行以下处理(S20)。
模糊的存储器依赖关系缓解优化部114,判断所选择的处理是否存储器存取处理、且在该存储器存取处理的后续处理中是否存在针对该存储器存
取处理只处于模糊的存储器依赖关系的处理(S21)。
在所选择的处理不是存储器存取处理、或者虽所选择的处理是存储器 存取处理、但在该存储器存取处理的后续处理中不存在针对该存储器存取 处理只处于模糊的存储器依赖关系的处理的情况下(S21中的"否"),模糊 的存储器依赖关系缓解优化部114,选择下一个处理(S20),并进行同样的 判断(S21)。
在所选择的处理是存储器存取处理、且在该存储器存取处理的后续处 理中存在针对该存储器存取处理只处于模糊的存储器依赖关系的处理的情 况下(S21中的"是"),模糊的存储器依赖关系缓解优化部114,判断优化 对象的地址变量名是否以编译指示或编译选项已被指定(S22)。
在优化对象的地址变量名已被指定的情况下(S22中的"是"),模糊的 存储器依赖关系缓解优化部114,判断优化对象的存储器存取处理的地址变 量名和己被指定的变量名是否一致(S23)。在变量名不一致的情况下(S23中 的"否"),模糊的存储器依赖关系缓解优化部114,选择下面的处理(S20), 并反复执行S21以后的处理。
在变量名一致的情况下(S23中的"是"),或者,在优化对象的地址变 量名未被指定的情况下(S22中的"否"),模糊的存储器依赖关系缓解优化 部114,判断是否可以使用目标处理器的执行可否标记寄存器资源(S24)。 由于是否可以使用执行可否标记寄存器资源的判断是利用生存区间解析等 来可以进行的,因此在此不反复进行详细说明,所述生存区间解析用于一 般的寄存器分配优化。
在不存在处于模糊的存储器依赖关系的存取处理间可以使用的执行可 否标记寄存器资源的情况下(S24中的"否"),选择下一个处理(S20),并反 复执行S20以后的处理。
在存在可以使用的执行可否标记寄存器资源的情况下(S24中的"是"), 模糊的存储器依赖关系缓解优化部114,判断是否可以将处于模糊的存储器 依赖关系的存取处理中包含的存储器参照指令,移动到存储器代入指令的 前面(S25)。 g卩,模糊的存储器依赖关系缓解优化部114,解析在存储器参 照指令和存储器代入指令之间是否存在依赖于存储器代入指令的指令若不存在依赖的指令,则判断为可以将存储器参照指令移动;若存在依赖的 指令,则判断为不能将存储器参照指令移动。在不能移动的情况下(S25中 的"否"),模糊的存储器依赖关系缓解优化部114,选择下一个处理(S20), 并反复执行S21以后的处理。
在可以将存储器参照指令移动的情况下(S25中的"是"),模糊的存储 器依赖关系缓解优化部114,将S21中检测出的处于模糊的存储器依赖关 系的存储器存取处理,作为优化的对象返回(作为返回值返回)(S26)。即使 结束所有的处理的搜索,也在不存在成为优化的对象的存储器存取处理的 情况下,模糊的存储器依赖关系缓解优化部114,结束搜索循环(S20),并 结束模糊的存储器依赖关系处理检测。
图9是依赖关系缓解处理(图7的S13)的详细流程图。模糊的存储器依 赖关系缓解优化部114,判断模糊的存储器依赖关系检测处理(图7的Sll、 图8)中检测出的存储器存取处理是否处于模糊的真的存储器依赖关系 (S30)。
在不处于模糊的真的存储器依赖关系的情况下(S30中的"否"),模糊 的存储器依赖关系缓解优化部114结束处理。在处于模糊的真的存储器依 赖关系的情况下(S30中的"是"),模糊的存储器依赖关系缓解优化部114, 将存储器所存储的数据的装入处理移动到存放处理的紧前面(S31),判断作 为处于依赖关系的存储器存取处理的对象的存储器的区域大小(对象大小) 是否相同(S32)。
在对象大小不同的情况下(S32中的"否"),模糊的存储器依赖关系缓 解优化部114,将比较这些存储器存取处理的地址寄存器值的范围的比较处 理插入到装入处理的紧前面(S33),将按照该地址范围比较处理的结果的、 每个地址的校正处理插入到装入处理之后(S34),而结束处理。
如下进行比较地址寄存器值的范围的比较处理(S33)。将彼此的存储器 存取处理作为APb以及APs。而且,将APb以及APs的各个存储器存取地 址作为AAb以及AAs。再者,将APb以及APs的各个存储器存取区域大 小作为ASb以及ASs。而且,在将ASb以及ASs的最大公约数gcd(ASb、 ASs)为GAS、且ASb〉ASs的情况下,比较次数n为ASb / GAS,在该处 理中进行以下n个比较(AAb+GASM-AAs、 AAb+GAS*l=AAs 、AAb+GAS*2=AAs、 、 AAb+GAS*(n-l)==AAs)。据此,模糊的存储器 依赖关系缓解优化部114,检测依赖存储器区域。即,在AAb+GAS*k==AAs 的比较结果为真的情况下,在ASb〉ASs时,可以认为依据APb所存取的 存储区域中从存取开头地址AAb偏离GAS*k字节的位置开始GAS字节的 区域、和依据APs所存取的存储区域处于依赖关系。
每个地址的校正处理(S34)是一种处理按照所述比较地址寄存器值的 范围的比较处理(S33)的每个结果,将带有执行可否标记的代入处理插入到 装入处理之后,在所述带有执行可否标记的代入处理中,以装入处理所代 入的数据只覆盖存放处理所存放的数据中的符合依赖存储区域的区域部 分。
在对象大小相同的情况下(S32中的"否"),模糊的存储器依赖关系缓 解优化部114,判断该处于模糊的存储器依赖关系的存储器存取处理是否循 环内的处理(S35)。在不是循环内的处理的情况下(S35中的"否"),模糊的 存储器依赖关系缓解优化部114,判断是否可以挪用在缓解了其它模糊的存 储器依赖关系时生成了的地址比较处理(S36)。在该判断中,在可以知道地 址变量相互一致、且到装入处理为止存在的地址变量的增减值相同的情况 下(S36中的"是"),模糊的存储器依赖关系缓解优化部114,挪用地址比 较处理,并跳越地址比较处理的插入处理(S40)。反而,在S36的判断中, 在有可能不存在地址比较处理、地址变量不一致、或地址变量的增减值不 相同的情况下(S36中的"否"),模糊的存储器依赖关系缓解优化部114, 将地址一致比较处理插入到装入处理的紧前面(S40),在所述地址一致比较 处理中,比较存储器存取处理的彼此的存储器地址来判断是否一致。
在两个存储器存取处理都是循环内的处理的情况下(S35中的"是"), 判断循环处理中存储器地址变化的增量值是否相互固定且相同(S37)。存储 器地址的增量值不是相互固定、或不是相同的情况下(S37中的"否"),与 存储器存取处理不是循环内的处理的情况(S35中的"否")相同,实施地址 一致比较处理的插入处理(S36、 S40)。
存储器地址的增量值是相互固定且相同的情况下(S37中的"是"),模 糊的存储器依赖关系缓解优化部114,将地址一致比较处理插入到循环处理 的唯一的先行处理即前置节点(preheader)处理的最末尾(S38)。模糊的存储器依赖关系缓解优化部114,将各个比较处理插入(S38、 S40)后,作为校正 处理将以装入处理所代入的数据覆盖存放处理所存放的数据的、带有执行 可否标记的代入处理插入到装入处理之后(S39),而结束处理。 [编译选项]
在编译系统100中,作为对编译器的编译选项有 "-fho-cut-ambiguous-depend"。在编译器执行时该选项被指定的情况下,编 译系统100,与编译指示的指定无关不进行对模糊的存储器依赖关系的缓解 优化。在不存在该选项的指定的情况下,编译系统100,与一般的优化相同, 遵照"-O"(优化命令行选项指定)的有无。 [编译指示指定] 该指定是对紧后面的循环的指定。
在依据编译指示1pragmajuLambiguouS-depend[变量名、变量名]" 指定了变量的情况下,编译系统100,只注目所编译指示指定的地址变量而 进行模糊的存储器依赖关系缓解优化处理。所指定的变量,可以是排列, 也可以是指针。在省略了变量的指定的情况下,编译系统100,将所有的存 储器存取作为对象进行模糊的存储器依赖关系缓解优化处理。
下面,说明在一些具体情况下的模糊的存储器依赖关系缓解处理。
并且,为了简化说明,在以后说明的处理中进行依据虚拟汇编语言的 程序描述,但是,实际上进行依据中间语言的优化处理。
图10A 图IOC是用于说明针对非循环构造的、相同对象大小存取的
依赖关系缓解处理的图。
图IOA是示出非循环构造的、相同对象大小存取的源程序200的一个
例子的图。
该源程序200的处理内容是指,连续两次进行以下处理将函数的引 数pA以及pB作为基准地址来将pB所示的区域的值代入到pA所示的区 域、且为了使pA和pB分别示出下一个要素而加上地址值。依据地址变量 pA代入的存储区域大小(存放对象大小)和依据地址变量pB参照的存储区 域大小(装入对象大小),由于彼此的地址变量为同型,因此相同。
图10B(a)是中间代码,即,所述源程序200被输入到图6所示的编译
22处理中,并在图6的Sl至S3的处理中被转换后成为S4的输入的中间代码。 从该所输入的中间代码(图10B(a))中,在关键路径检测处理(图7的S10)中 可以检测图10C(a)所示的关键路径。由于第一次的依据* 八++的存储器代 入处理和第二次的依据* 8++的存储器参照处理处于模糊的存储器依赖关 系,因此该关键路径的流程成为第一次的依据+pB的存储器参照和依据fpA 的存储器代入、和第二次的依据* 8的存储器参照和依据+pA的存储器代 入连续的处理。
针对该关键路径,执行模糊的存储器依赖关系检测处理(图7的Sll、 图8)。即,模糊的存储器依赖关系缓解优化部114,从开头依次搜索关键 路径上的处理(图8的S20),并检测第一次的依据* 八++的存储器代入处理 和第二次的依据* 8++的存储器参照处理的模糊的存储器依赖关系(图8的 S21)。因此,在图8的S21成为"是"。
由于在所输入的中间代码中执行可否标记未被使用,因此存在可以自 由地使用的执行可否标记寄存器资源。因此,在图8的S24成为"是"。
在存储器参照处理的移动可否判断处理(S25)中,除了要考虑成为存储 器参照处理的模糊的存储器依赖关系的原因的存储器以外,还要考虑寄存 器rl以及rll。虽然,可以设想寄存器rl以及rll分别依赖于其它处理的 情况,但是,在该情况下,到移动目的地的存储器代入处理和存储器参照 处理为止不存在依据寄存器rl以及rll的定义、参照的依赖关系。因此, 可以移动存储器参照处理,而在图8的S25成为"是"。
据此,在图8的S26中,第一次的依据* 八++的存储器代入处理和第 二次的依据* 8++的存储器参照处理被判断为处于模糊的存储器依赖关 系,并在图7的S12成为"是",从而这些存储器存取处理的信息被递送到 依赖关系缓解处理(图7的S13)。对成为该模糊的存储器依赖关系的存储器 存取处理,进行依赖关系的缓解(图7的S13、图9)。
获得的存储器存取处理的模糊的存储器依赖关系是第一次的依据 * 八++的对存储器的定义和第二次的依据* 8++的对存储器的参照,因此是
真的依赖关系。据此,在图9的S30成为"是",模糊的存储器依赖关系缓 解优化部114,如图108(1 )所示将第二次的依据* 8++的对存储器参照处理 移动到第一次的依据* 八++的对存储器代入处理的前面(图9的S31)。由于这些存储器存取处理的依据pA的存放对象大小和依据pB的装入对象大小 相同,因此在图9的S32成为"是",并且,由于这些存储器存取处理不是 循环内的处理,因此在图9的S35成为"否"。
在图9的S35成为"否"的情况下,不存在先行的原有的地址比较处 理。据此,在图9的S36成为"否",模糊的存储器依赖关系缓解优化部 114,将地址比较处理插入到图9的S31中所移动的存储器参照处理的紧前 面(图9的S40),在所述地址比较处理中,比较依据地址变量pB分配的寄 存器rl的值和依据地址变量pA分配的寄存器r0的值来判断是否一致。并 且,图10B(b)所示的地址比较处理"cmpeq C0、 rl、 r0"是一种处理,在 rl和r0的值相同的情况下,向条件可否标记C0代入1。
最后,模糊的存储器依赖关系缓解优化部114,为了在模糊的存储器依 赖关系中实际发生依赖关系时准确地保持逻辑,将带有执行可否标记的校 正指令插入到所移动的fpB的存储器参照处理之后(图9的S39),使得在地 址一致的情况下,通过执行可否标记寄存器以rlO覆盖rll,所述rl0是依 据+pA的存储器代入处理所代入的值,所述rll是依据* 8的存储器参照处 理而获得的值。图10B(b)所示的带有执行可否标记的校正指令中,在C0==1 的情况下,即在rl和rO的值相同的情况下,执行指令mov。
如此,在依赖关系缓解处理(图7的S13)中实施依赖关系缓解。据此, 在图7的S14成为"是",而在对缓解了依赖关系的中间代码再次检测关键 路径的情况下(图7的S15),如图10C(b)所示,关键路径只由第一次的依据 *PB的存储器参照、带有执行可否标记的校正指令以及依据 A的存储器 代入处理的真的依赖关系构成。即,在依据存储器参照处理的等待时间为3 周期的情况下,关键路径长度从图10C(a)的7周期变为10C(b)的4周期, 而被縮短3周期。据此,在图7的S16成为"是",递归地实施图7的S11。 在该例子的情况下,由于所有的模糊的存储器依赖关系被删除,因此在第 二次的模糊的存储器依赖关系检测处理(图9的Sll)中,不能检测依赖关系 缓解对象的存储器存取。据此,在图7的S12成为"否",模糊的存储器依 赖关系缓解优化部114结束处理。
如此,通过进行模糊的存储器依赖关系缓解处理(图7、图6的S4)、縮 短关键路径,从而可以依据指令调度处理(图6的S5)实现更高性能的中间代码,并在汇编代码输出处理(图6的S6)中生成对象代码,从而结束编译 处理。
图11A 图IID是用于说明针对非循环构造的、不同对象大小存取(小 —大第一次的存储器存取大小与第二次的存储器存取大小相比小)的依赖 关系缓解处理的图。
图11A是示出非循环构造的、不同对象大小存取的源程序200的一个 例子的图。
该源程序200的处理内容是指,连续两次进行以下处理将函数的引 数pA以及pB作为基准地址来将pB所示的区域的值代入到pA所示的区 域、且为了使pA和pB分别示出下一个要素而加上地址值。依据地址变量 pA代入的存储区域大小(存放对象大小)和依据地址变量pB参照的存储区 域大小(装入对象大小),由于分别是4字节和2字节,因此存放对象大小与 装入对象大小相比大。
图11B(a)是中间代码,gp,所述源程序200被输入到图6所示的编译 处理中,并在图6的Sl至S3的处理中被转换后成为S4的输入的中间代码。 从该所输入的中间代码(图11B(a))中,在关键路径检测处理(图7的S10)中 可以检测图11C(a)所示的关键路径。由于第一次的依据* 八++的存储器代 入处理和第二次的依据* 8++的存储器参照处理处于模糊的存储器依赖关 系,因此该关键路径的流程成为第一次的依据+pB的存储器参照和依据fpA 的存储器代入、和第二次的依据fpB的存储器参照和依据* 八的存储器代 入连续的处理。
针对该关键路径,执行模糊的存储器依赖关系检测处理(图7的Sll、 图8)。即,模糊的存储器依赖关系缓解优化部114,从开头依次搜索关键 路径上的处理(图8的S20),并检测第一次的依据* 八++的存储器代入处理 和第二次的依据* 8++的存储器参照处理的模糊的存储器依赖关系(图8的 S21)。因此,在图8的S21成为"是"。
由于在所输入的中间代码中执行可否标记未被使用,因此存在可以自 由地使用的执行可否标记寄存器资源。因此,在图8的S24成为"是"。
在存储器参照处理的移动可否判断处理(S25)中,除了要考虑成为存储器参照处理的模糊的存储器依赖关系的原因的存储器以外,还要考虑寄存
器rl以及rll。虽然,可以设想寄存器rl以及rll分别依赖于其它处理的 情况,但是,在该情况下,到移动目的地的存储器代入处理和存储器参照 处理为止不存在依据寄存器rl以及rll的定义、参照的依赖关系。因此, 可以移动存储器参照处理,并在图8的S25成为"是"。
据此,在图8的S26中,第一次的依据* 八++的存储器代入处理和第 二次的依据* 8++的存储器参照处理被判断为处于模糊的存储器依赖关 系,并在图7的S12成为"是",从而这些存储器存取处理的信息被递送到 依赖关系缓解处理(图7的S13)。对成为该模糊的存储器依赖关系的存储器 存取处理,进行依赖关系的缓解(图7的S13、图9)。
获得的存储器存取处理的模糊的存储器依赖关系是第一次的依据 * 八++的对存储器的定义和第二次的依据* 8++的对存储器的参照,因此是 真的依赖关系。据此,在图9的S30成为"是",模糊的存储器依赖关系缓 解优化部114,如图118(1))所示将第二次的依据* 8++的对存储器参照处理 移动到第一次的依据* 八++的对存储器代入处理的前面(图9的S31)。由于 这些存储器存取处理的依据pA的存放对象大小和依据pB的装入对象大小 不同,因此在图9的S32成为"否"。
在图9的S32成为"否"的情况下,模糊的存储器依赖关系缓解优化 部114,将地址范围比较处理插入到存储器参照处理的紧前面(图9的S33)。 如下求出地址范围比较处理。即,由于依据pA的存放对象大小和依据pB 的装入对象大小分别是4字节和2字节,因此可求出最大公约数gcd为2、 比较次数n为4字节/gcd(4字节、2字节)即2。而且,由于依据地址变量 pB分配的寄存器是rl、依据地址变量pA分配的寄存器是rO,因此作为地 址范围比较处理,可求出对r0==rl+2*0和r0==rl+2*l的两个地址一致进行 的比较处理。模糊的存储器依赖关系缓解优化部114,将如此求出的地址范 围比较处理插入到存储器参照处理的紧前面(图9的S33)。在图11B(b)的中 间代码中,为了高效地进行所述比较处理,取两个地址的异或,并且进行 比较处理来判断其结果为零、还是两个地址的差距为2字节。
最后,模糊的存储器依赖关系缓解优化部114,为了在模糊的存储器依 赖关系中实际发生依赖关系时准确地保持逻辑,将带有执行可否标记的校正指令插入到所移动的fpB的存储器参照处理之后(图9的S34),使得在地 址一致的情况下,通过执行可否标记寄存器以r10覆盖只在rll中相当于存 在依赖关系的存储区域部分的数据部分(图IID),所述r10是依据+pA的存 储器代入处理所代入的值,所述rll是依据+pB的存储器参照处理而获得的 值。模糊的存储器依赖关系缓解优化部114,在图11B(b)的中间代码中, 如图11D的校正处理的存储图像所示,在低16位部分存在依赖关系的情况 下,作为"extrrll、 r10、 15、 0",对r10的从第0位到第15位的16位进 行扩展符号后覆盖rll。而且,模糊的存储器依赖关系缓解优化部114,在 高16位部分存在依赖关系的情况下,作为"extrrll、 r10、 31、 16",对r10 的从第16位到第31位的16位进行扩展符号后覆盖rll。符号扩展的需要 的有无,应该符合rll的存储器参照指令的工作。在此情况下,由于对ldh 处理设想将16位数据符号扩展为32位来代入到寄存器,因此设想对校正 处理也需要实施符号扩展、以extr处理进行符号扩展。
如此,在依赖关系缓解处理(图7的S13)中实施依赖关系缓解。据此, 在图7的S14成为"是",在对缓解了依赖关系的中间代码再次检测关键路 径的情况下(图7的S15),如图11C(b)所示,关键路径只由第一次的依据申pB 的存储器参照、带有执行可否标记的校正指令以及依据4pA的存储器代入 处理的真的依赖关系构成。即,在依据存储器参照处理的等待时间为3周 期的情况下,关键路径长度从图11C(a)的7周期变为11C(b)的4周期,而 被縮短3周期。据此,在图7的S16成为"是",递归地实施图7的S11。 在该例子的情况下,由于所有的模糊的存储器依赖关系被删除,因此在第 二次的模糊的存储器依赖关系检测处理(图9的Sll)中,不能检测依赖关系 缓解对象的存储器存取。据此,在图7的S12成为"否",模糊的存储器依 赖关系缓解优化部114结束处理。
如此,在存储器存取对象的大小不同的情况下,也通过进行模糊的存 储器依赖关系缓解处理(图7、图6的S4)、縮短关键路径,从而可以依据指 令调度处理(图6的S5)实现更高性能的中间代码,并在汇编代码输出处理 (图6的S6)中生成对象代码,从而结束编译处理。
图12A 图12D是用于说明针对非循环构造的、不同对象大小存取(大—小第一次的存储器存取大小与第二次的存储器存取大小相比大)的依赖 关系缓解处理的图。
图12A是示出非循环构造的、不同对象大小存取的源程序200的一个 例子的图。
该源程序200的处理内容是指,连续两次进行以下处理将函数的引 数pA以及pB作为基准地址来将pB所示的区域的值代入到pA所示的区 域、且为了使pA和pB分别示出下一个要素而加上地址值。依据地址变量 pA代入的存储区域大小(存放对象大小)和依据地址变量pB参照的存储区 域大小(装入对象大小),由于分别是2字节和4字节,因此装入对象大小与 存放对象大小相比大。
图12B(a)是中间代码,即,所述源程序200被输入到图6所示的编译 处理中,并在图6的Sl至S3的处理中被转换后成为S4的输入的中间代码。 从该所输入的中间代码(图12B(a))中,在关键路径检测处理(图7的S10)中 可以检测图12C(a)所示的关键路径。由于第一次的依据* 八++的存储器代 入处理和第二次的依据* 8++的存储器参照处理处于模糊的存储器依赖关 系,因此该关键路径的流程成为第一次的依据* 8的存储器参照和依据+pA 的存储器代入、和第二次的依据* 8的存储器参照和依据+pA的存储器代 入连续的处理。
针对该关键路径,执行模糊的存储器依赖关系检测处理(图7的Sll、 图8)。 g卩,模糊的存储器依赖关系缓解优化部114,从开头依次搜索关键 路径上的处理(图8的S20),并检测第一次的依据* 八++的存储器代入处理 和第二次的依据* 8++的存储器参照处理的模糊的存储器依赖关系(图8的 S21)。因此,在图8的S21成为"是"。
由于在所输入的中间代码中执行可否标记未被使用,因此存在可以自 由地使用的执行可否标记寄存器资源。因此,在图8的S24成为"是"。
在存储器参照处理的移动可否判断处理(S25)中,除了要考虑成为存储 器参照处理的模糊的存储器依赖关系的原因的存储器以外,还要考虑寄存 器rl以及rll。虽然,可以设想寄存器rl以及rll分别依赖于其它处理的 情况,但是,在该情况下,到移动目的地的存储器代入处理和存储器参照 处理为止不存在依据寄存器rl以及rll的定义、参照的依赖关系。因此,可以移动存储器参照处理,并在图8的S25成为"是"。
据此,在图8的S26中,第一次的依据* 八++的存储器代入处理和第 二次的依据* 8++的存储器参照处理被判断为处于模糊的存储器依赖关 系,并在图7的S12成为"是",从而这些存储器存取处理的信息被递送到 依赖关系缓解处理(图7的S13)。对成为该模糊的存储器依赖关系的存储器 存取处理,进行依赖关系的缓解(图7的S13、图9)。
获得的存储器存取处理的模糊的存储器依赖关系是第一次的依据 * 八++的对存储器的定义和第二次的依据* 8++的对存储器的参照,因此是 真的依赖关系。据此,在图9的S30成为"是",模糊的存储器依赖关系缓 解优化部114,如图128(1))所示将第二次的依据* 8++的对存储器参照处理 移动到第一次的依据*pA++的对存储器代入处理的前面(图9的S31)。由于 这些存储器存取处理的依据pA的存放对象大小和依据pB的装入对象大小 不同,因此在图9的S32成为"否"。
在图9的S32成为"否"的情况下,模糊的存储器依赖关系缓解优化 部114,将地址范围比较处理插入到存储器参照处理的紧前面(图9的S33)。 如下求出地址范围比较处理。即,由于依据pA的存放对象大小和依据pB 的装入对象大小分别是2字节和4字节,因此可求出最大公约数gcd为2、 比较次数n为4字节/gcd(2字节、4字节)g卩2。而且,由于依据地址变量 pB分配的寄存器是rl、依据地址变量pA分配的寄存器是rO,因此作为地 址范围比较处理,可求出对rl=r0+2*0和rl=rO+2* 1的两个地址一致进行 的比较处理。模糊的存储器依赖关系缓解优化部114,将如此求出的地址范 围比较处理插入到存储器参照处理的紧前面(图9的S33)。在图12B(b)的中 间代码中,为了高效地进行所述比较处理,取两个地址的异或,并且进行 比较处理来判断其结果为零、还是两个地址的差距为2字节。
最后,模糊的存储器依赖关系缓解优化部114,为了在模糊的存储器依 赖关系中实际发生依赖关系时准确地保持逻辑,将带有执行可否标记的校 正指令插入到所移动的+pB的存储器参照处理之后(图9的S34),使得在地 址一致的情况下,通过执行可否标记寄存器以r10中相当于存在依赖关系 的存储区域部分的数据部分覆盖rl 1 ,所述r10是依据* 八的存储器代入处 理所代入的值,所述rll是依据* 8的存储器参照处理而获得的值。模糊的存储器依赖关系缓解优化部114,在图12B(b)的中间代码中,如图12D的 校正处理的存储图像所示,在低16位部分存在依赖关系的情况下,作为 "valnrll、 r10、 rll",以r10的低16位覆盖rll的低16位。而且,模糊 的存储器依赖关系缓解优化部114,在高16位部分存在依赖关系的情况下, 作为"valnrll、 rlll、 rl0",以r10的高16位覆盖rll的高16位。
如此,在依赖关系缓解处理(图7的S13)中实施依赖关系缓解。据此, 在图7的S14成为"是",在对缓解了依赖关系的中间代码再次检测关键路 径的情况下(图7的S15),如图12(:(15)所示,关键路径只由第一次的依据* 8 的存储器参照、带有执行可否标记的校正指令以及依据* 八的存储器代入 处理的真的依赖关系构成。即,在依据存储器参照处理的等待时间为3周 期的情况下,关键路径长度从图12C(a)的7周期变为12C(b)的4周期,而 被缩短3周期。据此,在图7的S16成为"是",递归地实施图7的S11。 在该例子的情况下,由于所有的模糊的存储器依赖关系被删除,因此在第 二次的模糊的存储器依赖关系检测处理(图9的Sll)中,不能检测依赖关系 缓解对象的存储器存取。据此,在图7的S12成为"否",模糊的存储器依 赖关系缓解优化部114结束处理。
如此,在存储器存取对象的大小不同的情况下,也通过进行模糊的存 储器依赖关系缓解处理(图7、图6的S4)、縮短关键路径,从而可以依据指 令调度处理(图6的S5)实现更高性能的中间代码,并在汇编代码输出处理 (图6的S6)中生成对象代码,从而结束编译处理。 [循环构造、在循环外进行判断〗
图13A 图13C是用于说明针对循环构造的、相同对象大小存取的依 赖关系缓解处理、且可以将比较处理处于循环外的的情况的图。
图13A是示出非循环构造的、相同对象大小存取的源程序200的一个 例子的图。该源程序200的处理内容是指,在循环内连续两次进行以下的 处理将函数的引数pA以及pB作为基准地址并将pB所指的区域的值代 入到pA所指的区域,为了使pA和pB的地址分别示出下一个要素而加上 地址值,并且,循环反复一百次所述连续两次的处理。依据地址变量pA代 入的存储区域大小(存放对象大小)和依据地址变量pB参照的存储区域大小 (装入对象大小),由于彼此的地址变量为同型,因此相同。图13B(a)是中间代码,即,所述源程序200被输入到图6所示的编译 处理中,并在图6的Sl至S3的处理中被转换后成为S4的输入的中间代码。 从该所输入的中间代码(图13B(a))中,在关键路径检测处理(图7的S10)中 可以检测图13C(a)所示的关键路径。由于第一次的依据* 八++的存储器代 入处理和第二次的依据* 8++的存储器参照处理处于模糊的存储器依赖关 系,因此该关键路径的流程成为第一次的依据* 8的存储器参照和依据+pA 的存储器代入、和第二次的依据 B的存储器参照和依据* 八的存储器代 入连续的处理。
针对该关键路径,执行模糊的存储器依赖关系检测处理(图7的Sll、 图8)。 g卩,模糊的存储器依赖关系缓解优化部114,从开头依次搜索关键 路径上的处理(图8的S20),并检测第一次的依据* 八++的存储器代入处理 和第二次的依据* 8++的存储器参照处理的模糊的存储器依赖关系(图8的 S21)。因此,在图8的S21成为"是"。
由于在所输入的中间代码中作为执行可否标记只使用C6。因此存在 C6以外的执行可否标记寄存器资源。因此,在图8的S24成为"是"。
在存储器参照处理的移动可否判断处理(S25)中,除了要考虑成为存储 器参照处理的模糊的存储器依赖关系的原因的存储器以外,还要考虑寄存 器rl以及rll。虽然,可以设想寄存器rl以及rll分别依赖于其它处理的 情况,但是,在该情况下,到移动目的地的存储器代入处理和存储器参照 处理为止不存在依据寄存器rl以及rll的定义、参照的依赖关系。因此, 可以移动存储器参照处理,并在图8的S25成为"是"。
据此,在图8的S26中,第一次的依据* 八++的存储器代入处理和第 二次的依据* 8++的存储器参照处理被判断为处于模糊的存储器依赖关 系,并在图7的S12成为"是",从而这些存储器存取处理的信息被递送到 依赖关系缓解处理(图7的S13)。对成为该模糊的存储器依赖关系的存储器 存取处理,进行依赖关系的缓解(图7的S13、图9)。
获得的存储器存取处理的模糊的存储器依赖关系是第一次的依据 * 八++的对存储器的定义和第二次的依据* 8++的对存储器的参照,因此是
真的依赖关系。据此,在图9的S30成为"是",模糊的存储器依赖关系缓 解优化部114,如图138(1))所示将第二次的依据* 8++的对存储器参照处理移动到第一次的依据* 八++的对存储器代入处理的前面(图9的S31)。由于 这些存储器存取处理的依据pA的存放对象大小和依据pB的装入对象大小 相同,因此在图9的S32成为"是",并且,由于在循环内存在处理,因此 在图9的S35成为"是"。
由于地址变量pA以及pB,分别在循环内作为pA++、 ?8++按每一个 要素固定地增加,因此在图9的S35成为"是"。
模糊的存储器依赖关系缓解优化部114,将地址比较处理插入到循环的 前置节点处理的最末尾(图9的S38),在所述地址比较处理中,比较依据地 址变量pB分配的寄存器rl的值和依据地址变量pA分配的寄存器r0的值 来判断是否一致。
最后,模糊的存储器依赖关系缓解优化部114,为了在模糊的存储器依 赖关系中实际发生依赖关系时准确地保持逻辑,将带有执行可否标记的校 正指令插入到所移动的fpB的存储器参照处理之后(图9的S39),使得在地 址一致的情况下,通过执行可否标记寄存器以rlO覆盖rll,所述rl0是依 据tpA的存储器代入处理所代入的值,所述rll是依据* 8的存储器参照处 理而获得的值。
如此,在依赖关系缓解处理(图7的S13)中实施依赖关系缓解。据此, 在图7的S14成为"是",在对缓解了依赖关系的中间代码再次检测关键路 径的情况下(图7的S15),如图130(1))所示,关键路径只由第一次的依据* 8 的存储器参照、带有执行可否标记的校正指令以及依据* 八的存储器代入 处理的真的依赖关系构成。即,在依据存储器参照处理的等待时间为3周 期的情况下,关键路径长度从图13C(a)的7周期变为13C(b)的4周期,而 被縮短3周期。据此,在图7的S16成为"是",递归地实施图7的S11。 在该例子的情况下,由于所有的模糊的存储器依赖关系被删除,因此在第 二次的模糊的存储器依赖关系检测处理(图9的Sll)中,不能检测依赖关系 缓解对象的存储器存取。据此,在图7的S12成为"否",模糊的存储器依 赖关系缓解优化部114结束处理。
如此,通过进行模糊的存储器依赖关系缓解处理(图7、图6的S4)、縮 短关键路径,从而可以依据指令调度处理(图6的S5)实现更高性能的中间 代码,并在汇编代码输出处理(图6的S6)中生成对象代码,从而结束编译
32处理。
图14A 图14C是用于说明针对循环构造的、相同对象大小存取的依 赖关系缓解处理、且需要将比较处理处于循环内的情况的图。
图14A是示出循环构造的源程序200的一个例子的图。该源程序200 的处理内容是指,反复循环一百次进行进行更新的处理和进行加上的处理: 所述进行更新的处理是指,将函数的引数pA以及pB作为基准地址并将pB 所示的区域的值代入到pA所指的区域,将引数inc所指定的数值作为增量 值来更新pA的地址,为了使pB示出下一个要素而更新地址;所述进行加 上的处理是指,依据更新后的pA和pB的地址,将pB所指的区域的值代 入到pA所指的区域,并为了使两个地址分别示出下一个要素而加上地址 值。依据地址变量pA代入的存储区域大小(存放对象大小)和依据地址变量 pB参照的存储区域大小(装入对象大小),由于彼此的地址变量为同型,因 此相同。
图14B(a)是中间代码,即,所述源程序200被输入到图6所示的编译 处理中,并在图6的Sl至S3的处理中被转换后成为S4的输入的中间代码。 从该所输入的中间代码(图14B(a))中,在关键路径检测处理(图7的S10)中 可以检测图14C(a)所示的关键路径。由于第一次的依据* 八++的存储器代 入处理和第二次的依据* 8++的存储器参照处理处于模糊的存储器依赖关 系,因此该关键路径的流程成为第一次的依据+pB的存储器参照和依据* 八 的存储器代入、和第二次的依据+pB的存储器参照和依据+pA的存储器代 入连续的处理。
针对该关键路径,执行模糊的存储器依赖关系检测处理(图7的Sll、 图8)。 S卩,模糊的存储器依赖关系缓解优化部114,从开头依次搜索关键 路径上的处理(图8的S20),并检测第一次的依据* 八++的存储器代入处理 和第二次的依据* 8++的存储器参照处理的模糊的存储器依赖关系(图8的 S21)。因此,在图8的S21成为"是"。
由于在所输入的中间代码中作为执行可否标记只使用C6。因此存在 C6以外的执行可否标记寄存器资源。因此,在图8的S24成为"是"。
在存储器参照处理的移动可否判断处理(S25)中,除了要考虑成为存储器参照处理的模糊的存储器依赖关系的原因的存储器以外,还要考虑寄存
器rl以及rll。虽然,可以设想寄存器rl以及rll分别依赖于其它处理的 情况,但是,在该情况下,到移动目的地的存储器代入处理和存储器参照 处理为止不存在依据寄存器rl以及rll的定义、参照的依赖关系。因此, 可以移动存储器参照处理,并在图8的S25成为"是"。
据此,在图8的S26中,第一次的依据* 八++的存储器代入处理和第 二次的依据* 8++的存储器参照处理被判断为处于模糊的存储器依赖关 系,并在图7的S12成为"是",从而这些存储器存取处理的信息被递送到 依赖关系缓解处理(图7的S13)。对成为该模糊的存储器依赖关系的存储器 存取处理,进行依赖关系的缓解(图7的S13、图9)。
获得的存储器存取处理的模糊的存储器依赖关系是第一次的依据 *卩八++的对存储器的定义和第二次的依据* 8++的对存储器的参照,因此是 真的依赖关系。据此,在图9的S30成为"是",模糊的存储器依赖关系缓 解优化部114,如图138(13)所示将第二次的依据* 8++的对存储器参照处理 移动到第一次的依据* 八++的对存储器代入处理的前面(图9的S31)。由于 这些存储器存取处理的依据pA的存放对象大小和依据pB的装入对象大小 相同,因此在图9的S32成为"是",并且,由于在循环内存在处理,因此 在图9的S35成为"是"。
对于地址变量pA以及pB的增量值,在循环内地址变量pA的增量值 是+l和+inc、地址变量pB的增量值是+l和+l,有可能分别具有不同增量 值,因此在S37成为"否"。
在S37成为"否"的情况下,需要每次实施循环内的依赖关系判断, 而且在先行处理中不存在原有的地址比较处理,因此在图9的S36成为 "否"。据此,模糊的存储器依赖关系缓解优化部114,将地址比较处理, 插入到图9的S31中所移动的存储器参照处理的紧前面(图9的S40),在所 述地址比较处理中,比较依据地址变量pB分配的寄存器rl的值和依据地 址变量pA分配的寄存器r0的值来判断是否一致。
最后,模糊的存储器依赖关系缓解优化部114,为了在模糊的存储器依 赖关系中实际发生依赖关系时准确地保持逻辑,将带有执行可否标记的校 正指令插入到所移动的tpB的存储器参照处理之后(图9的S39),使得在地址一致的情况下,通过执行可否标记寄存器以rlO覆盖rll,所述rl0是依 据+pA的存储器代入处理所代入的值,所述rll是依据* 8的存储器参照处 理而获得的值。
如此,在依赖关系缓解处理(图7的S13)中实施依赖关系缓解。据此, 在图7的S14成为"是",在对缓解了依赖关系的中间代码再次检测关键路 径的情况下(图7的S15),如图14C(b)所示,关键路径只由第一次的依据承pB 的存储器参照、带有执行可否标记的校正指令以及依据* 厶的存储器代入 处理的真的依赖关系构成。即,在依据存储器参照处理的等待时间为3周 期的情况下,关键路径长度从图14C(a)的7周期变为14C(b)的4周期,而 被縮短3周期。据此,在图7的S16成为"是",递归地实施图7的S11。 在该例子的情况下,由于所有的模糊的存储器依赖关系被删除,因此在第 二次的模糊的存储器依赖关系检测处理(图9的Sll)中,不能检测依赖关系 缓解对象的存储器存取。据此,在图7的S12成为"否",模糊的存储器依 赖关系缓解优化部114结束处理。
如此,在每个存储器存取的地址增量值不同的情况下,也通过进行模 糊的存储器依赖关系缓解处理(图7、图6的S4)、縮短关键路径,从而可以 依据指令调度处理(图6的S5)实现更高性能的中间代码,并且以汇编代码 输出处理(图6的S6)来生成对象代码,从而结束编译处理。
图15A以及图15B是用于说明针对循环构造的、不同对象大小存取(小 —大第一次的存储器存取大小与第二次的存储器存取大小相比小)的依赖 关系缓解处理的图。
图15A是示出循环构造的、不同对象大小存取的源程序200的一个例 子的图。
该源程序200的处理内容是指,在循环内连续两次进行以下的处理 将函数的引数pA以及pB作为基准地址并将pB所指的区域的值代入到pA 所指的区域,为了使pA和pB的地址分别示出下一个要素而加上地址值, 并且,循环反复一百次所述连续两次的处理。依据地址变量pA代入的存储 区域大小(存放对象大小)和依据地址变量pB参照的存储区域大小(装入对 象大小),由于分别是4字节和2字节,因此存放对象大小与装入对象大小相比大。
图15B(a)是中间代码,即,所述源程序200被输入到图6所示的编译 处理中,并在图6的Sl至S3的处理中被转换后成为S4的输入的中间代码。 从该所输入的中间代码(图15B(a))中,在关键路径检测处理(图7的S10)中 可以检测与图11C(a)相同的关键路径。由于第一次的依据* 八++的存储器 代入处理和第二次的依据* 8++的存储器参照处理处于模糊的存储器依赖 关系,因此该关键路径的流程成为第一次的依据申pB的存储器参照和依据 *pA的存储器代入、和第二次的依据fpB的存储器参照和依据+pA的存储 器代入连续的处理。
针对该关键路径,执行模糊的存储器依赖关系检测处理(图7的Sll、 图8)。即,模糊的存储器依赖关系缓解优化部114,从开头依次搜索关键 路径上的处理(图8的S20),并检测第一次的依据* 八++的存储器代入处理 和第二次的依据* 8++的存储器参照处理的模糊的存储器依赖关系(图8的 S21)。因此,在图8的S21成为"是"。
由于在所输入的中间代码中作为执行可否标记只使用C6。因此存在 C6以外的执行可否标记寄存器资源。因此,在图8的S24成为"是"。
在存储器参照处理的移动可否判断处理(S25)中,除了要考虑成为存储 器参照处理的模糊的存储器依赖关系的原因的存储器以外,还要考虑寄存 器rl以及rll。虽然,可以设想寄存器rl以及rll分别依赖于其它处理的 情况,但是,在该情况下,到移动目的地的存储器代入处理和存储器参照 处理为止不存在依据寄存器rl以及rll的定义、参照的依赖关系。因此, 可以移动存储器参照处理,并在图8的S25成为"是"。
据此,在图8的S26中,第一次的依据* 八++的存储器代入处理和第 二次的依据* 8++的存储器参照处理被判断为处于模糊的存储器依赖关 系,并在图7的S12成为"是",从而这些存储器存取处理的信息被递送到 依赖关系缓解处理(图7的S13)。对成为该模糊的存储器依赖关系的存储器 存取处理,进行依赖关系的缓解(图7的S13、图9)。
获得的存储器存取处理的模糊的存储器依赖关系是第一次的依据 * 八++的对存储器的定义和第二次的依据* 8++的对存储器的参照,因此是 真的依赖关系。据此,在图9的S30成为"是",模糊的存储器依赖关系缓解优化部114,如图158(1))所示将第二次的依据* 8++的对存储器参照处理 移动到第一次的依据* 八++的对存储器代入处理的前面(图9的S31)。由于 这些存储器存取处理的依据pA的存放对象大小和依据pB的装入对象大小 不同,因此在图9的S32成为"否"。
在图9的S32成为"否"的情况下,模糊的存储器依赖关系缓解优化 部114,将地址范围比较处理插入到存储器参照处理的紧前面(图9的S33)。 如下求出地址范围比较处理。即,由于依据pA的存放对象大小和依据pB 的装入对象大小分别是4字节和2字节,因此可求出最大公约数gcd为2、 比较次数n为4字节/gcd(4字节、2字节)gp 2。而且,由于依据地址变量 pB分配的寄存器是rl、依据地址变量pA分配的寄存器是rO,因此作为地 址范围比较处理,可求出对r0==rl+2*0和r0==rl+2*l的两个地址一致进行 的比较处理。模糊的存储器依赖关系缓解优化部114,将如此求出的地址范 围比较处理插入到存储器参照处理的紧前面(图9的S33)。在图15B(b)的中 间代码中,为了高效地进行所述比较处理,取两个地址的异或,并且进行 比较处理来判断其结果为零、还是两个地址的差距为2字节。
最后,模糊的存储器依赖关系缓解优化部114,为了在模糊的存储器依 赖关系中实际发生依赖关系时准确地保持逻辑,将带有执行可否标记的校 正指令插入到所移动的* 8的存储器参照处理之后(图9的S34),使得在地 址一致的情况下,通过执行可否标记寄存器以r10覆盖只在rll中相当于存 在依赖关系的存储区域部分的数据部分(与图11D相同),所述r10是依据 *pA的存储器代入处理所代入的值,所述rll是依据* 8的存储器参照处理 而获得的值。模糊的存储器依赖关系缓解优化部114,在图11B(b)的中间 代码中,如图IID的校正处理的存储图像所示,在低16位部分存在依赖关 系的情况下,作为"extrrll、 r10、 15、 0",对r10的从第0位到第15位 的16位进行扩展符号后覆盖r11。而且,模糊的存储器依赖关系缓解优化 部114,在高16位部分存在依赖关系的情况下,作为"extrrll、 r10、 31、 16",对H0的从第16位到第31位的16位进行扩展符号后覆盖r11。符号 扩展的需要的有无,应该符合rll的存储器参照指令的工作。在此情况下, 由于对ldh处理设想将16位数据符号扩展为32位来代入到寄存器,因此 设想对校正处理也需要实施符号扩展,而以extr处理进行符号扩展。如此,在依赖关系缓解处理(图7的S13)中实施依赖关系缓解。据此, 在图7的S14成为"是",在对缓解了依赖关系的中间代码再次检测关键路 径的情况下(图7的S15),,与图llC(b)相同,关键路径只由第一次的依据 *pB的存储器参照、带有执行可否标记的校正指令以及依据* 八的存储器 代入处理的真的依赖关系构成。即,在依据存储器参照处理的等待时间为3 周期的情况下,关键路径长度从图11C(a)的7周期变为11C(b)的4周期, 而被縮短3周期。据此,在图7的S16成为"是",递归地实施图7的S11。 在该例子的情况下,由于,所有的模糊的存储器依赖关系被删除,因此在 第二次的模糊的存储器依赖关系检测处理(图9的Sll)中,不能检测依赖关 系缓解对象的存储器存取,因此,在图7的S12成为"否",模糊的存储器 依赖关系缓解优化部114结束处理。
如此,在存储器存取对象的大小不同的情况下,也通过进行模糊的存 储器依赖关系缓解处理(图7、图6的S4)、縮短关键路径,从而可以依据指 令调度处理(图6的S5)实现更高性能的中间代码,并以汇编代码输出处理 (图6的S6)来生成对象代码,从而结束编译处理。
图16A以及图16B是用于说明针对循环构造的、不同对象大小存取(大 —小第一次的存储器存取大小与第二次的存储器存取大小相比小)的依赖 关系缓解处理的图。
图16A是示出循环构造的、不同对象大小存取的源程序200的一个例 子的图。
该源程序200的处理内容是指,在循环内连续两次进行以下的处理 将函数的引数pA以及pB作为基准地址并将pB所指的区域的值代入到pA 所指的区域,为了使pA和pB的地址分别示出下一个要素而加上地址值, 并且,循环反复一百次所述连续两次的处理。依据地址变量pA代入的存储 区域大小(存放对象大小)和依据地址变量pB参照的存储区域大小(装入对 象大小),由于分别是2字节和4字节,因此装入对象大小与存放对象大小 相比大。
图16B(a)是中间代码,BP,所述源程序200被输入到图6所示的编译 处理中,并在图6的Sl至S3的处理中被转换后成为S4的输入的中间代码。从该所输入的中间代码(图16B(a))中,在关键路径检测处理(图7的S10)中 可以检测与图12C(a)相同的关键路径。由于第一次的依据* 八4+的存储器 代入处理和第二次的依据* 8++的存储器参照处理处于模糊的存储器依赖 关系,因此该关键路径的流程成为第一次的依据+pB的存储器参照和依据 *pA的存储器代入、和第二次的依据* 8的存储器参照和依据* 八的存储 器代入连续的处理。
针对该关键路径,执行模糊的存储器依赖关系检测处理(图7的S11、 图8)。 g卩,模糊的存储器依赖关系缓解优化部114,从开头依次搜索关键 路径上的处理(图8的S20),并检测第一次的依据* 八++的存储器代入处理 和第二次的依据* 8++的存储器参照处理的模糊的存储器依赖关系(图8的 S21)。因此,在图8的S21成为"是"。
由于在所输入的中间代码中作为执行可否标记只使用C6。因此存在 C6以外的执行可否标记寄存器资源。因此,在图8的S24成为"是"。
在存储器参照处理的移动可否判断处理(S25)中,除了要考虑成为存储 器参照处理的模糊的存储器依赖关系的原因的存储器以外,还要考虑寄存 器rl以及rll。虽然,可以设想寄存器rl以及rll分别依赖于其它处理的 情况,但是,在该情况下,到移动目的地的存储器代入处理和存储器参照 处理为止不存在依据寄存器rl以及rll的定义、参照的依赖关系。因此, 可以移动存储器参照处理,并在图8的S25成为"是"。
据此,在图8的S26中,第一次的依据* 八++的存储器代入处理和第 二次的依据* 8++的存储器参照处理被判断为处于模糊的存储器依赖关 系,并在图7的S12成为"是",从而这些存储器存取处理的信息被递送到 依赖关系缓解处理(图7的S13)。对成为该模糊的存储器依赖关系的存储器 存取处理,进行依赖关系的缓解(图7的S13、图9)。
获得的存储器存取处理的模糊的存储器依赖关系是第一次的依据 * 八++的对存储器的定义和第二次的依据* 8++的对存储器的参照,因此是 真的依赖关系。据此,在图9的S30成为"是",模糊的存储器依赖关系缓 解优化部114,如图168(1>)所示将第二次的依据* 8++的对存储器参照处理 移动到第一次的依据* 八++的对存储器代入处理的前面(图9的S31)。由于 这些存储器存取处理的依据pA的存放对象大小和依据pB的装入对象大小
39不同,因此在图9的S32成为"否"。
在图9的S32成为"否"的情况下,模糊的存储器依赖关系缓解优化 部114,将地址范围比较处理插入到存储器参照处理的紧前面(图9的S33)。 如下求出地址范围比较处理。即,由于依据pA的存放对象大小和依据pB 的装入对象大小分别是2字节4字节,因此可求出最大公约数gcd为2、比 较次数n为4字节/gcd(2字节、4字节)即2。而且,由于依据地址变量pB 分配的寄存器是rl、依据地址变量pA分配的寄存器是r0,因此作为地址 范围比较处理,可求出对rl=r0+2*0和rl=r0+2*l的两个地址一致进行的 比较处理。模糊的存储器依赖关系缓解优化部114,将如此求出的地址范围 比较处理插入到存储器参照处理的紧前面(图9的S33)。在图16B(b)的中间 代码中,为了高效地进行所述比较处理,取两个地址的异或,并且进行比 较处理来判断其结果为零、还是两个地址的差距为2字节。
最后,模糊的存储器依赖关系缓解优化部114,为了在模糊的存储器依 赖关系中实际发生依赖关系时准确地保持逻辑,将带有执行可否标记的校 正指令插入到所移动的4pB的存储器参照处理之后(图9的S34),使得在地 址一致的情况下,通过执行可否标记寄存器以r10中相当于存在依赖关系 的存储区域部分的数据部分覆盖在rll,所述"0是依据* 八的存储器代入 处理所代入的值,所述rll是依据+pB的存储器参照处理而获得的值。模糊 的存储器依赖关系缓解优化部114,在图16B(b)的中间代码中,与图12D 的校正处理的存储图像相同,在低16位部分存在依赖关系的情况下,作为 "valnrll、 r10、 rll",以r10的低16位覆盖rll的低16位。而且,模糊 的存储器依赖关系缓解优化部114,在高16位部分存在依赖关系的情况下, 作为"valnrll、 rll、 rl0",以r10的高16位覆盖rll的高16位。
如此,在依赖关系缓解处理(图7的S13)中实施依赖关系缓解。据此, 在图7的S14成为"是",在对缓解了依赖关系的中间代码再次检测关键路 径的情况下(图7的S15),与图12C(b)相同,关键路径只由第一次的依据氺pB 的存储器参照、带有执行可否标记的校正指令以及依据tpA的存储器代入 处理的真的依赖关系构成。即,在依据存储器参照处理的等待时间为3周 期的情况下,关键路径长度从图11C(a)的7周期变为11C(b)的4周期,而 被縮短3周期。据此,在图7的S16成为"是",递归地实施图7的S11。在该例子的情况下,由于,所有的模糊的存储器依赖关系被删除,因此在
第二次的模糊的存储器依赖关系检测处理(图9的Sll)中,不能检测依赖关 系缓解对象的存储器存取。据此,在图7的S12成为"否",模糊的存储器 依赖关系缓解优化部114结束处理。
如此,在存储器存取对象的大小不同的情况下,也通过进行模糊的存 储器依赖关系缓解处理(图7、图6的S4)、縮短关键路径,从而可以依据指 令调度处理(图6的S5)实现更高性能的中间代码,并在汇编代码输出处理 (图6的S6)中生成对象代码,从而结束编译处理。
图17A 图17C是用于说明针对非循环构造的、相同对象大小存取连 续的情况下的依赖关系缓解处理的图。
图17A是示出非循环构造的、相同对象大小存取连续的源程序200的 一个例子的图。
该源程序200的处理内容是指,连续两次以上进行以下处理将函数 的引数pA以及pB作为基准地址来将pB所示的区域的值代入到pA所示 的区域、且为了使pA和pB分别示出下一个要素而加上地址值。依据地址 变量pA代入的存储区域大小(存放对象大小)和依据地址变量pB参照的存 储区域大小(装入对象大小),由于彼此的地址变量为同型,因此相同。
图17B(a)是中间代码,即,所述源程序200被输入到图6所示的编译 处理中,并在图6的Sl至S3的处理中被转换后成为S4的输入的中间代码。 依据该所输入的中间代码(图17B(a)),通过所述图10A 图10C中说明的 转换,从而生成如图17B(b)的依赖关系缓解后的中间代码,进一步,对中 间代码上的后续的模糊的存储器依赖关系实施同样的依赖关系缓解。此时, 在前面的地址比较指令判断处理(图9的S36)中,像图17C(a)的中间代码那 样,应该在第三次的依据* 8++的存储器存取处理"ldrl2、 (rl+)"的紧前 面插入"cmpeqCO、 rl、 r0"。然而,在前面存在同样的cmp叫处理,并且 比较地址变量为pA(rO)和pB(rl),并且处于从前一个cmpeq处理到预定插 入的ld处理的紧前面为止的比较地址变量pA以及pB的增量值是固定的。 因此,被判断为可以挪用地址比较处理。据此,模糊的存储器依赖关系缓 解优化部114,不插入地址比较处理,而挪用原有的地址比较处理的结果即执行可否标记寄存器,插入校正处理(图9的S39)。
如此,在连续的存储器存取的依赖关系缓解中,通过缓解地址比较处 理,从而可以实现性能更高的中间代码(图17C(b))。
在成为优化抑制指示的编译选项被指定的情况下,在优化信息解析处 理(图6的S2),编译选项被解析。其结果是,即使在例如所述图10A 图 10C的包含成为优化对象的模糊的依赖关系的源程序200被输入的情况下, 也按照优化信息解析处理(图6的S2)的解析结果,与所述相同被转换的中 间代码在图7的S9成为"否",从而可以抑制模糊的存储器依赖关系缓解 优化、可以防止生成机械语言代码大小的增加。
在成为优化特定指示的存储器依赖关系缓解优化是关于模糊的存储器 依赖关系缓解的指定的情况下,在优化信息解析处理(图6的S2)中解析符 号信息。其结果是,在例如所述图10A 图10C的包含成为优化对象的模 糊的存储器依赖关系的源程序200被输入的情况下,在图8的S22成为 "是"。因此,模糊的存储器依赖关系缓解优化部114,确认符号信息中是 否包含所指定的pA和pB,在不包含的情况下,S23成为"否",而对下一 个模糊的存储器依赖关系继续进行处理,在包含的情况下,S23成为"是", 而继续进行S24以后的模糊的存储器依赖关系缓解处理。如此,可以确定 模糊的存储器依赖关系的缓解对象,也可以调整代码大小的增加和执行性 能的平衡。
如上所述,根据本实施例涉及的编译系统,通过将地址比较处理和按 照该结果的校正处理插入到模糊的存储器依赖关系处理,从而缓解模糊的 存储器依赖关系。据此,可以縮短关键路径、可以提高程序执行时的处理 速度。
在上面,对于本发明的实施例涉及的编译系统,虽然根据实施例说明 了,但是本发明不仅限于该实施例。
在所述实施例中,虽然设想用于C语言的编译系统,但是本发明不仅 限于c语言。即使在采用其它程序语言的情况下,也可以保持本发明的意义。在所述实施例中,虽然作为编程员抑制依赖关系缓解优化的用户接口 采用编译选项,但是本发明不仅限于该接口。例如,可以以编译指示指定 来传达。并且,对于传达方法,不仅限于像所述实施例那样的、以文件为 单位来指定的方法,而是记述处理范围的形式。
在所述实施例中,虽然作为编程员指定依赖关系缓解对象的用户接口 采用编译选项,但是本发明不仅限于该接口。例如,可以以选项指定来传 达。并且,对于传达方法,不仅限于像所述实施例那样的、记述符号信息 的方法,而可以是记述处理范围的形式。进一步,作为指定范围的粒度, 可以以更大的粒度即以文件为单位来指定用途。
在所述实施例中,虽然作为存储器存取处理设想数据高速缓存或内置、 外部存储器,但是本发明不仅限于存储空间。对其它共享资源的处理,也 可以保持本发明的意义。例如,也可以是,向资源有可能动态地被共享的
存储变换(Memory-mapped)外部端口的存取指令等其它指令。
在所述实施例中,虽然设想关于模糊的存储器依赖关系的依赖关系缓 解,但是本发明不仅限于模糊的存储器依赖关系。例如,在存在不模糊的 真的存储器依赖关系的情况下,也可以保持本发明的意义。
在所述实施例中,虽然设想产生互锁(在产生数据依赖关系的指令间先 行指令的执行结果未被转发到后续指令所参照的寄存器的情况下,后续指 令的执行被处理器动态地停止的现象)的目标处理器,但是本发明不仅限于 此。本发明也可以适用于采用应该不产生互锁而静态地解决这些问题的结 构的处理器。
例如,若不是以通过模糊的存储器依赖关系缓解优化部114缓解依赖 关系为目的,而是以删除不必要的等待时间为目的,则不调换装入处理和 存放处理,也可以縮短关键路径。
在所述实施例中,虽然插入按照所述地址比较处理的结果的、依据执 行可否标记的附带条件的校正处理,但是本发明中不将执行可否标记仅限 于校正处理。例如,通过装入处理也被附带执行可否条件,从而可以缓解 不必要的情况下的装入处理。
应该认为的是,这次所公开的实施例中的所有内容是举例说明的,因 此不仅限于此例子。对于本发明的范围,不是依据所述说明示出的、而是依据权利要求的范围示出的,并且,意味着包含与权利要求的范围相等的 意思以及范围内的所有的变更。
本发明可以适用于缓解资源有可能动态地被共享的指令的模糊的依赖
关系的编译器、操作系统(Operating System)、被处理器执行的进程等。
权利要求
1、 一种程序重写装置,将输入程序重写为用于处理器的程序,该处理 器可以根据执行可否标记来控制处理的执行可否,所述程序重写装置包括:比较处理插入单元,将比较处理插入到所述输入程序中,所述比较处 理所进行的处理是,对第一地址信息和第二地址信息进行比较,而将比较 结果写入到执行可否标记中,所述第一地址信息是所述输入程序中包含的 第一存储器存取处理所存取的存储器的地址信息,所述第二地址信息是所述输入程序中包含的第二存储器存取处理所存取的存储器的地址信息;以及逻辑保证处理插入单元,将带有执行可否标记的逻辑保证处理插入到 所述输入程序中,所述逻辑保证处理是,根据所述执行可否标记的值执行 的处理、且是用于保证与所述输入程序的执行时相同的处理结果的处理。
2、 如权利要求1所述的程序重写装置,所述第一存储器存取处理是存放处理,将数据写入到存储器中; 所述第二存储器存取处理是装入处理,从存储器中读取数据。
3、 如权利要求2所述的程序重写装置,还包括关键路径检测单元,从所述输入程序中检测成为关键路径的处理;以及模糊的存储器依赖关系解析单元,判断所述关键路径检测单元所检测 的关键路径中是否包含所述第一存储器存取处理和所述第二存储器存取处 理,在包含所述第一存储器存取处理和所述第二存储器存取处理的情况下, 解析所述第一存储器存取处理和所述第二存储器存取处理之间是否存在模 糊的真的存储器依赖关系,所述比较处理插入单元,将第一地址信息以及第二地址信息作为比较 的对象,将比较处理插入到所述输入程序中,所述第一地址信息以及第二 地址信息分别与由所述模糊的存储器依赖关系解析单元判断为处于模糊的真的存储器依赖关系的所述第一存储器存取处理以及所述第二存储器存取 处理相对应。
4、 如权利要求3所述的程序重写装置,还包括,执行顺序变更单元,将由所述模糊的存储器依赖关系解析单 元判断为处于模糊的真的存储器依赖关系的所述第一存储器存取处理和所 述第二存储器存取处理的执行顺序变更。
5、 如权利要求4所述的程序重写装置,还包括,数据大小比较单元,判断是否满足以下条件,即,所述第一 存储器存取处理一次存取的数据大小与所述第二存储器存取处理一次存取 的数据大小相同,所述逻辑保证处理插入单元,在由所述数据大小比较单元判断为满足 所述条件的情况下,将覆盖处理作为所述逻辑保证处理插入到所述输入程 序中,所述覆盖处理是指,以所述第一存储器存取处理写入到存储器中的 值覆盖所述第二存储器存取处理从存储器中读取的值的处理。
6、 如权利要求5所述的程序重写装置,所述比较处理插入单元,将所述比较处理插入在所述逻辑保证处理的 前面的一个地方,以作为执行顺序。
7、 如权利要求5所述的程序重写装置,还包括,规则性判断单元,判断是否满足以下条件,即,所述第一以 及第二存储器存取处理连续进行,并且,在各个存储器存取处理中所存取 的存储器的地址规则性地被更新,所述比较处理插入单元,在由所述规则性判断单元判断为满足所述条 件的情况下,将所述比较处理插入到对所述第一以及第二存储器存取处理 的开头的所述逻辑保证处理的前面的位置,以作为执行顺序。
8、 如权利要求5所述的程序重写装置,还包括,规则性判断单元,判断是否满足以下条件,S卩,反复执行所 述第一以及第二存储器存取处理,并且,在各个存储器存取处理中所存取 的存储器的地址规则性地被更新,所述比较处理插入单元,在由所述规则性判断单元判断为满足所述条 件的情况下,将所述比较处理插入到所述第一以及第二存储器存取处理的 反复的前面的位置,以作为执行顺序。'
9、 如权利要求4所述的程序重写装置,还包括,数据大小比较单元,判断是否满足以下条件,g卩,所述第二 存储器存取处理一次存取的数据大小比所述第一存储器存取处理一次存取 的数据大小小,所述逻辑保证处理插入单元,在由所述数据大小比较单元判断为满足 所述条件的情况下,将覆盖处理作为所述逻辑保证处理插入到所述输入程 序中,所述覆盖处理是指,以所述第一存储器存取处理写入到存储器中的 值的一部分覆盖所述第二存储器存取处理从存储器中读取的值的处理。
10、 如权利要求4所述的程序重写装置,还包括,数据大小比较单元,判断是否满足以下条件,即,所述第二 存储器存取处理一次存取的数据大小比所述第一存储器存取处理一次存取 的数据大小大,所述逻辑保证处理插入单元,在由所述数据大小比较单元判断为满足 所述条件的情况下,将覆盖处理作为所述逻辑保证处理插入到所述输入程 序中,所述覆盖处理是指,以所述第一存储器存取处理写入到存储器中的 值覆盖所述第二存储器存取处理从存储器中读取的值的一部分的处理。
11、 如权利要求1所述的程序重写装置,还包括,优化指定信息附加单元,接受与优化有关的优化指示信息, 所述比较处理插入单元以及所述逻辑保证处理插入单元,根据所述优 化指定信息附加单元接受的所述优化指示信息,选择性地进行工作。
12、 如权利要求ll所述的程序重写装置,所述优化指定信息附加单元,接受与模糊的存储器依赖关系缓解的实 施抑制有关的优化指示信息,在所述优化指定信息附加单元接受所述与模糊的存储器依赖关系缓解 的实施抑制有关的优化指示信息的情况下,所述比较处理插入单元以及所 述逻辑保证处理插入单元不进行工作。
13、 如权利要求ll所述的程序重写装置,所述优化指定信息附加单元,接受确定模糊的存储器依赖关系缓解对 象的存储器存取处理的符号信息,所述比较处理插入单元,将与所述优化指定信息附加单元接受的符号 信息所确定的存储器存取处理相对应的地址信息作为比较的对象,将所述 比较处理插入到所述输入程序中。
14、 一种程序重写方法,将输入程序重写为用于处理器的程序,该处 理器根据执行可否标记来可以控制处理的执行可否,所述程序重写方法包括比较处理插入步骤,将比较处理插入到所述输入程序中,所述比较处 理所进行的处理是,对第一地址信息和第二地址信息进行比较,而将比较 结果写入到执行可否标记中,所述第一地址信息是所述输入程序中包含的 第一存储器存取处理所存取的存储器的地址信息,所述第二地址信息是所述输入程序中包含的第二存储器存取处理所存取的存储器的地址信息;以 及逻辑保证处理插入步骤,将带有执行可否标记的逻辑保证处理插入到 所述输入程序中,所述逻辑保证处理是,根据所述执行可否标记的值执行 的处理、且是用于保证与所述输入程序的执行时相同的处理结果的处理。
15、 如权利要求14所述的程序重写方法,所述第一存储器存取处理是存放处理,将数据写入到存储器中, 所述第二存储器存取处理是装入处理,从存储器中读取数据。
16、 如权利要求15所述的程序重写方法,还包括关键路径检测步骤,从所述输入程序中检测成为关键路径的处理;以及模糊的存储器依赖关系解析步骤,判断在所述关键路径检测步骤所检 测的关键路径中是否包含所述第一存储器存取处理和所述第二存储器存取 处理,在包含所述第一存储器存取处理和所述第二存储器存取处理的情况 下,解析所述第一存储器存取处理和所述第二存储器存取处理之间是否存 在模糊的真的存储器依赖关系,所述比较处理插入步骤,将第一地址信息以及第二地址信息作为比较 的对象,将比较处理插入到所述输入程序中,所述第一地址信息以及第二 地址信息分别与在所述模糊的存储器依赖关系解析步骤判断为处于模糊的 真的存储器依赖关系的所述第一存储器存取处理以及所述第二存储器存取 处理相对应。
17、 如权利要求16所述的程序重写方法,还包括,执行顺序变更步骤,将在所述模糊的存储器依赖关系解析步 骤判断为处于模糊的真的存储器依赖关系的所述第一存储器存取处理和所 述第二存储器存取处理的执行顺序变更。
18、 如权利要求17所述的程序重写方法,还包括,数据大小比较步骤,判断是否满足以下条件,即,所述第一 存储器存取处理一次存取的数据大小与所述第二存储器存取处理一次存取 的数据大小相同,所述逻辑保证处理插入步骤,在所述数据大小比较步骤判断为满足所 述条件的情况下,将覆盖处理作为所述逻辑保证处理插入到所述输入程序 中,所述覆盖处理是指,以所述第一存储器存取处理写入到存储器中的值 覆盖依据所述第二存储器存取处理从存储器中读取的值的处理。
19、 如权利要求18所述的程序重写方法,在所述比较处理插入步骤,将所述比较处理插入在所述逻辑保证处理 的前面的一个地方,以作为执行顺序。
20、 一种程序,将输入程序重写为用于处理器的程序,该处理器根据 执行可否标记来可以控制处理的执行可否,所述程序使计算机执行以下步骤比较处理插入步骤,将比较处理插入到所述输入程序中,所述比较处 理所进行的处理是,对第一地址信息和第二地址信息进行比较,而将比较 结果写入到执行可否标记中,所述第一地址信息是所述输入程序中包含的 第一存储器存取处理所存取的存储器的地址信息,所述第二地址信息是所述输入程序中包含的第二存储器存取处理所存取的存储器的地址信息;以 及逻辑保证处理插入步骤,将带有执行可否标记的逻辑保证处理插入到 所述输入程序中,所述逻辑保证处理是,根据所述执行可否标记的值执行 的处理、且是用于保证与所述输入程序的执行时相同的处理结果的处理。
21、 如权利要求20所述的程序,所述第一存储器存取处理是存放处理,将数据写入到存储器中, 所述第二存储器存取处理是装入处理,从存储器中读取数据。
22、 如权利要求21所述的程序, 还使计算机执行以下步骤关键路径检测步骤,从所述输入程序中检测成为关键路径的处理;以及模糊的存储器依赖关系解析步骤,判断在所述关键路径检测步骤所检 测的关键路径中是否包含所述第一存储器存取处理和所述第二存储器存取 处理,在包含所述第一存储器存取处理和所述第二存储器存取处理的情况 下,解析所述第一存储器存取处理和所述第二存储器存取处理之间是否存 在模糊的真的存储器依赖关系,所述比较处理插入步骤,将第一地址信息以及第二地址信息作为比较的对象,将比较处理插入到所述输入程序中,所述第一地址信息以及第二 地址信息分别与在所述模糊的存储器依赖关系解析步骤判断为处于模糊的 真的存储器依赖关系的所述第一存储器存取处理以及所述第二存储器存取 处理相对应。
23、 如权利要求22所述的程序,还使计算机执行, 执行顺序变更步骤,将在所述模糊的存储器依赖关系解析步骤判断为处于模糊的真的存储器依赖关系的所述第一存储器存取处理和所述第二存 储器存取处理的执行顺序变更。
24、 如权利要求23所述的程序,还使计算机执行, 数据大小比较步骤,判断是否满足以下条件,即,所述第一存储器存取处理一次存取的数据大小与所述第二存储器存取处理一次存取的数据大 小相同,所述逻辑保证处理插入步骤,在所述数据大小比较步骤判断为满足所 述条件的情况下,将覆盖处理作为所述逻辑保证处理插入到所述输入程序 中,所述覆盖处理是指,以所述第一存储器存取处理写入到存储器中的值 覆盖依据所述第二存储器存取处理从存储器中读取的值的处理。
25、 如权利要求24所述的程序,在所述比较处理插入步骤,将所述比较处理插入在所述逻辑保证处理 的前面的一个地方,以作为执行顺序。
26、 一种计算机可读的存储介质,存储程序,该程序将输入程序重写 为用于处理器的程序,该处理器根据执行可否标记来可以控制处理的执行 可否,所述程序使计算机执行以下步骤比较处理插入步骤,将比较处理插入到所述输入程序中,所述比较处 理所进行的处理是,对第一地址信息和第二地址信息进行比较,而将比较 结果写入到执行可否标记中,所述第一地址信息是所述输入程序中包含的 第一存储器存取处理所存取的存储器的地址信息,所述第二地址信息是所述输入程序中包含的第二存储器存取处理所存取的存储器的地址信息;以 及逻辑保证处理插入步骤,将带有执行可否标记的逻辑保证处理插入到所述 输入程序中,所述逻辑保证处理是,根据所述执行可否标记的值执行的处 理、且是用于保证与所述输入程序的执行时相同的处理结果的处理。
全文摘要
一种程序重写方法,将输入程序重写为用于处理器的程序,该处理器根据执行可否标记来可以控制处理的执行可否,所述程序重写方法包括比较处理插入步骤,将比较处理插入到输入程序中,所述比较处理所进行的处理是,对第一地址信息和第二地址信息进行比较,而将比较结果写入到执行可否标记中,所述第一地址信息是第一存储器存取处理所存取的存储器的地址信息,所述第二地址信息是第二存储器存取处理所存取的存储器的地址信息;以及逻辑保证处理插入步骤,将带有执行可否标记的逻辑保证处理插入到输入程序中,所述逻辑保证处理是,根据执行可否标记的值执行的处理、且是用于保证与输入程序的执行时相同的处理结果的处理。
文档编号G06F9/45GK101311901SQ200810100529
公开日2008年11月26日 申请日期2008年5月20日 优先权日2007年5月25日
发明者大门正嗣, 小川一, 川端辉雄, 瓶子岳人 申请人:松下电器产业株式会社