CN115495093B - 一种混合编译方法、装置、电子设备和存储介质 - Google Patents

一种混合编译方法、装置、电子设备和存储介质 Download PDF

Info

Publication number
CN115495093B
CN115495093B CN202211383971.XA CN202211383971A CN115495093B CN 115495093 B CN115495093 B CN 115495093B CN 202211383971 A CN202211383971 A CN 202211383971A CN 115495093 B CN115495093 B CN 115495093B
Authority
CN
China
Prior art keywords
compiling
file
code
adopting
language
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.)
Active
Application number
CN202211383971.XA
Other languages
English (en)
Other versions
CN115495093A (zh
Inventor
黄雪辉
熊超
蔡权雄
牛昕宇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Corerain Technologies Co Ltd
Original Assignee
Shenzhen Corerain Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shenzhen Corerain Technologies Co Ltd filed Critical Shenzhen Corerain Technologies Co Ltd
Priority to CN202211383971.XA priority Critical patent/CN115495093B/zh
Publication of CN115495093A publication Critical patent/CN115495093A/zh
Application granted granted Critical
Publication of CN115495093B publication Critical patent/CN115495093B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time

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)

Abstract

本申请提供了一种混合编译方法、装置、电子设备和存储介质,所述方法包括:确定目标文件,其中,所述目标文件中包含模型部署所需的多种类型的处理代码;基于可扩展的编译工具中携带的代码编译属性,采用不同的编译工具分别对所述目标文件中的每种处理代码进行编译,得到包含有多个编译结果的一个中间文件;采用携带有链接标识的链接工具将所述中间文件打包成可执行文件,其中,所述链接标识指示已采用所述目标文件。本申请简化了混合编译的过程。

Description

