CN115167833B - 编程方法、可执行程序的执行方法及装置 - Google Patents
编程方法、可执行程序的执行方法及装置 Download PDFInfo
- Publication number
- CN115167833B CN115167833B CN202211071959.5A CN202211071959A CN115167833B CN 115167833 B CN115167833 B CN 115167833B CN 202211071959 A CN202211071959 A CN 202211071959A CN 115167833 B CN115167833 B CN 115167833B
- Authority
- CN
- China
- Prior art keywords
- algorithm
- algorithm module
- memory
- data
- code
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- 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/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
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
技术领域
本申请涉及程序生成和执行技术领域,特别是涉及一种编程方法、可执行程序的执行方法及装置。
背景技术
随着互联网技术的发展,发展出越来越多的编程方法。但是基于现有编程方法生成的含有多个算法模块的程序执行效率不是太高。
发明内容
本申请提供一种编程方法、可执行程序的执行方法及装置,可以提高程序的执行效率。
为达到上述目的,本申请提供一种编程方法,该方法包括:
提供多个算法模块的连接关系图;
基于连接关系图生成统一的算法模块交互协议,其中,算法模块交互协议定义多个算法模块映射到同一内存区域;
基于算法模块交互协议生成可执行程序。
其中,算法模块交互协议定义连接关系图中相邻的两个算法模块之间通过内存进行数据中转。
其中,基于算法模块交互协议生成可执行程序,包括:
对算法模型交互协议和多个算法模块的代码进行交叉编译而生成可执行程序。
其中,算法模块的代码包括自适应适配算子的代码和业务算子的代码;
其中,可执行程序定义:在一算法模块中,自适应适配算子设置于业务算子之前,且自适应适配算子用于将算法模块所需数据处理成业务算子指定格式的数据并传给业务算子。
其中,算法模块的代码包括算法模块的模型代码,对算法模型交互协议和多个算法模块的代码进行交叉编译而生成可执行程序,之前包括:
提供训练后的算法模块的模型;
将模型转换为第一代码;
给出第一代码的所有实现方式组合,其中,实现方式组合包括第一代码中的各个模块的一实现方式;
将各个实现方式组合编译而得到第一代码的各个实现方式组合的可执行文件;
运行各个可执行文件而得到各个实现方式组合的运行性能参数;
基于运行性能参数确定优化后的实现方式组合,以得到算法模块的模型代码。
其中,将模型转换为第一代码,包括:
将模型转换为神经网络交换格式;
对神经网络交换格式的模型进行优化并转换为第一代码;
其中,神经网络交换格式包括模块信息和函数信息;模块信息包括全局变量和符号表;函数信息包含函数名、函数的返回值和参数类型。
其中,基于运行性能参数确定优化后的实现方式组合,以得到算法模块的模型代码,包括:
基于运行性能参数确定优化后的实现方式组合,得到第二代码;
通过编译器将第二代码编译成预设硬件平台的模型代码。
为达到上述目的,本申请提供一种可执行程序的执行方法,该方法包括:
将待处理数据输入到内存;
通过算法模块交互协议按照顺序执行多个算法模块,以对待处理数据进行处理而得到可执行程序的输出结果;其中,算法模块交互协议定义多个算法模块映射到同一内存区域。
其中,通过算法模块交互协议按照顺序执行多个算法模块,包括:
各个算法模块通过内存获取到其所需数据所在的内存地址;
基于内存地址并通过算法模块交互协议获取到所需数据;
对所需数据进行处理得到处理结果,将处理结果写入到同一内存区域,并将处理结果所在内存地址反馈给内存,
其中,在算法模块为顺序中的第一个算法模块的情况下,算法模块所需数据为待处理数据;在算法模块不为顺序中的第一个算法模块的情况下,各个算法模块所需数据为在顺序中算法模块的上一个算法模块的处理结果。
其中,
各个算法模块通过内存获取到其所需数据所在的内存地址,包括:获得内存反馈的以有序字节流形式呈现的所需数据所在的内存地址;将所需数据所在的内存地址从有序字节流形式反序列化成结构体形式,并传给算法模块;
将处理结果所在内存地址反馈给内存,包括:算法模块反馈以结构体形式呈现的处理结果所在内存地址;将内存地址从结构体形式序列化成有序字节流形式,并传给内存。
为达到上述目的,本申请还提供一种电子设备,该电子设备包括处理器;处理器用于执行指令以实现上述方法。
为达到上述目的,本申请还提供一种计算机可读存储介质,其用于存储指令/程序数据,指令/程序数据能够被执行以实现上述方法。
本申请提供多个算法模块的连接关系图,接着基于连接关系图生成统一的算法模块交互协议,然后基于算法模块交互协议生成可执行程序,且生成的统一算法模块交互协议中定义了多个算法模块映射至同一内存区域,如此连接关系图中的多个算法模块共同管理同一内存区域,以防止出现多个算法模块独自管理一内存区域而导致内存碎片化可能性增加的问题,即通过多个算法模块统一管理一内存区域减少了内存碎片化的可能性,并且通过统一管理同一内存区域使得每个算法模块在获取每个算法模块的上一算法模块的输出数据时可以不进行内存数据拷贝操作,从而提高了最终生成的程序的执行效率。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是本申请编程方法中算法模块交互协议定义的算法模块和内存的数据交互示意图;
图2是本申请编程方法一实施方式的流程示意图;
图3是本申请编程方法中算法模块的模型编译流程示意图;
图4是本申请可执行程序的执行方法一实施方式的流程示意图;
图5是本申请电子设备一实施方式的结构示意图;
图6是本申请计算机可读存储介质一实施方式的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。另外,除非另外指明(例如,“或另外”或“或在替代方案中”),否则如本文所使用的术语“或”指代非排他性的“或”(即,“和/或”)。并且,本文所描述的各种实施例不一定相互排斥,因为一些实施例可以与一个或多个其它实施例组合以形成新的实施例。
在现有包括多个算法模块的一可执行程序中,多个算法模块各自独自管理一内存区域,从而在程序中一算法模块进行数据处理时,需要将该算法模块的上一算法模块对应的内存区域中的上一算法模块的输出数据拷贝到该算法模块对应的内存区域中,然后该算法模块才能利用其对应的内存区域中的上一算法模块的输出数据进行数据处理,如此在程序执行过程中涉及大量数据拷贝操作,导致程序执行效率较差;并且多个算法模块独自管理各自的内存区域会导致内存碎片化,导致内存查找效率变差,也会导致程序的执行效率变差。
基于此,如图1所示,本申请提供一编程方法,该编程方法基于多个算法模块的连接关系图生成统一的算法模块交互协议,继而基于算法模块交互协议生成可执行程序,并且该算法模块交互协议定义了多个算法模块映射至同一内存区域,如此通过多个算法模块统一管理一内存区域减少了内存碎片化的可能性,并且通过统一管理同一内存区域使得每个算法模块在获取每个算法模块的上一算法模块的输出数据时可以不进行内存数据拷贝操作,从而提高了最终生成的程序的执行效率。
如图1和图2所示,本实施方式的编程方法包括以下步骤。该编程方法可应用于第一设备中。其中,第一设备可以为服务器、平板电脑、智能家居设备、移动终端等,在此不做限制。需要注意的是,以下步骤编号仅用于简化说明,并不旨在限制步骤的执行顺序,本实施方式的各步骤可以在不违背本申请技术思想的基础上,任意更换执行顺序。
S101:提供多个算法模块的连接关系图。
可以提供多个算法模块的连接关系图,以便后续基于连接关系图生成统一的算法模块交互协议,继而可以基于算法模块交互协议生成可执行程序。
其中,多个算法模块的连接关系图可以是基于用户指令生成的,或者可以是直接从云服务器或除第一设备以外的其他设备获得。
可选地,步骤S101可以包括:用户通过计算机设备的输入单元触发选择指令,以基于选择指令选择算法库中的算法模块;用户可根据算法的需求,对选择的算法模块进行组合连接,以得到多个算法模块的连接关系图,其中多个算法的连接关系图表示所选择的多个算法模块之间的执行顺序。其中,输入单元包括但不限于鼠标、键盘或触摸屏等。
而第一设备可配置有算法库,算法库可用于保存若干个算法模块。这若干个算法模块可包括目标检测模块、分类模块、分割模块、跟踪模块、关键点检测模块和/或GAN(Generative Adversarial Nets,生成对抗)模块等,在此不做限制。且算法库中的各个算法模块可以通过可视化的方式在第一设备的界面上显示,以便用户通过可视化的方式从算法库中选择多个算法模块。
举例来说,在步骤S101中,计算机设备通过显示单元显示编辑界面,编辑界面包括画布和工具栏,算法库设置于工具栏中,用户生成选择指令的方式时,通过鼠标按住算法库中的某个算法模块拖入到画布中,画布中显示用户当前选择的算法模块。工具栏还可包括连接符号库,用户可通过鼠标从连接符号库选择连接符号拖入到算法模块之间,以通过连接算法将算法模块连接而生成多个算法模块的连接关系图。
S102:基于连接关系图生成统一的算法模块交互协议。
提供多个算法模块的连接关系图后,可以基于连接关系图生成统一的算法模块交互协议,以便后续基于算法模块交互协议生成可执行程序。
其中,算法模块交互协议控制了基于算法模块交互协议生成的程序中各个算法模块从内存读、写数据的过程。
且,内存可包括多个内存区域,生成的统一算法模块交互协议中定义了多个算法模块映射至多个内存区域中的同一个内存区域(为描述方便,也可将同一个内存区域称为内存区域A),如此连接关系图中的多个算法模块共同管理同一内存区域,以防止出现多个算法模块独自管理一内存区域而导致内存碎片化可能性增加的问题,即通过多个算法模块统一管理一内存区域减少了内存碎片化的可能性,并且通过统一管理同一内存区域使得每个算法模块在获取每个算法模块的上一算法模块的输出数据时可以不进行内存数据拷贝操作,从而提高了最终生成的程序的执行效率。
进一步地,上述的同一个内存区域(即内存区域A)可以指算法模块交互协议所管理的内存区域,如此算法模块交互协议可定义:多个算法模块通过算法模块交互协议对内存区域A进行多个算法模块之间复用的数据的读写。如此,多个算法模块均可通过算法模块交互协议对内存区域A进行读写操作,如此在多个算法模块中两个算法模块进行数据交互时,其中一个算法模块通过算法模块交互协议将交互的数据写入到内存区域A,然后另一个算法模块通过算法模块交互协议从内存区域A读取交互的数据即可,如此算法模块之间的数据交互可以不涉及到内存数据拷贝操作。
也可以理解为,多个算法模块通过地址映射方法能够直接进行读写的内存区域存在交集,该交集即为上述的同一内存区域,即本申请的连接图中的所有算法模块均可通过地址映射方法对该同一内存区域直接进行读写,且多个算法模块还通过算法模块交互协议对该同一内存区域进行多个算法模块之间复用的数据的读写,如此多个算法模块在通过上述的同一内存区域进行数据交互时无需涉及内存数据拷贝操作。
其中,可以通过算法代码解析引擎读取多个算法模块的连接关系图,基于连接关系图中各个算法模块依赖的输入和/或输出,生成统一的算法模块交互协议;有利于算法与业务模块解耦、内存统一调度、任意算法模块之间数据交互,提高代码复用率,减少重复开发成本。具体地,算法代码解析引擎可以读取基于序列化协议(如protobuff)的算法方案流程结构(即上述的连接关系图),然后基于连接关系图中每一模块依赖的输入和/或输出,生成每一模块的静态的算法模块交互协议;综合所有模块的算法模块交互协议,得到所有算法模块的交互协议。
在其他实施例中,也可以基于连接关系图,人工编写出算法模块交互协议。
此外,算法模块交互协议中还可定义:连接关系图中相连接的两个算法模块不直接对接,通过内存中转数据,如此使得数据传输的过程中输入端或输出端可以相同,可以避免输入和输出不同导致无法进行统一转换的问题,从而在至少部分算法模块和内存的数据传输过程中可以使用统一的接口,即可以实现接口的复用,提高了开发效率。具体地,相连接的两个算法模块包括第一算法模块和第二算法模块。其中,第一算法模块将处理结果或其相关数据返回到内存,内存将第一算法模块的处理结果或其相关数据传输给第二算法模块,以让第二算法模块基于第一算法模块的处理结果或其相关数据对第一算法模块的处理结果进行处理而得到第二算法模块的处理结果,如此相连接的两个算法模块不直接对接,如此可以在算法模块交互协议中无需构建相连接的两个算法模块的直连通道,仅需构建各个算法模块和内存之间的通信通道,可以实现接口的复用,提高了开发效率。
另外,本申请步骤S102所得的算法模块交互协议,在基于算法模块交互协议生成的程序的生命周期中,可以不发生任何变更,即本申请的算法模块交互协议可以是静态的协议。当然,在其他实施例中,算法模块交互协议,在基于算法模块交互协议生成的程序的生命周期中,也可以发生变更。
其中,本申请的算法模块交互协议也可称为大数据管道内存管理协议。
S103:基于算法模块交互协议生成可执行程序。
基于多个算法模块的连接关系图生成统一的算法模块交互协议后可以基于算法模块交互协议生成可执行程序。
在一实现方式中,可以直接对算法模块交互协议进行编译生成可执行程序。
在另一实现方式中,可以对算法模块交互协议和多个算法模块的代码进行编译而生成可执行程序。
其中,算法模块的代码可以包括业务算子代码。业务算子代码可以包括算法模块的模型代码、预处理代码和/或后处理代码。例如,算法模块为目标检测模块,那目标检测模块的代码可以包括目标检测模型代码、目标检测模块的预处理代码和/或后处理代码。
具体地,在步骤S103中,可以将所有算法模块的模型代码、预处理代码和/或后处理代码、以及算法模块交互协议合并在一起,然后指定预设硬件平台(例如linux,3559a,3516,3519a,cv2,cv22等诸多平台),通过交叉编译服务器生成程序的机器代码;最终生成可执行文件和程序。
其中,算法模块的模型代码可以是算法模型对应于预设硬件平台的机器代码,如此基于算法模块对应于预设硬件平台的机器代码和算法模块交互协议可以生成预设硬件平台的可执行程序,从而可以实现基于硬件平台的编程。
其中,算法模块的代码中的预处理代码和/或后处理代码可以是模块化***的处理代码,通过模块化***的方式,可以实现算法低代码自适应生成,简化了开发流程,提高了开发效率。
进一步地,算法模块的代码还可包括自适应适配算子代码。其中自适应适配算子位于业务算子之前,自适应适配算子用于通过算法模块交互协议从内存中读取所需数据,并将所需数据转换为对应业务算子指定格式的数据后传递给业务算子;接着业务算子对指定格式的数据进行处理,并将处理结果写入到内存,如此通过自适应适配算法使得内存和算法模块传输的数据格式相对固定,使得多个算法模块和内存之间的传输协议相对统一,可以使得算法模块交互协议变小。
另外,自适应适配算子可以先从内存拿到其对应的算法模块所需数据所在的内存地址;然后自适应适配算子基于内存传来的地址数据通过算法模块交互协议获取到所需数据并处理;接着自适应适配算子对应的业务算子对自适应适配算子处理后的数据进行处理,然后将处理结果写入到内存,还将处理结果所在地址反馈给内存,以便下一个算法模块或应用程序基于地址拿到业务算子的处理结果;如此通过算法模块和内存流转数据地址的方式,使得算法模块可以知晓其所需数据在内存中的哪个区域,便于算法模块的操作。
其中,自适应适配算子从内存拿到其对应的算法模块所需数据所在的内存地址的步骤可以包括:内存向自适应适配算子反馈以有序字节流形式呈现的内存地址,算法模块交互协议将以有序字节流形式呈现的内存地址反序列化成以数据结构体形式呈现的内存地址并反馈给自适应适配算子。业务算子将处理结果所在地址反馈给内存的步骤可以包括:业务算子向内存反馈以数据结构体形式呈现的内存地址,算法模块交互协议将以数据结构体形式呈现的内存地址序列化成以有序字节流形式呈现的内存地址并反馈给内存。
其中,多个算法模块和内存之间的地址交互可以是以统一序列化/反序列化模式而设计的。如此,本申请可以基于统一内存调度、统一数据结构体管理以及统一序列化/反序列化模式而设计出算法模块交互协议。
另外,自适应适配算子从内存中读取到的所需数据可以是以大数据结构体形式呈现的,而业务算子指定格式可为小结构体形式。
进一步地,如图3所示,算法模块的模型代码可以是通过下述步骤对模型编译而成的,且对模型编译后可以将编译后的模型代码加入到算法库中,以便实现低代码化程序开发,即可使用可重用的、基于组件的体系结构进行开发,从而加快了应用程序的开发和交付周期。这里的组件是一个可重用的对象,它将一段代码转换为模块,这些组件可用于具有类似功能的不同应用程序中。通过将这些模块添加到新的应用程序中,开发人员可以避免针对类似的通用功能进行重复编码。这种灵活性极大地减少了测试和开发的工作量和时间。
A、提供训练后的模型。
模型的类型不受限制,例如可为目标检测模型、分类模型、分割模型、跟踪模型、关键点检测模型、GAN(Generative Adversarial Nets,生成对抗)算法等深度学习模型。模型的格式不受限制,例如可为caffe模型、pytorch模型或者ONNX(Open Neural NetworkExchange,开放神经网络交换)模型。
且模型的训练方法不受限制,例如可为深度学习算法。
B、将训练后的模型转换为高层次模型描述结构(high-level IR)。
具体地,可通过转换脚本将训练后的模型转换成神经网络交换(Neural NetworkExchange,NNX)高层次模型描述结构,以使不同的人工智能框架所建立的模型可以采用相同格式存储模型数据并交互,从而一份模型存储在开放式生态***中即可供多个平台使用,提高模型的可拓展性和兼容性。
而NNX高层次模型描述结构可包括“模块”(Module)信息和“函数”(Function)信息。其中,每个输入程序都对应一个模块,模块信息包括函数、全局变量和符号表。而“函数”被“模块”所包含,其中函数信息可包含函数名、函数的返回值和参数类型这三部分内容。
C、将高层次模型描述结构转换为第一代码。
可以将高层次模型描述结构转换成更细粒度的Tensor Expression(TE也就是向量表达式子),同时将模型划分成小的子图。在此过程中可以使用一些策略进行优化(常见的策略例如:操作融合、操作并行、操作乘法优化),得到第一代码。
当然,也可以通过其他方式对高层次模型描述结构进行优化并转换成第一代码。
对第一代码进行搜索优化,以确定优化后的实现方式,得到第二代码。
可选地,在步骤D中,可以先给出第一代码的所有实现方式组合,实现方式组合包括第一代码中的各个模块的一代码实现方式,将各个实现方式组合编译而得到第一代码的各个实现方式组合的可执行文件,然后运行各个可执行文件而得到各个实现方式组合的运行性能参数;基于运行性能参数确定优化后的实现方式组合,如此通过该方式可以自适配搜索测试而确定最优编译效果,可以避免手动开发,提高了程序开发效率。示例性地,第一代码包括模块A、模块B和模块C,其中,模块A包括A1和A2两种实现方式,例如循环模块A可包括循环迭代实现方式A1和平铺实现方式A2,模块B包括B1、B2和B3三种实现方式,模块C包括C1和C2两种实现方式,如此第一代码可包括A1B1C1、A1B1C2、A1B2C1、A1B2C2、A1B3C1、A1B3C2、A2B1C1、A2B1C2、A2B2C1、A2B2C2、A2B3C1、A2B3C2这12种实现方式组合。
具体地,在步骤D中,可以采用启发式搜索算法作为搜索策略,具体搜素过程可如下所示:
(1)提供一个Runner(运行程序)和Builder(编译程序),用于运行和构建任务。
具体地可通过运行程序给出第一代码的所有实现方式组合,继而通过编译程序将各个实现方式组合编译而得到第一代码的各个实现方式组合的可执行文件。
(2)创建一个搜索任务,将模板中的可选参数和搜索任务绑定。
可选参数可以包括内存消耗和/或执行时间等。而搜索任务可以是搜索内存消耗和/或执行时间最优的实现方式组合。
(3)进行本地实际测试,记录测试结果。
利用运行程序执行各个实现方式组合的可执行文件,而记录各个实现方式组合的可选参数结果。
(4)调用测试结果,将最优结果填入模板中,生成调度,用于实际计算,记录最优配置文件,得到第二代码。
基于所有实现方式组合的可选参数结果,确定出最优的实现方式组合,即得到了优化后的实现方式。
对第二代码编译生成预设硬件平台的机器代码。
可以通过特定的编译器(例如NVCC、LLVM等编译器)对第二代码进行编译而生成预设硬件平台的机器代码,以得到算法模块的模型代码。
预设硬件平台可根据实际情况进行设定,或者可由用户指定,并且数量不受限制,例如可为一个或多个,如此可以基于硬件平台的、自适应编译优化生成适应于预设硬件平台的可执行程序。
在本实施方式中,提供多个算法模块的连接关系图,接着基于连接关系图生成统一的算法模块交互协议,然后基于算法模块交互协议生成可执行程序,且生成的统一算法模块交互协议中定义了多个算法模块映射至同一内存区域,如此连接关系图中的多个算法模块共同管理同一内存区域,以防止出现多个算法模块独自管理一内存区域而导致内存碎片化可能性增加的问题,即通过多个算法模块统一管理一内存区域减少了内存碎片化的可能性,并且通过统一管理同一内存区域使得每个算法模块在获取每个算法模块的上一算法模块的输出数据时可以不进行内存数据拷贝操作,从而提高了最终生成的程序的执行效率。
可选地,可以利用上述编程方法实现基于图像和视频的视觉项目芯片端落地低代码化。
本申请还提供上述实施方式生成的可执行程序的执行方法,如图1和图4所示,可执行程序的执行方法可包括以下步骤。需要注意的是,以下步骤编号仅用于简化说明,并不旨在限制步骤的执行顺序,本实施方式的各步骤可以在不违背本申请技术思想的基础上,任意更换执行顺序。其中,可执行程序包括算法模块交互协议和多个算法模块的执行代码。
S201:将待处理数据输入到内存。
在执行上述实施方式生成的可执行程序时,可以先将待处理数据输入到内存中,以便后续通过算法模块交互协议按照顺序执行可执行程序中的多个算法模块,而将待处理数据进行处理成可执行程序的输出结果。
其中,待处理数据的内容不受限制,例如可为视频、图像、文本和/或音频等。
在步骤S201中,可以通过算法模块交互协议将待处理数据存入内存中的多个算法模块共同映射到的内存区域,以减少可执行程序运行过程中的内存数据拷贝操作,从而提高了程序执行效率。
其中,写入到内存的数据的类型/属性可如图1所示。例如,内存区域中定义的类型/属性可以包括数据类型、颜色空间类型、张量维度类型、内存属性、业务数据属性、人体属性和车辆属性等。数据类型、颜色空间类型、张量维度类型、内存属性、业务数据属性、人体属性和车辆属性等类型/属性的具体定义方式可如图1所示,在此不做赘述。
并且,在步骤S201中,还可记录待处理数据在内存中的地址,以便后续算法模块可以基于内存地址从内存中获取到待处理数据。
其中,在待处理数据输入到内存的过程中,可以对待处理数据进行序列化操作;然后将序列化处理后的待处理数据写入到内存。
S202:通过算法模块交互协议按照顺序执行多个算法模块,以对待处理数据进行处理而得到可执行程序的输出结果。
将待处理数据输入到内存中,可以通过算法模块交互协议按照顺序执行多个算法模块,以对待处理数据进行处理而得到可执行程序的输出结果。
其中,多个算法模块的执行顺序可定义在算法模块交互协议中,即算法模块交互协议控制了可执行程序运行中的数据流向。而多个算法模块的执行顺序具体是根据编程方法实施方式中的多个算法模块的连接关系图所确定的。
其中,算法模块交互协议可定义了多个算法模块映射至同一内存区域,如此连接关系图中的多个算法模块共同管理同一内存区域,以防止出现多个算法模块独自管理一内存区域而导致内存碎片化可能性增加的问题,即通过多个算法模块统一管理一内存区域减少了内存碎片化的可能性,并且通过统一管理同一内存区域使得每个算法模块在获取每个算法模块的上一算法模块的输出数据时可以不进行内存数据拷贝操作,从而提高了最终生成的程序的执行效率。
在步骤S202中,各个算法模块可通过算法模块交互协议从内存中读取到各个算法模块所需数据,并对读取到的数据信息处理而得到处理结果,将处理结果通过算法模块交互协议写入到同一内存区域;如此算法模块之间的直接交互过程均被封装在读/写内存的操作中,因此每个算法模块只需要关注自身输入/输出数据的正确与否,这有利于程序运行异常时,快速定位问题节点。
具体地,算法模块可包括自适应适配算子和业务算子。其中自适应适配算子位于业务算子之前,自适应适配算子用于通过算法模块交互协议从内存中读取所需数据,并将所需数据转换为对应业务算子指定格式的数据后传递给业务算子;接着业务算子对指定格式的数据进行处理,并将处理结果写入到内存,如此通过自适应适配算法使得内存和算法模块传输的数据格式相对固定,使得多个算法模块和内存之间的传输协议相对统一,可以使得算法模块交互协议变小。
另外,自适应适配算子可以先从内存拿到其对应的算法模块所需数据所在的内存地址;然后自适应适配算子基于内存传来的地址数据通过算法模块交互协议获取到所需数据并处理;接着自适应适配算子对应的业务算子对自适应适配算子处理后的数据进行处理,然后将处理结果写入到内存,还将处理结果所在地址反馈给内存,以便下一个算法模块或应用程序基于地址拿到业务算子的处理结果;如此通过算法模块和内存流转数据地址的方式,使得算法模块可以知晓其所需数据在内存中的哪个区域,便于算法模块的操作。
其中,自适应适配算子从内存拿到其对应的算法模块所需数据所在的内存地址的步骤可以包括:内存向自适应适配算子反馈以有序字节流形式呈现的内存地址,算法模块交互协议将以有序字节流形式呈现的内存地址反序列化成以数据结构体形式呈现的内存地址并反馈给自适应适配算子。业务算子将处理结果所在地址反馈给内存的步骤可以包括:业务算子向内存反馈以数据结构体形式呈现的内存地址,算法模块交互协议将以数据结构体形式呈现的内存地址序列化成以有序字节流形式呈现的内存地址并反馈给内存。
如图1所示,当所有算法模块执行完毕后,可以根据算法模块交互协议,可执行程序可从内存中获取输出结果。
请参阅图5,图5是本申请电子设备20一实施方式的结构示意图。本申请电子设备20包括处理器22,处理器22用于执行指令以实现本申请上述任一实施方式的方法及任意不冲突的组合所提供的方法。
处理器22还可以称为CPU(Central Processing Unit,中央处理单元)。处理器22可能是一种集成电路芯片,具有信号的处理能力。处理器22还可以是通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器,或者该处理器22也可以是任何常规的处理器等。
电子设备20还可进一步包括存储器21,用于存储处理器22运行所需的指令和数据。
请参阅图6,图6为本申请实施方式中计算机可读存储介质的结构示意图。本申请实施例的计算机可读存储介质30存储有指令/程序数据31,该指令/程序数据31被执行时实现本申请上述方法任一实施例以及任意不冲突的组合所提供的方法。其中,该指令/程序数据31可以形成程序文件以软件产品的形式存储在上述存储介质30中,以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施方式方法的全部或部分步骤。而前述的存储介质30包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质,或者是计算机、服务器、手机、平板等设备。
在本申请所提供的几个实施例中,应该理解到,所揭露的***,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上仅为本申请的实施方式,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。
Claims (13)
1.一种编程方法,其特征在于,所述方法包括:
提供多个算法模块的连接关系图;
基于所述连接关系图生成统一的算法模块交互协议;
基于所述算法模块交互协议生成可执行程序;
其中,所述算法模块交互协议定义:所述多个算法模块映射到同一内存区域,所述多个算法模块通过所述算法模块交互协议对所述同一内存区域进行所述多个算法模块之间复用的数据的读写。
2.根据权利要求1所述的编程方法,其特征在于,所述同一内存区域为所述多个算法模块通过地址映射方法能够直接进行读写的内存区域的交集。
3.根据权利要求1所述的编程方法,其特征在于,所述算法模块交互协议定义所述连接关系图中相邻的两个算法模块之间通过内存进行数据中转。
4.根据权利要求1所述的编程方法,其特征在于,所述基于所述算法模块交互协议生成可执行程序,包括:
对算法模型交互协议和多个算法模块的代码进行交叉编译而生成所述可执行程序。
5.根据权利要求4所述的编程方法,其特征在于,所述算法模块的代码包括自适应适配算子的代码和业务算子的代码;
其中,所述可执行程序定义:在一算法模块中,所述自适应适配算子设置于所述业务算子之前,且所述自适应适配算子用于将所述算法模块所需数据处理成所述业务算子指定格式的数据并传给所述业务算子。
6.根据权利要求5所述的编程方法,其特征在于,所述算法模块的代码包括算法模块的模型代码,所述对算法模型交互协议和多个算法模块的代码进行交叉编译而生成所述可执行程序,之前包括:
提供训练后的所述算法模块的模型;
将所述模型转换为第一代码;
给出所述第一代码的所有实现方式组合,其中,所述实现方式组合包括所述第一代码中的各个模块的一实现方式;
将各个实现方式组合编译而得到第一代码的各个实现方式组合的可执行文件;
运行各个可执行文件而得到各个实现方式组合的运行性能参数;
基于运行性能参数确定优化后的实现方式组合,以得到所述算法模块的模型代码。
7.根据权利要求6所述的编程方法,其特征在于,所述将所述模型转换为第一代码,包括:
将所述模型转换为神经网络交换格式;
对神经网络交换格式的模型进行优化并转换为所述第一代码;
其中,所述神经网络交换格式包括模块信息和函数信息;所述模块信息包括全局变量和符号表;所述函数信息包含函数名、函数的返回值和参数类型。
8.根据权利要求6所述的编程方法,其特征在于,所述基于运行性能参数确定优化后的实现方式组合,以得到所述算法模块的模型代码,包括:
基于运行性能参数确定优化后的实现方式组合,得到第二代码;
通过编译器将所述第二代码编译成预设硬件平台的模型代码。
9.一种可执行程序的执行方法,其特征在于,所述可执行程序基于多个算法模块的代码和算法模块交互协议生成,所述方法包括:
将待处理数据输入到内存;
通过所述算法模块交互协议按照顺序执行所述多个算法模块,以对所述待处理数据进行处理而得到所述可执行程序的输出结果;
其中,所述算法模块交互协议定义:所述多个算法模块映射到同一内存区域,所述多个算法模块通过所述算法模块交互协议对所述同一内存区域进行所述多个算法模块之间复用的数据的读写。
10.根据权利要求9所述的执行方法,其特征在于,所述通过所述算法模块交互协议按照顺序执行所述多个算法模块,包括:
各个算法模块通过所述内存获取到其所需数据所在的内存地址;
基于所述内存地址并通过所述算法模块交互协议获取到所述所需数据;
对所述所需数据进行处理得到处理结果,将所述处理结果写入到所述同一内存区域,并将所述处理结果所在内存地址反馈给内存,
其中,在所述算法模块为所述顺序中的第一个算法模块的情况下,所述算法模块所需数据为所述待处理数据;在所述算法模块不为所述顺序中的第一个算法模块的情况下,所述各个算法模块所需数据为在所述顺序中所述算法模块的上一个算法模块的处理结果。
11.根据权利要求10所述的执行方法,其特征在于,
所述各个算法模块通过所述内存获取到其所需数据所在的内存地址,包括:获得内存反馈的以有序字节流形式呈现的所述所需数据所在的内存地址;将所述所需数据所在的内存地址从有序字节流形式反序列化成结构体形式,并传给所述算法模块;
所述将所述处理结果所在内存地址反馈给内存,包括:所述算法模块反馈以结构体形式呈现的所述处理结果所在内存地址;将所述内存地址从结构体形式序列化成有序字节流形式,并传给内存。
12.一种电子设备,其特征在于,所述电子设备包括处理器,所述处理器用于执行指令以实现权利要求1-11中任一项所述的方法。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有指令/程序数据,所述指令/程序数据用于被执行以实现权利要求1-11中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211071959.5A CN115167833B (zh) | 2022-09-02 | 2022-09-02 | 编程方法、可执行程序的执行方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211071959.5A CN115167833B (zh) | 2022-09-02 | 2022-09-02 | 编程方法、可执行程序的执行方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115167833A CN115167833A (zh) | 2022-10-11 |
CN115167833B true CN115167833B (zh) | 2022-12-02 |
Family
ID=83480998
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211071959.5A Active CN115167833B (zh) | 2022-09-02 | 2022-09-02 | 编程方法、可执行程序的执行方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115167833B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109445944A (zh) * | 2018-10-25 | 2019-03-08 | 武汉虹旭信息技术有限责任公司 | 一种基于dpdk的网络数据采集处理***及其方法 |
CN111638976A (zh) * | 2020-05-16 | 2020-09-08 | 中信银行股份有限公司 | 基于共享内存的数据传输方法及*** |
CN112527464A (zh) * | 2020-12-18 | 2021-03-19 | 上海万向区块链股份公司 | 基于区块链的虚拟机内存自动扩容***和方法 |
WO2021098509A1 (zh) * | 2019-11-18 | 2021-05-27 | 北京迈格威科技有限公司 | 神经网络联合编译的方法、装置和电子设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9003240B2 (en) * | 2012-08-28 | 2015-04-07 | Nec Laboratories America, Inc. | Blackbox memory monitoring with a calling context memory map and semantic extraction |
-
2022
- 2022-09-02 CN CN202211071959.5A patent/CN115167833B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109445944A (zh) * | 2018-10-25 | 2019-03-08 | 武汉虹旭信息技术有限责任公司 | 一种基于dpdk的网络数据采集处理***及其方法 |
WO2021098509A1 (zh) * | 2019-11-18 | 2021-05-27 | 北京迈格威科技有限公司 | 神经网络联合编译的方法、装置和电子设备 |
CN111638976A (zh) * | 2020-05-16 | 2020-09-08 | 中信银行股份有限公司 | 基于共享内存的数据传输方法及*** |
CN112527464A (zh) * | 2020-12-18 | 2021-03-19 | 上海万向区块链股份公司 | 基于区块链的虚拟机内存自动扩容***和方法 |
Non-Patent Citations (1)
Title |
---|
并行计算的内存访问方法;林芝;《数字技术与应用》;20130515(第05期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN115167833A (zh) | 2022-10-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111045655B (zh) | 一种页面渲染的方法、装置、渲染服务器和存储介质 | |
CN108280023B (zh) | 任务执行方法、装置和服务器 | |
US20090328016A1 (en) | Generalized expression trees | |
CN110442441B (zh) | 数据处理方法、装置、可读存储介质及终端设备 | |
CN109408354B (zh) | 应用组件的数据处理方法和装置 | |
US20200150937A1 (en) | Advanced machine learning interfaces | |
CN101965561A (zh) | 用于异步方法的声明性支持 | |
CN115639980A (zh) | 一种低代码平台可拖拽的前端逻辑编排方法及装置 | |
CN108038212A (zh) | 一种数据交互方法、装置、***、设备和存储介质 | |
US10489167B2 (en) | Dynamically binding data in an application | |
US10496423B2 (en) | Method for opening up data and functions of terminal application based on reconstruction technology | |
US8935657B2 (en) | Model-to-model transformation by kind | |
CN111240772A (zh) | 一种基于区块链的数据处理方法、装置及存储介质 | |
CN113010168B (zh) | 一种基于场景树的用户界面生成方法 | |
CN114791808A (zh) | 一种数据流图生成方法及装置 | |
US7788246B2 (en) | Linguistic structure for data flow diagrams | |
CN115167833B (zh) | 编程方法、可执行程序的执行方法及装置 | |
CN115469860B (zh) | 基于指令集的需求到软件领域模型的自动生成方法及*** | |
CN113672222B (zh) | 一种应用程序接口管理装置及其构建方法 | |
CN109324838A (zh) | 单片机程序的执行方法、执行装置及终端 | |
CN114911541A (zh) | 配置信息的处理方法、装置、电子设备及存储介质 | |
CN111126012B (zh) | 定制生成表达式方法及装置 | |
CN113961238A (zh) | 对象转换方法、装置及电子设备和存储介质 | |
CN112363700A (zh) | 智能合约的协同创建方法、装置、计算机设备和存储介质 | |
Blunk et al. | Efficient Development of Domain-Specific Simulation Modelling Languages and Tools |
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 |