CN105426226A - 一种异构代码融合的编译和生成方法 - Google Patents
一种异构代码融合的编译和生成方法 Download PDFInfo
- Publication number
- CN105426226A CN105426226A CN201510828419.0A CN201510828419A CN105426226A CN 105426226 A CN105426226 A CN 105426226A CN 201510828419 A CN201510828419 A CN 201510828419A CN 105426226 A CN105426226 A CN 105426226A
- Authority
- CN
- China
- Prior art keywords
- core
- operation control
- section
- arithmetic
- arithmetic core
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供了一种异构代码融合的编译和生成方法,包括:利用运算控制核心编译器和运算核心编译器分别为运算控制核心和运算核心生成第一对象文件和第二对象文件;运算核心编译器自动实现对第一对象文件中的函数的重命名,在函数名的前加上前缀;链接器将重命名后第一对象文件与第二对象文件链接融合为统一的可执行程序。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种异构代码融合的编译和生成方法。
背景技术
异构众核是一种比较特殊的芯片,往往配备有功能完备的运算控制核心和功能精简的运算核心,两种核心具有不同的指令集和不同的存储层次。为充分利用这两种不同结构的核心,且使用方便,必须要有一个统一编址的针对异构众核的可执行程序,使得该程序可以在异构众核芯片上运行,并且根据用户需求将任务分配到运算控制核心和运算核心上,且充分利用异构众核的多个存储层次。
现有异构技术主要代表是CUDA(ComputeUnifiedDeviceArchitecture,统一计算架构)。CUDA是NVDIA的GPGPU(General-PurposeComputingonGraphicsProcessingUnit,通用图形处理器单元)模型,它使用C语言为基础,可以直接以大家熟悉的编程语言,写出在异构芯片上执行的程序,而不需要学习特定的芯片指令或结构。
CUDA架构下程序往往分成主机(host)端和设备(device)端两个部分,主机端是在CPU上执行的部分,而设备端则是在GPU上执行的部分。通常需要主机端程序将数据准备好后,复制到GPU的内存,再由GPU执行设备端程序,完成后再由主机端程序将结果从GPU的内存中取回。
但是,CUDA的显著缺点是没有实现统一的内存模型,数据需要在主机端和设备端频繁转移,因此造成访存延迟而影响程序的运行性能。
发明内容
本发明所要解决的技术问题是针对现有技术中存在上述缺陷,提供一种能够较好地避免因数据复制造成的访存延迟的异构代码融合的编译和生成方法。
根据本发明,提供了一种异构代码融合的编译和生成方法,包括:
第一步骤:利用运算控制核心编译器和运算核心编译器分别为运算控制核心和运算核心生成第一对象文件和第二对象文件;
第二步骤:运算核心编译器自动实现对第一对象文件中的函数的重命名,在函数名的前加上前缀;
第三步骤:链接器将重命名后的第一对象文件与第二对象文件链接融合为统一的可执行程序。
优选地,第一对象文件和第二对象文件是后缀为.o的文件
优选地,所述前缀是“slave_”前缀。
优选地,链接融合包括:
将运算控制核心的文件头与运算核心的文件头,融合为一个新的针对异构众核架构的新文件头;
针对运算控制核心的指令段的第一命名和运算核心的指令段的第二命名,融合后将保留运算控制核心的指令段和运算核心的指令段,并由运行支撑环境自动将具有第一命名的指令段指令加载到运算控制核心,将具有第二命名的指令段指令加载到运算核心;
运算控制核心和运算核心的数据段融合为一个统一的数据段,作为程序的共享数据段;
将运算控制核心支持中的由运算控制核心支持的第一关键字所定义的变量作为运算控制核心私有变量,存在运算控制核心私有段中;将运算核心中的第一关键字所定义的变量作为运算核心私有变量,存在运算核心私有段中;将运算核心中的第二关键字所定义的变量作为运算核心内部变量,存在运算核心内部段中;而且融合后保留运算控制核心私有段、运算核心私有段和运算核心内部段,并且由运行支撑环境在程序执行前将运算控制核心私有段、运算核心私有段和运算核心内部段,分别加载到运算控制核心的私有数据空间、运算核心的私有数据空间和运算核心的内部存储空间上;
将运算控制核心的只读段和运算核心的只读段融合为一个只读段。
优选地,链接融合的具体流程如下:
将运算控制核心的文件头与运算核心的文件头,融合为一个新的针对异构众核架构的新文件头;
针对运算控制核心的指令段的后缀.text和运算核心的指令段的后缀.text1,融合后将保留运算控制核心的指令段和运算核心的指令段,并由运行支撑环境自动将具有后缀.text的指令段指令加载到运算控制核心,将具有后缀.text1的指令段指令加载到运算核心。
运算控制核心和运算核心各自的后缀为.data的数据段融合为一个统一的后缀为.data的数据段,作为程序的共享数据段;
针对运算控制核心支持的__thread关键字,将运算控制核心的通过__thread定义的变量作为运算控制核心私有变量,存放在.tdata段;针对运算核心支持__thread和__thread_local关键字,将运算核心的通过__thread定义的变量作为运算核心私有变量,存放在.tdata_private段,而且将运算核心的通过__thread_local定义的变量作为运算核心局存变量,存放在.tdata_local段;融合后将保留.tdata段、.tdata_private段和.tdata_local段,并由运行支撑环境在程序执行前将.tdata段、.tdata_private段和.tdata_local段分别加载到运算控制核心的私有数据空间、运算核心的私有数据空间和运算核心的内部存储空间上;
将运算控制核心的后缀为.rodata的只读段和运算核心的后缀为.rodata的只读段融合为后缀为.rodata的一个只读段。
本发明通过混合链接和运算节点程序换名实现了异构代码融合技术,通过支持多种关键字来实现异构数据融合,充分利用异构众核芯片的多存储层次。
附图说明
结合附图,并通过参考下面的详细描述,将会更容易地对本发明有更完整的理解并且更容易地理解其伴随的优点和特征,其中:
图1示意性地示出了根据本发明优选实施例的异构代码融合的编译和生成方法的流程图。
图2示意性地示出了根据本发明优选实施例的异构代码融合的编译和生成方法的示意图。
需要说明的是,附图用于说明本发明,而非限制本发明。注意,表示结构的附图可能并非按比例绘制。并且,附图中,相同或者类似的元件标有相同或者类似的标号。
具体实施方式
为了使本发明的内容更加清楚和易懂,下面结合具体实施例和附图对本发明的内容进行详细描述。
本发明通过生成一种融合两种针对不同指令集代码的可执行程序,能够在异构众核芯片的所有处理器上执行,并根据用户需求将数据排布在相应的存储层次。本发明通过将异构代码和数据融合成统一的可执行程序,运算控制核心和运算核心的地址空间一致,内存共享,除特殊情况外(需要将数据在主存和运算控制核心局部内存之间移动的时候),一般不需要做数据的移动,能较好地避免因数据复制造成的访存延迟,且便于用户使用。
本发明主要实现两个技术,一是通过混合链接和运算节点程序换名实现的异构代码融合技术,二是通过支持多种关键字来实现异构数据融合,充分利用异构众核芯片的多存储层次。具体地,图1示意性地示出了根据本发明优选实施例的异构代码融合的编译和生成方法的流程图。图2示意性地示出了根据本发明优选实施例的异构代码融合的编译和生成方法的示意图。
如图1和图2所示,根据本发明优选实施例的异构代码融合的编译和生成方法包括:
第一步骤S1:利用运算控制核心编译器和运算核心编译器分别为运算控制核心和运算核心生成第一对象文件和第二对象文件;例如,第一对象文件和第二对象文件是不同的后缀为.o的文件;在该步骤中,用户可以编写符合传统编程习惯的代码即可。
第二步骤S2:运算核心编译器自动实现对第一对象文件中的函数的重命名,在函数名的前加上前缀;例如所述前缀可以是“slave_”前缀。这么做的目的是为了避免运算控制核心和运算核心的函数命名冲突。
第三步骤S3:链接器将重命名后第一对象文件与第二对象文件链接融合为统一的可执行程序。
优选地,链接融合的具体流程如下:
a)将运算控制核心的文件头与运算核心的文件头,融合为一个新的针对异构众核架构的新文件头。
b)针对运算控制核心的指令段的第一命名(例如后缀为.text)和运算核心的指令段的第二命名(例如后缀为.text1),融合后将保留这两个不同的指令段(即运算控制核心的指令段和运算核心的指令段),并由运行支撑环境自动将具有第一命名的指令段指令加载到运算控制核心,将具有第二命名的指令段指令加载到运算核心。
c)运算控制核心和运算核心的数据段(.data)融合为一个统一的数据段(.data),作为程序的共享数据段。通过普通方式定义的变量都放在共享数据段。
d)将运算控制核心支持的第一关键字所定义的变量作为运算控制核心私有变量,存在运算控制核心私有段中;将运算核心支持的第一关键字所定义的变量作为运算核心私有变量,存在运算核心私有段中;将运算核心支持的第二关键字所定义的变量作为运算核心内部变量,存在运算核心内部段中;而且融合后保留运算控制核心私有段、运算核心私有段和运算核心内部段,并且由运行支撑环境在程序执行前将运算控制核心私有段、运算核心私有段和运算核心内部段,分别加载到运算控制核心的私有数据空间、运算核心的私有数据空间和运算核心的内部存储空间上。
具体地,例如,在运算控制核心中,运算控制核心支持__thread关键字,通过__thread定义的变量为运算控制核心私有变量,存放在.tdata段。在运算核心中,运算核心支持__thread和__thread_local关键字,通过__thread定义的变量为运算核心私有变量,存放在.tdata_private段,通过__thread_local定义的变量为运算核心局存变量,存放在.tdata_local段。融合后将保留这三个段,并由运行支撑环境在程序执行前将其分别加载到运算控制核心的私有数据空间、运算核心的私有数据空间和运算核心的内部存储空间上。
e)将运算控制核心的只读段(.rodata)和运算核心的只读段(.rodata)融合为一个只读段(.rodata)。
本发明针对异构众核的特殊结构,实现了一种能够自动融合异构代码、实现多层次存储结构数据排放的技术,该技术大大提升了异构众核芯片的好用性和易用性,用户只需要编写针对运算控制核心和运算核心的符合编程习惯的程序,由编译器来实现代码融合,对用户基本透明,并且提供了多种关键字的编译器支持,方便用户充分利用异构众核芯片的多级存储层次。
此外,需要说明的是,除非特别指出,否则说明书中的术语“第一”、“第二”、“第三”等描述仅仅用于区分说明书中的各个组件、元素、步骤等,而不是用于表示各个组件、元素、步骤之间的逻辑关系或者顺序关系等。
可以理解的是,虽然本发明已以较佳实施例披露如上,然而上述实施例并非用以限定本发明。对于任何熟悉本领域的技术人员而言,在不脱离本发明技术方案范围情况下,都可利用上述揭示的技术内容对本发明技术方案作出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本发明技术方案保护的范围内。
Claims (5)
1.一种异构代码融合的编译和生成方法,其特征在于包括:
第一步骤:利用运算控制核心编译器和运算核心编译器分别为运算控制核心和运算核心生成第一对象文件和第二对象文件;
第二步骤:运算核心编译器自动实现对第一对象文件中的函数的重命名,在函数名的前加上前缀;
第三步骤:链接器将重命名后第一对象文件与第二对象文件链接融合为统一的可执行程序。
2.根据权利要求1所述的异构代码融合的编译和生成方法,其特征在于,第一对象文件和第二对象文件是后缀为.o的文件。
3.根据权利要求1或2所述的异构代码融合的编译和生成方法,其特征在于,所述前缀是“slave_”前缀。
4.根据权利要求1或2所述的异构代码融合的编译和生成方法,其特征在于,链接融合包括:
将运算控制核心的文件头与运算核心的文件头,融合为一个新的针对异构众核架构的新文件头;
针对运算控制核心的指令段的第一命名和运算核心的指令段的第二命名,融合后将保留运算控制核心的指令段和运算核心的指令段,并由运行支撑环境自动将具有第一命名的指令段指令加载到运算控制核心,将具有第二命名的指令段指令加载到运算核心;
运算控制核心和运算核心的数据段融合为一个统一的数据段,作为程序的共享数据段;
将运算控制核心支持中的由运算控制核心支持的第一关键字所定义的变量作为运算控制核心私有变量,存在运算控制核心私有段中;将运算核心中的第一关键字所定义的变量作为运算核心私有变量,存在运算核心私有段中;将运算核心中的第二关键字所定义的变量作为运算核心内部变量,存在运算核心内部段中;而且融合后保留运算控制核心私有段、运算核心私有段和运算核心内部段,并且由运行支撑环境在程序执行前将运算控制核心私有段、运算核心私有段和运算核心内部段,分别加载到运算控制核心的私有数据空间、运算核心的私有数据空间和运算核心的内部存储空间上;
将运算控制核心的只读段和运算核心的只读段融合为一个只读段。
5.根据权利要求1或2所述的异构代码融合的编译和生成方法,其特征在于,链接融合的具体流程如下:
将运算控制核心的文件头与运算核心的文件头,融合为一个新的针对异构众核架构的新文件头;
针对运算控制核心的指令段的后缀.text和运算核心的指令段的后缀.text1,融合后将保留运算控制核心的指令段和运算核心的指令段,并由运行支撑环境自动将具有后缀.text的指令段指令加载到运算控制核心,将具有后缀.text1的指令段指令加载到运算核心。
运算控制核心和运算核心各自的后缀为.data的数据段融合为一个统一的后缀为.data的数据段,作为程序的共享数据段;
针对运算控制核心支持的__thread关键字,将运算控制核心的通过__thread定义的变量作为运算控制核心私有变量,存放在.tdata段;针对运算核心支持__thread和__thread_local关键字,将运算核心的通过__thread定义的变量作为运算核心私有变量,存放在.tdata_private段,而且将运算核心的通过__thread_local定义的变量作为运算核心局存变量,存放在.tdata_local段;融合后将保留.tdata段、.tdata_private段和.tdata_local段,并由运行支撑环境在程序执行前将.tdata段、.tdata_private段和.tdata_local段分别加载到运算控制核心的私有数据空间、运算核心的私有数据空间和运算核心的内部存储空间上;
将运算控制核心的后缀为.rodata的只读段和运算核心的后缀为.rodata的只读段融合为后缀为.rodata的一个只读段。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510828419.0A CN105426226B (zh) | 2015-11-24 | 2015-11-24 | 一种异构代码融合的编译和生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510828419.0A CN105426226B (zh) | 2015-11-24 | 2015-11-24 | 一种异构代码融合的编译和生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105426226A true CN105426226A (zh) | 2016-03-23 |
CN105426226B CN105426226B (zh) | 2018-07-06 |
Family
ID=55504454
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510828419.0A Active CN105426226B (zh) | 2015-11-24 | 2015-11-24 | 一种异构代码融合的编译和生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105426226B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107239315A (zh) * | 2017-04-11 | 2017-10-10 | 北京深鉴智能科技有限公司 | 面向神经网络异构计算平台的编程模型 |
CN109240702A (zh) * | 2018-08-15 | 2019-01-18 | 无锡江南计算技术研究所 | 一种多线程模式下的快速段式编址配置和访问方法 |
CN112558978A (zh) * | 2019-09-26 | 2021-03-26 | 无锡江南计算技术研究所 | 支撑异构众核全芯片视角的加速编程和编译方法 |
CN112579090A (zh) * | 2019-09-27 | 2021-03-30 | 无锡江南计算技术研究所 | 异构众核架构下的异步并行i/o编程框架方法 |
CN116661779A (zh) * | 2023-07-26 | 2023-08-29 | 北京麟卓信息科技有限公司 | 一种基于符号动态重定向的多编译器混合链接方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070113231A1 (en) * | 2005-11-11 | 2007-05-17 | Hitachi, Ltd. | Multi processor and task scheduling method |
CN102741828A (zh) * | 2009-10-30 | 2012-10-17 | 英特尔公司 | 对计算机平台的异构处理器的双向通信支持 |
CN103116513A (zh) * | 2012-07-13 | 2013-05-22 | 北京时代民芯科技有限公司 | 一种异构多核处理器编译器 |
CN103389908A (zh) * | 2012-05-09 | 2013-11-13 | 辉达公司 | 用于分开编译嵌入在主机代码中的设备代码的方法和系统 |
CN103744682A (zh) * | 2014-01-24 | 2014-04-23 | 中国科学院自动化研究所 | 一种分开编译异构混编程序的方法和系统 |
CN103886095A (zh) * | 2014-04-03 | 2014-06-25 | 北京深思数盾科技有限公司 | 跨平台目标文件复用方法 |
-
2015
- 2015-11-24 CN CN201510828419.0A patent/CN105426226B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070113231A1 (en) * | 2005-11-11 | 2007-05-17 | Hitachi, Ltd. | Multi processor and task scheduling method |
CN102741828A (zh) * | 2009-10-30 | 2012-10-17 | 英特尔公司 | 对计算机平台的异构处理器的双向通信支持 |
CN103389908A (zh) * | 2012-05-09 | 2013-11-13 | 辉达公司 | 用于分开编译嵌入在主机代码中的设备代码的方法和系统 |
CN103116513A (zh) * | 2012-07-13 | 2013-05-22 | 北京时代民芯科技有限公司 | 一种异构多核处理器编译器 |
CN103744682A (zh) * | 2014-01-24 | 2014-04-23 | 中国科学院自动化研究所 | 一种分开编译异构混编程序的方法和系统 |
CN103886095A (zh) * | 2014-04-03 | 2014-06-25 | 北京深思数盾科技有限公司 | 跨平台目标文件复用方法 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107239315A (zh) * | 2017-04-11 | 2017-10-10 | 北京深鉴智能科技有限公司 | 面向神经网络异构计算平台的编程模型 |
WO2018188463A1 (zh) * | 2017-04-11 | 2018-10-18 | 北京深鉴智能科技有限公司 | 面向神经网络异构计算平台的编程模型 |
CN107239315B (zh) * | 2017-04-11 | 2019-11-15 | 赛灵思公司 | 面向神经网络异构计算平台的编程模型 |
US10732943B2 (en) | 2017-04-11 | 2020-08-04 | Xilinx, Inc. | Programming model of neural network-oriented heterogeneous computing platform |
CN109240702A (zh) * | 2018-08-15 | 2019-01-18 | 无锡江南计算技术研究所 | 一种多线程模式下的快速段式编址配置和访问方法 |
CN112558978A (zh) * | 2019-09-26 | 2021-03-26 | 无锡江南计算技术研究所 | 支撑异构众核全芯片视角的加速编程和编译方法 |
CN112558978B (zh) * | 2019-09-26 | 2022-11-25 | 无锡江南计算技术研究所 | 支撑异构众核全芯片视角的加速编程和编译方法 |
CN112579090A (zh) * | 2019-09-27 | 2021-03-30 | 无锡江南计算技术研究所 | 异构众核架构下的异步并行i/o编程框架方法 |
CN116661779A (zh) * | 2023-07-26 | 2023-08-29 | 北京麟卓信息科技有限公司 | 一种基于符号动态重定向的多编译器混合链接方法 |
CN116661779B (zh) * | 2023-07-26 | 2023-09-19 | 北京麟卓信息科技有限公司 | 一种基于符号动态重定向的多编译器混合链接方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105426226B (zh) | 2018-07-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105426226A (zh) | 一种异构代码融合的编译和生成方法 | |
KR101240092B1 (ko) | 컴퓨터 플랫폼에서의 방법 및 컴퓨터 플랫폼 | |
Daniel et al. | NeoEMF: A multi-database model persistence framework for very large models | |
US9344833B2 (en) | Data component in a mobile application framework | |
US20150161180A1 (en) | Consumption layer query interface | |
US20160034272A1 (en) | Managing a catalog of scripts | |
Karau | Fastdata Processing with Spark | |
Salvaneschi et al. | Programming with implicit flows | |
Wu et al. | Big data programming models | |
CN101944133B (zh) | 一种xml元数据对象化解析方法及系统 | |
Delfosse et al. | UML as a schema candidate for graph databases | |
Scherer | Hands-on JavaScript High Performance: Build Faster Web Apps Using Node. js, Svelte. js, and WebAssembly | |
JP2018514843A (ja) | スタイルのための宣言型カスケード再順序付け | |
Mou et al. | Visual orchestration and autonomous execution of distributed and heterogeneous computational biology pipelines | |
US10643024B2 (en) | Method for converting a binary data stream | |
Horbach | Implications of interoperability for factory planning | |
Posa | Scala Reactive Programming: Build scalable, functional reactive microservices with Akka, Play, and Lagom | |
Auer | A Web based platform for collaborative ontology management | |
JP2016024794A (ja) | プログラム作成装置 | |
Buchwald et al. | A GrGen .NET solution of the model migration case for the Transformation Tool Contest 2010 | |
Olausson et al. | Source control management | |
Li et al. | Research on Code Separation Technology in B/S Framework | |
Borkovec et al. | Effective Use of the UML-language in Small Companies | |
Staines | Intuitive transformation of uml2 activities into fundamental modeling concept petri nets and colored petri nets | |
Zsók et al. | Editorial TFP 2009/2010 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |