算法调用方法、电子设备及存储介质
文献发布时间:2023-06-19 11:26:00
技术领域
本发明涉及算法集成技术领域,尤其涉及一种算法调用方法、电子设备及存储介质。
背景技术
随着计算能力及通讯速率的提升,当今的软件涉及大量复杂的数据处理算法,很多算法由第三方提供。算法的集成工作不仅与算法接口信息和调用规范相关,还涉及了操作系统接口、线程多任务管理、中断管理、硬件资源同步、程序语言特性等大量知识。导致算法集成过程繁杂易出错。
另一方面,算法的更新、计算任务的变化均会导致软件代码的修改。为避免代码修改引入的潜在错误,需要开展相应的测试、调试、乃至代码认证等工作。这导致软件修改过程缓慢,开发成本高。
发明内容
本发明实施例提供一种算法调用方法、电子设备及存储介质,用于至少解决上述技术问题之一。
第一方面,本发明实施例提供一种算法调用方法,包括:
构建算法库,所述算法库中的所有算法的实现函数具有约定的接口规范;
向开发人员提供任务属性描述和函数调用描述的输入端口;
响应于开发人员通过所述输入端口输入的任务属性描述和函数调用描述生成计算任务信息文件;
至少读取所述算法库信息文件,并链接所述算法库通过所述预定的接口规范调用相应算法生成可执行文件。
第二方面,本发明实施例提供一种存储介质,所述存储介质中存储有一个或多个包括执行指令的程序,所述执行指令能够被电子设备(包括但不限于计算机,服务器,或者网络设备等)读取并执行,以用于执行本发明上述任一项算法调用方法。
第三方面,提供一种电子设备,其包括:至少一个处理器,以及与所述至少一个处理器通信连接的存储器,其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明上述任一项算法调用方法。
第四方面,本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括存储在存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行上述任一项算法调用方法。
本发明实施例的有益效果在于:基于本发明的方法开发人员仅仅需要根据输入端口的引导输入任务属性描述和函数调用描述即可完成算法调用,无需对具体算法进行修改及调试。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为执行本发明的算法调用方法的系统原理框图;
图2为本发明的算法调用方法的一实施例的流程图;
图3为本发明的算法调用方法的另一实施例的流程图;
图4为本发明的算法调用方法的另一实施例的流程图;
图5为本发明的算法调用方法的另一实施例的流程图;
图6为本发明的算法调用方法的另一实施例的流程图;
图7为本发明中的运行模块主线程执行流程图;
图8为本发明中的运行模块计算任务线程执行流程图;
图9为本发明中的运行模块状态监控线程执行流程图;
图10为本发明的电子设备的一实施例的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
在本发明中,“模块”、“装置”、“系统”等指应用于计算机的相关实体,如硬件、硬件和软件的组合、软件或执行中的软件等。详细地说,例如,元件可以、但不限于是运行于处理器的过程、处理器、对象、可执行元件、执行线程、程序和/或计算机。还有,运行于服务器上的应用程序或脚本程序、服务器都可以是元件。一个或多个元件可在执行的过程和/或线程中,并且元件可以在一台计算机上本地化和/或分布在两台或多台计算机之间,并可以由各种计算机可读介质运行。元件还可以根据具有一个或多个数据包的信号,例如,来自一个与本地系统、分布式系统中另一元件交互的,和/或在因特网的网络通过信号与其它系统交互的数据的信号通过本地和/或远程过程来进行通信。
最后,还需要说明的是,在本文中,术语“包括”、“包含”,不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
如图1所示为执行本发明的算法调用方法的系统原理框图,在该实施例中各功能单元的作用及各功能单元间关系如下:
(1)计算任务信息文件:包含了各计算任务中对各算法实现函数的调用关系、函数名称、输入来源、输出位置及算法参数设置等,以及各计算任务的优先级、周期、任务输入数据来源以及任务输出数据目标位置信息。该计算任务信息文件由软件开发者编写或由算法集成辅助工具生成,并被运行模块读取。
(2)算法库信息文件(例如,算法库A信息文件和算法库B信息文件):包含了算法库名称、算法库内具体算法的实现函数的名称、以及具体算法的实现函数的运行参数。该算法库信息文件由算法开发者提供,遵循与运行模块约定的内容格式规范,并被运行模块读取。
(3)运行模块:软件的运行主体,包含了涉及操作系统接口、多任务管理、中断管理、硬件资源同步和程序语言特性等方面的内容。运行模块负责读取计算任务及算法库信息文件,根据其内容执行相应的计算任务并调用相应的算法。运行模块是生成可执行文件的必要单元。
(4)算法库:包含了一个或多个算法的实现函数。所有算法的实现函数均具有的,与运行模块约定的接口规范。算法库与运行模块链接,生成最终的可执行文件。
(5)算法接口源代码:包含待集成算法的实现函数入口地址信息,由各算法库信息文件经过诸如代码生成等方式转换获得。该单元主要针对编程语言为C或C++的情况下,运行模块无法定位算法函数的入口地址而引入。
(6)算法接口模块:经算法接口源代码编译获得,其格式可为目标文件或库文件。该模块主要针对编程语言为C或C++的情况下,与运行模块和算法库链接,辅助运行模块获得算法入口地址。
(7)可执行文件:经链接产生的执行计算任务的程序。
如图2所示为本发明的算法调用方法的一实施例的流程图,在该实施例中算法调用方法包括:
S11、构建算法库,所述算法库中的所有算法的实现函数具有约定的接口规范。
示例性地,算法使用的,与运行模块约定的接口。算法的提供者需遵循接口规范,保证运行模块可在代码不作修改的前提下调用任意算法。
S12、向开发人员提供任务属性描述和函数调用描述的输入端口;
S13、响应于开发人员通过所述输入端口输入的任务属性描述和函数调用描述生成计算任务信息文件。
示例性地,为执行不同的计算任务,完成对多类算法的集成和调用,将待集成算法及计算任务的信息,即软件中的“可变”部分,存储于一个或多个文件中。
S14、至少读取所述算法库信息文件,并链接所述算法库通过所述预定的接口规范调用相应算法生成可执行文件。
示例性地,该步骤由运行模块执行。抽取软件功能中涉及操作系统接口、多任务管理、中断管理、硬件资源同步和程序语言特性等方面的部分,并与算法及计算任务信息文件的读取及处理功能结合,构成独立于具体算法和计算任务的运行模块。
运行模块读取包含了待集成算法及计算任务信息的文件,根据文件中的计算任务信息,启动对应的一个或多个计算任务。在各计算任务中,依据文件中的算法信息,调用相应的算法。
基于本发明实施例的方法开发人员仅仅需要根据输入端口的引导输入任务属性描述和函数调用描述即可完成算法调用,无需对具体算法进行修改及调试。
在一些实施例中,本发明的算法调用方法还包括:预先建立对应于所述算法库的算法库信息文件。至少读取所述算法库信息文件,并链接所述算法库通过所述预定的接口规范调用相应算法生成可执行文件,包括:读取所述算法库信息文件和所述计算任务信息文件,并链接所述算法库通过所述预定的接口规范调用相应算法生成可执行文件。
在一些实施例中,运行模块借助程序流控制、函数指针以及进程、分区或线程间通信方式,改变程序指令的运行位置,实现计算任务和调用算法的改变。运行模块自身的代码不需修改或重新编译。
待集成算法信息包含了算法库名称、算法库内具体算法函数的名称、以及具体算法函数的运行参数。计算任务信息包括任务属性描述和函数调用描述。其中,任务属性描述包括各计算任务的优先级、周期、任务输入数据来源和任务输出数据目标位置中的至少一种;函数调用描述包括:各计算任务中对各算法实现函数的调用关系、函数名称、函数输入来源、函数输出位置和函数参数设置中的至少一种。
对于包含了待集成算法信息及计算任务信息的文件,其格式包括但不限于文本文件、格式化的文本文件(如XML、JSON、HTML)、二进制文件、程序源代码、目标文件、库文件以及可执行文件。
除程序源代码格式外,由于运行模块无需修改或重新编译,其格式还可为目标文件或库文件。通过提取待集成算法信息和计算任务信息,可改变软件的构建配置文件(如makefile、CMakeLists.txt、vcxproj项目文件等),将运行模块可与不同的算法库链接,结合为可执行文件。
如图3所示为本发明的算法调用方法的另一实施例的流程图,在该实施例中,读取所述算法库信息文件和所述计算任务信息文件,并链接所述算法库通过所述预定的接口规范调用相应算法生成可执行文件,包括:
S141、根据所述计算任务信息文件和所述算法库信息文件确定计算任务列表和各计算任务中的算法调用列表;
S142、读取与当前计算任务相关的硬件输入数据信号;
S143、读取与当前计算任务相关的算法调用列表及各算法参数对所述硬件输入数据信号进行处理。
示例性地,读取与当前计算任务相关的算法调用列表及各算法参数,通过多线程形式或者多进程形式或者多分区形式对所述硬件输入数据信号进行处理。
运行模块通过多线程或者多进程或者多分区机制,可支持多个计算任务同步运行。在多线程情况下,单一运行模块与一个或多个算法库链接,组成一个可执行文件,多个计算任务在可执行文件的进程空间内同时运行。在多进程或多分区情况下,多个运行模块与一个或多个算法库链接,构成多个可执行文件,这些可执行文件被自动或手动启动,实现多个计算任务的并行。
如图4所示为本发明的算法调用方法的另一实施例的流程图,在该实施例中还包括:
S21、当算法的编程语言为预设编程语言时,将相应的算法库信息文件转换为算法接口源代码。
S22、根据所述算法接口源代码生成算法接口模块,以辅助获得算法入口地址。
示例性地,预设编程语言为C或C++。当编程语言为C或C++时,运行模块无法预先定位算法库中的算法函数入口地址。针对该种情况,优选地,可将包含计算任务和算法信息的文件转换为算法接口代码,算法接口代码中包含了算法函数的入口定位实现。算法接口代码经过编译后,与运行模块及算法库链接,实现算法函数入口地址的定位。
如图5所示为本发明的算法调用方法的另一实施例的流程图,在该实施例中还包括:
S31、在开始读取与当前计算任务相关的硬件输入数据信号之前记录第一时刻;
S32、在对所述硬件输入信号处理之后记录第二时刻;
S33、根据所述第一时刻和第二时刻确定计算任务执行时间;
S34、当所述计算任务执行时间大于当前计算任务的周期时生成错误码,以用于判断当前计算任务的运行状态异常。
在一些实施例中,本发明的算法调用方法还包括:根据所述错误码监控计算任务的运行状态。
针对第三方算法可能存在内部错误,或运行时间难以保障等可靠性问题,优选地,在运行模块中包含了计算任务运行状态监控功能。该功能独立于各计算任务并与之并行,可实时地监控算法运行错误及计算任务超时问题,并作相应处理,例如采取报警、停机、计算任务重启等措施。运行状态监控功能可采用独立线程或进程的方式实现。在操作系统存在类似支持的情况下,该功能可通过创建并关联错误处理函数实现。
与现有技术相比较,本发明的有益效果在于:软件运行模块无需修改,即可集成并调用不同的算法,执行不同的计算任务。避免了反复修改、测试及调试代码,消除了软件代码变更引入错误的可能。提高了软件的开发效率和可靠性。
如图6所示为本发明的算法调用方法的另一实施例的流程图,该实施例参照以上功能单元的说明,从软件开发者的视角出发描述了本发明的算法调用方法,具体步骤如下:
(1)函数调用描述:软件开发人员在该步骤中描述各计算任务中对各算法实现函数的调用关系,包括函数名、输入来源、输出位置及算法参数设置等。该步骤的输入为算法库信息文件(由算法开发者提供)中的内容,软件开发人员输入的描述信息会被写入计算任务信息文件。在编程语言为C或C++的情况下,该步骤的输出还包含了算法接口源代码。
(2)任务属性描述:软件开发人员在该步骤描述各计算任务的优先级、周期、输入数据来源、以及输出数据目标位置等。该步骤的描述信息被写入计算任务信息文件。
(3)构建可执行文件:软件开发人员在该步骤运行构建工具(例如,直接运行链接器,或借助Makefile等构建工具),将算法库(由算法开发者提供)、运行模块及算法接口模块(编程语言为C或C++的情况下引入,由算法接口源代码编译获得)链接,生成最终的可执行文件。
在上述步骤中,软件开发人员仅需关注计算任务的设计和算法的选择,无需介入算法调用、操作系统接口、多线程任务管理及资源管理等代码实现细节。这一隔离的关键在于运行模块的设计,运行模块通过多线程或者多进程或者多分区机制,可支持多个计算任务同步运行。以多线程为例,结合图7、图8及图9,其可选的运行流程实施方式说明如下:
如图7所示为本发明中的运行模块主线程执行流程图,包括以下步骤:
(1)、硬件初始化:初始化与各计算任务相关的硬件,如串口、网络、总线接口卡、数字/模拟量采集卡等,打开包含计算任务及算法信息的文件端口;
(2)、读入计算任务及算法信息文件,获得计算任务列表,以及各计算任务中的算法调用列表;
(3)、分配存储空间:根据计算任务及算法信息,为后续的计算任务分配所需内存空间;
(4)、创建监控线程,用于监控各计算任务的运行状态;
(5)、设置计算任务线程属性:根据计算任务列表长度,逐个设定各计算任务的优先级及周期等属性;
(6)、创建计算任务线程,并判断线程创建是否完成,如果是则执行步骤7,如果否则执行步骤5;
(7)、等待结束中断信号,各计算任务线程和状态监控线程同步运行;
(8)、释放内存空间;
(9)、关闭与各计算任务相关的硬件,退出程序。
如图8所示为本发明中的运行模块计算任务线程执行流程图,包括以下步骤:
(1)、读取硬件时钟时间,用于后续的超时检查;
(2)、读取与当前计算任务相关的硬件输入数据信号;
(3)、读取当前计算任务相关的算法调用列表及各算法参数;
(4)、循环调用列表中的算法。例如,算法调用列表中有n个算法,对各个算法,逐次更新其输入数据,根据其实现函数入口地址进行调用,对调用返回值进行错误检查和处理,并更新各算法的输出结果(图中编号4-7);
(5)、更新计算任务输出结果(图中编号8);
(6)、读取硬件时钟时间,与上次读取结果相减获得计算时间。如超过当前计算任务规定周期,则向运行状态监控任务发送错误码;如小于规定周期,则暂停运行至周期结束(图中编号9-10)。
如图9所示为本发明中的运行模块状态监控线程执行流程图,包括以下步骤:
(1)读取计算任务列表,获取其中的第i个计算任务,i的初始取值为1;
(2)针对各计算任务线程,读取其错误码状态;
(3)如某线程发生错误,则停止该线程运行;
(4)如该线程的错误处理措施为重启,则利用初始参数,再次创建该计算任务线程。
以上运行流程实施方式为基于多线程的情形。如采用多进程或多分区的形式,则优选地,各计算任务以独立应用形式运行。每个独立应用中可仅包含一个主线程,计算任务线程(见图8)中的指令被移入主线程。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作合并,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在一些实施例中,本发明实施例提供一种非易失性计算机可读存储介质,所述存储介质中存储有一个或多个包括执行指令的程序,所述执行指令能够被电子设备(包括但不限于计算机,服务器,或者网络设备等)读取并执行,以用于执行本发明上述任一项算法调用方法。
在一些实施例中,本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括存储在非易失性计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行上述任一项算法调用方法。
在一些实施例中,本发明实施例还提供一种电子设备,其包括:至少一个处理器,以及与所述至少一个处理器通信连接的存储器,其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行算法调用方法。
在一些实施例中,本发明实施例还提供一种存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现算法调用方法。
图10是本申请另一实施例提供的执行算法调用方法的电子设备的硬件结构示意图,如图10所示,该设备包括:
一个或多个处理器1010以及存储器1020,图10中以一个处理器1010为例。
执行算法调用方法的设备还可以包括:输入装置1030和输出装置1040。
处理器1010、存储器1020、输入装置1030和输出装置1040可以通过总线或者其他方式连接,图10中以通过总线连接为例。
存储器1020作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本申请实施例中的算法调用方法对应的程序指令/模块。处理器1010通过运行存储在存储器1020中的非易失性软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例算法调用方法。
存储器1020可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据算法调用装置的使用所创建的数据等。此外,存储器1020可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器1020可选包括相对于处理器1010远程设置的存储器,这些远程存储器可以通过网络连接至算法调用装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置1030可接收输入的数字或字符信息,以及产生与算法调用装置的用户设置以及功能控制有关的信号。输出装置1040可包括显示屏等显示设备。
所述一个或者多个模块存储在所述存储器1020中,当被所述一个或者多个处理器1010执行时,执行上述任意方法实施例中的算法调用方法。
上述产品可执行本申请实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本申请实施例所提供的方法。
本申请实施例的电子设备以多种形式存在,包括但不限于:
(1)移动通信设备:这类设备的特点是具备移动通信功能,并且以提供话音、数据通信为主要目标。这类终端包括:智能手机(例如iPhone)、多媒体手机、功能性手机,以及低端手机等。
(2)超移动个人计算机设备:这类设备属于个人计算机的范畴,有计算和处理功能,一般也具备移动上网特性。这类终端包括:PDA、MID和UMPC设备等,例如iPad。
(3)便携式娱乐设备:这类设备可以显示和播放多媒体内容。该类设备包括:音频、视频播放器(例如iPod),掌上游戏机,电子书,以及智能玩具和便携式车载导航设备。
(4)服务器:提供计算服务的设备,服务器的构成包括处理器、硬盘、内存、系统总线等,服务器和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。
(5)其他具有数据交互功能的电子装置。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
- 算法调用方法、电子设备及存储介质
- 图像处理算法架构、算法调用方法、装置、存储介质及移动终端