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

上传人:r7 文档编号:1569702 上传时间:2018-06-25 格式:PDF 页数:8 大小:419.51KB
返回 下载 相关 举报
摘要
申请专利号:

CN201210243789.4

申请日:

2012.07.13

公开号:

CN103116513A

公开日:

2013.05.22

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 9/45申请日:20120713|||公开

IPC分类号:

G06F9/45

主分类号:

G06F9/45

申请人:

北京时代民芯科技有限公司; 北京微电子技术研究所

发明人:

刘清涛; 于立新; 宋立国

地址:

100076 北京市丰台区东高地四营门北路2号

优先权:

专利代理机构:

中国航天科技专利中心 11009

代理人:

安丽

PDF下载: PDF下载
内容摘要

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

权利要求书

权利要求书一种异构多核处理器编译器,包括预处理器(101),用于对源代码进行宏展开和续行合并得到预处理代码(107),其特征在于还包括:程序分析器(102)、数据分解器(103)、单核编译器集(104)、数据合成器(105)和主核编译器(106),
所述程序分析器(102)为所述预处理代码(107)添加编译指示获得待编译代码(108);
所述数据分解器(103)将所述待编译代码(108)划分为用于主核待编译代码块和从核待编译代码块;
所述单核编译器集(104)调用所述异构多核处理器的主核对所述主核待编译代码块进行编译获得主核可执行代码;调用所述异构多核处理器的从核对所述从核待编译代码块进行编译获得从核可执行代码;
所述数据合成器(105)将所述从核可执行代码转化为所述主核可识别的形式;并将所述主核可执行代码与主核可识别的从核可执行代码合并形成最终预处理代码(109);
所述主核编译器(106)对所述最终预处理代码(109)进行编译形成可执行代码。
如权利要求1所述的一种异构多核处理器编译器,其特征在于:所述程序分析器(102)将所述预处理代码(107)划分为代码模块,并根据所述代码模块中的调用关系,向所述预处理代码(107)中添加编译指示获得所述待编译代码(108)。

说明书

说明书一种异构多核处理器编译器
技术领域
本发明涉及一种异构多核处理器编译器。
背景技术
目前大多数处理器都是多核处理器,而多核处理器又根据各核心的架构或功能的相同与否分为同构多核处理器和异构多核处理器。异构多核处理器因其低成本、可重构、高性能的特点而在嵌入式系统及航空航天领域有着广泛的应用。
异构多核处理器通常包含一个或多个功能完善的主核和多个有特殊功能的从核。在异构多核处理器硬件的开发过程中,要对其功能进行验证和扩展,必须有一个对应的编译系统来辅助。然而,由于异构及多个核心的特点,使异构多核编译系统的设计相对于传统的单核编译器和同构多核编译系统的设计更加复杂和困难。
现存的异构多核编译系统通常是从头进行全新的设计,其中某些编译器还对传统语言进行了语法扩展。从头设计一个这样的编译系统开发周期非常长,而没有编译系统就不能对硬件功能进行完整的测试和验证。因此,从头设计异构多核编译系统会严重影响处理器硬件的开发速度。另外,如果对传统语言进行语法扩展,需要编译器支持这些新的语法,增加了编译器的设计难度,并且这些新的语法需要用户重新学习使用,增加了用户的使用难度。
发明内容
本发明的技术解决问题是:针对现有技术的不足,提供了一种异构多核处理器编译器,使用现有编译系统实现了对异构多核处理器的适用。
本发明的技术解决方案是:
本发明在不改变编程语言语法的情况下,通过对源代码进行处理使得源代码可利用适应异构多核处理器的个单核处理器,从而可使用现存的单核编译器对源代码进行编译。对所述源代码进行处理的异构多核处理器编译器,包括预处理器,程序分析器、数据分解器、单核编译器集、数据合成器和主核编译器。
所述程序分析器为所述预处理代码添加编译指示获得待编译代码;
所述数据分解器将所述待编译代码划分为用于主核待编译代码块和从核待编译代码块;
所述单核编译器集调用所述异构多核处理器的主核对所述主核待编译代码块进行编译获得主核可执行代码;调用所述异构多核处理器的从核对所述从核待编译代码块进行编译获得从核可执行代码;
所述数据合成器将所述从核可执行代码转化为所述主核可识别的形式;并将所述主核可执行代码与主核可识别的从核可执行代码合并形成最终预处理代码;
所述主核编译器对所述最终预处理代码进行编译形成可执行代码。
所述程序分析器将所述预处理代码划分为代码模块,并根据所述代码模块中的调用关系,向所述预处理代码中添加编译指示获得所述待编译代码。
本发明与现有技术相比具有如下优点:
本发明提供一种设计异构多核编译系统,从而克服了异构多核编译器开发速度慢,使用困难的问题。并且此编译器能使用各单核编译器的所有功能,保证了编译效率。本发明由于没有对源代码所用语言进行语法扩展,降低了使用难度,直接使用现有的单核编译器,减少了设计编译器工作量,加快了编译器开发速度,保证了设计出的编译器质量。同时,本发明保留单核编译器的所有功能,各核代码分别编译时可以使用原有的编译优化功能,保证了生成的可执行代码的运行效率。整个编译器由多个独立组件构成,各部分间无耦合,如需以本设计为基础改进编译器,可以容易的添加或裁剪编译器组件,便于进行功能扩展。进一步采用本发明对各编程语言具有很好的兼容性,只要更改分解模块的定义、依赖性分析方法和单核编译器集,即可让支持其他的编程语言。例如若要支持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进行编译形成可执行代码。
本发明未详细说明部分属本领域技术人员公知常识。