一种混合编译方法、装置、电子设备和存储介质
技术领域
本申请涉及混合编译技术领域,尤其涉及一种混合编译方法、装置、电子设备和存储介质。
背景技术
人工智能神经网络在训练完成后,在部署到实际应用场景时,通常需要搭配基本代码模块对输入数据和输出数据做进一步的处理,以适配模型的输入要求和应用的输出要求。由于人工智能神经网络通常需要大量的计算,一般都会运行在特定的加速上,如GPU,FPGA加速卡等,而针对模型的输入数据和输出数据的进一步处理,通常会使用Python、C++等代码编写并运行于主机CPU上。
神经网络模型在运行于加速设备上时,通常会使用设备配套的编译工具,将模型转换并优化为设备能够识别的指令,而针对输入输出数据的处理代码则需要单独针对CPU平台编译,例如通过gcc工具编译成CPU能够识别和执行的指令序列。这样在实际部署神经网络模型时,需要多个编译过程进行编译,再将不同平台的编译结果链接在一起才能执行,过程比较繁琐。
针对当前模型混合编译比较繁琐的问题,目前尚无良好的解决方案。
发明内容
本申请实施例的目的在于提供一种混合编译方法、装置、电子设备和存储介质,以解决当前模型混合编译比较繁琐的问题。具体技术方案如下:
第一方面,提供了一种混合编译方法,所述方法包括:
确定目标文件,其中,所述目标文件中包含模型部署所需的多种类型的处理代码;
基于可扩展的编译工具中携带的代码编译属性,采用不同的编译工具分别对所述目标文件中的每种处理代码进行编译,得到包含有多个编译结果的一个中间文件;
采用携带有链接标识的链接工具将所述中间文件打包成可执行文件,其中,所述链接标识指示已采用所述目标文件。
可选地,所述确定目标文件包括:
通过已有的编译工具和自定义的编译工具,定义一种新的文件格式,其中,所述新的文件格式由通用编程语言和库函数调用组成,用于编写领域特定语言;
基于所述新的文件格式,将模型运行在不同设备上的代码编入同一个源文件,得到目标文件,其中,所述目标文件的代码由通用编程语言和领域特定语言组成。
可选地,基于可扩展的编译工具中携带的代码编译属性,采用不同的编译工具分别对所述目标文件中的每种处理代码进行编译,得到包含有多个编译结果的一个中间文件包括:
在可扩展的编译工具中增加代码编译属性,其中,所述代码编译属性指示所述代码为通用编程语言或领域特定语言;
采用所述可扩展的编译工具对通用编程语言进行编译,并采用后端预设的编译器对所述领域特定语言进行编译;
将两个编译结果纳入同一个中间文件。
可选地,所述方法还包括:
在链接过程中,将全局变量从所述中间文件中提取出来,并写入单独的数据文件,其中,所述中间文件包含代码和数据;
通过预设的映射表,关联所述全局变量和所述数据文件。
可选地,所述基于所述新的文件格式,将模型运行在不同设备上的代码编入同一个源文件,得到目标文件包括:
在神经网络模型的部署过程中,基于新的文件格式RainBuilder C,采用张量类型的领域特定语言确定所述神经网络模型运行在加速设备上的代码,并采用C++语言确定输入输出数据运行在控制器上的代码;
将所述张量类型的领域特定语言和所述C++语言编入同一个源文件,得到目标文件。
可选地,采用所述可扩展的编译工具对所述通用编程语言进行编译,并采用后端预设的编译器对所述领域特定语言进行编译包括:在神经网络模型的部署过程中,采用编译器框架系统的轻量级编译器对C++语言进行编译,并采用后端预设的编译器对张量类型的领域特定语言进行编译;
将两个编译结果纳入同一个中间文件包括:将两个编译结果纳入位码文件。
可选地,采用携带有链接标识的链接工具将所述中间文件打包成可执行文件包括:
采用携带有链接标识的链接工具将所述位码文件打包成可执行文件RainBuilderObject。
第二方面,提供了一种混合编译装置,所述装置包括:
确定模块,用于确定目标文件,其中,所述目标文件中包含模型部署所需的多种类型的处理代码;
编译模块,用于基于可扩展的编译工具中携带的代码编译属性,采用不同的编译工具分别对所述目标文件中的每种处理代码进行编译,得到包含有多个编译结果的一个中间文件;
打包模块,用于采用携带有链接标识的链接工具将所述中间文件打包成可执行文件,其中,所述链接标识指示是否采用所述目标文件。
第三方面,提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现任一所述的混合编译方法步骤。
第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现任一所述的混合编译方法步骤。
本申请实施例有益效果:
本申请实施例提供了一种混合编译方法,通过将模型部署所需的多种类型的处理代码均保存在目标文件中,对不同的处理代码进行编译后,只能得到唯一的一个中间文件,这样模型代码是在一个编译过程中完成编译,最后根据链接工具携带的链接标识,确定已采用目标文件后,将中间文件链接生成可执行文件。相对于现有技术还需将多个平台的编译结果链接在一起才能生成可执行文件,本申请通过得到唯一的一个中间文件,省去了多个编译结果的链接操作,简化了混合编译的过程。
当然,实施本申请的任一产品或方法并不一定需要同时达到以上的所有优点。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种混合编译的方法流程图;
图2为本申请实施例提供的神经网络模型的混合编译的处理流程图;
图3为本申请实施例提供的一种混合编译装置的结构示意图;
图4为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
在后续的描述中,使用用于表示元件的诸如“模块”、“部件”或“单元”的后缀仅为了有利于本申请的说明,其本身并没有特定的意义。因此,“模块”与“部件”可以混合地使用。
以下为说明书中英文名词的解释:
LLVM(Low Level Virtual Machine),是构架编译器(compiler)的框架系统。
lld(fuse-ld=lld)是LLVM里的一个子项目,是一个链接器。
bitcode(bitcode是被编译程序的一种中间形式的代码,包含bitcode配置的程序将会在App store上被编译和链接)。
Tensor:神经网络中的张量。
Clang是一个C语言、C++、Objective-C语言的轻量级编译器。
为了解决背景技术中提及的问题,根据本申请实施例的一方面,提供了一种混合编译方法的实施例。
本申请实施例中的一种混合编译方法可以由服务器来执行,用于简化混合编译过程。
下面将结合具体实施方式,对本申请实施例提供的一种混合编译方法进行详细的说明,如图1所示,具体步骤如下:
步骤101:确定目标文件。
其中,目标文件中包含模型部署所需的多种类型的处理代码。
在本申请实施例中,模型在部署过程中可能需要多个编译过程,每个编译过程对应一种代码,服务器在现有的前后端编译工具的基础上,定义一种新的文件格式,得到目标文件,其中,该新的文件格式由通用编程语言和库函数调用组成,能够用来编写领域特定语言,从而得到包含通用编程语言和领域特定语言的目标文件。该目标文件中包含模型部署所需的多种类型的处理代码,代码由通用编程语言和领域特定语言组成。
其中,该新的文件格式可以是RBC(RainBuilder C),也可以是nVidia的NVCC。RBC是一个类似C++文件的文本文件,可以用来写RBC代码,RBC代码主要由普通的C++代码和预先提供的一些库函数调用组成,该库函数类似CUDNN函数。
通用编程语言(GPL,General Purpose Language),也就是我们非常熟悉的Objective-C、Java、Python、C++以及 C 语言等。领域特定语言(DSL,Domain SpecificLanguage)是以极其高效的方式描述特定领域的对象、规则和运行方式的语言,需要有特定的解释器与其配合。
在神经网络模型的部署过程中,复用LLVM编译工具链中现成的前后端编译工具,通过定制化插入自定义的编译工具,定义了一种新的文件格式RBC(RainBuilder C),采用Tensor类型的领域特定语言确定神经网络模型运行在加速设备上的代码,并采用C++语言确定输入输出数据运行在控制器上的代码。
步骤102:基于可扩展的编译工具中携带的代码编译属性,采用不同的编译工具分别对目标文件中的每种处理代码进行编译,得到包含有多个编译结果的一个中间文件。
服务器事先在可扩展的编译工具中增加编译选项,编译选项指示是否为代码提供编译属性,编译属性用于识别代码类型,例如代码为通用编程语言或领域特定语言。
其中,领域特定语言(英语:domain-specific language、DSL)指的是专注于某个应用程序领域的计算机语言,又译作领域专用语言。
其中,可扩展的编译工具为开源的编译工具,技术人员可以根据实际需求对编译工具进行修改。示例性的,可扩展的编译工具为clang编译器,也可以为其他开源编译器。
服务器在原有的编译流程中插入自定义编译流程,自定义编译流程指将目标文件中不同的处理代码识别出来分别进行编译,将得到的多个编译结果保存在同一文件中。具体为,通过处理工具将目标文件的内容进行分解,根据代码编译属性,将目标文件中不同的处理代码识别出来,然后采用不同的编译工具分别对目标文件中的每种处理代码进行编译,得到多个编译结果,该多个编译结果存储在一个中间文件。
RBC文件示例如下所示:
#include "rblib.hh"
#include <math.h>
#include <stdio.h>
// #include <vector>
#include <fstream>
#include <opencv2/opencv.hpp>
using namespace rblib;
#pragma import_sg("/workspace/CodeGitLabFuture/Model_RBC/torch_faster_rcnn_end2end.sg", \
inputs = ["img"], outputs = ["4578", "4531", "4521"])
TensorArray tc_frcnn_net(Tensor img);
__rbdevice__ Tensor preprocess(std::string name, cv::Mat& img) {
cv::Mat raw = cv::imread(name);
cv::cvtColor(raw, img, cv::COLOR_BGR2RGB);
auto h = img.rows;
auto w = img.cols;
Tensor input("uint8", {1, h, w, 3});
input.setData(img.data);
return input;
}
__rbentrypoint__("run_net") __rbglobal__
float *torch_frcnn_main(const char* name) {
printf("input image file = %s\n", name);
cv::Mat img;
Tensor X = preprocess(name, img);
TensorArray arr = tc_frcnn_net(X);
Tensor box = arr[0];
Tensor label = arr[1];
Tensor score = arr[2];
int64_t rk = box.Rank();
printf("box rank = %ld\n", rk);
cv::Mat oimg = cv::imread(name);
oimg = draw_boxes(oimg, ToVector<cv::Vec4f>(box),
ToVector<float>(score), cvtLabel(ToVector<int>(label)), 0.0f);
cv::imwrite("torch_frcnn_result.png", oimg);
printf("end of torch_frcnn backbone\n");
return nullptr;
}
同一类代码编译属性可能对应多个属性标识,在上述示例中,属性标识TensorArray或Tensor用于标识领域特定语言,可以将后面的代码认定为领域特定语言。
示例性的,领域特定语言包括:
TensorArray tc_frcnn_net(Tensor img);
Tensor input("uint8", {1, h, w, 3});
input.setData(img.data);
步骤103:采用携带有链接标识的链接工具将中间文件打包成可执行文件。
其中,链接标识用于指示已采用目标文件。
服务器事先在链接工具中增加链接选项,链接选项指示是否采用目标文件,若链接选项指示采用目标文件,则以链接标识的形式展示出来。由于已采用目标文件,且在编译过程中使用不同的编译工具对每种处理代码进行编译,那么可采用该链接工具将中间文件打包成可执行文件,完成多个代码的混合编译。
模型在部署到实际应用场景时,通常需要搭配基本代码模块对数据做进一步的处理,以适配模型的输入要求和应用的输出要求。将模型转换和数据输入输出的不同处理代码保存在同一目标文件中,根据每种处理代码对应的代码编译属性,分别将目标文件中不同的处理代码识别出来,并使用不同的前端编译工具对每种处理代码进行编译,得到适用于多个目标平台的一个中间文件,在链接工具中增加目标文件的链接标识,采用链接工具将该中间文件链接生成可执行文件。
在本申请中,通过将模型部署所需的多种类型的处理代码均保存在目标文件中,对不同的处理代码进行编译后,只能得到唯一的一个中间文件,这样模型代码是在一个编译过程中完成编译,最后根据链接工具携带的链接标识,确定已采用目标文件后,将中间文件链接生成可执行文件。相对于现有技术还需将多个平台的编译结果链接在一起才能生成可执行文件,本申请通过对唯一的一个中间文件进行链接,省去了多个编译结果的链接操作,简化了混合编译的过程。
作为一种可选的实施方式,基于可扩展的编译工具中携带的代码编译属性,采用不同的编译工具分别对目标文件中的每种处理代码进行编译,得到包含有多个编译结果的一个中间文件包括:在可扩展的编译工具中增加代码编译属性,其中,代码编译属性指示代码为通用编程语言或领域特定语言;采用可扩展的编译工具对通用编程语言进行编译,并采用后端预设的编译器对领域特定语言进行编译;将两个编译结果纳入同一个中间文件。
服务器事先在可扩展的编译工具中,增加用于识别代码类型的代码编译属性,代码编译属性用于识别代码为通用编程语言或领域特定语言。在后续的编译流程中,服务器采用可扩展的编译工具对通用编程语言进行编译,并采用后端预设的编译器对领域特定语言进行编译,得到两个编译结果,最后将该两个编译结果纳入同一个中间文件。
在神经网络模型的部署过程中,采用LLVM的clang编译器对C++语言进行编译,C++语言运行于主机CPU上,并采用后端预设的编译器对Tensor类型的领域特定语言进行编译,领域特定语言运行在加速设备上,将两个编译结果纳入bitcode文件,最后采用lld工具将bitcode文件打包成可执行文件RBO(RainBuilder Object)。其中,lld工具是LLVM框架下面的链接器。
本申请除神经网络模型外,还可以应用于三维模型等其他模型,对于不同的框架系统,其编译器和链接器也是可以对应更改类型的。
作为一种可选的实施方式,方法还包括:在链接过程中,将全局变量从中间文件中提取出来,并写入单独的数据文件,其中,中间文件包含代码和数据;通过预设的映射表,关联全局变量和数据文件。
在现有的链接过程中,生成的一个可执行文件中既包括代码文件又包括数据文件,这样动态库或静态库中由于包含过多的全局数据而显得臃肿。本申请将全局变量从中间文件中提取出来,每个全局变量写入单独的数据文件,然后生成一个映射表,将全局变量和数据文件关联。本申请通过提取全局变量至数据文件中,可以将代码和数据分离,将数据文件存入一个单独的存储设备,能够提高数据读取效率。
可选的,本申请实施例还提供了神经网络模型的混合编译的处理流程图,如图2所示,具体步骤如下。
将神经网络模型和模型的输入输出数据存入RBC文件中;为clang增加编译选项,确定代码编译属性;将RBC文件不同类型的代码识别出来,采用不同的编译工具进行编译;生成不同目标平台上的中间文件,在lld工具中增加链接选项,生成单独的可执行文件RBO。
基于相同的技术构思,本申请实施例还提供了一种混合编译混合编译装置,如图3所示,该装置包括:
确定模块301,用于确定目标文件,其中,目标文件中包含模型部署所需的多种类型的处理代码;
编译模块302,用于基于可扩展的编译工具中携带的代码编译属性,采用不同的编译工具分别对目标文件中的每种处理代码进行编译,得到包含有多个编译结果的一个中间文件;
打包模块303,用于采用携带有链接标识的链接工具将中间文件打包成可执行文件,其中,链接标识指示是否采用目标文件。
可选地,确定模块301用于:
通过已有的编译工具和自定义的编译工具,定义一种新的文件格式,其中,新的文件格式由通用编程语言和库函数调用组成,用于编写领域特定语言;
基于新的文件格式,将模型运行在不同设备上的代码编入同一个源文件,得到目标文件,其中,目标文件的代码由通用编程语言和领域特定语言组成。
可选地,编译模块302用于:
在可扩展的编译工具中增加代码编译属性,其中,代码编译属性指示代码为通用编程语言或领域特定语言;
采用可扩展的编译工具对通用编程语言进行编译,并采用后端预设的编译器对领域特定语言进行编译;
将两个编译结果纳入同一个中间文件。
可选地,该装置还用于:
在链接过程中,将全局变量从中间文件中提取出来,并写入单独的数据文件,其中,中间文件包含代码和数据;
通过预设的映射表,关联全局变量和数据文件。
可选地,编译模块302用于:
在神经网络模型的部署过程中,基于新的文件格式RainBuilder C,采用张量类型的领域特定语言确定所述神经网络模型运行在加速设备上的代码,并采用C++语言确定输入输出数据运行在控制器上的代码;
将所述张量类型的领域特定语言和所述C++语言编入同一个源文件,得到目标文件。
可选地,编译模块302用于:在神经网络模型的部署过程中,采用编译器框架系统的轻量级编译器对C++语言进行编译,并采用后端预设的编译器对张量类型的领域特定语言进行编译;
将两个编译结果纳入位码文件。
可选地,打包模块303用于:
采用携带有链接标识的链接工具将所述位码文件打包成可执行文件RainBuilderObject。
根据本申请实施例的另一方面,本申请提供了一种电子设备,如图4所示,包括存储器403、处理器401、通信接口402及通信总线404,存储器403中存储有可在处理器401上运行的计算机程序,存储器403、处理器401通过通信接口402和通信总线404进行通信,处理器401执行计算机程序时实现上述方法的步骤。
上述电子设备中的存储器、处理器通过通信总线和通信接口进行通信。通信总线可以是外设部件互连标准(Peripheral Component Interconnect,简称PCI)总线或扩展工业标准结构(Extended Industry Standard Architecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。
存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
根据本申请实施例的又一方面还提供了一种具有处理器可执行的非易失的程序代码的计算机可读介质。
可选地,在本申请实施例中,计算机可读介质被设置为存储用于所述处理器执行上述方法的程序代码。
可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。
本申请实施例在具体实现时,可以参阅上述各个实施例,具有相应的技术效果。
可以理解的是,本文描述的这些实施例可以用硬件、软件、固件、中间件、微码或其组合来实现。对于硬件实现,处理单元可以实现在一个或多个专用集成电路(ApplicationSpecific Integrated Circuits,ASIC)、数字信号处理器(Digital Signal Processing,DSP)、数字信号处理设备(DSP Device,DSPD)、可编程逻辑设备(Programmable LogicDevice,PLD)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、通用处理器、控制器、微控制器、微处理器、用于执行本申请所述功能的其它电子单元或其组合中。
对于软件实现,可通过执行本文所述功能的单元来实现本文所述的技术。软件代码可存储在存储器中并通过处理器执行。存储器可以在处理器中或在处理器外部实现。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本申请的具体实施方式,使本领域技术人员能够理解或实现本申请。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。

Claims (9)

1.一种混合编译方法,其特征在于,所述方法包括:
确定目标文件,其中,所述目标文件中包含模型部署时运行在不同设备上的多种类型的处理代码,其中,所述目标文件的代码由通用编程语言和领域特定语言组成,所述通用编程语言为输入输出数据运行在控制器上的代码,所述领域特定语言为神经网络模型运行在加速设备上的代码;
基于可扩展的编译工具中携带的代码编译属性,采用不同的编译工具分别对所述目标文件中的每种处理代码进行编译,得到包含有多个编译结果的一个中间文件,其中,所述代码编译属性用于识别代码类型;
采用携带有链接标识的链接工具将所述中间文件打包成可执行文件,其中,所述链接标识指示已采用所述目标文件;
其中,基于可扩展的编译工具中携带的代码编译属性,采用不同的编译工具分别对所述目标文件中的每种处理代码进行编译,得到包含有多个编译结果的一个中间文件包括:
在可扩展的编译工具中增加代码编译属性,其中,所述代码编译属性指示所述代码为通用编程语言或领域特定语言;
采用所述可扩展的编译工具对所述通用编程语言进行编译,并采用后端预设的编译器对所述领域特定语言进行编译;
将两个编译结果纳入同一个中间文件。
2.根据权利要求1所述的方法,其特征在于,所述确定目标文件包括:
通过已有的编译工具和自定义的编译工具,定义一种新的文件格式,其中,所述新的文件格式由通用编程语言和库函数调用组成,用于编写领域特定语言;
基于所述新的文件格式,将模型运行在不同设备上的代码编入同一个源文件,得到目标文件,其中,所述目标文件的代码由通用编程语言和领域特定语言组成。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在链接过程中,将全局变量从所述中间文件中提取出来,并写入单独的数据文件,其中,所述中间文件包含代码和数据;
通过预设的映射表,关联所述全局变量和所述数据文件。
4.根据权利要求2所述的方法,其特征在于,所述基于所述新的文件格式,将模型运行在不同设备上的代码编入同一个源文件,得到目标文件包括:
在神经网络模型的部署过程中,基于新的文件格式RainBuilder C,采用张量类型的领域特定语言确定所述神经网络模型运行在加速设备上的代码,并采用C++语言确定输入输出数据运行在控制器上的代码;
将所述张量类型的领域特定语言和所述C++语言编入同一个源文件,得到目标文件。
5.根据权利要求1所述的方法,其特征在于,
采用所述可扩展的编译工具对所述通用编程语言进行编译,并采用后端预设的编译器对所述领域特定语言进行编译包括:在神经网络模型的部署过程中,采用编译器框架系统的轻量级编译器对C++语言进行编译,并采用后端预设的编译器对张量类型的领域特定语言进行编译;
将两个编译结果纳入同一个中间文件包括:将两个编译结果纳入位码文件。
6.根据权利要求5所述的方法,其特征在于,采用携带有链接标识的链接工具将所述中间文件打包成可执行文件包括:
采用携带有链接标识的链接工具将所述位码文件打包成可执行文件RainBuilderObject。
7.一种混合编译装置,其特征在于,所述装置包括:
确定模块,用于确定目标文件,其中,所述目标文件中包含模型部署时运行在不同设备上的多种类型的处理代码,其中,所述目标文件的代码由通用编程语言和领域特定语言组成,所述通用编程语言为输入输出数据运行在控制器上的代码,所述领域特定语言为神经网络模型运行在加速设备上的代码;
编译模块,用于基于可扩展的编译工具中携带的代码编译属性,采用不同的编译工具分别对所述目标文件中的每种处理代码进行编译,得到包含有多个编译结果的一个中间文件,其中,所述代码编译属性用于识别代码类型;
打包模块,用于采用携带有链接标识的链接工具将所述中间文件打包成可执行文件,其中,所述链接标识指示是否采用所述目标文件;
其中,所述编译模块用于:
在可扩展的编译工具中增加代码编译属性,其中,所述代码编译属性指示所述代码为通用编程语言或领域特定语言;
采用所述可扩展的编译工具对所述通用编程语言进行编译,并采用后端预设的编译器对所述领域特定语言进行编译;
将两个编译结果纳入同一个中间文件。
8.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1-6任一所述的方法步骤。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-6任一所述的方法步骤。
CN202211383971.XA 2022-11-07 2022-11-07 一种混合编译方法、装置、电子设备和存储介质 Active CN115495093B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211383971.XA CN115495093B (zh) 2022-11-07 2022-11-07 一种混合编译方法、装置、电子设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211383971.XA CN115495093B (zh) 2022-11-07 2022-11-07 一种混合编译方法、装置、电子设备和存储介质

Publications (2)

Publication Number Publication Date
CN115495093A CN115495093A (zh) 2022-12-20
CN115495093B true CN115495093B (zh) 2023-07-21

Family

ID=85116036

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211383971.XA Active CN115495093B (zh) 2022-11-07 2022-11-07 一种混合编译方法、装置、电子设备和存储介质

Country Status (1)

Country Link
CN (1) CN115495093B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107341010A (zh) * 2017-06-26 2017-11-10 华中科技大学 一种C/C++与COStream混合编程方法和可视化编译系统
CN111880802A (zh) * 2020-07-03 2020-11-03 深圳市欢太科技有限公司 一种编译方法、电子设备及计算机可读存储介质
CN113687833A (zh) * 2021-08-09 2021-11-23 深圳市汇川技术股份有限公司 混合编译方法、混合编译系统、编译器及存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160357530A1 (en) * 2015-06-05 2016-12-08 Apple Inc. Method and apparatus for intermediate representation of applications
CN109496294A (zh) * 2018-01-15 2019-03-19 深圳鲲云信息科技有限公司 人工智能处理装置的编译方法及系统、存储介质及终端
CN111580802B (zh) * 2020-04-30 2024-03-22 完美世界(北京)软件科技发展有限公司 持续集成方法、基于分布式编译的持续集成方法及系统
CN112363729B (zh) * 2020-11-23 2024-05-14 北京轩宇信息技术有限公司 用于静态分析的多编译器混合编译的监控方法及装置
CN113902112A (zh) * 2021-12-10 2022-01-07 深圳鲲云信息科技有限公司 硬件计算模拟方法、系统及计算机可读存储介质

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107341010A (zh) * 2017-06-26 2017-11-10 华中科技大学 一种C/C++与COStream混合编程方法和可视化编译系统
CN111880802A (zh) * 2020-07-03 2020-11-03 深圳市欢太科技有限公司 一种编译方法、电子设备及计算机可读存储介质
CN113687833A (zh) * 2021-08-09 2021-11-23 深圳市汇川技术股份有限公司 混合编译方法、混合编译系统、编译器及存储介质

Also Published As

Publication number Publication date
CN115495093A (zh) 2022-12-20

Similar Documents

Publication Publication Date Title
CN112100054B (zh) 一种面向数据管控的程序静态分析方法和系统
Visser Stratego: A language for program transformation based on rewriting strategies system description of stratego 0.5
EP3745256A1 (en) External code integrations within a computing environment
Haber et al. Montiarc-architectural modeling of interactive distributed and cyber-physical systems
CN110149800B (zh) 一种用于处理与源程序的源代码相关联的抽象语法树的装置
EP2087424A2 (en) A system and method for automated re-architectureing of legacy systems using object-oriented language
Vangheluwe Computer automated multi-paradigm modelling: Meta-modelling and graph transformation
Bos et al. Rascal: From algebraic specification to meta-programming
Thiemann Combinators for program generation
CN109032056A (zh) 可编程逻辑控制器编程语言转换方法
CN115495093B (zh) 一种混合编译方法、装置、电子设备和存储介质
Fischer et al. Abstract syntax trees-and their role in model driven software development
US11126408B2 (en) Incremental code generation method
Rieger et al. Challenges and Opportunities of Modularizing Textual Domain-Specific Languages.
Ramsey Beyond relooper: recursive translation of unstructured control flow to structured control flow (functional pearl)
US6981219B2 (en) Method and system for processing formulas and curves in a document
Campbell et al. Modeling and simulation with compose and activate
Fritzson et al. Formal semantics based translator generation and tool development in practice
Blunk et al. Efficient Development of Domain-Specific Simulation Modelling Languages and Tools
Palakkal et al. Automatic C to Simulink Model Converter (C2M) Tool
bin Uzayr Mastering C++ Programming Language: A Beginner’s Guide
Oda et al. Automated VDM-SL to Smalltalk Code Generators for Exploratory Modeling
Widen et al. Software design automation: Language design in the context of domain engineering
WO2007051634A2 (en) Method for generating a simulation program which can be executed on a host computer
CN116306918A (zh) 基于mlir的fpga神经网络模型部署方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant