首页> 中国专利> 一种异构多核处理器编译器

一种异构多核处理器编译器

摘要

本发明公开了一种异构多核处理器编译器,包括预处理器(101),用于对源代码进行宏展开和续行合并得到预处理代码(107),还包括:程序分析器(102)、数据分解器(103)、单核编译器集(104)、数据合成器(105)和主核编译器(106),所述程序分析器(102)为所述预处理代码(107)添加编译指示获得待编译代码(108),采用本发明可以使用现有编译系统实现了对异构多核处理器的适用。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-03-23

    授权

    授权

  • 2013-06-19

    实质审查的生效 IPC(主分类):G06F9/45 申请日:20120713

    实质审查的生效

  • 2013-05-22

    公开

    公开

说明书

技术领域

本发明涉及一种异构多核处理器编译器。

背景技术

目前大多数处理器都是多核处理器,而多核处理器又根据各核心的架构或 功能的相同与否分为同构多核处理器和异构多核处理器。异构多核处理器因其 低成本、可重构、高性能的特点而在嵌入式系统及航空航天领域有着广泛的应 用。

异构多核处理器通常包含一个或多个功能完善的主核和多个有特殊功能的 从核。在异构多核处理器硬件的开发过程中,要对其功能进行验证和扩展,必 须有一个对应的编译系统来辅助。然而,由于异构及多个核心的特点,使异构 多核编译系统的设计相对于传统的单核编译器和同构多核编译系统的设计更加 复杂和困难。

现存的异构多核编译系统通常是从头进行全新的设计,其中某些编译器还 对传统语言进行了语法扩展。从头设计一个这样的编译系统开发周期非常长, 而没有编译系统就不能对硬件功能进行完整的测试和验证。因此,从头设计异 构多核编译系统会严重影响处理器硬件的开发速度。另外,如果对传统语言进 行语法扩展,需要编译器支持这些新的语法,增加了编译器的设计难度,并且 这些新的语法需要用户重新学习使用,增加了用户的使用难度。

发明内容

本发明的技术解决问题是:针对现有技术的不足,提供了一种异构多核处 理器编译器,使用现有编译系统实现了对异构多核处理器的适用。

本发明的技术解决方案是:

本发明在不改变编程语言语法的情况下,通过对源代码进行处理使得源代 码可利用适应异构多核处理器的个单核处理器,从而可使用现存的单核编译器 对源代码进行编译。对所述源代码进行处理的异构多核处理器编译器,包括预 处理器,程序分析器、数据分解器、单核编译器集、数据合成器和主核编译器。

所述程序分析器为所述预处理代码添加编译指示获得待编译代码;

所述数据分解器将所述待编译代码划分为用于主核待编译代码块和从核待 编译代码块;

所述单核编译器集调用所述异构多核处理器的主核对所述主核待编译代码 块进行编译获得主核可执行代码;调用所述异构多核处理器的从核对所述从核 待编译代码块进行编译获得从核可执行代码;

所述数据合成器将所述从核可执行代码转化为所述主核可识别的形式;并 将所述主核可执行代码与主核可识别的从核可执行代码合并形成最终预处理代 码;

所述主核编译器对所述最终预处理代码进行编译形成可执行代码。

所述程序分析器将所述预处理代码划分为代码模块,并根据所述代码模块 中的调用关系,向所述预处理代码中添加编译指示获得所述待编译代码。

本发明与现有技术相比具有如下优点:

本发明提供一种设计异构多核编译系统,从而克服了异构多核编译器开发 速度慢,使用困难的问题。并且此编译器能使用各单核编译器的所有功能,保 证了编译效率。本发明由于没有对源代码所用语言进行语法扩展,降低了使用 难度,直接使用现有的单核编译器,减少了设计编译器工作量,加快了编译器 开发速度,保证了设计出的编译器质量。同时,本发明保留单核编译器的所有 功能,各核代码分别编译时可以使用原有的编译优化功能,保证了生成的可执 行代码的运行效率。整个编译器由多个独立组件构成,各部分间无耦合,如需 以本设计为基础改进编译器,可以容易的添加或裁剪编译器组件,便于进行功 能扩展。进一步采用本发明对各编程语言具有很好的兼容性,只要更改分解模 块的定义、依赖性分析方法和单核编译器集,即可让支持其他的编程语言。例 如若要支持C++语言,只要将分解模块定义为类和函数,并根据语言特性将依 赖性分析方法改进,将单核编译器改为支持C++语言的编译器即可。

