一种异构代码融合的编译和生成方法

文档序号:9667178阅读:940来源:国知局
一种异构代码融合的编译和生成方法
【技术领域】
[0001]本发明涉及计算机技术领域,具体涉及一种异构代码融合的编译和生成方法。
【背景技术】
[0002]异构众核是一种比较特殊的芯片,往往配备有功能完备的运算控制核心和功能精简的运算核心,两种核心具有不同的指令集和不同的存储层次。为充分利用这两种不同结构的核心,且使用方便,必须要有一个统一编址的针对异构众核的可执行程序,使得该程序可以在异构众核芯片上运行,并且根据用户需求将任务分配到运算控制核心和运算核心上,且充分利用异构众核的多个存储层次。
[0003]现有异构技术主要代表是CUDA (Compute Unified Device Architecture,统一计算架构)。CUDA 是 NVDIA 的 GPGPU (General-Purpose Computing on Graphics ProcessingUnit,通用图形处理器单元)模型,它使用C语言为基础,可以直接以大家熟悉的编程语言,写出在异构芯片上执行的程序,而不需要学习特定的芯片指令或结构。
[0004]CUDA架构下程序往往分成主机(host)端和设备(device)端两个部分,主机端是在CPU上执行的部分,而设备端则是在GPU上执行的部分。通常需要主机端程序将数据准备好后,复制到GPU的内存,再由GPU执行设备端程序,完成后再由主机端程序将结果从GPU的内存中取回。
[0005]但是,CUDA的显著缺点是没有实现统一的内存模型,数据需要在主机端和设备端频繁转移,因此造成访存延迟而影响程序的运行性能。

【发明内容】

[0006]本发明所要解决的技术问题是针对现有技术中存在上述缺陷,提供一种能够较好地避免因数据复制造成的访存延迟的异构代码融合的编译和生成方法。
[0007]根据本发明,提供了一种异构代码融合的编译和生成方法,包括:
[0008]第一步骤:利用运算控制核心编译器和运算核心编译器分别为运算控制核心和运算核心生成第一对象文件和第二对象文件;
[0009]第二步骤:运算核心编译器自动实现对第一对象文件中的函数的重命名,在函数名的前加上前缀;
[0010]第三步骤:链接器将重命名后的第一对象文件与第二对象文件链接融合为统一的可执行程序。
[0011]优选地,第一对象文件和第二对象文件是后缀为.ο的文件
[0012]优选地,所述前缀是“slave_”前缀。
[0013]优选地,链接融合包括:
[0014]将运算控制核心的文件头与运算核心的文件头,融合为一个新的针对异构众核架构的新文件头;
[0015]针对运算控制核心的指令段的第一命名和运算核心的指令段的第二命名,融合后将保留运算控制核心的指令段和运算核心的指令段,并由运行支撑环境自动将具有第一命名的指令段指令加载到运算控制核心,将具有第二命名的指令段指令加载到运算核心;
[0016]运算控制核心和运算核心的数据段融合为一个统一的数据段,作为程序的共享数据段;
[0017]将运算控制核心支持中的由运算控制核心支持的第一关键字所定义的变量作为运算控制核心私有变量,存在运算控制核心私有段中;将运算核心中的第一关键字所定义的变量作为运算核心私有变量,存在运算核心私有段中;将运算核心中的第二关键字所定义的变量作为运算核心内部变量,存在运算核心内部段中;而且融合后保留运算控制核心私有段、运算核心私有段和运算核心内部段,并且由运行支撑环境在程序执行前将运算控制核心私有段、运算核心私有段和运算核心内部段,分别加载到运算控制核心的私有数据空间、运算核心的私有数据空间和运算核心的内部存储空间上;
[0018]将运算控制核心的只读段和运算核心的只读段融合为一个只读段。
[0019]优选地,链接融合的具体流程如下:
[0020]将运算控制核心的文件头与运算核心的文件头,融合为一个新的针对异构众核架构的新文件头;
[0021]针对运算控制核心的指令段的后缀.text和运算核心的指令段的后缀.textl,融合后将保留运算控制核心的指令段和运算核心的指令段,并由运行支撑环境自动将具有后缀.text的指令段指令加载到运算控制核心,将具有后缀.textl的指令段指令加载到运算核心。
[0022]运算控制核心和运算核心各自的后缀为.data的数据段融合为一个统一的后缀为.data的数据段,作为程序的共享数据段;
[0023]针对运算控制核心支持的—thread关键字,将运算控制核心的通过—thread定义的变量作为运算控制核心私有变量,存放在.tdata段;针对运算核心支持—thread和—thread_local关键字,将运算核心的通过—thread定义的变量作为运算核心私有变量,存放在.tdata_private段,而且将运算核心的通过—thread_local定义的变量作为运算核心局存变量,存放在.tdata_local段;融合后将保留.tdata段、.tdata_private段和.tdata_local段,并由运行支撑环境在程序执行前将.tdata段、.tdata_private段和.tdata_local段分别加载到运算控制核心的私有数据空间、运算核心的私有数据空间和运算核心的内部存储空间上;
[0024]将运算控制核心的后缀为.rodata的只读段和运算核心的后缀为.rodata的只读段融合为后缀为.rodata的一个只读段。
[0025]本发明通过混合链接和运算节点程序换名实现了异构代码融合技术,通过支持多种关键字来实现异构数据融合,充分利用异构众核芯片的多存储层次。
【附图说明】
[0026]结合附图,并通过参考下面的详细描述,将会更容易地对本发明有更完整的理解并且更容易地理解其伴随的优点和特征,其中:
[0027]图1示意性地示出了根据本发明优选实施例的异构代码融合的编译和生成方法的流程图。
[0028]图2示意性地示出了根据本发明优选实施例的异构代码融合的编译和生成方法的示意图。
[0029]需要说明的是,附图用于说明本发明,而非限制本发明。注意,表示结构的附图可能并非按比例绘制。并且,附图中,相同或者类似的元件标有相同或者类似的标号。
【具体实施方式】
[0030]为了使本发明的内容更加清楚和易懂,下面结合具体实施例和附图对本发明的内容进行详细描述。
[0031]本发明通过生成一种融合两种针对不同指令集代码的可执行程序,能够在异构众核芯片的所有处理器上执行,并根据用户需求将数据排布在相应的存储层次。本发明通过将异构代码和数据融合成统一的可执行程序,运算控制核心和运算核心的地址空间一致,内存共享,除特殊情况外(需要将数据在主存和运算控制核心局部内存之间移动的时候),一般不需要做数据的移动,能较好地避免因数据复制造成的访存延迟,且便于用户使用。
[0032]本发明主要实现两个技术,一是通过混合链接和运算节点程序换名实现的异构代码融合技术,二是通过支持多种关键字来实现异构数据融合,充分利用异构众核芯片的多存储层次。具体地,图1示意性地示出了根据本发明优选实施例的异构代码融合的编译和生成方法的流程图。图2示意性地示出了根据本发明优选实施例的异构代码融合的编译和生成方法的示意图。
[0033]如图1和图2所示,根据本发明优选实施例的异构代码融合的编译和生成方法包括:
[0034]第一步骤S1:利用运算控制核心编译器和运算核心编译器分别为运算控制核心和运算核心生成第一对象文件和第二对象文件;例如,第一对象文件和第二对象文件是不同的后缀为.ο的文件;在该步骤中,用户可以编写符合传统编程习惯的代码即可。
[0035]第二步骤S2:运算核心编译器自动实现对第一对象文件中的函数的重命名,在函数名的前加上前缀;例如
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1