一种异构多核处理器编译器.pdf_第1页
第1页 / 共8页
一种异构多核处理器编译器.pdf_第2页
第2页 / 共8页
一种异构多核处理器编译器.pdf_第3页
第3页 / 共8页
点击查看更多>>
资源描述

《一种异构多核处理器编译器.pdf》由会员分享,可在线阅读,更多相关《一种异构多核处理器编译器.pdf(8页珍藏版)》请在专利查询网上搜索。

1、(10)申请公布号 CN 103116513 A(43)申请公布日 2013.05.22CN103116513A*CN103116513A*(21)申请号 201210243789.4(22)申请日 2012.07.13G06F 9/45(2006.01)(71)申请人北京时代民芯科技有限公司地址 100076 北京市丰台区东高地四营门北路2号申请人北京微电子技术研究所(72)发明人刘清涛 于立新 宋立国(74)专利代理机构中国航天科技专利中心 11009代理人安丽(54) 发明名称一种异构多核处理器编译器(57) 摘要本发明公开了一种异构多核处理器编译器,包括预处理器(101),用于对源代码。

2、进行宏展开和续行合并得到预处理代码(107),还包括:程序分析器(102)、数据分解器(103)、单核编译器集(104)、数据合成器(105)和主核编译器(106),所述程序分析器(102)为所述预处理代码(107)添加编译指示获得待编译代码(108),采用本发明可以使用现有编译系统实现了对异构多核处理器的适用。(51)Int.Cl.权利要求书1页 说明书4页 附图2页(19)中华人民共和国国家知识产权局(12)发明专利申请权利要求书1页 说明书4页 附图2页(10)申请公布号 CN 103116513 ACN 103116513 A1/1页21.一种异构多核处理器编译器,包括预处理器(101。

3、),用于对源代码进行宏展开和续行合并得到预处理代码(107),其特征在于还包括:程序分析器(102)、数据分解器(103)、单核编译器集(104)、数据合成器(105)和主核编译器(106),所述程序分析器(102)为所述预处理代码(107)添加编译指示获得待编译代码(108);所述数据分解器(103)将所述待编译代码(108)划分为用于主核待编译代码块和从核待编译代码块;所述单核编译器集(104)调用所述异构多核处理器的主核对所述主核待编译代码块进行编译获得主核可执行代码;调用所述异构多核处理器的从核对所述从核待编译代码块进行编译获得从核可执行代码;所述数据合成器(105)将所述从核可执行代。

