一种异构多核程序的编译方法

文档序号:8498624阅读:557来源:国知局
一种异构多核程序的编译方法
【技术领域】
[0001]本发明涉及处理器领域,更具体地涉及一种异构多核程序的编译方法。
【背景技术】
[0002]目前处理器领域中主要以多核技术为主,多核处理器根据核的微体系结构或功能的特征分为同构多核处理器和异构多核处理器,由于异构多核处理器在高性能、低功耗及低成本方面的显著特点,并能最大化的贴合应用需求,因此其在数字信号处理领域有着广泛的应用。
[0003]一般情况下,异构多核处理器通常是由一个负责控制功能的控制核及若干个负责计算功能的计算核所构成,由于各个处理器核的体系结构有着一些功能上的差异,导致其在指令集体系结构管上也有相应的差异,因此多编译器以及多核的特点,使得异构多核处理器下的编译系统相比传统的同构多核处理器编译系统更为复杂。
[0004]在这样的应用背景下,需要灵活应用现有成熟编译器系统,并提供一种成熟稳定的联合编译及调用机制,以提升程序员在异构多核处理器上的开发效率。

【发明内容】

[0005]基于上述技术问题,本发明的主要目的之一在于提出一种异构多核程序的编译方法,以便于简化异构多核处理器的编译过程,提升程序员的开发效率。
[0006]为了实现上述目的,本发明提供了一种异构多核程序的编译方法,包括以下步骤:
[0007]步骤1,将一个程序代码分解成若干个运行在不同指令集体系结构处理器核上的程序代码;
[0008]步骤2,将分解后的所述程序代码发送到对应指令集体系结构下的编译器上进行预编译,得到各自对应的二进制代码组;对所述二进制代码组进行完整性检测,如果发现含有未定义函数符号,则报错并结束本方法,如果未发现则跳至步骤3 ;
[0009]步骤3,通过逐层查找的方法,自顶向下的建立函数调用关系数据库;
[0010]步骤4,对所述二进制代码组中的每个二进制代码生成相应的调度代码,对除最底层之外的二进制代码组中的每一个二进制代码进行未定义函数符号检查并生成所述未定义函数符号的定义;
[0011]步骤5,检查所述二进制代码组中的函数是否带有参数,对于带有参数的函数插入参数拷贝代码,从而生成参数准备代码;
[0012]步骤6,将所述二进制代码组分别用其对应的指令集体系结构编译器进行再编译,用以检查并生成整个异构多核程序的可执行程序;
[0013]步骤7,将各个层次编译出的可执行程序集合和所述函数调用关系数据库封装成程序安装包。
[0014]其中,步骤I包括:
[0015]将输入的程序代码进行着色,按照颜色分解成多个程序代码,着色/分解的最小粒度为一个函数,其中每种颜色表示一种指令集体系结构;
[0016]分解后的程序代码包含多个程序代码组,将分解后的程序代码组按颜色和颜色对应的指令集体系结构层次排序成第I层到第η层程序代码组,其中η为自然数;
[0017]每个层次的程序代码组中包含一个或多个程序代码,每个程序代码对应生成一个可执行程序,每个程序代码中包含一个或多个相同颜色的函数;
[0018]将分解且分组后的层次化程序代码组放入步骤2的输入中,跳至步骤2。
[0019]其中,步骤2包括:
[0020]将输入的η个程序代码组分别用各个层次的指令集体系结构编译器编译,得到η个二进制代码组,每个二进制代码组与程序代码组一一对应,且组内的二进制代码与程序代码一一对应;
[0021]对所述二进制代码组进行完整性检测,如果第η层二进制代码组不含有未定义函数符号,则跳至步骤3 ;如果第η层二进制代码组含有未定义函数符号,则预编译失败,该方法结束。
[0022]其中,步骤3包括:
[0023]检查从第η-l层到第I层的每个二进制代码组i中的每个二进制代码,如果其包含未定义函数符号,则用此符号在i+Ι层二进制代码组中定义的函数符号中做匹配查找,若有且只有一个,则新建一个调用关系加入到函数调用关系数据库中;若有超过一个,则函数调用关系数据库生成失败,该方法结束;若没有,则函数调用关系数据库生成失败,该方法结束。
[0024]其中,步骤4包括:
[0025]检查从第η-l层到第I层的每个二进制代码组i中的每个二进制代码,如果存在未定义的函数符号,则生成该函数的定义;在第i层的程序代码组里的二进制代码中插入生成的函数定义;将修改后的η个程序代码组传递给步骤5,并跳至步骤5。
[0026]其中步骤4中所述函数的定义内容包括:装载、启动第i+Ι层包含该函数符号的二进制代码,以及在串行方式下第i+Ι层代码执行完成的阻塞等待信息。
[0027]其中,步骤5包括:
[0028]检查从第η-l层到第I层的每个源代码组i中的每个源代码,如果存在步骤4生成的函数定义,则检查函数原型是否有参数,如果无参数则跳过,如果带参数,则在生成的函数定义中,生成从第i层到第i+Ι层的参数拷贝代码,在启动第i+Ι层包含该函数符号的二进制代码之前,插入生成的参数拷贝代码;
[0029]生成第i+Ι层参数准备代码,在第i+Ι层包含该函数符号的二进制代码对应的程序代码之前插入生成的参数准备代码;
[0030]将修改后的程序代码组传递给步骤6,并跳至步骤6。
[0031]其中,步骤6包括:
[0032]将输入的η个源代码组分别用各个层次的指令集体系结构编译器编译,如任何一个层次的编译器返回错误,则返回错误,否则输出η个层次二进制代码组到步骤7,跳至步骤7。
[0033]其中,步骤7包括:
[0034]从所述函数调用关系数据库中导出所述异构多核程序的所有调用关系表,作为加载信息与第I层二进制代码组合并封装成可执行程序,将第2层到第η层二进制代码组分别加入各层次的函数库中,若对应层次的函数库不存在,则新建一个所述层次的函数库;将各个层次编译出的可执行程序集合和所述函数调用关系数据库封装成一个程序安装包。
[0035]其中,所述编译方法用于层次化异构多核处理器中。
[0036]基于上述技术方案可知,本发明的编译方法包括代码着色和代码分解步骤、预编译步骤、调度代码生成步骤、参数传递代码生成步骤、控制流关系数据库生成步骤、后编译步骤和程序发布步骤,可以极大地减小程序员在异构多核处理器下的开发难度,提升开发效率。
【附图说明】
[0037]图1为本发明的多层应用程序编译流程的结构框图;
[0038]图2为本发明的一个实施方式中异构多核处理器与多层应用程序的组织结构图。
【具体实施方式】
[0039]为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明作进一步的详细说明。
[0040]本发明公开了一种编译两种或两种以上指令集体系结构的层次化异构多核处理器程序的方法。层次化异构多核处理器是指处理器程序中包含若干种指令集体系结构,每种指令集体系结构由若干个程序组成,每种指令集体系结构的程序的集合构成一个层次,每一个层次受其上一个层次的程序控制,并且控制其下一个层次的程序。该编译方法包括:
[0041]代码着色和代码分解步骤,用于将一个程序代码分解成若干个运行在不同指令集体系结构处理器核上的程序代码,即不同层次上的程序代码;
[0042]预编译步骤,用于分析处理器核之间存在的控制流关系和数据流关系;
[0043]调度代码生成步骤,用于自动生成和插入各层次程序之间调用、同步等功能的代码;
[0044]参数传递代码生成步骤,用于自动生成和插入不同层次之间程序调用时的数据交换代码;
[0045]控制流关系数据库生成步骤,用于根据各个层次最终编译出的程序在执行时的调用关系建立关系数据库;
[0046]后编译步骤,用于将插入了自动生成代码的各层次程序代码用该层次指令集编译器编译成程序集合;以及
[0047]程序发布步骤,用于将各个层次编译出的程序集合和关系数据库封装成程序安装包。
[0048]下面分别详述之。
[0049]步骤I,代码着色和代码分解步骤
[0050]将输入的源代码进行着色,按照颜色分解成多个源代码,着色/分解的最小粒度为一个函数,其
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1