自动改进程序编译中的并行处理的方法及其系统的制作方法

文档序号:8344591阅读:377来源:国知局
自动改进程序编译中的并行处理的方法及其系统的制作方法
【技术领域】
[0001] 在此阐述以及描述的本发明实施例涉及软件编译以及用于为在编译过程中产生 的对象代码改进链接时间编译过程中产生的并行处理的系统和方法。
【背景技术】
[0002] 计算机软件创建是多阶段过程。计算机软件最初以源代码编写。源代码以诸如C、 C++等高级计算机语言编写。尽管这些高级计算机语言通常被人类程序员所理解,然而计算 机一般不能执行这类以高级计算机语言编写的程序。源代码被转换为计算机可执行语言, 有时称为汇编语言或处理器指令集。该转换过程称为编译,其由称为"编译器"的计算机程 序执行。
[0003] 在一些计算机系统中,可利用多处理器或类似的并行处理源。源代码可以由程序 员组织或标记以通过多处理器或处理资源并行执行。根据能够并行处理的源代码段的运算 的相对独立性,程序员可以识别这些源代码段。然而,这类由程序员实现的并行处理的识别 并不准确并且不一致。因此,对在多处理器中执行的源代码的编译不能令人满意。
[0004] 多处理器、多核处理器以及类似装置的使用持续增长。这成为提高计算机和类似 装置的处理能力的一个重要方面。因此,改进对源代码中并行处理的识别以及对源代码的 编译来开发并行处理对于适当使用这些处理装置的扩展能力是非常重要的。
【附图说明】
[0005] 本发明实施例以示例方式阐述,并不受附图中各图的限制,附图中的相同附图标 记指示相同要素。应该注意到,本公开内容中所涉及的本发明的"实施例"或"一个"实施 例并不必然指同一个实施例,其表示至少一个。
[0006] 图1是编译过程的一个实施例的流程图。
[0007] 图2是用于产生函数数据流图的过程的一个实施例的流程图。
[0008] 图3是基本函数数据流节点集的一个实施例的示图。
[0009] 图4是示例控制流结构集的一个实施例的示图。
[0010] 图5是示例控制流结构集的一个实施例的示图。
[0011] 图6至图8是构成完整程序图的示例程序的示图。
[0012] 图9是执行编译过程的计算机系统的一个实施例的示图。
【具体实施方式】
[0013] 在以下描述中,提出多个具体细节。然而,应该明白,本发明实施例可以不使用这 些具体细节而实现。在其他示例中,为了不模糊对于本描述的理解,没有对公知电路、结构 以及技术进行详细展示。然而,本领域技术人员应该意识到,本发明可以不使用这些细节而 实现。通过所含描述,本领域普通技术人员在无需过度实验的情况下也能够实现合适的功 能。
[0014] 参考附图展示的示例性实施例对附图中流程图描述的操作进行描述。然而,应该 明白,流程示图中所述的操作可以由除了参考附图论述的实施例之外的本发明的实施例执 行,并且参考附图中示图所论述的实施例可以执行与参考附图的流程示图所论述的不同的 操作。
[0015] 图中所示技术可以使用在一个或多个电子装置(例如,终端站、网络单元等)中存 储并执行的代码和数据实现。这类电子装置使用非暂时性机器可读或计算机可读存储介质 (例如,磁盘、光盘、随机存取存储器、只读存储器、闪存装置、和相变存储器)和暂时性计算 机可读传输介质(例如,电学、光学、声学或其他形式的传播信号,例如载波、红外信号、数 字信号)存储和传输(内部地和/或通过网络与其他电子装置)代码和数据。此外,这类 电子装置典型地包括耦合到一个或多个其他部件(例如一个或多个存储装置、用户输入/ 输出装置(例如,键盘、触摸屏和/或显示器)和网络连接)的一个或多个处理器集合。此 处所使用的"集合"是指有任意正整数个项目。典型地,通过一个或多个总线和桥(也称为 总线控制器)将处理器集合耦合到其他部件上。存储装置表示一个或多个非暂时性机器可 读或计算机可读通信介质。因此,给定的电子装置的存储装置典型地存储用于在该电子装 置中的一个或更多处理器集合上执行的代码和/或数据。当然,可以使用软件、固件和/或 硬件的不同组合实现本发明的实施例的一个或更多部分。
[0016] 如在此使用的,网络单元(例如,路由器、交换机、网桥等)是一种包括硬件和软件 的网络设备,其与网络中的其他设备(例如,其他网络单元,终端站等)通信地互连。某些 网络单元是为多网络功能(例如,路由、桥接、交换、层2聚合、会话边界控制、多播和/或订 户管理)提供支持和/或为多应用服务(例如,数据、语音和视频)提供支持的"多服务网 络单元"。
[0017] 计算机科学中,术语"函数"和"过程"一般可以交换使用,一般指在计算机程序中 定义的计算机执行过程。数学上,"函数"作用在参数上产生结果,对其环境没有任何其他影 响。在此,在数学意义上使用"函数",在计算科学意义上使用"过程"。
[0018] 图1是编译过程的一个实施例的流程图。编译过程将源代码转换为对象代码(块 101)。源代码可以是以计算机编程语言表示的计算机程序或计算机程序集。源代码可以是 任何诸如C、C++、Fortran或类似计算机语言的计算机编程语言形式。对象代码以另一种计 算机编程语言或类似计算机编程描述方法学来表达相同的计算机程序。在一个示例性实施 例中,对象代码可以是汇编语言或类似低级编程语言形式,并且是可执行形式。对象代码还 可以包括具有标准化表示并格式化为主要用于编译过程的模块或阶段的中间代码格式。编 译过程可以将源代码转化为任意状态的对象代码。
[0019] 编译过程可以执行对象链接和链接时间并行处理(link-time parallelization) (块103)。以下结合图2至图6对识别并行处理的过程进行描述。编译过程还可以为目标 硬件或平台指定对象代码(块105)。可以将对象代码翻译或转换为用于目标硬件或平台的 目标代码(例如语言(例如,汇编级指令))(块107)。可以使用任意类型的编译过程或任 意目标语言。编译过程可以针对单平台或相关平台集合,该相关平台集合在目标代码中的 变量可在不同平台中执行。
[0020] 图2是用于产生完整程序依赖图的过程的一个实施例的流程图。完整程序依赖图 创建过程将计算机程序转换为表达计算机程序并行处理的完整程序依赖图。将计算机程序 中的程序语句转换为标准格式的语句并构建计算机程序中的过程全局表(块201)。标准格 式为程序转换做准备并且可以是任意类型的格式或伪代码组织。标准格式可以删除程序代 码中的语法和类似部分以为其转换做准备。全局过程表包括用于每个过程的名字或类似标 识,以及用于将为每个过程构造的抽象语法树(AST)的指针或位置信息。该表可以在下面 描述的程序遍历过程中使用。
[0021] 为程序代码中的每个过程构造 AST (块203)。抽象语法树是计算机程序结构或是 程序结构中程序代码过程的树(例如,具有根、枝和叶的有向图)表示。树上的每个节点 (例如,根、枝或叶)表示诸如变量、运算符、过程调用和类似结构等的程序代码中结构。在 其他实施例中,可以使用具体语法树替代AST。
[0022] 在AST中,递归过程被识别。递归过程是直接(在其定义内)或间接(引用过 程的定义内)自引用(self-referential)的过程。递归过程被识别并被扩展或展平 (flattened)(块205)。扩展或"展平"过程通过将过程的递归定义重新表示为迭代或类似 过程而将递归定义删除。类似地,检测间接过程调用并将其转换为表格和转换节点。间接 过程调用(也称为间接函数调用)是在程序代码中没有明确调用的过程。而是使用指针或 类似指向过程的引用,并且这还可以包括使用变量来引用
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1