4、码转化为所述主核可识别的形式;并将所述主核可执行代码与主核可识别的从核可执行代码合并形成最终预处理代码(109);所述主核编译器(106)对所述最终预处理代码(109)进行编译形成可执行代码。2.如权利要求1所述的一种异构多核处理器编译器,其特征在于:所述程序分析器(102)将所述预处理代码(107)划分为代码模块,并根据所述代码模块中的调用关系,向所述预处理代码(107)中添加编译指示获得所述待编译代码(108)。权 利 要 求 书CN 103116513 A1/4页3一种异构多核处理器编译器技术领域0001 本发明涉及一种异构多核处理器编译器。背景技术0002 目前大多数处理器都是多核处理。

5、器,而多核处理器又根据各核心的架构或功能的相同与否分为同构多核处理器和异构多核处理器。异构多核处理器因其低成本、可重构、高性能的特点而在嵌入式系统及航空航天领域有着广泛的应用。0003 异构多核处理器通常包含一个或多个功能完善的主核和多个有特殊功能的从核。在异构多核处理器硬件的开发过程中,要对其功能进行验证和扩展,必须有一个对应的编译系统来辅助。然而,由于异构及多个核心的特点,使异构多核编译系统的设计相对于传统的单核编译器和同构多核编译系统的设计更加复杂和困难。0004 现存的异构多核编译系统通常是从头进行全新的设计,其中某些编译器还对传统语言进行了语法扩展。从头设计一个这样的编译系统开发周期。

6、非常长,而没有编译系统就不能对硬件功能进行完整的测试和验证。因此,从头设计异构多核编译系统会严重影响处理器硬件的开发速度。另外,如果对传统语言进行语法扩展,需要编译器支持这些新的语法,增加了编译器的设计难度,并且这些新的语法需要用户重新学习使用,增加了用户的使用难度。发明内容0005 本发明的技术解决问题是:针对现有技术的不足,提供了一种异构多核处理器编译器,使用现有编译系统实现了对异构多核处理器的适用。0006 本发明的技术解决方案是:0007 本发明在不改变编程语言语法的情况下,通过对源代码进行处理使得源代码可利用适应异构多核处理器的个单核处理器,从而可使用现存的单核编译器对源代码进行编译。

7、。对所述源代码进行处理的异构多核处理器编译器,包括预处理器,程序分析器、数据分解器、单核编译器集、数据合成器和主核编译器。0008 所述程序分析器为所述预处理代码添加编译指示获得待编译代码;0009 所述数据分解器将所述待编译代码划分为用于主核待编译代码块和从核待编译代码块;0010 所述单核编译器集调用所述异构多核处理器的主核对所述主核待编译代码块进行编译获得主核可执行代码;调用所述异构多核处理器的从核对所述从核待编译代码块进行编译获得从核可执行代码;0011 所述数据合成器将所述从核可执行代码转化为所述主核可识别的形式;并将所述主核可执行代码与主核可识别的从核可执行代码合并形成最终预处理代。

8、码;0012 所述主核编译器对所述最终预处理代码进行编译形成可执行代码。0013 所述程序分析器将所述预处理代码划分为代码模块,并根据所述代码模块中的调说 明 书CN 103116513 A2/4页4用关系,向所述预处理代码中添加编译指示获得所述待编译代码。0014 本发明与现有技术相比具有如下优点:0015 本发明提供一种设计异构多核编译系统,从而克服了异构多核编译器开发速度慢,使用困难的问题。并且此编译器能使用各单核编译器的所有功能,保证了编译效率。本发明由于没有对源代码所用语言进行语法扩展,降低了使用难度,直接使用现有的单核编译器,减少了设计编译器工作量,加快了编译器开发速度,保证了设计。

9、出的编译器质量。同时,本发明保留单核编译器的所有功能,各核代码分别编译时可以使用原有的编译优化功能,保证了生成的可执行代码的运行效率。整个编译器由多个独立组件构成,各部分间无耦合,如需以本设计为基础改进编译器,可以容易的添加或裁剪编译器组件,便于进行功能扩展。进一步采用本发明对各编程语言具有很好的兼容性,只要更改分解模块的定义、依赖性分析方法和单核编译器集,即可让支持其他的编程语言。例如若要支持C+语言,只要将分解模块定义为类和函数,并根据语言特性将依赖性分析方法改进,将单核编译器改为支持C+语言的编译器即可。附图说明0016 图1为本发明示意图;0017 图2为实施例流程图。具体实施方式00。

10、18 如图1所示,本发明由预处理器101、程序分析器102、数据分解器103、单核编译器集104、数据合成器105和主核编译器106组成。每一组件都对上一组件生成的结果进行处理。本发明通过对源代码进行解析,将源代码分解成异构多核处理器中单核可编译的多个子块,实现了对现有单核处理器编译器的适用。0019 下面就结合图2所示过程对本发明进行介绍。预处理器101首先对源代码original.c进行预处理,包括将源代码中的宏展开、合并续行并添加基本的编译指示信息,得到预处理代码original.i 107。通过预处理,降低了后续模块分析代码的难度。0020 程序分析器102对预处理代码107进行依赖性。

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

12、分解时将其分解到使用此共享模块的每个核心代码中。0021 数据分解器103根据各代码模块间的依赖信息对添加了编译指示的代码进行分解。为了能让数据分解器103识别各核心的代码块,这里要求用户在各核心对应的顶层模块中(对C语言顶层函数)使用规定的名字,如主核的顶层函数名为main.i;从核顶层函数名分别为pe_0.i,pe_1.i,pe_2.i.pe_x.i,等,分别对应0号从核,1号从核等。非说 明 书CN 103116513 A3/4页5顶层函数名不做规定。这样就能获得主核待编译代码块和从核待编译代码块。分解时使用了正则表达式,因为正则表达式具有超强的结构描述能力,能精确的对文本进行分析,能显。

13、著的提高开发效率和程序质量。0022 单核编译器集104包含了异构多核处理器的主核编译器和从核编译器。用主核编译器编译主核待编译代码块,对主核代码编译的目的仅仅是为了检错,以得到正确的语法形式。用从核编译器编译从核待编译代码块,对从核代码的编译除了检错,还要保留其可执行代码。如果这里有多个核心架构相同,这些核心可以使用同一套单核编译器。0023 数据合成器105将从核可执行代码(pe_0.bin,pe_1.bin,pe_2.bin.pe_x.bin,)转换成主核编译器能识别的形式,如将其内容提取成数组或链表,以便主核进行调度,之后数据合成器105将转换后的从核可执行代码和主核预处理代码合成为最。

14、终预处理代码final.i109。0024 主核编译器106将最终预处理代码109编译成最终异构多核处理器能执行的最终可执行代码final.bin0025 实施例0026 以下述实例代码为例对本发明具体实施方式作进一步介绍。0027 0028 0029 对于实例中的代码,程序分析器得到的依赖信息如下202:0030 主核函数main()依赖函数func1(),func2(),func3()。包含func3()的原因是func1()调用了func3()。无论有多少层嵌套调用,程序分析器102都能得到其中的依赖关说 明 书CN 103116513 A4/4页6系。0031 0号从核函数pe_0()。

15、依赖于func2(),func2()是共享模块,因为它同时被主核和0号从核函数pe_0()调用。func1()和func3()是私有模块,因为它们只被主核函数main()调用。0032 数据分解器103对实例中的代码进行分解时,会根据程序分析器102分析得到的依赖信息,将源代码进行分解。分解后,主核代码块中除顶层模块外,还应包含func1()、func2()和func3()。0号从核的代码块中除顶层模块外,还应包含func2()。0033 单核编译器集104根据数据分解器103分解后划分出的主核待编译代码块和从核待编译代码块调用对应的核心进行编译,从而分别获得主核可执行代码和从核可执行代码。0034 数据合成器105对从核可执行代码进行格式转化后将其余主核可执行代码进行合成形成最终预处理代码109。0035 最终预处理代码109由主核编译器106进行编译形成可执行代码。0036 本发明未详细说明部分属本领域技术人员公知常识。说 明 书CN 103116513 A1/2页7图1说 明 书 附 图CN 103116513 A2/2页8图2说 明 书 附 图CN 103116513 A。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1