附图说明

图1为本发明示意图;

图2为实施例流程图。

具体实施方式

如图1所示,本发明由预处理器101、程序分析器102、数据分解器103、 单核编译器集104、数据合成器105和主核编译器106组成。每一组件都对上 一组件生成的结果进行处理。本发明通过对源代码进行解析,将源代码分解成 异构多核处理器中单核可编译的多个子块,实现了对现有单核处理器编译器的 适用。

下面就结合图2所示过程对本发明进行介绍。预处理器101首先对源代码 original.c进行预处理,包括将源代码中的宏展开、合并续行并添加基本的编译 指示信息,得到预处理代码original.i 107。通过预处理,降低了后续模块分析 代码的难度。

程序分析器102对预处理代码107进行依赖性分析并添加编译指示信息得 到original_add.i。预处理代码107中每个代码模块前都要添加相应的编译指示 信息,以保证分解后的代码模块中含有足够的编译指示信息与最初的源代码相 关联,所述代码模块为代码分解时的最小单位,在C语言中,模块是指函数。 程序分析器还对源代码中的代码模块进行依赖性(即函数调用关系)分析,得 到各代码模块间的依赖信息。程序分析器102对各处理器核心的私有代码模块 和共享代码模块进行标记。所述私有模块是指仅在一个核心的代码中被使用的 模块,所述共享模块是指在多个核心代码中被使用的模块。对于私有模块,分 解时将其分解到对应核心的文件中即可,对于共享模块,要检测其被哪些处理 器核心共享,分解时将其分解到使用此共享模块的每个核心代码中。

数据分解器103根据各代码模块间的依赖信息对添加了编译指示的代码进 行分解。为了能让数据分解器103识别各核心的代码块,这里要求用户在各核 心对应的顶层模块中(对C语言顶层函数)使用规定的名字,如主核的顶层函 数名为main.i;从核顶层函数名分别为pe_0.i,pe_1.i,pe_2.i......pe_x.i,等, 分别对应0号从核,1号从核等。非顶层函数名不做规定。这样就能获得主核 待编译代码块和从核待编译代码块。分解时使用了正则表达式,因为正则表达 式具有超强的结构描述能力,能精确的对文本进行分析,能显著的提高开发效 率和程序质量。

单核编译器集104包含了异构多核处理器的主核编译器和从核编译器。用 主核编译器编译主核待编译代码块,对主核代码编译的目的仅仅是为了检错, 以得到正确的语法形式。用从核编译器编译从核待编译代码块,对从核代码的 编译除了检错,还要保留其可执行代码。如果这里有多个核心架构相同,这些 核心可以使用同一套单核编译器。

数据合成器105将从核可执行代码(pe_0.bin,pe_1.bin, pe_2.bin......pe_x.bin,)转换成主核编译器能识别的形式,如将其内容提取成 数组或链表,以便主核进行调度,之后数据合成器105将转换后的从核可执行 代码和主核预处理代码合成为最终预处理代码final.i109。

主核编译器106将最终预处理代码109编译成最终异构多核处理器能执行 的最终可执行代码final.bin

实施例

以下述实例代码为例对本发明具体实施方式作进一步介绍。

对于实例中的代码,程序分析器得到的依赖信息如下202:

主核函数main()依赖函数func1(),func2(),func3()。包含func3()的原因是 func1()调用了func3()。无论有多少层嵌套调用,程序分析器102都能得到其 中的依赖关系。

0号从核函数pe_0()依赖于func2(),func2()是共享模块,因为它同时被主 核和0号从核函数pe_0()调用。func1()和func3()是私有模块,因为它们只被 主核函数main()调用。

数据分解器103对实例中的代码进行分解时,会根据程序分析器102分析 得到的依赖信息,将源代码进行分解。分解后,主核代码块中除顶层模块外, 还应包含func1()、func2()和func3()。0号从核的代码块中除顶层模块外,还 应包含func2()。

单核编译器集104根据数据分解器103分解后划分出的主核待编译代码块 和从核待编译代码块调用对应的核心进行编译,从而分别获得主核可执行代码 和从核可执行代码。

数据合成器105对从核可执行代码进行格式转化后将其余主核可执行代码 进行合成形成最终预处理代码109。

最终预处理代码109由主核编译器106进行编译形成可执行代码。

本发明未详细说明部分属本领域技术人员公知常识。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号