CN113010181B - 一种深度学习框架之中算子的部署方法、装置及电子设备 - Google Patents
一种深度学习框架之中算子的部署方法、装置及电子设备 Download PDFInfo
- Publication number
- CN113010181B CN113010181B CN202110315269.9A CN202110315269A CN113010181B CN 113010181 B CN113010181 B CN 113010181B CN 202110315269 A CN202110315269 A CN 202110315269A CN 113010181 B CN113010181 B CN 113010181B
- Authority
- CN
- China
- Prior art keywords
- file
- library
- target
- operator
- installable
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
-
- 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/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/36—Software reuse
-
- 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
-
- 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/54—Link editing before load time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/10—Interfaces, programming languages or software development kits, e.g. for simulating neural networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/10—Interfaces, programming languages or software development kits, e.g. for simulating neural networks
- G06N3/105—Shells for specifying net layout
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Biophysics (AREA)
- Artificial Intelligence (AREA)
- Mathematical Physics (AREA)
- Health & Medical Sciences (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本申请公开了一种深度学习框架之中算子的部署方法、装置及电子设备,涉及深度学习等人工智能技术领域。该方案为:获取算子的源文件;对所述算子的源文件进行编译以形成所述算子的动态链接库;生成所述算子的动态链接库转的接口文件;根据所述动态链接库和所述接口文件生成可安装库文件;将所述可安装库文件安装至目标编程语言库,能够完全隐藏算子安装的所有过程,极大地降低了用户的学习成本,同时提高了深度学习框架之中算子的部署过程中的效率、灵活性和可靠性。
Description
技术领域
本申请的实施例总体上涉及数据处理技术领域,并且更具体地涉及深度学习等人工智能技术领域。
背景技术
目前主流的深度学习框架包含了丰富的张量计算处理单元,统称为算子,丰富的算子库为快速组建深度学习模型提供了强大的基础工具,但深度学习框架中的算子库一般都无法做到完备性,尤其在前沿学术研究领域,经常存在当前算子库无法满足特定逻辑计算操作的情况。因此各大深度学习框架都向用户提供了自定义算子的机制。
自定义算子主要由C++语言(The C++Programming Language/c plus plus)实现,且需要单独进行源码编译,链接成动态库,然后在前端进行加载和导入使用。这除了要求用户对此框架具有一定的了解,而且常需要用户具备C++源码编译的基础知识。若涉及到支持GPU(Graphics Processing Unit,图形处理器)设备的算子实现,更需要用户了解CUDA(Compute Unified Device Architecture,统一计算设备架构)编译的背景知识。这样一来,势必导致用户使用成本极高、对其他三方库(如库pybind11)具有极强依赖、缺乏灵活性、效率低的技术问题。因此,如何提高深度学习框架之中算子的部署过程中的效率、灵活性和解耦性,并降低用户使用成本,已成为了重要的研究方向之一。
发明内容
本申请提供了一种深度学习框架之中算子的部署方法、装置及电子设备。
根据第一方面,提供了一种深度学习框架之中算子的部署方法,包括:
获取算子的源文件;
对所述算子的源文件进行编译以形成所述算子的动态链接库;
生成所述算子的动态链接库转的接口文件;
根据所述动态链接库和所述接口文件生成可安装库文件;
将所述可安装库文件安装至目标编程语言库。
根据第二方面,提供了一种深度学习框架之中算子的部署装置,包括:
第一获取模块,用于获取算子的源文件;
形成模块,用于对所述算子的源文件进行编译以形成所述算子的动态链接库;
第一生成模块,用于生成所述算子的动态链接库转的接口文件;
第二生成模块,用于根据所述动态链接库和所述接口文件生成可安装库文件;
安装模块,用于将所述可安装库文件安装至目标编程语言库。
根据第三方面,提供了一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本申请第一方面所述的深度学习框架之中算子的部署方法。
根据第四方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行本公开第一方面所述的深度学习框架之中算子的部署方法。
根据第五方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现根据本公开第一方面所述的深度学习框架之中算子的部署方法。
应当理解,本部分所描述的内容并非旨在标识本申请的实施例的关键或重要特征,也不用于限制本申请的范围。本申请的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用于更好地理解本方案,不构成对本申请的限定。其中:
图1是根据本申请第一实施例的示意图;
图2是根据本申请第二实施例的示意图;
图3是根据本申请第三实施例的示意图;
图4是根据本申请第四实施例的示意图;
图5是根据本申请第五实施例的示意图;
图6是根据一种Python包发布的流程的示意图;
图7是用来实现本申请实施例的深度学习框架之中算子的部署方法的深度学习框架之中算子的部署装置的框图;
图8是用来实现本申请实施例的深度学习框架之中算子的部署方法的深度学习框架之中算子的部署装置的框图;
图9是用来实现本申请实施例的深度学习框架之中算子的部署的电子设备的框图。
具体实施方式
以下结合附图对本申请的示范性实施例做出说明,其中包括本申请实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本申请的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
以下对本申请的方案涉及的技术领域进行简要说明:
数据处理(Data Processing),包括对数据的采集、存储、检索、加工、变化和传输等处理,旨从大量的、可能是杂乱无章的、难以理解的数据中抽取并推导出对于某些特定的用户来说有价值、有意义的数据。
AI(Artificial Intelligence,人工智能),是研究使计算机来模拟人生的某些思维过程和智能行为(如学习、推理、思考、规划等)的学科,既有硬件层面的技术,也有软件层面的技术。人工智能硬件技术一般包括计算机视觉技术、语音识别技术、自然语言处理技术以及及其学习/深度学习、大数据处理技术、知识图谱技术等几大方面。
DL(Deep Learning,深度学习),是ML机器学习(Machine Learning,机器学习)领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标——人工智能。深度学习是学习样本数据的内在律和表示层次,这些学习过程中获得的信息对诸如文字,图像和声音等数据的解释有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。深度学习是一个复杂的机器学习算法,在语音和图像识别方面取得的效果,远远超过先前相关技术。
需要说明的是,相关技术中,针对支持自定义算子功能的深度学习框架,在编译安装上实现各不相同,主要包括以下两种方式:基于setup.py(编写文件)的方式以及基于JIT(Just-In-Time,即时编译)的前端加载(load)接口的方式。
其中,针对基于setup.py的方式,以Pytorch框架为例,其中借助了前端语言python的setuptools库,支持用户执行安装(install)命令编译生成自定义算子库,并安装到python库中,以支持用户导入(import)使用。
然而,此种情况下,自定义算子需要依赖Pybind11模块,用户必须提前安装,且需要将自定义算子显式地通过Pybind11绑定,否则无法暴露给前端使用。
其中,基于JIT的前端load接口的方式,接口底层依赖第三方工具如CMake、Ninja,需要用户必须提前配置。
由此,本申请提出一种深度学习框架之中算子的部署方法,能够不再依赖于Pybind11以及其他三方模块,且对setuptools进行高度封装,完全隐藏编译、链接、安装的所有过程,用户不需要了解任何依赖的框架底层链接库、编译选项等概念知识。进一步地,可以借助代码注入原理,支持灵活地自定义python库安装文件的生成方式,极大地降低了用户的学习成本,同时提高了深度学习框架之中算子的部署过程中的效率、灵活性和可靠性。
下面参考附图描述本申请实施例的一种深度学习框架之中算子的部署方法、装置及电子设备。
图1是根据本申请第一实施例的示意图。其中,需要说明的是,本实施例的深度学习框架之中算子的部署方法的执行主体为深度学习框架之中算子的部署装置,深度学习框架之中算子的部署装置具体可以为硬件设备,或者硬件设备中的软件等。其中,硬件设备例如终端设备、服务器等。如图1所示,本实施例提出的深度学习框架之中算子的部署方法,包括如下步骤:
S101、获取算子的源文件。
需要说明的是,目前主流的深度学习框架包含了丰富的张量计算处理单元,统称为算子,比如视觉领域的卷积Conv2D算子,自然语言处理领域的LSTM(Long Short-TermMemory,长短期记忆人工神经网络)算子,以及基础的函数激活ReLU(Rectified LinearUnit,线性整流函数)算子等。
其中,算子的源文件,可以为用户待编译的自定义算子(Operator,简称OP)对应的CPP/C++语言(The C++Programming Language/c plus plus)、或者CUDA(Compute UnifiedDevice Architecture,统一计算设备架构)源代码文件。
需要说明的是,CPP文件一般以.cc或.cpp结尾;若要支持GPU(GraphicsProcessing Unit,图形处理器)设备,则需要以.cu结尾的CUDA源代码文件。
S102、对算子的源文件进行编译以形成算子的动态链接库。
需要说明的是,深度学习框架一般需要涉及前端系统(Python)和后端系统(C++)。用户自定义算子编写的是后端C++代码。此种情况下,为了能够被前端Python调用,则需要将其编译成特定格式的文件,以在Python前端系统加载到内存,并被调用C++后端系统实现的算子计算逻辑函数(例如如卷积Conv)。
例如,在调用用户本地原生的编译命令(即算子的源文件)后,如Linux(全称GNU/Linux)系统下的gcc/g++/nvcc命令,即可编译产出算子的动态链接库。
本申请实施例中,处理对象是C++或CUDA源码文件,通过预处理(Pre-processing)、编译、汇编和链接(Linking),能够实现对算子的源文件进行编译,从而形成算子的动态链接库。
S103、生成算子的动态链接库转的接口文件。
需要说明的是,相关技术中,深度学习框架均包含前端系统和后端系统。其中,后端系统多为C++语言实现,包含了很多算子的具体逻辑运算,例如卷积操作Conv的实际数据运算操作是通过C++实现的。此种情况下,优点在于运算效率高,执行性能好;前端系统多为Python语言实现,是通过封装简单的API(Application Programming Interface,应用程序编程接口)接口实现对后端算子Kernel的调用。此种情况下,优点在于实现成本低,用户体验好。
本申请实施例中,仅需根据用户针对后端系统编写的自定义算子对应的C++语言的运算相关代码,即可自动生成前端系统的API接口,即自动生成算子的动态链接库转的接口文件。
S104、根据动态链接库和接口文件生成可安装库文件。
其中,可安装库文件,可以为文件后缀为.egg的文件。文件后缀为.egg的文件是Python编程语言用于管理三方可安装库的文件格式。
本申请实施例中,按照预设打包策略对动态链接库和接口文件进行打包,以生成可安装库文件。
S105、将可安装库文件安装至目标编程语言库。
需要说明的是,将可安装库文件安装至目标编程语言库后,即可实现将用户自定义算子安装至目标编程语言库中,以支持用户后续调用。
本申请实施例中,可以将可安装库文件安装至目标编程语言库中的目标目录下。
根据本申请实施例的深度学习框架之中算子的部署方法,可以获取算子的源文件,对算子的源文件进行编译以形成算子的动态链接库,并生成算子的动态链接库转的接口文件,然后根据动态链接库和接口文件生成可安装库文件,进而将可安装库文件安装至目标编程语言库,以实现深度学习框架之中算子的部署,不再依赖于三方模块,能够完全隐藏算子安装的所有过程,极大地降低了用户的学习成本,同时提高了深度学习框架之中算子的部署过程中的效率、灵活性和可靠性。
需要说明的是,本申请中,在试图对算子的源文件进行编译以形成算子的动态链接库时,可以通过预处理、编译、汇编和链接对算子的源文件进行编译。
图2是根据本申请第二实施例的示意图。如图2所示,在上一实施例的基础上,本实施例提出的深度学习框架之中算子的部署方法,包括如下步骤:
S201、获取算子的源文件。
该步骤S201与上一实施例中的步骤S101相同,此处不再赘述。
上一实施例中的步骤S102具体可包括以下步骤S202~S204。
S202、对算子的源文件进行头文件展开和宏替换,以生成待编译代码。
本申请实施例中,可以通过预处理操作生成待编译代码。
可选地,可以通过预处理器针对源文件中以“#”开头的代码行,进行头文件展开和宏替换,以生成待编译代码。
其中,允许把参数替换到文本中,这种实现通常称为定义宏或者宏替换,简称宏。
S203、将待编译代码编译成汇编代码,并将汇编代码逐行转换成字节码,以生成目标文件。
本申请实施例中,可以对经过预处理生成的待编译代码进行编译和汇编,以生成目标文件(Object File)。其中,目标文件,可以为可执行文件或者库文件(如静态库或动态库)。
可选地,针对编译阶段,可以将待编译代码编译成底层汇编代码。
进一步地,针对汇编阶段,可以通过汇编器将汇编代码逐行转换成字节码(即机器码),以生成目标文件。
S204、对目标文件进行链接操作以获取链接后的目标文件,并根据链接后的目标文件生成动态链接库。
本申请实施例中,可以通过对目标文件进行连接生成动态链接库。
可选地,可以将前述过程产生的目标文件统一链接起来,一生成可执行文件或者库文件(如静态库或动态库)。
需要说明的是,在这一阶段,未定义标识符的引用将被全部替换成对应的正确地址。
S205、生成算子的动态链接库转的接口文件。
该步骤S205与上一实施例中的步骤S103相同,此处不再赘述。
S206、根据动态链接库和接口文件生成可安装库文件。
可选地,可以按照预设打包策略对动态链接库和接口文件进行打包,以生成可安装库文件。
举例而言,可以将动态链接库文件与Python API文件打包成前端可安装的python库文件。可选地,可以Python语言的自带库,例如setuptools,通过install、build、extracting(安装、构建、提取)等步骤实现打包。其中,前述步骤均由若干的处理函数组成。
S207、将可安装库文件安装至目标编程语言库。
该步骤S207与上一实施例中的步骤S105相同,此处不再赘述。
根据本申请实施例的深度学习框架之中算子的部署方法,可以通过预处理、编译、汇编和链接对算子的源文件进行编译,使得所有操作对用户完全隐藏,极大地减少了用户的学习、使用成本,提升了易用性。进一步地,不再依赖任何三方编译工具及模块,具有更强的解耦性。
需要说明的是,本申请中,在试图将可安装库文件安装至目标编程语言库时,可以将可安装库文件安装至目标编程语言库中的目标目录下。
以站点软件包(site-package)为例,文件后缀为.egg格式的可安装库文件,是python的标准安装协议文件格式,可用于安装到site-package中。
其中,Python语言中包括很多封装好的三方库,每个库都包含了很多可供调用的API。这些三方库都是放到Python安装路径下的site-package目录下。也就是说,site-package目录是一个包含了很多三方库的“仓库”,可以用于管理Python的所有安装的库。
进一步地,在将可安装库文件安装至目标编程语言库后,可以将用户的自定义算子导入进行使用。
图3是根据本申请第三实施例的示意图。如图3所示,在上一实施例的基础上,本实施例提出的深度学习框架之中算子的部署方法,包括如下步骤:
S301、获取目标算子的导入语句,其中,导入语句中携带目标算子的可安装库文件所在编程语言库对应的信息。
需要说明的是,python的导入是通过关键字“import”实现的。例如,A是一个已经事先安装好的三方库,则可以获取用户编写的如下导入语句:import A。
本申请实施例中,在将可安装库文件安装至目标编程语言库后,用户的自定义算子即可通过用户编写的import导入语句导入使用。
S302、对导入语句进行解析,以确定目标算子的可安装库文件所在的目标子目录。
举例而言,对导入语句import A进行解析,此种情况下,可以确定目标算子的可安装库文件所在的目标子目录为site-package目录下的子目录site-package/A。
S303、从目标子目录下读取目标算子的可安装库文件并进行导入。
可选地,在执行import进行导入时,可以从目标子目录下读取目标算子的相关可安装库文件,并将其导入进来,以便后续使用。
需要说明的是,本申请中,可以通过安装可安装库文件自动生成一个类似A的子目录。
举例而言,安装了A.egg,则可以自动将A.egg解压缩并复制到对应的子目录中,即site-package/A的子目录里。
根据本申请实施例的深度学习框架之中算子的部署方法,可以获取目标算子的导入语句,并对导入语句进行解析,以确定目标算子的可安装库文件所在的目标子目录,进而从目标子目录下读取目标算子的可安装库文件并进行导入,一致性和易用性更强。
进一步地,本申请中,可以通过代码注入的方式,将与框架相关的接口文件注入到入口文件中,定制化动态链接库的加载过程和接口文件的调用方式。
图4是根据本申请第四实施例的示意图。如图4所示,在上一实施例的基础上,本实施例提出的深度学习框架之中算子的部署方法,包括如下步骤:
S401、获取动态链接库对应的待注入的函数代码。
其中,待注入的函数代码,可以为用户输入的任一函数代码。
S402、将待注入的函数代码注入入口文件中,以生成动态链接库的目标调用函数代码。
作为一种可能的实现方式,如图5所示,在上一实施例的基础上,上述步骤S402中将待注入的函数代码注入入口文件中,以生成动态链接库的目标调用函数代码,包括如下步骤:
S501、从入口文件中获取动态链接库的默认调用函数代码。
如图6所示,以默认调用函数6-1为__bootstrap__为例,__bootstrap__是python前端import自定义算子库时加载动态链接库的默认调用函数,该默认调用函数Python自带的逻辑。
需要说明的是,默认调用函数代码可以放置于一个api.py中。举例而言,针对conv.py,用户执行import conv语句时,则会调用conv.py的__bootstrap__函数。
S502、将默认调用函数代码替换为待注入的函数代码,以生成动态链接库的目标调用函数代码。
本申请实施例中,可以动态地替换了Python自带的默认调用函数,将其函数代码修改为用户根据实际需要试图注入的函数代码。
举例而言,可以动态地替换Python自带的__bootstrap__函数,将其函数代码修改为待注入的函数代码。
S403、将目标调用函数代码写入接口文件中。
举例而言,可以将修改后的__bootstrap__函数代码写到特定的接口api.py中,例如conv.py中,以实现一个完整的代码注入过程。
根据本申请实施例的深度学习框架之中算子的部署方法,可以获取动态链接库对应的待注入的函数代码,并将待注入的函数代码注入入口文件中,以生成动态链接库的目标调用函数代码,进而将目标调用函数代码写入接口文件中,从而通过代码注入的方式,将与框架相关的接口文件注入到入口文件中,定制化动态链接库的加载过程和接口文件的调用方式。通过代码注入的方式,替换了原生动态库加载和API调用方式,为实现结合深度学习框架定制化python可安装库生成功能,提供了一种新颖的技术思路。
与上述几种实施例提供的深度学习框架之中算子的部署方法相对应,本申请的一个实施例还提供一种深度学习框架之中算子的部署装置,由于本申请实施例提供的深度学习框架之中算子的部署装置与上述几种实施例提供的深度学习框架之中算子的部署方法相对应,因此在深度学习框架之中算子的部署方法的实施方式也适用于本实施例提供的深度学习框架之中算子的部署装置,在本实施例中不再详细描述。
图7是根据本申请一个实施例的深度学习框架之中算子的部署装置的结构示意图。
如图7所示,该深度学习框架之中算子的部署装置700,包括:第一获取模块710、形成模块720、第一生成模块730、第二生成模块740、和安装模块750。其中:
第一获取模块710,用于获取算子的源文件;
形成模块720,用于对所述算子的源文件进行编译以形成所述算子的动态链接库;
第一生成模块730,用于生成所述算子的动态链接库转的接口文件;
第二生成模块740,用于根据所述动态链接库和所述接口文件生成可安装库文件;
安装模块750,用于将所述可安装库文件安装至目标编程语言库。
图8是根据本申请另一个实施例的深度学习框架之中算子的部署装置的结构示意图。
如图8所示,该深度学习框架之中算子的部署装置800,包括:第一获取模块810、形成模块820、第一生成模块830、第二生成模块840、和安装模块850。其中:
形成模块820,包括:
第一生成子模块821,用于对所述算子的源文件进行头文件展开和宏替换,以生成待编译代码;
第二生成子模块822,用于将所述待编译代码编译成汇编代码,并将所述汇编代码逐行转换成字节码,以生成目标文件;
第三生成子模块823,用于对所述目标文件进行链接操作以获取链接后的目标文件,并根据所述链接后的目标文件生成所述动态链接库。
其中,第二生成模块840,包括:
第四生成子模块841,用于按照预设打包策略对所述动态链接库和所述接口文件进行打包,以生成所述可安装库文件。
其中,安装模块850,包括:
安装子模块851,用于将所述可安装库文件安装至所述目标编程语言库中的目标目录下。
其中,深度学习框架之中算子的部署装置800,还包括:
第二获取模块860,用于获取目标算子的导入语句,其中,所述导入语句中携带所述目标算子的可安装库文件所在编程语言库对应的信息;
确定模块870,用于对所述导入语句进行解析,以确定所述目标算子的可安装库文件所在的目标子目录;
导入模块880,用于从所述目标子目录下读取所述目标算子的可安装库文件并进行导入;
第三获取模块890,用于获取所述动态链接库对应的待注入的函数代码;
注入模块8100,用于将所述待注入的函数代码注入入口文件中,以生成所述动态链接库的目标调用函数代码;
写入模块8110,用于将所述目标调用函数代码写入所述接口文件中。
其中,写入模块8110,包括:
第一获取子模块8111,用于从所述入口文件中获取所述动态链接库的默认调用函数代码;
第五生成子模块8112,用于将所述默认调用函数代码替换为所述待注入的函数代码,以生成所述动态链接库的目标调用函数代码。
根据本申请实施例的深度学习框架之中算子的部署装置,可以获取算子的源文件,对算子的源文件进行编译以形成算子的动态链接库,并生成算子的动态链接库转的接口文件,然后根据动态链接库和接口文件生成可安装库文件,进而将可安装库文件安装至目标编程语言库,以实现深度学习框架之中算子的部署,不再依赖于三方模块,能够完全隐藏算子安装的所有过程,极大地降低了用户的学习成本,同时提高了深度学习框架之中算子的部署过程中的效率、灵活性和可靠性。
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
图9示出了可以用来实施本公开的实施例的示例电子设备900的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
如图9所示,设备900包括计算单元901,其可以根据存储在只读存储器(ROM)902中的计算机程序或者从存储单元908加载到随机访问存储器(RAM)903中的计算机程序,来执行各种适当的动作和处理。在RAM903中,还可存储设备900操作所需的各种程序和数据。计算单元901、ROM 902以及RAM 903通过总线904彼此相连。输入/输出(I/O)接口905也连接至总线904。
设备900中的多个部件连接至I/O接口905,包括:输入单元906,例如键盘、鼠标等;输出单元907,例如各种类型的显示器、扬声器等;存储单元908,例如磁盘、光盘等;以及通信单元909,例如网卡、调制解调器、无线通信收发机等。通信单元909允许设备900通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元901可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元901的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元901执行上文所描述的各个方法和处理,例如深度学习框架之中算子的部署方法。例如,在一些实施例中,深度学习框架之中算子的部署方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元908。在一些实施例中,计算机程序的部分或者全部可以经由ROM 902和/或通信单元909而被载入和/或安装到设备900上。当计算机程序加载到RAM 903并由计算单元901执行时,可以执行上文描述的深度学习框架之中算子的部署方法的一个或多个步骤。备选地,在其他实施例中,计算单元901可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行深度学习框架之中算子的部署方法。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程人物图像的修复装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)、互联网以及区块链网络。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务端可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与VPS服务(“Virtual Private Server”,或简称“VPS”)中,存在的管理难度大,业务扩展性弱的缺陷。服务器也可以为分布式系统的服务器,或者是结合了区块链的服务器。
根据本公开实施例,本公开还提供了一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现根据本公开第一方面所述的深度学习框架之中算子的部署方法。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。
Claims (12)
1.一种深度学习框架之中算子的部署方法,包括:
获取算子的源文件;
对所述算子的源文件进行编译以形成所述算子的动态链接库;
生成所述算子的动态链接库的前端系统的接口文件;
根据所述动态链接库和所述接口文件生成可安装库文件;
将所述可安装库文件安装至目标编程语言库;
获取所述动态链接库对应的待注入的函数代码;
将所述待注入的函数代码注入入口文件中,以生成所述动态链接库的目标调用函数代码;
将所述目标调用函数代码写入所述接口文件中;
其中,所述将所述待注入的函数代码注入入口文件中,以生成所述动态链接库的目标调用函数代码,包括:
从所述入口文件中获取所述动态链接库的默认调用函数代码;
将所述默认调用函数代码替换为所述待注入的函数代码,以生成所述动态链接库的目标调用函数代码。
2.根据权利要求1所述的部署方法,其中,所述对所述算子的源文件进行编译以形成所述算子的动态链接库,包括:
对所述算子的源文件进行头文件展开和宏替换,以生成待编译代码;
将所述待编译代码编译成汇编代码,并将所述汇编代码逐行转换成字节码,以生成目标文件;
对所述目标文件进行链接操作以获取链接后的目标文件,并根据所述链接后的目标文件生成所述动态链接库。
3.根据权利要求1所述的部署方法,其中,所述根据所述动态链接库和所述接口文件生成可安装库文件,包括:
按照预设打包策略对所述动态链接库和所述接口文件进行打包,以生成所述可安装库文件。
4.根据权利要求1所述的部署方法,其中,所述将所述可安装库文件安装至目标编程语言库,包括:
将所述可安装库文件安装至所述目标编程语言库中的目标目录下。
5.根据权利要求1所述的部署方法,其中,还包括:
获取目标算子的导入语句,其中,所述导入语句中携带所述目标算子的可安装库文件所在编程语言库对应的信息;
对所述导入语句进行解析,以确定所述目标算子的可安装库文件所在的目标子目录;
从所述目标子目录下读取所述目标算子的可安装库文件并进行导入。
6.一种深度学习框架之中算子的部署装置,包括:
第一获取模块,用于获取算子的源文件;
形成模块,用于对所述算子的源文件进行编译以形成所述算子的动态链接库;
第一生成模块,用于生成所述算子的动态链接库的前端系统的接口文件;
第二生成模块,用于根据所述动态链接库和所述接口文件生成可安装库文件;
安装模块,用于将所述可安装库文件安装至目标编程语言库;
第三获取模块,用于获取所述动态链接库对应的待注入的函数代码;
注入模块,用于将所述待注入的函数代码注入入口文件中,以生成所述动态链接库的目标调用函数代码;
写入模块,用于将所述目标调用函数代码写入所述接口文件中;
其中,所述写入模块,包括:
第一获取子模块,用于从所述入口文件中获取所述动态链接库的默认调用函数代码;
第五生成子模块,用于将所述默认调用函数代码替换为所述待注入的函数代码,以生成所述动态链接库的目标调用函数代码。
7.根据权利要求6所述的部署装置,其中,所述形成模块,包括:
第一生成子模块,用于对所述算子的源文件进行头文件展开和宏替换,以生成待编译代码;
第二生成子模块,用于将所述待编译代码编译成汇编代码,并将所述汇编代码逐行转换成字节码,以生成目标文件;
第三生成子模块,用于对所述目标文件进行链接操作以获取链接后的目标文件,并根据所述链接后的目标文件生成所述动态链接库。
8.根据权利要求6所述的部署装置,其中,所述第二生成模块,包括:
第四生成子模块,用于按照预设打包策略对所述动态链接库和所述接口文件进行打包,以生成所述可安装库文件。
9.根据权利要求6所述的部署装置,其中,所述安装模块,包括:
第一安装子模块,用于将所述可安装库文件安装至所述目标编程语言库中的目标目录下。
10.根据权利要求6所述的部署装置,其中,还包括:
第二获取模块,用于获取目标算子的导入语句,其中,所述导入语句中携带所述目标算子的可安装库文件所在编程语言库对应的信息;
确定模块,用于对所述导入语句进行解析,以确定所述目标算子的可安装库文件所在的目标子目录;
导入模块,用于从所述目标子目录下读取所述目标算子的可安装库文件并进行导入。
11.一种电子设备,其特征在于,包括处理器和存储器;
其中,所述处理器通过读取所述存储器中存储的可执行程序代码来运行与所述可执行程序代码对应的程序,以用于实现如权利要求1-5中任一所述的深度学习框架之中算子的部署方法。
12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-5中任一所述的深度学习框架之中算子的部署方法。
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110315269.9A CN113010181B (zh) | 2021-03-24 | 2021-03-24 | 一种深度学习框架之中算子的部署方法、装置及电子设备 |
EP21201447.6A EP3971706B1 (en) | 2021-03-24 | 2021-10-07 | Method, apparatus and electronic device for deploying operator in deep learning frame work |
US17/500,779 US11531529B2 (en) | 2021-03-24 | 2021-10-13 | Method and electronic device for deploying operator in deep learning framework |
KR1020210182784A KR20220002823A (ko) | 2021-03-24 | 2021-12-20 | 딥러닝 프레임워크에서의 연산자의 배치 방법, 장치 및 전자 기기 |
JP2021212645A JP7324831B2 (ja) | 2021-03-24 | 2021-12-27 | ディープラーニングフレームワークにおける演算子の展開方法、展開装置及び電子機器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110315269.9A CN113010181B (zh) | 2021-03-24 | 2021-03-24 | 一种深度学习框架之中算子的部署方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113010181A CN113010181A (zh) | 2021-06-22 |
CN113010181B true CN113010181B (zh) | 2022-05-27 |
Family
ID=76406464
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110315269.9A Active CN113010181B (zh) | 2021-03-24 | 2021-03-24 | 一种深度学习框架之中算子的部署方法、装置及电子设备 |
Country Status (5)
Country | Link |
---|---|
US (1) | US11531529B2 (zh) |
EP (1) | EP3971706B1 (zh) |
JP (1) | JP7324831B2 (zh) |
KR (1) | KR20220002823A (zh) |
CN (1) | CN113010181B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019112568A1 (en) * | 2017-12-05 | 2019-06-13 | Phase Change Software Llc | Inductive equivalence in machine-based instruction editing |
CN113591040B (zh) * | 2021-06-23 | 2023-10-24 | 北京百度网讯科技有限公司 | 加密方法及其装置、解密方法及其装置、电子设备和介质 |
CN114186550B (zh) * | 2021-12-10 | 2023-04-18 | 北京百度网讯科技有限公司 | 文本处理方法、装置、系统、设备以及存储介质 |
US20230236907A1 (en) * | 2022-01-26 | 2023-07-27 | Nvidia Corporation | Application programming interface to cause operator to be used by compiler |
KR20230115752A (ko) * | 2022-01-27 | 2023-08-03 | 삼성전자주식회사 | 애플리케이션을 백그라운드 프로세스에서 실행하는 전자 장치 및 그 동작 방법 |
EP4369194A1 (en) | 2022-01-27 | 2024-05-15 | Samsung Electronics Co., Ltd. | Electronic device for executing application in background process, and operation method thereof |
CN114172908B (zh) * | 2022-02-10 | 2022-08-05 | 浙江大学 | 一种端云协同处理方法及设备 |
CN114841326B (zh) * | 2022-05-19 | 2024-01-12 | 北京百度网讯科技有限公司 | 深度学习框架的算子处理方法、装置、设备和存储介质 |
CN115185539B (zh) * | 2022-09-06 | 2022-12-09 | 西安羚控电子科技有限公司 | 一种生成可执行动态链接库文件方法、装置及存储介质 |
CN116932092B (zh) * | 2023-09-18 | 2024-01-09 | 之江实验室 | 一种算子调用代码自动生成的方法、装置、介质及设备 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103019944A (zh) * | 2013-01-10 | 2013-04-03 | 曙光信息产业(北京)有限公司 | 基于代码注入方式的测试方法和装置 |
CN105072461A (zh) * | 2015-07-03 | 2015-11-18 | 北京奇虎科技有限公司 | 一种数据处理方法和装置 |
CN106126282A (zh) * | 2016-06-20 | 2016-11-16 | 北京金山安全软件有限公司 | 一种动态链接库文件的注入方法、装置及终端设备 |
CN106502745A (zh) * | 2016-10-26 | 2017-03-15 | 腾讯科技(深圳)有限公司 | 一种函数调用方法和装置 |
CN106598680A (zh) * | 2016-12-20 | 2017-04-26 | 北京金山安全软件有限公司 | 一种程序修复、内容推广的方法、装置及电子设备 |
US10114624B1 (en) * | 2017-10-12 | 2018-10-30 | Devfactory Fz-Llc | Blackbox matching engine |
CN110908837A (zh) * | 2019-11-15 | 2020-03-24 | 珠海豹趣科技有限公司 | 应用程序异常处理方法、装置、电子设备及存储介质 |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7860823B2 (en) * | 2006-05-04 | 2010-12-28 | Microsoft Corporation | Generic interface for deep embedding of expression trees in programming languages |
US9703550B1 (en) * | 2009-09-29 | 2017-07-11 | EMC IP Holding Company LLC | Techniques for building code entities |
WO2011050368A1 (en) * | 2009-10-23 | 2011-04-28 | Moov Corporation | Configurable and dynamic transformation of web content |
CN102929716B (zh) * | 2012-11-07 | 2015-04-15 | 北京亿赛通科技发展有限责任公司 | 一种启动多进程的方法 |
US9817638B2 (en) * | 2013-12-27 | 2017-11-14 | Symantec Corporation | Systems and methods for injecting code into an application |
US10175964B2 (en) * | 2014-09-26 | 2019-01-08 | Microsoft Technology Licensing, Llc | Compiler caching for runtime routine redundancy tracking |
CN107038045B (zh) * | 2017-03-30 | 2022-10-14 | 腾讯科技(深圳)有限公司 | 加载库文件的方法及装置 |
JP7003470B2 (ja) * | 2017-07-18 | 2022-01-20 | 富士通株式会社 | 情報処理装置、情報処理方法、及びプログラム |
CN108875959A (zh) * | 2018-05-24 | 2018-11-23 | 四川斐讯信息技术有限公司 | 一种智能看物识名的方法和系统 |
CN111782334B (zh) * | 2019-04-04 | 2024-02-23 | 北京智游网安科技有限公司 | 一种动态链接库文件虚拟化方法、存储介质及终端设备 |
US20200334522A1 (en) * | 2019-04-18 | 2020-10-22 | Cambricon Technologies Corporation Limited | Data processing method and related products |
CN112183735A (zh) * | 2019-07-03 | 2021-01-05 | 安徽寒武纪信息科技有限公司 | 操作数据的生成方法、装置及相关产品 |
CN111176626B (zh) * | 2019-08-05 | 2022-04-19 | 腾讯科技(深圳)有限公司 | 跨编程语言的代码调用方法及装置、介质、设备 |
US11093226B2 (en) * | 2019-08-14 | 2021-08-17 | Intel Corporation | Methods, systems, and apparatus for a generic firmware-based kernel library mechanism |
CN110673837B (zh) * | 2019-08-29 | 2020-11-17 | 腾讯科技(深圳)有限公司 | 代码修复方法及装置、电子设备、计算机可读存储介质 |
US11663523B2 (en) * | 2019-09-14 | 2023-05-30 | Oracle International Corporation | Machine learning (ML) infrastructure techniques |
CN110989995A (zh) * | 2019-11-27 | 2020-04-10 | 开放智能机器(上海)有限公司 | 基于开源深度学习框架的人工智能应用的处理方法及系统 |
CN111290778B (zh) * | 2020-02-06 | 2024-03-01 | 网易(杭州)网络有限公司 | Ai模型的包装方法、平台及电子设备 |
US20220051093A1 (en) * | 2020-08-14 | 2022-02-17 | Nvidia Corporation | Techniques for training and inference using multiple processor resources |
US20220092439A1 (en) * | 2020-09-23 | 2022-03-24 | EMC IP Holding Company LLC | Decoupled architecture for artificial intelligence model management |
US20210191696A1 (en) * | 2020-12-14 | 2021-06-24 | Intel Corporation | Methods, apparatus, and articles of manufacture to identify and interpret code |
CN112507102B (zh) * | 2020-12-18 | 2022-04-29 | 北京百度网讯科技有限公司 | 基于预训练范式模型的预测部署系统、方法、装置及介质 |
-
2021
- 2021-03-24 CN CN202110315269.9A patent/CN113010181B/zh active Active
- 2021-10-07 EP EP21201447.6A patent/EP3971706B1/en active Active
- 2021-10-13 US US17/500,779 patent/US11531529B2/en active Active
- 2021-12-20 KR KR1020210182784A patent/KR20220002823A/ko not_active Application Discontinuation
- 2021-12-27 JP JP2021212645A patent/JP7324831B2/ja active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103019944A (zh) * | 2013-01-10 | 2013-04-03 | 曙光信息产业(北京)有限公司 | 基于代码注入方式的测试方法和装置 |
CN105072461A (zh) * | 2015-07-03 | 2015-11-18 | 北京奇虎科技有限公司 | 一种数据处理方法和装置 |
CN106126282A (zh) * | 2016-06-20 | 2016-11-16 | 北京金山安全软件有限公司 | 一种动态链接库文件的注入方法、装置及终端设备 |
CN106502745A (zh) * | 2016-10-26 | 2017-03-15 | 腾讯科技(深圳)有限公司 | 一种函数调用方法和装置 |
CN106598680A (zh) * | 2016-12-20 | 2017-04-26 | 北京金山安全软件有限公司 | 一种程序修复、内容推广的方法、装置及电子设备 |
US10114624B1 (en) * | 2017-10-12 | 2018-10-30 | Devfactory Fz-Llc | Blackbox matching engine |
CN110908837A (zh) * | 2019-11-15 | 2020-03-24 | 珠海豹趣科技有限公司 | 应用程序异常处理方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US11531529B2 (en) | 2022-12-20 |
JP7324831B2 (ja) | 2023-08-10 |
EP3971706A3 (en) | 2022-04-27 |
US20220035614A1 (en) | 2022-02-03 |
EP3971706B1 (en) | 2024-03-27 |
JP2022031507A (ja) | 2022-02-18 |
CN113010181A (zh) | 2021-06-22 |
KR20220002823A (ko) | 2022-01-07 |
EP3971706A2 (en) | 2022-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113010181B (zh) | 一种深度学习框架之中算子的部署方法、装置及电子设备 | |
US9645838B2 (en) | Automatic discovery of a JavaScript API | |
CN111625224A (zh) | 代码生成方法、装置、设备及存储介质 | |
US10241763B2 (en) | Inter-procedural type propagation for devirtualization | |
US11934287B2 (en) | Method, electronic device and computer program product for processing data | |
CN112506602B (zh) | 页面生成方法及装置、电子设备、计算机可读介质 | |
CN113050940A (zh) | 小程序的预览方法、相关装置及计算机程序产品 | |
CN112506854A (zh) | 页面模板文件的存储和页面生成方法、装置、设备及介质 | |
CN112540767A (zh) | 程序代码的生成方法、装置、电子设备及存储介质 | |
US11036527B2 (en) | Class splitting in object-oriented environments | |
US9886251B2 (en) | Optimized compiling of a template function | |
US20180321916A1 (en) | Method, computer readable storage medium, computer program product and computer | |
CN111159301A (zh) | 一种基于智能合约的数据创建方法、装置、设备及存储介质 | |
CN109408057B (zh) | 自动生成代码的方法、装置、介质和计算设备 | |
CN112346774A (zh) | 一种应用安装包的生成方法和装置 | |
CN112379885B (zh) | 小程序编译方法、装置、设备及可读存储介质 | |
CN114741294A (zh) | 一种页面的调试方法、装置、设备及存储介质 | |
US9921814B2 (en) | Control flow graph analysis | |
CN114253615B (zh) | 一种引导程序设置方法、装置、电子设备及存储介质 | |
CN115480744A (zh) | 命令执行日志的输出方法及装置、电子设备和存储介质 | |
CN117668824A (zh) | 代码数据处理方法及装置、设备和介质 | |
CN115809062A (zh) | 操作系统的开发处理方法、装置、设备以及存储介质 | |
CN115034960A (zh) | 动态图转静态图的方法、装置、电子设备和存储介质 | |
CN115145627A (zh) | 插件本地运行环境的搭建方法、装置、设备及存储介质 | |
CN114968200A (zh) | 软件开发工具包组装方法、相关装置及计算机程序产品 |
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 |